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

861

Sunday, December 9th 2012, 11:25pm

When I run the /run KillSequence("debugall") I get an Error. [string '?'] : 25 : attempt to concatenate field 'time' (a nil value)
Here is all of my code.

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
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
-- DIY Combat Engine version 2.2

local g_skill  = {}
local g_lastaction = ""

function Msg(outstr,a1,a2,a3)
	SELECTED_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
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
-- DIY Combat Engine version 2.2

local WHITE = "|cffffffff"
local SILVER = "|cffc0c0c0"
local GREEN = "|cff00ff00"
local LTBLUE = "|cffa0a0ff"

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

function DIYCE_DebugBuffList(buffList)
	SELECTED_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
			SELECTED_CHAT_FRAME:AddMessage(SILVER.."  ['..WHITE..k..SILVER..']:  "..LTBLUE.."id: "..WHITE..v.id..LTBLUE.."  stack: "..WHITE..v.stack..LTBLUE.."  time: "..WHITE..v.time)
		end
	end
	
	SELECTED_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,
}

local MprotectThis = {
	['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,
}

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 pdbuffs = DebuffList("player")
	local tDead = UnitIsDeadOrGhost("target")
	local behind = (not UnitIsUnit("player", "targettarget"))
	local melee = GetActionUsable(5) -- # is your melee range spell slot number
	local melee2 = GetActionUsable(6) -- # is your melee range spell slot number
	local a1,a2,a3,a4,a5,ASon = GetActionInfo(7)  -- # 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

	local ProtectMe = false

    for k,v in pairs(pdbuffs) do 
        if MprotectThis[v] then 
            ProtectMe = true
            break
        end
    end
	
	--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 19
	manapot = manapot or 18
	
	--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: Scout/Druid
	if mainClass == "RANGER" and subClass == "DRUID" then
		Skill = {
			-- Potions
			{ name = "Action: "..healthpot,          use = (phealth <= .40) },
			{ name = "Action: "..manapot,            use = ((pctEB1 <= .50) and (phealth >= .50)) },
			-- Heals
			{ name = "Recover",                      use = ((phealth <= .60) and not pbuffs['Recover']) },
			{ name = "Recover",                      use = (phealth <= .30) },
			{ name = "Recover",                      use = ((phealth <= .90) and not combat) },
			{ name = "Antidote",                     use = (ProtectMe) }, --Don't know if it works
			-- Bufffs
			{ name = "Frost Arrow",                  use = (EnergyBar1 >= 20 and not pbuffs['Frost Arrow']) },
			{ name = "Savage Blessing",              use = (not pbuffs['Savage Blessing']) },
			{ name = "Mother Earth's Protection",	 use = (phealth <= .40 and (boss or elite)) },
			{ name = "Concentration",                use = (combat and (boss or elite) and not pbuffs['Concentration']) },
			{ name = "Arrow of Essence",             use = (combat and (boss or elite) and not pbuffs['Arrow of Essence']) },
			{ name = "Target Area",                  use = (combat and (boss or elite) and not pbuffs['Target Area']) },
		}
		if enemy then
			Skill2 = {
				--  Use Throat Attack on detect enemy spell cast.
				{ name = "Throat Attack",            use = ((melee or melee2) and (tSpell ~= nil) and (tTime >= 1) and ((tTime - tElapsed) > 0.5) and EnergyBar1 >= 15) },
				-- Shots
				{ name = "Autoshot",                 use = (not ASon and combat) },
				{ name = "Combo Shot",               use = (true) },
				{ name = "Vampire Arrows",           use = (EnergyBar1 >= 50 and not tbuffs['Vampire Arrows']) },
				{ name = "Piercing Arrow",           use = (combat and (boss or elite)) },
				{ name = "Shot",                     use = (EnergyBar1 <= 15 and combat) },
				{ name = "Wind Arrows",              use = (thealth >= .75 and EnergyBar1 >= 15) },
				{ name = "Reflected Shot",           use = (combat and (boss or elite)) },
				{ name = "Earth Pulse",              use = (EnergyBar2 >= 40 and combat and (melee or melee2)) },
				-- Wrist and Joint- only if focus is plentiful.
				{ name = "Wrist Attack",             use = ((melee or melee2) and not tbuffs['Wrist Attack'] and EnergyBar1 >= 50) },
                { name = "Joint Blow",               use = ((melee or melee2) and not tbuffs['Joint Blow'] and EnergyBar1 >= 50) },
				}
		end

	-- Class: Scout/Mage
	elseif mainClass == "RANGER" and subClass == "MAGE" then
		Skill = {
			-- Silence Mage
			{ name = "Silence",                      use = (silenceThis) },
			-- Potions
			{ name = "Action: "..healthpot,          use = (phealth <= .40) },
			{ name = "Action: "..manapot,            use = ((pctEB1 <= .50) and (phealth >= .50)) },
			-- Bufffs
			{ name = "Frost Arrow",                  use = (EnergyBar1 >= 20 and not pbuffs['Frost Arrow']) },
			{ name = "Arrow of Essence",             use = (EnergyBar1 >= 20 and boss) },
			{ name = "Concentration",                use = (EnergyBar1 >= 20 and not pbuffs['Concentration']) },
			{ name = "Fire Ward",                    use = (not pbuffs['Fire Ward']) },
			{ name = "Intensification",              use = (not pbuffs['Intensification']) },
			{ name = "Target Area",                  use = (combat and (boss or elite) and not pbuffs['Target Area']) },
			
		}
		--  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 or melee2) and (tSpell ~= nil) and (tTime >= 1) and ((tTime - tElapsed) > 0.5) and EnergyBar1 >= 15) },
				-- Combat
				{ name = "Autoshot",                 use = (not ASon and combat) },
				{ name = "Combo Shot",               use = (true) },
				{ name = "Vampire Arrows",           use = (EnergyBar1 >= 50 and not tbuffs['Vampire Arrows']) },
				{ name = "Fireball",                 use = (true) },
				{ name = "Lightning",                use = (not tbuffs['Lightning']) },
				{ name = "Piercing Arrow",           use = (combat and (boss or elite)) },
				{ name = "Shot",                     use = (EnergyBar1 <= 15 and combat) },
				{ name = "Wind Arrows",              use = (thealth >= .75 and EnergyBar1 >= 15) },
				{ name = "Reflected Shot",           use = (combat and (boss or elite)) },
				-- Wrist and Joint- only if focus is plentiful.
				{ name = "Wrist Attack",             use = ((melee or melee2) and not tbuffs['Wrist Attack'] and EnergyBar1 >= 50) },
                { name = "Joint Blow",               use = ((melee or melee2) and not tbuffs['Joint Blow'] and EnergyBar1 >= 50) },
			}
		end

	-- Class: Druid/Mage
	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 >= .50)) },
			-- 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))}, -- use this ahead of Recover if low on Natures Power
			{ name = "Recover",                      use = ((phealth <= .60) and (not pbuffs['Recover'])) },
			{ name = "Blossoming Life",              use = ((phealth <= .80) and (not pbuffs['Blossoming Life'])) },
			{ name = "Purify",                       use = (ProtectMe) }, --Don't know if it works
			{ name = "Antidote",                     use = (ProtectMe) }, --Don't know if it works
			-- 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 = ((boss or elite) and not pbuffs['Intensification']) },
			{ name = "Body Vitalization",            use = ((boss or elite) and not pbuffs['Body Vitalization']) },
			{ name = "Mother Earth's Protection",    use = (phealth <= .40 and (boss or elite)) },
		}
		if enemy then
			Skill2 = {
				{ 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']) },
				{ name = "Mother Nature's Wrath",    use = (not tbuffs['Mother Nature's Wrath']) },
				{ name = "Withering Seed",           use = ((boss or elite) and (not tbuffs['Withering Seed'])) },
				{ name = "Weakening Seed",           use = ((boss or elite) and (not tbuffs['Weakening Seed'])) },
				{ name = "Fireball",                 use = (true) },
				{ name = "Lightning",                use = (not tbuffs['Lightning']) },
				{ name = "Rockslide",                use = (true) },
				{ name = "Earth Arrow",              use = (true) },
				{ name = "Earth Pulse",              use = (true) },
				
			}
		end	

	-- Class: Druid/Scout
	elseif mainClass == "DRUID" and subClass == "RANGER" then
		Skill = {
			-- Potions
			{ name = "Action: "..healthpot,          use = (phealth <= .40) },
			{ name = "Action: "..manapot,            use = ((pctEB1 <= .50) and (phealth >= .50)) },
			-- Heals
			{ name = "Recover",                      use = (phealth <= .40) },
			{ name = "Curing Seed",                  use = (phealth <= .50) },
			{ name = "Restore Life",                 use = ((phealth <= .60) and (pbuffs['Nature's Power']))},
			{ name = "Recover",                      use = ((phealth <= .60) and not pbuffs['Recover']) },
			{ name = "Blossoming Life",              use = ((phealth <= .80) and not pbuffs['Blossoming Life']) },
			-- Buffs
			{ name = "Savage Blessing",              use = (not pbuffs['Savage Blessing']) },
			{ name = "Concentration Prayer",         use = (not pbuffs['Concentration Prayer']) },
			{ name = "Body Vitalization",            use = ((boss or elite) and not pbuffs['Body Vitalization']) },
			{ name = "Mother Earth's Protection",    use = (phealth <= .40 and (boss or elite)) },
		}
		if enemy then
			Skill2 = {
				--  Use Throat Attack on detect enemy spell cast.
				{ name = "Throat Attack",            use = ((melee or melee2) and (tSpell ~= nil) and (tTime >= 1) and ((tTime - tElapsed) > 0.5) and EnergyBar2 >= 15) },
				-- Combat
				{ name = "Binding Silence",          use = (tSpell ~= nil and tTime >= 1 and (tTime - tElapsed) > 0.5 and EnergyBar1 >= .05) },
				{ name = "Vampire Arrows",           use = (EnergyBar2 >= 50 and not tbuffs['Vampire Arrows']) },
				{ name = "Briar Entwinement",        use = (not tbuffs['Briar Entwinement']) },
				{ name = "Withering Seed",           use = ((boss or elite) and not tbuffs['Withering Seed']) },
				{ name = "Weakening Seed",           use = ((boss or elite) and not tbuffs['Weakening Seed']) },
				{ name = "Mother Nature's Wrath",    use = (not tbuffs['Mother Nature's Wrath']) },
				{ name = "Rockslide",                use = (true) },
				{ name = "Earth Arrow",              use = (true) },
				{ name = "Earth Pulse",              use = (combat and (melee or melee2)) },
				-- Wrist and Joint- only if focus is plentiful.
				{ name = "Wrist Attack",             use = ((melee or melee2) and not tbuffs['Wrist Attack'] and EnergyBar2 >= 50) },
                { name = "Joint Blow",               use = ((melee or melee2) and not tbuffs['Joint Blow'] and EnergyBar2 >= 50) },
			}
		end

	-- Class: Mage/Druid
	elseif mainClass == "MAGE" and subClass == "DRUID" then
		Skill = {
			{ name = "Silence",                      use = (silenceThis) },
			-- Potions
			{ name = "Action: "..healthpot,          use = (phealth <= .40) },
			{ name = "Action: "..manapot,            use = ((pctEB1 <= .50) and (phealth >= .50)) },
			-- Heals
			{ name = "Recover",                      use = ((phealth <= .60) and not pbuffs['Recover']) },
			{ name = "Recover",                      use = (phealth <= .30) },
			{ name = "Recover",                      use = ((phealth <= .90) and not combat) },
			{ name = "Antidote",                     use = (ProtectMe) }, --Don't know if it works
			-- Buffs
			{ name = "Savage Blessing",              use = (not pbuffs['Savage Blessing']) },
			{ name = "Fire Ward",                    use = (not pbuffs['Fire Ward']) },
			{ name = "Elemental Catalysis",          use = ((boss or elite) and not pbuffs['Elemental Catalysis']) },
			{ name = "Intensification",              use = ((boss or elite) and not pbuffs['Intensification']) },
			{ name = "Electrostatic Charge",         use = (combat and (boss or elite) and not pbuffs['Electrostatic Charge']) },
			{ name = "Energy Influx",                use = (combat and (boss or elite) and not pbuffs['Energy Influx']) },
			{ name = "Energy Well",                  use = ((pctEB1 <= .60) and (boss or elite) and not pbuffs['Energy Well']) },
			-- In case Electrostatic Charge is still on cooldown and you're getting hit hard
			{ name = "Mother Earth's Protection",    use = (phealth <= .40 and (boss or elite)) },
		}
		if enemy then
			Skill2 = {
				{ name = "Elemental Weakness",       use = ((boss or elite) and not tbuffs['Elemental Weakness']) },
				{ name = "Flame",                    use = ((boss or elite) and tbuffs['Elemental Weakness']) },
				{ name = "Fireball",                 use = (true) },
				{ name = "Lightning",                use = (not tbuffs['Lightning']) },
				{ name = "Electric Bolt",            use = ((boss or elite) and not tbuffs['Electric Current']) },
				{ name = "Plasma Arrow",             use = (not pbuffs['Charged']) },
				{ name = "Electric Explosion",       use = (pbuffs['Charged']) },
				{ name = "Thunderstorm",             use = (true) },
				{ name = "Earth Pulse",              use = (true) },
				{ name = "Discharge",                use = (combat and (melee or melee2)) },
			}
		end

	-- Class: Mage/Scout
	elseif mainClass == "MAGE" and subClass == "RANGER" then
		Skill = {
			-- Silence
			{ name = "Silence",                      use = (melee and (tSpell ~= nil) and (tTime >= 1) and ((tTime - tElapsed) > 0.5) and EnergyBar1 >= 15) },
			-- Potions
			{ name = "Action: "..healthpot,          use = (phealth <= .40) },
			{ name = "Action: "..manapot,            use = ((pctEB1 <= .50) and (phealth >= .50)) },
			-- Buffs
			{ name = "Fire Ward",                    use = (not pbuffs['Fire Ward']) },
			{ name = "Elemental Catalysis",          use = ((boss or elite) and not pbuffs['Elemental Catalysis']) },
			{ name = "Intensification",              use = ((boss or elite) and not pbuffs['Intensification']) },
			{ name = "Electrostatic Charge",         use = (combat and (boss or elite) and not pbuffs['Electrostatic Charge']) },
			{ name = "Energy Influx",                use = (combat and (boss or elite) and not pbuffs['Energy Influx']) },
			{ name = "Energy Well",                  use = ((pctEB1 <= .60) and (boss or elite) and not pbuffs['Energy Well']) },
		}
		if enemy then
			Skill2 = {
				--  Use Throat Attack on detect enemy spell cast.
				{ name = "Throat Attack",            use = ((melee or melee2) and (tSpell ~= nil) and (tTime >= 1) and ((tTime - tElapsed) > 0.5) and EnergyBar2 >= 15) },
				-- Combat
				{ name = "Elemental Weakness",       use = ((boss or elite) and not tbuffs['Elemental Weakness']) },
				{ name = "Vampire Arrows",           use = (EnergyBar2 >= 50 and not tbuffs['Vampire Arrows']) },
				{ name = "Flame",                    use = ((boss or elite) and tbuffs['Elemental Weakness']) },
				{ name = "Fireball",                 use = (true) },
				{ name = "Lightning",                use = (not tbuffs['Lightning']) },
				{ name = "Electric Bolt",            use = ((boss or elite) and not tbuffs['Electric Current']) },
				{ name = "Plasma Arrow",             use = (not pbuffs['Charged']) },
				{ name = "Electric Explosion",       use = (pbuffs['Charged']) },
				{ name = "Thunderstorm",             use = (true) },
				{ name = "Discharge",                use = (combat and (melee or melee2)) },
				-- Wrist and Joint- only if focus is plentiful.
				{ name = "Wrist Attack",             use = ((melee or melee2) and not tbuffs['Wrist Attack'] and EnergyBar2 >= 50) },
                { name = "Joint Blow",               use = ((melee or melee2) and not tbuffs['Joint Blow'] and EnergyBar2 >= 50) },
			}
		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

Peryl

Intermediate

Posts: 313

Location: Elsewhere

  • Send private message

862

Monday, December 10th 2012, 1:59am

I'm fairly certain I corrected that some time ago, but hey...

Anyway, the culprit line is line 25 in CustomFunctions.lua:

Source code

1
SELECTED_CHAT_FRAME:AddMessage(SILVER.."  ['..WHITE..k..SILVER..']:  "..LTBLUE.."id: "..WHITE..v.id..LTBLUE.."  stack: "..WHITE..v.stack..LTBLUE.."  time: "..WHITE..v.time)

Change this line to this (the end part is what has changed):

Source code

1
SELECTED_CHAT_FRAME:AddMessage(SILVER.." ['..WHITE..k..SILVER..']: "..LTBLUE.."id: "..WHITE..v.id..LTBLUE.." stack: "..WHITE..v.stack..LTBLUE.." time: "..WHITE..(v.time or "none"))
2013... The year from hell....

863

Monday, December 10th 2012, 10:31pm

Odd. I know I asked this question the other day but the post is missing. I am getting chat spam from using pet skills within the DIYCE. I am weaving in my SotO's Control Magic which is in the pet bar slot 7. I run the

Source code

1
 { name = "Pet Skill: 7",   use = true and (boss or elite or enemy) }, 
Well for one, I know how redundant it is but when I first looked at the description of (enemy) saying unfriendly target/player, I thought it meant it could be used in PvP but I was just too lazy to remove it. Anyway the problem is that after the pet skill is fired, I guess it is trying to cast it again and again even though it is on CD. At least that is what I think is happening. I really am not sure. All I know is the code is good because the pet skill fires, but for some reason for every stroke of the killsequence macro, the chat window tells me, "Skill is unavailable, Pet Skill: 7." Can you think of any way to get around this?

Peryl

Intermediate

Posts: 313

Location: Elsewhere

  • Send private message

864

Tuesday, December 11th 2012, 1:52am

Off the top of my head no, but I just got back from work and the brain ain't workin' too good right now :D

Anyway, there should be a way to get the pet skill cooldown. I just can't think of a way at the moment.
2013... The year from hell....

Adrianell

Beginner

Posts: 4

Location: Poland

Occupation: Student

  • Send private message

865

Tuesday, December 11th 2012, 2:53am

Guys how can i change here ->

Source code

1
2
[COLOR=white !important]
--Class: Warden/Warrior             elseif mainClass == "WARDEN" and subClass == "WARRIOR" then                          --Potions and Buffs             Skill = {                 { name = "Briar Shield",                  use = (EnergyBar1 >= 200) and ((not pbuffs['Briar Shield']) or (pbuffs['Briar Shield'].time <= 45)) },                     }                                  --Combat                 if enemy then                 Skill2 = {                 { name = "Damage Transfer",                  use = (  phealth <= .25                                    )},                     { name = "Elven Amulet",                     use = (  phealth <= .35                                    )},                 { name = "Energy Absorb",                    use = (  boss                                              )},                                 { name = "Enraged",                          use = (  EnergyBar2 <= 20                                  )},     { name = "Charged Chop",                     use = ( (not combat) and (boss or elite)      )},                 { name = "Pulse Mastery",                    use = ( (EnergyBar2 >= 20) and tbuffs['Beast Sigil']       )},                 { name = "Beast Chop",                       use = ( (EnergyBar2 >= 20)                                 )},                 { name = "Double Chop",                      use = ( (EnergyBar1 >= 100)                                )},                  { name = "Will Attack",                      use = (  EnergyBar1 >= 200                                    )},                 { name = "Slash",                            use = (  EnergyBar2 >= 25                                    )},                 { name = "Power of the Wood Spirit",         use = (  EnergyBar1 >= 200                                    )},                 { name = "Attack",                           use =    true                                          }                                                }                 end


That when Double Chop have CD i will use Charged Chop (on normal mobs, and elite mobs inside instances - but whitout bosses)
[/COLOR]

866

Tuesday, December 11th 2012, 3:42am

Hey all!
My question is, is this already being done in diyce and how are "White Hits" compared to normal hits. Are they same DPS/DMG or is there a specific formula for it?
Thanks in advance.
- B

Peryl

Intermediate

Posts: 313

Location: Elsewhere

  • Send private message

867

Tuesday, December 11th 2012, 4:15am

Quoted from "Adrianell;580480"

Guys how can i change here ->

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
--Class: Warden/Warrior
             elseif mainClass == "WARDEN" and subClass == "WARRIOR" then
                          --Potions and Buffs
             Skill = {
                 { name = "Briar Shield",                  use = (EnergyBar1 >= 200) and ((not pbuffs['Briar Shield']) or (pbuffs['Briar Shield'].time <= 45)) },
                     }
                                  --Combat
                 if enemy then
                 Skill2 = {
                 { name = "Damage Transfer",                 use = (  phealth <= .25                                    )},
                     { name = "Elven Amulet",                     use = (  phealth <= .35                                    )},
                 { name = "Energy Absorb",                    use = (  boss                                              )},
                                 { name = "Enraged",                          use = (  EnergyBar2 <= 20                                  )},
     { name = "Charged Chop",                     use = ( (not combat) and (boss or elite)      )},
                 { name = "Pulse Mastery",                    use = ( (EnergyBar2 >= 20) and tbuffs['Beast Sigil']       )},
                 { name = "Beast Chop",                       use = ( (EnergyBar2 >= 20)                                 )},
                 { name = "Double Chop",                      use = ( (EnergyBar1 >= 100)                                )},
                  { name = "Will Attack",                      use = (  EnergyBar1 >= 200                                    )},
                 { name = "Slash",                            use = (  EnergyBar2 >= 25                                    )},
                 { name = "Power of the Wood Spirit",         use = (  EnergyBar1 >= 200                                    )},
                 { name = "Attack",                           use =    true                                          }
                                                }
                 end


That when Double Chop have CD i will use Charged Chop (on normal mobs, and elite mobs inside instances - but whitout bosses)

You'd want your charged chop line to be:

Source code

1
{ name = "Charged Chop",  use = not CD("Double Chop") and not boss},

Note that the above would trigger outside instances as well.
2013... The year from hell....

Peryl

Intermediate

Posts: 313

Location: Elsewhere

  • Send private message

868

Tuesday, December 11th 2012, 4:21am

Quoted from "BloodyArrow;580484"

Hey all!
I use diyce for my rogue/scout. And today I accidently pressed "1" on my keyboard which is the normal "Attack" skill ingame. I didnt knew that this "Attack" skill just did "White hits". So I thought of implement this into the diyce rotation, for example when rogues are out of energy, spam "1" (White Hits) untill energy is recharged. My question is, is this already being done in diyce and how are "White Hits" compared to normal hits. Are they same DPS/DMG or is there a specific formula for it?
Thanks in advance.
- B


The default keybindings set '1' as the first button on the main action bar (note that you should see the keybinding right on that button). So whatever is in that action button will be triggered when you hit '1' on the keyboard.

The "Attack" skill is just the normal attack (same as when attacking via the mouse). You can literally just use "Attack" as the skill name in your DIYCE skill list to use it.

Note that using "Attack" on a friendly NPC will actually trigger the conversation as if you started talking to the NPC.
2013... The year from hell....

869

Tuesday, December 11th 2012, 7:59pm

Thanks for explaination Peryl.
- B

Peryl

Intermediate

Posts: 313

Location: Elsewhere

  • Send private message

870

Tuesday, December 11th 2012, 8:09pm

Attack is hardly ever on cooldown (you'd likely need to be spamming the DIYCE button to see it), so it will likely fire every time. So the best bet is to put it as the last entry in the skill list. This way, DIYCE can't do anything else, it'll try a normal attack. This may be redundant though since once combat starts, the game auto-attacks if nothing else is done (if I remember correctly that is).
2013... The year from hell....

871

Tuesday, December 11th 2012, 10:02pm

Can I avoid this auto.looting or?
- B

Peryl

Intermediate

Posts: 313

Location: Elsewhere

  • Send private message

872

Tuesday, December 11th 2012, 10:14pm

Well you could simply not have it in the list of course :p, but you can also set the use clause to make sure the target doesn't have 0 health. Something like:

Source code

1
use = thealth > 0
2013... The year from hell....

873

Tuesday, December 11th 2012, 11:38pm

Alright I added that to the Attack skill. And if I understood this right, the use = thealth > 0 is, use Attack while the targets HP is over 0?
- B

Peryl

Intermediate

Posts: 313

Location: Elsewhere

  • Send private message

874

Wednesday, December 12th 2012, 12:03am

That is correct. Since you can only loot when the mob is dead, having that condition will prevent DIYCE from trying to "Attack" a dead mob and therefore will not auto-loot it.
2013... The year from hell....

875

Wednesday, December 12th 2012, 12:14am

Thanks Peryl. Works just fine now. But I must ask again, what would you suggest having this Attack skill in the skill list. I think of the redundant as you said before.
- B

Peryl

Intermediate

Posts: 313

Location: Elsewhere

  • Send private message

876

Wednesday, December 12th 2012, 12:20am

Not a problem really. Extra memory needed to hold the skill within the list is minimal so that isn't a problem. Since DIYCE will stop processing the skill list as soon as it encounters a skill that it can use, it will not really affect execution speed either.

So it really boils down to what you want. If It bothers you having it in the list, remove it. Otherwise, leave it in.
2013... The year from hell....

877

Wednesday, December 12th 2012, 12:26am

Okay. Now I'm fully informed. Thanks once again.
- B

878

Wednesday, December 12th 2012, 9:32am

Quoted from "ghostwolf82;479696"


My current macro in game on my P/R is this -

Source code

1
/run if Potion(57) then return; elseif PriestFairySequence("v1") then return; elseif BuffParty(20) then return; elseif PartyHealer.Main() then return; elseif KillSequence("",59,57) then return; end
This is stringing together many of my functions into one macro, and running them in order. This will first check to see if I need to drink a mana potion, if not then it checks to see if I have my Fairy out and buffed, if I do then it checks to see if everyone in the party is fully buffed up, if they are then it checks to see if everyone is good on health, if they are THEN it runs the combat script I have set up for this toon.

This is just an example of how functions can be strung together to be called in one big "super"macro.


I thought I would try this out on my druid. I see I need to add some code for Potion to work, but the version I have already has BuffParty. The only issue now is I get a nil on PartyHealer.Main(). Was there a piece of code missing for this function? I can't seem to locate it.

n/m I am guessing this is referencing an outdated and discontinued addon? I googled and came up with an addon named Party Healer- Main and it was closed. Same thing?

879

Thursday, January 3rd 2013, 2:02am

Is there a way for DIYCE to call/refer to an in-game macro and/or have the in-game macro be part of the DIYCE rotation?

Like for example, I want to activate my in-game macro when I am in a certain state of condition.

I tried to do the: {name = "Action: 12", use = blah blah} but it's not working
(this is pretty much like Nito's post, but wasn't sure if that question was answered)

Peryl

Intermediate

Posts: 313

Location: Elsewhere

  • Send private message

880

Thursday, January 3rd 2013, 2:19am

Unfortunately, no.

Basically, because DIYCE is typically started from a macro it cannot execute another macro (this is a feature that is specifically removed by Runewaker). Most frame events are also blocked from starting macros in this way.

It is technically possible to start DIYCE outside of a macro and/or frame event (and no the chat box doesn't count since it would boil down to a frame event) at which point DIYCE could potentially start one macro, but that would require some fiddling around with files that may lead to a ToS violation.

Edit:
Forgot to mention, there is also a way to manually execute macro code, but it is a little more complex and you would lose the ability to use /wait commands (they wouldn't cause errors, they just wouldn't actually do anything).
2013... The year from hell....