Waffenschein 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. Ich habe versucht ein befehl zu erstellen, mit dem man anderen einen waffenschein geben kann.
    Es funktioniert aber nicht. Währe net wenn mal einer drüber gucken könnte!


    Pawn Code:

    Spoiler anzeigen
    dcmd_waffenschein(playerid,params[])
    {
    new sID;
    if(sscanf(params,"us",sID)) return SendClientMessage(playerid, ROT,"Verwendung: /waffenschein [playerid]");
    {
    if(IsPlayerConnected(sID && playerid))
    {
    if(IstSpielerInFrak(playerid,4)) if(IstSpielerAdmin(playerid,4))
    {
    if(!HatSpielerWaffenschein(sID,1))
    {
    new Spielerdatei[64];
    new Name [MAX_PLAYER_NAME];
    format (Spielerdatei, sizeof(Spielerdatei),"/Accounts/%s.txt",Name);
    dini_IntSet(Spielerdatei,"Waffenschein", 1);
    new string[128];
    new string2[128];
    format (string, sizeof string,"%s hat dir den Waffenschein übergeben. Dies kostet 30000€",getPlayerName(playerid));
    SendClientMessage(playerid, GRÜN,string);
    format(string2, sizeof string2,"Du hast %s den Waffenschein übergeben, und dir 30000€ verdient!",getPlayerName(sID));
    SendClientMessage(playerid, GRÜN, string2);
    GivePlayerMoney(playerid, 30000);
    GivePlayerMoney(sID, -30000);
    }
    else
    {
    new string[64];
    format(string, sizeof string, "%s besizt bereits den Waffenschein!",sID);
    return SendClientMessage(playerid, ROT,string);
    }
    }
    else
    {
    return SendClientMessage(playerid,ROT,"Du bist kein Fahrlehrer");
    }
    }
    else
    {
    return SendClientMessage(playerid, ROT,"Dieser Spieler ist nicht Connected!");
    }
    }
    return 1;
    }



    Danke im vorraus
    MFG
    Kempfer

  • Probiere es mal so aus:

    dcmd_waffenschein(playerid,params[])
    {
    new sID,string[128],Name [MAX_PLAYER_NAME];
    if(sscanf(params,"us",sID)) return SendClientMessage(playerid, ROT,"Verwendung: /waffenschein [playerid]");
    if(!IsPlayerConnected(sID && playerid))return SendClientMessage(playerid, ROT,"Dieser Spieler ist nicht Connected!");
    if(!IstSpielerInFrak(playerid,4)) && !if(IstSpielerAdmin(playerid,4))return SendClientMessage(playerid,ROT,"Du bist kein Fahrlehrer");
    GetPlayerName(sID,Name,MAX_PLAYER_NAME);
    if(!HatSpielerWaffenschein(sID,1))
    {
    new Spielerdatei[64];
    format (Spielerdatei, sizeof(Spielerdatei),"/Accounts/%s.txt",Name);
    dini_IntSet(Spielerdatei,"Waffenschein", 1);
    format (string, sizeof string,"%s hat dir den Waffenschein übergeben. Dies kostet 30000€",getPlayerName(playerid));
    SendClientMessage(playerid, GRÜN,string);
    format(string, sizeof string,"Du hast %s den Waffenschein übergeben, und dir 30000€ verdient!",getPlayerName(sID));
    SendClientMessage(playerid, GRÜN, string);
    GivePlayerMoney(playerid, 30000);
    GivePlayerMoney(sID, -30000);
    }
    else
    {
    format(string, sizeof string, "%s besizt bereits den Waffenschein!",Name);
    return SendClientMessage(playerid, ROT,string);
    }
    return 1;
    }


    if(sscanf(params,"us",sID)) return SendClientMessage(playerid, ROT,"Verwendung: /waffenschein [playerid]");
    {


    Das kann so nicht funktionieren ;)
    Außerdem brauchst du nicht tausend Strings erstellen..

  • if(sscanf(params,"u",sID))


    Du brauchst nur u zu nutzen das s ist da nicht nötig


    Darauf hab ich nicht geachtet, danke ,)


    Du brauchst auch nicht abfragen, ob der Spieler, der den Command eingibt, connected ist..

    Spoiler anzeigen
    dcmd_waffenschein(playerid,params[])
    {
    new sID,string[128],Name [MAX_PLAYER_NAME];
    if(sscanf(params,"u",sID)) return SendClientMessage(playerid, ROT,"Verwendung: /waffenschein [playerid]");
    if(!IsPlayerConnected(sID))return SendClientMessage(playerid, ROT,"Dieser Spieler ist nicht Connected!");
    if(!IstSpielerInFrak(playerid,4)) && !if(IstSpielerAdmin(playerid,4))return SendClientMessage(playerid,ROT,"Du bist kein Fahrlehrer");
    GetPlayerName(sID,Name,MAX_PLAYER_NAME);
    if(!HatSpielerWaffenschein(sID,1))
    {
    new Spielerdatei[64];
    format (Spielerdatei, sizeof(Spielerdatei),"/Accounts/%s.txt",Name);
    dini_IntSet(Spielerdatei,"Waffenschein", 1);
    format (string, sizeof string,"%s hat dir den Waffenschein übergeben. Dies kostet 30000€",getPlayerName(playerid));
    SendClientMessage(playerid, GRÜN,string);
    format(string, sizeof string,"Du hast %s den Waffenschein übergeben, und dir 30000€ verdient!",getPlayerName(sID));
    SendClientMessage(playerid, GRÜN, string);
    GivePlayerMoney(playerid, 30000);
    GivePlayerMoney(sID, -30000);
    }
    else
    {
    format(string, sizeof string, "%s besizt bereits den Waffenschein!",Name);
    return SendClientMessage(playerid, ROT,string);
    }
    return 1;
    }

  • Also die abfrage, ob der Spieler der den command eingibt conencted ist, ist gar nicht so abwigig.
    Stell dir vor:
    Es ist ein Admin da der sich selber den Waffenschein geben möchte, da der Server gerade erst gestartet ist, aus testgründen, etc.
    Dann kann er es sich nicht geben.
    Außerdem, hätte ich noch eine frage zu deiner Lösung.
    Kann es überhaupt funktionieren, das du schreibst:
    if(!IstSpielerInFrak(playerid,4)) && !if(IstSpielerAdmin(playerid,4))return SendClientMessage(playerid,ROT,"Du bist kein Fahrlehrer");
    Ich bin relativ neu in dem gebiet, aber ist es überhaupt möglich das man vor das if ein "!" schreibt?
    Außerdem müsste doch ein return hinter if(!IstSpieler in Frak(playerid,4)) und hinter if(IstSpielerAdmin(playerid,4)) oder sehe ich das flasch. Das return steht ja nur für eine if abrfrage oder nicht?
    Wäre cool, wenn du es mir nochmal erklären könntest.


    MFG
    Kempfer

  • Sorry, das muss so:
    if(!IstSpielerInFrak(playerid,4) && (!IstSpielerAdmin(playerid,4)))return SendClientMessage(playerid,ROT,"Du bist kein Fahrlehrer");
    Du fragst in einer if-Abfrage ab, ob der Spieler nicht in der Fraktion 4 ist & auch kein Admin 4 ist..
    Du darfst bei der ersten Abfrage ( Fraktionsabfrage ) nicht direkt die Abfrage beenden!

  • Es ist ein Admin da der sich selber den Waffenschein geben möchte, da der Server gerade erst gestartet ist, aus testgründen, etc.
    Dann kann er es sich nicht geben.


    Warum soll er sich das nicht geben können ? Wie soll er A) admin sein ohne ingame && eingeloggt zu sein (ausgenommen rcon) und B) wie soll der dann einen Befehl ausführen wenn A) schon nicht zu trifft. Wobei afaik kann man per rcon normalerweise keine cmds ausführen sofern diese nicht expliziert unter OnRconCommand abgefangen werden (kann mich da aber auch täuschen mit dem rcon gedöns)

  • Warum soll er sich das nicht geben können ? Wie soll er A) admin sein ohne ingame && eingeloggt zu sein (ausgenommen rcon) und B) wie soll der dann einen Befehl ausführen wenn A) schon nicht zu trifft. Wobei afaik kann man per rcon normalerweise keine cmds ausführen sofern diese nicht expliziert unter OnRconCommand abgefangen werden (kann mich da aber auch täuschen mit dem rcon gedöns)


    Das hat nicht funktioniert, weil die Abfrage für die Fraktion & Admin falsch war!
    Habe sie dir ja oben richtig hingeschrieben

  • Wie muss ich es denn schreiben, wenn er entweder Admin oder Fahrschulmember ist?


    MFG
    Kempfer


    if(!IstSpielerInFrak(playerid,4) && (!IstSpielerAdmin(playerid,4)))return SendClientMessage(playerid,ROT,"Du bist kein Fahrlehrer");


    Hab ich dir doch geschrieben..
    So klappt es auch, also sollte es zumindest ;)

  • Ich habe da diese errors
    C:\Dokumente und Einstellungen\bzz\Desktop\Samp
    Server\gamemodes\GermanHideReallife.pwn(677) : error 029: invalid
    expression, assumed zero
    C:\Dokumente und
    Einstellungen\bzz\Desktop\Samp
    Server\gamemodes\GermanHideReallife.pwn(677) : warning 215: expression
    has no effect
    C:\Dokumente und Einstellungen\bzz\Desktop\Samp
    Server\gamemodes\GermanHideReallife.pwn(677) : error 001: expected
    token: ";", but found "if"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    2 Errors.


    Das ist in dieser Line:
    if(!IstSpielerInFrak(playerid,4)) && !if(IstSpielerAdmin(playerid,4))return SendClientMessage(playerid,ROT,"Du bist kein Fahrlehrer");
    Allerdings habe ich das !if(IstSpielerAdmin(playerid,4)) zu if(!IstSpielerAdmin(playerid,4))
    geändert.
    Wie bekomme ich die errors da weg?


    MFG
    Kempfer


  • Wie oft denn noch?
    if(!IstSpielerInFrak(playerid,4) && (!IstSpielerAdmin(playerid,4)))return SendClientMessage(playerid,ROT,"Du bist kein Fahrlehrer");
    So ist es richtig!

  • Ich habe es jetzt nach der Nachricht von XeroX es so ins script gepackt:


    if(!IstSpielerInFrak(playerid, 4) && (!IstSpielerAdmin(playerid, 4))return SendClientMessage(playerid, ROT, "Du bist kein Fahrlehrer.");


    Aber ich bekomme immer noch diesen error
    C:\Dokumente und Einstellungen\bzz\Desktop\Samp Server\gamemodes\GermanHideReallife.pwn(679) : error 001: expected token: ")", but found "return"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Error.


    Wenn ich die Klammer aber zumachen, dann kommen 2 neue errors!


    MFG
    Kempfer