├── .gitignore ├── LazyDruid ├── BiteTracking.lua ├── LazyDruid.lua ├── LazyDruid.toc ├── LazyDruid.xml ├── Localization.lua └── ParseDruid.lua ├── LazyHunter ├── LazyHunter.lua ├── LazyHunter.toc ├── LazyHunter.xml ├── Localization.lua └── ParseHunter.lua ├── LazyMage ├── LazyMage.lua ├── LazyMage.toc ├── LazyMage.xml ├── Localization.lua └── ParseMage.lua ├── LazyPaladin ├── LazyPaladin.lua ├── LazyPaladin.toc ├── LazyPaladin.xml ├── Localization.lua └── ParsePaladin.lua ├── LazyPriest ├── LazyPriest.lua ├── LazyPriest.toc ├── LazyPriest.xml ├── Localization.lua └── ParsePriest.lua ├── LazyRogue ├── EviscerateTracking.lua ├── LazyRogue.lua ├── LazyRogue.toc ├── LazyRogue.xml ├── Localization.lua └── ParseRogue.lua ├── LazyScript ├── About.lua ├── About.xml ├── Actions.lua ├── AutoAttack.lua ├── Bindings.xml ├── Deathstimator.lua ├── Deathstimator.xml ├── FormEdit.lua ├── FormEdit.xml ├── Immunity.xml ├── ImmunityTypeTracking.lua ├── Interrupt.lua ├── Interrupt.xml ├── LSActionsWarrior.md ├── LSBuffDebuf.md ├── LSCriteriaWarrior.md ├── LSOverview.md ├── LazyScript.lua ├── LazyScript.toc ├── LazyScript.xml ├── Localization.lua ├── MinimapMenu.lua ├── MinimapMenu.xml ├── Minion.lua ├── Minion.xml ├── Parse.lua ├── ParseBuffs.lua ├── ParseGeneral.lua ├── Tooltip.lua ├── Tooltip.xml ├── Util.lua └── img │ └── corner.tga ├── LazyShaman ├── LazyShaman.lua ├── LazyShaman.toc ├── LazyShaman.xml ├── Localization.lua └── ParseShaman.lua ├── LazyWarlock ├── LazyWarlock.lua ├── LazyWarlock.toc ├── LazyWarlock.xml ├── Localization.lua └── ParseWarlock.lua ├── LazyWarrior ├── LazyWarrior.lua ├── LazyWarrior.toc ├── LazyWarrior.xml ├── Localization.lua └── ParseWarrior.lua └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | *.rar 3 | -------------------------------------------------------------------------------- /LazyDruid/BiteTracking.lua: -------------------------------------------------------------------------------- 1 | lazyDruidLoad.metadata:updateRevisionFromKeyword("$Revision: 524 $") 2 | 3 | -- Ferocious bite tracking 4 | 5 | function lazyDruidLoad.LoadBiteTracking() 6 | if (not lazyDruid.spellSearch(lazyDruid.actions.bite)) then 7 | lazyDruid.d(DRUID_YOU_DONT_HAVE_BITE) 8 | return 9 | end 10 | 11 | if (not lazyDruid.getLocaleString("BITE_HIT") or not lazyDruid.getLocaleString("BITE_CRIT")) then 12 | lazyDruid.p(DRUID_BITE_NOT_SUPPORTED) 13 | return 14 | end 15 | 16 | lazyDruid.bite = {} 17 | 18 | 19 | function lazyDruid.bite.ResetBiteTracking() 20 | lazyDruid.perPlayerConf.biteTracker = { {0,0}, {0,0}, {0,0}, {0,0}, {0,0} } 21 | lazyDruid.p(DRUID_RESET_BITE_STATS) 22 | end 23 | 24 | function lazyDruid.bite.GetBiteTrackingInfo(cp) 25 | local observedDamage = lazyDruid.perPlayerConf.biteTracker[cp][1] 26 | local observedCt = lazyDruid.perPlayerConf.biteTracker[cp][2] 27 | return observedDamage, observedCt 28 | end 29 | 30 | function lazyDruid.bite.SetBiteTrackingInfo(cp, observedDamage, observedCt) 31 | lazyDruid.perPlayerConf.biteTracker[cp][1] = observedDamage 32 | lazyDruid.perPlayerConf.biteTracker[cp][2] = observedCt 33 | end 34 | 35 | function lazyDruid.bite.TrackBite(arg1) 36 | local biteHit = lazyDruid.getLocaleString("BITE_HIT") 37 | local biteCrit = lazyDruid.getLocaleString("BITE_CRIT") 38 | 39 | if (not biteHit or not biteCrit) then 40 | return 41 | end 42 | 43 | local thisDamage = nil 44 | if (lazyDruid.re(arg1, biteHit)) then 45 | thisDamage = lazyDruid.match2 46 | elseif (lazyDruid.perPlayerConf.trackBiteCrits and lazyDruid.re(arg1, biteCrit)) then 47 | thisDamage = lazyDruid.match2 48 | end 49 | 50 | if (not thisDamage) then 51 | return 52 | end 53 | 54 | if (not lazyDruid.biteComboPoints or lazyDruid.biteComboPoints == 0) then 55 | lazyDruid.d(DRUID_BITE_CANT_RECORD) 56 | return 57 | end 58 | 59 | local observedDamage, observedCt = lazyDruid.bite.GetBiteTrackingInfo(lazyDruid.biteComboPoints) 60 | 61 | observedDamage = observedDamage * observedCt 62 | local newCt = observedCt + 1 63 | observedDamage = observedDamage + thisDamage 64 | observedDamage = observedDamage / newCt 65 | observedCt = math.min(lazyDruid.perPlayerConf.biteSample, newCt) 66 | 67 | lazyDruid.bite.SetBiteTrackingInfo(lazyDruid.biteComboPoints, observedDamage, observedCt) 68 | 69 | local expectedDamage = lazyDruid.masks.CalculateBaseBiteDamage(lazyDruid.biteComboPoints) 70 | local thisRatio = thisDamage / expectedDamage 71 | local avgRatio = observedDamage / expectedDamage 72 | lazyDruid.d(DRUID_BITE_OUTPUT_1..lazyDruid.biteComboPoints..DRUID_BITE_OUTPUT_2..thisDamage..DRUID_BITE_OUTPUT_3.. 73 | expectedDamage..") "..string.format("%.2f", thisRatio).."/".. 74 | string.format("%.2f", avgRatio)..DRUID_BITE_OUTPUT_4) 75 | 76 | lazyDruid.biteComboPoints = nil 77 | end 78 | 79 | -- Hook UseAction() so we can record how many combo points the 80 | -- player had when he used ferocious bite. 81 | function lazyDruid.bite.UseActionHook(action, checkCursor, onSelf) 82 | if (action == lazyDruid.actions.bite:GetSlot()) then 83 | lazyDruid.biteComboPoints = GetComboPoints() 84 | --lazyDruid.d("UseActionHook, I see you're using ferocious bite with "..lazyDruid.biteComboPoints.." cps") 85 | end 86 | return lazyDruid.UseActionOrig(action, checkCursor, onSelf) 87 | end 88 | 89 | function lazyDruid.bite.CastSpellHook(spellIndex, spellBookType) 90 | local spellIndexStart, rankCount, maxRank = lazyDruid.actions.bite:FindSpellRanks(false) 91 | if ((spellIndexStart + rankCount - 1) == spellIndex) then 92 | lazyDruid.biteComboPoints = GetComboPoints() 93 | lazyDruid.d(DRUID_BITE_CAST_SPELL_HOOK..lazyDruid.biteComboPoints..DRUID_BITE_CPS) 94 | end 95 | return lazyDruid.CastSpellOrig(spellIndex, spellBookType) 96 | end 97 | 98 | 99 | end -- function lazyDruidLoad.LoadBiteTracking() -------------------------------------------------------------------------------- /LazyDruid/LazyDruid.lua: -------------------------------------------------------------------------------- 1 | lazyDruid = {} 2 | lazyDruidLoad = {} 3 | 4 | lazyDruidLoad.metadata = lazyScript.Metadata:new("LazyDruid") 5 | lazyDruidLoad.metadata:updateRevisionFromKeyword("$Revision: 524 $") 6 | 7 | function lazyDruidLoad.OnLoad() 8 | -- Check that this player is the correct class 9 | local localeClass, class = UnitClass("player") 10 | if class ~= "DRUID" then 11 | return 12 | end 13 | 14 | -- Check that we're compatible with LazyScript 15 | if not lazyScript.CheckCompatibility(lazyDruidLoad.metadata) then 16 | return 17 | end 18 | 19 | -- I like everything with the same name. It makes S&R so easy 20 | lazyDruid = lazyScript 21 | lazyDruidLocale = lsLocale 22 | -- Unfortunately this overwrites everything that we already had called lazyDruid. 23 | -- Load everything else in class specific files using these loading functions 24 | -- Localization must be loaded first! 25 | lazyDruidLoad.LoadDruidLocalization(GetLocale()) 26 | lazyDruidLoad.LoadParseDruid() 27 | -- Action based functions should be loaded at PLAYER_LOGIN to be initialized correctly 28 | 29 | this:RegisterEvent("VARIABLES_LOADED") 30 | this:RegisterEvent("PLAYER_LOGIN") 31 | end 32 | 33 | function lazyDruidLoad.OnEvent() 34 | if (event == "VARIABLES_LOADED") then 35 | -- Nothing yet 36 | 37 | elseif (event == "PLAYER_LOGIN") then 38 | 39 | this:RegisterEvent("UNIT_ENERGY") 40 | this:RegisterEvent("CHAT_MSG_SPELL_SELF_DAMAGE") 41 | this:RegisterEvent("LEARNED_SPELL_IN_TAB") 42 | 43 | lazyDruidLoad.LoadBiteTracking() 44 | 45 | -- Hook for ferocious bite tracking 46 | if (not lazyDruid.UseActionOrig and lazyDruid.bite) then 47 | lazyDruid.UseActionOrig = UseAction 48 | UseAction = lazyDruid.bite.UseActionHook 49 | end 50 | 51 | if (not lazyDruid.CastSpellOrig and lazyDruid.bite) then 52 | lazyDruid.CastSpellOrig = CastSpell 53 | CastSpell = lazyDruid.bite.CastSpellHook 54 | end 55 | 56 | lazyDruid.chat(lazyDruidLoad.metadata:getNameVersionRevisionString()..DRUID_ADDON_LOADED..lazyScript.metadata.name.."!") 57 | 58 | elseif (event == "UNIT_ENERGY") then 59 | if (arg1 == "player") then 60 | local currentEnergy = UnitMana("player") 61 | if (currentEnergy > lazyDruid.latestEnergy) then 62 | -- a tick 63 | lazyDruid.lastTickTime = GetTime() 64 | --lazyDruid.d("ENERGY TICK: "..lazyDruid.lastTickTime) 65 | end 66 | lazyDruid.latestEnergy = currentEnergy 67 | end 68 | 69 | elseif (event == "CHAT_MSG_SPELL_SELF_DAMAGE") then 70 | if lazyDruid.bite then 71 | lazyDruid.bite.TrackBite(arg1) 72 | end 73 | 74 | elseif (event == "LEARNED_SPELL_IN_TAB") then 75 | -- search for ferocious bite 76 | lazyDruidLoad.LoadBiteTracking() 77 | if (not lazyDruid.UseActionOrig and lazyDruid.bite) then 78 | lazyDruid.UseActionOrig = UseAction 79 | UseAction = lazyDruid.bite.UseActionHook 80 | end 81 | 82 | end 83 | end -------------------------------------------------------------------------------- /LazyDruid/LazyDruid.toc: -------------------------------------------------------------------------------- 1 | ## Interface: 11200 2 | ## Title: LazyScript - |cffff770CLazy|r|cffffffffDruid|r 3 | ## Version: 1.0.2 4 | ## X-Revision: $Revision: 747 $ 5 | ## X-LazyScriptCompatibility: 3 6 | ## Notes: Programmable Druid Attacks. 7 | ## Notes-ruRU: Программируемые атаки друида. 8 | ## RequiredDeps: LazyScript 9 | ## OptionalDeps: MobInfo-2, Tracer 10 | ## LoadOnDemand: 1 11 | ## X-LazyScriptVersion: 1.0 12 | 13 | LazyDruid.lua 14 | ParseDruid.lua 15 | BiteTracking.lua 16 | Localization.lua 17 | LazyDruid.xml -------------------------------------------------------------------------------- /LazyDruid/LazyDruid.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 9 | lazyDruidLoad.metadata:updateRevisionFromKeyword("$Revision: 171 $") 10 | lazyDruidLoad.OnLoad() 11 | 12 | 13 | lazyDruidLoad.OnEvent() 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | this:SetOwner(this, "ANCHOR_NONE") 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /LazyHunter/LazyHunter.lua: -------------------------------------------------------------------------------- 1 | lazyHunter = {} 2 | lazyHunterLoad = {} 3 | 4 | lazyHunterLoad.metadata = lazyScript.Metadata:new("LazyHunter") 5 | lazyHunterLoad.metadata:updateRevisionFromKeyword("$Revision: 358 $") 6 | 7 | function lazyHunterLoad.OnLoad() 8 | -- Check that this player is the correct class 9 | local localeClass, class = UnitClass("player") 10 | if class ~= "HUNTER" then 11 | return 12 | end 13 | 14 | -- Check that we're compatible with LazyScript 15 | if not lazyScript.CheckCompatibility(lazyHunterLoad.metadata) then 16 | return 17 | end 18 | 19 | -- I like everything with the same name. It makes S&R so easy 20 | lazyHunter = lazyScript 21 | lazyHunterLocale = lsLocale 22 | -- Unfortunately this overwrites everything that we already had called lazyHunter. 23 | -- Load everything else in class specific files using these loading functions 24 | -- Localization must be loaded first! 25 | lazyHunterLoad.LoadHunterLocalization(GetLocale()) 26 | lazyHunterLoad.LoadParseHunter() 27 | 28 | this:RegisterEvent("PLAYER_LOGIN") 29 | this:RegisterEvent("VARIABLES_LOADED") 30 | end 31 | 32 | function lazyHunterLoad.OnEvent() 33 | if (event == "VARIABLES_LOADED") then 34 | -- Nothing yet 35 | 36 | elseif (event == "PLAYER_LOGIN") then 37 | lazyHunter.chat(lazyHunterLoad.metadata:getNameVersionRevisionString()..HUNTER_ADDON_LOADED..lazyScript.metadata.name.."!") 38 | 39 | end 40 | end -------------------------------------------------------------------------------- /LazyHunter/LazyHunter.toc: -------------------------------------------------------------------------------- 1 | ## Interface: 11200 2 | ## Title: LazyScript - |cffff770CLazy|r|cffffffffHunter|r 3 | ## Version: 1.0.2 4 | ## X-Revision: $Revision: 747 $ 5 | ## X-LazyScriptCompatibility: 3 6 | ## Notes: Programmable Hunter Attacks. 7 | ## Notes-ruRU: Программируемые атаки охотника. 8 | ## RequiredDeps: LazyScript 9 | ## OptionalDeps: MobInfo-2, Tracer 10 | ## LoadOnDemand: 1 11 | ## X-LazyScriptVersion: 1.0 12 | 13 | LazyHunter.lua 14 | ParseHunter.lua 15 | Localization.lua 16 | LazyHunter.xml -------------------------------------------------------------------------------- /LazyHunter/LazyHunter.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 9 | lazyHunterLoad.metadata:updateRevisionFromKeyword("$Revision: 171 $") 10 | lazyHunterLoad.OnLoad() 11 | 12 | 13 | lazyHunterLoad.OnEvent() 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | this:SetOwner(this, "ANCHOR_NONE") 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /LazyMage/LazyMage.lua: -------------------------------------------------------------------------------- 1 | lazyMage = {} 2 | lazyMageLoad = {} 3 | 4 | lazyMageLoad.metadata = lazyScript.Metadata:new("LazyMage") 5 | lazyMageLoad.metadata:updateRevisionFromKeyword("$Revision: 571 $") 6 | 7 | function lazyMageLoad.OnLoad() 8 | -- Check that this player is the correct class 9 | local localeClass, class = UnitClass("player") 10 | if class ~= "MAGE" then 11 | return 12 | end 13 | 14 | -- Check that we're compatible with LazyScript 15 | if not lazyScript.CheckCompatibility(lazyMageLoad.metadata) then 16 | return 17 | end 18 | 19 | -- I like everything with the same name. It makes S&R so easy 20 | lazyMage = lazyScript 21 | lazyMageLocale = lsLocale 22 | -- Unfortunately this overwrites everything that we already had called lazyMage. 23 | -- Load everything else in class specific files using these loading functions 24 | -- Localization must be loaded first! 25 | lazyMageLoad.LoadMageLocalization(GetLocale()) 26 | lazyMageLoad.LoadParseMage() 27 | 28 | this:RegisterEvent("VARIABLES_LOADED") 29 | this:RegisterEvent("PLAYER_LOGIN") 30 | 31 | this:RegisterEvent("BAG_UPDATE") 32 | end 33 | 34 | function lazyMageLoad.OnEvent() 35 | if (event == "BAG_UPDATE") then 36 | lazyMage.CheckStones() 37 | elseif (event == "VARIABLES_LOADED") then 38 | -- Nothing yet 39 | 40 | elseif (event == "PLAYER_LOGIN") then 41 | lazyMage.chat(lazyMageLoad.metadata:getNameVersionRevisionString()..MAGE_ADDON_LOADED..lazyScript.metadata.name.."!") 42 | end 43 | end -------------------------------------------------------------------------------- /LazyMage/LazyMage.toc: -------------------------------------------------------------------------------- 1 | ## Interface: 11200 2 | ## Title: LazyScript - |cffff770CLazy|r|cffffffffMage|r 3 | ## Version: 1.0-alpha18 4 | ## X-Revision: $Revision: 747 $ 5 | ## X-LazyScriptCompatibility: 3 6 | ## Notes: Programmable Mage Attacks. 7 | ## Notes-ruRU: Программируемые атаки мага. 8 | ## RequiredDeps: LazyScript 9 | ## OptionalDeps: MobInfo-2, Tracer 10 | ## LoadOnDemand: 1 11 | ## X-LazyScriptVersion: 1.0 12 | 13 | LazyMage.lua 14 | ParseMage.lua 15 | Localization.lua 16 | LazyMage.xml -------------------------------------------------------------------------------- /LazyMage/LazyMage.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 9 | lazyMageLoad.metadata:updateRevisionFromKeyword("$Revision: 171 $") 10 | lazyMageLoad.OnLoad() 11 | 12 | 13 | lazyMageLoad.OnEvent() 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | this:SetOwner(this, "ANCHOR_NONE") 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /LazyMage/Localization.lua: -------------------------------------------------------------------------------- 1 | lazyMageLoad.metadata:updateRevisionFromKeyword("$Revision: 689 $") 2 | 3 | function lazyMageLoad.LoadMageLocalization(locale) 4 | 5 | lazyMageLocale.enUS.ACTION_TTS.amplifyMagic = "Amplify Magic" 6 | lazyMageLocale.enUS.ACTION_TTS.arcanePower = "Arcane Power" 7 | lazyMageLocale.enUS.ACTION_TTS.arcaneRupture = "Arcane Rupture" --TWOW 8 | lazyMageLocale.enUS.ACTION_TTS.arcaneSurge = "Arcane Surge" --TWOW 9 | lazyMageLocale.enUS.ACTION_TTS.blastWave = "Blast Wave" 10 | lazyMageLocale.enUS.ACTION_TTS.blink = "Blink" 11 | lazyMageLocale.enUS.ACTION_TTS.blizzard = "Blizzard" 12 | lazyMageLocale.enUS.ACTION_TTS.brilliance = "Arcane Brilliance" 13 | lazyMageLocale.enUS.ACTION_TTS.coldSnap = "Cold Snap" 14 | lazyMageLocale.enUS.ACTION_TTS.combustion = "Combustion" 15 | lazyMageLocale.enUS.ACTION_TTS.coneCold = "Cone of Cold" 16 | lazyMageLocale.enUS.ACTION_TTS.conjureAgate = "Conjure Mana Agate" 17 | lazyMageLocale.enUS.ACTION_TTS.conjureCitrine = "Conjure Mana Citrine" 18 | lazyMageLocale.enUS.ACTION_TTS.conjureFood = "Conjure Food" 19 | lazyMageLocale.enUS.ACTION_TTS.conjureJade = "Conjure Mana Jade" 20 | lazyMageLocale.enUS.ACTION_TTS.conjureRuby = "Conjure Mana Ruby" 21 | lazyMageLocale.enUS.ACTION_TTS.conjureWater = "Conjure Water" 22 | lazyMageLocale.enUS.ACTION_TTS.counter = "Counterspell" 23 | lazyMageLocale.enUS.ACTION_TTS.dampenMagic = "Dampen Magic" 24 | lazyMageLocale.enUS.ACTION_TTS.detectMagic = "Detect Magic" 25 | lazyMageLocale.enUS.ACTION_TTS.evocation = "Evocation" 26 | lazyMageLocale.enUS.ACTION_TTS.explosion = "Arcane Explosion" 27 | lazyMageLocale.enUS.ACTION_TTS.fireball = "Fireball" 28 | lazyMageLocale.enUS.ACTION_TTS.fireBlast = "Fire Blast" 29 | lazyMageLocale.enUS.ACTION_TTS.fireWard = "Fire Ward" 30 | lazyMageLocale.enUS.ACTION_TTS.flamestrike = "Flamestrike" 31 | lazyMageLocale.enUS.ACTION_TTS.frostArmor = "Frost Armor" 32 | lazyMageLocale.enUS.ACTION_TTS.frostbolt = "Frostbolt" 33 | lazyMageLocale.enUS.ACTION_TTS.frostNova = "Frost Nova" 34 | lazyMageLocale.enUS.ACTION_TTS.frostWard = "Frost Ward" 35 | lazyMageLocale.enUS.ACTION_TTS.iceArmor = "Ice Armor" 36 | lazyMageLocale.enUS.ACTION_TTS.iceBarrier = "Ice Barrier" 37 | lazyMageLocale.enUS.ACTION_TTS.iceBlock = "Ice Block" 38 | lazyMageLocale.enUS.ACTION_TTS.intellect = "Arcane Intellect" 39 | lazyMageLocale.enUS.ACTION_TTS.mageArmor = "Mage Armor" 40 | lazyMageLocale.enUS.ACTION_TTS.manaShield = "Mana Shield" 41 | lazyMageLocale.enUS.ACTION_TTS.missiles = "Arcane Missiles" 42 | lazyMageLocale.enUS.ACTION_TTS.pig = "Polymorph: Pig" 43 | lazyMageLocale.enUS.ACTION_TTS.pom = "Presence of Mind" 44 | lazyMageLocale.enUS.ACTION_TTS.pyroblast = "Pyroblast" 45 | lazyMageLocale.enUS.ACTION_TTS.removeCurse = "Remove Curse" 46 | lazyMageLocale.enUS.ACTION_TTS.scorch = "Scorch" 47 | lazyMageLocale.enUS.ACTION_TTS.sheep = "Polymorph" 48 | lazyMageLocale.enUS.ACTION_TTS.slowFall = "Slow Fall" 49 | lazyMageLocale.enUS.ACTION_TTS.teleDarnassus = "Teleport: Darnassus" 50 | lazyMageLocale.enUS.ACTION_TTS.teleIronforge = "Teleport: Ironforge" 51 | lazyMageLocale.enUS.ACTION_TTS.teleOgrimmar = "Teleport: Ogrimmar" 52 | lazyMageLocale.enUS.ACTION_TTS.teleStormwind = "Teleport: Stormwind" 53 | lazyMageLocale.enUS.ACTION_TTS.teleThunderBluff = "Teleport: Thunder Bluff" 54 | lazyMageLocale.enUS.ACTION_TTS.teleUndercity = "Teleport: Undercity" 55 | lazyMageLocale.enUS.ACTION_TTS.turtle = "Polymorph: Turtle" 56 | lazyMageLocale.enUS.ACTION_TTS.portDarnassus = "Portal: Darnassus" 57 | lazyMageLocale.enUS.ACTION_TTS.portIronforge = "Portal: Ironforge" 58 | lazyMageLocale.enUS.ACTION_TTS.portOgrimmar = "Portal: Ogrimmar" 59 | lazyMageLocale.enUS.ACTION_TTS.portStormwind = "Portal: Stormwind" 60 | lazyMageLocale.enUS.ACTION_TTS.portThunderBluff = "Portal: Thunder Bluff" 61 | lazyMageLocale.enUS.ACTION_TTS.portUndercity = "Portal: Undercity" 62 | 63 | -- LazyMage.lua 64 | MAGE_ADDON_LOADED = " loaded. Powered by " 65 | 66 | -- ParseMage.lua 67 | function lazyMage.CustomLocaleHelp() return [[

