Query("SELECT * FROM $spielID"."_spieler"); if(isset($alleres->num_rows)) { //Schauen, ob es auch mich als Spieler gibt und meine verifizierungsnr stimmt $spielerResult = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE id = $eigeneID AND verifizierungsnr = ".(int)$_COOKIE['verifizierungsnr']); if ($spielerResult->num_rows >= 1) { //Zuallererst einmal den letzten Zugriff loggen: $mysqli->Query("UPDATE $spielID"."_game SET letzterAufruf = ".time()); //Wir befinden uns bereits in einem Spiel //Dass wir aber nicht ohne Grund reloaden, setzen wir für uns selbst reload auf false: setReloadZero($eigeneID,$mysqli); //echo "

Du befindest dich bereits in einem Spiel, Name: ".getName($mysqli,$eigeneID)."

"; $myname = getName($mysqli,$eigeneID); echo "

Name: ". $myname ."

"; //Nachschauen, ob ich Bürgermeister bin ... Dann nämlich anschreiben ... $buergermRes = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE buergermeister = 1"); if ($buergermRes->num_rows > 0) { $buergermAss = $buergermRes->fetch_assoc(); if ($buergermAss['id']==$eigeneID) { //Ich bin Bürgermeister echo "

Sie sind Bürgermeister

"; } } //Vielleicht will der Spielleiter jemanden entfernen? if (isset($_POST['spieler_entfernen']) && isset($_POST['entfernenID'])) { $res = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE id = $eigeneID AND spielleiter = 1"); if ($res->num_rows > 0) { aus_spiel_entfernen((int)$_POST['entfernenID'],$mysqli); $text = $myname."(Spielleiter) hat ".getName($mysqli,(int)($_POST['entfernenID'])). " aus dem Spiel entfernt."; toGameLog($mysqli, $text); 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"); if ($jaegerRes->num_rows > 0) { $jaegerA = $jaegerRes->fetch_assoc(); if ($jaegerA['id']==$eigeneID) { //Falls wir selbst der Jäger sind, dürfen wir schießen if (isset($_POST['jaegerHatAusgewaehlt'])) { toeteSpieler($mysqli, $_POST['jaegerID']); //Dann setze jaegerDarfSchiessen wieder auf 0 $mysqli->Query("UPDATE $spielID"."_spieler SET jaegerDarfSchiessen = 0, reload = 1 WHERE id = $eigeneID"); $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1"); $pageReload = true; } jaegerInitialisiere($mysqli); } else { echo "

Der Jäger wurde getötet

"; echo "

Warten auf Jäger

"; $pageReload = true; } } else { //Weiters schauen wir noch, ob der Bürgermeister sein Amt weitergeben muss... $buergermeisterRes = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE buergermeisterDarfWeitergeben = 1"); $gameAssoc = gameAssoc($mysqli); //Nur Bürgermeister weitergeben, wenn das Spiel noch nicht aus ist if ($buergermeisterRes->num_rows > 0 && $gameAssoc['spielphase'] != PHASESIEGEREHRUNG && $gameAssoc['spielphase'] != PHASESPIELSETUP && $gameAssoc['spielphase'] != PHASESETUP) { //Der Bürgermeister wurde getötet und darf sein Amt weitergeben ... $buergermA = $buergermeisterRes->fetch_assoc(); if ($buergermA['id']==$eigeneID) { //Falls wir selbst der Jäger sind, dürfen wir schießen if (isset($_POST['buergermeisterNachfolger'])) { //Dann setze buergermeisterDarfWeitergeben wieder auf 0 $mysqli->Query("UPDATE $spielID"."_spieler SET buergermeisterDarfWeitergeben = 0, reload = 1 WHERE id = $eigeneID"); $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1"); $neuerBuergermeister = (int)$_POST['buergermeisterID']; $mysqli->Query("UPDATE $spielID"."_spieler SET buergermeister = 1 WHERE id = $neuerBuergermeister"); toGameLog($mysqli,getName($mysqli,$neuerBuergermeister)." wurde als Nachfolger des Bürgermeisters eingesetzt."); toAllPlayerLog($mysqli,getName($mysqli,$neuerBuergermeister)." wurde als Nachfolger des Bürgermeisters eingesetzt."); $pageReload = true; } buergermeisterInitialisiere($mysqli); } else { echo "

Der Bürgermeister wurde getötet

"; echo "

Er darf sein Amt weitergeben

"; $pageReload = true; } } else { //Die weitere Vorgehensweise kommt auf die Phase des Spiels an: $gameResult = $mysqli->Query("SELECT * FROM $spielID"."_game"); //echo $mysqli->error; $gameResAssoc = $gameResult->fetch_assoc(); $phase = $gameResAssoc['spielphase']; if ($phase == PHASENACHTBEGINN) { $displayTag = false; //bei true ändert sich der Hintergrund $displayFade = true; } elseif ($phase > PHASENACHTBEGINN && $phase < PHASENACHTENDE) { $displayTag = false; $displayFade = false; } elseif ($phase == PHASENACHTENDE) { $displayTag = true; $displayFade = true; } else { $displayTag = true; $displayFade = false; } //Nachschauen, ob ich noch lebe ;) $ass = eigeneAssoc($mysqli); if ($phase >= PHASENACHTBEGINN && $phase <= PHASENACHABSTIMMUNG && $ass['lebt'] == 0) { //Falls ich tot bin, zeige binTot($mysqli); $listReload = true; } else { if ($phase == PHASESETUP) { //In Phase 0 hat der Spielleiter die Möglichkeit, die Regeln zu bearbeiten. if (isset($_POST['spielEditieren'])) { spielRegeln($mysqli); } else { //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 "

$spielID


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(); if ($eigAss['spielleiter'] == 1) { echo '

Sie als Spielleiter erhalten die Möglichkeit, die Regeln des Spiels zu bearbeiten:

'; } //Zeige alle Spieler in einer Liste an--> Alt, wird jz via javascript gelöst echo "

Spieler in diesem Spiel:

"; $spieleranzahlQuery = $mysqli->Query("SELECT * FROM $spielID"."_spieler"); $spielerzahl = $spieleranzahlQuery->num_rows; //und zähle mit //Die Liste wird mit Javascript erstellt echo "
"; $listReload = true; //Dass unsere Liste refresht wird ;) echo "

Spieleranzahl: $spielerzahl

"; //Falls der Spielleiter das Spiel beginnenlassen will: if (isset($_POST['spielStarten'])) { spielInitialisieren($mysqli,$spielerzahl); } } } elseif ($phase == PHASESPIELSETUP) { //Jedem einen Button anzeigen, dass er bereit ist. //Wenn er noch nicht zugestimmt hat. $pageReload = true; $spielerAssoc = $spielerResult->fetch_assoc(); if ($spielerAssoc['bereit']== 0 && !isset($_POST['bereit'])) { //Zeige Formular zum Klicken auf bereit echo '

Drücke "bereit", um zu starten!

'; } else { if (isset($_POST['bereit'])) { //Der Spieler hat auf den Button gedrückt! //markiere das in der Datenbank $mysqli->Query("UPDATE $spielID"."_spieler SET bereit = 1 WHERE id = $eigeneID"); //überprüfe, ob alle bereit sind ... $bereitRes = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE bereit = 0"); if ($bereitRes->num_rows < 1) { //Alle sind bereit, starte Spiel spielStarten($mysqli); } else { //Spiel wird noch nicht gestartet, aber die anderen updaten: //alleReloadAusser($eigeneID,$mysqli); Ausgeschaltet, weil die Liste über javascript aktualisiert wird } } elseif (isset($_POST['spielBeginnenOhneRuecksicht'])) { spielStarten($mysqli); } //Diese Liste wird mit javascript erstellt echo "
"; $listReload = true; //Dass unsere Liste refresht wird echo ("

Warte auf andere Spieler ...

"); //Als Spielleiter sollte man das Spiel "ohne Rücksicht auf Verluste" beginnen können if ($eigeneID == 0) { ?>

Die Nacht bricht herein ...

"; $eigeneAssoc = eigeneAssoc($mysqli); if ($eigeneAssoc['countdownBis']>time()) { //Zeige noch Countdown an ... $timerZahl = $eigeneAssoc['countdownBis']-time()+1; $timerAb = 0; $timerText = ""; $aktBeiTime = true; echo "
"; } else { $mysqli->Query("UPDATE $spielID"."_game SET spielphase = ".PHASENACHT3); $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1, bereit = 0"); phaseInitialisieren(PHASENACHT3,$mysqli); $pageReload = true; } } elseif ($phase == PHASENACHT1) { //Amor wählt verliebte aus ... characterButton($mysqli); $eigeneAssoc = eigeneAssoc($mysqli); if ($eigeneAssoc['bereit']==1) { warteAufAndere($mysqli); $pageReload = true; } else { if ($eigeneAssoc['nachtIdentitaet'] == CHARAMOR) { //Amor if (isset($_POST['amorHatAusgewaehlt'])) { if (amorGueltig($mysqli,$_POST['amorID1'],$_POST['amorID2'])==false) { amorInitialisiere($mysqli); //Irgendetwas ist schiefgegangen --> wähle nochmals aus } else { warteAufAndere($mysqli); $pageReload = true; setBereit($mysqli,$eigeneID,1); phaseBeendenWennAlleBereit(PHASENACHT1,$mysqli); } } else { amorInitialisiere($mysqli); } } else { //Ganz normaler Dorfbewohner if (isset($_POST['weiterschlafen'])) { //der Button wurde bereits geklickt setBereit($mysqli,$eigeneID,1); warteAufAndere($mysqli); $pageReload = true; phaseBeendenWennAlleBereit(PHASENACHT1,$mysqli); } else { //zeige den Button an dorfbewohnerWeiterschlafen(); } } } } elseif ($phase == PHASENACHT2) { //Die Verliebten erwachen ... characterButton($mysqli); $eigeneAssoc = eigeneAssoc($mysqli); if ($eigeneAssoc['bereit']==1) { warteAufAndere($mysqli); $pageReload = true; } else { if ($eigeneAssoc['verliebtMit'] > -1) { if (isset($_POST['verliebteWeiter'])) { setBereit($mysqli,$eigeneID,1); warteAufAndere($mysqli); $pageReload = true; phaseBeendenWennAlleBereit(PHASENACHT2,$mysqli); } else { //Zeige an, mit wem ich verliebt bin echo "
"; echo "

Der Pfeil des Amor, der nie sein Ziel verfehlt, trifft Sie und Sie verlieben sich unsterblich ...

"; echo "

Sie sind verliebt mit ".getName($mysqli,$eigeneAssoc['verliebtMit'])."

"; echo "

Sie spielen nun gemeinsam mit Ihrem Geliebten, gehören Sie unterschiedlichen Gruppierungen an, gewinnen Sie nur, wenn Sie alle anderen Spieler töten. Ansonsten gewinnen Sie wie gewohnt mit Ihrer Gruppierung (Dorfbewohner, Werwölfe)

"; //Auch den Charakter anzeigen $verliebtRes = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE id = ".(int)$eigeneAssoc['verliebtMit']); $verliebtAss = $verliebtRes->fetch_assoc(); echo "

Identität: ".nachtidentitaetAlsString($verliebtAss['nachtIdentitaet'])."

"; toPlayerLog($mysqli,getName($mysqli,$eigeneAssoc['verliebtMit'])." ist ".nachtidentitaetAlsString($verliebtAss['nachtIdentitaet']) .".",$eigeneID); echo ''; echo '

