From cfff8488b15d00d6f7e3e7bf6cf9723c1fe91d0b Mon Sep 17 00:00:00 2001 From: Philipp Sehmisch Date: Sun, 9 May 2010 17:03:47 +0200 Subject: Floor items are now removed after a (configurable) time. Reviewed-by: Thorbjorn Lindeijer --- src/game-server/item.cpp | 22 ++++++++++++++++++++++ src/game-server/item.hpp | 11 +++++++---- 2 files changed, 29 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/game-server/item.cpp b/src/game-server/item.cpp index 2737be04..91d847d7 100644 --- a/src/game-server/item.cpp +++ b/src/game-server/item.cpp @@ -24,9 +24,12 @@ #include "game-server/item.hpp" +#include "common/configuration.hpp" #include "game-server/being.hpp" +#include "game-server/state.hpp" #include "scripting/script.hpp" + ItemType itemTypeFromString (const std::string &name) { static std::map table; @@ -130,3 +133,22 @@ bool ItemClass::use(Being *itemUser) mModifiers.applyAttributes(itemUser); return true; } + + +Item::Item(ItemClass *type, int amount) + : Actor(OBJECT_ITEM), mType(type), mAmount(amount) +{ + mLifetime = Configuration::getValue("floorItemDecayTime", 0) * 10; +} + +void Item::update() +{ + if (mLifetime) + { + mLifetime--; + if (!mLifetime) + { + GameState::enqueueRemove(this); + } + } +} diff --git a/src/game-server/item.hpp b/src/game-server/item.hpp index 777f5057..4aa84c9c 100644 --- a/src/game-server/item.hpp +++ b/src/game-server/item.hpp @@ -269,12 +269,14 @@ class ItemClass unsigned mAttackRange; /**< Attack range when used as a weapon */ }; +/** +* Class for an item stack laying on the floor in the game world +*/ + class Item : public Actor { public: - Item(ItemClass *type, int amount) - : Actor(OBJECT_ITEM), mType(type), mAmount(amount) - {} + Item(ItemClass *type, int amount); ItemClass *getItemClass() const { return mType; } @@ -282,11 +284,12 @@ class Item : public Actor int getAmount() const { return mAmount; } - virtual void update() {} + virtual void update(); private: ItemClass *mType; unsigned char mAmount; + int mLifetime; }; #endif -- cgit v1.2.3-70-g09d2