this.inherits(USERTASK);
this.id = "yamen2";
this.requests = new Map();
this.on_create = function () {
var task = USERTASK.GET('yamen2');
if (task) {
this.requests = task.requests;
}
}
const TAGS = ['wht', 'hic', 'hiy', 'hiz', 'hio', 'ora'];
this.query_title = function (me) {
let tag = TAGS[me.query_temp('ym_level', 0)];
return `<${tag}>衙门追捕${tag}>`;
}
const TITLES = ['', '衙役', '捕快', '捕头', '总捕头', '巡检 ', '神捕'];
const UPGRADE_COUNT = [1, 10, 10, 10, 10, 10];
this.query_desc = function (me) {
let request = this.query_request(me);
if (!request) return me.remove_temp('ym_task');
var str = ["扬州知府委托你追杀逃犯:"];
if (request && request.npc) {
str.push(request.npc.name);
str.push(",据说最近在");
str.push(request.wz);
str.push("出现过,你还有");
var time = request.time - Date.now();
if (time <= 0) {
this.clear(me);
return "你的任务失败了。";
}
str.push(parseInt(time / 60000));
str.push("分");
str.push(parseInt((time % 60000) / 1000));
str.push("秒去寻找他。\n");
let level = me.query_temp('ym_level', 0);
let level2 = me.query_temp('ym_lv2', 0);
if (level > 0)
str.push("追捕成功后(", level2, '/', UPGRADE_COUNT[level],
"),将提升为", TITLES[level + 1], "。");
else
str.push("追捕成功后将加入衙门兼职,每日获得衙门发放的报酬。");
} else {
str.push("找不到了。");
}
return str.join("");
}
this.query_state = function (me) {
let request = this.query_request(me);
if (me.query_temp("ym_task") && request)
return 1;
return 0;
}
const LEVEL_LIMIT = [0, 1000000, 5000000, 17000000, 80000000, 300000000, 1000000000];
const LEVEL_LIMIT2 = [0, 0, 0, 0, 23000000, 50000000, 1500000000];
this.start = function (player) {
if (player.query_temp("ym_task")) {
var request = this.requests.get(player.id);
if (request)
return player.notify("程药发对你说道:你不是在追捕吗? 好好干。");
}
let lv = player.query_temp('ym_level', 0);
if (lv >= TITLES.length)
return player.notify("程药发对你说道:你已经是最高等级的神捕,不用再证明自己。");
const lv2 = player.query_temp('ym_lv2', 0);
const npc = NPC.CLONE("pub/yamen");
npc.init_from(player, lv, lv2);
const rm = ROOM.RANDOM();
rm.item_changed(npc, true);
this.set_request(player, npc, rm.long_name);
if (lv > 0) {
player.notify("程药发对你说道:你来的正好," + npc.name + "作恶多端,还请" + player.call() + "为民除害,听说他最近在" + rm.long_name + "出现过。");
player.send_commands('goto yamen2', '过去');
}
else {
player.notify("程药发对你说道:这位" + player.call() + ",你还没加入衙门吧,这样,你去除掉" + npc.name + ",我就收了你,听说他最近在" + rm.long_name + "出现过。");
}
player.set_temp("ym_task", npc.id);
npc.set_temp("player", player.id);
npc.on_died = this.check.bind(this, npc);
npc.on_kill = this.check_player;
}
this.to_taofan = function (player) {
var request = this.requests.get(player.id);
if (request) {
let npc = request.npc;
if (npc && npc.hp > 0) {
player.moveto(npc.environment, player.name + '离开了。', player.name + "走了过来。");
}
}
}
this.query_request = function (me) {
return this.requests.get(me.id);
}
this.set_request = function (me, npc, wz) {
this.requests.set(me.id, {
npc: npc,
time: Date.now() + 600000,
handler: this.call_out(this.clear, 600000, me, npc),
wz: wz
});
}
this.check_player = function (me) {
if (me.id != this.query_temp("player")) {
return me.notify_fail(this.name + "对你喊道:" + me.call(true) + ",别多管闲事!");
}
}
this.remove_request = function (me, isremove) {
var request = this.requests.get(me.id);
if (!request) return;
if (isremove && request.npc) {
request.npc.destroy();
request.npc.send_room("$N向后跃开三尺,高声喊道:青山不改,绿水长流,咱们走着瞧!\n");
}
request.npc = null;
clearTimeout(request.handler);
this.requests.delete(me.id);
}
this.check = function (npc, killer, corpse) {
var user = npc.query_temp("player");
if (!killer || killer.id != user || killer.query_temp("ym_task") != npc.id) {
var real_player = WORLD.getUser(user);
if (real_player) {
real_player.notify("你追捕的逃犯被别人击杀,你的任务失败了。");
real_player.remove_temp("ym_task");
this.remove_request(real_player, false);
}
return;
}
const player = killer;
this.remove_request(player, false);
player.remove_temp("ym_task");
let level = player.query_temp("ym_level", 0);
if (level >= TITLES.length) return;
if (level === 0) {
player.notify("你成功帮助衙门追捕犯人,获得称号【衙役】");
player.add_title(TITLES[1], "ym");
player.add_temp("ym_level", 1);
player.set_temp("ym_tm", Math.floor(Date.now() / 100000));
player.notify("\n扬州衙门将对你持续发放报酬,从任务栏领取。\n");
} else {
let level2 = player.add_temp("ym_lv2", 1);
if (level2 >= UPGRADE_COUNT[level]) {
USERTASK.GET('yamen').on_finish(player);
level = player.add_temp("ym_level", 1);
player.remove_temp("ym_lv2", 0);
player.notify("你帮助衙门连续追捕犯人,获得称号:" + TITLES[level] + "。");
player.add_title(TITLES[level], "ym");
player.notify("你的衙门报酬等级提高了。");
} else {
player.notify("追捕成功,当前级别" + TITLES[level] + "(" + level2 + "/" + UPGRADE_COUNT[level] + ")。");
}
let obj = player.add_obj(["st/st_blu#",
"st/st_gre#", "st/st_red#", "st/st_yel#"].random() + Math.min(level, 4));
player.notify("你获得" + obj.unit_name(1) + "。");
let exp = [5000, 8000, 12000, 16000, 20000, 25000][level - 1];
player.add_exp(exp, exp);
}
}
this.clear = function (player, npc) {
this.giveup(player);
player.notify("你的追捕任务失败了。");
}
this.giveup = function (player) {
player.remove_temp("ym_task");
this.remove_request(player, true);
}