Mage Criteria:

]] end 68 | 69 | if (locale == "ruRU") then 70 | 71 | lazyMageLocale.ruRU.ACTION_TTS.amplifyMagic = "Усиление магии" 72 | lazyMageLocale.ruRU.ACTION_TTS.arcanePower = "Мощь тайной магии" 73 | lazyMageLocale.ruRU.ACTION_TTS.blastWave = "Взрывная волна" 74 | lazyMageLocale.ruRU.ACTION_TTS.blink = "Скачок" 75 | lazyMageLocale.ruRU.ACTION_TTS.blizzard = "Снежная буря" 76 | lazyMageLocale.ruRU.ACTION_TTS.brilliance = "Чародейская гениальность" 77 | lazyMageLocale.ruRU.ACTION_TTS.coldSnap = "Холодная хватка" 78 | lazyMageLocale.ruRU.ACTION_TTS.combustion = "Возгорание" 79 | lazyMageLocale.ruRU.ACTION_TTS.coneCold = "Конус холода" 80 | lazyMageLocale.ruRU.ACTION_TTS.conjureAgate = "Сотворение агата маны" 81 | lazyMageLocale.ruRU.ACTION_TTS.conjureCitrine = "Сотворение цитрина маны" 82 | lazyMageLocale.ruRU.ACTION_TTS.conjureFood = "Сотворение пищи" 83 | lazyMageLocale.ruRU.ACTION_TTS.conjureJade = "Сотворение нефрита маны" 84 | lazyMageLocale.ruRU.ACTION_TTS.conjureRuby = "Сотворение рубина маны" 85 | lazyMageLocale.ruRU.ACTION_TTS.conjureWater = "Сотворение воды" 86 | lazyMageLocale.ruRU.ACTION_TTS.counter = "Антимагия" 87 | lazyMageLocale.ruRU.ACTION_TTS.dampenMagic = "Ослабление магии" 88 | lazyMageLocale.ruRU.ACTION_TTS.detectMagic = "Распознавание магии" 89 | lazyMageLocale.ruRU.ACTION_TTS.evocation = "Прилив сил" 90 | lazyMageLocale.ruRU.ACTION_TTS.explosion = "Чародейский взрыв" 91 | lazyMageLocale.ruRU.ACTION_TTS.fireball = "Огненный шар" 92 | lazyMageLocale.ruRU.ACTION_TTS.fireBlast = "Огненный взрыв" 93 | lazyMageLocale.ruRU.ACTION_TTS.fireWard = "Защита от огня" 94 | lazyMageLocale.ruRU.ACTION_TTS.flamestrike = "Огненный столб" 95 | lazyMageLocale.ruRU.ACTION_TTS.frostArmor = "Морозный доспех" 96 | lazyMageLocale.ruRU.ACTION_TTS.frostbolt = "Ледяная стрела" 97 | lazyMageLocale.ruRU.ACTION_TTS.frostNova = "Кольцо льда" 98 | lazyMageLocale.ruRU.ACTION_TTS.frostWard = "Защита от магии льда" 99 | lazyMageLocale.ruRU.ACTION_TTS.iceArmor = "Ледяной доспех" 100 | lazyMageLocale.ruRU.ACTION_TTS.iceBarrier = "Ледяная преграда" 101 | lazyMageLocale.ruRU.ACTION_TTS.iceBlock = "Ледяная глыба" 102 | lazyMageLocale.ruRU.ACTION_TTS.intellect = "Чародейский интеллект" 103 | lazyMageLocale.ruRU.ACTION_TTS.mageArmor = "Магический доспех" 104 | lazyMageLocale.ruRU.ACTION_TTS.manaShield = "Щит маны" 105 | lazyMageLocale.ruRU.ACTION_TTS.missiles = "Чародейские стрелы" 106 | lazyMageLocale.ruRU.ACTION_TTS.pig = "Превращение: свинья" 107 | lazyMageLocale.ruRU.ACTION_TTS.pom = "Величие разума" 108 | lazyMageLocale.ruRU.ACTION_TTS.pyroblast = "Огненная глыба" 109 | lazyMageLocale.ruRU.ACTION_TTS.removeCurse = "Снятие проклятия" 110 | lazyMageLocale.ruRU.ACTION_TTS.scorch = "Ожог" 111 | lazyMageLocale.ruRU.ACTION_TTS.sheep = "Превращение" 112 | lazyMageLocale.ruRU.ACTION_TTS.slowFall = "Замедленное падение" 113 | lazyMageLocale.ruRU.ACTION_TTS.teleDarnassus = "Телепортация: Дарнас" 114 | lazyMageLocale.ruRU.ACTION_TTS.teleIronforge = "Телепортация: Стальгорн" 115 | lazyMageLocale.ruRU.ACTION_TTS.teleOgrimmar = "Телепортация: Оргриммар" 116 | lazyMageLocale.ruRU.ACTION_TTS.teleStormwind = "Телепортация: Штормград" 117 | lazyMageLocale.ruRU.ACTION_TTS.teleThunderBluff = "Телепортация: Громовой Утес" 118 | lazyMageLocale.ruRU.ACTION_TTS.teleUndercity = "Телепортация: Подгород" 119 | lazyMageLocale.ruRU.ACTION_TTS.turtle = "Превращение: черепаха" 120 | lazyMageLocale.ruRU.ACTION_TTS.portDarnassus = "Портал: Дарнас" 121 | lazyMageLocale.ruRU.ACTION_TTS.portIronforge = "Портал в Стальгорн" 122 | lazyMageLocale.ruRU.ACTION_TTS.portOgrimmar = "Портал в Оргриммар" 123 | lazyMageLocale.ruRU.ACTION_TTS.portStormwind = "Портал в Штормград" 124 | lazyMageLocale.ruRU.ACTION_TTS.portThunderBluff = "Портал в Громовой Утес" 125 | lazyMageLocale.ruRU.ACTION_TTS.portUndercity = "Портал в Подгород" 126 | 127 | -- LazyMage.lua 128 | MAGE_ADDON_LOADED = " загружен. Работает от " 129 | 130 | -- ParseMage.lua 131 | function lazyMage.CustomLocaleHelp() return [[

Критерии Мага:

]] end 132 | 133 | elseif (locale == "deDE") then 134 | 135 | lazyMageLocale.deDE.ACTION_TTS.conjureAgate = "Mana-Achat herbeizaubern" 136 | lazyMageLocale.deDE.ACTION_TTS.conjureCitrine = "Mana-Citrin herbeizaubern" 137 | lazyMageLocale.deDE.ACTION_TTS.conjureJade = "Mana-Jadestein herbeizaubern" 138 | lazyMageLocale.deDE.ACTION_TTS.conjureRuby = "Mana-Rubin herbeizaubern" 139 | lazyMageLocale.deDE.ACTION_TTS.explosion = "Arkane Explosion" 140 | lazyMageLocale.deDE.ACTION_TTS.frostArmor = "Frostr\195\188stung" 141 | lazyMageLocale.deDE.ACTION_TTS.iceArmor = "Eisr\195\188stung" 142 | 143 | elseif (locale == "frFR") then 144 | 145 | lazyMageLocale.frFR.ACTION_TTS.conjureAgate = "Invocation d'une agate de mana" 146 | lazyMageLocale.frFR.ACTION_TTS.conjureCitrine = "Invocation d'une citrine de mana" 147 | lazyMageLocale.frFR.ACTION_TTS.conjureJade = "Invocation d'une jade de mana" 148 | lazyMageLocale.frFR.ACTION_TTS.conjureRuby = "Invocation d'un rubis de mana" 149 | lazyMageLocale.frFR.ACTION_TTS.explosion = "Explosion des arcanes" 150 | lazyMageLocale.frFR.ACTION_TTS.frostArmor = "Armure de givre" 151 | lazyMageLocale.frFR.ACTION_TTS.iceArmor = "Armure de glace" 152 | 153 | end 154 | end -------------------------------------------------------------------------------- /LazyPaladin/LazyPaladin.lua: -------------------------------------------------------------------------------- 1 | lazyPaladin = {} 2 | lazyPaladinLoad = {} 3 | 4 | lazyPaladinLoad.metadata = lazyScript.Metadata:new("LazyPaladin") 5 | lazyPaladinLoad.metadata:updateRevisionFromKeyword("$Revision: 358 $") 6 | 7 | function lazyPaladinLoad.OnLoad() 8 | -- Check that this player is the correct class 9 | local localeClass, class = UnitClass("player") 10 | if class ~= "PALADIN" then 11 | return 12 | end 13 | 14 | -- Check that we're compatible with LazyScript 15 | if not lazyScript.CheckCompatibility(lazyPaladinLoad.metadata) then 16 | return 17 | end 18 | 19 | -- I like everything with the same name. It makes S&R so easy 20 | lazyPaladin = lazyScript 21 | lazyPaladinLocale = lsLocale 22 | -- Unfortunately this overwrites everything that we already had called lazyPaladin. 23 | -- Load everything else in class specific files using these loading functions 24 | -- Localization must be loaded first! 25 | lazyPaladinLoad.LoadPaladinLocalization(GetLocale()) 26 | lazyPaladinLoad.LoadParsePaladin() 27 | 28 | this:RegisterEvent("VARIABLES_LOADED") 29 | this:RegisterEvent("PLAYER_LOGIN") 30 | end 31 | 32 | function lazyPaladinLoad.OnEvent() 33 | if (event == "VARIABLES_LOADED") then 34 | -- Nothing yet 35 | 36 | elseif (event == "PLAYER_LOGIN") then 37 | lazyPaladin.chat(lazyPaladinLoad.metadata:getNameVersionRevisionString()..PALADIN_ADDON_LOADED..lazyScript.metadata.name.."!") 38 | end 39 | end -------------------------------------------------------------------------------- /LazyPaladin/LazyPaladin.toc: -------------------------------------------------------------------------------- 1 | ## Interface: 11200 2 | ## Title: LazyScript - |cffff770CLazy|r|cffffffffPaladin|r 3 | ## Version: 1.0-alpha18 4 | ## X-Revision: $Revision: 747 $ 5 | ## X-LazyScriptCompatibility: 3 6 | ## Notes: Programmable Paladin Attacks. 7 | ## Notes-ruRU: Программируемые атаки паладина. 8 | ## RequiredDeps: LazyScript 9 | ## OptionalDeps: MobInfo-2, Tracer 10 | ## LoadOnDemand: 1 11 | ## X-LazyScriptVersion: 1.0 12 | 13 | LazyPaladin.lua 14 | ParsePaladin.lua 15 | Localization.lua 16 | LazyPaladin.xml -------------------------------------------------------------------------------- /LazyPaladin/LazyPaladin.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 9 | lazyPaladinLoad.metadata:updateRevisionFromKeyword("$Revision: 171 $") 10 | lazyPaladinLoad.OnLoad() 11 | 12 | 13 | lazyPaladinLoad.OnEvent() 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | this:SetOwner(this, "ANCHOR_NONE") 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /LazyPaladin/Localization.lua: -------------------------------------------------------------------------------- 1 | lazyPaladinLoad.metadata:updateRevisionFromKeyword("$Revision: 715 $") 2 | 3 | function lazyPaladinLoad.LoadPaladinLocalization(locale) 4 | 5 | lazyPaladinLocale.enUS.ACTION_TTS.concAura = "Concentration Aura" 6 | lazyPaladinLocale.enUS.ACTION_TTS.devAura = "Devotion Aura" 7 | lazyPaladinLocale.enUS.ACTION_TTS.fireAura = "Fire Resistance Aura" 8 | lazyPaladinLocale.enUS.ACTION_TTS.frostAura = "Frost Resistance Aura" 9 | lazyPaladinLocale.enUS.ACTION_TTS.retAura = "Retribution Aura" 10 | lazyPaladinLocale.enUS.ACTION_TTS.sanctAura = "Sanctity Aura" 11 | lazyPaladinLocale.enUS.ACTION_TTS.shadowAura = "Shadow Resistance Aura" 12 | lazyPaladinLocale.enUS.ACTION_TTS.blessFree = "Blessing of Freedom" 13 | lazyPaladinLocale.enUS.ACTION_TTS.blessKings = "Blessing of Kings" 14 | lazyPaladinLocale.enUS.ACTION_TTS.blessLight = "Blessing of Light" 15 | lazyPaladinLocale.enUS.ACTION_TTS.blessMight = "Blessing of Might" 16 | lazyPaladinLocale.enUS.ACTION_TTS.blessProt = "Blessing of Protection" 17 | lazyPaladinLocale.enUS.ACTION_TTS.blessSac = "Blessing of Sacrifice" 18 | lazyPaladinLocale.enUS.ACTION_TTS.blessSlv = "Blessing of Salvation" 19 | lazyPaladinLocale.enUS.ACTION_TTS.blessSnct = "Blessing of Sanctuary" 20 | lazyPaladinLocale.enUS.ACTION_TTS.blessWisdom = "Blessing of Wisdom" 21 | lazyPaladinLocale.enUS.ACTION_TTS.cleanse = "Cleanse" 22 | lazyPaladinLocale.enUS.ACTION_TTS.consecrate = "Consecration" 23 | lazyPaladinLocale.enUS.ACTION_TTS.crusaderStrike= "Crusader Strike" 24 | lazyPaladinLocale.enUS.ACTION_TTS.divFavor = "Divine Favor" 25 | lazyPaladinLocale.enUS.ACTION_TTS.divIntr = "Divine Intervention" 26 | lazyPaladinLocale.enUS.ACTION_TTS.divProt = "Divine Protection" 27 | lazyPaladinLocale.enUS.ACTION_TTS.divShield = "Divine Shield" 28 | lazyPaladinLocale.enUS.ACTION_TTS.exorcism = "Exorcism" 29 | lazyPaladinLocale.enUS.ACTION_TTS.flashLight = "Flash of Light" 30 | lazyPaladinLocale.enUS.ACTION_TTS.gBlessKings = "Greater Blessing of Kings" 31 | lazyPaladinLocale.enUS.ACTION_TTS.gBlessLight = "Greater Blessing of Light" 32 | lazyPaladinLocale.enUS.ACTION_TTS.gBlessMight = "Greater Blessing of Might" 33 | lazyPaladinLocale.enUS.ACTION_TTS.gBlessSlv = "Greater Blessing of Salvation" 34 | lazyPaladinLocale.enUS.ACTION_TTS.gBlessSnct = "Greater Blessing of Sanctuary" 35 | lazyPaladinLocale.enUS.ACTION_TTS.gBlessWisdom = "Greater Blessing of Wisdom" 36 | lazyPaladinLocale.enUS.ACTION_TTS.handFreedom = "Hand of Freedom" 37 | lazyPaladinLocale.enUS.ACTION_TTS.handProt = "Hand of Protection" 38 | lazyPaladinLocale.enUS.ACTION_TTS.hmrJustice = "Hammer of Justice" 39 | lazyPaladinLocale.enUS.ACTION_TTS.hmrWrath = "Hammer of Wrath" 40 | lazyPaladinLocale.enUS.ACTION_TTS.holyLight = "Holy Light" 41 | lazyPaladinLocale.enUS.ACTION_TTS.holyShield = "Holy Shield" 42 | lazyPaladinLocale.enUS.ACTION_TTS.holyShock = "Holy Shock" 43 | lazyPaladinLocale.enUS.ACTION_TTS.holyStrike = "Holy Strike" 44 | lazyPaladinLocale.enUS.ACTION_TTS.holyWrath = "Holy Wrath" 45 | lazyPaladinLocale.enUS.ACTION_TTS.judge = "Judgement" 46 | lazyPaladinLocale.enUS.ACTION_TTS.layOnHands = "Lay on Hands" 47 | lazyPaladinLocale.enUS.ACTION_TTS.purify = "Purify" 48 | lazyPaladinLocale.enUS.ACTION_TTS.redemption = "Redemption" 49 | lazyPaladinLocale.enUS.ACTION_TTS.repentance = "Repentance" 50 | lazyPaladinLocale.enUS.ACTION_TTS.rightFury = "Righteous Fury" 51 | lazyPaladinLocale.enUS.ACTION_TTS.sealCommand = "Seal of Command" 52 | lazyPaladinLocale.enUS.ACTION_TTS.sealCrusader = "Seal of the Crusader" 53 | lazyPaladinLocale.enUS.ACTION_TTS.sealJustice = "Seal of Justice" 54 | lazyPaladinLocale.enUS.ACTION_TTS.sealLight = "Seal of Light" 55 | lazyPaladinLocale.enUS.ACTION_TTS.sealRight = "Seal of Righteousness" 56 | lazyPaladinLocale.enUS.ACTION_TTS.sealWisdom = "Seal of Wisdom" 57 | lazyPaladinLocale.enUS.ACTION_TTS.senseUndead = "Sense Undead" 58 | lazyPaladinLocale.enUS.ACTION_TTS.smnCharger = "Summon Charger" 59 | lazyPaladinLocale.enUS.ACTION_TTS.smnWarhorse = "Summon Warhorse" 60 | lazyPaladinLocale.enUS.ACTION_TTS.turnUndead = "Turn Undead" 61 | 62 | -- LazyPaladin.lua 63 | PALADIN_ADDON_LOADED = " loaded. Powered by " 64 | 65 | -- ParsePaladin.lua 66 | function lazyPaladin.CustomLocaleHelp() return [[

Paladin Criteria:

]] end 67 | 68 | if (locale == "ruRU") then 69 | 70 | lazyPaladinLocale.ruRU.ACTION_TTS.concAura = "Аура сосредоточенности" 71 | lazyPaladinLocale.ruRU.ACTION_TTS.devAura = "Аура благочестия" 72 | lazyPaladinLocale.ruRU.ACTION_TTS.fireAura = "Аура сопротивления огню" 73 | lazyPaladinLocale.ruRU.ACTION_TTS.frostAura = "Аура сопротивления магии льда" 74 | lazyPaladinLocale.ruRU.ACTION_TTS.retAura = "Аура воздаяния" 75 | lazyPaladinLocale.ruRU.ACTION_TTS.sanctAura = "Аура святости" 76 | lazyPaladinLocale.ruRU.ACTION_TTS.shadowAura = "Аура сопротивления темной магии" 77 | lazyPaladinLocale.ruRU.ACTION_TTS.blessFree = "Благословение свободы" 78 | lazyPaladinLocale.ruRU.ACTION_TTS.blessKings = "Благословение королей" 79 | lazyPaladinLocale.ruRU.ACTION_TTS.blessLight = "Благословение Света" 80 | lazyPaladinLocale.ruRU.ACTION_TTS.blessMight = "Благословение могущества" 81 | lazyPaladinLocale.ruRU.ACTION_TTS.blessProt = "Благословение защиты" 82 | lazyPaladinLocale.ruRU.ACTION_TTS.blessSac = "Благословение жертвенности" 83 | lazyPaladinLocale.ruRU.ACTION_TTS.blessSlv = "Благословение спасения" 84 | lazyPaladinLocale.ruRU.ACTION_TTS.blessSnct = "Благословение неприкосновенности" 85 | lazyPaladinLocale.ruRU.ACTION_TTS.blessWisdom = "Благословение мудрости" 86 | lazyPaladinLocale.ruRU.ACTION_TTS.cleanse = "Очищение" 87 | lazyPaladinLocale.ruRU.ACTION_TTS.consecrate = "Освящение" 88 | lazyPaladinLocale.ruRU.ACTION_TTS.divFavor = "Божественное одобрение" 89 | lazyPaladinLocale.ruRU.ACTION_TTS.divIntr = "Божественное вмешательство" 90 | lazyPaladinLocale.ruRU.ACTION_TTS.divProt = "Божественная защита" 91 | lazyPaladinLocale.ruRU.ACTION_TTS.divShield = "Божественный щит" 92 | lazyPaladinLocale.ruRU.ACTION_TTS.exorcism = "Экзорцизм" 93 | lazyPaladinLocale.ruRU.ACTION_TTS.flashLight = "Вспышка Света" 94 | lazyPaladinLocale.ruRU.ACTION_TTS.gBlessKings = "Великое благословение королей" 95 | lazyPaladinLocale.ruRU.ACTION_TTS.gBlessLight = "Великое благословение Света" 96 | lazyPaladinLocale.ruRU.ACTION_TTS.gBlessMight = "Великое благословение могущества" 97 | lazyPaladinLocale.ruRU.ACTION_TTS.gBlessSlv = "Великое благословение спасения" 98 | lazyPaladinLocale.ruRU.ACTION_TTS.gBlessSnct = "Великое благословение неприкосновенности" 99 | lazyPaladinLocale.ruRU.ACTION_TTS.gBlessWisdom = "Великое благословение мудрости" 100 | lazyPaladinLocale.ruRU.ACTION_TTS.hmrJustice = "Молот правосудия" 101 | lazyPaladinLocale.ruRU.ACTION_TTS.hmrWrath = "Молот гнева" 102 | lazyPaladinLocale.ruRU.ACTION_TTS.holyLight = "Свет небес" 103 | lazyPaladinLocale.ruRU.ACTION_TTS.holyShield = "Щит небес" 104 | lazyPaladinLocale.ruRU.ACTION_TTS.holyShock = "Шок небес" 105 | lazyPaladinLocale.ruRU.ACTION_TTS.holyWrath = "Гнев небес" 106 | lazyPaladinLocale.ruRU.ACTION_TTS.judge = "Правосудие" 107 | lazyPaladinLocale.ruRU.ACTION_TTS.layOnHands = "Возложение рук" 108 | lazyPaladinLocale.ruRU.ACTION_TTS.purify = "Омовение" 109 | lazyPaladinLocale.ruRU.ACTION_TTS.redemption = "Искупление" 110 | lazyPaladinLocale.ruRU.ACTION_TTS.repentance = "Покаяние" 111 | lazyPaladinLocale.ruRU.ACTION_TTS.rightFury = "Праведное неистовство" 112 | lazyPaladinLocale.ruRU.ACTION_TTS.sealCommand = "Печать повиновения" 113 | lazyPaladinLocale.ruRU.ACTION_TTS.sealCrusader = "Печать воина Света" 114 | lazyPaladinLocale.ruRU.ACTION_TTS.sealJustice = "Печать справедливости" 115 | lazyPaladinLocale.ruRU.ACTION_TTS.sealLight = "Печать Света" 116 | lazyPaladinLocale.ruRU.ACTION_TTS.sealRight = "Печать праведности" 117 | lazyPaladinLocale.ruRU.ACTION_TTS.sealWisdom = "Печать мудрости" 118 | lazyPaladinLocale.ruRU.ACTION_TTS.senseUndead = "Чутье на нежить" 119 | lazyPaladinLocale.ruRU.ACTION_TTS.smnCharger = "Призыв скакуна" 120 | lazyPaladinLocale.ruRU.ACTION_TTS.smnWarhorse = "Призыв боевого коня" 121 | lazyPaladinLocale.ruRU.ACTION_TTS.turnUndead = "Изгнание нежити" 122 | 123 | -- LazyPaladin.lua 124 | PALADIN_ADDON_LOADED = " загружен. Работает от " 125 | 126 | -- ParsePaladin.lua 127 | function lazyPaladin.CustomLocaleHelp() return [[H2>Критерии Паладина:]] end 128 | 129 | end 130 | end 131 | -------------------------------------------------------------------------------- /LazyPaladin/ParsePaladin.lua: -------------------------------------------------------------------------------- 1 | lazyPaladinLoad.metadata:updateRevisionFromKeyword("$Revision: 715 $") 2 | 3 | -- The functions and data inside this block will not be defined unless the user is a Paladin. 4 | 5 | function lazyPaladinLoad.LoadParsePaladin() 6 | 7 | -- Paladin actions 8 | ----------------- 9 | -- The lazyPaladin.actions. must match the short name so that we only need additional 10 | -- bitParsing functions for special cases. 11 | 12 | lazyPaladin.actions.blessFree = lazyPaladin.Action:New("blessFree", "Spell_Holy_SealOfValor") 13 | lazyPaladin.actions.blessKings = lazyPaladin.Action:New("blessKings", "Spell_Magic_MageArmor") 14 | lazyPaladin.actions.blessLight = lazyPaladin.Action:New("blessLight", "Spell_Holy_PrayerOfHealing02") 15 | lazyPaladin.actions.blessMight = lazyPaladin.Action:New("blessMight", "Spell_Holy_FistOfJustice") 16 | lazyPaladin.actions.blessProt = lazyPaladin.Action:New("blessProt", "Spell_Holy_SealOfProtection") 17 | lazyPaladin.actions.blessSac = lazyPaladin.Action:New("blessSac", "Spell_Holy_SealOfSacrifice") 18 | lazyPaladin.actions.blessSlv = lazyPaladin.Action:New("blessSlv", "Spell_Holy_SealOfSalvation") 19 | lazyPaladin.actions.blessSnct = lazyPaladin.Action:New("blessSnct", "Spell_Nature_LightningShield") 20 | lazyPaladin.actions.blessWisdom = lazyPaladin.Action:New("blessWisdom", "Spell_Holy_SealOfWisdom") 21 | lazyPaladin.actions.cleanse = lazyPaladin.Action:New("cleanse", "Spell_Holy_Renew") 22 | lazyPaladin.actions.crusaderStrike = lazyPaladin.Action:New("crusaderStrike", "Spell_Holy_CrusaderStrike") 23 | lazyPaladin.actions.consecrate = lazyPaladin.Action:New("consecrate", "Spell_Holy_InnerFire") 24 | lazyPaladin.actions.divFavor = lazyPaladin.Action:New("divFavor", "Spell_Holy_Heal") 25 | lazyPaladin.actions.divIntr = lazyPaladin.Action:New("divIntr", "Spell_Nature_TimeStop") 26 | lazyPaladin.actions.divProt = lazyPaladin.Action:New("divProt", "Spell_Holy_Restoration") 27 | lazyPaladin.actions.divShield = lazyPaladin.Action:New("divShield", "Spell_Holy_DivineIntervention") -- yes, this is the right texture 28 | lazyPaladin.actions.exorcism = lazyPaladin.Action:New("exorcism", "Spell_Holy_Excorcism_02") 29 | lazyPaladin.actions.flashLight = lazyPaladin.Action:New("flashLight", "Spell_Holy_FlashHeal") 30 | lazyPaladin.actions.gBlessKings = lazyPaladin.Action:New("gBlessKings", "Spell_Magic_GreaterBlessingofKings") 31 | lazyPaladin.actions.gBlessLight = lazyPaladin.Action:New("gBlessLight", "Spell_Holy_GreaterBlessingofLight") 32 | lazyPaladin.actions.gBlessMight = lazyPaladin.Action:New("gBlessMight", "Spell_Holy_GreaterBlessingofKings") 33 | lazyPaladin.actions.gBlessSlv = lazyPaladin.Action:New("gBlessSlv", "Spell_Holy_GreaterBlessingofSalvation") 34 | lazyPaladin.actions.gBlessSnct = lazyPaladin.Action:New("gBlessSnct", "Spell_Holy_GreaterBlessingofSanctuary") 35 | lazyPaladin.actions.gBlessWisdom = lazyPaladin.Action:New("gBlessWisdom", "Spell_Holy_GreaterBlessingofWisdom") 36 | lazyPaladin.actions.handFreedom = lazyPaladin.Action:New("handFreedom", "Spell_Holy_SealOfValor") 37 | lazyPaladin.actions.handProt = lazyPaladin.Action:New("handProt", "Spell_Holy_SealOfMight") 38 | lazyPaladin.actions.hmrJustice = lazyPaladin.Action:New("hmrJustice", "Spell_Holy_SealOfProtection") 39 | lazyPaladin.actions.hmrWrath = lazyPaladin.Action:New("hmrWrath", "Ability_ThunderClap") 40 | lazyPaladin.actions.holyLight = lazyPaladin.Action:New("holyLight", "Spell_Holy_HolyBolt") 41 | lazyPaladin.actions.holyShield = lazyPaladin.Action:New("holyShield", "Spell_Holy_BlessingOfProtection") 42 | lazyPaladin.actions.holyShock = lazyPaladin.Action:New("holyShock", "Spell_Holy_SearingLight") 43 | lazyPaladin.actions.holyStrike = lazyPaladin.Action:New("holyStrike", "INV_Sword_01") 44 | lazyPaladin.actions.holyWrath = lazyPaladin.Action:New("holyWrath", "Spell_Holy_Excorcism") 45 | lazyPaladin.actions.judge = lazyPaladin.Action:New("judge", "Spell_Holy_RighteousFury", nil, false) 46 | lazyPaladin.actions.layOnHands = lazyPaladin.Action:New("layOnHands", "Spell_Holy_LayOnHands") 47 | lazyPaladin.actions.purify = lazyPaladin.Action:New("purify", "Spell_Holy_Purify") 48 | lazyPaladin.actions.redemption = lazyPaladin.Action:New("redemption", "Spell_Holy_Resurrection") 49 | lazyPaladin.actions.repentance = lazyPaladin.Action:New("repentance", "Spell_Holy_PrayerOfHealing") 50 | lazyPaladin.actions.rightFury = lazyPaladin.Action:New("rightFury", "Spell_Holy_SealOfFury") 51 | lazyPaladin.actions.sealCommand = lazyPaladin.Action:New("sealCommand", "Ability_Warrior_InnerRage") 52 | lazyPaladin.actions.sealCrusader = lazyPaladin.Action:New("sealCrusader", "Spell_Holy_HolySmite") 53 | lazyPaladin.actions.sealJustice = lazyPaladin.Action:New("sealJustice", "Spell_Holy_SealOfWrath") 54 | lazyPaladin.actions.sealLight = lazyPaladin.Action:New("sealLight", "Spell_Holy_HealingAura") 55 | lazyPaladin.actions.sealRight = lazyPaladin.Action:New("sealRight", "Ability_ThunderBolt") 56 | lazyPaladin.actions.sealWisdom = lazyPaladin.Action:New("sealWisdom", "Spell_Holy_RighteousnessAura") 57 | lazyPaladin.actions.senseUndead = lazyPaladin.Action:New("senseUndead", "Spell_Holy_SenseUndead") 58 | lazyPaladin.actions.smnCharger = lazyPaladin.Action:New("smnCharger", "Ability_Mount_Charger") 59 | lazyPaladin.actions.smnWarhorse = lazyPaladin.Action:New("smnWarhorse", "Spell_Nature_Swiftness") 60 | lazyPaladin.actions.turnUndead = lazyPaladin.Action:New("turnUndead", "Spell_Holy_TurnUndead") 61 | 62 | lazyPaladin.shapeshift.concAura = lazyPaladin.ShapeshiftForm:New("concAura", "Spell_Holy_MindSooth") 63 | lazyPaladin.shapeshift.devAura = lazyPaladin.ShapeshiftForm:New("devAura", "Spell_Holy_DevotionAura") 64 | lazyPaladin.shapeshift.fireAura = lazyPaladin.ShapeshiftForm:New("fireAura", "Spell_Fire_SealOfFire") 65 | lazyPaladin.shapeshift.frostAura = lazyPaladin.ShapeshiftForm:New("frostAura", "Spell_Frost_WizardMark") 66 | lazyPaladin.shapeshift.retAura = lazyPaladin.ShapeshiftForm:New("retAura", "Spell_Holy_AuraOfLight") 67 | lazyPaladin.shapeshift.sanctAura = lazyPaladin.ShapeshiftForm:New("sanctAura", "Spell_Holy_MindVision") 68 | lazyPaladin.shapeshift.shadowAura = lazyPaladin.ShapeshiftForm:New("shadowAura", "Spell_Shadow_SealOfKings") 69 | 70 | 71 | -- Special Paladin actions 72 | ------------------------- 73 | -- Only include actions that require additional implicit conditions or non-standard action entries 74 | -- e.g. lazyPaladin.comboActions. or lazyPaladin.items., otherwise an entry in 75 | -- the list above should be sufficient. 76 | 77 | function lazyPaladin.bitParsers.concAura(bit, actions, masks) 78 | if (not lazyPaladin.rebit(bit, lazyPaladin.shapeshift.concAura.codePattern)) then 79 | return false 80 | end 81 | table.insert(actions, lazyPaladin.shapeshift.concAura) 82 | return true 83 | end 84 | 85 | function lazyPaladin.bitParsers.devAura(bit, actions, masks) 86 | if (not lazyPaladin.rebit(bit, lazyPaladin.shapeshift.devAura.codePattern)) then 87 | return false 88 | end 89 | table.insert(actions, lazyPaladin.shapeshift.devAura) 90 | return true 91 | end 92 | 93 | function lazyPaladin.bitParsers.fireAura(bit, actions, masks) 94 | if (not lazyPaladin.rebit(bit, lazyPaladin.shapeshift.fireAura.codePattern)) then 95 | return false 96 | end 97 | table.insert(actions, lazyPaladin.shapeshift.fireAura) 98 | return true 99 | end 100 | 101 | function lazyPaladin.bitParsers.frostAura(bit, actions, masks) 102 | if (not lazyPaladin.rebit(bit, lazyPaladin.shapeshift.frostAura.codePattern)) then 103 | return false 104 | end 105 | table.insert(actions, lazyPaladin.shapeshift.frostAura) 106 | return true 107 | end 108 | 109 | function lazyPaladin.bitParsers.retAura(bit, actions, masks) 110 | if (not lazyPaladin.rebit(bit, lazyPaladin.shapeshift.retAura.codePattern)) then 111 | return false 112 | end 113 | table.insert(actions, lazyPaladin.shapeshift.retAura) 114 | return true 115 | end 116 | 117 | function lazyPaladin.bitParsers.sanctAura(bit, actions, masks) 118 | if (not lazyPaladin.rebit(bit, lazyPaladin.shapeshift.sanctAura.codePattern)) then 119 | return false 120 | end 121 | table.insert(actions, lazyPaladin.shapeshift.sanctAura) 122 | return true 123 | end 124 | 125 | function lazyPaladin.bitParsers.shadowAura(bit, actions, masks) 126 | if (not lazyPaladin.rebit(bit, lazyPaladin.shapeshift.shadowAura.codePattern)) then 127 | return false 128 | end 129 | table.insert(actions, lazyPaladin.shapeshift.shadowAura) 130 | return true 131 | end 132 | 133 | -- Simple Paladin specific masks 134 | ------------------------------- 135 | -- These masks do not require parameters and return the check directly so we can omit the function 136 | -- call and just refer to the mask by name i.e. lazyPaladin.masks. instead of 137 | -- lazyPaladin.masks.(). 138 | -- I try to keep the mask and the bitParser that refers to said mask together for ease 139 | -- of reading. 140 | 141 | 142 | 143 | -- Complex Paladin masks 144 | ----------------------- 145 | -- These are masks which require additional parameters or have a structure optimized for run-time 146 | -- efficiency. The mask function must be executed e.g. lazyPaladin.masks.(parameters). 147 | -- The portion of the code that needs to be executed when the button is pressed should appear within 148 | -- "return function() ... end" inside the mask function, everything else will be evaluated at 149 | -- the time that the mask is parsed. 150 | 151 | 152 | 153 | -- Paladin utility functions 154 | --------------------------- 155 | -- These are functions that are never called by a form but are used within other mask functions. 156 | -- Technically, they are not masks, but we'll leave them alone for now. 157 | 158 | 159 | -- Custom AutoAttack 160 | -------------------- 161 | -- Include any modifications to the autoAttack function. If this omitted, lazyPaladin 162 | -- will use the default auto-attack behaviour in Parse.lua. The function must be called 163 | -- CustomAutoAttackMode. 164 | 165 | 166 | -- Custom command line arguments 167 | -------------------------------- 168 | 169 | 170 | 171 | -- Custom minimap entries 172 | ------------------------- 173 | 174 | 175 | 176 | -- Default forms 177 | ---------------- 178 | -- Specify any default forms if they exist. 179 | 180 | lazyPaladin.defaultForms = {} 181 | 182 | lazyPaladin.defaultForms.solo = { 183 | "stop-ifCasting", 184 | "devAura-ifNotHasBuff=devAura", 185 | "-- self healing", 186 | "divProt@player-ifPlayer<40%hp-ifNotHasBuff=blessProt", 187 | "hmrJustice-ifPlayer<40%hp-ifTargetOfTarget-ifTargetAlive-ifNotHasBuff=divProt", 188 | "blessProt@player-ifPlayer<40%hp-ifNotHasBuff=divProt", 189 | "holyLight@player-ifPlayer<40%hp", 190 | "blessMight@player-ifNotHasBuff=blessMight,blessProt", 191 | "stop-ifNotTargetAlive", 192 | "-- start with Crusader, judge the mob and swtich to Righteousness", 193 | "sealCrusader-ifNotHasBuff=sealCrusader-ifNotInCombat", 194 | "judge-sealRight-ifHasBuff=sealCrusader-ifNotTargetClass=mage", 195 | "judge-sealRight-ifTargetHasDebuff=judgeCrusader-ifTarget>40%hp-ifPlayer>50%mana", 196 | "-- once in combat, only cast Crusader if no other seal is up", 197 | "sealCrusader-ifNotHasBuff=sealCrusader,sealRight-ifTarget>10%hp-ifNotTargetHasDebuff=judgeCrusader", 198 | } 199 | 200 | -- Custom data 201 | --------------- 202 | -- Place any other tables of data unique to the class here. 203 | 204 | 205 | -- Custom initialization 206 | ------------------------ 207 | 208 | 209 | -- Custom help text 210 | ------------------- 211 | -- Place any help text that pertains to class specific masks here. 212 | -- Because of formatting restrictions we place this last so that it does not mess up the indentation. 213 | function lazyPaladin.CustomHelp() 214 | return [[ 215 |

Currently None!

216 | ]] 217 | end 218 | 219 | end -- function lazyPaladinLoad.LoadParsePaladin() -------------------------------------------------------------------------------- /LazyPriest/LazyPriest.lua: -------------------------------------------------------------------------------- 1 | lazyPriest = {} 2 | lazyPriestLoad = {} 3 | 4 | lazyPriestLoad.metadata = lazyScript.Metadata:new("LazyPriest") 5 | lazyPriestLoad.metadata:updateRevisionFromKeyword("$Revision: 358 $") 6 | 7 | function lazyPriestLoad.OnLoad() 8 | -- Check that this player is the correct class 9 | local localeClass, class = UnitClass("player") 10 | if class ~= "PRIEST" then 11 | return 12 | end 13 | 14 | -- Check that we're compatible with LazyScript 15 | if not lazyScript.CheckCompatibility(lazyPriestLoad.metadata) then 16 | return 17 | end 18 | 19 | -- I like everything with the same name. It makes S&R so easy 20 | lazyPriest = lazyScript 21 | lazyPriestLocale = lsLocale 22 | -- Unfortunately this overwrites everything that we already had called lazyPriest. 23 | -- Load everything else in class specific files using these loading functions 24 | -- Localization must be loaded first! 25 | lazyPriestLoad.LoadPriestLocalization(GetLocale()) 26 | lazyPriestLoad.LoadParsePriest() 27 | 28 | this:RegisterEvent("VARIABLES_LOADED") 29 | this:RegisterEvent("PLAYER_LOGIN") 30 | end 31 | 32 | function lazyPriestLoad.OnEvent() 33 | if (event == "VARIABLES_LOADED") then 34 | -- Nothing yet 35 | 36 | elseif (event == "PLAYER_LOGIN") then 37 | lazyPriest.chat(lazyPriestLoad.metadata:getNameVersionRevisionString()..PRIEST_ADDON_LOADED..lazyScript.metadata.name.."!") 38 | 39 | end 40 | end -------------------------------------------------------------------------------- /LazyPriest/LazyPriest.toc: -------------------------------------------------------------------------------- 1 | ## Interface: 11200 2 | ## Title: LazyScript - |cffff770CLazy|r|cffffffffPriest|r 3 | ## Version: 1.0.2 4 | ## X-Revision: $Revision: 747 $ 5 | ## X-LazyScriptCompatibility: 3 6 | ## Notes: Programmable Priest Attacks. 7 | ## Notes-ruRU: Программируемые атаки жреца. 8 | ## RequiredDeps: LazyScript 9 | ## OptionalDeps: MobInfo-2, Tracer 10 | ## LoadOnDemand: 1 11 | ## X-LazyScriptVersion: 1.0 12 | 13 | LazyPriest.lua 14 | ParsePriest.lua 15 | Localization.lua 16 | LazyPriest.xml -------------------------------------------------------------------------------- /LazyPriest/LazyPriest.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 9 | lazyPriestLoad.metadata:updateRevisionFromKeyword("$Revision: 171 $") 10 | lazyPriestLoad.OnLoad() 11 | 12 | 13 | lazyPriestLoad.OnEvent() 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | this:SetOwner(this, "ANCHOR_NONE") 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /LazyPriest/Localization.lua: -------------------------------------------------------------------------------- 1 | lazyPriestLoad.metadata:updateRevisionFromKeyword("$Revision: 308 $") 2 | 3 | function lazyPriestLoad.LoadPriestLocalization(locale) 4 | 5 | lazyPriestLocale.enUS.ACTION_TTS.abolishDisease = "Abolish Disease" 6 | lazyPriestLocale.enUS.ACTION_TTS.cureDisease = "Cure Disease" 7 | lazyPriestLocale.enUS.ACTION_TTS.desperatePrayer = "Desperate Prayer" 8 | lazyPriestLocale.enUS.ACTION_TTS.devouringPlague = "Devouring Plague" 9 | lazyPriestLocale.enUS.ACTION_TTS.dispelMagic = "Dispel Magic" 10 | lazyPriestLocale.enUS.ACTION_TTS.divineSpirit = "Divine Spirit" 11 | lazyPriestLocale.enUS.ACTION_TTS.elunesGrace = "Elune's Grace" 12 | lazyPriestLocale.enUS.ACTION_TTS.fade = "Fade" 13 | lazyPriestLocale.enUS.ACTION_TTS.fearWard = "Fear Ward" 14 | lazyPriestLocale.enUS.ACTION_TTS.feedback = "Feedback" 15 | lazyPriestLocale.enUS.ACTION_TTS.flashHeal = "Flash Heal" 16 | lazyPriestLocale.enUS.ACTION_TTS.greaterHeal = "Greater Heal" 17 | lazyPriestLocale.enUS.ACTION_TTS.heal = "Heal" 18 | lazyPriestLocale.enUS.ACTION_TTS.hexWeakness = "Hex of Weakness" 19 | lazyPriestLocale.enUS.ACTION_TTS.holyFire = "Holy Fire" 20 | lazyPriestLocale.enUS.ACTION_TTS.holyNova = "Holy Nova" 21 | lazyPriestLocale.enUS.ACTION_TTS.innerFire = "Inner Fire" 22 | lazyPriestLocale.enUS.ACTION_TTS.innerFocus = "Inner Focus" 23 | lazyPriestLocale.enUS.ACTION_TTS.lesserHeal = "Lesser Heal" 24 | lazyPriestLocale.enUS.ACTION_TTS.levitate = "Levitate" 25 | lazyPriestLocale.enUS.ACTION_TTS.lightwell = "Lightwell" 26 | lazyPriestLocale.enUS.ACTION_TTS.lightwellRenew = "Lightwell Renew" 27 | lazyPriestLocale.enUS.ACTION_TTS.manaBurn = "Mana Burn" 28 | lazyPriestLocale.enUS.ACTION_TTS.mindBlast = "Mind Blast" 29 | lazyPriestLocale.enUS.ACTION_TTS.mindControl = "Mind Control" 30 | lazyPriestLocale.enUS.ACTION_TTS.mindFlay = "Mind Flay" 31 | lazyPriestLocale.enUS.ACTION_TTS.mindSoothe = "Mind Soothe" 32 | lazyPriestLocale.enUS.ACTION_TTS.mindVision = "Mind Vision" 33 | lazyPriestLocale.enUS.ACTION_TTS.powerInfusion = "Power Infusion" 34 | lazyPriestLocale.enUS.ACTION_TTS.pwf = "Power Word: Fortitude" 35 | lazyPriestLocale.enUS.ACTION_TTS.pws = "Power Word: Shield" 36 | lazyPriestLocale.enUS.ACTION_TTS.prf = "Prayer of Fortitude" 37 | lazyPriestLocale.enUS.ACTION_TTS.prh = "Prayer of Healing" 38 | lazyPriestLocale.enUS.ACTION_TTS.prsp = "Prayer of Shadow Protection" 39 | lazyPriestLocale.enUS.ACTION_TTS.prs = "Prayer of Spirit" 40 | lazyPriestLocale.enUS.ACTION_TTS.psychicScream = "Psychic Scream" 41 | lazyPriestLocale.enUS.ACTION_TTS.renew = "Renew" 42 | lazyPriestLocale.enUS.ACTION_TTS.resurrection = "Resurrection" 43 | lazyPriestLocale.enUS.ACTION_TTS.shackleUndead = "Shackle Undead" 44 | lazyPriestLocale.enUS.ACTION_TTS.shadowProtection = "Shadow Protection" 45 | lazyPriestLocale.enUS.ACTION_TTS.swp = "Shadow Word: Pain" 46 | lazyPriestLocale.enUS.ACTION_TTS.shadowform = "Shadowform" 47 | lazyPriestLocale.enUS.ACTION_TTS.shadowguard = "Shadowguard" 48 | --lazyPriestLocale.enUS.ACTION_TTS.shoot = "Shoot" 49 | lazyPriestLocale.enUS.ACTION_TTS.silence = "Silence" 50 | lazyPriestLocale.enUS.ACTION_TTS.smite = "Smite" 51 | lazyPriestLocale.enUS.ACTION_TTS.starshards = "Starshards" 52 | lazyPriestLocale.enUS.ACTION_TTS.touchWeakness = "Touch of Weakness" 53 | lazyPriestLocale.enUS.ACTION_TTS.vampiricEmbrace = "Vampiric Embrace" 54 | 55 | 56 | -- LazyPriest.lua 57 | PRIEST_ADDON_LOADED = " loaded. Powered by " 58 | 59 | -- ParsePriest.lua 60 | function lazyPriest.CustomLocaleHelp() return [[

Priest Criteria:

]] end 61 | 62 | if (locale == "ruRU") then 63 | 64 | lazyPriestLocale.ruRU.ACTION_TTS.abolishDisease = "Устранение болезни" 65 | lazyPriestLocale.ruRU.ACTION_TTS.cureDisease = "Излечение болезни" 66 | lazyPriestLocale.ruRU.ACTION_TTS.desperatePrayer = "Молитва отчаяния" 67 | lazyPriestLocale.ruRU.ACTION_TTS.devouringPlague = "Всепожирающая чума" 68 | lazyPriestLocale.ruRU.ACTION_TTS.dispelMagic = "Рассеивание заклинаний" 69 | lazyPriestLocale.ruRU.ACTION_TTS.divineSpirit = "Божественный дух" 70 | lazyPriestLocale.ruRU.ACTION_TTS.elunesGrace = "Благодать Элуны" 71 | lazyPriestLocale.ruRU.ACTION_TTS.fade = "Уход в тень" 72 | lazyPriestLocale.ruRU.ACTION_TTS.fearWard = "Защита от страха" 73 | lazyPriestLocale.ruRU.ACTION_TTS.feedback = "Ответная реакция" 74 | lazyPriestLocale.ruRU.ACTION_TTS.flashHeal = "Быстрое исцеление" 75 | lazyPriestLocale.ruRU.ACTION_TTS.greaterHeal = "Великое исцеление" 76 | lazyPriestLocale.ruRU.ACTION_TTS.heal = "Исцеление" 77 | lazyPriestLocale.ruRU.ACTION_TTS.hexWeakness = "Обессиливающий сглаз" 78 | lazyPriestLocale.ruRU.ACTION_TTS.holyFire = "Священный огонь" 79 | lazyPriestLocale.ruRU.ACTION_TTS.holyNova = "Кольцо света" 80 | lazyPriestLocale.ruRU.ACTION_TTS.innerFire = "Внутренний огонь" 81 | lazyPriestLocale.ruRU.ACTION_TTS.innerFocus = "Внутреннее сосредоточение" 82 | lazyPriestLocale.ruRU.ACTION_TTS.lesserHeal = "Малое исцеление" 83 | lazyPriestLocale.ruRU.ACTION_TTS.levitate = "Левитация" 84 | lazyPriestLocale.ruRU.ACTION_TTS.lightwell = "Колодец Света" 85 | lazyPriestLocale.ruRU.ACTION_TTS.lightwellRenew = "Обновление колодца Света" 86 | lazyPriestLocale.ruRU.ACTION_TTS.manaBurn = "Сожжение маны" 87 | lazyPriestLocale.ruRU.ACTION_TTS.mindBlast = "Взрыв разума" 88 | lazyPriestLocale.ruRU.ACTION_TTS.mindControl = "Контроль над разумом" 89 | lazyPriestLocale.ruRU.ACTION_TTS.mindFlay = "Пытка разума" 90 | lazyPriestLocale.ruRU.ACTION_TTS.mindSoothe = "Усмирение" 91 | lazyPriestLocale.ruRU.ACTION_TTS.mindVision = "Внутреннее зрение" 92 | lazyPriestLocale.ruRU.ACTION_TTS.powerInfusion = "Придание сил" 93 | lazyPriestLocale.ruRU.ACTION_TTS.pwf = "Слово силы: Стойкость" 94 | lazyPriestLocale.ruRU.ACTION_TTS.pws = "Слово силы: Щит" 95 | lazyPriestLocale.ruRU.ACTION_TTS.prf = "Молитва стойкости" 96 | lazyPriestLocale.ruRU.ACTION_TTS.prh = "Молитва исцеления" 97 | lazyPriestLocale.ruRU.ACTION_TTS.prsp = "Молитва защиты от темной магии" 98 | lazyPriestLocale.ruRU.ACTION_TTS.prs = "Молитва духа" 99 | lazyPriestLocale.ruRU.ACTION_TTS.psychicScream = "Ментальный крик" 100 | lazyPriestLocale.ruRU.ACTION_TTS.renew = "Обновление" 101 | lazyPriestLocale.ruRU.ACTION_TTS.resurrection = "Воскрешение" 102 | lazyPriestLocale.ruRU.ACTION_TTS.shackleUndead = "Сковывание нежити" 103 | lazyPriestLocale.ruRU.ACTION_TTS.shadowProtection = "Защита от темной магии" 104 | lazyPriestLocale.ruRU.ACTION_TTS.swp = "Слово Тьмы: Боль" 105 | lazyPriestLocale.ruRU.ACTION_TTS.shadowform = "Облик Тьмы" 106 | lazyPriestLocale.ruRU.ACTION_TTS.shadowguard = "Страж Тьмы" 107 | --lazyPriestLocale.ruRU.ACTION_TTS.shoot = "Выстрел" 108 | lazyPriestLocale.ruRU.ACTION_TTS.silence = "Безмолвие" 109 | lazyPriestLocale.ruRU.ACTION_TTS.smite = "Кара" 110 | lazyPriestLocale.ruRU.ACTION_TTS.starshards = "Звездные осколки" 111 | lazyPriestLocale.ruRU.ACTION_TTS.touchWeakness = "Прикосновение слабости" 112 | lazyPriestLocale.ruRU.ACTION_TTS.vampiricEmbrace = "Объятия вампира" 113 | 114 | -- LazyPriest.lua 115 | PRIEST_ADDON_LOADED = " загружен. Работает от " 116 | 117 | -- ParsePriest.lua 118 | function lazyPriest.CustomLocaleHelp() return [[

Критерии Жреца:

]] end 119 | 120 | elseif (locale == "deDE") then 121 | 122 | lazyPriestLocale.deDE.ACTION_TTS.lightwell = "Brunnen des Lichts" 123 | lazyPriestLocale.deDE.ACTION_TTS.lightwellRenew = "Erneuerung des Lichtbrunnens" 124 | 125 | elseif (locale == "frFR") then 126 | 127 | lazyPriestLocale.frFR.ACTION_TTS.lightwell = "Puits de lumi\195\168re" 128 | lazyPriestLocale.frFR.ACTION_TTS.lightwellRenew = "R\195\169novation du Puits de lumi\195\168re" 129 | 130 | end 131 | end -------------------------------------------------------------------------------- /LazyPriest/ParsePriest.lua: -------------------------------------------------------------------------------- 1 | lazyPriestLoad.metadata:updateRevisionFromKeyword("$Revision: 729 $") 2 | 3 | -- The functions and data inside this block will not be defined unless the user is a PRIEST. 4 | 5 | function lazyPriestLoad.LoadParsePriest() 6 | 7 | -- Priest actions 8 | ----------------- 9 | -- The lazyPriest.actions. must match the short name so that we only need additional 10 | -- bitParsing functions for special cases. 11 | 12 | lazyPriest.actions.abolishDisease = lazyPriest.Action:New("abolishDisease", "Spell_Nature_NullifyDisease") 13 | lazyPriest.actions.cureDisease = lazyPriest.Action:New("cureDisease", "Spell_Holy_NullifyDisease") 14 | lazyPriest.actions.desperatePrayer = lazyPriest.Action:New("desperatePrayer", "Spell_Holy_Restoration") 15 | lazyPriest.actions.devouringPlague = lazyPriest.Action:New("devouringPlague", "Spell_Shadow_BlackPlague") 16 | lazyPriest.actions.dispelMagic = lazyPriest.Action:New("dispelMagic", "Spell_Holy_DispelMagic") 17 | lazyPriest.actions.divineSpirit = lazyPriest.Action:New("divineSpirit", "Spell_Holy_DivineSpirit") 18 | lazyPriest.actions.elunesGrace = lazyPriest.Action:New("elunesGrace", "Spell_Holy_ElunesGrace") 19 | lazyPriest.actions.fade = lazyPriest.Action:New("fade", "Spell_Magic_LesserInvisibilty") 20 | lazyPriest.actions.fearWard = lazyPriest.Action:New("fearWard", "Spell_Holy_Excorcism") 21 | lazyPriest.actions.feedback = lazyPriest.Action:New("feedback", "Spell_Shadow_RitualOfSacrifice") 22 | lazyPriest.actions.flashHeal = lazyPriest.Action:New("flashHeal", "Spell_Holy_FlashHeal") 23 | lazyPriest.actions.greaterHeal = lazyPriest.Action:New("greaterHeal", "Spell_Holy_GreaterHeal") 24 | lazyPriest.actions.heal = lazyPriest.Action:New("heal", { "Spell_Holy_Heal", "Spell_Holy_Heal02" }) 25 | lazyPriest.actions.hexWeakness = lazyPriest.Action:New("hexWeakness", "Spell_Shadow_FingerOfDeath") 26 | lazyPriest.actions.holyFire = lazyPriest.Action:New("holyFire", "Spell_Holy_SearingLight") 27 | lazyPriest.actions.holyNova = lazyPriest.Action:New("holyNova", "Spell_Holy_HolyNova") 28 | lazyPriest.actions.innerFire = lazyPriest.Action:New("innerFire", "Spell_Holy_InnerFire") 29 | lazyPriest.actions.innerFocus = lazyPriest.Action:New("innerFocus", "Spell_Frost_WindWalkOn", nil, false) 30 | lazyPriest.actions.lesserHeal = lazyPriest.Action:New("lesserHeal", "Spell_Holy_LesserHeal") 31 | lazyPriest.actions.levitate = lazyPriest.Action:New("levitate", "Spell_Holy_LayOnHands") 32 | lazyPriest.actions.lightwell = lazyPriest.Action:New("lightwell", "Spell_Holy_SummonLightwell", nil, nil, true) 33 | lazyPriest.actions.manaBurn = lazyPriest.Action:New("manaBurn", "Spell_Shadow_ManaBurn") 34 | lazyPriest.actions.mindBlast = lazyPriest.Action:New("mindBlast", "Spell_Shadow_UnholyFrenzy") 35 | lazyPriest.actions.mindControl = lazyPriest.Action:New("mindControl", "Spell_Shadow_ShadowWordDominate") 36 | lazyPriest.actions.mindFlay = lazyPriest.Action:New("mindFlay", "Spell_Shadow_SiphonMana") 37 | lazyPriest.actions.mindSoothe = lazyPriest.Action:New("mindSoothe", "Spell_Holy_MindSooth") 38 | lazyPriest.actions.mindVision = lazyPriest.Action:New("mindVision", "Spell_Holy_MindVision") 39 | lazyPriest.actions.powerInfusion = lazyPriest.Action:New("powerInfusion", "Spell_Holy_PowerInfusion") 40 | lazyPriest.actions.pwf = lazyPriest.Action:New("pwf", "Spell_Holy_WordFortitude") 41 | lazyPriest.actions.pws = lazyPriest.Action:New("pws", "Spell_Holy_PowerWordShield") 42 | lazyPriest.actions.prf = lazyPriest.Action:New("prf", "Spell_Holy_PrayerOfFortitude") 43 | lazyPriest.actions.prh = lazyPriest.Action:New("prh", "Spell_Holy_PrayerOfHealing02") 44 | lazyPriest.actions.prsp = lazyPriest.Action:New("prsp", "Spell_Holy_PrayerofShadowProtection") 45 | lazyPriest.actions.prs = lazyPriest.Action:New("prs", "Spell_Holy_PrayerofSpirit") 46 | lazyPriest.actions.psychicScream = lazyPriest.Action:New("psychicScream", "Spell_Shadow_PsychicScream") 47 | lazyPriest.actions.renew = lazyPriest.Action:New("renew", "Spell_Holy_Renew") 48 | lazyPriest.actions.resurrection = lazyPriest.Action:New("resurrection", "Spell_Holy_Resurrection") 49 | lazyPriest.actions.shackleUndead = lazyPriest.Action:New("shackleUndead", "Spell_Nature_Slow") 50 | lazyPriest.actions.shadowProtection = lazyPriest.Action:New("shadowProtection", "Spell_Shadow_AntiShadow") 51 | lazyPriest.actions.swp = lazyPriest.Action:New("swp", "Spell_Shadow_ShadowWordPain") 52 | lazyPriest.actions.shadowform = lazyPriest.Action:New("shadowform", "Spell_Shadow_Shadowform") 53 | lazyPriest.actions.shadowguard = lazyPriest.Action:New("shadowguard", "Spell_Nature_LightningShield") 54 | lazyPriest.actions.silence = lazyPriest.Action:New("silence", "Spell_Shadow_ImpPhaseShift") 55 | lazyPriest.actions.smite = lazyPriest.Action:New("smite", "Spell_Holy_HolySmite") 56 | lazyPriest.actions.starshards = lazyPriest.Action:New("starshards", "Spell_Arcane_StarFire") 57 | lazyPriest.actions.touchWeakness = lazyPriest.Action:New("touchWeakness", "Spell_Shadow_DeadofNight") 58 | lazyPriest.actions.vampiricEmbrace = lazyPriest.Action:New("vampiricEmbrace", "Spell_Shadow_UnsummonBuilding") 59 | 60 | 61 | 62 | -- Special Priest actions 63 | ------------------------- 64 | -- Only include actions that require additional implicit conditions or non-standard action entries 65 | -- e.g. lazyPriest.comboActions. or lazyPriest.items., otherwise an entry in 66 | -- the list above should be sufficient. 67 | 68 | function lazyPriest.bitParsers.shadowform(bit, actions, masks) 69 | if (not lazyPriest.rebit(bit, lazyPriest.actions.shadowform.codePattern)) then 70 | return false 71 | end 72 | local buffObj = lazyPriest.buffTable[lazyPriest.actions.shadowform.code] 73 | table.insert(actions, lazyPriest.actions.shadowform) 74 | table.insert(masks, lazyPriest.negWrapper(lazyPriest.masks.CheckBuffOrDebuff("player", buffObj, "buff", "", nil),true)) 75 | return true 76 | end 77 | 78 | -- Simple Priest specific masks 79 | ------------------------------- 80 | -- These masks do not require parameters and return the check directly so we can omit the function 81 | -- call and just refer to the mask by name i.e. lazyPriest.masks. instead of 82 | -- lazyPriest.masks.(). 83 | -- I try to keep the mask and the bitParser that refers to said mask together for ease 84 | -- of reading. 85 | 86 | -- NONE 87 | 88 | -- Complex Priest masks 89 | ----------------------- 90 | -- These are masks which require additional parameters or have a structure optimized for run-time 91 | -- efficiency. The mask function must be executed e.g. lazyPriest.masks.(parameters). 92 | -- The portion of the code that needs to be executed when the button is pressed should appear within 93 | -- "return function() ... end" inside the mask function, everything else will be evaluated at 94 | -- the time that the mask is parsed. 95 | 96 | -- NONE 97 | 98 | -- Priest utility functions 99 | --------------------------- 100 | -- These are functions that are never called by a form but are used within other mask functions. 101 | -- Technically, they are not masks, but we'll leave them alone for now. 102 | 103 | -- NONE 104 | 105 | -- Custom AutoAttack 106 | -------------------- 107 | -- Finally, include any modifications to the autoAttack function. If this omitted, lazyPriest 108 | -- will use the default auto-attack behaviour in Parse.lua. The function must be called 109 | -- CustomAutoAttackMode. 110 | 111 | 112 | 113 | -- Custom command line arguments 114 | -------------------------------- 115 | 116 | 117 | 118 | -- Custom minimap entries 119 | ------------------------- 120 | 121 | 122 | 123 | -- Default forms 124 | ---------------- 125 | -- Specify any default forms if they exist. 126 | 127 | lazyPriest.defaultForms = {} 128 | 129 | lazyPriest.defaultForms.lowbie = { 130 | "stop-ifCasting", 131 | "stop-ifChannelling", 132 | "stop-ifNotInCombat-ifHasBuff=spiritTap-if<100%mana", 133 | "sayInMinion=Global cooldown-ifGlobalCooldown-ifNotWanding", 134 | "## Out of combat", 135 | "pws@self-ifNotInCombat-ifNotHasDebuff=weakenedSoul-if>95%mana", 136 | "pwf@self-ifNotHasBuff=pwf-ifNotInCombat", 137 | "innerFire-ifNotHasBuff=innerFire-ifNotInCombat", 138 | "cureDisease@self-ifPlayerIs=Diseased-ifNotInCombat", 139 | "## In combat heal", 140 | "pws@self-ifInCombat-ifNotHasBuff=pws-ifNotHasDebuff=weakenedSoul", 141 | "pws@self-ifPlayer<40%hp-ifInCombat-ifNotHasBuff=pws-ifNotHasDebuff=weakenedSoul", 142 | "flashHeal@self-ifPlayer>245hpDeficit", 143 | "## Open combat", 144 | "holyFire-ifNotInCombat-ifLastUsed>4.0s=holyFire", 145 | "## In combat", 146 | "swp-ifLastUsed>1.5s=swp-ifNotTargetHasDebuff=swp", 147 | "smite-ifTarget>50%hp", 148 | "## Wands", 149 | "stopWand-ifPlayer<40%hp", 150 | "wand-ifTarget<50%hp", 151 | "wand-ifPlayer<40%mana" 152 | } 153 | 154 | -- Custom data 155 | --------------- 156 | -- Place any other tables of data unique to the class here. 157 | 158 | 159 | -- Custom initialization 160 | ------------------------ 161 | 162 | 163 | -- Custom help text 164 | ------------------- 165 | -- Place any help text that pertains to class specific masks here. 166 | -- Because of formatting restrictions we place this last so that it does not mess up the indentation. 167 | function lazyPriest.CustomHelp() 168 | return [[ 169 |

Currently None!

