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.

1,521

Tuesday, June 28th 2011, 5:33am

@Drake1132

Yes we do get bleeds from slash r/w uses axe not daggers we also now get bleeds on out axes from shadowstab since last patch.

Drake1132

Beginner

Posts: 11

Location: Wait a minute... you mean I'm *not* a figment of your imagination?

  • Send private message

1,522

Tuesday, June 28th 2011, 8:43am

Quoted from "mackess;436096"

@Drake1132

Yes we do get bleeds from slash r/w uses axe not daggers we also now get bleeds on out axes from shadowstab since last patch.


OK, that being the case, I still think that Shadowstab deals more damage than Slash due to the bonus damage from Dex/Agi, and as such I would still personally list Slash at a lower priority than Shadowstab. If, however, I'm wrong, and Slash deals more damage than Shadowstab, then I would take the code I posted for you and move the lines for the first instances of Enraged and Slash to be just above the line for Shadowstab, rather than just below it. Otherwise I don't think I would change anything except that I might change the energy check on Slash back to 25. I still wouldn't make a check for "Bleed" though.

Drake

1,523

Tuesday, June 28th 2011, 9:25pm

for some reason the same thing is happening like the first Function. It doesn't get passed Poisonous infection and decay and death touch.

Source code

1
/run RogueWarriorBurn(arg1, potslot)
is that the problem?

1,524

Wednesday, June 29th 2011, 6:56am

Druid/scout

im having a bit of trouble with my druid/scout function. It works fine until my health gets below about 80% but after that it totally stops working, It doesnt attack and doesnt heal at all. I have to heal myself manually until my hp gets above 80% then it will start to work again.


function DruidScout(arg1)

local Skill = {}
local i = 0
local friendly = (not UnitCanAttack("player","target"))
local enemy = UnitCanAttack("player", "target")
local health = PctH("player")
local mana = PctM("player")
local focus = UnitSkill("player")
local tBuffs = BuffList("target")
local dbuffs = DebuffList("player")

-- i=i+1; Skill = { ['name'] = "Mother Earth's Protection", ['use'] = (health <= .40) }
-- i=i+1; Skill[i] = { ['name'] = "Rock Protection", ['use'] = (health <= .30) }
i=i+1; Skill[i] = { ['name'] = "Restore Life", ['use'] = (health <= .50) }
i=i+1; Skill[i] = { ['name'] = "Recover", ['use'] = (health <= .60) and (not string.find(pbuffs,"Recover"))) }
-- i=i+1; Skill[i] = { ['name'] = "Camellia Flower", ['use'] = (health <= .70) and (not string.find(pbuffs,"Camellia Flower"))) }
i=i+1; Skill[i] = { ['name'] = "Blossoming Life", ['use'] = (health <= .80) and (not string.find(pbuffs,"Blossoming Life")) }
i=i+1; Skill[i] = { ['name'] = "Antidote", ['use'] = (string.find(dbuffs,"Poison")) }
i=i+1; Skill[i] = { ['name'] = "Action: 23", ['use'] = (mana <= .35) }
i=i+1; Skill[i] = { ['name'] = "Action: 22", ['use'] = (mana <= .55) }
i=i+1; Skill[i] = { ['name'] = "Action: 24", ['use'] = (health <= .25) }
i=i+1; Skill[i] = { ['name'] = "Action: 21", ['use'] = (health <= .50) }
-- i=i+1; Skill[i] = { ['name'] = "Concentration Prayer", ['use'] = (not ChkBuff("player","Concentration Prayer")) }
i=i+1; Skill[i] = { ['name'] = "Savage Blessing", ['use'] = (not ChkBuff("player","Savage Blessing")) }
i=i+1; Skill[i] = { ['name'] = "Vampire Arrows", ['use'] = (not string.find(tBuffs,"Vampire Arrows")) }
i=i+1; Skill[i] = { ['name'] = "Briar Entwinement", ['use'] = (not string.find(tBuffs,"Briar Entwinement")) }
i=i+1; Skill[i] = { ['name'] = "Earth Arrow", ['use'] = (enemy) }

MyCombat(Skill,arg1)
end


In game i get the error... "[string '?']:487: bad argument #1 to 'find' (string expected, not nil)"

Peryl

Intermediate

Posts: 313

Location: Elsewhere

  • Send private message

1,525

