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}>衙门追捕`; } 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); }