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
:
+
Avg Resource Per
:
| {{results.fuelS}} |
| {{results.ammoS}} |
@@ -419,7 +419,7 @@ Statistics
-
Avg Resource Per
:
+
Avg Resource Per
:
| {{results.fuelSunk}} |
| {{results.ammoSunk}} |
@@ -439,11 +439,14 @@ Statistics
+
+ {{noticeTxt}}
+
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
-
+
Fleet: