Moin!
Hier nochmal meine Frage, diesmal etwas besser zusamegefasst.
Ich hab einen Dialog in dem manbei der Registrierug das Geburtsdatum des Ingame Charakters eingeben muss wie zb 20.10.1995. Wenn man dann auf weiter geht steht im nächsten Dialog "Du bist also %d Jahre alt". Da komt 23 raus, so wie es sein soll. Dieses Alter speichere ich in MySQL ab, jedoch steht in MySQL nicht 23 sondern 101 oder manchmal auch 97. Ich benutze die MySQL Version 41-4. Beim Abspeichern in MySQL benutze ich auch %d.
if(dialogid == DIALOG_REGISTER2) { if(!response) return ShowPlayerDialog(playerid, DIALOG_REGISTER1, DIALOG_STYLE_PASSWORD, "{FFFFFF}Registration [1/4]", "{FFFFFF}Um fortzufahren wähle bitte ein Passwort", "{FFFFFF}Weiter", "{FFFFFF}Abbrechen"); if(strlen(inputtext) != 10)return ShowPlayerDialog(playerid, DIALOG_REGISTER2, DIALOG_STYLE_INPUT, "{FFFFFF}Registration [2/4]", "{FFFFFF}Um fortzufahren gebe bitte dein Geburtsdatum ein (Charakter)\n(dd.mm.yyyy)", "{FFFFFF}Weiter", "{FFFFFF}Zurück"); if(strfind(inputtext, ".",false)!=-1) { new Date[3][265]; split(inputtext, Date, '.'); if(!IsValidDate(strval(Date[0]),strval(Date[1]),strval(Date[2]))) { ShowPlayerDialog(playerid, DIALOG_REGISTER2, DIALOG_STYLE_INPUT, "{FFFFFF}Registration [2/4]", "{FFFFFF}Um fortzufahren gebe bitte dein Geburtsdatum ein (Charakter)\n(dd.mm.yyyy)", "{FFFFFF}Weiter", "{FFFFFF}Zurück"); SendErrorMessage(playerid,"Dieses Datum ist ungültig"); return 1; } RegisterInfo[playerid][register_Alter] = GetAlter(strval(Date[0]),strval(Date[1]),strval(Date[2])); format(RegisterInfo[playerid][register_Geburtsdatum], 225, "%s", inputtext); new string[256]; format(string, sizeof(string), "{FFFFFF}Du bist also %d Jahre alt", RegisterInfo[playerid][register_Alter]); ShowPlayerDialog(playerid, DIALOG_REGISTER3, DIALOG_STYLE_MSGBOX, "{FFFFFF}Registration [2/4]", string, "{FFFFFF}Weiter", "{FFFFFF}Zurück"); } else { return ShowPlayerDialog(playerid, DIALOG_REGISTER2, DIALOG_STYLE_INPUT, "{FFFFFF}Registration [2/4]", "{FFFFFF}Um fortzufahren gebe bitte dein Geburtsdatum ein (Charakter)\n(dd.mm.yyyy)", "{FFFFFF}Weiter", "{FFFFFF}Zurück"); } return 1;
Hier wird bei Abschlusss der Registration das das Alter in MySQL gespeichert
if(dialogid == DIALOG_REGISTER5) { if(!response)return ShowPlayerDialog(playerid, DIALOG_REGISTER5, DIALOG_STYLE_INPUT, "{FFFFFF}Registration [4/4]", "{FFFFFF}Um fortzufahren wähle bitte einen gültigen Roleplay Namen\n(z.B: Mark_Mayr)", "{FFFFFF}Weiter", "{FFFFFF}Zurück"); if(strfind(inputtext, "_",false)!=-1) { printf("%d",RegisterInfo[playerid][register_Alter]); format(RegisterInfo[playerid][register_Name],64,"%s",inputtext); new query[300]; mysql_format(handle, query, sizeof(query), "INSERT INTO `accounts` (`Name`, `Passwort`,`RPName`,`Geburtsdatum`,`Geschlecht`,`Alter`) VALUES ('%e', MD5('%e'),'%e','%e','%d','%d')", SpielerDaten[playerid][player_Name], RegisterInfo[playerid][register_Passwort], RegisterInfo[playerid][register_Name],RegisterInfo[playerid][register_Geburtsdatum],RegisterInfo[playerid][register_Geschlecht],RegisterInfo[playerid][register_Alter]); mysql_pquery(handle, query, "OnUserRegister", "d", playerid); print(query); } }
Das sind die Stock die it der Alter Berechnung zu tun haben.
stock split(const strsrc[], strdest[][], delimiter){ new i,li,aNum,len; while(i <= strlen(strsrc)){ if(strsrc[i]==delimiter || i==strlen(strsrc)){ len = strmid(strdest[aNum], strsrc, li, i, 128); strdest[aNum][len] = 0; li = i+1; aNum++; } i++; } return 1;}stock IsValidDate(day, month, year){ new maxDays,maxYear,Date[3]; getdate(Date[2], Date[1], Date[0]); if(Date[2] == 2019) { maxYear = 2005; } else if(Date[2] == 2020) { maxYear = 2006; }else if(Date[2] == 2021) { maxYear = 2007; }else if(Date[2] == 2022) { maxYear = 2008; } if(year < 1930 || year > maxYear) return 0; switch (month){ case 1,3,5,7,8,10,12: maxDays = 31; case 4,6,9,11: maxDays = 30; case 2:{ if(IsLeapYear(year)){ maxDays = 29; } else{ maxDays = 28; } } default: return 0; } if(day < 1 || day > maxDays) return 0; return 1;}stock IsLeapYear(year){ return ( year % 4 == 0 && (year % 100 != 0 || year % 400 == 0) );}stock GetAlter(aDay,aMonth,aYear){ new nyear,nmonth,nday; getdate(nyear,nmonth,nday); new alter = nyear - aYear; if(aMonth > nmonth) { alter -= 1; } if(aMonth == nmonth && (nday >= aDay)) { alter -= 1; } return alter;}
Die Enums
enum RegisterDatenEnum { register_Passwort[225], register_Geburtsdatum[225], register_Geschlecht, register_Name, register_Alter}
Es gibt noch ein Enum wo zb steht player_Alter, player,_Geburtsdatum, usw. Kann es sein, dass sich da etwas überschneidet. Soweit ich seh, wird hier aus dem player Enum nichts genutzt .
Hier noch meine MySQL 'accounts' Tabelle
alter.PNG
Ich würde mich freuen, wenn jemand mein Problem lösen könnte.
Danke im Voraus
MfG
Allrounder18