######################################################################################################################################### # Minigame (HangMan) # # # # Original script made by: Bass-Driver # # Script adjusted by: Yisc[NL] # # # # Version 1.00 - Initial release by Bass-Driver # # Version 1.01 12-11-2017 - Added counter to show how many guesses are left # # - When number of guesses reaches 0, game ends # # - Raise counter '$HangManMinigameStarted' by 1 when player starts Hangman # # - Lower counter '$HangManMinigameStarted' by 1 when player closes Hangman # # - Added counter to generate dynamic button ID in Sub 'Hangman' # # - Close all buttons on screen when player closes Hangman # # - When word is guessed, game ends # # - Fixed a bug that showed the correct answer on 2nd game immediately after entering first letter # # - Added to show the correct answer when game has ended and player failed to have guessed the word # # - Changed eyes of drawn person from o to X when person died (action after final wrong guessed letter # # - Made Hangman GUI relative to starting values, so position can be moved more easily # # - Made drawing of Hangman relative to starting values, so position can me moved more easily # # - Added array with words to be guessed # # - Added option to Restart game when word is guessed or when you failed to guess to word # ######################################################################################################################################### CatchEvent OnLapperStart() Globalvar $Letter; Globalvar $Alphabet; Globalvar $WordToGuess; #Player that filled in the word that need to be guessed Globalvar $WordsToGuess; #Array with words that have to be guessed Globalvar $GetLetter; GlobalVar $LengthOfWord; #Lenght of the word that need to be guessed Globalvar $LetterPosition; Globalvar $WrongGuesses; #Many wrongguesses Globalvar $Executioner; #Person that will think of a word Globalvar $HangManMinigameStarted; #Person that will think of a word Globalvar $GetGuessedWord; #Show String that is currently be guessed. GlobalVar $hangman_version; $hangman_version="V1.01"; $HangManMinigameStarted = 0; $WrongGuesses = 0; $WordsToGuess[0] = "CELEBRATION"; $WordsToGuess[1] = "PITLANE"; $WordsToGuess[2] = "RACETRACK"; $WordsToGuess[3] = "ENGINE"; $WordsToGuess[4] = "ENGINEERING"; $WordsToGuess[5] = "FAILURES"; $WordsToGuess[6] = "BLACKWOOD"; $WordsToGuess[7] = "GARAGE"; $WordsToGuess[8] = "VICTORY"; $WordsToGuess[9] = "TRANSMISSION"; $WordsToGuess[10] = "GEARBOX"; $Alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; FOR($i=1;$i<27;$i=$i+1) $GetLetter = substr($Alphabet,$i-1,1); #Get next Letter from string after each loop $Letter[$i,0] = "".$GetLetter; #Save Letter in Array $Letter[$i,1] = 0; #Status of the letter ENDFOR EndCatchEvent CatchEvent OnMSO( $userName, $text ) # Player event $idxOfFirtsSpace = indexOf( $text, " "); IF( $idxOfFirtsSpace == -1 ) THEN $command = $text; $argv = ""; ELSE $command = subStr( $text,0,$idxOfFirtsSpace ); $argv = trim( subStr( $text,$idxOfFirtsSpace ) ); ENDIF SWITCH( $command ) CASE "!hm": IF ($HangManMinigameStarted == 0) THEN SetPlayerVar($userName,"InHangManAsPlayer",1); # Player joined the minigame $HangManMinigameStarted=$HangManMinigameStarted+1; HangMan(0,0); ELSE SetPlayerVar($userName,"InHangManAsSpectator",1); # Player joined the minigame Privmsg("Hangman Minigame is currently busy, You joined as a spectator"); HangMan(0,0); ENDIF BREAK; ENDSWITCH EndCatchEvent Sub HangMan( $KeyFlags,$id ) ### Set initial values for left/right and top/bottom coordinates ### $left_right_hangman = 43; $top_bottom_hangman = 50; ### End ### IF ( $WordToGuess == "" ) THEN $count_WordsToGuess = arrayCount ( $WordsToGuess ) - 1; $random_nbr = round ( RandomNum( 0 , $count_WordsToGuess ) , 0 ); $WordToGuess = $WordsToGuess[$random_nbr]; $LengthOfWord = StrLen( $WordToGuess ); #Get length of word $text = "^7The word has " . $LengthOfWord . " letters"; ENDIF $guesses_left = 11; openprivbutton( "hm_bgd",$left_right_hangman,$top_bottom_hangman,103,74,6,-1,16,""); openprivbutton( "hm_bgd1",$left_right_hangman,$top_bottom_hangman,103,74,6,-1,16,""); openprivbutton( "hm_bgd020",$left_right_hangman+1,$top_bottom_hangman+9,33,64,6,-1,32,""); #background for hangman drawing openprivbutton( "hm_bgd021",$left_right_hangman+34,$top_bottom_hangman+9,47,64,6,-1,32,""); #background word guessing openprivbutton( "hm_msg",$left_right_hangman+35,$top_bottom_hangman+9,45,5,4,-1,0,langEngine( "%{hangmanmsg}%" ) ); openprivbutton( "hm_msg_2",$left_right_hangman+35,$top_bottom_hangman+17,45,5,4,-1,0, "" . $text ); openprivbutton( "hm_Title",$left_right_hangman+1,$top_bottom_hangman+1,80,4,6,-1,32,"^6Welcome to Hangman minigame - " . $hangman_version); openprivbutton( "hm_CloseButton",$left_right_hangman+76,$top_bottom_hangman+1,5,4,6,-1,32,"^1X",CloseHangMan); openprivbutton( "hm_guesses_left",$left_right_hangman+1,$top_bottom_hangman+5,80,4,6,-1,32,"^7Guesses left: ^3" . $guesses_left ); #####PLAYERLIST (Players&Specators)##### $HMUSERLIST_HT = 55; #Height of the First User openprivbutton( "HM_Userlist_title",$left_right_hangman+82,$top_bottom_hangman+1,20,4,6,-1,32,"^3PlayerList"); #background openprivbutton( "HM_Userlist_bgd",$left_right_hangman+82,$top_bottom_hangman+1,20,68,6,-1,32,""); #background $InHangmanMinigame = getListOfPlayers("U"); $i=0; # Yisc[NL] - 12-11-2017 , $i wasn't specified, but is used in the next FOREACH-loops FOREACH( $maVar IN $InHangmanMinigame ) IF(GetPlayerVar($maVar["value"],"InHangManAsPlayer") == 1) THEN openPrivButton("HangManMiniGame_".$i,$left_right_hangman+82,$HMUSERLIST_HT,20,4,4,-1,32,"".GetPlayerVar($maVar["value"],"NickName")); #PlayerName in list $CloseHangManMiniGame = $CloseHangManMiniGame."&HangManMiniGame_".$i; $HMUSERLIST_HT = $HMUSERLIST_HT+4; #ButtonHeight+4 $i=$i+1; # Yisc[NL] - 12-11-2017 , $i needs to be raised by 1 ENDIF ENDFOREACH $HMUSERLIST_HT = $HMUSERLIST_HT+1; #Extra Space openPrivButton("Spectator".$i,$left_right_hangman+82,$HMUSERLIST_HT,20,4,4,-1,32,"^3Spectators"); #SpectatorList $HMUSERLIST_HT = $HMUSERLIST_HT+4; #ButtonHeight+4 FOREACH( $maVar IN $InHangmanMinigame ) IF(GetPlayerVar($maVar["value"],"InHangManAsSpectator") == 1) THEN openPrivButton("HangManMiniGame_".$i,$left_right_hangman+82,$HMUSERLIST_HT,20,4,4,-1,32,"".GetPlayerVar($maVar["value"],"NickName")); #PlayerName in list $CloseHangManMiniGame = $CloseHangManMiniGame."&HangManMiniGame_".$i; $HMUSERLIST_HT = $HMUSERLIST_HT+4; #ButtonHeight+4 $i=$i+1; # Yisc[NL] - 12-11-2017 , $i needs to be raised by 1 ENDIF ENDFOREACH #####PLAYERLIST##### Letters(0,0); EndSub Sub Letters($keyflags,$id) $Width=80; openprivbutton( "hm_let_bgd",$Width-3,109,47,10,6,-1,32,""); #Row 1 FOR($i=1;$i<14;$i=$i+1) #Letters A - M IF ($Letter[$i,1] == 1) THEN openprivbutton("letter_".$i,$Width,109,4,5,6,-1,0,"^2".$Letter[$i,0]);#Good Guess ELSE IF ($Letter[$i,1] == 2) THEN openprivbutton("letter_".$i,$Width,109,4,5,6,-1,0,"^1".$Letter[$i,0]); #Wrong Guess ELSE openprivbutton("letter_".$i,$Width,109,4,5,6,-1,0,"^7".$Letter[$i,0],ClickedLetter); #Available ENDIF ENDIF $Width=$Width+3; ENDFOR #Row 2 $Width=80; FOR($i=14;$i<27;$i=$i+1) #Letters N - Z IF ($Letter[$i,1] == 1) THEN openprivbutton("letter_".$i,$Width,114,4,5,6,-1,0,"^2".$Letter[$i,0]); #Good Guess ELSE IF ($Letter[$i,1] == 2) THEN openprivbutton("letter_".$i,$Width,114,4,5,6,-1,0,"^1".$Letter[$i,0]); #Wrong Guess ELSE openprivbutton("letter_".$i,$Width,114,4,5,6,-1,0,"^7".$Letter[$i,0],ClickedLetter); #Available ENDIF ENDIF $Width=$Width+3; ENDFOR EndSub Sub ClickedLetter($keyflags,$id) /* 0 = Available 1 = In Word 2 = Wrong Guess */ ### Set initial values for left/right and top/bottom coordinates ### $left_right_hangman = 43; $top_bottom_hangman = 50; ### End ### $GetGuessedWord = ""; #$LengthOfWord = StrLen( $WordToGuess ); #Get length of word $LengthOfGuessedWord=0; FOR ($i=1;$i<=$LengthOfWord;$i=$i+1) #Check Each Letter $GetLetterFromWord = substr($WordToGuess,$i-1,1); IF ($GetLetterFromWord == $Letter[ToNum(substr($id,7,2)),0]) THEN #IF letter matched with guessed Letter $Letter[ToNum(substr($id,7,2)),1] = 1; privmsg("^7Good Guess!! Letterposition:^3".$i); #DebugCheck . Displays Letter position in word $LetterPosition[ToNum($i),0] = "".$Letter[ToNum(substr($id,7,2)),0]; #Store letter on current position Letters(0,0); #Go back to Letter Sub ENDIF #####GUESSED WORD BUTTON##### IF ($LetterPosition[ToNum($i),0] == "") THEN $GetGuessedWord = $GetGuessedWord."_"; #Not guessed letters displays "_" ELSE $GetGuessedWord = $GetGuessedWord.$LetterPosition[ToNum($i),0]; #Set Guessed letters. $LengthOfGuessedWord = $LengthOfGuessedWord + 1; ENDIF IF ( $LengthOfWord == $LengthOfGuessedWord ) THEN openprivbutton( "GuessedWord",$left_right_hangman+34,$top_bottom_hangman+33,47,7,6,-1,32,"Word: ^2".$GetGuessedWord); #Show Word openprivbutton( "RestartGame",$left_right_hangman+34,$top_bottom_hangman+63,47,7,6,-1,32,"^3Restart game" , Restart_Game ); ELSE openprivbutton( "GuessedWord",$left_right_hangman+34,$top_bottom_hangman+33,47,7,6,-1,32,"Word: ^3".$GetGuessedWord); #Show Word ENDIF #####GUESSED WORD BUTTON##### ### If player has guessed the word, notify them about it and close the letter butons ### IF ( $LengthOfWord == $LengthOfGuessedWord ) THEN openprivbutton( "hm_guesses_left",$left_right_hangman+1,$top_bottom_hangman+5,80,4,6,-1,32+8,"^2! ! ! YOU WON THIS GAME ! ! !" ); closePrivButton( "hm_let_bgd" ); FOR($i=1;$i<27;$i=$i+1) closePrivButton("letter_".$i); ENDFOR ENDIF ### End ### ENDFOR #####WRONG GUESS##### IF($i == $LengthOfWord+1 && $Letter[ToNum(substr($id,7,2)),1] != 1) THEN #After checking letters but no match privmsg("^1Wrong Guess!"); $Letter[ToNum(substr($id,7,2)),1] = 2; $WrongGuesses = $WrongGuesses+1; $guesses_left = 11 - $WrongGuesses; IF ( $guesses_left > 0 ) THEN openprivbutton( "hm_guesses_left",$left_right_hangman+1,$top_bottom_hangman+5,80,4,6,-1,32,"^7Guesses left: ^3" . $guesses_left ); Letters(0,0); #Go back to Letter Sub ELSE openprivbutton( "hm_guesses_left",$left_right_hangman+1,$top_bottom_hangman+5,80,4,6,-1,32+8,"^1! ! ! G A M E O V E R ! ! !" ); ### Set initial values for left/right and top/bottom coordinates ### $left_right_draw_hangman = 45; $top_bottom_drawhangman = 63; ### End ### ### Change eyes from o to X to indicate person died ### ### Show correct answer ### ### Close letter selection box ### openprivbutton( "hm_draw_052",$left_right_draw_hangman+21,$top_bottom_drawhangman+8,7,4,6,-1,0+8,"^1X X"); openprivbutton( "AnswerGuessedWord",$left_right_hangman+34,$top_bottom_hangman+40,47,7,6,-1,32,"Answer: ^7".$WordToGuess); #Show correct answer openprivbutton( "RestartGame",$left_right_hangman+34,$top_bottom_hangman+63,47,7,6,-1,32,"^3Restart game" , Restart_Game ); closePrivButton( "hm_let_bgd" ); FOR($i=1;$i<27;$i=$i+1) closePrivButton("letter_".$i); ENDFOR ### End ### ENDIF ENDIF #####WRONG GUESS##### DrawHangMan(0,0); #Go back to DrawHangMan Sub EndSub Sub DrawHangMan( $KeyFlags,$id ) ### Set initial values for left/right and top/bottom coordinates ### $left_right_draw_hangman = 45; $top_bottom_drawhangman = 63; ### End ### SWITCH( $WrongGuesses ) CASE 1: openprivbutton( "hm_draw_01",$left_right_draw_hangman,$top_bottom_drawhangman+55,31,4,6,-1,32,""); #floor bar openprivbutton( "hm_draw_0110",$left_right_draw_hangman,$top_bottom_drawhangman+55,31,4,6,-1,32,""); #floor bar BREAK; CASE 2: openprivbutton( "hm_draw_02",$left_right_draw_hangman+7,$top_bottom_drawhangman,2,55,6,-1,32,""); #upright bar openprivbutton( "hm_draw_021",$left_right_draw_hangman+7,$top_bottom_drawhangman,2,55,6,-1,32,""); #upright bar BREAK; CASE 3: openprivbutton( "hm_draw_03",$left_right_draw_hangman+7,$top_bottom_drawhangman,18,3,6,-1,32,""); #top bar openprivbutton( "hm_draw_031",$left_right_draw_hangman+7,$top_bottom_drawhangman,18,3,6,-1,32,""); #top bar BREAK; CASE 4: openprivbutton( "hm_draw_04",$left_right_draw_hangman+24,$top_bottom_drawhangman,1,10,6,-1,32,""); #rope openprivbutton( "hm_draw_041",$left_right_draw_hangman+24,$top_bottom_drawhangman,1,10,6,-1,32,""); #rope BREAK; CASE 5: openprivbutton( "hm_draw_05",$left_right_draw_hangman+21,$top_bottom_drawhangman+8,7,7,6,-1,32,""); #head openprivbutton( "hm_draw_051",$left_right_draw_hangman+21,$top_bottom_drawhangman+8,7,7,6,-1,32,""); #head openprivbutton( "hm_draw_052",$left_right_draw_hangman+21,$top_bottom_drawhangman+8,7,4,6,-1,0,"^2o o"); #eyes openprivbutton( "hm_draw_053",$left_right_draw_hangman+21,$top_bottom_drawhangman+10,7,3,6,-1,0,"^1|"); #nose openprivbutton( "hm_draw_054",$left_right_draw_hangman+21,$top_bottom_drawhangman+12,7,3,6,-1,0,"^7====="); #mouth BREAK; CASE 6: openprivbutton( "hm_draw_06",$left_right_draw_hangman+23,$top_bottom_drawhangman+13,3,17,6,-1,32,""); #body openprivbutton( "hm_draw_061",$left_right_draw_hangman+23,$top_bottom_drawhangman+13,3,17,6,-1,32,""); #body BREAK; CASE 7: openprivbutton( "hm_draw_07",$left_right_draw_hangman+18,$top_bottom_drawhangman+17,5,1,6,-1,32,""); #right arm openprivbutton( "hm_draw_071",$left_right_draw_hangman+18,$top_bottom_drawhangman+17,5,1,6,-1,32,""); #right arm BREAK; CASE 8: openprivbutton( "hm_draw_08",$left_right_draw_hangman+26,$top_bottom_drawhangman+17,5,1,6,-1,32,""); #left arm openprivbutton( "hm_draw_081",$left_right_draw_hangman+26,$top_bottom_drawhangman+17,5,1,6,-1,32,""); #left arm BREAK; CASE 9: openprivbutton( "hm_draw_09",$left_right_draw_hangman+21,$top_bottom_drawhangman+30,7,2,6,-1,32,""); #hip openprivbutton( "hm_draw_091",$left_right_draw_hangman+21,$top_bottom_drawhangman+30,7,2,6,-1,32,""); #hip BREAK; CASE 10: openprivbutton( "hm_draw_010",$left_right_draw_hangman+21,$top_bottom_drawhangman+32,1,8,6,-1,32,""); #right leg openprivbutton( "hm_draw_0101",$left_right_draw_hangman+21,$top_bottom_drawhangman+32,1,8,6,-1,32,""); #right leg BREAK; CASE 11: openprivbutton( "hm_draw_011",$left_right_draw_hangman+27,$top_bottom_drawhangman+32,1,8,6,-1,32,""); #left leg openprivbutton( "hm_draw_0111",$left_right_draw_hangman+27,$top_bottom_drawhangman+32,1,8,6,-1,32,""); #left leg BREAK; ENDSWITCH EndSub Sub Restart_Game( $KeyFlags,$id ) ### Close all the buttons the player has on screen ### $i=0; $ListOfButtons = getListOfPlayerButtons( GetCurrentPlayerVar ( "UserName" ) ); WHILE( $ListOfButtons[$i] != "" ) closePrivButton ( $ListOfButtons[$i] ); $i = $i +1; ENDWHILE ### End ### ### Reset Letter status back to 0 ### FOR($i=1;$i<27;$i=$i+1) $Letter[$i,1] = 0; #Status of the letter ENDFOR ### End ### ### Set $WrongGuesses back to 0 , clear array $LetterPosition , clear $WordToGuess ### $WrongGuesses=0; unset ( $LetterPosition ); $WordToGuess=""; ### End ### HangMan( $KeyFlags,$id ); EndSub Sub CloseHangMan($keyflags,$id) IF ( GetCurrentPlayerVar( "InHangManAsPlayer" ) == 1 ) THEN $HangManMinigameStarted=0; GlobalMsg ( "^7INFO: Hangman can now be joined as player" ); GlobalMsg ( "^7INFO: Close the game and start it again using command: !hm" ); SetCurrentPlayerVar("InHangManAsPlayer",0); # Player left minigame ELSE SetCurrentPlayerVar("InHangManAsSpectator",0); # Spectator left minigame ENDIF ### Close all the buttons the player has on screen ### $i=0; $ListOfButtons = getListOfPlayerButtons( GetCurrentPlayerVar ( "UserName" ) ); WHILE( $ListOfButtons[$i] != "" ) closePrivButton ( $ListOfButtons[$i] ); $i = $i +1; ENDWHILE ### End ### ### Reset Letter status back to 0 ### FOR($i=1;$i<27;$i=$i+1) $Letter[$i,1] = 0; #Status of the letter ENDFOR ### End ### ### Set $WrongGuesses back to 0 , clear array $LetterPosition , clear $WordToGuess ### $WrongGuesses=0; unset ( $LetterPosition ); $WordToGuess=""; ### End ### EndSub Lang "EN" hangmanmsg = "^7=====================================================================" . "%nl%^7Click a letter to start guessing the word" #. "%nl%^7Choose a word or sentence that need to be guessed" #. "%nl%^7Also it is allowed to give a hint, to make it easier" . "%nl%^7" . "%nl%^3!!!!!!!!Have Fun!!!!!!!!" . "%nl%^7====================================================================="; EndLang