Guten Abend
Mir ist grade aufgefallen das wenn ich mich auf mein Server Verbinde kann ich nur auf Spawn drücken.
Ich habe kein Plan ob es am Script liegt oder nicht.
Hier die Sachen die Für die Account-Erstellung wichtig sind:
Define:
Mysql Daten:
Code
#define MYSQL_HOST "85.131.156.213"
#define MYSQL_USER "ni630601_1_DB"
#define MYSQL_PASS "0fufEL1y"
#define MYSQL_DBSE "ni630601_1_DB"
new MySQL:handle;
Spielerinfo:
Code
enum playerInfo{
db_id,
bool:eingeloggt,
Name[MAX_PLAYER_NAME],
Adminlevel,
Level,
Money,
Fraktion,
Rang,
Spawn
}
new sInfo[MAX_PLAYER_NAME][playerInfo];
Alles anzeigen
FraktionsEnum:
Code
enum frakteEnum{
f_name[300],
Float:f_x,
Float:f_y,
Float:f_z,
Float:f_r,
f_inter,
f_world,
f_color
}
new fInfo[][frakteEnum] ={
{"Zivilist",329.0244,-1513.3033,36.0391,225.8344,0,0,weiß},//Zivilist 0
{"SAPD",213.4162,162.7460,1003.0234,274.4569,3,1,blau},//SAPD 1
{"SWAT",2731.5903,-2450.0164,17.5937,272.4424,0,0,helblau},//SWAT2
{"FBI",2286.9651,2431.6011,10.8203,176.4887,0,0,duneklhelblau},//FBI3
{"ARMY",214.2768,1822.5925,6.4141,265.0869,0,0,hellgrün},//ARMY4
{"Medic/Feuerwehr",302.9467,-1505.8025,24.6007,231.6743,0,0,rot},//MEDIC5
{"Fahrschule",2124.3032,-2273.0491,20.6719,221.7338,0,0,orange},//Fahrschule6
{"Aztecas",2788.4141,-1944.7075,13.5469,87.2128,0,0,türkis},//AZTECAS7
{"Vagos",204.6566,39.7421,2.5781,260.2514,0,0,gelb},//Vagos8
{"Ballas",1084.8976,-1226.7927,15.8203,269.7700,0,0,pink},//Ballas9
{"Yakuza",-2188.6282,-2265.0452,30.6250,71.4091,0,0,grau}//Yakuza10
};
Alles anzeigen
OnGameModeExit:
OnPlayerRequestClass:
Code
public OnPlayerRequestClass(playerid, classid)
{
SetPlayerPos(playerid, 1686.2013,-2315.4673,13.3828);
SetPlayerCameraPos(playerid, 1686.2013,-2315.4673,13.3828);
SetPlayerCameraLookAt(playerid, 1686.2013,-2315.4673,13.3828);
SetPlayerFacingAngle(playerid,179.8357);
//Wenn der Spieler die Class-Selection betritt prüfe,ob er bereits eingeloggt ist
if(!sInfo[playerid][eingeloggt])
{
//Wenn nicht,dann prüfe ob der Spieler ein Konto hat
new query[128];
mysql_format(handle,query,sizeof(query),"SELECT id FROM Accounts WHERE Name = '%e'",sInfo[playerid][Name]);
mysql_pquery(handle,query,"OnUserCheck","d",playerid);
}
return 1;
}
Alles anzeigen
OnPlayerConnect:
Code
public OnPlayerConnect(playerid)
{
sInfo[playerid][db_id] =0;
sInfo[playerid][eingeloggt] =false;
sInfo[playerid][Adminlevel] =0;
sInfo[playerid][Level] = 0;
sInfo[playerid][Money] = 0;
sInfo[playerid][Fraktion] = 0;
sInfo[playerid][Rang] = 0;
sInfo[playerid][Spawn] = 0;
GetPlayerName(playerid,sInfo[playerid][Name],MAX_PLAYER_NAME);
SetPlayerColor(playerid,weiß);
sInfo[playerid][Level]=1;
SetPlayerScore(playerid,sInfo[playerid][Level]);
return 1;
}
Alles anzeigen
OnUserCheck:
Code
public OnUserCheck(playerid)
{
//Query wurde ausgeführt und das Ergebnis im Cache gespeichert
new rows;
cache_get_row_count(rows);
if(rows == 0)
{
ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_PASSWORD,"Account erstellen","Bitte Registriere dich:","Registrieren","Abbrechen");
}
else
{
//Es existiert ein Ergebnis,das heißt der Spieler ist registriert und muss sich einloggen
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Einloggen","Bitte loggte dich ein:","Einloggen","Abbrechen");
}
return 1;
}
resetPlayer(playerid)
{
for(new i=0; i<sizeof(sInfo[]); i++)
{
sInfo[playerid][playerInfo:i]=0;
}
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
SaveUserStats(playerid);
resetPlayer(playerid);
return 1;
}
Alles anzeigen
OnPlayerSpawn:
Code
public OnPlayerSpawn(playerid)
{
if(!isPlayerInFrakt(playerid,0))
{
if(sInfo[playerid][Spawn]==1)
{
new fID;
fID= sInfo[playerid][Fraktion];
SetPlayerPos(playerid,fInfo[fID][f_x],fInfo[fID][f_y],fInfo[fID][f_z]);
SetPlayerFacingAngle(playerid,fInfo[fID][f_r]);
SetPlayerInterior(playerid,fInfo[fID][f_inter]);
SetPlayerVirtualWorld(playerid,fInfo[fID][f_world]);
SetPlayerColor(playerid,fInfo[fID][f_color]);
}
}
SendClientMessage(playerid,rot,"/hilfe um die Befehle zu sehen!");
return 1;
}
Alles anzeigen
Fraktion und Adminfunktion:
Code
isPlayerInFrakt(playerid,f_id){
if(sInfo[playerid][Fraktion]==f_id)return 1;
return 0;
}
isAdmin(playerid,alevel)
{
if(sInfo[playerid][Adminlevel]>=alevel)return 1;
return 0;
}
Spawnchange:
Code
ocmd:spawnchange(playerid,params[])
{
if(isPlayerInFrakt(playerid,0)) return SendClientMessage(playerid,rot,"Du bist in keiner Fraktion.");
if(sInfo[playerid][Spawn] == 0)
{
sInfo[playerid][Spawn] = 1;
}
else
{
sInfo[playerid][Spawn] = 0;
}
SendClientMessage(playerid,grün,"Spawn geändert");
return 1;
}
Alles anzeigen
Register/Login Dialog:
Code
if(dialogid == DIALOG_REGISTER)
{
//Spieler hat Abbrechen gewählt
if(!response) return Kick(playerid);
//Wenn der Spieler kein, oder ein zu kurzes, Passwort eingegeben hat
if(strlen(inputtext) < 5) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registration", "Bitte registriere Dich:\n{0xFF0000FF}Mindestens 5 Zeichen!", "Ok", "Abbrechen");
//Wenn alles passt wird der Spieler in der Datenbank angelegt
//Als Verschlüsselung für das Passwort wird MD5 verwendet
new query[256];
mysql_format(handle, query, sizeof(query), "INSERT INTO Accounts (name, password) VALUES ('%s', MD5('%s'))", sInfo[playerid][Name], inputtext);
//Das Query wird abgesendet und die playerid an OnUserRegister übergeben
mysql_pquery(handle, query, "OnUserRegister", "d", playerid);
return 1;
}
if(dialogid == DIALOG_LOGIN)
{
//Spieler hat Abbrechen gewählt
if(!response) return Kick(playerid);
//Wenn der Spieler kein, oder ein zu kurzes, Passwort eingegeben hat
if(strlen(inputtext) < 5) return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmeldung", "Bitte logge Dich ein:\n{0xFF0000FF}Mindestens 5 Zeichen!", "Ok", "Abbrechen");
//Wenn alles passt wird die Datenbank ausgelesen
new query[256];
mysql_format(handle, query, sizeof(query), "SELECT * FROM Accounts WHERE name = '%s' AND password = MD5('%s')", sInfo[playerid][Name], inputtext);
//Das Query wird abgesendet und die playerid an OnUserLogin übergeben
mysql_pquery(handle, query, "OnUserLogin", "d", playerid);
return 1;
Alles anzeigen
MySQL_SetupConnection:
Code
stock MySQL_SetupConnection(ttl=4)
{
print("[MYSQL] Verbingungsaufbau.........");
mysql_log();
handle = mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PASS,MYSQL_DBSE);
//MYSQL Verbindungsprüfung mit neu verbinden!:
if(mysql_errno(handle) != 0)
{
//Fehler bei der Verbindung mit der Datenban:
if(ttl >1)
{
//Versuche erneute Verbindung aufzubauen
print("[MYSQL] Es konnte keine Verbindung zur Datenbank hergestellt werden.");
printf("[MYSQL] Starte neuen Verbindungsaufbau versuch (ttl: %d).",ttl-1);
return MySQL_SetupConnection(ttl-1);
}
else
{
//Abbrechen und Server Schließen
print("[MYSQL] Es konnte keine Verbindung zur Datenbank hergestellt werden.");
print("[MYSQL] Bitte überprüfen Sie die Verbindungsdaten!");
print("[MYSQL] Der Server wird heruntergefahren!");
return SendRconCommand("exit");
}
}
//printf("[MYSQL] Die Verbindung zur Datenbank wurde erfolgreich hergestellt! Handle: %d",handle);
return 1;
}
Alles anzeigen
OnUserRegister:
Code
public OnUserRegister(playerid)
{
//Der Spieler wurde in die Datenbank eingetragen, es wird die id ausgelsen
sInfo[playerid][db_id] = cache_insert_id();
SendClientMessage(playerid,grün,"[Konto]Registration erfolgreich");
return 1;
}
OnUserLogin:
Code
public OnUserLogin(playerid)
{
new rows;
cache_get_row_count(rows);
if(rows == 0)
{
//Der Spieler hat ein falsches Passwort eingegeben
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Einloggen","Bitte logge dich ein:\n{0xFF0000FF}Falsches Passwort!","Einloggen","Abbrechen");
}
else
{
//Es existiert ein Ergebnis,das heißt der Spieler hat das richtige Passwort eingegeben
//Wir lesen nun die erste Zeile des Caches aus (id 0)
cache_get_value_name_int(0,"db_id",sInfo[playerid][db_id]);
cache_get_value_name_int(0,"Adminlevel",sInfo[playerid][Adminlevel]);
cache_get_value_name_int(0,"Level",sInfo[playerid][Level]);
cache_get_value_name_int(0,"Money",sInfo[playerid][Money]);
cache_get_value_name_int(0,"Fraktion",sInfo[playerid][Fraktion]);
cache_get_value_name_int(0,"Rang",sInfo[playerid][Rang]);
cache_get_value_name_int(0,"Spawn",sInfo[playerid][Spawn]);
}
return 1;
}
Alles anzeigen
SaveUserStats und SpielerName:
Code
stock SaveUserStats(playerid)
{
//Wen der Spieler nicht eingeloggt ist, dann speichere seine Statistiken nicht
if(!sInfo[playerid][eingeloggt])return 1;
//Ansonsten speichere Sie ab
new query[600];
mysql_format(handle,query,sizeof(query),"UPDATE Accounts Set Name = '%s',Adminlevel = '%d',Level = '%d',Money = '%d',Fraktion = '%d',Rang = '%d',Spawn = '%d' WHERE id = '%d' ",
sInfo[playerid][Name],sInfo[playerid][Adminlevel],sInfo[playerid][Level],sInfo[playerid][Money],sInfo[playerid][Fraktion],sInfo[playerid][Rang],sInfo[playerid][Spawn]);
//Das Query wird abgesendet
mysql_pquery(handle,query);
return 1;
}
stock SpielerName(playerid)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,MAX_PLAYER_NAME);
return name;
}
Alles anzeigen