anpera.net
http://anpera.homeip.net/phpbb3/

setnewday
http://anpera.homeip.net/phpbb3/viewtopic.php?f=34&t=5324
Seite 1 von 1

Autor:  Jack [ Fr 01 Apr, 2011 16:11 ]
Betreff des Beitrags:  setnewday

Hey

Serber ist noch immer off ;)

In der setnewday hab ich folgenden Code stehen

$this->bbcode_second_pass_code('', 'db_query("UPDATE `accounts` SET `osterei`='osterei+1' WHERE `osternaktiv`='1' AND WHERE `osterei`>='0'");
db_query("UPDATE `accounts` SET `osternaktiv`='2' WHERE `osternaktiv`='1' AND WHERE `osterei`='6'");
db_query("UPDATE `accounts` SET `osterei`='osterei+1' WHERE `osternaktiv`='2' AND WHERE `osterei`>='1'");
db_query("UPDATE `accounts` SET `osterei`='0' WHERE `osternaktiv`='2' AND WHERE `osterei`='12'");')

Er wird aber nicht aufgerufen. Obwohl er sogar am Anfang der setnewday steht.

Bzw er wird vkll. aufgerufen. Es zählt aber in der DB nichts hoch O.o

Autor:  Linus [ Fr 01 Apr, 2011 18:19 ]
Betreff des Beitrags:  Re: setnewday

Ist vielleicht nur ein Spieler online, und der löst den setnewday aus?

Was passiert bei einem Klick, bzw. einem Schritt, im LogD? accounts wird aus der DB gelesen -> PHP-Script wird ausgeführt -> accounts wird gespeichert. Die Setnewday kommt ergo zwischen Laden und Speichern der accounts-Tabelle dran, und die Änderungen, welche die setnewday gemacht hat, werden wieder überschrieben. So wird es leider nicht funktionieren!

Normal würde ich so etwas in die newday.php einbauen, und dann mit $session['user'] arbeiten, anstatt mit DB-Querys. Allerdings wird der Code dann nur bei neuen Tagen greifen, die der Charakter auch erlebt, nicht wenn er offline ist. ;)

Autor:  anpera [ Fr 01 Apr, 2011 22:06 ]
Betreff des Beitrags:  Re: setnewday

Schau dir deine SQL-Abfragen nochmal durch. Da sind etliche Fehler drin.

Welchen Typ haben die Felder "osterei" und "osternaktiv" in der Datenbank? Varchar? Int?

Was genau willst du in die Felder schreiben, was soll es bewirken? Willst du einen Wert erhöhen, oder eine mathematische Formel in die Datenbank schreiben? Achte auf deine Anführungszeichen und passe den Befehl an den Typ der Datenfelder an.

Nach "AND" kommt kein "WHERE".

Autor:  Linus [ Fr 01 Apr, 2011 23:34 ]
Betreff des Beitrags:  Re: setnewday

Stimmt, Asche auf mein Haupt! Das WHERE habe ich vollkommen übersehen!

Autor:  Jack [ Sa 02 Apr, 2011 11:24 ]
Betreff des Beitrags:  Re: setnewday

Nein. das ostereier = ostereier+1 soll den aktuellen Wert um 1 erhöhen

Zwecks Int oder Varchar. Da es Int ist, schätze ich mal, dass die ' ' falsch sind. Denn mir ist aufgefallen Gold oder Gems benötigen kein ' ' und die sind ja int

$this->bbcode_second_pass_code('', 'db_query("UPDATE `accounts` SET `osterei`=osterei+1 WHERE `osternaktiv`=1 AND `osterei`>=0");
db_query("UPDATE `accounts` SET `osternaktiv`=2 WHERE `osternaktiv`=1 AND `osterei`=6");
db_query("UPDATE `accounts` SET `osterei`=osterei+1 WHERE `osternaktiv`=2 AND `osterei`>=1");
db_query("UPDATE `accounts` SET `osterei`=0 WHERE `osternaktiv`=2 AND `osterei`=12");')

Das heißt so müsste es sein, wenn...

... es die Anzahl der Ostereier um 1 erhöhen soll, wenn Osternaktiv = 1 imd Ostereier >=0 (der Zusatz ist eig unnötig kommt mir grad)

... es Osternaktiv auf 2 setzen soll, falls man 6 Ostereier hat

.. es die Antahl der Ostereier erhöhen soll, wenn osteraktiv auf 2 steht

.. es die Anzahl der Ostereier auf 0 setzen soll, wenn Osteraktiv auf 2 und osterei auf 12 ist

Oder sind da noch immer Fehler?


Dann ein anderes. Die Setnewday wird bei mir merkwürdigerweiße zu jedem newday ausgeführt.. Ich schätze mal das, was dafür nötig ist ist das hier

$this->bbcode_second_pass_code('', ' $lastnewdaysemaphore = convertgametime(strtotime(getsetting("newdaysemaphore","0000-00-00 00:00:00")));
$gametoday = gametime();

if (date("Ymd",$gametoday)!=date("Ymd",$lastnewdaysemaphore)){
$sql = "LOCK TABLES settings WRITE";
db_query($sql);

$lastnewdaysemaphore = convertgametime(strtotime(getsetting("newdaysemaphore","0000-00-00 00:00:00")));

$gametoday = gametime();
if (date("Ymd",$gametoday)!=date("Ymd",$lastnewdaysemaphore)){
//we need to run the hook, update the setting, and unlock.
savesetting("newdaysemaphore",date("Y-m-d H:i:s"));
$sql = "UNLOCK TABLES";
db_query($sql);

require_once "setnewday.php";

}else{
//someone else beat us to it, unlock.
$sql = "UNLOCK TABLES";
db_query($sql);
output("Somebody beat us to it");
}
}')

Einen Fehler kann ich darin aber nicht entdecken (Server läuft auf PHP5 und MySQL 5)

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/