'; } } else { //Ganz normaler Dorfbewohner if (isset($_POST['weiterschlafen'])) { //der Button wurde bereits geklickt setBereit($mysqli,$eigeneID,1); warteAufAndere($mysqli); $pageReload = true; phaseBeendenWennAlleBereit(PHASENACHT2,$mysqli); } else { //zeige den Button an dorfbewohnerWeiterschlafen(); } } } } elseif ($phase == PHASENACHT3) { //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(); //Falls der Spieler bereit ist, brauche ich nur noch warten auf andere anzeigen if ($spielerAssoc['bereit']==1) { warteAufAndere($mysqli); $pageReload = true; } else { $identitaet = $spielerAssoc['nachtIdentitaet']; if ($identitaet == CHARSEHER) { //SEHER if (isset($_POST['seherHatAusgewaehlt'])) { if (seherSehe($mysqli,$_POST['seherID'])==false) { //Der Seher hat einen ungültigen Zug gemacht //nochmals von vorne seherInitialisiere($mysqli); } else { //Der Seher hat erfolgreich ausgewählt --> Schaue, ob wir die Phase schon beenden können warteAufAndere($mysqli); $pageReload = true; phaseBeendenWennAlleBereit(PHASENACHT3,$mysqli); } } else { //Der Seher hat noch nicht ausgewählt -> Initialisiere seherInitialisiere($mysqli); } } elseif ($identitaet == CHARSPION) { //Spion if (isset($_POST['spionHatAusgewaehlt']) && isset($_POST['spionID']) && isset ($_POST['spionIdentitaet'])) { if (spionSehe($mysqli,$_POST['spionID'],$_POST['spionIdentitaet'])==false) { //Ungültiger Zug, nochmals von vorne spionInitialisiere($mysqli); } else { //Gültiger Zug! warteAufAndere($mysqli); $pageReload = true; phaseBeendenWennAlleBereit(PHASENACHT3,$mysqli); } } else { spionInitialisiere($mysqli); } } elseif ($identitaet == CHARBESCHUETZER) { //Beschützer, früher Leibwächter if (isset($_POST['beschuetzerHatAusgewaehlt'])) { if (beschuetzerAuswahl($mysqli,$_POST['beschuetzerID'])==false) { //Ungültig -> nochmal beschuetzerInitialisiere($mysqli); } else { //Der Beschützer hat erfolgreich ausgewählt warteAufAndere($mysqli); $pageReload = true; phaseBeendenWennAlleBereit(PHASENACHT3,$mysqli); } } else { beschuetzerInitialisiere($mysqli); } } elseif ($identitaet == CHARPARERM) { //Paranormaler Ermittler $eigeneAssoc = eigeneAssoc($mysqli); if ($eigeneAssoc['parErmEingesetzt']==0) { if (isset($_POST['parErmHatAusgewaehlt'])) { if (parErmAusgewaehlt($mysqli,$_POST['parErmID'])==false) { //Ungültig parErmInitialisiere($mysqli); } else { //Erfolgreich setBereit($mysqli,$eigeneID,1); warteAufAndere($mysqli); $pageReload = true; phaseBeendenWennAlleBereit(PHASENACHT3,$mysqli); } } elseif (isset ($_POST['parErmNichtAuswaehlen'])) { //Diese Runde nicht auswählen setBereit($mysqli,$eigeneID,1); warteAufAndere($mysqli); $pageReload = true; phaseBeendenWennAlleBereit(PHASENACHT3,$mysqli); } else { //Fragen, ob er einsetzen will parErmInitialisiere($mysqli); } } else { //Ganz normaler Dorfbewohner if (isset($_POST['weiterschlafen'])) { //der Button wurde bereits geklickt setBereit($mysqli,$eigeneID,1); warteAufAndere($mysqli); $pageReload = true; phaseBeendenWennAlleBereit(PHASENACHT3,$mysqli); } else { //zeige den Button an dorfbewohnerWeiterschlafen(); } } } elseif ($identitaet == CHARWERWOLF || $identitaet == CHARURWOLF) { //WERWÖLFE $zeitAbgelaufen = false; //Zuerst kontrollieren, ob die Zeit schon ausgelaufen ist $eigeneAssoc = eigeneAssoc($mysqli); if ($eigeneAssoc['countdownBis']<= time()) { //Timer abgelaufen, nachschauen, ob es sich bloß um den Einstimmigkeits-Timer handelt ... $gameAssoc = gameAssoc($mysqli); if ($gameAssoc['werwolfeinstimmig']==1) { //Es handelt sich um die Einstimmigkeits-Abstimmung, mal sehen ob wir mehr als 2 //Werwölfe haben, dann starte einen neuen Timer [Anm.: müssen wir haben, da sonst werwolfeinstimmig gleich auf 0 gesetzt wird] //Starte einen neuen Timer, bei dem die Abstimmung nicht mehr einstimmig sein muss ... $werwolfQ = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE (nachtIdentitaet = ". CHARWERWOLF ." OR nachtIdentitaet = ".CHARURWOLF.") AND lebt = 1"); $werwolfzahl = $werwolfQ->num_rows; $countdownBis = time()+$gameAssoc['werwolftimer2']+$gameAssoc['werwolfzusatz2']*$werwolfzahl; if ($countdownBis >= time()+15) $countdownAb = time()+5; else $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; $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"); $werwolfzahl = $werwolfQ->num_rows; $alleSpielerQ = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE lebt = 1"); while ($temp = $alleSpielerQ->fetch_assoc()) { $query = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE lebt = 1 AND (nachtIdentitaet = ". CHARWERWOLF ." OR nachtIdentitaet = ". CHARURWOLF .") AND wahlAuf = ".$temp['id']); if ($query->num_rows > $werwolfzahl/2) { //Mit Mehrheit beschlossen... $opfer = $temp['id']; $mysqli->Query("UPDATE $spielID"."_spieler SET bereit = 1, reload = 1 WHERE (nachtIdentitaet = ".CHARWERWOLF." OR nachtIdentitaet = ".CHARWERWOLF.")"); $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 mehrheitlich auf: ".$temp['name']); break; } } } else { //Fehlschlag $zeitAbgelaufen = true; $mysqli->Query("UPDATE $spielID"."_spieler SET bereit = 1, reload = 1 WHERE (nachtIdentitaet = ".CHARWERWOLF." OR nachtIdentitaet = ".CHARURWOLF.")"); $mysqli->Query("UPDATE $spielID"."_game SET werwolfopfer = -1"); phaseBeendenWennAlleBereit(PHASENACHT3,$mysqli); //Schauen, ob wir die Phase schon beenden können toGameLog($mysqli,"Die Werwölfe konnten sich nicht auf ein Opfer einigen ..."); } } else { //Timer initialiseren $timerZahl = $eigeneAssoc['countdownBis'] - time()+1; $timerAb = $eigeneAssoc['countdownAb'] - time()+1; $aktBeiTime = true; $gameAssoc = gameAssoc($mysqli); if ($gameAssoc['werwolfeinstimmig']==1) $timerText = "Zeit, bis die Abstimmung der Werwölfe nicht mehr einstimmig sein muss: "; else $timerText = "Zeit, bis die Abstimmung der Werwölfe zu keinem Ergebnis führen kann: "; } if (isset($_POST['werwolfAuswahl']) && !$zeitAbgelaufen) { //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) { //Dann schauen, ob schon alle abgestimmt haben $einstimmig = 1; $opfer = $wahlID; $alleSpielerRes = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE lebt = 1"); while ($temp = $alleSpielerRes->fetch_assoc()) { if ($temp['nachtIdentitaet']==CHARWERWOLF || $temp['nachtIdentitaet'] == CHARURWOLF) { if ($temp['wahlAuf'] != $opfer) $einstimmig = 0; } } //Falls einstimmig--> Alle Werwölfe auf bereit setzen und weiter gehts ;) if ($einstimmig == 1) { $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)); } } else { //Die Wahl muss nicht einstimmig sein ... $werwolfQ = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE (nachtIdentitaet = ". CHARWERWOLF ." OR nachtIdentitaet = ". CHARURWOLF.") AND lebt = 1"); $werwolfzahl = $werwolfQ->num_rows; $alleSpielerQ = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE lebt = 1"); while ($temp = $alleSpielerQ->fetch_assoc()) { $query = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE lebt = 1 AND (nachtIdentitaet = ". CHARWERWOLF ." OR nachtIdentitaet = ".CHARURWOLF.") AND wahlAuf = ".$temp['id']); if ($query->num_rows > $werwolfzahl/2) { //Mit Mehrheit beschlossen... $opfer = $temp['id']; $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 mehrheitlich auf: ".$temp['name']); break; } } } } echo "

"; echo "
"; //Die Liste, was die anderen gewählt haben $listReload=true; echo "
"; echo ''; echo "

Für den Tod welches Spielers wollen Sie stimmen?

"; echo "

'; $gameAssoc = gameAssoc($mysqli); if ($gameAssoc['werwolfeinstimmig']==1) echo "

Zur Info: Die Wahl muss einstimmig sein, wählen Sie solange, bis die Wahl einstimmig ist

"; else echo "

Zur Info: Die Mehrheit der Werwölfe bestimmt das Opfer (Einstimmigkeit bei mehr als 2 Spielern ist nicht erforderlich)

"; $pageReload = true; //Falls alle abgestimmt haben } else { //Ganz normaler Dorfbewohner if (isset($_POST['weiterschlafen'])) { //der Button wurde bereits geklickt setBereit($mysqli,$eigeneID,1); warteAufAndere($mysqli); $pageReload = true; phaseBeendenWennAlleBereit(PHASENACHT3,$mysqli); } else { //zeige den Button an dorfbewohnerWeiterschlafen(); } } } } 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(); //Falls der Spieler bereit ist, brauche ich nur noch warten auf andere anzeigen if ($spielerAssoc['bereit']==1) { warteAufAndere($mysqli); $pageReload = true; } else { $identitaet = $spielerAssoc['nachtIdentitaet']; if ($identitaet == CHARHEXE) { //Hexe if (isset($_POST['hexeAuswahl'])) { if (isset($_POST['hexeHeilen'])) { if ($_POST['hexeHeilen']==1) { //Die Hexe will das Opfer heilen... $eigeneAssoc=eigeneAssoc($mysqli); if ($eigeneAssoc['hexeHeiltraenke']>0) { $heilTraenkeNeu = (int)$eigeneAssoc['hexeHeiltraenke']-1; $mysqli->Query("UPDATE $spielID"."_spieler SET hexeHeiltraenke = $heilTraenkeNeu, hexeHeilt = 1 WHERE id = $eigeneID"); toPlayerLog($mysqli,"1 Heiltrank verwendet.",$eigeneID); toGameLog($mysqli,"Die Hexe heilt das Opfer der Werwölfe."); } else { $mysqli->Query("UPDATE $spielID"."_spieler SET hexeHeilt = 0 WHERE id = $eigeneID"); } } else { $mysqli->Query("UPDATE $spielID"."_spieler SET hexeHeilt = 0 WHERE id = $eigeneID"); } } //Und jetzt noch schauen wegen Töten ... if (isset($_POST['toeten'])) { if ($_POST['toeten'] > -1) { //Ein Opfer wurde ausgewählt ... schauen, ob wir überhaupt noch Todestrank haben... $eigeneAssoc=eigeneAssoc($mysqli); if ($eigeneAssoc['hexeTodestraenke']>0) { $todestraenkeNeu = (int)$eigeneAssoc['hexeTodestraenke']-1; $hexenOpfer = (int)$_POST['toeten']; $mysqli->Query("UPDATE $spielID"."_spieler SET hexeTodestraenke = $todestraenkeNeu, hexenOpfer = $hexenOpfer WHERE id = $eigeneID"); toPlayerLog($mysqli,"1 Todestrank verwendet für Spieler ".getName($mysqli,$hexenOpfer),$eigeneID)."."; toGameLog($mysqli,"Die Hexe verwendet einen Todestrank, um ".getName($mysqli,$hexenOpfer)." zu töten."); } else { $mysqli->Query("UPDATE $spielID"."_spieler SET hexenOpfer = -1 WHERE id = $eigeneID"); } } 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); $pageReload = true; phaseBeendenWennAlleBereit(PHASENACHT4,$mysqli);//Schauen, ob wir schon zur nächsten Phase übergehen können. } else { hexeInitialisieren($mysqli); } } elseif ($identitaet == CHARURWOLF) { if (isset($_POST['urwolfHatAusgewaehlt']) && isset($_POST['urwolfID'])) { if (urwolfHandle($mysqli,$_POST['urwolfID'])==false) { //Ungültiger Zug, nochmals von vorne urwolfInitialisiere($mysqli); } else { //Gültiger Zug! warteAufAndere($mysqli); $pageReload = true; phaseBeendenWennAlleBereit(PHASENACHT4,$mysqli); } } else { $res = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE id = $eigeneID"); $a = $res->fetch_assoc(); if ($a['urwolf_anzahl_faehigkeiten'] > 0) { urwolfInitialisiere($mysqli); } else { if (isset($_POST['weiterschlafen'])) { //der Button wurde bereits geklickt setBereit($mysqli,$eigeneID,1); warteAufAndere($mysqli); $pageReload = true; phaseBeendenWennAlleBereit(PHASENACHT4,$mysqli); } else { //zeige den Button an dorfbewohnerWeiterschlafen(); } } } } else { //keine Besondere Identitaet diese Nacht if (isset($_POST['weiterschlafen'])) { //der Button wurde bereits geklickt setBereit($mysqli,$eigeneID,1); warteAufAndere($mysqli); $pageReload = true; phaseBeendenWennAlleBereit(PHASENACHT4,$mysqli); } else { //zeige den Button an dorfbewohnerWeiterschlafen(); } } } } elseif ($phase == PHASENACHTENDE) { echo "

Es wird Morgen ...

"; $eigeneAssoc = eigeneAssoc($mysqli); if ($eigeneAssoc['countdownBis']>time()) { //Zeige noch Countdown an ... $timerZahl = $eigeneAssoc['countdownBis']-time()+1; $timerAb = 0; $timerText = ""; $aktBeiTime = true; echo "
"; } else { $mysqli->Query("UPDATE $spielID"."_game SET spielphase = ".PHASETOTEBEKANNTGEBEN); $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1, bereit = 0"); phaseInitialisieren(PHASETOTEBEKANNTGEBEN,$mysqli); $pageReload = true; } } elseif ($phase == PHASETOTEBEKANNTGEBEN) { characterButton($mysqli); //Zeige den Tagestext an $gameAssoc = gameAssoc($mysqli); $tagestext = $gameAssoc['tagestext']; echo "

Der Tag beginnt

"; $eigeneAssoc = eigeneAssoc($mysqli); echo "

$tagestext

"; if ($eigeneAssoc['popup_text'] != "") { echo "

".$eigeneAssoc['popup_text']."

"; $mysqli->Query("UPDATE $spielID"."_spieler SET popup_text = '' WHERE id = $eigeneID"); } //Nachsehen, ob es einen Bürgermeister gibt $bres = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE buergermeister = 1"); if ($bres->num_rows > 0) { //Es gibt einen Bürgermeister --> Dieser kann zur nächsten Phase übergehen //Setze mich selbst auf bereit //Wenn ich selbst der Bürgermeister bin, kann ich zur nächsten Phase übergehen $bass = $bres->fetch_assoc(); if ($bass['id']==$eigeneID) { if (isset($_POST['buergermeisterWeiter'])) { $pageReload = true; setBereit($mysqli,$eigeneID,1); phaseBeendenWennAlleBereit(PHASETOTEBEKANNTGEBEN,$mysqli); warteAufAndere($mysqli); } else { //$eigeneAssoc = eigeneAssoc($mysqli); schon gemacht if ($eigeneAssoc['bereit']==0) { //Zeige einen Button an, mit dem der Bürgermeister das Spiel fortführen kann echo "
"; echo ''; echo '

'; echo "
"; } else { warteAufAndere($mysqli); } } } else { //Ich bin nicht Bürgermeister --> Warte, bis es weitergeht $pageReload = true; setBereit($mysqli,$eigeneID,1); phaseBeendenWennAlleBereit(PHASETOTEBEKANNTGEBEN,$mysqli); warteAufAndere($mysqli); } } else { //Es gibt keinen Bürgermeister --> Jeder muss auf weiter drücken if (isset($_POST['dorfbewohnerWeiter'])) { $pageReload = true; setBereit($mysqli,$eigeneID,1); phaseBeendenWennAlleBereit(PHASETOTEBEKANNTGEBEN,$mysqli); warteAufAndere($mysqli); } else { //$eigeneAssoc = eigeneAssoc($mysqli); schon gemacht if ($eigeneAssoc['bereit']==0) { //Zeige einen Button an, mit dem der Bürgermeister das Spiel fortführen kann echo "
"; echo ''; echo '

'; echo "
"; } else { warteAufAndere($mysqli); } } } } elseif ($phase == PHASEBUERGERMEISTERWAHL) { characterButton($mysqli); echo "

Wahl des Bürgermeisters

"; echo "

Da es momentan keinen Bürgermeister im Dorf gibt, beschließt das Dorf, einen zu wählen ...

"; echo "

Fragen Sie in die Runde, wer sich als Bürgermeister aufstellen lassen will und diskutieren Sie jede Bewerbung ...

"; //Bürgermeisterwahl, ähnlich der Werwolfabstimmung if (isset($_POST['buergermeisterWahlAuswahl'])) { //einmal die Wahl eintragen $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 = ""; $anzahlSpieler = $alleSpielerRes->num_rows; while ($temp = $alleSpielerRes->fetch_assoc()) { $w = $temp['wahlAuf']; if (!isset($wahlAufSpieler[$w])) $wahlAufSpieler[$w] = 0; $wahlAufSpieler[$w]++; if ($w > -1) { $text .= $temp['name']." -> ". getName($mysqli,$w). ", "; } } //Schauen, ob jemand mehr als 50% der Stimmen hat foreach ($wahlAufSpieler as $id => $stimmen) { if ($stimmen > $anzahlSpieler/2 && $id > -1) { //Dieser Spieler hat die Mehrheit $mysqli->Query("UPDATE $spielID"."_spieler SET bereit = 1"); $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); break; } } } echo "
"; //Die Liste, was die anderen gewählt haben $listReload=true; echo "
"; echo ''; echo "

Für welchen Spieler als Bürgermeister möchten Sie stimmen?

"; echo "

'; echo "

Der Bürgermeister beginnt Abstimmungen und erhält bei der Abstimmung des Dorfes jeden Tag eine zusätzliche halbe Stimme. Über 50% der Spieler müssen für den Bürgermeister stimmen, damit er gewählt wird

"; echo ""; $pageReload = true; //Falls alle abgestimmt haben } elseif ($phase == PHASEDISKUSSION) { characterButton($mysqli); //Diskussion //Schauen, ob ich Bürgermeister bin... $bres = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE buergermeister = 1"); $bras = $bres->fetch_assoc(); if ($bras['id']==$eigeneID) { //Ich bin Bürgermeister, ich kann zur nächsten Phase übergehen... if (isset($_POST['buergermeisterWeiter'])) { $pageReload = true; $mysqli->Query("UPDATE $spielID"."_spieler SET bereit = 1"); phaseBeendenWennAlleBereit(PHASEDISKUSSION,$mysqli); } else { //Zeige einen Button an, mit dem der Bürgermeister das Spiel fortführen kann echo "
"; echo ''; echo '

Sie als Bürgermeister dürfen entscheiden, wann es Zeit ist, die Diskussion zu beenden und zu den Anklagen überzugehen.

'; echo "
"; } } //Alle sehen diesen Text echo "

Diskussion

"; echo "

Diskutieren Sie mit, versuchen Sie die Werwölfe zu entlarven, die anderen aber von Ihrer Unschuld zu überzeugen

"; $pageReload = true; } elseif ($phase == PHASEANKLAGEN) { characterButton($mysqli); //Anklagen echo "
"; //Die Liste der Angeklagten $listReload=true; $pageReload=true; //Jeder, der noch niemanden angeklagt hat, kann jemanden anklagen $angeklagtRes = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE angeklagtVon = $eigeneID"); if ($angeklagtRes->num_rows > 0) { //habe bereits jemanden angeklagt } else { if (isset($_POST['angeklagterID'])) { //Ich klage gerade jemanden an if ($_POST['angeklagterID']!=-1) $mysqli->Query("UPDATE $spielID"."_spieler SET angeklagtVon = $eigeneID WHERE id = ".(int)$_POST['angeklagterID']); } else { //Wen möchte ich anklagen? echo "
"; echo "

Wollen Sie einen Spieler anklagen?

"; echo "

'; 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(); if ($bras['id']==$eigeneID) { //Ich bin Bürgermeister, ich kann zur nächsten Phase übergehen... if (isset($_POST['buergermeisterWeiter'])) { $mysqli->Query("UPDATE $spielID"."_spieler SET bereit = 1"); phaseBeendenWennAlleBereit(PHASEANKLAGEN,$mysqli); } else { //Zeige einen Button an, mit dem der Bürgermeister das Spiel fortführen kann echo "
"; echo ''; echo '

'; echo "

Achten Sie als Bürgermeister darauf, dass alle Angeklagten Zeit haben, sich zu verteidigen.

"; echo "
"; } } } elseif ($phase == PHASEABSTIMMUNG) { characterButton($mysqli); //Abstimmung, bei Mehrheit wird Opfer getötet, sonst Stichwahl //Wieder ähnlich wie Abstimmung für Bürgermeister echo "

"; 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()) { //Zeit abgelaufen endeDerAbstimmungEinfacheMehrheit(-1,$mysqli); toGameLog($mysqli,"Die Versammlung des Dorfes konnte sich nicht auf einen Spieler einigen, den sie töten will."); toAllPlayerLog($mysqli,"Die Versammlung des Dorfes konnte sich nicht auf einen Spieler einigen, den sie töten will."); } else { $timerText = "Zeit, bis das Dorf zu keinem Ergebnis kommt: "; $timerZahl = $eigeneAssoc['countdownBis'] - time()+1; $timerAb = $eigeneAssoc['countdownAb']- time()+1; $aktBeiTime = true; if (isset($_POST['dorfWahlID'])) { //einmal die Wahl eintragen $wahlID = (int)$_POST['dorfWahlID']; $mysqli->Query("UPDATE $spielID"."_spieler SET wahlAuf = $wahlID WHERE id = $eigeneID"); //Dann schauen, ob wir schon eine Mehrheit haben $text = ""; $alleSpielerRes = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE lebt = 1"); $anzahlSpieler = $alleSpielerRes->num_rows; while ($temp = $alleSpielerRes->fetch_assoc()) { $w = $temp['wahlAuf']; if (!isset($wahlAufSpieler[$w])) $wahlAufSpieler[$w] = 0; $wahlAufSpieler[$w]+=1; //Falls es der Bürgermeister ist, zusätzliche 1/2 Stimme if ($temp['buergermeister']==1) $wahlAufSpieler[$w]+=0.5; if ($w > -1) { $text .= $temp['name']." -> ". getName($mysqli,$w). ", "; } } $wahlErfolgreich = 0; //Schauen, ob jemand mehr als 50% der Stimmen hat foreach ($wahlAufSpieler as $id => $stimmen) { if ($stimmen > (($anzahlSpieler+0.5)/2) && $id > -1) { //Dieser Spieler hat die Mehrheit 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; break; } } if ($wahlErfolgreich == 0) { //Es gibt keinen Spieler mit absoluter Mehrheit //Nachschauen, ob alle Spieler abgestimmt haben und es genau zwei Spieler mit den meisten Stimmen gibt. $abgestimmtRes = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE lebt = 1 AND wahlAuf = -1"); if ($abgestimmtRes->num_rows > 0) { //Es haben noch nicht alle abgestimmt } else { //Alle haben abgestimmt, nachschauen, wer die meisten Stimmen hat. $maxStimmen = 0; $maxStimmenSpieler = -1; foreach ($wahlAufSpieler as $id => $stimmen) { if ($stimmen > $maxStimmen && $id > -1) { $maxStimmen = $stimmen; $maxStimmenSpieler = $id; } } //Jetzt ermittle den zweiten Spieler $zweitMaxStimmen = 0; $zweitMaxStimmenSpieler = -1; foreach ($wahlAufSpieler as $id => $stimmen) { if ($stimmen > $zweitMaxStimmen && $id != $maxStimmenSpieler && $id > -1) { $zweitMaxStimmen = $stimmen; $zweitMaxStimmenSpieler = $id; } } //Schaue, ob jemand gleich viele Stimmen wie zweitMaxStimmenSpieler hat //Wenn dies der Fall ist, gibt es 3 Kandidaten für eine Stichwahl => Nicht möglich ... $exequo = false; foreach ($wahlAufSpieler as $id => $stimmen) { if ($stimmen >= $zweitMaxStimmen && $id != $maxStimmenSpieler && $id != $zweitMaxStimmenSpieler && $id > -1) { $exequo = true; } } if (!$exequo) { //Starte eine Stichwahl endeDerAbstimmungStichwahl($maxStimmenSpieler,$zweitMaxStimmenSpieler,$mysqli); } } } } echo "
"; echo "

Für welchen der angeklagten Spieler möchten Sie stimmen?

"; echo "

'; echo ""; echo "
"; echo "

Sie möchten für einen anderen Spieler stimmen?

"; echo "

'; echo ""; } } elseif ($phase == PHASESTICHWAHL) { characterButton($mysqli); //Es kommt zu einer Stichwahl echo "

Stichwahl

"; echo "

"; 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()) { //Zeit abgelaufen endeDerStichwahl(-1,$mysqli); toGameLog($mysqli,"Das Dorf konnte sich in der Stichwahl nicht auf einen Spieler einigen, den es töten will."); toAllPlayerLog($mysqli,"Das Dorf konnte sich auch in der Stichwahl nicht auf einen Spieler einigen, den es töten will."); } else { $timerText = "Zeit, bis die Stichwahl erfolglos ist: "; $timerZahl = $eigeneAssoc['countdownBis'] - time()+1; $timerAb = $eigeneAssoc['countdownAb']- time()+1; $aktBeiTime = true; if (isset($_POST['dorfWahlID'])) { //einmal die Wahl eintragen $wahlID = (int)$_POST['dorfWahlID']; $mysqli->Query("UPDATE $spielID"."_spieler SET wahlAuf = $wahlID WHERE id = $eigeneID"); //Dann schauen, ob wir schon eine Mehrheit haben $text = ""; $alleSpielerRes = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE lebt = 1"); $anzahlSpieler = $alleSpielerRes->num_rows; while ($temp = $alleSpielerRes->fetch_assoc()) { $w = $temp['wahlAuf']; if (!isset($wahlAufSpieler[$w])) $wahlAufSpieler[$w] = 0; $wahlAufSpieler[$w]+=1; //Falls es der Bürgermeister ist, zusätzliche 1/2 Stimme if ($temp['buergermeister']==1) $wahlAufSpieler[$w]+=0.5; if ($w > -1) { $text .= $temp['name']." -> ". getName($mysqli,$w). ", "; } } //Schauen, ob jemand mehr als 50% der Stimmen hat foreach ($wahlAufSpieler as $id => $stimmen) { if ($stimmen > (($anzahlSpieler+0.5)/2) && $id > -1) { //Dieser Spieler hat die Mehrheit $mysqli->Query("UPDATE $spielID"."_spieler SET bereit = 1"); 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"); endeDerStichwahl($id,$mysqli); break; } } } echo "
"; echo "

Für welchen der angeklagten Spieler möchten Sie bei der Stichwahl stimmen?

"; echo "

'; echo ""; } } elseif ($phase == PHASESIEGEREHRUNG) { $pageReload=true; echo "

Wir haben einen Sieger!

"; $gameAssoc = gameAssoc($mysqli); $tagestext = $gameAssoc['tagestext']; echo "

$tagestext

"; //Der Spielleiter sollte ein neues Spiel starten können $eigeneAssoc = eigeneAssoc($mysqli); if ($eigeneAssoc['spielleiter']==1) { if (isset($_POST['neuesSpiel'])) { //Starten wir ein neues Spiel $mysqli->Query("UPDATE $spielID"."_game SET spielphase = ".PHASESETUP); $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1"); } echo "

