Problem bei meinem dcmd für Adminbefehl /givegun

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 liebe Community,


    ich arbeite zur Zeit aus Lust und laune an einem Reallife Gamemode und bin noch nicht gerade das, was man
    Scripter nennt. Ich kenne einige Sachen noch nicht so gut und weiß nicht wie ich sie umsetze.


    Ich habe bei OnPlayerCommand den Wegweister auf den dcmd gemacht:
    dcmd(givegun,9,cmdtext);


    Anschließend gaaanz unten den Befehl:
    /**/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /**/// GIVEGUN DCMD ////////////////////////////////////////////////////////////////////////////////////////////////////
    /**/dcmd_givegun(playerid, params[]){
    /**/
    /**/if(isPlayerAnAdmin(playerid,2)) //Das AnAdmin stimmt so. ( Eigenes kleines ASystem )
    /**/{
    /**/new user;
    /**/new waffe;
    /**/new muni;
    /**/if(sscanf(params,"udd",user,waffe,muni))
    /**/{
    /**/SendClientMessage(playerid,ROT,"Givegun-Fehler: Benutze /givegun [ID] [WAFFENID] [MUNITION]");
    /**/return 1;
    /**/}
    /**/if(waffe <= 0 && waffe >= 47)
    /**/{
    /**/SendClientMessage(playerid,ROT,"Givegun-Fehler: Falsche WaffenID ( Siehe /weaponids )");
    /**/return 1;
    /**/}
    /**/GivePlayerWeapon(user,waffe,muni);
    /**/return 1;
    /**/}
    /**/
    /**/SendClientMessage(playerid,ROT,"Du bist nicht berechtigt für diesen Befehl");
    /**/return 1;
    /**/
    /**/}
    /**/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /**/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


    Ingame funktioniert der Command nicht.
    Weiß jemand wieso?
    Meine anderen dcmd (waren nur mit einem Wert, also z.B. /givemeweapon ID) funktionieren
    alle einwandfrei. Bei mehreren Werten wie z.B. /givemoney ID MENGE habe ich noch extreme
    Probleme.


    ich hoffe ihr könnt mir helfen!


    Mit freundlichen Grüßen,
    Marc1706




    PS: SSCANF habe ich am Ende des Scripts definiert...
    /**////////////////////////////////////////////////////////////////////////////
    /**//////////////////////// SSCANF DEFINE /////////////////////////////////////
    /**////////////////////////////////////////////////////////////////////////////
    /**/stock sscanf(string[], 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':
    /**/ {
    /**/
    /**/ new changestr[16], changepos = 0, strpos = stringPos;
    /**/ while(changepos < 16 && string[strpos] && string[strpos] != delim)
    /**/ {
    /**/ changestr[changepos++] = string[strpos++];
    /**/ }
    /**/ changestr[changepos] = '\0';
    /**/ setarg(paramPos,0,_:floatstr(changestr));
    /**/ }
    /**/ 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;
    /**/}
    /**/////////////////////////////////////////////////////////////////////////////
    /**/////////////////////////////////////////////////////////////////////////////

  • hier mein giveweapon befehl:
    dcmd_giveweapon(playerid,params[])
    {
    if(Spieler[playerid][Adminlevel] > 3)
    {
    new zielid1, zielwaffe, Munition;
    if(sscanf(params,"udd",zielid1,zielwaffe,Munition))return SendClientMessage(playerid,ROT,"Verwendung:/giveweapon [Ziel-ID][Waffe][Munition]");
    if(!IsPlayerConnected(zielid1))
    {
    return SendClientMessage(playerid,ROT,"INFO:Es ist kein Spieler mit dieser ID Online!!");
    }
    new adminname[MAX_PLAYER_NAME], string1[128], string2[128], zielname[MAX_PLAYER_NAME];
    GivePlayerWeapon(zielid1,zielwaffe,Munition);
    GetPlayerName(playerid,adminname,sizeof(adminname));
    GetPlayerName(zielid1,zielname,sizeof(zielname));
    format(string1,sizeof(string1),"Du hast %s die waffe %d mit %d Munition gegeben",zielname,zielwaffe,Munition);
    SendClientMessage(playerid,GREEN,string1);
    format(string2,sizeof(string2),"Du hast von Admin %s die Waffe %d mit %d Munition bekommen!!",adminname,zielwaffe,Munition);
    SendClientMessage(zielid1,GREEN,string2);
    }
    else
    {
    SendClientMessage(playerid,ROT,"Du darfst diesen Befehl nicht benutzen da du kein Admin bist");
    SendClientMessage(playerid,ROT,"oder dein Adminlevel zu niedrig ist!!");
    }
    return 1;
    }
    Vielleicht hilft es dir ;)