diff options
author | madmaxoft@gmail.com <madmaxoft@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6> | 2012-09-20 15:25:54 +0200 |
---|---|---|
committer | madmaxoft@gmail.com <madmaxoft@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6> | 2012-09-20 15:25:54 +0200 |
commit | bc466f07a454271d4845a7e8c7f0822541c5afbd (patch) | |
tree | c8455a2af322bbd847b6b4ea74256b78aa834c4c /source/cInventory.cpp | |
parent | ProtoProxy: moar packets! (can now sustain parsing while connected to vanilla server, most of the times) (diff) | |
download | cuberite-bc466f07a454271d4845a7e8c7f0822541c5afbd.tar cuberite-bc466f07a454271d4845a7e8c7f0822541c5afbd.tar.gz cuberite-bc466f07a454271d4845a7e8c7f0822541c5afbd.tar.bz2 cuberite-bc466f07a454271d4845a7e8c7f0822541c5afbd.tar.lz cuberite-bc466f07a454271d4845a7e8c7f0822541c5afbd.tar.xz cuberite-bc466f07a454271d4845a7e8c7f0822541c5afbd.tar.zst cuberite-bc466f07a454271d4845a7e8c7f0822541c5afbd.zip |
Diffstat (limited to '')
-rw-r--r-- | source/cInventory.cpp | 95 |
1 files changed, 36 insertions, 59 deletions
diff --git a/source/cInventory.cpp b/source/cInventory.cpp index 58165ff09..1e0b4f6ae 100644 --- a/source/cInventory.cpp +++ b/source/cInventory.cpp @@ -4,7 +4,7 @@ #include "cInventory.h" #include "cPlayer.h" #include "cClientHandle.h" -#include "cWindow.h" +#include "UI/cWindow.h" #include "cItem.h" #include "cRoot.h" @@ -18,39 +18,35 @@ cInventory::~cInventory() { - delete [] m_Slots; - delete m_EquippedItem; - if( GetWindow() ) GetWindow()->Close( *m_Owner ); + /* + // TODO + cWindow wnd = GetWindow(); + if (wnd != NULL) + { + wnd->Close(*m_Owner); + } CloseWindow(); + */ } -cInventory::cInventory(cPlayer* a_Owner) +cInventory::cInventory(cPlayer & a_Owner) : + m_Owner(a_Owner) { - m_Owner = a_Owner; - - m_Slots = new cItem[c_NumSlots]; - for(unsigned int i = 0; i < c_NumSlots; i++) + for (unsigned int i = 0; i < c_NumSlots; i++) + { m_Slots[i].Empty(); + } m_CraftSlots = m_Slots + c_CraftOffset; m_ArmorSlots = m_Slots + c_ArmorOffset; m_MainSlots = m_Slots + c_MainOffset; m_HotSlots = m_Slots + c_HotOffset; - m_EquippedItem = new cItem(); - m_EquippedSlot = 0; - - if (GetWindow() == NULL) - { - cWindow * Window = new cWindow( this, false, cWindow::Inventory, 0); - Window->SetSlots(m_Slots, c_NumSlots); - Window->Open(*a_Owner); - OpenWindow(Window); - } + SetEquippedSlot(0); } @@ -97,9 +93,9 @@ bool cInventory::AddItem( cItem & a_Item ) bool cInventory::RemoveItem( cItem & a_Item ) { // First check equipped slot - if( m_EquippedSlot >= 0 && m_EquippedSlot < 9 ) + if ((m_EquippedSlot >= 0) && (m_EquippedSlot < 9)) { - if( m_HotSlots[m_EquippedSlot].m_ItemID == a_Item.m_ItemID ) + if (m_HotSlots[m_EquippedSlot].m_ItemID == a_Item.m_ItemID) { cItem & Item = m_HotSlots[m_EquippedSlot]; if(Item.m_ItemCount > a_Item.m_ItemCount) @@ -118,7 +114,7 @@ bool cInventory::RemoveItem( cItem & a_Item ) } // Then check other slotz - if( a_Item.m_ItemCount > 0 ) + if (a_Item.m_ItemCount > 0) { for(int i = 0; i < 36; i++) { @@ -141,10 +137,7 @@ bool cInventory::RemoveItem( cItem & a_Item ) } } - if( a_Item.m_ItemCount == 0 ) - return true; - else - return false; + return (a_Item.m_ItemCount == 0); } @@ -221,10 +214,17 @@ cItem* cInventory::GetFromHotBar( int a_SlotNum ) -void cInventory::SetEquippedSlot( int a_SlotNum ) +void cInventory::SetEquippedSlot(int a_SlotNum) { - if( a_SlotNum < 0 || a_SlotNum >= 9 ) m_EquippedSlot = 0; - else m_EquippedSlot = (short)a_SlotNum; + if ((a_SlotNum < 0) || (a_SlotNum >= 9)) + { + m_EquippedSlot = 0; + } + else + { + m_EquippedSlot = (short)a_SlotNum; + } + m_EquippedItem = GetFromHotBar(m_EquippedSlot); } @@ -259,36 +259,9 @@ const cItem & cInventory::GetEquippedItem(void) const -void cInventory::SendWholeInventory(cClientHandle * a_Client) -{ - a_Client->SendWholeInventory(*this); -} - - - - - -void cInventory::SendWholeInventoryToAll(void) +void cInventory::SendWholeInventory(cClientHandle & a_Client) { - cWindow * Window = GetWindow(); - if (Window == NULL) - { - return; - } - - class cSender : - public cItemCallback<cClientHandle> - { - cInventory * m_Inventory; - public: - cSender(cInventory * a_Inventory) : m_Inventory(a_Inventory) {} - virtual bool Item(cClientHandle * a_Client) override - { - m_Inventory->SendWholeInventory(a_Client); - return false; - } - } Sender(this); - Window->ForEachClient(Sender); + a_Client.SendWholeInventory(*this); } @@ -305,7 +278,7 @@ void cInventory::SendSlot(int a_SlotNum) // Sanitize items that are not completely empty (ie. count == 0, but type != empty) Item->Empty(); } - m_Owner->GetClientHandle()->SendInventorySlot(0, a_SlotNum, *Item); + m_Owner.GetClientHandle()->SendInventorySlot(0, a_SlotNum, *Item); } } @@ -437,6 +410,10 @@ void cInventory::SaveToJson(Json::Value & a_Value) bool cInventory::LoadFromJson(Json::Value & a_Value) { int SlotIdx = 0; + + // TODO: Limit the number of slots written to the actual number of slots, + // otherwise an invalid json will crash the server! + for( Json::Value::iterator itr = a_Value.begin(); itr != a_Value.end(); ++itr ) { m_Slots[SlotIdx].FromJson( *itr ); |