TomatenvondenAugennehm:
Stimmt, jetzt seh ichs auch...
TomatenvondenAugennehm:
Stimmt, jetzt seh ichs auch...
ZitatAlles anzeigenstock 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;
}
Benötige ich die 2te for Schleife oder vertuh ich mich grad. Die macht das 1zu1 das selbe wie die erste....
Danke Jeffry: , dann werde ich das so einbauen.
Markier mal die Zeilen, in denen der Fehler vorkommt
Warum willst du das machen? Entferne die stock Funktion von sscanf komplett aus deinem Code und inkludiere nur die sscanf2 Include.
Alle Funktionen die das stock hat, hat auch das Plugin.
Dann funktioniert auch das u.
Ansonsten, wenn du wirklich beide Funktionen verwenden willst, benenne den stock um zu sscanfx, und nutze das für diese Abfragen.
Der "u" Parameter von sscanf2 (Pluginversion) funktioniert bei mir nicht.
Wie viel langsamer / resourcenfressender würde der Server werden, wenn ich den stock mitnutze?
So. Mit dem "d" Parameter funktioniert die Geschichte, wer hätts gedacht ...
Aber damit ist das Problem leider nicht behoben.
Besteht die Möglichkeit, sscanf2 für die normalen sscanf Abfragen zu nutzen und den sscanf Stock für die Spielerabfragen?
Oder hat jemand noch eine Idee zur Fehlerbehebung?
PS:
Nach Möglichkeit möchte ich die Plugin Version behalten, und nicht auf die stock Version umsteigen ...
Was ist wenn du das ganze mal komplett als integer umwandelst sprich,
strval(pID);
Das Problem ist halt, das sscanf mit pID schon mit nem falschen Wert füttert. Dieser Wert ist aber ein Integer (65535). Ich glaube eher, dass das Problem an sscanf liegt.
Zum Problem:
Ich hab gerade festgestellt, dass alle Befehle, die den User mit dem sscanf Parameter "u" ermitteln, nicht funktionieren. Muss ich irgendeineinen Speziellen Code einfügen für den Parameter?
Okay,
Hab sscanf geupdatet, ohne erfolg.
Hier mal ein Logauszug:
[27/10/2014 14:34:24] test has logged in.
[27/10/2014 14:34:37] DEBUG: /showfinances 65535 | playerid = 5 | params[] = test
[27/10/2014 14:34:37] Spieler nicht verbunden
[27/10/2014 14:34:51] DEBUG: /showfinances 65535 | playerid = 5 | params[] = t
[27/10/2014 14:34:51] Spieler nicht verbunden
[27/10/2014 14:34:53] DEBUG: /showfinances 65535 | playerid = 5 | params[] = 5
[27/10/2014 14:34:53] Spieler nicht verbunden
Und der Code mit der Ergänzung von @[NGD]Manne: sieht jetzt so aus:
ocmd:showfinances(playerid, params[])
{
new pID,string[128];
if(sscanf(params,"u",pID)) return SendClientMessage(playerid,COLOR_GREY,"Benutze /showfinances [Playerid]");
printf("DEBUG: /showfinances %d | playerid = %d | params[] = %s", pID, playerid, params);
if(!IsPlayerConnected(pID))return print("Spieler nicht verbunden");
.......
return 1;
}
Hast du das neueste sscanf?
Einfach mal updaten, evtl. hilft das
Ja, laut Meldung im Log hab ich die aktuellste. Ich kann aber mal ein Update durchführen.
Bist du dir sicher, das du die ID 9 bzw. den Namen richtig eingegeben hast?
65535 ist der Wert, der zurückgegeben wird, wenn der Spieler nicht connected ist.
Hallo. Der Spieler existiert. Ich hab den Namen mal in allen Versionen eingegeben (test,Test,t,TEST,...) und auch die richtige ID, aber es bleibt dabei, dass er die INVALID_PLAYER_ID returnt.
Hallo,
mal wieder ein Problem, welches ich nicht lösen kann.
Es geht um das sscanf2 Plugin von y_less.
Ich hab folgenden Code verwendet:
ocmd:showfinances(playerid, params[])
{
new pID,string[128];
if(sscanf(params,"u",pID)) return SendClientMessage(playerid,COLOR_GREY,"Benutze /showfinances [Playerid]");
printf("DEBUG: /showfinances %d", pID);
.....
return 1;
}
Debugausgabe:
/showfinances test (Mein Name)
Ausgabe: DEBUG: /showfinances 65535
/showfinances 9 (Meine ID)
Ausgabe: DEBUG: /showfinances 65535
Das Problem besteht auch bei zwei weiteren Befehlen, in anderen Befehlen funktioniert es jedoch. Die Befehle sind zum teil mit dcmd und mit ocmd geschrieben.
Vielleicht hat jemand eine Idee, was sscanf2 hier nicht gefällt.
MfG
Wepper
Edit 1: Rechtschreibfehler behoben
Ein wenig mehr Infos wären hilfreich: Welches (MySQL)Plugin, eventuell einen Stück vom Code, ....
Und eventuell auch mal schauen, ob du ein Callback eventuell mit mehr als 32 Parametern (Agruments) aufrufst
Ändere
if(level < 1 || level > 12) { SendClientMessage(playerid, COLOR_GREY, "Du kannst nur 12 Wanteds vergeben"); return 1; }
zu
if(level < 1 || level > 12 || WantedLevel[giveplayerid]+level > 12) { SendClientMessage(playerid, COLOR_GREY, "Du kannst nur 12 Wanteds vergeben"); return 1; } ab.
Das verhindert, dass wenn ein User 11 Wanteds hat, und man ihm weitere 12 gibt, dass er nacher 23 Wanteds hat.
MfG
Wepper
Lade doch mal die mysql.log bei Pastebin rauf und poste den Link hier.
Alternativ die letzten paar hundert Zeilen.
Und dann auch mal den Code vom Registrieren / Login, sowie den Code vom mysql_connect (Passwörter bitte mit * ersetzen)
Mit SFTP(SSH) ist es nicht, bzw nur schwer möglich, einen User in ein Verzeichniss einzusperren.
Sofern du nicht auf SFTP angewiesen bist, kannst du theoretisch auch FTPS verwenden, mit ProFTP ist das relativ einfach umzusetzten.
Der Unterschied zwischen SFTP und FTPS ist, dass SFTP über den SSH Server(Port 22) läuft, und FTP(S) über einen FTP Server(Port 21) läuft.
MfG
Wepper
Also,
ich hab gerade nochmal ein wenig herum experimentiert.
Egal wie ich die Funktion aufrufe, sie wird nicht ausgeführt.
Methode 1:
Im FS
public OnPlayerDisconnect(playerid, reason)
{
printf("Autos: OnPlayerDisconnect %d-1", playerid);
return 1:
}
Methode 2:
Im GM:
Function OnPlayerDisconnect(playerid, reason)
{
[...]
CallRemoteFunction("OnPlayerCarDisconnect", "dd", playerid, reason);
return 1;
}
und im FS:
Function OnPlayerCarDisconnect(playerid, reason)
{
printf("Autos: OnPlayerDisconnect %d-1", playerid);
return 1:
}
Alles anzeigenpublic OnPlayerDisconnect(playerid, reason)
{
printf("Autos: OnPlayerDisconnect %d-1", playerid);
for(new x=0;x {
//if(PlayerCar[playerid][x][CarBesitz])
printf("Autos: OnPlayerDisconnect %d-%d-1", playerid, x);
if(IsValidVehicle(PlayerCar[playerid][x][cID]))
{
SavePlayerCar(playerid, x);
printf("Autos: OnPlayerDisconnect %d-%d-2", playerid, x);
UnLockCar(PlayerCar[playerid][x][cID]);
printf("Autos: OnPlayerDisconnect %d-%d-3", playerid, x);
DestroyVehicle(PlayerCar[playerid][x][cID]);
printf("Autos: OnPlayerDisconnect %d-%d-4", playerid, x);
PlayerCar[playerid][x][CarBesitz] = 0;
PlayerCar[playerid][x][cID] = -1;
PlayerCar[playerid][x][cModel] = -1;
PlayerCar[playerid][x][cCurX] = -1;
PlayerCar[playerid][x][cCurY] = -1;
PlayerCar[playerid][x][cCurZ] = -1;
PlayerCar[playerid][x][cCurR] = -1;
printf("Autos: OnPlayerDisconnect %d-%d-5", playerid, x);
}
}
return 1;
}
Geht so auch nicht.
Kann es am Anti Cheat liegen? (nutze JunkBuster 11)
Pack das mal unter: public OnFilterScriptExit()
Es geht ja nicht darum, dass die Fahrzeuge gelöscht werden, wenn das Filterscript beendet wird,sondern wenn der User disconnected ...
Oder versteh ich deine Intention falsch?
Hallo,
vermutlich sehe ich den Wald vor lauter Bäumen nicht, aber ich finde keine Erklärung, warum der Code aus meinem Filterscript nicht ausgeführt wird.
Das Filterscript enthält im Moment mein Autohaussystem, welches ich derzeit noch abändere.
Das Problem ist folgendes:
Beim Disconnect sollten die Fahrzeuge des Users gelöscht werden.
Nach einigen Test habe ich nun die Fehlerquelle eingeschränkt.
Code vom Filterscript:
#define Function%0(%1) forward%0(%1); public%0(%1)
Function OnPlayerDisconnect(playerid, reason)
{
printf("Autos: OnPlayerDisconnect %d-1", playerid);
for(new x=0;x<MaxVehs; x++)
{
//if(PlayerCar[playerid][x][CarBesitz])
printf("Autos: OnPlayerDisconnect %d-%d-1", playerid, x);
if(IsValidVehicle(PlayerCar[playerid][x][cID]))
{
SavePlayerCar(playerid, x);
printf("Autos: OnPlayerDisconnect %d-%d-2", playerid, x);
UnLockCar(PlayerCar[playerid][x][cID]);
printf("Autos: OnPlayerDisconnect %d-%d-3", playerid, x);
DestroyVehicle(PlayerCar[playerid][x][cID]);
printf("Autos: OnPlayerDisconnect %d-%d-4", playerid, x);
PlayerCar[playerid][x][CarBesitz] = 0;
PlayerCar[playerid][x][cID] = -1;
PlayerCar[playerid][x][cModel] = -1;
PlayerCar[playerid][x][cCurX] = -1;
PlayerCar[playerid][x][cCurY] = -1;
PlayerCar[playerid][x][cCurZ] = -1;
PlayerCar[playerid][x][cCurR] = -1;
printf("Autos: OnPlayerDisconnect %d-%d-5", playerid, x);
}
}
return 1;
}
Es wird KEIN Printbefehl ausgegeben, woraus ich ableite, dass die Funktion nicht aufgerufen wird.
Mache ich etwas falsch oder ist etwas am Script falsch?
Code vom Hauptscript:
Function OnPlayerDisconnect(playerid, reason)
{
[...]
return 1;
}
Code im Hauptscript wird immer ausgeführt.
Hinweise im Log gibt es keine.
Trozdem hier mal ein Auszug:
Zitat von "Serverlog"Alles anzeigen
[08/08/2014 16:05:06] wepper has logged in.
[....]
[08/08/2014 16:06:16] OnPlayerLogout:: wepper Step 1-2 succes
[08/08/2014 16:06:16] OnPlayerLogout:: wepper Step 1-2 succes
[08/08/2014 16:06:16] OnPlayerLogout:: wepper Step 1-2 succes
[08/08/2014 16:06:16] OnPlayerLogout:: wepper Step 1 succes
[08/08/2014 16:06:16] OnPlayerLogout:: wepper Step 2 succes
[08/08/2014 16:06:16] OnPlayerLogout:: wepper Step 3 succes
[08/08/2014 16:06:16] [part] wepper has left the server (7:1)
Verwendete Includes:
#include <a_samp>
#include <JunkBuster>
native IsValidVehicle(vehicleid);
#include <ocmd>
#include <dini>
#include <sscanf2>
#include <TimerFix>
Ein anderer Versuch mit folgendem Code brachte mich auch nicht weiter:
Filterscript:
Function OnPlayerDisconnect(playerid, reason)
{
printf("Autos: OnPlayerCarDisconnect %d-1", playerid);
for(new x=0;x<MaxVehs; x++)
{
//if(PlayerCar[playerid][x][CarBesitz])
printf("Autos: OnPlayerDisconnect %d-%d-1", playerid, x);
if(IsValidVehicle(PlayerCar[playerid][x][cID]))
{
SavePlayerCar(playerid, x);
printf("Autos: OnPlayerDisconnect %d-%d-2", playerid, x);
UnLockCar(PlayerCar[playerid][x][cID]);
printf("Autos: OnPlayerDisconnect %d-%d-3", playerid, x);
DestroyVehicle(PlayerCar[playerid][x][cID]);
printf("Autos: OnPlayerDisconnect %d-%d-4", playerid, x);
PlayerCar[playerid][x][CarBesitz] = 0;
PlayerCar[playerid][x][cID] = -1;
PlayerCar[playerid][x][cModel] = -1;
PlayerCar[playerid][x][cCurX] = -1;
PlayerCar[playerid][x][cCurY] = -1;
PlayerCar[playerid][x][cCurZ] = -1;
PlayerCar[playerid][x][cCurR] = -1;
printf("Autos: OnPlayerDisconnect %d-%d-5", playerid, x);
}
}
return 1;
}
und im Hauptscript:
Function OnPlayerDisconnect(playerid, reason)
{
[...]
CallRemoteFunction("OnPlayerCarDisconnect", "dd", playerid, reason);
return 1;
}
Vielleicht findet jemand nen Fehler den ich übersehen habe.
Mfg
Wepper
Hallo,
würde mich anschließen.
MfG
wepper
Stoppe den Server, lösche die gewünschte Zeile aus der Datei raus und starte den Server neu.