Neu kompiliert (ohne Warnungen) und hochgeladen?
Beiträge von Jeffry
-
-
#include <mysql>
#include <a_mysql>Das macht keinen Sinn.
Entscheide dich für eine der beiden (besser die a_mysql, wenn möglich) und kompiliere den Code erneut.
Lade ihn dann erneut auf den Server hoch und versuche es erneut.Solltest du die mysql.inc nutzen müssen, dann nutze folgendes Plugin: Gamemode Unknown
-
Ja, habe alles includiert.
Das sagt nichts darüber aus, welche Version du dort stehen hast.
Poste bitte aus deinem Code die ganzen #include Zeilen mal. -
if(sscanf(pid,"u", giveplayeryo))
zu:
if(sscanf(inputtext,"u", pid))Formatier das bitte mal ordentlich, sonst kann man dir schlecht helfen.
Bitte keine Vollzitate, und schon gar nicht mit Code. Danke.
-
Sicher, dass die a_mysql die Inlcude ist, die du auch im Code mit #include inkludiert hast?
Verbindest du dich zur Datenbank mit einem Passwort, oder ohne? -
Die R5 Version habe ich hier einmal hochgeladen:
MySQL (Installation, Zugriff, Einstellungen, Login & Register Beispiel) -
Schau bitte in die Include, die du im Code angegeben hast, welche Version steht dort drin?
#include <a_mysql>
-> /pawno/include/a_mysql.inc -> Version? -
Die Plugins werden alle ordnungsgemäß geladen...
Das spielt keine Rolle, die Informationen über die Version sind ebenfalls wichtig.
Das Problem ist wie ich vermute der Verbindungsaufbau zu MySQL
Nein, das ist nicht das Problem.
Die Fehlermeldung kommt, weil das Plugin entweder nicht geladen wird, nicht geladen werden kann, oder eine falsche Version ist. -
Melde mich seit langem mal wieder um hier mal weiter zu machen mir hat die Motivation gefehlt weil mir das sehr schwer viel.
Schön, dass du weiter machst!
Problem dabei Das Auto spawnt nicht woran liegts?
Du erstellst das neue Fahrzeug mit der VehicleID des Autohausauto's, anstelle der ModelID.
CreateVehicle(Autohausauto1[i], SAHSpawn[SP][0], SAHSpawn[SP][1], SAHSpawn[SP][2], SAHSpawn[SP][3], FB, FB, 0);
zu:
CreateVehicle(GetVehicleModel(Autohausauto1[i]), SAHSpawn[SP][0], SAHSpawn[SP][1], SAHSpawn[SP][2], SAHSpawn[SP][3], FB, FB, 0); -
Was kommt denn etwas weiter oben im Server Log? Dort wo die Plugins geladen werden.
-
"for(new i = 1; i < rows+1; i++); "
Die Schleife muss, wie die Zeilen von Result auch, bei 0 beginnen, sonst fehlt die erste Zeile der Tabelle.
vor der Schleife eine 25 Zeichen lange Variable erstellen...
Bloß nicht! Dafür kann man ja die Anzahl der Zeilen auslesen.
for(new i = 0; i < 5; i++)
zu:
new rows;
cache_get_row_count(rows);
for(new i = 0; i < rows; i++)Oder als Vorschlag auch so:
new rows;
cache_get_row_count(rows);
for(new i = 0; i < rows; i++)
{
cache_get_value_name(i, "name", name);
format(string, sizeof(string),"~w~%s~r~%d. ~w~%s~n~",string, i+1, name);
}
for(new i = rows; i < 5; i++)
{
format(string, sizeof(string),"~w~%s~r~%d. ~w~ - ~n~",string, i+1);
}
TextDrawSetString(Top5_TextDraw[1], string);Dann zeigt es die nicht belegten Plätze mit "-" an.
-
Wie krieg ich das denn jetzt richtig hin ?
Ich habe dir den Code ausgebessert und mit Kommentaren versehen, damit du die Änderungen nachvollziehen kannst.
ocmd:unban(playerid,params[])
{
new pname[MAX_PLAYER_NAME], preason[64], query[128];
if(PlayerInfo[playerid][pAdmin] <= 2) return SendClientMessage(playerid,COLOR_GRAD1,"Du bist nicht berechtigt, diesen Befehl auszuführen.");
//Bei sscanf "s" muss immer die Größe mitgegeben werden, beim neuen Plugin
if(sscanf(params, "s[24]s[64]", pname, preason)) return SendClientMessage(playerid,COLOR_GRAD1,"FEHLER: /unban [Exakter Spielername] [Grund]");
//Um Speicher zu sparen, nutzen wir "string" zwei mal, da es nach dem Query-Absenden nicht mehr benötigt wird.
mysql_format(handle, string, sizeof(string), "SELECT id, Username FROM user WHERE Username = '%e'", pname);
mysql_pquery(handle, string, "UnBanForPlayer", "ds", playerid, preason); //UnBanForPlayer mitgeben, sonst wird es nicht aufgerufen.
return 1;
}forward UnBanForPlayer(playerid, preason[]);
public UnBanForPlayer(playerid, preason[])
{
new rows, string[145], id, pname[MAX_PLAYER_NAME]; //145 Zeichen = Maximum für SendClientMessage
cache_get_row_count(rows);
if(rows == 0) return SendClientMessage(playerid, COLOR_RED, "Der angegebene Name konnte in der Datenbank nicht gefunden werden!");
else
{
//Daten aus Ergebnis auslesen
id = cache_get_field_content_int(0, "id", handle);
cache_get_field_content(0, "Username", pname, handle);
//Die Nachricht geben wir erst hier aus:
format(string, sizeof(string), "Du hast %s entbannt, grund %s", pname, preason);
SendClientMessage(playerid, -1, string);
//string erhält einen neuen Text, der alte Text (Nachricht) wird verworfen, brauchen wir ja auch nicht mehr.
mysql_format(handle, string, sizeof(string), "UPDATE `user` SET `pBanned` = '0' WHERE `id` = '%d'", id);
mysql_pquery(handle, string);
}
return 1;
} -
Ich habe dir das angepasst und etwas mit Kommentaren versehen, zum besseren Verständnis.
Ich habe den Grundaufbau so gelassen und nur die Fehler korrigiert.
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
//Vermeide solche "Doppeldeklarationen" wie string und string2.
new string[128];
new string2[128];
new query[256];
new giveplayer[MAX_PLAYER_NAME];
new sendername[MAX_PLAYER_NAME];
GetPlayerName(playerid,sendername,sizeof(sendername));
if(dialogid == DIALOG_REGISTERS)
{
if(!response) return Kick(playerid);
if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_REGISTERS, DIALOG_STYLE_PASSWORD, "VR Reallife", "Herzlich Willkommen auf VR Reallife\nDein Account nicht in unserer Datenbank gefunden.\nBitte registriere dich nun.\n{FF0000}Mindestens 3 Zeichen!", "Fortfahren", "Abbrechen");
//Das eingegebene Passwort wird weg geschrieben:
SetPVarString(playerid,"password",inputtext);
ShowPlayerDialog(playerid,DIALOG_ISUSED,DIALOG_STYLE_MSGBOX,"VR Reallife","Benutzt du dieses Passwort auf einem anderem Server?","Ja","Nein");
return 1;
}
if(dialogid == DIALOG_ISUSED)
{
if(response)
{
ShowPlayerDialog(playerid, DIALOG_REGISTERCHECK, DIALOG_STYLE_PASSWORD, "VR Reallife", "Herzlich Willkommen auf VR Reallife\nDein Account nicht in unserer Datenbank gefunden.\nBitte registriere dich nun.", "Fortfahren", "Abbrechen");
SendClientMessage(playerid,COLOR_RED,"SERVER: Um deine Accountsicherheit auf dem Server zu gewährleisten, wähle bitte ein anderes Passwort!");
return 1;
}
else
{
mysql_format(handle, query, sizeof(query), "INSERT INTO `user` (`Username`, `Key`) VALUES ('%e', MD5('%e'))", PlayerInfo[playerid][PlayerName], inputtext);
SendClientMessage(playerid,0xFFFFE060,"DHuiensohn");
mysql_pquery(handle, query, "OnUserRegister", "d", playerid);
}
return 1;
}
if(dialogid == DIALOG_REGISTERCHECK)
{
//Lese das zuvor eingegeben Passwort aus und prüfe es gegen "inputtext":
GetPVarString(playerid, "password", string, sizeof(string));
if(!strcmp(inputtext, string))
{
SendClientMessage(playerid,COLOR_RED,"Das Passwort hast du davor schon eingegeben!");
ShowPlayerDialog(playerid, DIALOG_REGISTERCHECK, DIALOG_STYLE_PASSWORD, "VR Reallife", "Herzlich Willkommen auf VR Reallife\nDein Account nicht in unserer Datenbank gefunden.\nBitte registriere dich nun.", "Fortfahren", "Abbrechen");
return 1;
}
else
{
mysql_format(handle, query, sizeof(query), "INSERT INTO `user` (`Username`, `Key`) VALUES ('%e', MD5('%e'))", PlayerInfo[playerid][PlayerName], inputtext);
SendClientMessage(playerid,0xFFFFE060,"DHuiensohn");
mysql_pquery(handle, query, "OnUserRegister", "d", playerid);
}
return 1;
} -
dini_Float
Das muss dini_Int für Integers sein.
NormalInventar[playerid][NormalInventar_Daten:i] += menge;
"menge" darf nicht mit "Float:" Tag deklariert sein (falls so gemacht, sieht man in deinem Code Ausschnitt nicht).
-
Da es sich bei allen um Floats handelt, kannst du es so machen:
enum Inventar_Daten
{
//Bedarf Inventar
PolosChickenwings,
FreddysMargarithaPizza,
Sprunk,
};
new Float:Inventar[MAX_PLAYERS][Inventar_Daten]; -
1. Es heißt GPCI: http://wiki.sa-mp.com/wiki/Gpci
2. Es ist kein Hash vom Benutzername, sondern vom Installationspfad.
3. Mehr Info's hier: http://forum.sa-mp.com/showpost.php?p=2919059&postcount=2
Was kannst du uns denn sonnst empfehlen
In der Regel macht ein solcher Ban nur unter den Umständen Sinn, dass eine Person dauerhaft auf den Server kommt und Probleme macht.
Rangebans (123.123.*.*) haben sich in meiner Erfahrung allerdings ebenso gut bewährt, da kaum jemand Zugriff auf mehrere Ranges hat. Die minimale Anzahl kann man dann im speziellen Fall noch mit GPCI sperren, um den Aufwand zu erhöhen. Wobei ja lediglich der Installationspfad angepasst werden muss. Wer das weiß, kommt auch da drum herum. -
-
-
Dann vMyPic1 (oder wie du es eben nennen willst). vIrgendwasHier
Wichtig ist nur, dass es mit v beginnt (oder mit g wenn es anklickbar sein soll).
-
Entweder "vMyPic1" wenn es nur eine Variable sein soll, oder "gMyPic1" wenn beim Doppelklick "MyPic1" ausgeführt werden soll.