Alles anzeigen
stock GetYearFromTimestamp(stamp)
{
return floatround((gettime() - stamp)/31536000);
}
__
return floatround((gettime() - stamp)/31536000);
Der Fehler besteht letztendlich noch.
Alles anzeigen
stock GetYearFromTimestamp(stamp)
{
return floatround((gettime() - stamp)/31536000);
}
__
return floatround((gettime() - stamp)/31536000);
Der Fehler besteht letztendlich noch.
Ja wird hier wiedergeben und den Public brauche ich.
stock AgeOfPlayer(playerid)
{
new yearold = gettime() - SpielerInfo[playerid][pAlter];
return floatround(yearold/31536000);//ein jahr in sekunden :) 31536000 Sekunden
}
Bringt auch nichts
#define macht Probleme.
error 010: invalid function or declaration
Hier der schöne Dialog
if(dialogid == DIALOG_ALTER)
{
getdate(jahr,monat,tag);
gettime(stunde,minute,sekunde);
new DateInfo[3][20],string[200];
split(inputtext,DateInfo,'.');
if(response == 0)return Kick(playerid);
else
{
if(strlen(inputtext) > 10)
{
ShowPlayerDialog(playerid,DIALOG_ALTER,DIALOG_STYLE_INPUT,"{00AFFF}"#SERVERNAME" {FFFFFF}- Information","Wir brauchen nun noch eine letzte persönliche Information von dir.\nWir möchten gerne wissen wie alt du bist, Angaben in TT.MM.JJJJ.","Weiter","Abbrechen");
return 1;
}
if(!IsValidDate(strval(DateInfo[0]),strval(DateInfo[1]),strval(DateInfo[2])))
{
ShowPlayerDialog(playerid,DIALOG_ALTER,DIALOG_STYLE_INPUT,"{00AFFF}"#SERVERNAME" {FFFFFF}- Information","Wir brauchen nun noch eine letzte persönliche Information von dir.\nWir möchten gerne wissen wie alt du bist, Angaben in TT.MM.JJJJ.","Weiter","Abbrechen");
return 1;
}
if(jahr - strval(DateInfo[2]) > 100 || strval(DateInfo[2]) < 1 || strval(DateInfo[2]) >= jahr)
{
ShowPlayerDialog(playerid,DIALOG_ALTER,DIALOG_STYLE_INPUT,"{00AFFF}"#SERVERNAME" {FFFFFF}- Information","Wir brauchen nun noch eine letzte persönliche Information von dir.\nWir möchten gerne wissen wie alt du bist, Angaben in TT.MM.JJJJ.","Weiter","Abbrechen");
return 1;
}
new check = jahr - strval(DateInfo[2]);
if(check == jahr)
{
ShowPlayerDialog(playerid,DIALOG_ALTER,DIALOG_STYLE_INPUT,"{00AFFF}"#SERVERNAME" {FFFFFF}- Information","Wir brauchen nun noch eine letzte persönliche Information von dir.\nWir möchten gerne wissen wie alt du bist, Angaben in TT.MM.JJJJ.","Weiter","Abbrechen");
return 1;
}
if(strval(DateInfo[1]) > monat)
{
check -= 1;
}
else if(strval(DateInfo[1]) == monat && strval(DateInfo[0]) > tag)
{
check -= 1;
}
SpielerInfo[playerid][pAlter] = mktime(stunde,minute,sekunde,strval(DateInfo[0]),strval(DateInfo[1]),strval(DateInfo[2]));
if(AgeOfPlayer(playerid) < 10 && AgeOfPlayer(playerid) > 80)
{
ShowPlayerDialog(playerid,DIALOG_ALTER,DIALOG_STYLE_INPUT,"{00AFFF}"#SERVERNAME" {FFFFFF}- Information","Wir brauchen nun noch eine letzte persönliche Information von dir.\nWir möchten gerne wissen wie alt du bist, Angaben in TT.MM.JJJJ.","Weiter","Abbrechen");
return 1;
}
format(string,sizeof(string),"In Ordnung, du bist also %i Jahre alt.",AgeOfPlayer(playerid));
SendClientMessage(playerid,COLOR_ROT,string);
return 1;
}
}
Meine Load Funktion finden Sie hier.
stock LoadPlayer(playerid)
{
if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))//Wir fragen ab ob der angegebene Spieler auch Online ist, und kein NPC ist (nur zur sicherhheit)
{
GetPlayerName(playerid, SpielerInfo[playerid][pName], MAX_PLAYER_NAME);
new query[400], data[50]; //50 zeichen bei data reichen völlig aus.
format(query, sizeof(query), "SELECT * FROM `accounts` WHERE `Name`='%s'",SpielerInfo[playerid][pName]);//Lese `Alles` Von Accounts aus, wo der Name sich befindet
mysql_query(query);//abschicken des queries
mysql_store_result();//Auflisten aller ergebnisse
if(mysql_num_rows())//Abfragen ob datensatz existiert
{
if(mysql_retrieve_row())//Weiß ich nicht genau was das bewirkt.
{
mysql_fetch_field_row(data,"Level");//Söllte eigendlich selbsterklärend sein
SpielerInfo[playerid][pLevel]=strval(data);
mysql_fetch_field_row(data,"Adminlevel");
SpielerInfo[playerid][pAdminlevel]=strval(data);
mysql_fetch_field_row(data,"Online");//Ich sehe auch keinen sinn, nen LEEREN Wert zu laden aber naja.
SpielerInfo[playerid][pOnline]=strval(data);
mysql_fetch_field_row(data,"Datum");//Ich sehe auch keinen sinn, nen LEEREN Wert zu laden aber naja.
SpielerInfo[playerid][pDatum]=strval(data);
printf("Test1");
SetPVarInt(playerid,"Eingeloggt",1);
mysql_fetch_field_row(data,"Geschlecht");
SpielerInfo[playerid][pGeschlecht]=strval(data);
mysql_fetch_field_row(data,"Alter");
SpielerInfo[playerid][pAlter]=strval(data);
printf("Test2");
}
}
mysql_free_result();//NIEMALS VERGESSEN!!!! gibt den benutzten speicher wieder frei
}
return 1;
}
Nein gerne als Zahl, sprich z.B 16.
Alles anzeigen
Ok, danke dir für die Info
Jetzt mal ein ganz anderes Problem:
Ich habe in mein Script den Public eingefügt:
public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid, bodypart)
Ansicht passt alles, der Code darunter meines erachtens nach auch, dennoch bekomme ich ein
Error:
error 025: function heading differs from prototype
Wie kann ich diesen beheben? Auf einem Blanc Script passt alles.
Mein Aktuelles Script habe ich halt komplett geupdatet, damit alles auf 0.3z abgestimmt ist,
dennoch will der public nicht so richtig
forward OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid, bodypart);
Guten Tag,
Ich bin noch dabei das Alter des Spielers abzufragen, in der Message wird es korrekt wiedergeben (16 Jahre alt).
Jedoch erhält die Tabellenspalte Alter einen ganz anderen Wert, sogenannt diesen Wert: 858117527
Hier mal der Code:
format(string,sizeof(string),"In Ordnung, du bist also %i Jahre alt.",AgeOfPlayer(playerid));
stock AgeOfPlayer(playerid)
{
new yearold = gettime() - SpielerInfo[playerid][pAlter];
return floatround(yearold/31536000);//ein jahr in sekunden :) 31536000 Sekunden
}
stock SavePlayer(playerid)
{
if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
{
if(GetPVarInt(playerid,"Eingeloggt") == 1)
{
new query[600];
format(query, sizeof(query), "UPDATE `accounts` SET `Level` = '%d',`Adminlevel` = '%d',`Online` = '%d',`Datum` = '%s',`Geschlecht` = '%i',`Alter` = '%i' WHERE `Name` = '%s'",
SpielerInfo[playerid][pLevel],SpielerInfo[playerid][pAdminlevel],SpielerInfo[playerid][pOnline],SpielerInfo[playerid][pDatum],SpielerInfo[playerid][pGeschlecht],SpielerInfo[playerid][pAlter],SpielerInfo[playerid][pName]);
mysql_query(query);
printf(query);
printf("Account wurde gespeichert.");
}
}
return 1;
}
Kann mir jemand einen PC zusammenstellen? [Budget: 600 - 700 Euro]
Sollte DayZ, Rust, BF4 und den ganzen Kram locker packen, dass DayZ Epoch perfekt läuft ist mir am wichtigsten.
Ich verstehe nicht was du unter zurücksuchen verstehst, aber falls der Spieler registriert ist muss der Name auch gegettet werden. In Pawn geschieht nichts automatisch. Ich weiß nicht, ob du wirklich den Sinn des Codes verstehst, du setzt Bedingungen, erfüllst diese jedoch beim Laden/Register nicht.
Ich verstehe nur noch Bahnhof, kannst du mir das über TV oder so entbuggen damit ich es mir genauer anschauen kann?
stock SpielerName(playerid)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name));
return name;
}
Keine Reaktion.
Es wird nicht mal der Name angegeben, nutze doch GetPlayerName unter OnPlayerConnect, gleich als erste Funktion.
Ist doch unnötig weil der Name sich automatisch zusammensucht beim Spieler erstellen.
Funktioniert auch nicht, letztendlich habe ich aber was rausgefunden.
Wenn ich das erste mal connecte, sprich in der Registrierung wird der Geschlecht bei 0 bleiben, wenn ich aber das Script ein wenig umbaue und den Login Dialog unter OnPlayerSpawn setzte, erneut connecte, sprich halt zum 2ten mal mit den Account funktioniert es.
Ich printe den Query eben, warte.
@Query
[21:33:35] Number of vehicle models: 0
[21:33:54] Incoming connection: 79.195.144.188:60443
[21:33:54] [join] GTARPss has joined the server (0:79.195.144.188)
[21:33:55] UPDATE `accounts` SET `Level` = '0',`Adminlevel` = '0',`Online` = '0',`Datum` = '',`Geschlecht` = '0' WHERE `Name` = ''
[21:33:55] Account wurde gespeichert.
[21:33:56] UPDATE `accounts` SET `Level` = '0',`Adminlevel` = '0',`Online` = '1',`Datum` = '',`Geschlecht` = '0' WHERE `Name` = ''
[21:33:56] Account wurde gespeichert.
[21:33:57] UPDATE `accounts` SET `Level` = '0',`Adminlevel` = '0',`Online` = '1',`Datum` = '',`Geschlecht` = '1' WHERE `Name` = ''
[21:33:57] Account wurde gespeichert.
[21:33:57] [part] GTARPss has left the server (0:1)
stock SavePlayer(playerid)
{/*
if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
{
if(GetPVarInt(playerid,"Eingeloggt") == 1)
{*/
printf("Test");
new query[600];
printf("Test1");
format(query, sizeof(query), "UPDATE `accounts` SET `Level` = '%d',`Adminlevel` = '%d',`Online` = '%d',`Datum` = '%s',`Geschlecht` = '%d' WHERE `Name` = '%s'",
SpielerInfo[playerid][pLevel],SpielerInfo[playerid][pAdminlevel],SpielerInfo[playerid][pOnline],SpielerInfo[playerid][pDatum],SpielerInfo[playerid][pGeschlecht],SpielerInfo[playerid][pName]);
printf("Test 3");
mysql_query(query);
printf("Test erf");
//}
//}
return 1;
}
Trotzdem wird der Stock hier ausgeführt, nur das Geschlecht nicht gespeichert.
stock SavePlayer(playerid)
{
if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
{
if(GetPVarInt(playerid,"Eingeloggt") == 1)
{
printf("Test");
new query[600];
format(query, sizeof(query), "UPDATE `accounts` SET `Level` = '%d',`Adminlevel` = '%d',`Online` = '%d',`Datum` = '%s',`Geschlecht` = '%d' WHERE `Name` = '%s'",
SpielerInfo[playerid][pLevel],SpielerInfo[playerid][pAdminlevel],SpielerInfo[playerid][pOnline],SpielerInfo[playerid][pDatum],SpielerInfo[playerid][pGeschlecht],SpielerInfo[playerid][pName]);
mysql_query(query);
printf("Test erf");
}
}
return 1;
}
Die Prints weren in der Log doch auch angezeigt.
Account wird hier erstellt, hat meiner Meinung rein gar nichts damit zu tun aber ok..
stock CreateAccount(playerid, pass[])
{
new query[256],Name[MAX_PLAYER_NAME];
GetPlayerName(playerid, Name, MAX_PLAYER_NAME);
mysql_real_escape_string(Name,Name);
mysql_real_escape_string(pass,pass);
format(query, sizeof(query), "INSERT INTO `accounts` (`Name`, `Passwort`) VALUES ('%s', '%s')", Name, pass);
mysql_query(query);
return true;
}
Ich habe mal was ausprobiert, sobald der Spieler sich registriert arbeitet der SpeicherStock beim verlassen des Servers nicht mit, sobald man ein 2tes mal den Server betritt arbeitet er.
//edit
Doch nicht, die Speicherung funktioniert nun weil ich in dem Punkt wo der Account registriert wird den Stock SpielerSpeichern aufrufe, lediglich bleibt das Geschlecht auf keinen ermittelbaren Wert, sprich 0.
@John_Hunter:
Dann schreib unter den Load-Stock SetPVarInt(playerid,"Eingeloggt",1);
Funktioniert trotzdem nicht.