You are not logged in.

1

Tuesday, November 26th 2013, 12:11pm

DIYCE for rogue/mage

For those who dont know what diyce is check these threads at the US forum:



I've added the following lines in the Killsequens macro:

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 Rogue/Mage
elseif mainClass == "THIEF" and subClass == "MAGE" then

--Timers for this class


--Potions and Buffs
Skill = {
	{ name = "Action: "..healthpot,	use = (phealth <= .30) },
	{ name = "Poison",		use = (not combat) and ((not pbuffs["Poisonous"]) or (pbuffs["Poisonous"].time <= 45))},
		}

--Combat
if enemy then
Skill2 = {
	{ name = "Throw",		use = true },
	{ name = "Wound Attack",	use = (EnergyBar1 >= 35) and (tbuffs[620313]) and (tbuffs["Grievous Wound"]) },
	{ name = "Low Blow",		use = (EnergyBar1 >= 30) and (tbuffs[620313]) and (not tbuffs["Grievous Wound"]) },
	{ name = "Shadowstab",		use = (EnergyBar1 >= 20) and (not tbuffs[620313]) },
	{ name = "Shadowstab",		use = (EnergyBar1 >= 55) },
	{ name = "Attack",		use = (thealth == 1) },					
	}
end


Seems simple and effective, anyone has some advise to maximize dps even more?



For those who dont want to add those lines by yourself or arent that experienced with diyce, pls read the next few posts
All DIYCE credits etc etc goes to 'Sixpax', 'Peryl', 'Ghostwolf' and all other authors/users


Well have fun :)

Ellen[i]


ps. I would have attached the files if we were allowed
[/i]

2

Tuesday, November 26th 2013, 12:17pm

how to maximize dps for r/m: DONT! use diyce (y)

3

Tuesday, November 26th 2013, 1:38pm

Since i had to wait for 1 hour before i was allowed to post a new post and not could edit my previous post....




