Hey BreadfishUser,
ich versuche momentan mein GameMode zu erweitern. Hierbei sollen die Koordinaten eines Spielers beim ausloggen gespeichert werden, ebenso wie sein Skin. Sobald der Spieler sich wieder einloggt, sollen die Koordinaten und die SkinID geladen werden und auf den Spieler angewendet werden.
Mein Problem ist, dass sich die Koordinaten und die SkinID beim einloggen auf Null setzen, bzw. der Spieler nicht an seiner letzten Position spawnt.
Hier die Ausschnitte meines GameModes.
enum Info
{
Adminlevel,
Scripter,
Fraktion,
Leader,
Skin,
Rang,
XPosition,
YPosition,
ZPosition
}
new pInfo[MAX_PLAYERS][Info];
public OnPlayerRequestClass(playerid, classid)
{
new pfad[64];
new pName[MAX_PLAYER_NAME];
GetPlayerName(playerid,pName,sizeof(pName));
format(pfad,sizeof(pfad),"/Spieler/%s.dini",pName);
if(dini_Exists(pfad)){
SetSpawnInfo(playerid,0,pInfo[playerid][Skin],pInfo[playerid][XPosition],pInfo[playerid][YPosition],pInfo[playerid][ZPosition],0,0,0,0,0,0,0);
SpawnPlayer(playerid);
}
else {
SetPlayerPos(playerid,1915.6471,1513.5712,17.6828);
SetPlayerCameraPos(playerid,1910.0701,1513.6324,18.1750);
SetPlayerCameraLookAt(playerid,1915.9482,1513.4377,17.6828);
SetPlayerFacingAngle(playerid,92.8607);
}
return 1;
}
public OnPlayerConnect(playerid)
{
ClearPlayerChat(playerid);
SendClientMessage(playerid, GELB, "Bitte Warten...");
new pfad[64];
new pName[MAX_PLAYER_NAME];
new igmessage[64];
GetPlayerName(playerid,pName,sizeof(pName));
format(pfad,sizeof(pfad),"/Spieler/%s.dini",pName);
format(igmessage,sizeof(igmessage),"{CC3333}%s {FFFFFF}hat die Stadt betreten",pName);
SendClientMessageToAll(WEIS,igmessage);
if(dini_Exists(pfad)) {
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login","Ihr Account wurde gefunden.\nGeben sie bitte ihr Passwort ein:","Login","Abbrechen");
return 1;
}
else {
ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Registrieren","Bitte geben sie ihr gewünschtes Passwort ein:","Registrieren","Abbrechen");
}
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
new pfad[64];
new pName[MAX_PLAYER_NAME];
GetPlayerName(playerid,pName,sizeof(pName));
format(pfad,sizeof(pfad),"/Spieler/%s.dini",pName);
SpielerSpeichern(playerid);
ResetVariablen(playerid);
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid==DIALOG_LOGIN) {
if(response==0) {
SendClientMessage(playerid,BLAU,"Sie haben den Anmeldevorgang abgebrochen");
Kick(playerid);
return 1;
}
if(response==1) {
if(!strlen(inputtext)) {
SendClientMessage(playerid,BLAU,"Es muss ein Passwort angegeben werden!");
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login","Ihr Account wurde gefunden/nGeben sie bitte ihr Passwort ein","Login","Abbrechen");
return 1;
}
else {
Login(playerid,inputtext);
return 1;
}
}
}
if(dialogid==DIALOG_REGISTER) {
if(response==0) {
SendClientMessage(playerid,BLAU,"Sie haben den Registrierungsvorgang abgebrochen");
Kick(playerid);
return 1;
}
if(response==1) {
if(!strlen(inputtext)) {
SendClientMessage(playerid,BLAU,"Es muss ein Passwort angegeben werden!");
ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Registrieren","Bitte geben sie ihr gewünschtes Passwort ein:","Registrieren","Abbrechen");
return 1;
}
else {
Register(playerid,inputtext);
return 1;
}
}
}
return 1;
}
stock Register(playerid,key[]) {
new pfad[64];
new pName[MAX_PLAYER_NAME];
GetPlayerName(playerid,pName,sizeof(pName));
format(pfad,sizeof(pfad),"/Spieler/%s.dini",pName);
dini_Create(pfad);
dini_Set(pfad,"Passwort",key);
dini_IntSet(pfad,"Level",0);
dini_IntSet(pfad,"AdminLevel",0);
SendClientMessage(playerid,BLAU,"Sie haben sich erfolgreich registriert");
return 1;
}
stock Login(playerid,key[]) {
new pfad[64];
new pName[MAX_PLAYER_NAME];
GetPlayerName(playerid,pName,sizeof(pName));
format(pfad,sizeof(pfad),"/Spieler/%s.dini",pName);
if(!strcmp(key,dini_Get(pfad,"Passwort"),true)) {
LadeSpieler(playerid);
return 1;
}
else {
SendClientMessage(playerid,BLAU,"Ihr Passwort war inkorrekt");
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login","Ihr Account wurde gefunden/nGeben sie bitte ihr Passwort ein","Login","Abbrechen");
return 1;
}
}
stock SpielerSpeichern(playerid) {
new pfad[64];
new pName[MAX_PLAYER_NAME];
new Float:x,Float:y,Float:z;
GetPlayerPos(playerid,x,y,z);
GetPlayerName(playerid,pName,sizeof(pName));
format(pfad,sizeof(pfad),"/Spieler/%s.dini",pName);
dini_IntSet(pfad,"Level",GetPlayerScore(playerid));
dini_IntSet(pfad,"Adminlevel",pInfo[playerid][Adminlevel]);
dini_IntSet(pfad,"Scripter",pInfo[playerid][Scripter]);
dini_IntSet(pfad,"Fraktion",pInfo[playerid][Fraktion]);
dini_IntSet(pfad,"Leader",pInfo[playerid][Leader]);
dini_IntSet(pfad,"Skin",GetPlayerSkin(playerid));
dini_FloatSet(pfad,"XPosition",x);
dini_FloatSet(pfad,"YPosition",y);
dini_FloatSet(pfad,"ZPosition",z);
return 1;
}
stock ResetVariablen(playerid) {
pInfo[playerid][Adminlevel] = 0;
pInfo[playerid][Scripter] = 0;
pInfo[playerid][Fraktion] = 0;
pInfo[playerid][Leader] = 0;
pInfo[playerid][Skin] = 0;
pInfo[playerid][XPosition] = 0;
pInfo[playerid][YPosition] = 0;
pInfo[playerid][ZPosition] = 0;
return 1;
}
stock LadeSpieler(playerid) {
new pfad[64];
new message[65];
new amessage[65];
new pName[MAX_PLAYER_NAME];
new Text3D:Adminlabel[MAX_PLAYERS];
GetPlayerName(playerid,pName,sizeof(pName));
format(pfad,sizeof(pfad),"/Spieler/%s.dini",pName);
SetPlayerScore(playerid,dini_Int(pfad,"Level"));
SetPlayerSkin(playerid,dini_Int(pfad,"Skin"));
pInfo[playerid][Adminlevel] = dini_Int(pfad,"Adminlevel");
pInfo[playerid][Scripter] = dini_Int(pfad,"Scripter");
pInfo[playerid][Fraktion] = dini_Int(pfad,"Fraktion");
pInfo[playerid][Leader] = dini_Int(pfad,"Leader");
format(message,sizeof(message),"Willkommen zurück, %s",pName);
SendClientMessage(playerid,BLAU,message);
if(pInfo[playerid][Scripter] == 1) {
SendClientMessage(playerid,BLAU,"Sie haben sich als Scripter eingeloggt");
}
if(pInfo[playerid][Adminlevel] >= 1) {
format(amessage,sizeof(amessage),"Sie haben sich als Adminlevel %d eingeloggt",dini_Int(pfad,"Adminlevel"));
SendClientMessage(playerid,BLAU,amessage);
Adminlabel[playerid] = Create3DTextLabel("Administrator",ROT,0,0,0,0,0);
Attach3DTextLabelToPlayer(Adminlabel[playerid],playerid,0.0,0.0,0.7);
}
return 1;
}
//edit: Problem hat sich gelöst