init: add workspace files

This commit is contained in:
2026-05-26 16:41:20 +08:00
commit f4f2393f72
1041 changed files with 67405 additions and 0 deletions

19
world/npc/pub/baodi.js Normal file
View File

@@ -0,0 +1,19 @@
this.inherits(NPC);
this.set({
name: "易直非",
desc: "一个神秘的商人,可以帮你兑换你一直想要却得不到的道具",
title: "神秘商人",
gender: 1,
age: 25,
per: this.random(20) + 10,
mp: 400,
max_mp: 400,
hp: 400,
max_hp: 400
});
this.add_action("ask3", "兑换", function (me) {
});

43
world/npc/pub/bing.js Normal file
View File

@@ -0,0 +1,43 @@
this.inherits(NPC);
this.set({
name: "官兵",
desc: "虽然官兵的武艺不能和武林人士相比,可是他们讲究的是人多力量大。",
gender: 1,
age: 35,
per: this.random(20) + 10,
mp: 1500,
max_mp: 1500,
hp: 1500,
max_hp: 1500,
score: 10
});
this.set_objects([
"eq/lv1/junfu", 1, 1
], [
"eq/lv0/dao", 1, 1
]);
this.set_drop({
obj: "money/silver",
min: 2,
max: 5
}, {
obj: ["eq/lv0/cloth", "eq/lv0/jian", "eq/lv0/dao"],
odds: 6000
}, {
obj: ["eq/lv1/guanfu", "eq/lv1/junfu", "book/book#sword", "book/book#blade"],
odds: 2000
});
this.skill_map(
["unarmed", 150],
["dodge", 150],
["parry", 150],
["blade", 150]);
this.on_kill = function (me) {
this.each_item(item => {
if (item != this && item.path == this.path) {
this.send_room("$N喊道兄弟们并肩子上");
item.do_kill(me);
}
}, this.environment);
}

45
world/npc/pub/biwu.js Normal file
View File

@@ -0,0 +1,45 @@
this.inherits(NPC);
this.set({
name: "擂台比武报名",
desc: "他是负责比武大赛报名的",
gender: 1,
age: 35,
per: this.random(20) + 10,
mp: 1500,
max_mp: 1500,
hp: 1500,
max_hp: 1500
});
this.set_objects([
"eq/lv1/junfu", 1, 1
]);
this.query_commands = function (player) {
if (this.json) return this.json;
var json = {};
json.type = "item";
json.desc = this.desc;
json.id = this.id;
json.commands = [];
json.commands.push({
cmd: "askbiwu " + this.id,
name: "挑战"
});
json.commands.push({
cmd: "askbiwu1 " + this.id,
name: "更新我的比武状态"
});
this.json = JSON.stringify(json);
return this.json;
}
this.add_action("askbiwu", "挑战", function (me) {
me.send('从高手榜单选择你要挑战的高手。');
});
this.add_action("askbiwu1", "观战", function (me) {
WORLD.COMMANDS['biwu'].enter(me, 'watch');
});

76
world/npc/pub/bpguanli.js Normal file
View File

@@ -0,0 +1,76 @@
this.inherits(NPC);
this.set({
name: "帮会管理员",
desc: "他是帮会方面的管理员",
gender: 1,
age: 44,
per: this.random(20) + 10,
mp: 400,
max_mp: 400,
hp: 400,
max_hp: 400,
no_fight: true
});
this.on_kill = function (me) {
return false;
}
this.set_objects(["eq/lv0/cloth", 1, 1]);
this.add_action("askhyd", "活跃度查询", function (me, par) {
var pt = me.query_party();
if (!pt) return me.notify("你还没有加入帮派。");
var str = ["<hic>帮会管理员说道:我们帮派本周的活跃度是:" + pt.query_score() + ",成员完成每日任务获得活跃度,每周一清空</hic>"];
var lv = ["", "武士", "武师", "宗师", "武圣", "武帝", "武神"];
var lv_sc = [];
for (var i = 1; i < 7; i++) {
str.push("\n");
str.push(lv[i]);
str.push("活跃度:");
str.push(pt.query_temp('sc' + i, 0));
str.push("/");
str.push((pt.level + 3) * 200);
}
me.send(str.join(""));
if (me.query_temp('pt_lv', 0) < 5) {
me.send_commands("party fam", "开启帮派战",
"party boss", "发送英雄帖",
"party xiangyang", "守卫襄阳",
"party lvliu", "绿柳山庄");
}
});
this.add_action("ptset1", "帮会设置", function (me, par) {
var pt = me.query_party();
if (!pt) return me.notify("你还没有加入帮派。");
if (me.query_temp('pt_lv', 0) > pt.query_temp("power", 2)) {
return me.notify("你没有权限更改设置。");
}
me.notify("帮会管理员:你要更改哪些设置?");
return me.send_commands("party setting power", "更改权限", "party setting join", "加入方式",
"party setting open_sc", "开启门派活动",
"party setting alloc", "战利品分配", "party setting notice", "发布公告");
});
this.add_action("sendntc", "发布公告", function (me, par) {
WORLD.COMMANDS['party'].enter(me, 'notice');
});
this.add_action("levelup2", "设施升级", function (me, par) {
var pt = me.query_party();
if (!pt) return me.notify("你还没有加入帮派。");
if (me.query_temp('pt_lv', 0) > 1) {
return me.notify("你没有权限升级设施。");
}
var exp = pt.query_exp();
var lvup_exp = pt.level_exp[pt.level];
if (lvup_exp) exp = exp + "/" + lvup_exp;
me.notify("帮会管理员:你要升级哪些设施?当前可用积分" + exp);
return me.send_commands("party levelup liangong", "升级练功房", "party levelup lianyao", "升级炼药房");
});
this.add_action("jrfb", "进入副本区域", function (me, par) {
WORLD.COMMANDS['party'].enter(me, 'enter');
});

23
world/npc/pub/ckguanli.js Normal file
View File

@@ -0,0 +1,23 @@
this.inherits(NPC);
this.set({
name: "仓库管理员",
desc: "他是帮会仓库管理员",
gender: 1,
age: 44,
per: this.random(20) + 10,
mp: 400,
max_mp: 400,
hp: 400,
max_hp: 400,
});
this.set_objects(["eq/lv0/cloth", 1, 1]);
this.add_action("askhyd", "仓库盘点", function (me, par) {
var pt = me.query_party();
if (!pt) return me.notify("你还没有加入帮派。");
me.send("帮会管理员说道:我们本周的活跃度是:" + pt.query_score() + ",每周一重置。");
if (me.query_temp('pt_lv', 0) < 5) {
me.send_commands("party fam", "开启帮派战", "party boss", "发送英雄帖");
}
});

71
world/npc/pub/dadizi.js Normal file
View File

@@ -0,0 +1,71 @@
this.inherits(NPC);
this.set({
name: "大师兄",
desc: "他就是你们门派的首席大弟子",
title: "<hig>首席弟子</hig>",
gender: 1,
age: 25,
per: 18,
mp: 400,
max_mp: 400,
hp: 400,
max_hp: 400
});
this.on_create = function (path, par) {
if (!par) return;
this.family = FAMILIES[par.substr(1)];
this.init_from(this.family);
if (this.family == FAMILIES.EMEI) {
this.gender = 2;
}
var user = WORLD.getUser(WORLD.DATA.query_temp(this.family.id + "_top"));
this.family.init_dadizi(this, user);
if (!user) this.family.is_init_first = false;
}
this.on_clone = function () {
}
this.on_kill = function (me) {
return me.notify_fail(this.name + '说道:' + this.callme() + "只接受比试。");
}
this.init_from = function (fam) {
this.set_objects(["eq/lv0/cloth", 1, 1], ["eq/lv0/jian", 1, 1]);
var ary = [];
for (var i = 0; i < fam.npc_skills.length; i++) {
ary.push([
fam.npc_skills[i][0],
200,
fam.npc_skills[i][2]
]);
}
this.skill_map.apply(this, ary);
this.max_mp = this.mp = 10000;
this.on_heart_beat = null;
this.on_damage = null;
this.hp = this.max_hp = 10000;
this.init();
this.recount();
}
this.on_fight_over = function (me, issuc) {
if (issuc) {
me.notify(this.name + "对你嘿嘿嘿的笑了几声。");
} else {
me.notify(this.name + "对你嘿嘿嘿的笑了几声。");
}
}
this.greeting = function (me) {
WORLD.COMMANDS.sx.do_greet(me, this);
}
this.manage = function (me) {
WORLD.COMMANDS.sx.do_manage(me);
}
this.add_action("ask2", "请安", this.greeting);
this.add_action('manage', '设置', this.manage);

21
world/npc/pub/gaoshou1.js Normal file
View File

@@ -0,0 +1,21 @@
this.inherits(NPC);
this.set({
name: "武林高手",
desc: "他是一个武林高手,但是没人知道他的名字",
gender: 1,
age: 25,
per: this.random(20) + 10,
mp: 400,
max_mp: 400,
hp: 400,
max_hp: 400,
});
this.set_objects(["eq/lv0/cloth",1,1]);
this.skill_map(
["force", 100],
["dodge", 100],
["parry", 100],
["sword", 100],
["blade", 100],
["unarmed", 100]);

87
world/npc/pub/guanjia.js Normal file
View File

@@ -0,0 +1,87 @@
this.inherits(NPC);
this.set({
name: "管家",
desc: "他就是负责扬州私人住宅租售的管家,也负责替人看家",
gender: 1,
age: 44,
per: this.random(20) + 10,
mp: 400,
max_mp: 400,
hp: 400,
max_hp: 400,
});
this.set_objects(["eq/lv0/cloth", 1, 1]);
this.on_enter = function (me) {
if (me.query_temp("home")) {
me.notify("管家对你热情的说道:您来啦,快请进。");
} else {
me.notify("管家招呼道:这位" + me.call() + ",需要房子吗,练功,学习都会提高效率哦。");
}
}
this.set_chat_msg([
"管家骄傲的说道:本管家经手的住宅没有一百也有八十了,客官你大可放心。",
"管家说道:这里不但有适合住家的小别院,也有富丽堂皇的大宅,客官您要不要来看看。",
"管家说道:这里之前据说是位财主的家,方圆几里都是他家的产业!"
]);
this.add_action("qianyue", "签约", function (me, par) {
if (!WORLD.is_server(me)) {
return me.notify("管家拦住你:这位" + me.call() + ",这里是私人住宅区,你不能进去。");
}
var home = me.query_temp("home");
if (home) {
me.notify("管家对你说道:这位" + me.call() + "您已经购买房屋了可以直接进去如果要升级住宅只需要再给我1800两黄金就可以了。");
if (home == 1) {
return me.send_commands("give " + this.id + " 18000000 money", "<hic>我要换成豪华型住宅</hic>");
}
} else {
me.notify("管家对你说道:这位" + me.call() + ",这里有多种房屋户型提供:\n1. 精致型住宅单人私密空间只有一个单间附带练功房功能价格100两黄金\n2. 豪华型住宅包含别院练功房卧房价格1888两黄金");
return me.send_commands("give " + this.id + " 1000000 money",
"精致型住宅", "give " + this.id + " 18880000 money", "<hic>豪华型住宅</hic>");
}
});
this.on_accept = function (me, obj, count) {
if (obj !== 'money') return false;
let home = me.query_temp('home', 0);
if (home === 2) return me.notify_fail("管家的说道:你已经购买住宅了。");
if (home) {
if (count !== 18000000)
return me.notify("管家的说道豪华型住宅需要1800两黄金。");
me.set_temp("home", 2);
me.send_room("$n拿出一纸契约给$N看了官府颁印的契尾麻利的按好指印多谢您老以后这栋房子就是您的啦。", this);
me.clear_home(false);
} else {
if (count === 1000000) {
me.set_temp("home", 1);
me.send_room("$n拿出一纸契约给$N看了官府颁印的契尾麻利的按好指印多谢您老以后这栋房子就是您的啦。", this);
} else if (count === 18880000) {
me.send_room("$n拿出一纸契约给$N看了官府颁印的契尾麻利的按好指印多谢您老以后这栋房子就是您的啦。", this);
me.set_temp("home", 2);
} else {
return me.notify("管家的说道:" + me.call() + "你是要购买100两黄金的房子吗?");
}
}
return true;
}
this.on_leave = function (me, dir) {
if (dir == "enter") {
if (!WORLD.is_server(me)) {
return me.notify_fail("管家拦住你:这位" + me.call() + ",这里是私人住宅区,你不能进去。");
}
var home = me.query_temp("home");
if (!home) {
me.notify("管家拦住你:这位" + me.call() + ",这里是私人住宅区,你不能进去。");
return false;
} else {
me.go_home();
return false;
}
}
}