For those who dont want to add those lines by yourself or arent that experienced with diyce, pls do the following:

  1. Create a directory named 'DIYCE' at 'C:\Programs\Runes of Magic\Interface\Addons\'
  2. Create a text file named 'DIYCE.toc' at 'C:\Programs\Runes of Magic\Interface\Addons\DIYCE\'
  3. Copy the spoiler contents

    Spoiler Spoiler

    ## Title: DIY Combat Engine
    ## Version: 2.3.1
    ## Description: Combat Engine to help with skill rotations, and maintaining buffs/debuffs for maximizing DPS.
    ## Author: Ghost Wolf

    DIYCE.lua
    CustomFunctions.lua
    in that textfile and save it
  4. Create a text file named 'DIYCE.lua' at 'C:\Programs\Runes of Magic\Interface\Addons\DIYCE\'
  5. Copy the spoiler contents

    Spoiler Spoiler

    -- Title: DIY Combat Engine
    -- Version: 2.4.2
    -- Description: Combat Engine to help with skill rotations, and maintaining buffs/debuffs for maximizing DPS.
    -- Author: Ghost Wolf

    local g_skill = {}
    local DIYCE_Timers = {}
    local g_lastaction = ""
    local addonName = "DIY Combat Engine"
    local addonVersion = "v2.4"

    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")
    DIYCE_EventFrame:SetScripts("OnUpdate", [=[ DIYCE_TimerUpdate(elapsedTime) ]=] )

    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)

    local buff = string.gsub(buff, "(Function:)( *)(.*)", "%3")

    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, name = buff:gsub("(%()(.)(%))", "%2") }
    else
    break
    end
    end

    return list
    end

    -- Example of useage of ChkBuffCount()
    -- { name = "Tactical Attack", use = ((EnergyBar1 >= 15) and (ChkBuffCount("target",_,500081,2))) },
    function ChkBuffCount(tgt,buffname,BuffID,buffcount)
    local cnt = 1
    local buffcmd = UnitBuff
    local buffcounter = 0

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

    local buff, _, _, ID = buffcmd(tgt,cnt)

    while buff ~= nil do
    if string.gsub(buff, "(%()(.)(%))", "%2") == buffname
    or ID == BuffID then
    buffcounter = buffcounter + 1
    end
    cnt = cnt + 1
    buff = buffcmd(tgt,cnt)

    if buffcounter >= buffcount then
    return true
    end
    end
    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.2
    elseif skillname == nil then
    return false
    else
    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
    elseif string.find(Skill[x].name, "Function:") then
    action = string.gsub(Skill[x].name, "(Function:)( *)(.*)", "%3")
    if action and type(_G[action]) == "function" then
    _G[action](unpack(Skill[x].params or {}))
    end
    return true
    end
    end
    end
    if (arg1 == "v2") then Msg("- [IDLE]", 0, 1, 1) end

    return false
    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", "Fire Ward", "Savage Blessing",
    "Concentration Prayer", "Shadow Fury", "Embrace of the Water Spirit" }

    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

    --[[ 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

    --[[ Stop a named timer ]]--
    -- if timer doesn't exist, this does nothing
    function StopDIYCETimer(timerName)
    if DIYCE_Timers[timerName] then
    DIYCE_Timers[timerName].timeLeft = 0
    end
    end

    --Load into Addon Manager if fully loaded.
    if AddonManager then
    local addon = {
    name = addonName,
    version = addonVersion,
    author = "Ghost Wolf",
    description = "Combat Engine to help with skill rotations, and maintaining buffs/debuffs for maximizing DPS.",
    icon = "Interface/Addons/DIYCE/do_it_yourself_button.tga",
    category = "Other",
    }

    if AddonManager.RegisterAddonTable then
    AddonManager.RegisterAddonTable(addon)
    else
    AddonManager.RegisterAddon(addon.name, addon.description, addon.icon, addon.category,
    addon.configFrame, addon.slashCommand, addon.miniButton, addon.version, addon.author)
    end

    DEFAULT_CHAT_FRAME:AddMessage(addonName .. " " .. addonVersion .. " loaded successfully!")
    end
    in that textfile and save it
  6. Create a text file named 'CustomFunctions.lua' at 'C:\Programs\Runes of Magic\Interface\Addons\DIYCE\'
  7. See next post (post limit of 25000 letters)

4

Tuesday, November 26th 2013, 1:49pm

I am noobish with rogue, but spaming Low Blow better that spaming Shadow Stab? Since the damage of Low Blow is much higher and once you are out of energy, you can just hit Combo Throw.

Imho first of all should be understand the rotation of your class before you even start to think about DIYCE.

I would spam Low blow instead of Shadow stab, add Combo throw to the rotation, your Shadow stab is missing a couple of bleeds triggered by other rogue skills (no difference if you are only rogue in party, but with more rogues in the group...).

You have no silence/stun/cc in your DIYCE, so keep that in mind and use those skills.
:shit:

5

Tuesday, November 26th 2013, 2:07pm

You should probably add blind spot in your rotation. Best damage dealing r/m i seen skip combo throw in burst and go for auto attack option, they leech bleeds so they actually only use wound attack and they go behind the boss to use blind spot which hits much harder then low blow or shadowstab.You dont really need diyce for r/m in my opinion only roguecomboq addon.Remember to put raid runes in both weapons(main and offhand) and use 1.8 speed offhandto maximize damage from auto attack.

Conclusion: add blind spot in rotation, everything else seems fine.

6

Tuesday, November 26th 2013, 2:16pm

Move this thread to Interface, Addons & Macros

Obvious you're new to r/m as all rogues rerolling now, cause you should know that Enchanted Throw does NOT stack with Poison.
For a nice guide to rogues follow up US forum link here
For diyce, installation and rotations of skills follow up link here
One man's lies are another man's truth

7

Tuesday, November 26th 2013, 4:17pm

Thanks for the feedback, i made adjustments accordingly :)

The new DIYCE portion for rogue/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
45
46
47
48
49
50
51
52
53
--Class Rogue/Mage
elseif mainClass == "THIEF" and subClass == "MAGE" then

--Timers for this class


--Potions and Buffs
Skill = {
{ name = "Action: "..healthpot, use = (phealth <= .30) },
}

--Combat
if enemy then
if (mode == "BehindNoCombo") then
Skill2 = {
{ name = "Throw", use = true },
{ name = "Wound Attack", use = (EnergyBar1 >= 35) and (tbuffs["Bleed"]) and (tbuffs["Grievous Wound"]) },
{ name = "Low Blow", use = (EnergyBar1 >= 30) and (tbuffs["Bleed"]) and (not tbuffs["Grievous Wound"]) },
{ name = "Blind Spot", use = (EnergyBar1 >= 70) and (not tbuffs["Bleed"]) },
{ name = "Low Blow", use = (EnergyBar1 >= 70) },
{ name = "Attack", use = (thealth == 1) },
}
elseif (mode == "Behind") then
Skill2 = {
{ name = "Throw", use = true },
{ name = "Wound Attack", use = (EnergyBar1 >= 35) and (tbuffs["Bleed"]) and (tbuffs["Grievous Wound"]) },
{ name = "Low Blow", use = (EnergyBar1 >= 30) and (tbuffs["Bleed"]) and (not tbuffs["Grievous Wound"]) },
{ name = "Blind Spot", use = (EnergyBar1 >= 70) and (not tbuffs["Bleed"]) },
{ name = "Combo Throw", use = true },
{ name = "Low Blow", use = (EnergyBar1 >= 70) },
{ name = "Attack", use = (thealth == 1) },
}
elseif (mode == "NoCombo") then
Skill2 = {
{ name = "Throw", use = true },
{ name = "Wound Attack", use = (EnergyBar1 >= 35) and (tbuffs["Bleed"]) and (tbuffs["Grievous Wound"]) },
{ name = "Low Blow", use = (EnergyBar1 >= 30) and (tbuffs["Bleed"]) and (not tbuffs["Grievous Wound"]) },
{ name = "Shadowstab", use = (EnergyBar1 >= 20) and (not tbuffs["Bleed"]) },
{ name = "Low Blow", use = (EnergyBar1 >= 65) },
{ name = "Attack", use = (thealth == 1) },
}
else
Skill2 = {
{ name = "Throw", use = true },
{ name = "Wound Attack", use = (EnergyBar1 >= 35) and (tbuffs["Bleed"]) and (tbuffs["Grievous Wound"]) },
{ name = "Low Blow", use = (EnergyBar1 >= 30) and (tbuffs["Bleed"]) and (not tbuffs["Grievous Wound"]) },
{ name = "Shadowstab", use = (EnergyBar1 >= 20) and (not tbuffs["Bleed"]) },
{ name = "Combo Throw", use = true },
{ name = "Low Blow", use = (EnergyBar1 >= 65) },
{ name = "Attack", use = (thealth == 1) },
}
end
end



and for the last part of the install instruction:


  1. Copy the spoiler contents

    Spoiler Spoiler

    -- Title: DIY Combat Engine
    -- Version: 2.4.2
    -- Description: Combat Engine to help with skill rotations, and maintaining buffs/debuffs for maximizing DPS.
    -- Author: Ghost Wolf

    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 or "none"))
    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,
    ["Dark Healing"] = true,
    }

    local subList = {
    ["Sharp Slash"] = true, -- 1st Boss DOD
    ["Conjure Energy"] = true, -- 4th boss GC HM AOE
    ["Cat Claw Whirlwind"] = true, --1st boss RT AOE
    ["Void Fire"] = true, --2nd boss RT AOE
    }

    arrowTime = 0
    SlotRWB = 16 --Action Bar Slot # for Rune War Bow
    SlotMNB = 17 --Action Bar Slot # for your Main Bow
    local g_lastaction = ""
    local g_cnt = 0

    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

    --The Potion function is for using in a macro either by itself or combined with the KillSequence function.
    --I used it with my Priest in combo with the PartyHealer Addon to make sure to use potions when I needed them most.
    function Potion(healthpot,manapot)
    local Skill = {}
    local i = 0
    local phealth = PctH("player")
    local pctmana = PctM("player")
    healthpot = healthpot or 0
    manapot = manapot or 0
    Skill = {
    { name = "Action: "..healthpot, use = (phealth <= .70) },
    { name = "Action: "..manapot, use = (pctmana <= .40) },
    }
    MyCombat(Skill,arg1)
    end

    --Summon and dismiss a pet.
    function Pet(petnum)
    if IsPetSummoned(petnum)
    then ReturnPet(petnum)
    else SummonPet(petnum)
    end
    end

    --Summon and use the Warden Pet.
    function WardenPet(arg1)
    MyCombat(Skill, arg1)
    end

    --Summon and use the Priest Fairy.,
    function PriestFairySequence(arg1)
    if (not MyCombat(Skill, arg1)) then
    MyCombat(Skill2, arg1)
    end
    end

    --The main function of DIYCE.
    function KillSequence(arg1, mode, healthpot, manapot, Healslot, foodslot, speedpot, ragepot, HoTslot)
    --arg1 = "v1" or "v2" for debugging
    --mode = used for various purposes, such as setting custom sections for specific situation. (IE: Seige War/PvP)
    --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(13) -- # is your melee range spell slot number
    local a1,a2,a3,a4,a5,ASon = GetActionInfo(14) -- # is your Autoshot slot number
    local ammo = (GetEquipSlotInfo(10) ~= nil)
    local _,_,_,_,RWB,_ = GetActionInfo( SlotRWB )
    local _,_,_,_,MNB,_ = GetActionInfo( SlotMNB )
    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 PsiPoints, PsiStatus = GetSoulPoint()
    local zoneid = (GetZoneID() % 1000)
    local SeigeWar = (zoneid == 402) -- The "Seige War" Zone

    --Determine Class-Combo
    mainClass, subClass = UnitClassToken( "player" )
    --main, second = UnitClass("player")

    --Silence Logic
    local tSpell,tTime,tElapsed = UnitCastingTime("target")
    local silenceThis = tSpell and silenceList[tSpell] and ((tTime - tElapsed) > 0.1)

    --Substitute Logic (for R/S combo)
    local subThis = tSpell and subList[tSpell] and ((tTime - tElapsed) > 0.1)

    --Potion & Food Checks
    healthpot = healthpot or 0
    manapot = manapot or 0
    speedpot = speedpot or 0
    foodslot = foodslot 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
    TargetNearestEnemy()
    return
    end

    --Begin Player Skill Sequences

    --Priest = AUGUR, Druid = DRUID, Mage = MAGE, Knight = KNIGHT,
    --Scout = RANGER, Rogue = THIEF, Warden = WARDEN, Warrior = WARRIOR
    --Warlock = HARPSYN, Champion = PSYRON

    --Class: Rogue/Scout
    elseif mainClass == "THIEF" and subClass == "RANGER" then
    --Timers for this class
    CreateDIYCETimer("SSBleed", 8.8) --Change the value between 6 -> 7.5 depending on your lag.
    CreateDIYCETimer("LBBleed", 8.8) --Change the value between 7 -> 8.5 depending on your lag.

    --Ammo Check and Equip
    if GetCountInBagByName("Runic Thorn") > 0 then
    UseItemByName("Runic Thorn")
    return true
    end
    if GetInventoryItemDurable("player", 9) == 0
    and GetTime() - arrowTime > 2 then
    if (not RWB) then
    UseAction(SlotRWB)
    return
    end
    UseEquipmentItem(10)
    arrowTime = GetTime()
    return true
    end

    if (not MNB) then
    UseAction(SlotMNB)
    return
    end

    --Potions and Buffs
    Skill = {
    { name = "Action: "..healthpot, use = (phealth <= .70) },
    { name = "Combat Master", use = ((not pbuffs["Combat Master"]) or (pbuffs["Combat Master"].time <= 45)) and (EnergyBar2 >= 30) },
    { name = "Poison", use = (not combat) and ((not pbuffs["Poisonous"]) or (pbuffs["Poisonous"].time <= 45)) },
    { name = "Action: "..speedpot, use = (not pbuffs["Unbridled Enthusiasm"]) },
    { name = "Action: "..foodslot, use = (not pbuffs["Spicy Meatsauce Burrito"]) },
    }

    --Combat
    if enemy then
    Skill2 = {
    { name = "Throat Attack", use = melee and (silenceThis) },
    { name = "Substitute", use = subThis and (EnergyBar2 >= 30) },
    { name = "Energy Thief", use = ((EnergyBar1 < 25) and (boss) and (not tDead)) },
    { name = "Fervent Attack", use = (pbuffs["Energy Thief"]) },
    { name = "Premeditation", use = (not combat) and boss and (EnergyBar1 >= 50) and (not pbuffs["Premeditation"]) },
    { name = "Informer", use = boss },
    { name = "Assassins Rage", use = boss },
    { name = "Evasion", use = boss },
    { name = "Wrist Attack", use = (EnergyBar2 >= 35) and boss },
    { name = "Sneak Attack", use = (EnergyBar1 >= 20) and boss and behind and party and (not combat) },
    { name = "Blind Spot", use = (EnergyBar1 >= 20) and boss and behind and party },
    { name = "Vampire Arrows", use = (not melee) and (EnergyBar2 >= 20) },
    { name = "Shot", use = (not melee) },
    { name = "Wound Attack", use = (EnergyBar1 >= 35) and (tbuffs[620313]) and (tbuffs[500704]) },
    { name = "Low Blow", use = (EnergyBar1 >= 25) and (tbuffs[620313]) and (not tbuffs[500704]), timer = "LBBleed" },
    { name = "Shadowstab", use = (EnergyBar1 >= 20) and (not tbuffs[620313]), timer = "SSBleed" },
    { name = "Vampire Arrows", use = (EnergyBar2 >= 20) },
    { name = "Shot", use = true },
    { name = "Shadowstab", use = (EnergyBar1 >= 20) },
    { name = "Attack", use = (thealth == 1) },
    }
    end

    elseif mainClass == "RANGER" and subClass == "AUGUR" then

    --Ammo Check and Equip
    if GetCountInBagByName("Runic Thorn") > 0 then
    UseItemByName("Runic Thorn")
    return true
    end
    if GetInventoryItemDurable("player", 9) == 0
    and GetTime() - arrowTime > 2 then
    if (not RWB) then
    UseAction(SlotRWB)
    return
    end
    UseEquipmentItem(10)
    arrowTime = GetTime()
    return true
    end
    --[[ if (not MNB) then
    UseAction(SlotMNB)
    return
    end ]]--

    --Potions and Buffs
    Skill = {
    { name = "Regenerate", use = (phealth <= .90) and (pctEB2 >= .05) and (not pbuffs["Regenerate"]) },
    { name = "Urgent Heal", use = (phealth <= .70) and (pctEB2 >= .05) and (not combat) },
    { 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 = "Frost Arrow", use = (not combat) and (EnergyBar1 >= 20) and ((not pbuffs["Frost Arrow"]) or (pbuffs["Frost Arrow"].time <= 45)) },
    { name = "Blood Arrow", use = ((not combat or (phealth <= .45)) and (pbuffs["Blood Arrow"])) },
    { name = "Target Area", use = (tdead and (pbuffs["Target Area"])) },
    { name = "Action: "..speedpot, use = (not pbuffs["Unbridled Enthusiasm"]) },
    }

    --Combat
    if enemy then
    Skill2 = {
    { name = "Throat Attack", use = melee and (silenceThis) },
    { name = "Neck Strike", use = (silenceThis) },
    { name = "Blood Arrow", use = (phealth >= .95) and (not pbuffs["Blood Arrow"]) and boss },
    { name = "Target Area", use = (EnergyBar1 >= 40) and (not pbuffs["Target Area"]) and boss },
    { name = "Concentration", use = (not pbuffs["Concentration"]) and boss },
    { name = "Arrow of Essence", use = (not pbuffs["Arrow of Essence"]) and boss },
    { name = "Autoshot", use = (not ASon) },
    { name = "Vampire Arrows", use = (EnergyBar1 >= 20) },
    { name = "Shot", use = true },
    }
    end

    --Class: Scout/Rogue
    elseif mainClass == "RANGER" and subClass == "THIEF" then
    --Timers for this class

    --[[ --Ammo Check and Equip
    if GetCountInBagByName("Runic Thorn") > 0 then
    UseItemByName("Runic Thorn")
    return true
    end
    if GetInventoryItemDurable("player", 9) == 0
    and GetTime() - arrowTime > 2 then
    if (not RWB) then
    UseAction(SlotRWB)
    return
    end
    UseEquipmentItem(10)
    arrowTime = GetTime()
    return true
    end
    if (not MNB) then
    UseAction(SlotMNB)
    return
    end ]]--

    --Potions and Buffs
    Skill = {
    { name = "Action: "..healthpot, use = (phealth <= .70) },
    }

    --Combat
    if enemy then
    Skill2 = {
    { name = "Neck Strike", use = melee and (silenceThis) },
    { name = "Sapping Arrow", use = (EnergyBar2 >= 30) },
    { name = "Weak Spot", use = (EnergyBar1 >= 30) },
    { name = "Piercing Arrow", use = true },
    { name = "Custom: Shot", use = (g_lastaction ~= "Shot") },
    { name = "Vampire Arrows", use = (EnergyBar1 >= 20) and CD("Deadly Poison Bite")},
    { name = "Deadly Poison Bite", use = (EnergyBar2 >= 30) },
    { name = "Custom: Reflected Shot", use = true },
    { name = "Shot", use = true },
    }
    end

    --Class Rogue/Mage
    elseif mainClass == "THIEF" and subClass == "MAGE" then

    --Timers for this class


    --Potions and Buffs
    Skill = {
    { name = "Action: "..healthpot, use = (phealth <= .30) },
    }

    --Combat
    if enemy then
    if (mode == "BehindNoCombo") then
    Skill2 = {
    { name = "Throw", use = true },
    { name = "Wound Attack", use = (EnergyBar1 >= 35) and (tbuffs["Bleed"]) and (tbuffs["Grievous Wound"]) },
    { name = "Low Blow", use = (EnergyBar1 >= 30) and (tbuffs["Bleed"]) and (not tbuffs["Grievous Wound"]) },
    { name = "Blind Spot", use = (EnergyBar1 >= 70) and (not tbuffs["Bleed"]) },
    { name = "Low Blow", use = (EnergyBar1 >= 70) },
    { name = "Attack", use = (thealth == 1) },
    }
    elseif (mode == "Behind") then
    Skill2 = {
    { name = "Throw", use = true },
    { name = "Wound Attack", use = (EnergyBar1 >= 35) and (tbuffs["Bleed"]) and (tbuffs["Grievous Wound"]) },
    { name = "Low Blow", use = (EnergyBar1 >= 30) and (tbuffs["Bleed"]) and (not tbuffs["Grievous Wound"]) },
    { name = "Blind Spot", use = (EnergyBar1 >= 70) and (not tbuffs["Bleed"]) },
    { name = "Combo Throw", use = true },
    { name = "Low Blow", use = (EnergyBar1 >= 70) },
    { name = "Attack", use = (thealth == 1) },
    }
    elseif (mode == "NoCombo") then
    Skill2 = {
    { name = "Throw", use = true },
    { name = "Wound Attack", use = (EnergyBar1 >= 35) and (tbuffs["Bleed"]) and (tbuffs["Grievous Wound"]) },
    { name = "Low Blow", use = (EnergyBar1 >= 30) and (tbuffs["Bleed"]) and (not tbuffs["Grievous Wound"]) },
    { name = "Shadowstab", use = (EnergyBar1 >= 20) and (not tbuffs["Bleed"]) },
    { name = "Low Blow", use = (EnergyBar1 >= 65) },
    { name = "Attack", use = (thealth == 1) },
    }
    else
    Skill2 = {
    { name = "Throw", use = true },
    { name = "Wound Attack", use = (EnergyBar1 >= 35) and (tbuffs["Bleed"]) and (tbuffs["Grievous Wound"]) },
    { name = "Low Blow", use = (EnergyBar1 >= 30) and (tbuffs["Bleed"]) and (not tbuffs["Grievous Wound"]) },
    { name = "Shadowstab", use = (EnergyBar1 >= 20) and (not tbuffs["Bleed"]) },
    { name = "Combo Throw", use = true },
    { name = "Low Blow", use = (EnergyBar1 >= 65) },
    { name = "Attack", use = (thealth == 1) },
    }
    end
    end

    --ADD MORE CLASS COMBOS ABOVE THIS LINE.
    --USE AN "ELSEIF" TO CONTINUE WITH MORE CLASS COMBOS.
    --THE NEXT "END" STATEMENT IS THE END OF THE CLASS COMBOS STATEMENTS.
    --DO NOT ADD ANYTHING 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("")
    g_lastaction = ""
    return
    end

    if SeigeWar then
    if (not LockedOn) or (not enemy) then
    for i=1,10 do
    if UnitIsPlayer("target") then
    break
    end
    TargetNearestEnemy()
    StopDIYCETimer("LBBleed")
    StopDIYCETimer("SSBleed")
    return
    end
    end

    elseif (not SeigeWar) then
    if mainClass == "RANGER" and (not party) then --To keep scouts from pulling mobs without meaning to.
    if (not LockedOn) or (not enemy) then
    TargetNearestEnemy()
    g_lastaction = ""
    StopDIYCETimer("LBBleed")
    StopDIYCETimer("SSBleed")
    return
    end
    elseif mainClass ~= "RANGER" then --Let all other classes auto target.
    if (not LockedOn) or (not enemy) then
    TargetNearestEnemy()
    g_lastaction = ""
    StopDIYCETimer("LBBleed")
    StopDIYCETimer("SSBleed")
    return
    end
    end
    end
    end
    in that textfile 'CustomFunctions.lua' and save it
  2. In RoM make 4 new macro's and use each line in a new macro

    Source code

    1
    
    /run KillSequence("", "BehindNoCombo", 0, 0, 0, 0, 0, 0, 0)

    Source code

    1
    
    /run KillSequence("", "Behind", 0, 0, 0, 0, 0, 0, 0)

    Source code

    1
    
    /run KillSequence("", "NoCombo", 0, 0, 0, 0, 0, 0, 0)

    Source code

    1
    
    /run KillSequence("", "", 0, 0, 0, 0, 0, 0, 0)