"; } echo ""; echo "Sie sind momentan nicht mit diesem Spiel verknüpft

"; diesesSpielLoeschenButton(); } } else { echo "

Es sieht so aus, als gäbe es das Spiel nicht mehr ...

"; diesesSpielLoeschenButton(); $logButtonAnzeigen = false; } } } else { // Wir befinden uns in keinem Spiel -> //Nachschauen, ob wir bereits ein Spiel erstellen wollen? if (isset ($_POST['neuesSpiel'])) { if ($_POST['neuesSpiel'] == 1) { //nachschauen, ob ein Benutzername angegeben wurde ... $verboteneNamen = array("niemanden","niemand","keinen","keiner","dorfbewohner","werwolf","seher","seherin","hexe","hexer","jäger","amor","beschützer","paranormaler ermittler","lykantroph","lykantrophin","spion","spionin","mordlustiger","mordlustige","pazifist","pazifistin","alter mann","alter","alte","alte frau","die alten","alten"); if (!in_array(strtolower($_POST['ihrName']),$verboteneNamen) && $_POST['ihrName'] != "" && strpos($_POST['ihrName'],"$")===false && strpos($_POST['ihrName'],";")===false && strpos($_POST['ihrName'],'"')===false && strpos($_POST['ihrName'],"'")===false && strpos($_POST['ihrName'],"=")===false) { //Ab und zu alte Spiele löschen if (rand(1,100)==50) loescheAlteSpiele($mysqli); //Wir erstellen ein neues Spiel //Eine Schleife, die solange rennt, bis eine neue Zahl gefunden wurde for ($i = 1; $i <= 100000; $i++) { if ($i == 1000) { //Vielleicht gibt es alte Spiele, die Platz verbrauchen loescheAlteSpiele($mysqli); } $spielID = rand(10000,99999); //nachschauen, ob ein Spiel mit dieser Nummer bereits existiert $res = $mysqli->Query("SELECT * FROM $spielID"."_spieler"); if(isset($res->num_rows)){ //Tabelle existiert }else{ //Tabelle existiert noch nicht //erstellen wir eine neue Tabelle //BEIM HINZUFÜGEN: Auch die SetSpielerDefaultFunction ändern $sql = " CREATE TABLE `$spielID"."_spieler" ."` ( `id` INT( 10 ) NULL, `name` VARCHAR( 150 ) NOT NULL , `spielleiter` INT( 5 ) NULL , `lebt` INT (2) NULL, `wahlAuf` INT ( 5 ) DEFAULT -1 , `angeklagtVon` INT ( 5 ) DEFAULT -1 , `nachtIdentitaet` INT( 10 ) NULL, `buergermeister` INT ( 2 ) DEFAULT 0, `hexeHeiltraenke` INT( 10 ) NULL, `hexeTodestraenke` INT( 5 ) NULL , `hexenOpfer` INT ( 5 ) DEFAULT -1 , `hexeHeilt` INT (2) DEFAULT 0, `beschuetzerLetzteRundeBeschuetzt` INT( 5 ) DEFAULT -1 , `parErmEingesetzt` INT (2) DEFAULT 0 , `verliebtMit` INT ( 5 ) DEFAULT -1 , `jaegerDarfSchiessen` INT (2) DEFAULT 0 , `buergermeisterDarfWeitergeben` INT (2) DEFAULT 0 , `urwolf_anzahl_faehigkeiten` INT ( 5 ) DEFAULT 0, `dieseNachtGestorben` INT (2) DEFAULT 0 , `countdownBis` INT (10) DEFAULT 0 , `countdownAb` INT (10) DEFAULT 0 , `playerlog` LONGTEXT , `popup_text` TEXT , `bereit` INT (2) NULL , `reload` INT (2) NULL , `verifizierungsnr` INT ( 5 ) DEFAULT 0 ) ; "; $mysqli->Query($sql); //Wähle ein Verifizierungs-Passwort aus: //Dieses dient dazu, um festzustellen, ob es tatsächlich der richtige Spieler ist, der eine Seite lädt $verifizierungsnr = rand(2,100000); $stmt = $mysqli->prepare("INSERT INTO $spielID"."_spieler"." (id, name , spielleiter, lebt, reload, verifizierungsnr) VALUES ( 0 , ?, 1 , 0 , 1, ?)"); $stmt->bind_param('si',$_POST['ihrName'],$verifizierungsnr); $stmt->execute(); $stmt->close(); $sql2 = " CREATE TABLE `$spielID"."_game` ( `spielphase` INT( 5 ) DEFAULT 0, `charaktereAufdecken` INT ( 2 ) DEFAULT 0, `buergermeisterWeitergeben` INT ( 2 ) DEFAULT 0, `seherSiehtIdentitaet` INT ( 2 ) DEFAULT 1, `werwolfzahl` INT ( 5 ) DEFAULT 0 , `hexenzahl` INT ( 5 ) DEFAULT 0 , `seherzahl` INT ( 5 ) DEFAULT 0 , `jaegerzahl` INT ( 5 ) DEFAULT 0 , `amorzahl` INT ( 2 ) DEFAULT 0 , `beschuetzerzahl` INT ( 5 ) DEFAULT 0 , `parErmZahl` INT (5) DEFAULT 0 , `lykantrophenzahl` INT ( 5 ) DEFAULT 0 , `spionezahl` INT ( 5 ) DEFAULT 0 , `idiotenzahl` INT ( 5 ) DEFAULT 0 , `pazifistenzahl` INT ( 5 ) DEFAULT 0 , `altenzahl` INT ( 5 ) DEFAULT 0 , `urwolfzahl` INT ( 5 ) DEFAULT 0 , `zufaelligeAuswahl` INT ( 2 ) DEFAULT 0 , `zufaelligeAuswahlBonus` INT ( 5 ) DEFAULT 0 , `werwolfeinstimmig` INT ( 2 ) DEFAULT 1 , `werwolfopfer` INT ( 5 ) DEFAULT -1 , `werwolftimer1` INT ( 10 ) DEFAULT 60 , `werwolfzusatz1` INT ( 10 ) DEFAULT 4 , `werwolftimer2` INT ( 10 ) DEFAULT 50 , `werwolfzusatz2` INT ( 10 ) DEFAULT 3 , `dorftimer` INT ( 10 ) DEFAULT 550 , `dorfzusatz` INT ( 10 ) DEFAULT 10 , `dorfstichwahltimer` INT ( 10 ) DEFAULT 200 , `dorfstichwahlzusatz` INT ( 10 ) DEFAULT 5 , `inaktivzeit` INT ( 10 ) DEFAULT 40 , `inaktivzeitzusatz` INT ( 10 ) DEFAULT 0 , `tagestext` TEXT , `nacht` INT ( 5 ) DEFAULT 1 , `log` LONGTEXT , `list_lebe` LONGTEXT, `list_lebe_aktualisiert` BIGINT DEFAULT 0, `list_tot` LONGTEXT, `list_tot_aktualisiert` BIGINT DEFAULT 0, `waiting_for_others_time` BIGINT, `letzterAufruf` BIGINT ) ;"; $mysqli->Query($sql2); $mysqli->Query("INSERT INTO $spielID"."_game (spielphase, letzterAufruf) VALUES (0 , ".time().")"); //Die SpielID groß mitteilen echo "

$spielID


Mit dieser Zahl können andere deinem Spiel beitreten!"; //Die eigene SpielID setzen setcookie ("SpielID", $spielID, time()+172800); //Dauer 2 Tage, länger sollte ein Spiel nicht dauern ;) setcookie ("eigeneID",0, time()+172800); setcookie ("verifizierungsnr",$verifizierungsnr, time()+172800); $_COOKIE["SpielID"]=$spielID; $_COOKIE["eigeneID"] = 0; $_COOKIE["verifizieren"] = $verifizierungsnr; writeGameToLogSpielErstellen($mysqli,$spielID,$_POST['ihrName']); break; //die Schleife beenden } } $pageReload = true; } else { //kein Name eingegeben! erneut echo "

Sie müssen einen gültigen Namen eingeben

"; start(); } } elseif ($_POST['neuesSpiel'] == 2) { //Der Spieler versucht einem bestehenden Spiel beizutreten $spielID = $_POST['bestehendeSpielnummer']; if ($_POST['ihrName'] != "" && strpos($_POST['ihrName'],"$")===false && strpos($_POST['ihrName'],";")===false && strpos($_POST['ihrName'],'"')===false && strpos($_POST['ihrName'],"'")===false && strpos($_POST['ihrName'],"=")===false) { //Name wurde eingegeben. Existiert auch ein Spiel dieser Nummer? $res = $mysqli->Query("SELECT * FROM $spielID"."_spieler"); if(isset($res->num_rows)) { //Ein Spiel dieser Nummer existiert! $verboteneNamen = array("niemanden","niemand","keinen","keiner","dorfbewohner","werwolf","seher","seherin","hexe","hexer","jäger","amor","beschützer","paranormaler ermittler","lykantroph","lykantrophin","spion","spionin","mordlustiger","mordlustige","pazifist","pazifistin","alter mann","alter","alte","alte frau","die alten","alten"); //Nachschauen, ob mein Name noch nicht vorkommt... $stmt = $mysqli->prepare("SELECT * FROM $spielID"."_spieler WHERE name = ?"); $stmt->bind_param('s',$_POST['ihrName']); $stmt->execute(); $nameRes = $stmt->get_result(); if ($nameRes->num_rows <= 0 && !in_array(strtolower($_POST['ihrName']),$verboteneNamen)) { //Name gültig //Finde eine freie ID for ($i = 1; $i <= _MAXPLAYERS; $i++) { $res = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE id = $i"); //echo "SELECT * FROM $spielID"."_spieler WHERE id = $i"; if(isset($res->num_rows)) { if ($res->num_rows > 0) { //Es existiert bereits ein Spieler mit dieser ID --> weiter //echo "existiert
"; } else { //Es existiert kein Spieler mit dieser ID --> lege an //Wähle ein Verifizierungs-Passwort aus: //Dieses dient dazu, um festzustellen, ob es tatsächlich der richtige Spieler ist, der eine Seite lädt $verifizierungsnr = rand(2,100000); // 0 als Standard darf nicht vorkommen $stmt = $mysqli->prepare("INSERT INTO $spielID"."_spieler"." (id, name , spielleiter, reload, verifizierungsnr) VALUES ( ? , ?, 0 , 1, ?)"); $stmt->bind_param('isi', $i, $_POST['ihrName'], $verifizierungsnr); $stmt->execute(); $stmt->close(); echo "