12
world/npc/pub/hua.js Normal file
View File

@@ -0,0 +1,12 @@
this.inherits(MONSTER);
this.set({
name: "花",
desc: "",
gender: 1,
age: 35,
mp: 1500,
max_mp: 1500,
hp: 1500,
max_hp: 1500
});

242
world/npc/pub/hubu.js Normal file
View File

@@ -0,0 +1,242 @@
this.inherits(NPC);
this.set({
name: "赵铁笔",
desc: "他是负责户口登记的,需要离婚,解除师徒关系可以来找他。",
title:"户口登记",
gender: 1,
age: 35,
per: this.random(20) + 10,
mp: 1500,
max_mp: 1500,
hp: 1500,
max_hp: 1500,
score: 10
});
this.set_objects([
"eq/lv1/guanfu", 1, 1
]);
this.check_player = function (me) {
var wife = me.query_temp("wife") || me.query_temp("husband");
if (!wife) return me.notify_fail("赵铁笔说道:你还没结婚呢,离什么婚!");
var name = me.query_temp("wife") ? "妻子" : "丈夫";
var user = WORLD.getUser(wife);
if (!user) {
me.notify_fail("赵铁笔说道:你的" + name + "目前不在线,我不能给你办理离婚!");
me.send_commands("no_marry2 " + this.id, "强制解除");
return false;
}
if (!this.is_here(user)) {
me.notify_fail("赵铁笔说道:你的" + name + "不在这里,我不能给你办理离婚!");
me.send_commands("no_marry2 " + this.id, "强制解除");
return false;
}
return user;
}
this.check_player2 = function (me) {
var tudi = me.query_temp("tudi") || me.query_temp("shifu");
if (!tudi) return me.notify_fail("赵铁笔说道:你没有拜师,也没有收徒!");
var name = me.query_temp("tudi") ? "徒弟" : "师父";
var user = WORLD.getUser(tudi);
if (!user) {
me.notify_fail("赵铁笔说道:你的" + name + "目前不在线,我不能给你办理解除关系手续!");
me.send_commands("no_shitu2 " + this.id, "强制解除");
return false;
}
if (!this.is_here(user)) {
me.notify_fail("赵铁笔说道:你的" + name + "不在这里,我不能给你办理解除关系手续!");
me.send_commands("no_shitu2 " + this.id, "强制解除");
return false;
}
return user;
}
this.add_action("no_marry", "离婚", function (me, par) {
var user = this.check_player(me);
if (!user) return;
this.send_room("$N说道离婚这个事情可不能草率我得问问" + me.name + "愿不愿意。注意了,双方同意离婚后将解除婚姻关系。", user);
this.send_room("<yel>$N对著$n问道你愿意和"+me.name+"离婚吗?</yel>", user);
user.send_commands("no_marry_no " + this.id, "不愿意", "no_marry_yes " + this.id, "愿意");
user.set_temp("request_no_marry", 1, 100000);
});
this.add_action("no_marry_no", null, function (me, par) {
if (!me.query_temp("request_no_marry")) return me.notify("没人问你。");
var user = this.check_player(me);
if (!user) return;
me.send_room("<mag>$N对著$n大声道我不愿意</mag>", user);
me.remove_temp("request_no_marry");
me.send_room("赵铁笔呵呵笑道:这个我就没办法了,咱总不能强人所难对吧。");
});
this.add_action("no_marry_yes", null, function (me, par) {
if (!me.query_temp("request_no_marry")) return me.notify("没人问你。");
var user = this.check_player(me);
if (!user) return;
me.send_room("<mag>$N对著$n大声道我愿意</mag>", user);
me.remove_temp("request_no_marry");
me.send_room("赵铁笔呵呵笑道:好吧,从现在开始你们两个就不是夫妻了,好自为之吧。");
if (me.query_temp("wife")) {
me.remove_temp("wife");
me.remove_temp("wife_n");
user.remove_temp("husband");
user.remove_temp("husband_n");
}
if (me.query_temp("husband")) {
me.remove_temp("husband");
me.remove_temp("husband_n");
user.remove_temp("wife");
user.remove_temp("wife_n");
}
me.add_title("", "mar");
user.add_title("", "mar");
me.set_temp("marry_leave", 1, 7 * 24 * 3600000);
user.set_temp("marry_leave", 1, 7* 24 * 3600000);
});
this.add_action("no_shitu", "解除师徒", function (me, par) {
var user = this.check_player2(me);
if (!user) return;
this.send_room("<yel>$N对著$n问道你愿意和" + me.name + "解除师徒关系吗?</yel>", user);
user.send_commands("no_shitu_no " + this.id, "不愿意", "no_shitu_yes " + this.id, "愿意");
user.set_temp("request_no_shitu", 1, 100000);
});
this.add_action("no_shitu_no", null, function (me, par) {
if (!me.query_temp("request_no_shitu")) return me.notify("没人问你。");
var user = this.check_player2(me);
if (!user) return;
me.send_room("<mag>$N对著$n大声道我不愿意</mag>", user);
me.remove_temp("request_no_shitu");
me.send_room("赵铁笔呵呵笑道:这个我就没办法了,咱总不能强人所难对吧。");
});
this.add_action("no_shitu_yes", null, function (me, par) {
if (!me.query_temp("request_no_shitu")) return me.notify("没人问你。");
var user = this.check_player2(me);
if (!user) return;
me.send_room("<mag>$N对著$n大声道我愿意</mag>", user);
me.remove_temp("request_no_shitu");
me.send_room("赵铁笔呵呵笑道好吧从现在开始你们两个就不是师徒了各自都需要7天后才可以继续收徒或拜师。");
if (me.query_temp("shifu")) {
me.remove_temp("shifu");
me.remove_temp("shifu_n");
user.remove_temp("tudi");
user.remove_temp("tudi_n");
}
if (me.query_temp("tudi")) {
me.remove_temp("tudi");
me.remove_temp("tudi_n");
user.remove_temp("shifu");
user.remove_temp("shifu_n");
}
me.set_temp("st_leave", 1, 3600000 * 24 * 7);
user.set_temp("st_leave", 1, 3600000 * 24 * 7);
});
this.add_action("no_marry2", null, function (me, par) {
var wife = me.query_temp("wife") || me.query_temp("husband");
if (!wife) return me.notify_fail("赵铁笔说道:你还没结婚呢,离什么婚!");
var name = me.query_temp("wife") ? "妻子" : "丈夫";
me.notify("赵铁笔说道单方面解除婚姻关系需要缴纳800两黄金的手续费。");
me.send_commands("give " + this.id + " 8000000 money", "确认解除");
});
this.add_action("no_shitu2", null, function (me, par) {
var wife = me.query_temp("shifu") || me.query_temp("tudi");
if (!wife) return me.notify_fail("赵铁笔说道:你还没拜师,也没收徒!");
if (me.query_temp("tudi")) {
me.notify("赵铁笔说道单方面解除师徒关系需要缴纳1000两黄金的手续费并且解除后7天内不允许再次收徒");
me.send_commands("give " + this.id + " 10000000 money", "确认解除");
} else {
me.notify("赵铁笔说道单方面解除师徒关系需要缴纳500两黄金的手续费并且解除后7天内不允许再次拜师");
me.send_commands("give " + this.id + " 5000000 money", "确认解除");
}
});
this.on_accept = function (me, obj, count) {
if (obj == "money") {
if (count == 8000000) {
var wife = me.query_temp("wife") || me.query_temp("husband");
if (!wife) return me.notify_fail("赵铁笔说道:你还没结婚呢,离什么婚!");
var user = WORLD.getUser(wife);
if (me.query_temp("wife")) {
me.remove_temp("wife");
me.remove_temp("wife_n");
user && user.remove_temp("husband");
user && user.remove_temp("husband_n");
}
if (me.query_temp("husband")) {
me.remove_temp("husband");
me.remove_temp("husband_n");
user && user.remove_temp("wife");
user && user.remove_temp("wife_n");
}
me.add_title("", "mar");
user && user.add_title("", "mar");
user && user.notify("<yel>你和" + me.name + "的夫妻关系解除了。</yel>");
var attach = user ? null : [{
obj: "sp/tool/fuqi#" + me.id,
count: 1
}];
COMMAND.DO("send", wife, {
content: me.name + "主动和你解除夫妻关系。",
attach: attach
});
me.notify("赵铁笔呵呵笑道:好吧,你的婚姻关系已经解除了。");
me.set_temp("marry_leave", 1, 7 * 24 * 3600000);
user&& user.set_temp("marry_leave", 1, 7 * 24 * 3600000);
return true;
}
if (count == 10000000) {
var tudi = me.query_temp("tudi");
if (!tudi) return me.notify_fail("赵铁笔说道:你没有徒弟!");
var user = WORLD.getUser(tudi);
me.remove_temp("tudi");
me.remove_temp("tudi_n");
me.set_temp("st_leave", 1, 3600000 * 24 * 7);
if (user) {
user.remove_temp("shifu");
user.remove_temp("shifu_n");
user.set_temp("st_leave", 1, 3600000 * 24 * 7);
user.notify("<yel>你和" + me.name + "的师徒关系解除了。</yel>");
}
COMMAND.DO("send", tudi, {
content: "你的师父主动和你解除师徒关系",
attach: [{
obj: "sp/tool/shitu#" + me.id,
count: 1
}]
});
me.notify("赵铁笔说道:你的师徒关系已经解除了。");
return true;
}
if (count == 5000000) {
var shifu = me.query_temp("shifu");
if (!shifu) return me.notify_fail("赵铁笔说道:你没有徒弟!");
var user = WORLD.getUser(shifu);
me.remove_temp("shifu");
me.remove_temp("shifu_n");
me.set_temp("st_leave", 1, 3600000 * 24 * 7);
if (user) {
user.remove_temp("tudi");
user.remove_temp("tudi_n");
user.set_temp("st_leave", 1, 3600000 * 24 * 7);
user.notify("<yel>你和" + me.name + "的师徒关系解除了。</yel>");
}
COMMAND.DO("send", shifu, {
content: "你的徒弟主动和你解除师徒关系",
attach: [{
obj: "sp/tool/shitu#" + me.id,
count: 1
}]
});
me.notify("赵铁笔说道:你的师徒关系已经解除了。");
return true;
}
}
}