Wednesday, June 29th 2011, 1:59pm

Quoted from "goldguardian;436519"

It works fine until my health gets below about 80% but after that it totally stops working, It doesnt attack and doesnt heal at all.

Source code

1
[FONT=Verdana]i=i+1; Skill[i] = { ['name'] = "Blossoming Life", ['use'] = (health <= .80) and (not string.find(pbuffs,"Blossoming Life")) }[/FONT]


In game i get the error... "[string '?']:487: bad argument #1 to 'find' (string expected, not nil)"


Note the use of the variable pbuffs in the line of code above. You have not defined this variable which is why you are getting the error you are. This is Lua's way of saying it is trying to use something it knows nothing about.

Add the following to your local variables:

Source code

1
    local pbuffs = BuffList("player")
That should clear things up.

P.S.
Please use code tags when posting code in the forums, it makes it much easier to read. To do so use:
[noparse]

Source code

1
add your code here
[/noparse]
2013... The year from hell....

1,526

Wednesday, June 29th 2011, 4:49pm

It works, thanks for the help!

Drake1132

Beginner

Posts: 11

Location: Wait a minute... you mean I'm *not* a figment of your imagination?

  • Send private message

1,527

Wednesday, June 29th 2011, 8:17pm

Quoted from "mackess;436331"

for some reason the same thing is happening like the first Function. It doesn't get passed Poisonous infection and decay and death touch.

Source code

1
/run RogueWarriorBurn(arg1, potslot)
is that the problem?


I assume you are providing values for arg1 and potslot in your actual macro, yes? Such as "/run RogueWarriorBurn("v1", 42)"? Because if you are not, then that will cause problems. If you do not provide a value for potslot, then when your character's HP drops below 70%, the code will break and error when it tries to use the potions for healing (at the following code)...

Source code

1
2
3
4
    if (PctH("player")<.70) and (potcd == 0) then
        UseAction(potslot)
        return
    end
Now you could change that code to be like the following...

Source code

1
2
3
4
    if (PctH("player")<.70) and (potslot ~= nil) and (potcd == 0) then
        UseAction(potslot)
        return
    end
That would make it so that it would not break when your health drops below 70%, even if you have not defined a value for potslot in your macro, but if you haven't defined your potslot value, then it won't heal you when your HP is low.

Other than that, I don't see any reason why it should fail. Are you sure you aren't getting any error message in-game? It would be a small red circular icon outlined in glowing green on the minimap edge, and it may be hidden behind one or more other icons. Also, the icon often does not show up unless the function fails twice, so make sure you try to use the macro at least once more after it initially fails.

I'll try to test it myself later today and see if I can come up with any other ideas.

Drake

hangman04

Savage Warrior

Posts: 113

Location: Romania

Mood: Smile

  • Send private message

1,528

Wednesday, June 29th 2011, 8:27pm

Guys can you help me pls with a scout/x function framework. I remember Sixpax posted his updated version which included some special tweak for auto shoot activation but i have a hard time finding it in these 150+ pages.
I need it so i can work on my s/k function and i don't want to start from 0.
Tyvm for your help.

Drake1132

Beginner

Posts: 11

Location: Wait a minute... you mean I'm *not* a figment of your imagination?

  • Send private message

1,529

Wednesday, June 29th 2011, 9:07pm

Quoted from "hangman04;436867"

Guys can you help me pls with a scout/x function framework. I remember Sixpax posted his updated version which included some special tweak for auto shoot activation but i have a hard time finding it in these 150+ pages.
I need it so i can work on my s/k function and i don't want to start from 0.
Tyvm for your help.



Please take a look at qpik's posted code here. Note that he is using a modified code system, so you cannot simply cut and paste, but you can look at it to get an idea for some possible rotations and use conditions for various scout skills.

Checking for Autoshot isn't too difficult. You'll need to add some local variables. Just add the following line to the local variables section of your function code...

Source code

1
local a1,a2,a3,a4,a5,ASon = GetActionInfo(31)  -- # is your Autoshot action bar slot number... you'll need to make sure you have Autoshot on actionbar slot 31, or you'll need to change the 31 to the actionbar slot number where you have Autoshot
Then all you have to do is set up your skill line for Autoshot. Maybe something like the following (checks for an enemy, checks to make sure Autoshot is not already active, and checks to make sure that Autoshot is not on cooldown or otherwise unavailable, such as if you are out of ammo)...