170 | ]] 171 | end 172 | 173 | end -- lazyPriestLoad.LoadParsePriest() -------------------------------------------------------------------------------- /LazyRogue/EviscerateTracking.lua: -------------------------------------------------------------------------------- 1 | lazyRogueLoad.metadata:updateRevisionFromKeyword("$Revision: 521 $") 2 | 3 | -- Eviscerate tracking 4 | 5 | function lazyRogueLoad.LoadEviscTracking() 6 | if (not lazyRogue.getLocaleString("EVISCERATE_HIT") or not lazyRogue.getLocaleString("EVISCERATE_CRIT")) then 7 | lazyRogue.p(ROGUE_EVIRCERATE_NOT_SUPPORTED) 8 | return 9 | end 10 | 11 | lazyRogue.et = {} 12 | 13 | 14 | function lazyRogue.et.ResetEviscTracking() 15 | lazyRogue.perPlayerConf.eviscTracker = { {0,0}, {0,0}, {0,0}, {0,0}, {0,0} } 16 | lazyRogue.p(ROGUE_RESET_EVIRCERATE_STATS) 17 | end 18 | 19 | function lazyRogue.et.GetEviscTrackingInfo(cp) 20 | local observedDamage = lazyRogue.perPlayerConf.eviscTracker[cp][1] 21 | local observedCt = lazyRogue.perPlayerConf.eviscTracker[cp][2] 22 | return observedDamage, observedCt 23 | end 24 | 25 | function lazyRogue.et.SetEviscTrackingInfo(cp, observedDamage, observedCt) 26 | lazyRogue.perPlayerConf.eviscTracker[cp][1] = observedDamage 27 | lazyRogue.perPlayerConf.eviscTracker[cp][2] = observedCt 28 | end 29 | 30 | function lazyRogue.et.TrackEviscerates(arg1) 31 | local eviscerateHit = lazyRogue.getLocaleString("EVISCERATE_HIT") 32 | local eviscerateCrit = lazyRogue.getLocaleString("EVISCERATE_CRIT") 33 | 34 | if (not eviscerateHit or not eviscerateCrit) then 35 | return 36 | end 37 | 38 | local thisDamage = nil 39 | if (lazyRogue.re(arg1, eviscerateHit)) then 40 | thisDamage = lazyRogue.match2 41 | elseif (lazyRogue.perPlayerConf.trackEviscCrits and lazyRogue.re(arg1, eviscerateCrit)) then 42 | thisDamage = lazyRogue.match2 43 | end 44 | if (not thisDamage) then 45 | return 46 | end 47 | 48 | if (not lazyRogue.eviscComboPoints or lazyRogue.eviscComboPoints == 0) then 49 | lazyRogue.d(ROGUE_EVIRCERATE_CANT_RECORD) 50 | return 51 | end 52 | 53 | local observedDamage, observedCt = lazyRogue.et.GetEviscTrackingInfo(lazyRogue.eviscComboPoints) 54 | 55 | observedDamage = observedDamage * observedCt 56 | local newCt = observedCt + 1 57 | observedDamage = observedDamage + thisDamage 58 | observedDamage = observedDamage / newCt 59 | observedCt = math.min(lazyRogue.perPlayerConf.eviscerateSample, newCt) 60 | 61 | lazyRogue.et.SetEviscTrackingInfo(lazyRogue.eviscComboPoints, observedDamage, observedCt) 62 | 63 | local expectedDamage = lazyRogue.masks.CalculateBaseEviscDamage(lazyRogue.eviscComboPoints) 64 | local thisRatio = thisDamage / expectedDamage 65 | local avgRatio = observedDamage / expectedDamage 66 | lazyRogue.d(ROGUE_EVIRCERATE_OUTPUT_1..lazyRogue.eviscComboPoints..ROGUE_EVIRCERATE_OUTPUT_2..thisDamage..ROGUE_EVIRCERATE_OUTPUT_3.. 67 | expectedDamage..") "..string.format("%.2f", thisRatio).."/".. 68 | string.format("%.2f", avgRatio)..ROGUE_EVIRCERATE_OUTPUT_4) 69 | 70 | lazyRogue.eviscComboPoints = nil 71 | end 72 | 73 | -- Hook UseAction() so we can record how many combo points the 74 | -- player had when he eviscerated. 75 | function lazyRogue.et.UseActionHook(action, checkCursor, onSelf) 76 | if (action == lazyRogue.actions.evisc:GetSlot()) then 77 | lazyRogue.eviscComboPoints = GetComboPoints() 78 | lazyRogue.d(ROGUE_EVIRCERATE_USE_ACTION_HOOK..lazyRogue.eviscComboPoints..ROGUE_EVIRCERATE_CPS) 79 | end 80 | return lazyRogue.UseActionOrig(action, checkCursor, onSelf) 81 | end 82 | 83 | function lazyRogue.et.CastSpellHook(spellIndex, spellBookType) 84 | local spellIndexStart, rankCount, maxRank = lazyRogue.actions.evisc:FindSpellRanks(false) 85 | if ((spellIndexStart + rankCount - 1) == spellIndex) then 86 | lazyRogue.eviscComboPoints = GetComboPoints() 87 | lazyRogue.d(ROGUE_EVIRCERATE_CAST_SPELL_HOOK..lazyRogue.eviscComboPoints..ROGUE_EVIRCERATE_CPS) 88 | end 89 | return lazyRogue.CastSpellOrig(spellIndex, spellBookType) 90 | end 91 | 92 | 93 | end -- function lazyRogueLoad.LoadEviscTracking() -------------------------------------------------------------------------------- /LazyRogue/LazyRogue.lua: -------------------------------------------------------------------------------- 1 | lazyRogue = {} 2 | lazyRogueLoad = {} 3 | 4 | lazyRogueLoad.metadata = lazyScript.Metadata:new("LazyRogue") 5 | lazyRogueLoad.metadata:updateRevisionFromKeyword("$Revision: 521 $") 6 | 7 | function lazyRogueLoad.OnLoad() 8 | -- Check that this player is the correct class 9 | local localeClass, class = UnitClass("player") 10 | if class ~= "ROGUE" then 11 | return 12 | end 13 | 14 | -- Check that we're compatible with LazyScript 15 | if not lazyScript.CheckCompatibility(lazyRogueLoad.metadata) then 16 | return 17 | end 18 | 19 | -- I like everything with the same name. It makes S&R so easy 20 | lazyRogue = lazyScript 21 | lazyRogueLocale = lsLocale 22 | -- Unfortunately this overwrites everything that we already had called lazyRogue. 23 | -- Load everything else in class specific files using these loading functions 24 | -- Localization must be loaded first! 25 | lazyRogueLoad.LoadRogueLocalization(GetLocale()) 26 | lazyRogueLoad.LoadParseRogue() 27 | lazyRogueLoad.LoadEviscTracking() 28 | 29 | this:RegisterEvent("VARIABLES_LOADED") 30 | this:RegisterEvent("PLAYER_LOGIN") 31 | end 32 | 33 | function lazyRogueLoad.OnEvent() 34 | if (event == "VARIABLES_LOADED") then 35 | if (lrConf and not lazyRogue.perPlayerConf.importedOldLazyRogueSettings) then 36 | lazyRogue.importOldSettings() 37 | lazyRogue.importOldForms() 38 | lazyRogue.perPlayerConf.importedOldLazyRogueSettings = true 39 | 40 | StaticPopupDialogs["LAZYROGUE_IMPORTED"] = { 41 | text = lazyRogue.getLocaleString("IMPORTED", true), 42 | button1 = TEXT(OKAY), 43 | timeout = 0, 44 | whileDead = 1, 45 | exclusive = 1, 46 | hideOnEscape = 1 47 | }; 48 | StaticPopup_Show("LAZYROGUE_IMPORTED"); 49 | end 50 | 51 | elseif (event == "PLAYER_LOGIN") then 52 | 53 | this:RegisterEvent("UNIT_ENERGY") 54 | this:RegisterEvent("CHAT_MSG_SPELL_SELF_DAMAGE") 55 | 56 | if (not lazyRogue.UseActionOrig) and (lazyRogue.et) then 57 | lazyRogue.UseActionOrig = UseAction 58 | UseAction = lazyRogue.et.UseActionHook 59 | end 60 | 61 | if (not lazyRogue.CastSpellOrig) and (lazyRogue.et) then 62 | lazyRogue.CastSpellOrig = CastSpell 63 | CastSpell = lazyRogue.et.CastSpellHook 64 | end 65 | 66 | lazyRogue.chat(lazyRogueLoad.metadata:getNameVersionRevisionString()..ROGUE_ADDON_LOADED..lazyScript.metadata.name.."!") 67 | 68 | elseif (event == "UNIT_ENERGY") then 69 | if (arg1 == "player") then 70 | local currentEnergy = UnitMana("player") 71 | if (currentEnergy > lazyRogue.latestEnergy) then 72 | -- a tick 73 | lazyRogue.lastTickTime = GetTime() 74 | --lazyRogue.d("ENERGY TICK: "..lazyRogue.lastTickTime) 75 | end 76 | lazyRogue.latestEnergy = currentEnergy 77 | end 78 | 79 | elseif (event == "CHAT_MSG_SPELL_SELF_DAMAGE") then 80 | if lazyRogue.et then 81 | lazyRogue.et.TrackEviscerates(arg1) 82 | end 83 | 84 | end 85 | end -------------------------------------------------------------------------------- /LazyRogue/LazyRogue.toc: -------------------------------------------------------------------------------- 1 | ## Interface: 11200 2 | ## Title: LazyScript - |cffff770CLazy|r|cffffffffRogue|r 3 | ## Version: 4.0.2 4 | ## X-Revision: $Revision: 747 $ 5 | ## X-LazyScriptCompatibility: 3 6 | ## Notes: Programmable Rogue Attacks. 7 | ## Notes-ruRU: Программируемые атаки разбойника. 8 | ## RequiredDeps: LazyScript 9 | ## OptionalDeps: MobInfo-2, Tracer 10 | ## SavedVariables: lrConf 11 | ## LoadOnDemand: 1 12 | ## X-LazyScriptVersion: 1.0 13 | 14 | LazyRogue.lua 15 | EviscerateTracking.lua 16 | ParseRogue.lua 17 | Localization.lua 18 | LazyRogue.xml -------------------------------------------------------------------------------- /LazyRogue/LazyRogue.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 9 | lazyRogueLoad.metadata:updateRevisionFromKeyword("$Revision: 171 $") 10 | lazyRogueLoad.OnLoad() 11 | 12 | 13 | lazyRogueLoad.OnEvent() 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | this:SetOwner(this, "ANCHOR_NONE") 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /LazyScript/About.lua: -------------------------------------------------------------------------------- 1 | lazyScript.metadata:updateRevisionFromKeyword("$Revision: 712 $") 2 | 3 | lazyScript.about = {} 4 | lazyScript.about.tabText = {} 5 | 6 | function lazyScript.about.ScrollFrame_OnSizeChanged() 7 | this:GetScrollChild():SetWidth(this:GetWidth()+40) 8 | if this:GetScrollChild().currentText then 9 | this:GetScrollChild():SetText(this:GetScrollChild().currentText) 10 | this:UpdateScrollChildRect() 11 | end 12 | end 13 | 14 | function lazyScript.about.OnLoad() 15 | PanelTemplates_SetNumTabs(LazyScriptAboutFrame, 2) 16 | LazyScriptAboutFrame.selectedTab = 1 17 | PanelTemplates_UpdateTabs(LazyScriptAboutFrame) 18 | end 19 | 20 | function lazyScript.about.OnShow() 21 | PanelTemplates_SetTab(LazyScriptAboutFrame, 1) 22 | lazyScript.about.OnTabButtonClick("LazyScriptAboutFrameTab1", LazyScriptAboutFrameTab1:GetText()) 23 | end 24 | 25 | function lazyScript.about.OnTabButtonClick(tabId, tabName) 26 | --lazyScript.p("OnTabButtonClick "..tabId..": "..tabName) 27 | 28 | -- If help text has not been initialized yet, do so. 29 | if not lazyScript.about.tabText[tabName] then 30 | lazyScript.about.SetupTabText() 31 | end 32 | 33 | local text = lazyScript.about.tabText[tabName] 34 | LazyScriptAboutFrameScrollFrameText.currentText = text -- save it for forcing a relayout when resizing 35 | LazyScriptAboutFrameScrollFrameText:SetText(text) 36 | LazyScriptAboutFrameScrollFrameScrollBar:SetValue(0); 37 | LazyScriptAboutFrameScrollFrame:UpdateScrollChildRect() 38 | end 39 | 40 | function lazyScript.about.SetupTabText() 41 | lazyScript.about.SetupAboutText() 42 | lazyScript.about.SetupContributorsText() 43 | end 44 | 45 | function lazyScript.about.SetupAboutText() 46 | local text = "" 47 | text = text.."

${title}

" 48 | text = text.."

"..ABOUT_ALL_ROPE.."


" 49 | text = text.."

"..ABOUT_BROUGHT.."
" 50 | text = text.."lokyst
dOxxx
Nelar
and Ithilyn


" 51 | text = text.."

"..ABOUT_SIGNIFICANT_CONTRIBUTIONS.."
" 52 | text = text.."FreeSpeech


" 53 | text = text.."

"..ABOUT_TO_USE.."


" 54 | text = text.."

|cffff8040${slashCmd}|r


" 55 | text = text.."

"..ABOUT_SEE_WEBSITES.."

" 56 | text = text.."|cff6060ffhttp://www.ithilyn.com/|r
" 57 | text = text.."|cff6060ffhttp://ui.worldofwar.net/ui.php?id=1574|r
" 58 | text = text.."|cff6060ffhttp://code.google.com/p/lazyscript/|r

" 59 | text = text.."" 60 | 61 | text = string.gsub(text, "${title}", lazyScript.metadata:getNameVersionRevisionString()) 62 | text = string.gsub(text, "${slashCmd}", SLASH_LAZYSCRIPT1) 63 | 64 | lazyScript.about.tabText[About] = text 65 | end 66 | 67 | function lazyScript.about.SetupContributorsText() 68 | local contributors = { 69 | "Tannon", 70 | "Sketchy", 71 | "Karl The Pagan", 72 | "Tragath", 73 | "LunaEclipse", 74 | "Highend", 75 | } 76 | table.sort(contributors) 77 | 78 | 79 | local text = "" 80 | text = text.."

"..ABOUT_LAZYCONTRIBUTORS.."

" 81 | text = text.."

"..ABOUT_ALL_TESTING.."


" 82 | text = text.."

"..ABOUT_MANY_THANKS.."
${contributors}.

" 83 | text = text.."" 84 | 85 | text = string.gsub(text, "${contributors}", table.concat(contributors, ", ")) 86 | lazyScript.about.tabText[Contributors] = text 87 | end -------------------------------------------------------------------------------- /LazyScript/About.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | lazyScript.about.ScrollFrame_OnSizeChanged() 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | this:SetWidth(this:GetParent():GetWidth()+40) 86 | this:SetHeight(100) 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 115 | 116 | 125 | 126 | 127 | 128 | 129 | 130 | lazyScript.about.OnShow() 131 | 132 | 133 | lazyScript.metadata:updateRevisionFromKeyword("$Revision: 380 $") 134 | this:RegisterForDrag("LeftButton") 135 | tinsert(UISpecialFrames, this:GetName()); 136 | lazyScript.about.OnLoad() 137 | 138 | 139 | this:StartMoving() 140 | 141 | 142 | this:StopMovingOrSizing() 143 | 144 | 145 | this:StopMovingOrSizing() 146 | 147 | 148 | 149 | 150 | -------------------------------------------------------------------------------- /LazyScript/AutoAttack.lua: -------------------------------------------------------------------------------- 1 | lazyScript.metadata:updateRevisionFromKeyword("$Revision: 681 $") 2 | 3 | -- Auto-attack support 4 | 5 | -- Thanks to FeralSkills for the idea on how to do this 6 | function lazyScript.IsAutoAttacking() 7 | if (not lazyScript.attackSlot) then 8 | for i = 1, 120 do 9 | if (IsAttackAction(i)) then 10 | lazyScript.attackSlot = i 11 | break 12 | end 13 | end 14 | end 15 | if (not lazyScript.attackSlot) then 16 | lazyScript.p(COULDNT_FIND_ATTACK) 17 | return false 18 | end 19 | return (IsCurrentAction(lazyScript.attackSlot) == 1) 20 | end 21 | 22 | function lazyScript.StartAutoAttack() 23 | if (not lazyScript.IsAutoAttacking()) then 24 | lazyScript.d(INITIATING_AUTO_ATTACK) 25 | AttackTarget() 26 | end 27 | end 28 | 29 | function lazyScript.StopAutoAttack() 30 | if (lazyScript.IsAutoAttacking()) then 31 | AttackTarget() 32 | end 33 | end 34 | 35 | 36 | -- For ranged attacks that change their texture based on equipped weapon 37 | function lazyScript.GetRangedWeaponTexture() 38 | local slotId, _ = GetInventorySlotInfo("RangedSlot") 39 | return GetInventoryItemTexture("player",slotId) 40 | end 41 | 42 | 43 | -- For AutoShoot 44 | function lazyScript.IsAutoShooting(sayNothing) 45 | if lazyScript.GetAutoShotSlot(sayNothing) then 46 | return (IsAutoRepeatAction(lazyScript.autoShotSlot) == 1) 47 | end 48 | return nil 49 | end 50 | 51 | function lazyScript.StartAutoShot() 52 | if (lazyScript.IsAutoShooting() == false) then 53 | UseAction(lazyScript.autoShotSlot) 54 | end 55 | end 56 | 57 | function lazyScript.StopAutoShot() 58 | if (lazyScript.IsAutoShooting() == true) then 59 | UseAction(lazyScript.autoShotSlot) 60 | end 61 | end 62 | 63 | function lazyScript.ClassCanAutoShot() 64 | local _, class = UnitClass("player") 65 | if class == "HUNTER" then 66 | return true 67 | end 68 | end 69 | 70 | function lazyScript.GetAutoShotSlot(sayNothing) 71 | local texture = lazyScript.GetRangedWeaponTexture() 72 | if texture then 73 | 74 | if lazyScript.autoShotSlot then 75 | return lazyScript.autoShotSlot 76 | end 77 | 78 | for i = 1, 120 do 79 | if (not GetActionText(i)) then -- ignore any Player macros :-) 80 | if (not IsEquippedAction(i)) then -- ignore any equip macros :-) 81 | if (GetActionTexture(i) == texture) then 82 | lazyScript.autoShotSlot = i 83 | lazyScript.d(FOUND_AUTO_SHOT..i..".") 84 | break 85 | end 86 | end 87 | end 88 | end 89 | 90 | if (not lazyScript.autoShotSlot) then 91 | if (not sayNothing) then 92 | lazyScript.p(COULDNT_FIND_AUTO_SHOT) 93 | end 94 | end 95 | else 96 | lazyScript.autoShotSlot = nil 97 | end 98 | return lazyScript.autoShotSlot 99 | end 100 | 101 | 102 | -- For AutoWand 103 | function lazyScript.IsAutoWanding(sayNothing) 104 | if lazyScript.GetShootSlot(sayNothing) then 105 | return (IsAutoRepeatAction(lazyScript.autoWandSlot) == 1) 106 | end 107 | return nil 108 | end 109 | 110 | function lazyScript.StartWanding() 111 | if (lazyScript.IsAutoWanding() == false) then 112 | UseAction(lazyScript.autoWandSlot) 113 | end 114 | end 115 | 116 | function lazyScript.StopWanding() 117 | if (lazyScript.IsAutoWanding() == true) then 118 | UseAction(lazyScript.autoWandSlot) 119 | end 120 | end 121 | 122 | function lazyScript.ClassCanAutoWand() 123 | local _, class = UnitClass("player") 124 | if class == "MAGE" or class == "PRIEST" or class == "WARLOCK" then 125 | return true 126 | end 127 | end 128 | 129 | function lazyScript.GetShootSlot(sayNothing) 130 | local texture = lazyScript.GetRangedWeaponTexture() 131 | if texture then 132 | 133 | if lazyScript.autoWandSlot then 134 | return lazyScript.autoWandSlot 135 | end 136 | 137 | for i = 1, 120 do 138 | if (not GetActionText(i)) then -- ignore any Player macros :-) 139 | if (not IsEquippedAction(i)) then -- ignore any equip macros :-) 140 | if (GetActionTexture(i) == texture) then 141 | lazyScript.autoWandSlot = i 142 | lazyScript.d(FOUND_SHOOT_WAND..i..".") 143 | break 144 | end 145 | end 146 | end 147 | end 148 | 149 | if (not lazyScript.autoWandSlot) then 150 | if (not sayNothing) then 151 | lazyScript.p(COULDNT_FIND_SHOOT_WAND) 152 | end 153 | end 154 | else 155 | lazyScript.autoWandSlot = nil 156 | end 157 | return lazyScript.autoWandSlot 158 | end -------------------------------------------------------------------------------- /LazyScript/Bindings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | lazyScript.SlashCommand() 4 | 5 | 6 | lazyScript.UseBoundForm(1); 7 | 8 | 9 | lazyScript.UseBoundForm(2); 10 | 11 | 12 | lazyScript.UseBoundForm(3); 13 | 14 | 15 | lazyScript.UseBoundForm(4); 16 | 17 | 18 | lazyScript.UseBoundForm(5); 19 | 20 | 21 | lazyScript.UseBoundForm(6); 22 | 23 | 24 | lazyScript.UseBoundForm(7); 25 | 26 | 27 | lazyScript.UseBoundForm(8); 28 | 29 | 30 | lazyScript.UseBoundForm(9); 31 | 32 | 33 | lazyScript.UseBoundForm(10); 34 | 35 | -------------------------------------------------------------------------------- /LazyScript/Deathstimator.lua: -------------------------------------------------------------------------------- 1 | lazyScript.metadata:updateRevisionFromKeyword("$Revision: 746 $") 2 | 3 | -- Deathstimator support 4 | 5 | lazyScript.deathstimator = {} 6 | 7 | function lazyScript.deathstimator.OnUnitHealth(unitId) 8 | if (unitId == "target") then 9 | -- Doesn't matter if it's hp or hpp 10 | local hp = UnitHealth(unitId) 11 | if not hp then 12 | return 13 | end 14 | lazyScript.targetHealthHistory:AddInfo(hp) 15 | end 16 | end 17 | 18 | 19 | -- Target Health History Object 20 | -- Used for computing the best fit line (slope) for the Target's health. 21 | -- 22 | -- Compute the best slope using the method of least squares. 23 | -- http://www.acad.sunytccc.edu/instruct/sbrown/stat/leastsq.htm 24 | -- 25 | -- Wow, I NEVER thought I'd ever use ANYTHING like this in real life. 26 | -- Haha, and then, it's only for a computer game. 27 | -- Ms. Chen, my high school Calculus teacher, would be so proud. Nah, 28 | -- probably still too pissed at me. 29 | -- 30 | 31 | lazyScript.deathstimator.minEntries = 5 32 | lazyScript.deathstimator.HealthHistory = {} 33 | 34 | function lazyScript.deathstimator.HealthHistory:New() 35 | local obj = {} 36 | setmetatable(obj, { __index = self }) 37 | lazyScript.deathstimator.HealthHistory.Reset(obj) 38 | return obj 39 | end 40 | 41 | function lazyScript.deathstimator.HealthHistory:Reset() 42 | self.info = {} 43 | self.ctr = 0 44 | self.lastCtrComputed = 0 45 | self.m = 0 46 | end 47 | 48 | function lazyScript.deathstimator.HealthHistory:AddInfo(hp) 49 | self.ctr = self.ctr + 1 50 | 51 | local now = GetTime() 52 | table.insert(self.info, { time = now, hp = hp }) 53 | 54 | -- Remove entries which are older than the configured sample window, 55 | -- but retain a minimum number of entries. 56 | --local ct = 0 57 | local cutOffTime = now - lazyScript.perPlayerConf.healthHistorySize 58 | while table.getn(self.info) > lazyScript.deathstimator.minEntries do 59 | if self.info[1].time >= cutOffTime then 60 | break 61 | end 62 | table.remove(self.info, 1) 63 | --ct = ct + 1 64 | end 65 | --lazyScript.d("AddInfo: trimmed "..ct.." expired entries.") 66 | end 67 | 68 | function lazyScript.deathstimator.HealthHistory:GetN() 69 | return table.getn(self.info) 70 | end 71 | 72 | function lazyScript.deathstimator.HealthHistory:ComputeSlope() 73 | local n = self:GetN() 74 | if (n == 0) then 75 | return nil 76 | end 77 | if (self.ctr == self.lastCtrComputed) then 78 | return self.m 79 | end 80 | self.lastCtrComputed = self.ctr 81 | 82 | local xSum = 0 83 | local ySum = 0 84 | local xSquaredSum = 0 85 | local xySum = 0 86 | for idx, healthInfo in ipairs(self.info) do 87 | local time = healthInfo.time 88 | local hp = healthInfo.hp 89 | -- time is the x access, hp is the y access 90 | xSum = xSum + time 91 | ySum = ySum + hp 92 | xSquaredSum = xSquaredSum + (time * time) 93 | xySum = xySum + (time * hp) 94 | end 95 | 96 | if (xSquaredSum == 0 or xSum == 0) then 97 | return nil 98 | end 99 | 100 | self.m = ( (n * xySum) - (xSum * ySum) ) / ( (n * xSquaredSum) - (xSum * xSum) ) 101 | 102 | return self.m 103 | end 104 | 105 | 106 | 107 | 108 | -- Deathstimator minion 109 | 110 | lazyScript.deathstimator.minion = {} 111 | lazyScript.deathstimator.minion.lastUpdate = 0 112 | lazyScript.deathstimator.minion.updateInterval = 0.25 113 | 114 | 115 | function lazyScript.deathstimator.minion.OnUpdate() 116 | if (not lazyScript.addOnIsActive) then 117 | return 118 | end 119 | if (not lazyScript.perPlayerConf.deathMinionIsVisible) then 120 | return 121 | end 122 | 123 | local now = GetTime() 124 | if (now >= (lazyScript.deathstimator.minion.lastUpdate + lazyScript.deathstimator.minion.updateInterval)) then 125 | lazyScript.deathstimator.minion.lastUpdate = now 126 | 127 | if (lazyScript.perPlayerConf.deathMinionHidesOutOfCombat) then 128 | if (not lazyScript.isInCombat and LazyScriptDeathstimatorFrame:IsShown()) then 129 | lazyScript.d(YOURE_NOT_IN_COMBAT) 130 | LazyScriptDeathstimatorFrame:Hide() 131 | end 132 | if (lazyScript.isInCombat and not LazyScriptDeathstimatorFrame:IsShown()) then 133 | lazyScript.d(YOURE_IN_COMBAT) 134 | LazyScriptDeathstimatorFrame:Show() 135 | end 136 | end 137 | 138 | if (not UnitName("target")) then 139 | return 140 | end 141 | 142 | if (lazyScript.isInCombat) then 143 | local text 144 | local m, timeToDeath = lazyScript.deathstimator.timeToDeath() 145 | if m == nil then 146 | text = GATHERING 147 | elseif m > 0 then 148 | -- Target is gaining health. Recalibrate. 149 | text = RECALIBRATING 150 | else 151 | text = DEATH_IN..string.format("%.1f", timeToDeath)..S 152 | end 153 | lazyScript.deathstimator.minion.SetText(text) 154 | end 155 | end 156 | end 157 | 158 | function lazyScript.deathstimator.minion.OnEnter(button) 159 | GameTooltip:SetOwner(button, "ANCHOR_RIGHT") 160 | GameTooltip:AddLine(lazyScript.metadata.name.." "..DEATHSTIMATOR) 161 | GameTooltip:AddLine(DEATHSTIMATOR_TOOLTIP) 162 | GameTooltip:Show() 163 | end 164 | 165 | function lazyScript.deathstimator.minion.OnLeave(button) 166 | GameTooltip:Hide() 167 | end 168 | 169 | function lazyScript.deathstimator.minion.SetText(text) 170 | if (not text) then 171 | text = "" 172 | end 173 | LazyScriptDeathstimatorText:SetText(text) 174 | end 175 | 176 | function lazyScript.deathstimator.timeToDeath() 177 | if (not UnitExists("target")) then 178 | return nil 179 | end 180 | 181 | local currentHp = UnitHealth("target") 182 | if (not currentHp or currentHp == 0) then 183 | return nil 184 | end 185 | 186 | local n = lazyScript.targetHealthHistory:GetN() 187 | -- we want at least two data points to make a line 188 | if (n < 2) then 189 | return nil 190 | end 191 | 192 | local m = lazyScript.targetHealthHistory:ComputeSlope() 193 | -- m is the slope, or hp(p) per second 194 | if (not m) then 195 | return nil 196 | end 197 | 198 | return m, math.abs(currentHp / m) 199 | end -------------------------------------------------------------------------------- /LazyScript/Deathstimator.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 8 | 9 | 10 | lazyScript.metadata:updateRevisionFromKeyword("$Revision: 171 $") 11 | this:RegisterForDrag("LeftButton") 12 | 13 | 14 | lazyScript.deathstimator.minion.OnUpdate() 15 | 16 | 17 | if (IsShiftKeyDown()) then 18 | this:StartMoving() 19 | end 20 | 21 | 22 | this:StopMovingOrSizing() 23 | 24 | 25 | this:StopMovingOrSizing() 26 | 27 | 28 | lazyScript.deathstimator.minion.OnEnter(this) 29 | 30 | 31 | lazyScript.deathstimator.minion.OnLeave(this) 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 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 | -------------------------------------------------------------------------------- /LazyScript/Immunity.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 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 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | HideUIPanel(LazyScriptImmunityExceptionCriteriaEditFrame) 120 | HideUIPanel(LazyScriptFormHelp) 121 | 122 | 123 | HideUIPanel(LazyScriptImmunityExceptionCriteriaEditFrame) 124 | HideUIPanel(LazyScriptFormHelp) 125 | 126 | 127 | this:SetFocus() 128 | 129 | 130 | LAZYSCRIPTHELP_SCROLLBAR_HACK3 = false 131 | 132 | 133 | LAZYSCRIPTHELP_SCROLLBAR_HACK3 = true 134 | 135 | 136 | ScrollingEdit_OnTextChanged(LazyScriptImmunityExceptionCriteriaScrollFrame) 137 | 138 | 139 | ScrollingEdit_OnCursorChanged(arg1, arg2-10, arg3, arg4) 140 | 141 | 142 | if (LAZYSCRIPTHELP_SCROLLBAR_HACK3) then 143 | ScrollingEdit_OnUpdate(LazyScriptImmunityExceptionCriteriaScrollFrame) 144 | end 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | LazyScriptImmunityExceptionCriteriaEditFrameForm:SetFocus() 158 | 159 | 160 | 161 | 162 | 163 | 178 | 179 | 200 | 201 | 220 | 221 | 239 | 240 | 241 | 242 | 243 | 244 | lazyScript.immunityEditBox.OnShow() 245 | 246 | 247 | lazyScript.immunityEditBox.OnHide() 248 | 249 | 250 | lazyScript.metadata:updateRevisionFromKeyword("$Revision: 171 $") 251 | this:RegisterForDrag("LeftButton") 252 | 253 | 254 | this:StartMoving() 255 | 256 | 257 | this:StopMovingOrSizing() 258 | 259 | 260 | this:StopMovingOrSizing() 261 | 262 | 263 | 264 | 265 | 266 | -------------------------------------------------------------------------------- /LazyScript/ImmunityTypeTracking.lua: -------------------------------------------------------------------------------- 1 | lazyScript.metadata:updateRevisionFromKeyword("$Revision: 702 $") 2 | 3 | --Immunity Code - Thanks to Astryl - http://www.curse-gaming.com/en/wow/addons-3321-1-feralskills.html 4 | 5 | 6 | function lazyScript.WatchForImmunes(text) 7 | local immune = lazyScript.getLocaleString("IMMUNE", false, true) 8 | local immuneProblemCreatures = lazyScript.getLocaleString("IMMUNITYPROBLEMCREATURES", false, true) 9 | if (not immune) then 10 | lazyScript.d(IMMUNITY_TRACKING_NOT_SUPPORTED) 11 | return 12 | end 13 | if (not immuneProblemCreatures) then 14 | lazyScript.d(IMMUNITY_TRACKING_NOT_100) 15 | end 16 | for spell, creature in string.gfind(text, immune) do 17 | --Ignore non-targets (or at least, try, based on name), banished targets, 18 | -- or known problematic targets (targets that have temporary immunities) 19 | if (UnitName('target') ~= creature or lazyScript.masks.HasBuffOrDebuff("target", "debuff", nil, "Cripple", nil)) then 20 | return 21 | end 22 | for _, problemCreature in ipairs(immuneProblemCreatures) do 23 | if string.find(creature, problemCreature) then 24 | return 25 | end 26 | end 27 | --ignore players namly pallys 28 | if UnitIsPlayer("target") then 29 | return 30 | end 31 | if lazyScript.perPlayerConf.Immunities[spell] then 32 | if lazyScript.perPlayerConf.Immunities[spell][creature] then 33 | return 34 | end 35 | end 36 | 37 | lazyScript.d(IMMUNITY_DETECTED..spell..IMMUNITY_CREATURE..creature) 38 | if not lazyScript.perPlayerConf.Immunities[spell] then 39 | lazyScript.perPlayerConf.Immunities[spell] = {}; 40 | end 41 | lazyScript.perPlayerConf.Immunities[spell][creature] = true; 42 | end 43 | end 44 | 45 | 46 | -- damage type tracking F3 - Saved globally across chars. 47 | function lazyScript.WatchForType(text) 48 | local spellText = lazyScript.getLocaleString("SPELLTEXT", false, true) 49 | local spellTypeStrings = lazyScript.getLocaleString("SPELLTYPE", false, true) 50 | if (not spellText) or (not spellTypeStrings) then 51 | lazyScript.d(IMMUNITY_TYPE_TRACKING_NOT_SUPPORTED) 52 | return 53 | end 54 | 55 | local spell = nil 56 | local spellType = nil 57 | for _, pat in ipairs(spellText) do 58 | for match1, match2 in string.gfind(text, pat) do 59 | for _, localeString in pairs(spellTypeStrings) do 60 | if match1 == localeString then 61 | spell = match2 62 | spellType = match1 63 | break 64 | elseif match2 == localeString then 65 | spell = match1 66 | spellType = match2 67 | break 68 | end 69 | end 70 | 71 | if (not spell) or (not spellType) then 72 | -- Take this out eventually 73 | lazyScript.d(COULD_NOT_DETERMINE_SPELLTYPE..text) 74 | return 75 | end 76 | 77 | if lsConfGlobal.SpellType[spell] then 78 | if lsConfGlobal.SpellType[spell][string.upper(spellType)] then 79 | return 80 | end 81 | else 82 | lazyScript.d(NEW_SPELL_TYPE_DETECTED..spell..TYPE..spellType) 83 | lsConfGlobal.SpellType[spell] = {}; 84 | lsConfGlobal.SpellType[spell][string.upper(spellType)] = true 85 | end 86 | end 87 | end 88 | end 89 | 90 | 91 | -- Immunity Criteria Edit Box F3/Ith 92 | 93 | lazyScript.immunityEditBox = {} 94 | 95 | lazyScript.immunityEditBox.cancelEdit = false 96 | 97 | function lazyScript.immunityEditBox.OnShow() 98 | local text = "" 99 | for action, mobs in pairs(lazyScript.perPlayerConf.Immunities) do 100 | for mob in pairs(mobs) do 101 | lazyScript.d(action) 102 | lazyScript.d(mob) 103 | text = text..action.."#ImmuneOn#"..mob.."\r\n" 104 | end 105 | end 106 | if text=="" then 107 | text = "Cheap Shot#ImmuneOn#Example Creature\r\n" 108 | end 109 | LazyScriptImmunityExceptionCriteriaEditFrameForm:SetText(text) 110 | end 111 | 112 | function lazyScript.immunityEditBox.OnHide() 113 | if (lazyScript.immunityEditBox.cancelEdit) then 114 | lazyScript.immunityEditBox.cancelEdit = false 115 | return 116 | end 117 | 118 | local text = LazyScriptImmunityExceptionCriteriaEditFrameForm:GetText() 119 | 120 | lazyScript.perPlayerConf.Immunities = {} 121 | 122 | for arg in string.gfind(text, "[^\r\n]+") do 123 | lazyScript.re(arg, "^(.+)#ImmuneOn#(.+)$") 124 | if lazyScript.match1 and lazyScript.match2 then 125 | if not lazyScript.perPlayerConf.Immunities[lazyScript.match1] then 126 | lazyScript.perPlayerConf.Immunities[lazyScript.match1] = {}; 127 | end 128 | lazyScript.perPlayerConf.Immunities[lazyScript.match1][lazyScript.match2] = true 129 | end 130 | end 131 | 132 | lazyScript.p(GLOBAL_IMMUNITY_CRITERIA_UPDATED) 133 | end -------------------------------------------------------------------------------- /LazyScript/Interrupt.lua: -------------------------------------------------------------------------------- 1 | lazyScript.metadata:updateRevisionFromKeyword("$Revision: 622 $") 2 | 3 | -- Interrupt support 4 | 5 | lazyScript.interrupt = {} 6 | 7 | lazyScript.interrupt.targetCasting = nil 8 | lazyScript.interrupt.castingDetectedAt = 0 9 | lazyScript.interrupt.lastSpellInterrupted = nil 10 | 11 | 12 | function lazyScript.interrupt.OnChatMsgSpell(arg1) 13 | local tName = UnitName("target") 14 | local spellCastOtherStart = lazyScript.getLocaleString("SPELLCASTOTHERSTART") 15 | local spellPerformOtherStart = lazyScript.getLocaleString("SPELLPERFORMOTHERSTART") 16 | if (not spellCastOtherStart) or (not spellPerformOtherStart) then 17 | lazyScript.d(INTERRUPTS_NOT_SUPPORTED) 18 | return 19 | end 20 | if (tName) then 21 | for idx, pat in ipairs({ spellCastOtherStart, spellPerformOtherStart }) do 22 | for mob, spell in string.gfind(arg1, pat) do 23 | if (mob == tName) then 24 | lazyScript.d(DETECTED_YOUR_TARGET..spell..SUGGEST_INTERRUPT) 25 | if (lazyScript.perPlayerConf.showTargetCasts) then 26 | lazyScript.p(tName..IS_CASTING..spell..".") 27 | end 28 | lazyScript.interrupt.targetCasting = spell 29 | lazyScript.interrupt.castingDetectedAt = GetTime() 30 | return 31 | end 32 | end 33 | end 34 | end 35 | end 36 | 37 | 38 | -- Interrupt Criteria Edit Box 39 | 40 | lazyScript.interruptEditBox = {} 41 | 42 | lazyScript.interruptEditBox.cancelEdit = false 43 | 44 | function lazyScript.interruptEditBox.OnShow() 45 | local text = table.concat(lsConf.interruptExceptionCriteria, "\n") 46 | LazyScriptInterruptExceptionCriteriaEditFrameForm:SetText(text) 47 | end 48 | 49 | function lazyScript.interruptEditBox.OnHide() 50 | if (lazyScript.interruptEditBox.cancelEdit) then 51 | lazyScript.interruptEditBox.cancelEdit = false 52 | return 53 | end 54 | 55 | local text = LazyScriptInterruptExceptionCriteriaEditFrameForm:GetText() 56 | 57 | local args = {} 58 | for arg in string.gfind(text, "[^\r\n]+") do 59 | table.insert(args, arg) 60 | end 61 | lsConf.interruptExceptionCriteria = args 62 | 63 | lazyScript.p(GLOBAL_INTERRUPT_CRITERIA_UPDATED) 64 | lazyScript.masks.parsingInterruptExceptionCriteria = true 65 | lazyScript.parsedInterruptExceptionCriteriaCache = lazyScript.ParseForm("interruptExceptionCriteria", lsConf.interruptExceptionCriteria) 66 | lazyScript.masks.parsingInterruptExceptionCriteria = false 67 | end -------------------------------------------------------------------------------- /LazyScript/Interrupt.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 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 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | HideUIPanel(LazyScriptInterruptExceptionCriteriaEditFrame) 120 | HideUIPanel(LazyScriptFormHelp) 121 | 122 | 123 | HideUIPanel(LazyScriptInterruptExceptionCriteriaEditFrame) 124 | HideUIPanel(LazyScriptFormHelp) 125 | 126 | 127 | this:SetFocus() 128 | 129 | 130 | LAZYSCRIPTHELP_SCROLLBAR_HACK3 = false 131 | 132 | 133 | LAZYSCRIPTHELP_SCROLLBAR_HACK3 = true 134 | 135 | 136 | ScrollingEdit_OnTextChanged(LazyScriptInterruptExceptionCriteriaScrollFrame) 137 | 138 | 139 | ScrollingEdit_OnCursorChanged(arg1, arg2-10, arg3, arg4) 140 | 141 | 142 | if (LAZYSCRIPTHELP_SCROLLBAR_HACK3) then 143 | ScrollingEdit_OnUpdate(LazyScriptInterruptExceptionCriteriaScrollFrame) 144 | end 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | LazyScriptInterruptExceptionCriteriaEditFrameForm:SetFocus() 158 | 159 | 160 | 161 | 162 | 163 | 178 | 179 | 200 | 201 | 220 | 221 | 239 | 240 | 241 | 242 | 243 | 244 | lazyScript.interruptEditBox.OnShow() 245 | 246 | 247 | lazyScript.interruptEditBox.OnHide() 248 | 249 | 250 | lazyScript.metadata:updateRevisionFromKeyword("$Revision: 171 $") 251 | this:RegisterForDrag("LeftButton") 252 | 253 | 254 | this:StartMoving() 255 | 256 | 257 | this:StopMovingOrSizing() 258 | 259 | 260 | this:StopMovingOrSizing() 261 | 262 | 263 | 264 | 265 | 266 | -------------------------------------------------------------------------------- /LazyScript/LSActionsWarrior.md: -------------------------------------------------------------------------------- 1 | List of known Spells/Actions 2 | ============================ 3 | 4 | A specific spell rank can be directed at a particular unit using the 5 | syntax: 6 | ``` 7 | action[(rankXX)][] 8 | ``` 9 | The \ can be any valid UnitId sequence as described in [http://www.wowwiki.com/UnitId](http://web.archive.org/web/20070422180647/http://www.wowwiki.com/UnitId) . For example, \@player, \@pet, 10 | \@target, \@targettarget. Note that the rank of the spell must always 11 | appear before the '@' symbol. 12 | 13 | Actions in green do not trigger the global cooldown. LazyScript is able 14 | to perform multiple of these actions on a single line provided that the 15 | line has at most one action that triggers the global cooldown. 16 | 17 | Full Name = Short Name 18 | ---------------------- 19 | 20 | **Aggressive** = *petAggressive* 21 | 22 | **Battle Shout** = battleShout 23 | 24 | **Berserker Rage** = berserkerRage 25 | 26 | **Berserking** = berserking 27 | 28 | **Blood Fury** = bloodFury 29 | 30 | **Bloodrage** = bloodrage 31 | 32 | **Bloodthirst** = bloodthirst 33 | 34 | **Cannibalize** = cannibalize 35 | 36 | **Challenging Shout** = challengingShout 37 | 38 | **Charge** = charge 39 | 40 | **Cleave** = cleave 41 | 42 | **Concussion Blow** = concussionBlow 43 | 44 | **Death Wish** = deathWish 45 | 46 | **Defensive** = petDefensive 47 | 48 | **Demoralizing Shout** = demoShout 49 | 50 | **Disarm** = disarm 51 | 52 | **Escape Artist** = escapeArtist 53 | 54 | **Execute** = execute 55 | 56 | **Find Herbs** = findHerbs 57 | 58 | **Find Minerals** = findMinerals 59 | 60 | **Find Treasure** = findTreasure 61 | 62 | **Follow** = petFollow 63 | 64 | **Hamstring** = hamstring 65 | 66 | **Heroic Strike** = heroicStrike 67 | 68 | **Intercept** = intercept 69 | 70 | **Intimidating Shout** = intimidatingShout 71 | 72 | **Last Stand** = lastStand 73 | 74 | **Mocking Blow** = mockingBlow 75 | 76 | **Mortal Strike** = mortalStrike 77 | 78 | **Overpower** = overpower 79 | 80 | **Passive** = petPassive 81 | 82 | **Perception** = perception 83 | 84 | **Piercing Howl** = piercingHowl 85 | 86 | **Pummel** = pummel 87 | 88 | **Recklessness** = recklessness 89 | 90 | **Rend** = rend 91 | 92 | **Retaliation** = retaliation 93 | 94 | **Revenge** = revenge 95 | 96 | **Shadowmeld** = shadowmeld 97 | 98 | **Shield Bash** = shieldBash 99 | 100 | **Shield Block** = shieldBlock 101 | 102 | **Shield Slam** = shieldSlam 103 | 104 | **Shield Wall** = shieldWall 105 | 106 | **Shoot Bow** = bow 107 | 108 | **Shoot Crossbow** = crossbow 109 | 110 | **Shoot Gun** = gun 111 | 112 | **Slam** = slam 113 | 114 | **Stay** = petStay 115 | 116 | **Stoneform** = stoneForm 117 | 118 | **Sunder Armor** = sunder 119 | 120 | **Sweeping Strikes** = sweepingStrikes 121 | 122 | **Taunt** = taunt 123 | 124 | **Throw** = throw 125 | 126 | **Thunder Clap** = thunderClap 127 | 128 | **War Stomp** = warStomp 129 | 130 | **Whirlwind** = whirlwind 131 | 132 | **Will of the Forsaken** = forsaken 133 | 134 | Other Actions 135 | ------------- 136 | 137 | **Battle Stance** = battle 138 | 139 | **Berserker Stance** = berserk 140 | 141 | **Defensive Stance** = defensive 142 | 143 | Special Actions 144 | --------------- 145 | 146 | **Assist Pet** = assistPet 147 | 148 | **Assist** = assist 149 | 150 | **Auto Shot** = autoShot 151 | 152 | **Auto Target/Attack** = autoAttack 153 | 154 | **Clear History** = clearHistory 155 | 156 | **Clear Target** = clearTarget 157 | 158 | **Dismount** = dismount 159 | 160 | **Pet Attack** = petAttack 161 | 162 | **Pet Stop** = petStop 163 | 164 | **Ping** = ping 165 | 166 | **Stop All** = stopAll 167 | 168 | **Stop Auto Shot** = stopShot 169 | 170 | **Stop Auto-Attack** = stopAttack 171 | 172 | **Stop Casting** = stopCasting 173 | 174 | **Stop Wand** = stopWand 175 | 176 | **Stop** = stop 177 | 178 | **Target Last** = targetLast 179 | 180 | **Target Nearest Friend** = targetNearestFriend 181 | 182 | **Target Nearest** = targetNearest 183 | 184 | **Wand** = wand 185 | 186 | Actions that take parameters 187 | ---------------------------- 188 | 189 | Use an action: 190 | ``` 191 | action= 192 | ``` 193 | Use an action that does not trigger the global cooldown: 194 | ``` 195 | freeAction= 196 | ``` 197 | Use a pet action: 198 | ``` 199 | petAction= 200 | ``` 201 | Use an item in your equipment or inventory: 202 | ``` 203 | use= 204 | ``` 205 | Use an item only if it is equipped: 206 | ``` 207 | useEquipped= 208 | ``` 209 | Use an item in your equipment or inventory that does not trigger the global cooldown: 210 | ``` 211 | useFreeItem= 212 | ``` 213 | Use an item that does not trigger the global cooldown only if it is equipped: 214 | ``` 215 | useFreeEquippedItem= 216 | ``` 217 | Apply an item weapon buff: 218 | ``` 219 | apply{MainHand,OffHand}Buff= 220 | ``` 221 | Equip a weapon in your main hand: 222 | ``` 223 | equipMainHand= 224 | ``` 225 | Equip a weapon in your off hand: 226 | ``` 227 | equipOffHand= 228 | ``` 229 | Echo the message to your chat: 230 | ``` 231 | echo= 232 | ``` 233 | Say the message in the specified channel: 234 | ``` 235 | sayIn{Emote, Guild, Minion, Party, Raid, RAID_WARNING, Say, Yell} = 236 | ``` 237 | Whisper the message to the specified player or unitId: 238 | ``` 239 | whisperTo{playerName, } = 240 | ``` 241 | Cancel the specified buff: 242 | ``` 243 | cancelBuff= 244 | ``` 245 | Cancel the specified buff by title: 246 | ``` 247 | cancelBuffTitle= 248 | ``` 249 | Set the specified form as the default: 250 | ``` 251 | setForm=
252 | ``` 253 | Target a specific unit: 254 | ``` 255 | targetUnit= 256 | ``` 257 | Cast a spell on a specific unit: 258 | ``` 259 | spellTargetUnit= 260 | ``` 261 | Target a player/creature by their exact name: 262 | ``` 263 | targetByName= 264 | ``` 265 | Perform emote \(See [http://www.wowwiki.com/API_TYPE_Emotes_Token](https://web.archive.org/web/20071213125504/http://www.wowwiki.com/API_TYPE_Emotes_Token)\): 266 | ``` 267 | doEmote= 268 | ``` 269 | Play sound (See [http://www.wowwiki.com/API_PlaySound](https://web.archive.org/web/20071214171353/http://www.wowwiki.com/API_PlaySound)): 270 | ``` 271 | playSound= 272 | ``` 273 | Meta-Actions 274 | ------------ 275 | 276 | Include the contents of the specified form: 277 | 278 | ``` 279 | gincludeForm= 280 | ``` 281 | 282 | Note: This does not accept criteria. It must appear on a line by 283 | itself. You cannot include a form in itself, nor should you include a 284 | form which includes another form which includes the first (e.g. form A 285 | includes form B includes form A == BAD). 286 | 287 | Call the specified form: 288 | 289 | ``` 290 | callForm= 291 | ``` 292 | 293 | This will try to find a usable action in the specified form, if the criteria on the callForm 294 | action are satisfied. 295 | -------------------------------------------------------------------------------- /LazyScript/LSBuffDebuf.md: -------------------------------------------------------------------------------- 1 | List of known Buffs/Debuffs 2 | =========================== 3 | 4 | 5 | Used with "if\[Not\]{Player,Pet,Target}Has{Buff,Debuff}" and 6 | "if\[Not\]{Buff,Debuff}Duration{<,>}XXs". 7 | 8 | 9 | Full Name = Short Name 10 | ---------------------- 11 | 12 | __Abolish Disease__ = abolishDisease 13 | 14 | __Abolish Poison__ = abolishPoison 15 | 16 | __Adrenaline Rush__ = adrenaline 17 | 18 | __Amplify Curse__ = amplifyCurse 19 | 20 | __Amplify Magic__ = amplifyMagic 21 | 22 | __Aquatic Form__ = aquatic 23 | 24 | __Arcane Brilliance__ = brilliance 25 | 26 | __Arcane Intellect__ = intellect 27 | 28 | __Aspect of the Beast__ = aspectBeast 29 | 30 | __Aspect of the Cheetah__ = aspectCheetah 31 | 32 | __Aspect of the Hawk__ = aspectHawk 33 | 34 | __Aspect of the Monkey__ = aspectMonkey 35 | 36 | __Aspect of the Pack__ = aspectPack 37 | 38 | __Aspect of the Wild__ = aspectWild 39 | 40 | __Banish__ = banish 41 | 42 | __Barkskin__ = barkskin 43 | 44 | __Bash__ = bash 45 | 46 | __Battle Shout__ = battleShout 47 | 48 | __Bear Form__ = bear 49 | 50 | __Berserker Rage__ = berserkerRage 51 | 52 | __Berserking__ = berserking 53 | 54 | __Bestial Wrath__ = bestialWrath 55 | 56 | __Blade Flurry__ = bladeFlurry 57 | 58 | __Blessing of Freedom__ = blessFree 59 | 60 | __Blessing of Kings__ = blessKings 61 | 62 | __Blessing of Light__ = blessLight 63 | 64 | __Blessing of Might__ = blessMight 65 | 66 | __Blessing of Protection__ = blessProt 67 | 68 | __Blessing of Sacrifice__ = blessSac 69 | 70 | __Blessing of Salvation__ = blessSlv 71 | 72 | __Blessing of Sanctuary__ = blessSnct 73 | 74 | __Blessing of Wisdom__ = blessWisdom 75 | 76 | __Blind__ = blind 77 | 78 | __Blood Fury__ = bloodFury 79 | 80 | __Bloodrage__ = bloodrage 81 | 82 | __Brain Food__ = brainFood 83 | 84 | __Cannibalize__ = cannibalize 85 | 86 | __Cat Form__ = cat 87 | 88 | __Challenging Shout__ = challengingShout 89 | 90 | __Cheap Shot__ = cs 91 | 92 | __Clearcasting__ = clearcasting 93 | 94 | __Cold Blood__ = coldBlood 95 | 96 | __Combustion__ = combustion 97 | 98 | __Concentration Aura__ = concAura 99 | 100 | __Concussion Blow__ = concussionBlow 101 | 102 | __Concussive Shot__ = concussive 103 | 104 | __Corruption__ = corruption 105 | 106 | __Curse of Agony__ = curseAgony 107 | 108 | __Curse of Exhaustion__ = curseExhaustion 109 | 110 | __Curse of Recklessness__ = curseReckless 111 | 112 | __Curse of Shadow__ = curseShadow 113 | 114 | __Curse of Tongues__ = curseTongues 115 | 116 | __Curse of Weakness__ = curseWeakness 117 | 118 | __Curse of the Elements__ = curseElements 119 | 120 | __Dampen Magic__ = dampenMagic 121 | 122 | __Dash__ = dash 123 | 124 | __Dazed__ = dazed 125 | 126 | __Death Coil__ = deathCoil 127 | 128 | __Death Wish__ = deathWish 129 | 130 | __Demon Armor__ = demonArmor 131 | 132 | __Demon Skin__ = demonSkin 133 | 134 | __Demoralizing Roar__ = demoralize 135 | 136 | __Demoralizing Shout__ = demoShout 137 | 138 | __Detect Greater Invisibility__ = detectGreaterInvis 139 | 140 | __Detect Invisibility__ = detectInvis 141 | 142 | __Detect Lesser Invisibility__ = detectLesserInvis 143 | 144 | __Devotion Aura__ = devAura 145 | 146 | __Devouring Plague__ = devouringPlague 147 | 148 | __Dire Bear Form__ = direBear 149 | 150 | __Disarm__ = disarm 151 | 152 | __Divine Favor__ = divFavor 153 | 154 | __Divine Protection__ = divProt 155 | 156 | __Divine Shield__ = divShield 157 | 158 | __Divine Spirit__ = divineSpirit 159 | 160 | __Drain Life__ = drainLife 161 | 162 | __Drain Mana__ = drainMana 163 | 164 | __Drain Soul__ = drainSoul 165 | 166 | __Drink__ = drink 167 | 168 | __Eagle Eye__ = eagleEye 169 | 170 | __Elune's Grace__ = elunesGrace 171 | 172 | __Enrage__ = enrage 173 | 174 | __Entangling Roots__ = roots 175 | 176 | __Evasion__ = evasion 177 | 178 | __Evocation__ = evocation 179 | 180 | __Explosive Trap Effect__ = explosiveTrap 181 | 182 | __Expose Armor__ = expose 183 | 184 | __Eyes of the Beast__ = eotb 185 | 186 | __Feral Charge Effect__ = charge 187 | 188 | __Fade__ = fade 189 | 190 | __Faerie Fire__ = faerieFire 191 | 192 | __Fear Ward__ = fearWard 193 | 194 | __Fear__ = fear 195 | 196 | __Feed Pet Effect__ = feedPet 197 | 198 | __Feedback__ = feedback 199 | 200 | __Feign Death__ = feign 201 | 202 | __Fire Resistance Aura__ = fireAura 203 | 204 | __Fire Resistance__ = fireResistTotem 205 | 206 | __Fire Vulnerability__ = fireVulnerability 207 | 208 | __Fire Ward__ = fireWard 209 | 210 | __First Aid__ = firstAid 211 | 212 | __Flame Shock__ = flameShock 213 | 214 | __FlameTongue__ = flameTotem 215 | 216 | __Food__ = fishFood 217 | 218 | __Food__ = food 219 | 220 | __Forbearance__ = forbearance 221 | 222 | __Freezing Trap__ = freezingTrap 223 | 224 | __Frenzied Regeneration__ = frenziedRegen 225 | 226 | __Frost Armor__ = frostArmor 227 | 228 | __Frost Resistance__ = frostResistTotem 229 | 230 | __Frost Trap Aura__ = frostTrap 231 | 232 | __Frost Ward__ = frostWard 233 | 234 | __Frostbolt__ = frostbolt 235 | 236 | __Furious Howl__ = furiousHowl 237 | 238 | __Garrote__ = garrote 239 | 240 | __Ghost Wolf__ = ghostwolf 241 | 242 | __Ghostly Strike__ = ghostly 243 | 244 | __Gift of the Wild__ = gotw 245 | 246 | __Gouge__ = gouge 247 | 248 | __Grace of Air__ = graceTotem 249 | 250 | __Greater Blessing of Kings__ = gBlessKings 251 | 252 | __Greater Blessing of Light__ = gBlessLight 253 | 254 | __Greater Blessing of Might__ = gBlessMight 255 | 256 | __Greater Blessing of Salvation__ = gBlessSlv 257 | 258 | __Greater Blessing of Sanctuary__ = gBlessSnct 259 | 260 | __Greater Blessing of Wisdom__ = gBlessWisdom 261 | 262 | __Hamstring__ = hamstring 263 | 264 | __Healing Stream__ = hsTotem 265 | 266 | __Health Funnel__ = funnel 267 | 268 | __Hellfire__ = hellfire 269 | 270 | __Hemorrhage__ = hemo 271 | 272 | __Hex of Weakness__ = hexWeakness 273 | 274 | __Hibernate__ = hibernate 275 | 276 | __Holy Fire__ = holyFire 277 | 278 | __Holy Shield__ = holyShield 279 | 280 | __Howl of Terror__ = howl 281 | 282 | __Hunter's Mark__ = huntersMark 283 | 284 | __Ice Armor__ = iceArmor 285 | 286 | __Ice Barrier__ = iceBarrier 287 | 288 | __Ice Block__ = iceBlock 289 | 290 | __Ignite__ = ignite 291 | 292 | __Immolate__ = immolate 293 | 294 | __Immolation Trap Effect__ = immolationTrap 295 | 296 | __Inner Fire__ = innerFire 297 | 298 | __Inner Focus__ = innerFocus 299 | 300 | __Innervate__ = innervate 301 | 302 | __Insect Swarm__ = swarm 303 | 304 | __Intimidating Shout__ = intimidatingShout 305 | 306 | __Intimidation__ = intimidate 307 | 308 | __Judgement of Justice__ = judgeJustice 309 | 310 | __Judgement of Light__ = judgeLight 311 | 312 | __Judgement of Wisdom__ = judgeWisdom 313 | 314 | __Judgement of the Crusader__ = judgeCrusader 315 | 316 | __Kidney Shot__ = ks 317 | 318 | __Last Stand__ = lastStand 319 | 320 | __Levitate__ = levitate 321 | 322 | __Lightning Shield__ = lightShield 323 | 324 | __Lightwell Renew__ = lightwellRenew 325 | 326 | __Lightwell__ = lightwell 327 | 328 | __Mage Armor__ = mageArmor 329 | 330 | __Mana Shield__ = manaShield 331 | 332 | __Mana Spring__ = msTotem 333 | 334 | __Mana Tide__ = mtTotem 335 | 336 | __Mark of the Wild__ = motw 337 | 338 | __Mind Control__ = mindControl 339 | 340 | __Mind Flay__ = mindFlay 341 | 342 | __Mind Soothe__ = mindSoothe 343 | 344 | __Mind Vision__ = mindVision 345 | 346 | __Mocking Blow__ = mockingBlow 347 | 348 | __Moonfire__ = moonfire 349 | 350 | __Moonkin Form__ = moonkin 351 | 352 | __Mortal Strike__ = mortalStrike 353 | 354 | __Nature Resistance__ = natureResistTotem 355 | 356 | __Nature's Grasp__ = grasp 357 | 358 | __Nature's Swiftness__ = ns 359 | 360 | __Omen of Clarity__ = ooc 361 | 362 | __Piercing Howl__ = piercingHowl 363 | 364 | __Polymorph: Pig__ = polymorphPig 365 | 366 | __Polymorph: Turtle__ = polymorphTurtle 367 | 368 | __Polymorph__ = polymorph 369 | 370 | __Pounce Bleed__ = pounce 371 | 372 | __Power Infusion__ = powerInfusion 373 | 374 | __Power Word: Fortitude__ = pwf 375 | 376 | __Power Word: Shield__ = pws 377 | 378 | __Prayer of Fortitude__ = prf 379 | 380 | __Prayer of Shadow Protection__ = prsp 381 | 382 | __Prayer of Spirit__ = prs 383 | 384 | __Prowl__ = petProwl 385 | 386 | __Prowl__ = prowl 387 | 388 | __Psychic Scream__ = psychicScream 389 | 390 | __Quick Shots__ = quickShots 391 | 392 | __Rake__ = rake 393 | 394 | __Rapid Fire__ = rapidFire 395 | 396 | __Recently Bandaged__ = recentlyBandaged 397 | 398 | __Recklessness__ = recklessness 399 | 400 | __Redoubt__ = redoubt 401 | 402 | __Regrowth__ = regrowth 403 | 404 | __Rejuvenation__ = rejuv 405 | 406 | __Remorseless__ = remorseless 407 | 408 | __Rend__ = rend 409 | 410 | __Renew__ = renew 411 | 412 | __Repentance__ = repentance 413 | 414 | __Retaliation__ = retaliation 415 | 416 | __Retribution Aura__ = retAura 417 | 418 | __Righteous Fury__ = rightFury 419 | 420 | __Rip__ = rip 421 | 422 | __Rupture__ = rupture 423 | 424 | __Sacrifice__ = sacrifice 425 | 426 | __Sanctity Aura__ = sanctAura 427 | 428 | __Sap__ = sap 429 | 430 | __Scare Beast__ = scare 431 | 432 | __Scatter Shot__ = scatter 433 | 434 | __Scorpid Sting__ = scorpid 435 | 436 | __Seal of Command__ = sealCommand 437 | 438 | __Seal of Justice__ = sealJustice 439 | 440 | __Seal of Light__ = sealLight 441 | 442 | __Seal of Righteousness__ = sealRight 443 | 444 | __Seal of Wisdom__ = sealWisdom 445 | 446 | __Seal of the Crusader__ = sealCrusader 447 | 448 | __Seduction__ = seduction 449 | 450 | __Sense Demons__ = senseDemons 451 | 452 | __Serpent Sting__ = serpent 453 | 454 | __Shackle Undead__ = shackleUndead 455 | 456 | __Shadow Protection__ = shadowProtection 457 | 458 | __Shadow Resistance Aura__ = shadowAura 459 | 460 | __Shadow Trance__ = shadowTrance 461 | 462 | __Shadow Vulnerability__ = shadowVulnerability 463 | 464 | __Shadow Ward__ = shadowWard 465 | 466 | __Shadow Word: Pain__ = swp 467 | 468 | __Shadowburn__ = shadowburn 469 | 470 | __Shadowform__ = shadowform 471 | 472 | __Shadowguard__ = shadowguard 473 | 474 | __Shadowmeld__ = shadowmeld 475 | 476 | __Shield Block__ = shieldBlock 477 | 478 | __Shield Wall__ = shieldWall 479 | 480 | __Silverwing Flag__ = silverwingFlag 481 | 482 | __Siphon Life__ = siphon 483 | 484 | __Slice and Dice__ = snd 485 | 486 | __Soothe Animal__ = soothe 487 | 488 | __Soul Link__ = soulLink 489 | 490 | __Spirit Tap__ = spiritTap 491 | 492 | __Starshards__ = starshards 493 | 494 | __Stealth__ = stealth 495 | 496 | __Stoneskin__ = skinTotem 497 | 498 | __Strength of Earth__ = strengthTotem 499 | 500 | __Sunder Armor__ = sunder 501 | 502 | __Sweeping Strikes__ = sweepingStrikes 503 | 504 | __Thorns__ = thorns 505 | 506 | __Thunder Clap__ = thunderClap 507 | 508 | __Tiger's Fury__ = tigersFury 509 | 510 | __Touch of Weakness__ = touchWeakness 511 | 512 | __Tranquil Air__ = tranquilTotem 513 | 514 | __Tranquility__ = tranquility 515 | 516 | __Travel Form__ = travel 517 | 518 | __Trueshot Aura__ = trueshot 519 | 520 | __Vampiric Embrace__ = vampiricEmbrace 521 | 522 | __Vanish__ = vanish 523 | 524 | __Viper Sting__ = viper 525 | 526 | __Warsong Flag__ = warsongFlag 527 | 528 | __Weakened Soul__ = weakenedSoul 529 | 530 | __Well Fed__ = wellFed 531 | 532 | __Whirlwind__ = whirlwind 533 | 534 | __Windfury__ = wfTotem 535 | 536 | __Windwall__ = windwallTotem 537 | 538 | __Wing Clip__ = wingClip 539 | 540 | __Wyvern Sting__ = wyvern 541 | 542 | __Wyvern Sting__ = wyvernCC 543 | 544 | __Wyvern Sting__ = wyvernDot 545 | 546 | \ 547 | 548 | -------------------------------------------------------------------------------- /LazyScript/LSCriteriaWarrior.md: -------------------------------------------------------------------------------- 1 | List of recognised criteria 2 | =========================== 3 | 4 | Append zero or more criteria to an action. All criteria must be true for 5 | that action to be used. List your actions one after another on separate 6 | lines. The first action that matches all criteria is used. 7 | 8 | Multiple values within curly braces ({}) means choose one or more. If 9 | more than one is chosen, separate them with commas (e.g. 10 | ifRace=Human,Gnome) and the criteria will match if any of the choices 11 | match. If a multiple-choice criteria is negated with a "Not" (e.g. 12 | ifNotRace=Human,Gnome) then the criteria will match only if none of the 13 | choices match. Square brackets ([]) mean the value is optional. Do NOT 14 | leave the curly braces or square brackets in your form. 15 | 16 | Warrior Criteria: 17 | ----------------- 18 | ``` 19 | -if[Fury]BloodthirstKillShot[XX%hp] 20 | -if[Not]Stance={battle,berserk,defensive} 21 | ``` 22 | Action Criteria: 23 | ---------------- 24 | ``` 25 | -everyXXs 26 | -if[Not]{Ctrl,Alt,Shift}Down (see note #1) 27 | -if[Not]Cooldown{<,>}XXs={action1,action2,...} 28 | -if[Not]CurrentAction[=action1,action2,...] 29 | -if[Not]GlobalCooldown (see note #8) 30 | -if[Not]History{<,=,>}XX=action 31 | -if[Not]HistoryCount{<,=,>}XX=action 32 | -if[Not]LastAction=action 33 | -if[Not]LastUsed>XXs=action (see note #10) 34 | -if[Not]InCooldown={action1,action2,...} 35 | -if[Not]InRange={action1,action2,...} (see note #2) 36 | -if[Not]Timer>XXs=action (see note #10) 37 | -if[Not]Usable={action1,action2,...} (see note #7) 38 | ``` 39 | Attack Criteria: 40 | ---------------- 41 | ``` 42 | -if[Not]BehindAttackJustFailed[X[.Y]s] (see note #3) 43 | -if[Not]InFrontAttackJustFailed[X[.Y]s] (see note #3) 44 | -if[Not]OutdoorsAttackJustFailed[X[.Y]s] (see note #3) 45 | -if[Not]Casting 46 | -if[Not]Channelling 47 | -if[Not]Shooting 48 | -if[Not]Wanding 49 | ``` 50 | Buff/Debuff Criteria: 51 | --------------------- 52 | ``` 53 | -if[Not]{Buff,Debuff}Duration{<,>}XXs={buff1,buff2,...} (player only) 54 | -if[Not]{Buff,Debuff}TitleDuration{<,>}XXs={buffTitle1,buffTitle2,...} (see note #4, player only) 55 | -if[Not][]Has{Buff,Debuff}[{<,=,>}XX]={buff1,buff2,...} (see notes #5 and #9) 56 | -if[Not][]Has{Buff,Debuff}Title[{<,=,>}XX]={buffTitle1,buffTitle2,...} (see notes #4, #5, and #9) 57 | -if[Not][]Is={Asleep, Bleeding, CCd, Charmed, Cursed, Diseased, Disoriented, Dotted, Drinking, Eating, Feared, Immobile, Incapacitated, Magicked, Poisoned, Polymorphed, Slowed, Stunned, Stung} (see note #9) 58 | -if[Not]{MainHand, OffHand}Buffed 59 | ``` 60 | Item Criteria: 61 | -------------- 62 | ``` 63 | -if[Not]ItemCooldown{<,>}XXs={item1,item2,...} 64 | -if[Not]ItemInCooldown={item1,item2,...} 65 | ``` 66 | Player Criteria: 67 | ---------------- 68 | ``` 69 | -if[Not]Dueling 70 | -if[Not]Equipped=item 71 | -if[Not]Ganked 72 | -if[Not]InGroup (party or raid) 73 | -if[Not]InInstance 74 | -if[Not]InBattleground 75 | -if[Not]InRaid 76 | -if[Not]Mounted 77 | -if[Not]Shadowmelded 78 | -if[Not]Tracking={Herbs, Minerals, Treasure} 79 | -if[{<,=,>}]XAttackers (PvP only) 80 | -if[Not]Zone=zonename 81 | ``` 82 | Pet: 83 | ---- 84 | ``` 85 | -if[Not]HasPet 86 | -if[Not]PetAlive 87 | -if[Not]Pet{Attacking, Following, Staying, Aggressive, Defensive, Passive} 88 | -if[Not]PetFamily={Bat, Bear, Boar, Carrion Bird, Cat, Crab, Crocolisk, Doomguard, Felhunter, Gorilla, Hyena, Imp, Infernal, Owl, Raptor, Scorpid, Spider, Succubus, Tallstrider, Turtle, Voidwalker, Windserpent, Wolf} 89 | -if[Not]PetName=name 90 | ``` 91 | Player, Pet or Target Criteria: 92 | ------------------------------- 93 | ``` 94 | -if[Not]{[Player],Target}{Blocked, Dodged, Parried, Resisted}[{<,>}XX.XXs] (defaults to <5s, see note #11) 95 | -if[Not]{[Player],Target}FlaggedPVP 96 | -if[Not]{[Player],Target}FlagRunner 97 | -if[Not]{[Player],Pet,Target}InCombat 98 | -if[]{<,=,>}XX[%]{hp,mana/energy/rage/focus}[Deficit] (see note #9) 99 | -if[Not]{[Player],Target}Race={Human, Night Elf, Gnome, Dwarf, Orc, Scourge/Undead, Tauren, Troll} 100 | ``` 101 | Target Criteria: 102 | ---------------- 103 | ``` 104 | -if[Not]CanDebuff 105 | -if[Not]HaveTarget 106 | -if[Not]TargetAlive 107 | -if[Not]TargetAttackable 108 | -if[Not]TargetBoss 109 | -if[Not]TargetClass={Druid, Hunter, Mage, Paladin, Priest, Rogue, Shaman, Warlock, Warrior} 110 | -if[Not]TargetElite 111 | -if[Not]TargetEnemy 112 | -if[Not]TargetFleeing (NPC only) 113 | -if[Not]TargetFriend 114 | -if[Not]TargetHasTarget 115 | -if[Not]TargetHostile 116 | -if[Not]TargetIsCasting[={name regex,FIRE,FROST,NATURE,SHADOW,ARCANE,HOLY}] 117 | -if[Not]TargetImmune[=action] 118 | -if[Not]TargetInBlindRange (Within 10 yards) 119 | -if[Not]TargetInLongRange (Within 28 yards) 120 | -if[Not]TargetInMediumRange (Within 10 yards) 121 | -if[Not]TargetInMeleeRange (see note #6) 122 | -if[Not]TargetLevel{<,=,>}XX (Does not work for bosses) 123 | -if[Not]TargetMyLevel{<,=,>}{plus,minus}XX (Does not work for bosses) 124 | -if[Not]TargetNamed={regex1,regex2,...} 125 | -if[Not]TargetNPC 126 | -if[Not]TargetOfTarget 127 | -if[Not]TargetOfTargetClass={Druid, Hunter, Mage, Paladin, Priest, Rogue, Shaman, Warlock, Warrior} 128 | -if[Not]TargetTrivial 129 | -if[Not]TargetType={Beast, Critter, Demon, Dragonkin, Elemental, Humanoid, Undead} 130 | -ifTimeToDeath{<,=,>}XXs 131 | ``` 132 | **Note 1**: To use -if{Ctrl,Alt,Shift}Down, you MUST remove any existing 133 | Ctrl/Alt/Shift key bindings from the Main Menu, Key Bindings. Otherwise 134 | the game will intercept the key and LazyScript will not see it. 135 | 136 | **Note 2**: Always use with -if[Not]TargetFriend since it will return true 137 | if the target is not a valid target for the spell. 138 | 139 | **Note 3**: Within X.Y sec, defaults to 0.3. 140 | 141 | **Note 4**: The buff/debuff name must be the full name (including 142 | capitalization and spaces) of the buff/debuff title as it appears in the 143 | tooltip. 144 | 145 | **Note 5**: XX refers to the number of buff/debuff applications. e.g. 146 | -ifTargetHasDebuff<5=sunder 147 | 148 | **Note 6**: As of patch 1.12 this only works on unfriendly targets for Rogue 149 | (Sinister Strike), Druid (Growl), Hunter (Wing Clip) and Warrior (Rend). 150 | 151 | **Note 7**: The ifUsable criteria checks if the action is valid for use at 152 | present as per the Blizzard API call IsUsableAction. This does not 153 | include cooldown or range checking. 154 | 155 | **Note 8**: The ifGlobalCooldown criteria requires a specific action to be 156 | placed on your action bar so that it may be checked for the global 157 | cooldown. It does not have to be on a visible action bar. For each 158 | class, the actions are as follows: 159 | 160 | Rogue: Sinister StrikeDruid: Mark of the WildHunter: Track BeastsPriest: 161 | Power Word: FortitudeWarrior: Battle ShoutMage: Frost ArmorWarlock: 162 | Demon SkinShaman: Rockbiter WeaponPaladin: Seal of Righteousness 163 | 164 | **Note 9**: The can be any valid UnitId sequence as described 165 | in . For example, player, pet, 166 | target, targettarget. Capitalization is not important. 167 | 168 | **Note 10**: The ifLastUsed timer will perform the action immediately at the 169 | start of combat or if you changed targets if the action is available. 170 | The ifTimer criteria will first countdown XX seconds after initiating 171 | combat or changing targets before performing the action for the first 172 | time. 173 | 174 | **Note 11**: This criteria only detects full blocks and resists. A partial 175 | block or resist ("Joe hits you for 10 damage (5 blocked).") either on 176 | the player or the target will NOT be detected by this criteria. 177 | -------------------------------------------------------------------------------- /LazyScript/LSOverview.md: -------------------------------------------------------------------------------- 1 | Overview 2 | ======== 3 | 4 | LazyScript is a scripting language for World of Warcraft that is able to 5 | execute certain attacks or abilities under conditions that you specify. 6 | This is accomplished by writing a "form", which consists of a series of 7 | actions and criteria. When the LazyScript macro is run, the LazyScript 8 | engine will read through the list of actions from top to bottom until it 9 | finds an action that is ready to be used and then executes it. 10 | 11 | Any line may be commented out by placing '--', '//', or '\#' at the 12 | start of the line. 13 | 14 | Tutorial 1: Baby steps 15 | ====================== 16 | 17 | For example, let us make LazyScript execute Sinister Strike. First, 18 | check what the short name is for Sinister Strike in the actions tab. We 19 | see that it is "ss". Now choose "Create New Form" from the LazyScript 20 | minimap menu. Give your form a name like "MyForm" and type: 21 | 22 | ``` 23 | ss 24 | ``` 25 | Click on the "Test" button. If everything is okay and there were no 26 | typos, a "Testing completed" message will appear in your chat box. If 27 | there were errors, a summary of the error will be printed in the chat 28 | box instead. If everything is working then click on the "Okay" button. 29 | You should now see the form "MyForm" in the LazyScript minimap form 30 | list. Click on "MyForm" to set it as the default. A little check mark 31 | should appear next to "MyForm" on the minimap menu. 32 | 33 | Now create a macro with the command: 34 | ``` 35 | /lazyscript 36 | ``` 37 | and place it on your action bar. Also place the highest rank of 38 | "Sinister Strike" on your action bar somewhere. The "Sinister Strike" 39 | action need not be visible. Now go out and fight something and hit your 40 | LazyScript macro key and LazyScript will automatically execute Sinister 41 | Strike. 42 | 43 | Tutorial 2: Now we're getting somewhere 44 | ======================================= 45 | 46 | _"That's not particularly impressive"_ 47 | 48 | Well, let us move onto something more interesting then. Let us include 49 | an action that we can not execute all the time like "Riposte". We always 50 | prefer to execute riposte rather than sinister strike, but riposte is 51 | not always usable. Edit "MyForm" and add riposte before sinister strike, 52 | like so: 53 | ``` 54 | riposte 55 | ss 56 | ``` 57 | and place Riposte on your action bar somewhere. Now when you hit the 58 | LazyScript macro during combat, LazyScript will execute Sinister Strike 59 | until you parry an attack. Once that happens, LazyScript will execute 60 | Riposte when you next hit the LazyScript macro button. Most importantly, 61 | it will do all this without the "That action is not ready yet" spam that 62 | you would normally have to put up with when using a standard macro. 63 | 64 | Tutorial 3: To do or not to do, that is the question 65 | ==================================================== 66 | 67 | One of the most useful features of LazyScript is the ability to 68 | associate conditions or criteria with a particular action. For example, 69 | you only want to kick the target if it is casting a spell. Looking at 70 | the criteria tab we notice that there is a condition 71 | "-if\[Not\]TargetIsCasting" plus some other scary looking stuff. Let us 72 | ignore the complicated stuff for now and just use "-ifTargetIsCasting". 73 | Interrupting a spell is more important than using Riposte, so edit 74 | "MyForm" and change it to: 75 | ``` 76 | kick-ifTargetIsCasting 77 | riposte 78 | ss 79 | ``` 80 | Now LazyScript will only kick if it detects that the target is casting a 81 | spell. 82 | 83 | _"But what if I only want to interrupt fire spells?"_ 84 | 85 | Well that is what the rest of that complicated string is all about. Edit 86 | "MyForm" and change the form to: 87 | ``` 88 | kick-ifTargetIsCasting=FIRE 89 | riposte 90 | ss 91 | ``` 92 | _"What about if I only want to interrupt fire or frost spells? Do I have to type that all out again?"_ 93 | 94 | Nope, change "MyForm" to: 95 | ``` 96 | kick-ifTargetIsCasting=FIRE,FROST 97 | riposte 98 | ss 99 | ``` 100 | _"I'm decked out in MC gear. The only spells I care about interrupting 101 | are heals. Darn priests... \*mutter\*"_ 102 | 103 | We have that covered too. Just use the full text string, correctly 104 | capitalized with spaces: 105 | ``` 106 | kick-ifTargetIsCasting=Heal,Greater Heal 107 | riposte 108 | ss 109 | ``` 110 | Tutorial 4: Why'd you have to go and make things so complicated? 111 | ================================================================ 112 | 113 | Probably the most complex criteria you will come across are the 114 | buff/debuff checking criteria. They are so complex because they are so 115 | flexible. For instance, if you only want to renew your Slice and Dice if 116 | you do not already have it running. First check the Buff/Debuff tab and 117 | find out what the short buff/debuff name is for Slice and Dice. It is 118 | "snd", so add a line to your form that has: 119 | ``` 120 | snd-ifNotPlayerHasBuff=snd 121 | ``` 122 | If you only want to use Rupture on your target if it does not already 123 | have rupture active: 124 | ``` 125 | rupture-ifNotTargetHasDebuff=rupture 126 | ``` 127 | _"Why don't I see buff/debuff xyz in your list?"_ 128 | 129 | Although we try to be as thorough as possible with class abilities, if 130 | we were to have entries for every single buff in the game it would take 131 | up too much memory. If a buff is not in the list of recognised 132 | buffs/debuffs it is still possible to search for the title of the buff. 133 | Just use the following criteria and type in the full name of the buff or 134 | debuff with capitalization and spacing as it appears in the tooltip 135 | text: 136 | ``` 137 | echo=w00t-ifPlayerHasBuffTitle=Rallying Cry of the Dragonslayer 138 | ``` 139 | _"My tanks are boring and they tell me not to start attacking the mob 140 | until they've sundered it a few times. Can LazyScript help me?"_ 141 | 142 | LazyScript is also able to check how many applications of a buff or 143 | debufff there are. After prying out that by "few" they mean "at least 144 | 3", you can add something like this to the top of your form: 145 | ``` 146 | stopAll-ifTargetHasDebuff<3=sunder 147 | ``` 148 | Tutorial 5: Multi-tasking 149 | ========================= 150 | 151 | By now you may have noticed that some actions on the actions tab are 152 | colored green. Hopefully you read the help text and know that this has 153 | something to with multiple actions that do not trigger the global 154 | cooldown. What it boils down to is that you can chain any number of 155 | these actions together in one line along with at most one action that 156 | does trigger the global cooldown and LazyScript will execute them in 157 | sequence. For example, activate Cold Blood, use Eviscerate and provide a 158 | cute parting message: 159 | 160 | ``` 161 | coldBlood-evisc-sayInSay=DIE!-ifCbKillShot 162 | ``` 163 | Here are a few more examples 164 | ``` 165 | huntersMark-petAttack 166 | judge-sealCommand 167 | innerFocus-greaterHeal 168 | ``` 169 | Tutorial 6: Form re-use 170 | ======================= 171 | 172 | So you've written some forms and they're starting to get a little long 173 | and complicated. If they contain sections which are identical, you can 174 | separate that section out into another form and use includeForm to 175 | include it in the other forms. For example: 176 | 177 | Form "Interrupts": 178 | ``` 179 | kick-ifTargetIsCasting-ifNotTargetIs=Stunned 180 | gouge-ifTargetIsCasting-ifNotInFrontAttackJustFailed-ifNotTargetIs=Stunned 181 | ks-ifTargetIsCasting=Greater Heal,Prayer of Healing,Healing Touch,Holy Light,Healing Wave,Chain Heal-ifNotTargetIs=Stunned 182 | blind-ifTargetIsCasting=Greater Heal,Prayer of Healing,Healing Touch,Holy Light,Healing Wave,Chain Heal-ifNotTargetIs=Stunned 183 | ``` 184 | Form "FrontAttack": 185 | ``` 186 | includeForm=Interrupts 187 | riposte 188 | evisc-5cp 189 | ss 190 | ``` 191 | Form "BehindAttack": 192 | ``` 193 | includeForm=Interrupts 194 | evisc-5cp 195 | bs 196 | ``` 197 | This will include the Interrupts form at the beginning of both the 198 | FrontAttack and BehindAttack forms as if you had copy and pasted it in 199 | there. When you change the contents of the Interrupts form, it will 200 | automatically update the FrontAttack and BehindAttack forms to include 201 | the new version. 202 | 203 | Note: Be careful that you don't try to include a form into itself, or 204 | try to include a form which includes the first form (A includes B 205 | includes A). Those will cause a stack overflow error because they're 206 | infinite recursion loops. 207 | 208 | Now perhaps you have some actions that you only want to perform under 209 | certain conditions but don't want the whole list of actions to be 210 | checked every time you press your LazyScript button. If we look at the 211 | previous example, we can see that ifTargetIsCasting is a criteria common 212 | to all of the actions in the Interrupts form. Using callForm we could 213 | rewrite the previous example like so: 214 | 215 | Form "Interrupts": 216 | ``` 217 | kick 218 | gouge-ifNotInFrontAttackJustFailed 219 | ks-ifTargetIsCasting=Greater Heal,Prayer of Healing,Healing Touch,Holy Light,Healing Wave,Chain Heal 220 | blind-ifTargetIsCasting=Greater Heal,Prayer of Healing,Healing Touch,Holy Light,Healing Wave,Chain Heal 221 | ``` 222 | Form "FrontAttack": 223 | ``` 224 | callForm=Interrupts-ifTargetIsCasting-ifNotTargetIs=Stunned 225 | riposte 226 | evisc-5cp 227 | ss 228 | ``` 229 | Form "BehindAttack": 230 | ``` 231 | callForm=Interrupts-ifTargetIsCasting-ifNotTargetIs=Stunned 232 | evisc-5cp 233 | bs 234 | ``` 235 | With these changes, when you execute FrontAttack or BehindAttack, it 236 | will call the Interrupts form only if the target is casting and not 237 | stunned. So if the target is not casting, it won't even check any of the 238 | actions/criteria in the Interrupts form. 239 | -------------------------------------------------------------------------------- /LazyScript/LazyScript.toc: -------------------------------------------------------------------------------- 1 | ## Interface: 11200 2 | ## Title: LazyScript 3 | ## Version: 1.0.4 4 | ## X-Revision: $Revision: 800 $ 5 | ## X-LazyScriptCompatibility: 3 6 | ## Notes: Programmable Class Attacks. 7 | ## Notes-ruRU: Программируемые атаки классов. 8 | ## OptionalDeps: MobInfo-2, Tracer 9 | ## SavedVariables: lsConfGlobal 10 | ## SavedVariablesPerCharacter: lsConf 11 | 12 | LazyScript.lua 13 | Util.lua 14 | Localization.lua 15 | About.lua 16 | Actions.lua 17 | AutoAttack.lua 18 | Deathstimator.lua 19 | FormEdit.lua 20 | ImmunityTypeTracking.lua 21 | Interrupt.lua 22 | MinimapMenu.lua 23 | Minion.lua 24 | Parse.lua 25 | ParseGeneral.lua 26 | ParseBuffs.lua 27 | Tooltip.lua 28 | LazyScript.xml 29 | Bindings.xml 30 | About.xml 31 | Deathstimator.xml 32 | FormEdit.xml 33 | Interrupt.xml 34 | Immunity.xml 35 | MinimapMenu.xml 36 | Minion.xml 37 | Tooltip.xml -------------------------------------------------------------------------------- /LazyScript/LazyScript.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 9 | lazyScript.metadata:updateRevisionFromKeyword("$Revision: 305 $") 10 | lazyScript.OnLoad() 11 | 12 | 13 | lazyScript.OnEvent() 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /LazyScript/MinimapMenu.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 9 | lazyScript.metadata:updateRevisionFromKeyword("$Revision: 171 $") 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | this:SetFrameLevel(0) 101 | UIDropDownMenu_SetWidth(180) 102 | 103 | 104 | UIDropDownMenu_Initialize(this, lazyScript.mm.Menu_Initialize, "MENU") 105 | 106 | 107 | 108 | 109 | -------------------------------------------------------------------------------- /LazyScript/Minion.lua: -------------------------------------------------------------------------------- 1 | lazyScript.metadata:updateRevisionFromKeyword("$Revision: 527 $") 2 | 3 | -- Minion support 4 | 5 | lazyScript.minion = {} 6 | 7 | lazyScript.minion.lastUpdate = 0 8 | lazyScript.minion.updateInterval = 0.1 9 | 10 | 11 | function lazyScript.minion.OnUpdate() 12 | if (not lazyScript.addOnIsActive) then 13 | return 14 | end 15 | if (not lazyScript.perPlayerConf.minionIsVisible) then 16 | return 17 | end 18 | local now = GetTime() 19 | if (now >= (lazyScript.minion.lastUpdate + lazyScript.minion.updateInterval)) then 20 | lazyScript.minion.lastUpdate = now 21 | 22 | if (lazyScript.perPlayerConf.minionHidesOutOfCombat) then 23 | if (not lazyScript.isInCombat and LazyScriptMinionFrame:IsShown()) then 24 | lazyScript.d(HIDE_THING_NOT_COMBAT) 25 | LazyScriptMinionFrame:Hide() 26 | end 27 | if (lazyScript.isInCombat and not LazyScriptMinionFrame:IsShown()) then 28 | lazyScript.d(SHOW_THING_IN_COMBAT) 29 | LazyScriptMinionFrame:Show() 30 | end 31 | end 32 | 33 | if (lazyScript.isInCombat or lazyScript.perPlayerConf.showActionAlways) then 34 | local noParse = true 35 | local actions = lazyScript.FindParsedForm(lazyScript.perPlayerConf.defaultForm, noParse) 36 | if (actions) then 37 | local doNothing = true 38 | local triggerAction, actions = lazyScript.TryActions(actions, doNothing) 39 | if (not triggerAction) then 40 | lazyScript.minion.SetText(ZZZ) 41 | else 42 | local text 43 | for _, action in ipairs(actions) do 44 | if action.minionOverride then 45 | text = action.name 46 | break 47 | end 48 | if not ((action.code == "echo" or action.code == "ping" or action.code == "active") and triggerAction.triggersGlobal) then 49 | if text then 50 | text = text..", "..action.name 51 | else 52 | text = action.name 53 | end 54 | end 55 | end 56 | lazyScript.minion.SetText(text) 57 | end 58 | end 59 | end 60 | end 61 | end 62 | 63 | function lazyScript.minion.OnEnter(button) 64 | GameTooltip:SetOwner(button, "ANCHOR_RIGHT") 65 | GameTooltip:AddLine(lazyScript.metadata.name..MINION) 66 | GameTooltip:AddLine(MINION_TOOLTIP) 67 | GameTooltip:Show() 68 | end 69 | 70 | function lazyScript.minion.OnLeave(button) 71 | GameTooltip:Hide() 72 | end 73 | 74 | function lazyScript.minion.SetText(text) 75 | if (not text) then 76 | text = "" 77 | end 78 | LazyScriptMinionText:SetText(text) 79 | end 80 | local frameActive = 0 81 | function lazyScript.minion.OnActiveFrameUpdate() 82 | frameActive = frameActive + arg1 83 | if frameActive > 2.5 then 84 | LazyScriptActiveFrame:Hide() 85 | frameActive = 0 86 | end 87 | end 88 | 89 | function lazyScript.minion.SetTextActive(text) 90 | if (not text) then 91 | text = "" 92 | end 93 | LazyScriptActiveFrameText:SetText(text) 94 | end 95 | 96 | function lazyScript.minion.ShowActive() 97 | if LazyScriptActiveFrame:IsVisible() then frameActive = 0 end 98 | LazyScriptActiveFrame:Show() 99 | end -------------------------------------------------------------------------------- /LazyScript/Minion.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 8 | 9 | 10 | lazyScript.metadata:updateRevisionFromKeyword("$Revision: 527 $") 11 | this:RegisterForDrag("LeftButton") 12 | 13 | 14 | lazyScript.minion.OnUpdate() 15 | 16 | 17 | if (IsShiftKeyDown()) then 18 | this:StartMoving() 19 | end 20 | 21 | 22 | this:StopMovingOrSizing() 23 | 24 | 25 | this:StopMovingOrSizing() 26 | 27 | 28 | lazyScript.minion.OnEnter(this) 29 | 30 | 31 | lazyScript.minion.OnLeave(this) 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 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 | 79 | 80 | 81 | this:RegisterForDrag("LeftButton") 82 | 83 | 84 | lazyScript.minion.OnActiveFrameUpdate() 85 | 86 | 87 | if (IsShiftKeyDown()) then 88 | this:StartMoving() 89 | end 90 | 91 | 92 | this:StopMovingOrSizing() 93 | 94 | 95 | this:StopMovingOrSizing() 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | -------------------------------------------------------------------------------- /LazyScript/Tooltip.lua: -------------------------------------------------------------------------------- 1 | lazyScript.metadata:updateRevisionFromKeyword("$Revision: 622 $") 2 | 3 | -- Tooltip caching 4 | 5 | lazyScript.tooltip = {} 6 | lazyScript.tooltip.debug = false 7 | 8 | lazyScript.tooltip.cachableUnitIds = { 9 | player = true, 10 | pet = true, 11 | target = true, 12 | } 13 | for i = 1, 5 do 14 | lazyScript.tooltip.cachableUnitIds["party"..i] = true 15 | lazyScript.tooltip.cachableUnitIds["partypet"..i] = true 16 | end 17 | for i = 1, 40 do 18 | lazyScript.tooltip.cachableUnitIds["raid"..i] = true 19 | lazyScript.tooltip.cachableUnitIds["raidpet"..i] = true 20 | end 21 | 22 | 23 | function lazyScript.tooltip.OnLoad() 24 | this:RegisterEvent("PLAYER_ENTERING_WORLD") 25 | this:RegisterEvent("PLAYER_AURAS_CHANGED") 26 | this:RegisterEvent("PLAYER_TARGET_CHANGED") 27 | this:RegisterEvent("UNIT_AURA") 28 | this:RegisterEvent("UNIT_AURASTATE") 29 | this:RegisterEvent("PARTY_MEMBERS_CHANGED") 30 | this:RegisterEvent("RAID_ROSTER_UPDATE") 31 | this:RegisterEvent("ACTIONBAR_SLOT_CHANGED") 32 | end 33 | 34 | function lazyScript.tooltip.OnEvent() 35 | -- the tooltip needs re-pointing on any event we're catching 36 | lazyScript.Tooltip.currentlyPointing = nil 37 | 38 | if (event == "PLAYER_ENTERING_WORLD") then 39 | lazyScript.Tooltip:ResetCache() 40 | 41 | elseif (event == "PLAYER_AURAS_CHANGED") then 42 | lazyScript.Tooltip.cache.playerBuffs = {} 43 | lazyScript.Tooltip.cache.unitBuffs.player = {} 44 | lazyScript.Tooltip.cache.unitDebuffs.player = {} 45 | 46 | elseif (event == "PLAYER_TARGET_CHANGED") then 47 | lazyScript.Tooltip.cache.unitBuffs.target = {} 48 | lazyScript.Tooltip.cache.unitDebuffs.target = {} 49 | 50 | elseif (event == "UNIT_AURA" or event == "UNIT_AURASTATE") then 51 | local unitId = arg1 52 | if (unitId) then 53 | lazyScript.tooltip.d(event..": "..unitId) 54 | lazyScript.Tooltip.cache.unitBuffs[unitId] = {} 55 | lazyScript.Tooltip.cache.unitDebuffs[unitId] = {} 56 | end 57 | 58 | elseif (event == "PARTY_MEMBERS_CHANGED") then 59 | for idx, val in ipairs(lazyScript.Tooltip.cache.unitBuffs) do 60 | if (string.sub(idx, 1, 5) == "party") then 61 | lazyScript.Tooltip.cache.unitBuffs[idx] = nil 62 | lazyScript.tooltip.d(event..CLEARING_CACHE_FOR..idx) 63 | end 64 | end 65 | for idx, val in ipairs(lazyScript.Tooltip.cache.unitDebuffs) do 66 | if (string.sub(idx, 1, 5) == "party") then 67 | lazyScript.Tooltip.cache.unitDebuffs[idx] = nil 68 | lazyScript.tooltip.d(event..CLEARING_CACHE_FOR..idx) 69 | end 70 | end 71 | 72 | elseif (event == "RAID_ROSTER_UPDATE") then 73 | for idx, val in ipairs(lazyScript.Tooltip.cache.unitBuffs) do 74 | if (string.sub(idx, 1, 4) == "raid") then 75 | lazyScript.Tooltip.cache.unitBuffs[idx] = nil 76 | lazyScript.tooltip.d(event..CLEARING_CACHE_FOR..idx) 77 | end 78 | end 79 | for idx, val in ipairs(lazyScript.Tooltip.cache.unitDebuffs) do 80 | if (string.sub(idx, 1, 4) == "raid") then 81 | lazyScript.Tooltip.cache.unitDebuffs[idx] = nil 82 | lazyScript.tooltip.d(event..CLEARING_CACHE_FOR..idx) 83 | end 84 | end 85 | 86 | elseif (event == "ACTIONBAR_SLOT_CHANGED") then 87 | lazyScript.Tooltip.cache.actionSlots = {} 88 | 89 | end 90 | end 91 | 92 | 93 | lazyScript.TooltipClass = {} 94 | function lazyScript.TooltipClass:New() 95 | local obj = {} 96 | setmetatable(obj, { __index = self }) 97 | obj:ResetCache() 98 | obj.ttObjs = {} 99 | obj.currentlyPointing = nil 100 | obj.hits = 0 101 | obj.misses = 0 102 | return obj 103 | end 104 | 105 | function lazyScript.TooltipClass:ResetCache() 106 | self.cache = {} 107 | self.cache.playerBuffs = {} 108 | self.cache.unitBuffs = {} 109 | self.cache.unitDebuffs = {} 110 | self.cache.actionSlots = {} 111 | end 112 | 113 | function lazyScript.TooltipClass:GetTextLeftN(n) 114 | if (not self.ttObjs[n]) then 115 | self.ttObjs[n] = getglobal("LazyScript_TooltipTextLeft"..n) 116 | if (not self.ttObjs[n]) then 117 | return nil 118 | end 119 | end 120 | return self.ttObjs[n]:GetText() 121 | end 122 | 123 | function lazyScript.TooltipClass:IsCachableUnitId(unitId) 124 | return (lazyScript.tooltip.cachableUnitIds[unitId] == true) 125 | end 126 | 127 | function lazyScript.TooltipClass:GetCachedVal(...) 128 | local ptr = self.cache 129 | for i = 1, (arg.n - 1) do 130 | if (not ptr[arg[i]]) then 131 | ptr[arg[i]] = {} 132 | end 133 | ptr = ptr[arg[i]] 134 | end 135 | local val = ptr[arg[arg.n]] 136 | if (val) then 137 | self.hits = self.hits + 1 138 | else 139 | lazyScript.tooltip.d("GetCachedVal: MISS: "..table.concat(arg, ":")) 140 | self.misses = self.misses + 1 141 | end 142 | return val 143 | end 144 | 145 | function lazyScript.TooltipClass:SetCachedVal(...) 146 | local ptr = self.cache 147 | for i = 1, (arg.n - 2) do 148 | if (not ptr[arg[i]]) then 149 | ptr[arg[i]] = {} 150 | end 151 | ptr = ptr[arg[i]] 152 | end 153 | ptr[arg[arg.n - 1]] = arg[arg.n] 154 | end 155 | 156 | function lazyScript.TooltipClass:PointTooltip(where, ...) 157 | local pointTo = where..":"..table.concat(arg, ":") 158 | if (self.currentlyPointing ~= pointTo) then 159 | --lazyScript.tooltip.d("PointTooltip: had to move the tooltip: "..pointTo) 160 | LazyScript_Tooltip:ClearLines() 161 | if (where == "actionSlots") then 162 | local actionSlot = arg[1] 163 | LazyScript_Tooltip:SetAction(actionSlot) 164 | elseif (where == "unitBuffs") then 165 | local unitId = arg[1] 166 | local buffId = arg[2] 167 | LazyScript_Tooltip:SetUnitBuff(unitId, buffId) 168 | elseif (where == "unitDebuffs") then 169 | local unitId = arg[1] 170 | local debuffId = arg[2] 171 | LazyScript_Tooltip:SetUnitDebuff(unitId, debuffId) 172 | elseif (where == "playerBuffs") then 173 | local buffIndex = arg[1] 174 | LazyScript_Tooltip:SetPlayerBuff(buffIndex) 175 | end 176 | self.currentlyPointing = pointTo 177 | end 178 | end 179 | 180 | 181 | function lazyScript.TooltipClass:GetActionTextLeftN(actionSlot, n) 182 | local val = self:GetCachedVal("actionSlots", actionSlot, n) 183 | if (not val) then 184 | self:PointTooltip("actionSlots", actionSlot) 185 | val = self:GetTextLeftN(n) 186 | self:SetCachedVal("actionSlots", actionSlot, n, val) 187 | end 188 | return val 189 | end 190 | 191 | 192 | function lazyScript.TooltipClass:GetUnitBuffOrDebuffNumLines(unitId, buffOrDebuff, buffId) 193 | local where 194 | if (buffOrDebuff == "buff") then 195 | where = "unitBuffs" 196 | else 197 | where = "unitDebuffs" 198 | end 199 | if (not self:IsCachableUnitId(unitId)) then 200 | self:PointTooltip(where, unitId, buffId) 201 | return LazyScript_Tooltip:NumLines() 202 | end 203 | local val = self:GetCachedVal(where, unitId, buffId, "numLines") 204 | if (not val) then 205 | self:PointTooltip(where, unitId, buffId) 206 | val = LazyScript_Tooltip:NumLines() 207 | self:SetCachedVal(where, unitId, buffId, "numLines", val) 208 | end 209 | return val 210 | end 211 | 212 | function lazyScript.TooltipClass:GetUnitBuffOrDebuffTextLeftN(unitId, buffOrDebuff, buffId, n) 213 | local where 214 | if (buffOrDebuff == "buff") then 215 | where = "unitBuffs" 216 | else 217 | where = "unitDebuffs" 218 | end 219 | if (not self:IsCachableUnitId(unitId)) then 220 | self:PointTooltip(where, unitId, buffId) 221 | return self:GetTextLeftN(n) 222 | end 223 | local val = self:GetCachedVal(where, unitId, buffId, n) 224 | if (not val) then 225 | self:PointTooltip(where, unitId, buffId) 226 | val = self:GetTextLeftN(n) 227 | self:SetCachedVal(where, unitId, buffId, n, val) 228 | end 229 | return val 230 | end 231 | 232 | 233 | 234 | function lazyScript.TooltipClass:GetPlayerBuffTextLeftN(buffIndex, n) 235 | local val = self:GetCachedVal("playerBuffs", buffIndex, n) 236 | if (not val) then 237 | self:PointTooltip("playerBuffs", buffIndex) 238 | val = self:GetTextLeftN(n) 239 | self:SetCachedVal("playerBuffs", buffIndex, n, val) 240 | end 241 | return val 242 | end 243 | 244 | 245 | 246 | lazyScript.Tooltip = lazyScript.TooltipClass:New() 247 | 248 | 249 | 250 | 251 | -- stuff for debugging/diagnostics 252 | 253 | function lazyScript.tooltip.d(msg) 254 | if (lazyScript.tooltip.debug) then 255 | lazyScript.chat("### tooltip cache: "..msg, .9, .9, 0) 256 | end 257 | end 258 | 259 | function lazyScript.tooltip.stats() 260 | lazyScript.chat("### tooltip stats ###", .9, .9, 0) 261 | lazyScript.chat("hits: "..lazyScript.Tooltip.hits, .9, .9, 0) 262 | lazyScript.chat("misses: "..lazyScript.Tooltip.misses, .9, .9, 0) 263 | end 264 | 265 | function lazyScript.tooltip.dump(table, n) 266 | if (not table) then 267 | lazyScript.chat("### tooltip cache dump ###", .9, .9, 0) 268 | table = lazyScript.Tooltip.cache 269 | n = 1 270 | end 271 | for idx, val in ipairs(table) do 272 | local indent = "" 273 | for i = 1, n do 274 | indent = indent.." " 275 | end 276 | if (type(val) == 'table') then 277 | lazyScript.chat(indent.."t: "..idx, .9, .9, 0) 278 | lazyScript.tooltip.dump(val, n + 1) 279 | else 280 | lazyScript.chat(indent..idx..": "..val, .9, .9, 0) 281 | end 282 | end 283 | end -------------------------------------------------------------------------------- /LazyScript/Tooltip.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 9 | 10 | this:SetOwner(this, "ANCHOR_NONE") 11 | lazyScript.tooltip.OnLoad() 12 | 13 | 14 | lazyScript.tooltip.OnEvent() 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /LazyScript/Util.lua: -------------------------------------------------------------------------------- 1 | lazyScript.metadata:updateRevisionFromKeyword("$Revision: 690 $") 2 | 3 | -- Utilities 4 | 5 | -- this is a quik split function that allows escaping the delimiter (with \). 6 | -- limitation: the delimiter cannot be the first character on the line. 7 | function lazyScript.split(s, delim) 8 | local pieces = {} 9 | local init = 1 10 | 11 | -- strip off any leading delimiters 12 | s = string.gsub(s, "^"..delim.."+", "") 13 | 14 | delim = "[^\\]"..delim 15 | 16 | while true do 17 | local start, send = string.find(s, delim, init) 18 | if (not start) then 19 | break 20 | end 21 | table.insert(pieces, string.sub(s, init, start)) 22 | init = send + 1 23 | end 24 | 25 | table.insert(pieces, string.sub(s, init)) 26 | 27 | return pieces 28 | end 29 | 30 | function lazyScript.SplitArgs(line) 31 | return lazyScript.split(line, "%s") 32 | end 33 | 34 | function lazyScript.filterArgs(line) 35 | return string.gsub(line, "_", " ") 36 | end 37 | 38 | -- Helper regex function. Returns true/false if the pattern matched, 39 | -- and sets the globals lazyScript.match1, 2, 3, 4, 5, 6 per your parenthesis matching. 40 | function lazyScript.re(text, re) 41 | local starts, ends 42 | starts, ends, lazyScript.match1, lazyScript.match2, lazyScript.match3, lazyScript.match4, lazyScript.match5, lazyScript.match6 = string.find(text, re) 43 | return starts 44 | end 45 | 46 | function lazyScript.rebit(bit, re) 47 | if bit == nil or re == nil or bit == "" then 48 | return false 49 | end 50 | --bit = lazyScript.relax(bit) 51 | --re = string.lower(re) 52 | local starts, ends 53 | starts, ends, lazyScript.match1, lazyScript.match2, lazyScript.match3, lazyScript.match4, lazyScript.match5, lazyScript.match6 = lazyScript.efind(bit, re) 54 | return starts 55 | end 56 | 57 | 58 | function lazyScript.relax(text) 59 | --[[ 60 | local equals = string.find(text, "=") 61 | if (equals ~= nil and equals > 1) then 62 | local starts, ends, left, right 63 | starts, ends, left, right = string.find(text, "(.+=.+)(=.+)") 64 | if (starts == nil) then 65 | starts, ends, left, right = string.find(text, "(.+)(=.+)") 66 | end 67 | 68 | text = string.gsub(string.lower(left), " ", "")..right 69 | else 70 | text = string.gsub(string.lower(text), " ", "") 71 | end 72 | --]] 73 | return text 74 | end 75 | 76 | 77 | function lazyScript.chat(msg, r, g, b) 78 | if (not r) then 79 | r = .9 80 | g = .6 81 | b = .05 82 | end 83 | DEFAULT_CHAT_FRAME:AddMessage(msg, r, g, b) 84 | end 85 | 86 | function lazyScript.p(msg) 87 | lazyScript.chat("## "..lazyScript.metadata.name..": "..msg) 88 | lazyScript.trace(msg) 89 | end 90 | 91 | function lazyScript.d(msg) 92 | if (lazyScript.perPlayerConf ~= nil and lazyScript.perPlayerConf.debug) then 93 | lazyScript.chat("### "..lazyScript.metadata.name..": "..msg, .8, .5, 0) 94 | end 95 | lazyScript.trace(msg) 96 | end 97 | 98 | function lazyScript.echo(msg) 99 | lazyScript.chat("# "..lazyScript.metadata.name..": "..msg, .8, .8, 0) 100 | lazyScript.trace(msg) 101 | end 102 | 103 | -- provide optional Tracer module support, for debugging problems 104 | function lazyScript.trace(msg) 105 | if (tracer) then 106 | tracer.Log(lazyScript.metadata.name, msg) 107 | end 108 | end 109 | 110 | function lazyScript.safeString(str) 111 | if (str == nil) then 112 | str = "nil" 113 | elseif str == false then 114 | str = "false" 115 | elseif str == true then 116 | str = "true" 117 | end 118 | return str 119 | end 120 | 121 | function lazyScript.IdAndNameFromLink(link) 122 | local name 123 | if (not link) then 124 | return "" 125 | end 126 | for id, name in string.gfind(link, "|c%x+|Hitem:(%d+):%d+:%d+:%d+|h%[(.-)%]|h|r$") do 127 | return tonumber(id), name 128 | end 129 | return nil 130 | end 131 | 132 | function lazyScript.efind_addRawToExpansions(expansions, raw) 133 | if table.getn(expansions) == 0 then 134 | table.insert(expansions, raw) 135 | return expansions 136 | end 137 | 138 | for i, exp in ipairs(expansions) do 139 | expansions[i] = exp..raw 140 | end 141 | 142 | return expansions 143 | end 144 | 145 | function lazyScript.efind_addAlternatesToExpansions(expansions, alternates, leadup) 146 | local newExpansions = {} 147 | 148 | if table.getn(expansions) == 0 then 149 | for _, alt in ipairs(alternates) do 150 | table.insert(newExpansions, leadup.."("..alt..")") 151 | end 152 | return newExpansions 153 | end 154 | 155 | for _, exp in ipairs(expansions) do 156 | for _, alt in ipairs(alternates) do 157 | table.insert(newExpansions, exp..leadup.."("..alt..")") 158 | end 159 | end 160 | 161 | return newExpansions 162 | end 163 | 164 | function lazyScript.efind(text, pattern) 165 | local pos = 1 166 | local expansions = {} 167 | 168 | while pos <= string.len(pattern) do 169 | local a, b = string.find(pattern, "%(.-%)%??", pos) 170 | if a then 171 | local group = string.sub(pattern, a, b) 172 | local leadup = string.sub(pattern, pos, a-1) 173 | local optional = string.sub(group, -1) == "?" 174 | 175 | if optional then 176 | group = string.sub(group, 2, -3) 177 | else 178 | group = string.sub(group, 2, -2) 179 | end 180 | 181 | local alternates = {} 182 | 183 | if string.find(group, "|") then 184 | for alt in string.gfind(group, "[^|]+") do 185 | table.insert(alternates, alt) 186 | end 187 | else 188 | table.insert(alternates, group) 189 | end 190 | 191 | if optional then 192 | table.insert(alternates, "") 193 | end 194 | 195 | if table.getn(alternates) > 1 then 196 | expansions = lazyScript.efind_addAlternatesToExpansions(expansions, alternates, leadup) 197 | else 198 | expansions = lazyScript.efind_addRawToExpansions(expansions, leadup.."("..group..")") 199 | end 200 | 201 | pos = b+1 202 | else 203 | lazyScript.efind_addRawToExpansions(expansions, string.sub(pattern, pos)) 204 | break 205 | end 206 | end 207 | 208 | for i, exp in ipairs(expansions) do 209 | --print("Expansion: "..i.."="..exp) 210 | local s, e, m1, m2, m3, m4, m5, m6 = string.find(text, exp) 211 | if s then 212 | if type(m1) == "number" then m1 = "" end 213 | if type(m2) == "number" then m2 = "" end 214 | if type(m3) == "number" then m3 = "" end 215 | if type(m4) == "number" then m4 = "" end 216 | if type(m5) == "number" then m5 = "" end 217 | if type(m6) == "number" then m6 = "" end 218 | return s, e, m1, m2, m3, m4, m5, m6 219 | end 220 | end 221 | 222 | return nil 223 | end 224 | 225 | function lazyScript.ListBuffs() 226 | for id=0,31 do 227 | local index = GetPlayerBuff(id, "HELPFUL") 228 | local texture = GetPlayerBuffTexture(index) 229 | if texture == nil then 230 | break 231 | end 232 | lazyScript.p("Helpful Buff #"..id.." ("..index..") = "..texture) 233 | end 234 | 235 | for id=0,31 do 236 | local index = GetPlayerBuff(id, "HARMFUL") 237 | local texture = GetPlayerBuffTexture(index) 238 | if texture == nil then 239 | break 240 | end 241 | lazyScript.p("Harmful Buff #"..id.." ("..index..") = "..texture) 242 | end 243 | end 244 | 245 | function lazyScript.FindMultiTextureSpells() 246 | local lastSpellName = nil 247 | local lastTexture = nil 248 | local multiTextureSpells = {} 249 | for spellIndex = 1, 1000 do 250 | local spellName = GetSpellName(spellIndex,"spell") 251 | if (not spellName) then 252 | break 253 | end 254 | local texture = GetSpellTexture(spellIndex,"spell") 255 | if (spellName == lastSpellName and texture ~= lastTexture) then 256 | if not multiTextureSpells[spellName] then 257 | multiTextureSpells[spellName] = {} 258 | end 259 | multiTextureSpells[spellName][texture] = true 260 | multiTextureSpells[spellName][lastTexture] = true 261 | end 262 | lastSpellName = spellName 263 | lastTexture = texture 264 | end 265 | 266 | for spellName, textures in pairs(multiTextureSpells) do 267 | local textureNames 268 | for texture, _ in pairs(textures) do 269 | local textureName = string.sub(texture, 17) 270 | if not textureNames then 271 | textureNames = textureName 272 | else 273 | textureNames = textureNames..", "..textureName 274 | end 275 | end 276 | lazyScript.p(SPELL..spellName) 277 | lazyScript.p(TEXTURES..textureNames) 278 | end 279 | end -------------------------------------------------------------------------------- /LazyScript/img/corner.tga: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/laytya/LazyScript/cf3b7c7220cf2f0fa7062af8033e3e30f8e87a92/LazyScript/img/corner.tga -------------------------------------------------------------------------------- /LazyShaman/LazyShaman.lua: -------------------------------------------------------------------------------- 1 | lazyShaman = {} 2 | lazyShamanLoad = {} 3 | 4 | lazyShamanLoad.metadata = lazyScript.Metadata:new("LazyShaman") 5 | lazyShamanLoad.metadata:updateRevisionFromKeyword("$Revision: 358 $") 6 | 7 | function lazyShamanLoad.OnLoad() 8 | -- Check that this player is the correct class 9 | local localeClass, class = UnitClass("player") 10 | if class ~= "SHAMAN" then 11 | return 12 | end 13 | 14 | -- Check that we're compatible with LazyScript 15 | if not lazyScript.CheckCompatibility(lazyShamanLoad.metadata) then 16 | return 17 | end 18 | 19 | -- I like everything with the same name. It makes S&R so easy 20 | lazyShaman = lazyScript 21 | lazyShamanLocale = lsLocale 22 | -- Unfortunately this overwrites everything that we already had called lazyShaman. 23 | -- Load everything else in class specific files using these loading functions 24 | -- Localization must be loaded first! 25 | lazyShamanLoad.LoadShamanLocalization(GetLocale()) 26 | lazyShamanLoad.LoadParseShaman() 27 | 28 | this:RegisterEvent("VARIABLES_LOADED") 29 | this:RegisterEvent("PLAYER_LOGIN") 30 | end 31 | 32 | function lazyShamanLoad.OnEvent() 33 | if (event == "VARIABLES_LOADED") then 34 | -- Nothing yet 35 | 36 | elseif (event == "PLAYER_LOGIN") then 37 | lazyShaman.chat(lazyShamanLoad.metadata:getNameVersionRevisionString()..SHAMAN_ADDON_LOADED..lazyScript.metadata.name.."!") 38 | 39 | end 40 | end -------------------------------------------------------------------------------- /LazyShaman/LazyShaman.toc: -------------------------------------------------------------------------------- 1 | ## Interface: 11200 2 | ## Title: LazyScript - |cffff770CLazy|r|cffffffffShaman|r 3 | ## Version: 1.0-alpha18 4 | ## X-Revision: $Revision: 747 $ 5 | ## X-LazyScriptCompatibility: 3 6 | ## Notes: Programmable Shaman Attacks. 7 | ## Notes-ruRU: Программируемые атаки шамана. 8 | ## RequiredDeps: LazyScript 9 | ## OptionalDeps: MobInfo-2, Tracer 10 | ## LoadOnDemand: 1 11 | ## X-LazyScriptVersion: 1.0 12 | 13 | LazyShaman.lua 14 | ParseShaman.lua 15 | Localization.lua 16 | LazyShaman.xml -------------------------------------------------------------------------------- /LazyShaman/LazyShaman.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 9 | lazyShamanLoad.metadata:updateRevisionFromKeyword("$Revision: 294 $") 10 | lazyShamanLoad.OnLoad() 11 | 12 | 13 | lazyShamanLoad.OnEvent() 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | this:SetOwner(this, "ANCHOR_NONE") 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /LazyShaman/Localization.lua: -------------------------------------------------------------------------------- 1 | lazyShamanLoad.metadata:updateRevisionFromKeyword("$Revision: 474 $") 2 | 3 | function lazyShamanLoad.LoadShamanLocalization(locale) 4 | 5 | lazyShamanLocale.enUS.ACTION_TTS.earthShock = "Earth Shock" 6 | lazyShamanLocale.enUS.ACTION_TTS.flameShock = "Flame Shock" 7 | lazyShamanLocale.enUS.ACTION_TTS.frostShock = "Frost Shock" 8 | lazyShamanLocale.enUS.ACTION_TTS.rockbiter = "Rockbiter Weapon" 9 | lazyShamanLocale.enUS.ACTION_TTS.flametongue = "Flametongue Weapon" 10 | lazyShamanLocale.enUS.ACTION_TTS.frostbrand = "Frostbrand Weapon" 11 | lazyShamanLocale.enUS.ACTION_TTS.windfury = "Windfury Weapon" 12 | lazyShamanLocale.enUS.ACTION_TTS.chainHeal = "Chain Heal" 13 | lazyShamanLocale.enUS.ACTION_TTS.chainLight = "Chain Lightning" 14 | lazyShamanLocale.enUS.ACTION_TTS.cureDisease = "Cure Disease" 15 | lazyShamanLocale.enUS.ACTION_TTS.curePoison = "Cure Poison" 16 | lazyShamanLocale.enUS.ACTION_TTS.elemMastery = "Elemental Mastery" 17 | lazyShamanLocale.enUS.ACTION_TTS.ghostWolf = "Ghost Wolf" 18 | lazyShamanLocale.enUS.ACTION_TTS.heal = "Healing Wave" 19 | lazyShamanLocale.enUS.ACTION_TTS.lesserHeal = "Lesser Healing Wave" 20 | lazyShamanLocale.enUS.ACTION_TTS.lightBolt = "Lightning Bolt" 21 | lazyShamanLocale.enUS.ACTION_TTS.lightShield = "Lightning Shield" 22 | lazyShamanLocale.enUS.ACTION_TTS.natureSwift = "Nature's Swiftness" 23 | lazyShamanLocale.enUS.ACTION_TTS.purge = "Purge" 24 | lazyShamanLocale.enUS.ACTION_TTS.stormstrike = "Stormstrike" 25 | 26 | lazyShamanLocale.enUS.ACTION_TTS.diseaseTotem = "Disease Cleansing Totem" 27 | lazyShamanLocale.enUS.ACTION_TTS.bindTotem = "Earthbind Totem" 28 | lazyShamanLocale.enUS.ACTION_TTS.fireNovaTotem = "Fire Nova Totem" 29 | lazyShamanLocale.enUS.ACTION_TTS.fireResistTotem = "Fire Resistance Totem" 30 | lazyShamanLocale.enUS.ACTION_TTS.flameTotem = "Flametongue Totem" 31 | lazyShamanLocale.enUS.ACTION_TTS.frostResistTotem = "Frost Resistance Totem" 32 | lazyShamanLocale.enUS.ACTION_TTS.graceTotem = "Grace of Air Totem" 33 | lazyShamanLocale.enUS.ACTION_TTS.groundingTotem = "Grounding Totem" 34 | lazyShamanLocale.enUS.ACTION_TTS.hsTotem = "Healing Stream Totem" 35 | lazyShamanLocale.enUS.ACTION_TTS.magmaTotem = "Magma Totem" 36 | lazyShamanLocale.enUS.ACTION_TTS.msTotem = "Mana Spring Totem" 37 | lazyShamanLocale.enUS.ACTION_TTS.mtTotem = "Mana Tide Totem" 38 | lazyShamanLocale.enUS.ACTION_TTS.natureResistTotem = "Nature Resistance Totem" 39 | lazyShamanLocale.enUS.ACTION_TTS.poisonTotem = "Poison Cleansing Totem" 40 | lazyShamanLocale.enUS.ACTION_TTS.searingTotem = "Searing Totem" 41 | lazyShamanLocale.enUS.ACTION_TTS.sentryTotem = "Sentry Totem" 42 | lazyShamanLocale.enUS.ACTION_TTS.clawTotem = "Stoneclaw Totem" 43 | lazyShamanLocale.enUS.ACTION_TTS.skinTotem = "Stoneskin Totem" 44 | lazyShamanLocale.enUS.ACTION_TTS.strengthTotem = "Strength of Earth Totem" 45 | lazyShamanLocale.enUS.ACTION_TTS.tranquilTotem = "Tranquil Air Totem" 46 | lazyShamanLocale.enUS.ACTION_TTS.tremorTotem = "Tremor Totem" 47 | lazyShamanLocale.enUS.ACTION_TTS.wfTotem = "Windfury Totem" 48 | lazyShamanLocale.enUS.ACTION_TTS.windwallTotem = "Windwall Totem" 49 | 50 | -- LazyShaman.lua 51 | SHAMAN_ADDON_LOADED = " loaded. Powered by " 52 | 53 | -- ParseShaman.lua 54 | function lazyShaman.CustomLocaleHelp() return [[

Shaman Criteria:

]] end 55 | 56 | if (locale == "ruRU") then 57 | 58 | lazyShamanLocale.ruRU.ACTION_TTS.earthShock = "Земной шок" 59 | lazyShamanLocale.ruRU.ACTION_TTS.flameShock = "Огненный шок" 60 | lazyShamanLocale.ruRU.ACTION_TTS.frostShock = "Ледяной шок" 61 | lazyShamanLocale.ruRU.ACTION_TTS.rockbiter = "Оружие Камнедробителя" 62 | lazyShamanLocale.ruRU.ACTION_TTS.flametongue = "Оружие языка пламени" 63 | lazyShamanLocale.ruRU.ACTION_TTS.frostbrand = "Оружие ледяного клейма" 64 | lazyShamanLocale.ruRU.ACTION_TTS.windfury = "Оружие неистовства ветра" 65 | lazyShamanLocale.ruRU.ACTION_TTS.chainHeal = "Цепное исцеление" 66 | lazyShamanLocale.ruRU.ACTION_TTS.chainLight = "Цепная молния" 67 | lazyShamanLocale.ruRU.ACTION_TTS.cureDisease = "Излечение болезни" 68 | lazyShamanLocale.ruRU.ACTION_TTS.curePoison = "Выведение яда" 69 | lazyShamanLocale.ruRU.ACTION_TTS.elemMastery = "Покорение стихий" 70 | lazyShamanLocale.ruRU.ACTION_TTS.ghostWolf = "Призрачный волк" 71 | lazyShamanLocale.ruRU.ACTION_TTS.heal = "Волна исцеления" 72 | lazyShamanLocale.ruRU.ACTION_TTS.lesserHeal = "Малая волна исцеления" 73 | lazyShamanLocale.ruRU.ACTION_TTS.lightBolt = "Молния" 74 | lazyShamanLocale.ruRU.ACTION_TTS.lightShield = "Щит молний" 75 | lazyShamanLocale.ruRU.ACTION_TTS.natureSwift = "Природная стремительность" 76 | lazyShamanLocale.ruRU.ACTION_TTS.purge = "Развеяние магии" 77 | lazyShamanLocale.ruRU.ACTION_TTS.stormstrike = "Удар бури" 78 | 79 | lazyShamanLocale.ruRU.ACTION_TTS.diseaseTotem = "Тотем очищения от болезней" 80 | lazyShamanLocale.ruRU.ACTION_TTS.bindTotem = "Тотем оков земли" 81 | lazyShamanLocale.ruRU.ACTION_TTS.fireNovaTotem = "Тотем кольца огня" 82 | lazyShamanLocale.ruRU.ACTION_TTS.fireResistTotem = "Тотем защиты от огня" 83 | lazyShamanLocale.ruRU.ACTION_TTS.flameTotem = "Тотем языка пламени" 84 | lazyShamanLocale.ruRU.ACTION_TTS.frostResistTotem = "Тотем защиты от магии льда" 85 | lazyShamanLocale.ruRU.ACTION_TTS.graceTotem = "Тотем легкости воздуха" 86 | lazyShamanLocale.ruRU.ACTION_TTS.groundingTotem = "Тотем заземления" 87 | lazyShamanLocale.ruRU.ACTION_TTS.hsTotem = "Тотем исцеляющего потока" 88 | lazyShamanLocale.ruRU.ACTION_TTS.magmaTotem = "Тотем магмы" 89 | lazyShamanLocale.ruRU.ACTION_TTS.msTotem = "Тотем источника маны" 90 | lazyShamanLocale.ruRU.ACTION_TTS.mtTotem = "Тотем прилива маны" 91 | lazyShamanLocale.ruRU.ACTION_TTS.natureResistTotem = "Тотем защиты от сил природы" 92 | lazyShamanLocale.ruRU.ACTION_TTS.poisonTotem = "Тотем противоядия" 93 | lazyShamanLocale.ruRU.ACTION_TTS.searingTotem = "Опаляющий тотем" 94 | lazyShamanLocale.ruRU.ACTION_TTS.sentryTotem = "Сторожевой тотем" 95 | lazyShamanLocale.ruRU.ACTION_TTS.clawTotem = "Тотем каменного когтя" 96 | lazyShamanLocale.ruRU.ACTION_TTS.skinTotem = "Тотем каменной кожи" 97 | lazyShamanLocale.ruRU.ACTION_TTS.strengthTotem = "Тотем силы земли" 98 | lazyShamanLocale.ruRU.ACTION_TTS.tranquilTotem = "Тотем безветрия" 99 | lazyShamanLocale.ruRU.ACTION_TTS.tremorTotem = "Тотем трепета" 100 | lazyShamanLocale.ruRU.ACTION_TTS.wfTotem = "Тотем неистовства ветра" 101 | lazyShamanLocale.ruRU.ACTION_TTS.windwallTotem = "Тотем стены ветра" 102 | 103 | -- LazyShaman.lua 104 | SHAMAN_ADDON_LOADED = " загружен. Работает от " 105 | 106 | -- ParseShaman.lua 107 | function lazyShaman.CustomLocaleHelp() return [[

Критерии Шамана:

]] end 108 | 109 | end 110 | end -------------------------------------------------------------------------------- /LazyShaman/ParseShaman.lua: -------------------------------------------------------------------------------- 1 | lazyShamanLoad.metadata:updateRevisionFromKeyword("$Revision: 654 $") 2 | 3 | -- The functions and data inside this block will not be defined unless the user is a Shaman. 4 | 5 | function lazyShamanLoad.LoadParseShaman() 6 | 7 | -- Shaman actions 8 | ----------------- 9 | -- The lazyShaman.actions. must match the short name so that we only need additional 10 | -- bitParsing functions for special cases. 11 | 12 | lazyShaman.actions.earthShock = lazyShaman.Action:New("earthShock", "Spell_Nature_EarthShock") 13 | lazyShaman.actions.flameShock = lazyShaman.Action:New("flameShock", "Spell_Fire_FlameShock") 14 | lazyShaman.actions.frostShock = lazyShaman.Action:New("frostShock", "Spell_Frost_FrostShock") 15 | 16 | lazyShaman.actions.flametongue = lazyShaman.Action:New("flametongue", "Spell_Fire_FlameTounge") 17 | lazyShaman.actions.frostbrand = lazyShaman.Action:New("frostbrand", "Spell_Frost_FrostBrand") 18 | lazyShaman.actions.rockbiter = lazyShaman.Action:New("rockbiter", "Spell_Nature_RockBiter") 19 | lazyShaman.actions.windfury = lazyShaman.Action:New("windfury", "Spell_Nature_Cyclone") 20 | 21 | lazyShaman.actions.chainHeal = lazyShaman.Action:New("chainHeal", "Spell_Nature_HealingWaveGreater") 22 | lazyShaman.actions.chainLight = lazyShaman.Action:New("chainLight", "Spell_Nature_ChainLightning") 23 | lazyShaman.actions.cureDisease = lazyShaman.Action:New("cureDisease", "Spell_Nature_RemoveDisease") 24 | lazyShaman.actions.curePoison = lazyShaman.Action:New("curePoison", "Spell_Nature_NullifyPoison") 25 | lazyShaman.actions.elemMastery = lazyShaman.Action:New("elemMastery", "Spell_Nature_WispHeal") 26 | lazyShaman.actions.ghostWolf = lazyShaman.Action:New("ghostWolf", "Spell_Nature_SpiritWolf") 27 | lazyShaman.actions.heal = lazyShaman.Action:New("heal", "Spell_Nature_MagicImmunity") 28 | lazyShaman.actions.lesserHeal = lazyShaman.Action:New("lesserHeal", "Spell_Nature_HealingWaveLesser") 29 | lazyShaman.actions.lightBolt = lazyShaman.Action:New("lightBolt", "Spell_Nature_Lightning") 30 | lazyShaman.actions.lightShield = lazyShaman.Action:New("lightShield", "Spell_Nature_LightningShield") 31 | lazyShaman.actions.natureSwift = lazyShaman.Action:New("natureSwift", "Spell_Nature_RavenForm") 32 | lazyShaman.actions.purge = lazyShaman.Action:New("purge", "Spell_Nature_Purge") 33 | lazyShaman.actions.stormstrike = lazyShaman.Action:New("stormstrike", "Spell_Holy_SealOfMight") 34 | 35 | -- Earth totems 36 | 37 | lazyShaman.actions.bindTotem = lazyShaman.Action:New("bindTotem", "Spell_Nature_StrengthOfEarthTotem02") 38 | lazyShaman.actions.clawTotem = lazyShaman.Action:New("clawTotem", "Spell_Nature_StoneClawTotem") 39 | lazyShaman.actions.skinTotem = lazyShaman.Action:New("skinTotem", "Spell_Nature_StoneSkinTotem") 40 | lazyShaman.actions.strengthTotem = lazyShaman.Action:New("strengthTotem", "Spell_Nature_EarthBindTotem") 41 | lazyShaman.actions.tremorTotem = lazyShaman.Action:New("tremorTotem", "Spell_Nature_TremorTotem") 42 | 43 | -- Fire totems 44 | 45 | lazyShaman.actions.fireNovaTotem = lazyShaman.Action:New("fireNovaTotem", "Spell_Fire_SealOfFire") 46 | lazyShaman.actions.flameTotem = lazyShaman.Action:New("flameTotem", "Spell_Nature_GuardianWard") 47 | lazyShaman.actions.frostResistTotem = lazyShaman.Action:New("frostResistTotem", "Spell_FrostResistanceTotem_01") 48 | lazyShaman.actions.magmaTotem = lazyShaman.Action:New("magmaTotem", "Spell_Fire_SelfDestruct") 49 | lazyShaman.actions.searingTotem = lazyShaman.Action:New("searingTotem", "Spell_Fire_SearingTotem") 50 | 51 | -- Water totems 52 | 53 | lazyShaman.actions.diseaseTotem = lazyShaman.Action:New("diseaseTotem", "Spell_Nature_DiseaseCleansingTotem") 54 | lazyShaman.actions.fireResistTotem = lazyShaman.Action:New("fireResistTotem", "Spell_FireResistanceTotem_01") 55 | lazyShaman.actions.hsTotem = lazyShaman.Action:New("hsTotem", "INV_Spear_04") 56 | lazyShaman.actions.msTotem = lazyShaman.Action:New("msTotem", "Spell_Nature_ManaRegenTotem") 57 | lazyShaman.actions.mtTotem = lazyShaman.Action:New("mtTotem", "Spell_Frost_SummonWaterElemental") 58 | lazyShaman.actions.poisonTotem = lazyShaman.Action:New("poisonTotem", "Spell_Nature_PoisonCleansingTotem") 59 | 60 | -- Air totems 61 | 62 | lazyShaman.actions.graceTotem = lazyShaman.Action:New("graceTotem", "Spell_Nature_InvisibilityTotem") 63 | lazyShaman.actions.groundingTotem = lazyShaman.Action:New("groundingTotem", "Spell_Nature_GroundingTotem") 64 | lazyShaman.actions.natureResistTotem = lazyShaman.Action:New("natureResistTotem", "Spell_Nature_NatureResistanceTotem") 65 | lazyShaman.actions.sentryTotem = lazyShaman.Action:New("sentryTotem", "Spell_Nature_RemoveCurse") -- yes, this is the right texture 66 | lazyShaman.actions.tranquilTotem = lazyShaman.Action:New("tranquilTotem", "Spell_Nature_Brilliance") 67 | lazyShaman.actions.wfTotem = lazyShaman.Action:New("wfTotem", "Spell_Nature_Windfury") 68 | lazyShaman.actions.windwallTotem = lazyShaman.Action:New("windwallTotem", "Spell_Nature_EarthBind") 69 | 70 | -- Special Shaman actions 71 | ------------------------- 72 | -- Only include actions that require additional implicit conditions or non-standard action entries 73 | -- e.g. lazyShaman.comboActions. or lazyShaman.items., otherwise an entry in 74 | -- the list above should be sufficient. 75 | 76 | 77 | 78 | -- Simple Shaman specific masks 79 | ------------------------------- 80 | -- These masks do not require parameters and return the check directly so we can omit the function 81 | -- call and just refer to the mask by name i.e. lazyShaman.masks. instead of 82 | -- lazyShaman.masks.(). 83 | -- I try to keep the mask and the bitParser that refers to said mask together for ease 84 | -- of reading. 85 | 86 | 87 | 88 | -- Complex Shaman masks 89 | ----------------------- 90 | -- These are masks which require additional parameters or have a structure optimized for run-time 91 | -- efficiency. The mask function must be executed e.g. lazyShaman.masks.(parameters). 92 | -- The portion of the code that needs to be executed when the button is pressed should appear within 93 | -- "return function() ... end" inside the mask function, everything else will be evaluated at 94 | -- the time that the mask is parsed. 95 | 96 | 97 | -- Shaman utility functions 98 | --------------------------- 99 | -- These are functions that are never called by a form but are used within other mask functions. 100 | -- Technically, they are not masks, but we'll leave them alone for now. 101 | 102 | 103 | -- Custom AutoAttack 104 | -------------------- 105 | -- Include any modifications to the autoAttack function. If this omitted, lazyShaman 106 | -- will use the default auto-attack behaviour in Parse.lua. The function must be called 107 | -- CustomAutoAttackMode. 108 | 109 | 110 | -- Custom command line arguments 111 | -------------------------------- 112 | 113 | 114 | 115 | -- Custom minimap entries 116 | ------------------------- 117 | 118 | 119 | 120 | -- Default forms 121 | ---------------- 122 | -- Specify any default forms if they exist. 123 | 124 | lazyShaman.defaultForms = {} 125 | 126 | lazyShaman.defaultForms.solo = { 127 | "-- Out of combat", 128 | "heal-ifNotInCombat-ifPlayer<60%hp-spellTargetUnit=player", 129 | "curePoison-ifNotInCombat-ifPlayerIs=Poisoned-spellTargetUnit=player", 130 | "cureDisease-ifNotInCombat-ifPlayerIs=Diseased-spellTargetUnit=player", 131 | "windfury-ifNotMainHandBuffed", 132 | "lightShield-ifNotHasBuff=lightShield-ifNotInCombat-ifPlayer>50%mana", 133 | "-- In combat", 134 | "stop-ifCasting", 135 | "earthShock(rank1)-ifTargetIsCasting", 136 | "frostShock(rank1)-ifTargetFleeing", 137 | "lesserHeal-ifInCombat-ifPlayer<50%hp-spellTargetUnit=player", 138 | "strengthTotem-ifNotHasBuff=strengthTotem-ifNotTargetFriend-ifPlayer>50%hp", 139 | "lightBolt-ifNotInCombat-ifNotTargetFriend", 140 | "hsTotem-ifNotHasBuff=hsTotem-ifNotTargetFriend", 141 | "lightShield-ifNotHasBuff=lightShield-ifInCombat-ifPlayer>60%mana", 142 | } 143 | lazyShaman.defaultForms.lowbie = { 144 | "-- Out of combat", 145 | "heal@player-ifNotInCombat-ifPlayer<60%hp", 146 | "curePoison@player-ifNotInCombat-ifPlayerIs=Poisoned", 147 | "lightShield-ifNotHasBuff=lightShield-ifNotInCombat-ifPlayer>50%mana", 148 | "rockbiter-ifNotMainHandBuffed", 149 | "-- In combat", 150 | "stop-ifCasting", 151 | "earthShock(rank1)-ifTargetIsCasting", 152 | "frostShock(rank1)-ifTargetFleeing", 153 | "lesserHeal@player-ifInCombat-ifPlayer<50%hp", 154 | "strengthTotem-ifNotHasBuff=strengthTotem-ifNotTargetFriend-ifPlayer>50%hp", 155 | "lightShield-ifNotHasBuff=lightShield-ifInCombat-ifPlayer>60%mana", 156 | "lightBolt-ifNotInCombat-ifNotTargetFriend", 157 | } 158 | 159 | -- Custom data 160 | --------------- 161 | -- Place any other tables of data unique to the class here. 162 | 163 | 164 | -- Custom initialization 165 | ------------------------ 166 | 167 | 168 | -- Custom help text 169 | ------------------- 170 | -- Place any help text that pertains to class specific actions and masks here. 171 | -- Because of formatting restrictions we place this last so that it does not mess up the indentation. 172 | function lazyShaman.CustomHelp() 173 | return [[ 174 |

Currently None!

175 | ]] 176 | end 177 | 178 | end -- function lazyShamanLoad.LoadParseShaman() -------------------------------------------------------------------------------- /LazyWarlock/LazyWarlock.lua: -------------------------------------------------------------------------------- 1 | lazyWarlock = {} 2 | lazyWarlockLoad = {} 3 | 4 | lazyWarlockLoad.metadata = lazyScript.Metadata:new("LazyWarlock") 5 | lazyWarlockLoad.metadata:updateRevisionFromKeyword("$Revision: 414 $") 6 | 7 | function lazyWarlockLoad.OnLoad() 8 | -- Check that this player is the correct class 9 | local localeClass, class = UnitClass("player") 10 | if class ~= "WARLOCK" then 11 | return 12 | end 13 | 14 | -- Check that we're compatible with LazyScript 15 | if not lazyScript.CheckCompatibility(lazyWarlockLoad.metadata) then 16 | return 17 | end 18 | 19 | -- I like everything with the same name. It makes S&R so easy 20 | lazyWarlock = lazyScript 21 | lazyWarlockLocale = lsLocale 22 | -- Unfortunately this overwrites everything that we already had called lazyWarlock. 23 | -- Load everything else in class specific files using these loading functions 24 | -- Localization must be loaded first! 25 | lazyWarlockLoad.LoadWarlockLocalization(GetLocale()) 26 | lazyWarlockLoad.LoadParseWarlock() 27 | 28 | this:RegisterEvent("VARIABLES_LOADED") 29 | this:RegisterEvent("PLAYER_LOGIN") 30 | 31 | this:RegisterEvent("BAG_UPDATE") 32 | end 33 | 34 | function lazyWarlockLoad.OnEvent() 35 | if (event == "BAG_UPDATE") then 36 | lazyWarlock.CheckStones() 37 | elseif (event == "VARIABLES_LOADED") then 38 | -- Nothing yet 39 | elseif (event == "PLAYER_LOGIN") then 40 | lazyWarlock.chat(lazyWarlockLoad.metadata:getNameVersionRevisionString()..WARLOCK_ADDON_LOADED..lazyScript.metadata.name.."!") 41 | end 42 | end -------------------------------------------------------------------------------- /LazyWarlock/LazyWarlock.toc: -------------------------------------------------------------------------------- 1 | ## Interface: 11200 2 | ## Title: LazyScript - |cffff770CLazy|r|cffffffffWarlock|r 3 | ## Version: 1.0-alpha18 4 | ## X-Revision: $Revision: 747 $ 5 | ## X-LazyScriptCompatibility: 3 6 | ## Notes: Programmable Warlock Attacks. 7 | ##Notes-ruRU: Программируемые атаки чернокнижника. 8 | ## RequiredDeps: LazyScript 9 | ## OptionalDeps: MobInfo-2, Tracer, BonusScanner 10 | ## LoadOnDemand: 1 11 | ## X-LazyScriptVersion: 1.0 12 | 13 | LazyWarlock.lua 14 | ParseWarlock.lua 15 | Localization.lua 16 | LazyWarlock.xml -------------------------------------------------------------------------------- /LazyWarlock/LazyWarlock.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 9 | lazyWarlockLoad.metadata:updateRevisionFromKeyword("$Revision$") 10 | lazyWarlockLoad.OnLoad() 11 | 12 | 13 | lazyWarlockLoad.OnEvent() 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | this:SetOwner(this, "ANCHOR_NONE") 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /LazyWarrior/LazyWarrior.lua: -------------------------------------------------------------------------------- 1 | lazyWarrior = {} 2 | lazyWarriorLoad = {} 3 | 4 | lazyWarriorLoad.metadata = lazyScript.Metadata:new("LazyWarrior") 5 | lazyWarriorLoad.metadata:updateRevisionFromKeyword("$Revision: 358 $") 6 | 7 | function lazyWarriorLoad.OnLoad() 8 | -- Check that this player is the correct class 9 | local localeClass, class = UnitClass("player") 10 | if class ~= "WARRIOR" then 11 | return 12 | end 13 | 14 | -- Check that we're compatible with LazyScript 15 | if not lazyScript.CheckCompatibility(lazyWarriorLoad.metadata) then 16 | return 17 | end 18 | 19 | -- I like everything with the same name. It makes S&R so easy 20 | lazyWarrior = lazyScript 21 | lazyWarriorLocale = lsLocale 22 | -- Unfortunately this overwrites everything that we already had called lazyWarrior. 23 | -- Load everything else in class specific files using these loading functions 24 | -- Localization must be loaded first! 25 | lazyWarriorLoad.LoadWarriorLocalization(GetLocale()) 26 | lazyWarriorLoad.LoadParseWarrior() 27 | 28 | this:RegisterEvent("VARIABLES_LOADED") 29 | this:RegisterEvent("PLAYER_LOGIN") 30 | end 31 | 32 | function lazyWarriorLoad.OnEvent() 33 | if (event == "VARIABLES_LOADED") then 34 | -- Nothing yet 35 | 36 | elseif (event == "PLAYER_LOGIN") then 37 | lazyWarrior.chat(lazyWarriorLoad.metadata:getNameVersionRevisionString()..WARRIOR_ADDON_LOADED..lazyScript.metadata.name.."!") 38 | 39 | end 40 | end -------------------------------------------------------------------------------- /LazyWarrior/LazyWarrior.toc: -------------------------------------------------------------------------------- 1 | ## Interface: 11200 2 | ## Title: LazyScript - |cffff770CLazy|r|cffffffffWarrior|r 3 | ## Version: 1.0.2 4 | ## X-Revision: $Revision: 747 $ 5 | ## X-LazyScriptCompatibility: 3 6 | ## Notes: Programmable Warrior Attacks. 7 | ## Notes-ruRU: Программируемые атаки воина. 8 | ## RequiredDeps: LazyScript 9 | ## OptionalDeps: MobInfo-2, Tracer 10 | ## LoadOnDemand: 1 11 | ## X-LazyScriptVersion: 1.0 12 | 13 | LazyWarrior.lua 14 | ParseWarrior.lua 15 | Localization.lua 16 | LazyWarrior.xml -------------------------------------------------------------------------------- /LazyWarrior/LazyWarrior.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 9 | lazyWarriorLoad.metadata:updateRevisionFromKeyword("$Revision: 171 $") 10 | lazyWarriorLoad.OnLoad() 11 | 12 | 13 | lazyWarriorLoad.OnEvent() 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | this:SetOwner(this, "ANCHOR_NONE") 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /LazyWarrior/Localization.lua: -------------------------------------------------------------------------------- 1 | lazyWarriorLoad.metadata:updateRevisionFromKeyword("$Revision: 644 $") 2 | 3 | function lazyWarriorLoad.LoadWarriorLocalization(locale) 4 | 5 | lazyWarriorLocale.enUS.ACTION_TTS.bloodrage = "Bloodrage" 6 | lazyWarriorLocale.enUS.ACTION_TTS.charge = "Charge" 7 | lazyWarriorLocale.enUS.ACTION_TTS.battleShout = "Battle Shout" 8 | lazyWarriorLocale.enUS.ACTION_TTS.thunderClap = "Thunder Clap" 9 | lazyWarriorLocale.enUS.ACTION_TTS.rend = "Rend" 10 | lazyWarriorLocale.enUS.ACTION_TTS.hamstring = "Hamstring" 11 | lazyWarriorLocale.enUS.ACTION_TTS.heroicStrike = "Heroic Strike" 12 | lazyWarriorLocale.enUS.ACTION_TTS.sunder = "Sunder Armor" 13 | lazyWarriorLocale.enUS.ACTION_TTS.overpower = "Overpower" 14 | lazyWarriorLocale.enUS.ACTION_TTS.demoShout = "Demoralizing Shout" 15 | lazyWarriorLocale.enUS.ACTION_TTS.revenge = "Revenge" 16 | lazyWarriorLocale.enUS.ACTION_TTS.mockingBlow = "Mocking Blow" 17 | lazyWarriorLocale.enUS.ACTION_TTS.shieldBlock = "Shield Block" 18 | lazyWarriorLocale.enUS.ACTION_TTS.disarm = "Disarm" 19 | lazyWarriorLocale.enUS.ACTION_TTS.cleave = "Cleave" 20 | lazyWarriorLocale.enUS.ACTION_TTS.execute = "Execute" 21 | lazyWarriorLocale.enUS.ACTION_TTS.deathWish = "Death Wish" 22 | lazyWarriorLocale.enUS.ACTION_TTS.intercept = "Intercept" 23 | lazyWarriorLocale.enUS.ACTION_TTS.berserkerRage = "Berserker Rage" 24 | lazyWarriorLocale.enUS.ACTION_TTS.whirlwind = "Whirlwind" 25 | lazyWarriorLocale.enUS.ACTION_TTS.pummel = "Pummel" 26 | lazyWarriorLocale.enUS.ACTION_TTS.bloodthirst = "Bloodthirst" 27 | lazyWarriorLocale.enUS.ACTION_TTS.piercingHowl = "Piercing Howl" 28 | lazyWarriorLocale.enUS.ACTION_TTS.taunt = "Taunt" 29 | lazyWarriorLocale.enUS.ACTION_TTS.battle = "Battle Stance" 30 | lazyWarriorLocale.enUS.ACTION_TTS.defensive = "Defensive Stance" 31 | lazyWarriorLocale.enUS.ACTION_TTS.berserk = "Berserker Stance" 32 | lazyWarriorLocale.enUS.ACTION_TTS.lastStand = "Last Stand" 33 | lazyWarriorLocale.enUS.ACTION_TTS.shieldBash = "Shield Bash" 34 | lazyWarriorLocale.enUS.ACTION_TTS.mortalStrike = "Mortal Strike" 35 | lazyWarriorLocale.enUS.ACTION_TTS.shieldSlam = "Shield Slam" 36 | lazyWarriorLocale.enUS.ACTION_TTS.sweepingStrikes = "Sweeping Strikes" 37 | lazyWarriorLocale.enUS.ACTION_TTS.concussionBlow = "Concussion Blow" 38 | lazyWarriorLocale.enUS.ACTION_TTS.challengingShout = "Challenging Shout" 39 | lazyWarriorLocale.enUS.ACTION_TTS.intimidatingShout = "Intimidating Shout" 40 | lazyWarriorLocale.enUS.ACTION_TTS.recklessness = "Recklessness" 41 | lazyWarriorLocale.enUS.ACTION_TTS.retaliation = "Retaliation" 42 | lazyWarriorLocale.enUS.ACTION_TTS.shieldWall = "Shield Wall" 43 | lazyWarriorLocale.enUS.ACTION_TTS.slam = "Slam" 44 | 45 | -- LazyWarrior.lua 46 | WARRIOR_ADDON_LOADED = " loaded. Powered by " 47 | 48 | -- ParseWarrior.lua 49 | WARRIOR_EARLY_BLOODTHIRST = "Early Bloodthirst! Kill shot!" 50 | WARRIOR_STANCE = "Stance: " 51 | WARRIOR_NOT_RECOGNISED = " not recognised." 52 | ITEM_SUBTYPE_SHIELDS = "Shields" 53 | 54 | function lazyWarrior.CustomLocaleHelp() return [[

