anpera.net https://anpera.homeip.net/phpbb3/ |
|
Ehepartner erwecken https://anpera.homeip.net/phpbb3/viewtopic.php?f=34&t=2940 |
Seite 1 von 1 |
Autor: | Lestat [ Mi 27 Sep, 2006 16:12 ] |
Betreff des Beitrags: | Ehepartner erwecken |
Hallo zusammen, aus Balancegründen (auf die ich jetzt nicht näher eingehen will) wollte ich bei meinem Server den Spielern, welche durch ihren Ehepartner erweckt werden sämtliche Grabkämpfe entziehen. Hierzu habe ich den Accounts das Feld "wurdeerweckt" hinzugefügt, welches standardmässig auf 0 gesetzt ist, und bei der erweckung durch den Ehepartner auf 1 gesetzt wird. Dann nur noch einen kleinen Codeschnipsel in der newday.php [php]//by Lestat $sql = "SELECT wurdeerweckt FROM accounts WHERE acctid=".$session[user][acctid].""; $result = db_query($sql) or die(db_error(LINK)); $row = db_fetch_assoc($result); if($row[wurdeerweckt]){ $sql = "UPDATE accounts SET wurdeerweckt=0 WHERE acctid=".$session[user][acctid].""; db_query($sql) or die(db_error(LINK)); $session['user']['gravefights']=0; $session['user']['spirits'] = -6; }[/php] Vielleicht nicht der einfachste Weg, aber es hat funktioniert.. auf dem Testserver.. Im laufenden Betrieb auf dem Server stellt sich nun aber heraus, dass es recht häufig vorkommt, dass die User immer noch ihre Grabkämpfe haben, obwohl sie die ja nicht haben sollten. Also manchmal wird der Codeblock ausgeführt, manchmal aber auch nicht.. Woran könnte das liegen? |
Autor: | Eliwood [ Mi 27 Sep, 2006 16:47 ] |
Betreff des Beitrags: | |
Wiederbelebung findet aber trotzdem statt? |
Autor: | Lestat [ Mi 27 Sep, 2006 16:52 ] |
Betreff des Beitrags: | |
Ja, an der habe ich ja praktisch fast nichts verändert.. (die aus der shrine.php) ich setze lediglich zusätzlich "wurdeerweckt" auf 1.. Tests habe jetzt ergebe, dass das Flag auch tatsächlich gesetzt wird, aber warum dann nichts passiert, bzw. bis zur ausführung dieses Codeschnippsels das Flag wieder auf 0 steht kann ich echt nicht nachvollziehen ![]() |
Autor: | Eliwood [ Mi 27 Sep, 2006 16:56 ] |
Betreff des Beitrags: | |
Gut - Also immerhin kein Transferbug =P "wurdeerweckt" musst du noch im session-Array auf 0 setzen. Sonst würde es überschrieben werden. Bleiben denn die Grabkämpfe trotzdem? Oder ist es nur das Feld? Wo hast du es eingebaut? |
Autor: | Lestat [ Mi 27 Sep, 2006 17:00 ] |
Betreff des Beitrags: | |
Eliwood hat geschrieben: Gut - Also immerhin kein Transferbug =P "wurdeerweckt" musst du noch im session-Array auf 0 setzen. Sonst würde es überschrieben werden. Äh? Das wird wohl das Problem sein.. wo genau ist das zu machen? Eliwood hat geschrieben: Bleiben denn die Grabkämpfe trotzdem? Oder ist es nur das Feld?
Wo hast du es eingebaut? Die Grabkämpfe bleiben.. und ich habe es erst eingebaut nachdem die Grabkämpfe wieder auf Standard gesetzt werden ![]() |
Autor: | Eliwood [ Mi 27 Sep, 2006 17:04 ] |
Betreff des Beitrags: | |
Da: [php]if($row[wurdeerweckt]){ $sql = "UPDATE accounts SET wurdeerweckt=0 WHERE acctid=".$session[user][acctid].""; db_query($sql) or die(db_error(LINK)); $session['user']['gravefights']=0; $session['user']['spirits'] = -6; } [/php] wurdeerweckt steckt ebenso im Array $session['user']. Und wenn das 1 ist, dann bleibt das 1, da die Funktion saveuser() das ganze wieder überschreibt. Anderseits könnte es sein, dass das ganze in einem Kontext steht, der selbst nicht immer aufgerufen wird... // Scheint nicht der Fall zu sein. |
Autor: | Lestat [ Mi 27 Sep, 2006 17:10 ] |
Betreff des Beitrags: | |
Achso hast du das gemeint *g* ich hatte es zunächst auch so [php] if($session[user][wurdeerweckt]==1){ $session[user][wurdeerweckt]=0; $session[user][gravefights]=0; $session[user][spirits] = -6; }[/php] aber dann hat es nie funktioniert, was mich ehrlich gesagt schon ziemlich verwundert hatte. |
Autor: | Lestat [ Mi 27 Sep, 2006 17:30 ] |
Betreff des Beitrags: | |
Nachtrag: Habe nun folgendes in der newday.php stehen: [php] output("`n`n`\$DEBUG: vorher Grabkämpfe: ".$session[user][gravefights]."`nErwecktflag: ".$session[user][wurdeerweckt]."`n`n"); if($session[user][wurdeerweckt]==1){ $session[user][wurdeerweckt]=0; $session[user][gravefights]=0; $session[user][spirits] = -6; } output("`n`n`\$DEBUG: nachher Grabkämpfe: ".$session[user][gravefights]."`nErwecktflag: ".$session[user][wurdeerweckt]."`n`n");[/php] Das führt zu folgender Ausgabe: "DEBUG: vorher Grabkämpfe: 10 Erwecktflag: 0" wobei der Rest ja nicht interessiert, da das Flag ja auf 0 steht. aber warum? ![]() Edit: Werden nicht sämtliche Felder aus der Accounts-Tabelle beim Login in die $session[user] geladen? Also ich bin echt ratlos Edit²: Man man.. ich stand echt aufm Schlauch.. wenn der zu erweckende ausgeloggt ist während der erweckung funktioniert es. Klar.. solange er noch eingeloggt ist, wird vor der newday.php ja auf jeden Fall noch einmal die page_footer() aufgerufen, welche das Flag wieder auf Null setzt, und somit die ganze Aktion zunichte macht. Nun ist die Frage: Kann ich das verhindern, und wenn ja, wie? *Eli anschiel* ![]() |
Autor: | Eliwood [ Mi 27 Sep, 2006 18:00 ] |
Betreff des Beitrags: | |
Kurz vor page_footer (Oder in page_footer): [php]unset($session['user']['wurdeerweckt']);[/php] |
Autor: | Lestat [ Mi 27 Sep, 2006 18:10 ] |
Betreff des Beitrags: | |
Eliwood hat geschrieben: Kurz vor page_footer (Oder in page_footer):
[php]unset($session['user']['wurdeerweckt']);[/php] Habe ich erst auch gedacht, dass man das rausnehmen muss, danke ![]() Aber andererseits will ich bei der Newday ja, dass ers beim footer zurückschreibt.. von daher schiess ich mir da wieder ins Bein, oder? Könnte es aber sein, dass deine Antitransferbugmethode http://anpera.homeip.net/forum/viewtopic.php?t=2590 hier weiterhilft? |
Autor: | Eliwood [ Mi 27 Sep, 2006 18:17 ] |
Betreff des Beitrags: | |
Lestat hat geschrieben: Eliwood hat geschrieben: Kurz vor page_footer (Oder in page_footer): [php]unset($session['user']['wurdeerweckt']);[/php] Habe ich erst auch gedacht, dass man das rausnehmen muss, danke ![]() Aber andererseits will ich bei der Newday ja, dass ers beim footer zurückschreibt.. von daher schiess ich mir da wieder ins Bein, oder? Könnte es aber sein, dass deine Antitransferbugmethode http://anpera.homeip.net/forum/viewtopic.php?t=2590 hier weiterhilft? Jein. Obige Möglichkeit mit unset geht. DU schreibst es ja von Hand in die Datenbank. Also wird das von dort übernommen. Meine "Transferbugverrinerugnsmethode" lässt nur in die Datenbank schreiben, wenn etwas wirklich verändert wurde. Ob das hier der Fall ist vermag ich nicht nachvollziehen. |
Autor: | Lestat [ Mi 27 Sep, 2006 18:19 ] |
Betreff des Beitrags: | |
Ich versuche mal beides aus. Vielen Dank für die Hilfe! ![]() |
Autor: | Tidus [ Mi 27 Sep, 2006 18:23 ] |
Betreff des Beitrags: | |
das unset sollte aber auch mit anderen db feldern wie zufällig hmmm fähigkeiten in der newday.php funktionieren oder? *g* |
Autor: | Eliwood [ Mi 27 Sep, 2006 18:27 ] |
Betreff des Beitrags: | |
Tidus hat geschrieben: das unset sollte aber auch mit anderen db feldern wie zufällig hmmm fähigkeiten in der newday.php funktionieren oder? *g*
Mit unset löschst du einfach Variablen. Nicht mehr - nicht weniger ![]() Und wos nichts gibt, lässt sich nichts speichern... *g* |
Autor: | Lestat [ Mi 27 Sep, 2006 19:21 ] |
Betreff des Beitrags: | |
Nochmal Tausend Dank Eli.. das unset an den richtigen Stellen und schon funktioniert es wie es soll.. auch ohne direkt auf die Datenbank zuzugreifen. ![]() ![]() |
Seite 1 von 1 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |