mirror of
https://github.com/gooba42/adventureland.git
synced 2026-10-14 18:39:27 -05:00
Merge pull request #70 from FreezePhoenix/patch-5
Implement equip_batch
This commit is contained in:
@@ -63,6 +63,7 @@ docs={
|
|||||||
"sell",
|
"sell",
|
||||||
"consume",
|
"consume",
|
||||||
"equip",
|
"equip",
|
||||||
|
"equip_batch",
|
||||||
"unequip",
|
"unequip",
|
||||||
"lock_item",
|
"lock_item",
|
||||||
"seal_item",
|
"seal_item",
|
||||||
@@ -160,6 +161,7 @@ docs={
|
|||||||
"is_array",
|
"is_array",
|
||||||
],
|
],
|
||||||
"documented":[
|
"documented":[
|
||||||
|
"equip_batch",
|
||||||
"attack",
|
"attack",
|
||||||
"heal",
|
"heal",
|
||||||
"buy",
|
"buy",
|
||||||
|
|||||||
@@ -0,0 +1,47 @@
|
|||||||
|
<p>
|
||||||
|
Arguments:
|
||||||
|
<div> <b>*</b> Array - An array of equip definitions</div>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Returns:
|
||||||
|
<div> <b>*</b> Promise</div>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>Example usages:</p>
|
||||||
|
|
||||||
|
<div class='code'>
|
||||||
|
equip_batch([{ num: 0, slot: "chest" }, { num: 1, slot: "orb" }]);
|
||||||
|
equip_batch([{ num: 0, slot: "chest" }, { num: 1, slot: "orb" }]).then(
|
||||||
|
function(data){
|
||||||
|
game_log("Yes!"); // Not all items may have been equipped. All this means is that you send the correct layout of data.
|
||||||
|
},
|
||||||
|
function(data) {
|
||||||
|
game_log("equip_batch failed: " + data.reason);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>Promise Reference:</p>
|
||||||
|
|
||||||
|
<span class='dlabel'>"resolve"</span>
|
||||||
|
<div class='code'>
|
||||||
|
{
|
||||||
|
place: "equip_batch",
|
||||||
|
response: "data",
|
||||||
|
slots: [{ num: 0, slot: "chest" }, "no_item"] // Note that even though equipping the orb failed, we still received a success response.
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
<div style='margin-bottom: 10px'></div>
|
||||||
|
|
||||||
|
<span class='dlabel'>"reject"</span>
|
||||||
|
<div class='code'>
|
||||||
|
{
|
||||||
|
place: "equip_batch",
|
||||||
|
failed: true,
|
||||||
|
response: "invalid",
|
||||||
|
reason: "invalid", // You didn't send an array.
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p></p>
|
||||||
|
<span class='redlabel'>"source"</span>
|
||||||
@@ -550,6 +550,26 @@ function consume(num) // consumes or uses an inventory item
|
|||||||
return parent.push_deferred("equip");
|
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
|
function equip(num,slot) // slot is optional
|
||||||
{
|
{
|
||||||
if(num<0)
|
if(num<0)
|
||||||
|
|||||||
+72
-1
@@ -4092,7 +4092,13 @@ function init_io() {
|
|||||||
} else {
|
} else {
|
||||||
climit = round(climit / 4);
|
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 add = 1;
|
||||||
var len = JSON.stringify(data.message).length;
|
var len = JSON.stringify(data.message).length;
|
||||||
var mult = 1;
|
var mult = 1;
|
||||||
@@ -6364,6 +6370,71 @@ function init_io() {
|
|||||||
return socket.emit("game_response", { response: "exception", place: "upgrade", failed: true });
|
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", { slots: resolve });
|
||||||
|
} else {
|
||||||
|
return fail_response("invalid");
|
||||||
|
}
|
||||||
|
});
|
||||||
socket.on("equip", function (data) {
|
socket.on("equip", function (data) {
|
||||||
var player = players[socket.id];
|
var player = players[socket.id];
|
||||||
if (!player) {
|
if (!player) {
|
||||||
|
|||||||
Reference in New Issue
Block a user