/materias [get/deliver] [Anzahl] ?! OCMD und Sscanf

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 Community.


    ich arbeite grade an dem Job "Waffendealer". Ich möchte das die Spieler z.b. "/materials get 10" eingeben und sie dann 10 mats pakete bekommen. Da ich mit sscanf und ocmd arbeite nimmt er aber jetzt (denke ich) get 10 als einen string. Wie kann ich den quasi splitten ? das es funktioniert?


    Code:
    ocmd:materials(playerid, params[])
    {
    if(Eingeloggt[playerid] != 1) { return 1; }
    if(Spieler[playerid][Beruf] != JOB_Waffendealer) { return SendInfoMsg(playerid, "Du bist kein Waffendealer!"); }
    new auswahl[10], tmpstr[128], anzahl;
    if(sscanf(params,"s",auswahl)) {
    return SendNutzMsg(playerid, "/materials [get/deliver]");
    }
    if(!strcmp(auswahl, "get", true)) {
    if(!IsPlayerInRangeOfPoint(playerid, 5.0, -90.8883,-1576.5775,2.6172)) return SendInfoMsg(playerid, "Du bist nicht am Materials Get Punkt! (/navi)");
    if(SpielerVariablen[playerid][PaketeDabei] >= 10) return SendInfoMsg(playerid, "Du kannst höchstens 10 Materials Pakete holen!");
    if(sscanf(params,"i",anzahl)) {
    return SendNutzMsg(playerid, "/materials get [Anzahl]");
    }
    if(anzahl+SpielerVariablen[playerid][PaketeDabei] > 10) {
    format(tmpstr, sizeof tmpstr, "Soviele Pakete kannst du nicht tragen! (Maximal 10 Du hast: %d.)",SpielerVariablen[playerid][PaketeDabei]);
    SendInfoMsg(playerid, tmpstr);
    return 1;
    }
    if(anzahl*400 > Spieler[playerid][Geld]) {
    format(tmpstr, sizeof tmpstr, "Du hast nicht genug Geld. Du brauchst: $%d und hast $%d.",anzahl*400,Spieler[playerid][Geld]);
    SendInfoMsg(playerid, tmpstr);
    return 1;
    }
    SpielerVariablen[playerid][PaketeDabei] += anzahl;
    Spieler[playerid][Geld] -= anzahl*400;
    format(tmpstr, sizeof tmpstr, " Du hast dir %d Pakete für $%d gekauft! Du musst sie nun ausliefern!",anzahl, anzahl*400);
    SendClientMessage(playerid, FARBE_Hellblau, tmpstr);
    return 1;
    } [ ... ]

  • Oh man ;) Kling logisch xD Danke ^^


    //Edit
    ocmd:materials(playerid, params[])
    {
    if(Eingeloggt[playerid] != 1) { return 1; }
    if(Spieler[playerid][Beruf] != JOB_Waffendealer) { return SendInfoMsg(playerid, "Du bist kein Waffendealer!"); }
    new auswahl[7], tmpstr[128], anzahl;
    if(sscanf(params,"si",anzahl)) {
    return SendNutzMsg(playerid, "/materials [get/deliver] [Anzahl]");
    }
    if(!strcmp(auswahl, "get", true)) {
    if(!IsPlayerInRangeOfPoint(playerid, 5.0, -90.8883,-1576.5775,2.6172)) return SendInfoMsg(playerid, "Du bist nicht am Materials Get Punkt! (/navi)");
    if(SpielerVariablen[playerid][PaketeDabei] >= 10) return SendInfoMsg(playerid, "Du kannst höchstens 10 Materials Pakete holen!");
    if(anzahl+SpielerVariablen[playerid][PaketeDabei] > 10) {
    format(tmpstr, sizeof tmpstr, "Soviele Pakete kannst du nicht tragen! (Maximal 10 Du hast: %d.)",SpielerVariablen[playerid][PaketeDabei]);
    SendInfoMsg(playerid, tmpstr);
    return 1;
    }
    if(anzahl*400 > Spieler[playerid][Geld]) {
    format(tmpstr, sizeof tmpstr, "Du hast nicht genug Geld. Du brauchst: $%d und hast $%d.",anzahl*400,Spieler[playerid][Geld]);
    SendInfoMsg(playerid, tmpstr);
    return 1;
    }
    SpielerVariablen[playerid][PaketeDabei] += anzahl;
    Spieler[playerid][Geld] -= anzahl*400;
    format(tmpstr, sizeof tmpstr, " Du hast dir %d Pakete für $%d gekauft! Du musst sie nun ausliefern!",anzahl, anzahl*400);
    SendClientMessage(playerid, FARBE_Hellblau, tmpstr);
    return 1;
    }


    wird nun immer der nutzungstext angegeben...

    Einmal editiert, zuletzt von Excursius ()