Habe folgende Errors, obwohl beides definiert ist und auch ohne Klammerfehler und vor dem 1. Error ist KEIN Klammerfehler. Heißt Zeile 1-150 ohne Klammerfehler und trotzdem Error.
grr.pwn(150) : error 017: undefined symbol "Connect_To_Database"
grr.pwn(171) : error 017: undefined symbol "AutosLaden"
Wie beseitige ich die nun?
Beiträge von Artus
-
-
Der Befehl funktioniert nicht.
Falsche ID
-
Also meiner Meinung nach muss der Fehler darin liegen, dass der Server nicht erkennt, dass ich connected bin O.o
-
Eigentlich schon, aber irgendwie bin ich selber immer eine falsche ID.
-
ocmd:pGeld(playerid,params[])
{
if(SpielerDaten[playerid][pAdmin] >= 3)
{
new pID, nGeld;
if(sscanf(params,"ui",pID, nGeld)) return SendClientMessage(playerid, Orange, "Benutzung: /pGeld [ID] [Anzahl]");
if(!IsPlayerConnected(pID)) return ShowPlayerDialog(playerid, DIALOG_FALSCHE_ID, DIALOG_STYLE_MSGBOX, "{00BFFF}Falsche ID", "{FFFFFF}Die eingegebene ID ist ungültig.\n\nBitte versuche es erneut mit einer gültigen ID.", "Okay", "");
GivePlayerMoney(playerid,nGeld);
SpielerDaten[pID][pGeld] = nGeld;
}
return 1;
}Funktioniert nicht. Bin immer noch "offline"
Vielleicht sollte ich doch eine Spielervariable erstellen, ob der Spieler eingeloggt ist.
-
GivePlayerMoney(pID,nGeld);
Wenn du das Geld komplett setzen willst benutze auch ResetPlayerMoney(pID);
Ja, also das ist ja alles klar und so, aber irgendwie sagt er mir egal bei welcher ID auch immer, dass die ungültig ist.Auch bei meiner Eigenen und auch bei meinem Spielernamen.
-
ocmd:pGeld(playerid,params[])
{
if(SpielerDaten[playerid][pAdmin] >= 3)
{
new pID, nGeld;
if(sscanf(params,"ui",pID, nGeld)) return SendClientMessage(playerid, Orange, "Benutzung: /pGeld [ID] [Anzahl]");
if(IsPlayerConnected(pID))
{
SpielerDaten[pID][pGeld] = nGeld;
}
else ShowPlayerDialog(playerid, DIALOG_FALSCHE_ID, DIALOG_STYLE_MSGBOX, "{00BFFF}Falsche ID", "{FFFFFF}Die eingegebene ID ist ungültig.\n\nBitte versuche es erneut mit einer gültigen ID.", "Okay", "");
}
return 1;
}Bei diesem Befehl kann ich mein Geld nicht setzen. Ich weiß nicht woran das liegt.
Kann mir jemand helfen?
-
Ich habe im Script Fahrzeuge, welche aus MySQL-Daten erstellt werden, wenn der Server startet.
Wenn der Server herunterfährt werden diese wieder gespeichert. Problem ist, dass alle Fahrzeuge plötzlich einen anderen Besitzer haben, nachdem der Server heruntergefahren wurde.
Vor dem Serverstart: 2 Fahrzeuge, Besitzer1: Artus, Besitzer2: Artus2 (Account existiert nicht)
--> Serverstart = MySQL-Daten bleiben so & Fahrzeuge werden erstellt
--> Spieler Artus joint, fährt kurz herum
--> Spieler Artus leavt
--> Server wird manuell von mir heruntergefahren
--> Autos werden in die MySQL-Datenbank gespeichert
--> Alle Fahrzeuge des Servers gehören nun "Artus2"Hier ist der Code, welcher die Autos speichert.
stock AutoSpeichern(playerid)
{
for(new i=0; i!=MAX_VEHICLES; i++)
{
if(GetVehicleModel(AutoDaten[i][aID]))
{
if(SpielerDaten[playerid][pName] == AutoDaten[i][aBesitzer] && strlen(AutoDaten[i][aBesitzer]))
{
mysql_SetString("grra", "Besitzer", AutoDaten[i][aBesitzer], "Besitzer", SpielerDaten[playerid][pName]);
mysql_SetInt("grra", "Model", AutoDaten[i][aModel], "Besitzer", SpielerDaten[playerid][pName]);
mysql_SetInt("grra", "Farbe_1", AutoDaten[i][aFarbe1], "Besitzer", SpielerDaten[playerid][pName]);
mysql_SetInt("grra", "Farbe_2", AutoDaten[i][aFarbe2], "Besitzer", SpielerDaten[playerid][pName]);
mysql_SetInt("grra", "Tueren", AutoDaten[i][aTueren], "Besitzer", SpielerDaten[playerid][pName]);
mysql_SetFloat("grra", "PosX", AutoDaten[i][aPosX], "Besitzer", SpielerDaten[playerid][pName]);
mysql_SetFloat("grra", "PosY", AutoDaten[i][aPosY], "Besitzer", SpielerDaten[playerid][pName]);
mysql_SetFloat("grra", "PosZ", AutoDaten[i][aPosZ], "Besitzer", SpielerDaten[playerid][pName]);
mysql_SetFloat("grra", "PosA", AutoDaten[i][aPosA], "Besitzer", SpielerDaten[playerid][pName]);
mysql_SetInt("grra", "Respawn", AutoDaten[i][aRespawn], "Besitzer", SpielerDaten[playerid][pName]);
}
}
}
return 1;
}Wo liegt der Fehler?
Edit1: Bei OnPlayerDisconnect wird das nur für den Spieler, welcher leavt durchgeführt und bei OnGameModeExit wird es für jeden Spieler durchgeführt.
-
Macht ja natürlich Sinn,den aBesitzer auszulesen in dem man in der Datenbank nach dem aBesitzer sucht den wir bereits im Script kennen.
Spoiler anzeigen Natürlich nicht
Vorausgesetzt du kennst den aBesitzer noch nicht bei AutosLaden() ( davon gehe ich aus, sonst macht es noch weniger Sinn ), dann wird dort der Wert hinter der Variable <LEER> sein.
Jetzt den Besitzer mit dem Namen <LEER> ( Also nichts ) zu suchen wird nicht funktionieren und somit alles weitere auch nicht.Hättest besser mal mit der ID gearbeitet. Je nachdem wie du das Ganze aufgezogen hast,gibt es aber auch keine ID.
eVasi0n Vorschlag ist da definitiv besser.
Ich weiß, dass das komplett falsch ist. Hatte das nur so reingeschrieben, um den Aufbau zu zeigenEdit: Problem gelöst.
stock AutosLaden()
{
for(new i=0; i!=MAX_VEHICLES; i++)
{
new str[16];
valstr(str, i);
format(AutoDaten[i][aBesitzer],64,mysql_GetString("grra", "Besitzer", "id", str));
AutoDaten[i][aModel] = mysql_GetInt("grra", "Model", "ID", str);
AutoDaten[i][aFarbe1] = mysql_GetInt("grra", "Farbe_1", "ID", str);
AutoDaten[i][aFarbe2] = mysql_GetInt("grra", "Farbe_2", "ID", str);
AutoDaten[i][aTueren] = mysql_GetInt("grra", "Tueren", "ID", str);
AutoDaten[i][aPosX] = mysql_GetFloat("grra", "PosX", "ID", str);
AutoDaten[i][aPosY] = mysql_GetFloat("grra", "PosY", "ID", str);
AutoDaten[i][aPosZ] = mysql_GetFloat("grra", "PosZ", "ID", str);
AutoDaten[i][aPosA] = mysql_GetFloat("grra", "PosA", "ID", str);
AutoDaten[i][aRespawn] = mysql_GetInt("grra", "Respawn", "ID", str);
AutoDaten[i][aID] = AddStaticVehicleEx(AutoDaten[i][aModel], AutoDaten[i][aPosX], AutoDaten[i][aPosY], AutoDaten[i][aPosZ], AutoDaten[i][aPosA], AutoDaten[i][aFarbe1], AutoDaten[i][aFarbe2], AutoDaten[i][aRespawn]);
}
return 1;
} -
Wie würde es dann aussehen? Vielleicht hilft es mir dann.
-
Versuch es ma so:
stock AutosLaden()
{
for(new i=0; i != MAX_VEHICLES; i++)//Diese schleife ist viel schneller und besser als < MAX_VEHICLES;
{
AutoDaten[i][aBesitzer] = mysql_GetString("grra","Besitzer","Besitzer",AutoDaten[i][aBesitzer]);
AutoDaten[i][aModel] = mysql_GetInt("grra", "Model", "Besitzer", AutoDaten[i][aBesitzer]);
AutoDaten[i][aFarbe1] = mysql_GetInt("grra", "Farbe_1", "Besitzer", AutoDaten[i][aBesitzer]);
AutoDaten[i][aFarbe2] = mysql_GetInt("grra", "Farbe_2", "Besitzer", AutoDaten[i][aBesitzer]);
AutoDaten[i][aTueren] = mysql_GetInt("grra", "Tueren", "Besitzer", AutoDaten[i][aBesitzer]);
AutoDaten[i][aPosX] = mysql_GetFloat("grra", "PosX", "Besitzer", AutoDaten[i][aBesitzer]);
AutoDaten[i][aPosY] = mysql_GetFloat("grra", "PosY", "Besitzer", AutoDaten[i][aBesitzer]);
AutoDaten[i][aPosZ] = mysql_GetFloat("grra", "PosZ", "Besitzer", AutoDaten[i][aBesitzer]);
AutoDaten[i][aPosA] = mysql_GetFloat("grra", "PosA", "Besitzer", AutoDaten[i][aBesitzer]);
AutoDaten[i][aRespawn] = mysql_GetInt("grra", "Respawn", "Besitzer", AutoDaten[i][aBesitzer]);
AutoDaten[i][aID] = AddStaticVehicleEx(AutoDaten[i][aModel], AutoDaten[i][aPosX], AutoDaten[i][aPosY], AutoDaten[i][aPosZ], AutoDaten[i][aPosA], AutoDaten[i][aFarbe1], AutoDaten[i][aFarbe2], AutoDaten[i][aRespawn]);
}
return 1;
}
Das muss aber mit format gemacht werden, da es ein string ist. Und außerdem ist dann noch der Fehler des EInrückens -
Wie in der Überschrift gesagt, möchte ich alle Fahrzeuge, welche in einer Datenbank gespeichert sind beim OngameModeInit erstellen.
Ich weiß, dass es so falsch ist, aber bin gerade etwas durcheinander und weiß nicht wie ich was ändern soll.
Denke mal es liegt an dem hinterenstock AutosLaden()
{
for(new i=0; i<MAX_VEHICLES; i++)
{
format(AutoDaten[i][aBesitzer],64,mysql_GetString("grra", "Besitzer", "Besitzer", AutoDaten[i][aBesitzer]));
AutoDaten[i][aModel] = mysql_GetInt("grra", "Model", "Besitzer", AutoDaten[i][aBesitzer]);
AutoDaten[i][aFarbe1] = mysql_GetInt("grra", "Farbe_1", "Besitzer", AutoDaten[i][aBesitzer]);
AutoDaten[i][aFarbe2] = mysql_GetInt("grra", "Farbe_2", "Besitzer", AutoDaten[i][aBesitzer]);
AutoDaten[i][aTueren] = mysql_GetInt("grra", "Tueren", "Besitzer", AutoDaten[i][aBesitzer]);
AutoDaten[i][aPosX] = mysql_GetFloat("grra", "PosX", "Besitzer", AutoDaten[i][aBesitzer]);
AutoDaten[i][aPosY] = mysql_GetFloat("grra", "PosY", "Besitzer", AutoDaten[i][aBesitzer]);
AutoDaten[i][aPosZ] = mysql_GetFloat("grra", "PosZ", "Besitzer", AutoDaten[i][aBesitzer]);
AutoDaten[i][aPosA] = mysql_GetFloat("grra", "PosA", "Besitzer", AutoDaten[i][aBesitzer]);
AutoDaten[i][aRespawn] = mysql_GetInt("grra", "Respawn", "Besitzer", AutoDaten[i][aBesitzer]);
AutoDaten[i][aID] = AddStaticVehicleEx(AutoDaten[i][aModel], AutoDaten[i][aPosX], AutoDaten[i][aPosY], AutoDaten[i][aPosZ], AutoDaten[i][aPosA], AutoDaten[i][aFarbe1], AutoDaten[i][aFarbe2], AutoDaten[i][aRespawn]);
}
return 1;
} -
Fehler gefunden und behoben. Fahrzeug wird erstellt.
-
Wenn das Fahrzeug erstellt wird, "returnt" es mit seiner ID.
Ich speichere diese nun in eine Variable und kann sie dem Spieler zuordnen.
Muss mal gucken, ob das funktioniert.
Mist. Das Auto wird beim connecten nicht erstellt. Woran könnte es liegen?
-
Damit ich das Fahrzeug einem bestimmten Spieler zuweisen kann.
Ich könnte sonst auch das System ändern.
-
Ich würde gerne herausfinden, wie die ID eines Fahrzeuges ist, OHNE, dass ein Spieler in diesem ist.
Wie geht das?
Suchen im Internet brachte immer nur GetPlayerVehicleID.
Hoffe auf schnelle und gute Hilfe.
Mit freundlichen Grüßen
Artus
-
Ja gibt er.Und das ganze gibt es schon ein Blick hier auf: http://wiki.sa-mp.com/wiki/OnRconLoginAttempt
Ist aber gut das du es auf Deutsch erklärt hast für die die kein Englisch können.
edit: Soweit ich es sehe bannt dein Code jeden der versucht sich einzuloggen da du if(!sucess) vergessen hast
Es bannt jeden, welcher kein Administrator ist und versucht sich einzuloggen oder sich erfolgreich einloggt.
Dies soll bewirken, dass sich nur Administratoren einloggen können und Spieler immer gebannt werden, egal, ob das passwort richtig oder falsch ist. -
Also keine Mods drinne?
Vllt Fehler auf der CD ?
Schon mal den Ordner gepatcht?
-
Ist schon ausgeklammert.
Ich weiß nur, dass bei YSI noch eine Datei das verändert.
------------
!! Habe jetzt in der YSI\y_hooks\impl.inc Das komplette OnPlayerCommandText auisgeklammert.Jetzt erscheinen keine Warnings und Errors mehr.
Werde es Zuhause testen, ob dann etwas nicht funktioniert.
-
Mit pragma hatte ich noch nie was am Hut
Aber jetzt weiß ich es ja
Jetzt fehlt mir nur noch:
\pawno\include\ocmd.inc(36) : warning 201: redefinition of constant/macro (symbol "OnPlayerCommandText")