Hay,
da ich nun 'endlich' wieder etwas Zeit für die Programmierung eines LotGD's gefunden habe,möchte ich doch einfach mal mein 'neustes' Spielzeug veröffentlichen.
Gewiss , werden nun einige, wie vielleicht Eliwood sagen: Das hätte man aber besser lösen können.
Ich habe lange nichts mehr in Sachen php etc. pp. gemacht und das 'Tool' funktioniert einwandfrei! Ohne Fehler ohne alles. Demnach ist es okay so.Also, was ist es?
Wie viele ja von uns wissen, gibt es in LotGD natürlich auch das aktuelle Datum. Das ist auch totalokay. Nur finde, bzw. fand ich, dass man dann auch Wochentage haben sollte.
Also habe ich eine Funktion geschrieben, die den aktuellen Wochentag ermittelt. Angefangen wird Montag, dem
01.01.0000. Danach wird systemmatisch ein neuer Wochentag in der Datenbank abgespeichert und kann abgerufen werden. (Gespeichert in der setnewday.php)
Das meiste Kopfzerbreichen hat mir folgendes bereitet:
So Joel, nun hast Du jedem Tag im Jahr einen Wochentag zugeteilt. Das Jahr endet mit Montag, dem 31.12.XXXX. Aber dann hat der darauffolgende Tag, also der 01.01.XXXX auch wieder Montag als Wochentag. Warum? Weil der Server ja nicht wissen kann, dass der vorige Tag ein Montag war.
-editiert- .Du musst mittels des Jahres errechnen wieviele Tage (Ingame-Tage) es schon gab.
Also hab ich mich dran gesetzt und habe dank der Funktion
substr(), dass aktuelle Jahr ausgefiltert und * 365 genommen. Und so wusste ich wieviele Tage es dann gab. Ääääh, ne.. Doch nicht so ganz. Wir können zwar das Jahr '12' haben, allerdings.. wenn wir dann Beisp. den 12.04.0012 haben, sagt mir die Variable nur, dass es bereits 4380 Tage gab. (Ingame) Aber dies würde ja dann nur auf den 31.12.0011 zutreffen. Also musste ich hier nun noch ein bisschen rumrechnen lassen &' hatte dann letztendlich die Lösung.
Egal, nun gehts aufjedenfall weiter.
Es gibt 'leider' keine Schaltjahre! Nur normale 365 Tage's Jahre.Dazu kommt noch etwas:
01.
01.0000
Genau, hier habe ich den Monat dick geschrieben. Wenn man schon einen Wochentag im Spiel hat, so finde ich, sollte es auch den dazugehörigen Monat geben. Dieser wird in einer eigenen Funktion ermittelt. (Dieser wird nicht in der Datenbank gespeichert, daher es ja nur 12 Monate gibt.) Die Funktion stelle ich hier nun auch zur Verfügung.
Beisp. um den aktuellen Spieltag anzuzeigen:
$this->bbcode_second_pass_code('', 'getsetting('DAY');')
So wird der aktuelle Wochentag angezeigt, daher er in der 'setting' Tabelle gespeichert wird.
Änderugen in der setnewday.php:
Suche:
$this->bbcode_second_pass_code('', ' $date = sprintf('%04d-%02d-%02d',$date[0],$date[1],$date[2]);
savesetting('gamedate',$date);
}')
Füge danach ein:
$this->bbcode_second_pass_code('', 'setDay();')
Function setDay():
$this->bbcode_second_pass_code('', 'function setDay($full_day = TRUE) {
$explode_informations = explode('.', getgamedate());
if ($full_day == TRUE) {
$day_arr = array('Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag','Sonntag');
}
elseif ($full_day == FALSE) {
$day_arr = array('Mo.','Di.','Mi.','Do.','Fr.','Sa.','So.');
}
$month_arr = array('1' => 31,'2' => 28,'3' => 31,'4' => 30,'5' => 31,'6' => 30,'7' => 31,'8' => 31,'9' => 30,'10' => 31,'11' => 30,'12' => 31);
$day = $month_arr[$explode_informations[1]]-$explode_informations[0];
$number = 0;
for ($x = 0;$x < $explode_informations[1];$x++) {
$counter++;
$number += $month_arr[$counter];
}
$number -= $day;
if ($explode_informations[2] != '0000') {
if (substr($explode_informations[2], 0, 3) == '000') {
$year = substr($explode_informations[2], -1);
}
elseif (substr($explode_informations[2], 0, 2) == '00') {
$year = substr($explode_informations[2], -2);
}
elseif (substr($explode_informations[2], 0, 1) == '0') {
$year = substr($explode_informations[2], -3);
}
else {
$year = $explode_informations[2];
}
$days = $year*365;
$days += $number;
}
elseif ($explode_informations[2] == '0000') {
$days = $number;
}
$arr = array();
for ($x = 0;$x < $days;$x++) {
$count++;
$dcount++;
if ($dcount == 8) {
$dcount=0;
$dcount++;
}
$arr[$count] = $day_arr[$dcount-1];
}
$day = $arr[$days];
savesetting('DAY', $day);
}')
Beisp. zur Verwendung der Funktion 'getMonth():
$this->bbcode_second_pass_code('', 'getMonth();
Ausgabe:
Januar (Wenn Monat '1' / '01')
getMonth(FALSE);
Ausgabe:
Jan (Wenn Monat '1' / '01')')
Funktion getMonth():
$this->bbcode_second_pass_code('', 'function getMonth($month_full = TRUE) {
$explode_informations = explode('.', getgamedate());
if ($month_full == TRUE) {
$month_arr = array('1' => 'Januar','2' => 'Februar','3' => 'März','4' => 'April','5' => 'Mai','6' => 'Juni','7' => 'Juli','8' => 'August','9' => 'September','10' => 'Oktober','11' => 'Novermber','12' => 'Dezermber');
}
else if ($month_full == FALSE) {
$month_arr = array('1' => 'Jan.','2' => 'Feb.','3' => 'Mär.','4' => 'Apr.','5' => 'Mai','6' => 'Jun.','7' => 'Jul.','8' => 'Aug.','9' => 'Sep.','10' => 'Okt.','11' => 'Nov.','12' => 'Dez.');
}
return $month_arr[$explode_informations[1]];
}')
Lg,
MySQL.
P.S.:Feedback gerne gesehen.