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

99 lines
3.5 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
this.inherits(COMMAND);
this.command = "look,l";
this.allow_busy = true;
this.allow_state = true;
this.regex = /^(\w+?)?(?:\sof\s(\w+))?$/;
//只能看房间里的物品
this.enter = function (player, objid, from) {
if (!objid) {
//player.notify(parent.items_to_json());
//return parent.send_exits(player);
return;
}
if (from) {
let parent = player.find_obj(from, player.environment);
if (!parent) return player.notify("你要看谁的装备?");
var eq = parseInt(objid);
if (!(eq >= 0 && eq < 11)) return player.notify("你要看什么?");
if (parent.query_setting("hide_equip")) {
return player.send("看样子" + parent.call3() + "不想让别人看自己的装备。");
}
var item = parent.equipment[eq];
if (!item) return player.notify(parent.name + "没有装备你要看的东西。");
player.notify(item.get_desc(parent));
if (parent != player)
player.send_room("$N正盯着$n的" + item.color_name + "看,不知道在打什么主意。", parent, true);
} else {
let parent = player.environment;
if (!parent) return;
let obj = parent.find_obj(objid);
if (!obj) {
return player.notify("你要看什么?");
}
if (obj.query_desc) {
player.notify(obj.query_desc(player));
if (obj != player)
player.send_room(look_str.random(), obj, true);
if (obj.hp > 0) {
this.obs(player, obj);
}
}
if (player.is_player && !obj.is_player) {
obj.on_look && obj.on_look(player);
}
}
//if (from) {
// parent = parent.find_obj(from);
// if (!parent) {
// return player.notify("你要看什么?");
// }
//}
//this.exec(player,obj);
}
var look_str = ["$N正盯着$n看不知道在打什么主意。", "$N笑眯眯的看着$n不知道在想些什么。"];
this.obs = function (me, target) {
let obs = me.query_prop('obs');
if (!obs || target.is_player || !target.attack_skill) return;
if (me.query_temp('obs')) return;
let sk_level = target.query_skill(target.attack_skill.id);
if (me.random(obs) + obs > sk_level) {
let index = me.random(PROPS1.length);
let prop = PROPS1[index];
let val = target[prop];
let diff = 1;
let desc = '该有';
if (sk_level > obs) {
let oper = (sk_level - obs) / obs;
let diff = Math.random() * oper * (me.random(2) === 1 ? -0.5 : 0.5);
val = val + Math.floor(val * diff);
// diff = 10;
// if (oper > 0.2) diff *= 10;
// if (oper > 0.4) diff *= 10;
// if (oper > 0.6) diff *= 10;
// if (oper > 0.8) diff *= 10;
// if (diff > val) {
// diff = Math.pow(10, Math.floor(Math.log10(val)));
// }
desc = diff > 0 ? "不上" : "不下";
}
val = Math.floor(val / diff) * diff;
me.send('你以观气术探向' + target.name + ",其" + PROPS2[index] + "之数" + desc + val + "。");
} else {
me.send('你以观气术探向' + target.name + ",却见其气场凝练如山,毫无所获。");
}
me.set_temp('obs', 1, 10000);
}
const PROPS1 = ['hp', 'mp', 'gj', 'fy', 'mz', 'ds', 'zj'];
const PROPS2 = ['气血', '内力', '攻击', '防御', '命中', '躲闪', '招架'];