All DIYCE credits etc etc goes to 'Sixpax', 'Peryl', 'Ghostwolf' and all other authors/users

Well have fun :)

Ellen
ps. i removed a few classes and pets from ghostwolfs setup since maximum length of a message is 25000 characters

8

Tuesday, December 3rd 2013, 6:05pm

I can't get this working even though I followed every step. hmm

9

Tuesday, December 3rd 2013, 8:34pm

just learn to play the class :P r/m is far from hard

wolfensclaw

Professional

Posts: 925

Location: Wallachia

Occupation: r/k veteran

  • Send private message

10

Tuesday, December 3rd 2013, 10:39pm

i heared w/m need dyice also...
The less you respond to rude, critical, argumentative people, the more peaceful your life will become.

11

Tuesday, December 3rd 2013, 11:51pm

just learn to play the class :P r/m is far from hard
I'm playing my class now without any diyce, just wanna try it out and see how it works, fun the create your own rotation in a script.

12

Thursday, December 12th 2013, 7:46pm

dyice not work for rogue mage

13

Thursday, December 12th 2013, 8:42pm

if it's not working for you, try and make ur own...if u need help, visit the US diyce threads, as that is where it all began, and the original authors can help with it...
CIKE - S/D/R

14

Friday, December 13th 2013, 10:06am

