forked from emartinezgh/gw2minion
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwt_core_state_combat.lua
84 lines (70 loc) · 2.86 KB
/
wt_core_state_combat.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
-- Combat State for all professions
-- Holds "basic" combat routines, every profession has to add it´s own combat cause&effects to this combatstate
wt_core_state_combat = inheritsFrom(wt_core_state)
wt_core_state_combat.name = "Combat"
wt_core_state_combat.kelement_list = { }
wt_core_state_combat.CurrentTarget = 0
--/////////////////////////////////////////////////////
-- Combat over Check
local c_combat_over = inheritsFrom(wt_cause)
local e_combat_over = inheritsFrom(wt_effect)
function c_combat_over:evaluate()
--local CurrentTarget = Player:GetTarget()
if ( wt_core_state_combat.CurrentTarget == nil or wt_core_state_combat.CurrentTarget == 0 ) then
return true
else
local T = CharacterList:Get(wt_core_state_combat.CurrentTarget)
if ( T == nil or not T.alive) then
return true
end
end
return false
end
function e_combat_over:execute()
Player:StopMoving()
Player:ClearTarget()
wt_debug("Combat finished")
wt_core_state_combat.CurrentTarget = 0
wt_core_controller.requestStateChange(wt_core_state_idle)
return
end
--/////////////////////////////////////////////////////
-- Search for a better target Check
local c_better_target_search = inheritsFrom(wt_cause)
local e_better_target_search = inheritsFrom(wt_effect)
function c_better_target_search:evaluate()
if ( math.random(0,100) > 75 ) then
c_better_target_search.TargetList = CharacterList("lowesthealth,noCritter,onmesh,attackable,alive,maxdistance="..wt_global_information.AttackRange..",exclude="..wt_core_state_combat.CurrentTarget)
return (TableSize(c_better_target_search.TargetList) > 0)
end
end
function e_better_target_search:execute()
nextTarget , E = next(c_better_target_search.TargetList)
if (nextTarget ~=nil) then
wt_debug("Combat: Switching to better target "..nextTarget)
Player:StopMoving()
wt_core_state_combat.setTarget(nextTarget)
end
end
--/////////////////////////////////////////////////////
-- Sets our target for this combatstate
function wt_core_state_combat.setTarget(CurrentTarget)
if (CurrentTarget ~= nil and CurrentTarget ~= 0) then
wt_core_state_combat.CurrentTarget = CurrentTarget
else
wt_core_state_combat.CurrentTarget = 0
end
end
--/////////////////////////////////////////////////////
function wt_core_state_combat:initialize()
local ke_died = wt_kelement:create("Died",c_died,e_died, wt_effect.priorities.interrupt )
wt_core_state_combat:add(ke_died)
local ke_combat_over = wt_kelement:create("combat_over",c_combat_over,e_combat_over, 150 )
wt_core_state_combat:add(ke_combat_over)
local ke_quickloot = wt_kelement:create("QuickLoot",c_quickloot,e_quickloot,145)
wt_core_state_idle:add(ke_quickloot)
local ke_better_target_search = wt_kelement:create("better_target_search",c_better_target_search,e_better_target_search, 125 )
wt_core_state_combat:add(ke_better_target_search)
end
wt_core_state_combat:initialize()
wt_core_state_combat:register()