summaryrefslogtreecommitdiffstats
path: root/example/scripts/damage.lua
diff options
context:
space:
mode:
authorErik Schilling <ablu.erikschilling@googlemail.com>2013-05-12 11:30:59 +0200
committerErik Schilling <ablu.erikschilling@googlemail.com>2013-05-12 11:30:59 +0200
commitef78ed124fad1ac770183b7bcd816d416e4d11b0 (patch)
treed2e8c93bae9339c75c7165b5d0f5ca34e0583bf6 /example/scripts/damage.lua
parent2ac89cae8f19dc2ca8e5211974df18359e3f9536 (diff)
downloadmanaserv-abilities.tar.gz
manaserv-abilities.tar.xz
manaserv-abilities.zip
Readded Entity:damage as lua functionabilities
Diffstat (limited to 'example/scripts/damage.lua')
-rw-r--r--example/scripts/damage.lua31
1 files changed, 31 insertions, 0 deletions
diff --git a/example/scripts/damage.lua b/example/scripts/damage.lua
new file mode 100644
index 0000000..3527c7a
--- /dev/null
+++ b/example/scripts/damage.lua
@@ -0,0 +1,31 @@
+--[[
+
+ Offers damage functions
+
+--]]
+
+
+-- damage is a table with they keys:
+-- base, delta, chance_to_hit
+function Entity:damage(source, damage)
+ local hp_loss = math.random(damage.base, damage.base + damage.delta)
+ local dodge = self:modified_attribute(ATTR_DODGE)
+
+ if math.random(dodge) > math.random(damage.chance_to_hit) then
+ hp_loss = 0 -- attack missed
+ else
+ local defense = self:modified_attribute(ATTR_DEFENSE)
+ local randomness = hp_loss > 16 and math.random(hp_loss / 16) or 0
+ hp_loss = hp_loss * (1 - (0.0159375 * defense) / (1 + 0.017 * defense))
+ + randomness
+ end
+
+ if hp_loss > 0 then
+ local hp = self:modified_attribute(ATTR_HP)
+ hp_loss = math.min(hp, hp_loss)
+ self:add_hit_taken(hp_loss)
+ self:set_base_attribute(ATTR_HP, hp - hp_loss)
+ else
+ hp_loss = 0
+ end
+end