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

82 lines
2.8 KiB
JavaScript

this.inherits(COMMAND);
this.command = "receive";
this.allow_busy = true;
this.allow_state = true;
this.allow_die = true;
this.allow_faint = true;
this.regex = /^(\w+)\s(\d+)$/;
const MESSAGE = WORLD.MESSAGE;
this.enter = function (me, from, index) {
//if (from === 'all') return this.receive_all(me);
if (index !== undefined)
this.receive_single(me, from, index);
else if (from)
this.receive_from(me, from);
else
this.receive_all(me);
}
this.receive_single = function (me, from, index) {
let msg = MESSAGE.getMessageByIndex(me, from, index);
if (!msg) return me.send("没有这个消息。");
if (msg.rec) return me.send("你已经领取了。");
if (!msg.attach) return me.send("这个消息没有附件。");
// if (me.is_full()) return me.send("你身上东西太多了。");
this.receive_item(me, msg, from, index);
}
this.receive_item = function (me, msg, from, index) {
msg.rec = true;
for (var i = 0; i < msg.attach.length; i++) {
var count = msg.attach[i].count || 1;
var obj = OBJ.CREATE(msg.attach[i].obj, count);
if (!obj) continue;
if (obj.on_receive) {
obj.on_receive(me);
} else {
obj = me.add_obj(obj);
me.notify("你领取了" + obj.unit_name(count) + "。");
if (obj.grade > 5) {
COMMAND.DO("rumor", "听说有人得到了一" + obj.unit + obj.name + "。");
}
}
}
me.send('{dialog:"message",type:"dialog",receive:"' + from + '",index:' + index + '}');
}
this.receive_from = function (me, from) {
let stores = MESSAGE.stores.get(me.id);
if (!stores) return;
if (me.is_full()) return me.send("你身上东西太多了。");
let store = stores.get(from);
if (!store) return me.send("没有这个消息类型。");
let list = store.items;
let count = 0;
for (let i = 0; i < list.length; i++) {
let item = list[i];
if (!item.attach || item.rec) continue;
this.receive_item(me, item, from, i);
count++;
}
if (count > 0)
return me.send('领取完毕,共收取' + count + '条消息的附件。');
return me.send('没有可领取的消息。');
}
this.receive_all = function (me) {
let store = MESSAGE.stores.get(me.id);
if (!store) return;
if (me.is_full()) return me.send("你身上东西太多了。");
let count = 0;
store.forEach((x, y) => {
let list = x.items;
for (let i = 0; i < list.length; i++) {
let item = list[i];
if (!item.attach || item.rec) continue;
this.receive_item(me, item, y, i);
count++;
}
});
if (count > 0)
return me.send('领取完毕,共收取' + count + '条消息的附件。');
return me.send('没有可领取的消息。');
}