1. #1

    MM 4.0.6 -- Modified Face Shooter Addon to recommend which shot to use

    http://www.somatrack.com/FaceShooter-cy.zip (last updated at 11:49AM CST)
    This is a temporary location. I'll be moving it to a better home soon.

    I need testers. I do not have wow available right now. If you can give feedback, I can make the necessary changes.
    Please test with MM spec on raiding dummy.
    First step was to add hard casted aimed shot as an option. I'm thinking we'll need to tweak the prioritization.
    Last edited by cymoro; 2011-02-09 at 05:49 PM.

  2. #2
    Dreadlord
    10+ Year Old Account
    Join Date
    Sep 2010
    Location
    Detroit mi
    Posts
    992
    as of now, the only thing it suggests is hunters mark and steady shot
    if SrS is up, then it always reccomends for you to SS
    Last edited by jmacphee9; 2011-02-09 at 05:39 PM.

  3. #3
    Any errors?

    All i did was add in the self:CheckAimS() function and function call.
    I would guess that KS would work too if your target were < 20%

    Is the Fire! proc working at all?

    here is the code used to determine which shot:

    elseif FS.spec == "MM" then
    -- Steady Shot
    if self:CheckISS(true) then
    spell = FS.spellID["SS"]
    -- Kill Shot
    elseif self:CheckKS() and not self:Overcapped() then
    spell = FS.spellID["KS"]
    -- Aimed Shot
    elseif self.buffs["MMM"] > self.now and not self:Overcapped() then
    self.buffs["MMM"] = 0
    self.mmm = true
    spell = FS.spellID["AimS"]
    elseif self:CheckAimS() then
    spell = FS.spellID["AimS"]
    -- Chimera Shot
    elseif self:CheckCS() then
    spell = FS.spellID["CS"]
    -- Kill Command
    elseif self:CheckRiF() and not self:Overcapped() then
    spell = FS.spellID["KC"]
    -- Serpent Sting
    elseif self:CheckSpS((FS.cost["CS"] + FS.cost["SpS"] - self:RegTilRdy("CS"))) then
    spell = FS.spellID["SpS"]
    -- Explosive Trap
    elseif FS.db.profile.ba.useTraps == "always" and self:CheckET((FS.cost["KC"] + FS.cost["TL"] - self:RegTilRdy("KC"))) then
    spell = FS.spellID["ET"]
    -- Hunter's Mark
    elseif not self:IsHMonTarget() and not self:Overcapped() then
    spell = FS.spellID["HM"]
    -- Arcane Shot
    elseif self:CheckAS((FS.cost["CS"] + FS.cost["SpS"] - self:RegTilRdy("CS"))) then
    spell = FS.spellID["AS"]
    -- Steady Shot
    else
    spell = FS.spellID["SS"]
    end


    ---------- Post added 2011-02-09 at 05:48 PM ----------

    Updated version is uploaded. I've simplified the check for AimedShot. I think I found the issue you reported also.

  4. #4
    Ok, as posted the addon doesn't work, you need to add the CheckAimS function as a resource to the object add the following line on or around line:1134

    Code:
    CheckAimS = CheckAimS,
    Additionally the cast time for Aimed Shot should be changed to 2.9 (see EJ or similar) in line:335

    There is also a typo AimSS instead of AimS in line:387

    Finally as is the addon will always suggest Aimed Shot when over 50 focus so which means CS never gets suggested, I'd be interested to know what your original logic was.

  5. #5
    GRRR i typed up a response and chrome crapped out on me

    suffice it to say, that my initial goal was just to get a hard casted Aimedshot in the mix. Now I'll spend some time tonight to actually code the logic for the best possible DPS.

    The end goal is to have an addon that gives a close estimate to the highest DPS shot available.

  6. #6
    I've been on standby for raid so I've also been having a bit of a play as well

    What I've come up with so far is this
    - firstly we're using hard-cast Aimed as a focus dump so put the logic as the penultimate choice before steady (i.e. not earlier as this was what was causing CS to never be suggested)
    - only cast if we will have enough focus for the Aimed cast, re-applying SpS if necessary and CS when its off CD
    - ^^ to achieve I used the original code for Arcane as a focus dump

    So CheckAimS function becomes the following (where the min/max focus is passed into the function)
    Code:
    local function CheckAimS(self, ...)
    	local minFocus, maxFocus = ...
    	if not minFocus then minFocus = FS.cost["AimS"] end
    	if not maxFocus then maxFocus = 110 end
    	minFocus, maxFocus = self:Damping("AimS", minFocus, maxFocus)
    	return self.focus >= minFocus and self.focus <= maxFocus
    end
    And the logic becomes
    Code:
    	-- MM rotation
    	elseif FS.spec == "MM" then
    		-- Steady Shot
    		if self:CheckISS() then
    			spell = FS.spellID["SS"]
    		-- Kill Shot
    		elseif self:CheckKS() and not self:Overcapped() then
    			spell = FS.spellID["KS"]
    		-- Aimed Shot
    		elseif self.buffs["MMM"] > self.now and not self:Overcapped() then
    			self.buffs["MMM"] = 0
    			self.mmm = true
    			spell = FS.spellID["AimS"]
    		-- Chimera Shot
    		elseif self:CheckCS() then
    			spell = FS.spellID["CS"]
    		-- Kill Command
    		elseif self:CheckRiF() and not self:Overcapped() then
    			spell = FS.spellID["KC"]
    		-- Serpent Sting
    		elseif self:CheckSpS((FS.cost["CS"] + FS.cost["SpS"] - self:RegTilRdy("CS"))) then
    			spell = FS.spellID["SpS"]
    		-- Explosive Trap
    		elseif FS.db.profile.ba.useTraps == "always" and self:CheckET((FS.cost["KC"] + FS.cost["TL"] - self:RegTilRdy("KC"))) then
    			spell = FS.spellID["ET"]
    		-- Hunter's Mark
    		elseif not self:IsHMonTarget() and not self:Overcapped() then
    			spell = FS.spellID["HM"]
    		-- Aimed Shot hard-cast
    		elseif self:CheckAimS((FS.cost["AimS"] + FS.cost["CS"] + FS.cost["SpS"] - self:RegTilRdy("CS"))) then
    			spell = FS.spellID["AimS"]
    		-- Steady Shot
    		else
    			spell = FS.spellID["SS"]
    		end
    I couldn't understand where the original code dealt with arcane shot having a focus cost but this seems to work ok(ish).

    The BIG issue is that Aimed hard-cast [obviously] has a cast time which I can't seem to model (I've only just started looking at the code and I don't know a lot about addon coding).

    What I think would be a quick but useful fix would be to add the following line into the CheckAimS function:
    Code:
    if <AlreadyCastingAimed> and <mmmBuffIsntUp> then return false end
    Basically saying we never want to hard-cast 2 Aimed Shots in a row

  7. #7
    Yep. This is pretty much what I've got so far, but I have another 30-45 min before I get home to actually start testing. I haven't done much addon coding for over 2 years, so I'm quite rusty myself, but this stuff is fairly straight forward.

    I've been reading through it today to see what its really doing. I came across it about a week ago and suggested it to a SV hunter that was having trouble with DPS. I told him to use FS to get an idea of what he should be doing. It boosted his DPS by about 4k, so I think something like this is could be a good training tool.

    There is a bug with FS that doesn't allow you to resize the windows which is really annoying, so I just modified the default scale manually.

  8. #8
    Final update from me as its getting late - I managed to add some event code to check if aimed shot is currently being cast as I suggested and it seems to be better.

    However it then waited too long to suggest Aimed Shot meaning you are likely to be focus capped for the entirety of the cast which is bad.

    This just means that the focus regen during the aimed shot cast needs to be taken into account - which I have also now done but it's still not wonderful, I look forward to seeing what you come up with

    My latest version - which I don't pretend to be perfect - can be found here: dl.dropbox.com / u / 11078904 / FaceShooter.rar

  9. #9
    OK, so I think I have it how I want it for my priority list. Here is what I have:
    What this should be is

    HM (unless its dying soon)
    ISS at all times (refresh if it expires within 4 sec)
    KS
    MMM aimed Shot

    IF >= 80% THEN
    Aimed Shot Cast
    SS
    OTHERWISE
    Serpent Sting
    CS only to renew SS (it expires within 2 sec)
    Aimed Shot Cast
    SS

    elseif FS.spec == "MM" then
    -- Hunter's Mark is top priority
    if not self:IsHMonTarget() and not self:Overcapped() then
    spell = FS.spellID["HM"]
    -- Imp Steady Shot Buff
    elseif self:CheckISS(true) then
    spell = FS.spellID["SS"]
    -- Kill Shot
    elseif self:CheckKS() and not self:Overcapped() then
    spell = FS.spellID["KS"]
    -- Aimed Shot
    elseif self.buffs["MMM"] > self.now and not self:Overcapped() then
    self.buffs["MMM"] = 0
    self.mmm = true
    spell = FS.spellID["AimS"]
    -- Aimed Shot Hard cast when in CA
    elseif self:CheckAimS() and self.tarHP >= 0.8 then
    spell = FS.spellID["AimS"]
    -- When in CA, lets SS
    elseif self.tarHP >= 0.8
    spell = FS.spellID["SS"]
    -- Not in CA, so lets make sure SpS is up
    elseif self:CheckSpS((FS.cost["CS"] + FS.cost["SpS"] - self:RegTilRdy("CS"))) then
    spell = FS.spellID["SpS"]
    -- Chimera Shot -- CheckCS() only returns true if SpS is about to expire
    elseif self:CheckCS() then
    spell = FS.spellID["CS"]
    -- Aimed Shot Hard Cast for focus dump
    elseif self:CheckAimS() then
    spell = FS.spellID["AimS"]
    -- Hunter's Mark
    -- Arcane Shot - screw Arcane shot
    -- Steady Shot
    else
    spell = FS.spellID["SS"]
    end
    -- no spec


    ---------- Post added 2011-02-10 at 02:41 AM ----------

    OK, so I've got it pretty well the way I want it:

    http://dl.dropbox.com/u/2209872/FaceShooter.zip

    Its sloppy and it needs some tweaking, but its doing the following priorities:

    HM
    ISS
    If > 80%
    Aimed
    SS
    otherwise
    KS
    SS
    Chimera to renew SS only (expires in 3 sec or less)
    Aimed
    SS


    It seems to work for me and the DPS numbers i put out when following it are pretty good.
    I don't like how I've had to hard-code a number of things and it could be cleaned up, but it works

    I also fixed the resizing of button 1 bug.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •