diff --git a/game/modules/tome/class/Player.lua b/game/modules/tome/class/Player.lua index 164521a397205101bc0f325359c5f8d9dbce1d95..90e8162d877a0784e27fea5263057c3890c95e5d 100644 --- a/game/modules/tome/class/Player.lua +++ b/game/modules/tome/class/Player.lua @@ -91,6 +91,8 @@ function _M:init(t, no_default) self.died_times = self.died_times or {} self.last_learnt_talents = self.last_learnt_talents or { class={}, generic={} } self.puuid = self.puuid or util.uuid() + + self.damage_log = self.damage_log or {} end function _M:onBirth(birther) diff --git a/game/modules/tome/data/damage_types.lua b/game/modules/tome/data/damage_types.lua index ff8da71095caafa4390f8eb498cb439a580100f7..df59d26f6e56c3804f8ab11e5d1428f1fc8abd31 100644 --- a/game/modules/tome/data/damage_types.lua +++ b/game/modules/tome/data/damage_types.lua @@ -341,6 +341,10 @@ setDefaultProjector(function(src, x, y, type, dam, tmp, no_martyr) game.logSeen(target, "%s is healed by the %s%s#LAST# damage!", target.name:capitalize(), DamageType:get(type).text_color or "#aaaaaa#", DamageType:get(type).name) end + if dam > 0 and src.damage_log then + src.damage_log[type] = (src.damage_log[type] or 0) + dam + end + if dam > 0 and source_talent then local t = source_talent diff --git a/game/modules/tome/data/general/objects/special-artifacts.lua b/game/modules/tome/data/general/objects/special-artifacts.lua index e0ac36e7774ceda5b3a06abd82b5f8dbe21c1b7c..3d8313ebe08907b74fce3817d6eead0081d2e827 100644 --- a/game/modules/tome/data/general/objects/special-artifacts.lua +++ b/game/modules/tome/data/general/objects/special-artifacts.lua @@ -20,6 +20,8 @@ local Stats = require "engine.interface.ActorStats" local Talents = require "engine.interface.ActorTalents" +load("/data/general/objects/staves.lua") + -- This file describes artifacts not bound to a special location or quest, but still special(they do not get randomly generated) newEntity{ base = "BASE_STAFF", define_as = "TELOS_SPIRE", @@ -59,6 +61,5 @@ newEntity{ base = "BASE_STAFF", define_as = "TELOS_SPIRE", damage_affinity = { [DamageType.ARCANE] = 15, [DamageType.BLIGHT] = 15, [DamageType.COLD] = 15, [DamageType.DARKNESS] = 15, [DamageType.ACID] = 15, [DamageType.LIGHT] = 15, }, confusion_immune = 0.4, vim_on_crit = 6, - learn_talent = {[Talents.T_COMMAND_STAFF] = 1,}, }, } diff --git a/game/modules/tome/data/gfx/talents/elemental_surge.png b/game/modules/tome/data/gfx/talents/elemental_surge.png new file mode 100644 index 0000000000000000000000000000000000000000..b193c4657cdba8d9211242cfbaebcb2d39cc1aaa Binary files /dev/null and b/game/modules/tome/data/gfx/talents/elemental_surge.png differ diff --git a/game/modules/tome/data/gfx/talents/secrets_of_telos.png b/game/modules/tome/data/gfx/talents/secrets_of_telos.png new file mode 100644 index 0000000000000000000000000000000000000000..d142b503f6bca0be078a9b404b90dce2f204b6ca Binary files /dev/null and b/game/modules/tome/data/gfx/talents/secrets_of_telos.png differ diff --git a/game/modules/tome/data/talents/uber/cun.lua b/game/modules/tome/data/talents/uber/cun.lua index 4d3b6368f99d134239e411b48cec798fda0a400c..b7bc6c93018ee3524be99776ea96bcdb3a6e220d 100644 --- a/game/modules/tome/data/talents/uber/cun.lua +++ b/game/modules/tome/data/talents/uber/cun.lua @@ -81,6 +81,13 @@ uberTalent{ uberTalent{ name = "Endless Woes", mode = "passive", + require = { special={desc="Dealt over 50000 acid, blight or darkness damage", fct=function(self) return + self.damage_log and ( + (self.damage_log[DamageType.ACID] and self.damage_log[DamageType.ACID] >= 50000) or + (self.damage_log[DamageType.BLIGHT] and self.damage_log[DamageType.BLIGHT] >= 50000) or + (self.damage_log[DamageType.DARKNESS] and self.damage_log[DamageType.DARKNESS] >= 50000) + ) + end} }, trigger = function(self, t, target, damtype, dam) if dam < 150 then return end if damtype == DamageType.ACID and rng.percent(15) then @@ -141,6 +148,16 @@ uberTalent{ uberTalent{ name = "Elemental Surge", mode = "passive", + require = { special={desc="Dealt over 50000 arcane, fire, cold, lightning, light or nature damage", fct=function(self) return + self.damage_log and ( + (self.damage_log[DamageType.ARCANE] and self.damage_log[DamageType.ARCANE] >= 50000) or + (self.damage_log[DamageType.FIRE] and self.damage_log[DamageType.FIRE] >= 50000) or + (self.damage_log[DamageType.COLD] and self.damage_log[DamageType.COLD] >= 50000) or + (self.damage_log[DamageType.LIGHTNING] and self.damage_log[DamageType.LIGHTNING] >= 50000) or + (self.damage_log[DamageType.LIGHT] and self.damage_log[DamageType.LIGHT] >= 50000) or + (self.damage_log[DamageType.NATURE] and self.damage_log[DamageType.NATURE] >= 50000) + ) + end} }, trigger = function(self, t, target, damtype, dam) if dam < 150 then return end if damtype == DamageType.ARCANE and rng.percent(15) then