Warrior Criteria:

]] end 55 | 56 | if (locale == "ruRU") then 57 | 58 | lazyWarriorLocale.ruRU.ACTION_TTS.bloodrage = "Кровавая ярость" 59 | lazyWarriorLocale.ruRU.ACTION_TTS.charge = "Рывок" 60 | lazyWarriorLocale.ruRU.ACTION_TTS.battleShout = "Боевой крик" 61 | lazyWarriorLocale.ruRU.ACTION_TTS.thunderClap = "Удар грома" 62 | lazyWarriorLocale.ruRU.ACTION_TTS.rend = "Кровопускание" 63 | lazyWarriorLocale.ruRU.ACTION_TTS.hamstring = "Подрезать сухожилия" 64 | lazyWarriorLocale.ruRU.ACTION_TTS.heroicStrike = "Удар героя" 65 | lazyWarriorLocale.ruRU.ACTION_TTS.sunder = "Раскол брони" 66 | lazyWarriorLocale.ruRU.ACTION_TTS.overpower = "Превосходство" 67 | lazyWarriorLocale.ruRU.ACTION_TTS.demoShout = "Деморализующий крик" 68 | lazyWarriorLocale.ruRU.ACTION_TTS.revenge = "Реванш" 69 | lazyWarriorLocale.ruRU.ACTION_TTS.mockingBlow = "Дразнящий удар" 70 | lazyWarriorLocale.ruRU.ACTION_TTS.shieldBlock = "Блок щитом" 71 | lazyWarriorLocale.ruRU.ACTION_TTS.disarm = "Разоружение" 72 | lazyWarriorLocale.ruRU.ACTION_TTS.cleave = "Рассекающий удар" 73 | lazyWarriorLocale.ruRU.ACTION_TTS.execute = "Казнь" 74 | lazyWarriorLocale.ruRU.ACTION_TTS.deathWish = "Жажда смерти" 75 | lazyWarriorLocale.ruRU.ACTION_TTS.intercept = "Перехват" 76 | lazyWarriorLocale.ruRU.ACTION_TTS.berserkerRage = "Ярость берсерка" 77 | lazyWarriorLocale.ruRU.ACTION_TTS.whirlwind = "Вихрь" 78 | lazyWarriorLocale.ruRU.ACTION_TTS.pummel = "Зуботычина" 79 | lazyWarriorLocale.ruRU.ACTION_TTS.bloodthirst = "Жажда крови" 80 | lazyWarriorLocale.ruRU.ACTION_TTS.piercingHowl = "Пронзительный вой" 81 | lazyWarriorLocale.ruRU.ACTION_TTS.taunt = "Провокация" 82 | lazyWarriorLocale.ruRU.ACTION_TTS.battle = "Боевая стойка" 83 | lazyWarriorLocale.ruRU.ACTION_TTS.defensive = "Оборонительная стойка" 84 | lazyWarriorLocale.ruRU.ACTION_TTS.berserk = "Стойка берсерка" 85 | lazyWarriorLocale.ruRU.ACTION_TTS.lastStand = "Ни шагу назад" 86 | lazyWarriorLocale.ruRU.ACTION_TTS.shieldBash = "Удар щитом" 87 | lazyWarriorLocale.ruRU.ACTION_TTS.mortalStrike = "Смертельный удар" 88 | lazyWarriorLocale.ruRU.ACTION_TTS.shieldSlam = "Мощный удар щитом" 89 | lazyWarriorLocale.ruRU.ACTION_TTS.sweepingStrikes = "Размашистые удары" 90 | lazyWarriorLocale.ruRU.ACTION_TTS.concussionBlow = "Оглушающий удар" 91 | lazyWarriorLocale.ruRU.ACTION_TTS.challengingShout = "Вызывающий крик" 92 | lazyWarriorLocale.ruRU.ACTION_TTS.intimidatingShout = "Устрашающий крик" 93 | lazyWarriorLocale.ruRU.ACTION_TTS.recklessness = "Безрассудство" 94 | lazyWarriorLocale.ruRU.ACTION_TTS.retaliation = "Возмездие" 95 | lazyWarriorLocale.ruRU.ACTION_TTS.shieldWall = "Глухая оборона" 96 | lazyWarriorLocale.ruRU.ACTION_TTS.slam = "Мощный удар" 97 | 98 | -- LazyWarrior.lua 99 | WARRIOR_ADDON_LOADED = " загружен. Работает от " 100 | 101 | -- ParseWarrior.lua 102 | WARRIOR_EARLY_BLOODTHIRST = "Поздно Жажда крови! Добивающий удар!" 103 | WARRIOR_STANCE = "Стойка: " 104 | WARRIOR_NOT_RECOGNISED = " не знакома." 105 | ITEM_SUBTYPE_SHIELDS = "Shields" 106 | 107 | function lazyWarrior.CustomLocaleHelp() return [[

Критерии Воина:

]] end 108 | 109 | elseif (locale == "deDE") then 110 | 111 | lazyWarriorLocale.deDE.ACTION_TTS.overpower = "\195\156berw\195\164ltigen" 112 | lazyWarriorLocale.deDE.ACTION_TTS.shieldBash = "Schildhieb" 113 | 114 | elseif (locale == "frFR") then 115 | 116 | lazyWarriorLocale.frFR.ACTION_TTS.overpower = "Fulgurance" 117 | lazyWarriorLocale.frFR.ACTION_TTS.shieldBash = "Coup de bouclier" 118 | 119 | end 120 | end -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # LazyScript 2 | 3 | Look at [Wiki](https://github.com/laytya/LazyScript/wiki) for more info 4 | --------------------------------------------------------------------------------