OCMD Befehl

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
  • Hallo Leute,


    Ich habe ein Problem mit einem Befehl (killplayer) aber find die Lösung nicht....


    Das Problem ist, wenn ich nur /killplayer eingebe, dann kommt "Benutzung: /killplayer [SpielerID/Name]".
    Wenn ich aber /killplayer Sorato eingebe, dann kommt "Server: unknown command".


    Ich hoffe ihr könnt mir helfen..


    Hier der Befehl:


    ocmd:killplayer(playerid, params[])
    {
    if (PlayerInfo[playerid][pAdminlevel] >= 3)
    {
    new killID, string[128], string2[128];
    if (sscanf(params, "r", killID))
    {
    return SendClientMessage(playerid, COLOR_WHITE, "Benutzung: /killplayer [SpielerID/Name]");
    }


    format(string, sizeof(string), "%s hat dich getötet!", PlayerInfo[playerid][pName]);
    SendClientMessage(killID, COLOR_YELLOW, string);
    format(string2, sizeof(string2), "Du hast %s getötet!", PlayerInfo[killID][pName]);
    SendClientMessage(playerid, COLOR_YELLOW, string2);
    SetPlayerHealth(killID, 0);
    AddAdminLog(playerid, "killplayer", PlayerInfo[killID][pName]);
    return 1;
    }
    else
    {
    SendClientMessage(playerid, COLOR_RED, "Du hast nicht das Recht diesen Befehl auszuführen!");
    }

    return 1;
    }



    Vielen Dank



    Gruß Sorato

  • Was soll auch das r in sscanf sein?
    Mit dem Buchstaben sagst du sscanf nach was für einen Datentyp er suchen soll und du sagst ihm "r" und das kennt er nicht.
    Du willst ja das er eine ID nimmt, und ID's sind zahlen, dafür kannst du in sscanf ein i oder ein d nehmen.


    Ansonsten müsste der Rest Stimmen

  • Das ist Falsch, das r steht für UserID bzw. Namen das siehst du Hier: [ SCRIPTING ] sscanf 2.0


    Um genau zu sein:

    Code
    [*]r
     [*]Player name/id
     [*]Ein Spielername oder  eine playerid. Also sowohl z.b /kick Maddin als auch /kick 0 sind  möglich. Hier werden allerdings nur Spieler beachtet, keine Bots!
     [*]Maddin, Hans, 0, 1


    Also das stimmt soweit... wo könnte sonst der Fehler liegen ?


    Gruß Markus

  • Bau am besten noch eine Abfrage ein, ob der Spieler verbunden ist (if(IsPlayerConnected(killID)))

    Unkompetent. Das neue dynamisch.



    ihr seit schon lustig postet erros aber nicht die zeilen wo sie sind dann können wir euch auch nicht helfen^^


    Lernt Scripten, Leute, und macht eure Augen auf!


    _______________________________________
    50 Beiträge: [x] 300 Beiträge: [x]
    100 Beiträge: [x] 500 Beiträge: [x]
    150 Beiträge: [x] 1000 Beiträge: [x]
    200 Beiträge: [x]
    2000 Beiträge: []
    250 Beiträge: [X] Boardaktivitäten: Profil


    [size=36]_______________________________________

    /Edit: Schmerzt es dir eigentlich nicht so ein Müll zu schreiben 8|

  • In der Tat.. Ich benutze sscanf 2 ;)


    Deadmau5:


    Das ist Okay, aber das löst nicht das Problem.. ich versteh das nicht :(


    Kann es evtl. sein das es an was anderem liegt, das da "Server: unknown Command" kommt ?



    //Edit: Kann es was mit dem Return 1; zu tun haben ?
    Ich habe jetzt mal im Callback "OnPlayerCommandText" (da steht nur return 0;)
    das return 0; zu return 1; gemacht wenn ich jetzt /killplayer eingebe dann kommt wie gewollt das "Benutze..." aber wenn ich /killplayer Sorato eingebe, kommt nichts und passiert nichts :O

    Einmal editiert, zuletzt von Sorato ()

  • Sicherlich hat das was mit dem return zu tun, du solltest es bei OnPlayerCommandText auf 0 lassen, denn dann gibt es ihn nicht und die Nachricht kommt.
    Hier in deinem Befehl bricht er die ausführung irgendwo ab,
    Mach das mal anstelle des jetzigen, probiere es Ingame aus und poste dann mal den Server Log



    ocmd:killplayer(playerid, params[])
    {
    if (PlayerInfo[playerid][pAdminlevel] >= 3)
    {
    new killID, string[128], string2[128];
    print("1");
    if (sscanf(params, "r", killID))
    {
    print("2");
    return SendClientMessage(playerid, COLOR_WHITE, "Benutzung: /killplayer [SpielerID/Name]");
    }
    print("3");
    format(string, sizeof(string), "%s hat dich getötet!", PlayerInfo[playerid][pName]);
    print("4");
    SendClientMessage(killID, COLOR_YELLOW, string);
    print("5");
    format(string2, sizeof(string2), "Du hast %s getötet!", PlayerInfo[killID][pName]);
    print("6");
    SendClientMessage(playerid, COLOR_YELLOW, string2);
    print("7");
    SetPlayerHealth(killID, 0);
    print("8");
    AddAdminLog(playerid, "killplayer", PlayerInfo[killID][pName]);
    print("9");
    return 1;
    }
    else
    {
    SendClientMessage(playerid, COLOR_RED, "Du hast nicht das Recht diesen Befehl auszuführen!");
    }
    return 1;
    }

  • Wow!
    Du hattest Recht er bricht ab, aber wieso ... muss wohl was mit PlayerInfo[killID][pName] zutun haben..


    Ausgabe ist: 1, 3, 4, 5


    Das heißt bei:


    Code
    format(string2, sizeof(string2), "Du hast %s getötet!", PlayerInfo[killID][pName]);


    hört er auf..

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Hab jetzt u und d probiert,


    u = r (Das selbe..)


    Mit d funktionierts, aber das gefällt mir garnicht... wie mach ich das dann mit r ?


    Der Vorteil von r bzw. u ist das es egal ist ob man den Spielernamen (bzw. einen Teil davon) oder die ID eingibt...


    fällt euch was ein wie ich das mit r machen könnte ?