Yep, sorry, the contents in the spoilers seems to be broken somewhere, i need to figure out where/why...

In the meantime, download DIYCE from Curse or from the US forums and insert the R/M part while i try to figure out what went wrong... ;)

15

Friday, December 26th 2014, 6:14pm

i want to post based on your work and mine :) , maybe this can help someone

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
--Class Rogue/Mage
elseif mainClass == "THIEF" and subClass == "MAGE" then

--Timers for this class


--Potions and Buffs
Skill = {
{ name = "Action: "..healthpot, use = (phealth <= .30) },
}


--Not in Combat Buffs
if (not enemy) then
if (mode == "Buffs") then
Skill2 = {
{ name = "Action: 11 (Potion: Scarlet Love)",        use = (not pbuffs["Scarlet Love"]) or (pbuffs["Scarlet Love"].time < 45)},
{ name = "Action: 16 (Enchanted Throw)",        use = (not pbuffs["Enchanted Throw"])},
{ name = "Action: 15 (Yawaka's Blessing)",        use = (not pbuffs["Yawaka's Blessing"]) or (pbuffs["Yawaka's Blessing"].time < 45)},
{ name = "Action: 4 (Unknown Choice)",        use = (EnergyBar1 > 20) and (not pbuffs["Unknown Choice"])},
{ name = "Illusion Blade Dance", use = (not pbuffs["Illusion Blade Dance"]) },
{ name = "Action: 6 (Caviar Sandwich)",        use = (not pbuffs["Caviar Sandwich"]) },
{ name = "Informer",use = (not pbuffs["Informer"])},
{ name = "Evasion",use = (not pbuffs["Evasion"]) },
{ name = "Create Opportunity",use = (not pbuffs["Create Opportunity"]) },
{ name = "Fervent Attack", use = (not pbuffs["Fervent Attack"])},
{ name = "Assassins Rage",use = (not pbuffs["Assassins Rage"]) },
}
else
Skill2 = {
}
end