Source code

1
i=i+1; Skill[i] = { name = "Autoshot", use = (not friendly) and (not ASon) and GetActionUsable(31) } -- again, the # here should be whatever actionbar slot number where you have Autoshot
Now, because of lag and update event timing issues, once DIYCE activates Autoshot, it may take a second or so before the actionbar slot starts reporting that it is active, so if you were to use DIYCE right away again, there is the chance that you might inadvertantly deactivate Autoshot, so watch for that. You could also set up your system to keep track of your last action and then add a check to make sure that you haven't just tried to activate Autoshot already.

To add a check for last action you'll need to do the following...

1. Open up DIYCE.lua
2. At the top of DIYCE.lua, either immediately above or immediately below the line that says "g_skill = {}", add the following line...

Source code

1
g_lastaction = ""
3. At the bottom of DIYCE.lua, inside the MyCombat function, find each line that says "return true", and add the following line directly above it...

Source code

1
g_lastaction = Skill[x].name
After that, you can start making checks against the g_lastaction variable, such as...

Source code

1
(not string.find(g_lastaction,"Autoshot"))
You could use those kinds of checks as use conditions for various skills, keeping in mind that g_lastaction will always contain the skill name for whatever skill DIYCE last *tired* to use, regardless of whether or not the skill was successfully used in-game.

Other than that, it's just a matter of setting up your local variables, skills priorities list, and use conditions the way you want them to be. If you aren't sure what kind of priority order you might want to use things in, you could start out with my usual order as a baseline and then change things around as you see fit.

If you aren't sure what rotation you should be using to maximize your damage output, then I suggest going to the Scout class forums and asking there what the best rotation is. You can then use that information to help you define your skill priorities list. I can't help with that because it's been a long time since I played a Scout, and with the new patches, everything has changed quite a lot since the last time I wrote a scout function for DIYCE.

Drake

hangman04

Savage Warrior

Posts: 113

Location: Romania

Mood: Smile

  • Send private message

1,530

Thursday, June 30th 2011, 1:48am

K made the modification to function MyCombat(Skill, arg1) as you said.

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
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
        g_lastaction = Skill[x].name
        return true
    end

    for x,tbl in ipairs(Skill) do
        if Skill[x].use 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)
                    g_lastaction = Skill[x].name
                    return true
                end
            elseif string.find(Skill[x].name, "Custom:") then
                action = string.gsub(Skill[x].name, "(Custom:)( *)(.*)", "%3")
                if CustomAction(action) then
                g_lastaction = Skill[x].name
                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)
                g_lastaction = Skill[x].name
                return true
            elseif CD(Skill[x].name) then
                if talktome then Msg("- "..Skill[x].name) end
                CastSpellByName(Skill[x].name)
                g_lastaction = Skill[x].name
                return true
            end
        end
    end
    if (arg1 == "v2") then Msg("- [IDLE]", 0, 1, 1) end

    return false
end
And my 2 functions:
1) Full dps :

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
function ScoutK_fullDPS(arg1, arg2)
local Skill = {}
local i = 0
local AS_slot = arg2
local focus = UnitMana("player")
local mana = UnitSkill("player")
local enemy = UnitCanAttack("player","target")
local a1, a2, a3, a4, a5, ASon = GetActionInfo(AS_slot)


if enemy then
    i=i+1; Skill[i] = { name = "Autoshot",                      use = ((not ASon) and GetActionUsable(AS_slot) and (not string.find(g_lastaction,"Autoshot"))}
        i=i+1; Skill[i] = { name = "Combo Shot",                    use = true}
        i=i+1; Skill[i] = { name = "Reflected Shot",                use = true}
        i=i+1; Skill[i] = { name = "Piercing Arrow",                use = true}
        i=i+1; Skill[i] = { name = "Vampire Arrows",                use = (focus >=30)}
        i=i+1; Skill[i] = { name = "Disarmament",                   use = (mana >=250)}
        i=i+1; Skill[i] = { name = "Repelling Arrow",               use = (mana >=250)}
        i=i+1; Skill[i] = { name = "Wind Arrows",                   use = (focus >=25)}
        i=i+1; Skill[i] = { name = "Shoot",                         use = true}
end
    MyCombat(Skill,arg1)
end
2) Without aoe attacks.

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function ScoutK_NoAOE(arg1, arg2)
local Skill = {}
local i = 0
local AS_slot = arg2
local focus = UnitMana("player")
local mana = UnitSkill("player")
local enemy = UnitCanAttack("player","target")
local a1, a2, a3, a4, a5, ASon = GetActionInfo(AS_slot)


if enemy then
    i=i+1; Skill[i] = { name = "Autoshot",                      use = ((not ASon) and GetActionUsable(AS_slot) and (not string.find(g_lastaction,"Autoshot"))}
        i=i+1; Skill[i] = { name = "Combo Shot",                    use = true}
        i=i+1; Skill[i] = { name = "Vampire Arrows",                use = (focus >=30)}
        i=i+1; Skill[i] = { name = "Disarmament",                   use = (mana >=250)}
        i=i+1; Skill[i] = { name = "Repelling Arrow",               use = (mana >=250)}
        i=i+1; Skill[i] = { name = "Wind Arrows",                   use = (focus >=25)}
        i=i+1; Skill[i] = { name = "Shoot",                         use = true}
end
    MyCombat(Skill,arg1)
end
But i am not sure if this is what u meant for checking the Autoshot:

Source code

1
 i=i+1; Skill[i] = { name = "Autoshot",                      use = ((not  ASon) and GetActionUsable(AS_slot) and (not  string.find(g_lastaction,"Autoshot"))}
And from what I recall i can use arg2 as variable to specify quick slot for Autoshot, right?
Also for what do i declare these variables {a1, a2, a3, a4, a5}

Drake1132

Beginner

Posts: 11

Location: Wait a minute... you mean I'm *not* a figment of your imagination?

  • Send private message

1,531

Thursday, June 30th 2011, 5:19am

OK, I haven't looked closely at all of that, but just from glancing at it, that all looks just fine, or at least most of it (see notes below).

Yes, you can specify your Autoshot actionbar slot number using arg2, since that's the way you set it up. I personally hard code it, but using arg2 will give you more flexibility from one character to the next or if you move Autoshot to another slot, because you'll only have to change the macro.

As for the other variables before ASon, they are defined because of the way that GetActionInfo() works. That function will return 6 distinct pieces of data. In order to set one of those pieces of data as a value for a variable, you have to first create variables for those that come before it, so that you can move the first pieces of data out of the way. Since the one sepcific piece of data that ASon relies on is the last one, you have to create all 6 variables. In other words, the line "local a1, a2, a3, a4, a5, ASon = GetActionInfo(AS_slot)" basically tells the Lua engine that you want information about the action located on actionbar slot number AS_slot, and please store that information in the 6 variables named "a1", "a2", "a3", "a4", "a5", and "ASon". If you were to try using something else, such as "local ASon = GetActionUsable(AS_slot)", then you would not have the correct piece of data stored (in that particular example you would only have the icon path string stored, which isn't what you want).

Now with checking if Autoshot is on or not, your code looks good, but it has one flaw: You have an extra/missing parenthesis. You should use one of the following instead...

Source code

1
i=i+1; Skill[i] = { name = "Autoshot",                      use = (not ASon) and GetActionUsable(AS_slot) and (not string.find(g_lastaction,"Autoshot")) }


Or

Source code

1
i=i+1; Skill[i] = { name = "Autoshot",                      use = ((not ASon) and GetActionUsable(AS_slot) and (not string.find(g_lastaction,"Autoshot"))) }


Notice that the difference is only in the number of opening and closing parentheses. You have to make sure that you close all opened parenthesis or Lua will throw an error.

Drake

hangman04

Savage Warrior

Posts: 113

Location: Romania

Mood: Smile

  • Send private message

1,532

Thursday, June 30th 2011, 10:32am

Oh yea now i see. tyvm.
Btw what is the call function for 2 arguments? scoutk("",4) for example? what should i put in arg1, cause all my other functions have 1 argument and when calling it is null void: warriorwarden() as example? :D

Drake1132

Beginner

Posts: 11

Location: Wait a minute... you mean I'm *not* a figment of your imagination?

  • Send private message

1,533

Thursday, June 30th 2011, 12:45pm

Quoted from "hangman04;437262"

Oh yea now i see. tyvm.
Btw what is the call function for 2 arguments? scoutk("",4) for example? what should i put in arg1, cause all my other functions have 1 argument and when calling it is null void: warriorwarden() as example? :D


Well the function call that you use in the macro is case sensitive, so you would use "/run ScoutK_fullDPS("", 4)" or "/run ScoutK_NoAOE("v1", 16)" for a couple of basic examples. But the value for arg1 should be a string value. Usual values are "", "v1", and "v2", but really you could use just about any string that you want to, such as "target gonna die". Basically, arg1 is always used (or not used) to define the level of feedback that DIYCE reports in the Chat Window when you run your macro... "" = no feedback, "v1" = minimal feedback, "v2" = slightly more feedback than v1, and all other strings would give the same results as "". And arg2 obviously needs to be the SlotID# of the actionbar slot where you have Autoshot loaded.


@mackess:

I finally was able to do some basic tests with your RogueWarriorBurn function (at least a little bit... I can't do full tests because I don't have a Rogue/Warrior character). Now one of the changes I've made to my own DIYCE.lua is to include additional feedback if I set arg1 to be "v3"... a *LOT* of additional feedback that I use for debugging and testing. When I called your function with "/run RogueWarriorBurn("v3", 5)" I didn't have any problems and I didn't get any errors. All of the additional feedback reported exactly what I would expect it to if the function is working properly. I even made sure I had an HP potion in actionbar slot 5 and engaged combat to let my HP drop, and once my HP was below 70%, the function successfully used the HP potion on actionbar slot 5.

So I would say that most likely either a) you haven't written your macro quite correctly, or b) you have arg2 pointing to the wrong actionbar slot. The reason option b is a possibility is because if you have arg2 pointing to an empty actionbar slot, and then your health drops below 70%, DIYCE will keep trying to use the action in the given actionbar slot, over and over again, without success or feedback, because UseAction(slotID) doesn't care if the actionbar slot you point it to is empty or not (it won't give you an error).


Drake

hangman04

Savage Warrior

Posts: 113

Location: Romania

Mood: Smile

  • Send private message

1,534

Thursday, June 30th 2011, 12:47pm

So v1-v3 are for debug / test use, right?

Drake1132

Beginner

Posts: 11

Location: Wait a minute... you mean I'm *not* a figment of your imagination?

  • Send private message

1,535

Thursday, June 30th 2011, 1:33pm

Quoted from "hangman04;437271"

So v1-v3 are for debug / test use, right?


Well, "v3" only works with *my* code (my old code actually, because I now use a totally different code setup). Unless you had my altered code, which I've never released, using "v3" would be the same as using "". Now using "v1" will send some minimal feedback: it will send the skill name to the chat window when DIYCE actually sends the command to RoM to try and use the skill, such as "- Wind Arrows". Using "v2" will give the same feedback as "v1", but it will also send a message to the chat window with a skill name in square braces if you are currently in the process of casting a skill, such as "- [Snipe]". Using "v2" will also let you know if DIYCE did not find a usable skill (often due to GCD combined with spamming your macro too fast), in which case it will send the message "- [IDLE]". There really isn't any debugging feedback available without changing the way the original code works to add it in.

My custom code that I used to use with "v3" (and that I reverted back to temporarily in order to test mackess's function) was designed to give me very detailed information at *every* step of my class functions, the MyCombat function, and the CD function. It is far more information than most people would ever need or care about, and I myself almost never use "v3" (even though I wrote the functionality for it).

So in short, "v3" is useless to everyone except me, while "v1" and "v2" can be useful to just about anyone. It really just matters if you want some visual feedback or not, in the form of chat messages, to let you know what DIYCE is doing at critical points. If you use "", then DIYCE won't tell you anything, not even when it tries to use a skill. If you use "v1", then DIYCE will tell you when it tries to use a skill, but it won't tell you anything else. And using "v2" will make it so that DIYCE will tell you when it tries to use a skill, but will also tell you when it cannot use another skill because you are already casting a skill, or when it got through your entire skill priority list without finding a usable skill. Personally, I prefer "v2" almost all the time, but that's just me.

Drake

hangman04

Savage Warrior

Posts: 113

Location: Romania

Mood: Smile

  • Send private message

1,536

Thursday, June 30th 2011, 2:16pm

My only tweaks at the basic code are BuffListID function in order to get only my bleed for wr/wd, and a minor change in the GCD system that makes the macro a bit faster.

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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)
       [U][B]return cd < 0.4[/B][/U]
    elseif skillname == nil then
        return false
    else
        Msg("Skill not available: "..skillname)
        return false
    end
end


Also, regarding Autoshot. The Purpose of the skill is to be used as last resort, when your mana, focus is 0 and other free skills are on cd. But from what i see if i put Autoshot 1st skill it will start the combo with autoshot, which is a drop in dps.
When i fight i usually activate Autoshot when casting Combo Shot, and it will cover only my bad skill timings.
So, if were to put Autoshot second skill , doe to the fact that i have a function CD() set at 0.6, then if i activate Combo Shot and spam the macro i'd activate Autoshot during the 1 sec cast time of CS.
I haven't got the chance to try it since I need High Hp mobs or a low lvl xbow xD.

Drake1132

Beginner

Posts: 11

Location: Wait a minute... you mean I'm *not* a figment of your imagination?

  • Send private message

1,537

Thursday, June 30th 2011, 8:23pm

Quoted from "hangman04;437286"

My only tweaks at the basic code are BuffListID function in order to get only my bleed for wr/wd, and a minor change in the GCD system that makes the macro a bit faster.

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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)
       [U][B]return cd < 0.4[/B][/U]
    elseif skillname == nil then
        return false
    else
        Msg("Skill not available: "..skillname)
        return false
    end
end
Also, regarding Autoshot. The Purpose of the skill is to be used as last resort, when your mana, focus is 0 and other free skills are on cd. But from what i see if i put Autoshot 1st skill it will start the combo with autoshot, which is a drop in dps.
When i fight i usually activate Autoshot when casting Combo Shot, and it will cover only my bad skill timings.
So, if were to put Autoshot second skill , doe to the fact that i have a function CD() set at 0.6, then if i activate Combo Shot and spam the macro i'd activate Autoshot during the 1 sec cast time of CS.
I haven't got the chance to try it since I need High Hp mobs or a low lvl xbow xD.



OK, first, Autoshot isn't a last resort. It is a filler skill. Once it is activated, you *will* make an automatic ranged attack at an interval determined by your attack speed (from weapon and buffs/debuffs) any time you are not already doing something else, such as using another skill, or when you can't do anything else, such as when GCD is active. On top of that, unless things have changed since the last time I played a scout, activating Autoshot does not trigger GCD, so the time it takes to activate Autoshot and then start activating another skill should be less than 0.5 seconds if you're good at what you do. And once Autoshot is made active, it never triggers GCD when it makes an automatic attack (again, unless something has been changed).

Because of this, most scouts use it early on in their rotation. It is rare to use it immediately as a combat opener, but it usually would be used very shortly after combat begins, say after one or two other skills have been used. Where you decide to put it in your own rotation is, of course, up to you, but generally if you don't have Autoshot active for the majority of a fight, you are actually losing a little DPS because it isn't there.

Using "v1" or "v2" can be useful for improving your speed with Autoshot, because it will make DIYCE tell you when it tries to activate Autoshot, by sending the message "- Autoshot" to the chat window. The split second that you see it try to activate Autoshot, you should immediately hit your DIYCE macro again to use the next skill (this goes for any/all skills, rare though they are, that have an instant cast and do not trigger GCD).

Now, I don't remember exactly how Combo Shot works if you use something else before it finishes its animation/channeling sequence. It is possible that trying to activate Autoshot while you are still in CS animation might interrupt CS, or refuse to use Autoshot. On the other hand, since moving/running does not interrupt CS, or at least it didn't used to, then maybe interruption of CS is unlikely, but the game may still refuse to allow you do do anything else because you might be considered as though you are "casting" something still. By all means, try it out and see how it works for you. Allow me to suggest that you use "v2" for arg1 when testing, that way, if you are considered "casting" while using Combo Shot, and you try to use Autoshot before the "casting" is finished, DIYCE will inform you of this by sending "- [Combo Shot]" to your chat window. If Autoshot interrupts CS, then DIYCE won't tell you anything about it, because DIYCE can't check for that sort of thing, so you'll have to watch for that yourself.

Drake

1,538

Thursday, June 30th 2011, 10:47pm

I'm really new to DIYCE, and I'm having trouble getting it to work. I made a function for my S/W yesterday, and it worked fine, but I did one for my R/S today, and when I press the macro, nothing happens. Hoping someone who's more experienced can tell me what's wrong with it :s.

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
function RogueScout(arg1)
    local Skill = {}
    local i = 0
    local combat = GetPlayerCombatState()
    local enemy = UnitCanAttack("player","target")
    local focus = UnitMana("player")
    local mana = PctS("player")
    local pmana = UnitSkill("player")
    local tbuffs = BuffList("target")
    local pbuffs = BuffList("player")
    local front = UnitIsUnit("player", "targettarget")
    local tDead = UnitIsDeadOrGhost("target")
    local melee = GetActionUsable(6) 
    local phealth = PctH("player")
    local thealth = PctH("target")
    local LockedOn = UnitExists("target")
    local a1,a2,a3,a4,a5,ASon = GetActionInfo(1) 
    local ammo = (GetEquipSlotInfo(10) ~= nil)
    
 

    i=i+1; Skill[i] = { name = "Premeditation",        use = ((not string.find(pbuffs,"Premeditation") and (not combat)) }
    i=i+1; Skill[i] = { name = "Vampire Arrows",       use = ((not friendly) and (focus >=20)) }
    i=i+1; Skill[i] = { name = "Wound Attack",         use = ((not friendly) and (energy >=35) and string.find(tbuffs,"Bleed") and string.find(tbuffs,"Grievous Wound")) }
    i=i+1; Skill[i] = { name = "Low Blow",             use = ((not friendly) and (energy >=30) and string.find(tbuffs,"Bleed")) }
    i=i+1; Skill[i] = { name = "Shadowstab",           use = ((not friendly) and (energy >=20) and (not string.find(tbuffs,"Bleed"))  }
    i=i+1; Skill[i] = { name = "Low Blow",           use = ((not friendly) and (energy >=30)) and string.find(tbuffs, "Bleed")) }
    i=i+1; Skill[i] = { name = "Shot"                  use = (not friendly) }
    
    MyCombat(Skill,arg1)
end

Formerly Catorii, D/S/M of Faction.


Posts: 86

Location: Dominating in 3vs3, 6vs6 and siege.

Occupation: Network Administrator for a local NBC T.V. station.

  • Send private message

1,539

Thursday, June 30th 2011, 11:04pm

Drake, I noticed you posted here about your new methodology on DIY Combat Engine. Is this what you use over the 1.4 current version? If so, is it better at processing the correct skills, or maybe faster? I use 1.4 but with the cd==0.4 tweak. I don't have any issues at all. I'm just wondering if your engine is more efficient. Thanks.

1,540

Thursday, June 30th 2011, 11:50pm

ok,why is this not working?

function RogueKnight(arg1,arg2)

local Skill = {}
local i = 0
local energy = UnitMana("player")
local mana = UnitSkill("player")
local friendly = (notUnitCanAttack("player", "target")
local combat = GetPlayerCombatState()
local tspell,ttime,telapsed = UnitCastingTime("target")
local pbuffs = BuffList("player")
local tbuffs = BuffList("player")
local tDead = UnitIsDeadOrGhost ()
local LockedOn = UnitExists("target")

i=i+1; Skill = { name = "Blind Spot", use = ((not friendly) and (energy >= 25) and (arg2 == "behind") and (arg2 == "behind") and (not string.find(tbuffs, "Bleed"))) }
i=i+1; Skill[i] = { name = "Shadowstab", use = ((not friendly) and (energy >= 35) and (not string.find(tbuffs, "Bleed"))) }
i=i+1; Skill[i] = { name = "Wound Attack", use = ((not friendly) and (energy >= 35) and not string.findtbuffs, Bleed") and string.find(tbuffs, "Grievous Wound"))) }
i=i+1; Skill[i] = { name = "Low Blow", use = ((not friendly) and (energy >= 35) and string.find(tbuffs, "Bleed") and (not string.find(tbuffs, "Grievous Wound"))) }
i=i+1; Skill[i] = { name = "Disarmament", use = ((not friendly) and (mana >= 200) and (not string.find(tbuffs, "Disarmament I"))) }
i=i+1; Skill[i] = { name = "Shadowstab", use = ((not friendly) and (energy >= 35) and (not string.find(tbuffs, "Bleed"))) }
i=i+1; Skill[i] = { name = "Attack", use = (not friendly) }
end
MyCombat(Skill,arg1)

if (tDead) or (not LockedOn) or (not enemy) then
TargetNearestEnemy()

end