sscanf optional field [+rep]
#1

Ok, i'm trying to make a giveweapon command, It works like this:

the weapon can be written as an id or a weapon name, but i want to make like this: if you don't specify the ammo field, it will be 400 by default.

the weapon name works, but weapon id's dont work, it just says invalid weapon id.. i need to know why. rep will be given =]

pawn Код:
CMD:giveweapon(playerid, params[])
{
    if(PlayerInfo[playerid][Level]>0)
    {
        new id,wepname[24],wepid,ammo;
        if(!sscanf(params,"us[24]D(400)",id,wepname,ammo))
        {
            if(IsPlayerConnected(id)&&id!=INVALID_PLAYER_ID)
            {
                wepid = GetWeaponIDFromName(wepname);
                if(IsValidWeapon(wepid))
                {
                    CMDMessageToAdmins(playerid,"GIVEWEAPON");
                    new str[128];
                    format(str,sizeof(str),"You have given %s (%d) a weapon %s with %d ammo.",PlayerName(id),id,wepname,ammo);
                    SendClientMessage(playerid, LIGHTBLUE, str);
                    format(str,sizeof(str),"Administrator %s has gave you a gun %s with %d ammo.",PlayerName(playerid),wepname,ammo);
                    SendClientMessage(id, LIGHTBLUE, str);
                    GivePlayerWeapon(id, wepid, ammo);PlayerPlaySound(id,1057,0.0,0.0,0.0);PlayerPlaySound(playerid,1057,0.0,0.0,0.0);
                }
                else return SendClientMessage(playerid, RED, "Invalid Weapon ID.");
            }
            else return SendClientMessage(playerid, RED, "Invalid Player ID.");
        }
        else if(!sscanf(params,"udD(400)",id,wepid,ammo))
        {
            if(IsValidWeapon(wepid))
            {
                CMDMessageToAdmins(playerid,"GIVEWEAPON");
                new str[128];
                GetWeaponName(wepid,wepname,sizeof(wepname));
                format(str,sizeof(str),"You have given %s (%d) a weapon %s with %d ammo.",PlayerName(id),id,wepname,ammo);
                SendClientMessage(playerid, LIGHTBLUE, str);
                format(str,sizeof(str),"Administrator %s has gave you a gun %s with %d ammo.",PlayerName(playerid),wepname,ammo);
                SendClientMessage(id, LIGHTBLUE, str);
                GivePlayerWeapon(id, wepid, ammo);PlayerPlaySound(id,1057,0.0,0.0,0.0);PlayerPlaySound(playerid,1057,0.0,0.0,0.0);
            }
            else return SendClientMessage(playerid, RED, "Invalid Weapon ID.");
        }
        else return SendClientMessage(playerid, RED, "Usage: /giveweapon [id] [wepid] [ammo]");
    }
    else return SendClientMessage(playerid, RED, "Invalid Command -  Type /cmds for commands list.");
    return 1;
}
Reply
#2

Have you tried turning it other way around like this:

pawn Код:
CMD:giveweapon(playerid, params[])
{
    if(PlayerInfo[playerid][Level]>0)
    {
        new id,wepname[24],wepid,ammo;
        if(!sscanf(params,"udD(400)",id,wepid,ammo))
        {
            if(IsValidWeapon(wepid))
            {
                CMDMessageToAdmins(playerid,"GIVEWEAPON");
                new str[128];
                GetWeaponName(wepid,wepname,sizeof(wepname));
                format(str,sizeof(str),"You have given %s (%d) a weapon %s with %d ammo.",PlayerName(id),id,wepname,ammo);
                SendClientMessage(playerid, LIGHTBLUE, str);
                format(str,sizeof(str),"Administrator %s has gave you a gun %s with %d ammo.",PlayerName(playerid),wepname,ammo);
                SendClientMessage(id, LIGHTBLUE, str);
                GivePlayerWeapon(id, wepid, ammo);PlayerPlaySound(id,1057,0.0,0.0,0.0);PlayerPlaySound(playerid,1057,0.0,0.0,0.0);
            }
            else return SendClientMessage(playerid, RED, "Invalid Weapon ID.");
        }
        else if(!sscanf(params,"us[24]D(400)",id,wepname,ammo))
        {
            if(IsPlayerConnected(id)&&id!=INVALID_PLAYER_ID)
            {
                wepid = GetWeaponIDFromName(wepname);
                if(IsValidWeapon(wepid))
                {
                    CMDMessageToAdmins(playerid,"GIVEWEAPON");
                    new str[128];
                    format(str,sizeof(str),"You have given %s (%d) a weapon %s with %d ammo.",PlayerName(id),id,wepname,ammo);
                    SendClientMessage(playerid, LIGHTBLUE, str);
                    format(str,sizeof(str),"Administrator %s has gave you a gun %s with %d ammo.",PlayerName(playerid),wepname,ammo);
                    SendClientMessage(id, LIGHTBLUE, str);
                    GivePlayerWeapon(id, wepid, ammo);PlayerPlaySound(id,1057,0.0,0.0,0.0);PlayerPlaySound(playerid,1057,0.0,0.0,0.0);
                }
                else return SendClientMessage(playerid, RED, "Invalid Weapon ID.");
            }
            else return SendClientMessage(playerid, RED, "Invalid Player ID.");
        }
        else return SendClientMessage(playerid, RED, "Usage: /giveweapon [id] [wepid] [ammo]");
    }
    else return SendClientMessage(playerid, RED, "Invalid Command -  Type /cmds for commands list.");
    return 1;
}
Reply
#3

wow i didnt think it would actually work, ur a genius lol
Reply
#4

Simply
pawn Код:
CMD:giveweapon(playerid, params[])
{
    if(PlayerInfo[playerid][Level]>0)
    {
        new id,wepname[24],wepid,ammo;
        if(!sscanf(params,"us[24]D(400)",id,wepname,ammo))
        {
            if(IsPlayerConnected(id) && id!=INVALID_PLAYER_ID)
            {
                if(!('1' <= wepname[0] <= '9')) wepid = GetWeaponIDFromName(wepname);
                else wepid = strval(wepname);
                if(IsValidWeapon(wepid))
                {
                    CMDMessageToAdmins(playerid,"GIVEWEAPON");
                    new str[128];
                    GetWeaponName(wepid,wepname,sizeof(wepname));
                    format(str,sizeof(str),"You have given %s (%d) a weapon %s with %d ammo.",PlayerName(id),id,wepname,ammo);
                    SendClientMessage(playerid, LIGHTBLUE, str);
                    format(str,sizeof(str),"Administrator %s has gave you a gun %s with %d ammo.",PlayerName(playerid),wepname,ammo);
                    SendClientMessage(id, LIGHTBLUE, str);
                    GivePlayerWeapon(id, wepid, ammo);PlayerPlaySound(id,1057,0.0,0.0,0.0);PlayerPlaySound(playerid,1057,0.0,0.0,0.0);
                }
                else return SendClientMessage(playerid, RED, "Invalid Weapon ID.");
            }
            else return SendClientMessage(playerid, RED, "Invalid Player ID.");
        }
        else return SendClientMessage(playerid, RED, "Usage: /giveweapon [id] [wepid / wepname] [ammo]");
    }
    else return SendClientMessage(playerid, RED, "Invalid Command -  Type /cmds for commands list.");
    return 1;
}
Reply
#5

nice, this way works too.. perfect
Reply
#6

Or you could use the new sscanf specifier "k"
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)