55
world/npc/pub/jiaoxi.js Normal file
View File

@@ -0,0 +1,55 @@
this.inherits(NPC);
this.set({
name: "武馆教习",
desc: "一个高大威猛的汉子,负责教导武馆新人基本功法",
gender: 1,
age: 25,
per: this.random(20) + 10,
mp: 400,
max_mp: 400,
hp: 400,
max_hp: 400,
family: FAMILIES.NONE
});
this.skill_map(
["force", 300],
["dodge", 300],
["parry", 300],
["sword", 300],
["blade", 300],
["club", 300],
["staff", 300],
["whip", 300],
["unarmed", 300],
["throwing", 300]);
this.on_checkskill = function (me) {
if (!me.query_temp("wg_sr")) {
me.send_room("武馆教习瞄了$N一眼100两白银先交钱再学功夫包教包会。");
return me.notify_fail('{type:"cmds",items:{cmd:"give ' + this.id + ' 10000 money",name:"交报名费"}}');
}
return true;
}
this.on_teach = function (me) {
return me.query_temp("wg_sr") == 1;
}
this.on_accept = function (me, obj, count) {
if (obj != "money") return false;
if (me.query_temp("wg_sr")) {
me.notify("武馆教习愉快笑了笑,收下你的钱。");
return true;
}
if (count < 10000) return me.notify_fail("武馆教习瞪了你一眼100两白银不二价没钱就一边玩去。");
me.send_room("武馆教习收下$N的钱拍了拍$N的肩膀不错以后你就是本馆的弟子了本武馆包教基本武技到300级随到随学不限学时全国连锁。");
me.set_temp("wg_sr", 1);
if (!me.query_temp("sm_tm")) {
me.set_temp("sm_tm", Math.floor(Date.now() / 100000));
}
return true;
}
// this.add_action("ask1", "武馆任务", function (me) {
// if (me.family != FAMILIES.NONE) return me.notify("武馆教习对你说道:你还是去找自己的师门看看吧。");
// me.do_command("task", "sm " + this.id);
// });

18
world/npc/pub/menpai.js Normal file
View File

@@ -0,0 +1,18 @@
this.inherits(NPC);
this.set({
name: "门派弟子",
desc: "门派弟子",
title: "",
gender: 1,
age: 25,
per: 18,
mp: 400,
max_mp: 400,
hp: 400,
max_hp: 400,
no_refresh: true,
is_drop: false
});
this.init_from = function (fam, level) {
}

84
world/npc/pub/mpguanli.js Normal file
View File

