Befehle mit Übergabewerten

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
  • if(sccanf(params, "uus", pID, license, string)) // Der String ist der Grund


    Wieso denn uus :|





    Zitat

    [playerid] [licenses] [Grund]


    Kommt darauf an,wass du mit licenses meinst. Könnte man sowohl mit einer Zahl als auch einem Text realisieren.
    Beispiel für Zahl wäre z.B.


    1 = Führerschein-Klasse B // PKW
    2 = Führerschein-Klasse A // Motorrad
    3 = Führerschein-Klasse C // LKW
    ...


    new
    pID,
    iLicence,
    sGrund[32];
    if(sccanf(params, "uis", pID, iLicence, sGrund))



    Mit einem String ist das ähnlich.
    new
    pID,
    sLicence[32],
    sGrund[32];
    if(sccanf(params, "uss", pID, sLicence, sGrund))
    An dieser Stelle müsstest du aber wohl mit strcmp arbeiten. Denn du willst bestimmt aus dem String eine Variable ableiten bzw am String erkennen, mit welcher Variable du arbeiten sollst.

  • Okay ich würde es so machen..


    new
    pID,
    iLicence,
    sGrund[32];
    if(sccanf(params, "uis", pID, iLicence, sGrund))


    Wie kann ich aber jetzt die iLicence festelegen und sGrund?


    also z.b. pID= 2 iLicence = 2 sGrund = Falsche Straßenseite


    also iLicence und sGrund fest gesetzt sein..


    wie kann ich dass machen?


    lg M4rciii

  • Moin,


    dcmd_hkaufen(playerid, params[])
    {
    for(new h = 1,string[125],sUnterbefehl[16]; h < MAX_HOUSE; h ++)
    {
    if(IsPlayerInRangeOfPoint(playerid,5.0,Haus[h][hX],Haus[h][hY],Haus[h][hZ]) && Haus[h][bereit] == 0)
    {
    if(sscanf(params,"s",sUnterbefehl)){
    SendClientMessage(playerid,COLOR_RED,"Benutze: /hkaufen [Premium/Normal]");
    }
    if(strfind(sUnterbefehl, "Premium", true) != -1)
    {
    GetPlayerName(playerid,pName,sizeof pName);
    SendClientMessage(playerid,COLOR_YELLOW,"Du hast das Haus für Premiumpunkte gekauft.");
    Spieler[playerid][lastx] = Haus[h][hX];
    Spieler[playerid][lasty] = Haus[h][hY];
    Spieler[playerid][lastz] = Haus[h][hZ];
    strmid(Haus[h][besitzer], pName,0, sizeof(pName)-1, MAX_PLAYER_NAME);
    DestroyPickup(Haus[h][ID]);
    Delete3DTextLabel(Haus[h][hlabel]);
    format(string,sizeof string,"Besitzer: %s\nLevel: %d\nPreis: %d $\nPremiumpunkte: %d",Haus[h][besitzer],Haus[h][level],Haus[h][preis],Haus[h][punkte]);
    Haus[h][hlabel] = Create3DTextLabel(string,COLOR_WHITE,Haus[h][hX],Haus[h][hY],Haus[h][hZ]+0.75,40.0,0,1);
    Haus[h][ID] = CreatePickup(1272, 1, Haus[h][hX], Haus[h][hY], Haus[h][hZ], -1);
    }
    else if(strfind(sUnterbefehl, "Normal", true) != -1)
    {
    GetPlayerName(playerid,pName,sizeof pName);
    SendClientMessage(playerid,COLOR_YELLOW,"Du hast das Haus für Geld gekauft.");
    Spieler[playerid][lastx] = Haus[h][hX];
    Spieler[playerid][lasty] = Haus[h][hY];
    Spieler[playerid][lastz] = Haus[h][hZ];
    DestroyPickup(Haus[h][ID]);
    Delete3DTextLabel(Haus[h][hlabel]);
    strmid(Haus[h][besitzer], pName,0, sizeof(pName)-1, MAX_PLAYER_NAME);
    format(string,sizeof string,"Besitzer: %s\nLevel: %d\nPreis: %d $\nPremiumpunkte: %d",Haus[h][besitzer],Haus[h][level],Haus[h][preis],Haus[h][punkte]);
    Haus[h][hlabel] = Create3DTextLabel(string,COLOR_WHITE,Haus[h][hX],Haus[h][hY],Haus[h][hZ]+0.75,40.0,0,1);
    Haus[h][ID] = CreatePickup(1272, 1, Haus[h][hX], Haus[h][hY], Haus[h][hZ], -1);
    }
    }
    }
    return 1;
    }


    Immer wenn dieser Befehl eingeben wird, kommt die Nachricht vom Server das er diesen Befehl nicht kennt....


    EDIT: Fehler behoben, neue Frage

  • Zeig die zugehörige DCMD-Zeile unter OnPlayerCommandText,sonst kann man nicht sagen,ob der Fehler nicht schon dort liegt.
    Wieso fängst du überhaupt bei h = 1 an zu zählen in der Schleife ?


    Zitat

    EDIT: Fehler behoben, neue Frage


    Das heisst :/ ?

  • Was ist daran falsch ?


    dcmd_offlinearrest(playerid,params[])
    {
    new psName[24], pZeit, Knast, string[128];
    if(sscanf(params, "dds",pZeit,Knast,psName))
    {
    return SendClientMessage(playerid,COLOR_BENUTZETEXT,"Benutze: /offlinearrest [Zeit in Minuten] [1 = Knast | 2 = Prison] [Spieler-Name]");
    }
    if(IsPlayerConnected(playerid))
    {
    if(IsACop(playerid) && OnDuty[playerid] == 1)
    {
    for(new i = 0; i < sizeof(//Zensiert); i++)
    {
    if(Erstellt[i] == 1)
    {
    if(IsPlayerInRangeOfPoint(playerid, 10,X,Y,Z))
    {
    if(strcmp(psName, OfflineName, true) == 0)
    {
    if(//Zensiert)
    {
    if(pZeit < -1 || pZeit <= 0 || pZeit > 2000)
    {
    SendClientMessage(playerid,COLOR_BENUTZETEXT,"Die Zeit muss mindestens 1 betragen.");
    return 1;
    }
    if(Knast == 2 || Knast == 1)
    {
    if(Knast == 2)
    {
    //Hier setzte er den knast
    }
    if(Knast == 1)
    {
    //Hier setzte er den knast
    }
    format(string, sizeof(string), "* Du hast %s für %d Minuten eingesperrt!", psName, pZeit);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
    format(string, sizeof(string), "Funk: %s wurde für %d Minuten eingesperrt.(Offlinearrest)", psName, pZeit);
    SendCopMessage(COLOR_DBLUE,string);
    new sendername[MAX_PLAYER_NAME];
    GetPlayerName(playerid, sendername, sizeof(sendername));
    if(PlayerInfo[playerid][pMember] == 7 || PlayerInfo[playerid][pLeader] == 7)
    {
    format(string, sizeof(string), "<< FBI Agent %s hat den Verdächtigen %s eingesperrt >>", sendername, psName);
    SendClientMessageToAll(COLOR_LIGHTRED, string);
    }
    else if(PlayerInfo[playerid][pMember] == 14 || PlayerInfo[playerid][pLeader] == 14)
    {
    format(string, sizeof(string), "<< LSPD Officer %s hat den Verdächtigen %s eingesperrt >>", sendername, psName);
    SendClientMessageToAll(COLOR_LIGHTRED, string);
    }
    else if(PlayerInfo[playerid][pMember] == 16 || PlayerInfo[playerid][pLeader] == 16)
    {
    format(string, sizeof(string), "<< SFPD Officer %s hat den Verdächtigen %s eingesperrt >>", sendername, psName);
    SendClientMessageToAll(COLOR_LIGHTRED, string);
    }
    else if(PlayerInfo[playerid][pMember] == 1 || PlayerInfo[playerid][pLeader] == 1)
    {
    format(string, sizeof(string), "<< LVPD Officer %s hat den Verdächtigen %s eingesperrt >>", sendername, psName);
    SendClientMessageToAll(COLOR_LIGHTRED, string);
    }
    return 1;
    }
    else
    {
    SendClientMessage(playerid,COLOR_BENUTZETEXT,"Du kannst nur den Knast 1 oder 2 Auswählen!");
    return 1;
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_BENUTZETEXT,"Dieser Spieler hatte keine Wanteds oder wurde schon arrestet.");
    return 1;
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_BENUTZETEXT, "Name Stimmt nicht Überein.");
    }
    }
    }
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_BENUTZETEXT, "Du bist kein Polizist oder nicht OnDuty !");
    }
    }
    return 1;
    }


    wenn ich z.b. /offlinearrest 5 1 asdashdgasdgasjdgasdgasdgashdgasdgasda eingebe Crasht der server. ohne da sich eine Meldung bekommen von wegen ich sein kein cop oder nicht onduty.


    kann mir bitte jemand helfen ?

  • Der Server sollte nicht crashen,er sollte nur die Funktion nicht vollständig ausführen.
    psName kann nur 23 Zeichen fassen, "asdashdgasdgasjdgasdgasdgashdgasdgasda" ist definitiv länger.


    Hast das Tutorial wohl nicht ganz durchgearbeitet.Es gibt einen extra Platzhalter für Spieler,egal ob dort Name oder ID eingegeben wird.Das ist u. Je nachdem ob du das Plugin benutzt,wäre auch r möglich.


    Kleine Anmerkungen.

    • if(IsPlayerConnected(playerid)) - Wieso ? Einer macht es vor,zu viele machen es falsch nach. Die Abfrage bringt 0. Wer soll der Befehl sonst gesendet haben unter,wenn nicht ein Spieler der auf dem Server ist?
    • for(new i = 0; i < sizeof(//Zensiert); i++) - Schön "Zensiert",aber durch was geht denn die Schleife? Sollte doch eigentlich durch alle Spieler laufen.
    • if(pZeit < -1 || pZeit <= 0 || pZeit > 2000) - "pZeit < -1" ist unnötig. "pZeit <= 0" deckt diesen Fall ebenfalls ab
  • Sagen wa mal das


    Ich gebe /waffe 150 ein
    Ich habe aber auch vor, das wenn ich nur /waffe eingebe das es dann auch funktioniert
    Verstehen du?


    Mit Z kann man Optimale strings machen sprich gibst du danach nix ein soll was vordefiniertes kommen

    All in all it's just another brick in the wall

  • Mit Z kann man Optimale strings machen


    Haha :D nicht optimale, sondern optionale ;)


    und Sry4pwn hat die Lösung schon gesagt nur falsch gemacht, es geht so :


    new wert;
    if(sscanf(params,"i",wert)) wert = 10;
    //Hier keine Klammern mehr ^^


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S