CHARACTER.prototype.moveto = function (rm, leave_msg, in_msg, dir) { var cur_room = this.environment; var next_room = rm; if (typeof rm === "string") { next_room = ROOM.Get(rm); if (!next_room) return false; if (next_room.parent === cur_room.parent) { if (cur_room.owner) { next_room = next_room.query_copy(cur_room.owner); } } else { var my_room = next_room.query_copy2(this); if (my_room) { next_room = my_room; } } } if (!next_room) return false; if (next_room.is_full()) { //如果房间人数过多,创建投影 next_room = next_room.create_shadow(); if (!next_room) { //如果创建失败就返回,房间设置不允许投影,或别的原因 return this.notify("那里人太多了,你过不去。"); } } if (cur_room) { if (cur_room.do_leave(this, dir, leave_msg) === false) { return false; } } next_room.do_enter(this, true, in_msg); this.notify_follower(dir); if (cur_room && next_room.parent !== cur_room.parent) { cur_room.parent.on_leaved(this); } } CHARACTER.prototype.do_follow = function (target) { if (target) { if (target.query_setting("no_follow")) { return this.notify(target.name + "不允许别人跟随。"); } if (this.follow_target) { this.follow_target.follow_targets.remove(this); this.send_room("$N不再跟随$n一起行动。", this.follow_target); } this.follow_target = target; if (!target.follow_targets) { target.follow_targets = []; } target.follow_targets.push(this); this.send_room("$N决定跟随$n一起行动。", target); } else { if (!this.follow_target) return this.notify("你目前没有跟随别人一起行动。"); this.follow_target.follow_targets.remove(this); this.send_room("$N不再跟随$n一起行动。", this.follow_target); this.follow_target = null; } } CHARACTER.prototype.clear_follow = function () { if (this.follow_target) { this.follow_target.follow_targets.remove(this); this.follow_target = null; } if (this.follow_targets) { for (let item of this.follow_targets) { item.follow_target = null; } this.follow_targets = null; } } CHARACTER.prototype.notify_follower = function (dir) { if (this.follow_targets) { for (var i = 0; i < this.follow_targets.length; i++) { var item = this.follow_targets[i]; if (!item.environment) continue; if (!item.is_player) { if (item.on_master_leave) { if (item.on_master_leave(this, this.environment) == false) { continue; } } else { if (item.environment.is_fb() != this.environment.is_fb()) { continue; } } //if (item.state && item.set_state) { // item.set_state(null); //} item.moveto(this.environment, sendOutMessage(item, dir), sendInMessage(item)); } else { item.moveto(this.environment, sendOutMessage(item, dir), sendInMessage(item)); } } } } CHARACTER.prototype.do_escape = function () { var eny = this.query_enemy(); if (!eny) return true; if (eny.on_escape) return eny.on_escape(this); var is_esc = this.random(this.ds / 2) + this.ds > eny.mz; if (eny.is_faint) is_esc = true; if (!is_esc) { this.send_room("$N转身想跑,$n一把拦住$P:想跑?没门!\n", eny); this.add_status({ id: "busy", name: "忙乱", duration: this.gjsd, is_busy: true }); } return is_esc; } CHARACTER.prototype.team_out = function (msg) { var tm = this.team; if (!tm) return; for (var i = 0; i < tm.length; i++) { if (!tm[i].is_player && tm[i].master == this.id) { tm[i].on_teamout && tm[i].on_teamout(); this.notify(tm[i].name + "退出了队伍。"); tm[i].team = null; tm.splice(i, 1); i--; } } this.team = null; var iscap = this == tm[0]; tm.remove(this); checkTeamfb(this); if (!tm.length) { this.send("你的队伍解散了。"); this.send('{"type":"dialog","dialog":"team",dismiss:true}'); } else { var first = tm[0]; var dissmsg = '{"type":"dialog","dialog":"team",dismiss:true}'; this.send("你退出了队伍。"); if (tm.length > 1) { if (iscap) { first.send_team("" + this.name + msg + "," + first.name + "现在是队长。"); } else { first.send_team("" + this.name + msg + "。"); } first.send_team('{"type":"dialog","dialog":"team",remove:"' + this.id + '"}'); this.send(dissmsg); } else { if (first.team) { checkTeamfb(first); first.send("" + this.name + msg + ",你的队伍解散了。"); first.team.length = 0; first.team = null; first.send(dissmsg); this.send(dissmsg); } } } }