Du hast jetzt dein ganzes System durcheinander gebracht.
[HILFE] ocmd: ban <= Ich brauche drigend Hilfe
- Shido
- Geschlossen
- Erledigt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!
Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
-
-
Wie trollen, ich brauche eigentlich nur Hilfe! Wirklich seit 3 Tagen steck ich beim Ban System fest...
Musst du eigentlich immer dein Senf abgeben, du musst nicht immer kommentieren hier gibt es Leute die Hilfsbereit sind. -
Das eigentliche Problem war, dass du vor LoadPlayer nicht etwas aus dem Array SpielerInfo abfragen konntest, in das erst in LoadPlayer geschrieben wird.
Nimm den Code, den du in deinem ersten Beitrag gepostet hast und frage erst ab, ob pBanned gleich 1 ist, wenn du den Spieler per LoadPlayer bereits geladen hast.
-
What?!
Ich verstehe nicht was du meinst, oder meinst du vielleicht das ich LoadPlayer zuletzt schreiben? -
Hilfsbereite Leute, die offenbar dein ganzes System durcheinander bringen.
So muss das jetzt bei dir aussehen:
case DIALOG_LOGIN:
{
if(response)
{
if(strlen(inputtext) == 0) // Wenn kein Passwort angegebene wurde
{
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login","Das Angegebene Passwort war Falsch.\nBitte log dich jetzt mit dem richtigen Passwort ein:","Login","Abbrechen");
return 1;
}
else
{
new SpielerName[MAX_PLAYER_NAME];
GetPlayerName(playerid, SpielerName, MAX_PLAYER_NAME);
if(!strcmp(inputtext, mysql_ReturnPasswort(SpielerName), true)) // Wir holen uns das Passwort aus der MySQL Datenbank und überprüfen es mit dem angegebenen passwort.
{
SetPVarInt(playerid,"Eingeloggt",1); //Falls beide passwörter übereinstimmen wird die Variable auf 1 gesetzt damit wir die Skin auswahl benutzen können.
LoadPlayer(playerid); //Der Spieler wird "geladen", speich es werden seine Daten aus der Datenbank geholt und in variablen gespeichert um diese im Skript zu verwenden.
SpawnPlayer(playerid); //Wir lassen den Spieler Spawnen}
else
{
//Wenn das Passwort falsch war, lassen wir erneut das Login fenster erscheinen damit der Spieler das Richtige Passwort eingibt.
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login","Das war das Falsche Passwort.\nBitte log dich jetzt mit dem richtigen Passwort ein:","Login","Abbrechen");
return 1;
}
}
}
else
{
Kick(playerid); //Wenn auf Abbrechen geklickt wurde, wird der Spieler gekickt damit man ohne Account nicht Spielen kann.
}return 1;
}Dann machst du unter OnPlayerSpawn am besten das hier:
public OnPlayerSpawn(playerid)
{
if(SpielerInfo[playerid][pBanned]== 1)
{Kick(playerid);
}return 1;
} -
Was hast du da geändert/entfernt?
/edit => Habe es verstanden, sry. Vielen Dank
-
Also ich versuche es jetzt dir zu erklären.
Du hast beim Login pBanned abgefragt, bevor du den Account geladen hast.
Das heißt du hast pBanned abgefragt, bevor überhaupt etwas in pBanned stehen konnte.
Aus diesem Grund habe ich die Abfrage entfernt und nochmal beim Spawn(wenn der Accounts bereit geladen wurde) abgefragt. -
Okey, habe es so gemacht wie du es geschrieben hast, aber ich habe irgendwo da drine ein Klammer Fehler.
-
Okey, habe es so gemacht wie du es geschrieben hast, aber ich habe irgendwo da drine ein Klammer Fehler.
Zwei sogar, deshalb solltest du meins kopieren.
-
Ich muss wieder ein Timer stellen, damit er den Text sieht:
Was ist da falsch?public OnPlayerSpawn(playerid)
{
new pID;
if(SpielerInfo[playerid][pBanned]== 1)
{
SendClientMessage(playerid, ROT, "Du bist vom Server gebannt.");
SetTimerEx("BanTimerText",500,false,"i",pID);
}
forward BanTimer(playerid);
public BanTimer(playerid)
{
Kick(playerid);
}
return 1;
}Errors:
C:\Users\Kadri\Desktop\Streets of San\gamemodes\SoS.pwn(2668) : error 029: invalid expression, assumed zero
C:\Users\Kadri\Desktop\Streets of San\gamemodes\SoS.pwn(2669) : error 029: invalid expression, assumed zero
C:\Users\Kadri\Desktop\Streets of San\gamemodes\SoS.pwn(2670) : error 001: expected token: ";", but found "{"
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase3 Errors.
-
if(SpielerInfo[playerid][pBanned]== 1)
{
SendClientMessage(playerid, ROT, "Du bist vom Server gebannt.");
SetTimerEx("BanTimer",500,false,"i",playerid); //Du musst den Timer für die playerid starten. Dein Timer heisst unten "BanTimer" und nicht "BanTimerText".
} -
public OnPlayerSpawn(playerid)
{
if(SpielerInfo[playerid][pBanned]== 1)
{
SendClientMessage(playerid, ROT, "Du bist vom Server gebannt.");
SetTimerEx("BanTimer",500,false,"i",playerid); //Du musst den Timer für die playerid starten. Dein Timer heisst unten "BanTimer" und nicht "BanTimerText".
}
forward BanTimer(playerid);
public BanTimer(playerid)
{
Kick(playerid);
}
return 1;
}Was ist hier falsch?!
Errors:
C:\Users\Kadri\Desktop\Streets of San\gamemodes\SoS.pwn(2667) : error 029: invalid expression, assumed zero
C:\Users\Kadri\Desktop\Streets of San\gamemodes\SoS.pwn(2668) : error 029: invalid expression, assumed zero
C:\Users\Kadri\Desktop\Streets of San\gamemodes\SoS.pwn(2669) : error 001: expected token: ";", but found "{"
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase3 Errors.
-
Sage mal hast du dein Timer forward und public in OnPlayerSpawn? Mach die mal auserhalb eines Callbacks.
und dein public BanTimer:
public BanTimer(playerid)
{
Kick(playerid);
return 1;
}EDIT: rechtschreibung
EDIT2: was hinzugefügt -
Das lustigste daran ist, dass ihr alle total falsch liegt. Indem ihr nach den kompliziertesten Fehlerquellen sucht, überseht ihr das wesentliche:
Du lädst die Spielerdaten erst NACHDEM du geprüft hast, ob der Spieler gebannt ist. Wo ist der Sinn, wenn doch in diesen Spielerdaten die Info ist, ob er gebannt ist. Dein LoadPlayer steht in der Abfrage, ob er gebannt ist oder nicht, dabei muss es auf jeden Fall davor. Deswegen funktioniert es auch vor einem GMX ganz normal, weil dann ganz simpel aus der Variable ausgelesen wird, die erst DANACH überschrieben wird.Edit: Der Fehler mit dem BanTimer liegt übrigens darin, dass du ein public in einem anderen public forwardest und definierst, das ist ungefähr so, als würdest du ein Callback in ein Callback einbauen und ist total sinnlos.
-
@DarkRevolution man sollte sich einen Topic komplett lesen, da es Showtek in diesem Sinne ihm schon erklärt und gefixt hat, dass einzige was bei ihm immernoch falsch ist, ist das er den Callback und das forward für "BanTimer" in "OnPlayerSpawn" hat. Wenn er es dannach schreibt mit dem "return 1;" was ich geschrieben habe sollte in dem Sinne kein Problem mehr sein.
Er lädt die Daten mit Showtek's lösung in OnPlayerConnect/OnDialogResponse, lässt ihn spawnen und sollte er gebannt sein wird er halt wieder gekickt. Simple as that.
Letzters was du geschrieben hast, habe ich ihm schon längst hier geposted.
-
@xXxCrashxXx:
Habe mir nur die erste Seite durchgelesen. Da gab es schon so viel Stuss auf nur einer Seite, dass ich auf der nächsten Seite nicht viel mehr erwartet habe.
Showtek hat es bereits umgesetzt, habe ich etwas spät gesehen. Auch wenn es einfacher gehen würde, wenn man die Abfrage in den Login einbauen würde und nicht in OnPlayerSpawn. Mein Edit war von meinem ersten Satz übrigens abgekoppelt und war lediglich eine Erinnerung. Zufrieden? -
Was mache ich nur falsch?
C:\Users\Kadri\Desktop\Streets of San\gamemodes\SoS.pwn(35) : warning 235: public function lacks forward declaration (symbol "BanTimer")
C:\Users\Kadri\Desktop\Streets of San\gamemodes\SoS.pwn(2676) : warning 209: function "OnPlayerSpawn" should return a value
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase2 Warnings.
Hier die Zeile 35-38: public BanTimer(playerid)
{
Kick(playerid);
return 1;
}Hier die Zeile: 2676:
public OnPlayerSpawn(playerid)
{
if(SpielerInfo[playerid][pBanned]== 1)
{
SendClientMessage(playerid, ROT, "Du bist vom Server gebannt.");
SetTimerEx("BanTimer",500,false,"i",playerid); //Du musst den Timer für die playerid starten. Dein Timer heisst unten "BanTimer" und nicht "BanTimerText
Kick(playerid);
return 1;
}
}Bitte helfen
-
public BanTimer(playerid)
{
Kick(playerid);
return 1;
}
So schreiben:forward BanTimer(playerid);
public BanTimer(playerid)
{
Kick(playerid);
return 1;
}public OnPlayerSpawn(playerid)
{
if(SpielerInfo[playerid][pBanned]== 1)
{
SendClientMessage(playerid, ROT, "Du bist vom Server gebannt.");
SetTimerEx("BanTimer",500,false,"i",playerid); //Du musst den Timer für die playerid starten. Dein Timer heisst unten "BanTimer" und nicht "BanTimerText
Kick(playerid);
return 1;
}
}
So schreiben:public OnPlayerSpawn(playerid)
{
if(SpielerInfo[playerid][pBanned]== 1)
{
SendClientMessage(playerid, ROT, "Du bist vom Server gebannt.");
SetTimerEx("BanTimer",500,false,"i",playerid); //Du musst den Timer für die playerid starten. Dein Timer heisst unten "BanTimer" und nicht "BanTimerText
Kick(playerid);
}
return 1;
}mfg.
-
C:\Users\Kadri\Desktop\Streets of San\gamemodes\SoS.pwn(2676) : warning 217: loose indentation
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase1 Warning.
_______________________________________________________
Immer noch ein Error, also dort beim ( if(SpielerInfo ...
public OnPlayerSpawn(playerid)
{
if(SpielerInfo[playerid][pBanned]== 1)
{
SendClientMessage(playerid, ROT, "Du bist vom Server gebannt.");
SetTimerEx("BanTimer",500,false,"i",playerid); //Du musst den Timer für die playerid starten. Dein Timer heisst unten "BanTimer" und nicht "BanTimerText
Kick(playerid);
}
return 1;
} -
Immer noch ein Error
Das ist ein Warning und der bedeutet, dass du das falsch eingerückt hast...Rücke es mit TAB richtig ein oder schreibe:
#pragma tabsize 0 //oben in dein Script
mfg.
-