diff --git a/messages/en.json b/messages/en.json index 9686e32..f02a89e 100644 --- a/messages/en.json +++ b/messages/en.json @@ -124,7 +124,8 @@ "invalid_channel": "You need to be in {0} to use that command.", "swap_notice": "More than one player is logged in to your account. Use '{0}swap ' to swap.", "account_not_playing": "You do not appear to be playing. Make sure you are identified to the same account.", - "target_not_playing": "That person is no{0} playing.", + "target_not_playing": "That person is not playing.", + "target_no_longer_playing": "That person is no longer playing.", "target_not_logged_in": "That person is not logged in to NickServ.", "player_swap": "\u0002{0}\u0002 has swapped places with \u0002{1}\u0002.", "get_pingif": "You will be pinged when there are at least {0} players joined.", diff --git a/src/wolfgame.py b/src/wolfgame.py index d7f0967..38de752 100644 --- a/src/wolfgame.py +++ b/src/wolfgame.py @@ -548,7 +548,7 @@ def replace(var, wrapper, message): if not rest: # bare call target = None - for user in users.users_(): # FIXME: Backwards-compatible API + for user in var.ALL_PLAYERS: if users.equals(user.account, wrapper.source.account): if user is wrapper.source or user.nick not in list_participants(): # FIXME: Need to fix once list_participants() holds User instances continue @@ -568,7 +568,11 @@ def replace(var, wrapper, message): target, _ = users.complete_match(rest[0], pl) if target is None: - wrapper.pm(messages["target_not_playing"].format(" longer" if target in var.DEAD else "t")) + wrapper.pm(messages["target_not_playing"]) + return + + if target not in pl: + wrapper.pm(messages["target_no_longer_playing" if target.nick in var.DEAD else "target_not_playing"]) # FIXME: Need to fix once var.DEAD holds User instances return if target.account is None: @@ -576,6 +580,8 @@ def replace(var, wrapper, message): return if users.equals(target.account, wrapper.source.account) and target is not wrapper.source: + evt = Event("swap_player", {}) + evt.dispatch(var, target, wrapper.source) rename_player(var, wrapper.source, target.nick) # Make sure to remove player from var.DISCONNECTED if they were in there if var.PHASE in var.GAME_PHASES: @@ -586,7 +592,11 @@ def replace(var, wrapper, message): channels.Main.mode(("-" + mode, target), ("+" + mode, wrapper.source)) channels.Main.send(messages["player_swap"].format(wrapper.source, target)) - myrole.caller(wrapper.source.client, wrapper.source.nick, wrapper.target.name, "") + myrole.caller(wrapper.source.client, wrapper.source.nick, wrapper.target.name, "") # FIXME: Old API + +@event_listener("swap_player", priority=0) +def swap_player(evt, var, old_user, user): + var.ALL_PLAYERS[var.ALL_PLAYERS.index(old_user)] = user @command("pingif", "pingme", "pingat", "pingpref", pm=True) def altpinger(var, wrapper, message): @@ -3016,14 +3026,6 @@ def rename_player(var, user, prefix): event = Event("rename_player", {}) event.dispatch(user.client, var, prefix, nick) # FIXME: Need to update all the callbacks - try: - temp = users._get(prefix) # FIXME - except KeyError: # dirty hack; this isn't a swap - pass - else: - # ALL_PLAYERS needs to keep its ordering for purposes of mad scientist - var.ALL_PLAYERS[var.ALL_PLAYERS.index(temp)] = user - if user in var.ALL_PLAYERS: try: r = var.ROLES[get_role(prefix)] @@ -6561,7 +6563,7 @@ def listroles(cli, nick, chan, rest): reply(cli, nick, chan, " ".join(msg)) @cmd("myrole", pm=True, phases=("day", "night")) -def myrole(cli, nick, chan, rest): +def myrole(cli, nick, chan, rest): # FIXME: Need to fix !swap once this gets converted """Reminds you of your current role.""" ps = list_participants()