Corrected RemoveItem function to handle monster loot and stage loot tracking.
This commit is contained in:
parent
7cd54e5f80
commit
22d1a6d834
@ -176,6 +176,7 @@ bool Crawler::OnUserCreate(){
|
||||
Inventory::AddItem("Blue Slime Remains",22);
|
||||
|
||||
LoadLevel(LEVEL_NAMES["starting_map"_S]);
|
||||
Inventory::AddItem("Bandages",3);
|
||||
Inventory::AddItem("Blue Slime Remains",10,true);
|
||||
ChangePlayerClass(WARRIOR);
|
||||
|
||||
|
||||
@ -184,21 +184,31 @@ bool Inventory::UseItem(IT it,uint32_t amt){
|
||||
}
|
||||
|
||||
//Returns true if the item has been consumed completely and there are 0 remaining of that type in our inventory.
|
||||
bool Inventory::RemoveItem(IT it,uint32_t amt){
|
||||
bool Inventory::RemoveItem(IT it,ITCategory inventory,uint32_t amt){
|
||||
//There are two places to manipulate items in (Both the sorted inventory and the actual inventory)
|
||||
if(!_inventory.count(it))return false;
|
||||
if(amt>=_inventory.at(it).Amt()){
|
||||
if (!_inventory.count(it))return false;
|
||||
if (amt>=_inventory.at(it).Amt()){
|
||||
int count=0;
|
||||
std::vector<Item>&sortedList=sortedInv.at(_inventory.at(it).Category());
|
||||
for(Item&item:sortedList){
|
||||
std::vector<Item>&inv=sortedInv.at(inventory);
|
||||
bool eraseFromLootWindow=false;
|
||||
if(inventory=="Monster Loot") {
|
||||
inv=sortedInv.at("Monster Loot");
|
||||
eraseFromLootWindow=true;
|
||||
}else
|
||||
if(inventory=="Stage Loot"){
|
||||
inv=sortedInv.at("Stage Loot");
|
||||
eraseFromLootWindow=true;
|
||||
}
|
||||
for(Item&item:inv){
|
||||
if(item.Name()==it)break;
|
||||
count++;
|
||||
}
|
||||
sortedList.erase(sortedList.begin()+count);
|
||||
_inventory.erase(it);
|
||||
ITCategory cat=ITEM_DATA[it].category;
|
||||
inv.erase(inv.begin()+count);
|
||||
if(!eraseFromLootWindow){
|
||||
_inventory.erase(it);
|
||||
}
|
||||
//Callback for GUI inventories.
|
||||
Menu::InventorySlotsUpdated(cat);
|
||||
Menu::InventorySlotsUpdated(inventory);
|
||||
return true;
|
||||
}else{
|
||||
_inventory.at(it).amt-=amt;
|
||||
@ -206,6 +216,12 @@ bool Inventory::RemoveItem(IT it,uint32_t amt){
|
||||
}
|
||||
}
|
||||
|
||||
//Returns true if the item has been consumed completely and there are 0 remaining of that type in our inventory.
|
||||
bool Inventory::RemoveItem(IT it,uint32_t amt){
|
||||
ITCategory cat = ITEM_DATA[it].category;
|
||||
return RemoveItem(it, cat, amt);
|
||||
}
|
||||
|
||||
std::vector<Item>&Inventory::get(ITCategory itemCategory){
|
||||
return sortedInv.at(itemCategory);
|
||||
}
|
||||
@ -298,7 +314,7 @@ void Inventory::Clear(ITCategory itemCategory){
|
||||
if(itemCategory=="Monster Loot"||itemCategory=="Stage Loot"){//These do not affect the actual inventory, we just clear the lists.
|
||||
itemQuantity=item.Amt();
|
||||
}
|
||||
RemoveItem(item.Name(),itemQuantity);
|
||||
RemoveItem(item.Name(),itemCategory,itemQuantity);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -75,6 +75,7 @@ public:
|
||||
static Item GetItem(IT it);
|
||||
//Auto-executes its use function and removes the amt specified from the inventory. Multiple amounts will cause the item to execute its useFunc multiple times.
|
||||
static bool UseItem(IT it,uint32_t amt=1);
|
||||
static bool RemoveItem(IT it,ITCategory inventory,uint32_t amt = 1);
|
||||
static bool RemoveItem(IT it,uint32_t amt=1);
|
||||
static std::vector<Item>&get(ITCategory itemCategory);
|
||||
static void Clear(ITCategory itemCategory);
|
||||
|
||||
@ -35,7 +35,7 @@ SUCH DAMAGE.
|
||||
#define VERSION_MAJOR 0
|
||||
#define VERSION_MINOR 2
|
||||
#define VERSION_PATCH 1
|
||||
#define VERSION_BUILD 2975
|
||||
#define VERSION_BUILD 2979
|
||||
|
||||
#define stringify(a) stringify_(a)
|
||||
#define stringify_(a) #a
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user