Commands mit dcmd 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
  • Hi,
    ich habe heute mit dem Scripten lernen angefangen, klappt soweit auch relativ gut. Ich weis jetzt wie ich Pickups spawne etc. Jetzt wollte ich mit an die Kommands machen und hab mir dazu dieses/en gute Tutorial/Sticky durchgelesen: Klick Mich. Nach diesem Prinzip habe ich dann folgendes gebastelt:



    public OnPlayerCommandText(playerid, cmdtext[])
    {
    dcmd(verkaufen,9,cmdtext);
    return 0;
    }


    dcmd_verkaufen(playerid,params[]) {
    new
    pid,
    wtype;
    if(sscanf(params,"dd",pid,wtype)){
    return SendClientMessage(playerid, COLOR_RED, "[Fehler:] /verkaufen id waffentype");
    }
    else if(!IsPlayerConnected(pid)) {
    return SendClientMessage(playerid, COLOR_RED, "[Fehler:] Spieler nicht online!");
    }
    else {
    GivePlayerWeapon(pid,wtype,150);
    SendClientMessage(playerid, COLOR_GREEN, "[Erledigt:] Waffe erfolgreich Verkauft!");
    }
    }


    Mit diesem kleinen Code schnipsel kann ich Waffen vergeben. Funktioniert auch soweit ganz gut, aber 2 Sachen gefallen mir nicht, sind zwar eigentlich nur Schönheitsfehler aber trotzdem:


    Einmal bekomme ich beim Compilieren immer ein warning und ich weis nicht wie ich das wegbekommen kann:


    C:\Dokumente und Einstellungen\Dono\Desktop\samp\gamemodes\meins.pwn(389) : warning 209: function "dcmd_verkaufen" should return a value
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Warning.


    und 2. bekomme ich immer wenn ich den befehl Korekt ausführe die Meldung:


    [Erledigt:] Waffe erfolgreich Verkauft!


    und die Meldung (sinngemäß):


    SERVER: Unknown Command


    letztere Meldung stört mich und hat da eigentlich nichts zu suchen. Meine Vermutungen sind, das die Meldung immer kommt, weil ich die Waffe immer an mich selber verkaufe oder 2. vermutung, weil ihm die ID 0 einfach nicht passt?!


    Würde mich über hilfe freuen!


    LG Dono

  • dcmd_verkaufen(playerid,params[]) {
    new
    pid,
    wtype;
    if(sscanf(params,"ui",pid,wtype)) SendClientMessage(playerid, COLOR_RED, "[Fehler:] /verkaufen id waffentype");
    else if(!IsPlayerConnected(pid)) SendClientMessage(playerid, COLOR_RED, "[Fehler:] Spieler nicht online!");
    else if(pid == INVALID_PLAYER_ID || pid == playerid || IsPlayerNPC(pid)) SendClientMessage(playerid, COLOR_RED, "[Fehler:] Üngültiger Spieler");
    else {
    GivePlayerWeapon(pid,wtype,150);
    SendClientMessage(playerid, COLOR_GREEN, "[Erledigt:] Waffe erfolgreich Verkauft!");
    }
    return 1;
    }

  • Danke, an euch beide!


    Aber ich hab schon die nächste frage, wie bekomme ich es hin, das ich nicht immer die waffen id eingeben muss, sondern das der Waffen name reicht?
    Meine idee war eine variable zu erstellen die z.B. mp5 heist und den wert mp5 hat und dann else if wtype == mp5
    giveplayer (pid, waffen id, muni)
    hat aber irgendwie nicht funktioniert.
    Hat einer von euch ne bessere idee dazu?

  • Hi,
    ich hab schon wieder ein problem, denke aber das es sich nicht lohnt deswegen wieder einen neuen Therad zu eröffnen:



    dcmd_auto(playerid,params[]) {
    new
    color1[128],
    color2[128],
    carid;
    if(sscanf(params,"dzz",carid,color1,color2)) {
    SendClientMessage(playerid, COLOR_RED, "[Fehler:] /auto carid");
    }
    new
    Float:px,
    Float:py,
    Float:pz;
    GetPlayerPos(playerid, px, py, pz);
    AddStaticVehicle(carid, px, py, pz, 0, color1[0] ? color1 : 123, color2[0] ? color2 : 1); // Zeile 447
    return 1;
    }


    Soll mir Autos spawnen, funtzt soweit auch einwandfrei, aber wenn ich ihm sag welche farbe das auto habe soll, dann macht er was er will.
    Beim compilieren sagt er auch:


    Code
    C:\Dokumente und Einstellungen\Dono\Desktop\samp\gamemodes\meins.pwn(447) : error 033: array must be indexed (variable "color1")
    Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase
    
    
    
    
    1 Error.


    Währe cool, wenn jemand dazu eine Lösung hätte.

  • Der Parameter "z" gilt für Strings! Nicht für Integer!


    Um eine optionale Farbeinstellung einzubauen, könntest du "dz" benutzen, aber überprüfen ob der String der den Typ "z" hat leer oder nicht ist.
    Wenn er nicht leer ist teilst du ihn bspw. per split auf und gibst dann die Farben per strval an.


    Kleines Beispiel:
    dcmd_veh(playerid, params[])
    {
    new gModel,
    gColStr[16];


    if(sscanf(params,"dz",gModel,gColStr)) return SendClientMessage(playerid, COLOR_RED, "Fehler: /veh Model_ID Color_ID_1 Color_ID_2 (Farben optional)!");
    // blabla, restlicher Code, jetzt aufpassen:
    if(!gColStr[0]) {
    print("no colors");
    AddStaticVehicle(...);
    return 1;
    }
    new gArray[2][8]; // Array in dem die Farben gespeichert werden
    split(gColStr, gArray,' '); // Wir teilen "gColStr" auf, und speichern es im Array "gArray" ab!
    // Jetzt holen wir uns per strval die Zahlen aus den Arrays!
    AddStaticVehicle(..., strval(gArray[0]), strval(gArray[1]));
    return 1;
    }



    Wenns schlecht erklärt ist tuts mir Leid, weiß gerade selbst nicht wie ichs besser formulieren könnte. :/