From c659a92e26071a562b9315365070c08489877ecd Mon Sep 17 00:00:00 2001 From: FreezePhoenix <24441367+FreezePhoenix@users.noreply.github.com> Date: Thu, 23 Nov 2023 10:02:45 -0500 Subject: [PATCH 1/7] Update runner_functions.js to include equip_batch --- js/runner_functions.js | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/js/runner_functions.js b/js/runner_functions.js index 4371deb..d1d8c55 100644 --- a/js/runner_functions.js +++ b/js/runner_functions.js @@ -550,6 +550,26 @@ function consume(num) // consumes or uses an inventory item return parent.push_deferred("equip"); } +function equip_batch(data) { + if (!Array.isArray(data)) { + game_log("Can't equip_batch non-array"); + return rejecting_promise({reason:"invalid"}); + } + if (data.length > 15) { + game_log("Can't equip_batch more than 15 items"); + return rejecting_promise({reason:"invalid"}); + } + for (let i = 0; i < data.length; i++) { + let num = data[i].num; + if (num < 0) { + game_log("Can't equip "+num); + return rejecting_promise({reason:"invalid"}); + } + } + parent.socket.emit("equip_batch", data); + return parent.push_deferred("equip_batch"); +} + function equip(num,slot) // slot is optional { if(num<0) @@ -1981,4 +2001,4 @@ if(parent.is_cli) if(parent.ls_emulation) window._localStorage=parent.ls_emulation; window.cli_require=parent.cli_require; } -code_draw(); \ No newline at end of file +code_draw(); From 534e8dc580b97d15ebed4c21b59107aff4edde0b Mon Sep 17 00:00:00 2001 From: FreezePhoenix <24441367+FreezePhoenix@users.noreply.github.com> Date: Thu, 23 Nov 2023 10:06:09 -0500 Subject: [PATCH 2/7] Update server.js (implement equip_batch) --- node/server.js | 73 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 72 insertions(+), 1 deletion(-) diff --git a/node/server.js b/node/server.js index 6045951..3cd2ef4 100644 --- a/node/server.js +++ b/node/server.js @@ -4127,7 +4127,13 @@ function init_io() { } else { climit = round(climit / 4); } - if (method == "cm") { + if (method == "equip_batch") { + var cost = 1; + if(Array.isArray(data)) { + cost += data.length / 2; + } + add_call_cost(CC.equip * cost); + } else if (method == "cm") { var add = 1; var len = JSON.stringify(data.message).length; var mult = 1; @@ -6398,6 +6404,71 @@ function init_io() { return socket.emit("game_response", { response: "exception", place: "upgrade", failed: true }); } }); + socket.on("equip_batch", function (data) { + let player = players[socket.id]; + if (!player) { + return; + } + player.c = {}; + if (Array.isArray(data)) { + data.length = min(data.length, 15); + let resolve = []; + let penalty = 0; + for (let i = 0; i < data.length; i++) { + let equip_def = data[i]; + equip_def.num = to_number(equip_def.num); + if (equip_def.num >= player.items.length) { + resolve.push("invalid"); + break; + } + var item = player.items[equip_def.num]; + if (!item) { + resolve.push("no_item"); + break; + } + if (item.b) { + resolve.push("item_blocked"); + break; + } + if (item.name == "placeholder") { + resolve.push("item_placeholder"); + break; + } + var def = G.items[item.name]; + def.iname = item.name; //just for orb name checks [08/10/16] + if (!def) { + resolve.push("no_item"); + break; + } + var slot = equip_def.slot || def.type; + var comp = can_equip_item(player, def, slot); + if (comp == "no") { + resolve.push("cant_equip"); + break; + } + slot = comp; + var existing = player.slots[slot]; + player.slots[slot] = player.items[equip_def.num]; + player.cslots[slot] = cache_item(player.slots[slot]); + if (existing && existing.b) { + existing = null; + } + player.items[equip_def.num] = existing; + player.citems[equip_def.num] = cache_item(existing); + penalty += 120; + resolve.push({ num: equip_def.num, slot }); + } + if("penalty_cd" in player.s) { + player.s.penalty_cd.ms = min(player.s.penalty_cd.ms + penalty, 120000); + } else { + player.s.penalty_cd = { ms: penalty }; + } + resend(player, "reopen+u+cid"); + success_response("data", resolve); + } else { + return fail_response("invalid"); + } + }); socket.on("equip", function (data) { var player = players[socket.id]; if (!player) { From 7860f28c1be8df43a688733fbe4efddb6732dd0f Mon Sep 17 00:00:00 2001 From: FreezePhoenix <24441367+FreezePhoenix@users.noreply.github.com> Date: Thu, 23 Nov 2023 10:08:43 -0500 Subject: [PATCH 3/7] Fix prettier errors --- node/server.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/node/server.js b/node/server.js index 3cd2ef4..3e34c8f 100644 --- a/node/server.js +++ b/node/server.js @@ -4129,7 +4129,7 @@ function init_io() { } if (method == "equip_batch") { var cost = 1; - if(Array.isArray(data)) { + if (Array.isArray(data)) { cost += data.length / 2; } add_call_cost(CC.equip * cost); @@ -6458,7 +6458,7 @@ function init_io() { penalty += 120; resolve.push({ num: equip_def.num, slot }); } - if("penalty_cd" in player.s) { + if ("penalty_cd" in player.s) { player.s.penalty_cd.ms = min(player.s.penalty_cd.ms + penalty, 120000); } else { player.s.penalty_cd = { ms: penalty }; From e286d9c99a4c66acb78b794f0aaba06596a2bc53 Mon Sep 17 00:00:00 2001 From: FreezePhoenix <24441367+FreezePhoenix@users.noreply.github.com> Date: Thu, 23 Nov 2023 10:09:51 -0500 Subject: [PATCH 4/7] Create equip_batch.html --- docs/functions/equip_batch.html | 46 +++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 docs/functions/equip_batch.html diff --git a/docs/functions/equip_batch.html b/docs/functions/equip_batch.html new file mode 100644 index 0000000..c8ef26d --- /dev/null +++ b/docs/functions/equip_batch.html @@ -0,0 +1,46 @@ +
+ Arguments: +
+ Returns: +
Example usages:
+ +Promise Reference:
+ +"resolve" +