diff options
Diffstat (limited to 'src/game-server/monster.cpp')
-rw-r--r-- | src/game-server/monster.cpp | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/game-server/monster.cpp b/src/game-server/monster.cpp index 26dc95f..71ff09b 100644 --- a/src/game-server/monster.cpp +++ b/src/game-server/monster.cpp @@ -56,6 +56,14 @@ MonsterClass::~MonsterClass() } } +double MonsterClass::getVulnerability(Element element) const +{ + Vulnerabilities::const_iterator it = mVulnerabilities.find(element); + if (it == mVulnerabilities.end()) + return 1.0f; + return it->second; +} + Monster::Monster(MonsterClass *specy): Being(OBJECT_MONSTER), mSpecy(specy), @@ -385,7 +393,11 @@ void Monster::changeAnger(Actor *target, int amount) int Monster::damage(Actor *source, const Damage &damage) { - int HPLoss = Being::damage(source, damage); + Damage newDamage = damage; + float factor = mSpecy->getVulnerability(newDamage.element); + newDamage.base = newDamage.base * factor; + newDamage.delta = newDamage.delta * factor; + int HPLoss = Being::damage(source, newDamage); if (source) { changeAnger(source, HPLoss); |