Last active
April 13, 2020 11:06
-
-
Save Nishisonic/53fe00afcb21fe313ee0a5bec6d64424 to your computer and use it in GitHub Desktop.
【拡張版script】TsunDB Client
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
load("script/ScriptData.js"); | |
data_prefix = "TsunDB"; | |
BufferedReader = Java.type("java.io.BufferedReader"); | |
InputStreamReader = Java.type("java.io.InputStreamReader"); | |
OutputStreamWriter = Java.type("java.io.OutputStreamWriter"); | |
URL = Java.type("java.net.URL"); | |
Collectors = Java.type("java.util.stream.Collectors"); | |
GlobalContext = Java.type("logbook.data.context.GlobalContext"); | |
DataType = Java.type("logbook.data.DataType"); | |
BattlePhaseKind = Java.type("logbook.dto.BattlePhaseKind"); | |
ApplicationMain = Java.type("logbook.gui.ApplicationMain"); | |
var VERSION = "1.0.3"; | |
function update(type, data) { | |
switch (type) { | |
case DataType.MAPINFO: // 海域情報 | |
var mapInfo = JSON.parse(data.jsonObject.api_data.api_map_info); | |
var result = mapInfo | |
.map(function (map) { | |
var cleared = map.api_cleared.intValue() === 1; | |
var eventMap = map.api_eventmap; | |
var gaugeNum = map.api_gauge_num ? map.api_gauge_num.intValue() : 0; | |
if (eventMap && eventMap.api_selected_rank) { | |
return { | |
id: map.api_id, | |
gaugeNum: gaugeNum, | |
currentHP: eventMap.api_now_maphp | |
? eventMap.api_now_maphp.intValue() | |
: 0, | |
maxHP: eventMap.api_max_maphp | |
? eventMap.api_max_maphp.intValue() | |
: 0, | |
difficulty: eventMap.api_selected_rank.intValue(), | |
cleared: cleared, | |
}; | |
} else { | |
return { | |
id: map.api_id, | |
gaugeNum: gaugeNum, | |
currentHP: 0, | |
maxHP: 0, | |
difficulty: 0, | |
cleared: cleared, | |
}; | |
} | |
}) | |
.reduce(function (previous, current) { | |
previous[current.id] = { | |
difficulty: current.difficulty, | |
gaugeNum: current.gaugeNum, | |
currentHP: current.currentHP, | |
maxHP: current.maxHP, | |
cleared: current.cleared, | |
}; | |
return previous; | |
}, {}); | |
setTmpData("mapInfo", result); | |
break; | |
case DataType.BATTLE_RESULT: // 通常戦闘結果 | |
case DataType.COMBINED_BATTLE_RESULT: // 連合戦闘結果 | |
var shipCount = GlobalContext.shipMap.size(); | |
var itemCount = GlobalContext.itemMap.size(); | |
if ( | |
GlobalContext.maxChara() > shipCount && | |
GlobalContext.maxSlotitem() > itemCount | |
) { | |
sendShipDropData(data); | |
} | |
break; | |
case DataType.CREATE_ITEM: // 開発 | |
sendDevelopmentData(data); | |
break; | |
default: | |
break; | |
} | |
} | |
function sendShipDropData(data) { | |
var lastBattleDto = GlobalContext.lastBattleDto; | |
var json = data.jsonObject.api_data; | |
var mapCellDto = lastBattleDto.mapCellDto; | |
var mapInfo = getData("mapInfo"); | |
if (!(lastBattleDto && mapCellDto && mapInfo)) return; | |
var maps = mapCellDto.map; | |
var mapId = maps[0] * 10 + maps[1]; | |
var map = maps[0] + "-" + maps[1]; | |
if (mapInfo[mapId] === undefined) return; | |
var node = maps[2]; | |
var rank = lastBattleDto.rank.rank(); | |
var cleared = mapInfo[mapId].cleared; | |
var apiData = lastBattleDto.phase1.json; | |
var enemyComp = { | |
ship: JSON.parse(apiData.api_ship_ke), | |
lvl: JSON.parse(apiData.api_ship_lv), | |
hp: JSON.parse(apiData.api_e_maxhps), | |
stats: apiData.api_eParam ? JSON.parse(apiData.api_eParam) : [], | |
equip: JSON.parse(apiData.api_eSlot), | |
formation: Number(apiData.api_formation[1]), | |
mapName: lastBattleDto.questName, | |
compName: lastBattleDto.enemyName, | |
baseExp: Number(json.api_get_base_exp), | |
}; | |
if (maps[0] > 10) { | |
enemyComp.mapStats = { | |
gaugeNum: mapInfo[mapId].gaugeNum, | |
currentHP: mapInfo[mapId].currentHP, | |
maxHP: mapInfo[mapId].maxHP, | |
}; | |
} | |
if (apiData.api_ship_ke_combined) { | |
enemyComp.shipEscort = JSON.parse(apiData.api_ship_ke_combined); | |
enemyComp.lvlEscort = JSON.parse(apiData.api_ship_lv_combined); | |
enemyComp.hpEscort = JSON.parse(apiData.api_e_maxhps_combined); | |
enemyComp.statsEscort = JSON.parse(apiData.api_eParam_combined); | |
enemyComp.equipEscort = JSON.parse(apiData.api_eSlot_combined); | |
} | |
if ( | |
[BattlePhaseKind.LD_AIRBATTLE, BattlePhaseKind.COMBINED_LD_AIR].indexOf( | |
lastBattleDto.phase1.kind | |
) >= 0 | |
) { | |
enemyComp.isAirRaid = true; | |
} | |
var hqLvl = lastBattleDto.hqLv; | |
var difficulty = mapInfo[mapId].difficulty; | |
var ship = lastBattleDto.isDropShip() ? lastBattleDto.dropShipId : -1; | |
var counts = Java.from(GlobalContext.shipMap.values().toArray()) | |
.filter(function (_, index, array) { | |
return ship === -1 || index < array.length - 1; | |
}) | |
.map(function (ship) { | |
return ship.charId; | |
}) | |
.reduce(function (previous, charId) { | |
previous[charId] = (previous[charId] | 0) + 1; | |
return previous; | |
}, {}); | |
var result = { | |
map: map, | |
node: node, | |
rank: rank, | |
cleared: cleared, | |
enemyComp: enemyComp, | |
hqLvl: hqLvl, | |
difficulty: difficulty, | |
ship: ship, | |
counts: counts, | |
}; | |
send("drops", result); | |
} | |
function sendDevelopmentData(data) { | |
var json = data.jsonObject.api_data; | |
var hqLvl = GlobalContext.hqLevel(); | |
var secretary = GlobalContext.secretary; | |
if (!(hqLvl > 0 && secretary)) return; | |
json.api_get_items.forEach(function (e) { | |
send("development", { | |
hqLvl: hqLvl, | |
flagship: { | |
id: secretary.shipId, | |
type: secretary.stype, | |
lvl: secretary.lv, | |
}, | |
resources: { | |
fuel: Number(data.getField("api_item1")), | |
ammo: Number(data.getField("api_item2")), | |
steel: Number(data.getField("api_item3")), | |
bauxite: Number(data.getField("api_item4")), | |
}, | |
result: Number(e.api_slotitem_id), | |
success: e.api_slotitem_id.intValue() !== -1 ? 1 : 0, | |
}); | |
}); | |
} | |
function send(target, json) { | |
var result = push( | |
"https://tsundb.kc3.moe/api/" + target, | |
JSON.stringify(json) | |
); | |
ApplicationMain.main.printMessage( | |
"TsunDBへ送信(code:" + result.statusCode + ")" | |
); | |
} | |
function push(urlString, data) { | |
var url = new URL(urlString); | |
var con = null; | |
var response = null; | |
try { | |
con = url.openConnection(); | |
con.setRequestMethod("PUT"); | |
con.setDoOutput(true); | |
con.setRequestProperty("Content-Type", "application/json"); | |
con.setRequestProperty("tsun-ver", "Kasumi Kai"); | |
con.setRequestProperty("dataorigin", "LogbookEx"); | |
con.setRequestProperty("version", VERSION); | |
var out = new OutputStreamWriter(con.getOutputStream(), "UTF-8"); | |
out.write(data); | |
out.close(); | |
con.connect(); | |
var reader = new BufferedReader( | |
new InputStreamReader(con.getInputStream(), "UTF-8") | |
); | |
response = reader.lines().collect(Collectors.joining()); | |
} finally { | |
if (con) { | |
con.disconnect(); | |
return { statusCode: con.responseCode, data: response }; | |
} | |
return { statusCode: -1, data: response }; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment