Skip to content
Snippets Groups Projects
Commit 8899a98c authored by dg's avatar dg
Browse files

NPCs that have talents that can hit over other NPCs (type "hit", "ball", "beam") can now do so

git-svn-id: http://svn.net-core.org/repos/t-engine4@1152 51575b47-30f0-44d4-a5cc-537603b46e54
parent c50406f8
No related branches found
No related tags found
No related merge requests found
Showing
with 53 additions and 1 deletion
......@@ -27,7 +27,7 @@ newAI("dumb_talented", function(self)
for tid, _ in pairs(self.talents) do
local t = self:getTalentFromId(tid)
-- print(self.name, self.uid, "dumb ai talents can try use", t.name, tid, "::", t.mode, not self:isTalentCoolingDown(t), target_dist <= self:getTalentRange(t), self:preUseTalent(t, true), self:canProject({type="bolt"}, self.ai_target.actor.x, self.ai_target.actor.y))
if t.mode == "activated" and not self:isTalentCoolingDown(t) and target_dist <= self:getTalentRange(t) and self:preUseTalent(t, true, true) and self:canProject({type="bolt"}, self.ai_target.actor.x, self.ai_target.actor.y) and self:hasLOS(self.ai_target.actor.x, self.ai_target.actor.y) then
if t.mode == "activated" and not self:isTalentCoolingDown(t) and target_dist <= self:getTalentRange(t) and self:preUseTalent(t, true, true) and self:canProject({type=t.direct_hit and "hit" or "bolt"}, self.ai_target.actor.x, self.ai_target.actor.y) and self:hasLOS(self.ai_target.actor.x, self.ai_target.actor.y) then
avail[#avail+1] = tid
print(self.name, self.uid, "dumb ai talents can use", t.name, tid)
elseif t.mode == "sustained" and not self:isTalentCoolingDown(t) and not self:isTalentActive(t.id) and self:preUseTalent(t, true, true) then
......
......@@ -26,6 +26,7 @@ newTalent{
cooldown = 4,
range = 20,
random_ego = "attack",
direct_hit = true,
action = function(self, t)
local tg = {type="beam", range=self:getTalentRange(t), talent=t}
local x, y = self:getTarget(tg)
......@@ -115,6 +116,7 @@ newTalent{
tactical = {
DEFEND = 10,
},
direct_hit = true,
absorb = function(self, t, p)
game.logPlayer(self, "Your bone shield absorbs the damage!")
self:removeParticles(table.remove(p.particles))
......
......@@ -25,6 +25,7 @@ newTalent{
cooldown = 20,
vim = 20,
range = 20,
direct_hit = true,
action = function(self, t)
local tg = {type="hit", range=self:getTalentRange(t), talent=t}
local x, y = self:getTarget(tg)
......@@ -53,6 +54,7 @@ newTalent{
cooldown = 20,
vim = 20,
range = 20,
direct_hit = true,
action = function(self, t)
local tg = {type="hit", range=self:getTalentRange(t), talent=t}
local x, y = self:getTarget(tg)
......@@ -81,6 +83,7 @@ newTalent{
cooldown = 20,
vim = 20,
range = 20,
direct_hit = true,
action = function(self, t)
local tg = {type="hit", range=self:getTalentRange(t), talent=t}
local x, y = self:getTarget(tg)
......@@ -109,6 +112,7 @@ newTalent{
cooldown = 20,
vim = 20,
range = 20,
direct_hit = true,
action = function(self, t)
local tg = {type="hit", range=self:getTalentRange(t), talent=t}
local x, y = self:getTarget(tg)
......
......@@ -25,6 +25,7 @@ newTalent{
cooldown = 20,
vim = 30,
range = 30,
direct_hit = true,
action = function(self, t)
local tg = {type="hit", range=self:getTalentRange(t), talent=t}
local x, y = self:getTarget(tg)
......@@ -53,6 +54,7 @@ newTalent{
cooldown = 20,
vim = 30,
range = 30,
direct_hit = true,
action = function(self, t)
local tg = {type="hit", range=self:getTalentRange(t), talent=t}
local x, y = self:getTarget(tg)
......@@ -81,6 +83,7 @@ newTalent{
cooldown = 20,
vim = 30,
range = 30,
direct_hit = true,
action = function(self, t)
local tg = {type="hit", range=self:getTalentRange(t), talent=t}
local x, y = self:getTarget(tg)
......@@ -109,6 +112,7 @@ newTalent{
cooldown = 20,
vim = 30,
range = 30,
direct_hit = true,
action = function(self, t)
local tg = {type="hit", range=self:getTalentRange(t), talent=t}
local x, y = self:getTarget(tg)
......
......@@ -122,6 +122,7 @@ newTalent{
vim = 35,
cooldown = 15,
range = 10,
direct_hit = true,
action = function(self, t)
local tg = {type="ball", range=self:getTalentRange(t), radius=2}
local x, y = self:getTarget(tg)
......
......@@ -76,6 +76,7 @@ newTalent{
stamina = 100,
require = cuns_req4,
range = function(self, t) return math.floor(5 + self:getTalentLevel(t)) end,
direct_hit = true,
action = function(self, t)
local tg = {type="hit", range=self:getTalentRange(t)}
local x, y, target = self:getTarget(tg)
......
......@@ -29,6 +29,7 @@ newTalent{
ATTACK = 10,
},
range = 20,
direct_hit = true,
reflectable = true,
action = function(self, t)
local tg = {type="beam", range=self:getTalentRange(t), talent=t}
......@@ -58,6 +59,7 @@ newTalent{
ATTACK = 10,
},
range = 6,
direct_hit = true,
action = function(self, t)
local duration = self:getTalentLevel(t) + 2
local radius = 3
......@@ -106,6 +108,7 @@ newTalent{
ATTACK = 10,
},
range = 2,
direct_hit = true,
action = function(self, t)
local tg = {type="ball", range=0, radius=self:getTalentRange(t), talent=t, friendlyfire=false}
local grids = self:project(tg, self.x, self.y, DamageType.LIGHT, self:spellCrit(10 + self:combatSpellpower(0.2) * self:getTalentLevel(t)))
......@@ -139,6 +142,7 @@ newTalent{
ATTACKAREA = 10,
},
range = 10,
direct_hit = true,
action = function(self, t)
local tg = {type="ball", range=self:getTalentRange(t), radius=1 + math.floor(self:getTalentLevelRaw(t) / 3), friendlyfire=self:spellFriendlyFire(), talent=t}
local x, y = self:getTarget(tg)
......
......@@ -29,6 +29,7 @@ newTalent{
ATTACK = 10,
},
range = 10,
direct_hit = true,
reflectable = true,
action = function(self, t)
local tg = {type="hit", range=self:getTalentRange(t), talent=t}
......@@ -68,6 +69,7 @@ newTalent{
ATTACK = 10,
},
range = 6,
direct_hit = true,
action = function(self, t)
local tg = {type="ball", range=0, friendlyfire=true, radius=2 + self:getTalentLevel(t) / 2, talent=t}
self:project(tg, self.x, self.y, DamageType.LITE, 1)
......@@ -102,6 +104,7 @@ newTalent{
ATTACK = 10,
},
range = 10,
direct_hit = true,
action = function(self, t)
local tg = {type="beam", range=self:getTalentRange(t), talent=t}
local x, y = self:getTarget(tg)
......@@ -132,6 +135,7 @@ newTalent{
ATTACKAREA = 10,
},
range = 3,
direct_hit = true,
action = function(self, t)
local tg = {type="ball", range=0, radius=3, friendlyfire=false, talent=t}
local grids = self:project(tg, self.x, self.y, DamageType.LIGHT, self:spellCrit(self:combatTalentSpellDamage(t, 10, 160)))
......
......@@ -126,6 +126,7 @@ newTalent{
ATTACKAREA = 10,
},
range = 3,
direct_hit = true,
action = function(self, t)
local tg = {type="ball", range=0, radius=self:getTalentRange(t), talent=t, friendlyfire=false}
self:project(tg, self.x, self.y, DamageType.CONFUSION, {
......
......@@ -133,6 +133,7 @@ newTalent{
ATTACKAREA = 10,
},
range = function(self, t) return 4 + self:getTalentLevelRaw(t) end,
direct_hit = true,
action = function(self, t)
local tg = {type="cone", range=0, radius=self:getTalentRange(t), friendlyfire=false, talent=t}
local x, y = self:getTarget(tg)
......
......@@ -49,6 +49,7 @@ newTalent{
equilibrium = 7,
cooldown = 10,
range = 5,
direct_hit = true,
tactical = {
DEFEND = 10,
},
......@@ -77,6 +78,7 @@ newTalent{
ATTACKAREA = 10,
},
range = 20,
direct_hit = true,
action = function(self, t)
local duration = 2 + self:getTalentLevelRaw(t)
local radius = 2
......@@ -116,6 +118,7 @@ newTalent{
ATTACKAREA = 10,
},
range = function(self, t) return 4 + self:getTalentLevelRaw(t) end,
direct_hit = true,
action = function(self, t)
local tg = {type="cone", range=0, radius=self:getTalentRange(t), friendlyfire=false, talent=t}
local x, y = self:getTarget(tg)
......
......@@ -109,6 +109,7 @@ newTalent{
ATTACKAREA = 10,
},
range = function(self, t) return 4 + self:getTalentLevelRaw(t) end,
direct_hit = true,
action = function(self, t)
local tg = {type="cone", range=0, radius=self:getTalentRange(t), friendlyfire=false, talent=t}
local x, y = self:getTarget(tg)
......
......@@ -87,6 +87,7 @@ newTalent{
ATTACK = 10,
},
range = 20,
direct_hit = true,
proj_speed = 8,
action = function(self, t)
local tg = {type="bolt", range=self:getTalentRange(t), display={particle="bolt_arcane"}}
......
......@@ -292,6 +292,7 @@ newTalent{
type = {"other/other", 1},
cooldown = 4,
range = 20,
direct_hit = true,
action = function(self, t)
local filters = self.summon or {{type=self.type, subtype=self.subtype, number=1, hasxp=true, lastfor=20}}
if #filters == 0 then return end
......@@ -425,6 +426,7 @@ newTalent{
cooldown = 10,
mana = 16,
range = 20,
direct_hit = true,
action = function(self, t)
local tg = {type="hit", range=self:getTalentRange(t), talent=t}
local x, y = self:getTarget(tg)
......@@ -472,6 +474,7 @@ newTalent{
ATTACK = 10,
},
range = 20,
direct_hit = true,
reflectable = true,
action = function(self, t)
local tg = {type="hit", range=self:getTalentRange(t), talent=t}
......@@ -529,6 +532,7 @@ newTalent{
DEFEND = 5,
},
range = 4,
direct_hit = true,
action = function(self, t)
local tg = {type="cone", range=0, radius=4 + self:getTalentLevelRaw(t), friendlyfire=false, talent=t}
local x, y = self:getTarget(tg)
......@@ -575,6 +579,7 @@ newTalent{
ATTACK = 10,
},
range = 20,
direct_hit = true,
action = function(self, t)
local tg = {type="ball", range=self:getTalentRange(t), radius=2}
local x, y = self:getTarget(tg)
......@@ -640,6 +645,7 @@ newTalent{
ATTACK = 10,
},
range = 20,
direct_hit = true,
action = function(self, t)
local tg = {type="ball", range=0, radius=2 + self:getTalentLevelRaw(t), talent=t}
local x, y = self:getTarget(tg)
......@@ -670,6 +676,7 @@ newTalent{
ATTACK = 10,
},
range = 20,
direct_hit = true,
action = function(self, t)
local tg = {type="ball", range=self:getTalentRange(t), radius=1, talent=t}
local x, y = self:getTarget(tg)
......@@ -695,6 +702,7 @@ newTalent{
},
message = "@Source@ howls",
range = 20,
direct_hit = true,
action = function(self, t)
local rad = self:getTalentLevel(t) + 5
for i = self.x - rad, self.x + rad do for j = self.y - rad, self.y + rad do if game.level.map:isBound(i, j) then
......@@ -728,6 +736,7 @@ newTalent{
},
message = "@Source@ shrieks.",
range = 20,
direct_hit = true,
action = function(self, t)
local rad = self:getTalentLevel(t) + 5
for i = self.x - rad, self.x + rad do for j = self.y - rad, self.y + rad do if game.level.map:isBound(i, j) then
......@@ -793,6 +802,7 @@ newTalent{
cooldown = 2,
equilibrium = 5,
range = 15,
direct_hit = true,
action = function(self, t)
local tg = {type="beam", range=self:getTalentRange(t), talent=t}
local x, y = self:getTarget(tg)
......@@ -814,6 +824,7 @@ newTalent{
cooldown = 10,
equilibrium = 5,
range = 15,
direct_hit = true,
action = function(self, t)
local tg = {type="hit", range=self:getTalentRange(t), talent=t}
local x, y = self:getTarget(tg)
......@@ -834,6 +845,7 @@ newTalent{
cooldown = 2,
equilibrium = 5,
range = 15,
direct_hit = true,
action = function(self, t)
local tg = {type="beam", range=self:getTalentRange(t), talent=t}
local x, y = self:getTarget(tg)
......@@ -877,6 +889,7 @@ newTalent{
cooldown = 13,
vim = 27,
range = 20,
direct_hit = true,
action = function(self, t)
local duration = self:getTalentLevel(t) + 2
local radius = 4
......@@ -931,6 +944,7 @@ newTalent{
cooldown = 7,
vim = 24,
range = function(self, t) return math.ceil(3 + self:getTalentLevel(t)) end,
direct_hit = true,
action = function(self, t)
local tg = {type="cone", range=0, radius=self:getTalentRange(t), talent=t}
local x, y = self:getTarget(tg)
......
......@@ -29,6 +29,7 @@ newTalent{
ATTACK = 10,
},
range = 20,
direct_hit = true,
reflectable = true,
action = function(self, t)
local tg = {type="beam", range=self:getTalentRange(t), talent=t}
......@@ -59,6 +60,7 @@ newTalent{
ATTACK = 10,
},
range = 20,
direct_hit = true,
reflectable = true,
action = function(self, t)
local tg = {type="bolt", range=self:getTalentRange(t), talent=t}
......@@ -173,6 +175,7 @@ newTalent{
ATTACKAREA = 10,
},
range = 5,
direct_hit = true,
do_storm = function(self, t)
if self:getMana() <= 0 then
local old = self.energy.value
......
......@@ -56,6 +56,7 @@ newTalent{
ATTACK = 10,
},
range = 20,
direct_hit = true,
reflectable = true,
action = function(self, t)
local tg = {type="bolt", range=self:getTalentRange(t), talent=t}
......
......@@ -27,6 +27,7 @@ newTalent{
range = function(self, t)
return math.ceil(5 + self:getDex(12))
end,
direct_hit = true,
computeDamage = function(self, t, ammo)
local inc_dam = 0
local damtype = DamageType.FIRE
......@@ -159,6 +160,7 @@ newTalent{
range = function(self, t)
return math.ceil(5 + self:getDex(12))
end,
direct_hit = true,
computeDamage = function(self, t, ammo)
local inc_dam = 0
local damtype = DamageType.SPELLKNOCKBACK
......
......@@ -28,6 +28,7 @@ newTalent{
random_ego = "attack",
refectable = true,
proj_speed = 20,
direct_hit = true,
action = function(self, t)
local tg = {type="hit", range=self:getTalentRange(t), talent=t}
local x, y = self:getTarget(tg)
......@@ -50,6 +51,7 @@ newTalent{
mana = 80,
cooldown = 34,
range = 10,
direct_hit = true,
action = function(self, t)
local tg = {type="ball", range=self:getTalentRange(t), radius=1, talent=t}
local x, y = self:getTarget(tg)
......
......@@ -84,6 +84,7 @@ newTalent{
},
range = 15,
proj_speed = 4,
direct_hit = true,
action = function(self, t)
local tg = {type="ball", range=self:getTalentRange(t), radius=1 + self:getTalentLevelRaw(t), friendlyfire=self:spellFriendlyFire(), talent=t, display={particle="bolt_fire", trail="firetrail"}}
local x, y = self:getTarget(tg)
......@@ -112,6 +113,7 @@ newTalent{
ATTACKAREA = 40,
},
range = 20,
direct_hit = true,
action = function(self, t)
local duration = 5 + self:getTalentLevel(t)
local radius = 5
......
......@@ -25,6 +25,7 @@ newTalent{
random_ego = "utility",
mana = 40,
cooldown = 7,
direct_hit = true,
action = function(self, t)
local target = self
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment