Kannst du bitte mal den ganzen Code dazu posten, mit der if-Abfrage alleine kann ich nichts anfangen, da ja nicht mal die Schleife da ist. ![]()
Beiträge von Jeffry
-
-
Lade dir hier den neusten Server herunter: http://files.sa-mp.com/samp03z_svr_R4_win32.zip
Dann füge alle deine .pwn Dateien, scriptfiles und plugins und die Includes die noch nicht im Ordner sind (nicht ersetzen!!!).Dann öffne die /pawno/pawno.exe Datei und öffne deinen Code über die Öffnen Funktion von Pawno.
-
Aktualisiere deine Includes, bzw. den ganzen Server.
Mit SA-MP 0.3z wurde der "bodypart" Parameter hinzugefügt, deine Includes sind noch von einer Version davor.Oder schreibe es so:
public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid) -
Jeffry: kannst es gerne nutzen.
Haha, Danke, aber dann müsste ich 5 Jahre Arbeit umschreiben, da tu ich mir nicht an, zudem dass mein Server sowieso nicht multilingual ist, sondern nur Englisch.
Sonst hätte ich mir das schon lange gemacht.
Übrigens, zu deinem System, ich hab den Code mal überflogen. Da der RAM bei 99% aller Server eigentlich keine Rolle mehr spielt (die haben alle 16GB oder mehr), wäre es besser die Daten beim Server-Start zu laden und über ein Array auszugeben, bzw. über Spieler-Variablen Dummies, auszugeben. Sonst kann es bei vielen Spielern möglicherweise zu Problemen kommen, wenn man andauernd die Datei ausliest, da SA-MP ja bekanntlich nur einen Kern unterstützt.
Aber wie gesagt, für jemanden den auf der Suche nach sowas ist, ist es sicherlich sehr praktisch.Ich denke es ist ganz geschickt wenn ich hier gleich noch auf die MySQL Version verweise, dann haben wir hier beide Varianten:
MySQL Plugin von BlueG R7 Stock aufrufen? -
Was willst du denn eigentlich genau machen, und welches System nutzt du zum speichern?
-
Ressourcentechnisch ist diese Variante, wie du es vor hast, die beste, und von der Realisierung her sicher auch die einfachste.
Ich würde es so machen.
-
Es wäre besser, das über eine Schleife zu realisieren.
new component[14];
for(new i = 0; i<14; i++) component[i] = GetVehicleComponentInSlot(vehicleid,i);Das spart sehr viel Tipparbeit.

-
Klar, das kannst du natürlich entfernen.

