Re-adjusting the IDs.
#1

I am having a hard time on this Inventory System I am using (a heavily - Maybe?? - modified of Joe Staff's Inventory System v2)

The /inventory works perfectly fine, If you remove an inventory item (ID 0 -> listitem ID 0) It will get fucked up. /inventory still lists the items properly, The only problem is the OnDialogResponse. On Joe's Inventory System, OnPlayerUseItem is originally scripted to be called by CallLocalFunction (and the MAX_ITEMS id for it are assigned by listitem) But since I removed the first item which is ID 0 (MAX_ITEMS) , OnDialogResponse will think that the remaining items that are in the first listitem will be ID 0 - That is why I wanted to re-adjust the IDs like for instance an item has been removed, I will loop all the items and assign the existing slots to the none-existing ones (I am having a hard time on scripting it)

Any help would be appreciated - Post down below if you are still having a hard time understanding my situation (probably because of my grammar)

Notes;

* An invalid item will always be named as "none".
* An invalid item will always have a zero item quantity.

If you still really can't understand what I wanted to do ;

Here's an example.

-> I have 5 items, ID 0/1/2/3/4. I took ID 2 and ID 4 away from the item menu. The ID 2 and ID 4 will be now unoccupied, The thing I wanted to do is to re-fresh the Inventory & make the IDs re-adjusted like ID 3 to ID 2.

Another example (much more complicated)

-> I have 10 items, ID 0/1/2/3/4/5/6/7/8/9, I took ID 2, ID 4, ID 6 and ID 8 away from the item menu, The mentioned IDs will be now occupied. Unoccupied IDs must be re-occupied by an existing item. ID 3 will took over ID 2, ID 5 will took over ID 4, ID 7 will took over ID 6 and ID 9 will took over ID 8 - The IDs that will replace the unoccupied IDs will be then re-occupied by their above itemIDs if it's occupied.

Code:

PHP Code:
// OnDialogResponse
case DIALOG_INVENTORY:
{
    if(
response)
    {
        
CallLocalFunction("OnPlayerUseItem""ds"playeridInventoryInfo[playerid][listitem][inventoryName]);
    }
    else
    {
        
DeletePVar(playerid"item_name");
    }
}
case 
DIALOG_INVID:
{
    new 
itemname[32];
    
GetPVarString(playerid"item_name"itemname32);
    if(
response)
    {
        if(!
isnumeric(inputtext))
        {
            
ShowPlayerDialog(playeridDIALOG_INVIDDIALOG_STYLE_INPUT"Give to Player""Type in the playerID you wanted to give the item to.""Give""Cancel");
            return 
1;
        }
        if(
strval(inputtext) == playerid)
        {
            
ShowPlayerDialog(playeridDIALOG_INVIDDIALOG_STYLE_INPUT"Give to Player""* You cannot give the item to yourself!\n\nType in the playerID you wanted to give the item to.""Give""Cancel");
            return 
1;
        }
        if(!
IsPlayerConnected(strval(inputtext)))
        {
            
ShowPlayerDialog(playeridDIALOG_INVIDDIALOG_STYLE_INPUT"Give to Player""* Player not connected!\n\nType in the playerID you wanted to give the item to.""Give""Cancel");
            return 
1;
        }
        
        new 
id strval(inputtext);
        
        if (!
IsPlayerNearPlayer(playeridid5.0))
        {
            
ShowPlayerDialog(playeridDIALOG_INVIDDIALOG_STYLE_INPUT"Give to Player""* You are not near to that player!\n\nType in the playerID you wanted to give the item to.""Give""Cancel");
            return 
1;
        }
        if(
strcmp(itemname"Walkie Talkie"true) == 0)
        {
            if(!
PlayerHasItem(playeriditemname))
                return 
SendError(playerid"You do not have the Walkie Talkie.") && DeletePVar(playerid"item_name");
        
            if(
PlayerHasItem(iditemname))
                return 
SendError(playerid"Player already have a walkie talkie.") && DeletePVar(playerid"item_name");
                
            
AddItem(iditemname1);
            
RemoveItem(playeriditemname1);
            
PlayerInfo[id][pChannel] = PlayerInfo[playerid][pChannel];
            
PlayerInfo[playerid][pChannel] = 0;
            
            
format(stringsizeof(string), "hands their Walkie Talkie to %s."GetPlayerNameEx(id));
            
cmd_me(playeridstring);
            
format(stringsizeof(string), "* You hand your Walkie Talkie to %s."GetPlayerNameEx(id));
            
SendClientMessage(playerid, -1string);
            
format(stringsizeof(string), "* %s hands their Walkie Talkie to you."GetPlayerNameEx(playerid));
            
SendClientMessage(id, -1string);
            
DeletePVar(playerid"item_name");
        }
        else if(
strcmp(itemname"Repair Kit"true) == 0)
        {
            if(!
PlayerHasItem(playeriditemname))
                return 
SendError(playerid"You do not have a Repair Kit.") && DeletePVar(playerid"item_name");
            if(
GetItemQuantity(iditemname) >= 3)
                return 
SendError(playerid"Player has already enough repair kit.");
            
AddItem(iditemname1);
            
RemoveItem(playeriditemname1);
            
format(stringsizeof(string), "hands their Repair Kit to %s."GetPlayerNameEx(id));
            
cmd_me(playeridstring);
            
format(stringsizeof(string), "* You hand your Repair Kit to %s."GetPlayerNameEx(id));
            
SendClientMessage(playerid, -1string);
            
format(stringsizeof(string), "* %s hands their Repair Kit to you."GetPlayerNameEx(playerid));
            
SendClientMessage(id, -1string);
            
DeletePVar(playerid"item_name");
        }
        else if(
strcmp(itemname"Brass Knuckles"true) == 0)
        {
            if(!
PlayerHasItem(playeriditemname))
                return 
SendError(playerid"You do not have a Brass Knuckles.") && DeletePVar(playerid"item_name");
            if(
GetWeapon(playerid) == 1)
                return 
SendError(playerid"You cannot give the player the weapon (They already have one)!");
            
AddItem(iditemnameGetItemQuantity(playeriditemname));
            
GiveGun(playerid1GetItemQuantity(playeriditemname));
            
RemoveItem(playeriditemnameGetItemQuantity(playeriditemname));
            
format(stringsizeof(string), "hands their Brass Knuckles to %s."GetPlayerNameEx(id));
            
cmd_me(playeridstring);
            
format(stringsizeof(string), "* You hand your Brass Knuckles to %s."GetPlayerNameEx(id));
            
SendClientMessage(playerid, -1string);
            
format(stringsizeof(string), "* %s hands their Brass Knuckles to you."GetPlayerNameEx(playerid));
            
SendClientMessage(id, -1string);
            
DeletePVar(playerid"item_name");
        }
        else if(
strcmp(itemname"Colt 45"true) == 0)
        {
            if(!
PlayerHasItem(playeriditemname))
                return 
SendError(playerid"You do not have a Colt 45.") && DeletePVar(playerid"item_name");
            if(
GetWeapon(playerid) == 23 || GetWeapon(playerid) == 24 || GetWeapon(playerid) == 25)
                return 
SendError(playerid"You cannot give the player the weapon (They already have one)!");
            
AddItem(iditemnameGetItemQuantity(playeriditemname));
            
GiveGun(playerid22GetItemQuantity(playeriditemname));
            
RemoveItem(playeriditemnameGetItemQuantity(playeriditemname));
            
format(stringsizeof(string), "hands their Colt 45 to %s."GetPlayerNameEx(id));
            
cmd_me(playeridstring);
            
format(stringsizeof(string), "* You hand your Colt 45 to %s."GetPlayerNameEx(id));
            
SendClientMessage(playerid, -1string);
            
format(stringsizeof(string), "* %s hands their Colt 45 to you."GetPlayerNameEx(playerid));
            
SendClientMessage(id, -1string);
            
DeletePVar(playerid"item_name");
        }
        else if(
strcmp(itemname"Desert Eagle"true) == 0)
        {
            if(!
PlayerHasItem(playeriditemname))
                return 
SendError(playerid"You do not have a Desert Eagle.") && DeletePVar(playerid"item_name");
            if(
GetWeapon(playerid) == 23 || GetWeapon(playerid) == 24 || GetWeapon(playerid) == 25)
                return 
SendError(playerid"You cannot give the player the weapon (They already have one)!");
            
AddItem(iditemnameGetItemQuantity(playeriditemname));
            
GiveGun(playerid24GetItemQuantity(playeriditemname));
            
RemoveItem(playeriditemnameGetItemQuantity(playeriditemname));
            
format(stringsizeof(string), "hands their Desert Eagle to %s."GetPlayerNameEx(id));
            
cmd_me(playeridstring);
            
format(stringsizeof(string), "* You hand your Desert Eagle to %s."GetPlayerNameEx(id));
            
SendClientMessage(playerid, -1string);
            
format(stringsizeof(string), "* %s hands their Desert Eagle to you."GetPlayerNameEx(playerid));
            
SendClientMessage(id, -1string);
            
DeletePVar(playerid"item_name");
        }
    }
    else
    {
        
DeletePVar(playerid"item_name");
    }
}
case 
DIALOG_INVOPTION:
{
    new 
itemname[32];
    
GetPVarString(playerid"item_name"itemname32);
    if(
response)
    {
        switch(
listitem)
        {
            case 
0:
            {
                
ShowPlayerDialog(playeridDIALOG_INVIDDIALOG_STYLE_INPUT"Give to Player""Type in the playerID you wanted to give the item to.""Give""Cancel");
            }
            case 
1:
            {
                if(
strcmp(itemname"Walkie Talkie"true) == 0)
                {
                    
RemoveItem(playeriditemname1);
                    
PlayerInfo[playerid][pChannel] = 0;
                    
SendClientMessage(playeridCOLOR_CLIENT"**{FFFFFF} You dropped your walkie talkie.");
                    
cmd_me(playerid"has dropped their walkie talkie.");
                    
                    
DeletePVar(playerid"item_name");
                }
                else if(
strcmp(itemname"Repair Kit"true) == 0)
                {
                    
RemoveItem(playeriditemname1);
                    
SendClientMessage(playeridCOLOR_CLIENT"**{FFFFFF} You dropped a repair kit.");
                    
cmd_me(playerid"has dropped a repair kit.");
                    
DeletePVar(playerid"item_name");
                }
                else if(
strcmp(itemname"Brass Knuckles"true) == 0)
                {
                    
RemoveItem(playeriditemnameGetItemQuantity(playeriditemname));
                    
SendClientMessage(playeridCOLOR_CLIENT"**{FFFFFF} You dropped your Brass Knuckles.");
                    
cmd_me(playerid"has dropped their Brass Knuckles.");
                    
DeletePVar(playerid"item_name");
                }
                else if(
strcmp(itemname"Colt 45"true) == 0)
                {
                    
RemoveItem(playeriditemnameGetItemQuantity(playeriditemname));
                    
SendClientMessage(playeridCOLOR_CLIENT"**{FFFFFF} You dropped your Colt 45.");
                    
cmd_me(playerid"has dropped their Colt 45.");
                    
DeletePVar(playerid"item_name");
                }
                else if(
strcmp(itemname"Desert Eagle"true) == 0)
                {
                    
RemoveItem(playeriditemnameGetItemQuantity(playeriditemname));
                    
SendClientMessage(playeridCOLOR_CLIENT"**{FFFFFF} You dropped your Desert Eagle.");
                    
cmd_me(playerid"has dropped their Desert Eagle.");
                    
DeletePVar(playerid"item_name");
                }
            }
            case 
2:
            {
                if(
strcmp(itemname"Brass Knuckles"true) == 0)
                {
                    if(
GetWeapon(playerid) == 1)
                        return 
SendError(playerid"You cannot stack up your weapons!");
                    
GiveGun(playerid1GetItemQuantity(playeriditemname));
                    
RemoveItem(playeriditemnameGetItemQuantity(playeriditemname));
                    
SendClientMessage(playeridCOLOR_CLIENT"**{FFFFFF} You equipped your Brass Knuckles.");
                    
DeletePVar(playerid"item_name");
                }
                else if(
strcmp(itemname"Colt 45"true) == 0)
                {
                    if(
GetWeapon(playerid) == 23 || GetWeapon(playerid) == 24 || GetWeapon(playerid) == 25)
                        return 
SendError(playerid"You cannot stack up your weapons!");
                    
GiveGun(playerid22GetItemQuantity(playeriditemname));
                    
RemoveItem(playeriditemnameGetItemQuantity(playeriditemname));
                    
SendClientMessage(playeridCOLOR_CLIENT"**{FFFFFF} You equipped your Colt 45.");
                    
DeletePVar(playerid"item_name");
                }
                else if(
strcmp(itemname"Desert Eagle"true) == 0)
                {
                    if(
GetWeapon(playerid) == 23 || GetWeapon(playerid) == 24 || GetWeapon(playerid) == 25)
                        return 
SendError(playerid"You cannot stack up your weapons!");
                    
GiveGun(playerid24GetItemQuantity(playeriditemname));
                    
RemoveItem(playeriditemnameGetItemQuantity(playeriditemname));
                    
SendClientMessage(playeridCOLOR_CLIENT"**{FFFFFF} You equipped your Desert Eagle.");
                    
DeletePVar(playerid"item_name");
                }
            }
        }
    }
    else
    {
        
DeletePVar(playerid"item_name");
    }
}
// Stocks
stock AddItem(playeridname[], amount)
{
    new 
slot = -1;
    for(new 
itemitem MAX_ITEMSitem++)
    {
        if(!
InventoryInfo[playerid][item][inventoryExist])
        {
            if(
slot == -1slot item;
            continue;
        }
        if(!
strcmp(InventoryInfo[playerid][item][inventoryName], nametrue))
        {
            
InventoryInfo[playerid][item][inventoryQuantity] += amount;
            if(
InventoryInfo[playerid][item][inventoryQuantity] <= 0)
            {
                
format(InventoryInfo[playerid][item][inventoryName], 32"none");
                
InventoryInfo[playerid][item][inventoryQuantity] = 0;
                
InventoryInfo[playerid][item][inventoryExist] = false;
            }
            return 
1;
        }
    }
    if(
slot > -1)
    {
        
format(InventoryInfo[playerid][slot][inventoryName], 32name);
        
InventoryInfo[playerid][slot][inventoryQuantity] = amount;
        
InventoryInfo[playerid][slot][inventoryExist] = true;
        return 
1;
    }
    return 
0;
}
stock RemoveItem(playeridname[], amount)
{
    for(new 
itemitem MAX_ITEMSitem++)
    {
        if(!
InventoryInfo[playerid][item][inventoryExist]) continue;
        if(!
strcmp(InventoryInfo[playerid][item][inventoryName], nametrue))
        {
            
InventoryInfo[playerid][item][inventoryQuantity] -= amount;
            if(
InventoryInfo[playerid][item][inventoryQuantity] <= 0)
            {
                
format(InventoryInfo[playerid][item][inventoryName], 32"none");
                
InventoryInfo[playerid][item][inventoryQuantity] = 0;
                
InventoryInfo[playerid][item][inventoryExist] = false;
            }
            return 
1;
        }
    }
    return 
0;
}
stock PlayerHasItem(playeridname[])
{
    for(new 
itemitem MAX_ITEMSitem++)
    {
        if(!
InventoryInfo[playerid][item][inventoryExist]) continue;
        if(!
strcmp(InventoryInfo[playerid][item][inventoryName], namefalse)) return 1;
    }
    return 
0;
}
stock ResetPlayerInventorys(playerid)
{
    for(new 
itemitem MAX_ITEMSitem++)
    {
        
InventoryInfo[playerid][item][inventoryExist] = false;
        
format(InventoryInfo[playerid][item][inventoryName], 32"none");
        
InventoryInfo[playerid][item][inventoryQuantity] = 0;
    }
}
stock ResetPlayerInventory(playeriditem)
{
    
InventoryInfo[playerid][item][inventoryExist] = false;
    
format(InventoryInfo[playerid][item][inventoryName], 32"none");
    
InventoryInfo[playerid][item][inventoryQuantity] = 0;
    return 
true;
}
stock ShowInventory(playerid)
{
    new 
gItemLists[(MAX_ITEMS+1)*(32+3)];
    for(new 
itemitem MAX_ITEMSitem++)
    {
        if(!
InventoryInfo[playerid][item][inventoryExist]) continue;
        
format(gItemListssizeof(gItemLists), "%s\n%s\t%s"gItemListsInventoryInfo[playerid][item][inventoryName], AddComma(InventoryInfo[playerid][item][inventoryQuantity]));
    }
    
format(gItemListssizeof(gItemLists), "Name\tQuantity%s"gItemLists);
    
ShowPlayerDialog(playeridDIALOG_INVENTORYDIALOG_STYLE_TABLIST_HEADERS"Your Inventory"gItemLists"Select""Close");
    return 
1;
}
stock GetItemQuantity(playeriditemname[])
{
    for(new 
itemitem MAX_ITEMSitem++)
    {
        if(!
InventoryInfo[playerid][item][inventoryExist]) continue;
        if(!
strcmp(InventoryInfo[playerid][item][inventoryName], itemnamefalse))
        {
            return 
InventoryInfo[playerid][item][inventoryQuantity];
        }
    }
    return -
1;
}
stock GetAllItems(playerid)
{
    new 
count 0;
    for(new 
iMAX_ITEMSi++)
    {
        if(
InventoryInfo[playerid][i][inventoryExist])
        {
            
count++;
        }
    }
    return 
count++;
}
// OnPlayerUseItem
public OnPlayerUseItem(playeriditemname[])
{
    if(
strcmp(itemname"Walkie Talkie"true) == 0)
    {
        
DeletePVar(playerid"item_name");
        
SetPVarString(playerid"item_name"itemname);
        
ShowPlayerDialog(playeridDIALOG_INVOPTIONDIALOG_STYLE_LIST"Inventory Options""Give\nDrop""Select""Cancel");
    }
    else if(
strcmp(itemname"Repair Kit"true) == 0)
    {
        
DeletePVar(playerid"item_name");
        
SetPVarString(playerid"item_name"itemname);
        
ShowPlayerDialog(playeridDIALOG_INVOPTIONDIALOG_STYLE_LIST"Inventory Options""Give\nDrop""Select""Cancel");
    }
    else if(
strcmp(itemname"Colt 45"true) == || strcmp(itemname"Desert Eagle"true) == || strcmp(itemname"Brass Knuckles"true) == 0)
    {
        
DeletePVar(playerid"item_name");
        
SetPVarString(playerid"item_name"itemname);
        
ShowPlayerDialog(playeridDIALOG_INVOPTIONDIALOG_STYLE_LIST"Inventory Options""Give\nDrop\nUse""Select""Cancel");
    }
    return 
1;

Reply


Messages In This Thread
Re-adjusting the IDs. - by JaKe Elite - 24.04.2016, 02:08
Re: Re-adjusting the IDs. - by Gammix - 24.04.2016, 02:19
Re: Re-adjusting the IDs. - by JaKe Elite - 24.04.2016, 02:34

Forum Jump:


Users browsing this thread: 1 Guest(s)