From 64e6a90921202c6b7c3470b9a4f7ec5976b98e1c Mon Sep 17 00:00:00 2001 From: skizzerz Date: Sat, 12 Nov 2016 23:46:45 -0600 Subject: [PATCH] *hic* Make doctor immunize work against doomsayer sickness and pestilence totem --- messages/en.json | 1 + src/roles/doomsayer.py | 11 ++++++++++- src/roles/shaman.py | 3 ++- src/wolfgame.py | 32 ++++++++++++++++++-------------- 4 files changed, 31 insertions(+), 16 deletions(-) diff --git a/messages/en.json b/messages/en.json index 1684a22..2ebb7df 100644 --- a/messages/en.json +++ b/messages/en.json @@ -377,6 +377,7 @@ "immunized_already_bitten": "You have a brief flashback to {0} last night. The event quickly subsides, but a lingering thought remains in your mind...", "villager_immunized": "You don't feel any different...", "immunization_success": "You feel a sharp prick in the back of your arm and temporarily black out. When you come to, you notice an empty syringe lying on the ground. {0}", + "not_sick": "You feel much better and are now able to leave your home.", "alpha_already_bit": "You have already bitten someone this game.", "alpha_no_bite": "You may only bite someone after another wolf has died yesterday.", "bite_error": "Please choose who to bite by specifying their nick.", diff --git a/src/roles/doomsayer.py b/src/roles/doomsayer.py index c1f5a60..d0b9d82 100644 --- a/src/roles/doomsayer.py +++ b/src/roles/doomsayer.py @@ -42,7 +42,8 @@ def see(cli, nick, chan, rest): mode, mapping = random.choice(_mappings) pm(cli, nick, messages["doomsayer_{0}".format(mode)].format(victim)) - mapping[nick] = victim + if mode != "sick" or nick not in var.IMMUNIZED: + mapping[nick] = victim debuglog("{0} ({1}) SEE: {2} ({3}) - {4}".format(nick, role, victim, victimrole, mode.upper())) relay_wolfchat_command(cli, nick, messages["doomsayer_wolfchat"].format(nick, victim), ("doomsayer",), is_wolf_command=True) @@ -92,6 +93,14 @@ def on_del_player(evt, cli, var, nick, nickrole, nicktpls, death_triggers): if nick == k or nick == v: del dictvar[k] +@event_listener("doctor_immunize") +def on_doctor_immunize(evt, cli, var, doctor, target): + if target in SICK.values(): + for n, v in list(SICK.items()): + if v == target: + del SICK[n] + evt.data["message"] = "not_sick" + @event_listener("chk_nightdone") def on_chk_nightdone(evt, cli, var): evt.data["actedcount"] += len(SEEN) diff --git a/src/roles/shaman.py b/src/roles/shaman.py index e51bafc..da8e258 100644 --- a/src/roles/shaman.py +++ b/src/roles/shaman.py @@ -560,7 +560,8 @@ def on_begin_day(evt, cli, var): var.EXCHANGED.update(EXCHANGE) var.SILENCED.update(SILENCE) var.LYCANTHROPES.update(LYCANTHROPY) - var.DISEASED.update(PESTILENCE) + # pestilence doesn't take effect on immunized players + var.DISEASED.update(PESTILENCE - var.IMMUNIZED) var.LUCKY.update(LUCK) var.MISDIRECTED.update(MISDIRECTION) diff --git a/src/wolfgame.py b/src/wolfgame.py index 5f8b8ad..2d6eaeb 100644 --- a/src/wolfgame.py +++ b/src/wolfgame.py @@ -5010,21 +5010,25 @@ def immunize(cli, nick, chan, rest): vrole = get_role(victim) if check_exchange(cli, nick, victim): return - pm(cli, nick, messages["doctor_success"].format(victim)) - lycan = False - if vrole == "lycan": - lycan = True - lycan_message = (messages["lycan_cured"]) - var.ROLES["lycan"].remove(victim) - var.ROLES["villager"].add(victim) - var.FINAL_ROLES[victim] = "villager" - var.CURED_LYCANS.add(victim) + evt = Event("doctor_immunize", {"success": True, "message": "villager_immunized"}) + if evt.dispatch(cli, var, nick, victim): + pm(cli, nick, messages["doctor_success"].format(victim)) + lycan = False + if victim in var.DISEASED: + var.DISEASED.remove(victim) + if vrole == "lycan": + lycan = True + lycan_message = (messages["lycan_cured"]) + var.ROLES["lycan"].remove(victim) + var.ROLES["villager"].add(victim) + var.FINAL_ROLES[victim] = "villager" + var.CURED_LYCANS.add(victim) + else: + lycan_message = messages[evt.data["message"]] + pm(cli, victim, (messages["immunization_success"]).format(lycan_message)) + if evt.data["success"]: var.IMMUNIZED.add(victim) - else: - lycan_message = messages["villager_immunized"] - var.IMMUNIZED.add(victim) - pm(cli, victim, (messages["immunization_success"]).format(lycan_message)) - var.DOCTORS[nick] -= 1 + var.DOCTORS[nick] -= 1 debuglog("{0} ({1}) IMMUNIZE: {2} ({3})".format(nick, get_role(nick), victim, "lycan" if lycan else get_role(victim))) @cmd("bite", chan=False, pm=True, playing=True, silenced=True, phases=("night",), roles=("alpha wolf",))