@@ -0,0 +1,84 @@
this.inherits(NPC);
this.set({
name: "门派后勤管理员",
desc: "他是你们门派里面负责发放弟子福利的人",
gender: 1,
age: 25,
per: this.random(20) + 10,
mp: 400,
max_mp: 400,
hp: 400,
max_hp: 400,
});
this.skill_map(
["force", 100],
["dodge", 100],
["parry", 100],
["sword", 100],
["blade", 100],
["club", 100],
["staff", 100],
["whip", 100],
["unarmed", 100]);
this.on_create = function (path, par) {
if (!par) return;
this.family = FAMILIES[par.substr(1)];
if (!this.family.customer) this.family.customer = {};
if (this.family == FAMILIES.NONE) {
this.name = "武馆后勤";
}
}
const NEEDS_GJ = [500, 5000, 10000, 50000, 100000];
const NEEDS_LEVEL = [0, 3, 4, 5, 6];
const NEEDS_LEVEL_DESC = [null, "宗师", "武圣", "武帝", "武神"];
this.add_action("job_fam", "门派职位", function (me) {
var fam = me.family;
if (fam === FAMILIES.NONE) {
if (!me.query_temp('wg_sr'))
return me.notify(this.name +
"对你说道:这位" + me.call() + "和本馆素无瓜葛,升职从何说起?");
}
if (fam != this.family) return me.notify(this.name +
"对你说道:这位" + me.call() + "和本派素无瓜葛,升职从何说起?");
let gj = me.query_temp('gongji', 0);
let level = me.query_temp('sm_level', 0);
if (level >= 5) return me.send(this.name +
"对你说道:这位" + me.call() + "已经是最高级别的职位了。");
me.send(`${this.name}说:你现在是${fam.query_job_title(level)},消耗${gj}/${NEEDS_GJ[level]}可以晋升到${fam.query_job_title(level + 1)}`);
if (gj >= NEEDS_GJ[level]) {
me.send_commands('job_up_ok ' + this.id, '确定晋升');
}
});
this.add_action("job_up_ok", null, function (me) {
var fam = me.family;
if (fam != this.family) return me.notify(this.name +
"对你说道:这位" + me.call() + "和本派素无瓜葛,升职从何说起?");
if (fam === FAMILIES.NONE) {
if (!me.query_temp('wg_sr'))
return me.notify(this.name +
"对你说道:这位" + me.call() + "和本馆素无瓜葛,升职从何说起?");
}
let level = me.query_temp('sm_level', 0);
if (level >= 5) return me.send(this.name +
"对你说道:这位" + me.call() + "已经是最高级别的职位了。");
if (me.level < NEEDS_LEVEL[level])
return me.send(`${this.name}说道:这位${me.call()}${fam.query_job_title(level + 1)}可不是谁都能当的,最少得是${NEEDS_LEVEL_DESC[level]}才行。`);
let gj = me.query_temp('gongji', 0);
let need = NEEDS_GJ[level];
if (gj >= NEEDS_GJ[level]) {
me.add_temp('gongji', -need);
USERTASK.GET('sm').on_finish(me);
level = me.add_temp('sm_level', 1);
me.send(`${this.name}说:恭喜你,现在是${me.family.query_task_title(me)}了,你的师门物资获得大幅度提升。`);
} else {
me.send(`${this.name}说:你的师门功绩还不够晋升,再努力一点吧。`);
}
});

23
world/npc/pub/muren.js Normal file
View File

@@ -0,0 +1,23 @@
this.inherits(NPC);
this.set({
name: "木头人",
desc: "这是一个木头做的假人,用来测试伤害的",
gender: 1,
age: 10,
per: 43,
mp: 60,
max_mp: 60,
hp: 99999999,
max_hp: 99999999,
str: 1,
con: 1,
dex: 1,
int:1
});
this.die = function () {
this.clear_combat_prop();
this.add_hp(this.max_hp);
this.send_room('$N身上破损的木头剥落再次神采奕奕精气十足。\n');
return false;
}

22
world/npc/pub/paimai.js Normal file
View File

@@ -0,0 +1,22 @@
this.inherits(NPC);
this.set({
name: "拍卖师",
desc: "他是藏宝阁里负责拍卖的拍卖师",
gender: 1,
age: 74,
per: 12,
mp: 400,
max_mp: 400,
hp: 400,
max_hp: 400,
});
this.set_objects(["eq/lv0/cloth", 1, 1]);
this.set_chat_msg([
"拍卖师说道:我这里可都是从当铺千挑万选出来的稀有好货,包括一些江湖中已经绝版的珍藏。",
"拍卖师说道:当有人送来拍卖品时,立即开始拍卖。"
]);
this.add_action("spm", "拍卖物品", function (me, par) {
WORLD.COMMANDS['pm'].enter(me, 'list');
});

21
world/npc/pub/qian.js Normal file
View File

@@ -0,0 +1,21 @@
this.inherits(NPC);
this.set({
name: "钱眼开",
desc: "他就是钱庄的老板钱眼开,人称铁公鸡",
title: "钱庄老板",
gender: 1,
age: 34,
per: this.random(20) + 10,
mp: 400,
max_mp: 400,
hp: 400,
max_hp: 400,
});
this.set_chat_msg([
"钱眼开骄傲的说道:本银号已经有上百年的历史,分店遍布天下各地。",
"钱眼开说道:昨天我亲自看到一个杀手帮的人来取钱,看来杀手帮重出江湖了。",
"钱眼开笑着说道:杀手帮重出江湖对本银号来说,真是求之不的呀!。",
"钱眼开笑着说道:当年雾中楼在本银号存的钱可以说是最多的了。",
"钱眼开笑着说道:在本店存钱无利息,存物不收手续费,客官你看着办吧。"
]);

113
world/npc/pub/tiejiang.js Normal file
View File

@@ -0,0 +1,113 @@
this.inherits(NPC);
this.name = "铁匠";
this.title = "铁匠铺老板";
this.desc = "铁匠正用铁钳夹住一块红热的铁块放进炉中。";
this.age = 33;
this.max_hp = 100;
this.max_mp = 100;
this.per = 10;
this.gender = 1;
this.set_goods("eq/lv0/jian", "eq/lv0/dao", "eq/lv0/tiegun", "eq/lv0/tiezhang", "eq/lv0/fei", "sp/tool/chu#0");
this.add_action("unxx", "取消镶嵌", function (me, arg) {
WORLD.COMMANDS['unxiangqian'].enter(me);
});
this.add_action("unjl", "取消精炼", function (me, arg) {
WORLD.COMMANDS['unjinglian'].enter(me);
});
this.add_action("dz", "锻造武器", function (me, arg) {
// me.send_commands('dz1 ' + this.id, "锻造武器",
// 'dz2 ' + this.id, "重铸武器",
// 'dz3 ' + this.id, "武器改名",
// 'dz4 ' + this.id, "更改武器类型");
WORLD.COMMANDS['duanzao'].enter(me);
});
// this.add_action("dz1", "", function (me, arg) {
// WORLD.COMMANDS['duanzao'].enter(me);
// });
// this.add_action("dz2", "", function (me, arg) {
// WORLD.COMMANDS['reduanzao'].enter(me);
// });
// this.add_action("dz3", "", function (me, arg) {
// WORLD.COMMANDS['reduanzao2'].enter(me);
// });
// this.add_action("dz4", "", function (me, arg) {
// WORLD.COMMANDS['reduanzao3'].enter(me);
// });
this.on_duanzao = function (me, arg) {
if (arg == "ok") {
var item = me.find_obj_bypath("st/yuanjing");
if (!item || item.count < 10) return me.notify("铁匠说道:材料不够就别来烦我。");
me.notify("铁匠点头说道:嗯,不错,你想锻造什么武器?");
me.send_commands("duanzao sword", '剑', "duanzao blade", '刀', "duanzao club", '棍', "duanzao staff", '杖',
"duanzao whip", '鞭', "duanzao none", '拳');
} else if (!arg) {
me.notify("铁匠说道你能找到10块<hio>元晶</hio>我就免费帮你锻造一把你自己的武器。");
var item = me.find_obj_bypath("st/yuanjing");
if (!item || item.count < 10) return;
me.send_commands("duanzao ok", "我要锻造武器");
} else {
var type = WEAPON_TYPE[arg.toUpperCase()];
if (!type) return me.notify("铁匠摇头道:我不会锻造这种武器。");
//me.set_temp('dz', arg, 30000);
me.notify("铁匠说道:告诉我你要锻造的武器的名字。(使用房间频道说出(2-5个汉字),暴力,色情,政治相关的名字将直接销毁)");
me.wait_input = this.dzwq.bind(this, arg);
me.send_commands("cancle", '我不锻造了');
}
}
// this.wp_names = ["君子剑", '真武剑', '屠龙刀', '倚天剑', '碧血剑', '碧血照丹青',
// '轩辕剑', '鹰刀', '盘古斧'];
this.dzwq = function (arg, me, str) {
if (str == "cancle") {
me.notify("铁匠说道:好吧,可惜了。");
me.wait_input = null;
me.remove_temp('dz');
return;
}
str = str.split(' ')[1];
if (!arg) {
me.wait_input = null;
return me.notify("铁匠说道:你要先告诉我锻造的武器类型。");
}
var type = WEAPON_TYPE[arg.toUpperCase()];
if (!type) {
me.wait_input = null;
return me.notify("铁匠摇头道:我不会锻造这种武器。");
}
if (!/^[\u4E00-\u9FA5]{2,5}$/.test(str)) {
return me.send('铁匠说道武器的名字需要是2-5个汉字。');
}
if (!UTIL.check_word(str)) {
return me.send('铁匠说道:你不能用这个名字。');
}
// for (var i = 0; i < this.wp_names.length; i++) {
// if (this.wp_names[i] == str) {
// return me.send('铁匠说道:你不能用这个名字。');
// }
// }
var item = me.find_obj_bypath("st/yuanjing");
if (!item || item.count < 10) {
me.wait_input = null;
return me.notify("铁匠说道:材料不够就别来烦我。");
}
me.wait_input = null;
if (me.remove_obj(item, 10)) {
var obj = OBJ.CREATE("eq/cp#" + arg);
obj.set_temp("name", str);
WORLD.COMMANDS.duanzao.default_template(obj, EQUIP_TYPE.WEAPON);
obj.on_reload(me);
me.add_obj(obj);
me.notify("铁匠说道:不错,这是你要的。");
me.notify("铁匠给你" + obj.unit_name() + "。");
}
}

29
world/npc/pub/tongren.js Normal file
View File

@@ -0,0 +1,29 @@
this.inherits(NPC);
this.set({
name: "<yel>铜人</yel>",
desc: "这是一个铜做的假人,防御很高,用来测试伤害的",
gender: 1,
age: 10,
per: 43,
mp: 60,
max_mp: 60,
hp: 99999999,
prop: {
fy: 50000,
diff_sh_per: 70,
diff_sh: 12000
},
max_hp: 99999999,
str: 1,
con: 1,
dex: 1,
int: 1
});
this.die = function () {
this.clear_combat_prop();
this.add_hp(this.max_hp);
this.send_room('$N身上破损的铜皮剥落再次神采奕奕精气十足。\n');
return false;
}

91
world/npc/pub/wudao.js Normal file
View File