elseif  enemy then
if (mode == "BehindNoCombo") then
Skill2 = {
{ name = "Throw", use = true },
{ name = "Wound Attack", use = (EnergyBar1 >= 35) and (tbuffs["Bleed"]) and (tbuffs["Grievous Wound"]) },
{ name = "Low Blow", use = (EnergyBar1 >= 30) and (tbuffs["Bleed"]) and (not tbuffs["Grievous Wound"]) },
{ name = "Blind Spot", use = (EnergyBar1 >= 70) and (not tbuffs["Bleed"]) },
{ name = "Low Blow", use = (EnergyBar1 >= 70) },
{ name = "Attack", use = (thealth == 1) },
}
elseif (mode == "Behind") then
Skill2 = {
{ name = "Throw", use = true },
{ name = "Wound Attack", use = (EnergyBar1 >= 35) and (tbuffs["Bleed"]) and (tbuffs["Grievous Wound"]) },
{ name = "Low Blow", use = (EnergyBar1 >= 30) and (tbuffs["Bleed"]) and (not tbuffs["Grievous Wound"]) },
{ name = "Blind Spot", use = (EnergyBar1 >= 70) and (not tbuffs["Bleed"]) },
{ name = "Combo Throw", use = true },
{ name = "Low Blow", use = (EnergyBar1 >= 70) },
{ name = "Attack", use = (thealth == 1) },
}
elseif (mode == "Buffs") then
Skill2 = {
{ name = "Action: 11 (Potion: Scarlet Love)",   use = (not pbuffs["Scarlet Love"]) or (pbuffs["Scarlet Love"].time < 45)},
{ name = "Action: 16 (Enchanted Throw)",        use = (not pbuffs["Enchanted Throw"])},
{ name = "Action: 15 (Yawaka's Blessing)",        use = (not pbuffs["Yawaka's Blessing"]) or (pbuffs["Yawaka's Blessing"].time < 45)},
{ name = "Action: 6 (Caviar Sandwich)",        use = (elite or boss) and ((not pbuffs["Caviar Sandwich"])) },
{ name = "Action: 4 (Unknown Choice)",        use = (EnergyBar1 > 20) and (not pbuffs["Unknown Choice"])},
{ name = "Informer",use = (not pbuffs["Informer"])},
{ name = "Evasion",use = (not pbuffs["Evasion"]) },
{ name = "Create Opportunity",use = (not pbuffs["Create Opportunity"]) },
{ name = "Illusion Blade Dance", use = (not pbuffs["Illusion Blade Dance"]) },
{ name = "Fervent Attack", use = (not pbuffs["Fervent Attack"])},
{ name = "Assassins Rage",use = (not pbuffs["Assassins Rage"]) },
{ name = "Combo Throw", use = (not pbuffs["Premeditiation"]) and (thealth == 1)},
}
else
Skill2 = {
{ name = "Action: 16 (Enchanted Throw)",        use = (not pbuffs["Enchanted Throw"])},
{ name = "Action: 15 (Yawaka's Blessing)",        use = (not pbuffs["Yawaka's Blessing"]) or (pbuffs["Yawaka's Blessing"].time < 45)},
{ name = "Action: 5 (Strong stimulant)",       use = boss and (not pbuffs["Strong Stimulant"]) and (pbuffs['Caviar Sandwich']) and (pbuffs["Informer"]) and (not pbuffs['Fervent Attack']) and (not 

pbuffs['Evasion'])},
{ name = "Combo Throw", use = (not pbuffs["Premeditiation"]) and (thealth == 1)},
{ name = "Premeditation", use = (EnergyBar1 >= 55) and (not pbuffs["Premeditiation"]) and (tbuffs["Bleed"]) and (tbuffs["Grievous Wound"])},
{ name = "Wound Attack", use = (EnergyBar1 >= 35) and (tbuffs["Bleed"]) and (tbuffs["Grievous Wound"]) },
{ name = "Low Blow", use = (not pbuffs["Premeditiation"]) and (EnergyBar1 >= 30) and (tbuffs["Bleed"]) and (not tbuffs["Grievous Wound"]) },
{ name = "Shadowstab", use = (not pbuffs["Premeditiation"]) and (EnergyBar1 >= 20) and (not tbuffs["Bleed"]) },
{ name = "Low Blow", use = (not pbuffs["Premeditiation"]) and (EnergyBar1 >= 65) },
{ name = "Attack", use = (not pbuffs["Premeditiation"]) and (thealth > 0)},
}
end
end 


