just savin'
This commit is contained in:
parent
4ec61b0ccd
commit
2e41a5e304
|
@ -149,46 +149,19 @@ void GUIInventoryMenu::resizeGui()
|
|||
return;
|
||||
m_screensize_old = screensize;
|
||||
|
||||
for(u32 i=0; i<m_slots.size(); i++)
|
||||
{
|
||||
m_slots[i]->remove();
|
||||
}
|
||||
m_slots.clear();
|
||||
|
||||
core::rect<s32> rect(
|
||||
screensize.X/2 - 560/2,
|
||||
screensize.Y/2 - 300/2,
|
||||
screensize.Y/2 - 480/2,
|
||||
screensize.X/2 + 560/2,
|
||||
screensize.Y/2 + 300/2
|
||||
screensize.Y/2 + 480/2
|
||||
);
|
||||
|
||||
DesiredRect = rect;
|
||||
recalculateAbsolutePosition(false);
|
||||
|
||||
//v2s32 size = rect.getSize();
|
||||
|
||||
core::rect<s32> imgsize(0,0,48,48);
|
||||
v2s32 basepos(30, 30);
|
||||
for(s32 i=0; i<PLAYER_INVENTORY_SIZE; i++)
|
||||
{
|
||||
s32 x = (i%8) * 64;
|
||||
s32 y = (i/8) * 64;
|
||||
v2s32 p(x,y);
|
||||
core::rect<s32> rect = imgsize + basepos + p;
|
||||
GUIInventorySlot *item =
|
||||
new GUIInventorySlot(Environment, this, -1, rect);
|
||||
m_slots.push_back(item);
|
||||
}
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
void GUIInventoryMenu::update()
|
||||
{
|
||||
for(s32 i=0; i<PLAYER_INVENTORY_SIZE; i++)
|
||||
{
|
||||
m_slots[i]->setItem(m_inventory->getItem(i));
|
||||
}
|
||||
}
|
||||
|
||||
void GUIInventoryMenu::draw()
|
||||
|
@ -204,6 +177,51 @@ void GUIInventoryMenu::draw()
|
|||
video::SColor bgcolor(140,0,0,0);
|
||||
driver->draw2DRectangle(bgcolor, AbsoluteRect, &AbsoluteClippingRect);
|
||||
|
||||
/*
|
||||
Draw items
|
||||
*/
|
||||
|
||||
{
|
||||
InventoryList *ilist = m_inventory->getList("main");
|
||||
if(ilist != NULL)
|
||||
{
|
||||
core::rect<s32> imgsize(0,0,48,48);
|
||||
v2s32 basepos(30, 210);
|
||||
basepos += AbsoluteRect.UpperLeftCorner;
|
||||
for(s32 i=0; i<PLAYER_INVENTORY_SIZE; i++)
|
||||
{
|
||||
s32 x = (i%8) * 64;
|
||||
s32 y = (i/8) * 64;
|
||||
v2s32 p(x,y);
|
||||
core::rect<s32> rect = imgsize + basepos + p;
|
||||
drawInventoryItem(Environment, ilist->getItem(i),
|
||||
rect, &AbsoluteClippingRect);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
InventoryList *ilist = m_inventory->getList("craft");
|
||||
if(ilist != NULL)
|
||||
{
|
||||
core::rect<s32> imgsize(0,0,48,48);
|
||||
v2s32 basepos(30, 30);
|
||||
basepos += AbsoluteRect.UpperLeftCorner;
|
||||
for(s32 i=0; i<9; i++)
|
||||
{
|
||||
s32 x = (i%3) * 64;
|
||||
s32 y = (i/3) * 64;
|
||||
v2s32 p(x,y);
|
||||
core::rect<s32> rect = imgsize + basepos + p;
|
||||
drawInventoryItem(Environment, ilist->getItem(i),
|
||||
rect, &AbsoluteClippingRect);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Call base class
|
||||
*/
|
||||
gui::IGUIElement::draw();
|
||||
}
|
||||
|
||||
|
|
|
@ -61,6 +61,7 @@ public:
|
|||
void resizeGui();
|
||||
|
||||
// Updates stuff from inventory to screen
|
||||
// TODO: Remove, not used
|
||||
void update();
|
||||
|
||||
void draw();
|
||||
|
@ -80,7 +81,6 @@ public:
|
|||
|
||||
private:
|
||||
Inventory *m_inventory;
|
||||
core::array<GUIInventorySlot*> m_slots;
|
||||
v2u32 m_screensize_old;
|
||||
};
|
||||
|
||||
|
|
|
@ -136,30 +136,39 @@ MapBlockObject * MapBlockObjectItem::createObject
|
|||
Inventory
|
||||
*/
|
||||
|
||||
Inventory::Inventory(u32 size)
|
||||
InventoryList::InventoryList(std::string name, u32 size)
|
||||
{
|
||||
m_name = name;
|
||||
m_size = size;
|
||||
clearItems();
|
||||
}
|
||||
|
||||
Inventory::~Inventory()
|
||||
InventoryList::~InventoryList()
|
||||
{
|
||||
for(u32 i=0; i<m_items.size(); i++)
|
||||
{
|
||||
delete m_items[i];
|
||||
if(m_items[i])
|
||||
delete m_items[i];
|
||||
}
|
||||
}
|
||||
|
||||
void Inventory::clearItems()
|
||||
void InventoryList::clearItems()
|
||||
{
|
||||
for(u32 i=0; i<m_items.size(); i++)
|
||||
{
|
||||
if(m_items[i])
|
||||
delete m_items[i];
|
||||
}
|
||||
|
||||
m_items.clear();
|
||||
|
||||
for(u32 i=0; i<m_size; i++)
|
||||
{
|
||||
m_items.push_back(NULL);
|
||||
}
|
||||
}
|
||||
|
||||
void Inventory::serialize(std::ostream &os)
|
||||
void InventoryList::serialize(std::ostream &os)
|
||||
{
|
||||
//os.imbue(std::locale("C"));
|
||||
|
||||
|
@ -181,7 +190,7 @@ void Inventory::serialize(std::ostream &os)
|
|||
os<<"end\n";
|
||||
}
|
||||
|
||||
void Inventory::deSerialize(std::istream &is)
|
||||
void InventoryList::deSerialize(std::istream &is)
|
||||
{
|
||||
//is.imbue(std::locale("C"));
|
||||
|
||||
|
@ -223,8 +232,18 @@ void Inventory::deSerialize(std::istream &is)
|
|||
}
|
||||
}
|
||||
|
||||
Inventory & Inventory::operator = (Inventory &other)
|
||||
InventoryList::InventoryList(const InventoryList &other)
|
||||
{
|
||||
/*
|
||||
Do this so that the items get cloned. Otherwise the pointers
|
||||
in the array will just get copied.
|
||||
*/
|
||||
*this = other;
|
||||
}
|
||||
|
||||
InventoryList & InventoryList::operator = (const InventoryList &other)
|
||||
{
|
||||
m_name = other.m_name;
|
||||
m_size = other.m_size;
|
||||
clearItems();
|
||||
for(u32 i=0; i<other.m_items.size(); i++)
|
||||
|
@ -239,12 +258,17 @@ Inventory & Inventory::operator = (Inventory &other)
|
|||
return *this;
|
||||
}
|
||||
|
||||
u32 Inventory::getSize()
|
||||
std::string InventoryList::getName()
|
||||
{
|
||||
return m_name;
|
||||
}
|
||||
|
||||
u32 InventoryList::getSize()
|
||||
{
|
||||
return m_items.size();
|
||||
}
|
||||
|
||||
u32 Inventory::getUsedSlots()
|
||||
u32 InventoryList::getUsedSlots()
|
||||
{
|
||||
u32 num = 0;
|
||||
for(u32 i=0; i<m_items.size(); i++)
|
||||
|
@ -256,14 +280,14 @@ u32 Inventory::getUsedSlots()
|
|||
return num;
|
||||
}
|
||||
|
||||
InventoryItem * Inventory::getItem(u32 i)
|
||||
InventoryItem * InventoryList::getItem(u32 i)
|
||||
{
|
||||
if(i > m_items.size() - 1)
|
||||
return NULL;
|
||||
return m_items[i];
|
||||
}
|
||||
|
||||
InventoryItem * Inventory::changeItem(u32 i, InventoryItem *newitem)
|
||||
InventoryItem * InventoryList::changeItem(u32 i, InventoryItem *newitem)
|
||||
{
|
||||
assert(i < m_items.size());
|
||||
|
||||
|
@ -272,7 +296,7 @@ InventoryItem * Inventory::changeItem(u32 i, InventoryItem *newitem)
|
|||
return olditem;
|
||||
}
|
||||
|
||||
void Inventory::deleteItem(u32 i)
|
||||
void InventoryList::deleteItem(u32 i)
|
||||
{
|
||||
assert(i < m_items.size());
|
||||
InventoryItem *item = changeItem(i, NULL);
|
||||
|
@ -280,7 +304,7 @@ void Inventory::deleteItem(u32 i)
|
|||
delete item;
|
||||
}
|
||||
|
||||
bool Inventory::addItem(InventoryItem *newitem)
|
||||
bool InventoryList::addItem(InventoryItem *newitem)
|
||||
{
|
||||
// If it is a MaterialItem, try to find an already existing one
|
||||
// and just increment the counter
|
||||
|
@ -324,9 +348,9 @@ bool Inventory::addItem(InventoryItem *newitem)
|
|||
return false;
|
||||
}
|
||||
|
||||
void Inventory::print(std::ostream &o)
|
||||
void InventoryList::print(std::ostream &o)
|
||||
{
|
||||
o<<"Player inventory:"<<std::endl;
|
||||
o<<"InventoryList:"<<std::endl;
|
||||
for(u32 i=0; i<m_items.size(); i++)
|
||||
{
|
||||
InventoryItem *item = m_items[i];
|
||||
|
@ -338,5 +362,130 @@ void Inventory::print(std::ostream &o)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Inventory
|
||||
*/
|
||||
|
||||
Inventory::~Inventory()
|
||||
{
|
||||
clear();
|
||||
}
|
||||
|
||||
void Inventory::clear()
|
||||
{
|
||||
for(u32 i=0; i<m_lists.size(); i++)
|
||||
{
|
||||
delete m_lists[i];
|
||||
}
|
||||
m_lists.clear();
|
||||
}
|
||||
|
||||
Inventory::Inventory()
|
||||
{
|
||||
}
|
||||
|
||||
Inventory::Inventory(const Inventory &other)
|
||||
{
|
||||
*this = other;
|
||||
}
|
||||
|
||||
Inventory & Inventory::operator = (const Inventory &other)
|
||||
{
|
||||
clear();
|
||||
for(u32 i=0; i<other.m_lists.size(); i++)
|
||||
{
|
||||
m_lists.push_back(new InventoryList(*other.m_lists[i]));
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
void Inventory::serialize(std::ostream &os)
|
||||
{
|
||||
for(u32 i=0; i<m_lists.size(); i++)
|
||||
{
|
||||
InventoryList *list = m_lists[i];
|
||||
os<<"List "<<list->getName()<<" "<<list->getSize()<<"\n";
|
||||
list->serialize(os);
|
||||
}
|
||||
|
||||
os<<"end\n";
|
||||
}
|
||||
|
||||
void Inventory::deSerialize(std::istream &is)
|
||||
{
|
||||
clear();
|
||||
|
||||
for(;;)
|
||||
{
|
||||
std::string line;
|
||||
std::getline(is, line, '\n');
|
||||
|
||||
std::istringstream iss(line);
|
||||
|
||||
std::string name;
|
||||
std::getline(iss, name, ' ');
|
||||
|
||||
if(name == "end")
|
||||
{
|
||||
break;
|
||||
}
|
||||
else if(name == "List")
|
||||
{
|
||||
std::string listname;
|
||||
u32 listsize;
|
||||
|
||||
std::getline(iss, listname, ' ');
|
||||
iss>>listsize;
|
||||
|
||||
InventoryList *list = new InventoryList(listname, listsize);
|
||||
list->deSerialize(is);
|
||||
|
||||
m_lists.push_back(list);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw SerializationError("Unknown inventory identifier");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
InventoryList * Inventory::addList(const std::string &name, u32 size)
|
||||
{
|
||||
s32 i = getListIndex(name);
|
||||
if(i != -1)
|
||||
{
|
||||
if(m_lists[i]->getSize() != size)
|
||||
{
|
||||
delete m_lists[i];
|
||||
m_lists[i] = new InventoryList(name, size);
|
||||
}
|
||||
return m_lists[i];
|
||||
}
|
||||
else
|
||||
{
|
||||
m_lists.push_back(new InventoryList(name, size));
|
||||
return m_lists.getLast();
|
||||
}
|
||||
}
|
||||
|
||||
InventoryList * Inventory::getList(const std::string &name)
|
||||
{
|
||||
s32 i = getListIndex(name);
|
||||
if(i == -1)
|
||||
return NULL;
|
||||
return m_lists[i];
|
||||
}
|
||||
|
||||
s32 Inventory::getListIndex(const std::string &name)
|
||||
{
|
||||
for(u32 i=0; i<m_lists.size(); i++)
|
||||
{
|
||||
if(m_lists[i]->getName() == name)
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
//END
|
||||
|
|
|
@ -196,18 +196,21 @@ private:
|
|||
std::string m_inventorystring;
|
||||
};
|
||||
|
||||
class Inventory
|
||||
class InventoryList
|
||||
{
|
||||
public:
|
||||
Inventory(u32 size);
|
||||
~Inventory();
|
||||
InventoryList(std::string name, u32 size);
|
||||
~InventoryList();
|
||||
void clearItems();
|
||||
void serialize(std::ostream &os);
|
||||
void deSerialize(std::istream &is);
|
||||
|
||||
Inventory & operator = (Inventory &other);
|
||||
InventoryList(const InventoryList &other);
|
||||
InventoryList & operator = (const InventoryList &other);
|
||||
|
||||
std::string getName();
|
||||
u32 getSize();
|
||||
// Count used slots
|
||||
u32 getUsedSlots();
|
||||
|
||||
InventoryItem * getItem(u32 i);
|
||||
|
@ -222,6 +225,40 @@ public:
|
|||
private:
|
||||
core::array<InventoryItem*> m_items;
|
||||
u32 m_size;
|
||||
std::string m_name;
|
||||
};
|
||||
|
||||
class Inventory
|
||||
{
|
||||
public:
|
||||
~Inventory();
|
||||
|
||||
void clear();
|
||||
|
||||
Inventory();
|
||||
Inventory(const Inventory &other);
|
||||
Inventory & operator = (const Inventory &other);
|
||||
|
||||
void serialize(std::ostream &os);
|
||||
void deSerialize(std::istream &is);
|
||||
|
||||
InventoryList * addList(const std::string &name, u32 size);
|
||||
InventoryList * getList(const std::string &name);
|
||||
bool deleteList(const std::string &name);
|
||||
// A shorthand for adding items
|
||||
bool addItem(const std::string &listname, InventoryItem *newitem)
|
||||
{
|
||||
InventoryList *list = getList(listname);
|
||||
if(list == NULL)
|
||||
return false;
|
||||
return list->addItem(newitem);
|
||||
}
|
||||
|
||||
private:
|
||||
// -1 if not found
|
||||
s32 getListIndex(const std::string &name);
|
||||
|
||||
core::array<InventoryList*> m_lists;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
113
src/main.cpp
113
src/main.cpp
|
@ -172,6 +172,7 @@ SUGG: Split Inventory into ClientInventory and ServerInventory
|
|||
Doing now:
|
||||
======================================================================
|
||||
|
||||
TODO: Convert the text input system to use a modal menu
|
||||
|
||||
======================================================================
|
||||
|
||||
|
@ -269,10 +270,22 @@ extern void set_default_settings();
|
|||
//u16 g_selected_material = 0;
|
||||
u16 g_selected_item = 0;
|
||||
|
||||
/*
|
||||
GUI Stuff
|
||||
*/
|
||||
gui::IGUIEnvironment* guienv = NULL;
|
||||
GUIPauseMenu *pauseMenu = NULL;
|
||||
GUIInventoryMenu *inventoryMenu = NULL;
|
||||
|
||||
bool noMenuActive()
|
||||
{
|
||||
if(pauseMenu && pauseMenu->isVisible())
|
||||
return false;
|
||||
if(inventoryMenu && inventoryMenu->isVisible())
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
std::wstring g_text_buffer;
|
||||
bool g_text_buffer_accepted = false;
|
||||
|
||||
|
@ -353,9 +366,7 @@ public:
|
|||
{
|
||||
if(event.KeyInput.Key == irr::KEY_ESCAPE)
|
||||
{
|
||||
if(g_game_focused == true
|
||||
&& !pauseMenu->isVisible()
|
||||
&& !inventoryMenu->isVisible())
|
||||
if(g_game_focused == true && noMenuActive())
|
||||
{
|
||||
dstream<<DTIME<<"MyEventReceiver: "
|
||||
<<"Launching pause menu"<<std::endl;
|
||||
|
@ -369,9 +380,7 @@ public:
|
|||
{
|
||||
if(event.KeyInput.Key == irr::KEY_KEY_I)
|
||||
{
|
||||
if(g_game_focused == true
|
||||
&& !inventoryMenu->isVisible()
|
||||
&& !pauseMenu->isVisible())
|
||||
if(g_game_focused == true && noMenuActive())
|
||||
{
|
||||
dstream<<DTIME<<"MyEventReceiver: "
|
||||
<<"Launching inventory"<<std::endl;
|
||||
|
@ -428,44 +437,53 @@ public:
|
|||
|
||||
if(event.EventType == irr::EET_MOUSE_INPUT_EVENT)
|
||||
{
|
||||
//dstream<<"MyEventReceiver: mouse input"<<std::endl;
|
||||
left_active = event.MouseInput.isLeftPressed();
|
||||
middle_active = event.MouseInput.isMiddlePressed();
|
||||
right_active = event.MouseInput.isRightPressed();
|
||||
if(noMenuActive() == false)
|
||||
{
|
||||
left_active = false;
|
||||
middle_active = false;
|
||||
right_active = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
//dstream<<"MyEventReceiver: mouse input"<<std::endl;
|
||||
left_active = event.MouseInput.isLeftPressed();
|
||||
middle_active = event.MouseInput.isMiddlePressed();
|
||||
right_active = event.MouseInput.isRightPressed();
|
||||
|
||||
if(event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN)
|
||||
{
|
||||
leftclicked = true;
|
||||
}
|
||||
if(event.MouseInput.Event == EMIE_RMOUSE_PRESSED_DOWN)
|
||||
{
|
||||
rightclicked = true;
|
||||
}
|
||||
if(event.MouseInput.Event == EMIE_LMOUSE_LEFT_UP)
|
||||
{
|
||||
leftreleased = true;
|
||||
}
|
||||
if(event.MouseInput.Event == EMIE_RMOUSE_LEFT_UP)
|
||||
{
|
||||
rightreleased = true;
|
||||
}
|
||||
if(event.MouseInput.Event == EMIE_MOUSE_WHEEL)
|
||||
{
|
||||
/*dstream<<"event.MouseInput.Wheel="
|
||||
<<event.MouseInput.Wheel<<std::endl;*/
|
||||
if(event.MouseInput.Wheel < 0)
|
||||
if(event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN)
|
||||
{
|
||||
if(g_selected_item < PLAYER_INVENTORY_SIZE-1)
|
||||
g_selected_item++;
|
||||
else
|
||||
g_selected_item = 0;
|
||||
leftclicked = true;
|
||||
}
|
||||
else if(event.MouseInput.Wheel > 0)
|
||||
if(event.MouseInput.Event == EMIE_RMOUSE_PRESSED_DOWN)
|
||||
{
|
||||
if(g_selected_item > 0)
|
||||
g_selected_item--;
|
||||
else
|
||||
g_selected_item = PLAYER_INVENTORY_SIZE-1;
|
||||
rightclicked = true;
|
||||
}
|
||||
if(event.MouseInput.Event == EMIE_LMOUSE_LEFT_UP)
|
||||
{
|
||||
leftreleased = true;
|
||||
}
|
||||
if(event.MouseInput.Event == EMIE_RMOUSE_LEFT_UP)
|
||||
{
|
||||
rightreleased = true;
|
||||
}
|
||||
if(event.MouseInput.Event == EMIE_MOUSE_WHEEL)
|
||||
{
|
||||
/*dstream<<"event.MouseInput.Wheel="
|
||||
<<event.MouseInput.Wheel<<std::endl;*/
|
||||
if(event.MouseInput.Wheel < 0)
|
||||
{
|
||||
if(g_selected_item < PLAYER_INVENTORY_SIZE-1)
|
||||
g_selected_item++;
|
||||
else
|
||||
g_selected_item = 0;
|
||||
}
|
||||
else if(event.MouseInput.Wheel > 0)
|
||||
{
|
||||
if(g_selected_item > 0)
|
||||
g_selected_item--;
|
||||
else
|
||||
g_selected_item = PLAYER_INVENTORY_SIZE-1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -933,16 +951,18 @@ public:
|
|||
|
||||
start = m_selection - m_itemcount / 2;
|
||||
|
||||
InventoryList *mainlist = m_inventory->getList("main");
|
||||
|
||||
for(s32 i=0; i<m_itemcount; i++)
|
||||
{
|
||||
s32 j = i + start;
|
||||
|
||||
if(j > (s32)m_inventory->getSize() - 1)
|
||||
j -= m_inventory->getSize();
|
||||
if(j > (s32)mainlist->getSize() - 1)
|
||||
j -= mainlist->getSize();
|
||||
if(j < 0)
|
||||
j += m_inventory->getSize();
|
||||
j += mainlist->getSize();
|
||||
|
||||
InventoryItem *item = m_inventory->getItem(j);
|
||||
InventoryItem *item = mainlist->getItem(j);
|
||||
// Null items
|
||||
if(item == NULL)
|
||||
{
|
||||
|
@ -1475,7 +1495,7 @@ int main(int argc, char *argv[])
|
|||
*/
|
||||
|
||||
// This is a copy of the inventory that the client's environment has
|
||||
Inventory local_inventory(PLAYER_INVENTORY_SIZE);
|
||||
Inventory local_inventory;
|
||||
|
||||
GUIQuickInventory *quick_inventory = new GUIQuickInventory
|
||||
(guienv, NULL, v2s32(10, 70), 5, &local_inventory);
|
||||
|
@ -1806,8 +1826,7 @@ int main(int argc, char *argv[])
|
|||
|
||||
if((device->isWindowActive()
|
||||
&& g_game_focused
|
||||
&& !pauseMenu->isVisible()
|
||||
&& !inventoryMenu->isVisible()
|
||||
&& noMenuActive()
|
||||
)
|
||||
|| random_input)
|
||||
{
|
||||
|
|
|
@ -29,12 +29,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
Player::Player():
|
||||
touching_ground(false),
|
||||
in_water(false),
|
||||
inventory(PLAYER_INVENTORY_SIZE),
|
||||
peer_id(PEER_ID_NEW),
|
||||
m_speed(0,0,0),
|
||||
m_position(0,0,0)
|
||||
{
|
||||
updateName("<not set>");
|
||||
inventory.addList("main", PLAYER_INVENTORY_SIZE);
|
||||
inventory.addList("craft", 9);
|
||||
}
|
||||
|
||||
Player::~Player()
|
||||
|
|
|
@ -1252,7 +1252,7 @@ void Server::AsyncRunStep()
|
|||
{
|
||||
// Add to inventory and send inventory
|
||||
InventoryItem *item = new MaterialItem(material, 1);
|
||||
player->inventory.addItem(item);
|
||||
player->inventory.addItem("main", item);
|
||||
SendInventory(player->peer_id);
|
||||
}
|
||||
|
||||
|
@ -1632,11 +1632,12 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
|
|||
// Left click
|
||||
if(button == 0)
|
||||
{
|
||||
if(g_settings.getBool("creative_mode") == false)
|
||||
InventoryList *ilist = player->inventory.getList("main");
|
||||
if(g_settings.getBool("creative_mode") == false && ilist != NULL)
|
||||
{
|
||||
|
||||
// Skip if inventory has no free space
|
||||
if(player->inventory.getUsedSlots() == player->inventory.getSize())
|
||||
if(ilist->getUsedSlots() == ilist->getSize())
|
||||
{
|
||||
dout_server<<"Player inventory has no free space"<<std::endl;
|
||||
return;
|
||||
|
@ -1645,7 +1646,7 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
|
|||
// Add to inventory and send inventory
|
||||
InventoryItem *item = new MapBlockObjectItem
|
||||
(obj->getInventoryString());
|
||||
player->inventory.addItem(item);
|
||||
ilist->addItem(item);
|
||||
SendInventory(player->peer_id);
|
||||
}
|
||||
|
||||
|
@ -1746,8 +1747,12 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
|
|||
else if(action == 1)
|
||||
{
|
||||
|
||||
InventoryList *ilist = player->inventory.getList("main");
|
||||
if(ilist == NULL)
|
||||
return;
|
||||
|
||||
// Get item
|
||||
InventoryItem *item = player->inventory.getItem(item_i);
|
||||
InventoryItem *item = ilist->getItem(item_i);
|
||||
|
||||
// If there is no item, it is not possible to add it anywhere
|
||||
if(item == NULL)
|
||||
|
@ -1796,11 +1801,12 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
|
|||
/*
|
||||
Handle inventory
|
||||
*/
|
||||
if(g_settings.getBool("creative_mode") == false)
|
||||
InventoryList *ilist = player->inventory.getList("main");
|
||||
if(g_settings.getBool("creative_mode") == false && ilist)
|
||||
{
|
||||
// Remove from inventory and send inventory
|
||||
if(mitem->getCount() == 1)
|
||||
player->inventory.deleteItem(item_i);
|
||||
ilist->deleteItem(item_i);
|
||||
else
|
||||
mitem->remove(1);
|
||||
// Send inventory
|
||||
|
@ -1819,11 +1825,12 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
|
|||
/*
|
||||
Handle inventory
|
||||
*/
|
||||
if(g_settings.getBool("creative_mode") == false)
|
||||
InventoryList *ilist = player->inventory.getList("main");
|
||||
if(g_settings.getBool("creative_mode") == false && ilist)
|
||||
{
|
||||
// Remove from inventory and send inventory
|
||||
if(mitem->getCount() == 1)
|
||||
player->inventory.deleteItem(item_i);
|
||||
ilist->deleteItem(item_i);
|
||||
else
|
||||
mitem->remove(1);
|
||||
// Send inventory
|
||||
|
@ -1930,10 +1937,11 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
|
|||
|
||||
//dout_server<<"Placed object"<<std::endl;
|
||||
|
||||
if(g_settings.getBool("creative_mode") == false)
|
||||
InventoryList *ilist = player->inventory.getList("main");
|
||||
if(g_settings.getBool("creative_mode") == false && ilist)
|
||||
{
|
||||
// Remove from inventory and send inventory
|
||||
player->inventory.deleteItem(item_i);
|
||||
ilist->deleteItem(item_i);
|
||||
// Send inventory
|
||||
SendInventory(peer_id);
|
||||
}
|
||||
|
@ -2190,18 +2198,18 @@ void Server::peerAdded(con::Peer *peer)
|
|||
continue;
|
||||
|
||||
InventoryItem *item = new MaterialItem(i, 1);
|
||||
player->inventory.addItem(item);
|
||||
player->inventory.addItem("main", item);
|
||||
}
|
||||
// Sign
|
||||
{
|
||||
InventoryItem *item = new MapBlockObjectItem("Sign Example text");
|
||||
bool r = player->inventory.addItem(item);
|
||||
bool r = player->inventory.addItem("main", item);
|
||||
assert(r == true);
|
||||
}
|
||||
/*// Rat
|
||||
{
|
||||
InventoryItem *item = new MapBlockObjectItem("Rat");
|
||||
bool r = player->inventory.addItem(item);
|
||||
bool r = player->inventory.addItem("main", item);
|
||||
assert(r == true);
|
||||
}*/
|
||||
}
|
||||
|
@ -2210,21 +2218,21 @@ void Server::peerAdded(con::Peer *peer)
|
|||
// Give some lights
|
||||
{
|
||||
InventoryItem *item = new MaterialItem(3, 999);
|
||||
bool r = player->inventory.addItem(item);
|
||||
bool r = player->inventory.addItem("main", item);
|
||||
assert(r == true);
|
||||
}
|
||||
// and some signs
|
||||
for(u16 i=0; i<4; i++)
|
||||
{
|
||||
InventoryItem *item = new MapBlockObjectItem("Sign Example text");
|
||||
bool r = player->inventory.addItem(item);
|
||||
bool r = player->inventory.addItem("main", item);
|
||||
assert(r == true);
|
||||
}
|
||||
/*// and some rats
|
||||
for(u16 i=0; i<4; i++)
|
||||
{
|
||||
InventoryItem *item = new MapBlockObjectItem("Rat");
|
||||
bool r = player->inventory.addItem(item);
|
||||
bool r = player->inventory.addItem("main", item);
|
||||
assert(r == true);
|
||||
}*/
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue