OCMD/SSCANF: "Dynamische" Parameter

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 bin etwas ratlos und google/SuFu spuckt auch nichts aus.


    Ich möchte, dass, wenn der 2. Parameter bspw. "Name" ist, dass er dann einen 3. Parameter annimmt - passiert aber nicht, bekomme eine SSCANF-Warnung in der Konsole "String buffer overflow."


    Command::editpickup(playerid, params[]) {
    new pickupID,
    enterExit[6],
    additionalInt,
    additionalText[50];
    if(User::Get(playerid, "Admin") < 3)
    return System::PermissionDenied(playerid);
    if(sscanf(params, "ds[6]", pickupID, enterExit))
    return System::IllegalParameters(playerid, "/editpickup [PickupID] [Enter/Exit/ToInt/ToBiz/ToVW/VW/Name]");
    if(pickupID > DynamicPickups) {
    SendFormatedMessage(playerid, COLOR_RED, "[ SYSTEM ] Falsche ID! Maximale ID: %d!", DynamicPickups);
    return 1;
    }
    printf("pickupID: %d | maxPickups: %d | max_pickups: %d", pickupID, DynamicPickups, MAX_PICKUPS);
    new Float:Pos[3];
    GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
    if(!strcmp(enterExit, "Enter", true)) {
    Pickup[pickupID][ppX] = Pos[0];
    Pickup[pickupID][ppY] = Pos[1];
    Pickup[pickupID][ppZ] = Pos[2];
    DestroyPickup(Pickup[pickupID][ppPickup]);
    Pickup[pickupID][ppPickup] = CreatePickup(1318, 23, Pickup[pickupID][ppX], Pickup[pickupID][ppY], Pickup[pickupID][ppZ], -1);
    SendFormatedMessage(playerid, COLOR_GREEN, "[ EDIT PICKUP ] Eintrittsposition von PickupID '%s' (%d) geändert!", Pickup[pickupID][ppName], pickupID);
    }
    else if(!strcmp(enterExit, "Exit", true)) {
    Pickup[pickupID][ppToX] = Pos[0];
    Pickup[pickupID][ppToY] = Pos[1];
    Pickup[pickupID][ppToZ] = Pos[2];
    SendFormatedMessage(playerid, COLOR_GREEN, "[ EDIT PICKUP ] Ausgangsposition von PickupID '%s' (%d) geändert!", Pickup[pickupID][ppName], pickupID);
    }
    else if(!strcmp(enterExit, "ToInt", true)) {
    if(sscanf(params, "ds[5]d", pickupID, enterExit, additionalInt))
    return System::IllegalParameters(playerid, "/editpickup [PickupID] [ToInt] [InteriorID]");
    Pickup[pickupID][ppToInt] = additionalInt;
    SendFormatedMessage(playerid, COLOR_GREEN, "[ EDIT PICKUP ] Innenraum von PickupID '%s' (%d) geändert!", Pickup[pickupID][ppName], pickupID);
    }
    else if(!strcmp(enterExit, "ToBiz", true)) {
    if(sscanf(params, "ds[5]d", pickupID, enterExit, additionalInt))
    return System::IllegalParameters(playerid, "/editpickup [PickupID] [ToBiz] [BizID]");
    Pickup[pickupID][ppToBizID] = additionalInt;
    SendFormatedMessage(playerid, COLOR_GREEN, "[ EDIT PICKUP ] Geschäftszuordnung von PickupID '%s' (%d) geändert!", Pickup[pickupID][ppName], pickupID);
    }
    else if(!strcmp(enterExit, "ToVW", true)) {
    if(sscanf(params, "ds[5]d", pickupID, enterExit, additionalInt))
    return System::IllegalParameters(playerid, "/editpickup [PickupID] [ToVW] [VirtualWorld]");
    Pickup[pickupID][ppToVW] = additionalInt;
    SendFormatedMessage(playerid, COLOR_GREEN, "[ EDIT PICKUP ] Virtuelle Welt (Innen) von PickupID '%s' (%d) geändert!", Pickup[pickupID][ppName], pickupID);
    }
    else if(!strcmp(enterExit, "VW", true)) {
    if(sscanf(params, "ds[5]d", pickupID, enterExit, additionalInt))
    return System::IllegalParameters(playerid, "/editpickup [PickupID] [VW] [VirtualWorld]");
    Pickup[pickupID][ppVW] = additionalInt;
    SendFormatedMessage(playerid, COLOR_GREEN, "[ EDIT PICKUP ] Virtuelle Welt von PickupID '%s' (%d) geändert!", Pickup[pickupID][ppName], pickupID);
    }
    else if(!strcmp(enterExit, "Name", true)) {
    if(sscanf(params, "ds[5]s[50]", pickupID, enterExit, additionalText))
    return System::IllegalParameters(playerid, "/editpickup [PickupID] [Name] [Neuer Name]");
    format(Pickup[pickupID][ppName], 50, "%s", additionalText);
    SendFormatedMessage(playerid, COLOR_GREEN, "[ EDIT PICKUP ] Name von PickupID '%s' (%d) geändert!", Pickup[pickupID][ppName], pickupID);
    }
    else {
    return System::IllegalParameters(playerid, "/editpickuppos [PickupID] [Enter/Exit]");
    }
    return 1;
    }

  • Danke für die Versuche, L0g4n hat mir letztendlich folgenden Tipp gegeben:
    "ds[5]D(0)"
    D (großgeschrieben) ist also ein optionaler Parameter (Integer) mit dem Standartwert "0". Klappt 1a!