This code needs to be put in CustomFunctions.lua by substituting for example another class combo you don't use, and put the skills, potion, food, in right spots in action bar, for example here i have here strong stimulant in number 5 slot,...
after that you can make 2 macro 1 for buffs 1 for attack
/run KillSequence("", "Buffs", 0, 0, 0, 0, 0, 0, 0)

/run KillSequence("", "Attack", 0, 0, 0, 0, 0, 0, 0)

Lemme know if i can improve this or if there are mistakes,






16

Friday, December 26th 2014, 6:57pm

I'm not a diyce expert, but there is atleast a few things i would change. about unknown choice, would you not have to list each buff that you can specifically? e.g. Blood Boil/Immortality/Excite? Never had rogue diyce before though so not 100% sure on this one. I would also have a diyce script that uses shadowstab over blind spot, when i was the only rogue in party i always found shadowstab was better to use since the bleed is far longer. But maybe some diyce expert can actually come and check for mistakes, cause im only an amateur diyce user :P

This post has been edited 1 times, last edit by "Cenre" (Dec 27th 2014, 1:02pm)


Aca

Beginner

Posts: 11

Location: La Legion

Occupation: Ocupado

  • Send private message

17

Tuesday, June 23rd 2015, 1:35pm

Hi all, I wonder if someone could help put the diyce, I would like to try, in this term is not much and not know how to install this addon me. thank you very much to all.
Sorry for my English because it is bad and I have to use a translator :)

Similar threads