[BETA] PQRotation - an automated ability priority queue. menu

User Tag List

Page 5 of 731 FirstFirst 12345678955105505 ... LastLast
Results 61 to 75 of 10955
  1. #61
    Xelper's Avatar ★ Elder ★
    Reputation
    1024
    Join Date
    Mar 2007
    Posts
    860
    Thanks G/R
    0/8
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by kclux View Post
    I am trying to add Drain Life and Soul as Warlock abilities but the problem is that those are constantly interrupted and not channeled. How can I prevent that ?

    Also for a rogue rotation, some abilities can only be executed when behind the target like Backstab for example, I assume there is no way to really check with LUA if I am behind the target so how can I do it that the rotation will continue if the ability cannot be executed at that moment ?
    I'll look at Drain Life and Soul tonight, I setup channeling so that it would not attempt to recast if channeling unless < 150ms remain on the channel time (giving time for the last tick)... but thats not working I guess.

    I'll see what I can do about making positioning data available to WoW Lua.

    For the time being, What is the front-facing version of the ability, is it Mutilate? What is the energy cost of both? I'll see if I can come up with something.
    Last edited by Xelper; 07-13-2011 at 07:46 AM.

    [BETA] PQRotation - an automated ability priority queue.
  2. #62
    kclux's Avatar Active Member
    Reputation
    16
    Join Date
    Jun 2011
    Posts
    199
    Thanks G/R
    2/0
    Trade Feedback
    2 (100%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Thanks that should work but I have the problem that I have a condition to be met for Backstab:

    Code:
    local unithealth = 100 * UnitHealth("target") / UnitHealthMax("target")
    
    if unithealth <= 35 then
    	return true
    end
    And I do not really see how to combine this now with your advise As backup ability I would use Mutilate then.

  3. #63
    Xelper's Avatar ★ Elder ★
    Reputation
    1024
    Join Date
    Mar 2007
    Posts
    860
    Thanks G/R
    0/8
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Dunno what you saw, I edited my last post a few times! I'll come up with a solution for you tonight when I get home from work.

  4. #64
    crystal_tech's Avatar Elite User
    Reputation
    468
    Join Date
    Feb 2008
    Posts
    1,033
    Thanks G/R
    1/6
    Trade Feedback
    1 (100%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    I think i broke it lol worked last night, now it doesn't work today. don't know what the deal is I didn't make any changes and in game it shows as loaded.

  5. #65
    Xelper's Avatar ★ Elder ★
    Reputation
    1024
    Join Date
    Mar 2007
    Posts
    860
    Thanks G/R
    0/8
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    PQR 1.0.0.9 will be out tonight with the following fixes/features:
    -WoW Lua code: PQR_NotBehindTarget() - returns true if the red error message for (SPELL_FAILED_NOT_BEHIND) was on your screen within the last 3 seconds, false otherwise.
    -Channeling fix. Will no longer interrupt your own channeled spells... this was caused by a typo on my part, checking if <150ms was left rather than >150ms.
    -WoW Lua code: PQR_IsMoving(seconds) - returns true if the player has been moving for more than X seconds, false otherwise.
    Last edited by Xelper; 07-13-2011 at 06:16 PM.

  6. #66
    crystal_tech's Avatar Elite User
    Reputation
    468
    Join Date
    Feb 2008
    Posts
    1,033
    Thanks G/R
    1/6
    Trade Feedback
    1 (100%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    k sweet. I got it working again lol. I keep tweaking the rotation and breaking it. luckily i keep backups.

    Here's A fully working Destro that I've tested and tweaked in other words i'm happy with it.

    the WARLOCK_Abilities.xml file:
    Code:
    <?xml version="1.0" encoding="utf-8" ?><WARLOCK><Ability><Name>Shadow Bolt</Name><Default>false</Default><SpellID>686</SpellID><Actions>/startattack</Actions><Lua>return true</Lua><RecastDelay>0</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Curse of the Elements</Name><Default>false</Default><SpellID>1490</SpellID><Actions></Actions><Lua>--we want to cast if the target is a boss, and does not have any of the following:
    --Curse of the Elements, Earth and Moon, Ebon Plague, Fire Breath, Lightning Breath, Master Poisoner.
    --and Jinx: Curse of the Elements
    local dbCotEPlayer, _, _, _, _, _, CotEexpireTime = UnitDebuffID(&amp;quot;target&amp;quot;, 1490, &amp;quot;PLAYER&amp;quot;)
    local dbCotE = UnitDebuffID(&amp;quot;target&amp;quot;, 1490)
    local dbJinx = UnitDebuffID(&amp;quot;target&amp;quot;, 85547)
    local dbEaM = UnitDebuffID(&amp;quot;target&amp;quot;, 60433)
    local dbEP = UnitDebuffID(&amp;quot;target&amp;quot;, 65142)
    local dbFB = UnitDebuffID(&amp;quot;target&amp;quot;, 34889)
    local dbLB = UnitDebuffID(&amp;quot;target&amp;quot;, 24844)
    local dbMP = UnitDebuffID(&amp;quot;target&amp;quot;, 93068)
    local levelCheck = UnitLevel(&amp;quot;target&amp;quot;)
    if levelCheck ~= -1 then
    	--boss level returns as -1
    	return false
    end
    
    if dbCotEPlayer ~= nil then
    	--we have a COTE up that was cast by us, refresh it if necessary.
    	if CotEexpireTime - GetTime() &amp;lt; 1.5 then
    		return true
    	end
    elseif dbCotE ~= nil or dbEaM ~= nil or dbEP ~= nil or dbFB ~= nil or dbLB ~= nil or dbMP ~= nil or dbJinx ~= nil then
    	--a debuff is up, cast by another player... let them manage it.
    	return false
    else
    	--no debuff is up, cast it.
    	return true
    end</Lua><RecastDelay>0</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Life Tap</Name><Default>false</Default><SpellID>1454</SpellID><Actions></Actions><Lua>local myMana = UnitPower(&amp;quot;player&amp;quot;) / UnitPowerMax(&amp;quot;player&amp;quot;) * 100
    local myHealth = UnitHealth(&amp;quot;player&amp;quot;) / UnitHealthMax(&amp;quot;player&amp;quot;) * 100
    
    if myMana &amp;lt; 20 and myHealth &amp;gt; 50 then
    	return true
    end</Lua><RecastDelay>2000</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Fel Flame</Name><Default>false</Default><SpellID>77799</SpellID><Actions></Actions><Lua>local felSpark = UnitBuffID(&amp;quot;player&amp;quot;, 89937)
    
    if felSpark ~= nil then
    	return true
    end</Lua><RecastDelay>0</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Shadowburn</Name><Default>false</Default><SpellID>17877</SpellID><Actions></Actions><Lua>local unithealth = 100 * UnitHealth(&amp;quot;target&amp;quot;) / UnitHealthMax(&amp;quot;target&amp;quot;)
    
    if unithealth &amp;lt;= 20 then
    	return true
    end</Lua><RecastDelay>0</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Soulburn</Name><Default>false</Default><SpellID>74434</SpellID><Actions></Actions><Lua>local SoulFireCheck = UnitBuffID(&amp;quot;player&amp;quot;, 18120)
    local unithealth = 100 * UnitHealth(&amp;quot;target&amp;quot;) / UnitHealthMax(&amp;quot;target&amp;quot;)
    local heroism = UnitBuffID(&amp;quot;player&amp;quot;, 32182)
    local lust = UnitBuffID(&amp;quot;player&amp;quot;, 2825)
    local warp = UnitBuffID(&amp;quot;player&amp;quot;, 80353)
    local hysteria = UnitBuffID(&amp;quot;player&amp;quot;, 90355)
    
    if unithealth &amp;gt; 97 then
    	--best we can currently do for Start of Fight
    	if SoulFireCheck == nil then
    		return true
    	end
    end
    if heroism ~= nil or lust ~= nil or warp ~= nil or hysteria ~= nil then
    	if SoulFireCheck == nil then
    		return true
    	end
    end</Lua><RecastDelay>0</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Soul Fire</Name><Default>false</Default><SpellID>6353</SpellID><Actions></Actions><Lua>local hasSoulburn = UnitBuffID(&amp;quot;player&amp;quot;, 74434)
    local SoulFireCheck, _, _, _, _, _, SoulFireExpire = UnitBuffID(&amp;quot;player&amp;quot;, 18120)
    local heroism = UnitBuffID(&amp;quot;player&amp;quot;, 32182)
    local lust = UnitBuffID(&amp;quot;player&amp;quot;, 2825)
    local warp = UnitBuffID(&amp;quot;player&amp;quot;, 80353)
    local hysteria = UnitBuffID(&amp;quot;player&amp;quot;, 90355)
    local levelCheck = UnitLevel(&amp;quot;target&amp;quot;)
    local empoweredImp = UnitBuffID(&amp;quot;player&amp;quot;, 47221)
    
    if hasSoulburn ~= nil then
    	return true
    end
    
    if empoweredImp ~= nil then
    	return true
    end
    if heroism ~= nil or lust ~= nil or warp ~= nil or hysteria ~= nil then
    	if SoulFireCheck == nil then
    		return true
    	end
    end
    
    if levelCheck == -1 then
    	--boss level returns as -1
    	if SoulFireCheck == nil then
    		return true
    	else
    		SoulFireExpire = SoulFireExpire - GetTime()
    		if SoulFireExpire &amp;lt; 3.5 then
    			return true
    		end
    	end
    end</Lua><RecastDelay>400</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Demon Soul</Name><Default>false</Default><SpellID>77801</SpellID><Actions>/use 13|/use 14</Actions><Lua>local levelCheck = UnitLevel(&amp;quot;target&amp;quot;)
    local heroism = UnitBuffID(&amp;quot;player&amp;quot;, 32182)
    local lust = UnitBuffID(&amp;quot;player&amp;quot;, 2825)
    local warp = UnitBuffID(&amp;quot;player&amp;quot;, 80353)
    local hysteria = UnitBuffID(&amp;quot;player&amp;quot;, 90355)
    local unithealth = 100 * UnitHealth(&amp;quot;target&amp;quot;) / UnitHealthMax(&amp;quot;target&amp;quot;)
    
    if heroism ~= nil or lust ~= nil or warp ~= nil or hysteria ~= nil then
    	return true
    end
    
    if levelCheck == -1 then
    	--boss level returns as -1
    	if unithealth &amp;gt;= 90 then
    		return true
    	end
    end</Lua><RecastDelay>12000</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Immolate</Name><Default>false</Default><SpellID>348</SpellID><Actions></Actions><Lua>local debuffImmolate, _, _, _, _, _, ImmolateExpire = UnitDebuffID(&amp;quot;target&amp;quot;, 348, &amp;quot;PLAYER&amp;quot;)
    
    if debuffImmolate == nil then
    	return true
    else
    	ImmolateExpire = ImmolateExpire - GetTime()
    	if ImmolateExpire &amp;lt;  3 then
    		return true
    	end
    end</Lua><RecastDelay>400</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Conflagrate</Name><Default>false</Default><SpellID>17962</SpellID><Actions></Actions><Lua>local debuffImmolate, _, _, _, _, _, ImmolateExpire = UnitDebuffID(&amp;quot;target&amp;quot;, 348, &amp;quot;PLAYER&amp;quot;)
    
    if debuffImmolate ~= nil then
    	ImmolateExpire = ImmolateExpire - GetTime()
    	if ImmolateExpire &amp;gt;  3.5 then
    		return true
    	end
    end</Lua><RecastDelay>0</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Bane of Doom</Name><Default>false</Default><SpellID>603</SpellID><Actions></Actions><Lua>--cast Bane of Doom if boss level and Bane not up already.
    local baneDoomDebuff = UnitDebuffID(&amp;quot;target&amp;quot;, 603, &amp;quot;PLAYER&amp;quot;)
    
    local levelCheck = UnitLevel(&amp;quot;target&amp;quot;)
    if levelCheck ~= -1 then
    	--boss level returns as -1
    	return false
    end
    
    if baneDoomDebuff == nil then
    	return true
    end</Lua><RecastDelay>0</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Corruption</Name><Default>false</Default><SpellID>172</SpellID><Actions></Actions><Lua>local dbCorruption, _, _, _, _, _, CorruptionExpire = UnitDebuffID(&amp;quot;target&amp;quot;, 172, &amp;quot;PLAYER&amp;quot;)
    
    if dbCorruption ~= nil then
    	--cast if &amp;lt; 1.5 sec left
    	CorruptionExpire = (CorruptionExpire - GetTime())
    	if CorruptionExpire &amp;lt; 1.5 then
    		return true
    	end
    else
    	return true
    end</Lua><RecastDelay>0</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Chaos Bolt</Name><Default>false</Default><SpellID>50796</SpellID><Actions></Actions><Lua>return true</Lua><RecastDelay>0</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Incinerate</Name><Default>false</Default><SpellID>29722</SpellID><Actions></Actions><Lua>return true</Lua><RecastDelay>0</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Bane of Agony</Name><Default>false</Default><SpellID>980</SpellID><Actions></Actions><Lua>local baneAgonyDebuff, _, _, _, _, _, AgonyExpireTime = UnitDebuffID(&amp;quot;target&amp;quot;, 980, &amp;quot;PLAYER&amp;quot;)
    local levelCheck = UnitLevel(&amp;quot;target&amp;quot;)
    if levelCheck == -1 then
    	--boss level is -1... do not cast this on a boss.
    	return false
    end
    
    if baneAgonyDebuff ~= nil then
    	AgonyExpireTime = AgonyExpireTime - GetTime()
    	if AgonyExpireTime &amp;lt; 1.5 then
    		return true
    	end
    else
    	return true
    end</Lua><RecastDelay>0</RecastDelay><SelfCast>False</SelfCast></Ability></WARLOCK>
    WARLOCK_Rotations.xml
    Code:
    <?xml version="1.0" encoding="utf-8" ?><WARLOCK><Rotation><RotationName>Destro</RotationName><RotationDefault>false</RotationDefault><RotationList>Curse of the Elements|Life Tap|Fel Flame|Shadowburn|Soulburn|Soul Fire|Demon Soul|Immolate|Conflagrate|Bane of Doom|Bane of Agony|Corruption|Chaos Bolt|Incinerate</RotationList></Rotation><Rotation><RotationName>Affliction</RotationName><RotationDefault>false</RotationDefault><RotationList></RotationList></Rotation></WARLOCK>
    next step i'm going to attempt coding the aff to workable code unless xelper beats me too it. in that case i'll tweak it for him. same goes for demo spec
    Last edited by crystal_tech; 07-13-2011 at 04:27 PM.

  7. #67
    paveley's Avatar Member
    Reputation
    4
    Join Date
    May 2010
    Posts
    85
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    First of all, great job...an amazing thing you have done here. Also i'm a total noob when it comes to LUA code etc so i have a question now. Anyone else experience problems with the bot hanging when under the effect of Heroism etc?....it casts a couple of soul fires then nothing else, also happens on a boss with no haste CD up. What can i look for in the code to fix this...again i'm shit with these things and sorry of this been addressed before.

  8. #68
    Xelper's Avatar ★ Elder ★
    Reputation
    1024
    Join Date
    Mar 2007
    Posts
    860
    Thanks G/R
    0/8
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by paveley View Post
    First of all, great job...an amazing thing you have done here. Also i'm a total noob when it comes to LUA code etc so i have a question now. Anyone else experience problems with the bot hanging when under the effect of Heroism etc?....it casts a couple of soul fires then nothing else, also happens on a boss with no haste CD up. What can i look for in the code to fix this...again i'm shit with these things and sorry of this been addressed before.
    Warlock rotations aren't 100% done yet, crystal_tech is looking over that stuff (I dont have a warlock to do any testing on). If I get some time this week I'll glance over them and try my hand at creating the Affliction/Demo rotations, but no promises.

    Now back to the Rogue question about Backstab/Mut from earlier today, download version 1009 and setup these 2 abilities... Backstab should be above Mut in the rotation:

    Ability Name: Backstab
    SpellID: 53
    Lua:
    Code:
    local unithealth = 100 * UnitHealth("target") / UnitHealthMax("target")
    
    
    if unithealth > 35 then
        return false
    end
    
    
    if PQR_NotBehindTarget() then
        return false
    end
    
    
    return true
    Ability Name: Mutilate
    SpellID: 1329
    Lua:
    Code:
    if PQR_NotBehindTarget() then
        return true
    end


    PQR 1.0.0.9 Released.
    -WoW Lua: PQR_IsMoving(seconds) - returns true if the player has been moving for X seconds(down to 4 decimal place, 1.245 = 1 second 245 ms). Player is considered stationary if they have been standing in one spot for > 1 second.
    -WoW Lua: PQR_NotBehindTarget() - returns true if the player is not behind the target. This only returns true if you try to cast a spell that requires you to be behind the target first, and is good for 3 seconds. So, you can now add "Shred" or "Backstab", as follows:
    Code:
    if PQR_NotBehindTarget() then
        return false
    end
    return true
    -Fixed channeling issue. Typo on my part checked if you had been channeling and had LESS than 150ms left on the channel, it should have checked if you had GREATER THAN 150ms left on the channel.


    Last edited by Xelper; 07-13-2011 at 10:21 PM.

  9. #69
    crystal_tech's Avatar Elite User
    Reputation
    468
    Join Date
    Feb 2008
    Posts
    1,033
    Thanks G/R
    1/6
    Trade Feedback
    1 (100%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    first version of the aff lock

    Okay I'm not the greatest coder in the world but I've got a rough draft for Aff locks. It needs reviewed by xelper to verify my code is indeed correct.

    in a norm grim batol wearing pvp blues and 1 epic and a mix of blue/green pve gear i was pulling 7~13k dps using this. switching from single to aoe >2 and back. anywho heres the meat.

    WARLOCK_Abilities.xml:
    Code:
    <?xml version="1.0" encoding="utf-8" ?><WARLOCK><Ability><Name>Shadow Bolt</Name><Default>false</Default><SpellID>686</SpellID><Actions></Actions><Lua>return true</Lua><RecastDelay>300</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Curse of the Elements</Name><Default>false</Default><SpellID>1490</SpellID><Actions></Actions><Lua>--we want to cast if the target is a boss, and does not have any of the following:
    --Curse of the Elements, Earth and Moon, Ebon Plague, Fire Breath, Lightning Breath, Master Poisoner.
    --and Jinx: Curse of the Elements
    local dbCotEPlayer, _, _, _, _, _, CotEexpireTime = UnitDebuffID(&amp;quot;target&amp;quot;, 1490, &amp;quot;PLAYER&amp;quot;)
    local dbCotE = UnitDebuffID(&amp;quot;target&amp;quot;, 1490)
    local dbJinx = UnitDebuffID(&amp;quot;target&amp;quot;, 85547)
    local dbEaM = UnitDebuffID(&amp;quot;target&amp;quot;, 60433)
    local dbEP = UnitDebuffID(&amp;quot;target&amp;quot;, 65142)
    local dbFB = UnitDebuffID(&amp;quot;target&amp;quot;, 34889)
    local dbLB = UnitDebuffID(&amp;quot;target&amp;quot;, 24844)
    local dbMP = UnitDebuffID(&amp;quot;target&amp;quot;, 93068)
    local levelCheck = UnitLevel(&amp;quot;target&amp;quot;)
    if levelCheck ~= -1 then
    	--boss level returns as -1
    	return false
    end
    
    if dbCotEPlayer ~= nil then
    	--we have a COTE up that was cast by us, refresh it if necessary.
    	if CotEexpireTime - GetTime() &amp;lt; 1.5 then
    		return true
    	end
    elseif dbCotE ~= nil or dbEaM ~= nil or dbEP ~= nil or dbFB ~= nil or dbLB ~= nil or dbMP ~= nil or dbJinx ~= nil then
    	--a debuff is up, cast by another player... let them manage it.
    	return false
    else
    	--no debuff is up, cast it.
    	return true
    end</Lua><RecastDelay>0</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Life Tap</Name><Default>false</Default><SpellID>1454</SpellID><Actions></Actions><Lua>local myMana = UnitPower(&amp;quot;player&amp;quot;) / UnitPowerMax(&amp;quot;player&amp;quot;) * 100
    local myHealth = UnitHealth(&amp;quot;player&amp;quot;) / UnitHealthMax(&amp;quot;player&amp;quot;) * 100
    
    if myMana &amp;lt; 20 and myHealth &amp;gt; 50 then
    	return true
    end</Lua><RecastDelay>2000</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Fel Flame</Name><Default>false</Default><SpellID>77799</SpellID><Actions></Actions><Lua>local felSpark = UnitBuffID(&amp;quot;player&amp;quot;, 89937)
    
    if felSpark ~= nil then
    	return true
    end</Lua><RecastDelay>0</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Shadowburn</Name><Default>false</Default><SpellID>17877</SpellID><Actions></Actions><Lua>local unithealth = 100 * UnitHealth(&amp;quot;target&amp;quot;) / UnitHealthMax(&amp;quot;target&amp;quot;)
    
    if unithealth &amp;lt;= 20 then
    	return true
    end</Lua><RecastDelay>0</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Soulburn</Name><Default>false</Default><SpellID>74434</SpellID><Actions></Actions><Lua>local SoulFireCheck = UnitBuffID(&amp;quot;player&amp;quot;, 18120)
    local unithealth = 100 * UnitHealth(&amp;quot;target&amp;quot;) / UnitHealthMax(&amp;quot;target&amp;quot;)
    local heroism = UnitBuffID(&amp;quot;player&amp;quot;, 32182)
    local lust = UnitBuffID(&amp;quot;player&amp;quot;, 2825)
    local warp = UnitBuffID(&amp;quot;player&amp;quot;, 80353)
    local hysteria = UnitBuffID(&amp;quot;player&amp;quot;, 90355)
    
    if unithealth &amp;gt; 97 then
    	--best we can currently do for Start of Fight
    	if SoulFireCheck == nil then
    		return true
    	end
    end
    if heroism ~= nil or lust ~= nil or warp ~= nil or hysteria ~= nil then
    	if SoulFireCheck == nil then
    		return true
    	end
    end</Lua><RecastDelay>0</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Soul Fire</Name><Default>false</Default><SpellID>6353</SpellID><Actions></Actions><Lua>local hasSoulburn = UnitBuffID(&amp;quot;player&amp;quot;, 74434)
    local SoulFireCheck, _, _, _, _, _, SoulFireExpire = UnitBuffID(&amp;quot;player&amp;quot;, 18120)
    local heroism = UnitBuffID(&amp;quot;player&amp;quot;, 32182)
    local lust = UnitBuffID(&amp;quot;player&amp;quot;, 2825)
    local warp = UnitBuffID(&amp;quot;player&amp;quot;, 80353)
    local hysteria = UnitBuffID(&amp;quot;player&amp;quot;, 90355)
    local levelCheck = UnitLevel(&amp;quot;target&amp;quot;)
    local empoweredImp = UnitBuffID(&amp;quot;player&amp;quot;, 47221)
    
    if hasSoulburn ~= nil then
    	return true
    end
    
    if empoweredImp ~= nil then
    	return true
    end
    if heroism ~= nil or lust ~= nil or warp ~= nil or hysteria ~= nil then
    	if SoulFireCheck == nil then
    		return true
    	end
    end
    
    if levelCheck == -1 then
    	--boss level returns as -1
    	if SoulFireCheck == nil then
    		return true
    	else
    		SoulFireExpire = SoulFireExpire - GetTime()
    		if SoulFireExpire &amp;lt; 3.5 then
    			return true
    		end
    	end
    end</Lua><RecastDelay>400</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Demon Soul</Name><Default>false</Default><SpellID>77801</SpellID><Actions>/use 13|/use 14</Actions><Lua>local levelCheck = UnitLevel(&amp;quot;target&amp;quot;)
    local heroism = UnitBuffID(&amp;quot;player&amp;quot;, 32182)
    local lust = UnitBuffID(&amp;quot;player&amp;quot;, 2825)
    local warp = UnitBuffID(&amp;quot;player&amp;quot;, 80353)
    local hysteria = UnitBuffID(&amp;quot;player&amp;quot;, 90355)
    local unithealth = 100 * UnitHealth(&amp;quot;target&amp;quot;) / UnitHealthMax(&amp;quot;target&amp;quot;)
    
    if heroism ~= nil or lust ~= nil or warp ~= nil or hysteria ~= nil then
    	return true
    end
    
    if levelCheck == -1 then
    	--boss level returns as -1
    	if unithealth &amp;gt;= 90 then
    		return true
    	end
    end</Lua><RecastDelay>12000</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Immolate</Name><Default>false</Default><SpellID>348</SpellID><Actions></Actions><Lua>local debuffImmolate, _, _, _, _, _, ImmolateExpire = UnitDebuffID(&amp;quot;target&amp;quot;, 348, &amp;quot;PLAYER&amp;quot;)
    
    if debuffImmolate == nil then
    	return true
    else
    	ImmolateExpire = ImmolateExpire - GetTime()
    	if ImmolateExpire &amp;lt;  3 then
    		return true
    	end
    end</Lua><RecastDelay>400</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Conflagrate</Name><Default>false</Default><SpellID>17962</SpellID><Actions></Actions><Lua>local debuffImmolate, _, _, _, _, _, ImmolateExpire = UnitDebuffID(&amp;quot;target&amp;quot;, 348, &amp;quot;PLAYER&amp;quot;)
    
    if debuffImmolate ~= nil then
    	ImmolateExpire = ImmolateExpire - GetTime()
    	if ImmolateExpire &amp;gt;  3.5 then
    		return true
    	end
    end</Lua><RecastDelay>0</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Bane of Doom</Name><Default>false</Default><SpellID>603</SpellID><Actions></Actions><Lua>--cast Bane of Doom if boss level and Bane not up already.
    local baneDoomDebuff = UnitDebuffID(&amp;quot;target&amp;quot;, 603, &amp;quot;PLAYER&amp;quot;)
    
    local levelCheck = UnitLevel(&amp;quot;target&amp;quot;)
    if levelCheck ~= -1 then
    	--boss level returns as -1
    	return false
    end
    
    if baneDoomDebuff == nil then
    	return true
    end</Lua><RecastDelay>0</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Corruption</Name><Default>false</Default><SpellID>172</SpellID><Actions></Actions><Lua>local dbCorruption, _, _, _, _, _, CorruptionExpire = UnitDebuffID(&amp;quot;target&amp;quot;, 172, &amp;quot;PLAYER&amp;quot;)
    
    if dbCorruption ~= nil then
    	--cast if &amp;lt; 1.5 sec left
    	CorruptionExpire = (CorruptionExpire - GetTime())
    	if CorruptionExpire &amp;lt; 1.5 then
    		return true
    	end
    else
    	return true
    end</Lua><RecastDelay>0</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Chaos Bolt</Name><Default>false</Default><SpellID>50796</SpellID><Actions></Actions><Lua>return true</Lua><RecastDelay>0</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Incinerate</Name><Default>false</Default><SpellID>29722</SpellID><Actions></Actions><Lua>return true</Lua><RecastDelay>0</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Bane of Agony</Name><Default>false</Default><SpellID>980</SpellID><Actions></Actions><Lua>local baneAgonyDebuff, _, _, _, _, _, AgonyExpireTime = UnitDebuffID(&amp;quot;target&amp;quot;, 980, &amp;quot;PLAYER&amp;quot;)
    local levelCheck = UnitLevel(&amp;quot;target&amp;quot;)
    if levelCheck == -1 then
    	--boss level is -1... do not cast this on a boss.
    	return false
    end
    
    if baneAgonyDebuff ~= nil then
    	AgonyExpireTime = AgonyExpireTime - GetTime()
    	if AgonyExpireTime &amp;lt; 1.5 then
    		return true
    	end
    else
    	return true
    end</Lua><RecastDelay>0</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Haunt</Name><Default>false</Default><SpellID>48181</SpellID><Actions></Actions><Lua>return true</Lua><RecastDelay>0</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Unstable Affliction</Name><Default>false</Default><SpellID>30108</SpellID><Actions></Actions><Lua>local debuffUA, _, _, _, _, _, UaExpire = UnitDebuffID(&amp;quot;target&amp;quot;, 30108, &amp;quot;PLAYER&amp;quot;)
    
    if debuffUA == nil then
    	return true
    else
    	UaExpire = UaExpire - GetTime()
    	if UaExpire &amp;lt;  4 then
    		return true
    	end
    end</Lua><RecastDelay>400</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Shadow Bolt Opener</Name><Default>false</Default><SpellID>686</SpellID><Actions></Actions><Lua>local hasShadowtrance = UnitBuffID(&amp;quot;player&amp;quot;, 17941)
    local debuffShadowandflame, _, _, _, _, _, SandfExpire = UnitDebuffID(&amp;quot;target&amp;quot;, 17801, &amp;quot;PLAYER&amp;quot;)
    local unithealth = 100 * UnitHealth(&amp;quot;target&amp;quot;) / UnitHealthMax(&amp;quot;target&amp;quot;)
    
    if hasShadowtrance ~= nil then
    	return true
    end
    
    if debuffShadowandflame == nil then
    	return false
    else
    	SandfExpire = SandfExpire - GetTime()
    	if SandfExpire &amp;lt;  3 then
    		return true
    	end
    end</Lua><RecastDelay>300</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Drain Soul</Name><Default>false</Default><SpellID>1120</SpellID><Actions></Actions><Lua>local unithealth = 100 * UnitHealth(&amp;quot;target&amp;quot;) / UnitHealthMax(&amp;quot;target&amp;quot;)
    local hasHaunt = UnitDebuffID(&amp;quot;target&amp;quot;, 48181, &amp;quot;PLAYER&amp;quot;)
    
    if unithealth &amp;lt;= 25 and hasHaunt then 
    	return true
    end</Lua><RecastDelay>0</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Soulburn Aff</Name><Default>false</Default><SpellID>74434</SpellID><Actions></Actions><Lua>return true</Lua><RecastDelay>0</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Seed of Corruption</Name><Default>false</Default><SpellID>27243</SpellID><Actions></Actions><Lua>return true</Lua><RecastDelay>600</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Soul Swap</Name><Default>false</Default><SpellID>86121</SpellID><Actions></Actions><Lua>-not done
    local bOd = UnitDebuffID(&amp;quot;target&amp;quot;, 603, &amp;quot;PLAYER&amp;quot;)
    local bOa = UnitDebuffID(&amp;quot;target&amp;quot;, 980, &amp;quot;PLAYER&amp;quot;)
    local corrupT = UnitDebuffID(&amp;quot;target&amp;quot;, 172, &amp;quot;PLAYER&amp;quot;)
    local uA = UnitDebuffID(&amp;quot;target&amp;quot;, 30108, &amp;quot;PLAYER&amp;quot;)
    
    
    if bOd ~= nil or bOa ~= nil and corrupT ~= nil and uA ~= nil then
    	return true
    end</Lua><RecastDelay>300</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Soul Swap exhale</Name><Default>false</Default><SpellID>68213</SpellID><Actions></Actions><Lua>-not done
    local hassoulswap = UnitBuffID(&amp;quot;player&amp;quot;, 86213)
    
    
    if hassoulswap ~= nil then focustarget
    	return true
    end</Lua><RecastDelay>300</RecastDelay><SelfCast>False</SelfCast></Ability></WARLOCK>
    WARLOCK_Rotations.xml:
    Code:
    <?xml version="1.0" encoding="utf-8" ?><WARLOCK><Rotation><RotationName>Destro</RotationName><RotationDefault>false</RotationDefault><RotationList>Curse of the Elements|Life Tap|Fel Flame|Shadowburn|Soulburn|Soul Fire|Demon Soul|Immolate|Conflagrate|Bane of Doom|Bane of Agony|Corruption|Chaos Bolt|Incinerate</RotationList></Rotation><Rotation><RotationName>Affliction</RotationName><RotationDefault>false</RotationDefault><RotationList>Curse of the Elements|Life Tap|Fel Flame|Demon Soul|Shadow Bolt Opener|Haunt|Drain Soul|Bane of Doom|Bane of Agony|Corruption|Unstable Affliction|Shadow Bolt</RotationList></Rotation><Rotation><RotationName>Aff AOE &amp;gt;2</RotationName><RotationDefault>false</RotationDefault><RotationList>Life Tap|Fel Flame|Soulburn Aff|Seed of Corruption</RotationList></Rotation><Rotation><RotationName>Aff AOE 2 mobs</RotationName><RotationDefault>false</RotationDefault><RotationList></RotationList></Rotation></WARLOCK>
    As for the soul fire w/ haste prob I've never ran into that bug. try updating to these and see if it happens again. this also includes the destro rotation as well.

    let me know what you think.

  10. #70
    kclux's Avatar Active Member
    Reputation
    16
    Join Date
    Jun 2011
    Posts
    199
    Thanks G/R
    2/0
    Trade Feedback
    2 (100%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Awesome work Xelper, thanks as always. Had no chance to test the PQR_NotBehindTarget option yet but looking forward to do that later. Also it would be nice if it would be possible to use custom values for this since 3 seconds can be a long time on fights with a lot of movement.

    Would it be maybe possible to limit the amount of keystrokes sent per second ? Sometimes when an ability is not ready my action-bars even start to flicker because of the I don't know how many keystrokes sent per second. If that is on client side only I do not care but if they are all sent to Blizzard, I would say that looks quite suspicious, since no human can press that fast.

    Then my main problem right now which makes me want to pull my hairs out lol, I am trying for hours now already to setup abilities for Vanish and Garrote in a way that Vanish will be used when certain circumstances are met and then Garrote right after. Using Vanish when I want it to be used works just fine but Garrote is only executed after it every 3rd or 4th try. In the rotation I have Vanish as top ability and Garrote as second one to make sure they have highest priority. For Garrote I have a simple check before execution to make sure I have the 3 seconds buff I get from using Vanish:

    Code:
    local vanish = UnitBuffID("player", 11327)
    
    if vanish == nil  then
    	return false
    end
    
    return true
    I don't know what is causing it that most of the time a other ability is executed, probably the vanish buff is a few milliseconds slower showing up than the bot execution. I also tried to add

    /stopattack
    /cast Garrote
    /startattack

    to the Vanish ability but that did not do the trick either. I don't know anymore what to try now.

    Besides of that, it is just awesome for raid leading when you have to focus less on your rotation and can focus fully on your surroundings !!! I really love that.
    Last edited by kclux; 07-14-2011 at 05:39 AM.

  11. #71
    Xelper's Avatar ★ Elder ★
    Reputation
    1024
    Join Date
    Mar 2007
    Posts
    860
    Thanks G/R
    0/8
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Is Vanish not on GCD?

    I can also easily provide an option to slow it down. Ill do that tonight.
    Last edited by Xelper; 07-14-2011 at 07:26 AM.

  12. #72
    kclux's Avatar Active Member
    Reputation
    16
    Join Date
    Jun 2011
    Posts
    199
    Thanks G/R
    2/0
    Trade Feedback
    2 (100%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Xelper View Post
    Is Vanish not on GCD?

    I can also easily provide an option to slow it down. Ill do that tonight.
    Yeah Vanish is off the GCD.

  13. #73
    Kinky's Avatar Banned CoreCoins Purchaser
    Reputation
    481
    Join Date
    Nov 2008
    Posts
    500
    Thanks G/R
    1/1
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    I've been trying to create a profile for my Shadow Priest. Just can't do it. >_< Not really sure what I'm doing wrong, so far I've tried the following:
    Recast Vampiric Touch (ID: 34914) if the debuff have less than 2 seconds duration left.
    Recast Devouring Plague (ID: 2944) if the debuff have less than 2 seconds duration left.
    Cast Shadow Word: Pain (ID: 589) at the start of battle. (Mind Flay channels refreshes it so there's no point in refreshing it)

    Then it starts to get touch for me. I try to channel Mind Flay as often as possible while keeping the priority system intact like this;

    Only use Archangel (ID: 87151) on cooldown (90 seconds) if I have 5 stacks of Evangelism (ID: 81662) up, then continue to check the following;

    Check to see how many Shadow Orbs (ID: 95740) I currently have on me, then check to see if I have the Empowered Shadow (ID: 95799) buff on me and cast Mind Blast (ID: 8092) if I have 1 or more Shadow Orbs and the duration of Empowered Shadows are less than 4 seconds.

    If the boss is at or under 25% health, start casting Shadow Word: Death (ID: 32379) on cooldown. (10 seconds)
    If nothing else to do; Mind Flay and cast Shadowfiend (ID: 34433) if mana is getting lower than 45%


    I don't expect any help, but, I'd be really greatfull as I'm no Lua wizard!

  14. #74
    popeofdope's Avatar Sergeant
    Reputation
    11
    Join Date
    Aug 2010
    Posts
    63
    Thanks G/R
    0/0
    Trade Feedback
    1 (100%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by crystal_tech View Post
    Okay I'm not the greatest coder in the world but I've got a rough draft for Aff locks. It needs reviewed by xelper to verify my code is indeed correct.

    let me know what you think.
    Great job so far! Some minor changes I would suggest:
    Refresh Bane of Doom when there is less than 15 seconds left on it (i.e. just before the last tick)
    Do not refresh Bane of Agony early. Currently it will refresh it when theres 1.5 seconds left on the dot. The way bane of agony works, the ticks get stronger as time goes on, so refreshing it before the last tick makes the first tick of the refreshed dot considerably weaker.
    Cast shadowflame when you are 10 yards from the target. Lower than UA in priority but higher than shadowbolt.

    Other than that it works perfectly.

  15. #75
    Kinky's Avatar Banned CoreCoins Purchaser
    Reputation
    481
    Join Date
    Nov 2008
    Posts
    500
    Thanks G/R
    1/1
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Hey again!

    After reading online for quite a while, I've been trying to create the initial version for Shadowpriests. :< I haven't tested it yet though and would really like someone else to have a second look at it, just in case.

    Code:
    <?xml version="1.0" encoding="utf-8" ?>
    <PRIEST>
    <Ability>
    	<Name>Vampiric Embrace</Name>
    	<Default>false</Default>
    	<SpellID>15286</SpellID>
    	<Actions></Actions>
    	<Lua>
    -- See if we have the buff
    local hasVE = UnitBuffID("player", 15286)
    
    if hasVE ~= nil then
    	return true
    end
    	</Lua>
    	<RecastDelay>0</RecastDelay>
    	<SelfCast>True</SelfCast>
    </Ability>
    <Ability>
    	<Name>Mind Flay</Name>
    	<Default>false</Default>
    	<SpellID>15407</SpellID>
    	<Actions></Actions>
    	<Lua>return true</Lua>
    	<RecastDelay>295</RecastDelay>
    	<SelfCast>False</SelfCast>
    </Ability>
    <Ability>
    	<Name>Shadow Word: Pain</Name>
    	<Default>false</Default>
    	<SpellID>589</SpellID>
    	<Actions></Actions>
    	<Lua>
    -- Check some stuff
    local SWP, _, _, _, _, _, SWPTimer = UnitDebuffID("target", 589, "PLAYER")
    local LevelCheck = UnitLevel("target)
    local BossHealth = 100 * UnitHealth("target") / UnitHealthMax("target")
    
    -- Check if we're good to go.
    if LevelCheck ~= -1 then
    	return false
    end
    -- Check if the boss is damaged!
    if BossHealth < 100 then
    	return true
    end
    -- Check for the Shadow Word: Pain
    if SWP ~= nil then
    	SWPTimer - GetTime() < 1.5 then
    		return true
    	end
    end
    	</Lua>
    	<RecastDelay>0</RecastDelay>
    	<SelfCast>False</SelfCast>
    </Ability>
    <Ability>
    	<Name>Vampiric Touch</Name>
    	<Default>false</Default>
    	<SpellID>34914</SpellID>
    	<Actions></Actions>
    	<Lua>
    -- Local variables
    local VTP, _, _, _, _, _, VTTimer("target", 34914, "PLAYER")
    local LevelCheck = UnitLevel("target)
    local BossHealth = 100 * UnitHealth("target") / UnitHealthMax("target")
    
    if LevelCheck ~= -1 then
    	return false
    end
    if BossHealth < 100 then
    	return true
    end
    
    -- Check for Vampiric Touch
    if VTP ~= nil then
    	VTTimer - GetTime() < 1.5 then
    		return true
    	end
    end
    	</Lua>
    	<RecastDelay>0</RecastDelay>
    	<SelfCast>False</SelfCast>
    </Ability>
    <Ability>
    	<Name>Devouring Plague</Name>
    	<Default>false</Default>
    	<SpellID>2944</SpellID>
    	<Actions></Actions>
    	<Lua>
    -- Local variables
    local DPP, _, _, _, _, _, DPTimer("target", 2944, "PLAYER")
    local LevelCheck = UnitLevel("target)
    local BossHealth = 100 * UnitHealth("target") / UnitHealthMax("target")
    
    if LevelCheck ~= -1 then
    	return false
    end
    if BossHealth < 100 then
    	return true
    end
    -- Recast Devouring Plague
    if DPP ~= nil then
    	DPTimer - GetTime() < 1.5 then
    		return true
    	end
    end
    	</Lua>
    	<RecastDelay>0</RecastDelay>
    	<SelfCast>False</SelfCast>
    </Ability>
    <Ability>
    	<Name>Archangel</Name>
    	<Default>false</Default>
    	<SpellID>87151</SpellID>
    	<Actions></Actions>
    	<Lua>
    local _,_,_,EvangelismCount = UnitBuffID("player", 81662)
    
    if EvangelismCount ~= nil then
    	if EvangelismCount >=5 then
    		return true
    	end
    end
    	</Lua>
    	<RecastDelay>90000</RecastDelay>
    	<SelfCast>False</SelfCast>
    </Ability>
    <Ability>
    	<Name>Mind Blast</Name>
    	<Default>false</Default>
    	<SpellID>8092</SpellID>
    	<Actions></Actions>
    	<Lua>
    -- Local variables
    local _,_,_,ShadowOrbsCount = UnitBuffID("player", 95740)
    local ES, _, _, _, _, _, ESTimer = UnitBuffID("player", 95799)
    
    if ShadowOrbsCount ~= nil then
    	if ShadowOrbsCount >= 2 then
    		if ES ~= nil then
    			ESTimer - GetTime() < 5 then
    				return true
    			end
    		end
    	end
    end
    	</Lua>
    	<RecastDelay>6500</RecastDelay>
    	<SelfCast>False</SelfCast>
    </Ability>
    <Ability>
    	<Name>Shadow Word: Death</Name>
    	<Default>false</Default>
    	<SpellID>32379</SpellID>
    	<Actions></Actions>
    	<Lua>
    -- Local variables
    local LevelCheck = UnitLevel("target)
    local BossHealth = 100 * UnitHealth("target") / UnitHealthMax("target")
    
    -- Level Check
    if LevelCheck ~= -1 then
    	return false
    end
    -- Check the boss Health
    if BossHealth < 25 then
    	return true
    end
    	</Lua>
    	<RecastDelay>100000</RecastDelay>
    	<SelfCast>False</SelfCast>
    </Ability>
    <Ability>
    	<Name>Shadowfiend</Name>
    	<Default>false</Default>
    	<SpellID>34433</SpellID>
    	<Actions></Actions>
    	<Lua>
    -- Local Vars
    local mana = UnitPower("player") / UnitPowerMax("player") * 100
    
    -- Use Shadowfiend if we've got less than 40% Mana.
    if mana < 40 then
    	return true
    end
    	</Lua>
    	<RecastDelay>40000</RecastDelay>
    	<SelfCast>False</SelfCast>
    </Ability>
    <Ability>
    	<Name>Dispersion</Name>
    	<Default>false</Default>
    	<SpellID>47585</SpellID>
    	<Actions></Actions>
    	<Lua>return true</Lua>
    	<RecastDelay>20000</RecastDelay>
    	<SelfCast>False</SelfCast>
    </Ability>
    </PRIEST>
    After testing it some on a Raider's Training Dummy, it just doesn't want to execute.. at all. Not sure what I've done wrong.
    Last edited by Kinky; 07-14-2011 at 11:53 AM. Reason: Testing the script

Similar Threads

  1. [Buying] Planetside 2 Priority Beta Key
    By isit123 in forum General MMO Buy Sell Trade
    Replies: 0
    Last Post: 07-21-2012, 06:34 AM
  2. [Selling] PLANETSIDE 2 Priority/Early Access Beta Account
    By Kabraxiss in forum General MMO Buy Sell Trade
    Replies: 0
    Last Post: 07-18-2012, 10:20 AM
  3. [Selling] Planetside 2 Priority/Early access Beta Keys
    By mrsluf in forum General MMO Buy Sell Trade
    Replies: 3
    Last Post: 07-17-2012, 04:45 AM
  4. [Selling] Planetside 2 Priority Access beta key codes
    By fatalefout in forum General MMO Buy Sell Trade
    Replies: 1
    Last Post: 06-26-2012, 04:08 PM
  5. [Bot] Automated dungeon queue / Justice Point leecher(Auto-it source)
    By s_e_a_n_66 in forum World of Warcraft Bots and Programs
    Replies: 36
    Last Post: 01-17-2011, 11:50 AM
All times are GMT -5. The time now is 11:12 PM. Powered by vBulletin® Version 4.2.3
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. User Alert System provided by Advanced User Tagging (Pro) - vBulletin Mods & Addons Copyright © 2024 DragonByte Technologies Ltd.
Digital Point modules: Sphinx-based search