Sie sind dem Spiel erfolgreich beigetreten!

"; setcookie ("SpielID", $spielID, time()+172800); setcookie ("eigeneID",$i, time()+172800); setcookie ("verifizierungsnr",$verifizierungsnr, time()+172800); $_COOKIE["SpielID"]=$spielID; $_COOKIE["eigeneID"] = $i; $_COOKIE["verifizierungsnr"] = $verifizierungsnr; $eigeneID = $i; break; //die Schleife beenden } } else { //Dieser Punkt sollte eigentlich nicht erreicht werden, da num_rows definiert sein müsste echo "
ERROR 0001: num_rows ist aus irgendeinem Grund nicht definiert
"; } } $pageReload = true; //Ein neuer Spieler ist dem Spiel beigetreten, wenn wir uns also in der Spielphase 0 = Spielersuchen //befinden, aktualisiere mich --> Die anderen zu aktualisieren ist nicht notwendig, da sie sowieso über javascript die Liste aktualisieren $mysqli->Query("UPDATE $spielID"."_spieler SET reload = 1 WHERE id = $eigeneID"); } else { echo "

Der angegebene Name ist bereits vorhanden oder ungültig

"; } $stmt->close(); } else { //Es existiert kein Spiel mit dieser Nummer --> Neustart echo "

Es existiert kein Spiel mit dieser Nummer!

"; start(); } } else { //kein Name eingegeben --> neustart echo "

Sie müssen einen gültigen Namen eingeben

"; start(); } } } else { start(); } } //Schauen, ob wir uns bereits in einem Spiel befinden! if (isset($_COOKIE['SpielID']) && isset($_COOKIE['eigeneID']) && $logButtonAnzeigen) { //Wenn ja, zeige Logbutton an playerLogButton($mysqli); //Der Spielleiter sollte die Möglichkeit bekommen, einen Spieler aus dem Spiel zu werfen (weil z.B. inaktiv) if (isset($eigeneID) && isset($spielID)) { $res = $mysqli->Query("SELECT * FROM $spielID"."_spieler WHERE id = $eigeneID AND spielleiter = 1"); if ($res->num_rows > 0) { echo "

"; echo ""; } } } ?>

Löst oft viele Probleme:

/* 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) */