diff options
author | Chuck Miller <shadowmil@gmail.com> | 2009-10-03 10:23:59 -0400 |
---|---|---|
committer | Chuck Miller <shadowmil@gmail.com> | 2009-10-03 10:23:59 -0400 |
commit | 84bea0b72c36a27e3b39a0713aaf7b12d4df5a2a (patch) | |
tree | 2f26a9fb77d48ba2170ea8f388c1b8295638eabe /src/game-server/monster.cpp | |
parent | 80b8174acb340a36194c1ebe4905ab6cca8fdb8f (diff) | |
download | manaserv-84bea0b72c36a27e3b39a0713aaf7b12d4df5a2a.tar.gz manaserv-84bea0b72c36a27e3b39a0713aaf7b12d4df5a2a.tar.xz manaserv-84bea0b72c36a27e3b39a0713aaf7b12d4df5a2a.zip |
Adds the changeAnger method to monsters
Diffstat (limited to 'src/game-server/monster.cpp')
-rw-r--r-- | src/game-server/monster.cpp | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/src/game-server/monster.cpp b/src/game-server/monster.cpp index 68cfa88..3caaac2 100644 --- a/src/game-server/monster.cpp +++ b/src/game-server/monster.cpp @@ -379,23 +379,33 @@ void Monster::forgetTarget(Thing *t) } } -int Monster::damage(Actor *source, const Damage &damage) +void Monster::changeAnger(Actor *target, int amount) { - int HPLoss = Being::damage(source, damage); - if (HPLoss && source && source->getType() == OBJECT_CHARACTER) + if (target && (target->getType() == OBJECT_MONSTER || target->getType() == OBJECT_CHARACTER)) { - Character *s = static_cast< Character * >(source); - std::pair< std::map< Being *, int >::iterator, bool > ib = - mAnger.insert(std::make_pair(s, HPLoss)); - - if (ib.second) + Being *t = static_cast< Being * >(target); + if (mAnger.find(t) != mAnger.end()) { - s->addListener(&mTargetListener); + mAnger[t] = amount; } else { - ib.first->second += HPLoss; + mAnger[t] = amount; + t->addListener(&mTargetListener); } + } +} + +int Monster::damage(Actor *source, const Damage &damage) +{ + int HPLoss = Being::damage(source, damage); + if (source) + { + changeAnger(source, HPLoss); + } + if (HPLoss && source && source->getType() == OBJECT_CHARACTER) + { + Character *s = static_cast< Character * >(source); std::list<size_t>::const_iterator iSkill; for (iSkill = damage.usedSkills.begin(); iSkill != damage.usedSkills.end(); ++iSkill) |