Hey wie die Überschrift schon sagt suche ich einen DM Server der gut besucht ist.
Ich finde bisher leider keinen besuchten DM Server.
Wäre nett wenn mir jemand einen Server schicken könnte
Möchte meine Zeitvertreiben und bissl Ballern
Danke
Hey wie die Überschrift schon sagt suche ich einen DM Server der gut besucht ist.
Ich finde bisher leider keinen besuchten DM Server.
Wäre nett wenn mir jemand einen Server schicken könnte
Möchte meine Zeitvertreiben und bissl Ballern
Danke
Ich habe eben nochmal gegrübelt und dachte mir wenn der erste durchlauf durch den 2. resettet wird.
Sollte was mit der Variable nicht stimmen wo ich die Infos abspeichere.
Daraufhin habe ich mir die Variable näher betrachtet:
enum FVerleihData{
//...
}
new FVerleih[][FVerleihData];
und habe einfach eine vordefinierten array eingefügt, in dem Fall die 2, da ich 2 Verleihs habe.
Also so
enum FVerleihData{
//...
}
new FVerleih[2][FVerleihData];
Nach dem Test in der Console und auf dem Server funktioniert nun alles.
Dennoch bleibt die Frage wie mache ich das am besten, da ich das ja dyn. haben will.
Das ich jederzeit InGame einen erstellen kann, damit er auch geladen wird und abgespeichert...
Würde das so funktionieren ?
#define MAX_FVERLEIH 10 // Beispielanzahl
enum FVerleihData{
//...
}
new FVerleih[MAX_FVERLEIH][FVerleihData];
und bei der for-Schleife dann nur FVerleihCount nehme, da die Variable ja wiedergibt wieviele Einträge in der Datenbank sind.
Dann muss ich zwar wenns mal über 10 gehen sollte das im Script erhöhen...
reproduzieren heißt genau was ?
Ich bin der Sache nun näher auf de Grund gegangen und hab wie du gesagt hast gedebugt.
Mir kam das seltsam vor, dass er erstellt wird, aber danach nicht exestiert. Somit habe ich die for-schleife bei LoadData unter die Lupe genommen und mit hilfe des Debugs festegestellt,
das es beim ersten durchlauf gelesen und erstellt wird. Sobald der 2. durchlauf startet, wird der der 1. resettet.
Ich habe mir den Code näher angeschaut und kann mir einfach nicht erklären, woran das liegen
Ich hoffe ihr könnt mir bei dem Problem helfen, da ich selbst schon am verzweifeln bin, aber einfach nicht aufgeben will und alles Manuell eintragen will, sowie einzeln auslesen...
Danke im Vorraus
forward LoadDataInfo(database);
public LoadDataInfo(database)
{
switch(database)
{
case 0: // fahrradverleih_list
{
if(cache_num_rows() != 0)
{
for(new i; i!=cache_num_rows(); i++)
{
cache_get_value_name_int(i,"pID",FVerleih[i][fID]);
cache_get_value_name_int(i,"PickupID",FVerleih[i][fIconID]);
cache_get_value_name(i,"Name",FVerleih[i][fName]);
cache_get_value_name_float(i,"coordsX",FVerleih[i][fCoords][0]);
cache_get_value_name_float(i,"coordsY",FVerleih[i][fCoords][1]);
cache_get_value_name_float(i,"coordsZ",FVerleih[i][fCoords][2]);
cache_get_value_name_float(i,"coordsX2",FVerleih[i][fCoords][3]);
cache_get_value_name_float(i,"coordsY2",FVerleih[i][fCoords][4]);
cache_get_value_name_float(i,"coordsZ2",FVerleih[i][fCoords][5]);
cache_get_value_name_float(i,"coordsFA",FVerleih[i][fCoords][6]);
cache_get_value_name_int(i,"BikePrice",FVerleih[i][fBikePrice]);
cache_get_value_name_int(i,"BMXPrice",FVerleih[i][fBMXPrice]);
cache_get_value_name_int(i,"MBikePrice",FVerleih[i][fMBikePrice]);
cache_get_value_name_int(i,"SchlossPrice",FVerleih[i][fSchlossPrice]);
cache_get_value_name_int(i,"GPSPrice",FVerleih[i][fGPSPrice]);
cache_get_value_name_int(i,"Konto",FVerleih[i][fKonto]);
FVerleih[i][fLogged] = true;
FVerleih[i][fPickupID] = CreatePickup(FVerleih[i][fIconID], 1, FVerleih[i][fCoords][0],FVerleih[i][fCoords][1],FVerleih[i][fCoords][2]);
FVerleih[i][fTXT3D] = Create3DTextLabel(""#SERVERFARBE"Fahrradverleih\n{FFFFFF}Drücke ENTER/F", 0xFFFFFFFF, FVerleih[i][fCoords][0],FVerleih[i][fCoords][1],FVerleih[i][fCoords][2], 5, 0);
printf("[LOADDATA]Fahrradverleih %d:", i); // Ob der Durchlauf erfolgreich ausgelesen wurde
printf("%f %f %f",FVerleih[i][fCoords][0], FVerleih[i][fCoords][1], FVerleih[i][fCoords][2]);
}
}
else
{
return printf("[DATABASE] '%s' wurde kein Eintrag gefunden.", TableName[database]);
}
FVerleihCount = cache_num_rows();
ServerStartChecks[1] = true;
for(new i; i!=FVerleihCount; i++) // Der Check ob alle durchläufe geklappt haben
{
printf("[LOADDATA:CHECK]Fahrradverleih %d:", i);
printf("%f %f %f",FVerleih[i][fCoords][0], FVerleih[i][fCoords][1], FVerleih[i][fCoords][2]);
}
return printf("[DATABASE] '%s' wurden %d Einträge geladen.", TableName[database], cache_num_rows());
}
case 1: // serverinfo_price
{
cache_get_value_name_int(0,"Perso",ServerPrice[Perso]);
cache_get_value_name_int(0,"CKonto",ServerPrice[CKonto]);
ServerStartChecks[2] = true;
return printf("[DATABASE] '%s' wurde geladen.", TableName[database]);
}
}
return 1;
}
Alles anzeigen
hier die Ausgabe der Checks, an die server_log.log
[15:54:12] [LOADDATA]Fahrradverleih 0:
[15:54:12] 1753.994384 -1887.939941 13.557000
[15:54:12] [LOADDATA]Fahrradverleih 1:
[15:54:12] 1182.340332 -1332.666992 13.583100
[15:54:12] [LOADDATA:CHECK]Fahrradverleih 0:
[15:54:12] 0.000000 0.000000 0.000000
[15:54:12] [LOADDATA:CHECK]Fahrradverleih 1:
[15:54:12] 1182.340332 -1332.666992 13.583100
[22:49:34] Fahrradverleih 0:
[22:49:34] 0.000000 0.000000 0.000000
[22:49:34] Fahrradverleih 1:
[22:49:34] 1182.340332 -1332.666992 13.583100
Habe es mal bei dem zweiten Verleih probiert und da funktioniert ist scheinbar.
Beim Ersten Verleih (ID 0) nicht, da ja die Coords 0 betragen, woran kann das den liegen ?
EDIT:
Habe mal ein 3. Verleih hinzugefügt, aber beim Start des Server, bekomme ich keinen Debug von public LoadDataInfo, das die Tabelle ausgelesen und geladen wurde. Sobald ich den 3. Eintrag lösche ist alles wieder beim alten
Ja warum funktioniert es dann bei den vordefinierten Koordinaten ?
Hier erstelle im Scriptkopf die Standartgebäude:
stock const ServerStates[MAX_SERVERSTATES][sCFG] = {
{ PICKUP_PFEIL,3,0,""#SERVERFARBE"Stadthalle\n{FFFFFF}Drücke ENTER/F",1480.8480,-1771.5313,18.7958,390.7539,173.8786,1008.3828,true},
{ PICKUP_PFEIL,0,0,""#SERVERFARBE"Citybank\n{FFFFFF}Drücke ENTER/F",1469.4771,-1011.4132,26.8438,2305.5535,-16.3067,26.7496,true}
};
hier habe ich sie auch bei KeyState unter der taste ENTER/F
case 16: //Enter
{
for(new i; i!=FVerleihCount; i++)
{
if(IsPlayerInRangeOfPoint(playerid, 1.0, FVerleih[i][fCoords][0], FVerleih[i][fCoords][1], FVerleih[i][fCoords][2]))
{
SetPVarInt(playerid, "FVerleih", i);
format(str, sizeof(str),"{FFFFFF}Herzlich Willkommen "#SERVERFARBE"%s{FFFFFF},\nMöchtest du dir ein Fahrrad für 30 Minuten leihen ?", SpielerInfo[playerid][pName]);
ShowPlayerDialog(playerid, DIALOG_FAHRRADLEIH, DIALOG_STYLE_MSGBOX, ""#SERVERFARBE"Fahrradverleih",str, "Ja","Nein");
return 1;
}
printf("Fahrradverleih ENTER NR. %d", i);
}
for(new i; i!=MAX_SERVERSTATES; i++)
{
if(IsPlayerInRangeOfPoint(playerid, 1.0, ServerStates[i][sX],ServerStates[i][sY],ServerStates[i][sZ]))
{
SetPlayerPos(playerid, ServerStates[i][sX2],ServerStates[i][sY2],ServerStates[i][sZ2]);
SetPlayerVirtualWorld(playerid, ServerStates[i][sVirtualWorld]);
SetPlayerInterior(playerid, ServerStates[i][sInterior]);
format(str, sizeof(str), "~g~%s", ServerStates[i][sTXT]);
GameTextForPlayer(playerid, str, 600, 3);
return 1;
}
else if(IsPlayerInRangeOfPoint(playerid, 1.0, ServerStates[i][sX2],ServerStates[i][sY2],ServerStates[i][sZ2]) && GetPlayerInterior(playerid) == 3)
{
SetPlayerPos(playerid, ServerStates[i][sX],ServerStates[i][sY],ServerStates[i][sZ]);
SetPlayerVirtualWorld(playerid, 0);
SetPlayerInterior(playerid, 0);
GameTextForPlayer(playerid, "~r~Auf Wiedersehen", 600, 3);
return 1;
}
}
Alles anzeigen
Hier funktioniert das ganze einwandfrei
Also denke ich nicht das es an der Keyprüfung liegt
Ich habe mein dynamisches Fahrradverleihsystem soweit fertig, habe aber ein Problem, dass sich einfach beheben lässt.
Und zwar wird der Fahrradverleih aus der Datenbank ausgelesen, erstellt und ist vollkommen sichtbar.
Ein Harken bleibt dennoch, sobald ich auf das erstellte Icon gehe und die Taste ENTER/F Drücke erscheint einfach der Dialog nicht wie geplant.
Die Console gibt wiederrum beide erstellten Verleihs als druchlauf an.
Ich hoffe Ihr könnt mir helfen
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
new str[256];
switch(newkeys)
{
case 16: //Enter
{
for(new i; i!=FVerleihCount; i++)
{
if(IsPlayerInRangeOfPoint(playerid, 1.0, FVerleih[i][fCoords][0], FVerleih[i][fCoords][1], FVerleih[i][fCoords][2]))
{
SetPVarInt(playerid, "FVerleih", i);
format(str, sizeof(str),"{FFFFFF}Herzlich Willkommen "#SERVERFARBE"%s{FFFFFF},\nMöchtest du dir ein Fahrrad für 30 Minuten leihen ?", SpielerInfo[playerid][pName]);
ShowPlayerDialog(playerid, DIALOG_FAHRRADLEIH, DIALOG_STYLE_MSGBOX, ""#SERVERFARBE"Fahrradverleih",str, "Ja","Nein");
return 1;
}
printf("Fahrradverleih ENTER NR. %d", i);
}
//...
Alles anzeigen
im nachfolgenden ist der Ausschnitt, wo ich den Verleih lade und auch erfolgreich erstellt wird
public LoadDataInfo(database)
{
switch(database)
{
case 0: // fahrradverleih_list
{
if(cache_num_rows() != 0)
{
for(new i; i!=cache_num_rows(); i++)
{
cache_get_value_name_int(i,"pID",FVerleih[i][fID]);
cache_get_value_name_int(i,"PickupID",FVerleih[i][fIconID]);
cache_get_value_name(i,"Name",FVerleih[i][fName]);
cache_get_value_name_float(i,"coordsX",FVerleih[i][fCoords][0]);
cache_get_value_name_float(i,"coordsY",FVerleih[i][fCoords][1]);
cache_get_value_name_float(i,"coordsZ",FVerleih[i][fCoords][2]);
cache_get_value_name_float(i,"coordsX2",FVerleih[i][fCoords][3]);
cache_get_value_name_float(i,"coordsY2",FVerleih[i][fCoords][4]);
cache_get_value_name_float(i,"coordsZ2",FVerleih[i][fCoords][5]);
cache_get_value_name_float(i,"coordsFA",FVerleih[i][fCoords][6]);
cache_get_value_name_int(i,"BikePrice",FVerleih[i][fBikePrice]);
cache_get_value_name_int(i,"BMXPrice",FVerleih[i][fBMXPrice]);
cache_get_value_name_int(i,"MBikePrice",FVerleih[i][fMBikePrice]);
cache_get_value_name_int(i,"SchlossPrice",FVerleih[i][fSchlossPrice]);
cache_get_value_name_int(i,"GPSPrice",FVerleih[i][fGPSPrice]);
cache_get_value_name_int(i,"Konto",FVerleih[i][fKonto]);
FVerleih[i][fLogged] = true;
new str[128];
FVerleih[i][fPickupID] = CreatePickup(FVerleih[i][fIconID], 1, FVerleih[i][fCoords][0],FVerleih[i][fCoords][1],FVerleih[i][fCoords][2]);
format(str, sizeof(str), ""#SERVERFARBE"%s\n{FFFFFF}Drücke ENTER/F",FVerleih[i][fName]);
FVerleih[i][fTXT3D] = Create3DTextLabel(str, 0xFFFFFFFF, FVerleih[i][fCoords][0],FVerleih[i][fCoords][1],FVerleih[i][fCoords][2], 5, 0);
}
}
else
{
return printf("[DATABASE] '%s' wurde kein Eintrag gefunden.", TableName[database]);
}
FVerleihCount = cache_num_rows();
return printf("[DATABASE] '%s' wurden %d Einträge geladen.", TableName[database], cache_num_rows());
}
Alles anzeigen
Ich danke für deinen gedanken Stoß !
Hab mich durchgelesen und habe das Problem nun gelöst
Danke dir dafür, das du mir es net vorgeschrieben hast und mich denken lassen hast
Hey ich versuche ein Dyn. Fahrradverleihsystem zu errichten, aber bei dem Anfangstest wo ich die Daten auslesen möchte, nachdem ich Sie erstmal Manuell eingefügt habe.
Habe ich das Problem, das bei meiner Consoleninfo durch print & printf gesagt wird, das es keine Einträge gibt, woraufhin ich mal die MySQL.log gecheckt und da folgende Fehlermeldung habe:
Ich kann mir nur erklären, dass es ein Problem beim Zählen gibt oder wie da steht der Cache leer zu scheinen seit.
SA-MP Dedicated Server
----------------------
v0.3.7, (C)2005-2015 SA-MP Team
[17:04:56] password = "" (string)
[17:04:56]
[17:04:56] Server Plugins
[17:04:56] --------------
[17:04:56] Loading plugin: mysql
[17:04:56] >> plugin.mysql: R39-3 successfully loaded.
[17:04:56] Loaded.
[17:04:56] Loading plugin: streamer
[17:04:56]
*** Streamer Plugin v2.7.5.2 by Incognito loaded ***
[17:04:56] Loaded.
[17:04:56] Loading plugin: sscanf
[17:04:56]
[17:04:56] ===============================
[17:04:56] sscanf plugin loaded.
[17:04:56] Version: 2.8.1
[17:04:56] (c) 2012 Alex "Y_Less" Cole
[17:04:56] ===============================
[17:04:56] Loaded.
[17:04:56] Loaded 3 plugins.
[17:04:56]
[17:04:56] Filterscripts
[17:04:56] ---------------
[17:04:56] Loading filterscript 'speedo.amx'...
[17:04:56]
--------------------------------------
[17:04:56] -----Vehicle Speedometer by ConnorW-----
[17:04:56] --------------------------------------
[17:04:56] Loading filterscript 'ObjectGate.amx'...
[17:04:56] Loaded 2 filterscripts.
[17:04:56] [MYSQL] » Verbindungsaufbau...
[17:04:56] [MYSQL] » Die Verbindung zur Datenbank wurde erfolgreich hergestellt! Handle: 1
[17:04:56] [DATABASE] Lade Daten aus der Tabelle 'fahrradverleih_list'...
[17:04:56] [DATABASE] 'fahrradverleih_list' wurde kein Eintrag gefunden.
[17:04:56]
----------------------------------
[17:04:56] Blank Gamemode by EllBundy
[17:04:56] ----------------------------------
[17:04:56] Number of vehicle models: 0
Alles anzeigen
Die die Wiedergabe aus der Console beinhaltet folgendes:
Hier ist die Datenbankabfrage in pawno wo ich die einzelne Punkte der Standorte des Fahrradverleihs laden möchte:
stock LoadDataInfo(database)
{
new query[128],result[24];
switch(database)
{
case 0: // Fahrradverleih
{
mysql_format(handle, query, sizeof(query), "SELECT * FROM %s WHERE Online = '1'", TableName[database]);
mysql_pquery(handle, query);
if(cache_num_rows() != 0)
{
for(new i; i!=cache_num_rows(); i++)
{
cache_get_field_content(0,"pID",result); FVerleih[i][fID] = strval(result);
cache_get_field_content(0,"PickupID",result); FVerleih[i][fPickup] = strval(result);
cache_get_field_content(0,"fTXT",result); FVerleih[i][fMainTXT] = strlen(result);
cache_get_field_content(0,"sTXT",result); FVerleih[i][fKeyTXT] = strlen(result);
cache_get_field_content(0,"Keystate",result); FVerleih[i][fKeystate] = strval(result);
cache_get_field_content(0,"coordsX",result); FVerleih[i][fCoords][0] = floatstr(result);
cache_get_field_content(0,"coordsY",result); FVerleih[i][fCoords][1] = floatstr(result);
cache_get_field_content(0,"coordsZ",result); FVerleih[i][fCoords][2] = floatstr(result);
FVerleih[i][fLogged] = true;
printf("Test: Eintrag %d hat folgende Einträge:",i);
printf("%d | %d | %s | %s | %d | %f | %f | %f",FVerleih[i][fID],FVerleih[i][fPickup],FVerleih[i][fMainTXT],FVerleih[i][fKeyTXT],FVerleih[i][fKeystate],FVerleih[i][fCoords][0],FVerleih[i][fCoords][1],FVerleih[i][fCoords][2]);
}
}
else
{
return printf("[DATABASE] '%s' wurde kein Eintrag gefunden.", TableName[database]);
}
return printf("[DATABASE] '%s' wurden %d Einträge geladen.", TableName[database], cache_num_rows());
}
}
return 1;
}
Alles anzeigen
Vielen dank es funktioniert
Hier mal der ganze Code sowie ein Bild der Datenbank
#include <a_samp>
#include <a_mysql>
#include <logintextdraws-de>
#undef MAX_PLAYERS
#define MAX_PLAYERS 5
#define SQL_HOST "127.0.0.1"
#define SQL_USER "root"
#define SQL_PASS ""
#define SQL_DATA "samp"
new handle;
main()
{
print("\n----------------------------------");
print(" Blank Gamemode by EllBundy");
print("----------------------------------\n");
}
enum{
DIALOG_REGISTER,
DIALOG_LOGIN
}
enum SpielerData{
pID,
pName[MAX_PLAYER_NAME],
pLevel,
pMoney,
pAdmin
}
new SpielerInfo[MAX_PLAYERS][SpielerData];
public OnGameModeInit()
{
MySQL_SetupConnection();
SetGameModeText("EllBundy´s Script");
return 1;
}
public OnGameModeExit()
{
mysql_close(handle);
return 1;
}
public OnPlayerRequestClass(playerid, classid)
{
if(!GetPVarInt(playerid, "logged"))
{
new query[128];
print("1");
mysql_format(handle, query, sizeof(query), "SELECT uID FROM account_list WHERE Name = '%e'", SpielerInfo[playerid][pName]);
mysql_pquery(handle, query, "OnUserCheck", "d", playerid);
printf("%s",query);
}
return 1;
}
public OnPlayerConnect(playerid)
{
CreatePlayerLoginTextDraws(playerid);
ResetPlayer(playerid);
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
SaveUserStats(playerid);
DestroyPlayerLoginTextDraws(playerid);
return 1;
}
public OnPlayerSpawn(playerid)
{
SetPlayerPos(playerid,1753.2694,-1911.9766,13.5676);
SetPlayerFacingAngle(playerid,272.5242);
return 1;
}
public OnPlayerRequestSpawn(playerid)
{
if(!GetPVarInt(playerid, "logged"))
{
SendClientMessage(playerid, -1, "{FF0000}Du musst dich einloggen bevor du spawnen kannst!");
return 0;
}
return 1;
}
public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid)
{
if(playertextid == PlayerLoginTextDraw[playerid][0])
{
if(pRegistered[playerid] == true)
{
ShowPlayerDialog(playerid, DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Anmeldung", "Bitte logge Dich mit deinem Passwort ein:", "Anmelden", "Abbrechen");
}
else
{
ShowPlayerDialog(playerid, DIALOG_REGISTER,DIALOG_STYLE_PASSWORD,"Registration", "Bitte gebe ein Passwort für die Regestration ein:", "Regestrieren", "Abbrechen");
}
}
return 0;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case DIALOG_REGISTER:
{
if(!response) return Kick(playerid);
if(strlen(inputtext) < 8) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registration", "Bitte gebe ein Passwort für die Regestration ein:\n{FF0000}Mindestens 8 Zeichen!", "Regestrieren", "Abbrechen");
new query[256];
mysql_format(handle, query, sizeof(query), "INSERT INTO account_list (Name, Passwort) VALUES ('%e', MD5('%e'))", SpielerInfo[playerid][pName], inputtext);
mysql_pquery(handle, query, "OnUserRegister", "d", playerid);
}
case DIALOG_LOGIN:
{
if(!response) return Kick(playerid);
if(strlen(inputtext) < 8) return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmeldung", "Bitte logge Dich mit deinem Passwort ein:\n{FF0000}Mindestens 8 Zeichen!", "Anmelden", "Abbrechen");
new query[256];
mysql_format(handle, query, sizeof(query), "SELECT * FROM account_list WHERE Name = '%e' AND Passwort = MD5('%e')", SpielerInfo[playerid][pName], inputtext);
mysql_pquery(handle, query, "OnUserLogin", "d", playerid);
}
}
return 1;
}
forward OnUserCheck(playerid);
public OnUserCheck(playerid)
{
new rows;
cache_get_row_count(rows);
printf("rows %d",rows);
if(rows == 0)
{
print("11");
PlayerIsNotRegistered(playerid);
ShowLoginTextDraws(playerid);
}
else
{
print("12");
PlayerIsRegistered(playerid);
ShowLoginTextDraws(playerid);
}
return 1;
}
forward OnUserRegister(playerid);
public OnUserRegister(playerid)
{
SpielerInfo[playerid][pID] = cache_insert_id();
SetPVarInt(playerid, "logged", true);
SendClientMessage(playerid, 0x00FF00FF, "[Konto] Registration erfolgreich.");
PlayerPlaySound(playerid, 1057 , 0.0, 0.0, 0.0);
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmeldung", "Bitte logge Dich mit deinem Passwort ein:", "Anmelden", "Abbrechen");
return 1;
}
forward OnUserLogin(playerid);
public OnUserLogin(playerid)
{
new rows,result[25];
cache_get_row_count(rows);
if(rows == 0)
{
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmeldung", "Bitte logge Dich mit deinem Passwort ein:\n{FF0000}Falsches Passwort!", "Anmelden", "Abbrechen");
}
else
{
cache_get_field_content(0,"uID",result); SpielerInfo[playerid][pID] = strval(result);
cache_get_field_content(0,"Level",result); SpielerInfo[playerid][pID] = strval(result);
cache_get_field_content(0,"Money",result); SpielerInfo[playerid][pID] = strval(result);
cache_get_field_content(0,"Admin",result); SpielerInfo[playerid][pAdmin] = strval(result);
SetPVarInt(playerid, "logged", true);
SendClientMessage(playerid, 0x00FF00FF, "[Konto] Eingeloggt.");
PlayerPlaySound(playerid, 1057 , 0.0, 0.0, 0.0);
GivePlayerMoney(playerid, SpielerInfo[playerid][pMoney]);
HideLoginTextDraws(playerid);
SpawnPlayer(playerid);
}
return 1;
}
stock MySQL_SetupConnection(ttl = 3)
{
print("[MYSQL] » Verbindungsaufbau...");
handle = mysql_connect(SQL_HOST, SQL_USER, SQL_DATA, SQL_PASS);
if(mysql_errno(handle) != 0)
{
if(ttl > 1)
{
print("[MYSQL] » Es konnte keine Verbindung zur Datenbank hergestellt werden.");
printf("[MYSQL] » Starte neuen Verbindungsversuch (TTL: %d).", ttl-1);
return MySQL_SetupConnection(ttl-1);
}
else
{
print("[MYSQL] » Es konnte keine Verbindung zur Datenbank hergestellt werden.");
print("[MYSQL] » Bitte prüfen Sie die Verbindungsdaten.");
print("[SERVER] » Der Server wird heruntergefahren.");
return SendRconCommand("exit");
}
}
return printf("[MYSQL] » Die Verbindung zur Datenbank wurde erfolgreich hergestellt! Handle: %d", _:handle);
}
stock ResetPlayer(playerid)
{
SpielerInfo[playerid][pID] = false;
SpielerInfo[playerid][pLevel] = false;
SpielerInfo[playerid][pMoney] = false;
SpielerInfo[playerid][pAdmin] = false;
GetPlayerName(playerid, SpielerInfo[playerid][pName], MAX_PLAYER_NAME);
}
stock SaveUserStats(playerid)
{
if(!GetPVarInt(playerid, "logged")) return 1;
new query[256];
mysql_format(handle, query, sizeof(query), "UPDATE account_list SET Level = '%d', Money = '%d' WHERE uID = '%d'",
SpielerInfo[playerid][pLevel], SpielerInfo[playerid][pMoney], SpielerInfo[playerid][pID]);
mysql_pquery(handle, query);
return 1;
}
Alles anzeigen
stock ResetPlayer(playerid)
{
SpielerInfo[playerid][pID] = false;
SpielerInfo[playerid][pLevel] = false;
SpielerInfo[playerid][pMoney] = false;
SpielerInfo[playerid][pAdmin] = false;
GetPlayerName(playerid, SpielerInfo[playerid][pName], MAX_PLAYER_NAME);
}
public OnPlayerConnect(playerid)
{
CreatePlayerLoginTextDraws(playerid);
ResetPlayer(playerid);
return 1;
}
Alles anzeigen
Ich habe diesen Code übernommen und habe folgendes Problem, der Account wurde erfolgreich erstellt. Aber sobald ich mich einloggen möchte, steht da erneut Regestrieren, obwohl der Name bereits in der Datenbank vorhanden ist.
Ich hoffe Ihr könnt mir da auf die Sprünge helfen, da ich verzweifle wieso, weshalb und warum
public OnPlayerRequestClass(playerid, classid)
{
if(!GetPVarInt(playerid, "Logged"))
{
new query[128];
mysql_format(handle, query, sizeof(query), "SELECT uID FROM account_list WHERE Name = '%e'", SpielerInfo[playerid][pName]);
mysql_pquery(handle, query, "OnUserCheck", "i", playerid);
}
return 1;
}
public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid)
{
if(playertextid == PlayerLoginTextDraw[playerid][0])
{
if(pRegistered[playerid] == true)
{
ShowPlayerDialog(playerid, DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Anmeldung", "Bitte logge Dich mit deinem Passwort ein:", "Anmelden", "Abbrechen");
}
else
{
ShowPlayerDialog(playerid, DIALOG_REGISTER,DIALOG_STYLE_PASSWORD,"Registration", "Bitte gebe ein Passwort für die Regestration ein:", "Regestrieren", "Abbrechen");
}
}
return 0;
}
forward OnUserCheck(playerid);
public OnUserCheck(playerid)
{
new rows;
cache_get_row_count(rows);
if(rows == 0)
{
PlayerIsNotRegistered(playerid);
ShowLoginTextDraws(playerid);
}
else
{
PlayerIsRegistered(playerid);
ShowLoginTextDraws(playerid);
}
return 1;
}
Ich habe das .inc eingefügt und habe auch keine Error bzw. Warnings....
Selbe Ausgabe wie davor !
Ich habe den Codeschnipsel (pastebin) mal ein Post früher im Edit eingefügt
Bin jetzt die Suche mit sLoggedIn durch !
Ich frage Sie nur ab und setze sie oben im Script bei new ServerCFG[serverPickup] (Hier im Forum unten ;D)
Also wo ich Sie definiere setze ich ja am Ende ein True, das ist die einzigste Setzungs des Bools.
Ein Bool, kann ja Theoretisch nicht 114 haben sonder nur false(0) oder true(1). Wie passiert das
EDIT: add pastebin
https://pastebin.com/W3nCMqNc
Habe den Codeschnipsel erst angefangen, deswegen noch so klein
Sry für die unübersichtlichkeit, aber das Forum übernimmt die Paste Funktion nicht so
printf = SEARCH 0|114
114 Okay ?!
Bin auch zu der ID 0 gefahren und Enter getestet, aber ich komme nicht über die IsPlayerInRange funktion, d.h. bekomme nur printf angezeigt und nicht den standart print
//EDIT
Sorry was übersehen, dass du das printf hoch gesetzt hast !
Nun kommt
printf = SEARCH 0|114
printf = SEARCH 0|114
printf = SEARCH 1|0
Bekomme nun 3 Meldungen
Ich kapiere nicht warum bei OnGameModeInit() alles wunderbar geladen wird
for(new i; i!=MAX_SERVERCFG; i++)
{
if(ServerCFG[i][sLoggedIn])
{
CreatePickup(ServerCFG[i][sPickupID], 1, ServerCFG[i][sX],ServerCFG[i][sY],ServerCFG[i][sZ]);
Create3DTextLabel(ServerCFG[i][sTXT], 0xFFFFFFFF, ServerCFG[i][sX],ServerCFG[i][sY],ServerCFG[i][sZ], 5, 0);
}
}
und bei KeyStateChange() // Enter-Taste // nur die ID 0 geladen wird
for(new i; i!=MAX_SERVERCFG; i++)
{
if(ServerCFG[i][sLoggedIn])
{
printf("SEARCH %d",i);
if(IsPlayerInRangeOfPoint(playerid, 2.0, ServerCFG[i][sX], ServerCFG[i][sY], ServerCFG[i][sZ]))
{
switch(i)
{
case 0: //Stadthalle
{
print("0");
break;
}
case 1: // Fahrradverleih
{
print("2");
if(!HaveFahrrad[playerid]) return SendClientMessage(playerid, COLOR_GREY, "Du hast bereits ein Fahrrad geliehen bekommen. Mit /findbike kannst du es finden.");
if(!SpielerInfo[playerid][pTutorial]){ format(str, sizeof(str),"Herzlich Willkommen "#SERVERFARBE"%s{FFFFFF},\nEin Fahrrad kostet dich derzeit nichts.\n\nMöchtest du dir ein Fahrrad für 30 Minuten leihen ?", SpielerInfo[playerid][pName]); }
else { format(str, sizeof(str),"Herzlich Willkommen "#SERVERFARBE"%s{FFFFFF},\nEin Fahrrad kostet dich %d SA$.\n\nMöchtest du dir ein Fahrrad für 30 Minuten leihen ?", SpielerInfo[playerid][pName], ServerPreis[Fahrradverleih]); }
ShowPlayerDialog(playerid, DIALOG_FAHRRADLEIH, DIALOG_STYLE_MSGBOX, ""#SERVERFARBE"Fahrradverleih",str, "Ja","Nein");
SetPVarInt(playerid, "FahrradverleihStand",i);
break;
}
}
}
}
}
Definition der Variablen bzw. speicherung:
#define MAX_SERVERCFG 2
enum serverPickup{
sPickupID,
sTXT[64],
Float:sX,
Float:sY,
Float:sZ,
bool:sLoggedIn
}
new ServerCFG[MAX_SERVERCFG][serverPickup] = {
{ PICKUP_PFEIL,""#SERVERFARBE"Stadthalle\n{FFFFFF}Drücke ENTER/F",1480.8480,-1771.5313,18.7958,true},
{ PICKUP_I,""#SERVERFARBE"Fahrradverleih\n{FFFFFF}Drücke ENTER/F",1753.9944,-1887.9404,13.5570,true}
};
Wie gesagt, InGame bekomme ich beide wunderbar angezeigt, doch bei Theo. ID 1 wenn ich Enter drücke passiert nichts, nach einer Printf Fehlersuche, stellte ich Fest das nur die ID 0 aufgezählt wird !
Ich hoffe Ihr könnt mir das Irrtum erklären
DANKE EllBundy
else
{
cache_get_field_content(0,"banned",result); SpielerInfo[playerid][pBanned] = strval(result);
if(SpielerInfo[playerid][pBanned]){ return Kick(playerid); }
cache_get_field_content(0,"ID",result); SpielerInfo[playerid][p_id] = strval(result);
cache_get_field_content(0,"level",result); SpielerInfo[playerid][pLevel] = strval(result);
cache_get_field_content(0,"money",result); SpielerInfo[playerid][pMoney] = strval(result);
cache_get_field_content(0,"regestriert",result); SpielerInfo[playerid][pReg] = strval(result);
cache_get_field_content(0,"logins",result); SpielerInfo[playerid][pLogins] = strval(result);
cache_get_field_content(0,"admin",result); SpielerInfo[playerid][pAdmin] = strval(result);
cache_get_field_content(0,"exp",result); SpielerInfo[playerid][pEXP] = strval(result);
cache_get_field_content(0,"nextexp",result); SpielerInfo[playerid][pNextEXP] = strval(result);
cache_get_field_content(0,"pdmin",result); SpielerInfo[playerid][pPDMin] = strval(result);
cache_get_field_content(0,"paydays",result); SpielerInfo[playerid][pPayDays] = strval(result);
cache_get_field_content(0,"skin",result); SpielerInfo[playerid][pSkin] = strval(result);
cache_get_field_content(0,"tutorial",result); SpielerInfo[playerid][pTutorial] = strval(result);
SpielerInfo[playerid][pLoggedIn] = true;
SpielerInfo[playerid][pLogins]++;
SetPlayerScore(playerid, SpielerInfo[playerid][pLevel]);
SetPlayerSkin(playerid, SpielerInfo[playerid][pSkin]);
SendClientMessage(playerid, COLOR_WHITE, "[Account] Sie wurden erfolgreich eingeloggt.");
SetMoney(playerid, SpielerInfo[playerid][pMoney]);
}
Ich Lade sie über einen MYSQL-Befehl "SELECT * FROM ..." // Denke da wäre die enum Version eine bessere
Ich habe mir die Seite mal näher betrachtet, diese Funktion kann einiges. Brauchen wird man aber nicht alles, denke ich mal.
@LeonMrBonnie
Danke für deine Aufklärung
Gut zu wissen, das ich sie für FS benutzen kann. Danke für die Aussage
Also wenn ich Spielerdaten aus meine SQL lade wäre es sinnvoll diese in enums zu laden und die wo ich nur scriptintern brauche in PVars ?
Also sowas wie GetPVarInt(playerid, "IstEingeloggt");.... GetPVarInt(playerid, "IstImTutorial"); ...
Wie sieht es aus mit der Scriptschonung ?
Habe ich mit der Variante einen Nachteil oder ist es ganz gleich was ich benutze