DCMD Befehle mit Parameter gehen nicht

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
  • Und zwar hab ich folgendes Problem. DCMD Commands OHNE Parameter funzen, die mit nicht.


    Die CMDs wären:


    dcmd_skin(playerid, params[])
    {
    new s;
    if(sscanf(params, "d", s))
    {
    return SendClientMessage(playerid, rot, "Benutzung: /skin SkinID");
    }
    SetPlayerSkin(playerid, s);
    return 1;
    }


    dcmd_veh(playerid, params[])
    {
    new v, c1, c2;
    if(sscanf(params, "ddd", v, c1, c2))
    {
    return SendClientMessage(playerid, rot, "Benutzung: /veh FahrzeugID, Farbe, Farbe");
    }
    GetPlayerPos(playerid, x,y, z);
    GetPlayerFacingAngle(playerid, r);
    CreateVehicle(v, x, y, z, r, c1, c2, 1);
    PutPlayerInVehicle(playerid, v, 1);
    return 1;
    }


    Ein Kumpel hat den Error auch net gefunden.


  • dcmd_setskin(playerid,params[])
    {
    if(Player[playerid][admin] < 1){
    return SendClientMessage (playerid,WEIS,"SERVER: Unknown command.");
    }
    new pID,skinid;
    if(sscanf(params,"ud",pID,skinid)){
    return SendClientMessage(playerid,WEIS,"Usage: /setskin [playerid] [skinID 0-299!]");
    }
    if(!IsPlayerConnected(pID)){
    return SendClientMessage(playerid,WEIS,"Nobody is connected with this ID!");
    }
    if(skinid < 0){
    return SendClientMessage(playerid,WEIS,"INVALID ID!");
    }
    if(skinid > 299){
    return SendClientMessage(playerid,WEIS,"INVALID ID!");
    }
    new string[128],string2[128],aname[MAX_PLAYER_NAME],name[MAX_PLAYER_NAME];
    SetPlayerSkin(pID,skinid);
    GetPlayerName(playerid,aname,sizeof(aname));
    GetPlayerName(pID,name,sizeof(name));
    format(string,sizeof(string),"You have set the SkinID of %s to %d",name,skinid);
    format(string2,sizeof(string2),"Admin %s has set your SkinID to %d",aname,skinid);
    SendClientMessage(playerid,GRÜN,string);
    SendClientMessage(pID,GRÜN,string2);
    return 1;
    }
    Entweder so und so..

    dcmd_vehicle(playerid,params[])
    {
    if(Player[playerid][admin] < 1){
    return SendClientMessage (playerid,WEIS,"SERVER: Unknown command.");
    }
    new veh,color1,color2;
    if(sscanf(params,"ddd",veh,color1,color2)){
    return SendClientMessage(playerid,WEIS,"Usage: /vehicle [vehicleID] [color1] [color2]");
    }
    if(veh < 400){
    return SendClientMessage(playerid,WEIS,"INVALID vehID![400-611]");
    }
    if(veh > 611){
    return SendClientMessage(playerid,WEIS,"INVALID vehID![400-611]");
    }
    if(color1 < 0){
    return SendClientMessage(playerid,WEIS,"INVALID color1ID![0-126]");
    }
    if(color1 > 126){
    return SendClientMessage(playerid,WEIS,"INVALID color1ID![0-126]");
    }
    if(color2 < 0){
    return SendClientMessage(playerid,WEIS,"INVALID color2ID![0-126]");
    }
    if(color2 > 126){
    return SendClientMessage(playerid,WEIS,"INVALID color2ID![0-126]");
    }
    new Float:x , Float:y , Float: z, Car;
    GetPlayerPos(playerid,x,y,z);
    Car = CreateVehicle(veh, x, y, z, 0, color1, color2, 123456789);
    SetPlayerPos(playerid,x,y,z);
    SetVehiclePos(veh,x,y,z);
    PutPlayerInVehicle(playerid, Car, 0);
    return 1;
    }


    MFG.

  • dcmd_veh(playerid, params[])
    {
    new v, c1, c2;
    if(sscanf(params, "iii", v, c1, c2))return SendClientMessage(playerid, rot, "Benutzung: /veh FahrzeugID, Farbe, Farbe");
    else
    {
    GetPlayerPos(playerid, x,y, z);
    GetPlayerFacingAngle(playerid, r);
    CreateVehicle(v, x, y, z, r, c1, c2, 1);
    PutPlayerInVehicle(playerid, v, 1);
    }
    return 1;
    }
    Evtl so?:D


  • Schwachsinn die Abfragen sind nicht nötig. Wenns die nich gibt kann ers nich machen, wenns die gibt macht ers aber auch....normal xD


    @hp: halt ich für unwahrscheinlich da i wie d ein integer ist , aber ich versuchs.


    edit: wie ich sagte bringt nix.

  • dcmd_veh(playerid, params[])
    {
    new v, c1, c2;
    if(sscanf(params, "ddd", v, c1, c2))
    {
    return SendClientMessage(playerid, rot, "Benutzung: /veh FahrzeugID, Farbe, Farbe");
    }
    GetPlayerPos(playerid, x,y, z);
    GetPlayerFacingAngle(playerid, r);
    CreateVehicle(v, x, y, z, r, c1, c2, 1);
    PutPlayerInVehicle(playerid, v, 1);
    return 1;
    }
    Da ist ja auch der Fehler,dass du niemals in das richtige Fahrzeug gesetzt wirst. Denn du setzt den Spieler in das Fahrzeug mit der VehicleID "v",was bei dir aber vorher als Angabe für die ModelID diente.


    dcmd_veh(playerid, params[])
    {
    new
    vehicleid,
    v,
    c1,
    c2;
    if(sscanf(params, "ddd", v, c1, c2))
    {
    return SendClientMessage(playerid, rot, "Benutzung: /veh FahrzeugID, Farbe, Farbe");
    }
    if( ( v < 400 ) || ( v > 611) ) {
    return SendClientMessage(playerid, rot, "Ungültige ModelID");
    }
    GetPlayerPos(playerid, x,y, z);
    GetPlayerFacingAngle(playerid, r);
    vehicleid = CreateVehicle(v, x, y, z, r, c1, c2, 1);
    PutPlayerInVehicle(playerid, vehicleid, 1);
    printf("vehicleid = %d , modelid = %d",vehicleid,v);
    return 1;
    }


    //Edit:
    Wow,WLAN ist heute wieder super :/.Füg trotzdem mal Debug-Notes in die Befehl bei dir ein:
    dcmd_veh(playerid, params[])
    {
    printf("dcmd_veh(%d, %s)",playerid,params);
    new
    vehicleid,
    v,
    c1,
    c2;
    if(sscanf(params, "ddd", v, c1, c2))
    {
    return SendClientMessage(playerid, rot, "Benutzung: /veh FahrzeugID, Farbe, Farbe");
    }
    if( ( v < 400 ) || ( v > 611) ) {
    return SendClientMessage(playerid, rot, "Ungültige ModelID");
    }
    GetPlayerPos(playerid, x,y, z);
    GetPlayerFacingAngle(playerid, r);
    vehicleid = CreateVehicle(v, x, y, z, r, c1, c2, 1);
    PutPlayerInVehicle(playerid, vehicleid, 1);
    printf("vehicleid = %d , modelid = %d",vehicleid,v);
    return 1;
    }
    Denn wenn du sagst Ingame passiert nichts,würde die Funktion nicht aufgerufen werden :-O

    Einmal editiert, zuletzt von Goldkiller ()

  • Hör mal zu. ICH kann es normal. Und dein command kann im Prinzib auch nicht mehr als meiner, außer dass er die ID überprüft. Das printf hat mir eher geholfen also halt den Ball flach. Wenn du genau gelesen hättest, müsstest du es interpretieren können dass es am Printf liegt :/ Und die Abfragen SIND auch nicht nötig. Hatte es doch eig schon x mal ohne :/ nur aus irgentnem Grund gehn die neu geschriebenen nicht und die alten Scripts habi nimme.


    Also wie gesagt, laut Printf command setzt er zwischen Parameter und Command ne 0.

  • Bezweifle ich. Ich hab auch nicht vor mein ganzes Script zu posten.


    #include <a_samp>


    //#include <sscanf2>
    #define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
    new pName[MAX_PLAYER_NAME], string[56] ;
    #pragma unused pName



    #define rot 0xFF0000FF
    #define gelb 0xFFFF00FF


    new tot;
    new Float:x, Float:y, Float:z,Float:r;
    Da sitzen die ganzen Definitionen. sscanf ist ausgeklammert ich weiß. Hat schon seine Richtigkeit ;)


    Denn unten im Script hab ich:



    // SSCANF


    stock sscanf(format[], {Float,_}:...)
    {
    #if defined isnull
    if (isnull(string))
    #else
    if (string[0] == 0 || (string[0] == 1 && string[1] == 0))
    #endif
    {
    return format[0];
    }
    #pragma tabsize 4
    new
    formatPos = 0,
    stringPos = 0,
    paramPos = 2,
    paramCount = numargs(),
    delim = ' ';
    while (string[stringPos] && string[stringPos] <= ' ')
    {
    stringPos++;
    }
    while (paramPos < paramCount && string[stringPos])
    {
    switch (format[formatPos++])
    {
    case '\0':
    {
    return 0;
    }
    case 'i', 'd':
    {
    new
    neg = 1,
    num = 0,
    ch = string[stringPos];
    if (ch == '-')
    {
    neg = -1;
    ch = string[++stringPos];
    }
    do
    {
    stringPos++;
    if ('0' <= ch <= '9')
    {
    num = (num * 10) + (ch - '0');
    }
    else
    {
    return -1;
    }
    }
    while ((ch = string[stringPos]) > ' ' && ch != delim);
    setarg(paramPos, 0, num * neg);
    }
    case 'h', 'x':
    {
    new
    num = 0,
    ch = string[stringPos];
    do
    {
    stringPos++;
    switch (ch)
    {
    case 'x', 'X':
    {
    num = 0;
    continue;
    }
    case '0' .. '9':
    {
    num = (num << 4) | (ch - '0');
    }
    case 'a' .. 'f':
    {
    num = (num << 4) | (ch - ('a' - 10));
    }
    case 'A' .. 'F':
    {
    num = (num << 4) | (ch - ('A' - 10));
    }
    default:
    {
    return -1;
    }
    }
    }
    while ((ch = string[stringPos]) > ' ' && ch != delim);
    setarg(paramPos, 0, num);
    }
    case 'c':
    {
    setarg(paramPos, 0, string[stringPos++]);
    }
    case 'f':
    {
    setarg(paramPos, 0, _:floatstr(string[stringPos]));
    }
    case 'p':
    {
    delim = format[formatPos++];
    continue;
    }
    case '\'':
    {
    new
    end = formatPos - 1,
    ch;
    while ((ch = format[++end]) && ch != '\'') {}
    if (!ch)
    {
    return -1;
    }
    format[end] = '\0';
    if ((ch = strfind(string, format[formatPos], false, stringPos)) == -1)
    {
    if (format[end + 1])
    {
    return -1;
    }
    return 0;
    }
    format[end] = '\'';
    stringPos = ch + (end - formatPos);
    formatPos = end + 1;
    }
    case 'u':
    {
    new
    end = stringPos - 1,
    id = 0,
    bool:num = true,
    ch;
    while ((ch = string[++end]) && ch != delim)
    {
    if (num)
    {
    if ('0' <= ch <= '9')
    {
    id = (id * 10) + (ch - '0');
    }
    else
    {
    num = false;
    }
    }
    }
    if (num && IsPlayerConnected(id))
    {
    setarg(paramPos, 0, id);
    }
    else
    {
    #if !defined foreach
    #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
    #define __SSCANF_FOREACH__
    #endif
    string[end] = '\0';
    num = false;
    new
    name[MAX_PLAYER_NAME];
    id = end - stringPos;
    foreach (Player, playerid)
    {
    GetPlayerName(playerid, name, sizeof (name));
    if (!strcmp(name, string[stringPos], true, id))
    {
    setarg(paramPos, 0, playerid);
    num = true;
    break;
    }
    }
    if (!num)
    {
    setarg(paramPos, 0, INVALID_PLAYER_ID);
    }
    string[end] = ch;
    #if defined __SSCANF_FOREACH__
    #undef foreach
    #undef __SSCANF_FOREACH__
    #endif
    }
    stringPos = end;
    }
    case 's', 'z':
    {
    new
    i = 0,
    ch;
    if (format[formatPos])
    {
    while ((ch = string[stringPos++]) && ch != delim)
    {
    setarg(paramPos, i++, ch);
    }
    if (!i)
    {
    return -1;
    }
    }
    else
    {
    while ((ch = string[stringPos++]))
    {
    setarg(paramPos, i++, ch);
    }
    }
    stringPos--;
    setarg(paramPos, i, '\0');
    }
    default:
    {
    continue;
    }
    }
    while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ')
    {
    stringPos++;
    }
    while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' '))
    {
    stringPos++;
    }
    paramPos++;
    }
    do
    {
    if ((delim = format[formatPos++]) > ' ')
    {
    if (delim == '\'')
    {
    while ((delim = format[formatPos++]) && delim != '\'') {}
    }
    else if (delim != 'z')
    {
    return delim;
    }
    }
    }
    while (delim > ' ');
    return 0;
    }


    // Ende SSCANF


    Hab die Zeilen iwo raus kopiert (wo es aber auch ging :/) und ich schätze es hängt vllt da drinnen?

  • Stimmt doch.
    Spawnt das Auto oder nicht?


    dcmd_veh(playerid, params[])
    {
    printf("dcmd_veh(%d, %s)",playerid,params);
    new
    vehicleid,
    v,
    c1,
    c2
    Float:x,Float:y,Float:z,Float:r;
    if(sscanf(params, "ddd", v, c1, c2))
    {
    return SendClientMessage(playerid, rot, "Benutzung: /veh FahrzeugID, Farbe, Farbe");
    }
    if( ( v < 400 ) || ( v > 611) ) {
    return SendClientMessage(playerid, rot, "Ungültige ModelID");
    }
    GetPlayerPos(playerid, x,y, z);
    GetPlayerFacingAngle(playerid, r);
    vehicleid = CreateVehicle(v, x, y, z+5, r, c1, c2, 1);
    PutPlayerInVehicle(playerid, vehicleid, 1);
    printf("vehicleid = %d , modelid = %d",vehicleid,v);
    return 1;
    }


    Probiers mal so