Files
wsmud/world/cmd/dialog/store.js
2026-05-26 16:41:20 +08:00

122 lines
4.6 KiB
JavaScript

this.inherits(COMMAND);
this.command = "store";
this.regex = /^(?:(\d+)\s)?(\w+)$/;// /^(?:(\d+))?(?:\s+(\w+))?$/;
this.enter = function (me, count, arg) {
if (arg && arg.length < 2) {
count = arg;
arg = null;
}
if (arg) {
me.items = me.items || [];
let target = me;
if (!me.is_player) {
if (!me.master) return;
target = WORLD.getUser(me.master);
if (!target) return;
}
target.stores = target.stores || [];
if (arg === 'all') return this.store_all(target, me);
let move_item = me.find_obj(arg), store_item = null;
if (!move_item) return me.notify("你要存什么东西?");
const st = { items: target.stores, push_item: me.push_item };
if (target.stores.length >= target.max_store_count) {
if (!move_item.combined)
return me.notify("你的仓库放不下那么多东西了。");
store_item = me.find_obj_bypath(move_item.path, st);
if (!store_item) return me.notify("你的仓库放不下那么多东西了。");
// old_item.count += move_count;
}
let move_count = move_item.count;
if (count !== undefined) {
move_count = parseInt(count);
}
if (!(move_count <= move_item.count)) return me.notify("你要存什么东西?");
move_item = me.remove_item_byid(arg, move_count);
if (move_item.combined && store_item) {
store_item.count += move_count;
move_item = store_item;
} else {
move_item = st.push_item(move_item);
}
// move_item = null, move_count = 0;
// if (count !== undefined) {
// move_count = parseInt(count);
// if (!(move_count >= 0)) return;
// move_item = me.remove_item_byid(arg, move_count);
// if (!move_item) return me.notify("你要存什么东西?");
// } else {
// move_item = me.remove_item_byid(arg);
// if (!move_item) return me.notify("你要存什么东西?");
// move_count = move_item.count;
// }
// move_item = st.push_item(move_item);
me.send("你把" + UTIL.to_c(move_count) + move_item.unit + move_item.color_name + "存入仓库。");
return me.notify('{type:"dialog",dialog:"list",id:"' +
arg + '",storeid:"' + move_item.id + '",store:' +
move_count + ',sum:' + target.stores.length + '}');
}
if (!me.is_player) return;
var items = me.stores || [];
var str = ['{"type":"dialog","dialog":"list","stores":['];
if (me.max_store_count > 200) {
var otype = parseInt(count ?? 0);
if (!(otype >= 0)) otype = 0;
for (var i = 0; i < items.length; i++) {
var item = items[i];
if (item.otype !== otype) continue;
if (str.length > 1) str.push(",");
str.push(item.format_to_pack());
}
str.push(']');
str.push(",max_store_count:");
str.push(me.max_store_count);
str.push(",sum:");
str.push(items.length);
} else {
for (var i = 0; i < items.length; i++) {
if (i > 0) str.push(",");
str.push(items[i].format_to_pack());
}
str.push(']');
str.push(",max_store_count:");
str.push(me.max_store_count);
}
str.push("}");
me.send(str.join(""));
}
this.store_all = function (target, me) {//target仓库所有人=玩家 me玩家或者随从
// if (me !== notifier) return;
if (me.query_temp('store_all'))
return me.send('背包的道具已经自动合并到仓库中。');
const idToIndex = new Map();
for (let i = 0; i < target.stores.length; i++) {
let item = target.stores[i];
if (!item.combined) continue;
idToIndex.set(item.path, i);
}
for (let i = 0; i < me.items.length; i++) {
let move_item = me.items[i];
if (!move_item.combined) continue;
const indexIn = idToIndex.get(move_item.path);
if (indexIn >= 0) {
let store_item = target.stores[indexIn];
store_item.count += move_item.count;
me.send("你把" + UTIL.to_c(move_item.count) + move_item.unit + move_item.color_name + "存入仓库。");
target.notify('{type:"dialog",dialog:"list",id:"' + move_item.id + '",storeid:"' + store_item.id + '",store:' + move_item.count + '}');
me.items.splice(i, 1);
i--;
}
}
me.send('你将背包中的道具自动合并到仓库中已有的道具。');
me.set_temp('store_all', 1, 6000);
}