From bb454d86d411c6dc27073e22ad526b0e2518671d Mon Sep 17 00:00:00 2001 From: Mikolai Fajer Date: Wed, 9 Nov 2011 19:37:29 -0600 Subject: [PATCH] Updates damage resistance and status immunity checks for talents and tactical AI. --- game/modules/tome/ai/tactical.lua | 32 +++++- .../tome/data/talents/celestial/circles.lua | 6 +- .../modules/tome/data/talents/celestial/combat.lua | 2 +- .../modules/tome/data/talents/celestial/glyphs.lua | 2 +- .../tome/data/talents/celestial/guardian.lua | 2 +- .../tome/data/talents/celestial/star-fury.lua | 8 +- game/modules/tome/data/talents/celestial/sun.lua | 11 +-- .../data/talents/chronomancy/age-manipulation.lua | 6 +- .../tome/data/talents/chronomancy/gravity.lua | 8 +- .../tome/data/talents/chronomancy/matter.lua | 4 +- .../data/talents/chronomancy/spacetime-folding.lua | 2 +- .../data/talents/chronomancy/speed-control.lua | 2 +- .../data/talents/chronomancy/temporal-archery.lua | 8 +- .../talents/chronomancy/timeline-threading.lua | 2 +- .../tome/data/talents/chronomancy/timetravel.lua | 6 +- .../tome/data/talents/corruptions/blight.lua | 6 +- .../tome/data/talents/corruptions/blood.lua | 6 +- .../modules/tome/data/talents/corruptions/bone.lua | 4 +- .../tome/data/talents/corruptions/curses.lua | 2 +- .../tome/data/talents/corruptions/plague.lua | 26 +++++- .../tome/data/talents/corruptions/sanguisuge.lua | 4 +- .../tome/data/talents/corruptions/scourge.lua | 6 +- .../tome/data/talents/corruptions/shadowflame.lua | 2 +- game/modules/tome/data/talents/corruptions/vim.lua | 4 +- game/modules/tome/data/talents/cunning/ambush.lua | 8 +- game/modules/tome/data/talents/cunning/dirty.lua | 4 +- .../tome/data/talents/cunning/lethality.lua | 2 +- game/modules/tome/data/talents/cunning/poisons.lua | 11 ++- .../tome/data/talents/cunning/shadow-magic.lua | 2 +- game/modules/tome/data/talents/cunning/traps.lua | 16 ++-- game/modules/tome/data/talents/cursed/darkness.lua | 6 +- .../tome/data/talents/cursed/endless-hunt.lua | 4 +- .../tome/data/talents/cursed/force-of-will.lua | 6 +- .../tome/data/talents/cursed/primal-magic.lua | 8 +- .../tome/data/talents/cursed/punishments.lua | 7 +- game/modules/tome/data/talents/cursed/rampage.lua | 2 +- .../modules/tome/data/talents/cursed/slaughter.lua | 4 +- game/modules/tome/data/talents/cursed/strife.lua | 2 +- game/modules/tome/data/talents/gifts/antimagic.lua | 4 +- .../modules/tome/data/talents/gifts/cold-drake.lua | 6 +- .../tome/data/talents/gifts/earthen-vines.lua | 4 +- .../modules/tome/data/talents/gifts/fire-drake.lua | 8 +- game/modules/tome/data/talents/gifts/harmony.lua | 3 +- .../modules/tome/data/talents/gifts/sand-drake.lua | 6 +- game/modules/tome/data/talents/gifts/slime.lua | 4 +- .../tome/data/talents/gifts/storm-drake.lua | 6 +- .../tome/data/talents/gifts/summon-distance.lua | 18 ++-- .../tome/data/talents/gifts/summon-melee.lua | 8 +- .../tome/data/talents/gifts/summon-utility.lua | 4 +- game/modules/tome/data/talents/misc/horrors.lua | 14 ++-- .../tome/data/talents/misc/inscriptions.lua | 16 ++-- game/modules/tome/data/talents/misc/misc.lua | 2 +- game/modules/tome/data/talents/misc/npcs.lua | 99 +++++++------------- game/modules/tome/data/talents/misc/races.lua | 2 +- .../data/talents/psionic/augmented-mobility.lua | 2 +- game/modules/tome/data/talents/psionic/focus.lua | 22 ++++- game/modules/tome/data/talents/psionic/grip.lua | 4 +- .../tome/data/talents/psionic/projection.lua | 6 +- .../tome/data/talents/psionic/psi-archery.lua | 6 +- .../tome/data/talents/psionic/psi-fighting.lua | 19 +++- .../modules/tome/data/talents/psionic/voracity.lua | 4 +- .../talents/spells/advanced-necrotic-minions.lua | 2 +- .../tome/data/talents/spells/arcane-shield.lua | 6 +- game/modules/tome/data/talents/spells/arcane.lua | 2 +- game/modules/tome/data/talents/spells/earth.lua | 6 +- .../tome/data/talents/spells/explosives.lua | 10 ++- .../tome/data/talents/spells/fire-alchemy.lua | 8 +- game/modules/tome/data/talents/spells/fire.lua | 8 +- game/modules/tome/data/talents/spells/golem.lua | 14 ++-- game/modules/tome/data/talents/spells/grave.lua | 4 +- game/modules/tome/data/talents/spells/ice.lua | 6 +- game/modules/tome/data/talents/spells/necrosis.lua | 2 +- .../modules/tome/data/talents/spells/nightfall.lua | 6 +- .../tome/data/talents/spells/stone-alchemy.lua | 2 +- game/modules/tome/data/talents/spells/stone.lua | 4 +- game/modules/tome/data/talents/spells/storm.lua | 4 +- game/modules/tome/data/talents/spells/water.lua | 8 +- game/modules/tome/data/talents/spells/wildfire.lua | 4 +- .../tome/data/talents/techniques/2hweapon.lua | 12 +- .../tome/data/talents/techniques/archery.lua | 14 ++-- .../data/talents/techniques/battle-tactics.lua | 2 +- game/modules/tome/data/talents/techniques/bow.lua | 6 +- .../data/talents/techniques/combat-techniques.lua | 2 +- .../tome/data/talents/techniques/dualweapon.lua | 8 +- .../tome/data/talents/techniques/field-control.lua | 2 +- .../data/talents/techniques/finishing-moves.lua | 8 +- .../tome/data/talents/techniques/grappling.lua | 6 +- .../tome/data/talents/techniques/mobility.lua | 2 +- .../tome/data/talents/techniques/pugilism.lua | 6 +- .../modules/tome/data/talents/techniques/sling.lua | 6 +- .../tome/data/talents/techniques/thuggery.lua | 2 +- .../data/talents/techniques/unarmed-discipline.lua | 4 +- .../tome/data/talents/techniques/warcries.lua | 2 +- .../tome/data/talents/techniques/weaponshield.lua | 6 +- game/modules/tome/data/talents/undeads/ghoul.lua | 4 +- 95 files changed, 371 insertions(+), 327 deletions(-) diff --git a/game/modules/tome/ai/tactical.lua b/game/modules/tome/ai/tactical.lua index 096d790..5337659 100644 --- a/game/modules/tome/ai/tactical.lua +++ b/game/modules/tome/ai/tactical.lua @@ -17,7 +17,9 @@ -- Nicolas Casalini "DarkGod" -- darkgod@te4.org -local print = function() end +local DamageType = require "engine.DamageType" + +--local print = function() end -- Internal functions local checkLOS = function(sx, sy, tx, ty) @@ -121,31 +123,49 @@ newAI("use_tactical", function(self) local nb_foes_hit, nb_allies_hit, nb_self_hit = 0, 0, 0 if type(val) == "table" then for damtype, damweight in pairs(val) do + -- Allows a shortcut to just say FIRE instead of DamageType.FIRE in talent's tactical table + damtype = DamageType[damtype] or damtype + -- Checks a weapon's damtype + if damtype == "weapon" then + damtype = (weapon and weapon.damtype) or DamageType.PHYSICAL + end local pen = 0 if self.resists_pen then pen = (self.resists_pen.all or 0) + (self.resists_pen[damtype] or 0) end for i, act in ipairs(foes_hit) do local res = math.min((act.resists.all or 0) + (act.resists[damtype] or 0), (act.resists_cap.all or 0) + (act.resists_cap[damtype] or 0)) res = res * (100 - pen) / 100 + local damweight = type(damweight) == "function" and damweight(self, t, act) or damweight + -- Handles status effect immunity + damweight = damweight * (act:canBe(damtype) and 1 or 0) nb_foes_hit = nb_foes_hit + damweight * (100 - res) / 100 end for i, act in ipairs(self_hit) do local res = math.min((act.resists.all or 0) + (act.resists[damtype] or 0), (act.resists_cap.all or 0) + (act.resists_cap[damtype] or 0)) res = res * (100 - pen) / 100 - nb_self_hit = nb_self_hit + damweight * (100 - res) / 100 * (type(typ.selffire) == "number" and typ.selffire / 100 or 1) + local damweight = type(damweight) == "function" and damweight(self, t, act) or damweight + -- Handles status effect immunity + damweight = damweight * (act:canBe(damtype) and 1 or 0) + nb_self_hit = nb_self_hit + damweight * (100 - res) / 100 end for i, act in ipairs(allies_hit) do local res = math.min((act.resists.all or 0) + (act.resists[damtype] or 0), (act.resists_cap.all or 0) + (act.resists_cap[damtype] or 0)) res = res * (100 - pen) / 100 - nb_allies_hit = nb_allies_hit + damweight * (100 - res) / 100 * (type(typ.friendlyfire) == "number" and typ.friendlyfire / 100 or 1) + local damweight = type(damweight) == "function" and damweight(self, t, act) or damweight + -- Handles status effect immunity + damweight = damweight * (act:canBe(damtype) and 1 or 0) + nb_allies_hit = nb_allies_hit + damweight * (100 - res) / 100 end end val = 1 -- Or assume no resistances else nb_foes_hit = #foes_hit - nb_self_hit = #self_hit * (type(typ.selffire) == "number" and typ.selffire / 100 or 1) - nb_allies_hit = #allies_hit * (type(typ.friendlyfire) == "number" and typ.friendlyfire / 100 or 1) + nb_self_hit = #self_hit + nb_allies_hit = #allies_hit end + -- Apply the selffire and friendlyfire options + nb_self_hit = nb_self_hit * (type(typ.selffire) == "number" and typ.selffire / 100 or 1) + nb_allies_hit = nb_allies_hit * (type(typ.friendlyfire) == "number" and typ.friendlyfire / 100 or 1) -- Use the player set ai_talents weights val = val * (self.ai_talents and self.ai_talents[t.id] or 1) * (1 + lvl / 5) -- Update the weight by the dummy projection data @@ -160,7 +180,7 @@ newAI("use_tactical", function(self) -- Note the addition of a less than one random value, this means the sorting will randomly shift equal values val = ((t.no_energy==true) and val * 10 or val) + rng.float(0, 0.9) avail[tact][#avail[tact]+1] = {val=val, tid=tid, nb_foes_hit=nb_foes_hit, nb_allies_hit=nb_allies_hit, nb_self_hit=nb_self_hit} - print(self.name, self.uid, "tactical ai talents can use", t.name, tid, tact, "weight", avail[tact][#avail[tact]].val) + print(self.name, self.uid, "tactical ai talents can use", t.name, tid, tact, "weight", val) ok = true end end diff --git a/game/modules/tome/data/talents/celestial/circles.lua b/game/modules/tome/data/talents/celestial/circles.lua index 80c9d86..e5fa7c8 100644 --- a/game/modules/tome/data/talents/celestial/circles.lua +++ b/game/modules/tome/data/talents/celestial/circles.lua @@ -25,7 +25,7 @@ newTalent{ points = 5, cooldown = 20, negative = 20, - tactical = { DEFEND = 2, ATTACKAREA = 1 }, + tactical = { DEFEND = 2, ATTACKAREA = {DARKNESS = 1} }, getDamage = function(self, t) return self:combatTalentSpellDamage(t, 4, 30) end, getDuration = function(self, t) return 3 + math.ceil(self:getTalentLevel(t)) end, range = 0, @@ -65,7 +65,7 @@ newTalent{ points = 5, cooldown = 20, positive = 20, - tactical = { DEFEND = 2, ATTACKAREA = 1 }, + tactical = { DEFEND = 2, ATTACKAREA = {FIRE = 0.5, LIGHT = 0.5} }, getDamage = function(self, t) return self:combatTalentSpellDamage(t, 2, 15) end, getDuration = function(self, t) return 3 + math.ceil(self:getTalentLevel(t)) end, range = 0, @@ -147,7 +147,7 @@ newTalent{ cooldown = 20, positive = 20, negative = 20, - tactical = { DEFEND = 2, ATTACKAREA = 1 }, + tactical = { DEFEND = 2, ATTACKAREA = {LIGHT = 0.5, DARKNESS = 0.5} }, getDuration = function(self, t) return 3 + math.ceil(self:getTalentLevel(t)) end, range = 0, radius = function(self, t) diff --git a/game/modules/tome/data/talents/celestial/combat.lua b/game/modules/tome/data/talents/celestial/combat.lua index 7ae3749..71ac66a 100644 --- a/game/modules/tome/data/talents/celestial/combat.lua +++ b/game/modules/tome/data/talents/celestial/combat.lua @@ -121,7 +121,7 @@ newTalent{ points = 5, cooldown = 10, positive = 10, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = {LIGHT = 2} }, range = 1, requires_target = true, getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 1.1, 1.9) end, diff --git a/game/modules/tome/data/talents/celestial/glyphs.lua b/game/modules/tome/data/talents/celestial/glyphs.lua index 369aa83..cc514a2 100644 --- a/game/modules/tome/data/talents/celestial/glyphs.lua +++ b/game/modules/tome/data/talents/celestial/glyphs.lua @@ -165,7 +165,7 @@ newTalent{ points = 5, cooldown = 20, positive = -10, - tactical = { ATTACKAREA = 2 }, + tactical = { ATTACKAREA = {LIGHT = 2} }, requires_target = true, range = function(self, t) return math.floor (self:getTalentLevel(t)) end, getDamage = function(self, t) return 15 + self:combatSpellpower(0.12) * self:getTalentLevel(t) end, diff --git a/game/modules/tome/data/talents/celestial/guardian.lua b/game/modules/tome/data/talents/celestial/guardian.lua index 77152c0..37b47f5 100644 --- a/game/modules/tome/data/talents/celestial/guardian.lua +++ b/game/modules/tome/data/talents/celestial/guardian.lua @@ -59,7 +59,7 @@ newTalent{ points = 5, cooldown = 8, positive = 20, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = {LIGHT = 2} }, requires_target = true, getWeaponDamage = function(self, t) return self:combatTalentWeaponDamage(t, 0.8, 1.3) end, getShieldDamage = function(self, t) return self:combatTalentWeaponDamage(t, 0.8, 1.3, self:getTalentLevel(self.T_SHIELD_EXPERTISE)) end, diff --git a/game/modules/tome/data/talents/celestial/star-fury.lua b/game/modules/tome/data/talents/celestial/star-fury.lua index 0c4ec7d..054e6b4 100644 --- a/game/modules/tome/data/talents/celestial/star-fury.lua +++ b/game/modules/tome/data/talents/celestial/star-fury.lua @@ -25,7 +25,7 @@ newTalent{ random_ego = "attack", cooldown = 3, negative = 10, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = {DARKNESS = 2} }, range = 10, direct_hit = true, reflectable = true, @@ -60,7 +60,7 @@ newTalent{ random_ego = "attack", cooldown = 10, negative = 15, - tactical = { ATTACKAREA = 2 }, + tactical = { ATTACKAREA = {DARKNESS = 2} }, range = 5, radius = 3, direct_hit = true, @@ -111,7 +111,7 @@ newTalent{ cooldown = 7, negative = -20, positive = -10, - tactical = { ATTACKAREA = 1 }, + tactical = { ATTACKAREA = {LIGHT = 1, DARKNESS = 1} }, range = 0, radius = 2, direct_hit = true, @@ -148,7 +148,7 @@ newTalent{ random_ego = "attack", cooldown = 12, negative = 20, - tactical = { ATTACKAREA = 2, DISABLE = 2 }, + tactical = { ATTACKAREA = {DARKNESS = 2}, DISABLE = 2 }, range = 6, radius = function(self, t) return 1 + math.floor(self:getTalentLevelRaw(t) / 3) diff --git a/game/modules/tome/data/talents/celestial/sun.lua b/game/modules/tome/data/talents/celestial/sun.lua index 51a6d5b..3af7947 100644 --- a/game/modules/tome/data/talents/celestial/sun.lua +++ b/game/modules/tome/data/talents/celestial/sun.lua @@ -25,11 +25,8 @@ newTalent{ points = 5, cooldown = 6, positive = -16, - tactical = { - ATTACK = 10, - }, range = 7, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = {LIGHT = 2} }, direct_hit = true, reflectable = true, requires_target = true, @@ -72,7 +69,7 @@ newTalent{ random_ego = "attack", cooldown = 22, positive = -15, - tactical = { ATTACKAREA = 1, DISABLE = 2 }, + tactical = { ATTACKAREA = {LIGHT = 1}, DISABLE = 2 }, direct_hit = true, range = 0, radius = function(self, t) @@ -118,7 +115,7 @@ newTalent{ random_ego = "attack", cooldown = 7, positive = -20, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = {FIRE = 2} }, range = 7, direct_hit = true, requires_target = true, @@ -153,7 +150,7 @@ newTalent{ random_ego = "attack", cooldown = 15, positive = -20, - tactical = { ATTACKAREA = 2 }, + tactical = { ATTACKAREA = {LIGHT = 2} }, range = 0, radius = 3, direct_hit = true, diff --git a/game/modules/tome/data/talents/chronomancy/age-manipulation.lua b/game/modules/tome/data/talents/chronomancy/age-manipulation.lua index 23c144d..e130b21 100644 --- a/game/modules/tome/data/talents/chronomancy/age-manipulation.lua +++ b/game/modules/tome/data/talents/chronomancy/age-manipulation.lua @@ -24,7 +24,7 @@ newTalent{ points = 5, paradox = 5, cooldown = 4, - tactical = { ATTACK = 2, DISABLE = 2 }, + tactical = { ATTACK = {TEMPORAL = 2}, DISABLE = 2 }, range = 10, reflectable = true, requires_target = true, @@ -111,7 +111,7 @@ newTalent{ points = 5, paradox = 20, cooldown = 14, - tactical = { ATTACKAREA = 2 }, + tactical = { ATTACKAREA = {TEMPORAL = 2} }, range = 0, radius = function(self, t) return 3 + math.floor(self:getTalentLevel(t)/4) @@ -191,4 +191,4 @@ newTalent{ The life healed will scale with your Paradox and Spellpower.]]): format(heal, count) end, -} \ No newline at end of file +} diff --git a/game/modules/tome/data/talents/chronomancy/gravity.lua b/game/modules/tome/data/talents/chronomancy/gravity.lua index cb601c3..513c7dc 100644 --- a/game/modules/tome/data/talents/chronomancy/gravity.lua +++ b/game/modules/tome/data/talents/chronomancy/gravity.lua @@ -24,7 +24,7 @@ newTalent{ points = 5, paradox = 5, cooldown = 4, - tactical = { ATTACKAREA = 2, ESCAPE = 2 }, + tactical = { ATTACKAREA = {PHYSICAL = 2}, ESCAPE = 2 }, range = 0, radius = function(self, t) return 4 + math.floor(self:getTalentLevelRaw (t)/2) @@ -60,7 +60,7 @@ newTalent{ points = 5, paradox = 10, cooldown = 6, - tactical = { ATTACKAREA = 2, DISABLE = 2 }, + tactical = { ATTACKAREA = {PHYSICAL = 2}, DISABLE = 2 }, range = 10, radius = function(self, t) return 2 + math.floor(self:getTalentLevel(t) / 3) @@ -107,7 +107,7 @@ newTalent{ points = 5, paradox = 15, cooldown = 14, - tactical = { ATTACKAREA = 2, ESCAPE = 2 }, + tactical = { ATTACKAREA = {PHYSICAL = 2}, ESCAPE = 2 }, range = 0, radius = function(self, t) return 1 + math.floor(self:getTalentLevel(t)/2) @@ -153,7 +153,7 @@ newTalent{ points = 5, paradox = 20, cooldown = 24, - tactical = { ATTACKAREA = 2, DISABLE = 2 }, + tactical = { ATTACKAREA = {PHYSICAL = 2}, DISABLE = 2 }, range = 10, radius = function(self, t) return 2 + math.floor(self:getTalentLevel(t) / 2) diff --git a/game/modules/tome/data/talents/chronomancy/matter.lua b/game/modules/tome/data/talents/chronomancy/matter.lua index 93372e3..0ba31c6 100644 --- a/game/modules/tome/data/talents/chronomancy/matter.lua +++ b/game/modules/tome/data/talents/chronomancy/matter.lua @@ -24,7 +24,7 @@ newTalent{ points = 5, paradox = 5, cooldown = 3, - tactical = { ATTACKAREA = 2 }, + tactical = { ATTACKAREA = {TEMPORAL = 1, PHYSICAL = 1} }, range = 10, direct_hit = true, reflectable = true, @@ -146,7 +146,7 @@ newTalent{ points = 5, paradox = 20, cooldown = 4, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = {TEMPORAL = 1, PHYSICAL = 1} }, range = 10, direct_hit = true, reflectable = true, diff --git a/game/modules/tome/data/talents/chronomancy/spacetime-folding.lua b/game/modules/tome/data/talents/chronomancy/spacetime-folding.lua index fd21e2a..8dfba9e 100644 --- a/game/modules/tome/data/talents/chronomancy/spacetime-folding.lua +++ b/game/modules/tome/data/talents/chronomancy/spacetime-folding.lua @@ -141,7 +141,7 @@ newTalent{ random_ego = "attack", paradox = 10, cooldown = 10, - tactical = { ATTACK = 1, CLOSEIN = 2 }, + tactical = { ATTACK = {TEMPORAL = 1}, CLOSEIN = 2 }, direct_hit = true, reflectable = true, requires_target = true, diff --git a/game/modules/tome/data/talents/chronomancy/speed-control.lua b/game/modules/tome/data/talents/chronomancy/speed-control.lua index 140afac..542b354 100644 --- a/game/modules/tome/data/talents/chronomancy/speed-control.lua +++ b/game/modules/tome/data/talents/chronomancy/speed-control.lua @@ -85,7 +85,7 @@ newTalent{ points = 5, paradox = 15, cooldown = 24, - tactical = { ATTACKAREA = 2, DISABLE = 2 }, + tactical = { ATTACKAREA = {TEMPORAL = 2}, DISABLE = 2 }, range = 6, radius = function(self, t) return 2 + math.floor(self:getTalentLevel(t)/4) diff --git a/game/modules/tome/data/talents/chronomancy/temporal-archery.lua b/game/modules/tome/data/talents/chronomancy/temporal-archery.lua index 4e42111..d03174a 100644 --- a/game/modules/tome/data/talents/chronomancy/temporal-archery.lua +++ b/game/modules/tome/data/talents/chronomancy/temporal-archery.lua @@ -26,7 +26,7 @@ newTalent{ cooldown = 3, no_energy = "fake", range = 10, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = {TEMPORAL = 2} }, on_pre_use = function(self, t, silent) if not self:hasArcheryWeapon() then if not silent then game.logPlayer(self, "You require a bow or sling for this talent.") end return false end return true end, requires_target = true, action = function(self, t) @@ -53,7 +53,7 @@ newTalent{ cooldown = 8, no_energy = "fake", range = 10, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = {PHYSICAL = 2} }, on_pre_use = function(self, t, silent) if not self:hasArcheryWeapon() then if not silent then game.logPlayer(self, "You require a bow or sling for this talent.") end return false end return true end, requires_target = true, action = function(self, t) @@ -113,7 +113,7 @@ newTalent{ cooldown = function(self, t) return 15 - 2 * self:getTalentLevelRaw(t) end, no_energy = true, range = 10, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = {PHYSICAL = 2} }, on_pre_use = function(self, t, silent) if not self:hasArcheryWeapon() then if not silent then game.logPlayer(self, "You require a bow or sling for this talent.") end return false end return true end, requires_target = true, action = function(self, t) @@ -129,4 +129,4 @@ newTalent{ return ([[You pause time around you long enough to fire a single shot, doing %d%% damage. The damage will scale with your Paradox and the cooldown will go down with more talent points invested.]]):format(weapon) end, -} \ No newline at end of file +} diff --git a/game/modules/tome/data/talents/chronomancy/timeline-threading.lua b/game/modules/tome/data/talents/chronomancy/timeline-threading.lua index 896d99e..8443021 100644 --- a/game/modules/tome/data/talents/chronomancy/timeline-threading.lua +++ b/game/modules/tome/data/talents/chronomancy/timeline-threading.lua @@ -48,7 +48,7 @@ newTalent{ points = 5, paradox = 5, cooldown = 6, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = {TEMPORAL = 2} }, range = 10, direct_hit = true, reflectable = true, diff --git a/game/modules/tome/data/talents/chronomancy/timetravel.lua b/game/modules/tome/data/talents/chronomancy/timetravel.lua index ea0e554..7daaa7b 100644 --- a/game/modules/tome/data/talents/chronomancy/timetravel.lua +++ b/game/modules/tome/data/talents/chronomancy/timetravel.lua @@ -58,7 +58,7 @@ newTalent{ points = 5, cooldown = 6, paradox = 5, - tactical = { ATTACK = 1, DISABLE = 2 }, + tactical = { ATTACK = {TEMPORAL = 1}, DISABLE = 2 }, range = 6, direct_hit = true, reflectable = true, @@ -124,7 +124,7 @@ newTalent{ points = 5, paradox = 10, cooldown = 6, - tactical = { ATTACKAREA = 2 }, + tactical = { ATTACKAREA = {TEMPORAL = 2} }, range = 0, radius = function(self, t) return 1 + self:getTalentLevelRaw(t) @@ -303,4 +303,4 @@ newTalent{ return ([[Casting Revision will return you to the point in time you created a temporal marker using Door to the Past.]]) :format() end, -}]=] \ No newline at end of file +}]=] diff --git a/game/modules/tome/data/talents/corruptions/blight.lua b/game/modules/tome/data/talents/corruptions/blight.lua index 6015854..5a29347 100644 --- a/game/modules/tome/data/talents/corruptions/blight.lua +++ b/game/modules/tome/data/talents/corruptions/blight.lua @@ -53,7 +53,7 @@ newTalent{ vim = 30, range = 10, radius = 3, - tactical = { DISABLE = 2 }, + tactical = { ATTACKAREA = {BLIGHT = 1}, DISABLE = 2 }, requires_target = true, target = function(self, t) return {type="ball", radius=self:getTalentRadius(t), range=self:getTalentRange(t), talent=t} @@ -118,7 +118,7 @@ newTalent{ cooldown = 10, vim = 12, range = 10, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = {ACID = 2} }, requires_target = true, action = function(self, t) local tg = {type="hit", range=self:getTalentRange(t), talent=t} @@ -149,7 +149,7 @@ newTalent{ cooldown = 30, range = 0, radius = 4, - tactical = { ATTACKAREA = 2 }, + tactical = { ATTACKAREA = {NATURE = 2} }, target = function(self, t) return {type="ball", range=self:getTalentRange(t), radius=self:getTalentRadius(t)} end, diff --git a/game/modules/tome/data/talents/corruptions/blood.lua b/game/modules/tome/data/talents/corruptions/blood.lua index fc19953..e3a1034 100644 --- a/game/modules/tome/data/talents/corruptions/blood.lua +++ b/game/modules/tome/data/talents/corruptions/blood.lua @@ -24,7 +24,7 @@ newTalent{ points = 5, cooldown = 7, vim = 24, - tactical = { ATTACKAREA = 2 }, + tactical = { ATTACKAREA = {BLIGHT = 2} }, range = 0, radius = function(self, t) return math.ceil(3 + self:getTalentLevel(t)) @@ -65,7 +65,7 @@ newTalent{ vim = 20, range = 10, proj_speed = 20, - tactical = { ATTACK = 2, HEAL = 2 }, + tactical = { ATTACK = {BLIGHT = 2}, HEAL = 2 }, requires_target = true, target = function(self, t) return {type="bolt", range=self:getTalentRange(t), talent=t, display={particle="bolt_blood"}} @@ -91,7 +91,7 @@ newTalent{ points = 5, cooldown = 12, vim = 30, - tactical = { ATTACKAREA = 2, DISABLE = 2 }, + tactical = { ATTACKAREA = {BLIGHT = 2}, DISABLE = 2 }, range = 0, radius = function(self, t) return 2 + self:getTalentLevelRaw(t) diff --git a/game/modules/tome/data/talents/corruptions/bone.lua b/game/modules/tome/data/talents/corruptions/bone.lua index 7fa0937..af9bf74 100644 --- a/game/modules/tome/data/talents/corruptions/bone.lua +++ b/game/modules/tome/data/talents/corruptions/bone.lua @@ -26,7 +26,7 @@ newTalent{ cooldown = 4, range = 10, random_ego = "attack", - tactical = { ATTACK = 2 }, + tactical = { ATTACK = {PHYSICAL = 2} }, direct_hit = true, requires_target = true, target = function(self, t) @@ -95,7 +95,7 @@ newTalent{ points = 5, vim = 25, cooldown = 12, - tactical = { ATTACKAREA = 2 }, + tactical = { ATTACKAREA = {PHYSICAL = 2} }, random_ego = "attack", radius = function(self, t) return self:getTalentLevelRaw(t) diff --git a/game/modules/tome/data/talents/corruptions/curses.lua b/game/modules/tome/data/talents/corruptions/curses.lua index 0570c93..34de8b9 100644 --- a/game/modules/tome/data/talents/corruptions/curses.lua +++ b/game/modules/tome/data/talents/corruptions/curses.lua @@ -83,7 +83,7 @@ newTalent{ cooldown = 20, vim = 20, range = 10, - tactical = { ATTACK = 2, DISABLE = 1 }, + tactical = { ATTACK = {DARKNESS = 2}, DISABLE = 1 }, direct_hit = true, requires_target = true, action = function(self, t) diff --git a/game/modules/tome/data/talents/corruptions/plague.lua b/game/modules/tome/data/talents/corruptions/plague.lua index 4e1f773..482b2ad 100644 --- a/game/modules/tome/data/talents/corruptions/plague.lua +++ b/game/modules/tome/data/talents/corruptions/plague.lua @@ -25,7 +25,7 @@ newTalent{ vim = 8, cooldown = 3, random_ego = "attack", - tactical = { ATTACK = 2 }, + tactical = { ATTACK = {BLIGHT = 2} }, requires_target = true, range = function(self, t) return 4 + math.floor(self:getTalentLevel(t)) end, action = function(self, t) @@ -69,7 +69,17 @@ newTalent{ radius = function(self, t) return 1 + math.floor(self:getTalentLevelRaw(t) / 2) end, - tactical = { ATTACK = 1 }, + tactical = { ATTACK = function(self, t, target) + -- Count the number of diseases on the target + local val = 0 + for eff_id, p in pairs(target.tmp) do + local e = target.tempeffect_def[eff_id] + if e.subtype.disease then + val = val + 1 + end + end + return val + end }, requires_target = true, target = function(self, t) -- Target trying to combine the bolt and the ball disease spread @@ -134,7 +144,15 @@ newTalent{ cooldown = 15, range = 6, radius = 2, - tactical = { DISABLE = 1 }, + tactical = { DISABLE = function(self, t, target) + -- Make sure the target has a disease + for eff_id, p in pairs(target.tmp) do + local e = target.tempeffect_def[eff_id] + if e.subtype.disease then + return 2 + end + end + end }, direct_hit = true, requires_target = true, target = function(self, t) @@ -192,7 +210,7 @@ newTalent{ cooldown = 13, range = 6, radius = 2, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = {BLIGHT = 2} }, requires_target = true, do_spread = function(self, t, carrier) -- List all diseases diff --git a/game/modules/tome/data/talents/corruptions/sanguisuge.lua b/game/modules/tome/data/talents/corruptions/sanguisuge.lua index a1f5a6d..c88f080 100644 --- a/game/modules/tome/data/talents/corruptions/sanguisuge.lua +++ b/game/modules/tome/data/talents/corruptions/sanguisuge.lua @@ -26,7 +26,7 @@ newTalent{ cooldown = 9, reflectable = true, proj_speed = 15, - tactical = { ATTACK = 2, VIM = 2 }, + tactical = { ATTACK = {BLIGHT = 2}, VIM = 2 }, requires_target = true, range = function(self, t) return 4 + self:getTalentLevelRaw(t) end, action = function(self, t) @@ -126,7 +126,7 @@ newTalent{ cooldown = 20, range = 10, no_energy = true, - tactical = { ATTACK = 2 }, + tactical = { BUFF = 2 }, action = function(self, t) self:setEffect(self.EFF_LIFE_TAP, 7, {power=math.ceil(6 + self:getTalentLevel(t) * 2)}) game:playSoundNear(self, "talents/spell_generic2") diff --git a/game/modules/tome/data/talents/corruptions/scourge.lua b/game/modules/tome/data/talents/corruptions/scourge.lua index 0d7ec63..fcafd78 100644 --- a/game/modules/tome/data/talents/corruptions/scourge.lua +++ b/game/modules/tome/data/talents/corruptions/scourge.lua @@ -25,7 +25,7 @@ newTalent{ vim = 9, cooldown = 6, range = 1, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = {PHYSICAL = 2} }, requires_target = true, action = function(self, t) local weapon, offweapon = self:hasDualWeapon() @@ -103,7 +103,7 @@ newTalent{ range = 0, radius = 1, requires_target = true, - tactical = { ATTACK = 2, DISABLE = 1 }, + tactical = { ATTACK = {ACID = 2}, DISABLE = 1 }, target = function(self, t) -- Tries to simulate the acid splash return {type="ballbolt", range=1, radius=self:getTalentRadius(t), selffire=false, talent=t} @@ -149,7 +149,7 @@ newTalent{ cooldown = 8, range = 1, requires_target = true, - tactical = { ATTACK = 2, DISABLE = 2 }, + tactical = { ATTACK = {DARKNESS = 1, BLIGHT = 1}, DISABLE = 2 }, action = function(self, t) local weapon, offweapon = self:hasDualWeapon() if not weapon then diff --git a/game/modules/tome/data/talents/corruptions/shadowflame.lua b/game/modules/tome/data/talents/corruptions/shadowflame.lua index c837c1e..121dd58 100644 --- a/game/modules/tome/data/talents/corruptions/shadowflame.lua +++ b/game/modules/tome/data/talents/corruptions/shadowflame.lua @@ -50,7 +50,7 @@ newTalent{ return 1 + self:getTalentLevelRaw(t) end, proj_speed = 4, - tactical = { ATTACKAREA = 2 }, + tactical = { ATTACKAREA = {FIRE = 1, DARKNESS = 1} }, direct_hit = true, requires_target = true, target = function(self, t) diff --git a/game/modules/tome/data/talents/corruptions/vim.lua b/game/modules/tome/data/talents/corruptions/vim.lua index 7c88118..f8c4ae2 100644 --- a/game/modules/tome/data/talents/corruptions/vim.lua +++ b/game/modules/tome/data/talents/corruptions/vim.lua @@ -26,7 +26,7 @@ newTalent{ vim = 10, range = 10, proj_speed = 10, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = {BLIGHT = 2} }, requires_target = true, action = function(self, t) local tg = {type="bolt", range=self:getTalentRange(t), talent=t, display={particle="bolt_slime"}} @@ -93,7 +93,7 @@ newTalent{ points = 5, vim = 30, cooldown = 15, - tactical = { ATTACKAREA = 1, DISABLE = 2, ESCAPE = 2 }, + tactical = { ATTACKAREA = {BLIGHT = 1}, DISABLE = 2, ESCAPE = 2 }, range = 7, action = function(self, t) local tg = {type="ball", radius=3, range=self:getTalentRange(t), talent=t} diff --git a/game/modules/tome/data/talents/cunning/ambush.lua b/game/modules/tome/data/talents/cunning/ambush.lua index 76070cf..b3118f5 100644 --- a/game/modules/tome/data/talents/cunning/ambush.lua +++ b/game/modules/tome/data/talents/cunning/ambush.lua @@ -28,7 +28,7 @@ newTalent{ stamina = 15, mana = 15, range = 1, - tactical = { DISABLE = 2 }, + tactical = { DISABLE = {disarm = 2} }, requires_target = true, getDuration = function(self, t) return 1 + math.ceil(self:getTalentLevel(t)) end, action = function(self, t) @@ -62,7 +62,7 @@ newTalent{ stamina = 15, mana = 15, range = 7, - tactical = { DISABLE = 2, CLOSEIN = 2 }, + tactical = { DISABLE = {silence = 2}, CLOSEIN = 2 }, requires_target = true, getDuration = function(self, t) return 1 + math.ceil(self:getTalentLevel(t)) end, action = function(self, t) @@ -105,7 +105,7 @@ newTalent{ mana = 35, require = cuns_req_high3, requires_target = true, - tactical = { ATTACK = 3 }, + tactical = { ATTACK = {DARKNESS = 3} }, getStealthPower = function(self, t) return 25 + self:getCun(15, true) * self:getTalentLevel(t) end, getDuration = function(self, t) return math.floor(3 + self:getTalentLevel(t)) end, getHealth = function(self, t) return 0.2 + self:combatTalentSpellDamage(t, 20, 500) / 1000 end, @@ -203,7 +203,7 @@ newTalent{ require = cuns_req_high4, requires_target = true, range = 5, - tactical = { ATTACK = 2, DEFEND = 1 }, + tactical = { ATTACK = {DARKNESS = 2}, DEFEND = 1 }, getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 0.9, 2) end, getDuration = function(self, t) return 3 + math.ceil(self:getTalentLevel(t)) end, getDamageRes = function(self, t) return 10 + self:getTalentLevel(t) * 5 end, diff --git a/game/modules/tome/data/talents/cunning/dirty.lua b/game/modules/tome/data/talents/cunning/dirty.lua index bdf82a5..d55bed1 100644 --- a/game/modules/tome/data/talents/cunning/dirty.lua +++ b/game/modules/tome/data/talents/cunning/dirty.lua @@ -26,7 +26,7 @@ newTalent{ random_ego = "attack", cooldown = 12, stamina = 10, - tactical = { DISABLE = 2, ATTACK = 0.5 }, + tactical = { DISABLE = {stun = 2}, ATTACK = {weapon = 0.5} }, require = cuns_req1, requires_target = true, getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 0.2, 0.7) end, @@ -121,7 +121,7 @@ newTalent{ stamina = 30, require = cuns_req4, requires_target = true, - tactical = { DISABLE = 2, ATTACK = 2 }, + tactical = { DISABLE = 2, ATTACK = {weapon = 2} }, getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 0.9, 1.4) end, getDuration = function(self, t) return 3 + math.ceil(self:getTalentLevel(t)) end, getAttackPenalty = function(self, t) return 5 + self:combatTalentStatDamage(t, "cun", 10, 60) end, diff --git a/game/modules/tome/data/talents/cunning/lethality.lua b/game/modules/tome/data/talents/cunning/lethality.lua index d4a882a..2952641 100644 --- a/game/modules/tome/data/talents/cunning/lethality.lua +++ b/game/modules/tome/data/talents/cunning/lethality.lua @@ -46,7 +46,7 @@ newTalent{ cooldown = 12, stamina = 15, require = cuns_req2, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = {weapon = 2} }, no_energy = true, requires_target = true, getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 0.8, 1.4) end, diff --git a/game/modules/tome/data/talents/cunning/poisons.lua b/game/modules/tome/data/talents/cunning/poisons.lua index 8599cd2..9c019bb 100644 --- a/game/modules/tome/data/talents/cunning/poisons.lua +++ b/game/modules/tome/data/talents/cunning/poisons.lua @@ -84,7 +84,14 @@ newTalent{ stamina = 7, require = cuns_req_high2, requires_target = true, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = function(self, t, target) + local nb = 0 + for eff_id, p in pairs(target.tmp) do + local e = target.tempeffect_def[eff_id] + if e.subtype.poison then nb = nb + 1 end + end + return { NATURE = nb} + end }, action = function(self, t) local tg = {type="hit", range=self:getTalentRange(t)} local x, y, target = self:getTarget(tg) @@ -125,7 +132,7 @@ newTalent{ require = cuns_req_high3, requires_target = true, no_energy = true, - tactical = { ATTACK = 1 }, + tactical = { ATTACK = {NATURE = 1} }, action = function(self, t) local tg = {type="hit", range=self:getTalentRange(t)} local x, y, target = self:getTarget(tg) diff --git a/game/modules/tome/data/talents/cunning/shadow-magic.lua b/game/modules/tome/data/talents/cunning/shadow-magic.lua index dd52df2..8bb7bec 100644 --- a/game/modules/tome/data/talents/cunning/shadow-magic.lua +++ b/game/modules/tome/data/talents/cunning/shadow-magic.lua @@ -91,7 +91,7 @@ newTalent{ cooldown = 5, stamina = 30, require = cuns_req4, - tactical = { CLOSEIN = 2, DISABLE = 1 }, + tactical = { CLOSEIN = 2, DISABLE = { stun = 1 } }, range = function(self, t) return math.floor(5 + self:getTalentLevel(t)) end, direct_hit = true, requires_target = true, diff --git a/game/modules/tome/data/talents/cunning/traps.lua b/game/modules/tome/data/talents/cunning/traps.lua index 94fdca2..f365ec1 100644 --- a/game/modules/tome/data/talents/cunning/traps.lua +++ b/game/modules/tome/data/talents/cunning/traps.lua @@ -159,7 +159,7 @@ newTalent{ proj_speed = 10, requires_target = true, range = 10, - tactical = { DISABLE = 2 }, + tactical = { DISABLE = { blind = 2 } }, action = function(self, t) local tg = {type="bolt", range=self:getTalentRange(t), talent=t} local x, y = self:getTarget(tg) @@ -222,7 +222,7 @@ newTalent{ stamina = 15, requires_target = true, range = trap_range, - tactical = { ATTACKAREA = 2 }, + tactical = { ATTACKAREA = { FIRE = 2 } }, action = function(self, t) local tg = {type="bolt", nowarning=true, range=self:getTalentRange(t), nolock=true, talent=t} local x, y, target = self:getTarget(tg) @@ -267,7 +267,7 @@ newTalent{ stamina = 10, requires_target = true, range = trap_range, - tactical = { DISABLE = 2 }, + tactical = { DISABLE = { pin = 2 } }, action = function(self, t) local tg = {type="bolt", nowarning=true, range=self:getTalentRange(t), nolock=true, talent=t} local x, y, target = self:getTarget(tg) @@ -315,7 +315,7 @@ newTalent{ cooldown = 10, stamina = 15, requires_target = true, - tactical = { DISABLE = 2 }, + tactical = { DISABLE = { stun = 2 } }, range = trap_range, action = function(self, t) local tg = {type="bolt", nowarning=true, range=self:getTalentRange(t), nolock=true, talent=t} @@ -370,7 +370,7 @@ newTalent{ cooldown = 25, stamina = 25, requires_target = true, - tactical = { DISABLE = 2 }, + tactical = { DISABLE = { disarm = 2 } }, range = trap_range, action = function(self, t) local tg = {type="bolt", nowarning=true, range=self:getTalentRange(t), nolock=true, talent=t} @@ -415,7 +415,7 @@ newTalent{ points = 1, cooldown = 8, stamina = 15, - tactical = { DISABLE = 2 }, + tactical = { DISABLE = { stun = 2 } }, requires_target = true, range = trap_range, action = function(self, t) @@ -462,7 +462,7 @@ newTalent{ points = 1, cooldown = 12, stamina = 12, - tactical = { DISABLE = 2 }, + tactical = { DISABLE = { blind = 1, stun = 1 } }, requires_target = true, range = trap_range, action = function(self, t) @@ -517,7 +517,7 @@ newTalent{ points = 1, cooldown = 10, stamina = 12, - tactical = { ATTACKAREA = 2 }, + tactical = { ATTACKAREA = { poison = 2 } }, requires_target = true, range = trap_range, action = function(self, t) diff --git a/game/modules/tome/data/talents/cursed/darkness.lua b/game/modules/tome/data/talents/cursed/darkness.lua index 5ed215c..8bcab2e 100644 --- a/game/modules/tome/data/talents/cursed/darkness.lua +++ b/game/modules/tome/data/talents/cursed/darkness.lua @@ -148,7 +148,7 @@ newTalent{ hate = 1.5, range = 5, radius = 3, - tactical = { ATTACK = 1, DISABLE = 2 }, + tactical = { ATTACK = { DARKNESS = 1 }, DISABLE = 2 }, requires_target = true, -- implementation of creeping darkness..used in various locations, but stored here @@ -356,7 +356,7 @@ newTalent{ random_ego = "attack", hate = 0.8, cooldown = 6, - tactical = { ATTACK = 2, DISABLE = 1 }, + tactical = { ATTACK = { DARKNESS = 2 }, DISABLE = { blind = 1 } }, range = 5, direct_hit = true, reflectable = true, @@ -409,7 +409,7 @@ newTalent{ cooldown = 10, hate = 1.2, range = 6, - tactical = { ATTACK = 2, DISABLE = 2 }, + tactical = { ATTACK = { DARKNESS = 2 }, DISABLE = { pin = 2 } }, direct_hit = true, requires_target = true, getPinDuration = function(self, t) diff --git a/game/modules/tome/data/talents/cursed/endless-hunt.lua b/game/modules/tome/data/talents/cursed/endless-hunt.lua index 86598a6..376360e 100644 --- a/game/modules/tome/data/talents/cursed/endless-hunt.lua +++ b/game/modules/tome/data/talents/cursed/endless-hunt.lua @@ -145,7 +145,7 @@ newTalent{ random_ego = "attack", cooldown = 6, hate = 0.5, - tactical = { ATTACK = 3 }, + tactical = { ATTACK = { PHYSICAL = 3 } }, getCooldownDuration = function(self, t) return 3 + math.floor(self:getTalentLevel(t) * 0.75) end, @@ -255,4 +255,4 @@ newTalent{ return ([[Let hate fuel your movements. While active you gain %d%% movement speed. The recklessness of your movement brings you bad luck (luck -3). Cleave, repel and parry cannot be activate simultaneously and activating one will place the others in cooldown. The speed of your movements combined with the balance and utility of two weapons gives you %d extra defense while dual-wielding. Movement speed and dual-wielding defense increase with with the Willpower stat.]]):format(movementSpeedChange * 100, defenseChange) end, -} \ No newline at end of file +} diff --git a/game/modules/tome/data/talents/cursed/force-of-will.lua b/game/modules/tome/data/talents/cursed/force-of-will.lua index eb924c0..7249626 100644 --- a/game/modules/tome/data/talents/cursed/force-of-will.lua +++ b/game/modules/tome/data/talents/cursed/force-of-will.lua @@ -103,7 +103,7 @@ newTalent{ random_ego = "attack", cooldown = 4, hate = 0.5, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { PHYSICAL = 2 } }, direct_hit = true, requires_target = true, range = function(self, t) @@ -210,7 +210,7 @@ newTalent{ points = 5, random_ego = "attack", cooldown = 14, - tactical = { ATTACKAREA = 2 }, + tactical = { ATTACKAREA = { PHYSICAL = 2 }, DISABLE = { stun = 1 } }, requires_target = true, hate = 1.5, range = function(self, t) @@ -282,7 +282,7 @@ newTalent{ points = 5, hate = 3, cooldown = 50, - tactical = { ATTACKAREA = 2 }, + tactical = { ATTACKAREA = { PHYSICAL = 2 } }, range = function(self, t) return math.floor(4 + self:getTalentLevel(t) / 2.3) end, diff --git a/game/modules/tome/data/talents/cursed/primal-magic.lua b/game/modules/tome/data/talents/cursed/primal-magic.lua index 069e3fd..7e17b71 100644 --- a/game/modules/tome/data/talents/cursed/primal-magic.lua +++ b/game/modules/tome/data/talents/cursed/primal-magic.lua @@ -35,7 +35,7 @@ newTalent{ hate = 0.8, range = 6, proj_speed = 4, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { ARCANE = 2 } }, getDamage = function(self, t) return combatTalentDamage(self, t, 0, 125) end, @@ -107,7 +107,9 @@ newTalent{ cooldown = function(self, t) return 20 - math.floor(self:getTalentLevel(t) * 1.5) end, hate = 0.5, range = 3, - tactical = { ESCAPE = 2 }, + tactical = { ESCAPE = function(self, t, target) + return 2 * self:canBe("teleport") + end }, action = function(self, t) local x, y = self.x, self.y local range = self:getTalentRange(t) @@ -161,7 +163,7 @@ newTalent{ random_ego = "attack", hate = 3, cooldown = 30, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { ARCANE = 2 } }, range = 10, proj_speed = 20, requires_target = true, diff --git a/game/modules/tome/data/talents/cursed/punishments.lua b/game/modules/tome/data/talents/cursed/punishments.lua index 5f15402..661d4b4 100644 --- a/game/modules/tome/data/talents/cursed/punishments.lua +++ b/game/modules/tome/data/talents/cursed/punishments.lua @@ -34,7 +34,7 @@ newTalent{ cooldown = 3, hate = 0.5, range = 3, - tactical = { ATTACKAREA = 2 }, + tactical = { ATTACKAREA = { MIND = 2 } }, getDamage = function(self, t) return combatTalentDamage(self, t, 10, 350) end, @@ -83,7 +83,7 @@ newTalent{ cooldown = 10, hate = 0.8, range = 7, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { MIND = 2 } }, direct_hit = true, requires_target = true, getDuration = function(self, t) @@ -261,7 +261,7 @@ newTalent{ cooldown = 3, hate = 0.5, range = 7, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { MIND = 2 } }, direct_hit = true, requires_target = true, getDuration = function(self, t) @@ -307,7 +307,6 @@ newTalent{ mode = "passive", require = cursed_wil_req4, points = 5, - tactical = { ATTACK = 2 }, getMindpower = function(self, t) return math.sqrt(self:getTalentLevel(t)) * 0.4 * combatPower(self, t) end, diff --git a/game/modules/tome/data/talents/cursed/rampage.lua b/game/modules/tome/data/talents/cursed/rampage.lua index b796c81..c15da83 100644 --- a/game/modules/tome/data/talents/cursed/rampage.lua +++ b/game/modules/tome/data/talents/cursed/rampage.lua @@ -22,7 +22,7 @@ newTalent{ type = {"cursed/rampage", 1}, require = cursed_str_req1, points = 5, - tactical = { ATTACK = 3 }, + tactical = { ATTACK = { PHYSICAL = 3 } }, cooldown = function(self, t) local tReflexes = self:getTalentFromId(self.T_REFLEXES) if tReflexes then diff --git a/game/modules/tome/data/talents/cursed/slaughter.lua b/game/modules/tome/data/talents/cursed/slaughter.lua index b36f1d8..b555523 100644 --- a/game/modules/tome/data/talents/cursed/slaughter.lua +++ b/game/modules/tome/data/talents/cursed/slaughter.lua @@ -27,7 +27,7 @@ newTalent{ random_ego = "attack", cooldown = 8, hate = 0.2, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { PHYSICAL = 2 } }, requires_target = true, getDamageMultiplier = function(self, t, hate) return 1 + self:combatTalentIntervalDamage(t, "str", 0.3, 1.5, 0.4) * getHateMultiplier(self, 0.3, 1, true, hate) @@ -87,7 +87,7 @@ newTalent{ type = {"cursed/slaughter", 2}, require = cursed_str_req2, points = 5, - tactical = { ATTACKAREA = 2 }, + tactical = { ATTACKAREA = { PHYSICAL = 2 } }, random_ego = "attack", cooldown = 12, hate = 0.2, diff --git a/game/modules/tome/data/talents/cursed/strife.lua b/game/modules/tome/data/talents/cursed/strife.lua index c46b240..36b5080 100644 --- a/game/modules/tome/data/talents/cursed/strife.lua +++ b/game/modules/tome/data/talents/cursed/strife.lua @@ -226,7 +226,7 @@ newTalent{ cooldown = function(self, t) return math.max(6, 13 - math.floor(self:getTalentLevel(t))) end, hate = 0.4, range = 6, - tactical = { CLOSEIN = 2, ATTACK = 1 }, + tactical = { CLOSEIN = 2, ATTACK = { PHYSICAL = 0.5 } }, requires_target = true, getDefenseChange = function(self, t) return self:combatTalentStatDamage(t, "str", 20, 50) diff --git a/game/modules/tome/data/talents/gifts/antimagic.lua b/game/modules/tome/data/talents/gifts/antimagic.lua index 446346a..cdf3c20 100644 --- a/game/modules/tome/data/talents/gifts/antimagic.lua +++ b/game/modules/tome/data/talents/gifts/antimagic.lua @@ -55,7 +55,7 @@ newTalent{ points = 5, equilibrium = 20, cooldown = 10, - tactical = { DISABLE = 4 }, + tactical = { DISABLE = { silence = 4 } }, radius = function(self, t) return 4 + self:getTalentLevel(t) * 1.5 end, target = function(self, t) return {type="ball", range=self:getTalentRange(t), radius=self:getTalentRadius(t), selffire=true, talent=t} @@ -126,7 +126,7 @@ newTalent{ equilibrium = 10, cooldown = 10, range = 10, - tactical = { ATTACK = 3 }, + tactical = { ATTACK = { ARCANE = 3 } }, action = function(self, t) local tg = {type="bolt", range=self:getTalentRange(t), talent=t} local x, y = self:getTarget(tg) diff --git a/game/modules/tome/data/talents/gifts/cold-drake.lua b/game/modules/tome/data/talents/gifts/cold-drake.lua index 50cf5d1..c70a1ad 100644 --- a/game/modules/tome/data/talents/gifts/cold-drake.lua +++ b/game/modules/tome/data/talents/gifts/cold-drake.lua @@ -28,7 +28,7 @@ newTalent{ equilibrium = 3, cooldown = 7, range = 1, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { COLD = 2 } }, requires_target = true, action = function(self, t) local tg = {type="hit", range=self:getTalentRange(t)} @@ -52,7 +52,7 @@ newTalent{ cooldown = 10, sustain_equilibrium = 30, range = 10, - tactical = { ATTACK = 2, DEFEND = 2 }, + tactical = { ATTACK = { COLD = 1 }, DEFEND = 2 }, activate = function(self, t) return { onhit = self:addTemporaryValue("on_melee_hit", {[DamageType.COLD]=5 * self:getTalentLevel(t)}), @@ -129,7 +129,7 @@ newTalent{ equilibrium = 12, cooldown = 12, message = "@Source@ breathes ice!", - tactical = { ATTACKAREA = {[DamageType.COLD] = 2}, DISABLE = 1 }, + tactical = { ATTACKAREA = { COLD = 2 }, DISABLE = { stun = 1 } }, range = 0, radius = function(self, t) return 4 + self:getTalentLevelRaw(t) end, direct_hit = true, diff --git a/game/modules/tome/data/talents/gifts/earthen-vines.lua b/game/modules/tome/data/talents/gifts/earthen-vines.lua index 34f4e5c..e4acaf4 100644 --- a/game/modules/tome/data/talents/gifts/earthen-vines.lua +++ b/game/modules/tome/data/talents/gifts/earthen-vines.lua @@ -25,7 +25,7 @@ newTalent{ mode = "sustained", sustain_equilibrium = 15, cooldown = 30, - tactical = { ATTACK = 2, BUFF = 2, DISABLE = 2 }, + tactical = { ATTACK = { PHYSICAL = 2 }, BUFF = 2, DISABLE = { pin = 2 } }, radius = function(self, t) return 4 + math.ceil(self:getTalentLevel(t) / 2) end, getValues = function(self, t) return 4 + self:getTalentLevelRaw(t), self:combatTalentStatDamage(t, "wil", 3, 50) end, do_vines = function(self, t) @@ -135,7 +135,7 @@ newTalent{ cooldown = 10, requires_target = true, range = 20, - tactical = { ATTACK = 2, CLOSEIN = 2 }, + tactical = { ATTACK = { PHYSICAL = 2 }, CLOSEIN = 2 }, action = function(self, t) local tg = {type="hit", range=self:getTalentRange(t)} local x, y, target = self:getTarget(tg) diff --git a/game/modules/tome/data/talents/gifts/fire-drake.lua b/game/modules/tome/data/talents/gifts/fire-drake.lua index 0add2d8..6fc1026 100644 --- a/game/modules/tome/data/talents/gifts/fire-drake.lua +++ b/game/modules/tome/data/talents/gifts/fire-drake.lua @@ -33,7 +33,7 @@ newTalent{ target = function(self, t) return {type="ball", range=self:getTalentRange(t), radius=self:getTalentRadius(t), selffire=false, talent=t} end, - tactical = { DEFEND = 1, DISABLE = 3 }, + tactical = { DEFEND = 1, DISABLE = { confusion = 3 } }, action = function(self, t) local tg = self:getTalentTarget(t) self:project(tg, self.x, self.y, DamageType.CONFUSION, { @@ -63,7 +63,7 @@ newTalent{ return 4 + self:getTalentLevelRaw(t) end, direct_hit = true, - tactical = { DEFEND = 1, DISABLE = 2, ESCAPE = 1 }, + tactical = { DEFEND = { knockback = 2 }, ESCAPE = { knockback = 2 } }, requires_target = true, target = function(self, t) return {type="cone", range=self:getTalentRange(t), radius=self:getTalentRadius(t), selffire=false, talent=t} @@ -90,7 +90,7 @@ newTalent{ random_ego = "attack", equilibrium = 10, cooldown = 35, - tactical = { ATTACKAREA = 2 }, + tactical = { ATTACKAREA = { FIRE = 2 } }, range = 10, radius = 2, direct_hit = true, @@ -142,7 +142,7 @@ newTalent{ equilibrium = 12, cooldown = 12, message = "@Source@ breathes fire!", - tactical = { ATTACKAREA = {[DamageType.FIRE] = 2} }, + tactical = { ATTACKAREA = { FIRE = 2 } }, range = 0, radius = function(self, t) return 4 + self:getTalentLevelRaw(t) end, direct_hit = true, diff --git a/game/modules/tome/data/talents/gifts/harmony.lua b/game/modules/tome/data/talents/gifts/harmony.lua index 5a0b00c..039ca06 100644 --- a/game/modules/tome/data/talents/gifts/harmony.lua +++ b/game/modules/tome/data/talents/gifts/harmony.lua @@ -67,6 +67,7 @@ newTalent{ mode = "sustained", sustain_equilibrium = 20, cooldown = 30, + tactical = { BUFF = 3 }, activate = function(self, t) return { tmpid = self:addTemporaryValue("elemental_harmony", self:getTalentLevel(t)), @@ -101,7 +102,7 @@ newTalent{ points = 5, equilibrium = 15, cooldown = 30, - tactical = { BUFF=2 }, + tactical = { BUFF = 2 }, on_pre_use = function(self, t) return self:hasEffect(self.EFF_INFUSION_COOLDOWN) end, action = function(self, t) self:removeEffect(self.EFF_INFUSION_COOLDOWN) diff --git a/game/modules/tome/data/talents/gifts/sand-drake.lua b/game/modules/tome/data/talents/gifts/sand-drake.lua index 7e4cd35..1270c2f 100644 --- a/game/modules/tome/data/talents/gifts/sand-drake.lua +++ b/game/modules/tome/data/talents/gifts/sand-drake.lua @@ -26,7 +26,7 @@ newTalent{ cooldown = 10, range = 1, message = "@Source@ tries to swallow @target@!", - tactical = { ATTACK = 0.5, EQUILIBRIUM = 0.5}, + tactical = { ATTACK = { NATURE = 0.5 }, EQUILIBRIUM = 0.5}, requires_target = true, no_npc_use = true, action = function(self, t) @@ -68,7 +68,7 @@ newTalent{ message = "@Source@ shakes the ground!", equilibrium = 4, cooldown = 30, - tactical = { ATTACKAREA = 2, DISABLE = 2 }, + tactical = { ATTACKAREA = { PHYSICAL = 2 }, DISABLE = { knockback = 2 } }, range = 10, radius = function(self, t) return 2 + self:getTalentLevel(t) / 2 @@ -120,7 +120,7 @@ newTalent{ equilibrium = 12, cooldown = 12, message = "@Source@ breathes sand!", - tactical = { ATTACKAREA = {[DamageType.PHYSICAL] = 2}, DISABLE = 2 }, + tactical = { ATTACKAREA = {PHYSICAL = 2}, DISABLE = { blind = 2 } }, range = 0, radius = function(self, t) return 4 + self:getTalentLevelRaw(t) end, direct_hit = true, diff --git a/game/modules/tome/data/talents/gifts/slime.lua b/game/modules/tome/data/talents/gifts/slime.lua index d892c82..c86fe5d 100644 --- a/game/modules/tome/data/talents/gifts/slime.lua +++ b/game/modules/tome/data/talents/gifts/slime.lua @@ -27,7 +27,7 @@ newTalent{ equilibrium = 2, cooldown = 10, range = 1, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { NATURE = 1, poison = 1 } }, requires_target = true, action = function(self, t) local tg = {type="hit", range=self:getTalentRange(t)} @@ -80,7 +80,7 @@ newTalent{ random_ego = "attack", equilibrium = 4, cooldown = 30, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { NATURE = 2} }, range = 10, direct_hit = true, proj_speed = 8, diff --git a/game/modules/tome/data/talents/gifts/storm-drake.lua b/game/modules/tome/data/talents/gifts/storm-drake.lua index 20b5b6f..81a46df 100644 --- a/game/modules/tome/data/talents/gifts/storm-drake.lua +++ b/game/modules/tome/data/talents/gifts/storm-drake.lua @@ -50,7 +50,7 @@ newTalent{ cooldown = 20, range = 0, radius = 1, - tactical = { ATTACKAREA = 5 }, + tactical = { ATTACKAREA = { instakill = 5 } }, requires_target = true, target = function(self, t) return {type="ball", radius=self:getTalentRadius(t), selffire=false, talent=t} @@ -92,7 +92,7 @@ newTalent{ equilibrium = 14, cooldown = 15, proj_speed = 2, -- This is purely indicative - tactical = { ATTACK = 2, DISABLE = 2 }, + tactical = { ATTACK = { LIGHTNING = 2 }, DISABLE = { stun = 2 } }, range = function(self, t) return 4 + math.floor(self:getTalentLevel(t)) end, requires_target = true, action = function(self, t) @@ -166,7 +166,7 @@ newTalent{ equilibrium = 12, cooldown = 12, message = "@Source@ breathes lightning!", - tactical = { ATTACKAREA = {[DamageType.LIGHTNING] = 2} }, + tactical = { ATTACKAREA = {LIGHTNING = 2}, DISABLE = { stun = 1 } }, range = 0, radius = function(self, t) return 4 + self:getTalentLevelRaw(t) end, direct_hit = true, diff --git a/game/modules/tome/data/talents/gifts/summon-distance.lua b/game/modules/tome/data/talents/gifts/summon-distance.lua index 1f46d7f..fbb5f6d 100644 --- a/game/modules/tome/data/talents/gifts/summon-distance.lua +++ b/game/modules/tome/data/talents/gifts/summon-distance.lua @@ -26,7 +26,7 @@ newTalent{ short_name = "RITCH_FLAMESPITTER_BOLT", range = 10, reflectable = true, requires_target = true, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { FIRE = 2 } }, action = function(self, t) local tg = {type="bolt", range=self:getTalentRange(t), talent=t} local x, y = self:getTarget(tg) @@ -49,7 +49,7 @@ newTalent{ equilibrium = 10, cooldown = 8, message = "@Source@ breathes acid!", - tactical = { ATTACKAREA = 2}, + tactical = { ATTACKAREA = { ACID = 2 } }, range = 0, radius = 5, requires_target = true, @@ -79,7 +79,7 @@ newTalent{ equilibrium = 10, cooldown = 8, message = "@Source@ breathes lightning!", - tactical = { ATTACKAREA = 2 }, + tactical = { ATTACKAREA = { LIGHTNING = 2 } }, range = 0, radius = 5, requires_target = true, @@ -114,7 +114,7 @@ newTalent{ equilibrium = 10, cooldown = 8, message = "@Source@ breathes poison!", - tactical = { ATTACKAREA = 2 }, + tactical = { ATTACKAREA = { NATURE = 1, poison = 1 } }, range = 0, radius = 5, requires_target = true, @@ -143,7 +143,7 @@ newTalent{ points = 5, equilibrium = 10, cooldown = 4, - tactical = { ATTACKAREA = 2 }, + tactical = { ATTACKAREA = { COLD = 2 }, DISABLE = { stun = 1 } }, range = 0, radius = 3, target = function(self, t) @@ -190,7 +190,7 @@ newTalent{ range = 10, requires_target = true, is_summon = true, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { FIRE = 2 } }, on_pre_use = function(self, t, silent) if not self:canBe("summon") and not silent then game.logPlayer(self, "You can not summon, you are suppressed!") return end return not checkMaxSummon(self, silent) @@ -275,7 +275,7 @@ newTalent{ range = 10, requires_target = true, is_summon = true, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { ACID = 1, LIGHTING = 1, NATURE = 1 } }, on_pre_use = function(self, t, silent) if not self:canBe("summon") and not silent then game.logPlayer(self, "You can not summon, you are suppressed!") return end return not checkMaxSummon(self, silent) @@ -360,7 +360,7 @@ newTalent{ range = 10, requires_target = true, is_summon = true, - tactical = { ATTACK = 1, DISABLE = 2 }, + tactical = { ATTACK = { COLD = 1 }, DISABLE = { stun = 2 } }, on_pre_use = function(self, t, silent) if not self:canBe("summon") and not silent then game.logPlayer(self, "You can not summon, you are suppressed!") return end return not checkMaxSummon(self, silent) @@ -447,7 +447,7 @@ newTalent{ range = 10, requires_target = true, is_summon = true, - tactical = { ATTACK = 2, DISABLE = 2 }, + tactical = { ATTACK = { FIRE = 2 }, DISABLE = { knockback = 2 } }, on_pre_use = function(self, t, silent) if not self:canBe("summon") and not silent then game.logPlayer(self, "You can not summon, you are suppressed!") return end return not checkMaxSummon(self, silent) diff --git a/game/modules/tome/data/talents/gifts/summon-melee.lua b/game/modules/tome/data/talents/gifts/summon-melee.lua index b5259b9..e5eca66 100644 --- a/game/modules/tome/data/talents/gifts/summon-melee.lua +++ b/game/modules/tome/data/talents/gifts/summon-melee.lua @@ -29,7 +29,7 @@ newTalent{ range = 10, requires_target = true, is_summon = true, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { PHYSICAL = 2 } }, on_pre_use = function(self, t, silent) if not self:canBe("summon") and not silent then game.logPlayer(self, "You can not summon, you are suppressed!") return end return not checkMaxSummon(self, silent) @@ -109,7 +109,7 @@ newTalent{ range = 10, requires_target = true, is_summon = true, - tactical = { ATTACK = 1, EQUILIBRIUM = 1, }, + tactical = { ATTACK = { NATURE = 1 }, EQUILIBRIUM = 1, }, on_pre_use = function(self, t, silent) if not self:canBe("summon") and not silent then game.logPlayer(self, "You can not summon, you are suppressed!") return end return not checkMaxSummon(self, silent) @@ -200,7 +200,7 @@ newTalent{ range = 10, is_summon = true, requires_target = true, - tactical = { ATTACK = 2, DISABLE = 2 }, + tactical = { ATTACK = { PHYSICAL = 2 }, DISABLE = { confusion = 1, stun = 1 } }, on_pre_use = function(self, t, silent) if not self:canBe("summon") and not silent then game.logPlayer(self, "You can not summon, you are suppressed!") return end return not checkMaxSummon(self, silent) @@ -285,7 +285,7 @@ newTalent{ cooldown = 20, range = 10, is_summon = true, - tactical = { ATTACK = 3, DISABLE = 1 }, + tactical = { ATTACK = { PHYSICAL = 3 }, DISABLE = { knockback = 1 } }, on_pre_use = function(self, t, silent) if not self:canBe("summon") and not silent then game.logPlayer(self, "You can not summon, you are suppressed!") return end return not checkMaxSummon(self, silent) diff --git a/game/modules/tome/data/talents/gifts/summon-utility.lua b/game/modules/tome/data/talents/gifts/summon-utility.lua index 07720bb..5d00f70 100644 --- a/game/modules/tome/data/talents/gifts/summon-utility.lua +++ b/game/modules/tome/data/talents/gifts/summon-utility.lua @@ -66,7 +66,7 @@ newTalent{ short_name="SPIDER_WEB", equilibrium = 5, cooldown = 3, range=7, - tactical = { DISABLE = 2 }, + tactical = { DISABLE = { pin = 2 } }, requires_target = true, action = function(self, t) local tg = {type="bolt", range=self:getTalentRange(t), talent=t} @@ -184,7 +184,7 @@ newTalent{ cooldown = 10, range = 10, is_summon = true, - tactical = { ATTACK = 1, DISABLE = 2 }, + tactical = { ATTACK = 1, DISABLE = { pin = 2 } }, on_pre_use = function(self, t, silent) if not self:canBe("summon") and not silent then game.logPlayer(self, "You can not summon, you are suppressed!") return end return not checkMaxSummon(self, silent) diff --git a/game/modules/tome/data/talents/misc/horrors.lua b/game/modules/tome/data/talents/misc/horrors.lua index ab61cbd..d6c7ad7 100644 --- a/game/modules/tome/data/talents/misc/horrors.lua +++ b/game/modules/tome/data/talents/misc/horrors.lua @@ -34,7 +34,7 @@ newTalent{ points = 5, cooldown = 12, stamina = 24, - tactical = { ATTACK = 1, DISABLE = 2 }, + tactical = { ATTACK = { PHYSICAL = 1 }, DISABLE = { cut = 2 } }, message = "In a frenzy @Source@ bites at @Target@!", on_pre_use = function(self, t, silent) if not self:hasEffect(self.EFF_FRENZY) then return false end return true end, getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 1, 1.7) end, @@ -114,7 +114,7 @@ newTalent{ stamina = 8, message = "@Source@ tries to bite @Target@ with razor sharp teeth!", requires_target = true, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { PHYSICAL = 2 } }, getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 0.5, 1) end, getBleedDamage = function(self, t) return self:combatTalentWeaponDamage(t, 0.8, 1.5) end, getPower = function(self, t) return self:combatTalentStatDamage(t, "con", 10, 50) end, @@ -290,7 +290,7 @@ newTalent{ range = 10, direct_hit = true, requires_target = true, - tactical = { ATTACK = 2, DISABLE = 3 }, + tactical = { ATTACK = { DARKNESS = 2 }, DISABLE = { confusion = 1, stun = 1, blind = 1 } }, getChance = function(self, t) return 10 + self:combatTalentSpellDamage(t, 5, 50) end, getDamage = function(self, t) return self:combatTalentSpellDamage(t, 5, 50) end, getDuration = function(self, t) return 4 + math.ceil(self:getTalentLevel(t)) end, @@ -327,7 +327,7 @@ newTalent{ cooldown = 10, mana = 30, cooldown = 12, - tactical = { ATTACKAREA = 2, DISABLE = 3 }, + tactical = { ATTACKAREA = { DARKNESS = 2 }, DISABLE = 3 }, range = 6, radius = 3, direct_hit = true, @@ -377,7 +377,7 @@ newTalent{ cooldown = 10, range = 10, requires_target = true, - tactical = { ATTACK = 4 }, + tactical = { ATTACK = { MIND = 4 } }, direct_hit = true, requires_target = true, getDamage = function(self, t) return self:combatTalentMindDamage(t, 10, 100) end, @@ -415,7 +415,7 @@ newTalent{ cooldown = 20, range = 10, requires_target = true, - tactical = { ATTACK = 4 }, + tactical = { ATTACK = { TEMPORAL = 3, PHYSICAL = 1 } }, requires_target = true, is_summon = true, getDamage = function(self, t) return self:combatTalentMindDamage(t, 5, 50) end, @@ -503,7 +503,7 @@ newTalent{ vim = 10, range = 6, requires_target = true, - tactical = { ATTACK = 2, DISABLE = 4 }, + tactical = { ATTACK = { ACID = 1, BLIGHT = 1 }, DISABLE = 4 }, getBurstDamage = function(self, t) return self:combatTalentSpellDamage(t, 30, 300) end, getDamage = function(self, t) return self:combatTalentSpellDamage(t, 5, 50) end, getDuration = function(self, t) return 4 + math.ceil(self:getTalentLevel(t)) end, diff --git a/game/modules/tome/data/talents/misc/inscriptions.lua b/game/modules/tome/data/talents/misc/inscriptions.lua index 8971d25..e54a994 100644 --- a/game/modules/tome/data/talents/misc/inscriptions.lua +++ b/game/modules/tome/data/talents/misc/inscriptions.lua @@ -180,7 +180,7 @@ newInscription{ name = "Infusion: Sun", type = {"inscriptions/infusions", 1}, points = 1, - tactical = { ATTACKAREA = 1, DISABLE = 2 }, + tactical = { ATTACKAREA = 1, DISABLE = { blind = 2 } }, range = 0, radius = function(self, t) local data = self:getInscriptionData(t.short_name) @@ -235,7 +235,7 @@ newInscription{ name = "Infusion: Insidious Poison", type = {"inscriptions/infusions", 1}, points = 1, - tactical = { ATTACK = 1, DISABLE=1 }, + tactical = { ATTACK = { NATURE = 1 }, DISABLE=1 }, requires_target = true, range = function(self, t) local data = self:getInscriptionData(t.short_name) @@ -264,7 +264,7 @@ newInscription{ name = "Infusion: Wild Growth", type = {"inscriptions/infusions", 1}, points = 1, - tactical = { ATTACKAREA = 2, DISABLE = 3 }, + tactical = { ATTACKAREA = { PHYSICAL = 1, NATURE = 1 }, DISABLE = 3 }, range = 0, radius = 5, direct_hit = true, @@ -503,7 +503,7 @@ newInscription{ is_attack_rune = true, no_energy = true, is_spell = true, - tactical = { ATTACK = 1 }, + tactical = { ATTACK = { FIRE = 1 } }, requires_target = true, direct_hit = true, range = function(self, t) @@ -542,7 +542,7 @@ newInscription{ is_attack_rune = true, no_energy = true, is_spell = true, - tactical = { ATTACK = 1, DISABLE=1 }, + tactical = { ATTACK = { COLD = 1 }, DISABLE = { stun = 1 } }, requires_target = true, range = function(self, t) local data = self:getInscriptionData(t.short_name) @@ -578,7 +578,7 @@ newInscription{ is_attack_rune = true, no_energy = true, is_spell = true, - tactical = { ATTACKAREA = 1 }, + tactical = { ATTACKAREA = { ACID = 1 } }, requires_target = true, direct_hit = true, range = 0, @@ -615,7 +615,7 @@ newInscription{ is_attack_rune = true, no_energy = true, is_spell = true, - tactical = { ATTACK = 1 }, + tactical = { ATTACK = { LIGHTNING = 1 } }, requires_target = true, direct_hit = true, range = function(self, t) @@ -688,7 +688,7 @@ newInscription{ type = {"inscriptions/runes", 1}, points = 1, is_spell = true, - tactical = { DISABLE = 2, ATTACK = 1 }, + tactical = { DISABLE = 2, ATTACK = { TEMPORAL = 1 } }, direct_hit = true, reflectable = true, requires_target = true, diff --git a/game/modules/tome/data/talents/misc/misc.lua b/game/modules/tome/data/talents/misc/misc.lua index e706587..c2eca59 100644 --- a/game/modules/tome/data/talents/misc/misc.lua +++ b/game/modules/tome/data/talents/misc/misc.lua @@ -44,7 +44,7 @@ newTalent{ no_break_stealth = true, -- stealth is broken in attackTarget requires_target = true, target = {type="hit", range=1}, - tactical = { ATTACK = 1 }, + tactical = { ATTACK = { PHYSICAL = 1 } }, no_unlearn_last = true, action = function(self, t) local tg = self:getTalentTarget(t) diff --git a/game/modules/tome/data/talents/misc/npcs.lua b/game/modules/tome/data/talents/misc/npcs.lua index a6832e5..2526938 100644 --- a/game/modules/tome/data/talents/misc/npcs.lua +++ b/game/modules/tome/data/talents/misc/npcs.lua @@ -77,7 +77,7 @@ newTalent{ cooldown = 5, range = 1, requires_target = true, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { NATURE = 1, poison = 1} }, action = function(self, t) local tg = {type="hit", range=self:getTalentRange(t)} local x, y, target = self:getTarget(tg) @@ -101,7 +101,7 @@ newTalent{ message = "@Source@ crawls acid onto @target@.", cooldown = 2, range = 1, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { ACID = 2 } }, requires_target = true, action = function(self, t) local tg = {type="hit", range=self:getTalentRange(t)} @@ -126,7 +126,7 @@ newTalent{ message = "@Source@ releases blinding spores at @target@.", cooldown = 2, range = 1, - tactical = { ATTACK = 2 }, + tactical = { DISABLE = { blind = 2 } }, requires_target = true, action = function(self, t) local tg = {type="hit", range=self:getTalentRange(t)} @@ -151,7 +151,7 @@ newTalent{ message = "@Source@ releases poisonous spores at @target@.", cooldown = 2, range = 1, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { NATURE = 1, poison = 1} }, requires_target = true, action = function(self, t) local tg = {type="hit", range=self:getTalentRange(t)} @@ -175,7 +175,7 @@ newTalent{ cooldown = 6, stamina = 8, require = { stat = { str=12 }, }, - tactical = { ATTACK = 1, DISABLE = 2 }, + tactical = { ATTACK = { PHYSICAL = 1 }, DISABLE = { stun = 2 } }, requires_target = true, action = function(self, t) local tg = {type="hit", range=self:getTalentRange(t)} @@ -208,7 +208,7 @@ newTalent{ stamina = 8, require = { stat = { str=12 }, }, requires_target = true, - tactical = { ATTACK = 1, DISABLE = 2 }, + tactical = { ATTACK = { PHYSICAL = 1 }, DISABLE = { disarm = 2 } }, action = function(self, t) local tg = {type="hit", range=self:getTalentRange(t)} local x, y, target = self:getTarget(tg) @@ -238,7 +238,7 @@ newTalent{ stamina = 8, require = { stat = { str=12 }, }, requires_target = true, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { PHYSICAL = 2 }, DISABLE = { stun = 1 } }, action = function(self, t) local tg = {type="hit", range=self:getTalentRange(t)} local x, y, target = self:getTarget(tg) @@ -270,7 +270,7 @@ newTalent{ stamina = 8, require = { stat = { str=12 }, }, requires_target = true, - tactical = { ATTACK = 1, DISABLE = 2 }, + tactical = { ATTACK = 1, DISABLE = { knockback = 2 } }, action = function(self, t) local tg = {type="hit", range=self:getTalentRange(t)} local x, y, target = self:getTarget(tg) @@ -303,7 +303,7 @@ newTalent{ message = "@Source@ bites poison into @target@.", cooldown = 5, range = 1, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { NATURE = 1, poison = 1} }, requires_target = true, action = function(self, t) local tg = {type="hit", range=self:getTalentRange(t)} @@ -386,7 +386,7 @@ newTalent{ cooldown = 8, message = "@Source@ diseases @target@.", requires_target = true, - tactical = { ATTACK = 2, DISABLE = 1 }, + tactical = { ATTACK = { BLIGHT = 2 }, DISABLE = { disease = 1 } }, action = function(self, t) local tg = {type="hit", range=self:getTalentRange(t)} local x, y, target = self:getTarget(tg) @@ -416,7 +416,7 @@ newTalent{ points = 5, cooldown = 8, message = "@Source@ diseases @target@.", - tactical = { ATTACK = 2, DISABLE = 1 }, + tactical = { ATTACK = { BLIGHT = 2 }, DISABLE = { disease = 1 } }, requires_target = true, action = function(self, t) local tg = {type="hit", range=self:getTalentRange(t)} @@ -448,7 +448,7 @@ newTalent{ cooldown = 8, message = "@Source@ diseases @target@.", requires_target = true, - tactical = { ATTACK = 2, DISABLE = 1 }, + tactical = { ATTACK = { BLIGHT = 2 }, DISABLE = { disease = 1 } }, action = function(self, t) local tg = {type="hit", range=self:getTalentRange(t)} local x, y, target = self:getTarget(tg) @@ -481,7 +481,7 @@ newTalent{ range = 10, direct_hit = true, requires_target = true, - tactical = { DISABLE = 3 }, + tactical = { DISABLE = { confusion = 3 } }, action = function(self, t) local tg = {type="hit", range=self:getTalentRange(t), talent=t} local x, y = self:getTarget(tg) @@ -500,12 +500,9 @@ newTalent{ points = 5, mana = 10, cooldown = 3, - tactical = { - ATTACK = 10, - }, range = 10, reflectable = true, - tactical = { ATACK = 1 }, + tactical = { ATTACK = { COLD = 1 } }, requires_target = true, action = function(self, t) local tg = {type="hit", range=self:getTalentRange(t), talent=t} @@ -527,14 +524,11 @@ newTalent{ points = 5, mana = 10, cooldown = 8, - tactical = { - ATTACK = 10, - }, range = 10, direct_hit = true, reflectable = true, requires_target = true, - tactical = { DISABLE = 2, ATTACK = 1 }, + tactical = { DISABLE = { stun = 2 }, ATTACK = { COLD = 1 } }, action = function(self, t) local tg = {type="hit", range=self:getTalentRange(t), talent=t} local x, y = self:getTarget(tg) @@ -555,7 +549,7 @@ newTalent{ points = 5, mana = 3, cooldown = 2, - tactical = { ATTACK = 7 }, + tactical = { ATTACK = { ARCANE = 7 } }, range = 10, reflectable = true, requires_target = true, @@ -644,7 +638,7 @@ newTalent{ stamina = 8, require = { stat = { str=12 }, }, requires_target = true, - tactical = { DISABLE = 2, ATTACK = 1 }, + tactical = { DISABLE = { pin = 2 }, ATTACK = { PHYSICAL = 1 } }, action = function(self, t) local tg = {type="hit", range=self:getTalentRange(t)} local x, y, target = self:getTarget(tg) @@ -675,10 +669,6 @@ newTalent{ equilibrium = 12, cooldown = 12, message = "@Source@ projects ink!", - tactical = { - ATTACKAREA = 10, - DEFEND = 5, - }, range = 0, radius = function(self, t) return 4 + self:getTalentLevelRaw(t) @@ -691,7 +681,7 @@ newTalent{ getDuration = function(self, t) return 2 + self:getTalentLevelRaw(t) end, - tactical = { DISABLE = 2 }, + tactical = { DISABLE = { blind = 2 } }, action = function(self, t) local tg = self:getTalentTarget(t) local x, y = self:getTarget(tg) @@ -713,12 +703,9 @@ newTalent{ points = 5, equilibrium = 4, cooldown = 6, - tactical = { - ATTACK = 10, - }, range = 10, requires_target = true, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { NATURE = 1, poison = 1} }, action = function(self, t) local tg = {type="bolt", range=self:getTalentRange(t)} local x, y = self:getTarget(tg) @@ -739,12 +726,9 @@ newTalent{ points = 5, equilibrium = 4, cooldown = 6, - tactical = { - ATTACK = 10, - }, range = 10, requires_target = true, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { BLIGHT = 2 } }, action = function(self, t) local tg = {type="bolt", range=self:getTalentRange(t)} local x, y = self:getTarget(tg) @@ -812,9 +796,6 @@ newTalent{ type = {"undead/other", 1}, points = 5, cooldown = 6, - tactical = { - ATTACK = 10, - }, range = 10, radius = 2, direct_hit = true, @@ -822,7 +803,7 @@ newTalent{ target = function(self, t) return {type="ball", range=self:getTalentRange(t), radius=self:getTalentRadius(t)} end, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { PHYSICAL = 2 } }, action = function(self, t) local tg = self:getTalentTarget(t) local x, y = self:getTarget(tg) @@ -844,12 +825,9 @@ newTalent{ equilibrium = 4, cooldown = 6, message = "@Source@ seems to search the ground...", - tactical = { - ATTACK = 10, - }, range = 10, requires_target = true, - tactical = { DISABLE = 2 }, + tactical = { DISABLE = { stun = 1, pin = 1 } }, action = function(self, t) local dur = 2 + self:getTalentLevel(t) local trap = mod.class.Trap.new{ @@ -887,9 +865,6 @@ newTalent{ points = 5, equilibrium = 4, cooldown = 6, - tactical = { - ATTACK = 10, - }, range = 0, radius = function(self, t) return 2 + self:getTalentLevelRaw(t) / 1.5 @@ -926,13 +901,10 @@ newTalent{ points = 5, equilibrium = 5, cooldown = 3, - tactical = { - ATTACK = 10, - }, range = 10, radius = 1, direct_hit = true, - tactical = { DISABLE = 3, ATTACK = 2, ESCAPE = 2 }, + tactical = { DISABLE = { knockback = 3 }, ATTACK = {PHYSICAL = 2 }, ESCAPE = { knockback = 2 } }, requires_target = true, target = function(self, t) return {type="ball", range=self:getTalentRange(t), radius=self:getTalentRadius(t), talent=t} @@ -957,9 +929,6 @@ newTalent{ points = 5, equilibrium = 5, cooldown = 10, - tactical = { - ATTACK = 10, - }, message = "@Source@ howls", range = 10, tactical = { ATTACK = 3 }, @@ -992,9 +961,6 @@ newTalent{ points = 5, equilibrium = 5, cooldown = 10, - tactical = { - ATTACK = 10, - }, message = "@Source@ shrieks.", range = 10, direct_hit = true, @@ -1029,7 +995,7 @@ newTalent{ cooldown = 6, stamina = 12, requires_target = true, - tactical = { ATTACK = 1, DISABLE = 2 }, + tactical = { ATTACK = { PHYSICAL = 1 }, DISABLE = { stun = 2 } }, action = function(self, t) local weapon = self:hasTwoHandedWeapon() if not weapon then @@ -1071,7 +1037,7 @@ newTalent{ target = function(self, t) return {type="beam", range=self:getTalentRange(t), talent=t} end, - tactical = { ATTACK = 3 }, + tactical = { ATTACK = { MIND = 3 } }, action = function(self, t) local tg = self:getTalentTarget(t) local x, y = self:getTarget(tg) @@ -1095,7 +1061,7 @@ newTalent{ range = 7, direct_hit = true, requires_target = true, - tactical = { DISABLE = 3 }, + tactical = { DISABLE = { silence = 3 } }, action = function(self, t) local tg = {type="hit", range=self:getTalentRange(t), talent=t} local x, y = self:getTarget(tg) @@ -1121,7 +1087,7 @@ newTalent{ target = function(self, t) return {type="beam", range=self:getTalentRange(t), talent=t} end, - tactical = { ATTACK = 2, ESCAPE = 2 }, + tactical = { ATTACK = { MIND = 2 }, ESCAPE = { knockback = 2 } }, action = function(self, t) local tg = self:getTalentTarget(t) local x, y = self:getTarget(tg) @@ -1149,7 +1115,7 @@ newTalent{ target = function(self, t) return {type="ball", range=self:getTalentRange(t), radius=self:getTalentRadius(t)} end, - tactical = { ATTACK = 2, ATTACKAREA = 2 }, + tactical = { ATTACKAREA = { BLIGHT = 2 } }, action = function(self, t) local duration = self:getTalentLevel(t) + 2 local dam = self:combatTalentSpellDamage(t, 4, 65) @@ -1223,7 +1189,7 @@ newTalent{ cooldown = 1, range = 1, requires_target = true, - tactical = { ATTACK = 1 }, + tactical = { ATTACK = { LIGHT = 1 } }, action = function(self, t) local tg = {type="bolt", range=1} local x, y, target = self:getTarget(tg) @@ -1248,7 +1214,7 @@ newTalent{ cooldown = 1, range = 1, requires_target = true, - tactical = { ATTACK = 1 }, + tactical = { ATTACK = { COLD = 1 } }, action = function(self, t) local tg = {type="bolt", range=1} local x, y, target = self:getTarget(tg) @@ -1312,7 +1278,7 @@ newTalent{ range = 10, proj_speed = 2, requires_target = true, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { FIRE = 1, PHYSICAL = 1 } }, action = function(self, t) local tg = {type="bolt", range=self:getTalentRange(t), nolock=true, talent=t} local x, y = self:getTarget(tg) @@ -1385,7 +1351,8 @@ newTalent{ paradox = 10, cooldown = 8, tactical = { - ATTACK = 10, + ATTACK = { TEMPORAL = 10 }, + DISABLE = 10, }, range = 3, direct_hit = true, diff --git a/game/modules/tome/data/talents/misc/races.lua b/game/modules/tome/data/talents/misc/races.lua index 1e43a46..50f6435 100644 --- a/game/modules/tome/data/talents/misc/races.lua +++ b/game/modules/tome/data/talents/misc/races.lua @@ -315,7 +315,7 @@ newTalent{ points = 5, no_energy = true, cooldown = function(self, t) return 50 - self:getTalentLevel(t) * 3 end, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { PHYSICAL = 2 }, DISABLE = { stun = 1, knockback = 1 } }, range = 4, action = function(self, t) local tg = {type="bolt", nowarning=true, range=self:getTalentRange(t), nolock=true, talent=t} diff --git a/game/modules/tome/data/talents/psionic/augmented-mobility.lua b/game/modules/tome/data/talents/psionic/augmented-mobility.lua index 937e60a..f5822a2 100644 --- a/game/modules/tome/data/talents/psionic/augmented-mobility.lua +++ b/game/modules/tome/data/talents/psionic/augmented-mobility.lua @@ -132,7 +132,7 @@ newTalent{ random_ego = "attack", psi = 60, cooldown = 10, - tactical = { CLOSEIN = 2, ATTACK = 1 }, + tactical = { CLOSEIN = 2, ATTACK = { PHYSICAL = 1 } }, range = function(self, t) local r = 2 + self:getTalentLevel(t) local gem_level = getGemLevel(self) diff --git a/game/modules/tome/data/talents/psionic/focus.lua b/game/modules/tome/data/talents/psionic/focus.lua index 5e84fd9..e4be069 100644 --- a/game/modules/tome/data/talents/psionic/focus.lua +++ b/game/modules/tome/data/talents/psionic/focus.lua @@ -34,7 +34,23 @@ newTalent{ return math.max(c - gem_level, 0) end, psi = 10, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = function(self, t, target) + local val = { PHYSICAL = 2} + if gem_level > 0 and not tg.dead and self:knowTalent(self.T_CONDUIT) and self:isTalentActive(self.T_CONDUIT) then + local c = self:getTalentFromId(self.T_CONDUIT) + local auras = self:isTalentActive(c.id) + if auras.k_aura_on then + val[PHYSICAL] = val[PHYSICAL] + 1 + end + if auras.t_aura_on then + val[FIRE] = 1 + end + if auras.c_aura_on then + val[LIGHTNING] = 1 + end + return val + end + end }, range = function(self, t) local r = 5 local gem_level = getGemLevel(self) @@ -81,7 +97,7 @@ newTalent{ end, info = function(self, t) local dam = t.getDamage(self, t) - return ([[Focus energies on a distant target to lash it with physical force, doing %d damage. + return ([[Focus energies on a distant target to lash it with physical force, doing %d damage as well as any Conduit damage. Mindslayers do not do this sort of ranged attack naturally. The use of a telekinetically-wielded gem as a focus will improve the effects considerably.]]): format(dam) end, @@ -99,7 +115,7 @@ newTalent{ return c - gem_level end, psi = 20, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { FIRE = 2 } }, range = 0, radius = function(self, t) local r = 5 diff --git a/game/modules/tome/data/talents/psionic/grip.lua b/game/modules/tome/data/talents/psionic/grip.lua index f0f2dd7..4ff3113 100644 --- a/game/modules/tome/data/talents/psionic/grip.lua +++ b/game/modules/tome/data/talents/psionic/grip.lua @@ -60,7 +60,7 @@ newTalent{ return math.max(c - gem_level, 0) end, psi = 10, - tactical = { ATTACK = 2 }, + tactical = { DISABLE = 2 }, range = function(self, t) local r = 5 local gem_level = getGemLevel(self) @@ -110,7 +110,7 @@ newTalent{ return math.max(c - 2 * gem_level, 0) end, psi = 40, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { PHYSICAL = 2 } }, range = function(self, t) local r = 3 local gem_level = getGemLevel(self) diff --git a/game/modules/tome/data/talents/psionic/projection.lua b/game/modules/tome/data/talents/psionic/projection.lua index d5d460a..4fb34f7 100644 --- a/game/modules/tome/data/talents/psionic/projection.lua +++ b/game/modules/tome/data/talents/psionic/projection.lua @@ -79,7 +79,7 @@ newTalent{ cooldown = function(self, t) return 15 - (self:getTalentLevelRaw(self.T_AURA_DISCIPLINE) or 0) end, - tactical = { ATTACKAREA = 2 }, + tactical = { ATTACKAREA = { PHYSICAL = 2 } }, on_pre_use = function(self, t, silent) if self:isTalentActive(self.T_THERMAL_AURA) and self:isTalentActive(self.T_CHARGED_AURA) then if not silent then game.logSeen(self, "You may only sustain two auras at once. Aura activation cancelled.") end @@ -198,7 +198,7 @@ newTalent{ cooldown = function(self, t) return 15 - (self:getTalentLevelRaw(self.T_AURA_DISCIPLINE) or 0) end, - tactical = { ATTACKAREA = 2 }, + tactical = { ATTACKAREA = { FIRE = 2 } }, on_pre_use = function(self, t, silent) if self:isTalentActive(self.T_KINETIC_AURA) and self:isTalentActive(self.T_CHARGED_AURA) then if not silent then game.logSeen(self, "You may only sustain two auras at once. Aura activation cancelled.") end @@ -314,7 +314,7 @@ newTalent{ cooldown = function(self, t) return 15 - (self:getTalentLevelRaw(self.T_AURA_DISCIPLINE) or 0) end, - tactical = { ATTACKAREA = 2 }, + tactical = { ATTACKAREA = { LIGHTNING = 2 } }, on_pre_use = function(self, t, silent) if self:isTalentActive(self.T_KINETIC_AURA) and self:isTalentActive(self.T_THERMAL_AURA) then if not silent then game.logSeen(self, "You may only sustain two auras at once. Aura activation cancelled.") end diff --git a/game/modules/tome/data/talents/psionic/psi-archery.lua b/game/modules/tome/data/talents/psionic/psi-archery.lua index 1ea6fd4..c38c11b 100644 --- a/game/modules/tome/data/talents/psionic/psi-archery.lua +++ b/game/modules/tome/data/talents/psionic/psi-archery.lua @@ -27,7 +27,7 @@ newTalent{ random_ego = "attack", cooldown = 10, psi = 10, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { PHYSICAL = 2 } }, range = archery_range, requires_target = true, on_pre_use = function(self, t, silent) if not self:hasArcheryWeapon("bow") then if not silent then game.logPlayer(self, "You require a bow for this talent.") end return false end return true end, @@ -65,7 +65,7 @@ newTalent{ require = psi_cun_high2, range = archery_range, requires_target = true, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { PHYSICAL = 2 } }, on_pre_use = function(self, t, silent) if not self:hasArcheryWeapon("bow") then if not silent then game.logPlayer(self, "You require a bow for this talent.") end return false end return true end, apr_boost = function(self, t) return 10 + 10*self:getTalentLevel(t) @@ -103,7 +103,7 @@ newTalent{ return math.ceil(math.max(18 - 2 * self:getTalentLevel(t), 5)) end, psi = 20, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { PHYSICAL = 2 } }, range = archery_range, requires_target = true, on_pre_use = function(self, t, silent) if not self:hasArcheryWeapon("bow") then if not silent then game.logPlayer(self, "You require a bow for this talent.") end return false end return true end, diff --git a/game/modules/tome/data/talents/psionic/psi-fighting.lua b/game/modules/tome/data/talents/psionic/psi-fighting.lua index 16fe7ad..08bbc91 100644 --- a/game/modules/tome/data/talents/psionic/psi-fighting.lua +++ b/game/modules/tome/data/talents/psionic/psi-fighting.lua @@ -36,7 +36,7 @@ newTalent{ psi = 10, range = 1, requires_target = true, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { PHYSICAL = 2 } }, action = function(self, t) local weapon = self:getInven("MAINHAND") and self:getInven("MAINHAND")[1] if type(weapon) == "boolean" then weapon = nil end @@ -103,10 +103,17 @@ newTalent{ sustain_psi = 0, points = 5, tactical = { ATTACK = function(self, t) - local k_aura_on = self:isTalentActive(self.T_KINETIC_AURA) - local t_aura_on = self:isTalentActive(self.T_THERMAL_AURA) - local c_aura_on = self:isTalentActive(self.T_CHARGED_AURA) - return (k_aura_on and 1 or 0) + (t_aura_on and 1 or 0) + (c_aura_on and 1 or 0) + local vals = {} + if self:isTalentActive(self.T_KINETIC_AURA) then + vals[PHYSICAL] = 1 + end + if self:isTalentActive(self.T_THERMAL_AURA) then + vals[FIRE] = 1 + end + if self:isTalentActive(self.T_CHARGED_AURA) then + vals[LIGHTNING] = 1 + end + return vals end}, activate = function(self, t) local ret = { @@ -159,7 +166,7 @@ newTalent{ cooldown = 20, psi = 30, points = 5, - tactical = { ATTACK = 3 }, + tactical = { ATTACK = { PHYSICAL = 3 } }, action = function(self, t) local targets = 1 + math.ceil(self:getTalentLevel(t)/5) self:setEffect(self.EFF_PSIFRENZY, 3 * self:getTalentLevelRaw(t), {power=targets}) diff --git a/game/modules/tome/data/talents/psionic/voracity.lua b/game/modules/tome/data/talents/psionic/voracity.lua index e0a721d..b3ad173 100644 --- a/game/modules/tome/data/talents/psionic/voracity.lua +++ b/game/modules/tome/data/talents/psionic/voracity.lua @@ -75,7 +75,7 @@ newTalent{ return math.max(6, math.ceil(25 - self:getTalentLevelRaw(t)*3)) end, psi = 0, - tactical = { DEFEND = 2, DISABLE = 2 }, + tactical = { DEFEND = 2, DISABLE = { stun = 2 } }, range = 0, radius = function(self, t) local r = 1 @@ -124,7 +124,7 @@ newTalent{ cooldown = function(self, t) return math.max(6, math.ceil(25 - self:getTalentLevelRaw(t)*3)) end, - tactical = { DEFEND = 2, ATTACKAREA = 2, DISABLE = 1 }, + tactical = { DEFEND = 2, ATTACKAREA = { LIGHTNING = 2 }, DISABLE = { stun = 1 } }, direct_hit = true, range = 0, radius = function(self, t) diff --git a/game/modules/tome/data/talents/spells/advanced-necrotic-minions.lua b/game/modules/tome/data/talents/spells/advanced-necrotic-minions.lua index a2be42f..071434f 100644 --- a/game/modules/tome/data/talents/spells/advanced-necrotic-minions.lua +++ b/game/modules/tome/data/talents/spells/advanced-necrotic-minions.lua @@ -178,7 +178,7 @@ newTalent{ points = 5, mana = 30, cooldown = 10, - tactical = { ATTACKAREA = 2 }, + tactical = { ATTACKAREA = { BLIGHT = 2 } }, radius = function(self, t) return 1 + math.floor(self:getTalentLevel(t) / 3) end, range = 8, requires_target = true, diff --git a/game/modules/tome/data/talents/spells/arcane-shield.lua b/game/modules/tome/data/talents/spells/arcane-shield.lua index 1ffa1fe..e98efe1 100644 --- a/game/modules/tome/data/talents/spells/arcane-shield.lua +++ b/game/modules/tome/data/talents/spells/arcane-shield.lua @@ -26,7 +26,7 @@ newTalent{ mana = 10, cooldown = 6, range = 1, - tactical = { ATTACK = 2, DISABLE = 2 }, + tactical = { ATTACK = { ARCANE = 2 }, DISABLE = { stun = 2 } }, requires_target = true, on_pre_use = function(self, t, silent) local shield = self:hasShield() if not shield then if not silent then game.logPlayer(self, "You cannot use Eldricth Blow without a shield!") end return false end return true end, action = function(self, t) @@ -94,7 +94,7 @@ newTalent{ mana = 30, cooldown = 12, requires_target = true, - tactical = { ATTACK = 3, DISABLE = 1 }, + tactical = { ATTACK = { NATURE = 3 }, DISABLE = { stun = 1 } }, range = 1, on_pre_use = function(self, t, silent) local shield = self:hasShield() if not shield then if not silent then game.logPlayer(self, "You cannot use Eldricth Fury without a shield!") end return false end return true end, action = function(self, t) @@ -137,7 +137,7 @@ newTalent{ equilibrium = 10, mana = 30, cooldown = 20, - tactical = { ATTACKAREA = 3 }, + tactical = { ATTACKAREA = { PHYSICAL = 3 } }, requires_target = true, range = 1, radius = function(self, t) return 1 + self:getTalentLevelRaw(t) end, diff --git a/game/modules/tome/data/talents/spells/arcane.lua b/game/modules/tome/data/talents/spells/arcane.lua index 8b5715d..c77ff74 100644 --- a/game/modules/tome/data/talents/spells/arcane.lua +++ b/game/modules/tome/data/talents/spells/arcane.lua @@ -58,7 +58,7 @@ newTalent{ random_ego = "attack", mana = 10, cooldown = 3, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { ARCANE = 2 } }, range = 10, direct_hit = function(self, t) if self:getTalentLevel(t) >= 3 then return true else return false end end, reflectable = true, diff --git a/game/modules/tome/data/talents/spells/earth.lua b/game/modules/tome/data/talents/spells/earth.lua index b46dcbc..4357136 100644 --- a/game/modules/tome/data/talents/spells/earth.lua +++ b/game/modules/tome/data/talents/spells/earth.lua @@ -57,7 +57,11 @@ newTalent{ random_ego = "attack", mana = 18, cooldown = 6, - tactical = { ATTACK = 1, DISABLE = 2, ESCAPE = 2 }, + tactical = { + ATTACK = { PHYSICAL = 1 }, + DISABLE = { knockback = 2 }, + ESCAPE = { knockback = 2 }, + }, range = 10, reflectable = true, proj_speed = 6, diff --git a/game/modules/tome/data/talents/spells/explosives.lua b/game/modules/tome/data/talents/spells/explosives.lua index 146fd18..edfa891 100644 --- a/game/modules/tome/data/talents/spells/explosives.lua +++ b/game/modules/tome/data/talents/spells/explosives.lua @@ -43,7 +43,13 @@ newTalent{ end return {type="ball", range=self:getTalentRange(t)+(ammo and ammo.alchemist_bomb and ammo.alchemist_bomb.range or 0), radius=self:getTalentRadius(t), friendlyfire=friendlyfire, talent=t} end, - tactical = { ATTACKAREA = 2 }, + tactical = { ATTACKAREA = function(self, t, target) + if self:isTalentActive(self.T_ACID_INFUSION) then return { ACID = 2 } + elseif self:isTalentActive(self.T_LIGHTNING_INFUSION) then return { LIGHTNING = 2 } + elseif self:isTalentActive(self.T_FROST_INFUSION) then return { COLD = 2 } + else return { FIRE = 2 } + end + end }, computeDamage = function(self, t, ammo) local inc_dam = 0 local damtype = DamageType.FIRE @@ -222,7 +228,7 @@ newTalent{ end return {type="ball", range=self:getTalentRange(t)+(ammo and ammo.alchemist_bomb and ammo.alchemist_bomb.range or 0), radius=self:getTalentRadius(t), friendlyfire=friendlyfire, talent=t} end, - tactical = { ATTACKAREA = 2, DISABLE = 2 }, + tactical = { ATTACKAREA = { PHYSICAL = 2 }, DISABLE = { knockback = 2 } }, computeDamage = function(self, t, ammo) local inc_dam = 0 local damtype = DamageType.SPELLKNOCKBACK diff --git a/game/modules/tome/data/talents/spells/fire-alchemy.lua b/game/modules/tome/data/talents/spells/fire-alchemy.lua index c0bfa7c..3641e4d 100644 --- a/game/modules/tome/data/talents/spells/fire-alchemy.lua +++ b/game/modules/tome/data/talents/spells/fire-alchemy.lua @@ -30,7 +30,7 @@ newTalent{ proj_speed = 20, range = 10, direct_hit = true, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { FIRE = 2 } }, requires_target = true, getDamage = function(self, t) return self:combatTalentSpellDamage(t, 25, 620) end, action = function(self, t) @@ -107,9 +107,9 @@ newTalent{ range = 0, radius = 3, target = function(self, t) - return {type="ball", range=self:getTalentRange(t), radius=self:getTalentRadius(t), selffire=false} + return {type="ball", range=self:getTalentRange(t), radius=self:getTalentRadius(t), selffire=false, friendlyfire=false} end, - tactical = { ATTACKAREA = 2 }, + tactical = { ATTACKAREA = { FIRE = 2 } }, getDuration = function(self, t) return 5 + self:combatSpellpower(0.05) + self:getTalentLevel(t) end, getDamage = function(self, t) return self:combatTalentSpellDamage(t, 5, 90) end, action = function(self, t) @@ -151,7 +151,7 @@ newTalent{ points = 5, proj_speed = 2.4, range = 8, - tactical = { ATTACKAREA = 3 }, + tactical = { ATTACKAREA = { FIRE = 3 } }, getFireDamageOnHit = function(self, t) return self:combatTalentSpellDamage(t, 5, 25) end, getResistance = function(self, t) return self:combatTalentSpellDamage(t, 5, 45) end, getFireDamageInSight = function(self, t) return self:combatTalentSpellDamage(t, 15, 70) end, diff --git a/game/modules/tome/data/talents/spells/fire.lua b/game/modules/tome/data/talents/spells/fire.lua index 9d4d251..d925428 100644 --- a/game/modules/tome/data/talents/spells/fire.lua +++ b/game/modules/tome/data/talents/spells/fire.lua @@ -25,7 +25,7 @@ newTalent{ random_ego = "attack", mana = 12, cooldown = 3, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { FIRE = 2 } }, range = 10, reflectable = true, proj_speed = 20, @@ -82,7 +82,7 @@ newTalent{ random_ego = "attack", mana = 30, cooldown = 18, - tactical = { ATTACK = 1, DISABLE = 3 }, + tactical = { ATTACK = { FIRE = 1 }, DISABLE = { stun = 3 } }, range = 0, radius = function(self, t) return 3 + self:getTalentLevelRaw(t) @@ -131,7 +131,7 @@ newTalent{ random_ego = "attack", mana = 40, cooldown = 8, - tactical = { ATTACKAREA = 2 }, + tactical = { ATTACKAREA = { FIRE = 2 } }, range = 7, radius = function(self, t) return 1 + self:getTalentLevelRaw(t) @@ -180,7 +180,7 @@ newTalent{ random_ego = "attack", mana = 100, cooldown = 30, - tactical = { ATTACKAREA = 3 }, + tactical = { ATTACKAREA = { FIRE = 3 } }, range = 10, radius = 5, direct_hit = true, diff --git a/game/modules/tome/data/talents/spells/golem.lua b/game/modules/tome/data/talents/spells/golem.lua index a308792..69300b8 100644 --- a/game/modules/tome/data/talents/spells/golem.lua +++ b/game/modules/tome/data/talents/spells/golem.lua @@ -34,7 +34,7 @@ newTalent{ return {type="bolt", range=self:getTalentRange(t), min_range=2} end, getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 0.8, 1.6) end, - tactical = { DEFEND = 2, DISABLE = 1 }, + tactical = { DEFEND = { knockback = 2 }, DISABLE = { knockback = 1 } }, action = function(self, t) if self:attr("never_move") then game.logPlayer(self, "Your golem can not do that currently.") return end @@ -144,7 +144,7 @@ newTalent{ requires_target = true, getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 0.8, 1.6) end, getPinDuration = function(self, t) return 2 + self:getTalentLevel(t) end, - tactical = { DISABLE = 2 }, + tactical = { ATTACK = { PHYSICAL = 0.5 }, DISABLE = { pin = 2 } }, action = function(self, t) if self:attr("never_move") then game.logPlayer(self, "Your golem can not do that currently.") return end @@ -218,7 +218,7 @@ newTalent{ return self:combatTalentWeaponDamage(t, 0.4, 1.1) end, getDazeDuration = function(self, t) return 2 + self:getTalentLevel(t) end, - tactical = { DISABLE = 3 }, + tactical = { ATTACKAREA = { PHYSICAL = 0.5 }, DISABLE = { daze = 3 } }, action = function(self, t) if self:attr("never_move") then game.logPlayer(self, "Your golem can not do that currently.") return end @@ -294,7 +294,7 @@ newTalent{ return {type="beam", range=self:getTalentRange(t), talent=t} end, getDamage = function(self, t) return self:combatTalentSpellDamage(t, 25, 320) end, - tactical = { ATTACK = 3 }, + tactical = { ATTACK = { FIRE = 1, COLD = 1, LIGHTNING = 1 } }, action = function(self, t) local tg = self:getTalentTarget(t) local x, y = self:getTarget(tg) @@ -393,7 +393,7 @@ newTalent{ target = function(self, t) return {type="ball", range=self:getTalentRange(t), selffire=false, radius=self:getTalentRadius(t), talent=t} end, - tactical = { ATTACKAREA = 2, CLOSEIN = 1 }, + tactical = { ATTACKAREA = { ARCANE = 2 }, CLOSEIN = 1 }, getDamage = function(self, t) return self:combatTalentSpellDamage(t, 12, 120) end, @@ -434,7 +434,7 @@ newTalent{ target = function(self, t) return {type="ball", range=self:getTalentRange(t), selffire=false, radius=self:getTalentRadius(t)} end, - tactical = { ATTACKAREA = 2 }, + tactical = { ATTACKAREA = { FIRE = 2 } }, action = function(self, t) local duration = 5 + self:getTalentLevel(t) local dam = self:combatTalentSpellDamage(t, 12, 120) @@ -474,7 +474,7 @@ newTalent{ target = function(self, t) return {type="ball", range=self:getTalentRange(t), selffire=false, radius=self:getTalentRadius(t)} end, - tactical = { ATTACKAREA = 3 }, + tactical = { ATTACKAREA = { FIRE = 3 } }, no_npc_use = true, on_pre_use = function(self, t) return self.summoner and self.summoner.dead diff --git a/game/modules/tome/data/talents/spells/grave.lua b/game/modules/tome/data/talents/spells/grave.lua index 0fc2433..fa0df15 100644 --- a/game/modules/tome/data/talents/spells/grave.lua +++ b/game/modules/tome/data/talents/spells/grave.lua @@ -26,7 +26,7 @@ newTalent{ points = 5, mana = 30, cooldown = 8, - tactical = { ATTACKAREA = 2 }, + tactical = { ATTACKAREA = { COLD = 2 } }, range = 7, radius = function(self, t) return 1 + self:getTalentLevelRaw(t) @@ -139,7 +139,7 @@ newTalent{ cooldown = 22, range = 5, radius = 3, - tactical = { ATTACK = 2, DISABLE = 1 }, + tactical = { ATTACK = { COLD = 2 }, DISABLE = { stun = 1 } }, requires_target = true, -- implementation of creeping darkness..used in various locations, but stored here canCreep = function(x, y, ignoreCreepingDark) diff --git a/game/modules/tome/data/talents/spells/ice.lua b/game/modules/tome/data/talents/spells/ice.lua index f2e4f2d..ded5764 100644 --- a/game/modules/tome/data/talents/spells/ice.lua +++ b/game/modules/tome/data/talents/spells/ice.lua @@ -24,7 +24,7 @@ newTalent{ points = 5, mana = 12, cooldown = 3, - tactical = { ATTACKAREA = 1, ATTACK = 1 }, + tactical = { ATTACKAREA = { COLD = 1, stun = 1 } }, range = 10, radius = 1, proj_speed = 3, @@ -65,7 +65,7 @@ newTalent{ mana = 25, cooldown = 10, requires_target = true, - tactical = { ATTACKAREA = 2, DISABLE = 1 }, + tactical = { ATTACKAREA = { COLD = 2 }, DISABLE = { stun = 1 } }, range = 0, radius = function(self, t) return 1 + self:getTalentLevelRaw(t) end, target = function(self, t) @@ -95,7 +95,7 @@ newTalent{ points = 5, mana = 25, cooldown = 15, - tactical = { ATTACKAREA = 2 }, + tactical = { ATTACKAREA = { COLD = function(self, t, target) if target:attr("frozen") then return 2 end end } }, range = 10, requires_target = true, getDamage = function(self, t) return self:combatTalentSpellDamage(t, 10, 180) end, diff --git a/game/modules/tome/data/talents/spells/necrosis.lua b/game/modules/tome/data/talents/spells/necrosis.lua index f860830..77b84a8 100644 --- a/game/modules/tome/data/talents/spells/necrosis.lua +++ b/game/modules/tome/data/talents/spells/necrosis.lua @@ -50,7 +50,7 @@ newTalent{ points = 5, mana = 70, cooldown = 30, - tactical = { ATTACK = 3, DISABLE = 2 }, + tactical = { ATTACK = { ARCANE = 3 }, DISABLE = 2 }, range = 7, requires_target = true, getMax = function(self, t) return 200 + self:combatTalentSpellDamage(t, 28, 850) end, diff --git a/game/modules/tome/data/talents/spells/nightfall.lua b/game/modules/tome/data/talents/spells/nightfall.lua index 6bb5953..3e88472 100644 --- a/game/modules/tome/data/talents/spells/nightfall.lua +++ b/game/modules/tome/data/talents/spells/nightfall.lua @@ -31,7 +31,7 @@ newTalent{ random_ego = "attack", mana = 12, cooldown = 4, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { DARKNESS = 2 } }, range = 10, reflectable = true, proj_speed = 20, @@ -77,7 +77,7 @@ newTalent{ points = 5, mana = 45, cooldown = 18, - tactical = { ATTACK = 2, DISABLE = 3 }, + tactical = { ATTACKAREA = { DARKNESS = 2 }, DISABLE = { confusion = 1.5, blind = 1.5 } }, range = 6, radius = 3, direct_hit = true, @@ -124,7 +124,7 @@ newTalent{ mana = 40, cooldown = 12, direct_hit = true, - tactical = { ATTACK = 2, DISABLE = 2, ESCAPE = 1 }, + tactical = { ATTACKAREA = { DARKNESS = 2 }, DISABLE = { knockback = 2 }, ESCAPE = { knockback = 1 } }, range = 0, radius = function(self, t) return 3 + self:getTalentLevelRaw(t) end, requires_target = true, diff --git a/game/modules/tome/data/talents/spells/stone-alchemy.lua b/game/modules/tome/data/talents/spells/stone-alchemy.lua index 88f5d5f..9ea304a 100644 --- a/game/modules/tome/data/talents/spells/stone-alchemy.lua +++ b/game/modules/tome/data/talents/spells/stone-alchemy.lua @@ -178,7 +178,7 @@ newTalent{ points = 5, mana = 45, cooldown = 15, - tactical = { DISABLE = 3 }, + tactical = { DISABLE = { stun = 1.5, instakill = 1.5 } }, range = function(self, t) if self:getTalentLevel(t) < 3 then return 1 else return math.floor(self:getTalentLevel(t)) end diff --git a/game/modules/tome/data/talents/spells/stone.lua b/game/modules/tome/data/talents/spells/stone.lua index d147743..b032be8 100644 --- a/game/modules/tome/data/talents/spells/stone.lua +++ b/game/modules/tome/data/talents/spells/stone.lua @@ -25,7 +25,7 @@ newTalent{ random_ego = "attack", mana = 10, cooldown = 3, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { PHYSICAL = 1, cut = 1} }, range = 10, direct_hit = true, reflectable = true, @@ -134,7 +134,7 @@ newTalent{ random_ego = "attack", mana = 50, cooldown = 30, - tactical = { ATTACKAREA = 2, DISABLE = 3 }, + tactical = { ATTACKAREA = { PHYSICAL = 2 }, DISABLE = { stun = 3 } }, range = 10, radius = function(self, t) return 2 + (self:getTalentLevel(t)/2) diff --git a/game/modules/tome/data/talents/spells/storm.lua b/game/modules/tome/data/talents/spells/storm.lua index ef65f0d..32e7bce 100644 --- a/game/modules/tome/data/talents/spells/storm.lua +++ b/game/modules/tome/data/talents/spells/storm.lua @@ -24,7 +24,7 @@ newTalent{ points = 5, mana = 12, cooldown = 8, - tactical = { ATTACKAREA = 2, DISABLE =1 }, + tactical = { ATTACKAREA = { LIGHTNING = 2 }, DISABLE = { stun = 1 } }, range = 0, radius = function(self, t) return math.floor(2 + self:getTalentLevel(t) * 0.7) @@ -69,7 +69,7 @@ newTalent{ points = 5, mana = 8, cooldown = 4, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { LIGHTNING = 2 }, DISABLE = { stun = 1 } }, range = 10, requires_target = true, reflectable = true, diff --git a/game/modules/tome/data/talents/spells/water.lua b/game/modules/tome/data/talents/spells/water.lua index 5bb9158..cfeac41 100644 --- a/game/modules/tome/data/talents/spells/water.lua +++ b/game/modules/tome/data/talents/spells/water.lua @@ -25,7 +25,7 @@ newTalent{ random_ego = "attack", mana = 25, cooldown = 8, - tactical = { ATTACKAREA = 2 }, + tactical = { ATTACKAREA = { ACID = 2 } }, range = 8, radius = 3, direct_hit = true, @@ -69,7 +69,7 @@ newTalent{ random_ego = "attack", mana = 14, cooldown = function(self, t) return 7 + self:getTalentLevelRaw(t) end, - tactical = { ATTACK = 1, DISABLE = 3 }, + tactical = { ATTACK = { COLD = 1 }, DISABLE = { stun = 3 } }, range = 10, direct_hit = true, reflectable = true, @@ -100,7 +100,7 @@ newTalent{ random_ego = "attack", mana = 25, cooldown = 10, - tactical = { ESCAPE = 2, ATTACKAREA = 1, DISABLE = 1 }, + tactical = { ESCAPE = { knockback = 2 }, ATTACKAREA = { COLD = 0.5, PHYSICAL = 0.5 }, DISABLE = { knockback = 1 } }, direct_hit = true, range = 0, requires_target = true, @@ -147,7 +147,7 @@ newTalent{ random_ego = "attack", mana = 25, cooldown = 20, - tactical = { ATTACKAREA = 2 }, + tactical = { ATTACKAREA = { COLD = 2, stun = 1 } }, range = 0, radius = 3, requires_target = true, diff --git a/game/modules/tome/data/talents/spells/wildfire.lua b/game/modules/tome/data/talents/spells/wildfire.lua index 9568699..d816498 100644 --- a/game/modules/tome/data/talents/spells/wildfire.lua +++ b/game/modules/tome/data/talents/spells/wildfire.lua @@ -24,7 +24,7 @@ newTalent{ points = 5, mana = 12, cooldown = 5, - tactical = { ATTACKAREA = 2, DISABLE = 2, ESCAPE = 2 }, + tactical = { ATTACKAREA = { FIRE = 2 }, DISABLE = { knockback = 2 }, ESCAPE = { knockback = 2 } }, direct_hit = true, requires_target = true, range = 0, @@ -66,7 +66,7 @@ newTalent{ points = 5, sustain_mana = 40, cooldown = 30, - tactical = { BUFF=2, ATTACKAREA = 1 }, + tactical = { BUFF=2, ATTACKAREA = { FIRE = 1 } }, getDamage = function(self, t) return self:combatTalentSpellDamage(t, 10, 55) end, activate = function(self, t) game:playSoundNear(self, "talents/fire") diff --git a/game/modules/tome/data/talents/techniques/2hweapon.lua b/game/modules/tome/data/talents/techniques/2hweapon.lua index 739438c..89dda84 100644 --- a/game/modules/tome/data/talents/techniques/2hweapon.lua +++ b/game/modules/tome/data/talents/techniques/2hweapon.lua @@ -26,7 +26,7 @@ newTalent{ random_ego = "attack", cooldown = 10, stamina = 30, - tactical = { ATTACKAREA = 3 }, + tactical = { ATTACKAREA = { weapon = 3 } }, range = 0, radius = 1, requires_target = true, @@ -112,7 +112,7 @@ newTalent{ random_ego = "attack", stamina = 30, cooldown = 18, - tactical = { ATTACKAREA = 1, DISABLE = 3 }, + tactical = { ATTACKAREA = { confusion = 1 }, DISABLE = { confusion = 3 } }, range = 0, radius = function(self, t) return 3 + self:getTalentLevelRaw(t) @@ -155,7 +155,7 @@ newTalent{ cooldown = 30, stamina = 30, requires_target = true, - tactical = { ATTACK = 1 }, + tactical = { ATTACK = { weapon = 1 } }, on_pre_use = function(self, t, silent) if not self:hasTwoHandedWeapon() then if not silent then game.logPlayer(self, "You require a two handed weapon to use this talent.") end return false end return true end, action = function(self, t) local weapon = self:hasTwoHandedWeapon() @@ -213,7 +213,7 @@ newTalent{ random_ego = "attack", cooldown = 6, stamina = 8, - tactical = { ATTACK = 2, DISABLE = 2 }, + tactical = { ATTACK = { weapon = 2 }, DISABLE = { stun = 2 } }, requires_target = true, on_pre_use = function(self, t, silent) if not self:hasTwoHandedWeapon() then if not silent then game.logPlayer(self, "You require a two handed weapon to use this talent.") end return false end return true end, action = function(self, t) @@ -257,7 +257,7 @@ newTalent{ cooldown = 6, stamina = 12, requires_target = true, - tactical = { ATTACK = 2, DISABLE = 2 }, + tactical = { ATTACK = { weapon = 2 }, DISABLE = { stun = 2 } }, on_pre_use = function(self, t, silent) if not self:hasTwoHandedWeapon() then if not silent then game.logPlayer(self, "You require a two handed weapon to use this talent.") end return false end return true end, action = function(self, t) local weapon = self:hasTwoHandedWeapon() @@ -302,7 +302,7 @@ newTalent{ random_ego = "attack", cooldown = 6, stamina = 12, - tactical = { ATTACK = 2, DISABLE = 2 }, + tactical = { ATTACK = { weapon = 2 }, DISABLE = { stun = 2 } }, requires_target = true, on_pre_use = function(self, t, silent) if not self:hasTwoHandedWeapon() then if not silent then game.logPlayer(self, "You require a two handed weapon to use this talent.") end return false end return true end, action = function(self, t) diff --git a/game/modules/tome/data/talents/techniques/archery.lua b/game/modules/tome/data/talents/techniques/archery.lua index cde5d8b..51d21fc 100644 --- a/game/modules/tome/data/talents/techniques/archery.lua +++ b/game/modules/tome/data/talents/techniques/archery.lua @@ -28,7 +28,7 @@ newTalent{ range = archery_range, message = "@Source@ shoots!", requires_target = true, - tactical = { ATTACK = 1 }, + tactical = { ATTACK = { weapon = 1 } }, on_pre_use = function(self, t, silent) if not self:hasArcheryWeapon() then if not silent then game.logPlayer(self, "You require a bow or sling for this talent.") end return false end return true end, no_unlearn_last = true, use_psi_archery = function(self, t) @@ -63,7 +63,7 @@ newTalent{ require = techs_dex_req1, range = archery_range, requires_target = true, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { weapon = 2 } }, on_pre_use = function(self, t, silent) if not self:hasArcheryWeapon() then if not silent then game.logPlayer(self, "You require a bow or sling for this talent.") end return false end return true end, action = function(self, t) local targets = self:archeryAcquireTargets(nil, {one_shot=true}) @@ -174,7 +174,7 @@ newTalent{ require = techs_dex_req4, range = archery_range, requires_target = true, - tactical = { ATTACK = 3 }, + tactical = { ATTACK = { weapon = 1 }, STAMINA = 1 }, on_pre_use = function(self, t, silent) if not self:hasArcheryWeapon() then if not silent then game.logPlayer(self, "You require a bow or sling for this talent.") end return false end return true end, action = function(self, t) local targets = self:archeryAcquireTargets(nil, {one_shot=true}) @@ -206,7 +206,7 @@ newTalent{ return rad end, require = techs_dex_req1, - tactical = { ATTACKAREA = 2, DISABLE = 2 }, + tactical = { ATTACKAREA = { FIRE = 2 }, DISABLE = { blind = 2 } }, on_pre_use = function(self, t, silent) if not self:hasArcheryWeapon() then if not silent then game.logPlayer(self, "You require a bow or sling for this talent.") end return false end return true end, requires_target = true, target = function(self, t) @@ -247,7 +247,7 @@ newTalent{ stamina = 15, require = techs_dex_req2, range = archery_range, - tactical = { ATTACK = 1, DISABLE = 1 }, + tactical = { ATTACK = { weapon = 1 }, DISABLE = 1 }, requires_target = true, on_pre_use = function(self, t, silent) if not self:hasArcheryWeapon() then if not silent then game.logPlayer(self, "You require a bow or sling for this talent.") end return false end return true end, archery_onhit = function(self, t, target, x, y) @@ -274,7 +274,7 @@ newTalent{ stamina = 15, require = techs_dex_req3, range = archery_range, - tactical = { ATTACK = 1, DISABLE = 2 }, + tactical = { ATTACK = { weapon = 1 }, DISABLE = { pin = 2 } }, requires_target = true, on_pre_use = function(self, t, silent) if not self:hasArcheryWeapon() then if not silent then game.logPlayer(self, "You require a bow or sling for this talent.") end return false end return true end, archery_onhit = function(self, t, target, x, y) @@ -311,7 +311,7 @@ newTalent{ radius = function(self, t) return 1 + self:getTalentLevel(t) / 3 end, - tactical = { ATTACKAREA = 2, DISABLE = 3 }, + tactical = { ATTACKAREA = { weapon = 2 }, DISABLE = { stun = 3 } }, requires_target = true, target = function(self, t) return {type="ball", radius=self:getTalentRadius(t), range=self:getTalentRange(t)} diff --git a/game/modules/tome/data/talents/techniques/battle-tactics.lua b/game/modules/tome/data/talents/techniques/battle-tactics.lua index abb2428..c4ea4e4 100644 --- a/game/modules/tome/data/talents/techniques/battle-tactics.lua +++ b/game/modules/tome/data/talents/techniques/battle-tactics.lua @@ -59,7 +59,7 @@ newTalent{ cooldown = 12, stamina = 24, requires_target = true, - tactical = { ATTACK = 1, DISABLE = 2 }, + tactical = { ATTACK = { weapon = 1, cut = 1 }, DISABLE = 2 }, action = function(self, t) local tg = {type="hit", range=self:getTalentRange(t)} local x, y, target = self:getTarget(tg) diff --git a/game/modules/tome/data/talents/techniques/bow.lua b/game/modules/tome/data/talents/techniques/bow.lua index 8a64949..0ff857f 100644 --- a/game/modules/tome/data/talents/techniques/bow.lua +++ b/game/modules/tome/data/talents/techniques/bow.lua @@ -42,7 +42,7 @@ newTalent{ stamina = 15, require = techs_dex_req2, range = archery_range, - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { weapon = 2 } }, requires_target = true, on_pre_use = function(self, t, silent) if not self:hasArcheryWeapon("bow") then if not silent then game.logPlayer(self, "You require a bow for this talent.") end return false end return true end, action = function(self, t) @@ -67,7 +67,7 @@ newTalent{ require = techs_dex_req3, range = archery_range, radius = 1, - tactical = { ATTACKAREA = 1 }, + tactical = { ATTACKAREA = { weapon = 1 } }, requires_target = true, target = function(self, t) return {type="ball", radius=self:getTalentRadius(t), range=self:getTalentRange(t)} @@ -101,7 +101,7 @@ newTalent{ return 2 + self:getTalentLevel(t)/3 end, direct_hit = true, - tactical = { ATTACKAREA = 2 }, + tactical = { ATTACKAREA = { weapon = 2 } }, requires_target = true, target = function(self, t) return {type="ball", radius=self:getTalentRadius(t), range=self:getTalentRange(t), selffire=false} diff --git a/game/modules/tome/data/talents/techniques/combat-techniques.lua b/game/modules/tome/data/talents/techniques/combat-techniques.lua index 776f9b1..c02e556 100644 --- a/game/modules/tome/data/talents/techniques/combat-techniques.lua +++ b/game/modules/tome/data/talents/techniques/combat-techniques.lua @@ -58,7 +58,7 @@ newTalent{ random_ego = "attack", stamina = 22, cooldown = function(self, t) return math.floor(40 - self:getTalentLevel(t) * 4) end, - tactical = { ATTACK = 1, CLOSEIN = 3 }, + tactical = { ATTACK = { weapon = 1, stun = 1 }, CLOSEIN = 3 }, requires_target = true, range = function(self, t) return math.floor(5 + self:getTalentLevelRaw(t)) end, action = function(self, t) diff --git a/game/modules/tome/data/talents/techniques/dualweapon.lua b/game/modules/tome/data/talents/techniques/dualweapon.lua index c54ab12..c2b0ec6 100644 --- a/game/modules/tome/data/talents/techniques/dualweapon.lua +++ b/game/modules/tome/data/talents/techniques/dualweapon.lua @@ -116,7 +116,7 @@ newTalent{ stamina = 15, require = techs_dex_req1, requires_target = true, - tactical = { ATTACK = 2, DISABLE = 2 }, + tactical = { ATTACK = { weapon = 1 }, DISABLE = { stun = 2 } }, on_pre_use = function(self, t, silent) if not self:hasDualWeapon() then if not silent then game.logPlayer(self, "You require a two weapons to use this talent.") end return false end return true end, action = function(self, t) local weapon, offweapon = self:hasDualWeapon() @@ -165,7 +165,7 @@ newTalent{ stamina = 15, require = techs_dex_req2, requires_target = true, - tactical = { ATTACK = 4 }, + tactical = { ATTACK = { weapon = 4 } }, on_pre_use = function(self, t, silent) if not self:hasDualWeapon() then if not silent then game.logPlayer(self, "You require a two weapons to use this talent.") end return false end return true end, action = function(self, t) local weapon, offweapon = self:hasDualWeapon() @@ -198,7 +198,7 @@ newTalent{ stamina = 30, require = techs_dex_req3, requires_target = true, - tactical = { ATTACKAREA = 2 }, + tactical = { ATTACKAREA = { weapon = 1, cut = 1 } }, on_pre_use = function(self, t, silent) if not self:hasDualWeapon() then if not silent then game.logPlayer(self, "You require a two weapons to use this talent.") end return false end return true end, action = function(self, t) local weapon, offweapon = self:hasDualWeapon() @@ -251,7 +251,7 @@ newTalent{ cooldown = 8, stamina = 30, require = techs_dex_req4, - tactical = { ATTACKAREA = 2 }, + tactical = { ATTACKAREA = { weapon = 2 } }, range = 0, radius = 1, target = function(self, t) diff --git a/game/modules/tome/data/talents/techniques/field-control.lua b/game/modules/tome/data/talents/techniques/field-control.lua index 0f4e47c..918a76c 100644 --- a/game/modules/tome/data/talents/techniques/field-control.lua +++ b/game/modules/tome/data/talents/techniques/field-control.lua @@ -75,7 +75,7 @@ newTalent{ random_ego = "defensive", cooldown = 15, stamina = 20, - tactical = { ESCAPE = 1, DISABLE = 3 }, + tactical = { ESCAPE = { knockback = 1 }, DISABLE = { knockback = 3 } }, requires_target = true, action = function(self, t) local tg = {type="hit", range=self:getTalentRange(t)} diff --git a/game/modules/tome/data/talents/techniques/finishing-moves.lua b/game/modules/tome/data/talents/techniques/finishing-moves.lua index 2a68e66..8fa504d 100644 --- a/game/modules/tome/data/talents/techniques/finishing-moves.lua +++ b/game/modules/tome/data/talents/techniques/finishing-moves.lua @@ -26,7 +26,7 @@ newTalent{ cooldown = 10, stamina = 12, message = "@Source@ throws a finishing uppercut.", - tactical = { ATTACK = 2, DISABLE = 2 }, + tactical = { ATTACK = { weapon = 2 }, DISABLE = { stun = 2 } }, requires_target = true, --on_pre_use = function(self, t, silent) if not self:hasEffect(self.EFF_COMBO) then if not silent then game.logPlayer(self, "You must have a combo going to use this ability.") end return false end return true end, getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 1.1, 1.8) + getStrikingStyle(self, dam) end, @@ -78,7 +78,7 @@ newTalent{ cooldown = 10, stamina = 10, message = "@Source@ throws a concussive punch.", - tactical = { ATTACK = 2, }, + tactical = { ATTACK = { weapon = 2 }, }, radius = function(self, t) return 1 + math.floor(self:getTalentLevel(t) / 4) end, requires_target = true, --on_pre_use = function(self, t, silent) if not self:hasEffect(self.EFF_COMBO) then if not silent then game.logPlayer(self, "You must have a combo going to use this ability.") end return false end return true end, @@ -135,7 +135,7 @@ newTalent{ cooldown = 10, stamina = 10, message = "@Source@ throws a body shot.", - tactical = { ATTACK = 2, DISABLE = 2 }, + tactical = { ATTACK = { weapon = 2 }, DISABLE = { stun = 2 } }, requires_target = true, --on_pre_use = function(self, t, silent) if not self:hasEffect(self.EFF_COMBO) then if not silent then game.logPlayer(self, "You must have a combo going to use this ability.") end return false end return true end, getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 1.1, 1.8) + getStrikingStyle(self, dam) end, @@ -193,7 +193,7 @@ newTalent{ cooldown = 16, stamina = 12, message = "@Source@ throws a wild haymaker!", - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { weapon = 2 } }, requires_target = true, --on_pre_use = function(self, t, silent) if not self:hasEffect(self.EFF_COMBO) then if not silent then game.logPlayer(self, "You must have a combo going to use this ability.") end return false end return true end, getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 1.4, 2.1) + getStrikingStyle(self, dam) end, diff --git a/game/modules/tome/data/talents/techniques/grappling.lua b/game/modules/tome/data/talents/techniques/grappling.lua index f81a9bc..1162be5 100644 --- a/game/modules/tome/data/talents/techniques/grappling.lua +++ b/game/modules/tome/data/talents/techniques/grappling.lua @@ -138,7 +138,7 @@ newTalent{ random_ego = "attack", cooldown = 12, stamina = 10, - tactical = { ATTACK = 2, DISABLE = 2 }, + tactical = { ATTACK = { PHYSICAL = 2 }, DISABLE = 2 }, requires_target = true, getDuration = function(self, t) return 2 + math.floor(self:getTalentLevel(t)) end, getDamage = function(self, t) return self:combatTalentPhysicalDamage(t, 10, 100) * getUnarmedTrainingBonus(self) end, @@ -195,7 +195,7 @@ newTalent{ require = techs_req3, mode = "passive", points = 5, - tactical = { ATTACK = 2, DISABLE = 2 }, + tactical = { ATTACK = { PHYSICAL = 2 }, DISABLE = { silence = 2 } }, requires_target = true, getDamage = function(self, t) return self:combatTalentPhysicalDamage(t, 5, 50) * getUnarmedTrainingBonus(self) end, info = function(self, t) @@ -215,7 +215,7 @@ newTalent{ random_ego = "attack", cooldown = 24, stamina = 12, - tactical = { ATTACK = 2, DISABLE = 2, CLOSEIN = 2 }, + tactical = { ATTACK = { PHYSICAL = 1, stun = 1}, DISABLE = { stun = 2 }, CLOSEIN = 2 }, requires_target = true, range = function(self, t) return 2 + math.floor(self:getTalentLevel(t)/3) end, getDuration = function(self, t) return 2 + math.floor(self:getTalentLevel(t)) end, diff --git a/game/modules/tome/data/talents/techniques/mobility.lua b/game/modules/tome/data/talents/techniques/mobility.lua index 4420a7a..cfe0684 100644 --- a/game/modules/tome/data/talents/techniques/mobility.lua +++ b/game/modules/tome/data/talents/techniques/mobility.lua @@ -25,7 +25,7 @@ newTalent{ points = 5, cooldown = 14, stamina = 30, - tactical = { ESCAPE = 1, ATTACK = 0.5 }, + tactical = { ESCAPE = 1, ATTACK = { weapon = 0.5 } }, require = techs_dex_req1, requires_target = true, getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 0.4, 1) end, diff --git a/game/modules/tome/data/talents/techniques/pugilism.lua b/game/modules/tome/data/talents/techniques/pugilism.lua index e3ea5b7..36706b5 100644 --- a/game/modules/tome/data/talents/techniques/pugilism.lua +++ b/game/modules/tome/data/talents/techniques/pugilism.lua @@ -66,7 +66,7 @@ newTalent{ random_ego = "attack", cooldown = function(self, t) return math.ceil(3 * getRelentless(self, cd)) end, message = "@Source@ throws two quick punches.", - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { weapon = 2 } }, requires_target = true, getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 0.1, 0.8) + getStrikingStyle(self, dam) end, -- Learn the appropriate stance @@ -161,7 +161,7 @@ newTalent{ stamina = 12, range = function(self, t) return 2 + math.ceil(self:getTalentLevel(t)/2) end, message = "@Source@ lashes out with a spinning backhand.", - tactical = { ATTACKAREA = 2, CLOSEIN = 1 }, + tactical = { ATTACKAREA = { weapon = 2 }, CLOSEIN = 1 }, requires_target = true, getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 1.0, 1.7) + getStrikingStyle(self, dam) end, action = function(self, t) @@ -260,7 +260,7 @@ newTalent{ cooldown = function(self, t) return math.ceil(24 * getRelentless(self, cd)) end, stamina = 15, message = "@Source@ lashes out with a flurry of fists.", - tactical = { ATTACK = 2 }, + tactical = { ATTACK = { weapon = 2 } }, requires_target = true, getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 0.4, 1.1) + getStrikingStyle(self, dam) end, action = function(self, t) diff --git a/game/modules/tome/data/talents/techniques/sling.lua b/game/modules/tome/data/talents/techniques/sling.lua index 77f0ee9..1063fe4 100644 --- a/game/modules/tome/data/talents/techniques/sling.lua +++ b/game/modules/tome/data/talents/techniques/sling.lua @@ -43,7 +43,7 @@ newTalent{ require = techs_dex_req2, range = archery_range, requires_target = true, - tactical = { ATTACK = 2, DISABLE = 2 }, + tactical = { ATTACK = { weapon = 2 }, DISABLE = { blind = 2 } }, on_pre_use = function(self, t, silent) if not self:hasArcheryWeapon("sling") then if not silent then game.logPlayer(self, "You require a sling for this talent.") end return false end return true end, archery_onhit = function(self, t, target, x, y) if target:canBe("blind") then @@ -78,7 +78,7 @@ newTalent{ require = techs_dex_req3, range = archery_range, requires_target = true, - tactical = { ATTACK = 2, DISABLE = 2, ESCAPE = 1 }, + tactical = { ATTACK = { weapon = 2 }, DISABLE = { knockback = 2 }, ESCAPE = { knockback = 1 } }, on_pre_use = function(self, t, silent) if not self:hasArcheryWeapon("sling") then if not silent then game.logPlayer(self, "You require a sling for this talent.") end return false end return true end, archery_onhit = function(self, t, target, x, y) if target:checkHit(self:combatAttack(), target:combatPhysicalResist(), 0, 95, 15) and target:canBe("knockback") then @@ -113,7 +113,7 @@ newTalent{ require = techs_dex_req4, range = archery_range, requires_target = true, - tactical = { ATTACK = 3 }, + tactical = { ATTACK = { weapon = 3 } }, on_pre_use = function(self, t, silent) if not self:hasArcheryWeapon("sling") then if not silent then game.logPlayer(self, "You require a sling for this talent.") end return false end return true end, action = function(self, t) if not self:hasArcheryWeapon("sling") then game.logPlayer(self, "You must wield a sling!") return nil end diff --git a/game/modules/tome/data/talents/techniques/thuggery.lua b/game/modules/tome/data/talents/techniques/thuggery.lua index f68c6af..2ac449c 100644 --- a/game/modules/tome/data/talents/techniques/thuggery.lua +++ b/game/modules/tome/data/talents/techniques/thuggery.lua @@ -25,7 +25,7 @@ newTalent{ points = 5, cooldown = 12, stamina = 20, - tactical = { DISABLE = 2, ATTACK = 1 }, + tactical = { DISABLE = { confusion = 2 }, ATTACK = { PHYSICAL = 1 } }, require = techs_req1, requires_target = true, getDuration = function(self, t) return 3 + math.ceil(self:getTalentLevel(t) / 2) end, diff --git a/game/modules/tome/data/talents/techniques/unarmed-discipline.lua b/game/modules/tome/data/talents/techniques/unarmed-discipline.lua index d9f9c52..599d973 100644 --- a/game/modules/tome/data/talents/techniques/unarmed-discipline.lua +++ b/game/modules/tome/data/talents/techniques/unarmed-discipline.lua @@ -24,7 +24,7 @@ newTalent{ points = 5, cooldown = 6, stamina = 12, - tactical = { ATTACK = 2, ESCAPE = 2 }, + tactical = { ATTACK = { PHYSICAL = 2 }, ESCAPE = { knockback = 2 } }, requires_target = true, getDamage = function(self, t) return self:combatTalentPhysicalDamage(t, 10, 100) * getUnarmedTrainingBonus(self) end, getPush = function(self, t) return 1 + math.ceil(self:getTalentLevel(t)/4) end, @@ -148,7 +148,7 @@ newTalent{ stamina = 18, range = 0, radius = function(self, t) return 1 end, - tactical = { ATTACKAREA = 2, DISABLE = 2 }, + tactical = { ATTACKAREA = { PHYSICAL = 2 }, DISABLE = { knockback = 2 } }, requires_target = true, getDamage = function(self, t) return self:combatTalentPhysicalDamage(t, 15, 150) * getUnarmedTrainingBonus(self) end, target = function(self, t) diff --git a/game/modules/tome/data/talents/techniques/warcries.lua b/game/modules/tome/data/talents/techniques/warcries.lua index 1f767e7..c88c08a 100644 --- a/game/modules/tome/data/talents/techniques/warcries.lua +++ b/game/modules/tome/data/talents/techniques/warcries.lua @@ -34,7 +34,7 @@ newTalent{ return {type="cone", range=self:getTalentRange(t), radius=self:getTalentRadius(t), selffire=false} end, requires_target = true, - tactical = { ATTACKAREA = 2 }, + tactical = { ATTACKAREA = { PHYSICAL = 2 } }, action = function(self, t) local tg = self:getTalentTarget(t) local x, y = self:getTarget(tg) diff --git a/game/modules/tome/data/talents/techniques/weaponshield.lua b/game/modules/tome/data/talents/techniques/weaponshield.lua index dc67fb5..a84e1fe 100644 --- a/game/modules/tome/data/talents/techniques/weaponshield.lua +++ b/game/modules/tome/data/talents/techniques/weaponshield.lua @@ -30,7 +30,7 @@ newTalent{ cooldown = 6, stamina = 8, requires_target = true, - tactical = { ATTACK = 1, DISABLE = 3 }, + tactical = { ATTACK = 1, DISABLE = { stun = 3 } }, on_pre_use = function(self, t, silent) if not self:hasShield() then if not silent then game.logPlayer(self, "You require a weapon and a shield to use this talent.") end return false end return true end, action = function(self, t) local shield = self:hasShield() @@ -86,7 +86,7 @@ newTalent{ cooldown = 8, stamina = 22, requires_target = true, - tactical = { ATTACK = 2, ESCAPE = 1, DISABLE = 1 }, + tactical = { ATTACK = 2, ESCAPE = { knockback = 1 }, DISABLE = { knockback = 1 } }, on_pre_use = function(self, t, silent) if not self:hasShield() then if not silent then game.logPlayer(self, "You require a weapon and a shield to use this talent.") end return false end return true end, action = function(self, t) local shield = self:hasShield() @@ -222,7 +222,7 @@ newTalent{ random_ego = "attack", cooldown = 10, stamina = 30, - tactical = { ESCAPE = 2, DEFEND = 0.5 }, + tactical = { ESCAPE = { knockback = 2 }, DEFEND = { knockback = 0.5 } }, on_pre_use = function(self, t, silent) if not self:hasShield() then if not silent then game.logPlayer(self, "You require a weapon and a shield to use this talent.") end return false end return true end, action = function(self, t) local shield = self:hasShield() diff --git a/game/modules/tome/data/talents/undeads/ghoul.lua b/game/modules/tome/data/talents/undeads/ghoul.lua index 1bbe7fd..7503172 100644 --- a/game/modules/tome/data/talents/undeads/ghoul.lua +++ b/game/modules/tome/data/talents/undeads/ghoul.lua @@ -87,7 +87,7 @@ newTalent{ require = undeads_req3, points = 5, cooldown = 25, - tactical = { ATTACK = 1, HEAL = 1 }, + tactical = { ATTACK = { BLIGHT = 1 }, HEAL = 1 }, range=1, requires_target = true, action = function(self, t) @@ -120,7 +120,7 @@ newTalent{ require = undeads_req4, points = 5, cooldown = 15, - tactical = { ATTACK = 1, DISABLE = 2 }, + tactical = { ATTACK = 0.5, DISABLE = { stun = 2 } }, range = 1, requires_target = true, action = function(self, t) -- 1.7.4.1