kick befehl hilfe benötigt

  • kick befehl hilfe benötigt

    Sowww mädels ich hab mich in den letzten tagen stark in pawn gebessert bin schon ziemlich weit in meinen selfmade aber eine wichtige info fehlt mir beziehungsweise mach ich an einer stelle was falsch und das sit in der abfrage ob der spieler offline ist hier mal mein script gibt keine errors aber wenn ich eine id kicken will die nicht auf server ist kommt du hast den spieler gekickt
    [pwn]
    dcmd_kick(playerid,params[0])
    {
    new kickid;
    if(sscanf(params,"ud",kickid))
    {
    return SendClientMessage(playerid,COLOR_RED,"/kick [id]");
    }
    if (IsPlayerAdmin(playerid))
    {
    if(kickid == INVALID_PLAYER_ID) // <---- da muss das problem liegen
    {
    SendClientMessage(playerid,COLOR_RED,"Der Spieler ist nicht vorhanden");
    }
    else
    {
    SendClientMessage(playerid,COLOR_GREEN,"Der Spieler wurde gekickt");
    SendClientMessage(kickid,COLOR_RED,"Du wurdest von einem Admin gekickt");
    Kick(kickid);
    FreezePlayer(kickid);
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du bist kein Admin");
    }

    return 1;
    }
    [/pwn]

    bitte auch danach um eine kurze erklärung :)
  • [pwn] if(sscanf(params,"ud",kickid)) [/pwn]
    Du erwartest hier 2 Character, aber nur eine Variable,
    Da du ein User als Eingabe erwartest, solltest du das U nehmen, da es sowohl auf string (Name/ Teil eines Namen) als auch auf Int. (playerid) reagiert, Es versucht dies mit einem Spieler, der online ist zu identifizieren.

    Das d ist eine reine Ganzzahl (double) und daher nicht so geeignet fuer Spieler, die Online sind, außerdem, da du den Parameter fuer U in die Variable kickid speicherst, aber keine 2. Variable angibst, geht der 2. Parameter ins leere (mal salop gesagt ^^ ).
    Also das d muss weg.

    Das waere zumindest das erste, was mir auffiel.
    Gruß,
    Dennis

    PS: Ach hier sry fuer ggf. unschoene Formatierungen des Posts sowie Umlaute, da ich mobil online bin.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Dennis321 ()

  • Also, worauf ich dich hingewiesen habe ist folgendes:
    [pwn]if(sscanf(params,"ud",kickid))[/pwn]

    hier fragst du die Parameter des Befehls ab, die du in der Variable "kickid" speicherst.
    Dabei gilt, jeder Buchstabe im "" steht quasi für ein Character, also quasi pro variable ein Buchstabe ()mal so gesagt).

    if(sscanf(params,"ud",kickid))
    Hier siehst du in Rot deine angegebene Character, es sind 2, einmal "u" und einmal "d".

    Andere Beispiele für Character sind: "s"=String (Zeichenkette) oder "i"=Integer(Ganzzahl).

    Du hast also 2 Charactere, dass heißt es wird nach 2 Parameter im Befehl gewartet (Im Game: /BEFEHL PARAMETER1 PARAMETER2).
    Du hast aber nur eine Variable angegeben, hinten (hab ich oben mal in grün markiert), diese Variable namens kickid besitzt nun den Inhalt des ersten Parameters, also Character "u".
    der 2. Character "d" hat nun keine Variable, in der die Eingabe gespeichert werden kann.

    Sehr lange Rede, sehr kurzer Sinn,
    einfach aus
    [pwn]if(sscanf(params,"ud",kickid))[/pwn]

    Das machen:
    [pwn]if(sscanf(params,"u",kickid))[/pwn]
    Also das d wegnehmen.

    Gruß,
    Dennis