Nein, das wird nicht benötigt, da GetPlayerName 0/false zurück gibt, wenn der Spieler nicht online ist, daher sitzt es in der if Abfrage. IsPlayerConnected ist deshalb nicht notwendig.
EDIT:
DasWackeln: Kein Problem! Gerne
-
stock ReturnPlayerID(l_PlayerName[]) //©Jeffry
{
new l_name[MAX_PLAYER_NAME];
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(GetPlayerName(i, l_name, MAX_PLAYER_NAME))
{
if(!strcmp(l_name,l_PlayerName, true)) return i;
}
}
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(GetPlayerName(i, l_name, MAX_PLAYER_NAME))
{
if(strfind(l_name,l_PlayerName,true)!=-1) return i;
}
}
return INVALID_PLAYER_ID;
}Beispiel hier: http://forum.sa-mp.de/gta-mult…eschnipsel-53#post1833300
-
Das liegt daran, dass du da einen String-Platzhalter hast (%s) und bei der Variante oben hast du einen Integer-Platzhalter (%d / %i).
Für den String-Platzhalter kannst du "inputtext" nehmen, da das ja ein String ist. Für den Integer-Platzhalter musst du "strval(inputtext)", also den Integer-Wert des Strings nehmen, da du ja einen Integer übergeben musst. -
Naja, generell ist das was du gemacht hast schonmal ok.
Allerdings würde ich das mit der Funktion im switch nicht so machen, außer es gibt dir die Fraktion die der Spieler hat zurück.
Außerdem passt das playerid im switch nicht, sonst würde sich der Spieler selbst befördern.So ist's besser:
switch(SpielerInfo[pID][Fraktion])
{
case 1: frakPass[pID][LSPD] = rangs;
case 2: frakPass[pID][SFPD] = rangs;
}
return 1;Falls du es mit Leader/Member hast bei der Spieler Variable (SpielerInfo, kann bei dir ja anders heißen) schreibe es so:
switch(GetPlayerFraktion(pID))
{
case 1: frakPass[pID][LSPD] = rangs;
case 2: frakPass[pID][SFPD] = rangs;
}
return 1;
und ganz unten im Gamemode:
stock GetPlayerFraktion(playerid)
{
new frak = SpielerInfo[playerid][Member];
if(frak == 0) frak = SpielerInfo[playerid][Leader];
return frak;
} -
[DT]Sniper:
Jo, das ist auch eine gute Variante für Leute die gerne auf MySQL verzichten (wie ich :D).Pascal.:
Du erstellst zwei Pickups in die gleiche Variable.
Schreibe es so:Spoiler anzeigen UpdateHaus(id)
{
new string[250];
if(hInfo[id][h_pickup] != -1)
{
DestroyPickup(hInfo[id][h_pickup]);
}
if(hInfo[id][h_ipickup] != -1)
{
DestroyPickup(hInfo[id][h_ipickup]);
hInfo[id][h_ipickup] = -1;
}
if(hInfo[id][h_text] != Text3D:-1)
{
Delete3DTextLabel(hInfo[id][h_text]);
}
if(!strlen(hInfo[id][h_besitzer]))
{
printf("Kein Besitzer");
format(string,250,"\
{007AFF}Besitzer: {FEFEFE}-unbekannt-\n\
{007AFF}Level: {FEFEFE}%d\n\
{007AFF}Kaufpreis: {FEFEFE}%d$\n\
{007AFF}Beschreibung: {FEFEFE}Dieses Haus steht zum Verkauf.\n\n\
Benutze /buyhouse um das Haus zu kaufen",
hInfo[id][h_level],hInfo[id][h_preis]);
hInfo[id][h_pickup] = CreatePickup(1273, 1, hInfo[id][hx],hInfo[id][hy],hInfo[id][hz],-1);
hInfo[id][h_text] = Create3DTextLabel(string,COLOR_ROT,hInfo[id][hx],hInfo[id][hy],hInfo[id][hz],10,0,1);
hInfo[id][h_lock] = 1;
hInfo[id][h_icon] = CreateDynamicMapIcon(hInfo[id][hx],hInfo[id][hy],hInfo[id][hz], 31, -1, -1, -1, -1, 70);
}
else
{
format(string,250,"\
{007AFF}Besitzer: {FEFEFE}%s\n\
{007AFF}Level: {FEFEFE}%d\n\n\
Benutze die Taste 'ENTER' um in das Haus zu kommen.",
hInfo[id][h_besitzer],hInfo[id][h_level]);
hInfo[id][h_pickup] = CreatePickup(1272, 1, hInfo[id][hx],hInfo[id][hy],hInfo[id][hz],-1);
hInfo[id][h_text] = Create3DTextLabel(string,COLOR_ROT,hInfo[id][hx],hInfo[id][hy],hInfo[id][hz],10,0,1);
hInfo[id][h_ipickup] = CreatePickup(1318, 1, hInfo[id][i_x],hInfo[id][i_y],hInfo[id][i_z],-1);
DestroyDynamicMapIcon(hInfo[id][h_icon]);
}
return 1;
}Das "h_ipickup" deklarierst du im enum, und initialisierst es mit -1 gleich wie "h_pickup".
-
(keinen kleinen Tresor sondern eine Tresor Tür
Meinst du Objekt ID: 2963 -
Im format
inputtext
Zu
strval(inputtext); -
Zitat
[22:22:21] [ERROR] CMySQLQuery::Execute[] - (error #1054) Unknown column 'alevel' in 'field list'
Die Spalte alevel existiert in der Tabelle nicht.
Prüfe nach dem hinzufügen, ob du sonst alle Spalten hast, wenn nicht füge alle hinzu die fehlen.EDIT: @swagtiiger:
Der Thread steht auf erledigt, ich nehme an es klappt somit alles. -
Du liest die Datei aus, also unter Reading.
-
Er hat die Includes schon.
Hatte es zuerst auch nicht gesehen.Öffne die pawno.exe in /pawno/ und öffne dann deinen Gamemode über die öffnen Funktion, dann kompiliere den Code. Geht es dann?
Du hast ja eigentlich alle Includes, daher sollte es gehen.
-
Wenn der gleiche Fehler immer noch kommt im Log, dann hast du die Änderung nicht gemacht, oder den Code nicht konpliliert, oder du startest den falschen Server.
Ansonsten poste nochmal deinen Code, mit dem du den Spieler speicherst, wie sieht der jetzt aus, und was sagt der Log?
-
Was??
Du sollst
format(query,sizeof(query),"UPDATE user SET level='%i',money='%i',alevel='%i',fraktion='%i,rang='%i',spawnchange='%i' WHERE id='%i'",sInfo[playerid][level],
Zu
format(query,sizeof(query),"UPDATE user SET level='%i',money='%i',alevel='%i',fraktion='%i',rang='%i',spawnchange='%i' WHERE id='%i'",sInfo[playerid][level],
Ändern.Laut Log hast du das nicht gemacht, denn da fehlt das Anführungszeichen noch (nach Fraktion).
-
Poste mal alle deine Includes im Code und einen Screenshot von deinem /pawno/includes Ordner, was da alles drin ist.