Das sscanf.dll Plugin in den Ordner /plugins/ eingefügt?
"sscanf" bei "plugins" in der server.cfg eingetragen?
Beiträge von Jeffry
-
-
Nein, du brauchst die Autos nicht mit einem Streamer streamen, SAMP erledigt das schon für dich. Zudem kann das Plugin das gar nicht.
Dann solltest du den Code entweder hier posten oder du testet den Befehl selbst durch Debuggen, wo genau der Fehler steckt.
-
Du solltest natürlich auch den Code zeigen, der
Register(playerid,password[])
aufruft.Möglicherweise füllst du den zweiten Parameter nicht (korrekt).
-
Das ist, sagen wir mal, "normal". Warum? Die Objekte werden ja gestreamt, was bedeutet, dass ein Timer alle X Millisekunden prüft wo du bist und dir dann die Objekte erstellt. Werden die Autos, die vom Server erstellt werden, früher für dich gestreamt als die Objekte, fallen sie runter.
Das gleiche beim Spieler, du fällst durch die Map, weil du vor den Objekten an der Position bist, das kannst du verhindern indem du den Spieler kurz einfrierst (TogglePlayerControllable) und mit einem Timer wieder "auftaust".Die Autos musst du ein paar Meter höher spawnen und eventuell die Stream Distanz der Autos kleiner machen, bzw die der Objekte größer.
-
Alle ersetzen. Die Streamer Include ist aktuell, die SAMP includes sind veraltet.
-
Lade dir die neuste Server Version herunter und ersetze die Includes. Du benutzt noch alte Includes.
-
Aktualisiere deine Plugins. Alle neu herunterladen und ersetzen.
-
ocmd:a(playerid,params[])
{
if(!GetPVarInt(playerid,"Adminlevel")) return SendClientMessage(playerid,-1,"");
if(!params[0]) return SendClientMessage(playerid,-1,"Verwendung: /a [Text]");
new text[144],name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,MAX_PLAYER_NAME);
format(text,144,"*[Admin-Chat] (%s) %s: %s:",a_rang[GetPVarInt(playerid,"Adminlevel")],name,params);
for(new i=0; i<MAX_PLAYERS; i++) if(IsPlayerConnected(i) && isPlayerAnAdmin(i, 1)) SendClientMessage(i, -1, text);
return 1;
} -
Logischerweise musst du den forward auch ändern.
forward WMTor();
zu:
forward WMTor(id); -
Ja, bewegende Objekte können einen mit-ziehen, je nach dem wie du stehst.
-
public WMTor(id)
{
switch(id)
{
case 1: MoveDynamicObject(WMTor1, 2313.5, -1218, 23.700001,2.5);
case 2: MoveDynamicObject(WMTor2, 2361, -1272.1, 23.700001,2.5);
}
return 1;
}Und den Timer so aufrufen:
SetTimerEx("WMTor",5000,false, "d",1);
beim anderen Tor:
SetTimerEx("WMTor",5000,false, "d",2);PS: Nächstes mal sag auch, dass du den Streamer verwendest.
-
Kommt immernoch /acp [playerid]....
sscanf in die Tonne treten, das ist das Beste was du machen kannst.So:
ocmd:acp(playerid,params[])
{
if(!strlen(params))return SendClientMessage(playerid,-1,"/acp [playerid]");
if(!isPlayerAnAdmin(playerid,5)) return SendClientMessage(playerid,ROT,"Zugriff Verweigert");
new pID;
if(!IsNumeric(params)) pID = ReturnPlayerID(params);
else pID = strval(params);
if(!IsPlayerConnected(pID))return SendClientMessage(playerid,ROT,"Spieler ist nicht Online");
new string[256];
format(string, sizeof(string), "Name: %s\n",SpielerName(pID));
format(string, sizeof(string), "%sTimebans: %d\n",string,GetPVarInt(pID,"Banned1"));
format(string, sizeof(string), "%sKicks: %d\n",string,GetPVarInt(pID,"Banned2"));
return ShowPlayerDialog(playerid,DIALOG_ACP,DIALOG_STYLE_MSGBOX,"Admin Control Panel",string,"Ok","");
}Ganz unten im Code einfügen:
stock ReturnPlayerID(l_PlayerName[]) //©Jeffry
{
new l_name[MAX_PLAYER_NAME];
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
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(IsPlayerConnected(i))
{
GetPlayerName(i, l_name, MAX_PLAYER_NAME);
if(strfind(l_name,l_PlayerName,true)!=-1) return i;
}
}
return INVALID_PLAYER_ID;
}stock IsNumeric(string[])
{
for (new i = 0, j = strlen(string); i < j; i++)
{
if ((string[i] > '9' || string[i] < '0')) return 0;
}
return 1;
} -
Man braucht hier weder strcat noch sonstiges Zeugs. Außerdem war die string-Formatierung völlig daneben bei sämtlichen Posts oben.
ocmd:acp(playerid,params[])
{
if(!isPlayerAnAdmin(playerid,5)) return SendClientMessage(playerid,ROT,"Zugriff Verweigert");
new pID;
if(sscanf(params,"u",pID))return SendClientMessage(playerid,-1,"/acp [playerid]");
if(!IsPlayerConnected(pID))return SendClientMessage(playerid,ROT,"Spieler ist nicht Online");
new string[256];
format(string, sizeof(string), "Name: %s\n",SpielerName(pID));
format(string, sizeof(string), "%sTimebans: %d\n",string,GetPVarInt(playerid,"Banned1"));
format(string, sizeof(string), "%sKicks: %d\n",string,GetPVarInt(playerid,"Banned2"));
return ShowPlayerDialog(playerid,DIALOG_ACP,DIALOG_STYLE_MSGBOX,"Admin Control Panel",string,"Ok","");
}
Sollte es dennoch nicht funktionieren, und dir weiter gesagt werden, dass der Spieler nicht online ist, dann hast du wahrscheinlich noch die sscanf Funktion im Code definiert, zu dem Plugin dazu. Diese musst du aus dem Code entfernen wenn du das Plugin nutzt. Und wenn es dann immer noch nicht geht, sag nochmal Bescheid, dann zeige ich dir wie man das mit strtok macht.Außerdem:
SetPVarInt(playerid,"Banned?",++);//<- Da das ++ ist doch hochzählen oder?
zu:
SetPVarInt(playerid,"Banned?",GetPVarInt(playerid,"Banned?")+1);Irgendwo muss da ein oder mehrere returns fehlen.
Die Warnung 225 hat rein gar nichts mit fehlenden return's zu tun, im Gegenteil! Unreachable Code heißt "Unereichbarer Code", somit wurden zu viele returns verbaut. Ein fehlendes return siehst du an der Warnung "does not return a value".
Warnung 225 bekommst du hingegen bei sowas:
stock Test()
{
print("Hallo");
return 1;
print("Welt"); //unreachable Code
return 1; //unreachable Code
} -
Lass dir doch einfach die Werte ausgeben:
Spieler[i][pFahrlehrerWait] --;zu:
Spieler[i][pFahrlehrerWait] --;
printf("pFahrlehrerWait(%d) = %d". i, Spieler[i][pFahrlehrerWait]);Und vor die jeweiligen Nachrichten:
print("Nachricht (30 sek);
Und so weiter (24, 18, ...)Was wird geprintet?
-
Dann liegt es hieran:
strmid(Spieler[playerid][pTsIdent],inputtext,0,strlen(inputtext),strlen(inputtext));zu:
format(Spieler[playerid][pTsIdent], 64 ,inputtext);
(Oder eben die 64 zu dem was du bei pTsIdent stehen hast.Oder: (Wobei ich kein Freund von strmid bin)
strmid(Spieler[playerid][pTsIdent],inputtext,0,strlen(inputtext)+1,strlen(inputtext)); -
Das wird nur funktionieren wenn du in beiden Fraktionen gleichzeitig bist.
Beispiel:
Ich bin in Fraktion 1: Nicht 1? Nein --> Nicht 14? Ja. ---> Ende
Ich bin in Fraktion 14: Nicht 1? Ja --> EndeSo musst du es machen:
if(!isPlayerInFrakt(playerid, 1) && !isPlayerInFrakt(playerid, 14)) return SendClientMessage(playerid, rot, "Du bist nicht berechtigt ein Ticket auszustellen.");
Hier:
Wenn nicht in 1 UND nicht in 14.Beispiel:
Ich bin in Fraktion 1: Nicht 1? Nein --> Nicht 14? Ja. ---> 0 && 1 -> 0 -> Alles ok, wird nicht angezeigt
Ich bin in Fraktion 14: Nicht 1? Ja --> Nicht 14? Nein. ---> 1 && 0 -> 0 -> Alles ok, wird nicht angezeigt -
In deinem enum ist "pTsIdent" mit einem zu kleinen Array deklariert. Erhöhe das um 1.
pTsIdent[HIER+1]
-
Füge mal nach
strmid(Spieler[playerid][pTsIdent],inputtext,0,strlen(inputtext),strlen(inputtext));das ein:
printf("1: %s /// 2: %s",Spieler[playerid][pTsIdent],inputtext);Was wird geprintet wenn du die Rechte vergibst?
-
ich hab den Fehler: das fread hat aus irgendeinen Grund immer nur eine Zeile gelesen darum musste ich nun jede Zeile extra lesen lassen...
Das ist nicht aus irgendeinem Grund, das ist so ... und auch gut so. Du hättest natürlich sagen müssen, wenn du mehrere Zeilen in einer Datei hast, dass du auch alle Zeilen auslesen willst. Ich, zum Beispiel, speichere in meine Stats-Dateien jeweils nur eine Zeile und versteckte Informationen darunter, daher ist es gut, dass pro "fread" Aufruf eine Zeile weiter gelesen wird.
Für das nächste mal wenn du ein Problem hast gib also bitte die gesamten Informationen von dir, dann sparst du dir eine halbe Woche und 60 Posts hier. -
Direkt bei OnPlayerConnect wird das nicht funktionieren.
Setze das zu OnPlayerRequestClass (möglicherweise musst du den Spieler vorher auch erst spawnen (SetSpawnInfo + SpawnPlayer).