init: add workspace files
This commit is contained in:
450
os/item/equipment.js
Normal file
450
os/item/equipment.js
Normal file
@@ -0,0 +1,450 @@
|
||||
|
||||
require("../util/util.js");
|
||||
EQUIPMENT = function () {
|
||||
this.eq_type = EQUIP_TYPE.WEAPON;
|
||||
this.level = 0;
|
||||
this.exp = 0;
|
||||
this.grade = 0;
|
||||
this.count = 1;
|
||||
this.combined = false;
|
||||
this.showAction = true;
|
||||
this.allow_fight = true;
|
||||
this.otype = 4;
|
||||
}
|
||||
EQUIPMENT.inherits(OBJ);
|
||||
EQUIPMENT.prototype.is_equipment = true;
|
||||
EQUIPMENT.prototype.transable = true;
|
||||
//EQUIPMENT.prototype.eq_msg = "$N装备上$n。";
|
||||
//EQUIPMENT.prototype.uneq_msg = "$N脱下$n。";
|
||||
EQUIPMENT.prototype.change_prop = function (me, is_attach) {
|
||||
me.change_prop(this.prop, is_attach);
|
||||
if (this.st_prop) {
|
||||
for (var i = 0; i < this.st_prop.length; i++) {
|
||||
me.change_prop(this.st_prop[i].prop, is_attach);
|
||||
}
|
||||
}
|
||||
}
|
||||
EQUIPMENT.prototype.notify_action = function (me, isadd) {
|
||||
if (!this.on_use) return;
|
||||
isadd = me.equipment[this.eq_type] == this;
|
||||
if (isadd)
|
||||
me.send("{type:'addAction',id:'" + this.id + "',name:'" + this.name + "',distime:" + (this.distime || 0) + "}");
|
||||
else
|
||||
me.send("{type:'removeAction',id:'" + this.id + "'}");
|
||||
}
|
||||
EQUIPMENT.prototype.check = function (me) {
|
||||
if (!this.condition) return true;
|
||||
for (var key in this.condition) {
|
||||
var val = this.condition[key];
|
||||
switch (key) {
|
||||
case "skill":
|
||||
for (var sk in val) {
|
||||
if (me.query_skill(sk, 0) < val[sk]) {
|
||||
var sk_base = SKILL.get(sk);
|
||||
|
||||
return me.notify_fail("你的" + sk_base.color_name + "等级不够" + val[sk] + ",无法装备" + this.color_name + "。");
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "str1":
|
||||
case "con1":
|
||||
case "dex1":
|
||||
case "int1":
|
||||
if (me[key.replace("1", "")] < val) {
|
||||
return me.notify_fail("你的先天" + PROPERTIES[key] + "不够" + val + ",无法装备" + this.color_name + "。");;
|
||||
}
|
||||
break;
|
||||
case "str":
|
||||
case "con":
|
||||
case "dex":
|
||||
case "int":
|
||||
if (me[key] + me.query_prop(key) < val) {
|
||||
return me.notify_fail("你的" + PROPERTIES[key] + "不够" + val + ",无法装备" + this.color_name + "。");;
|
||||
}
|
||||
break;
|
||||
case "gender":
|
||||
if (me.gender != val) return me.notify_fail("你不是" + (val == 1 ? "男性" : "女性") + ",无法装备" + this.color_name + "。");
|
||||
break;
|
||||
case "desc":
|
||||
break;
|
||||
default:
|
||||
var me_val = me[key] || 0;
|
||||
me_val = me_val + me.query_prop(key);
|
||||
if (!me_val || me_val < val) {
|
||||
|
||||
return me.notify_fail("你的" + PROPERTIES[key] + "不够" + val + ",无法装备" + this.color_name + "。");;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
EQUIPMENT.prototype.eq = function (me, notsend) {
|
||||
if (this.check(me) == false) {
|
||||
return false;
|
||||
}
|
||||
if (this.on_eq && this.on_eq(me) == false) {
|
||||
return false;
|
||||
}
|
||||
this.change_prop(me, true);
|
||||
this.check_group(me, true);
|
||||
//me.add_score(this.query_score());
|
||||
if (!notsend) {
|
||||
if (this.eq_msg)
|
||||
me.send_room(this.eq_msg, this);
|
||||
else {
|
||||
var msg;
|
||||
switch (this.eq_type) {
|
||||
case EQUIP_TYPE.WEAPON:
|
||||
msg = "$N抽出一" + this.unit + this.color_name + "拿在手上。";
|
||||
break;
|
||||
case EQUIP_TYPE.CLOTH:
|
||||
case EQUIP_TYPE.SHOES:
|
||||
case EQUIP_TYPE.PANTS:
|
||||
msg = "$N穿上一" + this.unit + this.color_name + "。";
|
||||
break;
|
||||
case EQUIP_TYPE.RING:
|
||||
msg = "$N拿出一" + this.unit + this.color_name + "戴在手上。";
|
||||
break;
|
||||
case EQUIP_TYPE.NECKLACE:
|
||||
case EQUIP_TYPE.JEWELS:
|
||||
case EQUIP_TYPE.WRIST:
|
||||
msg = "$N戴上一" + this.unit + this.color_name + "。";
|
||||
break;
|
||||
default:
|
||||
msg = "$N装备上一" + this.unit + this.color_name + "。";
|
||||
break;
|
||||
}
|
||||
me.send_room(msg, this);
|
||||
}
|
||||
}
|
||||
me.send('{type:"dialog",dialog:"pack",id:"' + this.id + '",eq:' + this.eq_type + '}');
|
||||
}
|
||||
EQUIPMENT.prototype.uneq = function (me, notsend) {
|
||||
this.on_uneq && this.on_uneq(me);
|
||||
this.change_prop(me, false);
|
||||
this.check_group(me, false);
|
||||
//me.add_score(-this.query_score());
|
||||
|
||||
if (!notsend) {
|
||||
if (this.uneq_msg)
|
||||
me.send_room(this.uneq_msg, this);
|
||||
else {
|
||||
var msg;
|
||||
switch (this.eq_type) {
|
||||
case EQUIP_TYPE.WEAPON:
|
||||
msg = "$N收回手中的" + this.color_name + "。";
|
||||
break;
|
||||
case EQUIP_TYPE.CLOTH:
|
||||
case EQUIP_TYPE.SHOES:
|
||||
case EQUIP_TYPE.PANTS:
|
||||
case EQUIP_TYPE.WRIST:
|
||||
msg = "$N将" + this.color_name + "脱了下来。";
|
||||
break;
|
||||
case EQUIP_TYPE.RING:
|
||||
case EQUIP_TYPE.NECKLACE:
|
||||
case EQUIP_TYPE.JEWELS:
|
||||
msg = "$N将" + this.color_name + "取了下来。";
|
||||
break;
|
||||
default:
|
||||
msg = "$N脱下一" + this.unit + this.color_name + "。";
|
||||
break;
|
||||
}
|
||||
me.send_room(msg, this);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
me.send('{type:"dialog",dialog:"pack",id:"' + this.id + '",uneq:' + this.eq_type + '}');
|
||||
}
|
||||
|
||||
EQUIPMENT.prototype.condition_tostring = function (str) {
|
||||
if (!this.condition) return;
|
||||
for (var key in this.condition) {
|
||||
var val = this.condition[key];
|
||||
switch (key) {
|
||||
case "skill":
|
||||
for (var sk in val) {
|
||||
var sk_base = SKILL.get(sk);
|
||||
str.push(sk_base.name + "要求:" + val[sk] + "级");
|
||||
}
|
||||
break;
|
||||
case "desc":
|
||||
str.push(desc);
|
||||
break;
|
||||
case "gender":
|
||||
str.push("性别要求:" + (val == 1 ? "男" : "女"));
|
||||
break;
|
||||
default:
|
||||
str.push(PROPERTIES[key] + "要求:" + val);
|
||||
break;
|
||||
}
|
||||
str.push("\n");
|
||||
}
|
||||
}
|
||||
EQUIPMENT.prototype.parts = ['武器', '衣服', '鞋', '头部', '披风', '戒指', '项链', '饰品', '护腕', '腰带', '暗器'];
|
||||
EQUIPMENT.prototype.qualities = ["普通", "精良", "高级", "稀有", "绝世", "传说", "神器"];
|
||||
|
||||
EQUIPMENT.prototype.get_desc = function (me) {
|
||||
var str = [this.color_name];
|
||||
str.push("\n");
|
||||
str.push(this.parts[this.eq_type]);
|
||||
//str.push("\n");
|
||||
//str.push(this.query_quality());
|
||||
str.push("\n");
|
||||
this.condition_tostring(str);
|
||||
|
||||
if (this.desc) str.push(this.desc);
|
||||
str.push("\n");
|
||||
if (this.prop) {
|
||||
str.push("<");
|
||||
str.push(this.query_grade_color());
|
||||
str.push(">");
|
||||
str.push(UTIL.prop_toString(this.prop));
|
||||
|
||||
str.push("</");
|
||||
str.push(this.query_grade_color());
|
||||
str.push(">\n");
|
||||
}
|
||||
if (this.st_prop) {
|
||||
for (var i = 0; i < this.st_prop.length; i++) {
|
||||
str.push(this.st_prop[i].name);
|
||||
str.push("\n");
|
||||
}
|
||||
}
|
||||
if (this.hole_count) {
|
||||
for (var i = 0; i < this.hole_count; i++) {
|
||||
str.push("◇");
|
||||
}
|
||||
}
|
||||
this.query_group_desc(me, str);
|
||||
return str.join("");
|
||||
}
|
||||
|
||||
|
||||
EQUIPMENT.prototype.query_quality = function () {
|
||||
return this.qualities[this.grade];
|
||||
}
|
||||
const level_desc = ["", "☆", "★", "★☆", "★★", "★★☆", "★★★",
|
||||
"★★★☆", "★★★★", "★★★★☆", "★★★★★", "★★★★★☆", "★★★★★★"];
|
||||
EQUIPMENT.prototype.level_up = function (lev) {
|
||||
var cc = this.query_grade_color();
|
||||
|
||||
this.prop = {};
|
||||
this.level = lev;
|
||||
this.levelchange_prop();
|
||||
this.color_name = "<" + cc + ">" + level_desc[this.level] + this.name + "</" + cc + ">";
|
||||
this.json = null;
|
||||
}
|
||||
|
||||
|
||||
EQUIPMENT.prototype.levelData = [
|
||||
0, 10, 20, 40, 70, 110, 160, 220, 290, 370, 460, 560, 670
|
||||
];
|
||||
EQUIPMENT.prototype.levelchange_prop = function () {
|
||||
if (!(this.level >= 0 && this.level < 13)) return;
|
||||
const base_props = this.original_prop ?? Object.getPrototypeOf(this).prop;
|
||||
var val = this.levelData[this.level];
|
||||
for (var key in base_props) {
|
||||
var value = base_props[key];
|
||||
switch (key) {
|
||||
case "desc":
|
||||
case "str1":
|
||||
case "con1":
|
||||
case "dex1":
|
||||
case "int1":
|
||||
case "per":
|
||||
case "kar":
|
||||
case "skill":
|
||||
this.prop[key] = value;
|
||||
break;
|
||||
|
||||
case "fy_per":
|
||||
case "zj_per":
|
||||
case "mz_per":
|
||||
case "hp_per":
|
||||
case "ds_per":
|
||||
case "gj_per":
|
||||
case "diff_busy":
|
||||
case "busy_per":
|
||||
case "caiyao1":
|
||||
case "diaoyu1":
|
||||
case "kuang1":
|
||||
case "lianyao1":
|
||||
case "diff_sh":
|
||||
case "expend_mp":
|
||||
this.prop[key] = value + parseInt(value * val / 1000);
|
||||
break;
|
||||
case "diff_downside_per":
|
||||
case "gjsd":
|
||||
case "releasetime":
|
||||
case "distime":
|
||||
case "diff_downside":
|
||||
case "distime_per":
|
||||
case "releasetime_per":
|
||||
case "gjsd_per":
|
||||
|
||||
case "bj_per":
|
||||
case "diff_bj":
|
||||
case "add_bjsh_per":
|
||||
|
||||
case "add_sh_per":
|
||||
case "diff_busy_per":
|
||||
case "diff_sh_per":
|
||||
case "diff_fy_per":
|
||||
case "expend_mp_per":
|
||||
case "busy":
|
||||
this.prop[key] = value;
|
||||
break;
|
||||
default:
|
||||
if (PROPERTIES[key])
|
||||
this.prop[key] = value + parseInt(value * val / 100);
|
||||
else
|
||||
this.prop[key] = value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
EQUIPMENT.prototype.clear_stone = function () {
|
||||
if (!this.st_prop) return;
|
||||
|
||||
this.hole_count += (this.st_prop.length);
|
||||
this.st_prop.length = 0;
|
||||
}
|
||||
EQUIPMENT.prototype.push_stone = function (stone) {
|
||||
if (!stone || !stone.prop) return false;
|
||||
if (!this.hole_count) return false;
|
||||
|
||||
if (!this.st_prop) this.st_prop = [];
|
||||
this.hole_count--;
|
||||
var cc = stone.query_grade_color();
|
||||
var str = ["<", cc, ">◆", stone.name, " "];
|
||||
str.push(UTIL.prop_toString(stone.prop, " "));
|
||||
str.push("</");
|
||||
str.push(cc);
|
||||
str.push(">");
|
||||
|
||||
this.json = null;
|
||||
this.st_prop.push({
|
||||
id: stone.id,
|
||||
path: stone.path,
|
||||
name: str.join(""),
|
||||
prop: stone.prop,
|
||||
grade: stone.grade
|
||||
});
|
||||
}
|
||||
EQUIPMENT.prototype.clone = function (me) {
|
||||
var obj = OBJ.CREATE(this.path);
|
||||
if (this.temp) {
|
||||
obj.temp = {};
|
||||
for (var key in this.temp) {
|
||||
obj.temp[key] = this.temp[key];
|
||||
}
|
||||
}
|
||||
obj.on_reload && obj.on_reload(me);
|
||||
obj.level_up(this.level);
|
||||
obj.st_prop = this.st_prop;
|
||||
return obj;
|
||||
}
|
||||
|
||||
|
||||
|
||||
EQUIPMENT.prototype.save_db = function (str) {
|
||||
str.push('["', this.path, '","', this.id, '",', this.level);
|
||||
if (this.st_prop && this.st_prop.length) {
|
||||
str.push(",[");
|
||||
for (var i = 0; i < this.st_prop.length; i++) {
|
||||
if (i > 0) str.push(",");
|
||||
str.push('"', this.st_prop[i].path, '"');
|
||||
}
|
||||
str.push("]");
|
||||
}
|
||||
// else {
|
||||
// str.push(',[]');
|
||||
// }
|
||||
if (this.is_locked)
|
||||
str.push(',1');
|
||||
if (this.temp)
|
||||
str.push(",", this.format_temp(this.temp));
|
||||
str.push("]");
|
||||
}
|
||||
EQUIPMENT.prototype.load_db = function (data) {
|
||||
//const [path, id, level, sts, locked,temp] = data;
|
||||
this.id = data[1];
|
||||
if (data[2] > 0) {
|
||||
this.level = data[2];
|
||||
}
|
||||
for (let i = 3; i < data.length; i++) {
|
||||
let value = data[i];
|
||||
if (value === 1) this.is_locked = true;
|
||||
else if (Array.isArray(value)) {
|
||||
for (var j = 0; j < value.length; j++) {
|
||||
var st_item = OBJ.CREATE(value[j]);
|
||||
if (st_item) {
|
||||
this.push_stone(st_item);
|
||||
}
|
||||
}
|
||||
} else if (typeof value === 'object') {
|
||||
this.temp = value;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
EQUIPMENT.prototype.on_load = function (me) {
|
||||
this.on_reload && this.on_reload(me);
|
||||
if (this.level > 0) {
|
||||
this.level_up(this.level);
|
||||
}
|
||||
}
|
||||
|
||||
EQUIPMENT.prototype.VALUES = [100, 1000, 2000, 10000, 100000, 1000000, 100000000];
|
||||
EQUIPMENT.prototype.on_create = function (path, par) {
|
||||
this.value = this.VALUES[this.grade];
|
||||
|
||||
}
|
||||
|
||||
EQUIPMENT.prototype.query_group_desc = function (me, str) {
|
||||
if (!this.group_prop || !this.group_name) return;
|
||||
var count = 0;
|
||||
if (me && me.equipment) {
|
||||
for (var i = 0; i < me.equipment.length; i++) {
|
||||
if (me.equipment[i] && me.equipment[i].group_name == this.group_name) {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (var i = 2; i < 8; i++) {
|
||||
var prop = this.group_prop(i);
|
||||
if (prop) {
|
||||
var cc = i <= count ? this.query_grade_color() : "blk";
|
||||
|
||||
str.push("<");
|
||||
str.push(cc);
|
||||
str.push(">");
|
||||
str.push("\n");
|
||||
str.push(UTIL.to_c(i));
|
||||
str.push("件套:");
|
||||
str.push(UTIL.prop_toString(prop, " "));
|
||||
str.push("</");
|
||||
str.push(cc);
|
||||
str.push(">");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
EQUIPMENT.prototype.check_group = function (me, isadd) {
|
||||
if (!this.group_prop || !this.group_name) return;
|
||||
var count = isadd ? 1 : 0;
|
||||
for (var i = 0; i < me.equipment.length; i++) {
|
||||
if (me.equipment[i] && me.equipment[i].group_name == this.group_name) {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
var prop = this.group_prop(count);
|
||||
if (prop) {
|
||||
me.change_prop(prop, isadd);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user