diff --git a/assets/stats/content-copy-custom.png b/assets/stats/content-copy-custom.png new file mode 100644 index 00000000..eb8f4330 Binary files /dev/null and b/assets/stats/content-copy-custom.png differ diff --git a/css/simulator-ui/main.css b/css/simulator-ui/main.css index 5605b997..a2076c47 100644 --- a/css/simulator-ui/main.css +++ b/css/simulator-ui/main.css @@ -276,6 +276,9 @@ div.progressBarInner { #divResults tr.tableSpace { height: 10px; } +img.copyIcons { + cursor: pointer; +} #divBonusEditorMain { background-color: #DDEEFF; @@ -475,4 +478,21 @@ span.autoBonusStatus.good { } .invisible { visibility: hidden; +} + +#divNotice { + position: fixed; + bottom: 30px; + right: 0; + display: flex; + align-items: center; + justify-content: center; + width: 190px; + height: 65px; + border: 2px solid #6ae3ff; + border-right: none; + font-size: 15px; + font-weight: 600; + color: #ffffff; + background-color: #4EABF5; } \ No newline at end of file diff --git a/css/simulator-ui/selector.css b/css/simulator-ui/selector.css index da67bfda..456ac223 100644 --- a/css/simulator-ui/selector.css +++ b/css/simulator-ui/selector.css @@ -12,6 +12,7 @@ #divShipSelResults, #divEquipSelResults { overflow-y: scroll; height: 504px; + overscroll-behavior: contain; } div.selectResult:hover { cursor: pointer; @@ -84,6 +85,7 @@ div.selButtonBack > :last-child { flex-wrap: wrap; font-family: Verdana,Arial,sans-serif; font-size: 1.1em; + overscroll-behavior: contain; } #divShipSelButtonsShip div.remodelButtonWrap { display: flex; @@ -107,6 +109,7 @@ div.selButtonBack > :last-child { margin: 15px 30px; font-family: Verdana,Arial,sans-serif; font-size: 1.1em; + overscroll-behavior: contain; } #divEquipSelButtonsEquip div.equipButtonWrap { display: flex; diff --git a/js/data/mst_slotitem_bonus.json b/js/data/mst_slotitem_bonus.json index f733ff91..165ed315 100644 --- a/js/data/mst_slotitem_bonus.json +++ b/js/data/mst_slotitem_bonus.json @@ -8575,6 +8575,39 @@ } ] }, + { + "ids": [531], + "bonuses": [ + { + "bonus": { "houm": 1 }, + "level": 4 + }, + { + "bonus": { "houg": 1 }, + "level": 5 + }, + { + "bonus": { "kaih": 1 }, + "level": 6 + }, + { + "bonus": { "houm": 1 }, + "level": 7 + }, + { + "bonus": { "houg": 1 }, + "level": 8 + }, + { + "bonus": { "kaih": 1 }, + "level": 9 + }, + { + "bonus": { "houm": 1 }, + "level": 10 + } + ] + }, { "ids": [533], "bonuses": [ diff --git a/js/kcships.js b/js/kcships.js index ced419ca..8b6a25b4 100644 --- a/js/kcships.js +++ b/js/kcships.js @@ -1561,6 +1561,9 @@ Ship.prototype.getAACItype = function(atypes) { hasID[this.equips[i].mid] = hasID[this.equips[i].mid] + 1 || 1; } + if ([330,346,357,537,538,968].includes(this.mid)) { + if (this.equips.filter(eq => eq.mid == 533).length >= 2 && this.equips.find(eq => eq.btype == B_RADAR && eq.AA >= 4)) types.push(48); + } if (this.sclass == 54) { //Akizuki-class if (atypes[A_HAGUN] >= 2 && this.equiptypesB[B_RADAR]) types.push(1); if (atypes[A_HAGUN] && this.equiptypesB[B_RADAR]) types.push(2); diff --git a/js/kcsim.js b/js/kcsim.js index d82ff37c..063f53bb 100644 --- a/js/kcsim.js +++ b/js/kcsim.js @@ -104,9 +104,10 @@ var AACIDATA = { 45:{num:5,rate:.5,mod:1.55,equip:'HR',num1:1}, 46:{num:8,rate:.6,mod:1.55,equip:'MCR',num1:1}, 47:{num:2,rate:.7,mod:1.3,equip:'MG',num1:1}, + 48:{num:8,rate:.65,mod:1.75,equip:'HHR',num1:1}, }; (() => { - let orderKnown = [38,39,40,42,41,10,43,46,11,25,1,34,44,26,4,2,35,36,27,45,19,21,29,16,14,3,5,6,28,37,33,30,8,13,15,7,20,24,32,12,31,47,17,18,22,9,23]; + let orderKnown = [38,39,40,42,41,10,43,46,11,25,48,1,34,44,26,4,2,35,36,27,45,19,21,29,16,14,3,5,6,28,37,33,30,8,13,15,7,20,24,32,12,31,47,17,18,22,9,23]; let orderUnknown = Object.keys(AACIDATA).map(key => +key).filter(type => !orderKnown.includes(type)).sort((a,b) => AACIDATA[a].num != AACIDATA[b].num ? AACIDATA[b].num - AACIDATA[a].num : AACIDATA[a].mod != AACIDATA[b].mod ? AACIDATA[b].mod - AACIDATA[a].mod : +a-+b); let orderAll = [], n = 0; for (let id of orderKnown) { diff --git a/js/simulator-ui/cmp.js b/js/simulator-ui/cmp.js index 765f1e8a..0a344fff 100644 --- a/js/simulator-ui/cmp.js +++ b/js/simulator-ui/cmp.js @@ -119,6 +119,18 @@ let messages = { 'equip_cat_Interceptor': 'Interceptor', 'equip_cat_Other': 'Other', }, + 'results': { + 'retreat_rate': 'Retreat', + 'S_rate': 'S Rate', + 'flagsunk_rate': 'Flagship Sunk Rate', + 'avg_per_S': 'Avg Resource Per S', + 'avg_per_flagsunk': 'Avg Resource Per Flagship Sunk', + 'fuel': 'Fuel', + 'ammo': 'Ammo', + 'steel': 'Steel', + 'baux': 'Bauxite', + 'buckets': 'Buckets', + }, }, ja: { 'ui_search': '検索', @@ -171,6 +183,18 @@ let messages = { 'equip_cat_Interceptor': '局地戦闘機', 'equip_cat_Other': 'その他', }, + 'results': { + 'retreat_rate': '撤退率', + 'S_rate': 'S率', + 'flagsunk_rate': '旗艦撃沈率', + 'avg_per_S': 'S勝利あたり', + 'avg_per_flagsunk': '旗艦撃沈あたり', + 'fuel': '燃料', + 'ammo': '弾薬', + 'steel': '鋼材', + 'baux': 'ボーキ', + 'buckets': 'バケツ', + }, }, } for (let id in SHIPDATA) { diff --git a/js/simulator-ui/fleet-editor.js b/js/simulator-ui/fleet-editor.js index b3dbbd7e..57dcb1e4 100644 --- a/js/simulator-ui/fleet-editor.js +++ b/js/simulator-ui/fleet-editor.js @@ -508,6 +508,9 @@ var UI_FLEETEDITOR = Vue.createApp({ updateCode: function() { this.loadCode = JSON.stringify(CONVERT.uiToSaveFleet(this.fleet)); }, + onclickSelectAll: function(event) { + event.target.select(); + }, getStatTotal: function(ship,stat) { if (stat == 'range') return Math.max(ship.statsBase.range,ship.statsEquip.range) + (ship.statsBonus.range || 0); diff --git a/js/simulator-ui/ui-main.js b/js/simulator-ui/ui-main.js index 98017dff..3832baab 100644 --- a/js/simulator-ui/ui-main.js +++ b/js/simulator-ui/ui-main.js @@ -173,6 +173,9 @@ var UI_MAIN = Vue.createApp({ lang: 'en', canSave: false, + + showNoticeCount: 0, + noticeTxt: '', }), mounted: function() { this.$i18n.locale = localStorage.sim2_lang || 'en'; @@ -524,6 +527,33 @@ var UI_MAIN = Vue.createApp({ SIM.cancelRun = true; }, + onclickCopyResults: function(typeString) { + let t = this.$i18n.t; + let txt = ''; + // txt += `${t('results.retreat_rate')}: ${Math.round(this.results.retreat*1000)/10}%, `; + if (typeString == 'S') { + txt += `${t('results.S_rate')}: ${Math.round(this.results.rankS*1000)/10}% +${t('results.avg_per_S')} +${t('results.fuel')}: ${this.results.fuelS} +${t('results.ammo')}: ${this.results.ammoS} +${t('results.steel')}: ${this.results.steelS} +${t('results.baux')}: ${this.results.bauxS} +${t('results.buckets')}: ${this.results.bucketS}`; + } else if (typeString == 'flagsunk') { + txt += `${t('results.flagsunk_rate')}: ${Math.round(this.results.flagSunk*1000)/10}% +${t('results.avg_per_flagsunk')} +${t('results.fuel')}: ${this.results.fuelSunk} +${t('results.ammo')}: ${this.results.ammoSunk} +${t('results.steel')}: ${this.results.steelSunk} +${t('results.baux')}: ${this.results.bauxSunk} +${t('results.buckets')}: ${this.results.bucketSunk}`; + } + navigator.clipboard.writeText(txt); + this.noticeTxt = 'Copied to Clipboard'; + let n = ++this.showNoticeCount; + setTimeout(() => n == this.showNoticeCount && (this.showNoticeCount = 0), 1000); + }, + onclickDeckbuilder: function() { UI_DECKBUILDERIMPORTER.doOpen(); }, @@ -698,6 +728,8 @@ var UI_DECKBUILDERIMPORTER = Vue.createApp({ methods: { doOpen: function() { this.active = true; + let dataDb = this.getDataDb(); + this.textExport = JSON.stringify(dataDb); }, getDataDb: function() { @@ -762,6 +794,9 @@ var UI_DECKBUILDERIMPORTER = Vue.createApp({ let dataDb = this.getDataDb(); window.open(CONST.urlLBASSim + encodeURI(JSON.stringify(dataDb))); }, + onclickSelectAll: function(event) { + event.target.select(); + }, }, }).component('vmodal',COMMON.CMP_MODAL).mount('#divDeckbuilderImporter'); diff --git a/simulator.html b/simulator.html index 2122ffc5..fc91a1c9 100644 --- a/simulator.html +++ b/simulator.html @@ -408,7 +408,7 @@

Statistics

-
Avg Resource Per S:
+
Avg Resource Per S:
@@ -419,7 +419,7 @@

Statistics

Fuel{{results.fuelS}}
Ammo{{results.ammoS}}
-
Avg Resource Per Flagship Sunk:
+
Avg Resource Per Flagship Sunk:
@@ -439,11 +439,14 @@

Statistics


+ +
{{noticeTxt}}
Change Log:
+
2024-06-29 - Statistics: Copy text summary to clipboard buttons
2024-03-13 - Smoke activation rate provisional formula, see Show Advanced
2024-03-05 - Provisional Atoll node setting
2024-03-03 - Mark fleet preview ship banner if unknown or changed stats
@@ -631,7 +634,7 @@

Statistics

Load options:
From text:
-
+
Fleet:
+
@@ -1095,7 +1098,7 @@

Statistics

-
+
Fuel{{results.fuelSunk}}
Ammo{{results.ammoSunk}}