From 3ef78078c4797e66355e117b52ad0bd1280f8ee2 Mon Sep 17 00:00:00 2001 From: Elijah Perrault Date: Mon, 18 Apr 2011 17:35:36 -0600 Subject: [PATCH] Werewolf: Wounded villagers are now excluded from winning villager count. --- doc/CHANGELOG | 1 + modules/Werewolf.pm | 37 ++++++++++++++++++++++++------------- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/doc/CHANGELOG b/doc/CHANGELOG index 43e0a1b..0740112 100644 --- a/doc/CHANGELOG +++ b/doc/CHANGELOG @@ -3,6 +3,7 @@ Auto IRC Bot 3.0: Change Log 3.0 Indev =============================================================================== + * Werewolf: Wounded villagers are now excluded from winning villager count. * Werewolf: Dynamic lynch and no victim messages. * Werewolf 1.05: Added WAIT command. * Werewolf: Improved STATS to be smart. diff --git a/modules/Werewolf.pm b/modules/Werewolf.pm index fcfab11..acc3dbf 100644 --- a/modules/Werewolf.pm +++ b/modules/Werewolf.pm @@ -610,6 +610,9 @@ sub cmd_wolf { } # Set number of votes required to lynch. _calclvn(); + + # Check for winning conditions. + _chkwin(); } } } @@ -1415,19 +1418,8 @@ sub _player_del { if ($LVOTEN) { _calclvn() } # Check for winning conditions. - if (!$PGAME) { - my $wolves; - for (values %PLAYERS) { if (m/w/xsm) { $wolves++ } } - if (!$wolves) { _gameover('v'); return } - my $villagers; - for (values %PLAYERS) { if (m/(v|s|g|h|d)/xsm) { $villagers++ } } - if ($villagers <= $wolves) { _gameover('w'); return } - } - else { - # Check if there's any more players. - if (!keys %PLAYERS) { _gameover('n') } - } - + if (!_chkwin()) { return } + # Call lynch management IF judgment did not call us. if ($PHASE and !$judgment) { if ($PHASE eq 'd') { _lynchmng() } @@ -1457,6 +1449,25 @@ sub _lynchmng { return 1; } +# Subroutine for checking if we have a winner. +sub _chkwin { + if (!$PGAME) { + my $wolves; + for (values %PLAYERS) { if (m/w/xsm) { $wolves++ } } + if (!$wolves) { _gameover('v'); return } + my $villagers; + for (values %PLAYERS) { if (m/(v|s|g|h|d)/xsm) { $villagers++ } } + $villagers -= scalar @SHOT; + if ($villagers <= $wolves) { _gameover('w'); return } + } + else { + # Check if there's any more players. + if (!keys %PLAYERS) { _gameover('n') } + } + + return 1; +} + # Handling the end of the game. sub _gameover { my ($winner) = @_;