@@ -0,0 +1,91 @@
this.inherits(NPC);
this.set({
name: "",
desc: "他是武道塔的神秘守护者",
title: "武道塔守护者",
gender: 1,
age: 25,
per: this.random(44),
mp: 400,
max_mp: 400,
hp: 400,
max_hp: 400,
no_refresh: true,
no_fight: true
});
this.init_from = function (player, level) {
this.con = this.dex = this.int = this.str = 20 + parseInt(level / 3);
if (level > 100) level = 100;
const grade1 = Math.floor(level / 10);
this.name = UTIL.random_name(this.gender);
this.skill_map.apply(this, this.skills_def[grade1]);
var color = ["hig", "hic", "hiy", "hiz", "hio", "ora"][parseInt(level / 20)];
this.title = "<" + color + ">武道塔守护者</" + color + ">";
this.set_objects(['eq/lv0/cloth', 1, 1], ["eq/lv0/jian", 1, 1]);
this.hp = this.max_hp = 1000 + level * level * 150;
this.mp = this.max_mp = parseInt(this.hp / 2);
this.init();
this.recount();
}
this.skills_def = [
[
["force", 100], ["unarmed", 100], ["sword", 100], ["parry", 100], ["dodge", 100],
["hunyuanyiqi", 100, "force"], ["wudangchangquan", 100, "unarmed"], ["huashanshenfa", 100, "dodge"],
["wudangjianfa", 100, "sword"], ["zhemeishou", 100, "parry"]
],
[
["force", 300], ["unarmed", 300], ["sword", 300], ["parry", 300], ["dodge", 300],
["zixiashengong", 300, "force"], ["taizuchangquan", 300, "unarmed"],
["yunlongjian", 300, "sword"], ["taijiquan", 300, "parry"], ["sixiangbu", 300, "dodge"],
],
[
["force", 500], ["unarmed", 500], ["sword", 500], ["parry", 500], ["dodge", 500],
["taijishengong", 500, "force"], ["qishangquan", 500, "unarmed"],
["kuangfengkuaijian", 500, "sword"], ["taijiquan", 500, "parry"], ["tiyunzong", 500, "dodge"],
],
[
["force", 800], ["unarmed", 800], ["sword", 800], ["parry", 800], ["dodge", 800],
["yijinjing", 800, "force"], ["yiyangzhi", 800, "unarmed"],
["taijijian", 800, "sword"], ["dugujiujian", 800, "parry"], ["wuduyanluobu", 800, "dodge"],
],
[
["force", 1100], ["unarmed", 1100], ["sword", 1100], ["parry", 1100], ["dodge", 1100],
["mingyugong", 1100, ["force", "dodge"]], ["yiyangzhi", 1100, "unarmed"],
["yitianjianfa", 1100, "sword"], ["yihuajiemu", 1100, "parry"]
],
[
["force", 1400], ["unarmed", 1400], ["sword", 1400], ["parry", 1400], ["dodge", 1400],
["hamagong", 1400, "force"], ["tanzhishengong", 1400, "unarmed"],
["kuangfengkuaijian2", 1400, "sword"], ["taijiquan", 1400, "parry"], ["kuihuashengong", 1400, "dodge"],
],
[
["force", 1700], ["unarmed", 1700], ["sword", 1700], ["parry", 1700], ["dodge", 1700],
["kuihuashengong", 1700, ["force", "dodge"]], ["cuixinzhang", 1700, "unarmed"],
["bixiejianfa", 1700, ["sword", "parry"]]
],
[
["force", 2000], ["unarmed", 2000], ["sword", 2000], ["parry", 2000], ["dodge", 2000],
["jiuyangshengong", 2000, "force"], ["chuanxinzhang2", 2000, "unarmed"],
["dugujiujian", 2000, "sword"], ["taijiquan", 2000, "parry"], ["kuihuashengong", 2000, "dodge"],
],
[
["force", 2500], ["unarmed", 2500], ["sword", 2500], ["parry", 2500], ["dodge", 2500],
["taixuangong", 2500, "force"], ["xianglongzhang2", 2500, "unarmed"],
["qixianwuxingjian", 2500, "sword"], ["taijiquan", 2500, "parry"], ["xuanxubu", 2500, "dodge"],
],
[
["force", 3000], ["unarmed", 3000], ["sword", 3000], ["parry", 3000], ["dodge", 3000],
["jiuyinshengong", 3000, "force"], ["jiuyinbaiguzhao2", 3000, "unarmed"],
["taijijian", 3000, "sword"], ["qiankundanuoyi", 3000, "parry"], ["lingboweibu2", 3000, "dodge"],
],
[
["force", 4000], ["unarmed", 4000], ["sword", 4000], ["parry", 4000], ["dodge ", 4000],
["jiuyangshengong", 5000, "force"], ["liumaishenjian", 5000, "unarmed"],
["xuantiejianfa", 5000, "sword"], ["qiankundanuoyi", 5000, "parry"], ["lingboweibu2", 5000, "dodge"],
]
];

View File

@@ -0,0 +1,32 @@
this.inherits(NPC);
this.set({
name: "守门人",
desc: "他是武道塔的守门人,一个神神秘秘的老头",
gender: 1,
age: 67,
per: 55,
mp: 5000000,
max_mp: 5000000,
hp: 80000000,
max_hp: 80000000,
level: 5,
pfm_rate: 1,
prop: {
gjsd: 20000,
add_sh_per: 100,
diff_sh_per: 270,
diff_sh_per2: 100,
diff_downside_per: 170,
gj: 100000,
gj_per: 100,
diff_fy_per: 150,
distime_per: 80,
ds: 150000,
ds_per: 100,
zj: 150000,
zj_per: 100,
mz: 150000,
mz_per: 100
}
});

32
world/npc/pub/wujiang.js Normal file
View File

@@ -0,0 +1,32 @@
this.inherits(NPC);
this.set({
name: "武将",
desc: "他站在那里,的确有说不出的威风。",
gender: 1,
age: 35,
per: this.random(30) + 10,
mp: 2500,
max_mp: 2500,
hp: 2500,
max_hp: 2500,
score: 15
}); this.set_objects([
"eq/lv1/guanfu", 1, 1
], [
"eq/lv1/jundao", 1, 1
]); this.set_drop({
obj: "money/silver",
min: 2,
max: 5
}, {
obj: ["eq/lv0/cloth", "eq/lv0/jian", "eq/lv0/dao"],
odds: 6000
}, {
obj: ["eq/lv1/guanfu", "eq/lv1/junfu", "book/book#sword", "eq/lv1/jundao", "book/book#blade"],
odds: 3000
});
this.skill_map(
["unarmed", 190],
["dodge", 190],
["parry", 190],
["blade", 190]);

99
world/npc/pub/xiaoer.js Normal file
View File

