summaryrefslogtreecommitdiffstats
path: root/src/game-server/monster.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game-server/monster.cpp')
-rw-r--r--src/game-server/monster.cpp14
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);