233 lines
6.1 KiB
JavaScript
233 lines
6.1 KiB
JavaScript
|
|
|
|
const STATS = WORLD.STATS;
|
|
STATS.load_tops = function (tops, defname = '武林高手', key = "") {
|
|
tops = tops ?? new Array(10).fill({ path: "pub/gaoshou1" });
|
|
const ary = [];
|
|
for (let i = 0; i < tops.length; i++) {
|
|
let item = tops[i];
|
|
let npc;
|
|
npc = NPC.CLONE("pub/gaoshou1");
|
|
npc.name = defname;
|
|
if (item.userid) {
|
|
this.loadTopUser(item, npc);
|
|
} else {
|
|
npc.score = 10 - i;
|
|
}
|
|
npc.top_index = i + 1;
|
|
npc.id = "top_" + key + "_" + i;
|
|
ary.push(npc);
|
|
}
|
|
return ary;
|
|
}
|
|
|
|
STATS.loadTopUser = function (data, npc) {
|
|
npc.title = data.title;
|
|
npc.name = data.name;
|
|
for (let i = 0; i < COPY_PROPS.length; i++) {
|
|
npc[COPY_PROPS[i]] = data[COPY_PROPS[i]];
|
|
}
|
|
npc.skills = data.skills;
|
|
if (data.eq) {
|
|
npc.equipment = [];
|
|
for (let i = 0; i < data.eq.length; i++) {
|
|
let item = data.eq[i];
|
|
if (!item) continue;
|
|
let obj = OBJ.CREATE(item[0]);
|
|
if (!obj) continue;
|
|
obj.load_db(item);
|
|
npc.equipment[i] = obj;
|
|
}
|
|
}
|
|
npc.userid = data.userid;
|
|
npc.temp = data.temp;
|
|
npc.clear_prop();
|
|
npc.init();
|
|
npc.recount();
|
|
}
|
|
STATS.checkStats = function (player) {
|
|
this.updateScore(player);
|
|
WORLD.COMMANDS.biwu.checkStats(player);
|
|
}
|
|
|
|
const COPY_PROPS = ["str", "con", "dex", "int", "gender", "max_mp", "exp", "pot", "kar", "per"
|
|
, "hp", "max_hp", "mp", 'age', 'score'];
|
|
|
|
STATS.saveTops = function (tops) {
|
|
|
|
let str = ["["];
|
|
for (let i = 0; i < tops.length; i++) {
|
|
let top = tops[i];
|
|
if (top.userid) {
|
|
str.push("{userid:\"");
|
|
str.push(top.userid);
|
|
str.push("\",name:\"");
|
|
str.push(top.name);
|
|
str.push("\",title:\"");
|
|
str.push(top.title);
|
|
str.push("\"");
|
|
for (let j = 0; j < COPY_PROPS.length; j++) {
|
|
str.push(",");
|
|
str.push(COPY_PROPS[j]);
|
|
str.push(":");
|
|
str.push(top[COPY_PROPS[j]]);
|
|
}
|
|
if (top.skills) {
|
|
str.push(",skills:");
|
|
str.push(JSON.stringify(top.skills));
|
|
}
|
|
if (top.equipment) {
|
|
str.push(",eq:[");
|
|
for (let j = 0; j < top.equipment.length; j++) {
|
|
if (j > 0) str.push(",");
|
|
if (top.equipment[j]) top.equipment[j].save_db(str);
|
|
else str.push("null");
|
|
}
|
|
str.push("]");
|
|
}
|
|
if (top.temp) {
|
|
str.push(",temp:", JSON.stringify(top.temp));
|
|
}
|
|
|
|
str.push("}");
|
|
|
|
} else {
|
|
str.push('{ path: "pub/gaoshou1"}');
|
|
}
|
|
if (i !== this.TOPS.length - 1) str.push(",");
|
|
}
|
|
str.push("]");
|
|
return str.join("");
|
|
}
|
|
|
|
|
|
STATS.saveWeapon = function () {
|
|
|
|
return JSON.stringify(this.WEAPON);
|
|
}
|
|
STATS.saveScore = function () {
|
|
return JSON.stringify(this.SCORE);
|
|
}
|
|
STATS.updateEqitem = function (me, wea, ary) {
|
|
let score = wea.query_score();
|
|
if (!score) return;
|
|
let cur_index = -1;
|
|
let new_index = -1;
|
|
for (let i = ary.length - 1; i >= 0; i--) {
|
|
let item = ary[i];
|
|
if (item.user === me.id) {
|
|
if (wea.id === item.id || score > item.score) {
|
|
cur_index = i;
|
|
} else {
|
|
return;
|
|
}
|
|
}
|
|
if (score > item.score) {
|
|
new_index = i;
|
|
}
|
|
|
|
}
|
|
if (cur_index === -1 && new_index === -1) return;
|
|
|
|
if (cur_index === -1) {//新上榜的
|
|
let item = {
|
|
id: wea.id,
|
|
user: me.id,
|
|
score: score,
|
|
name: me.name,
|
|
desc: wea.get_desc(me),
|
|
wname: wea.color_name
|
|
};
|
|
ary.splice(new_index, 0, item);
|
|
if (ary.length > 15)
|
|
ary.length = 15;
|
|
return item;
|
|
}
|
|
|
|
let item = ary[cur_index];
|
|
item.wname = wea.color_name;
|
|
item.desc = wea.get_desc(me);
|
|
item.id = wea.id;
|
|
item.user = me.id;
|
|
item.name = me.name;
|
|
item.score = score;
|
|
if (cur_index === new_index
|
|
|| new_index - cur_index === 1) {
|
|
return item;
|
|
}
|
|
if (new_index === -1) {//掉出去,放最后
|
|
ary.splice(cur_index, 1);
|
|
ary.push(item);
|
|
} else if (cur_index > new_index) { //提升了
|
|
|
|
ary.splice(cur_index, 1);
|
|
ary.splice(new_index, 0, item);
|
|
} else {
|
|
ary.splice(new_index, 0, item);
|
|
ary.splice(cur_index, 1);
|
|
}
|
|
}
|
|
|
|
STATS.updateWeapon = function (me, wea) {
|
|
//if (wea.eq_type !== EQUIP_TYPE.WEAPON) return;
|
|
if (!WORLD.is_server(me)) return;
|
|
let eqs = this.EQ_STATS[wea.eq_type];
|
|
this.updateEqitem(me, wea, eqs);
|
|
|
|
}
|
|
STATS.updateScoreItem = function (me, ary) {
|
|
let score = me.score;
|
|
let cur_index = -1;
|
|
let new_index = -1;
|
|
for (let i = ary.length - 1; i >= 0; i--) {
|
|
let item = ary[i];
|
|
if (item.id === me.id) {
|
|
cur_index = i;
|
|
}
|
|
if (score > item.score) {
|
|
new_index = i;
|
|
}
|
|
|
|
}
|
|
if (cur_index === -1 && new_index === -1) return;
|
|
|
|
if (cur_index === -1) {//新上榜的
|
|
let item = { id: me.id, score: score, name: me.color_name || me.name };
|
|
ary.splice(new_index, 0, item);
|
|
if (ary.length > 30)
|
|
ary.length = 30;
|
|
return;
|
|
}
|
|
|
|
let item = ary[cur_index];
|
|
item.score = score;
|
|
|
|
item.name = me.color_name || me.name;
|
|
if (cur_index === new_index
|
|
|| new_index - cur_index === 1) {
|
|
return;
|
|
}
|
|
|
|
if (new_index === -1) {//掉出去,放最后
|
|
ary.splice(cur_index, 1);
|
|
ary.push(item);
|
|
} else if (cur_index > new_index) { //提升了
|
|
|
|
ary.splice(cur_index, 1);
|
|
ary.splice(new_index, 0, item);
|
|
} else {
|
|
ary.splice(new_index, 0, item);
|
|
ary.splice(cur_index, 1);
|
|
}
|
|
}
|
|
|
|
STATS.updateScore = function (me) {
|
|
if (!WORLD.is_server(me)) return;
|
|
let ary = this.SCORE;
|
|
this.updateScoreItem(me, ary);
|
|
let fam = this.SC_STATS[me.family.id];
|
|
if (!fam) return;
|
|
this.updateScoreItem(me, fam);
|
|
|
|
}
|