summaryrefslogtreecommitdiff
path: root/src/game-server/being.cpp
diff options
context:
space:
mode:
authorJared Adams <jaxad0127@gmail.com>2009-07-18 21:08:18 -0600
committerJared Adams <jaxad0127@gmail.com>2009-07-18 21:08:18 -0600
commit5c3f23831986dda46d1c41b8316dd901f1bf3164 (patch)
tree4949ea4b2ce9564636da33b11351f94ec04cfbf3 /src/game-server/being.cpp
parent1923fcab4fc9aefd3eaa97fd9ca9b1c507bb4bcb (diff)
downloadmanaserv-5c3f23831986dda46d1c41b8316dd901f1bf3164.tar.gz
manaserv-5c3f23831986dda46d1c41b8316dd901f1bf3164.tar.bz2
manaserv-5c3f23831986dda46d1c41b8316dd901f1bf3164.tar.xz
manaserv-5c3f23831986dda46d1c41b8316dd901f1bf3164.zip
Change status effects to prevent duplication
Also add some functions for manipulating status effects: * removeStatusEffect * getStatusEffectTime * setStatusEffectTime
Diffstat (limited to 'src/game-server/being.cpp')
-rw-r--r--src/game-server/being.cpp43
1 files changed, 32 insertions, 11 deletions
diff --git a/src/game-server/being.cpp b/src/game-server/being.cpp
index a68ed1f5..66a13a60 100644
--- a/src/game-server/being.cpp
+++ b/src/game-server/being.cpp
@@ -298,10 +298,18 @@ int Being::getModifiedAttribute(int attr) const
void Being::applyStatusEffect(int id, int timer)
{
- Status newStatus;
- newStatus.status = StatusManager::getStatus(id);
- newStatus.time = timer;
- mStatus.push_back(newStatus);
+ if (mAction == DEAD)
+ return;
+
+ Status newStatus;
+ newStatus.status = StatusManager::getStatus(id);
+ newStatus.time = timer;
+ mStatus[id] = newStatus;
+}
+
+void Being::removeStatusEffect(int id)
+{
+ setStatusEffectTime(id, 0);
}
bool Being::hasStatusEffect(int id)
@@ -309,12 +317,25 @@ bool Being::hasStatusEffect(int id)
StatusEffects::iterator it = mStatus.begin();
while (it != mStatus.end())
{
- if (it->status->getId() == id)
+ if (it->second.status->getId() == id)
return true;
}
return false;
}
+unsigned Being::getStatusEffectTime(int id)
+{
+ StatusEffects::iterator it = mStatus.find(id);
+ if (it != mStatus.end()) return it->second.time;
+ else return 0;
+}
+
+void Being::setStatusEffectTime(int id, int time)
+{
+ StatusEffects::iterator it = mStatus.find(id);
+ if (it != mStatus.end()) it->second.time = time;
+}
+
void Being::update()
{
int oldHP = getModifiedAttribute(BASE_ATTR_HP);
@@ -358,15 +379,15 @@ void Being::update()
StatusEffects::iterator it = mStatus.begin();
while (it != mStatus.end())
{
- it->time--;
- if (it->time > 0 && mAction != DEAD)
+ it->second.time--;
+ if (it->second.time > 0 && mAction != DEAD)
{
- it->status->tick(this, it->time);
+ it->second.status->tick(this, it->second.time);
}
- else
+
+ if (it->second.time <= 0 || mAction == DEAD)
{
- it = mStatus.erase(it);
- continue;
+ mStatus.erase(it);
}
it++;
}