Natürlich kannst du das machen.
Für die Variable dann eben:
format(sInfo[playerid][Geschlecht], 16, "Männlich");
format(sInfo[playerid][Geschlecht], 16, "Weiblich");
Achte eben darauf, dass das Geschlecht im enum mit einem Array steht.
Beiträge von Jeffry
-
-
Kommt auf den Code an.
-
Sorry, hab eine Klammer vergessen.
So natürlich:
mysql_function_query(MySqlConnection,mainquery,false,"","");
strdel(mainquery, 0, sizeof(mainquery)); -
mysql_function_query(MySqlConnection,mainquery,false,"","");
zu:
mysql_function_query(MySqlConnection,mainquery,false,"","");
strdel(mainquery, 0, sizeof(mainquery)); -
Ahh, alles klar, umso besser dann!

-
Das hat aber nichts mit den Fehlerzeilen zu tun.

-
Der Code hat nichts mit den errorsErrors zu tun, die sind woanders. Könntest du die Zeilen mit den Fehlern bitte posten und die Zeilenummer dazu schreiben?
-
Poste bitte alles was mit pAge zu tun hat, irgendwo scheint da was noch nicht zu passen.
Nach der Code Änderung hast du das Datum aber schon neu eingegeben, oder?
-
Vergrößere entweder das pAge Array im enum, oder die Größe des Datenfeldes in der Tabelle um eine Stelle.
-
pInfo[playerid][pAge] = inputtext;
Zu
format(pInfo[playerid][pAge], 16,inputtext); -
GetPlayerInterior(playerid, pInfo[playerid][SInterior]);
GetPlayerVirtualWorld(playerid, pInfo[playerid][SVirtualWorld]);zu:
pInfo[playerid][SInterior] = GetPlayerInterior(playerid);
pInfo[playerid][SVirtualWorld] = GetPlayerVirtualWorld(playerid);Sinnvoll wäre es aber, das direkt in deine Speichern- und Laden-Funktion einzubauen:
stock LoadAccount(playerid)
{
new Spielerdatei[64];
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name));
format(Spielerdatei,sizeof(Spielerdatei),"/SpielerAccount/%s.txt",name);
pInfo[playerid][pAlter] = dini_Int(Spielerdatei,"Alter");
pInfo[playerid][pGeworben] = dini_Int(Spielerdatei,"Geworben");
pInfo[playerid][pPerso] = dini_Int(Spielerdatei,"Personalausweis");
pInfo[playerid][pSpawn] = dini_Int(Spielerdatei,"Spawnpunkt");
//Position:
pInfo[playerid][SInterior] = dini_Int(Spielerdatei,"Interior");
pInfo[playerid][SVirtualWorld] = dini_Int(Spielerdatei,"World");
pInfo[playerid][SpawnX] = Float:dini_Float(Spielerdatei, "x");
pInfo[playerid][SpawnY] = Float:dini_Float(Spielerdatei, "y");
pInfo[playerid][SpawnZ] = Float:dini_Float(Spielerdatei, "z");
pInfo[playerid][SpawnR] = Float:dini_Float(Spielerdatei, "r");
SetPVarInt(playerid,"loggedin",1);
return 1;
}
stock SpielerSpeichern(playerid)
{
if(GetPVarInt(playerid,"loggedin")==1)
{
new Spielerdatei[64];
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name));
format(Spielerdatei,sizeof(Spielerdatei),"/SpielerAccount/%s.txt",name);
dini_IntSet(Spielerdatei,"Alter", pInfo[playerid][pAlter]);
dini_IntSet(Spielerdatei,"Geworben", pInfo[playerid][pGeworben]);
dini_IntSet(Spielerdatei, "Personalausweis", pInfo[playerid][pPerso]);
dini_IntSet(Spielerdatei,"Spawnpunkt", pInfo[playerid][pSpawn]);
//Position
pInfo[playerid][SInterior] = GetPlayerInterior(playerid);
pInfo[playerid][SVirtualWorld] = GetPlayerVirtualWorld(playerid);
GetPlayerPos(playerid, pInfo[playerid][SpawnX], pInfo[playerid][SpawnY], pInfo[playerid][SpawnZ]);
GetPlayerFacingAngle(playerid, pInfo[playerid][SpawnR]);
dini_IntSet(Spielerdatei,"Interior", pInfo[playerid][SInterior]);
dini_IntSet(Spielerdatei,"World", pInfo[playerid][SVirtualWorld]);
dini_FloatSet(Spielerdatei,"x", pInfo[playerid][SpawnX]);
dini_FloatSet(Spielerdatei,"y", pInfo[playerid][SpawnY]);
dini_FloatSet(Spielerdatei,"z", pInfo[playerid][SpawnZ]);
dini_FloatSet(Spielerdatei,"r", pInfo[playerid][SpawnR]);
}
return 1;
}Dann kannst du es bei OnPlayerSpawn so machen:
public OnPlayerSpawn(playerid)
{
if(pInfo[playerid][SInterior] != -1)
{
SetPlayerPos(playerid, pInfo[playerid][SpawnX], pInfo[playerid][SpawnY], pInfo[playerid][SpawnZ]);
SetPlayerFacingAngle(playerid, pInfo[playerid][SpawnR]);
SetPlayerInterior(playerid, pInfo[playerid][SInterior]);
SetPlayerVirtualWorld(playerid, pInfo[playerid][SVirtualWorld]);
//Das Interior wird auf -1 gesetzt. Das heißt hier dann, dass der Spieler
//mit dem nächsten Spawn nicht mehr zu dieser Position gesetzt wird.
//Entferne dies, falls der Spieler immer an dieser Position spawnen soll.
pInfo[playerid][SInterior] = -1;
}
return 1;
} -
Bei mir speichert er jetzt überhaupt nichts mehr
Im Query fehlen ab Fraktion die Gleichzeichen vor dem Wert.
-
Es werden nur vollständige Anweisungen ersetzt, keine Teil-Übereinstimmungen.
So würde es klappen:
#define lib_IsAdmin User_IsAdmin
/*
native User_IsAdmin(PlayerID,rang);
*/
forward bool:lib_IsAdmin(p,r);
stock bool:lib_IsAdmin(p,r) return GetPVarInt(p,"Adminlevel")>=r;
#undef lib_IsAdminAber dann kannst du es auch gleich ohne den Define machen.
-
Im Log steht jetzt bei Username eine Zahl ;D
Habe es vergessen gehabt und direkt geändert, von %i zu %s am Ende.
Kopiere die Funktion einfach nochmal, sorry. -
Lasse es dann über den Name speichern:
public SavePlayer(playerid)
{
if(pInfo[playerid][pLogin] == 1)
{
new query[1048], name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, MAX_PLAYER_NAME);
format(query, sizeof(query), "UPDATE "SERVERTAG"_accounts SET AdminLevel='%d',Tutorial='%d',Level='%d',BarGeld='%d' WHERE Username='%s'", pInfo[playerid][pAdminLevel], pInfo[playerid][pTutorial], GetPlayerScore(playerid), GetPlayerMoney(playerid), name);
mysql_tquery(Handle, query);
printf(query);
}
return 1;
}
Das ist vom Prinzip her das Gleiche.Alternativ musst du beim Login/Register prüfen, warum die ID nicht richtig gesetzt wird.
-
Poste bitte den Code zu dem Print.
[13:58:48] UPDATE CoR_accounts SET AdminLevel='0',Tutorial='0',Level='1',BarGeld='3000' WHERE ID='0'Das ist ja nicht der aus SpielerSpeichern.
-
Mir ist gerade aufgefallen, dass ich bei dem Teil, den ich aus der Schleife gezogen habe, die Deklaration von "i" vergessen habe. Hast du das immer selbst hinzugefügt?
Ich habe das jetzt eingebaut, und einen weiteren print falls es nicht klappt.
Versuche es so:
void BotTimer()
{
for(new i = 0; i < sizeof(RobBot); i++)
{
if(RobBot[i][RobSperre] > 0)
{
RobBot[i][RobSperre]--;
}
}
for(new playerid = 0; playerid < MAX_PLAYERS; playerid++)
{
new playerTargetActor = GetPlayerTargetActor(playerid), bool:intarget;
for(new i = 0; i < sizeof(RobBot); i++)
{
if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid)) printf("Target: %d, BotID: %d (idx: %d), Robbing: %d, RobbedBot: %d", playerTargetActor, RobBot[i][rob_ID], IsRobbing[playerid], RobbedBot[playerid]);
if(playerTargetActor == RobBot[i][rob_ID] && Spieler[playerid][Team] == 2 && IsRobbing[playerid] == false)
{
new playerWeapon = GetPlayerWeapon(playerid);
new keys, updown, leftright;
GetPlayerKeys(playerid, keys, updown, leftright);
printf("Spieler %d zielt auf Actor %d", playerid, i);
if(!ActorHandsup[RobBot[i][rob_ID]] && playerWeapon >= 22 && playerWeapon <= 42 && keys & KEY_AIM)
{
printf("Actor %d hat eine Sperre von: %d", i, RobBot[i][RobSperre]);
if(RobBot[i][RobSperre] > 0)
{
printf("Robbing: %d", IsRobbing[playerid]);
if(IsRobbing[playerid] == false)
{
new Sperre[145];
format(Sperre, sizeof(Sperre), "Dieses Geschäft kann erst wieder in %02d:%02d ausgeraubt werden.", RobBot[i][RobSperre]/60, RobBot[i][RobSperre]%60);
SendClientMessage(playerid, COLOR_RED, Sperre);
}
printf("Beende.");
intarget = true;
break;
}
else
{
printf("Raube Actor %d aus.", i);
ApplyActorAnimation(RobBot[i][rob_ID], "SHOP", "SHP_HandsUp_Scr",4.1,0,0,0,1,0); // Handsup
ActorHandsup[RobBot[i][rob_ID]] = true;
//ab hier startet der ROb
IsRobbing[playerid] = true;
RobbedBot[playerid] = i;
RobSek[playerid] = random(10)+30;
if(Rob_Timer[playerid] != -1) KillTimer(Rob_Timer[playerid]);
Rob_Timer[playerid] = SetTimerEx("RobTimer", 1000, true, "i", playerid);
intarget = true;
break;
}
}
}
else if(playerTargetActor == RobBot[i][rob_ID] && Spieler[playerid][Team] == 2 && RobbedBot[playerid] == i && IsRobbing[playerid] == true)
{
intarget = true;
break;
}
}
if(intarget == false && Spieler[playerid][Team] == 2 && IsRobbing[playerid] == true)
{
printf("Fertig.");
//nicht anvisiert
IsRobbing[playerid] = false;
KillTimer(Rob_Timer[playerid]);
Rob_Timer[playerid] = -1;
new string[128];
format(string, sizeof(string), "Du hast %d$ ausgeraubt.", RobMoney[playerid]);
printf("string = %s", string);
SendClientMessage(playerid, COLOR_LIGHTBLUE,string);
GivePlayerMoney(playerid, RobMoney[playerid]);
new i = RobbedBot[playerid];
RobBot[i][RobSperre] = 60;
printf("Actor %d hat nun eine Sperre von: %d", i, RobBot[i][RobSperre]);
RobMoney[playerid] = 0;
RobbedBot[playerid] = -1;
ActorHandsup[RobBot[i][rob_ID]] = false;
ClearActorAnimations(RobBot[i][rob_ID]);
}
}
return 1;
}void RobTimer(playerid)
{
printf("Timer aufgerufen: %d -> RobSek: %d", playerid, RobSek[playerid]);
new sekMoney = random(100)+10, moneyText[128];
RobSek[playerid]--;
RobMoney[playerid] += sekMoney;
format(moneyText, sizeof(moneyText), "~g~%d$", RobMoney[playerid]);
GameTextForPlayer(playerid, moneyText, 988, 6);
if(RobSek[playerid] == 0)
{
//RobBot[RobbedBot[playerid]][RobSperre] = 60;
IsRobbing[playerid] = false;
KillTimer(Rob_Timer[playerid]);
Rob_Timer[playerid] = -1;
new string[128];
format(string, sizeof(string), "Du hast %d$ ausgeraubt.", RobMoney[playerid]);
SendClientMessage(playerid, COLOR_LIGHTBLUE,string);
GivePlayerMoney(playerid, RobMoney[playerid]);
RobMoney[playerid] = 0;
RobBot[RobbedBot[playerid]][RobSperre] = 60;
printf("Actor %d hat nun eine Sperre von: %d", RobbedBot[playerid], RobBot[RobbedBot[playerid]][RobSperre]);
ActorHandsup[RobbedBot[playerid]] = false;
ClearActorAnimations(RobBot[RobbedBot[playerid]][rob_ID]);
RobbedBot[playerid] = -1;
}
return 1;
} -
Ok, sieht doch schon besser aus.
Versuche es so:
void BotTimer()
{
for(new i = 0; i < sizeof(RobBot); i++)
{
if(RobBot[i][RobSperre] > 0)
{
RobBot[i][RobSperre]--;
}
}
for(new playerid = 0; playerid < MAX_PLAYERS; playerid++)
{
new playerTargetActor = GetPlayerTargetActor(playerid), bool:intarget;
for(new i = 0; i < sizeof(RobBot); i++)
{
if(playerTargetActor == RobBot[i][rob_ID] && Spieler[playerid][Team] == 2 && IsRobbing[playerid] == false)
{
new playerWeapon = GetPlayerWeapon(playerid);
new keys, updown, leftright;
GetPlayerKeys(playerid, keys, updown, leftright);
printf("Spieler %d zielt auf Actor %d", playerid, i);
if(!ActorHandsup[RobBot[i][rob_ID]] && playerWeapon >= 22 && playerWeapon <= 42 && keys & KEY_AIM)
{
printf("Actor %d hat eine Sperre von: %d", i, RobBot[i][RobSperre]);
if(RobBot[i][RobSperre] > 0)
{
printf("Robbing: %d", IsRobbing[playerid]);
if(IsRobbing[playerid] == false)
{
new Sperre[145];
format(Sperre, sizeof(Sperre), "Dieses Geschäft kann erst wieder in %02d:%02d ausgeraubt werden.", RobBot[i][RobSperre]/60, RobBot[i][RobSperre]%60);
SendClientMessage(playerid, COLOR_RED, Sperre);
}
printf("Beende.");
intarget = true;
break;
}
else
{
printf("Raube Actor %d aus.", i);
ApplyActorAnimation(RobBot[i][rob_ID], "SHOP", "SHP_HandsUp_Scr",4.1,0,0,0,1,0); // Handsup
ActorHandsup[RobBot[i][rob_ID]] = true;
//ab hier startet der ROb
IsRobbing[playerid] = true;
RobbedBot[playerid] = i;
RobSek[playerid] = random(10)+30;
if(Rob_Timer[playerid] != -1) KillTimer(Rob_Timer[playerid]);
Rob_Timer[playerid] = SetTimerEx("RobTimer", 1000, true, "i", playerid);
intarget = true;
break;
}
}
}
else if(playerTargetActor == RobBot[i][rob_ID] && Spieler[playerid][Team] == 2 && RobbedBot[playerid] == i && IsRobbing[playerid] == true)
{
intarget = true;
}
}
if(intarget == false && Spieler[playerid][Team] == 2 && IsRobbing[playerid] == true)
{
//nicht anvisiert
IsRobbing[playerid] = false;
KillTimer(Rob_Timer[playerid]);
Rob_Timer[playerid] = -1;
new string[128];
format(string, sizeof(string), "Du hast %d$ ausgeraubt.", RobMoney[playerid]);
printf("string = %s", string);
SendClientMessage(playerid, COLOR_LIGHTBLUE,string);
GivePlayerMoney(playerid, RobMoney[playerid]);
RobBot[i][RobSperre] = 60;
printf("Actor %d hat nun eine Sperre von: %d", i, RobBot[i][RobSperre]);
RobMoney[playerid] = 0;
RobbedBot[playerid] = -1;
ActorHandsup[RobBot[i][rob_ID]] = false;
ClearActorAnimations(RobBot[i][rob_ID]);
break;
}
}
return 1;
}void RobTimer(playerid)
{
printf("Timer aufgerufen: %d -> RobSek: %d", playerid, RobSek[playerid]);
new sekMoney = random(100)+10, moneyText[128];
RobSek[playerid]--;
RobMoney[playerid] += sekMoney;
format(moneyText, sizeof(moneyText), "~g~%d$", RobMoney[playerid]);
GameTextForPlayer(playerid, moneyText, 988, 6);
if(RobSek[playerid] == 0)
{
//RobBot[RobbedBot[playerid]][RobSperre] = 60;
IsRobbing[playerid] = false;
KillTimer(Rob_Timer[playerid]);
Rob_Timer[playerid] = -1;
new string[128];
format(string, sizeof(string), "Du hast %d$ ausgeraubt.", RobMoney[playerid]);
SendClientMessage(playerid, COLOR_LIGHTBLUE,string);
GivePlayerMoney(playerid, RobMoney[playerid]);
RobMoney[playerid] = 0;
RobBot[RobbedBot[playerid]][RobSperre] = 60;
printf("Actor %d hat nun eine Sperre von: %d", RobbedBot[playerid], RobBot[RobbedBot[playerid]][RobSperre]);
ActorHandsup[RobbedBot[playerid]] = false;
ClearActorAnimations(RobBot[RobbedBot[playerid]][rob_ID]);
RobbedBot[playerid] = -1;
}
return 1;
}Ich habe diesen Teil noch hinzugefügt:
else if(playerTargetActor == RobBot[i][rob_ID] && Spieler[playerid][Team] == 2 && RobbedBot[playerid] == i && IsRobbing[playerid] == true)
{
intarget = true;
} -
Was heißt denn eigentlich, es wird nicht gespeichert? Steht in der Datei bei Geld eine 0, oder wird es dir nur nicht wieder gegeben, aber in der Datei steht es?
-
Ok, dann wird der Timer gar nicht aufgerufen, das erklärt es.
Versuche es so:
void BotTimer()
{
for(new i = 0; i < sizeof(RobBot); i++)
{
if(RobBot[i][RobSperre] > 0)
{
RobBot[i][RobSperre]--;
}
}
for(new playerid = 0; playerid < MAX_PLAYERS; playerid++)
{
new playerTargetActor = GetPlayerTargetActor(playerid), bool:intarget;
for(new i = 0; i < sizeof(RobBot); i++)
{
if(playerTargetActor == RobBot[i][rob_ID] && Spieler[playerid][Team] == 2 && IsRobbing[playerid] == false)
{
new playerWeapon = GetPlayerWeapon(playerid);
new keys, updown, leftright;
GetPlayerKeys(playerid, keys, updown, leftright);
printf("Spieler %d zielt auf Actor %d", playerid, i);
if(!ActorHandsup[RobBot[i][rob_ID]] && playerWeapon >= 22 && playerWeapon <= 42 && keys & KEY_AIM)
{
printf("Actor %d hat eine Sperre von: %d", i, RobBot[i][RobSperre]);
if(RobBot[i][RobSperre] > 0)
{
printf("Robbing: %d", IsRobbing[playerid]);
if(IsRobbing[playerid] == false)
{
new Sperre[145];
format(Sperre, sizeof(Sperre), "Dieses Geschäft kann erst wieder in %02d:%02d ausgeraubt werden.", RobBot[i][RobSperre]/60, RobBot[i][RobSperre]%60);
SendClientMessage(playerid, COLOR_RED, Sperre);
}
printf("Beende.");
intarget = true;
break;
}
else
{
printf("Raube Actor %d aus.", i);
ApplyActorAnimation(RobBot[i][rob_ID], "SHOP", "SHP_HandsUp_Scr",4.1,0,0,0,1,0); // Handsup
ActorHandsup[RobBot[i][rob_ID]] = true;
//ab hier startet der ROb
IsRobbing[playerid] = true;
RobbedBot[playerid] = i;
RobSek[playerid] = random(10)+30;
if(Rob_Timer[playerid] != -1) KillTimer(Rob_Timer[playerid]);
Rob_Timer[playerid] = SetTimerEx("RobTimer", 1000, true, "i", playerid);
intarget = true;
break;
}
}
}
}
if(intarget == false && Spieler[playerid][Team] == 2 && IsRobbing[playerid] == true)
{
//nicht anvisiert
IsRobbing[playerid] = false;
KillTimer(Rob_Timer[playerid]);
Rob_Timer[playerid] = -1;
new string[128];
format(string, sizeof(string), "Du hast %d$ ausgeraubt.", RobMoney[playerid]);
printf("string = %s", string);
SendClientMessage(playerid, COLOR_LIGHTBLUE,string);
GivePlayerMoney(playerid, RobMoney[playerid]);
RobBot[i][RobSperre] = 60;
printf("Actor %d hat nun eine Sperre von: %d", i, RobBot[i][RobSperre]);
RobMoney[playerid] = 0;
RobbedBot[playerid] = -1;
ActorHandsup[RobBot[i][rob_ID]] = false;
ClearActorAnimations(RobBot[i][rob_ID]);
break;
}
}
return 1;
}void RobTimer(playerid)
{
printf("Timer aufgerufen: %d -> RobSek: %d", playerid, RobSek[playerid]);
new sekMoney = random(100)+10, moneyText[128];
RobSek[playerid]--;
RobMoney[playerid] += sekMoney;
format(moneyText, sizeof(moneyText), "~g~%d$", RobMoney[playerid]);
GameTextForPlayer(playerid, moneyText, 988, 6);
if(RobSek[playerid] == 0)
{
//RobBot[RobbedBot[playerid]][RobSperre] = 60;
IsRobbing[playerid] = false;
KillTimer(Rob_Timer[playerid]);
Rob_Timer[playerid] = -1;
new string[128];
format(string, sizeof(string), "Du hast %d$ ausgeraubt.", RobMoney[playerid]);
SendClientMessage(playerid, COLOR_LIGHTBLUE,string);
GivePlayerMoney(playerid, RobMoney[playerid]);
RobMoney[playerid] = 0;
RobBot[RobbedBot[playerid]][RobSperre] = 60;
printf("Actor %d hat nun eine Sperre von: %d", RobbedBot[playerid], RobBot[RobbedBot[playerid]][RobSperre]);
ActorHandsup[RobbedBot[playerid]] = false;
ClearActorAnimations(RobBot[RobbedBot[playerid]][rob_ID]);
RobbedBot[playerid] = -1;
}
return 1;
}