@@ -0,0 +1,99 @@
this.inherits(NPC);
this.set({
name: "店小二",
desc: "这位店小二正笑咪咪地忙著,还不时拿起挂在脖子上的抹布擦脸。",
gender: 1,
age: 22,
per: this.random(20) + 10,
mp: 150,
max_mp: 150,
hp: 150,
max_hp: 150
});
this.on_enter = function (me) {
let kz = me.query_temp("kezhan");
if (kz) {
me.notify("小二一哈腰:这位客官请上楼歇息。");
return me.send_commands('zhudian ' + this.id, '上楼', 'xufei ' + this.id, '续房',);
}
var str = "";
switch (this.random(2)) {
case 0:
str = "店小二笑咪咪地说道:这位" + me.call()
+ ",要住店吗?请进请进。";
break;
case 1:
str = "店小二用脖子上的毛巾抹了抹手,说道:这位" + me.call()
+ ",请进请进。小店还有几间上好的房间。";
break;
}
me.notify(str);
}
this.add_action("zhudian", "住店", zhudian);
function zhudian(me, par) {
var kd = me.query_temp("kezhan");
if (kd) {
me.moveto("kezhan/fang" + kd, me.name + "向客店二楼走去。");
} else {
me.notify("小二对你说道:这位" + me.call() + ",本店有多种房间提供:\n1. 人字号房每天10两白银学习打坐练功效果增加10%\n2. 地字号房每天30两白银学习打坐练功效果增加20%\n3. 天字号房间每天1两黄金学习打坐练功效果增加50%");
return me.send_commands("give " + this.id + " 1000 money", "人字号客房",
"give " + this.id + " 3000 money", "<hic>地字号客房</hic>",
"give " + this.id + " 10000 money", "<hiy>天字号客房</hiy>");
}
}
this.on_accept = function (me, obj, count) {
if (obj !== "money") return;
if (me.money < 1000) {
return me.notify("小二面无表情的说道住店每天10两白银不二价。");
} else if (count === 1000) {
me.set_temp("kezhan", 1, 1000 * 3600 * 24);
me.send_message("小二一哈腰,说道:多谢您老,客官请楼上歇息。");
me.moveto("kezhan/fang1", me.name + "向客店二楼走去。");
return true;
} else if (count === 3000) {
me.set_temp("kezhan", 2, 1000 * 3600 * 24);
me.send_message("小二一哈腰,说道:多谢您老,客官请楼上歇息。");
me.moveto("kezhan/fang2", me.name + "向客店二楼走去。");
return true;
} else if (count === 10000) {
me.set_temp("kezhan", 3, 1000 * 3600 * 24);
me.send_message("小二一哈腰,说道:多谢您老,客官请楼上歇息。");
me.moveto("kezhan/fang3", me.name + "向客店二楼走去。");
return true;
}
return false;
}
this.add_action("xufei", null, function (me) {
var kd = me.temp['kezhan'];
if (!kd) return zhudian(me);
let money = [0, 1000, 3000, 10000][kd.v];
if (!(money > 0)) return me.send('你还没有住店。');
if (me.money < money) return me.send('你身上的钱不够。');
me.money -= money;
kd.e += 3600000 * 24;
let time = new Date(me.temp['kezhan'].e);
let str = time.getFullYear() + "年" + (time.getMonth() + 1) + "月" + time.getDate() + "日" + time.getHours() + "时";
me.send("小二一哈腰,说道:多谢您老,收您" + UTIL.moneyToStr(money) + ",续房一天。<cyn>(持续到" +
str + ")</cyn>");
});
// this.add_action("dating", "打听消息", function (me) {
// var count = me.query_temp('wsbs', 0);
// if (count >= 5) return me.send('店小二说道:这位客官,小的听到的消息都告诉您老了。');
// var num = me.query_temp('fbbs', 0);
// if (num < 99) return me.send('店小二说道:这位客官,小的这两天也没听到什么消息。');
// var fb = parseInt(num / 100);
// var area = WORLD.AREAS[fb];
// if (area && area.fb_index) {
// me.send('店小二看了看四周:这位客官,小店人多口杂,虽然消息不少,但也不知道该不该讲呀。');
// return me.send_commands("give " + this.id + " 20000 money", '给他几两金子');
// }
// return me.send('店小二说道:这位客官,小的这两天也没听到什么消息。');
// });

32
world/npc/pub/xiaoer2.js Normal file
View File

@@ -0,0 +1,32 @@
this.inherits(NPC);
this.set({
name: "店小二",
desc: "这位店小二正笑咪咪地忙著,还不时拿起挂在脖子上的抹布擦脸。",
gender: 1,
age: 22,
per: this.random(20) + 10,
mp: 150,
max_mp: 150,
hp: 150,
max_hp: 150,
});
this.on_enter = function (me) {
var str = "";
switch (this.random(2)) {
case 0:
str = "店小二笑咪咪地说道:这位" + me.call()
+ ",进来喝杯茶,歇歇腿吧。";
break;
case 1:
str = "店小二用脖子上的毛巾抹了抹手,说道:这位" + me.call()
+ ",请进请进。";
break;
}
me.notify(str);
}
this.set_goods("food/food#0", "food/food#1", "food/food#2", "food/food#3", "food/food#4", "food/drink#0", "food/drink#1", "food/drink#2", "food/drink#3");
this.on_leave = function (me, dir) {
}

33
world/npc/pub/yamen.js Normal file
View File

@@ -0,0 +1,33 @@
this.inherits(NPC);
this.set({
name: "逃犯",
desc: "他是衙门正在追捕的逃犯",
title: "<red>衙门逃犯</red>",
gender: 1,
age: 25,
per: 18,
mp: 400,
max_mp: 400,
hp: 400,
max_hp: 400,
no_refresh: true,
no_fight: true
});
this.init_from = function (player, grade = 0, level = 0) {
this.con = this.dex = this.int = this.str = 30;
this.gender = this.random(2) + 1;
this.desc = (this.gender == 2 ? "她" : "他") + "是" + player.name + "正在追捕的逃犯";
this.name = UTIL.random_name(this.gender);
this.hp = this.max_hp = 1200;
this.pfm_rate = 1;
this.mp = this.max_mp = this.max_hp;
this.init();
this.recount();
}

21
world/npc/pub/yayi.js Normal file
View File

@@ -0,0 +1,21 @@
this.inherits(NPC);
this.set({
name: "衙役",
desc: "一个高大威猛的汉子,因为久在官府做事,脸上已经磨炼得毫无表情。",
title: "知府千金",
gender: 1,
age: 25,
per: 18,
mp: 400,
max_mp: 400,
hp: 4000,
max_hp: 4000,
});
this.skill_map(["dodge", 5500],
["parry", 5500],
["force", 5500],
["unarmed", 5500],
["sword", 5500],
["changshengjue", 5500, "force"]);

23
world/npc/pub/yb_npc.js Normal file
View File

@@ -0,0 +1,23 @@
this.inherits(NPC);
this.set({
name: "蒙面大盗",
desc: "他是来劫镖的江洋大盗",
title: "蒙面大盗",
gender: 2,
age: 65,
per: 33,
str: 50,
con: 50,
dex: 50,
int: 50,
max_mp: 20000000,
max_hp: 12000000,
no_fight: true,
pfm_rate: 1,
no_refresh: true
});
this.on_kill = function (me) {
}

16
world/npc/pub/yingzi.js Normal file
View File

@@ -0,0 +1,16 @@
this.inherits(NPC);
this.set({
name: "衙役",
desc: "",
title: "",
gender: 1,
age: 25,
per: 18,
mp: 400,
max_mp: 400,
hp: 40000000,
max_hp: 40000000,
});