Administrators chain Posted December 21, 2022 Administrators Report Share Posted December 21, 2022 Intro: This is a remake of the very first version of a Mafia game I ran, and is considered to be a demo bot of the one ran on #Mafia on SwiftIRC. The code has been simplified for those who can't script too well, so it's easily adjustable, but at the same time I made it slightly more efficient. I've had two friends help me with various bits and pieces because at 3 AM I sometimes lose the ability to think. About the game: Simply put, to win the game be the last team standing. There are three teams: Civilian Team (civilians, doctor, homeless bum, and detective), Mafia Team (mafia 1, mafia 2, etc), and Killer Team (killer alone). Before the game starts, the bot will query (PM) everybody to accept or reject a role, and that's how you know what role you are. If you reject, you'll either be given a different role if one is rejected, or you'll be a civilian. Every night everybody except the civilians have something to do, and the bot PMs everyone with his/her actions. During the day there's an optional voting to hang a person, if that person is hung, he/she dies and is taken out of the game. Installation: To set up the bot, it's fairly easy, just copy the code below into the mIRC Remotes or Aliases tab (alt+R to get there). Upon loading the script it will set the very minimum variables it needs, such as the colors, and the like. By default the bot's nick will be MafiaGameBot, the password to identify via NickServ is PASSWORDGOESHERE, and the game channel is #MafiaGameChannel. To change either the nick or password use /set %BotsNick nick-here or /set %BotsPass password-here, or use an operator command, which is also talked about below. To change the gaming channel, use /set %GameChannel #Channel-here Upon connecting to the server the bot will join the channel, identify it's nick, and be ready to start playing. Basic staff commands: There aren't very many of them, but then again, the original didn't have a lot anyway, and this does have just a few more than that one did. To register a user into the game, even if it's already playing, just use !reguser nick while being opped and/or halfopped. To stop the game, or prevent it from being played until a staff member allows it, use !stop, then either !start, !reg, or !reguser to get it going again. To end the registration process early and skip right to the role give out phase, staff can use the !endreg command. If for whatever reason the bot become unidentified with NickServ, staff can force it to change its nick to the proper nick and identify using the !ident command. Ops can also change a couple of variables for the bot, such as the colors, the nick's password, and so forth. This command is !set, and its syntax is as followed: !set VariableName value. The colors are probably going to be the most often ones change, and they are c1, c2, c3, c4, and c5 ordered from primary, secondary, and so on. To change the primary color, use !set c1 new-color-here. In example: !set c1 04. It has to be two digits, if not, it'll just give you an error. The rest of the set commands are just !set GameChanne, !set BotsNick, and !set BotsPass, fairly basic, which is key. !TakeOut will take the specified user out of the game. Short list of commands: Not wanting to go into what each command does, but here's a short list of what they are: !start, !reg, !unreg, !killme, !reguser, !endreg, !stop, !endreg, !kick, !set, !kill, !check, !heal, !cancel, !yes, !no, !all, !stat, !q, !dur, !gamestat, !night, !sideswon, !invite, !takeout Rules: The rules for this game can be found on the forum, which is http://mafbot.com/forum/index.php Though the most important part is to not play against your role, and don't give away your role to anybody that's currently in the game. Conclusion: The bot has been tested, but as always, bugs/glitches/errors/mistakes/typos are expected, so if something doesn't go right, feel more than free to fix it yourself, or post on the forum, and it will be fixed. The same can be said you'd like something to be changed/tweaked/updated/added. Because this is open source, you can mess with the code as you please. ;LOAD THIS PART INTO THE REMOTES TAB alias c1 { return $+(,%c1,$1-) } alias c2 { return $+(,%c2,$1-) } alias c3 { return $+(,%c3,$1-) } alias c4 { return $+(,%c4,$1-) } alias c5 { return $+(,%c5,$1-) } on *:load:set %c1 14 | set %c2 10 | set %c3 07 | set %c4 05 | set %c5 11 | set %GameChannel #MafiaGameChannel | set %BotsNick MafiaGameBot | set %BotsPass PASSWORDGOESHERE | set %CiviliansWon 0 | set %MafiaWon 0 | set %KillerWon 0 | set %Ties 0 | set %GameCount 0 | set %Visitors 0 on *:text:!set*:?:{ if ($nick !isop %GameChannel) return if (!$2) { msg $nick $c2(You must first specify a parameter! | return } if (!$3) msg $nick $c2(Missing parameter!) if (($2 == c1) || ($2 == c2) || ($2 == c3) || ($2 == c4) || ($2 == c5) { if (!$3) { msg $nick $c2(Enter a digit from 00 to 15. | return } if ($len($2) != 2) { msg $nick $c2(Please enter a two digit number. In example: 04 for red, or 12 for blue.) | return } if (($3 > 15) || ($3 < 0)) { msg $nick $c2(The parameter must be between 00 and 12. | return } set % $+ $2 $3 msg $nick $c1(The value of) $c2($2) $c1(has been changed to) $c3($3) return } elseif ($2 == BotsNick) { if (!$3) { msg $nick $c2(Enter a nick that is alphanumeric or contains the following character: `^()|/ and does not start with a number) | return } set %BotsNick $3 } elseif ($2 == BotsPass) { if (!$3) { msg $nick $c2(Please specify a password without spaces) | return } set %BotsPass $3 } elseif ($2 == GameChannel) { if (!$3) { msg $nick $c2(Please specify a new game channel for the bot!) } if ($me !ison $3) { msg $nick $c2(I must first be on the channel and have operator status | return } if ($me !isop $3) { msg $nick $c2(I must first operator status in that channel) | return } if ($nick !isop $3) { msg $nick $c2(You must first obtain operator status in the channel before using this command) | return } set %GameChannel $3 } } on *:text:!start:%GameChannel:StartTheGame $nick on *:text:!done*:%GameChannel:{ if ((%GameIsPlayig == false) || ($GameIsStopped == true) || (%Voting == no) || ($nick != %CiviliansVictim)) return else { timers off | EndVoting } } on *:text:!cancel:?:{ if ((%GameIsPlaying == false) || (%GameIsStopped == true)) return if (($WhatIs($nick) == Detective) && (%DetectiveMoved == 1)) { set %DetectiveMoved 0 | msg %GameChannel $c1(For some reason the) $c3(detective) $c1(decided it would be best to rethink the plot and went home) } if (($read($m.txt,1) == $1) && (%MafiaMoved == 1)) { set %MafiaMoved 0 | msg %GameChannel $c1(For some reason the) $c3(mafia) $c1(wanted to switch out targets and went back to the drawing board) } if (($WhatIs($nick) == Doctor) && (%DoctorMoved == 1)) { set %DoctorMoved 0 | msg %GameChannel $c1(For some reason the) $c3(detective) $c1(decided it would be best to rethink the plot and went home) } } on *:text:!stat:%GameChannel:msg # $AllActiveRoles on *:text:!yes*:%GameChannel:VoteFor $nick on *:text:!no*:%GameChannel:VoteAgainst $nick on *:text:!dur:%GameChannel:if ($GameIsPlaying == true) # $c1(The game has been going on for) $c2($duration($calc($ctime - %dur)))) on *:text:!dur:?:if ($GameIsPlaying == true) $nick $c1(The game has been going on for) $c2($duration($calc($ctime - %dur)))) on *:text:!day:%GameChannel:if (%GameIsPlaying == true) { if (($nick isop $chan) | ($nick ishop $chan)) Day } on *:text:!ident:%GameChannel:if (($nick isop $chan) || ($nick ishop $chan) { /ns ghost %BotsNick %BotsPass | /nick %BotsNick | /ns identify %BotsPass } on *:text:!gamestat:%GameChannel:if (%GameIsPlaying == true) msg # $c1(Number of players:) $c2(%NumberOfPlayer) $c1(nights passed:) $c2(%nights) $c1(number of roles:) $c2($calc(%TotalMafia + %TotalDetective + %TotalKiller + %TotalDoctor + %TotalHomeless)) on *:text:!gamestat:?:if (%GameIsPlaying == true) msg $nick $c1(Number of players:) $c2(%NumberOfPlayer) $c1(nights passed:) $c2(%nights) $c1(number of roles:) $c2($calc(%TotalMafia + %TotalDetective + %TotalKiller + %TotalDoctor + %TotalHomeless)) on *:text:!nights:GameChannel:if (%GameIsPlaying == true) msg # $c1(There have been) $c2(%nights) $c1(nights so far.) on *:text:!nights:?:if (%GameIsPlaying == true) msg $nick $c1(There have been) $c2(%nights) $c1(nights so far.) on *:text:!games:%GameChannel:msg $chan $c1(There have been) $c2(%played) $c1(games in total...) on *:text:!games:?:$nick $c1(There have been) $c2(%played) $c1(games in total...) on *:text:!sideswon:%GameChannel:msg # $c1(The) $c3(civilians) $c1(have won) $c2(%CiviliansWon) $c1(times,) $c1(the) $c3(mafia) $c1(have won) $c2(%MafiaWon) $c1(times,) $c1(the) $c3(killer) $c1(has won) $c2(%KillerWon) $c1(times,) $c1(and there have been a total of) $c2(%Ties) $c1(ties.) on *:text:!sideswon:?:msg $nick $c1(The) $c3(civilians) $c1(have won) $c2(%CiviliansWon) $c1(times,) $c1(the) $c3(mafia) $c1(have won) $c2(%MafiaWon) $c1(times,) $c1(the) $c3(killer) $c1(has won) $c2(%KillerWon) $c1(times,) $c1(and there have been a total of) $c2(%Ties) $c1(ties.) on *:text:!rules:?: /msg $nick $c1(The basic rules of the game is to make sure that your team succeeds in surviving, and you do so according to your role. There are the) $c3(civilians, mafia, detective, killer, homeless bum) |msg $nick $c1(For more information about the roles, please type in) $c2(!roles) on *:text:!roles:?:msg $nick $c1(The) $c3(civilians) $c3(can't do a whole lot at night, they wait for the day, when they vote. The) $c3(Detective) $c1(can either check a player's role by) $c2(!check target) $c1(or kill one by) $c2(!kill target) $+ ($c1.) $c3(Mafia) $c1(can only kill, and it's the same way as the) $c3(detective) $c1(and the) $c3(killer) $c1(The) $c3(homeless) $c1(can only check, and same way as the) $c3(detective) $c1(while the) $c3(doctor) $c1(can heal a killed peson with) $c2(!heal) | /msg $nick $c1(For more information at what what happens in the day time, please type in) $c2(!day) on *:text:!day:?:msg $nick $c1(Right after everybody has made their moves, the day time comes. This is where everything that has been done is revealed, and those who are killed, are taken out of the game. Then we have the voting to see who the people (this includes everybody in the game) want to kill, giving the civilians a chance to get involved, for there's a lot of them. The voting is done by typing in) $c2(!nick) | msg $nick $c1(After that is done, the people decide on whether or not to hang the chosen one, by typing either) $c2(!yes) $c1(or) $c2(!no) on *:text:!q:%GameChannel:/msg # $c1(There are currently) $c2(%NumberOfPlayers) $c1(players.) on *:text:!q:?:/msg $nick $c1(There are currently) $c2(%NumberOfPlayers) $c1(players.) on *:text:!roles:%GameChannel:if (%GameIsPlaying == true) msg %GameChannel $c1(In total:) $c3(civilians -) $c2(%TotalCivilian) $c3(mafia -) $c2(%TotalMafia) $c3(killer -) $c2(%TotalKiller) $c3(doctor -) $c2(%TotalDoctor) $c3(detective -) $c2(%TotalDetective) $c3(homeless bum -) $c2(%TotalHomeless) on *:text:!endreg:%GameChannel:if (($nick isop $chan) || ($nick ishop #)) timers off | GiveOutRoles on *:connect:set %GameIsPlaying false | /ns ghost %BotsNick %BotsPass | /nick %BotsNick | /ns identify %BotsPass | join %GameChannel on *:text:!reguser*:%GameChannel:ReggedByOp $2 $nick on *:text:!reguser*:?:ReggedByOp $2 $nick on *:text:!reg:%GameChannel:reg $nick on *:text:!reg:?:reg $nick on *:text:!yes:?:AcceptRole $nick on *:text:!no:?:RejectRole $nick on *:text:!check*:?:check $2 $nick $3- on *:text:!kill*:?:kill $2 $nick $3- on *:text:!heal*:?:heal $2 $nick $3- on *:devoice:if ($nick != $me) %GameChannel:TakeOut $vnick on *:text:!killme:%GameChannel:TakeOut $nick on *:part:%GameChannel:Leaving $nick on *:quit:Leaving $nick on *:text:!unreg:%GameChannel:if (%Registration == on) TakeOut $nick on *:text:!Stop:%GameChannel: { if (($nick !isop #) && ($nick !ishop #)) return if (%GameIsStopped == true) return timers off set %GameIsStopped true set %GameIsPlaying false msg # $c2(The game has been stopped, and now only a staff member of the channel may start it!) } on *:text:!Stop:?: { if (($nick !isop %GameChannel) && ($nick !ishop %GameChannel)) return if (%GameIsStopped == true) return timers off set %GameIsStopped true set %GameIsPlaying false msg %GameChannel $c2(The game has been stopped, and now only a staff member of the channel may start it!) } on *:text:!TakeOut*:%GameChannel:if (($nick isop %GameChannel) || ($nick ishop %GameChannel)) TakeOut $2 on *:text:!*:%GameChannel:ThoseVoted $nick $1 on *:join:%GameChannel:JoinGameChannel $nick on *:text:!invite *:%CivilianChannel:if (($WhatIs($nick) == detective) || ($WhatIs($nick) == homeless)) invite $2 $chan | msg $2 $c1(You have been invited to $c2(%CivilianChannel) on *:text:!r *:#:if (($2 isnum) && ($3 isnum) && ($2 < $3) ($c1(Your random number is:) $c2($r($1,$2)) on *:kick:%GameChannel:Takeout $knick on *:nick:ChangedNick $nick $newnick on *:text:!version:*:msg $nick $c1(This version of the $c2(Mafia)$c1(/)$c2(Warewolf) $c2(game bot is) $c3(AV2 1.2.5) on *:text:!ver:*:msg $nick $c1(This version of the $c2(Mafia)$c1(/)$c2(Warewolf) $c2(game bot is) $c3(AV2 1.2.5) ;LOAD THIS PART INTO THE ALIASES TAB InGame { set %x 1 if ((%NumberOfPlayers == 0) || (%GameIsPlaying == false)) return no while ($read(l.txt,%x) != $null) { if ($1 == $read(l.txt,%x)) return yes inc %x } return no } EndRoles { timers off msg %GameChannel $c1(The game has been played for) $c2($duration($calc($ctime - %dur)))) $+ $c1(.) inc %Played if (%Nights > %MostNights) set %MostNights %Nights unset %Nights msg %GameChannel $c1(The roles were:) %x = 1 while ($read(w.txt,%x)) { %Player = $read(w.txt,%x) if (%Player != $null) msg %GameChannel $c3(Mafia %x $+ :) $c2(%Player) inc %x } set %Player %WasKiller if (%Player) msg %GameChannel $c3(Killer:) $c2(%Player) set %Player %WasDoctor if (%Player) msg %GameChannel $c3(Doctor:) $c2(%Player) set %Player %WasDetective if (%Player) msg %GameChannel $c3(Detective:) $c2(%Player) set %Player %WasHomeless if (%Player) msg %GameChannel $c3(Bum:) $c2(%Player) EndGame } Punt { if ((!$1) || (%GameIsPlaying != true)) return set %x 1 while ($read(l.txt,%x) != $null) { if ($read(l.txt,%x) == $1) write -dl %x l.txt if ($read(m.txt,%x) == $1) write -dl %x m.txt inc %x } if ($1 ison %GameChannel) mode %GameChannel -v $1 if ($2) { if ($2 ison %GameChannel) mode %GameChannel -v $2 } if ($WhatIs($1) == Detective) unset %Detective if ($WhatIs($1) == killer) unset %Killer if ($WhatIs($1) == Doctor) unset %Doctor if ($WhatIs($1) == Homeless) unset %Homeless } BotsMoves { if ((%GameIsPlaying == false) || ($InGame($1) == no)) return if ($WhatIs($1) == Civilian) { msg %GameChannel $c1(The bot had to take real action:) $c3(civilian) $c2($1) $c1(was put face-first into a wall, and shot in the back!) if ($InGame($1) == yes) { dec %TotalCivilian | kick $1 %CivilianChannel You died. } } if ($WhatIs($1) == detective) { msg %GameChannel $c1(The was sitting in the bar when the) $c3(detective) $c2($1) $c1(got too drunk and started a fight, but ended up headless on the floor!) if ($InGame($1) == yes) { dec %TotalDetective | kick $1 %CivilianChannel You died. | set %DetectiveMoved } } if ($WhatIs($1) == mafia) { msg %GameChannel $c1(The mob messed with the wrong target, so the bot too a glance at) $c3(mafia) $c2($1) $c1(and shot a pistol right into the eye socket!) if ($InGame($1) == yes) { dec %TotalMafia | kick $1 #mazone You died. | set %MafiaMoved } } if ($WhatIs($1) == doctor) { msg %GameChannel $c1(The bot found illegal drugs being traced to the:) $c3(doctor) $c2($1) $c1(and punished the doc by death!) if ($InGame($1) == yes) { dec %TotalDoctor | kick $1 %CivilianChannel You died. | set %DoctorMoved } } if ($WhatIs($1) == killer) { msg %GameChannel $c1(The bot had to do some dirty work of its own and too the) $c3(killer) $c2($1) $+ $c1('s life!) if ($InGame($1) == yes) { dec %TotalKiller | kick $1 %CivilianChannel You died. | set %KillerMoved } } if ($WhatIs($1) == homeless) { msg %GameChannel $c1(The bot accidentally stepped on the) $c3(homeless bum) $c2($1) $+ $c1('s head and crushed it!) if ($InGame($1) == yes) { dec %TotalHomeless | kick $1 %CivilianChannel You died. | set %HomelessMoved } } if ($InGame($1) == yes) dec %NumberOfPlayers punt $1 } StartTheGame { if (%GameIsPlaying == true) return if (%GameIsStopped == true) { if (($1 !isop %GameChannel) && ($1 !ishop %GameChannel)) { msg $1 $c2(You don't have access to use that command.) | return } else msg %GameChannel $c2(The bot shall run as normal) } EndGame part %MafiaChannel $c1(Game over) part %CivilianChannel $c1(Game over) msg %GameChannel $c1(Registration into the game has start, you may use) $c2(!reg) $c1(to register) $+ $c1(! The registration lasts) $c3(2 minutes and 10 seconds) set %NumberOfPlayers 0 set %GameIsStopped false set %GameIsPlaying true set %Registration on set %TimeToAccept false set %TotalPlayers 0 set %TotalMafia 0 set %TotalKiller 0 set %TotalHomeless 0 set %TotalDoctor 0 set %TotalCivilian 0 remove m.txt remove l.txt remove w.txt remove a.txt unset %WasDetective %WasDoctor %WasKiller %WasHomeless %Detective %Killer %Homeless %Doctor set %BeginVoting no set %Voting no set %EndVoting no set %TotalVoted 0 set %For 0 set %Against 0 timerReg1 1 65 msg %GameChannel $c1(Registration is in progress, you may join the game by using) $c2(!reg) $c1(Time left until the game starts:) $c3(1 minute and 5 seconds) timerReg2 1 140 msg %GameChannel $c1(Well the registrtaion is now over, and the roles are about to be given out!) timerReg3 1 145 GiveOutRoles set %CivilianChannel $+(#Civilians,$r(1,99999)) set %MafiaChannel $+(#Mafia,$r(1,99999)) join %CivilianChannel join %MafiaChannel set %dur $ctime } TakeOut { if (%GameIsPlaying == false) return if ($InGame($1) == yes) return if ($GotKicked($1) > 0) return if (%GameIsStopped == true) return if (%Registration == on) { Punt $1 msg %GameChannel $c2($1) $c1(is no longer in the game...) dec %NumberOfPlayers return } if ($1 ison %GameChannel) mode %GameChannel -v $1 msg %GameChannel $c2($1) $c1(you are crazy, but you will be eliminated once the day/night comes...) write q.txt $1 if (%Voting == yes) { if (%CiviliansVictim == $1) { set %Voting no | timer1 off | timer1 1 5 Night } } if (%YesNoVoting == yes) { if (%CiviliansVictim == $1) { %YesNoVoting = 0 | timer1 off | timer1 1 5 Night } } } GiveOutRoles { set %Registration off set %TotalPlayers %NumberOfPlayers set %DetectiveAccepted no if (%TotalPlayers < 3) { msg %GameChannel $c2(The game cannot start due to the lack of players. You only have) $c3(%TotalPlayers out of 3) $C2(needed to play!) | set %GameIsPlaying false | endgame | return } set %TimeToAccept true mode %GameChannel m set %TotalMafia $round($calc(((%TotalPlayers - 3)/3)+1),0) set %TotalDetective 1 if (%TotalPlayers > 3) { set %TotalDoctor 1 | set %DoctorAccepted no } else set %TotalDoctor 0 if (%TotalPlayers > 4) { set %TotalKiller 1 | set %KillerAccepted no } else set %TotalKiller 0 if (%TotalMafia > 2) { set %TotalHomeless 1 | set %HomelessAccepted no } else set %TotalHomeless 0 set %TotalCivilian $calc(%TotalPlayers - (%TotalMafia + %TotalDoctor + %TotalKiller + %TotalHomeless + %TotalDetective)) GiveOutD if (%TotalDoctor != 0) GiveOutH if (%TotalKiller != 0) GiveOutK if (%TotalHomeless != 0) GiveOutB StartMafiaGiveOut timerStartGame 1 65 StartGame } StartMafiaGiveOut { set %xx 1 while (%xx < %TotalMafia) { GiveOutM inc %xx } } GiveOutD { :PickAnotherPerson set %RandomNick $read(l.txt,$rand(1,%TotalPlayers)) if ($WhatIs(%RandomNick) != civilian) goto PickAnotherPerson msg %RandomNick $c1(You are being offered to be the) $c3(Detective) $+ $c1(! Do you accept this role? To accept (!yes) or to reject (!no)) set %Detective %RandomNick set %WasDetective %RandomNick } GiveOutM { :PickAnotherPerson set %RandomNick $read(l.txt,$rand(1,%TotalPlayers)) if ($WhatIs(%RandomNick) != civilian) goto PickAnotherPerson write $1 m.txt %RandomNick write $1 w.txt %RandomNick write no a.txt msg %RandomNick $c1(You are being offered to be the) $c3(Mafia) $+ $c1(! Do you accept this role? To accept (!yes) or to reject (!no)) } GiveOutH { :PickAnotherPerson set %RandomNick $read(l.txt,$rand(1,%TotalPlayers)) if ($WhatIs(%RandomNick) != civilian) goto PickAnotherPerson msg %RandomNick $c1(You are being offered to be the) $c3(Doctor) $+ $c1(! Do you accept this role? To accept (!yes) or to reject (!no)) set %Doctor %RandomNick set %WasDoctor %RandomNick } GiveOutK { :PickAnotherPerson set %RandomNick $read(l.txt,$rand(1,%TotalPlayers)) if ($WhatIs(%RandomNick) != civilian) goto PickAnotherPerson msg %RandomNick $c1(You are being offered to be the) $c3(Killer) $+ $c1(! Do you accept this role? To accept (!yes) or to reject (!no)) set %Killer %RandomNick set %WasKiller %RandomNick } GiveOutB { :PickAnotherPerson set %RandomNick $read(l.txt,$rand(1,%TotalPlayers)) if ($WhatIs(%RandomNick) != civilian) goto PickAnotherPerson msg %RandomNick $c1(You are being offered to be the) $c3(Homeless bum) $+ $c1(! Do you accept this role? To accept (!yes) or to reject (!no)) set %Homeless %RandomNick set %WasHomeless %RandomNick } EndVoting { set %EndVoting yes msg %GameChannel $c1(Ok, time to decide whether or not) $c2(%CiviliansVictim) $c1(should be hung... Is it worth it? Vote people!) $c2(!yes/!no) $c1(You have 1 minute!) notice %GameChannel Civilians, time to vote! set %For 0 set %Against 0 set %TotalVoted 0 set %Voting no if ($hget(VotingResults)) hfree VotingResults hmake VotingResults $calc(%NumberOfPlayers -1) timer1 1 60 YesNoVoting } AcceptRole { if ((%TimeToAccept == false) || ($WhatIs($1) == civilian) || (%AllConfirmed == yes)) return if ($WhatIs($1) == detective) { if (%DetectiveAccepted == yes) return invite $1 %CivilianChannel msg $1 $c1(Granted, you have been given your role. Please join $c3(%CivilianChannel)) set %Detective $1 msg %GameChannel $c1(It seems like the) $c2(detective) $c1(has accepted the role)... set %WasDetective $1 set %DetectiveAccepted yes } if ($WhatIs($1) == doctor) { if (%DoctorAccepted == yes) return msg $1 $c1(Granted, you have been given your role) set %Doctor $1 msg %GameChannel $c1(It seems like the) $c2(doctor) $c1(has accepted the role)... set %WasDoctor $1 set %DoctorAccepted yes } if ($WhatIs($1) == killer) { if (%KillerAccepted == yes) return msg $1 $c1(Granted, you have been given your role) set %Killer $1 /msg %GameChannel $c1(It seems like the) $c2(killer) $c1(has accepted the role)... set %WasKiller $1 set %KillerAccepted yes } if ($WhatIs($1) == homeless) { if (%HomelessAccepted == yes) return invite $1 %CivilianChannel msg $1 $c1(Granted, you have been given your role. Please join $c3(%CivilianChannel)) set %Homeless $1 /msg %GameChannel $c1(It seems like the) $c2(homeless) $c1(has accepted the role)... set %WasHomeless $1 set %HomelessAccepted yes } if ($WhatIs($1) == mafia) { set %TempVar $MafiaNumber($1) if ($read(a.txt,t,%TempVar) == yes) return write -l %t a.txt yes invite $1 %MafiaChannel msg $1 $c1(Granted, you have been given your role. Please join $c3(%MafiaChannel)) /msg %GameChannel $c1(It seems like the) $c2(mafia) $c1(has accepted the role)... write l w.txt $1 } if ($AllAccepted == yes) { timers off | StartGame } } StartVoting { VictoryAchieved set %BeginVoting yes set %TimeToVote yes set %Voting yes set %CiviliansVictim $null set %VotedVictim 0 if ($c == true) { EndGame | return } else { if ($hget(VotingResults)) hfree VotingResults hmake VotingResults %NumberOfPlayers msg %GameChannel $c1(Well, who is responsible for everything? You have 2 minutes! To vote:) $c2(!<Nick/Number>) $c1(or) $c2(!!night) $c1(if you don't want to hang anyone...) ShowPlayers %GameChannel notice %GameChannel People, time to vote! timerToVote 1 120 Voting } } RejectRole { if ((%TimeToAccept == false) || ($WhatIs($1) == civilian) || (%AllConfirmed == yes)) return if ($WhatIs($1) == detective) { if (%DetectiveAccepted == yes) return msg $1 $c1(Your role will be given to somebody else) msg %GameChannel $c1(It seems like the) $c2(detective) $c1(has rejected the role)... unset %detective GiveOutD } if ($WhatIs($1) == doctor) { if (%DoctorAccepted == yes) return msg $1 $c1(Your role will be given to somebody else) /msg %GameChannel $c1(It seems like the) $c2(doctor) $c1(has rejected the role)... unset %doctor GiveOutH } if ($WhatIs($1) == killer) { if (%KillerAccepted == yes) return msg $1 $c1(Your role will be given to somebody else) /msg %GameChannel $c1(It seems like the) $c2(killer) $c1(has rejected the role)... unset %killer GiveOutK } if ($WhatIs($1) == homeless) { if (%HomelessAccepted == yes) return msg $1 $c1(Your role will be given to somebody else) /msg %GameChannel $c1(It seems like the) $c2(homeless) $c1(has rejected the role)... unset %homeless GiveOutB } if ($WhatIs($1) == mafia) { set %TempVar $fif(m.txt,$1) write -dl %TempVar m.txt write -dl %TempVar w.txt set %RandomNick $MafiaNumber($1) msg $1 $c1(Your role will be given to somebody else) msg %GameChannel $c1(It seems like the) $c2(mafia) $c1(has rejected the role)... GiveOutM %RandomNick } } Voting { set %BeginVoting no %TimeToVote = no if (%VotedVictim < 2) { msg %GameChannel $c1(During the entire day, the people didn't achive anything!) timer1 1 10 /night return } if (%z == 1) { msg %GameChannel 10The day was wasted, and there was no decision! timer1 1 10 /night return } if (%CiviliansVictim == 1night) { msg %GameChannel 10The people have decided not to hang anybody today! timer1 1 10 /night return } set %Voting yes msg %GameChannel $c1(Certain people agree that) $c2(%CiviliansVictim) $c1(should be blamed for what was done at night!) msg %GameChannel $c1(What do you have to say for yourself dear) $c2%CiviliansVictim) $c3(!done) $c1(to end... You have no more than 10 seconds!) timer1 1 10 EndVoting } AllActiveRoles { if ((%GameIsPlaying == false) || (%Registration == on) || (%GameIsStopped == 1)) return set %ActiveRoles $c1(In total there are:) if (%TotalCivilian > 0) %ActiveRoles = %ActiveRoles $c2(civilians -) $c3(%TotalCivilian) $+ $c1($chr(44)) if (%TotalDetective > 0) %ActiveRoles = %ActiveRoles $c2(detective) $+ $c1($chr(44)) if (%TotalMafia > 0) %ActiveRoles = %ActiveRoles $c2(mafia -) $c3(%TotalMafia) $+ $c1($chr(44)) if (%TotalDoctor > 0) %ActiveRoles = %ActiveRoles $c2(doctor) $+ $c1($chr(44)) if (%TotalKiller > 0) %ActiveRoles = %ActiveRoles $c2(killer) $+ $c1($chr(44)) if (%TotalHomeless > 0) %ActiveRoles = %ActiveRoles $c2(homeless bum) $+ $c1(..) %ActiveRoles = $left(%ActiveRoles,-1) return %ActiveRoles } StartGame { set %TimeToAccept false if ($AllConfirmed == no) { set %Xy 1 msg %Detective Please join $c3(%CivilianChannel)) if (%TotalHomeless == 1) msg %Homeless $c1(Please join) $c3(%CivilianChannel)) while ($read(w.txt,%Xy)) { if ($read(m.txt,w,$+($read(w.txt,%Xy))) == $null) { write m.txt $read(w.txt,%Xy) msg $read(w.txt,%Xy) $c1(Please join) %$c2(%MafiaChannel) write -dl %Xy w.txt } inc %Xy } } msg %GameChannel $c1(The roles have been given out, and the game is about to start...) msg %GameChannel $AllActiveRoles /NightChecks } NightChecks { if ($read(q.txt,1) == $null) { Night | return } else { PlayersGone if ($VictoryAchieved == true) { EndGame return } } timer1 1 10 Night } SleepyPeople { if ($read(q.txt,1) == $null) { DetectivesMove | return } else { PlayersGone remove q.txt timerNextMove 1 15 DetectivesMove } } ShowPlayers { if (%GameIsPlaying == false) return %ListOfPlayers = $c1(List of players:) %x = 1 while (%x <= %NumberOfPlayers) { %ListOfPlayers = %ListOfPlayers $c3(%x) $+ .4 $read(l.txt,%x) inc %x } msg $1 %ListOfPlayers } Night { VictoryAchieved %NightTime = yes %DetectiveMoved = 0 %MafiaMoved = 0 %DoctorMoved = 0 %KillerMoved = 0 %BumMoved = 0 %DetectivesVictim = $null %MafiasVictim = $null %DoctorsVictim = $null %KillersVictim = $null %BumsVictim = $null %DWords = $null %MWords = $null %HWords = $null %KWords = $null %BWords = $null inc %nights msg %GameChannel $c1(It is now the) $c3(night) $c1(time, the people are sleeping tight, after a hard day of work. The only ones who are up, are those you are looking for trouble. The night will last 3 minutes 10!!) if (%Detective != $null) { msg %Detective $c2(Who's the victim?) $c1(To check:) $c3(!check <Nick/Number> [phrase]) $c1(to kill:) $c3(!kill <Nick/Number> [phrase]) | ShowPlayers %Detective } if ($read(m.txt,1) != $null) { msg $read(m.txt,1) $c2(Who's the victim?) $c1(To kill:) $c3(!kill <Nick/Number> [phrase]) | ShowPlayers $read(m.txt,1) } if (%Doctor != $null) { msg %Doctor $c2(Who's the victim?) $c1(To heal:) $c3(!heal <Nick/Number> [phrase]) | ShowPlayers %Doctor } if (%killer != $null) { msg %Killer $c2(Who's the victim?) $c1(To kill:) $c3(!kill <Nick/Number> [phrase]) | ShowPlayers %Killer } if (%Homeless != $null) { msg %Homeless $c2(Who's the victim?) $c1(To check:) $c3(!check <Nick/Number> [phrase]) | ShowPlayers %Homeless } notice %GameChannel Players, time to make your move! if (%Detective == $null) %DetectiveMoved = 1 if ($read(m.txt,1) == $null) %MafiaMoved = 1 if (%Doctor == $null) %DoctorMoved = 1 if (%Killer == $null) %KillerMoved = 1 if (%Homeless == $null) %BumMoved = 1 timerToEndNight 1 180 Day } PlayersGone { set %x 1 while ($read(q.txt,%x) != $null) { set %Quitter $read(q.txt,%x) if (%Quitter != $null) TakeOut %Quitter inc %x } } Day { VictoryAchieved msg %GameChannel $c1(Finally the) $c3(day) $c1(has come, they sun is shining bright, and the birds are singing. There is a cry heard through out the town "help!" A member of the town is now dead...) FoundOutRole %Detective FoundOutRole %Homeless set %NightTime no set %healed 0 timerDay 1 5 DetectivesMove } DetectivesMove { if ((%DetectivesVictim == $null) && (%TotalDetective > 0)) { BotAttacks %Detective | timerNextMove 1 15 MafiasMove | return } if (%DetectiveChecked == yes) { msg %GameChannel $c1(The) $c3(detective) $c1(could have been doing something better last night, but at least he now knows who is) $c2(%DetectivesVictim) $c1(is! $iif(%DWords != $null,Detective's words were:12 %DWords)) timerNextMove 1 15 MafiasMove } else { if (%healed == 0) { if (%DoctorsVictim == %DetectivesVictim) { set %healed 1 msg %GameChannel $c1(The) $c3(detective) $c1(took many shots last night and almost killed) $c2(%DetectivesVictim) $c1($iif(%DWords != $null,Detective's words were:12 %DWords)) msg %GameChannel $c3(%DoctorsVictim) $c1(was near death, but thankfully the) $c3(doctor) $c1(knew what he was doing, and saved the poor soul! $iif(%HWords != $null,The doctor's words were:12 %HWords)) timerNextMove 1 15 MafiasMove return } } if ($WhatIs(%DetectivesVictim) == civilian) { msg %GameChannel $c1(The) $c3(detective) $c1(got in a fight and lost control of himself so he shot the) $c3(civilian) $c2(%DetectivesVictim) $+ $c1(! $iif(%DWords != $null,Detective's words were:12 %DWords)) | kick %CivilianChannel %DetectivesVictim You died if ($InGame(%DetectivesVictim) == yes) { dec %TotalCivilian } } if ($WhatIs(%DetectivesVictim) == detective) { msg %GameChannel $c3(Detective) $c2(%DetectivesVictim) $c1(could no longer handle the pressure he was under, so he decided to kill himself... $iif(%DWords != $null,Detective's words were:12 %DWords)) | kick %CivilianChannel %DetectivesVictim You died if ($InGame(%DetectivesVictim) == yes) { dec %TotalDetective } } if ($WhatIs(%DetectivesVictim) == mafia) { msg %GameChannel $c1(The) $c3(detective) $c1(was going through a tough operation and in the end has managed to kill the) $c3(mafia) $c2(%DetectivesVictim) $+ $c1(... $iif(%DWords != $null,Detective's words were:12 %DWords)) | kick %MafiaChannel %DetectivesVictim You died if ($InGame(%DetectivesVictim) == yes) { dec %TotalMafia } } if ($WhatIs(%DetectivesVictim) == doctor) { msg %GameChannel $c1(The) $c3(detective) $c1(did not believe that the) $c3(doctor) $c2(%DetectivesVictim) $c1(had stiched up his sholder to his best efforts, so he deserved to die... $iif(%DWords != $null,Detective's words were:12 %DWords)) | kick %CivilianChannel %DetectivesVictim You died if ($InGame(%DetectivesVictim) == yes) { dec %TotalDoctor } } if ($WhatIs(%DetectivesVictim) == killer) { msg %GameChannel $c1(The) $c3(detective) $1(was sitting in the bar when he started fighting with the) $c3(killer) $c2(%DetectivesVictim) $+ $c1(and was nothing short of victory! $iif(%DWords != $null,Detective's words were:12 %DWords)) | kick %CivilianChannel %DetectivesVictim You died if ($InGame(%DetectivesVictim) == yes) { dec %TotalKiller } } if ($WhatIs(%DetectivesVictim) == homeless) { msg %GameChannel $c1(The) $c3(detective) $1(got into an arguement with his best friend, and killed the) $c3(homeless bum) $c2(%DetectivesVictim) $+ $c1(... $iif(%DWords != $null,Detective's words were:12 %DWords)) | kick %CivilianChannel %DetectivesVictim You died if ($InGame(%DetectivesVictim) == yes) { dec %TotalHomeless } } if ($InGame(%DetectivesVictim) == yes) dec %NumberOfPlayers Punt %DetectivesVictim } timerNextMove 1 15 MafiasMove return } MafiasMove { if (%MafiasVictim == $null) { if ($read(m.txt,1) != $null) { BotAttacks $read(m.txt,1) | timerNextMove 1 15 KillersMove | /return } KillersMove return } if (%healed == 0) { if (%DoctorsVictim == %MafiasVictim) { set %healed 1 msg %GameChannel $c1(The) $c3(mafia) $c1(had a meeting last night, and came to the conclusion that) $c2(%MafiasVictim) $c1(deserves to die! $iif(%MWords != $null,Mafia's words were:12 %MWords)) msg %GameChannel $c1(Nobody could touch) $c2(%DoctorsVictim) $c1(for the) $c3(doctor) $c1(was there to save a life! $iif(%HWords != $null,Doctor's words were:12 %HWords)) } } if ($WhatIs(%MafiasVictim) == civilian) { msg %GameChannel $c1(It wasn't long until the) $c3(mafia) $c1(decided to let) $c3(civilian) $c2(%MafiasVictim) $c1(rest in peace! $iif(%MWords != $null,Mafia's words were:12 %MWords)) | kick %CivilianChannel %MafiasVictim You died if ($InGame(%MafiasVictim) == yes) { dec %TotalCivilian } } if ($WhatIs(%MafiasVictim) == detective) { msg %GameChannel $c1(Well people, today was a sad day, for the) $c3(mafia) $c1(had finally found the) $c3(detective) $c2(%MafiasVictim) $c1(and put a bullet through the head! $iif(%MWords != $null,Mafia's words were:12 %MWords)) kick %CivilianChannel %MafiasVictim You died if ($InGame(%MafiasVictim) == yes) { dec %TotalDetective } } if ($WhatIs(%MafiasVictim) == mafia) { msg %GameChannel $c1(The) $c3(mafia) $c1(hand a great conflict last night, and it ended in a killing of the) $c3(mafia's) $c2(%MafiasVictim) $+ $c1(... $iif(%MWords != $null,Mafia's words were:12 %MWords)) kick %MafiaChannel %MafiasVictim You died if ($InGame(%MafiasVictim) == yes) { dec %TotalMafia } } if ($WhatIs(%MafiasVictim) == doctor) { msg %GameChannel $c1(The) $c3(mafia) $c1(did not like the fact that the majority of their victims live to see the next day after their visit, so they killed the) $c3(doctor) $c2(%MafiasVictim) $+ $c1(... $iif(%MWords != $null,Mafia's words were:12 %MWords)) kick %CivilianChannel %MafiasVictim You died if ($InGame(%MafiasVictim) == yes) { dec %TotalDoctor } } if ($WhatIs(%MafiasVictim) == killer) { msg %GameChannel $c1(The) $c3(mafia) $c1(are aware of their competition, so they burtally shot and killed the) $c3(killer) $c2(%MafiasVictim) $+ $c1(... $iif(%MWords != $null,Mafia's words were:12 %MWords)) kick %CivilianChannel %MafiasVictim You died if ($InGame(%MafiasVictim) == yes) { dec %TotalKiller } } if ($WhatIs(%MafiasVictim) == homeless) { msg %GameChannel $c1(The) $c3(mafia) $c1(were afraid of getting traced, so they threw a grenade they had on them in the dumpster and by chance killing the) $c3(homeless bum) $c2(%MafiasVictim) $+ $c1(... $iif(%MWords != $null,Mafia's words were:12 %MWords)) kick %CivilianChannel %MafiasVictim You died if ($InGame(%MafiasVictim) == yes) { dec %TotalHomeless } } if ($InGame(%MafiasVictim) == yes) dec %NumberOfPlayers Punt %MafiasVictim timerNextMove 1 15 KillersMove } KillersMove { if (%TotalKiller < 1) { DoctorsMove | return } if (%KillersVictim == $null) { BotAttacks %Killer | timerNextMove 1 15 DoctorsMove | return } if (%healed == 0) { if (%DoctorsVictim == %KillersVictim) { set %healed 1 msg %GameChannel $c1(The) $c3(killer) $c1(got a little to careless with) $c2(%victman) $+ $c1(, and couldn't get the job done! $iif(%KWords != $null,Killer's words were:12 %KWords)) msg %GameChannel $c2(%victdok) $c1(didn't die for the) $c3(doctor) $c1(was right at the scene of the crime! $iif(%HWords != $null,The doctor's words were:12 %HWords)) goto doc } } if ($WhatIs(%KillersVictim) == civilian) { msg %GameChannel $c1(At night the) $c3(killer) $c1(got the blood of the innocent as he wanted, and killed) $c3(civilian) $c2(%KillersVictim) $+ $c1(! $iif(%KWords != $null,Killer's words were:12 %KWords)) kick %CivilianChannel %KillersVictim You died if ($InGame(%KillersVictim) == yes) dec %TotalCivilian } if ($WhatIs(%KillersVictim) == detective) { msg %GameChannel $c1(The crazy) $c3(killer) $c1(decapitated) the $3(detective) $2(%KillersVictim) $c1(and carved his name into the skull! $iif(%KWords != $null,Killer's words were:12 %KWords)) kick %CivilianChannel %KillersVictim You died if ($InGame(%KillersVictim) == yes) dec %TotalDetective } if ($WhatIs(%KillersVictim) == mafia) { msg %GameChannel $c1(The) $c3(killer) $c1(saw a mob and wanted to join, but after getting rejected he killed the) $3(mafia) $2(%KillersVictim) $+ $c1(! $iif(%KWords != $null,Killer's words were:12 %KWords)) kick %MafiaChannel %KillersVictim You died if ($InGame(%KillersVictim) == yes) dec %TotalMafia } if ($WhatIs(%KillersVictim) == doctor) { msg %GameChannel $c1(The) $c3(doctor) $2(%KillersVictim) $c1(was out helping the people in town, then suddenly got stabbed in the back with a dagger by the visious) $3(killer) $+ $c1(! $iif(%KWords != $null,Killer's words were:12 %KWords)) kick %CivilianChannel %KillersVictim You died if ($InGame(%KillersVictim) == yes) dec %TotalDoctor } if ($WhatIs(%KillersVictim) == killer) { msg %GameChannel $c1(Going crazy from boredom, the) $c3(killer) $c2(%KillersVictim) $c1(decided to commit suicide, and jabbed a knife right into the throat! $iif(%KWords != $null,Killer's words were:12 %KWords)) kick %CivilianChannel %KillersVictim You died kick %MafiaChannel %KillersVictim You died if ($InGame(%KillersVictim) == yes) dec %TotalKiller } if ($WhatIs(%KillersVictim) == homeless) { msg %GameChannel $c1(The) $c3(killer) $c1(noticed that the) $3(homeless bum) $2(%KillersVictim) $c1(was asking for money, so decided to have some fun by stabbing the bum in the eyes and snapping his neck! $iif(%KWords != $null,Killer's words were:12 %KWords)) kick %CivilianChannel %KillersVictim You died if ($InGame(%KillersVictim) == yes) dec %TotalHomeless } if ($InGame(%KillersVictim) == yes) dec %NumberOfPlayers Punt %KillersVictim :doc timerNextMove 1 15 DoctorsMove } DoctorsMove { if (%TotalDoctor < 1) { BumsMove | return } if (%DoctorsVictim == $null) { if (%TotalDoctor > 0) { BotAttacks %Doctor | timerNextMove 1 15 BumsMove | return } } if (%healed == 0) { msg %GameChannel $c1(The) $c3(doctor) $c1(thought that) $c2(%DoctorsVictim) $c1(looked too ill, so he decided to stay there over night... $iif(%HWords != $null,Doctor's words were:12 %HWords)) } else { BumsMove | return } timerNextMove 1 15 BumsMove } BumsMove { if (%BumsVictim == $null) { if (%TotalHomeless > 0) { BotAttacks %Homeless | timerNextMove 1 15 StartVoting | return } StartVoting return } msg %GameChannel $c1(The) $c3(homeless bum) $c1(at night started snooping around) $c2(%BumsVictim) $+ $c1('s stuff.. $iif(%BWords != $null,Homeless' words were:12 %BWords)) timerNextMove 1 15 StartVoting } BotAttacks { if ($WhatIs($1) == Civilian) { msg %GameChannel $c(The bot had to take real action, so) $c2(civilian) $c3($1) $c1(was put face-first into a wall, and shot in the back!) kick $1 %CivilianChannel You died. if ($InGame($1) == yes) dec %TotalCivilian } if ($WhatIs($1) == Detective) { msg %GameChannel $c1(The) $c3(detective) $c2($1) $c1(got too drunk and started a fight with the bot, and you could see how that ended...) kick $1 %CivilianChannel $c1(You died.) set %DetectiveMoved yes if ($InGame($1) == yes) dec %TotalDetective } if ($WhatIs($1) == Mafia) { msg %GameChannel $c1(The) $c3(mafia) $c2($1) $c1(got too drunk and started a fight with the bot, and you could see how that ended...) kick $1 %MafiaChannel $c1(You died.) set %MafiaMoved yes if ($InGame($1) == yes) dec %TotalMafia } if ($WhatIs($1) == Doctor) { msg %GameChannel $c1(The) $c3(doctor) $c2($1) $c1(got too drunk and started a fight with the bot, and you could see how that ended...) kick $1 %CivilianChannel $c1(You died.) set %DoctorMoved yes if ($InGame($1) == yes) dec %TotalDoctor } if ($WhatIs($1) == Killer) { msg %GameChannel $c1(The) $c3(killer) $c2($1) $c1(got too drunk and started a fight with the bot, and you could see how that ended...) kick $1 %CivilianChannel $c1(You died.) set %KillerMoved yes if ($InGame($1) == yes) dec %TotalKiller } if ($WhatIs($1) == Homeless) { msg %GameChannel $c1(The) $c3(homeless bum) $c2($1) $c1(got too drunk and started a fight with the bot, and you could see how that ended...) kick $1 %CivilianChannel $c1(You died.) set %HomelessMoved yes if ($InGame($1) == yes) dec %TotalHomeless } if ($InGame($1) == yes) dec %NumerOfPlayers punt $1 } VotingStats { unset %Voted* set %x 1 set %y 0 set %z 0 var %VotingMessage = $c4(Voting Statistics:) while ($hget(VotingResults,%x).data) { set %User $hget(VotingResults,%x).data inc %Voted $+ $hget(VotingResults,%x).data if (%User !isin %VotingMessage) set %VotingMessage %VotingMessage $iif(%User != 1night,$c2(%User),$c5($right(%User,-1))) $c4(-) $c3($+(!,Voted,%User)) $+ $c4(.) if (%z < $eval($+(%,Voted,$hget(VotingResults,%x).data),2)) { set %z $eval($+(%,Voted,$hget(VotingResults,%x).data),2) | set %CiviliansVictim $hget(VotingResults,%x).data } inc %x inc %y } set %VotingMessage %VotingMessage $c3($+([,%y,:,%NumberOfPlayers,])) msg %GameChannel $regsubex(%VotingMessage,/!(Voted\w+)/ig,$(%\1,2)) if ($calc(%z / %NumberOfPlayers) >= .6) { timers off | timerYesNo 1 5 Voting | unset %D } } ThoseVoted { if (%GameIsPlaying == false) return if (%Voting == no) return if ($InGame($1) == no) return if ($left($2,1) != !) return set %Vote $right($2,-1) if ($PlayerNumber(%Vote) == yes) %Victim = $read(l.txt,%Vote) else %Victim = %vote %Vote = %Victim if (%Vote == !night) { set %Vote 1night } if (($InGame(%Vote) == no) && (%Vote != 1night)) { msg %GameChannel $c1(There is no) $c2(%Vote) $c1(in the game...) return } hadd VotingResults $1 %Vote VotingStats } YesNoVoting { if (%Against >= %For ) { msg %GameChannel $c1(The defendant) $c2(%CiviliansVictim) $c1(is safe! Now's the time to celebrate!) timerGoToNight 1 10 Night return } if ($calc(%Against + %For) <= $calc((%NumberOfPlayers -1)/2)) { msg %GameChannel $c1(The people haven't come to a conclusion!) timerGoToNight 1 10 Night return } if (%CiviliansVictim == $null) goto CheckForEnd if ($WhatIs(%CiviliansVictim) == civilian) { msg %GameChannel $c1(Today the people have decided to hang the) $c3(civilian) $c2(%CiviliansVictim) if ($InGame(%CiviliansVictim) == yes) dec %TotalCivilian } if ($WhatIs(%CiviliansVictim) == detective) { msg %GameChannel $c1(People what have you done? You just hang the) $c3(detective) $c2(%CiviliansVictim) if ($InGame(%CiviliansVictim) == yes) dec %TotalDetective } if ($WhatIs(%CiviliansVictim) == mafia) { msg %GameChannel $c1(Hooray! The town has finally gotten rid of the evil) $c3(mafia) $c2(%CiviliansVictim) if ($InGame(%CiviliansVictim) == yes) dec %TotalMafia } if ($WhatIs(%CiviliansVictim) == doctor) { msg %GameChannel $c1(The townspeople were fed up with the constant medicine mixup, so they hung the) $c3(doctor) $c2(%CiviliansVictim) if ($InGame(%CiviliansVictim) == yes) dec %TotalDoctor } if ($WhatIs(%CiviliansVictim) == killer) { msg %GameChannel $c1(The good people of the village have had enough of the innocent people dying, and killed off the) $c3(killer) $c2(%CiviliansVictim) if ($InGame(%CiviliansVictim) == yes) dec %TotalKiller } if ($WhatIs(%CiviliansVictim) == homeless) { msg %GameChannel $c1(The people could no longer stand the horrible stench of the) $c3(homeless bum) $c2(%CiviliansVictim) if ($InGame(%CiviliansVictim) == yes) dec %TotalHomeless } if ($InGame(%CiviliansVictim) == yes) dec %NumberOfPlayers Punt %CiviliansVictim goto CheckForEnd :CheckForEnd if ($VictoryAchieved == true) { EndGame return } timerVotingOver 1 10 Night } VoteFor { if ($InGame($1) == no) return if (%GameIsStopped == true) return if (%GameIsPlaying == false) return if (%EndVoting == no) return if ($1 == %CiviliansVictim) return if ($hget(VotingResults,$1) == $null) { inc %For | inc %TotalVoted } if ($hget(VotingResults,$1) == no) { inc %For | dec %Against } hadd VotingResults $1 Yes msg %GameChannel $c2($+($chr(91),%For,:,%Against,$chr(93))) $+ $c3($+($chr(91),%TotalVoted,:,$calc(%NumberOfPlayers -1),$chr(93))) $c1(The townperson) $c2($1) $c1(has voted) $c3(for) $c1(the hanging of) $c2(%CiviliansVictim) if (%For > $calc((%NumberOfPlayers - 1)/2) ) { timer1 -o 1 7 YesNoVoting } elseif (%Against > $calc((%NumberOfPlayers - 1)/2) ) { timer1 -o 1 7 YesNoVoting } elseif ($calc(%Pro + %Against) == $calc(%NumberOfPlayers - 1) ) { timer1 -o 1 7 YesNoVoting } } VoteAgainst { if ($InGame($1) == no) return if (%GameIsStopped == true) return if (%GameIsPlaying == false) return if (%EndVoting == no) return if ($1 == %CiviliansVictim) return if ($hget(VotingResults,$1) == $null) { inc %Against | inc %TotalVoted } if ($hget(VotingResults,$1) == yes) { inc %Against | dec %For } hadd VotingResults $1 No msg %GameChannel $c2($+($chr(91),%For,:,%Against,$chr(93))) $+ $c3($+($chr(91),%TotalVoted,:,$calc(%NumberOfPlayers -1),$chr(93))) $c1(The townperson) $c2($1) $c1(has voted) $c3(against) $c1(the hanging of) $c2(%CiviliansVictim) if (%For > $calc((%NumberOfPlayers - 1)/2) ) { timer1 -o 1 7 YesNoVoting } elseif (%Against > $calc((%NumberOfPlayers - 1)/2) ) { timer1 -o 1 7 YesNoVoting } elseif ($calc(%Pro + %Against) == $calc(%NumberOfPlayers - 1) ) { timer1 -o 1 7 YesNoVoting } } VictoryAchieved { if (%NumberOfPlayers == 1) { if (%TotalMafia == 1) { msg %GameChannel $c2(Game over! The wins goes to mafia!) inc %MafiaWon EndRoles return true } } if (%NumberOfPlayers == 1) { if (%TotalKiller == 1) { msg %GameChannel $c2(Game over! The wins goes to civilians!) inc %CiviliansWon EndRoles return true } } if (%NumberOfPlayers == 1) { if (%TotalDoctor == 1) { msg %GameChannel $c2(Game over! The wins goes to civilians!) inc %CiviliansWon EndRoles return true } } if (%NumberOfPlayers == 2) { if (%TotalKiller == 1) { if (%TotalMafia == 1) msg %GameChannel $c2(Game over! It's a tie!) inc %Ties EndRoles return true } } if (%NumberOfPlayers == 1) { if (%TotalHomeless == 1) { msg %GameChannel $c2(Game over! The wins goes to civilians!) inc %CiviliansWon EndRoles return true } } if (%NumberOfPlayers == 1) { if (%TotalCivilian == 1) { msg %GameChannel $c2(Game over! The wins goes to mafia!) inc %MafiaWon EndRoles return true } } if ($read(m.txt,1) == $null) { if (%Killer == $null ) { if ($calc(%TotalCivilian + %TotalDoctor + %TotalHomeless) >= 1 ) { msg %GameChannel $c2(Game over! The wins goes to thecivilian!) inc %CiviliansWon EndRoles return true } } } if ($read(m.txt,1) != $null) { if (%Detective == $null) { if (%Killer == $null ) { if ($calc(%TotalCivilian + %TotalDoctor + %TotalHomeless) <= 1 ) { msg %GameChannel $c2(Game over! The wins goes to themafia!) inc %MafiaWon EndRoles return true } } } } if (%Killer != $null) { if (%Detective == $null) { if ($read(m.txt,1) == $null ) { if ($calc(%TotalCivilian + %TotalDoctor + %TotalHomeless) <= 1 ) { msg %GameChannel $c2(Game over! The winner is the killer!) inc %KillerWon EndRoles return true } } } } if (%TotalDetective == 1) { if (%TotalKiller == 1) { if (%TotalPlayers == 2) { msg %GameChannel $c2(Game over! It's a tie!) inc %Ties EndRoles return true } } } if (%TotalMafia == 1) { if (%TotalKiller == 1) { if (%TotalPlayers == 2) { msg %GameChannel $c2(Game over! It's a tie!) inc %Ties EndRoles return true } } } if (%TotalKiller == 1) { if (%TotalDetective == 0) { if (%TotalMafia == 0) { if (%TotalPlayers < 3) { msg %GameChannel $c2(Game over! The winnder is the killer!) inc %KillerWon EndRoles return true } } } } if (%TotalMafia == 1) { if (%TotalDetective == 1) { if (%TotalKiller == 0) { if ($calc(%TotalCivilian + %TotalDoctor + %TotalHomeless) == 0) { msg %GameChannel $c2(Game over! It's a tie!) inc %Ties EndRoles return true } } } } if (%TotalMafia == 1) { if (%TotalDetective == 1) { if (%TotalKiller == 0) { if ($calc(%TotalCivilian + %TotalDoctor + %TotalHomeless) == 0 ) { msg %GameChannel $c2(Game over! It's a tie!) inc %Ties EndRoles return true } } } } if (%TotalKiller == 1) { if (%TotalDetective == 1) { if (%TotalMafia == 0) { if ($calc(%TotalCivilian + %TotalDoctor + %TotalHomeless) == 0 ) { msg %GameChannel $c2(Game over! It's a tie!) inc %Ties EndRoles return true } } } } if (%TotalMafia == 1) { if (%TotalKiller == 1) { if (%TotalDetective == 0) { if ($calc(%TotalCivilian + %TotalDoctor + %TotalHomeless) == 0 ) { msg %GameChannel $c2(Game over! It's a tie!) inc %Ties EndRoles return true } } } } if (%TotalMafia == 0) { if (%TotalKiller == 0) { if (%TotalDetective == 0 ) { if ($calc(%TotalCivilian + %TotalDoctor + %TotalHomeless) == 0 ) { msg %GameChannel $c2(Game over! Everybody lost!) inc %Ties EndRoles return true } } } } if (%NumberOfPlayers == 0) { msg %GameChannel $c2(Game over! It's a tie and everybody lost!) inc %Ties EndRoles EndGame return true } return false } Leaving { if (%GameIsPlaying == false) return if ($GameIsStopped == true) return if ($InGame($1) == yes) return if (%Registration == on) { punt $1 msg %GameChannel $c2($1) $c1(is no longer in the game...) %numplayers = %numplayers - 1 return } if ($1 ison %GameChannel) mode %GameChannel -v $1 msg %GameChannel $c2($1) $c1(has until either the day or night to get back, or else the bot will have to do some dirty work...) kick %CivilianChannel $1 You left kick %MafiaChannel $1 You left } JoinGameChannel { if ($1 == $me) { EndGame } inc %Visitors notice $1 $c2($1) $c1(welcome to the internet IRС-game channel) $c2("Mafia") $c1(you are visitor number) $c3(%Visitors) if ((%GameIsPlaying == false) && (%GameIsStopped == false)) { notice $1 $c1(To start the game, type in) $2(!start) $c1(in the channel, but keep in mind that you need at least $c3(3) $c1(players...)) return } if (%Registration == on) { notice $1 $c1(There is currently a registeration for the game! Type in) $c2(!reg) $c1(to register for the game!) return } if (%GameIsPlaying == 1) { if ($GotKicked($1) > 0) { mode %GameChannel +v $1 msg %GameChannel $c1($1 $+ , You're back in the game!) if (%NightTime == yes) { if ($EveryoneMoved == no) { msg %GameChannel $c1(Just in case you have a role and you haven't made your move yet, do it now...) timer1 off timer1 1 180 Day } } %t = $GotKicked($1) write -dl %t q.txt return } notice $1 $c1(Sadly, the game has already started. Please wait for the game to end...) return } } EveryoneMoved { if (%DetectiveMoved > 0) { if (%MafiaMoved > 0 ) { if (%KillerMoved > 0 ) { if (%DoctorMoved > 0 ) { if (%BumMoved > 0 ) return yes } } } } return no } GotKicked { set %x 1 while ($read(q.txt,%x)) { if ($read(q.txt,%x) == $1) return %x if ($read(q.txt,%x) == $null) return 0 inc %k } return 0 } Reg { if (%GameIsPlaying == false) StartTheGame $1 if (%Registration == off) return if ($InGame($1) == yes) return inc %NumberofPlayers write l.txt $1 if ($1 ison %GameChannel) mode %GameChannel +v-ho $1 $1 $1 notice $1 $c1(You have registered as player number) $c2(%NumberOfPlayers) } ReggedByOp { if (($2 !isop %GameChannel) && ($2 !ishop %GameChannel)) return if ($1 !ison %GameChannel) return if (%GameIsPlaying == false) StartTheGame if (%Registration == off) return if ($InGame($1) == yes) return inc %NumberofPlayers write l.txt $1 mode %GameChannel +v-ho $1 $1 $1 msg %GameChannel $c3($1) $c1(has been registered registered as player number) $c2(%NumberOfPlayers) $c1(by staff member) $c3($2) } Kill { set %VictimsName $null if ((%GameIsPlaying == false) || (%GameIsStopped == true) || (%NightTime == no) || ($InGame($2) == no)) return if ($PlayerNumber($1) == yes) set %VictimsName $read(l.txt,$1) else set %VictimsName $1 if ($InGame(%VictimsName) == no) { msg $2 $c1(There is no such player! Please try again...) | return } if ($WhatIs($2) == detective) { if (%DetectiveMoved > 0) { msg $2 $c2(Sorry, but you've already made your move...) | return } set %DetectivesVictim %VictimsName set %DetectiveChecked no set %DetectiveMoved 1 set %DWords $3- msg %GameChannel $c1(The) $c3(detective) $c1(got bored out of his mind, so he decided to do something about it...) msg $2 $c1(You have decided to kill) $c2(%VictimsName) msg %CivilianChannel $c1(The) $c3(detective) $c1(decided to kill) $c2(%VictimsName) } if ($read(m.txt,1) == $2) { if (%MafiaMoved > 0) { msg $2 $c2(Sorry, but you've already made your move...) | return } set %MafiasVictim %VictimsName set %MafiaMoved 1 set %MWords $3- msg %GameChannel $c1(The) $c3(mafia) $c1(gathered up in a very dark ally, and decided to get some work done...) msg $2 $c1(You have decided to kill) $c2(%VictimsName) msg %MafiaChannel $c1(The) $c3(mafia) $c1(decided to kill) $c2(%VictimsName) } if ($WhatIs($2) == killer) { if (%KillerMoved > 0) { msg $2 $c2(Sorry, but you've already made your move...) | return } set %KillersVictim %VictimsName set %KillerMoved 1 set %KWords $3- msg $2 $c1(You have decided to kill) $c2(%VictimsName) msg %GameChannel $c1(The) $c3(killer) $c1(got thirsty for some blood, so now is off to quench that thirst...) } if ($EveryoneMoved == yes) { timers off | timerGoToDay 1 10 Day } } Check { set %VictimsName $null if ((%GameIsPlaying == false) || (%GameIsStopped == true) || (%NightTime == no) || ($InGame($2) == no)) return if ($PlayerNumber($1) == yes) set %VictimsName $read(l.txt,$1) else set %VictimsName $1 if ($InGame(%VictimsName) == no) { msg $2 $c1(There is no such player! Please try again...) | return } if ($WhatIs($2) == detective) { if (%DetectiveMoved > 0) { msg $2 $c2(Sorry, but you've already made your move...) | return } set %DetectivesVictim %VictimsName set %DetectiveChecked yes set %DetectiveMoved 1 set %DWords $3- msg $2 $c1(You have decided to check) $c2(%VictimsName) msg %GameChannel $c1(The) $c3(detective) $c1(got bored out of his mind, so he decided to do something about it...) msg %CivilianChannel $c1(The) $c3(detective) $c1(decided to check) $c2(%VictimsName) } if ($WhatIs($2) == homeless) { if (%bomdone > 0) { msg $2 $c2(Sorry, but you've already made your move...) | return } set %BumsVictim %VictimsName set %BumMoed 1 %BWords $3- msg $2 $c1(You have decided to check) $c2(%VictimsName) msg %GameChannel $c1(The) $c3(homeless bum) $c1(is out digging in trash...) } if ($EveryoneMoved == yes) { timer1 off | timerGoToDay 1 10 Day } } Heal { set %VictimsName $null if ((%GameIsPlaying == false) || (%GameIsStopped == true) || (%NightTime == no) || ($InGame($2) == no)) return if ($PlayerNumber($1) == yes) set %VictimsName $read(l.txt,$1) else set %VictimsName $1 if ($InGame(%VictimsName) == 0) { msg $2 $c1(There is no such player in the game! Please try again...) | return } if (%DoctorMoved > 0) { msg $2 $c2(Sorry, but you've already made your move...) | return } if (%LastPersonHealed == %VictimsName) msg $2 $c1(Sorry, as kind as you may be, but you can't heal the same person more than once in a row!) set %LastPersonHealed %VictimsName set %DoctorsVictim %VictimsName set %DoctorMoved 1 msg %GameChannel $c1(The) $c3(doctor) $c1(got a call, so he collected his pills and syringes...) msg $2 $c1(You have decided to heal) $c2(%VictimsName) set %HWords $3- if ($EveryoneMoved == yes) { timers off | timerGoToDay 1 10 Day } } PlayerNumber { if (!$1) return no if ($1 !isnum) return no else { if ($read(l.txt,$1)) return yes } return no } ShowTeams { set %x 1 :next1 set %y 1 :next2 if (%y == %x) { inc %y | goto next2 } if (%x > %TotalMafia) goto GoodTeam if (%y > %TotalMafia) { inc %x | goto next1 } msg $read(m.txt,%x) $c3(Mafia number: %j) $c2($read(m.txt,%y)) inc %x goto next2 :GoodTeam if (%TotalHomeless != 0) { msg %Detective $c3(Homeless bum:) $c2(%Homeless) msg %Homeless $c3(Detective:) $c(%Detective) } } WhatIs { if (%WasDetective == $1) return Detective if (%WasKiller == $1) return Killer if (%WasDoctor == $1) return Doctor if (%WasHomeless == $1) return Homeless set %x 1 while ($read(w.txt,%x) != $null) { if ($read(w.txt,%x) == $1) return Mafia inc %x } return civilian } ChangedNick { if ((%GameIsPlaying == false) || ($GameIsStopped == true) || ($InGame($1) == no)) return if (%Registration == on) { Punt $1 write l.txt $2 mode %GameChannel +v $2 msg %GameChannel $c2($2) $c1(you've been re-registered with the new nick!) return } if ($GotKicked($1) == > 0) return msg %GameChannel $c1(Everybody, remember this once and for all, especially you) $c2($2) $+ $c1(! Changing your nick during the game results in death!) if ($2 ison %GameChannel) mode %GameChannel -v $2 msg %GameChannel $c2($2) $c1(you will be excluded from the game...) write q.txt $1 } EndGame { close -m set %GameIsPlaying false timerUnsetM 1 10 mode %GameChannel -m { set %prefix $+(-,$str(v,$modespl)) } :start set %massing $nick($chan,0) while (%massing) { if ($nick(%GameChannel,%massing) != $me) { set %mass1 %mass1 $nick($chan,%massing) } if ($gettok(%mass1,0,32) = $modespl) { mode $chan %prefix %mass1 | unset %mass1 } dec %massing } mode $chan %prefix %mass1 | unset %mass1 return } MafiaNumber { set %x 1 while ($read($read(m.txt,x))) { if ($1 == $read(m.txt,%x)) return %x if ($read(m.txt,%x) == $null) return 0 inc %x } } fif { var %find = $read($1,tw,$2) return $readn } FoundOutRole { if ((%GameIsPlaying == false) || (%GameIsStopped == true)) return if (($WhatIs($1) != Detective) && ($WhatIs($1) != homeless)) return if (($WhatIs($1) == Detective) && (%DetectivesVictim != $null) && (%DetectiveChecked == yes)) { if ($WhatIs(%DetectivesVictim) == civilian) { msg $1 $c2(%DetectivesVictim) $c1(- is the) $c3(civilian) | msg %CivilianChannel $c2(%DetectivesVictim) $c1(- is the) $c3(civilian) | return } if ($WhatIs(%DetectivesVictim) == detective) { msg $1 $c2(%DetectivesVictim) $c1(- is the) $c3(detective) | msg %CivilianChannel $c2(%DetectivesVictim) $c1(- is the) $c3(detective) | return } if ( $role(%victname) == 3 ) { msg $1 4 $+ %victname 10- is the 12killer10! | /msg %CivilianChannel 4 $+ %victname 10- is the 12killer10! 10To invite the player here, type in 4!invite nick } if ($WhatIs(%DetectivesVictim) == mafia) { msg $1 $c2(%DetectivesVictim) $c1(- is the) $c3(mafia) | msg %CivilianChannel $c2(%DetectivesVictim) $c1(- is the) $c3(mafia) | return } if ($WhatIs(%DetectivesVictim) == doctor) { msg $1 $c2(%DetectivesVictim) $c1(- is the) $c3(doctor) | msg %CivilianChannel $c2(%DetectivesVictim) $c1(- is the) $c3(dotor) | return } if ($WhatIs(%DetectivesVictim) == killer) { msg $1 $c2(%DetectivesVictim) $c1(- is the) $c3(killer) | msg %CivilianChannel $c2(%DetectivesVictim) $c1(- is the) $c3(killer) | return } if ($WhatIs(%DetectivesVictim) == homeless) { msg $1 $c2(%DetectivesVictim) $c1(- is the) $c3(homeless bum) | /msg %CivilianChannel $c2(%DetectivesVictim) $c1(- is the) $c3(homeless bum) | return } } if (($WhatIs($1) == Homeless) && (%BumsVictim != $null)) { if ($WhatIs(%BumsVictim) == civilian) { msg $1 $c2(%BumsVictim) $c1(- is the) $c3(civilian) | msg %CivilianChannel $c2(%BumsVictim) $c1(- is the) $c3(civilian) | return } if ($WhatIs(%BumsVictim) == detective) { msg $1 $c2(%BumsVictim) $c1(- is the) $c3(detective) | msg %CivilianChannel $c2(%BumsVictim) $c1(- is the) $c3(detective) | return } if ( $role(%victname) == 3 ) { msg $1 4 $+ %victname 10- is the 12killer10! | /msg %CivilianChannel 4 $+ %victname 10- is the 12killer10! 10To invite the player here, type in 4!invite nick } if ($WhatIs(%BumsVictim) == mafia) { msg $1 $c2(%BumsVictim) $c1(- is the) $c3(mafia) | msg %CivilianChannel $c2(%BumsVictim) $c1(- is the) $c3(mafia) | return } if ($WhatIs(%BumsVictim) == doctor) { msg $1 $c2(%BumsVictim) $c1(- is the) $c3(doctor) | msg %CivilianChannel $c2(%BumsVictim) $c1(- is the) $c3(dotor) | return } if ($WhatIs(%BumsVictim) == killer) { msg $1 $c2(%BumsVictim) $c1(- is the) $c3(killer) | msg %CivilianChannel $c2(%BumsVictim) $c1(- is the) $c3(killer) | return } if ($WhatIs(%BumsVictim) == homeless) { msg $1 $c2(%BumsVictim) $c1(- is the) $c3(homeless bum) | msg %CivilianChannel $c2(%BumsVictim) $c1(- is the) $c3(homeless bum) | return } } } AllAccepted { if (%DetectiveAccepted == no) return no if (%DoctorAccepted == no) return no if (%KillerAccepted == no) return no if (%HomelessAccepted == no) return no set %x 1 while ($read(a.txt,t,$calc(%x)) != $null) { if ($read(a.txt,t,%x) == no) return no inc %x } if ($read(a.txt,t,%x) == $null) return yes } Quote Link to comment Share on other sites More sharing options...