Example #1
0
bool cInventory::LoadFromJson(Json::Value & a_Value)
{
	int SlotIdx = 0;
	
	for (Json::Value::iterator itr = a_Value.begin(); itr != a_Value.end(); ++itr, SlotIdx++)
	{
		cItem Item;
		Item.FromJson(*itr);
		
		// The JSON originally included the 4 crafting slots and the result slot, so we need to skip the first 5 items:
		if (SlotIdx < 5)
		{
			continue;
		}
		
		// If we loaded all the slots, stop now, even if the JSON has more:
		if (SlotIdx - 5 >= invNumSlots)
		{
			break;
		}
		
		int GridSlotNum = 0;
		cItemGrid * Grid = GetGridForSlotNum(SlotIdx - 5, GridSlotNum);
		ASSERT(Grid != nullptr);
		Grid->SetSlot(GridSlotNum, Item);
	}  // for itr - a_Value[]
	return true;
}
Example #2
0
bool cInventory::DamageItem(int a_SlotNum, short a_Amount)
{
	if ((a_SlotNum < 0) || (a_SlotNum >= invNumSlots))
	{
		LOGWARNING("%s: requesting an invalid slot index: %d out of %d", __FUNCTION__, a_SlotNum, invNumSlots - 1);
		return false;
	}
	if (a_Amount <= 0)
	{
		return false;
	}
	
	int GridSlotNum = 0;
	cItemGrid * Grid = GetGridForSlotNum(a_SlotNum, GridSlotNum);
	if (Grid == nullptr)
	{
		LOGWARNING("%s(%d, %d): requesting an invalid grid, ignoring.", __FUNCTION__, a_SlotNum, a_Amount);
		return false;
	}
	if (!Grid->DamageItem(GridSlotNum, a_Amount))
	{
		// The item has been damaged, but did not break yet
		SendSlot(a_SlotNum);
		return false;
	}
	
	// The item has broken, remove it:
	Grid->EmptySlot(GridSlotNum);
	return true;
}
Example #3
0
int cInventory::ChangeSlotCount(int a_SlotNum, int a_AddToCount)
{
	int GridSlotNum = 0;
	cItemGrid * Grid = GetGridForSlotNum(a_SlotNum, GridSlotNum);
	if (Grid == nullptr)
	{
		LOGWARNING("%s: invalid slot number, expected 0 .. %d, got %d; ignoring", __FUNCTION__, invNumSlots, a_SlotNum);
		return -1;
	}
	return Grid->ChangeSlotCount(GridSlotNum, a_AddToCount);
}
Example #4
0
const cItem & cInventory::GetSlot(int a_SlotNum) const
{
	if ((a_SlotNum < 0) || (a_SlotNum >= invNumSlots))
	{
		LOGWARNING("%s: requesting an invalid slot index: %d out of %d. Returning the first inventory slot instead.", __FUNCTION__, a_SlotNum, invNumSlots - 1);
		return m_InventorySlots.GetSlot(0);
	}
	int GridSlotNum = 0;
	const cItemGrid * Grid = GetGridForSlotNum(a_SlotNum, GridSlotNum);
	if (Grid == nullptr)
	{
		// Something went wrong, but we don't know what. We must return a value, so return the first inventory slot
		LOGWARNING("%s(%d): requesting an invalid ItemGrid, returning the first inventory slot instead.", __FUNCTION__, a_SlotNum);
		return m_InventorySlots.GetSlot(0);
	}
	return Grid->GetSlot(GridSlotNum);
}
Example #5
0
void cInventory::SetSlot(int a_SlotNum, const cItem & a_Item)
{
	if ((a_SlotNum < 0) || (a_SlotNum >= invNumSlots))
	{
		LOGWARNING("%s: requesting an invalid slot index: %d out of %d. Ignoring.", __FUNCTION__, a_SlotNum, invNumSlots - 1);
		return;
	}

	int GridSlotNum = 0;
	cItemGrid * Grid = GetGridForSlotNum(a_SlotNum, GridSlotNum);
	if (Grid == nullptr)
	{
		LOGWARNING("%s(%d): requesting an invalid itemgrid. Ignoring.", __FUNCTION__, a_SlotNum);
		return;
	}
	Grid->SetSlot(GridSlotNum, a_Item);
}
Example #6
0
void cInventory::SetSlot(int a_SlotNum, const cItem & a_Item)
{
	if ((a_SlotNum < 0) || (a_SlotNum >= invNumSlots))
	{
		LOGWARNING("%s: requesting an invalid slot index: %d out of %d. Ignoring.", __FUNCTION__, a_SlotNum, invNumSlots - 1);
		return;
	}

	int GridSlotNum = 0;
	cItemGrid * Grid = GetGridForSlotNum(a_SlotNum, GridSlotNum);
	if (Grid == NULL)
	{
		LOGWARNING("%s(%d): requesting an invalid itemgrid. Ignoring.", __FUNCTION__, a_SlotNum);
		return;
	}
	Grid->SetSlot(GridSlotNum, a_Item);

	// Broadcast the Equipped Item, if the Slot is changed.
	if ((Grid == &m_HotbarSlots) && (m_EquippedSlotNum == (a_SlotNum - invHotbarOffset)))
	{
		m_Owner.GetWorld()->BroadcastEntityEquipment(m_Owner, 0, a_Item, m_Owner.GetClientHandle());
	}
}