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.

801

Wednesday, October 10th 2012, 1:32pm

I was all fubar there. It was Surprise Attack and I got that working by sliding in the (not combat) tag.

Source code

1
{ name = "Surprise Attack",            use = SurpriseAttack and (not combat) },

Amberwave

Intermediate

Posts: 369

Location: Chicagoland

  • Send private message

802

Sunday, October 14th 2012, 9:56pm

Using Notepad++ can I add colors to make things easier to find without causing issues?

803

Wednesday, October 17th 2012, 8:03pm

Is anyone else having a problem with DIYCE when they have the addon charplan? I can't seem to make my DIYCE work when i have the addon charplan but once I remove that addon my DIYCE works again. Any chance anyone know how to fix this issue?

804

Wednesday, October 17th 2012, 10:08pm

Is there anyone who has a wd/s DIYCE that I can steal from ya? I'm really new to DIYCE and it's really confusing to me. Thanks for any help!

Amberwave

Intermediate

Posts: 369

Location: Chicagoland

  • Send private message

805

Wednesday, October 17th 2012, 10:31pm

Quoted from "GosuNinja;574309"

Is anyone else having a problem with DIYCE when they have the addon charplan? I can't seem to make my DIYCE work when i have the addon charplan but once I remove that addon my DIYCE works again. Any chance anyone know how to fix this issue?


I did have an issue with CharPlan because I had a "function CP" in my DIYCE for my Champion / Priest. I just renamed the function and everything worked fine.

hangman04

Savage Warrior

Posts: 113

Location: Romania

Mood: Smile

  • Send private message

806

Saturday, October 20th 2012, 6:40pm

Guys DIYCE 2.2 has a (behind) check for special skills like blind sport or sneak attack.
Also for rogues read this post: http://forum.us.runesofmagic.com/showthr…0680#post480680

807

Sunday, October 21st 2012, 8:59am

Quoted from "mrmisterwaa;480680"

RogueScout v1.1

A few changes were added to the DIYCE.lua that ghostwolf posted in the OP.

This macro now works with other Rogues in the party.

Line 222 & 223 have the timers for Shadowstab & Low Blow, these values can be changed to ensure that energy conservation is maintained during combat (non-burns) and that during burns with Energy Thief active, it will not activate the counter on Low Blow.

Everything is working perfectly (well, as far as I can tell.)

If you want to use it, don't forget you also have to change the Action #'s for the following:

Melee Check (Line 177) (Any skill with a range of 50, Shadowstab, Low Blow, Wound Attack from your hot-bar should be put here for me it's Low Blow)
Yawaka's Blessing (Line 229),
Unbridled Enthusiam (Line 230),
Unknown Choice (Line 235),
Caviar Sandwich (Line 236),
Energy Potion (Line 240),
Strong Stimulant (Line 241),
Extinction Potion (Line 242).

A macro should be made for each one.

/run KillSequence("","0") --- Buffs
/run KillSequence("","1") --- Melee Combat
/run KillSequence("","2") --- Ranged Combat
/run KillSequence("","3") --- Long Cooldowns (Informer, Unknown Choice, Caviar Sandwich)
/run KillSequence("","4") --- Burning Cooldowns (Strong Stimluant etc.)

iluperylghostwolf.

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

local g_skill  = {}
local g_lastaction = ""
-- Holds the created timers
local DIYCE_Timers = {}

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("OnUpdate", [=[ DIYCE_TimerUpdate(elapsedTime) ]=] )
            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 or 0, id = ID }
            -- We also list by ID in case two different buffs/debuffs have the same name.
            list[ID] = {stack = stackSize, time = timeRemaining or 0, 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 (Skill[x].ignoretimer or GetDIYCETimerValue(Skill[x].timer) == 0) and CD(Skill[x].name) then
                if talktome then Msg("- "..Skill[x].name) end
                CastSpellByName(Skill[x].name)
                StartDIYCETimer(Skill[x].timer)
                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

--[[ Timer Update function ]]--
-- Tick down any active timers
function DIYCE_TimerUpdate(elapsed)
    for k,v in pairs(DIYCE_Timers) do
        v.timeLeft = v.timeLeft - elapsed
        if v.timeLeft < 0 then
            v.timeLeft = 0
        end
    end
end

--[[ Create a named timer ]]--
-- if the named timer already exists, this does nothing.
function CreateDIYCETimer(timerName, waitTime)
    if not DIYCE_Timers[timerName] then
        DIYCE_Timers[timerName] = { timeLeft = 0, waitTime = waitTime }
    end
end

--[[ Set/reset waitTimer of an existing timer ]]--
-- if the timer doesn't exist, this does nothing
function SetDIYCETimerDelay(timerName, waitTime)
    if DIYCE_Timers[timerName] then
        DIYCE_Timers[timerName].waitTime = waitTime
    end
end

--[[ Delete named timer ]]--
-- if the timer doesn't exist, this does nothing
-- Not really needed, but added for completeness
function DeleteDIYCETimer(timerName)
    if DIYCE_Timers[timerName] then
        DIYCE_Timers[timerName] = nil
    end
end

--[[ Get a timer's current time ]]--
-- if the timer doesn't exist, this returns 0
function GetDIYCETimerValue(timerName)
    if timerName then
        return DIYCE_Timers[timerName] and DIYCE_Timers[timerName].timeLeft or 0
    end
    return 0
end

--[[ Starts a timer ticking down ]]--
-- if timer doesn't exist, this does nothing
function StartDIYCETimer(timerName)
    if timerName and DIYCE_Timers[timerName] then
        DIYCE_Timers[timerName].timeLeft = DIYCE_Timers[timerName].waitTime
    end
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
A few changes to the OP's Customfunctions to suit my needs.

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
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,
        ['Heavy Shelling']  = true, --Juggler Apprentice in Grafu
        ['Dark Healing']    = true, --Mini-boss in Sardo
                    }
                    
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, goat2, 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 tDead = UnitIsDeadOrGhost("target")
    local behind = (not UnitIsUnit("player", "targettarget"))
    local melee = GetActionUsable(2) -- # 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 <= .03 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: Rogue/Scout
            if mainClass == "THIEF" and subClass == "RANGER" then
            --Timers for this class
            CreateDIYCETimer("SSBleed", 6.5) --Change the value between 6 -> 7.5 depending on your lag.
            CreateDIYCETimer("LBBleed", 8.5) --Change the value between 7 ->  8.5 depending on your lag.
            --goat2: 0 = Buffs, 1 = Melee, 2 = Ranged, 3 = Cooldowns & Potions, 4 = Longer Cooldowns
            
            if (goat2 == "0") then
            Skill =  {
                { name = "Combat Master",                      use = ((not pbuffs['Combat Master'])) },
                { name = "Action: 62 (Yawaka's Blessing)",     use = ((not pbuffs['Yawaka's Blessing'])) },
                { name = "Action: 69 (Unbridled Enthusiam)",   use = ((not pbuffs['Unbridled Enthusiasm'])) }, -- Speed Potion
                     }
            elseif (goat2 == "3") then
            Skill =  {
               { name = "Informer",                            use = ((not pbuffs['Informer'])) },
               { name = "Action: 64 (Unknown Choice)",         use = ((EnergyBar1 > 20)) },
               { name = "Action: 65 (Caviar Sandwich)",        use = ((not pbuffs['Caviar Sandwich'])) },
                     }
            elseif (goat2 == "4") then
            Skill = {
                { name = "Action: 46 (Energy Potion)",         use = ((EnergyBar1) <= 15 and (boss)) },
                { name = "Action: 30 (Strong Stimulant)",      use = ((boss) and (not pbuffs['Fervent Attack'])) },
                { name = "Action: 34 (Extinction Potion)",     use = ((boss) and (not pbuffs['Extinction Potion'])) },
                { name = "Energy Thief",                       use = ((EnergyBar1 < 50) and (boss) and (not tDead)) },
                { name = "Assassins Rage",                     use = ((boss) and (not tDead)) },
                { name = "Fervent Attack",                     use = ((boss) and (not tDead) and (not pbuffs['Strong Stimulant'])) },
                    }
            end

            if ((enemy) and (goat2 == "1")) then
            Skill2 = {
                { name = "Wound Attack",                       use = ((EnergyBar1 >= 35) and ((tbuffs[500654]) and (tbuffs[500704]))) },
                { name = "Blind Spot",                         use = (((EnergyBar1 >= 25) and (boss) and (behind)) and (pbuffs['Energy Thief'] or pbuffs['Premeditation'])) },
                { name = "Shadowstab",                         use = (EnergyBar1 >= 20),       timer = "SSBleed" },
                { name = "Low Blow",                           use = (((EnergyBar1 >= 25) and (tbuffs[500654])) or (tbuffs['Energy Thief'])),      timer = "LBBleed",   ignoretimer = not tbuffs['Energy Thief'] },
                { name = "Throat Attack",                      use = ((EnergyBar2 >= 50) and (boss or elite) and (silenceThis)) },
                { name = "Vampire Arrows",                     use = (EnergyBar2 >= 20) },
                { name = "Wrist Attack",                       use = ((EnergyBar2 >= 50) and (boss)) },
                { name = "Shot",                               use = ((EnergyBar1 < 20 )) },
                    }
            elseif ((enemy) and (goat2 == "2")) then
            Skill2 = {
                { name = "Vampire Arrows",                     use = (EnergyBar2 >= 20) },
                { name = "Shot",                               use = (true) },
                     }
            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" or subClass == "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
Change log (06/11/2011): Updated to DIYCE 2.1 & Updated the silenceList with a few spells to interrupt during Sardo/Grafu.
Change log (11/11/2011): Updated to DIYCE 2.2.
Change log (12/11/2011): Fixed a tiny bug.
Change log (23/11/2011): Timers have been added.



Well if use had a value of false, it wouldn't cast that specific skill.
As far as I can tell, it's working perfectly, a little delay that I do not enjoy. But it's perfect for people who have a low-ping to the server.



Hello everyone! i wanted to use this, but tbh im a total noob..im still using the old DIYCE 1.4.. though to everyone this may seem easy to follow, but for me it's not >_>. can someone pls make a much easier step by step please..

808

Sunday, October 28th 2012, 4:49am

Hey thought id give it a go .... fail :(

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
--Class: Warlock/champ            elseif mainClass == "HARPSYN" and subClass == "PSYRON" then
            
            --Potions and Buffs
            Skill = {
                
                { name = "Mind Rune",                 use = (pctEB2 >= .05) and ((not pbuffs['Mind Rune']) or (pbuffs['Mind Rune'].time <= 45)) },
                { name = "Sublimation Weave Curse",                use = (pctEB2 >= .05) and ((not pbuffs['Sublimation Weave Curse']) or (pbuffs['Sublimation Weave Curse'].time <= 45)) },
                
                    }
                    
            --Combat
                if enemy then
                Skill2 = {
                    { name = "Saces Fury",                  use = (true) },
                    { name = "Rune Energy Devotion",         use = (true) },
                    { name = "Electrocution",                use = (EnergyBar2 >= 20) },    
                    { name = "Energy Influx Strikes",        use = (EnergyBar2 >= 30) },
                    { name = "Warp Charge",                  use = (EnergyBar1 >= 30) },
                    { name = "Heart Collection Strike",      use = (true) },
                                       
                            }
                end

any idea ? thx in advance... i have nfi btw.
Holyheadkick P/M/K 67/67/62

809

Sunday, November 4th 2012, 2:49am

OK, now that Magic Control if fixed and can actually be cast, I have it working in my DIYCE. However I have a small spam problem..... OK make that a massive spam problem.

Source code

1
{ name = "Pet Skill: 7 (Magic Control)",     use = boss or elite },


Works just fine. The ability fires off and goes into CD but then my chat window is spammed from every single click of my macro. It just constantly tells me, "Pet Skill: 7 (Magic Control) is not available." It completely scrolls all other chat out of my window so I can see absolutely nothing but that msg. Does anyone know a way to maybe edit the code so that it doesn't keep trying to fire the pet skill while it is on CD?

810

Saturday, November 10th 2012, 5:26pm

New problema!

What the heck is a boolean?

I am trying to work on a DYICE for my little priest/champ for boring hum drum lvling. I want to use Chain of Light but it drains my mana a little too fast. Also I am trying to start my fights with Ice Fog but since it comes in ranks, I do not know how to input it into the list.

So working on Chain of Light I thought I could work it as:

Source code

1
 { name = "Chain of Light",       use = (pctEB1 >= .05 and (not EnergyBar2 >= 50) },
I did that in hopes that it would only cast Chain of Light to gain a total of 50 rage and then not go back to that skill. Instead I get the error that I have a boolean with a number. No clue what that means.

Then for Ice Fog, I have tried

Source code

1
 { name = "Ice Fog 2", 
and

Source code

1
 {name = "Ice Fog Rank 2",
but both come back as not available. Any ideas for either problem?

811

Sunday, November 11th 2012, 12:15am

Quoted from "Gilderoi;576879"

What the heck is a boolean?

I am trying to work on a DYICE for my little priest/champ for boring hum drum lvling. I want to use Chain of Light but it drains my mana a little too fast. Also I am trying to start my fights with Ice Fog but since it comes in ranks, I do not know how to input it into the list.

So working on Chain of Light I thought I could work it as:

Source code

1
 { name = "Chain of Light",       use = (pctEB1 >= .05 and (not EnergyBar2 >= 50) },
I did that in hopes that it would only cast Chain of Light to gain a total of 50 rage and then not go back to that skill. Instead I get the error that I have a boolean with a number. No clue what that means.

Then for Ice Fog, I have tried

Source code

1
 { name = "Ice Fog 2", 
and

Source code

1
 {name = "Ice Fog Rank 2",
but both come back as not available. Any ideas for either problem?

On the first, check ur parenthesis. On the second, try just Ice Fog.

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

812

Sunday, November 11th 2012, 1:14am

on the first, that was a typo as I was puting in the code from memory, as I deleted it from the list due to it breaking the entire thing. The Parrenthasis were there on the original code.

Source code

1
 { name = "Chain of Light",       use = (pct >= .05) and (not EnergyBar2 >= 50) }, 
But it would always trigger an error on that line saying boolean with a number. I actually switched the order and put the rage first and it then said trying a number with a boolean... Hmm just got an idea...

Source code

1
 { name = "Chain of Light",    use = (EnergyBar2 <=50) and (pctEB1 >= .05) }, 
Maybe the not comand on the rage is what cause what ever the heck a boolean is.

On the second. I tried your suggestion and was quite pleased to see the tbuff marked Ice Fog 2. I was freaking out trying to make sure the lower lvl rank didn't get used. Now just hope it will upgrade to rank 3 without any editing.


Edit:
I think something just struck me like a bolt of lightning.. The rest of the code might have pointed to why Chain of Light wasn't working. I had other range commands taking priority over Chains but were to be cast at lesser amounts of rage so it would have been telling the game, hey we need to cast chain of light, but wait.. we have to cast it till we reach 50 rage but as soon as we get 20 rage we have to electrocute. ><

Amberwave

Intermediate

Posts: 369

Location: Chicagoland

  • Send private message

813

Monday, November 12th 2012, 3:24am

Ravesden, look at page 73 and see if that helps.

Posts: 17

Location: New Mexico

Occupation: Server

  • Send private message

814

Wednesday, November 14th 2012, 1:12am

I am very new to ROM and even newer to DIYCE. I have tried to read the posts and info on this addon but I'm very confused on how to make my class combo. I am playing a Druid/Scout. Can someone pleas help me. If someone has on already made for Druid/Scout I would love to get it and just cut and past it in. Thank you.

815

Wednesday, November 14th 2012, 11:03am

Quoted from "Dreamcatcher;577192"

I am very new to ROM and even newer to DIYCE. I have tried to read the posts and info on this addon but I'm very confused on how to make my class combo. I am playing a Druid/Scout. Can someone pleas help me. If someone has on already made for Druid/Scout I would love to get it and just cut and past it in. Thank you.


Going to be honest with you - DIYCE is not for the druid/scout combo. I mean, it could be, but the setup would be so...idk. Lots would die if you tried healing with it. DPS is another thing, but healing a party with diyce is almost improbable.

I suggest you having a try at some healing addons. Heal Bot 2 and Gridcliqueit are addons that have similar functions. Click on health bars to heal, different hot keys=different set of heals. You can find the addons at Curse.com or Curseforge.com/addons/[insert addon name here]

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

816

Wednesday, November 14th 2012, 12:46pm

Quoted from "Dreamcatcher;577192"

I am very new to ROM and even newer to DIYCE. I have tried to read the posts and info on this addon but I'm very confused on how to make my class combo. I am playing a Druid/Scout. Can someone pleas help me. If someone has on already made for Druid/Scout I would love to get it and just cut and past it in. Thank you.


Heh, I tried this approach awhile ago, I was looking for a DIYCE for my druid/warden for (emergency oh crap someones after me) siege dps. I have then changed to a druid/scout. Although my dps is crap, sometimes I do on occasion kill someone by surprise. Unfortunately the casting time on our main dps skill "Earth Arrow" requires a lengthy casting time and the others like "Mothers Natures Wrath" have a hell of a long cool down period. So the whole hit 1 button spam easy mode thing is reserved for the lucky SOB's like priest/scouts. I have no idea what magical dps fairy blessed them but we druids on the other hand are resigned to heal ourselves and pray someone saves us. I use Heal Bot 2 for heals, its a good program, works in a pinch.

Posts: 17

Location: New Mexico

Occupation: Server

  • Send private message

817

Wednesday, November 14th 2012, 5:08pm

I'm not healing on my druid/scout. I like the druids dps. I played a dps druid in WOW and though this one is different I still like it for dps. And right now this is for leveling. I will later make my scout the main and druid second so i have a self heal. I also have mage as a 3rd class.

818

Wednesday, November 14th 2012, 8:48pm

Quoted from "Dreamcatcher;577255"

I'm not healing on my druid/scout. I like the druids dps. I played a dps druid in WOW and though this one is different I still like it for dps. And right now this is for leveling. I will later make my scout the main and druid second so i have a self heal. I also have mage as a 3rd class.


I played a druid on wow, and there is a huge difference between the two. The druids in wow have a dps/tanking/healing specs. Unfortunately the druids in rom are different, they are meant to be a support class for healing. The problem with leveling your druid first is, once you do the Morrock Quest line and get all the way to 75, you will have a hard time leveling your scout to 75 because you may run out of quests to do. Many people spend a lot of diamonds on reset tickets and do dailies to get thier secondary spec to 75. (just food for thought) I'd elaborate more but I have to be at school in like 10 mins.

Posts: 17

Location: New Mexico

Occupation: Server

  • Send private message

819

Wednesday, November 14th 2012, 9:44pm

Technically my druid is my 3rd spec. I started as a mage then went scout and then when i got to 30/30 i went druid for the self heals. So right now I have druid lvl 50, scout lvl 31, and mage lvl 30. So far I have not had any problems with shortage of quests.

Posts: 17

Location: New Mexico

Occupation: Server

  • Send private message

820

Friday, November 16th 2012, 12:36am

Ok I found some code from lordmohg on pg8. and changed it to be for scout/druid. All is working but the Vampire Arrows and Wind Arrow and i'm not sure why.

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
	-- Class: Scout/Druid
    elseif mainClass == "RANGER" and subClass == "DRUID" then
		-- Potions
        Skill = {
            { name = "Action: "..healthpot,			use = (phealth <= .50) },
            { name = "Action: "..manapot,			use = ((EnergyBar1 <= .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
            { name = "Antidote",					use = (pbuffs['Poisoned']) },
			-- Self Bufffs
            { name = "Savage Blessing",				use = (not pbuffs['Savage Blessing']) },
            { 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 and boss) },
				{ name = "Target Area",				use = (combat and boss) },
				{ name = "Earth Pulse",				use = (combat and melee) },
				-- Shots
				{ name = "Shot",					use = (EnergyBar1 <= 15 and combat) },
				{ name = "Autoshot",				use = (not ASon and combat) },
				{ name = "Snipe",					use = (pbuffs[ 'Hidden Peril']) },
				{ name = "Vampire Arrows",			use = (pctEB1 >= 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.  I dunno if Joint attack is even worthwhile- maybe for kiting?
				{ 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