Hab es geändert, sorry
Hab es ja nun ganz runter ins Script, also müsste es doch jetzt als letztes aufgerufen werden oder?
Hab es geändert, sorry
Hab es ja nun ganz runter ins Script, also müsste es doch jetzt als letztes aufgerufen werden oder?
Nein BlackAce, dann erstellt es ja bei jedem Server-Start die Fraktionen. Er prüft ja, wie viele Fraktionen existieren und erstellt dann ggf. die, die noch nicht existieren.
TVPikachu, du rufst den Code gar nicht auf. Poste doch bitte mal dein gesamtes OnGameModeInit, und zwar auch den Teil, mit dem du die Verbindung zur Datenbank herstellst (Passwort entfernen!).
Und ändere das wieder zurück, das war schon richtig, sonst hätte ich es dir nicht gesagt.
Hab es ja nun ganz runter ins Script, also müsste es doch jetzt als letztes aufgerufen werden oder?
Nur weil es ganz unten im Script ist, heißt es nicht das es auch als letztes aufgerufen wird.
Pawn ist es im endeffekt egal wo es steht, es geht nur daraum wann es aufgerufen wird.
Du kannst uns ja mal den Code Zeigemn von dem du dein "public" verbindung aufrufst
Jeffry: Das kann aber in dem Code abschnitt gar nicht sein, schließlich steht das mysqwl_num_rows dort völlig alleine ohne werde Funktion
Ich habe Maddins system da steht nichts unter OnGamemodeinit
aber bei Onplayerrequestetclass
public OnPlayerRequestClass(playerid, classid)
{
SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
if(GetPVarInt(playerid,"Eingeloggt") == 0)
{
if(mysql_CheckAccount(playerid) == 0)
{
SendClientMessage(playerid, 0xFFFFFFFF,"________Herzlich Wilkommen auf San Francisco Reallife________");
SendClientMessage(playerid, 0xFFFFFFFF,"Datenbank: Akte konnte nicht gefunden werden. Bitte Registrieren Sie sich!");
ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Registrieren","Bitte gib dein Persöhnliches Passwort ein:","Register","Abbrechen");
}
else if(mysql_CheckAccount(playerid) == 1)
{
SendClientMessage(playerid, 0xFFFFFFFF,"________Herzlich Wilkommen auf San Francisco Reallife________");
SendClientMessage(playerid, 0xFFFFFFFF,"Datenbank: Akte wurde gefunden. Bitte Loggen Sie sich ein!");
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Einloggen","Bitte gib dein Passwort ein:","Login","Abbrechen");
}
}
return 1;
}
dann bei dialog
switch(dialogid)
{
case DIALOG_REGISTER:
{
if(response)
{
if(strlen(inputtext) == 0)
{
ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Regestration","Datenbank: Das angegebene Passwort ist zu kurz!","Register","Abbrechen");
return 1;
}
else
{
CreateAccount(playerid, inputtext);
SetPVarInt(playerid,"Eingeloggt",1);
SpawnPlayer(playerid);
SetSpawnInfo(playerid, 0, 0, -1982.5010,140.7040,27.6875,89.0363, 0, 0, 0, 0, 0, 0 );
return 1;
}
}
else
{
Kick(playerid);
}
}
case DIALOG_LOGIN:
{
if(response)
{
if(strlen(inputtext) == 0)
{
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Einloggen","Datenbank: Das angegebene Passwort ist falsch!","Login","Abbrechen");
return 1;
}
else
{
new PlayerName[MAX_PLAYER_NAME];
GetPlayerName(playerid, PlayerName, MAX_PLAYER_NAME);
if(!strcmp(inputtext, mysql_ReturnPasswort(PlayerName), true))
{
SetPVarInt(playerid,"Eingeloggt",1);
LoadPlayer(playerid);
SpawnPlayer(playerid);
return 1;
}
else
{
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Einloggen","Datenbank: Das war das falsche Passwort!","Login","Abbrechen");
return 1;
}
}
}
else
{
Kick(playerid);
}
}
}
und nun noch da wo die verbindung hergestellt wird
stock Connect_To_Database()
{
mysql_connect(SQL_HOST, SQL_USER, SQL_DATA, SQL_PASS); //Wir versuchen mit den Angaben die wir oben im Script gemacht haben uns mit dem MySQL Server zu verbinden.
if(mysql_ping() == 1) //Es wird überprüft ob die Verbindung steht.
{
//Falls ja wird das in die Console geschrieben und die Funktion wird beendet.
print("<-| [MYSQL] Verbindung zur Datenbank wurde erfolgreich hergestellt!");
return true;
}
else
{
//Falls nicht wird erneut versucht eine verbindung aufzubauen.
print("<-| [MYSQL] Es konnte keine Verbindung zur Datenbank hergestellt werden!");
print("<-| [MYSQL] Es wird erneut versucht eine Verbindung zur Datenbank herzustellen!");
mysql_connect(SQL_HOST, SQL_USER, SQL_DATA, SQL_PASS);
if(mysql_ping() == 1)
{
print("<-| [MYSQL] Es konnte im 2 Versuch eine Verbindung hergestellt werden!");
return true;
}
else
{
//Falls das auch nicht Funktioniert wird der Server zur Sicherheit wieder heruntergefahren.
print("<-| [MYSQL] Es konnte keine Verbindung zur Datenbank hergestellt werden!");
print("<-| [MYSQL] Der Server wird nun beendet!");
SendRconCommand("exit");
return true;
}
}
}
Falls ich irgendwas ausgelassen habe oder du andere sachen brauchst sag es, dann sorry
PS Danke für die hilfe
Es ist allerdings egal, ob da jetzt 0 steht, oder mysql_num_rows 0 ausgibt, das kommt im Endeffekt auf das gleiche raus.
Natürlich muss es so aussehen:
mysql_query("SELECT * FROM Kassen");
mysql_store_result();
new rows = mysql_num_rows();
for(new i=rows; i < MAX_FRAKTION; i++)
{
if(mysql_CheckKasse(i) == 0)
{
switch(i)
{
case 1: mysql_query("INSERT INTO Kassen (Name) VALUES ('ADAC');");
case 2: mysql_query("INSERT INTO Kassen (Name) VALUES ('Staatskasse');");
case 3: mysql_query("INSERT INTO Kassen (Name) VALUES ('Test');");
}
}
}
Und das "Connect_To_Database();" muss vor dem Code stehen.
Schreibe am besten "Connect_To_Database();" in die erste Zeile nach public OnGameModeInit.
Ist es Jeffry, dass war es die ganze Zeit sorry
Ich habe jetzt den Code mit dem von deinem getauscht und das in der MySQL log steht jetzt so
[17:40:53]
[17:40:53] ---------------------------
[17:40:53] MySQL Debugging activated (02/26/15)
[17:40:53] ---------------------------
[17:40:53]
[17:41:17]
[17:41:17] ---------------------------
[17:41:17] MySQL Debugging activated (02/26/15)
[17:41:17] ---------------------------
[17:41:17]
Alles anzeigen
Edit:
Fortschritte!
ich habe den Public gelöscht und es wieder unter OnGameModeInit geschrieben jetzt erstellt er eine ADAC Kasse
Es ist allerdings egal, ob da jetzt 0 steht, oder mysql_num_rows 0 ausgibt, das kommt im Endeffekt auf das gleiche raus.
Das schon, nur kann ich leider nicht Hellsehen
Aber so ist der Code doch total murks.
Wenn die Kassen von Fraktion 2 und 3 exisitieren und die von Fraktion 1 nicht, wird die niemals eine Kasse bekommen und der Rest dafür aber mehr als eine.
Also müsste der Select Query weg und man müsste von 0 anfangen zu zählen.
So wie ich das sehe fehlt vor mysql_connect das hier:
mysql_debug(1);
Hast du das nicht eingefügt? Es wird nämlich kein Query geloggt, nichts. Du siehst ja, dass es praktisch leer ist.
Debug ist jetzt ganz oben bei OnGameModeinit
Und die logg spuckt das aus
[17:46:06] MySQL Debugging activated (02/26/15)
[17:46:06] ---------------------------
[17:46:06]
[17:46:06] >> mysql_connect( )
[17:46:06] CMySQLHandler::CMySQLHandler() - constructor called.
[17:46:06] CMySQLHandler::CMySQLHandler() - Connecting to "127.0.0.1" | DB: "new_rl" | Username: "root" ...
[17:46:06] CMySQLHandler::Connect() - Connection was successful.
[17:46:06] CMySQLHandler::Connect() - Auto-Reconnect has been enabled.
[17:46:06] >> mysql_ping( Connection handle: 1 )
[17:46:06] CMySQLHandler::Ping() - Connection is still alive.
[17:46:06] >> mysql_query( Connection handle: 1 )
[17:46:06] CMySQLHandler::Query(SELECT * FROM Kassen) - Successfully executed.
[17:46:06] >> mysql_store_result( Connection handle: 1 )
[17:46:06] CMySQLHandler::StoreResult() - Result was stored.
[17:46:06] >> mysql_num_rows( Connection handle: 1 )
[17:46:06] CMySQLHandler::NumRows() - Returned 1 row(s)
[17:46:06] >> mysql_query( Connection handle: 1 )
[17:46:06] CMySQLHandler::Query(SELECT * FROM `Kassen` WHERE `Name` = '') - Successfully executed.
[17:46:06] >> mysql_store_result( Connection handle: 1 )
[17:46:06] CMySQLHandler::StoreResult() - Result was stored.
[17:46:06] >> mysql_num_rows( Connection handle: 1 )
[17:46:06] CMySQLHandler::NumRows() - Returned 0 row(s)
[17:46:06] >> mysql_free_result( Connection handle: 1 )
[17:46:06] CMySQLHandler::FreeResult() - Result was successfully free'd.
//Edit
Und komischerweise wurde eine 2te ADAC Kasse erstellt einmal mit ID 2 und mit ID3
Alles anzeigen
[17:46:06] CMySQLHandler::Query(SELECT * FROM `Kassen` WHERE `Name` = '') - Successfully executed.
Das hier das Where leer ist, sollte eigentlich nicht so sein.
Hast du die Fraktionsnamen nicht geladen/gespeichert im Array ?
Doch natürlich
Hier einfach der komplette Code, ist übersichtlicher
enum KassenDaten
{
fName,
fGeld,
fDrogen,
fWaffen
}
new KassenInfo[MAX_FRAKTION][KassenDaten];
mysql_query("SELECT * FROM Kassen");
mysql_store_result();
new rows = mysql_num_rows();
for(new i=rows; i < MAX_FRAKTION; i++)
{
if(mysql_CheckKasse(i) == 0)
{
switch(i)
{
case 1: mysql_query("INSERT INTO Kassen (Name) VALUES ('ADAC');");
case 2: mysql_query("INSERT INTO Kassen (Name) VALUES ('Staatskasse');");
case 3: mysql_query("INSERT INTO Kassen (Name) VALUES ('Test');");
}
}
}
stock SaveKassen()
{
new string[3];
for(new i=0; i < MAX_FRAKTION; i++)
{
format(string, sizeof string, "%d", i);
mysql_SetInt("Kassen", "Geld", Kasseninfo[i][fGeld], "fName", SpielerInfo[playerid][fName]);
mysql_SetInt("Kassen", "Drogen", Kasseninfo[i][fDrogen], "fName", SpielerInfo[playerid][fName]);
mysql_SetInt("Kassen", "Waffen", Kasseninfo[i][fWaffen], "fName", SpielerInfo[playerid][fName]);
}
return 1;
}
Oh Gott der Code stimmt doch vorne und hinten nicht.
hier mal ein beispiel:
stock SaveKassen()
{
new string[3];
for(new i=0; i < MAX_FRAKTION; i++)
{
format(string, sizeof string, "%d", i);
mysql_SetInt("Kassen", "Geld", Kasseninfo[i][fGeld], "fName", SpielerInfo[playerid][fName]);
Wo kommt denn hier bitte "playerid" her ?
Das istüberhaupt nicht vorhanden.
Hier sollte Kasseninfo[i][fName] stehen, da haben wir aber gleich das nächste Problem.
Du hast den Namen der Fraktion in einem Integer also einer Zahl gespeichert.
Du kannst aber nicht bspw. 7 Zeichen in eine Zahl quetschen.
Ich weiß nur nicht was du dir dabei jetzt gedacht hast.
Willst du das wirklich als ID haben, so wie es jetzt ist oder als richten Fraktionsnamen ?
Wenn du das als ID haben willst musst du aber woanders den Namen der Fraktion haben
Willst du aber in deinem Array den Namen speichern musst du fName als Array anpassen, aber trotzdem irgendwoher den Namen der Fraktion haben.
Aber nun musst du aber irgendwie an den Namen der Fraktion kommen - ich weiß nicht wie das bei dir im Script genau aussieht
Ups das hab ich von Oben Kopiert gehabt und vergessen zu ändern :O
Also wie man auf dem Screen sieht will ich das jede Kasse ihre ID hat und ihren Namen!
Das heisst adac kasse ist bsp id 1 heisst aber adac kasse!
ich verzweifle das ist das erste mal wo ich so mit mysql arbeite könnt ihr mir helfen :D?
Danke
Also wie man auf dem Screen sieht will ich das jede Kasse ihre ID hat und ihren Namen!
Dann musst du doch aber trotzdem wissen wie die Fraktion heißt, wie willst du die denn sonst laden ?
Wenn ich nicht weiß was ich suche, kann ich auch nicht wissen ob ich es gefunden habe.
ich verzweifle das ist das erste mal wo ich so mit mysql arbeite könnt ihr mir helfen :D?
Nunja, wirklich was mit MySQL hat das jetzt nicht zu tun, eher mit dem aufbau deines Scriptes.
Du kannst nicht ADAC laden wenn du nicht danach suchst.
Also musst du deinem Query sagen, dass er danach suchen soll, aber wie willst du das machen wenn du nicht weißt wie die Fraktion heißt ?
Wo speicherst du den Namen der Fraktion denn überhaupt ?
Fangen wir mal so an
Habe es ihm per TeamViewer kurz gemacht.
Das Haupt-Problem, dass es nicht richtig ging war der AI-Key in der Datenbank und falsche Zugriffe auf die Variablen.
Es funktioniert nun alles, auch wenn man Fraktionen aus der Mitte löscht, werden diese wieder eingefügt.
Thema erledigt.
Dank Jeffry seine Hilfe per Teamviewer !
Noch mals vielen dank an dich Jeffry, bist echt nett!
Mit freundlichen Grüßen
TVPikachu