From 85fafcc789a581e21f9073ec1f97c9e28c40f62b Mon Sep 17 00:00:00 2001 From: skizzerz Date: Fri, 30 Oct 2015 12:19:40 -0700 Subject: [PATCH] Fix error, work on nightmares a bit --- src/gamemodes.py | 62 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 60 insertions(+), 2 deletions(-) diff --git a/src/gamemodes.py b/src/gamemodes.py index e8dbd1b..dbb1531 100644 --- a/src/gamemodes.py +++ b/src/gamemodes.py @@ -2,9 +2,9 @@ from collections import OrderedDict import random import math +import threading import src.settings as var -import src.wolfgame as game # for now; need to split out helper functions into another module import botconfig from src import events @@ -784,9 +784,27 @@ class SleepyMode(GameMode): def setup_nightmares(self, evt, cli, var): if random.random() < 1/5: self.having_nightmare = random.choice(var.list_players()) + with var.WARNING_LOCK: + t = threading.Timer(60, self.do_nightmare) else: self.having_nightmare = None + def do_nightmare(self): + pm(cli, self.having_nightmare, ("While walking through the woods, you hear the clopping of hooves behind you. Turning around, " + + "you see a large black horse with dark red eyes and flames where its mane and tail would be. " + + "After a brief period of time, it starts chasing after you! You think if you can cross the bridge " + + "over the nearby river you'll be safe, but your surroundings are almost unrecognizable in this darkness.")) + correct = [None, None, None, None, None] + directions = ["n", "e", "s", "w"] + self.nightmare_step = 0 + for i in range(0, 5): + correct[i] = random.choice(directions) + self.prev_direction = "s" if correct[0] != "s" else "w" + self.nightmare_step() + + def nightmare_step(self); + pass # TODO: finish + def prolong_night(self, evt, cli, var): if self.having_nightmare is not None: evt.data["actedcount"] = -1 @@ -814,7 +832,7 @@ class SleepyMode(GameMode): pm(cli, seer, ("You feel something rushing into you and taking control over your mind and body. It causes you to rapidly " + "start transforming into a werewolf, and you realize your vision powers can now be used to inflict malady " + "on the unwary. You are now a \u0002doomsayer\u0002.")) - game.relay_wolfchat_command(cli, seer, "\u0002{0}\u0002 is now a \u0002doomsayer\u0002.", var.WOLF_ROLES, is_wolf_command=True, is_kill_command=True) + self.relay_wolfchat_command(var, cli, seer, "\u0002{0}\u0002 is now a \u0002doomsayer\u0002.", var.WOLF_ROLES, is_wolf_command=True, is_kill_command=True) for harlot in harlots: var.ROLE["harlot"].remove(harlot) var.ROLE["succubus"].add(harlot) @@ -829,4 +847,44 @@ class SleepyMode(GameMode): "unleash those evils upon the world. You are now a \u0002demoniac\u0002.")) # NOTE: chk_win is called by del_player, don't need to call it here even though this has a chance of ending game + # TODO: this are duplicated from wolfgame.py, should split both off into a utilities.py or something and call it from there + def in_wolflist(self, var, nick, who): + myrole = var.get_role(nick) + role = var.get_role(who) + wolves = var.WOLFCHAT_ROLES + if var.RESTRICT_WOLFCHAT & var.RW_REM_NON_WOLVES: + if var.RESTRICT_WOLFCHAT & var.RW_TRAITOR_NON_WOLF: + wolves = var.WOLF_ROLES + else: + wolves = var.WOLF_ROLES | {"traitor"} + return myrole in wolves and role in wolves + + def relay_wolfchat_command(self, var, cli, nick, message, roles, is_wolf_command=False, is_kill_command=False): + if not is_wolf_command and var.RESTRICT_WOLFCHAT & var.RW_NO_INTERACTION: + return + if not is_kill_command and var.RESTRICT_WOLFCHAT & var.RW_ONLY_KILL_CMD: + if var.PHASE == "night" and var.RESTRICT_WOLFCHAT & var.RW_DISABLE_NIGHT: + return + if var.PHASE == "day" and var.RESTRICT_WOLFCHAT & var.RW_DISABLE_DAY: + return + if not self.in_wolflist(var, nick, nick): + return + + wcroles = var.WOLFCHAT_ROLES + if var.RESTRICT_WOLFCHAT & var.RW_ONLY_SAME_CMD: + if var.PHASE == "night" and var.RESTRICT_WOLFCHAT & var.RW_DISABLE_NIGHT: + wcroles = roles + if var.PHASE == "day" and var.RESTRICT_WOLFCHAT & var.RW_DISABLE_DAY: + wcroles = roles + elif var.RESTRICT_WOLFCHAT & var.RW_REM_NON_WOLVES: + if var.RESTRICT_WOLFCHAT & var.RW_TRAITOR_NON_WOLF: + wcroles = var.WOLF_ROLES + else: + wcroles = var.WOLF_ROLES | {"traitor"} + + wcwolves = var.list_players(wcroles) + wcwolves.remove(nick) + if wcwolves: + mass_privmsg(cli, wcwolves, message) + # vim: set expandtab:sw=4:ts=4: