From d6b30dd3a5df4b84a287305f807442064f4cf68d Mon Sep 17 00:00:00 2001 From: Kahrl Date: Tue, 29 Nov 2011 17:15:18 +0200 Subject: CraftItem rework and Lua interface --- src/player.cpp | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) (limited to 'src/player.cpp') diff --git a/src/player.cpp b/src/player.cpp index ce2e26945..353f44d8a 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -183,7 +183,8 @@ ServerRemotePlayer::ServerRemotePlayer(ServerEnvironment *env): Player(env->getGameDef()), ServerActiveObject(env, v3f(0,0,0)), m_last_good_position(0,0,0), - m_last_good_position_age(0) + m_last_good_position_age(0), + m_additional_items() { } ServerRemotePlayer::ServerRemotePlayer(ServerEnvironment *env, v3f pos_, u16 peer_id_, @@ -195,6 +196,10 @@ ServerRemotePlayer::ServerRemotePlayer(ServerEnvironment *env, v3f pos_, u16 pee peer_id = peer_id_; updateName(name_); } +ServerRemotePlayer::~ServerRemotePlayer() +{ + clearAddToInventoryLater(); +} /* ServerActiveObject interface */ @@ -247,9 +252,59 @@ bool ServerRemotePlayer::addToInventory(InventoryItem *item) return true; } +void ServerRemotePlayer::addToInventoryLater(InventoryItem *item) +{ + infostream<<"Adding (later) "<getName()<<" into "<::iterator + i = m_additional_items.begin(); + i != m_additional_items.end(); i++) + { + delete *i; + } + m_additional_items.clear(); +} +void ServerRemotePlayer::completeAddToInventoryLater(u16 preferred_index) +{ + InventoryList *ilist = inventory.getList("main"); + if(ilist == NULL) + { + clearAddToInventoryLater(); + return; + } + + // In creative mode, just delete the items + if(g_settings->getBool("creative_mode")) + { + clearAddToInventoryLater(); + return; + } + + for (std::vector::iterator + i = m_additional_items.begin(); + i != m_additional_items.end(); i++) + { + InventoryItem *item = *i; + InventoryItem *leftover = item; + leftover = ilist->addItem(preferred_index, leftover); + leftover = ilist->addItem(leftover); + delete leftover; + } + m_additional_items.clear(); +} void ServerRemotePlayer::setHP(s16 hp_) { hp = hp_; + + // FIXME: don't hardcode maximum HP, make configurable per object + if(hp < 0) + hp = 0; + else if(hp > 20) + hp = 20; } s16 ServerRemotePlayer::getHP() { -- cgit v1.2.3