diff --git a/CHANGELOG b/CHANGELOG new file mode 100644 index 0000000..6356119 --- /dev/null +++ b/CHANGELOG @@ -0,0 +1,137 @@ +/* +Erklärungen: +Zu den Datenbank-Einträgen: +[ID]_Game +Spielphase //ALT, jetzt über Konstanten gelöst +0: Setup -> Spieler suchen (PHASESETUP) +1: Spielsetup -> jeder muss bestätigen, dass er dabei ist (PHASESPIELSETUP) +2: Nacht Teil 1: Amor (PHASENACHT1) +3: Nacht Teil 2: Verliebte (PHASENACHT2) +4: Nacht Teil 3: Alle bis Werwölfe (PHASENACHT3) +5: Nacht Teil 4: Hexe (PHASENACHT4) +6: Nacht Teil 5: Weitergabe des Amuletts (PHASENACHT5) +7: Tag, Tote werden bekanntgegeben (PHASETOTEBEKANNTGEBEN) +8: Tag, Bürgermeisterwahl (PHASEBUERGERMEISTERWAHL) +9: Tag, Diskussion (PHASEDISKUSSION) +10: Tag, Anklagen (PHASEANKLAGEN) +11: Tag, Abstimmung (PHASEABSTIMMUNG) +12: Tag, Stichwahl der Abstimmung (PHASESTICHWAHL) +13: Tag, nach Abstimmung (PHASENACHABSTIMMUNG) +14: Siegerehrung (PHASESIEGEREHRUNG) +charaktereAufdecken +0: Die Charaktere werden nicht aufgedeckt +1: Die Charaktere werden aufgedeckt +buergermeisterWeitergeben +0: Beim Tod des Bürgermeisters wird ein neuer gewählt. +1: Beim Tod des Bürgermeisters entscheidet der Bürgermeister, wer sein Nachfolger wird. +werwolfzahl +Gibt die Anzahl der Werwölfe beim Spielsetup an +hexenzahl +Gibt die Anzahl der Hexen beim Spielsetup an +seherzahl +Gibt die Anzahl der Seher beim Spielsetup an +jaegerzahl +Gibt die Anzahl der Jäger beim Spielsetup an +amorzahl +Gibt die Anzahl der Amor(s) an (max 1) +letzterAufruf +gibt den letzten Aufruf an, kann später einmal verwendet werden, um alte Spiele zu löschen. +waiting_for_others_time +Gibt an, ab wann angezeigt wird, auf wen wir noch warten +werwolfopfer +gibt das Opfer der Werwölfe an +log +Eine Log-Datei des gesamten Spiels +Diese Datei soll das Spiel nachvollziehbar machen +Nacht +gibt die Anzahl der Nächte seit Spielbeginn an +tagestext +Gibt den Text an, der in Phase 7 allen angezeigt wird += Diese Nacht wurden getötet: +SpielerX +SpielerZ +[ID]_Spieler +Nachtidentitaet +0: keine (CHARKEIN) +1: Dorfbewohner (CHARDORFBEWOHNER) +2: Werwolf (CHARWERWOLF) +3: Seher (CHARSEHER) +4: Hexe (CHARHEXE) +5: Jäger (CHARJAEGER) +6: Amor (CHARAMOR) +7: Leibwächter/Beschützer (CHARBESCHUETZER) +8: Paranormaler Ermittler (CHARPARERM) +9: Lykantroph (CHARLYKANTROPH) +10: Spion (CHARSPION) +11: Mordlustige(r), intern Idiot (CHARMORDLUSTIGER) +12: Pazifist (CHARPAZIFIST) +13: Alter Mann (CHARALTERMANN) +hexenOpfer +Wen die Hexe töten will +hexeHeilt +0: Hexe heilt das Opfer der Werwölfe nicht +1: Hexe heilt das Opfer der Werwölfe +verliebtMit +mit wem dieser Spieler vom Amor verliebt wurde +jaegerDarfSchiessen +0: Nichts Besonderes +1: Der Jäger wurde getötet und darf jemanden mit in den Tod reißen +buergermeisterDarfWeitergeben +0: Nichts Besonderes +1: Der Bürgermeister wurde getötet und gibt sein Amt weiter... +playerlog +Hier werden Sachen hineingeschrieben, die sich der Spieler wieder anschaun können soll +z.B. als Seher wen er gesehen hat +SESSION-Variablen Übersicht +$_SESSION['SpielID'] gibt die ID des Spiels an +$_SESSION['eigeneID'] gibt die eigene ID an +ToDO: +#1: DONE: Spieler mit gleichem Namen dürfen sich nicht in einem Spiel befinden DONE +#2: DONE: Verschiedene Texte der Dorfbewohner (einschlafen) DONE +#3: DONE: Seher sollte gleich reloaden ... DONE +#4: DONE: Bei Anklagen nicht standardmäßig ein Spieler ausgewählt sein... DONE +#5: DONE: Bei der Abstimmung sollte ersichtlich sein, wieviele Stimmen jeder (Angeklagte) erhalten hat EVTL. DONE +#6: DONE: Wenn Bürgermeister in der Nacht stirbt, kommt es nicht zu einer neuen Abstimmung EVTL. DONE +#7: DONE: In showGameLog fehlen die Zeilenumbrüche ... DONE +#8: DONE: gameLog sollte auch wieder verborgen werden können ... DONE +#9: DONE: In gameLog werden keine Umlaute angezeigt ... DONE [Encoding auf ISO-8859-1 umgestellt] +#10: DONE: Der eigene Name sollte angezeigt werden ... DONE +#11: DONE: Es sollte dem Bürgermeister angezeigt werden, dass er Bürgermeister ist ... DONE +#12: DONE: Beim Starten eines neuen Spieles sollten alte Spiele gelöscht werden ... +#13: Javascript, das beim Spielerstellen anzeigt, wieviele Charaktere ausgewählt wurden ... +#14: Die Spieler, die nicht Spielleiter sind, sollten sehen können, welche Regeln ausgewählt wurden ... +#15: DONE: Bei der Stimmenanzahl soll erkennbar sein, dass der Bürgermeister 2 Stimmen hat [EDIT: bzw. 1,5] +#16: DONE: Paranormalen Ermittler hinzufügen +#17: DONE: Alten Mann hinzufügen +#18: Trunkenbold hinzufügen +#19: Amulett des Schutzes hinzufügen +#20: Wolfsjunges hinzufügen +#21: Einsamen Wolf hinzufügen +#22: DONE: Lykantrophen hinzufügen +#23: DONE: Bürgermeister nur 1/2 Stimme geben, Fixen, dass Abstimmungen nicht zu früh abgebrochen werden. +#24: Abstimmungsergebnis anzeigen +#25: DONE: Bug beim Entfernen von Spielern +#26: Spieler sollten unter dem Spiel das Spiel verlassen können +#27: DONE: Den Verstorbenen eine Liste aller Spieler anzeigen +#28: Kultführer hinzufügen +#29: Strolch hinzufügen +#30: DONE: SQL injection unterbinden +#31: Hintergrundgrafik (verschieden Tag/Nacht) +#31: DONE: Als Option machen, dass niemand erfährt, wie die Charaktere verteilt sind +#32: Wenn jemand während des Spiels aussteigt, sollte das Spiel damit zurechtkommen +#33: DONE: Wenn einer der Verliebten stirbt, sollten beide am Tag auf der Totenliste erscheinen +#34: DONE: Beim Spielbeitritt sollte jeder Spieler ein vom Server zugeteiltes persönliches Passwort bekommen (Cookie), dass sich niemand anders für ihn ausgeben kann. +#35: DONE: Idiot und Pazifist hinzufügen [EDIT: Umbenennung von Idiot in Mordlustiger] +#36: DONE: "Seher" hinzufügen, der eine Identität überprüfen kann --> der "Spion" +#37: DONE: Umbenennen von Leibwächter in Beschützer +#38: DONE: Umbenennen von Idiot in Mordlustige(r) +#39: DONE: Timer einfügen, ab wann die Abstimmung am Tag zu keinem Ergebnis führt +#40: DONE: Timer einfügen, ab wann die Werwölfe nicht mehr einstimmig abstimmen müssen, zweiten Timer, ab wann kein Opfer gewählt wird +#41: Funktion für alle Buttons erstellen, dass die Buttons in Zukunft leicht mit Grafik ausgetauscht werdne können +#42: DONE: Timereinstellungen in den Spieleinstellungen bearbeiten können +#43: Zeige im Log an, wer wen anklagt +#44: DONE: Charaktere und Phasen durch Konstanten ersetzt, die in constants.php definiert werden +#45: DONE: Verbiete, dass sich jemand wie ein Charakter nennt (WERWOLF, HEXE, AMOR) +#46: Bots hinzufügen, die von einem "BotController"="Spieler, der für refreshen zuständig ist" zB ein Laptop +#47: DONE: Umstellen der Farben ermöglichen (v1.0.1, 30.12.2019) +*/ diff --git a/Werwolf.php b/Werwolf.php index 0612abb..8c9771c 100644 --- a/Werwolf.php +++ b/Werwolf.php @@ -2,13 +2,15 @@
Du befindest dich bereits in einem Spiel, Name: ".getName($mysqli,$eigeneID)."
"; $myname = getName($mysqli,$eigeneID); echo "Name: ". $myname ."
Sie sind Bürgermeister
"; } } - + //Vielleicht will der Spielleiter jemanden entfernen? if (isset($_POST['spieler_entfernen']) && isset($_POST['entfernenID'])) { @@ -183,7 +185,7 @@ p#liste { toAllPlayerLog($mysqli, $text); } } - + //Bevor wir noch auf die Phase schauen, schauen wir, ob irgendetwas unabhängig von der Phase ist //wie zum Beispiel der Tod des Jägers $jaegerRes = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE jaegerDarfSchiessen = 1"); @@ -249,7 +251,7 @@ p#liste { //echo $mysqli->error; $gameResAssoc = $gameResult->fetch_assoc(); $phase = $gameResAssoc['spielphase']; - + if ($phase == PHASENACHTBEGINN) { $displayTag = false; //bei true ändert sich der Hintergrund @@ -270,7 +272,7 @@ p#liste { $displayTag = true; $displayFade = false; } - + //Nachschauen, ob ich noch lebe ;) $ass = eigeneAssoc($mysqli); if ($phase >= PHASENACHTBEGINN && $phase <= PHASENACHABSTIMMUNG && $ass['lebt'] == 0) @@ -292,14 +294,14 @@ p#liste { { //Grundsätzlich sollte in dieser Phase jeder responden: $pageReload = true; - + //Zuerst die Regeln aktualisieren, falls sie bearbeitet wurden if ($eigeneID == 0 && isset($_POST['editierenAuswahl'])) spielRegelnAnwenden($mysqli); - + //Phase 0 = Setup und Spielersuchen -> Zeige daher eine Liste der Spieler an echo "Mit dieser Zahl können andere Ihrem Spiel beitreten!
"; - + //Der Spielleiter bekommt zusätzlich einen Button angezeigt, mit dem er die Einstellungen bearbeiten kann. $eigRes = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE id = $eigeneID"); $eigAss = $eigRes->fetch_assoc(); @@ -316,7 +318,7 @@ p#liste { '; } - + //Zeige alle Spieler in einer Liste an--> Alt, wird jz via javascript gelöst echo "Warte auf andere Spieler ...
"); - + //Als Spielleiter sollte man das Spiel "ohne Rücksicht auf Verluste" beginnen können if ($eigeneID == 0) { @@ -386,7 +388,7 @@ p#liste {- + Query("UPDATE $spielID"."_game SET spielphase = ".PHASENACHT3); - $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1, bereit = 0"); + $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1, bereit = 0"); phaseInitialisieren(PHASENACHT3,$mysqli); $pageReload = true; } @@ -526,9 +528,9 @@ p#liste { { //Hier erwachen die Werwölfe, die Seherin und können ihre Nachtaktivität ausführen //Die anderen Spieler müssen auf einen Button drücken, um als ready zu gelten. - + characterButton($mysqli); //Zuerst jedem Spieler seinen Charakter zeigen - + //Schaue nach, welcher Charakter ich bin... $spielerResult = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE id = $eigeneID"); $spielerAssoc = $spielerResult->fetch_assoc(); @@ -690,13 +692,13 @@ p#liste { $countdownAb = time(); $mysqli->Query("UPDATE $spielID"."_spieler SET countdownBis = $countdownBis, countdownAb = $countdownAb WHERE (nachtIdentitaet = ". CHARWERWOLF ." OR nachtIdentitaet = ".CHARURWOLF.") AND lebt = 1"); $mysqli->Query("UPDATE $spielID"."_game SET werwolfeinstimmig = 0"); - + //Timer initialiseren - $timerZahl = $countdownBis - time()+1; + $timerZahl = $countdownBis - time()+1; $timerAb = $countdownAb - time()+1; $aktBeiTime = true; $timerText = "Zeit, bis die Abstimmung der Werwölfe zu keinem Ergebnis führen kann: "; - + //Überprüfe, ob es nicht jetzt schon eine Einstimmigkeit gibt... //Die Wahl muss nicht einstimmig sein ... $werwolfQ = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE (nachtIdentitaet = ". CHARWERWOLF ." OR nachtIdentitaet = ".CHARURWOLF.") AND lebt = 1"); @@ -730,7 +732,7 @@ p#liste { else { //Timer initialiseren - $timerZahl = $eigeneAssoc['countdownBis'] - time()+1; + $timerZahl = $eigeneAssoc['countdownBis'] - time()+1; $timerAb = $eigeneAssoc['countdownAb'] - time()+1; $aktBeiTime = true; $gameAssoc = gameAssoc($mysqli); @@ -744,7 +746,7 @@ p#liste { //einmal die Wahl eintragen $wahlID = (int)$_POST['werwolfID']; $mysqli->Query("UPDATE $spielID"."_spieler SET wahlAuf = $wahlID WHERE id = $eigeneID"); - + //Schauen, ob wir einstimmig sein müssen $gameAssoc = gameAssoc($mysqli); if ($gameAssoc['werwolfeinstimmig']==1) @@ -767,7 +769,7 @@ p#liste { $mysqli->Query("UPDATE $spielID"."_spieler SET bereit = 1, reload = 1 WHERE (nachtIdentitaet = ".CHARWERWOLF. " OR nachtIdentitaet = ". CHARURWOLF.")"); $mysqli->Query("UPDATE $spielID"."_game SET werwolfopfer = $opfer"); phaseBeendenWennAlleBereit(PHASENACHT3,$mysqli); //Schauen, ob wir die Phase schon beenden können - toGameLog($mysqli,"Die Wahl der Werwölfe fiel einstimmig auf: ". getName($mysqli,$opfer)); + toGameLog($mysqli,"Die Wahl der Werwölfe fiel einstimmig auf: ". getName($mysqli,$opfer)); } } else @@ -834,7 +836,7 @@ p#liste { elseif ($phase == PHASENACHT4) { characterButton($mysqli); //Zuerst jedem Spieler seinen Charakter zeigen - + //Schaue nach, welcher Charakter ich bin... $spielerResult = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE id = $eigeneID"); $spielerAssoc = $spielerResult->fetch_assoc(); @@ -898,7 +900,7 @@ p#liste { else { $mysqli->Query("UPDATE $spielID"."_spieler SET hexenOpfer = -1 WHERE id = $eigeneID"); - } + } } //Jetzt müssen wir die Hexe noch auf bereit setzen setBereit($mysqli,$eigeneID,1); @@ -949,9 +951,9 @@ p#liste { { //zeige den Button an dorfbewohnerWeiterschlafen(); - } + } } - } + } } else { @@ -970,7 +972,7 @@ p#liste { dorfbewohnerWeiterschlafen(); } } - } + } } elseif ($phase == PHASENACHTENDE) { @@ -988,7 +990,7 @@ p#liste { else { $mysqli->Query("UPDATE $spielID"."_game SET spielphase = ".PHASETOTEBEKANNTGEBEN); - $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1, bereit = 0"); + $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1, bereit = 0"); phaseInitialisieren(PHASETOTEBEKANNTGEBEN,$mysqli); $pageReload = true; } @@ -1039,7 +1041,7 @@ p#liste { { warteAufAndere($mysqli); } - } + } } else { @@ -1075,8 +1077,8 @@ p#liste { { warteAufAndere($mysqli); } - } - + } + } } elseif ($phase == PHASEBUERGERMEISTERWAHL) @@ -1092,7 +1094,7 @@ p#liste { $wahlID = (int)$_POST['buergermeisterID']; $mysqli->Query("UPDATE $spielID"."_spieler SET wahlAuf = $wahlID WHERE id = $eigeneID"); //Dann schauen, ob wir schon eine Mehrheit haben - + //Generiere eine Text zum Anzeigen, wer für wen gestimmt hat $alleSpielerRes = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE lebt = 1"); $text = ""; @@ -1105,7 +1107,7 @@ p#liste { $wahlAufSpieler[$w]++; if ($w > -1) { - $text .= $temp['name']." -> ". getName($mysqli,$w). ", "; + $text .= $temp['name']." -> ". getName($mysqli,$w). ", "; } } //Schauen, ob jemand mehr als 50% der Stimmen hat @@ -1118,7 +1120,7 @@ p#liste { $mysqli->Query("UPDATE $spielID"."_spieler SET buergermeister = 1 WHERE id = $id"); toGameLog($mysqli,getName($mysqli,$id)." wurde zum Bürgermeister gewählt, abgestimmt haben: $text"); toAllPlayerLog($mysqli,getName($mysqli,$id)." wurde zum Bürgermeister gewählt, abgestimmt haben: $text"); - phaseBeendenWennAlleBereit(PHASEBUERGERMEISTERWAHL,$mysqli); + phaseBeendenWennAlleBereit(PHASEBUERGERMEISTERWAHL,$mysqli); break; } } @@ -1209,7 +1211,7 @@ p#liste { echo ""; } } - + //Als Bürgermeister habe ich zusätzlich noch die Möglichkeit, zur nächsten Phase zu springen $bres = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE buergermeister = 1"); $bras = $bres->fetch_assoc(); @@ -1241,7 +1243,7 @@ p#liste { echo ""; //Die Liste, was die anderen gewählt haben $listReload=true; $pageReload=true; - + //Schaue zuerst, ob der timer noch nicht abgelaufen ist $eigeneAssoc = eigeneAssoc($mysqli); if ($eigeneAssoc['countdownBis']<= time()) @@ -1277,7 +1279,7 @@ p#liste { $wahlAufSpieler[$w]+=0.5; if ($w > -1) { - $text .= $temp['name']." -> ". getName($mysqli,$w). ", "; + $text .= $temp['name']." -> ". getName($mysqli,$w). ", "; } } $wahlErfolgreich = 0; @@ -1290,7 +1292,7 @@ p#liste { toGameLog($mysqli,getName($mysqli,$id)." wurde bei der Abstimmung zum Tode verurteilt, mit den Stimmen: $text"); toAllPlayerLog($mysqli,getName($mysqli,$id)." wurde vom Dorf zum Tode verurteilt, mit den Stimmen: $text"); endeDerAbstimmungEinfacheMehrheit($id,$mysqli); - $wahlErfolgreich = 1; + $wahlErfolgreich = 1; break; } } @@ -1338,7 +1340,7 @@ p#liste { } } if (!$exequo) - { + { //Starte eine Stichwahl endeDerAbstimmungStichwahl($maxStimmenSpieler,$zweitMaxStimmenSpieler,$mysqli); } @@ -1369,7 +1371,7 @@ p#liste { } elseif ($phase == PHASESTICHWAHL) { - characterButton($mysqli); + characterButton($mysqli); //Es kommt zu einer Stichwahl echo "
Stichwahl
"; echo "Sie müssen einen gültigen Namen eingeben
"; start(); } - } + } } else { @@ -1738,12 +1740,12 @@ p#liste { echo "".$a['name']; echo"
"; echo ""; - } - echo "Sie befinden sich momentan in keinem Spiel: Sie können entweder einem bereits erstellten Spiel beitreten oder ein neues Spiel erstellen!
-Eine oder mehrere Countdown-Einstellungen sind ungültig
"; - $werwolftimer1 = 60; - $werwolfzusatz1 = 4; - $werwolftimer2 = 50; - $werwolfzusatz2 = 3; - $dorftimer = 550; - $dorfzusatz = 10; - $dorfstichwahltimer = 200; - $dorfstichwahlzusatz = 5; - } - $mysqli->Query("UPDATE $spielID"."_game SET buergermeisterWeitergeben = $buergermeisterWeitergeben, - charaktereAufdecken = $charaktereAufdecken, - seherSiehtIdentitaet = $seherSiehtIdentitaet, - werwolfzahl = $werwolfzahl, - hexenzahl = $hexenzahl, - jaegerzahl = $jaegerzahl, - seherzahl = $seherzahl, - amorzahl = $amorzahl, - beschuetzerzahl = $beschuetzerzahl, - parErmZahl = $parErmZahl, - lykantrophenzahl = $lykantrophenzahl, - spionezahl = $spionezahl, - idiotenzahl = $idiotenzahl, - pazifistenzahl = $pazifistenzahl, - altenzahl = $altenzahl, - urwolfzahl = $urwolfzahl, - zufaelligeAuswahl = $zufaelligauswaehlen, - zufaelligeAuswahlBonus = $zufaelligeAuswahlBonus, - werwolftimer1 = $werwolftimer1, - werwolfzusatz1 = $werwolfzusatz1, - werwolftimer2 = $werwolftimer2, - werwolfzusatz2 = $werwolfzusatz2, - dorftimer = $dorftimer, - dorfzusatz = $dorfzusatz, - dorfstichwahltimer = $dorfstichwahltimer, - dorfstichwahlzusatz = $dorfstichwahlzusatz, - inaktivzeit = $inaktivzeit, - inaktivzeitzusatz = $inaktivzeitzusatz"); - //Fertig upgedated ;) - } -} - -function spielInitialisieren($mysqli,$spielerzahl) -{ - $spielID = $_COOKIE['SpielID']; - //Zuerst überprüfen, ob mindestens 2 Spieler mitspielen - if ($spielerzahl < 2) - { - echo "Zu wenig Spieler, um ein Spiel zu starten!
"; - return false; - } - $gameResult = $mysqli->Query("SELECT * FROM $spielID"."_game"); - $gameResAssoc = $gameResult->fetch_assoc(); - $werwolfzahl = $gameResAssoc['werwolfzahl']; - $hexenzahl = $gameResAssoc['hexenzahl']; - $jaegerzahl = $gameResAssoc['jaegerzahl']; - $seherzahl = $gameResAssoc['seherzahl']; - $amorzahl = $gameResAssoc['amorzahl']; - $beschuetzerzahl = $gameResAssoc['beschuetzerzahl']; - $parErmZahl = $gameResAssoc['parErmZahl']; - $lykantrophenzahl = $gameResAssoc['lykantrophenzahl']; - $spionezahl = $gameResAssoc['spionezahl']; - $idiotenzahl = $gameResAssoc['idiotenzahl']; - $pazifistenzahl = $gameResAssoc['pazifistenzahl']; - $altenzahl = $gameResAssoc['altenzahl']; - $urwolfzahl = $gameResAssoc['urwolfzahl']; - $zufaelligeAuswahl = $gameResAssoc['zufaelligeAuswahl']; - $zufaelligeAuswahlBonus = $gameResAssoc['zufaelligeAuswahlBonus']; - - //Zähle alle Charaktere zusammen und schaue, ob es mehr als die Spieleranzahl sind - $besondereCharaktere = $werwolfzahl + $hexenzahl + $jaegerzahl + $seherzahl + $amorzahl + $beschuetzerzahl + $parErmZahl - + $lykantrophenzahl + $spionezahl + $idiotenzahl + $pazifistenzahl + $altenzahl + $urwolfzahl; - if ($besondereCharaktere > $spielerzahl && $zufaelligeAuswahl == 0) - { - echo "Nicht genug Spieler für Ihre Spielkonfiguration
"; - return false; - } - - //Schau, ob es zumindest einen "bösen" Charakter gibt... - $boeseCharaktere = $werwolfzahl + $urwolfzahl; - if ($boeseCharaktere < 1 && $zufaelligeAuswahl == 0) - { - echo "Ein Spiel mit dieser Konfiguration ist nicht möglich. Haben Sie mindestens einen Werwolf ausgewählt?
"; - return false; - } - - //Schau, dass es max einen Amor gibt - if ($amorzahl < 0 || $amorzahl > 1) - { - echo "Ein Spiel mit dieser Anzahl an Amor(s) ist nicht möglich ... Nur 1 oder 0 auswählen
"; - return false; - } - - //Die basic-Tests sind mal bestanden: Setzen wir den Spielmodus auf 1: Spielsetup - $mysqli->Query("UPDATE $spielID"."_game SET spielphase = ".PHASESPIELSETUP); - - //Jetzt muss jeder bestätigen, dass er dabei ist. - //Dazu setzen wir mal alle bereit auf 0, außer den Spielleiter - $eigeneID = $_COOKIE['eigeneID']; - $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1, bereit = 0"); - $mysqli->Query("UPDATE $spielID"."_spieler SET bereit = 1 WHERE id = $eigeneID"); -} - -function setSpielerDefault($mysqli) -{ - //Setzt die Werte aus $spielID_spieler auf die Defaultwerte zurück - $spielID = $_COOKIE['SpielID']; - $mysqli->query("UPDATE $spielID"."_spieler SET - lebt = 0, - wahlAuf = -1, - angeklagtVon = -1, - nachtIdentitaet = 0, - buergermeister = 0, - hexeHeiltraenke = 0, - hexeTodestraenke = 0, - hexenOpfer = -1, - hexeHeilt = 0, - beschuetzerLetzteRundeBeschuetzt = -1, - verliebtMit = -1, - jaegerDarfSchiessen = 0, - parErmEingesetzt = 0, - buergermeisterDarfWeitergeben = 0; - "); -} - -function spielStarten($mysqli) -{ - $spielID = $_COOKIE['SpielID']; - - //Alle löschen, die nicht bereit sind - $mysqli->Query("DELETE FROM $spielID"."_spieler WHERE bereit = 0"); - - setSpielerDefault($mysqli); - - //aktualisiere Spielerzahl - $spielerQuery = $mysqli->Query("SELECT * FROM $spielID"."_spieler"); - $spielerzahl = $spielerQuery->num_rows; - - //Überprüfe nocheinmal die Bedingungen - $gameResult = $mysqli->Query("SELECT * FROM $spielID"."_game"); - $gameResAssoc = $gameResult->fetch_assoc(); - $werwolfzahl = $gameResAssoc['werwolfzahl']; - $hexenzahl = $gameResAssoc['hexenzahl']; - $jaegerzahl = $gameResAssoc['jaegerzahl']; - $seherzahl = $gameResAssoc['seherzahl']; - $amorzahl = $gameResAssoc['amorzahl']; - $beschuetzerzahl = $gameResAssoc['beschuetzerzahl']; - $parErmZahl = $gameResAssoc['parErmZahl']; - $lykantrophenzahl = $gameResAssoc['lykantrophenzahl']; - $spionezahl = $gameResAssoc['spionezahl']; - $idiotenzahl = $gameResAssoc['idiotenzahl']; - $pazifistenzahl = $gameResAssoc['pazifistenzahl']; - $altenzahl = $gameResAssoc['altenzahl']; - $urwolfzahl = $gameResAssoc['urwolfzahl']; - $zufaelligeAuswahl = $gameResAssoc['zufaelligeAuswahl']; - $zufaelligeAuswahlBonus = $gameResAssoc['zufaelligeAuswahlBonus']; - - //Zähle alle Charaktere zusammen und schaue, ob es mehr als die Spieleranzahl sind - $besondereCharaktere = $werwolfzahl + $hexenzahl + $jaegerzahl + $seherzahl + $amorzahl + $beschuetzerzahl + $parErmZahl - + $lykantrophenzahl + $spionezahl + $idiotenzahl + $pazifistenzahl + $altenzahl + $urwolfzahl; - if (($besondereCharaktere > $spielerzahl && $zufaelligeAuswahl == 0)|| $spielerzahl < 2) - { - echo "Nicht genug Spieler für Ihre Spielkonfiguration
"; - //Setze die Spielphase wieder auf 0 - $mysqli->Query("UPDATE $spielID"."_game SET spielphase = 0"); - $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1"); - return false; - } - - //Schau, ob es zumindest einen "bösen" Charakter gibt... - $boeseCharaktere = $werwolfzahl + $urwolfzahl; - if ($boeseCharaktere < 1 && $zufaelligeAuswahl == 0) - { - echo "Ein Spiel mit dieser Konfiguration ist nicht möglich. Haben Sie mindestens einen Werwolf ausgewählt?
"; - //Setze die Spielphase wieder auf 0 - $mysqli->Query("UPDATE $spielID"."_game SET spielphase = 0"); - $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1"); - return false; - } - - //Setze alle auf lebend, und gib allen die Identität 0 = keine - //Außerdem lösche das Playerlog - $mysqli->Query("UPDATE $spielID"."_spieler SET lebt = 1, nachtIdentitaet = ". CHARKEIN .", playerlog = ''"); - - //Ändere noch einige Werte im _game - //Lösche das Log, und setze die Nachtanzahl auf 1 - $mysqli->Query("UPDATE $spielID"."_game SET log = '', nacht = 1"); - - if ($zufaelligeAuswahl == 1) - { - $werwolfzahl = 0; - if ($zufaelligeAuswahlBonus < -15 || $zufaelligeAuswahlBonus > 15) - { - echo "Der Spielbonus ist zu hoch oder zu niedrig
"; - //Setze die Spielphase wieder auf 0 - $mysqli->Query("UPDATE $spielID"."_game SET spielphase = 0"); - $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1"); - return false; - } - - toGameLog($mysqli,"Ein neues Spiel wird gestartet mit $spielerzahl Spielern. Die Charaktere werden zufällig verteilt."); - $spielinfo = "Maximal im Spiel: Werwölfe: $spielerzahl, Hexen: $hexenzahl, Seher: $seherzahl, Jäger: $jaegerzahl, Amor: $amorzahl, - Beschützer: $beschuetzerzahl, Paranormaler Ermittler: $parErmZahl, Lykantrophen: $lykantrophenzahl, - Spione: $spionezahl, Mordlustige: $idiotenzahl, Pazifisten: $pazifistenzahl, Die Alten: $altenzahl, Urwölfe: $urwolfzahl"; - toGameLog($mysqli,$spielinfo); - toAllPlayerLog($mysqli,"Ein neues Spiel wird gestartet mit $spielerzahl Spielern. Die Charaktere werden zufällig verteilt."); - toAllPlayerLog($mysqli,$spielinfo); - //Starte eine zufällige Verteilung der Charaktere - - //Das sind die Gewichtungen, von allen Charakteren werden die Zahlen zusammengezählt, ein positiver Wert - // bedeutet einen Vorteil für die Dorfbewohner, negativer Wert Vorteil für die Werwölfe - $werwolfbonus = -6; - $hexenbonus = +4; - $jaegerbonus = +3; - $seherbonus = +7; - $amorbonus = -3; - $beschuetzerbonus =+3; - $parErmBonus =+3; - $lykantrophenbonus = -1; - $spionebonus = +6; - $idiotenbonus = +1; - $pazifistenbonus = -1; - $altenbonus = 0; - $urwolfbonus = -8; - $dorfbewohnerbonus = +1; - for ($i=0;$i<=1000;$i++) - { - //1000 Versuche - $werwolfzahlN = rand(1,$spielerzahl/3); - $hexenzahlN = rand(0,$hexenzahl); - $jaegerzahlN = rand(0,$jaegerzahl); - $seherzahlN = rand(0,$seherzahl); - $amorzahlN = rand(0,$amorzahl); - $beschuetzerzahlN = rand(0,$beschuetzerzahl); - $parErmZahlN = rand(0,$parErmZahl); - $lykantrophenzahlN = rand(0,$lykantrophenzahl); - $spionezahlN = rand(0,$spionezahl); - $idiotenzahlN = rand(0,$idiotenzahl); - $pazifistenzahlN = rand(0,$pazifistenzahl); - $altenzahlN = rand(0,$altenzahl); - $urwolfzahlN = rand(0, $urwolfzahl); - - $dorfbewohnerzahlN = $spielerzahl - $werwolfzahlN - $hexenzahlN - $jaegerzahlN - $seherzahlN - - $amorzahlN - $beschuetzerzahlN - $parErmZahlN - $lykantrophenzahlN - $spionezahlN - - $idiotenzahlN - $pazifistenzahlN - $altenzahlN - $urwolfzahlN; - //Jetzt überprüfe, ob die Aufteilung "fair ist" - $aktBonus = $werwolfzahlN * $werwolfbonus - + $hexenzahlN * $hexenbonus - + $jaegerzahlN * $jaegerbonus - + $seherzahlN * $seherbonus - + $amorzahlN * $amorbonus - + $beschuetzerzahlN * $beschuetzerbonus - + $parErmZahlN * $parErmBonus - + $lykantrophenzahlN * $lykantrophenbonus - + $spionezahlN * $spionebonus - + $idiotenzahlN * $idiotenbonus - + $pazifistenzahlN * $pazifistenbonus - + $altenzahlN * $altenbonus - + $urwolfzahlN * $urwolfbonus - + $dorfbewohnerzahlN * $dorfbewohnerbonus; - if ($aktBonus + 1 <= $zufaelligeAuswahlBonus + 2 && $aktBonus + 1 >= $zufaelligeAuswahlBonus && $dorfbewohnerzahlN >= 0) - { - //Bonus ist um max. 1 abweichend --> succes! - toGameLog($mysqli,"Zufällige Verteilung der Charaktere vorgenommen mit Bonus ". $aktBonus . "."); - $werwolfzahl = $werwolfzahlN; - $hexenzahl = $hexenzahlN; - $jaegerzahl = $jaegerzahlN; - $seherzahl = $seherzahlN; - $amorzahl = $amorzahlN; - $beschuetzerzahl = $beschuetzerzahlN; - $parErmZahl = $parErmZahlN; - $lykantrophenzahl = $lykantrophenzahlN; - $spionezahl = $spionezahlN; - $idiotenzahl = $idiotenzahlN; - $pazifistenzahl = $pazifistenzahlN; - $altenzahl = $altenzahlN; - $urwolfzahl = $urwolfzahlN; - break; - } - } - if ($werwolfzahl == 0) - { - //Verteilung fehlgeschlagen! - //Notverteilung - toGameLog($mysqli,"Zufällige Verteilung der Charaktere fehlgeschlagen. Teile nur Werwölfe aus."); - $werwolfzahl = round($spielerzahl/6)+1; - $hexenzahl = 0; - $jaegerzahl = 0; - $seherzahl = 0; - $amorzahl = 0; - $beschuetzerzahl = 0; - $parErmZahl = 0; - $lykantrophenzahl = 0; - $spionezahl = 0; - $idiotenzahl = 0; - $pazifistenzahl = 0; - $altenzahl = 0; - $urwolfzahl = 0; - } - $spielinfo = "Im Spiel befinden sich: Werwölfe: $werwolfzahl, Hexen: $hexenzahl, Seher: $seherzahl, Jäger: $jaegerzahl, Amor: $amorzahl, - Beschützer: $beschuetzerzahl, Paranormaler Ermittler: $parErmZahl, Lykantrophen: $lykantrophenzahl, - Spione: $spionezahl, Mordlustige: $idiotenzahl, Pazifisten: $pazifistenzahl, Die Alten: $altenzahl, Urwölfe: $urwolfzahl"; - toGameLog($mysqli,$spielinfo); - } - else - { - //Logge den Spielstart - toGameLog($mysqli,"Ein neues Spiel wird gestartet mit $spielerzahl Spielern."); - $spielinfo = "Werwölfe: $werwolfzahl, Hexen: $hexenzahl, Seher: $seherzahl, Jäger: $jaegerzahl, Amor: $amorzahl, - Beschützer: $beschuetzerzahl, Paranormaler Ermittler: $parErmZahl, Lykantrophen: $lykantrophenzahl, - Spione: $spionezahl, Mordlustige: $idiotenzahl, Pazifisten: $pazifistenzahl, Die Alten: $altenzahl, Urwölfe: $urwolfzahl"; - toGameLog($mysqli,$spielinfo); - toAllPlayerLog($mysqli,"Ein neues Spiel wird gestartet mit $spielerzahl Spielern."); - toAllPlayerLog($mysqli,$spielinfo); - } - - //Teile die Charaktere aus! - weiseCharakterZu($werwolfzahl,CHARWERWOLF,$mysqli); - weiseCharakterZu($seherzahl,CHARSEHER,$mysqli); - weiseCharakterZu($hexenzahl,CHARHEXE,$mysqli); - weiseCharakterZu($jaegerzahl,CHARJAEGER,$mysqli); - weiseCharakterZu($amorzahl,CHARAMOR,$mysqli); - weiseCharakterZu($beschuetzerzahl,CHARBESCHUETZER,$mysqli); - weiseCharakterZu($parErmZahl,CHARPARERM,$mysqli); - weiseCharakterZu($lykantrophenzahl,CHARLYKANTROPH,$mysqli); - weiseCharakterZu($spionezahl,CHARSPION,$mysqli); - weiseCharakterZu($idiotenzahl,CHARMORDLUSTIGER,$mysqli); - weiseCharakterZu($pazifistenzahl,CHARPAZIFIST,$mysqli); - weiseCharakterZu($altenzahl,CHARALTERMANN,$mysqli); - weiseCharakterZu($urwolfzahl, CHARURWOLF, $mysqli); - - //setze verschiedene Startwerte: - //Bei allen Hexen setze die Heiltränke und Todestränke auf 1 - //Alle Spieler, die keinen Charakter haben, erhalten Dorfbewohner - $res = $mysqli->Query("SELECT * FROM $spielID"."_spieler"); - while ($temp = $res->fetch_assoc()) - { - $i = (int)$temp['id']; - if ($temp['nachtIdentitaet']==CHARHEXE) - { - //4 = Hexe - $mysqli->Query("UPDATE $spielID"."_spieler SET hexeHeiltraenke = 1, hexeTodestraenke = 1 WHERE id = $i"); - } - elseif ($temp['nachtIdentitaet']==CHARBESCHUETZER) - { - //Beschützer - $mysqli->Query("UPDATE $spielID"."_spieler SET beschuetzerLetzteRundeBeschuetzt = -1 WHERE id = $i"); - } - elseif ($temp['nachtIdentitaet']==CHARPARERM) - { - $mysqli->Query("UPDATE $spielID"."_spieler SET parErmEingesetzt = 0 WHERE id = $i"); - } - elseif ($temp['nachtIdentitaet']==CHARKEIN) - { - //Weise dem Spieler Dorfbewohner zu! - $mysqli->Query("UPDATE $spielID"."_spieler SET nachtIdentitaet = ". CHARDORFBEWOHNER ." WHERE id = $i"); - } - elseif ($temp['nachtIdentitaet'] == CHARURWOLF) - { - $mysqli->Query("UPDATE $spielID"."_spieler SET urwolf_anzahl_faehigkeiten = 1 WHERE id = $i"); - } - } - $neuePhase = PHASENACHT3; - if ($amorzahl >= 1) - { - $neuePhase = PHASENACHT1; - } - else - { - //Wenn es keinen Amor gibt, Spielphase "Nacht3" - $neuePhase = PHASENACHT3; - } - $mysqli->Query("UPDATE $spielID"."_game SET spielphase = $neuePhase"); - $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1, bereit = 0"); - phaseInitialisieren($neuePhase,$mysqli); -} - -function weiseCharakterZu($anzahlSpieler,$identitaet,$mysqli) -{ - //anzahlSpieler: Wieviele Spieler diesen Charakter erhalten sollen - //Wichtig ist nicht die Spielerzahl, sondern die höchste ID - $spielID = $_COOKIE['SpielID']; - - $freieSpieler = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE nachtIdentitaet = ". CHARKEIN ." ORDER BY RAND()"); - for ($i = 0; $i < $anzahlSpieler; $i++) - { - $temp = $freieSpieler->fetch_assoc(); - //Diesem Spieler die Identität zuweisen - $id = (int)$temp['id']; - //Mache ihn zu dem Charakter - $identitaet = (int)$identitaet; - $mysqli->Query("UPDATE $spielID"."_spieler SET nachtIdentitaet = $identitaet WHERE id = $id"); - //echo "Zwei verschiedene Spieler auswählen ...
"; - return false; - } - if ($wahl1 < 0 || $wahl2 < 0) - return false; - - //Die Wahl scheint gültig zu sein--> eintragen - $mysqli->Query("UPDATE $spielID"."_spieler SET verliebtMit = $wahl1 WHERE id = $wahl2"); - $mysqli->Query("UPDATE $spielID"."_spieler SET verliebtMit = $wahl2 WHERE id = $wahl1"); - toPlayerLog($mysqli,"Sie haben ".getName($mysqli,$wahl1)." mit ".getName($mysqli,$wahl2)." verliebt.",$eigeneID); - toGameLog($mysqli,"Amor hat ".getName($mysqli,$wahl1)." mit ".getName($mysqli,$wahl2)." verliebt."); - toPlayerLog($mysqli,"Amor hat Sie mit ".getName($mysqli,$wahl1). " verliebt.",$wahl2); - toPlayerLog($mysqli,"Amor hat Sie mit ".getName($mysqli,$wahl2). " verliebt.",$wahl1); - return true; -} - -function spionInitialisiere($mysqli) -{ - $spielID = $_COOKIE['SpielID']; - - //Zeige eine Liste aller lebenden Spieler an - echo "'; -} - -function spionSehe($mysqli, $id, $identitaet) -{ - $spielID = $_COOKIE['SpielID']; - $eigeneID = $_COOKIE['eigeneID']; - $id = (int)$id; - //schauen, ob es ein valider Spieler ist - $spielerRes = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE id = $id AND lebt = 1"); - if ($spielerRes->num_rows < 1) - return false; - $spielerAssoc=$spielerRes->fetch_assoc(); - $strIdentitaet = nachtidentitaetAlsString($identitaet); - if ($spielerAssoc['nachtIdentitaet']==$identitaet) - { - $text = $spielerAssoc['name']." ist ". $strIdentitaet ."."; - } - else - { - $text = $spielerAssoc['name']." ist nicht ". $strIdentitaet ."."; - } - echo "Letzte Nacht beschützten Sie ".getName($mysqli,$eigeneAssoc['beschuetzerLetzteRundeBeschuetzt'])."
"; - - //Zeige eine Liste aller lebenden Spieler an - echo "'; -} - -function beschuetzerAuswahl($mysqli,$id) -{ - $spielID = $_COOKIE['SpielID']; - $eigeneID = $_COOKIE['eigeneID']; - $id = (int)$id; - //schauen, ob es ein valider Spieler ist - $spielerRes = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE id = $id AND lebt = 1"); - if ($spielerRes->num_rows < 1) - return false; - - //Nachschauen, ob ich ihn nicht vorige Nacht bereits beschützt habe ... - $eigeneAssoc = eigeneAssoc($mysqli); - if ($eigeneAssoc['beschuetzerLetzteRundeBeschuetzt']==$id) - return false; - - $gameAssoc = gameAssoc($mysqli); - //Schreibe es auch ins playerlog, damit es der Spieler nachlesen kann - toPlayerLog($mysqli, "In Nacht ".$gameAssoc['nacht']." beschützen Sie ".getName($mysqli,$id).".",$eigeneID); - toGameLog($mysqli,"Der Beschützer/Die Beschützerin(".getName($mysqli,$eigeneID).") beschützt in Nacht ".$gameAssoc['nacht']." ".getName($mysqli,$id)."."); - - //Setze mich noch auf bereit ;) - setBereit($mysqli,$eigeneID,1); - $mysqli->Query("UPDATE $spielID"."_spieler SET beschuetzerLetzteRundeBeschuetzt = $id WHERE id = $eigeneID"); - return true; -} - -function parErmInitialisiere($mysqli) -{ - $spielID = $_COOKIE['SpielID']; - - echo "Möchten Sie Ihre Fähigkeit als Paranormaler Ermittler einsetzen?
"; - //Zeige eine Liste aller lebenden Spieler an - echo "'; - - echo ""; -} - -function parErmAusgewaehlt($mysqli, $id) -{ - $spielID = $_COOKIE['SpielID']; - $eigeneID = $_COOKIE['eigeneID']; - $id = (int)$id; - //schauen, ob es ein valider Spieler ist - $spielerRes = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE id = $id AND lebt = 1"); - if ($spielerRes->num_rows < 1) - return false; - //Überprüfe, ob ich noch einsetzen darf - $eigen = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE id = $eigeneID AND parErmEingesetzt = 0"); - if ($eigen->num_rows <= 0) - return false; - - //Finde die ids der beiden Nachbarn heraus ... - $alleRes = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE lebt = 1"); - $nachbar1 = -1; - $nachbar2 = -1; - $erster = -1; - $letzter = -1; - while ($temp = $alleRes->fetch_assoc()) - { - if ($erster == -1) - $erster = $temp['id']; - if ($temp['id']!=$id && $temp['id'] < $id) - $nachbar1 = $temp['id']; - if ($temp['id'] > $id && $nachbar2 == -1) - $nachbar2 = $temp['id']; - $letzter = $temp['id']; - } - if ($nachbar1 == -1) - { - //Wir waren der erste - $nachbar1 = $letzter; - } - if ($nachbar2 == -1) - { - //Wir waren der letzte - $nachbar2 = $erster; - } - $werwoelfe = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE (nachtIdentitaet = ". CHARWERWOLF ." OR nachtIdentitaet = ". CHARLYKANTROPH ." OR nachtIdentitaet = ". CHARURWOLF .") AND (ID = $nachbar1 OR ID = $nachbar2 OR ID = $id)"); - if ($werwoelfe->num_rows > 0) - { - //Es ist zumindest ein Werwolf darunter - toPlayerLog ($mysqli,"Sie beobachteten die Spieler ". getName($mysqli,$nachbar1) .", ". getName($mysqli,$id) ." und ".getName($mysqli,$nachbar2)." Es fällt Ihnen eine bedrohliche Aura auf, unter den dreien ist zumindest ein Werwolf.",$eigeneID); - toGameLog($mysqli,"Der Paranormale Ermittler beobachtete die Spieler ". getName($mysqli,$nachbar1) .", ". getName($mysqli,$id) ." und ".getName($mysqli,$nachbar2).". Er sieht, dass sich unter ihnen zumindest ein Werwolf befindet."); - echo ("Sie beobachteten die Spieler ". getName($mysqli,$nachbar1) .", ". getName($mysqli,$id) ." und ".getName($mysqli,$nachbar2)." Es fällt Ihnen eine bedrohliche Aura auf, unter den dreien ist zumindest ein Werwolf.
"); - } - else - { - toPlayerLog ($mysqli,"Sie beobachteten die Spieler ". getName($mysqli,$nachbar1) .", ". getName($mysqli,$id) ." und ".getName($mysqli,$nachbar2).". Es fällt Ihnen nichts Besonderes auf, unter den dreien befindet sich kein Werwolf.",$eigeneID); - toGameLog($mysqli,"Der Paranormale Ermittler beobachtete die Spieler ". getName($mysqli,$nachbar1) .", ". getName($mysqli,$id) ." und ".getName($mysqli,$nachbar2).". Er sieht, dass sich unter ihnen kein Werwolf befindet."); - echo ("Sie beobachteten die Spieler ". getName($mysqli,$nachbar1) .", ". getName($mysqli,$id) ." und ".getName($mysqli,$nachbar2).". Es fällt Ihnen nichts Besonderes auf, unter den dreien befindet sich kein Werwolf.
"); - } - - $mysqli->Query("UPDATE $spielID"."_spieler SET parErmEingesetzt = 1 WHERE id = $eigeneID"); - return true; -} - -function hexeInitialisieren($mysqli) -{ - $spielID = $_COOKIE['SpielID']; - $eigeneID = $_COOKIE['eigeneID']; - $eigeneAss = eigeneAssoc($mysqli); - $heiltraenke = $eigeneAss['hexeHeiltraenke']; - $todestraenke = $eigeneAss['hexeTodestraenke']; - - echo "'; - echo ""; -} - -function jaegerInitialisiere($mysqli) -{ - $spielID = $_COOKIE['SpielID']; - $eigeneID = $_COOKIE['eigeneID']; - - //Zeige eine Liste aller noch lebenden an, die der Jäger töten kann - echo "'; -} - -function buergermeisterInitialisiere($mysqli) -{ - //Der Bürgermeister wurde getötet und darf das Amt an seinen Nachfolger weitergeben... - $spielID = $_COOKIE['SpielID']; - $eigeneID = $_COOKIE['eigeneID']; - - //Zeige eine Liste aller noch Lebenden an, an die der Bürgermeister das Amt weitergeben kann - echo "'; -} - -function phaseBeendenWennAlleBereit($phase,$mysqli) -{ - //Springt zur nächsten Phase, wenn alle bereit sind - $spielID = $_COOKIE['SpielID']; - //Schauen wir zuerst mal, ob schon alle bereit sind ... - $nichtBereitResult = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE bereit = 0 AND lebt = 1"); - if ($nichtBereitResult->num_rows > 0) - { - return false; - } - //Es sind wohl schon alle bereit - if ($phase == PHASENACHT1) - { - $mysqli->Query("UPDATE $spielID"."_game SET spielphase = ".PHASENACHT2); - //alle müssen reloaden - $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1, bereit = 0"); - phaseInitialisieren(PHASENACHT2,$mysqli); - } - elseif ($phase == PHASENACHT2) - { - $mysqli->Query("UPDATE $spielID"."_game SET spielphase = ".PHASENACHT3); - //alle müssen reloaden - $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1, bereit = 0"); - phaseInitialisieren(PHASENACHT3,$mysqli); - } - elseif ($phase == PHASENACHT3) - { - //springen wir zu phase 5, wenn es eine Hexe gibt - $gameResult = $mysqli->Query("SELECT * FROM $spielID"."_game"); - $gameResAssoc = $gameResult->fetch_assoc(); - $hexenzahl = $gameResAssoc['hexenzahl']; - //Setze Phase auf 5 - $mysqli->Query("UPDATE $spielID"."_game SET spielphase = ".PHASENACHT4); - //alle müssen reloaden - $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1, bereit = 0"); - phaseInitialisieren(PHASENACHT4,$mysqli); - } - elseif ($phase == PHASENACHT4) - { - //Wir überspringen Phase 6 und kommen gleich zu Phase 7 - $mysqli->Query("UPDATE $spielID"."_game SET spielphase = ".PHASENACHTENDE); - //alle müssen reloaden - $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1, bereit = 0"); - phaseInitialisieren(PHASENACHTENDE,$mysqli); - } - elseif ($phase == PHASETOTEBEKANNTGEBEN) - { - //Wenn es keinen Bürgermeister gibt, zur Wahl des Bürgermeisters übergehen - $bres = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE buergermeister = 1 AND lebt = 1"); - if ($bres->num_rows > 0) - { - //Es gibt bereits einen Bürgermeister, wir können zu Phase 9 übergehen - $mysqli->Query("UPDATE $spielID"."_game SET spielphase = ".PHASEDISKUSSION); - //alle müssen reloaden - $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1, bereit = 0"); - phaseInitialisieren(PHASEDISKUSSION,$mysqli); - } - else - { - //Es gibt keinen Bürgermeister --> Bürgermeisterwahl = Phase 8 - $mysqli->Query("UPDATE $spielID"."_game SET spielphase = ".PHASEBUERGERMEISTERWAHL); - //alle müssen reloaden - $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1, bereit = 0"); - phaseInitialisieren(PHASEBUERGERMEISTERWAHL,$mysqli); - } - } - elseif ($phase == PHASEBUERGERMEISTERWAHL) - { - $mysqli->Query("UPDATE $spielID"."_game SET spielphase = ".PHASEDISKUSSION); - //alle müssen reloaden - $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1, bereit = 0"); - phaseInitialisieren(PHASEDISKUSSION,$mysqli); - } - elseif ($phase == PHASEDISKUSSION) - { - //Gehe zur Anklage über - $mysqli->Query("UPDATE $spielID"."_game SET spielphase = ".PHASEANKLAGEN); - //alle müssen reloaden - $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1, bereit = 0"); - phaseInitialisieren(PHASEANKLAGEN,$mysqli); - } - elseif ($phase == PHASEANKLAGEN) - { - //Gehe zur Abstimmung über - $mysqli->Query("UPDATE $spielID"."_game SET spielphase = ".PHASEABSTIMMUNG); - //alle müssen reloaden - $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1, bereit = 0"); - phaseInitialisieren(PHASEABSTIMMUNG,$mysqli); - } -} - -function endeDerAbstimmungStichwahl($id1, $id2, $mysqli) -{ - //Stichwahl zwischen id1 und id2 - $spielID = $_COOKIE['SpielID']; - $id1 = (int)$id1; - $id2 = (int)$id2; - //Diesmal gehe ich nicht über phaseBeendenWennAlleBereit... - $mysqli->Query("UPDATE $spielID"."_spieler SET angeklagtVon = -1"); - $mysqli->Query("UPDATE $spielID"."_spieler SET angeklagtVon = 0 WHERE id = $id1"); - $mysqli->Query("UPDATE $spielID"."_spieler SET angeklagtVon = 0 WHERE id = $id2"); - //Gehe zur Stichwahl über = Phase 12 - $mysqli->Query("UPDATE $spielID"."_game SET spielphase = ".PHASESTICHWAHL); - //alle müssen reloaden - $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1, bereit = 0"); - phaseInitialisieren(PHASESTICHWAHL,$mysqli); -} - -function endeDerStichwahl($id, $mysqli) -{ - $spielID = $_COOKIE['SpielID']; - //Stichwahl ist beendet - if ($id > -1) - { - toeteSpieler($mysqli,$id); - } - - if (!checkeSiegbedingungen($mysqli)) - { - //Gehe wieder zu Beginn der Nacht -> PHASENACHTBEGINN - $mysqli->Query("UPDATE $spielID"."_game SET spielphase = ".PHASENACHTBEGINN); - //alle müssen reloaden - $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1, bereit = 0"); - - //Zähle einen Tag dazu - $gameAssoc = gameAssoc($mysqli); - $nacht = $gameAssoc['nacht']; - $nacht +=1; - $mysqli->Query("UPDATE $spielID"."_game SET nacht = $nacht"); - phaseInitialisieren(PHASENACHTBEGINN,$mysqli); - } -} - -function endeDerAbstimmungEinfacheMehrheit($id, $mysqli) -{ - $spielID = $_COOKIE['SpielID']; - //Ein Spieler mit der id $id wurde bei der Abstimmung des Dorfes im ersten Wahlgang für schuldig befunden. - if ($id >-1) - { - toeteSpieler($mysqli,$id); - } - if (!checkeSiegbedingungen($mysqli)) - { - //Gehe wieder zu Beginn der Nacht - $mysqli->Query("UPDATE $spielID"."_game SET spielphase = ".PHASENACHTBEGINN); - //alle müssen reloaden - $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1, bereit = 0"); - - //Zähle einen Tag dazu - $gameAssoc = gameAssoc($mysqli); - $nacht = $gameAssoc['nacht']; - $nacht +=1; - $mysqli->Query("UPDATE $spielID"."_game SET nacht = $nacht"); - phaseInitialisieren(PHASENACHTBEGINN,$mysqli); - } -} - -function writeGameToLog($mysqli) -{ - $spielID = $_COOKIE['SpielID']; - $fileName = "log/Werwolf_log_".date("Y_m").".log"; - $myfile = fopen($fileName, "a"); - fwrite($myfile,"\n--- SPIEL BEENDET --- \n"); - fwrite($myfile,"SpielID: $spielID \n"); - fwrite($myfile,"SpielEnde: ".date("d.m.Y, H:i:s")."\n"); - //Alle Spieler hineinschreiben: - fwrite($myfile,"Spieler:\n"); - $playerQ = $mysqli->Query("SELECT * FROM $spielID"."_spieler"); - while ($temp = $playerQ->fetch_assoc()) - { - fwrite($myfile,$temp['name']."\n"); - } - fwrite($myfile,"Spielverlauf:\n"); - $gameAssoc = gameAssoc($mysqli); - $mitUmbruch = str_replace("Verhalten Sie sich ruhig und stören Sie nicht das Spiel der anderen. Verraten Sie keine Informationen, damit die anderen Spieler ihr Spielerlebnis genießen können.
"; - echo ""; //Auch als Toter will ich eine Liste haben :) - echo ""; - echo " - - Query("UPDATE $spielID"."_spieler SET lebt = 0 WHERE id = $spielerID"); - //Überprüfe, ob sonst schon alle bereit sind - if ($g = gameAssoc($mysqli)) - { - phaseBeendenWennAlleBereit($g['spielphase'],$mysqli); - } -} - -function alleReloadAusser($spielerID,$mysqli) -{ - $spielID = $_COOKIE['SpielID']; - $spielerID = (int)$spielerID; - $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1"); - $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 0 WHERE id = $spielerID"); -} - -function setReloadZero($spielerID, $mysqli) -{ - $spielID = $_COOKIE['SpielID']; - $spielerID = (int)$spielerID; - $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 0 WHERE id = $spielerID"); -} - -function setBereit($mysqli,$spielerID,$bereit) -{ - $spielID = $_COOKIE['SpielID']; - $spielerID = (int)$spielerID; - $bereit = (int)$bereit; - $mysqli->Query("UPDATE $spielID"."_spieler SET bereit = $bereit WHERE id = $spielerID"); -} - -function gameAssoc($mysqli) -{ - $spielID = $_COOKIE['SpielID']; - if ($gameRes = $mysqli->Query("SELECT * FROM $spielID"."_game")) - { - $gameA = $gameRes->fetch_assoc(); - return $gameA; - } - return false; -} - -function eigeneAssoc($mysqli) -{ - $spielID = $_COOKIE['SpielID']; - $eigeneID = $_COOKIE['eigeneID']; - $eigeneRes = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE id = $eigeneID"); - $eigeneA = $eigeneRes->fetch_assoc(); - return $eigeneA; -} - -function getName($mysqli, $spielerID) -{ - //Gibt den Namen des Spielers mit der $spielerID zurück - $spielID = $_COOKIE['SpielID']; - $spielerID = (int)$spielerID; - if ($res = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE id = $spielerID")) - { - $temp = $res->fetch_assoc(); - return $temp['name']; - } - return "Unknown"; -} - -function getGesinnung($identitaet) -{ - if ($identitaet == CHARWERWOLF || $identitaet == CHARURWOLF) - return "Werwölfe"; - else - return "Dorfbewohner"; -} - -function nachtidentitaetAlsString($identitaet) -{ - switch($identitaet) - { - case CHARKEIN: - return "keine"; - break; - case CHARDORFBEWOHNER: - return "Dorfbewohner"; - break; - case CHARWERWOLF: - return "Werwolf"; - break; - case CHARSEHER: - return "Seher/in"; - break; - case CHARHEXE: - return "Hexe/r"; - break; - case CHARJAEGER: - return "Jäger/in"; - break; - case CHARAMOR: - return "Amor"; - break; - case CHARBESCHUETZER: - return "Beschützer/in"; - break; - case CHARPARERM: - return "Paranormaler Ermittler"; - break; - case CHARLYKANTROPH: - return "Lykantroph/in"; - break; - case CHARSPION: - return "Spion/in"; - break; - case CHARMORDLUSTIGER: - return "Mordlustige(r)"; - break; - case CHARPAZIFIST: - return "Pazifist/in"; - break; - case CHARALTERMANN: - return "Die/Der Alte"; - break; - case CHARURWOLF: - return "Urwolf/Urwölfin"; - break; - default: - return ""; - break; - } -} - -function nachtidentitaetKurzerklaerung($identitaet) -{ - switch($identitaet) - { - case CHARKEIN: - return "keine"; - break; - case CHARDORFBEWOHNER: - //Dorfbewohner - return "Beunruhigt durch das Auftauchen von Werwölfen, versuchen die Dorfbewohner wieder Frieden in das Dorf zu bringen, indem sie alle Werwölfe ausforschen und töten wollen."; - break; - case CHARWERWOLF: - //Werwolf - return "Die Werwölfe töten jede Nacht einen Dorfbewohner, verhalten sich aber am Tag, als gehörten sie zu ihnen. Achtung: Die Dorfbewohner wollen den Werwölfen auf die Schliche kommen ..."; - break; - case CHARSEHER: - //Seher/in - return "Sie können jede Nacht die Nachtidentität eines Spielers sehen. Alternative: Sie sehen, welcher Gruppe derjenige angehört"; - break; - case CHARHEXE: - //Hexe - return "Sie können ein Mal im Spiel jemanden mit Ihrem Todestrank töten, ein Mal im Spiel das Opfer der Werwölfe retten. Entscheiden Sie weise, viel hängt davon ab ..."; - break; - case CHARJAEGER: - //Jäger/in - return "Wenn Sie getötet werden, können Sie nach einem letzten Griff zu Ihrer Flinte einen anderen Spieler mit in den Tod reißen"; - break; - case CHARAMOR: - //Amor - return "Zu Beginn des Spieles dürfen Sie zwei Personen bestimmen, die sich verlieben. Stirbt die eine Person, begeht die andere aus Kummer Selbstmord"; - break; - case CHARBESCHUETZER: - //Leibwächter/Beschützer - return "Sie können jede Nacht einen Spieler beschützen, der in dieser Nacht nicht sterben kann (Sie können sich auch selbst wählen). Sie dürfen nicht zwei Nächte hintereinander dieselbe Person schützen."; - break; - case CHARPARERM: - return "Sie können einmal im Spiel einen Spieler bestimmen und erfahren, ob sich unter diesem und den beiden Nachbarn zumindest ein Werwolf (oder Urwolf) befindet."; - break; - case CHARLYKANTROPH: - return "Sie sehen aus wie ein Werwolf, sind aber keiner. Sie spielen also für die Dorfbewohner"; - break; - case CHARSPION: - //Spion - return "Sie können jede Nacht einen Spieler auswählen und eine Identität, die dieser Spieler haben könnte. Sie erfahren, ob dieser - Spieler tatsächlich diese Identität besitzt"; - break; - case CHARMORDLUSTIGER: - return "Sie wollen Blut sehen und argumentieren daher immer für das Töten eines Spielers"; - break; - case CHARPAZIFIST: - return "Sie wollen, dass alle möglichst friedlich zusammenleben und argumentieren daher immer gegen das Töten eines Spielers"; - break; - case CHARALTERMANN: - return "Sie sterben in der x. Nacht, wobei x die Anzahl der lebenden Werwölfe + 1 ist. Es kann also sein, dass sie früher sterben als gedacht ..."; - break; - case CHARURWOLF: - return "Sie gehören zu den Werwölfen und gewinnen bzw. verlieren mit ihnen. Einmal pro Spiel können Sie einen Spieler zum Werwolf machen, der dann alle bisherigen Fähigkeiten verliert ..."; - break; - } -} - -function toGameLog($mysqli,$logeintrag) -{ - //Fügt dem gamelog den $logeintrag hinzu - $spielID = $_COOKIE['SpielID']; - if ($gameAssoc = gameAssoc($mysqli)) - { - $aktLog = $gameAssoc['log']; - $neuLog = $aktLog.date("H:i:s").": ".$logeintrag."Sie befinden sich momentan in keinem Spiel: Sie können entweder einem bereits erstellten Spiel beitreten oder ein neues Spiel erstellen!
+Eine oder mehrere Countdown-Einstellungen sind ungültig
"; + $werwolftimer1 = 60; + $werwolfzusatz1 = 4; + $werwolftimer2 = 50; + $werwolfzusatz2 = 3; + $dorftimer = 550; + $dorfzusatz = 10; + $dorfstichwahltimer = 200; + $dorfstichwahlzusatz = 5; + } + $mysqli->Query("UPDATE $spielID"."_game SET buergermeisterWeitergeben = $buergermeisterWeitergeben, + charaktereAufdecken = $charaktereAufdecken, + seherSiehtIdentitaet = $seherSiehtIdentitaet, + werwolfzahl = $werwolfzahl, + hexenzahl = $hexenzahl, + jaegerzahl = $jaegerzahl, + seherzahl = $seherzahl, + amorzahl = $amorzahl, + beschuetzerzahl = $beschuetzerzahl, + parErmZahl = $parErmZahl, + lykantrophenzahl = $lykantrophenzahl, + spionezahl = $spionezahl, + idiotenzahl = $idiotenzahl, + pazifistenzahl = $pazifistenzahl, + altenzahl = $altenzahl, + urwolfzahl = $urwolfzahl, + zufaelligeAuswahl = $zufaelligauswaehlen, + zufaelligeAuswahlBonus = $zufaelligeAuswahlBonus, + werwolftimer1 = $werwolftimer1, + werwolfzusatz1 = $werwolfzusatz1, + werwolftimer2 = $werwolftimer2, + werwolfzusatz2 = $werwolfzusatz2, + dorftimer = $dorftimer, + dorfzusatz = $dorfzusatz, + dorfstichwahltimer = $dorfstichwahltimer, + dorfstichwahlzusatz = $dorfstichwahlzusatz, + inaktivzeit = $inaktivzeit, + inaktivzeitzusatz = $inaktivzeitzusatz"); + //Fertig upgedated ;) + } +} + +function spielInitialisieren($mysqli,$spielerzahl) +{ + $spielID = $_COOKIE['SpielID']; + //Zuerst überprüfen, ob mindestens 2 Spieler mitspielen + if ($spielerzahl < 2) + { + echo "Zu wenig Spieler, um ein Spiel zu starten!
"; + return false; + } + $gameResult = $mysqli->Query("SELECT * FROM $spielID"."_game"); + $gameResAssoc = $gameResult->fetch_assoc(); + $werwolfzahl = $gameResAssoc['werwolfzahl']; + $hexenzahl = $gameResAssoc['hexenzahl']; + $jaegerzahl = $gameResAssoc['jaegerzahl']; + $seherzahl = $gameResAssoc['seherzahl']; + $amorzahl = $gameResAssoc['amorzahl']; + $beschuetzerzahl = $gameResAssoc['beschuetzerzahl']; + $parErmZahl = $gameResAssoc['parErmZahl']; + $lykantrophenzahl = $gameResAssoc['lykantrophenzahl']; + $spionezahl = $gameResAssoc['spionezahl']; + $idiotenzahl = $gameResAssoc['idiotenzahl']; + $pazifistenzahl = $gameResAssoc['pazifistenzahl']; + $altenzahl = $gameResAssoc['altenzahl']; + $urwolfzahl = $gameResAssoc['urwolfzahl']; + $zufaelligeAuswahl = $gameResAssoc['zufaelligeAuswahl']; + $zufaelligeAuswahlBonus = $gameResAssoc['zufaelligeAuswahlBonus']; + + //Zähle alle Charaktere zusammen und schaue, ob es mehr als die Spieleranzahl sind + $besondereCharaktere = $werwolfzahl + $hexenzahl + $jaegerzahl + $seherzahl + $amorzahl + $beschuetzerzahl + $parErmZahl + + $lykantrophenzahl + $spionezahl + $idiotenzahl + $pazifistenzahl + $altenzahl + $urwolfzahl; + if ($besondereCharaktere > $spielerzahl && $zufaelligeAuswahl == 0) + { + echo "Nicht genug Spieler für Ihre Spielkonfiguration
"; + return false; + } + + //Schau, ob es zumindest einen "bösen" Charakter gibt... + $boeseCharaktere = $werwolfzahl + $urwolfzahl; + if ($boeseCharaktere < 1 && $zufaelligeAuswahl == 0) + { + echo "Ein Spiel mit dieser Konfiguration ist nicht möglich. Haben Sie mindestens einen Werwolf ausgewählt?
"; + return false; + } + + //Schau, dass es max einen Amor gibt + if ($amorzahl < 0 || $amorzahl > 1) + { + echo "Ein Spiel mit dieser Anzahl an Amor(s) ist nicht möglich ... Nur 1 oder 0 auswählen
"; + return false; + } + + //Die basic-Tests sind mal bestanden: Setzen wir den Spielmodus auf 1: Spielsetup + $mysqli->Query("UPDATE $spielID"."_game SET spielphase = ".PHASESPIELSETUP); + + //Jetzt muss jeder bestätigen, dass er dabei ist. + //Dazu setzen wir mal alle bereit auf 0, außer den Spielleiter + $eigeneID = $_COOKIE['eigeneID']; + $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1, bereit = 0"); + $mysqli->Query("UPDATE $spielID"."_spieler SET bereit = 1 WHERE id = $eigeneID"); +} + +function setSpielerDefault($mysqli) +{ + //Setzt die Werte aus $spielID_spieler auf die Defaultwerte zurück + $spielID = $_COOKIE['SpielID']; + $mysqli->query("UPDATE $spielID"."_spieler SET + lebt = 0, + wahlAuf = -1, + angeklagtVon = -1, + nachtIdentitaet = 0, + buergermeister = 0, + hexeHeiltraenke = 0, + hexeTodestraenke = 0, + hexenOpfer = -1, + hexeHeilt = 0, + beschuetzerLetzteRundeBeschuetzt = -1, + verliebtMit = -1, + jaegerDarfSchiessen = 0, + parErmEingesetzt = 0, + buergermeisterDarfWeitergeben = 0; + "); +} + +function spielStarten($mysqli) +{ + $spielID = $_COOKIE['SpielID']; + + //Alle löschen, die nicht bereit sind + $mysqli->Query("DELETE FROM $spielID"."_spieler WHERE bereit = 0"); + + setSpielerDefault($mysqli); + + //aktualisiere Spielerzahl + $spielerQuery = $mysqli->Query("SELECT * FROM $spielID"."_spieler"); + $spielerzahl = $spielerQuery->num_rows; + + //Überprüfe nocheinmal die Bedingungen + $gameResult = $mysqli->Query("SELECT * FROM $spielID"."_game"); + $gameResAssoc = $gameResult->fetch_assoc(); + $werwolfzahl = $gameResAssoc['werwolfzahl']; + $hexenzahl = $gameResAssoc['hexenzahl']; + $jaegerzahl = $gameResAssoc['jaegerzahl']; + $seherzahl = $gameResAssoc['seherzahl']; + $amorzahl = $gameResAssoc['amorzahl']; + $beschuetzerzahl = $gameResAssoc['beschuetzerzahl']; + $parErmZahl = $gameResAssoc['parErmZahl']; + $lykantrophenzahl = $gameResAssoc['lykantrophenzahl']; + $spionezahl = $gameResAssoc['spionezahl']; + $idiotenzahl = $gameResAssoc['idiotenzahl']; + $pazifistenzahl = $gameResAssoc['pazifistenzahl']; + $altenzahl = $gameResAssoc['altenzahl']; + $urwolfzahl = $gameResAssoc['urwolfzahl']; + $zufaelligeAuswahl = $gameResAssoc['zufaelligeAuswahl']; + $zufaelligeAuswahlBonus = $gameResAssoc['zufaelligeAuswahlBonus']; + + //Zähle alle Charaktere zusammen und schaue, ob es mehr als die Spieleranzahl sind + $besondereCharaktere = $werwolfzahl + $hexenzahl + $jaegerzahl + $seherzahl + $amorzahl + $beschuetzerzahl + $parErmZahl + + $lykantrophenzahl + $spionezahl + $idiotenzahl + $pazifistenzahl + $altenzahl + $urwolfzahl; + if (($besondereCharaktere > $spielerzahl && $zufaelligeAuswahl == 0)|| $spielerzahl < 2) + { + echo "Nicht genug Spieler für Ihre Spielkonfiguration
"; + //Setze die Spielphase wieder auf 0 + $mysqli->Query("UPDATE $spielID"."_game SET spielphase = 0"); + $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1"); + return false; + } + + //Schau, ob es zumindest einen "bösen" Charakter gibt... + $boeseCharaktere = $werwolfzahl + $urwolfzahl; + if ($boeseCharaktere < 1 && $zufaelligeAuswahl == 0) + { + echo "Ein Spiel mit dieser Konfiguration ist nicht möglich. Haben Sie mindestens einen Werwolf ausgewählt?
"; + //Setze die Spielphase wieder auf 0 + $mysqli->Query("UPDATE $spielID"."_game SET spielphase = 0"); + $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1"); + return false; + } + + //Setze alle auf lebend, und gib allen die Identität 0 = keine + //Außerdem lösche das Playerlog + $mysqli->Query("UPDATE $spielID"."_spieler SET lebt = 1, nachtIdentitaet = ". CHARKEIN .", playerlog = ''"); + + //Ändere noch einige Werte im _game + //Lösche das Log, und setze die Nachtanzahl auf 1 + $mysqli->Query("UPDATE $spielID"."_game SET log = '', nacht = 1"); + + if ($zufaelligeAuswahl == 1) + { + $werwolfzahl = 0; + if ($zufaelligeAuswahlBonus < -15 || $zufaelligeAuswahlBonus > 15) + { + echo "Der Spielbonus ist zu hoch oder zu niedrig
"; + //Setze die Spielphase wieder auf 0 + $mysqli->Query("UPDATE $spielID"."_game SET spielphase = 0"); + $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1"); + return false; + } + + toGameLog($mysqli,"Ein neues Spiel wird gestartet mit $spielerzahl Spielern. Die Charaktere werden zufällig verteilt."); + $spielinfo = "Maximal im Spiel: Werwölfe: $spielerzahl, Hexen: $hexenzahl, Seher: $seherzahl, Jäger: $jaegerzahl, Amor: $amorzahl, + Beschützer: $beschuetzerzahl, Paranormaler Ermittler: $parErmZahl, Lykantrophen: $lykantrophenzahl, + Spione: $spionezahl, Mordlustige: $idiotenzahl, Pazifisten: $pazifistenzahl, Die Alten: $altenzahl, Urwölfe: $urwolfzahl"; + toGameLog($mysqli,$spielinfo); + toAllPlayerLog($mysqli,"Ein neues Spiel wird gestartet mit $spielerzahl Spielern. Die Charaktere werden zufällig verteilt."); + toAllPlayerLog($mysqli,$spielinfo); + //Starte eine zufällige Verteilung der Charaktere + + //Das sind die Gewichtungen, von allen Charakteren werden die Zahlen zusammengezählt, ein positiver Wert + // bedeutet einen Vorteil für die Dorfbewohner, negativer Wert Vorteil für die Werwölfe + $werwolfbonus = -6; + $hexenbonus = +4; + $jaegerbonus = +3; + $seherbonus = +7; + $amorbonus = -3; + $beschuetzerbonus =+3; + $parErmBonus =+3; + $lykantrophenbonus = -1; + $spionebonus = +6; + $idiotenbonus = +1; + $pazifistenbonus = -1; + $altenbonus = 0; + $urwolfbonus = -8; + $dorfbewohnerbonus = +1; + for ($i=0;$i<=1000;$i++) + { + //1000 Versuche + $werwolfzahlN = rand(1,$spielerzahl/3); + $hexenzahlN = rand(0,$hexenzahl); + $jaegerzahlN = rand(0,$jaegerzahl); + $seherzahlN = rand(0,$seherzahl); + $amorzahlN = rand(0,$amorzahl); + $beschuetzerzahlN = rand(0,$beschuetzerzahl); + $parErmZahlN = rand(0,$parErmZahl); + $lykantrophenzahlN = rand(0,$lykantrophenzahl); + $spionezahlN = rand(0,$spionezahl); + $idiotenzahlN = rand(0,$idiotenzahl); + $pazifistenzahlN = rand(0,$pazifistenzahl); + $altenzahlN = rand(0,$altenzahl); + $urwolfzahlN = rand(0, $urwolfzahl); + + $dorfbewohnerzahlN = $spielerzahl - $werwolfzahlN - $hexenzahlN - $jaegerzahlN - $seherzahlN + - $amorzahlN - $beschuetzerzahlN - $parErmZahlN - $lykantrophenzahlN - $spionezahlN + - $idiotenzahlN - $pazifistenzahlN - $altenzahlN - $urwolfzahlN; + //Jetzt überprüfe, ob die Aufteilung "fair ist" + $aktBonus = $werwolfzahlN * $werwolfbonus + + $hexenzahlN * $hexenbonus + + $jaegerzahlN * $jaegerbonus + + $seherzahlN * $seherbonus + + $amorzahlN * $amorbonus + + $beschuetzerzahlN * $beschuetzerbonus + + $parErmZahlN * $parErmBonus + + $lykantrophenzahlN * $lykantrophenbonus + + $spionezahlN * $spionebonus + + $idiotenzahlN * $idiotenbonus + + $pazifistenzahlN * $pazifistenbonus + + $altenzahlN * $altenbonus + + $urwolfzahlN * $urwolfbonus + + $dorfbewohnerzahlN * $dorfbewohnerbonus; + if ($aktBonus + 1 <= $zufaelligeAuswahlBonus + 2 && $aktBonus + 1 >= $zufaelligeAuswahlBonus && $dorfbewohnerzahlN >= 0) + { + //Bonus ist um max. 1 abweichend --> succes! + toGameLog($mysqli,"Zufällige Verteilung der Charaktere vorgenommen mit Bonus ". $aktBonus . "."); + $werwolfzahl = $werwolfzahlN; + $hexenzahl = $hexenzahlN; + $jaegerzahl = $jaegerzahlN; + $seherzahl = $seherzahlN; + $amorzahl = $amorzahlN; + $beschuetzerzahl = $beschuetzerzahlN; + $parErmZahl = $parErmZahlN; + $lykantrophenzahl = $lykantrophenzahlN; + $spionezahl = $spionezahlN; + $idiotenzahl = $idiotenzahlN; + $pazifistenzahl = $pazifistenzahlN; + $altenzahl = $altenzahlN; + $urwolfzahl = $urwolfzahlN; + break; + } + } + if ($werwolfzahl == 0) + { + //Verteilung fehlgeschlagen! + //Notverteilung + toGameLog($mysqli,"Zufällige Verteilung der Charaktere fehlgeschlagen. Teile nur Werwölfe aus."); + $werwolfzahl = round($spielerzahl/6)+1; + $hexenzahl = 0; + $jaegerzahl = 0; + $seherzahl = 0; + $amorzahl = 0; + $beschuetzerzahl = 0; + $parErmZahl = 0; + $lykantrophenzahl = 0; + $spionezahl = 0; + $idiotenzahl = 0; + $pazifistenzahl = 0; + $altenzahl = 0; + $urwolfzahl = 0; + } + $spielinfo = "Im Spiel befinden sich: Werwölfe: $werwolfzahl, Hexen: $hexenzahl, Seher: $seherzahl, Jäger: $jaegerzahl, Amor: $amorzahl, + Beschützer: $beschuetzerzahl, Paranormaler Ermittler: $parErmZahl, Lykantrophen: $lykantrophenzahl, + Spione: $spionezahl, Mordlustige: $idiotenzahl, Pazifisten: $pazifistenzahl, Die Alten: $altenzahl, Urwölfe: $urwolfzahl"; + toGameLog($mysqli,$spielinfo); + } + else + { + //Logge den Spielstart + toGameLog($mysqli,"Ein neues Spiel wird gestartet mit $spielerzahl Spielern."); + $spielinfo = "Werwölfe: $werwolfzahl, Hexen: $hexenzahl, Seher: $seherzahl, Jäger: $jaegerzahl, Amor: $amorzahl, + Beschützer: $beschuetzerzahl, Paranormaler Ermittler: $parErmZahl, Lykantrophen: $lykantrophenzahl, + Spione: $spionezahl, Mordlustige: $idiotenzahl, Pazifisten: $pazifistenzahl, Die Alten: $altenzahl, Urwölfe: $urwolfzahl"; + toGameLog($mysqli,$spielinfo); + toAllPlayerLog($mysqli,"Ein neues Spiel wird gestartet mit $spielerzahl Spielern."); + toAllPlayerLog($mysqli,$spielinfo); + } + + //Teile die Charaktere aus! + weiseCharakterZu($werwolfzahl,CHARWERWOLF,$mysqli); + weiseCharakterZu($seherzahl,CHARSEHER,$mysqli); + weiseCharakterZu($hexenzahl,CHARHEXE,$mysqli); + weiseCharakterZu($jaegerzahl,CHARJAEGER,$mysqli); + weiseCharakterZu($amorzahl,CHARAMOR,$mysqli); + weiseCharakterZu($beschuetzerzahl,CHARBESCHUETZER,$mysqli); + weiseCharakterZu($parErmZahl,CHARPARERM,$mysqli); + weiseCharakterZu($lykantrophenzahl,CHARLYKANTROPH,$mysqli); + weiseCharakterZu($spionezahl,CHARSPION,$mysqli); + weiseCharakterZu($idiotenzahl,CHARMORDLUSTIGER,$mysqli); + weiseCharakterZu($pazifistenzahl,CHARPAZIFIST,$mysqli); + weiseCharakterZu($altenzahl,CHARALTERMANN,$mysqli); + weiseCharakterZu($urwolfzahl, CHARURWOLF, $mysqli); + + //setze verschiedene Startwerte: + //Bei allen Hexen setze die Heiltränke und Todestränke auf 1 + //Alle Spieler, die keinen Charakter haben, erhalten Dorfbewohner + $res = $mysqli->Query("SELECT * FROM $spielID"."_spieler"); + while ($temp = $res->fetch_assoc()) + { + $i = (int)$temp['id']; + if ($temp['nachtIdentitaet']==CHARHEXE) + { + //4 = Hexe + $mysqli->Query("UPDATE $spielID"."_spieler SET hexeHeiltraenke = 1, hexeTodestraenke = 1 WHERE id = $i"); + } + elseif ($temp['nachtIdentitaet']==CHARBESCHUETZER) + { + //Beschützer + $mysqli->Query("UPDATE $spielID"."_spieler SET beschuetzerLetzteRundeBeschuetzt = -1 WHERE id = $i"); + } + elseif ($temp['nachtIdentitaet']==CHARPARERM) + { + $mysqli->Query("UPDATE $spielID"."_spieler SET parErmEingesetzt = 0 WHERE id = $i"); + } + elseif ($temp['nachtIdentitaet']==CHARKEIN) + { + //Weise dem Spieler Dorfbewohner zu! + $mysqli->Query("UPDATE $spielID"."_spieler SET nachtIdentitaet = ". CHARDORFBEWOHNER ." WHERE id = $i"); + } + elseif ($temp['nachtIdentitaet'] == CHARURWOLF) + { + $mysqli->Query("UPDATE $spielID"."_spieler SET urwolf_anzahl_faehigkeiten = 1 WHERE id = $i"); + } + } + $neuePhase = PHASENACHT3; + if ($amorzahl >= 1) + { + $neuePhase = PHASENACHT1; + } + else + { + //Wenn es keinen Amor gibt, Spielphase "Nacht3" + $neuePhase = PHASENACHT3; + } + $mysqli->Query("UPDATE $spielID"."_game SET spielphase = $neuePhase"); + $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1, bereit = 0"); + phaseInitialisieren($neuePhase,$mysqli); +} + +function weiseCharakterZu($anzahlSpieler,$identitaet,$mysqli) +{ + //anzahlSpieler: Wieviele Spieler diesen Charakter erhalten sollen + //Wichtig ist nicht die Spielerzahl, sondern die höchste ID + $spielID = $_COOKIE['SpielID']; + + $freieSpieler = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE nachtIdentitaet = ". CHARKEIN ." ORDER BY RAND()"); + for ($i = 0; $i < $anzahlSpieler; $i++) + { + $temp = $freieSpieler->fetch_assoc(); + //Diesem Spieler die Identität zuweisen + $id = (int)$temp['id']; + //Mache ihn zu dem Charakter + $identitaet = (int)$identitaet; + $mysqli->Query("UPDATE $spielID"."_spieler SET nachtIdentitaet = $identitaet WHERE id = $id"); + //echo "Zwei verschiedene Spieler auswählen ...
"; + return false; + } + if ($wahl1 < 0 || $wahl2 < 0) + return false; + + //Die Wahl scheint gültig zu sein--> eintragen + $mysqli->Query("UPDATE $spielID"."_spieler SET verliebtMit = $wahl1 WHERE id = $wahl2"); + $mysqli->Query("UPDATE $spielID"."_spieler SET verliebtMit = $wahl2 WHERE id = $wahl1"); + toPlayerLog($mysqli,"Sie haben ".getName($mysqli,$wahl1)." mit ".getName($mysqli,$wahl2)." verliebt.",$eigeneID); + toGameLog($mysqli,"Amor hat ".getName($mysqli,$wahl1)." mit ".getName($mysqli,$wahl2)." verliebt."); + toPlayerLog($mysqli,"Amor hat Sie mit ".getName($mysqli,$wahl1). " verliebt.",$wahl2); + toPlayerLog($mysqli,"Amor hat Sie mit ".getName($mysqli,$wahl2). " verliebt.",$wahl1); + return true; +} + +function spionInitialisiere($mysqli) +{ + $spielID = $_COOKIE['SpielID']; + + //Zeige eine Liste aller lebenden Spieler an + echo "'; +} + +function spionSehe($mysqli, $id, $identitaet) +{ + $spielID = $_COOKIE['SpielID']; + $eigeneID = $_COOKIE['eigeneID']; + $id = (int)$id; + //schauen, ob es ein valider Spieler ist + $spielerRes = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE id = $id AND lebt = 1"); + if ($spielerRes->num_rows < 1) + return false; + $spielerAssoc=$spielerRes->fetch_assoc(); + $strIdentitaet = nachtidentitaetAlsString($identitaet); + if ($spielerAssoc['nachtIdentitaet']==$identitaet) + { + $text = $spielerAssoc['name']." ist ". $strIdentitaet ."."; + } + else + { + $text = $spielerAssoc['name']." ist nicht ". $strIdentitaet ."."; + } + echo "Letzte Nacht beschützten Sie ".getName($mysqli,$eigeneAssoc['beschuetzerLetzteRundeBeschuetzt'])."
"; + + //Zeige eine Liste aller lebenden Spieler an + echo "'; +} + +function beschuetzerAuswahl($mysqli,$id) +{ + $spielID = $_COOKIE['SpielID']; + $eigeneID = $_COOKIE['eigeneID']; + $id = (int)$id; + //schauen, ob es ein valider Spieler ist + $spielerRes = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE id = $id AND lebt = 1"); + if ($spielerRes->num_rows < 1) + return false; + + //Nachschauen, ob ich ihn nicht vorige Nacht bereits beschützt habe ... + $eigeneAssoc = eigeneAssoc($mysqli); + if ($eigeneAssoc['beschuetzerLetzteRundeBeschuetzt']==$id) + return false; + + $gameAssoc = gameAssoc($mysqli); + //Schreibe es auch ins playerlog, damit es der Spieler nachlesen kann + toPlayerLog($mysqli, "In Nacht ".$gameAssoc['nacht']." beschützen Sie ".getName($mysqli,$id).".",$eigeneID); + toGameLog($mysqli,"Der Beschützer/Die Beschützerin(".getName($mysqli,$eigeneID).") beschützt in Nacht ".$gameAssoc['nacht']." ".getName($mysqli,$id)."."); + + //Setze mich noch auf bereit ;) + setBereit($mysqli,$eigeneID,1); + $mysqli->Query("UPDATE $spielID"."_spieler SET beschuetzerLetzteRundeBeschuetzt = $id WHERE id = $eigeneID"); + return true; +} + +function parErmInitialisiere($mysqli) +{ + $spielID = $_COOKIE['SpielID']; + + echo "Möchten Sie Ihre Fähigkeit als Paranormaler Ermittler einsetzen?
"; + //Zeige eine Liste aller lebenden Spieler an + echo "'; + + echo ""; +} + +function parErmAusgewaehlt($mysqli, $id) +{ + $spielID = $_COOKIE['SpielID']; + $eigeneID = $_COOKIE['eigeneID']; + $id = (int)$id; + //schauen, ob es ein valider Spieler ist + $spielerRes = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE id = $id AND lebt = 1"); + if ($spielerRes->num_rows < 1) + return false; + //Überprüfe, ob ich noch einsetzen darf + $eigen = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE id = $eigeneID AND parErmEingesetzt = 0"); + if ($eigen->num_rows <= 0) + return false; + + //Finde die ids der beiden Nachbarn heraus ... + $alleRes = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE lebt = 1"); + $nachbar1 = -1; + $nachbar2 = -1; + $erster = -1; + $letzter = -1; + while ($temp = $alleRes->fetch_assoc()) + { + if ($erster == -1) + $erster = $temp['id']; + if ($temp['id']!=$id && $temp['id'] < $id) + $nachbar1 = $temp['id']; + if ($temp['id'] > $id && $nachbar2 == -1) + $nachbar2 = $temp['id']; + $letzter = $temp['id']; + } + if ($nachbar1 == -1) + { + //Wir waren der erste + $nachbar1 = $letzter; + } + if ($nachbar2 == -1) + { + //Wir waren der letzte + $nachbar2 = $erster; + } + $werwoelfe = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE (nachtIdentitaet = ". CHARWERWOLF ." OR nachtIdentitaet = ". CHARLYKANTROPH ." OR nachtIdentitaet = ". CHARURWOLF .") AND (ID = $nachbar1 OR ID = $nachbar2 OR ID = $id)"); + if ($werwoelfe->num_rows > 0) + { + //Es ist zumindest ein Werwolf darunter + toPlayerLog ($mysqli,"Sie beobachteten die Spieler ". getName($mysqli,$nachbar1) .", ". getName($mysqli,$id) ." und ".getName($mysqli,$nachbar2)." Es fällt Ihnen eine bedrohliche Aura auf, unter den dreien ist zumindest ein Werwolf.",$eigeneID); + toGameLog($mysqli,"Der Paranormale Ermittler beobachtete die Spieler ". getName($mysqli,$nachbar1) .", ". getName($mysqli,$id) ." und ".getName($mysqli,$nachbar2).". Er sieht, dass sich unter ihnen zumindest ein Werwolf befindet."); + echo ("Sie beobachteten die Spieler ". getName($mysqli,$nachbar1) .", ". getName($mysqli,$id) ." und ".getName($mysqli,$nachbar2)." Es fällt Ihnen eine bedrohliche Aura auf, unter den dreien ist zumindest ein Werwolf.
"); + } + else + { + toPlayerLog ($mysqli,"Sie beobachteten die Spieler ". getName($mysqli,$nachbar1) .", ". getName($mysqli,$id) ." und ".getName($mysqli,$nachbar2).". Es fällt Ihnen nichts Besonderes auf, unter den dreien befindet sich kein Werwolf.",$eigeneID); + toGameLog($mysqli,"Der Paranormale Ermittler beobachtete die Spieler ". getName($mysqli,$nachbar1) .", ". getName($mysqli,$id) ." und ".getName($mysqli,$nachbar2).". Er sieht, dass sich unter ihnen kein Werwolf befindet."); + echo ("Sie beobachteten die Spieler ". getName($mysqli,$nachbar1) .", ". getName($mysqli,$id) ." und ".getName($mysqli,$nachbar2).". Es fällt Ihnen nichts Besonderes auf, unter den dreien befindet sich kein Werwolf.
"); + } + + $mysqli->Query("UPDATE $spielID"."_spieler SET parErmEingesetzt = 1 WHERE id = $eigeneID"); + return true; +} + +function hexeInitialisieren($mysqli) +{ + $spielID = $_COOKIE['SpielID']; + $eigeneID = $_COOKIE['eigeneID']; + $eigeneAss = eigeneAssoc($mysqli); + $heiltraenke = $eigeneAss['hexeHeiltraenke']; + $todestraenke = $eigeneAss['hexeTodestraenke']; + + echo "'; + echo ""; +} + +function jaegerInitialisiere($mysqli) +{ + $spielID = $_COOKIE['SpielID']; + $eigeneID = $_COOKIE['eigeneID']; + + //Zeige eine Liste aller noch lebenden an, die der Jäger töten kann + echo "'; +} + +function buergermeisterInitialisiere($mysqli) +{ + //Der Bürgermeister wurde getötet und darf das Amt an seinen Nachfolger weitergeben... + $spielID = $_COOKIE['SpielID']; + $eigeneID = $_COOKIE['eigeneID']; + + //Zeige eine Liste aller noch Lebenden an, an die der Bürgermeister das Amt weitergeben kann + echo "'; +} + +function phaseBeendenWennAlleBereit($phase,$mysqli) +{ + //Springt zur nächsten Phase, wenn alle bereit sind + $spielID = $_COOKIE['SpielID']; + //Schauen wir zuerst mal, ob schon alle bereit sind ... + $nichtBereitResult = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE bereit = 0 AND lebt = 1"); + if ($nichtBereitResult->num_rows > 0) + { + return false; + } + //Es sind wohl schon alle bereit + if ($phase == PHASENACHT1) + { + $mysqli->Query("UPDATE $spielID"."_game SET spielphase = ".PHASENACHT2); + //alle müssen reloaden + $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1, bereit = 0"); + phaseInitialisieren(PHASENACHT2,$mysqli); + } + elseif ($phase == PHASENACHT2) + { + $mysqli->Query("UPDATE $spielID"."_game SET spielphase = ".PHASENACHT3); + //alle müssen reloaden + $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1, bereit = 0"); + phaseInitialisieren(PHASENACHT3,$mysqli); + } + elseif ($phase == PHASENACHT3) + { + //springen wir zu phase 5, wenn es eine Hexe gibt + $gameResult = $mysqli->Query("SELECT * FROM $spielID"."_game"); + $gameResAssoc = $gameResult->fetch_assoc(); + $hexenzahl = $gameResAssoc['hexenzahl']; + //Setze Phase auf 5 + $mysqli->Query("UPDATE $spielID"."_game SET spielphase = ".PHASENACHT4); + //alle müssen reloaden + $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1, bereit = 0"); + phaseInitialisieren(PHASENACHT4,$mysqli); + } + elseif ($phase == PHASENACHT4) + { + //Wir überspringen Phase 6 und kommen gleich zu Phase 7 + $mysqli->Query("UPDATE $spielID"."_game SET spielphase = ".PHASENACHTENDE); + //alle müssen reloaden + $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1, bereit = 0"); + phaseInitialisieren(PHASENACHTENDE,$mysqli); + } + elseif ($phase == PHASETOTEBEKANNTGEBEN) + { + //Wenn es keinen Bürgermeister gibt, zur Wahl des Bürgermeisters übergehen + $bres = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE buergermeister = 1 AND lebt = 1"); + if ($bres->num_rows > 0) + { + //Es gibt bereits einen Bürgermeister, wir können zu Phase 9 übergehen + $mysqli->Query("UPDATE $spielID"."_game SET spielphase = ".PHASEDISKUSSION); + //alle müssen reloaden + $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1, bereit = 0"); + phaseInitialisieren(PHASEDISKUSSION,$mysqli); + } + else + { + //Es gibt keinen Bürgermeister --> Bürgermeisterwahl = Phase 8 + $mysqli->Query("UPDATE $spielID"."_game SET spielphase = ".PHASEBUERGERMEISTERWAHL); + //alle müssen reloaden + $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1, bereit = 0"); + phaseInitialisieren(PHASEBUERGERMEISTERWAHL,$mysqli); + } + } + elseif ($phase == PHASEBUERGERMEISTERWAHL) + { + $mysqli->Query("UPDATE $spielID"."_game SET spielphase = ".PHASEDISKUSSION); + //alle müssen reloaden + $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1, bereit = 0"); + phaseInitialisieren(PHASEDISKUSSION,$mysqli); + } + elseif ($phase == PHASEDISKUSSION) + { + //Gehe zur Anklage über + $mysqli->Query("UPDATE $spielID"."_game SET spielphase = ".PHASEANKLAGEN); + //alle müssen reloaden + $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1, bereit = 0"); + phaseInitialisieren(PHASEANKLAGEN,$mysqli); + } + elseif ($phase == PHASEANKLAGEN) + { + //Gehe zur Abstimmung über + $mysqli->Query("UPDATE $spielID"."_game SET spielphase = ".PHASEABSTIMMUNG); + //alle müssen reloaden + $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1, bereit = 0"); + phaseInitialisieren(PHASEABSTIMMUNG,$mysqli); + } +} + +function endeDerAbstimmungStichwahl($id1, $id2, $mysqli) +{ + //Stichwahl zwischen id1 und id2 + $spielID = $_COOKIE['SpielID']; + $id1 = (int)$id1; + $id2 = (int)$id2; + //Diesmal gehe ich nicht über phaseBeendenWennAlleBereit... + $mysqli->Query("UPDATE $spielID"."_spieler SET angeklagtVon = -1"); + $mysqli->Query("UPDATE $spielID"."_spieler SET angeklagtVon = 0 WHERE id = $id1"); + $mysqli->Query("UPDATE $spielID"."_spieler SET angeklagtVon = 0 WHERE id = $id2"); + //Gehe zur Stichwahl über = Phase 12 + $mysqli->Query("UPDATE $spielID"."_game SET spielphase = ".PHASESTICHWAHL); + //alle müssen reloaden + $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1, bereit = 0"); + phaseInitialisieren(PHASESTICHWAHL,$mysqli); +} + +function endeDerStichwahl($id, $mysqli) +{ + $spielID = $_COOKIE['SpielID']; + //Stichwahl ist beendet + if ($id > -1) + { + toeteSpieler($mysqli,$id); + } + + if (!checkeSiegbedingungen($mysqli)) + { + //Gehe wieder zu Beginn der Nacht -> PHASENACHTBEGINN + $mysqli->Query("UPDATE $spielID"."_game SET spielphase = ".PHASENACHTBEGINN); + //alle müssen reloaden + $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1, bereit = 0"); + + //Zähle einen Tag dazu + $gameAssoc = gameAssoc($mysqli); + $nacht = $gameAssoc['nacht']; + $nacht +=1; + $mysqli->Query("UPDATE $spielID"."_game SET nacht = $nacht"); + phaseInitialisieren(PHASENACHTBEGINN,$mysqli); + } +} + +function endeDerAbstimmungEinfacheMehrheit($id, $mysqli) +{ + $spielID = $_COOKIE['SpielID']; + //Ein Spieler mit der id $id wurde bei der Abstimmung des Dorfes im ersten Wahlgang für schuldig befunden. + if ($id >-1) + { + toeteSpieler($mysqli,$id); + } + if (!checkeSiegbedingungen($mysqli)) + { + //Gehe wieder zu Beginn der Nacht + $mysqli->Query("UPDATE $spielID"."_game SET spielphase = ".PHASENACHTBEGINN); + //alle müssen reloaden + $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1, bereit = 0"); + + //Zähle einen Tag dazu + $gameAssoc = gameAssoc($mysqli); + $nacht = $gameAssoc['nacht']; + $nacht +=1; + $mysqli->Query("UPDATE $spielID"."_game SET nacht = $nacht"); + phaseInitialisieren(PHASENACHTBEGINN,$mysqli); + } +} + +function writeGameToLog($mysqli) +{ + $spielID = $_COOKIE['SpielID']; + $fileName = "log/Werwolf_log_".date("Y_m").".log"; + $myfile = fopen($fileName, "a"); + fwrite($myfile,"\n--- SPIEL BEENDET --- \n"); + fwrite($myfile,"SpielID: $spielID \n"); + fwrite($myfile,"SpielEnde: ".date("d.m.Y, H:i:s")."\n"); + //Alle Spieler hineinschreiben: + fwrite($myfile,"Spieler:\n"); + $playerQ = $mysqli->Query("SELECT * FROM $spielID"."_spieler"); + while ($temp = $playerQ->fetch_assoc()) + { + fwrite($myfile,$temp['name']."\n"); + } + fwrite($myfile,"Spielverlauf:\n"); + $gameAssoc = gameAssoc($mysqli); + $mitUmbruch = str_replace("Verhalten Sie sich ruhig und stören Sie nicht das Spiel der anderen. Verraten Sie keine Informationen, damit die anderen Spieler ihr Spielerlebnis genießen können.
"; + echo ""; //Auch als Toter will ich eine Liste haben :) + echo ""; + echo " + + Query("UPDATE $spielID"."_spieler SET lebt = 0 WHERE id = $spielerID"); + //Überprüfe, ob sonst schon alle bereit sind + if ($g = gameAssoc($mysqli)) + { + phaseBeendenWennAlleBereit($g['spielphase'],$mysqli); + } +} + +function alleReloadAusser($spielerID,$mysqli) +{ + $spielID = $_COOKIE['SpielID']; + $spielerID = (int)$spielerID; + $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1"); + $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 0 WHERE id = $spielerID"); +} + +function setReloadZero($spielerID, $mysqli) +{ + $spielID = $_COOKIE['SpielID']; + $spielerID = (int)$spielerID; + $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 0 WHERE id = $spielerID"); +} + +function setBereit($mysqli,$spielerID,$bereit) +{ + $spielID = $_COOKIE['SpielID']; + $spielerID = (int)$spielerID; + $bereit = (int)$bereit; + $mysqli->Query("UPDATE $spielID"."_spieler SET bereit = $bereit WHERE id = $spielerID"); +} + +function gameAssoc($mysqli) +{ + $spielID = $_COOKIE['SpielID']; + if ($gameRes = $mysqli->Query("SELECT * FROM $spielID"."_game")) + { + $gameA = $gameRes->fetch_assoc(); + return $gameA; + } + return false; +} + +function eigeneAssoc($mysqli) +{ + $spielID = $_COOKIE['SpielID']; + $eigeneID = $_COOKIE['eigeneID']; + $eigeneRes = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE id = $eigeneID"); + $eigeneA = $eigeneRes->fetch_assoc(); + return $eigeneA; +} + +function getName($mysqli, $spielerID) +{ + //Gibt den Namen des Spielers mit der $spielerID zurück + $spielID = $_COOKIE['SpielID']; + $spielerID = (int)$spielerID; + if ($res = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE id = $spielerID")) + { + $temp = $res->fetch_assoc(); + return $temp['name']; + } + return "Unknown"; +} + +function getGesinnung($identitaet) +{ + if ($identitaet == CHARWERWOLF || $identitaet == CHARURWOLF) + return "Werwölfe"; + else + return "Dorfbewohner"; +} + +function nachtidentitaetAlsString($identitaet) +{ + switch($identitaet) + { + case CHARKEIN: + return "keine"; + break; + case CHARDORFBEWOHNER: + return "Dorfbewohner"; + break; + case CHARWERWOLF: + return "Werwolf"; + break; + case CHARSEHER: + return "Seher/in"; + break; + case CHARHEXE: + return "Hexe/r"; + break; + case CHARJAEGER: + return "Jäger/in"; + break; + case CHARAMOR: + return "Amor"; + break; + case CHARBESCHUETZER: + return "Beschützer/in"; + break; + case CHARPARERM: + return "Paranormaler Ermittler"; + break; + case CHARLYKANTROPH: + return "Lykantroph/in"; + break; + case CHARSPION: + return "Spion/in"; + break; + case CHARMORDLUSTIGER: + return "Mordlustige(r)"; + break; + case CHARPAZIFIST: + return "Pazifist/in"; + break; + case CHARALTERMANN: + return "Die/Der Alte"; + break; + case CHARURWOLF: + return "Urwolf/Urwölfin"; + break; + default: + return ""; + break; + } +} + +function nachtidentitaetKurzerklaerung($identitaet) +{ + switch($identitaet) + { + case CHARKEIN: + return "keine"; + break; + case CHARDORFBEWOHNER: + //Dorfbewohner + return "Beunruhigt durch das Auftauchen von Werwölfen, versuchen die Dorfbewohner wieder Frieden in das Dorf zu bringen, indem sie alle Werwölfe ausforschen und töten wollen."; + break; + case CHARWERWOLF: + //Werwolf + return "Die Werwölfe töten jede Nacht einen Dorfbewohner, verhalten sich aber am Tag, als gehörten sie zu ihnen. Achtung: Die Dorfbewohner wollen den Werwölfen auf die Schliche kommen ..."; + break; + case CHARSEHER: + //Seher/in + return "Sie können jede Nacht die Nachtidentität eines Spielers sehen. Alternative: Sie sehen, welcher Gruppe derjenige angehört"; + break; + case CHARHEXE: + //Hexe + return "Sie können ein Mal im Spiel jemanden mit Ihrem Todestrank töten, ein Mal im Spiel das Opfer der Werwölfe retten. Entscheiden Sie weise, viel hängt davon ab ..."; + break; + case CHARJAEGER: + //Jäger/in + return "Wenn Sie getötet werden, können Sie nach einem letzten Griff zu Ihrer Flinte einen anderen Spieler mit in den Tod reißen"; + break; + case CHARAMOR: + //Amor + return "Zu Beginn des Spieles dürfen Sie zwei Personen bestimmen, die sich verlieben. Stirbt die eine Person, begeht die andere aus Kummer Selbstmord"; + break; + case CHARBESCHUETZER: + //Leibwächter/Beschützer + return "Sie können jede Nacht einen Spieler beschützen, der in dieser Nacht nicht sterben kann (Sie können sich auch selbst wählen). Sie dürfen nicht zwei Nächte hintereinander dieselbe Person schützen."; + break; + case CHARPARERM: + return "Sie können einmal im Spiel einen Spieler bestimmen und erfahren, ob sich unter diesem und den beiden Nachbarn zumindest ein Werwolf (oder Urwolf) befindet."; + break; + case CHARLYKANTROPH: + return "Sie sehen aus wie ein Werwolf, sind aber keiner. Sie spielen also für die Dorfbewohner"; + break; + case CHARSPION: + //Spion + return "Sie können jede Nacht einen Spieler auswählen und eine Identität, die dieser Spieler haben könnte. Sie erfahren, ob dieser + Spieler tatsächlich diese Identität besitzt"; + break; + case CHARMORDLUSTIGER: + return "Sie wollen Blut sehen und argumentieren daher immer für das Töten eines Spielers"; + break; + case CHARPAZIFIST: + return "Sie wollen, dass alle möglichst friedlich zusammenleben und argumentieren daher immer gegen das Töten eines Spielers"; + break; + case CHARALTERMANN: + return "Sie sterben in der x. Nacht, wobei x die Anzahl der lebenden Werwölfe + 1 ist. Es kann also sein, dass sie früher sterben als gedacht ..."; + break; + case CHARURWOLF: + return "Sie gehören zu den Werwölfen und gewinnen bzw. verlieren mit ihnen. Einmal pro Spiel können Sie einen Spieler zum Werwolf machen, der dann alle bisherigen Fähigkeiten verliert ..."; + break; + } +} + +function toGameLog($mysqli,$logeintrag) +{ + //Fügt dem gamelog den $logeintrag hinzu + $spielID = $_COOKIE['SpielID']; + if ($gameAssoc = gameAssoc($mysqli)) + { + $aktLog = $gameAssoc['log']; + $neuLog = $aktLog.date("H:i:s").": ".$logeintrag."