I've scripted a simple inventory system for guns but when I try to put a gun in my inventory it says:
pawn Код:
CMD:takegun(playerid, params[])
{
if(IsPlayerConnected(playerid))
{
if(gPlayerLogged[playerid] == 0) return SendClientMessage(playerid, COLOR_GREY, "[LOGIN] Your athentication is required! Log in before using this command!");
if(isnull(params)) return SendClientMessage(playerid, COLOR_GREY, "USAGE: /takegun [SLOT 1-6]");
new slot;
new string[256];
new gunname[100];
if(slot < 1||slot > 12) { SendClientMessage(playerid, COLOR_GREY, "[Note] You can't go below slot 1 and you can't exceed slot 12!"); return 1; }
if(slot == 1)
{
if(PlayerInfo[playerid][pInvWeapon] == 0 && PlayerInfo[playerid][pInvAmmo] == 0)
{
SendClientMessage(playerid, COLOR_GREY, "[ERROR] You haven't placed any gun at your Slot 1!");
return 1;
}
GetWeaponName(PlayerInfo[playerid][pInvWeapon], gunname, sizeof(gunname));
SafeGivePlayerWeapon(playerid, PlayerInfo[playerid][pInvWeapon], PlayerInfo[playerid][pInvAmmo]);
format(string, sizeof(string), "[Inventory] You took %s from your inventory.", gunname);
SendClientMessage(playerid, COLOR_GREY, string);
PlayerInfo[playerid][pInvWeapon] = 0;
PlayerInfo[playerid][pInvAmmo] = 0;
}
if(slot == 2)
{
if(PlayerInfo[playerid][pInvWeapon2] == 0 && PlayerInfo[playerid][pInvAmmo2] == 0)
{
SendClientMessage(playerid, COLOR_GREY, "[ERROR] You haven't placed any gun at your Slot 2!");
return 1;
}
GetWeaponName(PlayerInfo[playerid][pInvWeapon2], gunname, sizeof(gunname));
SafeGivePlayerWeapon(playerid, PlayerInfo[playerid][pInvWeapon2], PlayerInfo[playerid][pInvAmmo2]);
format(string, sizeof(string), "[Inventory] You took %s from your Slot 2.", gunname);
SendClientMessage(playerid, COLOR_GREY, string);
PlayerInfo[playerid][pInvWeapon2] = 0;
PlayerInfo[playerid][pInvAmmo2] = 0;
}
if(slot == 3)
{
if(PlayerInfo[playerid][pInvWeapon3] == 0 && PlayerInfo[playerid][pInvAmmo3] == 0)
{
SendClientMessage(playerid, COLOR_GREY, "[ERROR] You haven't placed any gun at your Slot 3!");
return 1;
}
GetWeaponName(PlayerInfo[playerid][pInvWeapon3], gunname, sizeof(gunname));
SafeGivePlayerWeapon(playerid, PlayerInfo[playerid][pInvWeapon3], PlayerInfo[playerid][pInvAmmo3]);
format(string, sizeof(string), "[Inventory] You took %s from your Slot 3.", gunname);
SendClientMessage(playerid, COLOR_GREY, string);
PlayerInfo[playerid][pInvWeapon3] = 0;
PlayerInfo[playerid][pInvAmmo3] = 0;
}
if(slot == 4)
{
if(PlayerInfo[playerid][pInvWeapon4] == 0 && PlayerInfo[playerid][pInvAmmo4] == 0)
{
SendClientMessage(playerid, COLOR_GREY, "[ERROR] You haven't placed any gun at your Slot 4!");
return 1;
}
GetWeaponName(PlayerInfo[playerid][pInvWeapon4], gunname, sizeof(gunname));
SafeGivePlayerWeapon(playerid, PlayerInfo[playerid][pInvWeapon4], PlayerInfo[playerid][pInvAmmo4]);
format(string, sizeof(string), "[Inventory] You took %s from your Slot 4.", gunname);
SendClientMessage(playerid, COLOR_GREY, string);
PlayerInfo[playerid][pInvWeapon4] = 0;
PlayerInfo[playerid][pInvAmmo4] = 0;
}
if(slot == 5)
{
if(PlayerInfo[playerid][pInvWeapon5] == 0 && PlayerInfo[playerid][pInvAmmo5] == 0)
{
SendClientMessage(playerid, COLOR_GREY, "[ERROR] You haven't placed any gun at your Slot 5!");
return 1;
}
GetWeaponName(PlayerInfo[playerid][pInvWeapon5], gunname, sizeof(gunname));
SafeGivePlayerWeapon(playerid, PlayerInfo[playerid][pInvWeapon5], PlayerInfo[playerid][pInvAmmo5]);
format(string, sizeof(string), "[Inventory] You took %s from your Slot 5.", gunname);
SendClientMessage(playerid, COLOR_GREY, string);
PlayerInfo[playerid][pInvWeapon5] = 0;
PlayerInfo[playerid][pInvAmmo5] = 0;
}
if(slot == 6)
{
if(PlayerInfo[playerid][pInvWeapon6] == 0 && PlayerInfo[playerid][pInvAmmo6] == 0)
{
SendClientMessage(playerid, COLOR_GREY, "[ERROR] You haven't placed any gun at your Slot 6!");
return 1;
}
GetWeaponName(PlayerInfo[playerid][pInvWeapon6], gunname, sizeof(gunname));
SafeGivePlayerWeapon(playerid, PlayerInfo[playerid][pInvWeapon6], PlayerInfo[playerid][pInvAmmo6]);
format(string, sizeof(string), "[Inventory] You took %s from your Slot 6.", gunname);
SendClientMessage(playerid, COLOR_GREY, string);
PlayerInfo[playerid][pInvWeapon6] = 0;
PlayerInfo[playerid][pInvAmmo6] = 0;
}
new sendername[MAX_PLAYER_NAME];
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), "* %s opens %s backpack grabbing a %s, closing %s backpack afterwards.", sendername, PlayerInfo[playerid][pGender], gunname, PlayerInfo[playerid][pGender]);
ProxDetector(30.0, playerid, string, COLOR_CHAT1,COLOR_CHAT2,COLOR_CHAT3,COLOR_CHAT4,COLOR_CHAT5);
new y, m, d;
new h,mi,s;
getdate(y,m,d);
gettime(h,mi,s);
format(string,sizeof(string), "(%d/%d/%d)[%d:%d:%d] %s [CMD] -> /takegun %d (%s)",d,m,y,h,mi,s,sendername, slot, gunname);
CommandLog(string);
}
return 1;
}
CMD:putgun(playerid, params[])
{
if(IsPlayerConnected(playerid))
{
if(gPlayerLogged[playerid] == 0) return SendClientMessage(playerid, COLOR_GREY, "[LOGIN] Your athentication is required! Log in before using this command!");
if(isnull(params)) return SendClientMessage(playerid,-1,"USAGE: /putgun [slot 1-6]");
new slot;
new string[256];
new gunname[100];
new gunID = GetPlayerWeapon(playerid);
new gunAmmo = GetPlayerAmmo(playerid);
new Float:Health;
GetPlayerHealth(playerid, Health);
if(Health <= 15) return SendClientMessage(playerid, COLOR_GREY,"[ERROR] You can't perform that action with low health!");
if(gunID != 0 && gunAmmo != 0)
{
if(slot < 1||slot > 12)
{
SendClientMessage(playerid, COLOR_GREY, "[Note] You can't go below slot 1 and you can't exceed slot 12");
return 1;
}
if(slot == 1)
{
if(PlayerInfo[playerid][pInvWeapon] != 0 || PlayerInfo[playerid][pInvAmmo] != 0)
{
SendClientMessage(playerid, COLOR_GREY, "[ERROR] You have already placed something in Slot 1!");
return 1;
}
PlayerInfo[playerid][pInvWeapon] = gunID;
PlayerInfo[playerid][pInvAmmo] = gunAmmo;
RemovePlayerWeapon(playerid, gunID);
GetWeaponName(gunID, gunname, sizeof(gunname));
format(string, sizeof(string), "[Inventory] You've put %s in slot 1.", gunname);
SendClientMessage(playerid, COLOR_GREY, string);
}
if(slot == 2)
{
if(PlayerInfo[playerid][pInvWeapon2] != 0 || PlayerInfo[playerid][pInvAmmo2] != 0)
{
SendClientMessage(playerid, COLOR_GREY, "[ERROR] You have already placed something in Slot 2!");
return 1;
}
PlayerInfo[playerid][pInvWeapon2] = gunID;
PlayerInfo[playerid][pInvAmmo2] = gunAmmo;
RemovePlayerWeapon(playerid, gunID);
GetWeaponName(gunID, gunname, sizeof(gunname));
format(string, sizeof(string), "[Inventory] You've put %s in Slot 2.", gunname);
SendClientMessage(playerid, COLOR_GREY, string);
}
if(slot == 3)
{
if(PlayerInfo[playerid][pInvWeapon3] != 0 || PlayerInfo[playerid][pInvAmmo3] != 0)
{
SendClientMessage(playerid, COLOR_GREY, "[ERROR] You have already placed something in Slot 3!");
return 1;
}
PlayerInfo[playerid][pInvWeapon3] = gunID;
PlayerInfo[playerid][pInvAmmo3] = gunAmmo;
RemovePlayerWeapon(playerid, gunID);
GetWeaponName(gunID, gunname, sizeof(gunname));
format(string, sizeof(string), "[Inventory] You've put %s in Slot 3.", gunname);
SendClientMessage(playerid, COLOR_GREY, string);
}
if(slot == 4)
{
if(PlayerInfo[playerid][pInvWeapon4] != 0 || PlayerInfo[playerid][pInvAmmo4] != 0)
{
SendClientMessage(playerid, COLOR_GREY, "[ERROR] You have already placed something in Slot 4!");
return 1;
}
PlayerInfo[playerid][pInvWeapon4] = gunID;
PlayerInfo[playerid][pInvAmmo4] = gunAmmo;
RemovePlayerWeapon(playerid, gunID);
GetWeaponName(gunID, gunname, sizeof(gunname));
format(string, sizeof(string), "[Inventory] You've put %s in Slot 4.", gunname);
SendClientMessage(playerid, COLOR_GREY, string);
}
if(slot == 5)
{
if(PlayerInfo[playerid][pInvWeapon5] != 0 || PlayerInfo[playerid][pInvAmmo5] != 0)
{
SendClientMessage(playerid, COLOR_GREY, "[ERROR] You have already placed something in Slot 5!");
return 1;
}
PlayerInfo[playerid][pInvWeapon5] = gunID;
PlayerInfo[playerid][pInvAmmo5] = gunAmmo;
RemovePlayerWeapon(playerid, gunID);
GetWeaponName(gunID, gunname, sizeof(gunname));
format(string, sizeof(string), "[Inventory] You've put %s in your Slot 5.", gunname);
SendClientMessage(playerid, COLOR_GREY, string);
}
if(slot == 6)
{
if(PlayerInfo[playerid][pInvWeapon6] != 0 || PlayerInfo[playerid][pInvAmmo6] != 0)
{
SendClientMessage(playerid, COLOR_GREY, "[ERROR] You have already placed something in Slot 6!");
return 1;
}
PlayerInfo[playerid][pInvWeapon6] = gunID;
PlayerInfo[playerid][pInvAmmo6] = gunAmmo;
RemovePlayerWeapon(playerid, gunID);
GetWeaponName(gunID, gunname, sizeof(gunname));
format(string, sizeof(string), "[Inventory] You've put %s in your slot 6.", gunname);
SendClientMessage(playerid, COLOR_GREY, string);
}
new sendername[MAX_PLAYER_NAME];
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), "* %s puts %s %s in %s Bag.", sendername, PlayerInfo[playerid][pGender], gunname, PlayerInfo[playerid][pGender]);
ProxDetector(30.0, playerid, string, COLOR_CHAT1,COLOR_CHAT2,COLOR_CHAT3,COLOR_CHAT4,COLOR_CHAT5);
new y, m, d;
new h,mi,s;
getdate(y,m,d);
gettime(h,mi,s);
format(string,sizeof(string), "(%d/%d/%d)[%d:%d:%d] %s [CMD] -> /putgun %d (%s)",d,m,y,h,mi,s,sendername, slot, gunname);
CommandLog(string);
}
}
return 1;
}
pawn Код:
CMD:putgun(playerid, params[])
{
if(IsPlayerConnected(playerid))
{
if(gPlayerLogged[playerid] == 0) return SendClientMessage(playerid, COLOR_GREY, "[LOGIN] Your athentication is required! Log in before using this command!");
new slot;
if(sscanf(params,"i",slot)) return SendClientMessage(playerid,-1,"USAGE: /putgun [slot 1-6]");
new string[256];
new gunname[100];
new gunID = GetPlayerWeapon(playerid);
new gunAmmo = GetPlayerAmmo(playerid);
new Float:Health;
GetPlayerHealth(playerid, Health);
if(Health <= 15) return SendClientMessage(playerid, COLOR_GREY,"[ERROR] You can't perform that action with low health!");
if(gunID != 0 && gunAmmo != 0)
{
if(slot < 1||slot > 6)
{
SendClientMessage(playerid, COLOR_GREY, "[Note] You can't go below slot 1 and you can't exceed slot 6");
return 1;
}
if(slot == 1)
{
if(PlayerInfo[playerid][pInvWeapon] != 0 || PlayerInfo[playerid][pInvAmmo] != 0)
{
SendClientMessage(playerid, COLOR_GREY, "[ERROR] You have already placed something in Slot 1!");
return 1;
}
PlayerInfo[playerid][pInvWeapon] = gunID;
PlayerInfo[playerid][pInvAmmo] = gunAmmo;
RemovePlayerWeapon(playerid, gunID);
GetWeaponName(gunID, gunname, sizeof(gunname));
format(string, sizeof(string), "[Inventory] You've put %s in slot 1.", gunname);
SendClientMessage(playerid, COLOR_GREY, string);
}
if(slot == 2)
{
if(PlayerInfo[playerid][pInvWeapon2] != 0 || PlayerInfo[playerid][pInvAmmo2] != 0)
{
SendClientMessage(playerid, COLOR_GREY, "[ERROR] You have already placed something in Slot 2!");
return 1;
}
PlayerInfo[playerid][pInvWeapon2] = gunID;
PlayerInfo[playerid][pInvAmmo2] = gunAmmo;
RemovePlayerWeapon(playerid, gunID);
GetWeaponName(gunID, gunname, sizeof(gunname));
format(string, sizeof(string), "[Inventory] You've put %s in Slot 2.", gunname);
SendClientMessage(playerid, COLOR_GREY, string);
}
if(slot == 3)
{
if(PlayerInfo[playerid][pInvWeapon3] != 0 || PlayerInfo[playerid][pInvAmmo3] != 0)
{
SendClientMessage(playerid, COLOR_GREY, "[ERROR] You have already placed something in Slot 3!");
return 1;
}
PlayerInfo[playerid][pInvWeapon3] = gunID;
PlayerInfo[playerid][pInvAmmo3] = gunAmmo;
RemovePlayerWeapon(playerid, gunID);
GetWeaponName(gunID, gunname, sizeof(gunname));
format(string, sizeof(string), "[Inventory] You've put %s in Slot 3.", gunname);
SendClientMessage(playerid, COLOR_GREY, string);
}
if(slot == 4)
{
if(PlayerInfo[playerid][pInvWeapon4] != 0 || PlayerInfo[playerid][pInvAmmo4] != 0)
{
SendClientMessage(playerid, COLOR_GREY, "[ERROR] You have already placed something in Slot 4!");
return 1;
}
PlayerInfo[playerid][pInvWeapon4] = gunID;
PlayerInfo[playerid][pInvAmmo4] = gunAmmo;
RemovePlayerWeapon(playerid, gunID);
GetWeaponName(gunID, gunname, sizeof(gunname));
format(string, sizeof(string), "[Inventory] You've put %s in Slot 4.", gunname);
SendClientMessage(playerid, COLOR_GREY, string);
}
if(slot == 5)
{
if(PlayerInfo[playerid][pInvWeapon5] != 0 || PlayerInfo[playerid][pInvAmmo5] != 0)
{
SendClientMessage(playerid, COLOR_GREY, "[ERROR] You have already placed something in Slot 5!");
return 1;
}
PlayerInfo[playerid][pInvWeapon5] = gunID;
PlayerInfo[playerid][pInvAmmo5] = gunAmmo;
RemovePlayerWeapon(playerid, gunID);
GetWeaponName(gunID, gunname, sizeof(gunname));
format(string, sizeof(string), "[Inventory] You've put %s in your Slot 5.", gunname);
SendClientMessage(playerid, COLOR_GREY, string);
}
if(slot == 6)
{
if(PlayerInfo[playerid][pInvWeapon6] != 0 || PlayerInfo[playerid][pInvAmmo6] != 0)
{
SendClientMessage(playerid, COLOR_GREY, "[ERROR] You have already placed something in Slot 6!");
return 1;
}
PlayerInfo[playerid][pInvWeapon6] = gunID;
PlayerInfo[playerid][pInvAmmo6] = gunAmmo;
RemovePlayerWeapon(playerid, gunID);
GetWeaponName(gunID, gunname, sizeof(gunname));
format(string, sizeof(string), "[Inventory] You've put %s in your slot 6.", gunname);
SendClientMessage(playerid, COLOR_GREY, string);
}
new sendername[MAX_PLAYER_NAME];
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), "* %s puts %s %s in %s Bag.", sendername, PlayerInfo[playerid][pGender], gunname, PlayerInfo[playerid][pGender]);
ProxDetector(30.0, playerid, string, COLOR_CHAT1,COLOR_CHAT2,COLOR_CHAT3,COLOR_CHAT4,COLOR_CHAT5);
new y, m, d;
new h,mi,s;
getdate(y,m,d);
gettime(h,mi,s);
format(string,sizeof(string), "(%d/%d/%d)[%d:%d:%d] %s [CMD] -> /putgun %d (%s)",d,m,y,h,mi,s,sendername, slot, gunname);
CommandLog(string);
}
}
return 1;
}
I used sscanf2 instead of isnull and changed the the message to "[Note] You can't go below slot 1 and you can't exceed slot 6"
- Make sure you have the latest sscanf and "#include <sscanf2>" in top of your script
I'm experiencing another problem.
Whenever I take the gun back out, the ammo seems bugged and I can't switch to it.