anpera.net https://anpera.dyndns.org/phpbb3/ |
|
InGame-Datum-Wechsel https://anpera.dyndns.org/phpbb3/viewtopic.php?f=34&t=5074 |
Seite 1 von 1 |
Autor: | vernisage [ Di 19 Jan, 2010 12:55 ] |
Betreff des Beitrags: | InGame-Datum-Wechsel |
Hallo Freunde, Ich habe die Suche benutzt, doch entweder nicht richtig oder aber mir wurde das, was ich suche, nicht angezeigt. Ich möchte (wie viele Andere es bereits bei sich schon laufen haben), dass mein Ingame-Datum um 0 Uhr auf das nächste Datum springt, und nicht, wie es jetzt ist, mit jedem neuen Spieltag. Habe bei mir zugelassen, dass es alle 4h n neuen Tag gibt, - demzufolge ist alle 4 Stunden das Ingame-Datum natürlich um einen Tag vorgerückt. Ihr wisst, was ich meine, nicht wahr? Ich muss das in der configuration machen, hab ich Recht? Oder in der common bei gamedate? $this->bbcode_second_pass_code('', '// Gamedate-Mod by Chaosmaker function getgamedate() { $date = explode('-',getsetting('gamedate','0005-01-01')); $find = array('%Y','%y','%m','%n','%d','%j'); $replace = array($date[0],sprintf('%02d',$date[0]%100),sprintf('%02d',$date[1]),(int)$date[1],sprintf('%02d',$date[2]),(int)$date[2]); return str_replace($find,$replace,getsetting('gamedateformat','%Y-%m-%d')); }') Das mal das, was bei mir steht... Damit hat es sicher zu tun *flöt*... Könnte da Hinweise gebrauchen Vielen lieben Dank Gruß, verni ![]() |
Autor: | Patzue [ Di 19 Jan, 2010 14:17 ] |
Betreff des Beitrags: | Re: InGame-Datum-Wechsel |
Hmm.. ich weiß nur wie man das aktuelle Datum ausgibgt (also echtzeit datum) $this->bbcode_second_pass_code('', 'date('d.m.Y')') das würde für heute 19.01.2010 ausspucken.. |
Autor: | vernisage [ Di 19 Jan, 2010 14:22 ] |
Betreff des Beitrags: | Re: InGame-Datum-Wechsel |
Das mein ich leider nicht. Ich will ja nicht das heutige Datum, sondern mein "Themendatum", verstehst du? Das muss doch irgendwie gehen? Hab nun auch in der setnewday die Anzeige gesehen, aber leider... guck ich da einfach nur doof -.- |
Autor: | Harthas [ Di 19 Jan, 2010 14:44 ] |
Betreff des Beitrags: | Re: InGame-Datum-Wechsel |
In common.php: $this->bbcode_second_pass_code('', '$arrMonth = array( ); $arrMonth[1] = 'Januar'; $arrMonth[2] = 'Februar'; $arrMonth[3] = 'März'; $arrMonth[4] = 'April'; $arrMonth[5] = 'Mai'; $arrMonth[6] = 'Juni'; $arrMonth[7] = 'Juli'; $arrMonth[8] = 'August'; $arrMonth[9] = 'September'; $arrMonth[10] = 'Oktober'; $arrMonth[11] = 'November'; $arrMonth[12] = 'Dezember';') $this->bbcode_second_pass_code('', 'function setgamedate() { $wann = 654; //Das Datum vor wie vielen Jahren? $start = mktime(0,0,0,1,1,2006); //Irgendwo solls ja anfange, ne? $jetzt = time(); //Momentane Zeit $diff = getdate( $jetzt - $start );//Die Differenz $tag = 0 + $diff['mday']; //Der Tag $monat = 0 + $diff['mon'];//... Monat $jahr = $diff['year'] - $wann;//und das Jahr $date = sprintf( '%04d-%02d-%02d' , $jahr , $monat , $tag ); savesetting( 'gamedate' , $date ); }') Zudem, ersetze die Funktion getgamedate mit folgender: $this->bbcode_second_pass_code('', 'function getgamedate() { global $arrMonth; $date = explode('-',getsetting('gamedate','0005-01-01')); $date[1] = str_replace( '0' , '' , $date[1] ); if ( substr( $date[1] , 0 , 1 ) == '0' ) { $date[1] = substr( $date[1] , 1 , 1 ); } if ( substr( $date[2] , 0 , 1 ) == '0' ) { $date[2] = substr( $date[2] , 1 , 1 ); } return = $date[2].'. '.$arrMonth[$date[1]].' '.$date[0]; }') In setnewday.php ersetze: $this->bbcode_second_pass_code('', '// Gamedate-Mod by Chaosmaker if(getsetting('activategamedate', 0) == 1) { $date = getsetting('gamedate', '0000-01-01'); $date = explode('-', $date); $date[2]++; switch($date[2]) { case 32: $date[2] = 1; $date[1]++; break; case 31: if(in_array($date[1], array(4, 6, 9, 11))) { $date[2] = 1; $date[1]++; } break; case 30: if($date[1] == 2) { $date[2] = 1; $date[1]++; } break; case 29: if($date[1] == 2 && ($date[0] % 4 != 0 || ($date[0] % 100 == 0 && $date[0] % 400 != 0))) { $date[2] = 1; $date[1]++; } } if($date[1] == 13) { $date[1] = 1; $date[0]++; } $date = sprintf('%04d-%02d-%02d', $date[0], $date[1], $date[2]); savesetting('gamedate', $date); }') Mit: $this->bbcode_second_pass_code('', 'if(getsetting('activategamedate', 0) == 1) { setgamedate(); }') Das ganze ist inzwischen ungetestet, und bereits etwa 2 Jahre alt. Aber vielleicht funktionierts ja. |
Autor: | vernisage [ Di 19 Jan, 2010 15:04 ] |
Betreff des Beitrags: | Re: InGame-Datum-Wechsel |
Ich glaub, so ganz haut es noch nicht hin. Das einzigste, was sich geändert hat, ist der Monatsname, der ausgeschrieben dasteht. Ansonsten blieb das Datum wie es war. Hatte es in der Db bei settings mal auf 0000-00-00 eingestellt, aber das hatte auch nichts gebracht. |
Autor: | Harthas [ Di 19 Jan, 2010 15:27 ] |
Betreff des Beitrags: | Re: InGame-Datum-Wechsel |
Du musst natürlich auch noch darauf warten, dass die setnewday.php ausgeführt wird. Also wenn dein nächster regulärer Tag / Tagesabschnitt beginnt. Erst da wird das Datum neu gesetzt. Theoretisch könntest du die Funktion setgamedate(); natürlich auch einfach in die common.php setzen, sofern die neuen Tage / Tagesabschnitte nicht direkt um 00 / 4 / 8 / 12 / 16 / 20 Uhr beginnen, wäre das sogar etwas sinnvoller. Aber eigentlich ist's egal. |
Autor: | vernisage [ Di 19 Jan, 2010 16:10 ] |
Betreff des Beitrags: | Re: InGame-Datum-Wechsel |
Schon fast gut (glaube) Nur stimmen die Werte nicht. Ich habe bei dem $wann 289 als Diff zum Jahre 2010 eingetragen (was bei $start steht). Normalerweise hätte mir das Jahr 1721 angezeigt werden sollen, tat es aber nicht, sondern das Jahr 1685. Was eine Diff von 325 ergibt. Nicht der Wert, den ich eingetragen habe ... Seltsamer weise blieb mein "Datum, sprich 19. Januar, erhalten. (?) $this->bbcode_second_pass_code('', 'function setgamedate() { $wann = 289; //Das Datum vor wie vielen Jahren? $start = mktime(0,0,0,1,1,2010); //Irgendwo solls ja anfange, ne? $jetzt = time(); //Momentane Zeit $diff = getdate( $jetzt - $start );//Die Differenz $tag = 0 + $diff['mday']; //Der Tag $monat = 0 + $diff['mon'];//... Monat $jahr = $diff['year'] - $wann;//und das Jahr $date = sprintf( '%04d-%02d-%02d' , $jahr , $monat , $tag ); savesetting( 'gamedate' , $date ); }') Wo hakt es noch? |
Autor: | Harthas [ Di 19 Jan, 2010 16:58 ] |
Betreff des Beitrags: | Re: InGame-Datum-Wechsel |
Zur Zeit hat das Skript noch das Gefühl, dass es mit dem Jahr 1970 als Basis arbeiten soll. Weiter zurück geht der UNIX-Timestamp leider nicht. Ich habe ja gesagt, dass das Ganze bereits sehr alt ist, und absolut nicht durchdacht. Ersetze $this->bbcode_second_pass_code('', ' $jahr = $diff['year'] - $wann;//und das Jahr') Mit $this->bbcode_second_pass_code('', ' $jahr = date( 'Y' ) - $wann;//und das Jahr') |
Autor: | vernisage [ Di 19 Jan, 2010 17:04 ] |
Betreff des Beitrags: | Re: InGame-Datum-Wechsel |
Das Kuriose ist, ich habe nun anstelle von 289 ($wann) die Zahl 249 eingetragen (als Differenzwert) - und nun blieb mir das Jahr, was ich mir wünschte, erhalten. Ich werd mal noch ein paar Tage abwarten, was da jetzt passiert. Ansonsten versuche ich mich an deinem letzten Tipp. EDIT: .... Leider springt er mir bei Neutag sofort auf einen weiteren Tag. In meiner Datei steht es so: $this->bbcode_second_pass_code('', 'function setgamedate() { $wann = 249; //Das Datum vor wie vielen Jahren? $start = mktime(0,0,0,0,0,2010); //Irgendwo solls ja anfange, ne? $jetzt = time(); //Momentane Zeit $diff = getdate( $jetzt - $start );//Die Differenz $tag = 0 + $diff['mday']; //Der Tag $monat = 0 + $diff['mon'];//... Monat $jahr = $diff['year'] - $wann;//und das Jahr $date = sprintf( '%04d-%02d-%02d' , $jahr , $monat , $tag ); savesetting( 'gamedate' , $date ); }') Falsch?? |
Autor: | MySql [ Fr 22 Jan, 2010 01:23 ] |
Betreff des Beitrags: | Re: InGame-Datum-Wechsel |
Wieso so viel Code? ![]() Mach in der "setnewday.php" doch einfach eine Abfrage, ob wir in Real 0 Uhr haben. Sollte dies "wahr" sein, wird das Datum um einen Tag verlängert. Sollte es "unwahr" also "falsch" sein, wird gewartet, bis wir 0 Uhr haben. Ich hoffe, ich konnte helfen. (Und hoffe, ich habe den Thread nicht falsch verstanden. ![]() |
Autor: | Eliwood [ Fr 22 Jan, 2010 10:56 ] |
Betreff des Beitrags: | Re: InGame-Datum-Wechsel |
Und dann, wenn um 0 Uhr mal niemand Online ist, wird ein neuer Tag übersprungen. Ich würde das sowieso anders ansetzen. Warum eine setgameday verwenden, wenn man sich sowieso auf reale Tage beziehen will? Es reicht, wenn wir hier die getgamedate() bearbeiten: $this->bbcode_second_pass_code('', 'function getgamedate() { # Get today's date $date = explode('-', date('Y-m-d')); # Calculate new year $date[0] = $date[0]-getsetting('year_difference', 0); return implode('-', $date); }') Das kann - und sollte man - noch um Formatierungsmöglichkeiten erweitern, so dass man das Datum auch mal "deutsch" ausgeben kann (Also d. m. Y), oder wahlweise mit ausgeschriebenem Monat... Der Nachteil dieser Funktion ist: Die Wochentage stimmen natürlich je nach Differenz nicht überein. Und die Schalttage ebenso nicht. Letzteres Problem kann man umgehen, in dem man nur Differenzen abzieht, die durch 400 Teilbar sind, das schränkt aber die Möglichkeiten ziemlich ein. Und die richtigen Wochentage könnte man sich über die Wochentags-Formel berechnen lassen. |
Autor: | vernisage [ So 24 Jan, 2010 11:02 ] |
Betreff des Beitrags: | Re: InGame-Datum-Wechsel |
Ich hab das dann schlussendlich ganz stinkefaul anders gemacht. Habe date("G:i") genommen und mein gewünschtes Jahr via Hand eingetragen. Ich weiß, unschön.... aber erstmal tut es das *räusper* ![]() |
Seite 1 von 1 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |