Problem mit /waren kaufen [Anzahl]

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
  • Hey, ich habe mal wieder ein Problem, und zwar schreibe ich zur Zeit das DRP Script um.
    Nun bin ich bei dem Job Pilot und dort gib es ein Befehl "/waren" mit diesen kann man eine bestimmte Anzahl (selbst wählbar) an Waren kaufen, und Tauchen (Die komplette Ladung).
    Jetzt ist meine Frage wie ich das umsetze das bei "/waren kaufen" noch der Parameter für die Anzahl abgefragt wird.
    Mein bisheriger Versuch:
    CMD:waren(playerid,params[]){
    if(!IsPlayerConnected(playerid)||gPlayerLogged[playerid] == 0)return SendClientMessage(playerid,COLOR_GREY,"Du bist nicht eingeloggt.");
    if(PlayerInfo[playerid][pJob] != 14)return SendClientMessage(playerid, COLOR_GREY, "Du bist kein Pilot!");
    if(GetVehicleModel(GetPlayerVehicleID(playerid)) != 553)return SendClientMessage(playerid, COLOR_GREY, "Du kannst nur mit einer Nevada Waren transportieren!");
    new aktion[10],string[128],string2[128],string3[128],menge,preis = menge*15,geld = Waren2Dabei[playerid] * 30+random(80),lohn = Waren3Verkauft[playerid] - 80;
    if(sscanf(params,"s",aktion)){
    SendClientMessage(playerid, COLOR_GOLD, "____________________________|Warenhilfe|____________________________");
    SendClientMessage(playerid, COLOR_WHITE, "Benutzung: /waren [Aktion]");
    SendClientMessage(playerid, COLOR_WHITE, "Verfügbare Funktionen: kaufen, tauschen, verkaufen, abrechnen");
    SendClientMessage(playerid, COLOR_WHITE, "*Kaufen [SF], Tauschen [LS], Verkaufen [LV], Abrechnen [SF]");
    SendClientMessage(playerid, COLOR_GOLD, "__________________________________________________________________");
    return 1;
    }
    if(!strcmp(aktion,"kaufen",true))
    {
    print("Kaufen 1");
    if(!IsPlayerInRangeOfPoint(playerid, 90.0, -1233.6982,-88.1554,14.9228))return SendClientMessage(playerid, COLOR_GREY, "Du bist nicht am Hangar am San Fiero Airport!");
    print("kaufen 2");
    if(WarenDabei[playerid] >= 75)return SendClientMessage(playerid, COLOR_GREY, "Du hast schon 75 Waren dabei!");
    print("kaufen 3");
    if(sscanf(params,"d",menge))return SendClientMessage(playerid, COLOR_GREY, "Benutzung: /waren kaufen [Anzahl] | *Preis pro Ware: 15$, Maximale Waren: 75");
    print("kaufen 4");
    if(menge < 5 || menge > 75)return SendClientMessage(playerid, COLOR_GREY, "Du musst mindestens 5 Waren und maximal 75 Waren kaufen!");
    print("kaufen 5");
    if(preis > GetPlayerMoney(playerid))return SendClientMessage(playerid, COLOR_GREY, "Kannst du dir nicht leisten!");
    print("kaufen 6");
    WarenDabei[playerid] += menge;
    GivePlayerMoney(playerid, -preis);
    format(string, sizeof(string), "*Du hast dir %d Waren im Wert von %d$ gekauft", menge, preis);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, "*Fliege jetzt zum LS Airport (Roter Marker)");
    SetPlayerCheckpoint(playerid, 1888.6704,-2638.9941,13.5469, 8.0);
    return 1;
    }
    //Tauschen, Verkaufen, Abrechnen funktioniert alles, da kein weiterer Parameter benötigt wird.
    return 1;
    }
    Er führt den Befehl nur bis "print("kaufen 3") aus.


    ---
    Andy

  • Beitrag von YaBroo ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Du kannst es dir ganz einfach machen und dir einen eigenen specifer erstellen

    SSCANF:pilot (string []) {
    If (! strcmp (string,"abbrechen")) return 1;
    else if(....) return 2;
    .....
    }

    verwendung
    new name, val;
    if (sscanf (params,"k <pilot> D (-1)", name, val)....

    switch (name) {
    case 1: {
    ...
    }
    }

    Geschrieben auf dem handy
    /edit
    der string wird ja nur temporär gesplittet daher kannst du mit sscanf nicht die menge einfach so auslesen da immer noch der string dazwischen ist

  • Vergiss sscanf.
    Ganz einfach mit strtok.


    CMD:waren(playerid,params[]){
    if(!IsPlayerConnected(playerid)||gPlayerLogged[playerid] == 0)return SendClientMessage(playerid,COLOR_GREY,"Du bist nicht eingeloggt.");
    if(PlayerInfo[playerid][pJob] != 14)return SendClientMessage(playerid, COLOR_GREY, "Du bist kein Pilot!");
    if(GetVehicleModel(GetPlayerVehicleID(playerid)) != 553)return SendClientMessage(playerid, COLOR_GREY, "Du kannst nur mit einer Nevada Waren transportieren!");
    new aktion[20],string[128],string2[128],string3[128],menge,preis = menge*15,geld = Waren2Dabei[playerid] * 30+random(80),lohn = Waren3Verkauft[playerid] - 80, idx, tmp[20];
    if(!strlen(params)){
    SendClientMessage(playerid, COLOR_GOLD, "____________________________|Warenhilfe|____________________________");
    SendClientMessage(playerid, COLOR_WHITE, "Benutzung: /waren [Aktion]");
    SendClientMessage(playerid, COLOR_WHITE, "Verfügbare Funktionen: kaufen, tauschen, verkaufen, abrechnen");
    SendClientMessage(playerid, COLOR_WHITE, "*Kaufen [SF], Tauschen [LS], Verkaufen [LV], Abrechnen [SF]");
    SendClientMessage(playerid, COLOR_GOLD, "__________________________________________________________________");
    return 1;
    }
    aktion = strtok(params, idx);
    if(!strcmp(aktion,"kaufen",true))
    {
    print("Kaufen 1");
    if(!IsPlayerInRangeOfPoint(playerid, 90.0, -1233.6982,-88.1554,14.9228))return SendClientMessage(playerid, COLOR_GREY, "Du bist nicht am Hangar am San Fiero Airport!");
    print("kaufen 2");
    if(WarenDabei[playerid] >= 75)return SendClientMessage(playerid, COLOR_GREY, "Du hast schon 75 Waren dabei!");
    print("kaufen 3");
    tmp = strtok(params, idx);
    if(!strlen(tmp))return SendClientMessage(playerid, COLOR_GREY, "Benutzung: /waren kaufen [Anzahl] | *Preis pro Ware: 15$, Maximale Waren: 75");
    menge = strval(tmp);
    print("kaufen 4");
    if(menge < 5 || menge > 75)return SendClientMessage(playerid, COLOR_GREY, "Du musst mindestens 5 Waren und maximal 75 Waren kaufen!");
    print("kaufen 5");
    if(preis > GetPlayerMoney(playerid))return SendClientMessage(playerid, COLOR_GREY, "Kannst du dir nicht leisten!");
    print("kaufen 6");
    WarenDabei[playerid] += menge;
    GivePlayerMoney(playerid, -preis);
    format(string, sizeof(string), "*Du hast dir %d Waren im Wert von %d$ gekauft", menge, preis);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, "*Fliege jetzt zum LS Airport (Roter Marker)");
    SetPlayerCheckpoint(playerid, 1888.6704,-2638.9941,13.5469, 8.0);
    return 1;
    }
    //Tauschen, Verkaufen, Abrechnen funktioniert alles, da kein weiterer Parameter benötigt wird.
    return 1;
    }


    strtok: http://forum.sa-mp.de/gta-mult…eschnipsel-57#post1965719