You are not logged in.

Applications: [GameMaster: OPEN] | [Volunteer Testers: OPEN]


This forum will be permanently shut down on Friday 13.07.2018
Please copy or save all important information from old forum before they will be deactivated
We have moved to new board. https://forum.runesofmagic.gameforge.com/Come join us.

Posts: 17

Location: New Mexico

Occupation: Server

  • Send private message

821

Friday, November 16th 2012, 8:16am

I got it to work. But I have a question. Whats the differences of using EnergyBar1 or pctEB1? Don't they mean the same thing? Also some times I get an error saying can't use melee attack, why is that? Here is the changed code.

Source code

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
-- Class: Scout/Druid
-- DIYCE 2.0
if mainClass == "RANGER" and subClass == "DRUID" then
--  Cancel Blood Arrows out of combat or at less than 40% health, without invoking the GCD.
	if friendly or (not UnitExists("target")) or tdead or (phealth <= .40) and (pbuffs['Blood Arrow']) then CancelBuff("Blood Arrow")
	end
	-- Potions
	Skill = {
	 { name = "Action: "..healthpot, use = (phealth <= .50) },
	 { name = "Action: "..manapot, use = ((EnergyBar1 <= .50) and (phealth >= .50)) }, -- only mana pot if decent health
	 -- Heals Druid
         { name = "Recover", use = ((phealth <= .60) and not pbuffs['Recover']) },
         { name = "Recover", use = (phealth <= .30) },
         { name = "Recover", use = ((phealth <= .90) and not combat) }, -- top off before fight
	 { name = "Antidote", use = (dbuff['Poisoned']) },
	 -- Self Bufffs
         { name = "Savage Blessing", use = (not pbuffs['Savage Blessing']) }, --Druid
         { name = "Mother Earth's Protection", use = ((phealth <= .30) and not pbuffs['Mother Earth's Protection']) }, --Druid
	 { name = "Frost Arrow", use = (EnergyBar1 >= 20 and not pbuffs['Frost Arrow']) },
		}
	--  Use Throat Attack on detect enemy spell cast.
	if enemy then
	     Skill2 = {
		{ name = "Throat Attack", use = (melee and (tspell ~= nil) and (ttime >= 1) and ((ttime - telapsed) > 0.5) and pctEB1 >= 15) },
		 -- Combat
                { name = "Arrow of Essence",	 use = (EnergyBar1 >= 20) },
		{ name = "Earth Pulse", use = (combat and melee) },
                { name = "Blood Arrow", use = (phealth >= .80 and party and combat and not pbuffs['Blood Arrow']) },
		-- Shots
                { name = "Shot", use = (EnergyBar1 <= 15 and combat) },
                { name = "Autoshot", use = (not ASon and combat) },
                { name = "Vampire Arrows", use = (EnergyBar1 >= 50 and not tbuffs['Vampire Arrows']) },
                { name = "Piercing Arrow", use = (true) },
                { name = "Wind Arrows", use = (thealth >= .75 and EnergyBar1 >= 50) },
                { name = "Combo Shot", use = (true) },
                -- Wrist and Joint
                { name = "Wrist Attack", use = (not tbuffs['Wrist Attack'] and EnergyBar1 >= 50 and melee) },
                { name = "Joint Blow", use = (not tbuffs['Joint Blow'] and EnergyBar1 >= 50 and melee) },
		}
	end
	--ADD MORE CLASS COMBOS HERE. 
        --USE AN "ELSEIF" TO CONTINUE WITH MORE CLASS COMBOS.
        --THE NEXT "END" STATEMENT IS THE END OF THE CLASS COMBOS STATEMENTS.
        --DO NOT POST BELOW THE FOLLOWING "END" STATEMENT!
end
    --End Player Skill Sequences

Galenwaithien

Intermediate

Posts: 294

Location: Italy

  • Send private message

822

Friday, November 16th 2012, 11:53am

PctEB1 is expressed ad %. For Rage focus and energy the two variables are interchangeable. When it's mana though, energybar is an absolute value.

Posts: 17

Location: New Mexico

Occupation: Server

  • Send private message

823

Friday, November 16th 2012, 5:53pm

So why is it that when the code for { name = "Vampire Arrows", use = (EnergyBar1 >= 50 and not tbuffs['Vampire Arrows']) }, had PctEB1 in place of EnergyBar1 it would not work? But when I changed it to be EnergyBar1 instead of PctEB1 it worked. I'm sorry but i'm still confused on that. Can you put it more in nub speak, give an example. I'm new with this addon.

Can't
local EnergyBar1 = UnitMana("player")
local EnergyBar2 = UnitSkill("player")
local pctEB1 = PctM("player")
local pctEB2 = PctS("player")

be changed to
local focus = UnitFocus("player")
local mana = UnitMana("player")
local energy = UnitEnergy("player")
local fury = UnitFury("player")

to simplify things?

Galenwaithien

Intermediate

Posts: 294

Location: Italy

  • Send private message

824

Saturday, November 17th 2012, 1:38am

I assume unitmana(target), unitskill(target) etc are funcrions provider by rom.

Try
Changing energybar1, pcteb1, etc with focus/focuspct etc, but leave the second part ( after =) alone.
It should work and you can call focus/rage/energy with their names instead of enegybar1, and so on

Posts: 17

Location: New Mexico

Occupation: Server

  • Send private message

825

Saturday, November 17th 2012, 2:52am

Another problem I can't get Antidote to work.

DIYCE.lua

Source code

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
function BuffList(tgt)
    local list = {}
    local buffcmd = UnitBuff
    local infocmd = UnitBuffLeftTime

    if UnitCanAttack("player",tgt) then
        buffcmd = UnitDebuff
        infocmd = UnitDebuffLeftTime
    end

    -- There is a max of 100 buffs/debuffs per unit apparently
    for i = 1,100 do
        local buff, _, stackSize, ID = buffcmd(tgt, i)
        local timeRemaining = infocmd(tgt,i)
        if buff then
            -- Ad to list by name
            list[buff:gsub('(%()(.)(%))', '%2')] = { stack = stackSize, time = timeRemaining, id = ID }
            -- We also list by ID in case two different buffs/debuffs have the same name.
            list[ID] = {stack = stackSize, time = timeRemaining, name = buff:gsub("(%()(.)(%))", "%2") }
        else
            break
        end
    end

    return list
end

function DebuffList(tgt)
    local cnt = 1
    local buffstr = "/"
    local buff = UnitDebuff(tgt,cnt)
    while buff ~= nil do
            buffstr = buffstr..buff.."/"
            cnt = cnt + 1
            buff = UnitDebuff(tgt,cnt)
    end
    return string.gsub(buffstr, "(%()(.)(%))", "%2")
end


CustomFunctions.lua

Source code

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
-- Class: Scout/Druid
-- DIYCE 2.0
	if mainClass == "RANGER" and subClass == "DRUID" then
		-- Potions
		Skill = {
		{ name = "Action: "..healthpot,			use = (phealth <= .50) },
		{ name = "Action: "..manapot,			use = ((EnergyBar2 <= .50) and (phealth >= .50)) }, -- only mana pot if decent health
		-- Heals Druid
                { name = "Recover",					use = ((phealth <= .60) and not pbuffs['Recover']) },
                { name = "Recover",					use = (phealth <= .30) },
                { name = "Recover",					use = ((phealth <= .90) and not combat) }, -- top off before fight
		{ name = "Antidote",		         		use = (dbuff['Infection']) },
		-- Self Bufffs
                { name = "Savage Blessing",				use = (not pbuffs['Savage Blessing']) }, --Druid
                { name = "Mother Earth's Protection", 	        use = (phealth <= .30) }, --Druid
	        { name = "Frost Arrow",					use = (EnergyBar1 >= 20 and not pbuffs['Frost Arrow']) },

		--  Use Throat Attack on detect enemy spell cast.
		if enemy then
			Skill2 = {
				{ name = "Throat Attack",			use = (melee and (tspell ~= nil) and (ttime >= 1) and ((ttime - telapsed) > 0.5) and pctEB1 >= 15) },
		-- Combat
                { name = "Arrow of Essence",		use = (EnergyBar1 >= 20) },
		{ name = "Earth Pulse",             use = (combat and melee) },

		-- Shots
                { name = "Shot",					use = (EnergyBar1 <= 15 and combat) },
                { name = "Autoshot",				use = (not ASon and combat) },
                { name = "Vampire Arrows",			use = (EnergyBar1 >= 50 and not tbuffs['Vampire Arrows']) },
                { name = "Piercing Arrow",			use = (true) },
                { name = "Wind Arrows",			use = (thealth >= .75 and EnergyBar1 >= 50) },
                { name = "Combo Shot",			use = (true) },

		-- Wrist and Joint- only if focus is plentiful.
                { name = "Wrist Attack",			use = (not tbuffs['Wrist Attack'] and EnergyBar1 >= 50 and melee) },
                { name = "Joint Blow",				use = (not tbuffs['Joint Blow'] and EnergyBar1 >= 50 and melee) },
			}
		end
	--ADD MORE CLASS COMBOS HERE. 
        --USE AN "ELSEIF" TO CONTINUE WITH MORE CLASS COMBOS.
        --THE NEXT "END" STATEMENT IS THE END OF THE CLASS COMBOS STATEMENTS.
        --DO NOT POST BELOW THE FOLLOWING "END" STATEMENT!
    end

mrmisterwaa

Professional

Posts: 670

Location: Kuwait

  • Send private message

826

Saturday, November 17th 2012, 5:50pm

Source code

1
        { name = "Antidote",                         use = (dbuff['Infection']) },



Do you mind posting the entire thing?

I would like to see what "dbuff" is.

Posts: 17

Location: New Mexico

Occupation: Server

  • Send private message

827

Saturday, November 17th 2012, 7:15pm

Source code

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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
function KillSequence(arg1, healthpot, manapot, foodslot)
--arg1 = "v1" or "v2" for debugging
--healthpot = # of actionbar slot for health potions
--manapot = # of actionbar slot for mana potions
--foodslot = # of actionbar slot for food (add more args for more foodslots if needed)

    local Skill = {}
    local Skill2 = {}
    local i = 0
    
    -- Player and target status.
    local combat = GetPlayerCombatState()
    local enemy = UnitCanAttack("player","target")
    local EnergyBar1 = UnitMana("player")
    local EnergyBar2 = UnitSkill("player")
    local pctEB1 = PctM("player")
    local pctEB2 = PctS("player")
    local tbuffs = BuffList("target")
    local pbuffs = BuffList("player")
    local pdebuffs = DebuffList("player")
    local tDead = UnitIsDeadOrGhost("target")
    local behind = (not UnitIsUnit("player", "targettarget"))
    local melee = GetActionUsable(13) -- # is your melee range spell slot number
    local a1,a2,a3,a4,a5,ASon = GetActionInfo(14)  -- # is your Autoshot slot number
    local phealth = PctH("player")
    local thealth = PctH("target")
    local LockedOn = UnitExists("target")
    local boss = UnitSex("target") > 2
    local elite = UnitSex("target") == 2
    local party = GetNumPartyMembers() >= 2
    
    --Determine Class-Combo
    mainClass, subClass = UnitClassToken( "player" )

    --Silence Logic
    local tSpell,tTime,tElapsed = UnitCastingTime("target")
    local silenceThis = tSpell and silenceList[tSpell] and ((tTime - tElapsed) > 0.1)
    
    --Potion Checks
    healthpot = healthpot or 0
    manapot = manapot or 0
    
    --Equipment and Pet Protection
    if phealth <= .04 then
            --SwapEquipmentItem()        --Note: Remove the first double dash to re-enable equipment protection.
        for i=1,6 do
            if (IsPetSummoned(i) == true) then
                ReturnPet(i);
            end
        end        
    end
        
	--Check for level 1 mobs, if it is, drop target and acquire a new one.
    if (LockedOn and (UnitLevel("target") < 2)) then
        TargetUnit("")
        return
    end
    
    --Begin Player Skill Sequences
    
	--Priest = AUGUR, Druid = DRUID, Mage = MAGE, Knight = KNIGHT, 
	--Scout = RANGER, Rogue = THIEF, Warden = WARDEN, Warrior = WARRIOR

	-- Class: Warrior/Mage
	if mainClass == "WARRIOR" and subClass == "MAGE" then
		local SurpriseAttack = GetActionUsable(14)

		--Potions and Buffs
		Skill = {
			{ name = "Action: "..healthpot,			use = (phealth <= .70) },
			{ name = "Survival Instinct",			use = (phealth <= .30) and combat },
			{ name = "Sense of Danger",				use = (phealth <= .30) and combat },
			{ name = "Action: "..manapot,			use = (pctEB2 <= .40) },
			{ name = "Action: "..Healslot,			use = (phealth < .70) and (not combat) and (not party) },
			{ name = "Action: "..HoTslot,			use = (phealth < .80) and (not party) },
			{ name = "Intensification",				use = (pctEB2 >= .05) and (not pbuffs['Intensification']) and boss and enemy },
			{ name = "Aggressiveness",				use = boss and enemy },
			{ name = "Electric Attack",				use = (pctEB2 >= .05) and ((not pbuffs['Electric Attack']) or (pbuffs['Electric Attack'].time <= 45)) },
		}

		--Combat
		if enemy then
			Skill2 = {
				{ name = "Silence",					use = (silenceThis) },
				{ name = "Surprise Attack",			use = SurpriseAttack },
				{ name = "Enraged",					use = (EnergyBar1 <= 30) and (boss or elite) },
				{ name = "Electrical Rage",			use = (EnergyBar1 >= 15) and (pctEB2 >=.05) and (not pbuffs['High Voltage III']) },
				{ name = "Thunder Sword",			use = (pctEB2 >= .05) },
				{ name = "Lightning's Touch",		use = (pctEB2 >= .05) },
				{ name = "Attack",					use = (thealth == 1) },
			}
		end

	--Class: Rogue/Priest
	elseif mainClass == "THIEF" and subClass == "AUGUR" then
            
		--Potions and Buffs
		Skill = {
			{ name = "Regenerate",					use = (phealth <= .90) and (pctEB2 >= .05) and (not pbuffs['Regenerate']) },
			{ name = "Action: "..healthpot,			use = (phealth <= .70) },
			{ name = "Action: "..manapot,			use = (pctEB2 <= .40) },
			{ name = "Magic Barrier",				use = (pctEB2 >= .05) and ((not pbuffs['Magic Barrier']) or (pbuffs['Magic Barrier'].time <= 45)) },
			{ name = "Quickness Aura",				use = (pctEB2 >= .05) and ((not pbuffs['Quickness Aura']) or (pbuffs['Quickness Aura'].time <= 45)) },
			{ name = "Poison",						use = ((not pbuffs['Poisonous']) or (pbuffs['Poisonous'].time <= 45))},
		}

		--Combat
		if enemy then
			Skill2 = {
				{ name = "Premeditation",			use = (not combat) and boss and (EnergyBar1 >= 50) },
				{ name = "Slowing Poison",			use = boss },
				{ name = "Informer",				use = boss },
				{ name = "Fervent Attack",			use = boss },
				{ name = "Assassins Rage",			use = boss },
				{ name = "Kick",					use = (pctEB2 >= .05) },
				{ name = "Sneak Attack",			use = (EnergyBar1 >= 20) and boss and behind and party },
				{ name = "Blind Spot Attack",		use = (EnergyBar1 >= 20) and boss and behind and party },
				{ name = "Shadowstab",				use = (EnergyBar1 >= 20) and (not tbuffs[620313]) },
				{ name = "Low Blow",				use = (EnergyBar1 >= 30) and (tbuffs[620313]) and (not tbuffs[500704]) },
				{ name = "Wound Attack",			use = (EnergyBar1 >= 35) },
				{ name = "Shadowstab",				use = (EnergyBar1 >= 20) },
				{ name = "Attack",					use = (thealth == 1) },                    
			}
		end

	-- Class: Scout/Druid
	-- DIYCE 2.0
	elseif mainClass == "RANGER" and subClass == "DRUID" then
	
		-- Potions
		Skill = {
			{ name = "Action: "..healthpot,			use = (phealth <= .50) },
			{ name = "Action: "..manapot,			use = ((EnergyBar2 <= .50) and (phealth >= .50)) }, -- only mana pot if decent health
			-- Heals Druid
            { name = "Recover",						use = ((phealth <= .60) and not pbuffs['Recover']) },
            { name = "Recover",						use = (phealth <= .30) },
            { name = "Recover",						use = ((phealth <= .90) and not combat) }, -- top off before fight
			--Clensing
			{ name = "Antidote",                    use = (pdebuffs['Infection']) },
			-- Self Bufffs
            { name = "Savage Blessing",				use = (not pbuffs['Savage Blessing']) }, --Druid
            { name = "Mother Earth's Protection", 	use = (phealth <= .30) }, --Druid
			{ name = "Frost Arrow",					use = (EnergyBar1 >= 20 and not pbuffs['Frost Arrow']) },
		}
		
		--  Use Throat Attack on detect enemy spell cast.
		if enemy then
			Skill2 = {
				{ name = "Throat Attack",			use = (melee and (tspell ~= nil) and (ttime >= 1) and ((ttime - telapsed) > 0.5) and pctEB1 >= 15) },
				-- Combat
                { name = "Arrow of Essence",		use = (EnergyBar1 >= 20) },
				{ name = "Earth Pulse",             use = (combat and melee) },
				-- Shots
                { name = "Shot",					use = (EnergyBar1 <= 15 and combat) },
                { name = "Autoshot",				use = (not ASon and combat) },
                { name = "Vampire Arrows",			use = (EnergyBar1 >= 50 and not tbuffs['Vampire Arrows']) },
                { name = "Piercing Arrow",			use = (true) },
                { name = "Wind Arrows",				use = (thealth >= .75 and EnergyBar1 >= 50) },
                { name = "Combo Shot",				use = (true) },
				-- Wrist and Joint- only if focus is plentiful.
                { name = "Wrist Attack",			use = (not tbuffs['Wrist Attack'] and EnergyBar1 >= 50 and melee) },
                { name = "Joint Blow",				use = (not tbuffs['Joint Blow'] and EnergyBar1 >= 50 and melee) },
			}
		end
		
		--ADD MORE CLASS COMBOS HERE. 
		--USE AN "ELSEIF" TO CONTINUE WITH MORE CLASS COMBOS.
		--THE NEXT "END" STATEMENT IS THE END OF THE CLASS COMBOS STATEMENTS.
		--DO NOT POST BELOW THE FOLLOWING "END" STATEMENT!
	end
    --End Player Skill Sequences
    
	if (arg1=="debugskills") then		--Used for printing the skill table, and true/false usability
		DIYCE_DebugSkills(Skill)
		DIYCE_DebugSkills(Skill2)
	elseif (arg1=="debugpbuffs") then	--Used for printing your buff names, and buffID
		DIYCE_DebugBuffList(pbuffs)
	elseif (arg1=="debugtbuffs") then	--Used for printing target buff names, and buffID
		DIYCE_DebugBuffList(tbuffs)
	elseif (arg1=="debugall") then		--Used for printing all of the above at the same time
		DIYCE_DebugSkills(Skill)
		DIYCE_DebugSkills(Skill2)
		DIYCE_DebugBuffList(pbuffs)
		DIYCE_DebugBuffList(tbuffs)
	end
	
    if (not MyCombat(Skill, arg1)) then
        MyCombat(Skill2, arg1)
    end
        
    --Select Next Enemy
	if (tDead) then
		TargetUnit("")
		return
	end
	if mainClass == "RANGER" and (not party) then		--To keep scouts from pulling mobs without meaning to.
		if (not LockedOn) or (not enemy) then
			TargetNearestEnemy()
			return
		end
	elseif mainClass ~= "RANGER" then					--Let all other classes auto target.
		if (not LockedOn) or (not enemy) then
			TargetNearestEnemy()
			return
		end
	end
end

828

Saturday, November 17th 2012, 9:57pm

Quoted from "mrmisterwaa;577539"

Source code

1
        { name = "Antidote",                         use = (dbuff['Infection']) },



Do you mind posting the entire thing?

I would like to see what "dbuff" is.


In their diyce, their local for player debuffs is:

Source code

1
local pdebuffs = DebuffList("player")


so in order for antidote to work, it would need to be changed to:

Source code

1
        { name = "Antidote",                         use = (pdebuffs['Infection']) },


As for EnergyBar1 and EnergyBar2, Energybar1 would be your top mana/focus/skill/rage bar, regardless of if it is mana, or rage, or whatever.

And EnergyBar2 would be the bottom bar, regardless of if its rage/focus/mana etc. Just makes things easier to deal with %'s than it is with actual values.

Ravesden, D/S/Wd 80/75/62
Retired. Click siggy for old RoM vids, among other things.

Posts: 17

Location: New Mexico

Occupation: Server

  • Send private message

829

Saturday, November 17th 2012, 10:32pm

Ok I changed all that but it still dos not work. Here is all my code both files.

DIYEC.lua

Source code

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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
-- DIY Combat Engine version 2.2

local g_skill  = {}
local g_lastaction = ""

function Msg(outstr,a1,a2,a3)
	DEFAULT_CHAT_FRAME:AddMessage(tostring(outstr),a1,a2,a3)
end

function ReadSkills()
	g_skill = {}
	local skillname,slot
	
	for page = 1,4 do
		slot = 1
		skillname = GetSkillDetail(page,slot)
		repeat
			local a1,a2,a3,a4,a5,a6,a7,a8,skillusable = GetSkillDetail(page,slot)
			if skillusable then
				g_skill[skillname] = { ['page'] = page, ['slot'] = slot }
			end
			slot = slot + 1
			skillname = GetSkillDetail(page,slot)
		until skillname == nil
	end
end

-- Read Skills on Log-In/Class Change/Level-Up
local DIYCE_EventFrame = CreateUIComponent("Frame","DIYCE_EventFrame","UIParent")
DIYCE_EventFrame:SetScripts("OnEvent", [=[ 
	if event == 'PLAYER_SKILLED_CHANGED' then
	ReadSkills()
	end
]=] )
DIYCE_EventFrame:RegisterEvent("PLAYER_SKILLED_CHANGED")

function PctH(tgt)
	return (UnitHealth(tgt)/UnitMaxHealth(tgt))
end

function PctM(tgt)
	return (UnitMana(tgt)/UnitMaxMana(tgt))
end

function PctS(tgt)
	return (UnitSkill(tgt)/UnitMaxSkill(tgt))
end

function CancelBuff(buffname)
	local i = 1
	local buff = UnitBuff("player",i)
	
	while buff ~= nil do
		if buff == buffname then
			CancelPlayerBuff(i)
			return true
		end
		
		i = i + 1
		buff = UnitBuff("player",i)
	end
	return false
end

function BuffList(tgt)
	local list = {}
	local buffcmd = UnitBuff
	local infocmd = UnitBuffLeftTime
	
	if UnitCanAttack("player",tgt) then
		buffcmd = UnitDebuff
		infocmd = UnitDebuffLeftTime
	end
	
	-- There is a max of 100 buffs/debuffs per unit apparently
	for i = 1,100 do
		local buff, _, stackSize, ID = buffcmd(tgt, i)
		local timeRemaining = infocmd(tgt,i)
		if buff then
			-- Ad to list by name
			list[buff:gsub('(%()(.)(%))', '%2')] = { stack = stackSize, time = timeRemaining, id = ID }
			-- We also list by ID in case two different buffs/debuffs have the same name.
			list[ID] = {stack = stackSize, time = timeRemaining, name = buff:gsub("(%()(.)(%))", "%2") }
			else
			break
		end
	end
	
	return list
end

function DebuffList(tgt)
	local list = {}
	local buffcmd = UnitDebuff
	local infocmd = UnitDebuffLeftTime
	
	if UnitCanAttack("player",tgt) then
		buffcmd = UnitBuff
		infocmd = UnitBuffLeftTime
	end
	
	-- There is a max of 100 buffs/debuffs per unit apparently
	for i = 1,100 do
		local buff, _, stackSize, ID = buffcmd(tgt, i)
		local timeRemaining = infocmd(tgt,i)
		if buff then
			-- Ad to list by name
			list[buff:gsub('(%()(.)(%))', '%2')] = { stack = stackSize, time = timeRemaining, id = ID }
			-- We also list by ID in case two different buffs/debuffs have the same name.
			list[ID] = {stack = stackSize, time = timeRemaining, name = buff:gsub("(%()(.)(%))", "%2") }
			else
			break
		end
	end
	
	return list
end

function CD(skillname)
	local firstskill = GetSkillDetail(2,1)
	if (g_skill[firstskill] == nil) or (g_skill[firstskill].page ~= 2) then
		ReadSkills()
	end
	
	if g_skill[skillname] ~= nil then
		local tt,cd = GetSkillCooldown(g_skill[skillname].page,g_skill[skillname].slot)
		return cd <= 0.4
		elseif skillname == nil then
		return false
		else
		Msg("Skill not available: "..skillname)		--Comment this line out if you do not wish to recieve this error message.
		return
	end
end

function MyCombat(Skill, arg1)
	local spell_name = UnitCastingTime("player")
	local talktome = ((arg1 == "v1") or (arg1 == "v2"))
	local action,actioncd,actiondef,actioncnt
	
	if spell_name ~= nil then
		if (arg1 == "v2") then Msg("- ['..spell_name..']", 0, 1, 1) end
		return true
	end
	
	for x,tbl in ipairs(Skill) do
		
		local useit = type(Skill[x].use) ~= "function" and Skill[x].use or (type(Skill[x].use) == "function" and Skill[x].use() or false)
		if useit then
			if string.find(Skill[x].name, "Action:") then
				action = tonumber((string.gsub(Skill[x].name, "(Action:)( *)(%d+)(.*)", "%3")))
				_1,actioncd = GetActionCooldown(action)
				actiondef,_1,actioncnt = GetActionInfo(action)
				if GetActionUsable(action) and (actioncd == 0) and (actiondef ~= nil) and (actioncnt > 0) then
					if talktome then Msg("- "..Skill[x].name) end
					UseAction(action)
					return true
				end
				elseif string.find(Skill[x].name, "Custom:") then
				action = string.gsub(Skill[x].name, "(Custom:)( *)(.*)", "%3")
				if CustomAction(action) then
					return true
				end
				elseif string.find(Skill[x].name, "Item:") then
				action = string.gsub(Skill[x].name, "(Item:)( *)(.*)", "%3")
				if talktome then Msg("- "..Skill[x].name) end
				UseItemByName(action)
				return true
				elseif CD(Skill[x].name) then
				if talktome then Msg("- "..Skill[x].name) end
				CastSpellByName(Skill[x].name)
				return true
				elseif string.find(Skill[x].name, "Pet Skill:") then
				action = string.gsub(Skill[x].name, "(Pet Skill:)( *)(%d+)(.*)", "%3")
				UsePetAction(action)
				if (arg1 == "v2") then Msg(Skill[x].name.." has been fully processed") end
				return true
			end
		end
	end
	if (arg1 == "v2") then Msg("- [IDLE]", 0, 1, 1) end
	
	return false
end

function CustomAction(action)
	if CD(action) then
		if IsShiftKeyDown() then Msg("- "..action) end
		g_lastaction = action
		CastSpellByName(action)
		return true
		else
		return false
	end
end

function BuffTimeLeft(tgt, buffname)
	local cnt = 1
	local buff = UnitBuff(tgt,cnt)
	
	while buff ~= nil do
		if string.find(buff,buffname) then
			return UnitBuffLeftTime(tgt,cnt)
		end
		cnt = cnt + 1
		buff = UnitBuff(tgt,cnt)
	end
	
	return 0
end

function BuffParty(arg1,arg2)
	--    arg1 = Quickbar slot # for targetable, instant-cast buff without a cooldown (eg. Amp Attack) for range checking.
	--    arg2 = buff expiration time cutoff (in seconds) for refreshing buffs, default is 45 seconds.
	
	local selfbuffs = { "Soul Bond", "Enhanced Armor", "Holy Seal" }
	local groupbuffs = { "Grace of Life", "Amplified Attack", "Angel's Blessing", "Essence of Magic", "Magic Barrier", "Blessed Spring Water", "Fire Ward", "Savage Blessing", "Concentration Prayer", "Shadow Fury"  }
	
	local buffrefresh = arg2 or 45           -- Refresh buff time (seconds)
	local spell = UnitCastingTime("player")  -- Spell being cast?
	local vocal = IsShiftKeyDown()           -- Generate feedback if Shift key held
	
	if (spell ~= nil) then
		return
	end
	
	if vocal then Msg("- Checking self buffs on "..UnitName("player")) end
	for i,buff in ipairs(selfbuffs) do
		if (g_skill[buff] ~= nil) and CD(buff) and (BuffTimeLeft("player",buff) <= buffrefresh) then
			if vocal then Msg("- Casting "..buff.." on "..UnitName("player")) end
			TargetUnit("player")
			CastSpellByName(buff)
			return
		end
	end
	
	if vocal then Msg("- Checking group buffs on "..UnitName("player")) end
	for i,buff in ipairs(groupbuffs) do
		if (g_skill[buff] ~= nil) and CD(buff) and (BuffTimeLeft("player",buff) <= buffrefresh) then
			if vocal then Msg("- Casting "..buff.." on "..UnitName("player")) end
			TargetUnit("player")
			CastSpellByName(buff)
			return
		end
	end
	
	for num=1,GetNumPartyMembers()-1 do
		TargetUnit("party"..num)
		if GetActionUsable(arg1) and (UnitHealth("party"..num) > 0) then
			if vocal then Msg("- Checking group buffs on "..UnitName("party"..num)) end
			for i,buff in ipairs(groupbuffs) do
				if (g_skill[buff] ~= nil) and CD(buff) and (BuffTimeLeft("target",buff) <= buffrefresh) then
					if UnitIsUnit("target","party"..num) then
						if vocal then Msg("- Casting "..buff.." on "..UnitName("target")) end
						CastSpellByName(buff)
						return
						else
						if vocal then Msg("- Error: "..UnitName("target").." != "..UnitName("party"..num)) end
					end
				end
			end
			else
			if vocal then Msg("- Player "..UnitName("party"..num).." out of range or dead.") end
		end
	end
	
	if vocal then Msg("- Nothing to do.") end
end


CustomFunctions.lua

Source code

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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
local WHITE = "|cffffffff"
local SILVER = "|cffc0c0c0"
local GREEN = "|cff00ff00"
local LTBLUE = "|cffa0a0ff"

function DIYCE_DebugSkills(skillList)
	DEFAULT_CHAT_FRAME:AddMessage(GREEN.."Skill List:")
	
	for i,v in ipairs(skillList) do
		DEFAULT_CHAT_FRAME:AddMessage(SILVER.."  ['..WHITE..i..SILVER..']: "..LTBLUE.."" "..WHITE..v.name..LTBLUE..""  use = "..WHITE..(v.use and "true" or "false"))
	end
	
	DEFAULT_CHAT_FRAME:AddMessage(GREEN.."----------")
end

function DIYCE_DebugBuffList(buffList)
	DEFAULT_CHAT_FRAME:AddMessage(GREEN.."Buff List:")
	
	for k,v in pairs(buffList) do
		-- We ignore numbered entries because both the ID and name 
		-- are stored in the list. This avoids doubling the output.
		if type(k) ~= "number" then
			DEFAULT_CHAT_FRAME:AddMessage(SILVER.."  ['..WHITE..k..SILVER..']:  "..LTBLUE.."id: "..WHITE..v.id..LTBLUE.."  stack: "..WHITE..v.stack..LTBLUE.."  time: "..WHITE..v.time)
		end
	end
	
	DEFAULT_CHAT_FRAME:AddMessage(GREEN.."----------")    
end

local silenceList = {
	['Annihilation']	  = true,
	['King Bug Shock']    = true,
	['Mana Rift']         = true,
	['Dream of Gold']     = true,
	['Flame']             = true,
	['Flame Spell']       = true,
	['Wave Bomb']         = true,
	['Silence']           = true,
	['Recover']           = true,
	['Restore Life']      = true,
	['Heal']              = true,
	['Curing Shot']       = true,
	['Leaves of Fire']    = true,
	['Urgent Heal']       = true,
}

function PriestFairySequence(arg1)
	local Skill = {}
	local Skill2 = {}
	local i = 0
	local FairyExists = UnitExists("playerpet")
	local FairyBuffs = BuffList("playerpet")
	local combat = GetPlayerCombatState()
	
	--Determine Class-Combo
	mainClass, subClass = UnitClassToken( "player" )
	
	--Summon Fairy
	if (not FairyExists) and (not combat) then
		if mainClass == "AUGUR" then
			if subClass == "THIEF" then
				Skill = {
					{ name = "Shadow Fairy",			use = true },
				}
				elseif subClass == "RANGER" then
				Skill = {
					{ name = "Water Fairy",				use = true },
				}
				elseif subClass == "MAGE" then
				Skill = {
					{ name = "Wind Fairy",				use = true },
				}			
				elseif subClass == "KNIGHT" then
				Skill = {
					{ name = "Light Fairy",				use = true },
				}			
				elseif subClass == "WARRIOR" then
				Skill = {
					{ name = "Fire Fairy",				use = true },
				}
			end
		end
	end	
	
	--Cast Halo
	if FairyExists then
		if mainClass == "AUGUR" then
			if subClass == "THIEF" then
				if (not FairyBuffs[503459]) then
					if (arg1 == "v1") then
						Msg("- Activating Halo", 0, 1, 1)
					end
					Skill = {
						{ name = "Pet Skill: 6 (Wraith Halo)",	use = true },
					}
				end
				elseif subClass == "RANGER" then
				if (not FairyBuffs[503457]) then
					if (arg1 == "v1") then
						Msg("- Activating Halo", 0, 1, 1)
					end
					Skill = {
						{ name = "Pet Skill: 6 (Frost Halo)",	use = true },
					}
				end
				elseif subClass == "MAGE" then
				if (not FairyBuffs[503461]) then
					if (arg1 == "v1") then
						Msg("- Activating Halo", 0, 1, 1)
					end
					Skill = {
						{ name = "Pet Skill: 6 (Windrider Halo)",	use = true },
					}
				end
				elseif subClass == "KNIGHT" then
				if (not FairyBuffs[503507]) then
					if (arg1 == "v1") then
						Msg("- Activating Halo", 0, 1, 1)
					end
					Skill = {
						{ name = "Pet Skill: 6 (Devotion Halo)",	use = true },
					}
				end
				elseif subClass == "WARRIOR" then
				if (not FairyBuffs[503455]) then
					if (arg1 == "v1") then
						Msg("- Activating Halo", 0, 1, 1)
					end
					Skill = {
						{ name = "Pet Skill: 6 (Accuracy Halo)",	use = true },
					}
				end
			end
			
			--Cast Conceal
			if (not MyCombat(Skill, arg1)) then
				if (not FairyBuffs[503753]) then
					if (arg1 == "v1") then
						Msg("- Activating Conceal", 0, 1, 1)
					end
					Skill2 = {
						{ name = "Pet Skill: 7 (Conceal)",	use = true },
					}
				end
			end
		end
	end
	
	if (not MyCombat(Skill, arg1)) then
		MyCombat(Skill2, arg1)
	end
end

function KillSequence(arg1, healthpot, manapot, foodslot)
	--arg1 = "v1" or "v2" for debugging
	--healthpot = # of actionbar slot for health potions
	--manapot = # of actionbar slot for mana potions
	--foodslot = # of actionbar slot for food (add more args for more foodslots if needed)
	
	local Skill = {}
	local Skill2 = {}
	local i = 0
	
	-- Player and target status.
	local combat = GetPlayerCombatState()
	local enemy = UnitCanAttack("player","target")
	local EnergyBar1 = UnitMana("player")
	local EnergyBar2 = UnitSkill("player")
	local pctEB1 = PctM("player")
	local pctEB2 = PctS("player")
	local tbuffs = BuffList("target")
	local pbuffs = BuffList("player")
	local pdebuffs = DebuffList("player")
	local tDead = UnitIsDeadOrGhost("target")
	local behind = (not UnitIsUnit("player", "targettarget"))
	local melee = GetActionUsable(13) -- # is your melee range spell slot number
	local a1,a2,a3,a4,a5,ASon = GetActionInfo(14)  -- # is your Autoshot slot number
	local phealth = PctH("player")
	local thealth = PctH("target")
	local LockedOn = UnitExists("target")
	local boss = UnitSex("target") > 2
	local elite = UnitSex("target") == 2
	local party = GetNumPartyMembers() >= 2
	
	--Determine Class-Combo
	mainClass, subClass = UnitClassToken( "player" )
	
	--Silence Logic
	local tSpell,tTime,tElapsed = UnitCastingTime("target")
	local silenceThis = tSpell and silenceList[tSpell] and ((tTime - tElapsed) > 0.1)
	
	--Potion Checks
	healthpot = healthpot or 0
	manapot = manapot or 0
	
	--Equipment and Pet Protection
	if phealth <= .04 then
		--SwapEquipmentItem()        --Note: Remove the first double dash to re-enable equipment protection.
		for i=1,6 do
			if (IsPetSummoned(i) == true) then
				ReturnPet(i);
			end
		end        
	end
	
	--Check for level 1 mobs, if it is, drop target and acquire a new one.
	if (LockedOn and (UnitLevel("target") < 2)) then
		TargetUnit("")
		return
	end
	
	--Begin Player Skill Sequences
	
	--Priest = AUGUR, Druid = DRUID, Mage = MAGE, Knight = KNIGHT, 
	--Scout = RANGER, Rogue = THIEF, Warden = WARDEN, Warrior = WARRIOR
	
	-- Class: Warrior/Mage
	if mainClass == "WARRIOR" and subClass == "MAGE" then
		local SurpriseAttack = GetActionUsable(14)
		
		--Potions and Buffs
		Skill = {
			{ name = "Action: "..healthpot,			use = (phealth <= .70) },
			{ name = "Survival Instinct",           use = (phealth <= .30) and combat },
			{ name = "Sense of Danger",             use = (phealth <= .30) and combat },
			{ name = "Action: "..manapot,           use = (pctEB2 <= .40) },
			{ name = "Action: "..Healslot,          use = (phealth < .70) and (not combat) and (not party) },
			{ name = "Action: "..HoTslot,           use = (phealth < .80) and (not party) },
			{ name = "Intensification",             use = (pctEB2 >= .05) and (not pbuffs['Intensification']) and boss and enemy },
			{ name = "Aggressiveness",              use = boss and enemy },
			{ name = "Electric Attack",             use = (pctEB2 >= .05) and ((not pbuffs['Electric Attack']) or (pbuffs['Electric Attack'].time <= 45)) },
		}
		
		--Combat
		if enemy then
			Skill2 = {
				{ name = "Silence",					use = (silenceThis) },
				{ name = "Surprise Attack",			use = SurpriseAttack },
				{ name = "Enraged",					use = (EnergyBar1 <= 30) and (boss or elite) },
				{ name = "Electrical Rage",			use = (EnergyBar1 >= 15) and (pctEB2 >=.05) and (not pbuffs['High Voltage III']) },
				{ name = "Thunder Sword",			use = (pctEB2 >= .05) },
				{ name = "Lightning's Touch",		use = (pctEB2 >= .05) },
				{ name = "Attack",					use = (thealth == 1) },
			}
		end
		
		--Class: Rogue/Priest
		elseif mainClass == "THIEF" and subClass == "AUGUR" then
		
		--Potions and Buffs
		Skill = {
			{ name = "Regenerate",					use = (phealth <= .90) and (pctEB2 >= .05) and (not pbuffs['Regenerate']) },
			{ name = "Action: "..healthpot,			use = (phealth <= .70) },
			{ name = "Action: "..manapot,			use = (pctEB2 <= .40) },
			{ name = "Magic Barrier",				use = (pctEB2 >= .05) and ((not pbuffs['Magic Barrier']) or (pbuffs['Magic Barrier'].time <= 45)) },
			{ name = "Quickness Aura",				use = (pctEB2 >= .05) and ((not pbuffs['Quickness Aura']) or (pbuffs['Quickness Aura'].time <= 45)) },
			{ name = "Poison",						use = ((not pbuffs['Poisonous']) or (pbuffs['Poisonous'].time <= 45))},
		}
		
		--Combat
		if enemy then
			Skill2 = {
				{ name = "Premeditation",			use = (not combat) and boss and (EnergyBar1 >= 50) },
				{ name = "Slowing Poison",			use = boss },
				{ name = "Informer",				use = boss },
				{ name = "Fervent Attack",			use = boss },
				{ name = "Assassins Rage",			use = boss },
				{ name = "Kick",					use = (pctEB2 >= .05) },
				{ name = "Sneak Attack",			use = (EnergyBar1 >= 20) and boss and behind and party },
				{ name = "Blind Spot Attack",		use = (EnergyBar1 >= 20) and boss and behind and party },
				{ name = "Shadowstab",				use = (EnergyBar1 >= 20) and (not tbuffs[620313]) },
				{ name = "Low Blow",				use = (EnergyBar1 >= 30) and (tbuffs[620313]) and (not tbuffs[500704]) },
				{ name = "Wound Attack",			use = (EnergyBar1 >= 35) },
				{ name = "Shadowstab",				use = (EnergyBar1 >= 20) },
				{ name = "Attack",					use = (thealth == 1) },                    
			}
		end
		
		-- Class: Scout/Druid
		-- DIYCE 2.0
		elseif mainClass == "RANGER" and subClass == "DRUID" then
		
		-- Potions
		Skill = {
			{ name = "Action: "..healthpot,         use = (phealth <= .50) },
			{ name = "Action: "..manapot,           use = ((EnergyBar2 <= .50) and (phealth >= .50)) }, -- only mana pot if decent health
			-- Heals Druid
			{ name = "Recover",					    use = ((phealth <= .60) and not pbuffs['Recover']) },
			{ name = "Recover",						use = (phealth <= .30) },
			{ name = "Recover",						use = ((phealth <= .90) and not combat) }, -- top off before fight
			--Clensing
			{ name = "Antidote",                    use = (pdebuffs['Infection']) },
			-- Self Bufffs
			{ name = "Savage Blessing",				use = (not pbuffs['Savage Blessing']) }, --Druid
			{ name = "Mother Earth's Protection", 	use = (phealth <= .30) }, --Druid
			{ name = "Frost Arrow",					use = (EnergyBar1 >= 20 and not pbuffs['Frost Arrow']) },
		}
		
		--  Use Throat Attack on detect enemy spell cast.
		if enemy then
			Skill2 = {
				{ name = "Throat Attack",			use = (melee and (tspell ~= nil) and (ttime >= 1) and ((ttime - telapsed) > 0.5) and pctEB1 >= 15) },
				-- Combat
				{ name = "Arrow of Essence",		use = (EnergyBar1 >= 20) },
				{ name = "Earth Pulse",             use = (combat and melee) },
				-- Shots
				{ name = "Shot",					use = (EnergyBar1 <= 15 and combat) },
				{ name = "Autoshot",				use = (not ASon and combat) },
				{ name = "Vampire Arrows",			use = (EnergyBar1 >= 50 and not tbuffs['Vampire Arrows']) },
				{ name = "Piercing Arrow",			use = (true) },
				{ name = "Wind Arrows",				use = (thealth >= .75 and EnergyBar1 >= 50) },
				{ name = "Combo Shot",				use = (true) },
				-- Wrist and Joint- only if focus is plentiful.
				{ name = "Wrist Attack",			use = (not tbuffs['Wrist Attack'] and EnergyBar1 >= 50 and melee) },
				{ name = "Joint Blow",				use = (not tbuffs['Joint Blow'] and EnergyBar1 >= 50 and melee) },
			}
		end
		
		--ADD MORE CLASS COMBOS HERE. 
		--USE AN "ELSEIF" TO CONTINUE WITH MORE CLASS COMBOS.
		--THE NEXT "END" STATEMENT IS THE END OF THE CLASS COMBOS STATEMENTS.
		--DO NOT POST BELOW THE FOLLOWING "END" STATEMENT!
	end
	--End Player Skill Sequences
	
	if (arg1=="debugskills") then	--Used for printing the skill table, and true/false usability
		DIYCE_DebugSkills(Skill)
		DIYCE_DebugSkills(Skill2)
		elseif (arg1=="debugpbuffs") then	--Used for printing your buff names, and buffID
		DIYCE_DebugBuffList(pbuffs)
		elseif (arg1=="debugtbuffs") then	--Used for printing target buff names, and buffID
		DIYCE_DebugBuffList(tbuffs)
		elseif (arg1=="debugall") then	--Used for printing all of the above at the same time
		DIYCE_DebugSkills(Skill)
		DIYCE_DebugSkills(Skill2)
		DIYCE_DebugBuffList(pbuffs)
		DIYCE_DebugBuffList(tbuffs)
	end
	
	if (not MyCombat(Skill, arg1)) then
		MyCombat(Skill2, arg1)
	end
	
	--Select Next Enemy
	if (tDead) then
		TargetUnit("")
		return
	end
	if mainClass == "RANGER" and (not party) then	--To keep scouts from pulling mobs without meaning to.
		if (not LockedOn) or (not enemy) then
			TargetNearestEnemy()
			return
		end
		elseif mainClass ~= "RANGER" then	--Let all other classes auto target.
		if (not LockedOn) or (not enemy) then
			TargetNearestEnemy()
			return
		end
	end
end


Ran into another problem "Mother Earth's Protection" dos not go off ether.

830

Sunday, November 18th 2012, 3:49am

Forgive me if I am wrong here, as I play Wrdn/D more than D/Wrdn, but isn't antidote for poison and will not work on infection?

I can't believe I never noticed pdebuffs before. As a wrdn/d tank I have Antidote and Remove Curse. I wonder if someone knows a debuff list those work on so that I could add them to my rotation?

Source code

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
--Class: Warden/Druid
            elseif mainClass == "WARDEN" and subClass == "DRUID" then
            
            --Potions and Buffs
            Skill = {
                { name = "Action: 35",                   use = ((phealth <= .60) and (pctEB1 <= .60)) },
                { name = "Elven Guidance",               use = (pctEB1 <= .70) and (pctEB1 >= .05) },
                { name = "Action: 14",                   use = (phealth <= .60) },
                { name = "Action: 13",                   use = (phealth <= .65) },
                { name = "Action: 12",                   use = (phealth <= .70) and (not pbuffs['Mysterious Herb']) },
                { name = "Recover",                      use = (phealth <= .65) and (pctEB1 >= .05) },
                { name = "Action: 34",                   use = (pctEB1 <= .70) },
                { name = "Action: 33",                   use = (pctEB1 <= .60) },
                { name = "Action: 32",                   use = (pctEB1 <= .60) and (not pbuffs['Mysterious Magic Stone']) },
                { name = "Savage Blessing",              use = (pctEB1 >= .05) and (not pbuffs['Savage Blessing']) },
                { name = "Briar Shield",                 use = (pctEB1 >= .05) and (not pbuffs['Briar Shield']) },
                { name = "Earth Spirit Essence",         use = (pctEB1 >= .05) and (not pbuffs['Earth Spirit Essence']) },
                { name = "Protection of Nature",         use = (pctEB1 >= .05) and (not pbuffs['Protection of Nature']) },
                { name = "Action: 15",                   use = (not pbuffs['Unimaginable Salad']) },
                { name = "Action: 16",                   use = (not pbuffs['Magic Fruit Pie']) },
                { name = "Action: 17",                   use = (not pbuffs['Scarlet Love']) },
                { name = "Action: 38",                   use = (not pbuffs['Clear Thought']) },
                { name = "Heart of the Oak",             use = (pctEB1 >= .10) },
                    }
                            
            --Combat
                if enemy and (mode == "single") then
                Skill2 = {
                    { name = "Action: 18",                  use = (not pbuffs['Pungent Vileness']) and party },
                    { name = "Cross Chop",                  use = (pctEB1 >= .05) },
                    { name = "Thorn Sigil",                 use = (pctEB1 >= .05) and party and (boss or elite) and behind },
                    { name = "Charged Chop",                use = (pctEB1 >= .05) },
                    { name = "Blade of Protection",         use = (pctEB1 >= .05) },
                    { name = "Savage Power",                use = (pctEB1 >= .10) and (boss or elite) and (not pbuffs['Energy Absorb']) and (not pbuffs['Power of the Oak']) and (not pbuffs['Connection']) },
                    { name = "Energy Absorb",               use = (pctEB1 >= .10) and (boss or elite) and (not pbuffs['Savage Power']) and (not pbuffs['Power of the Oak']) and (not pbuffs['Connection']) },
                    { name = "Power of the Oak",            use = (pctEB1 >= .10) and (boss or elite) and (not pbuffs['Savage Power']) and (not pbuffs['Energy Absorb']) and (not pbuffs['Connection']) },
                    { name = "Elven Prayer",                use = (pctEB1 >= .10) and (boss or elite) and (not pbuffs['Savage Power']) and (not pbuffs['Energy Absorb']) and (not pbuffs['Power of the Oak']) },
                    { name = "Elven Amulet",                use = (pctEB1 >= .10) and (boss or elite) and (not pbuffs['Mother Earth's Protection']) },
                    { name = "Mother Earth's Protection",   use = (pctEB1 >= .10) and (boss or elite) and (not pbuffs['Elven Amulet']) },
                    { name = "Explosion of Power",          use = (pctEB1 >= .10) and (boss or elite) },
                    { name = "Pet Skill: 7 (Magic Control)",     use = boss or elite },
                    { name = "Thorny Vines",                use = (pctEB1 >= .05) },
                    { name = "Frantic Briar",               use = (pctEB1 >= .05) },
                            }
                elseif enemy and (mode == "multiple") then
                Skill2 = {
                    { name = "Action: 18",                  use = (not pbuffs['Pungent Vileness']) and party },
                    { name = "Cross Chop",                  use = (pctEB1 >= .05) },
                    { name = "Thorn Sigil",                 use = (pctEB1 >= .05) and party and (boss or elite) and behind },
                    { name = "Power of the Wood Spirit",    use = (pctEB1 >= .05) },
                    { name = "Blade of Protection",         use = (pctEB1 >= .05) },
                    { name = "Frantic Briar",               use = (pctEB1 >= .05) },
                    { name = "Savage Power",                use = (pctEB1 >= .10) and (boss or elite) and (not pbuffs['Energy Absorb']) and (not pbuffs['Power of the Oak']) and (not pbuffs['Connection']) },
                    { name = "Energy Absorb",               use = (pctEB1 >= .10) and (boss or elite) and (not pbuffs['Savage Power']) and (not pbuffs['Power of the Oak']) and (not pbuffs['Connection']) },
                    { name = "Power of the Oak",            use = (pctEB1 >= .10) and (boss or elite) and (not pbuffs['Savage Power']) and (not pbuffs['Energy Absorb']) and (not pbuffs['Connection']) },
                    { name = "Elven Prayer",                use = (pctEB1 >= .10) and (boss or elite) and (not pbuffs['Savage Power']) and (not pbuffs['Energy Absorb']) and (not pbuffs['Power of the Oak']) },
                    { name = "Elven Amulet",                use = (pctEB1 >= .10) and (boss or elite) and (not pbuffs['Mother Earth's Protection']) },
                    { name = "Mother Earth's Protection",   use = (pctEB1 >= .10) and (boss or elite) and (not pbuffs['Elven Amulet']) },
                    { name = "Explosion of Power",          use = (pctEB1 >= .10) and (boss or elite) },
                    { name = "Thorny Vines",                use = (pctEB1 >= .05) },
                            }            
                elseif enemy and (mode == "DPS") then
                Skill2 = {
                    { name = "Action: 44",                  use = (pctEB1 >= .05) and (not pbuffs['Tranquil Wave']) },
                    { name = "Cross Chop",                  use = (pctEB1 >= .05) },
                    { name = "Charged Chop",                use = (pctEB1 >= .05) },
                    { name = "Blade of Protection",         use = (pctEB1 >= .05) },
                    { name = "Savage Power",                use = (pctEB1 >= .10) and (boss or elite) and (not pbuffs['Energy Absorb']) and (not pbuffs['Power of the Oak']) and (not pbuffs['Connection']) },
                    { name = "Energy Absorb",               use = (pctEB1 >= .10) and (boss or elite) and (not pbuffs['Savage Power']) and (not pbuffs['Power of the Oak']) and (not pbuffs['Connection']) },
                    { name = "Power of the Oak",            use = (pctEB1 >= .10) and (boss or elite) and (not pbuffs['Savage Power']) and (not pbuffs['Energy Absorb']) and (not pbuffs['Connection']) },
                    { name = "Elven Prayer",                use = (pctEB1 >= .10) and (boss or elite) and (not pbuffs['Savage Power']) and (not pbuffs['Energy Absorb']) and (not pbuffs['Power of the Oak']) },
                    { name = "Elven Amulet",                use = (pctEB1 >= .10) and (boss or elite) and (not pbuffs['Mother Earth's Protection']) },
                    { name = "Mother Earth's Protection",   use = (pctEB1 >= .10) and (boss or elite) and (not pbuffs['Elven Amulet']) },
                    { name = "Explosion of Power",          use = (pctEB1 >= .10) and (boss or elite) },
                    { name = "Thorny Vines",                use = (pctEB1 >= .05) },
                    { name = "Frantic Briar",               use = (pctEB1 >= .05) },
                            }
                end    


Just thought I would post my wrdn/d code in case anyone happened to be looking for something. It comes with a mode for single target tanking, multiple target tanking, and DPS. In the DPS mode, action: 44 is just the action bar slot I put Tranguil Wave because DIYCE does not recognise ISS by name.

Posts: 17

Location: New Mexico

Occupation: Server

  • Send private message

831

Sunday, November 18th 2012, 4:59am

Quoted from "Gilderoi;577570"

Forgive me if I am wrong here, as I play Wrdn/D more than D/Wrdn, but isn't antidote for poison and will not work on infection?

I can't believe I never noticed pdebuffs before. As a wrdn/d tank I have Antidote and Remove Curse. I wonder if someone knows a debuff list those work on so that I could add them to my rotation?


(pdebuffs) Was not part of the original code. I found it in a post from someone ells asking how to get Antidote to work. And yes I believe Antidote is used to clear poison. But I was just following what the answer given to me on here. I'm new to DIYEC and don't know all to do. Any way my OP dos not work.

Posts: 17

Location: New Mexico

Occupation: Server

  • Send private message

832

Sunday, November 18th 2012, 7:25am

I put together some code for all my classes. Have not tested all of them yet and still not sure if I got Antidote to work. But here they are in case anyone wants.

-- Class: Scout/Druid

Source code

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
if mainClass == "RANGER" and subClass == "DRUID" then
	
	--  Cancel Blood Arrows out of combat or at less than 40% health, without invoking the GCD.    
	if friendly or (not UnitExists("target")) or tdead or (phealth <= .40) and (pbuffs['Blood Arrow']) then 
		CancelBuff("Blood Arrow")
	end
	
	Skill = {
		-- Potions
		{ name = "Action: "..healthpot, use = (phealth <= .50) },
		{ name = "Action: "..manapot, use = ((EnergyBar2 <= .50) and (phealth >= .50)) },
		-- Heals
		{ name = "Recover", use = (phealth <= .40) },
		{ name = "Recover", use = ((phealth <= .60) and (not pbuffs['Recover'])) },
		{ name = "Antidote", use = (pbuffs['Poisoned']) }, --Don't know if it works
		-- Bufffs
		{ name = "Frost Arrow", use = (EnergyBar1 >= 20 and not pbuffs['Frost Arrow']) },
		{ name = "Concentration", use = (EnergyBar1 >= 20 and not pbuffs['Concentration']) },
		{ name = "Savage Blessing", use = (not pbuffs['Savage Blessing']) },
	}
	
	if enemy then
		Skill2 = {
			--  Use Throat Attack on detect enemy spell cast.
			{ name = "Throat Attack", use = (melee and (tspell ~= nil) and (ttime >= 1) and ((ttime - telapsed) > 0.5) and EnergyBar1 >= 15) },
			-- Combat
			{ name = "Arrow of Essence", use = (EnergyBar1 >= 20 and boss) },
			{ name = "Target Area", use = (combat and boss) },
			{ name = "Blood Arrow", use = (phealth >= .80 and party and combat and not pbuffs['Blood Arrow']) },
			-- Shots
			{ name = "Autoshot", use = (not ASon and combat) },
			{ name = "Vampire Arrows", use = (EnergyBar1 >= 50 and not tbuffs['Vampire Arrows']) },
			{ name = "Combo Shot", use = (true) },
			{ name = "Mother Earth's Protection", use = (EnergyBar2 >= .10) and (boss or elite) },
			{ name = "Shot", use = (EnergyBar1 <= 15 and combat) },
			{ name = "Earth Pulse", use = (combat and melee) },
			{ name = "Snipe", use = (true) },
			{ name = "Piercing Arrow", use = (true) },
			{ name = "Wind Arrows", use = (thealth >= .75 and EnergyBar1 >= 50) },
			{ name = "Reflected Shot", use = (true) },
			-- Wrist and Joint- only if focus is plentiful.
			{ name = "Wrist Attack", use = (not tbuffs['Wrist Attack'] and EnergyBar1 >= 50 and melee) },
			{ name = "Joint Blow", use = (not tbuffs['Joint Blow'] and EnergyBar1 >= 50 and melee) },
		}
	end


-- Class: Scout/Mage

Source code

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
elseif mainClass == "RANGER" and subClass == "MAGE" then

--  Cancel Blood Arrows out of combat or at less than 40% health, without invoking the GCD.    
if friendly or (not UnitExists("target")) or tdead or (phealth <= .40) and (pbuffs['Blood Arrow']) then 
	CancelBuff("Blood Arrow")
end

Skill = {
	-- Silence Mage
	{ name = "Silence", use = (silenceThis) },
	-- Potions
	{ name = "Action: "..healthpot, use = (phealth <= .50) },
	{ name = "Action: "..manapot, use = ((EnergyBar2 <= .50) and (phealth >= .50)) },
	-- Bufffs
	{ name = "Frost Arrow", use = (EnergyBar1 >= 20 and not pbuffs['Frost Arrow']) },
	{ name = "Concentration", use = (EnergyBar1 >= 20 and not pbuffs['Concentration']) },
	{ name = "Fire Ward", use = (not pbuffs['Fire Ward']) },
	{ name = "Intensification", use = (not pbuffs['Intensification']) },
}

--  Use Throat Attack on detect enemy spell cast.
if enemy then
	Skill2 = {
		--  Use Throat Attack on detect enemy spell cast.
		{ name = "Throat Attack", use = (melee and (tspell ~= nil) and (ttime >= 1) and ((ttime - telapsed) > 0.5) and EnergyBar1 >= 15) },
		-- Combat
		{ name = "Arrow of Essence", use = (EnergyBar1 >= 20 and boss) },
		{ name = "Target Area", use = (combat and boss) },
		{ name = "Blood Arrow", use = (phealth >= .80 and party and combat and not pbuffs['Blood Arrow']) },
		{ name = "Autoshot", use = (not ASon and combat) },
		{ name = "Vampire Arrows", use = (EnergyBar1 >= 50 and not tbuffs['Vampire Arrows']) },
		{ name = "Fireball", use = (true) },
		{ name = "Lightning", use = (not tbuffs['Lightning']) },
		{ name = "Combo Shot", use = (true) },
		{ name = "Shot", use = (EnergyBar1 <= 15 and combat) },
		{ name = "Snipe", use = (true) },
		{ name = "Piercing Arrow", use = (true) },
		{ name = "Wind Arrows", use = (thealth >= .75 and EnergyBar1 >= 50) },
		{ name = "Reflected Shot", use = (true) },
		-- Wrist and Joint- only if focus is plentiful.
		{ name = "Wrist Attack", use = (not tbuffs['Wrist Attack'] and EnergyBar1 >= 50 and melee) },
		{ name = "Joint Blow", use = (not tbuffs['Joint Blow'] and EnergyBar1 >= 50 and melee) },
	}
end


-- Class: Mage/Scout

Source code

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
elseif mainClass == "MAGE" and subClass == "RANGER" then

-- Scout Cancel Blood Arrows out of combat or at less than 40% health, without invoking the GCD.    
if friendly or (not UnitExists("target")) or tdead or (phealth <= .40) and (pbuffs['Blood Arrow']) then 
	CancelBuff("Blood Arrow")
end

Skill = {
	-- Silence
	{ name = "Silence", use = (silenceThis) },
	-- Potions
	{ name = "Action: "..healthpot, use = (phealth <= .50) },
	{ name = "Action: "..manapot, use = ((EnergyBar1 <= .50) and (phealth >= .50)) },
	-- Buffs
	{ name = "Fire Ward", use = (not pbuffs['Fire Ward']) },
	{ name = "Electrostatic Charge", use = (not pbuffs['Electrostatic Charge']) },
	{ name = "Elemental Catalysis", use = (not pbuffs['Elemental Catalysis']) },
	{ name = "Intensification", use = (not pbuffs['Intensification']) },
}

if enemy then
	Skill2 = {
		--  Scout Use Throat Attack on detect enemy spell cast.
		{ name = "Throat Attack", use = (melee and (tspell ~= nil) and (ttime >= 1) and ((ttime - telapsed) > 0.5) and EnergyBar2 >= 15) },
		{ name = "Blood Arrow", use = (phealth >= .80 and party and combat and not pbuffs['Blood Arrow']) },
		{ name = "Vampire Arrows", use = (EnergyBar2 >= 50 and not tbuffs['Vampire Arrows']) },
		{ name = "Fireball", use = (true) },
		{ name = "Lightning", use = (melee and not tbuffs['Lightning']) },
		{ name = "Flame", use = (boss or tbuffs['Elemental Weakness']) },
		{ name = "Phoenix", use = (combat and melee) },
		{ name = "Discharge", use = (combat and melee) },
		{ name = "Meteor Shower", use = (true) },
		{ name = "Plasma Arrow", use = (not pbuffs['Charged']) },
		-- Scout Wrist and Joint- only if focus is plentiful.
		{ name = "Wrist Attack", use = (not tbuffs['Wrist Attack'] and EnergyBar2 >= 50 and melee) },
		{ name = "Joint Blow", use = (not tbuffs['Joint Blow'] and EnergyBar2 >= 50 and melee) },
	}
end


-- Class: Mage/Druid

Source code

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
elseif mainClass == "MAGE" and subClass == "DRUID" then

Skill = {
	{ name = "Silence", use = (silenceThis) },
	-- Potions
	{ name = "Action: "..healthpot, use = (phealth <= .50) },
	{ name = "Action: "..manapot, use = ((pctEB1 <= .50) and (phealth >= .50)) }, -- only mana pot if decent health
	-- Heals
	{ name = "Recover", use = ((phealth <= .60) and not pbuffs['Recover']) },
	{ name = "Recover", use = (phealth <= .30) },
	{ name = "Recover", use = ((phealth <= .90) and not combat) }, -- top off before fight
	-- Buffs
	{ name = "Perception", use = (not pbuffs['Perception']) }, -- Mage/Druid Elite 15
	--{ name = "Magic Target", use = (not combat and not pbuffs['Magic Target']) }, -- Mage/Druid Elite 20
	{ name = "Savage Blessing", use = (not pbuffs['Savage Blessing']) },
	--{ name = "Fire Ward", use = (not pbuffs['Fire Ward']) },
	{ name = "Electrostatic Charge", use = (not pbuffs['Electrostatic Charge']) },
	-- In case Electrostatic Charge is still on cooldown and you're getting hit hard
	{ name = "Mother Earth's Protection", use = ((phealth <= .30) and not pbuffs['Electrostatic Charge']) },  
	{ name = "Elemental Catalysis", use = (boss and not tbuffs['Elemental Catalysis']) },
	{ name = "Intensification", use = (boss and not tbuffs['Intensification']) },
}

if enemy then
	Skill2 = {
		--{ name = "Electric Bolt", use = (boss and not tbuffs['Electric Flow']) },
		{ name = "Elemental Weakness", use = (boss and not tbuffs['Elemental Weakness']) },
		{ name = "Magma Blade", use = (true) },
		{ name = "Fireball", use = (true) },
		{ name = "Lightning", use = (melee and not tbuffs['Lightning']) },
		{ name = "Flame", use = (boss or tbuffs['Elemental Weakness']) },
		{ name = "Phoenix", use = (combat and melee) },
		{ name = "Discharge", use = (combat and melee) },
		{ name = "Meteor Shower", use = (true) },
		{ name = "Earth Pulse", use = (combat and melee) },
		{ name = "Plasma Arrow", use = (not pbuffs['Charged']) },
	}
end


-- Class: Druid/Scout

Source code

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
elseif mainClass == "DRUID" and subClass == "RANGER" then

-- Scout Cancel Blood Arrows out of combat or at less than 40% health, without invoking the GCD.    
if friendly or (not UnitExists("target")) or tdead or (phealth <= .40) and (pbuffs['Blood Arrow']) then 
	CancelBuff("Blood Arrow")
end

Skill = {
	-- Potions
	{ name = "Action: "..healthpot, use = (phealth <= .40) },
	{ name = "Action: "..manapot, use = ((EnergyBar1 <= .50) and (phealth >= .40)) },
	-- Heals
	{ name = "Recover", use = (phealth <= .40) },
	{ name = "Curing Seed", use = (phealth <= .50) },
	{ name = "Restore Life", use = ((phealth <= .60) and (pbuffs['Nature's Power'].stack <=2))},
	{ name = "Recover", use = ((phealth <= .60) and (not pbuffs['Recover'])) },
	{ name = "Antidote", use = (pbuffs['Poisoned']) }, --Don't know if it works
	{ name = "Purify", use = (pbuffs['Curse']) },
	{ name = "Blossoming Life", use = ((phealth <= .80) and (not pbuffs['Blossoming Life'])) },
	{ name = "Blossoming Life", use = ((phealth <= .90) and not combat) },
	-- Buffs
	{ name = "Savage Blessing", use = (not pbuffs['Savage Blessing']) },
	{ name = "Concentration Prayer", use = (not pbuffs['Concentration Prayer']) },
}

if enemy then
	Skill2 = {
		--  Scout Use Throat Attack on detect enemy spell cast.
		{ name = "Throat Attack", use = (melee and (tspell ~= nil) and (ttime >= 1) and ((ttime - telapsed) > 0.5) and EnergyBar2 >= 15) },
		-- Combat Scout
		{ name = "Blood Arrow", use = (phealth >= .80 and party and combat and not pbuffs['Blood Arrow']) },
		-- Shots Scout
		{ name = "Vampire Arrows", use = (EnergyBar2 >= 50 and not tbuffs['Vampire Arrows']) },
		-- Ranged Attack
		{ name = "Binding Silence", use = (tspell ~= nil and ttime >= 1 and (ttime - telapsed) > 0.5 and EnergyBar1 >= .05) },
		{ name = "Briar Entwinement", use = (not tbuffs['Briar Entwinement'] or BuffTimeLeft("target", "Briar Entwinement") <=2) },
		{ name = "Mother Earth's Protection", use = (EnergyBar1 >= .10) and (boss or elite) },
		{ name = "Earth Pulse", use = (combat and melee) },
		{ name = "Weakening Seed", use = ((boss or elite) and (not tbuffs['Weakening Seed']) and (pbuffs['Nature's Power'].stack >= 3)) },
		{ name = "Rockslide", use = (true) },
		{ name = "Earth Arrow", use = (true) },
		-- Scout Wrist and Joint- only if focus is plentiful.
		{ name = "Wrist Attack", use = (not tbuffs['Wrist Attack'] and EnergyBar2 >= 50 and melee) },
		{ name = "Joint Blow", use = (not tbuffs['Joint Blow'] and EnergyBar2 >= 50 and melee) },
	}
end


-- Class: Druid/Mage

Source code

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
elseif mainClass == "DRUID" and subClass == "MAGE" then

Skill = {
	{ name = "Silence", use = (silenceThis) },
	-- Potions
	{ name = "Action: "..healthpot, use = (phealth <= .40) },
	{ name = "Action: "..manapot, use = ((pctEB1 <= .50) and (phealth >= .40)) }, -- only mana pot if decent health
	-- Heals
	{ name = "Mother Earth's Protection", use = (phealth <= .30) },
	{ name = "Recover", use = (phealth <= .40) },
	{ name = "Curing Seed", use = (phealth <= .50) },
	{ name = "Restore Life", use = ((phealth <= .60) and (pbuffs['Nature's Power'].stack <=2))}, -- use this ahead of Recover if low on Natures Power
	{ name = "Recover", use = ((phealth <= .60) and (not pbuffs['Recover'])) },
	{ name = "Antidote", use = (pbuffs['Poisoned']) },
	{ name = "Purify", use = (pbuffs['Curse']) },
	{ name = "Blossoming Life", use = ((phealth <= .80) and (not pbuffs['Blossoming Life'])) },
	{ name = "Blossoming Life", use = ((phealth <= .90) and not combat) },
	-- Buffs
	{ name = "Savage Blessing", use = (not pbuffs['Savage Blessing']) },
	{ name = "Concentration Prayer", use = (not pbuffs['Concentration Prayer']) },
	{ name = "Fire Ward", use = (not pbuffs['Fire Ward']) },
	{ name = "Intensification", use = (enemy and not pbuffs['Intensification']) },
}

-- Ranged Attack
if enemy then
	Skill2 = {
		{ name = "Binding Silence", use = (tspell ~= nil and ttime >= 1 and (ttime - telapsed) > 0.5 and pctEB1 >= .05) },
		{ name = "Mother Nature's Wrath", use = (true) },
		{ name = "Fireball", use = (combat) },
		{ name = "Earth Pulse", use = (combat) },
		{ name = "Weakening Seed", use = ((boss or elite) and (not tbuffs['Weakening Seed']) and (pbuffs['Nature's Power'].stack >= 3)) },
		{ name = "Lightning", use = (not tbuffs['Lightning']) },
		{ name = "Rockslide", use = (true) },
		{ name = "Earth Arrow", use = (true) },
		{ name = "Briar Entwinement", use = (not tbuffs['Briar Entwinement'] or BuffTimeLeft("target", "Briar Entwinement") <=2) },
	}
end


None of thees have elite skills as I don't have any yet. So you will need to add them in yourself. Hope thees are useful for some of you.

And pleas if someone can find a way to get Antidote to work pleas let me know. Thank you.

Galenwaithien

Intermediate

Posts: 294

Location: Italy

  • Send private message

833

Sunday, November 18th 2012, 12:42pm

If i were you i'd totale change how your diyce is set for mages. The rotations aren't....optimal

Posts: 17

Location: New Mexico

Occupation: Server

  • Send private message

834

Sunday, November 18th 2012, 7:14pm

Quoted from "Galenwaithien;577609"

If i were you i'd totale change how your diyce is set for mages. The rotations aren't....optimal


I redid the rotation on all. Let me know if that's better. See OP

835

Sunday, November 18th 2012, 8:36pm

Okay. I've got one big problem.
I don't know how to make DIYCE ,,spaming" 2 types of skills in 1 s. I mean there is Charged Chop ( from Warden General skills) which is making Gloobal Cooldown separate with other skills ( warrior skills). It's looks like CC is counting like a ,,casting global cooldown" and other skills like slash, TA, probing attack, open flank etc. are counted as ,,physical global cooldown" so there is possibilty to use both Charged Chop and Slash in one second. Maybe it's just my imagine but spaming 20 skills in 10 seconds sounds great and over power and and and ...
There is problem then how to make conditionals to use 2 skills in one second. Is it the problem in the conditionals or in the DIYCE engine. Thank you for any ideas, tips and answers.

836

Monday, November 19th 2012, 6:59am

Quoted from "Linaquel;577619"

Okay. I've got one big problem.
I don't know how to make DIYCE ,,spaming" 2 types of skills in 1 s. I mean there is Charged Chop ( from Warden General skills) which is making Gloobal Cooldown separate with other skills ( warrior skills). It's looks like CC is counting like a ,,casting global cooldown" and other skills like slash, TA, probing attack, open flank etc. are counted as ,,physical global cooldown" so there is possibilty to use both Charged Chop and Slash in one second. Maybe it's just my imagine but spaming 20 skills in 10 seconds sounds great and over power and and and ...
There is problem then how to make conditionals to use 2 skills in one second. Is it the problem in the conditionals or in the DIYCE engine. Thank you for any ideas, tips and answers.


There is nothing special needed. Charged Chop has a CD. It is just not on the GCD so just add it to your priority list and it will fire off while everything else is on GCD. Then as soon as it is fired, GCD is done and instantly it will cast your slash or what ever is available and highest priority. Just look at my wrdn/d code.

837

Monday, November 19th 2012, 7:06am

Quoted from "Dreamcatcher;577573"

(pdebuffs) Was not part of the original code. I found it in a post from someone ells asking how to get Antidote to work. And yes I believe Antidote is used to clear poison. But I was just following what the answer given to me on here. I'm new to DIYEC and don't know all to do. Any way my OP dos not work.


It seems to have this type of thing added, there will have to be a debuff list made. IE, for my wrdn/d I have Antidote and Dispell Curse. Antidote works on poisons but you can't just have it say, "use = (tbuffs['Poisoned'])" because there are so many different types of poison debuffs. For example, Bite that is cast from the mummies in KT is a poison that is cured with antidote but if you use that 'use' line, it would not cast antidote when you had Bite. To have these dispells work, I think there really would be a need for something similar to the silenceThis code.

Galenwaithien

Intermediate

Posts: 294

Location: Italy

  • Send private message

838

Monday, November 19th 2012, 2:09pm

Quoted from "Gilderoi;577640"

There is nothing special needed. Charged Chop has a CD. It is just not on the GCD so just add it to your priority list and it will fire off while everything else is on GCD. Then as soon as it is fired, GCD is done and instantly it will cast your slash or what ever is available and highest priority. Just look at my wrdn/d code.


I thought that diyce automatically added a virtual "gcd" after each skill, so I simply wrote a macro where I fire cc, then immediately call diyce. I'll try it later

839

Monday, November 19th 2012, 3:05pm

Quoted from "Galenwaithien;577651"

I thought that diyce automatically added a virtual "gcd" after each skill, so I simply wrote a macro where I fire cc, then immediately call diyce. I'll try it later


All I know it to do is do a check. It fires a skill based on the response true or false if on CD or not. There is no need to run another program and then run DIYCE. I play wrdn/d, wrdn/war, and even have a wrdn/r. I run the same simple, nothing special, priority list with Charged Chop as one of the highest priorities and everything works just fine. Charged Chop fires and another skill fires off right after within the same second. I tend to not put it at the top because if there is any lag at all, it will simply fire Charged Chop and nothng else.

Posts: 17

Location: New Mexico

Occupation: Server

  • Send private message

840

Monday, November 19th 2012, 10:33pm

Quoted from "Gilderoi;577641"

It seems to have this type of thing added, there will have to be a debuff list made. IE, for my wrdn/d I have Antidote and Dispell Curse. Antidote works on poisons but you can't just have it say, "use = (tbuffs['Poisoned'])" because there are so many different types of poison debuffs. For example, Bite that is cast from the mummies in KT is a poison that is cured with antidote but if you use that 'use' line, it would not cast antidote when you had Bite. To have these dispells work, I think there really would be a need for something similar to the silenceThis code.


This is what I got sofar. It still dos not work right but I think it might be a step in the right drection.

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
local poisonList = {
	['Black Poison Arrow']      = true,
	['Corpse Poison']           = true,
	['Corrosive Poison']        = true,
	['Deadwood Spider Poison']  = true,
	['Fierce Poison']           = true,
	['Malignant Poison I']      = true,
	['Malignant Poison II']     = true,
	['Malignant Poison III']    = true,
	['Malignant Poison IV']     = true,
	['Poison Flame Jet']        = true,
	['Poison Spurt']            = true,
	['Poisoned']                = true,
	['Poisonous Bite']          = true,
	['Poisonous Infection']     = true,
	['Spider Poison']           = true,
	['Spreading Corpse Poison'] = true,
}


Source code

1
2
3
--Antidote Logic
	local tSpell,tTime,tElapsed = UnitCastingTime("target")
	local antidoteThis = tSpell and poisonList[tSpell] and ((tTime - tElapsed) > 1.1)

Problem is it will cast Antidote while target is still casting there poison. Can't get it to do it after.

Source code

1
{ name = "Antidote", use = (antidoteThis) },