From 003f90126dc0d4a42d09353ef6ed19c2592c1f8b Mon Sep 17 00:00:00 2001 From: PhatPhuckDave Date: Fri, 16 May 2025 10:20:19 +0200 Subject: [PATCH] Tumble files around a bit --- AttackSpeedTest.lua | 58 - Complete Projects/Legion/RaiderSA | 1 - Complete Projects/trash/Button | 11 - Complete Projects/trash/Cunting shit 2.lua | 38 - Complete Projects/trash/Cunting shit.lua | 31 - LegionWA/.gitignore | 1 - Metadata for userdata!!.txt | 1 - ModelResearch.lua | 24 - Sort Array.lua | 19 - .../Exports}/BossHpNameplate (WA CODE).txt | 0 .../Exports}/Bulwark of Order (WA CODE).txt | 0 .../Exports}/Dumpy Fuckery(WA CODE).txt | 0 .../Exports}/HoTP Heal bars(WA CODE).txt | 0 .../Exports}/Holy Pala Crap (WA CODE).txt | 2 +- .../Exports}/Hunter Focus (WA CODE).txt | 2 +- .../Exports}/Icey bog(WA CODE).txt | 0 .../Exports}/JulijaButtons(WA CODE).txt | 0 .../Exports}/Necrotic Rot(WA CODE).txt | 0 .../Exports}/Neki Bog(WA CODE).txt | 0 .../Exports}/Prot Pala Crap (WA CODE).txt | 0 .../Prot pala CD popups (WA CODE).txt | 0 .../Exports}/Prot pala CDS (WA CODE).txt | 0 .../Exports}/Prydaz (WA CODE).txt | 2 +- .../Exports}/Prydaz Bars (WA CODE).txt | 0 .../Exports}/Random Number Crap (WA CODE).txt | 0 .../Exports}/Rogue Sniffer 9000(WA CODE).txt | 0 .../Exports}/Trinket procs (WA CODE).txt | 0 .../Legion => WeakAuras/Projects}/ABS.lua | 478 +- .../AUCTION_HOUSE_BROWSE_RESULTS_UPDATED.lua | 36 +- .../Projects}/AHBot/EveryFrameThrottled.lua | 10 +- {NewAge => WeakAuras/Projects}/AHBot/INIT.lua | 34 +- {NewAge => WeakAuras/Projects}/AHBot/Info.txt | 4 +- .../Projects}/Absorbs/color.lua | 6 +- .../Projects}/Absorbs/duration.lua | 6 +- .../Projects}/Absorbs/event.lua | 14 +- .../Projects}/Absorbs/export | 0 .../Projects}/Absorbs/init.lua | 0 .../Projects}/Absorbs/scratch.lua | 56 +- .../Projects}/Absorbs/text.lua | 4 +- .../Projects}/AchievementSniffer/event.lua | 10 +- .../Projects}/AchievementSniffer/event2.lua | 32 +- .../Projects}/AchievementSniffer/event3.lua | 6 +- .../Projects}/AchievementSniffer/event4.lua | 62 +- .../AchievementSniffer/event4_variables.lua | 4 +- .../Projects}/AchievementSniffer/export | 0 .../Projects}/AchievementSniffer/info | 268 +- .../Projects}/AchievementSniffer/init.lua | 446 +- .../Projects}/AchievementSniffer/scratch.lua | 14 +- .../Projects}/Achiv Inspector.lua | 634 +- .../Projects}/Active Seeds.lua | 16 +- .../Projects}/AfkTimer/event.lua | 26 +- .../Projects}/AfkTimer/event2.lua | 30 +- .../Projects}/AfkTimer/event2duration.lua | 4 +- .../Projects}/AfkTimer/export | 0 .../Projects}/AfkTimer/init.lua | 12 +- .../Projects}/AfkTimer/trigger.lua | 4 +- .../Projects}/AntorusQuestlineThing.lua | 610 +- .../Projects}/Atrigan Interrupt/Display.lua | 50 +- .../Projects}/Atrigan Interrupt/INIT.lua | 78 +- .../Projects}/Atrigan Interrupt/Libs.lua | 54 +- .../Projects}/Atrigan Interrupt/Trigger1.lua | 34 +- .../Projects}/Atrigan Interrupt/Trigger2.lua | 78 +- .../Projects}/Atrigan Interrupt/Trigger3.lua | 28 +- .../Projects}/AutoAttackInterval.lua | 110 +- .../AutoLoot/AutoLootDisplay/Event.lua | 14 +- .../AutoLoot/AutoLootDisplay/Init.lua | 92 +- .../Projects}/AutoLoot/Event.lua | 12 +- .../Projects}/AutoLoot/Event2.lua | 12 +- .../Projects}/AutoLoot/Init.lua | 1658 +-- .../Projects}/AutoLoot/export | 0 .../Projects}/AutoQuest/Event.lua | 82 +- .../Projects}/AutoQuest/Export | 0 .../Projects}/AutoVendor/Event.lua | 30 +- .../Projects}/AutoVendor/Export | 0 .../Projects}/AutoVendor/Init.lua | 518 +- .../Projects}/Autoloot.lua | 1396 +- .../Projects}/Automation/Eventz.lua | 408 +- .../Projects}/Automation/INIT.lua | 788 +- .../Projects}/Automation/LOOT_READY.lua | 136 +- .../Projects}/Average Raid Health.lua | 80 +- .../Projects}/BagBoEGlow/Event.lua | 6 +- .../Projects}/BagBoEGlow/Init.lua | 46 +- .../Projects}/BagBoEGlow/README | 34 +- .../Projects}/BattlePassTimer/duration.lua | 4 +- .../Projects}/BattlePassTimer/event.lua | 0 .../Projects}/BattlePassTimer/event2.lua | 6 +- .../Projects}/BattlePassTimer/export | 0 .../Projects}/BattlePassTimer/init.lua | 218 +- .../Projects}/Ben Paralytic.lua | 58 +- {WIP => WeakAuras/Projects}/Block.lua | 78 +- .../Projects}/Boat Fish (Draenor).lua | 34 +- .../BossHpNameplate(VERY INEFFICIENT!!).lua | 550 +- .../Projects}/Bulwark of Order.lua | 134 +- .../Legion => WeakAuras/Projects}/Buttons.lua | 80 +- .../ByExp}/BFA Freakz/Grand Crusader Proc.lua | 30 +- .../Projects/ByExp}/BFA Freakz/RareAlert.lua | 66 +- .../ByExp}/BFA/Adding text to texture.lua | 20 +- .../Projects/ByExp}/BFA/Anna Arrow.lua | 52 +- .../Projects/ByExp}/BFA/Anna Trade.lua | 42 +- .../Projects/ByExp}/BFA/Autoloot.lua | 1062 +- .../ByExp}/BFA/Azerite Power Energize.lua | 52 +- .../Projects/ByExp}/BFA/Block Ratio.lua | 126 +- .../ByExp}/BFA/Block and Absorb Melee.lua | 322 +- .../Projects/ByExp}/BFA/CD.lua | 176 +- .../Projects/ByExp}/BFA/CD2.lua | 98 +- .../Projects/ByExp}/BFA/Chat Macro | 28 +- .../Projects/ByExp}/BFA/Combat.lua | 38 +- .../Projects/ByExp}/BFA/Cooldown Gradient.lua | 52 +- .../ByExp}/BFA/Deepcoral Bud Glow.lua | 32 +- .../Projects/ByExp}/BFA/Dodge Bog.lua | 36 +- .../ByExp}/BFA/Drop Track/BAQS/BAQ farm.lua | 78 +- .../BFA/Drop Track/BAQS/BAQ nameplate.lua | 78 +- .../Follower Garbage/Garbage Nameplate.lua | 100 +- .../Drop Track/Follower Garbage/Garbage.lua | 100 +- .../Drop Track/STONES/Stone nameplates.lua | 158 +- .../ByExp}/BFA/Drop Track/STONES/Stone.lua | 158 +- .../Projects/ByExp}/BFA/Global Debug.lua | 64 +- .../Projects/ByExp}/BFA/Guild Spam.lua | 48 +- .../ByExp}/BFA/Icon Database Update.lua | 74 +- .../Projects/ByExp}/BFA/Ignite.lua | 54 +- .../Projects/ByExp}/BFA/Ignor Pain ALERT.lua | 156 +- .../Projects/ByExp}/BFA/Ignore Pain.lua | 128 +- .../Projects/ByExp}/BFA/Kindling.lua | 46 +- .../Projects/ByExp}/BFA/Loot List.lua | 66 +- .../Projects/ByExp}/BFA/Map.lua | 240 +- .../Projects/ByExp}/BFA/Mob Highlight.lua | 214 +- .../Projects/ByExp}/BFA/Null Barrier.lua | 132 +- .../Projects/ByExp}/BFA/Quest Fuckery.lua | 38 +- .../Projects/ByExp}/BFA/Rare Tracc.lua | 198 +- .../ByExp}/BFA/Reset Custom Variable.lua | 6 +- .../Projects/ByExp}/BFA/SCT ABANDONED.lua | 82 +- .../ByExp}/BFA/Saved/TSU - Combat HP Bars | 0 .../Projects/ByExp}/BFA/Saved/Warrior CDs | 0 .../Projects/ByExp}/BFA/Saved/Warrior Rage | 0 .../Projects/ByExp}/BFA/Second Wind.lua | 42 +- .../Projects/ByExp}/BFA/SetupChat.lua | 262 +- .../Projects/ByExp}/BFA/Shield Block.lua | 218 +- .../Projects/ByExp}/BFA/Slabhide Farm.lua | 106 +- .../Projects/ByExp}/BFA/Stat Recap.lua | 152 +- .../Projects/ByExp}/BFA/Stun Counter.lua | 318 +- .../Projects/ByExp}/BFA/Stun Recap.lua | 272 +- .../ByExp}/BFA/TSU - Combat HP Bars.lua | 210 +- .../ByExp}/BFA/TSU - Enemy Health.lua | 240 +- .../BFA/TSU - Enemy Nameplates Maybe.lua | 114 +- .../Projects/ByExp}/BFA/TSU - Herb Icons.lua | 126 +- .../Projects/ByExp}/BFA/TSU - Loot Window.lua | 740 +- .../Projects/ByExp}/BFA/TSU - Loot.lua | 114 +- .../Projects/ByExp}/BFA/TSU - Spell Alert.lua | 1460 +- .../ByExp}/BFA/Tank Taunt UNTESTED.lua | 136 +- .../ByExp}/BFA/Taunt Cunt UNFINISHED.lua | 64 +- .../Projects/ByExp}/BFA/Taunterino.lua | 124 +- .../Projects/ByExp}/BFA/UnitDebuff.lua | 114 +- .../Projects/ByExp}/BFA/Vaultbot Beep.lua | 64 +- .../CTRL c to copy wowhead link to quest.lua | 120 +- .../Projects/ByExp}/BFA/Whoa/Events.lua | 0 .../BFA/Whoa/Nnoga's Hide Guild Chat.lua | 88 +- .../ByExp}/BFA/Withdraw Guild Bank.lua | 88 +- .../Projects/ByExp}/BFA/__GOOD SHIT | 0 .../ByExp}/Classic/Warrior Heroic Strike.lua | 12 +- .../Projects/ByExp}/Classic/Warrior Rage.lua | 70 +- .../ByExp}/Fivver Stuff/Aura Uptime.lua | 396 +- .../ByExp}/Fivver Stuff/Buff Me Daddy.lua | 252 +- .../FO1B8D1F40B6 - Conductive Ink.lua | 712 +- .../FO1F38C4D1A8 - Magus Portals.lua | 172 +- .../FO2BF89E3995 - Warrior Stuff.lua | 166 +- .../FO2C01B46B55 - Monk Tutor.lua | 160 +- .../FO3BCAB05F84 - Magus Portals.lua | 106 +- .../Fivver Stuff/FO3BE740D804 - BG Q.lua | 22 +- .../FO3BE740D804 - Magus Portals.lua | 552 +- .../FO4DBEE93B84 - Raid Scan Frames.lua | 466 +- .../Fivver Stuff/FO4DBEE93B84 - Raid Scan.lua | 444 +- .../FO5A22680021 - Druid Stuff.lua | 140 +- .../FO815D7649125 - Swing Timer.lua | 208 +- .../FO815F92E76D5 - Combat Timer.lua | 204 +- .../Fivver Stuff/Fiverr - Conductive Ink.lua | 128 +- .../Fivver Stuff/Fiverr - Conductive Ink2.lua | 578 +- .../Fivver - DK Festering Wounds.lua | 150 +- .../Fivver Stuff/Fivver Druid Stuff.lua | 236 +- .../Fivver Stuff/Fivver Loot Logging.lua | 404 +- .../ByExp}/Fivver Stuff/RaidTranqShot.lua | 96 +- .../GeneralStuff.txt | 0 .../Instructions.txt | 78 +- .../Other stuff.lua | 132 +- .../Spellbook Cooldowns.lua | 84 +- .../Spellbook Scan.lua | 172 +- .../SpellbookCooldowns.txt | 0 .../Talent Cooldowns.lua | 60 +- .../Talent Scan.lua | 32 +- .../TalentCooldowns.txt | 0 .../Projects}/CDs/Color.lua | 38 +- .../Projects}/CDs/Event.lua | 6 +- {LegionWA => WeakAuras/Projects}/CDs/Init.lua | 188 +- .../Projects}/CLEUSaver/event.lua | 14 +- .../Projects}/CLEUSaver/export | 0 .../Projects}/CLEUSaver/init.lua | 44 +- .../Projects}/CachedNPCLevels.lua | 0 .../Projects}/CataAuraBar/CustomOptions.lua | 38 +- .../Projects}/CataAuraBar/CustomText.lua | 20 +- .../Projects}/CataAuraBar/Export | 0 .../Projects}/CataAuraBar/INIT.lua | 588 +- .../Projects}/CataAuraBar/INIT_BFA.lua | 608 +- .../Projects}/CataAuraBar/README.md | 20 +- .../Projects}/CataAuraBar/TSU.lua | 22 +- .../Projects}/Celestial Map.lua | 66 +- .../Projects}/ChannelDinger/event.lua | 40 +- .../Projects}/ChannelDinger/export | 0 .../Projects}/ChannelDinger/init.lua | 56 +- .../Projects}/ChannelJoiner/event.lua | 8 +- .../Projects}/ChannelJoiner/export | 0 .../Projects}/ChannelJoiner/init.lua | 242 +- .../Legion => WeakAuras/Projects}/Chat !.lua | 88 +- .../Legion => WeakAuras/Projects}/Chat.lua | 94 +- .../Projects}/ChatFilter.lua | 284 +- .../Projects}/ChatKeyScanner/event.lua | 0 .../Projects}/ChatKeyScanner/export | 0 .../Projects}/ChatKeyScanner/init.lua | 0 .../Projects}/ClassMissChance.lua | 190 +- .../Projects}/CombatLogFindClass.lua | 210 +- .../Projects}/CombopointFlasher/display.lua | 4 +- .../Projects}/CombopointFlasher/event.lua | 16 +- .../Projects}/CombopointFlasher/export | 0 .../Projects}/Concordance.lua | 18 +- .../Projects}/CooldownAlert/Event.lua | 8 +- .../Projects}/CooldownAlert/Export | 0 .../Projects}/CooldownAlert/Init.lua | 144 +- .../Projects}/CooldownAnnouncer.lua | 232 +- .../Projects}/Cross Char Quota.lua | 130 +- .../Projects}/DAI KEY 2.lua | 88 +- .../Legion => WeakAuras/Projects}/DAI KEY.lua | 158 +- .../Projects}/DHRogueSniffer/sniffer.lua | 0 .../Projects}/DK Bone Shield Stacks.lua | 50 +- .../Legion => WeakAuras/Projects}/DPS HPS.lua | 102 +- .../Projects}/DamageIntake/export | 0 .../Projects}/DamageIntake/init.lua | 0 .../Projects}/DamageIntake/trigger.lua | 0 .../Projects}/DamageIntake/vars.lua | 0 .../Projects}/Dangerous Spells!.lua | 36 +- .../Projects}/Dargul Timer(UNTESTED).lua | 24 +- .../Projects}/DavyStone.lua | 152 +- .../Projects}/DavyStone2.lua | 822 +- .../Projects}/DeathTrack.lua | 126 +- .../Projects}/DebuffAlert/Event.lua | 54 +- .../Projects}/Delete Items.lua | 28 +- .../Projects}/DickRiderCounter.lua | 60 +- .../Projects}/Divine Purpose Procs.lua | 66 +- .../Projects}/DruidEnergyBar/Export | 0 .../Legion => WeakAuras/Projects}/Drums.lua | 54 +- .../Projects}/DuelerAccepter/event.lua | 0 .../Projects}/DuelerAccepter/init.lua | 0 .../Legion => WeakAuras/Projects}/EHP.lua | 1388 +- .../Projects}/Easter Achiv Bullshit.lua | 108 +- .../Projects}/ElwynnForestSpam.lua | 232 +- .../Projects}/Emote on Friendlies.lua | 262 +- .../Projects}/Emotebot.lua | 90 +- .../Projects}/EquipmentManager/INIT.lua | 204 +- .../Projects}/Fevered Carapace.lua | 56 +- .../Legion => WeakAuras/Projects}/Fish.lua | 16 +- .../Projects}/Focus Thing.lua | 58 +- .../Projects}/FriendTracker/event.lua | 6 +- .../Projects}/FriendTracker/event2.lua | 6 +- .../Projects}/FriendTracker/export | 0 .../Projects}/FriendTracker/init.lua | 36 +- .../Projects}/Friendlist.lua | 58 +- .../Projects}/Full House.lua | 20 +- .../Projects}/GMCommandsResearch(.add).lua | 130 +- .../Legion => WeakAuras/Projects}/GPS.lua | 46 +- .../Projects}/GUIDSniffer.lua | 10002 +++++++------- .../Projects}/Glowing Raid Frames.lua | 296 +- .../Projects}/Group Breakdown.lua | 152 +- .../Projects}/GuildRecap.lua | 76 +- .../Projects}/GuildWave.lua | 48 +- .../Projects}/Hammers n Shields.lua | 44 +- .../Projects}/HealerDispels.lua | 150 +- .../Projects}/HealerRaidDanger/color.lua | 10 +- .../Projects}/HealerRaidDanger/init.lua | 54 +- .../Projects}/HealerRaidDanger/tsu.lua | 42 +- .../Projects}/Herb Counter 2.0.lua | 68 +- .../Projects}/Herb Counter.lua | 72 +- .../Projects}/Herb Quota.lua | 126 +- .../Projects}/Herb Sniffer/0.5/Direction.lua | 128 +- .../Projects}/Herb Sniffer/0.5/Distance.lua | 26 +- .../Herb Sniffer/0.5/Herb Arrays Legion.lua | 10986 ++++++++-------- .../Projects}/Herb Sniffer/2.0/Direction.lua | 2672 ++-- .../Projects}/Herb Sniffer/Direction.lua | 134 +- .../Projects}/Herb Sniffer/Distance.lua | 28 +- .../Herb Sniffer/Herb Arrays Legion.lua | 170 +- .../Herb Sniffer/Herb Arrays/All Ores.lua | 4382 +++--- .../Herb Sniffer/Herb Arrays/ArgusWeed.lua | 154 +- .../Herb Arrays/Herbalism/Aethril.lua | 1562 +-- .../Herb Arrays/Herbalism/Azshara's Veil.lua | 872 +- .../Herb Arrays/Herbalism/Cinderbloom.lua | 762 +- .../Herb Arrays/Herbalism/Dreamleaf.lua | 2062 +-- .../Herb Arrays/Herbalism/Fel Herbs.lua | 542 +- .../Herb Arrays/Herbalism/Fjarnskaggl.lua | 2062 +-- .../Herb Arrays/Herbalism/Foxflower.lua | 2064 +-- .../Herbalism/Icecap And Silversage.lua | 1432 +- .../Herb Arrays/Herbalism/Icecap.lua | 902 +- .../Herb Arrays/Herbalism/Roses.lua | 2062 +-- .../Herb Arrays/Herbalism/Silversage.lua | 592 +- .../Mining/Cobalt - Dragonblight.lua | 552 +- .../Mining/Cobalt - Howling Fjord.lua | 1052 +- .../Mining/Cobalt - Rich - Zul'Drak.lua | 372 +- .../Herb Arrays/Mining/Cobalt - Zul'Drak.lua | 862 +- .../Felslate/Felslate Seam(Highmountain).lua | 932 +- .../Felslate/Felslate Seam(Suramar).lua | 932 +- .../Mining/Felslate/Felslate Total.lua | 1732 +-- .../Herb Arrays/Mining/Felslate/Felslate.lua | 862 +- .../Mining/Leystone/Leystone Deposit.lua | 712 +- .../Mining/Leystone/Leystone Total.lua | 3112 ++--- .../Mining/Leystone/Rich Leystone Deposit.lua | 2062 +-- .../Herb Arrays/Mining/Titanium.lua | 762 +- .../Herb Arrays/Misc/Anna dogs.lua | 732 +- .../Herb Arrays/Noblegarden/Durotar.lua | 262 +- .../Noblegarden/Eversong Woods.lua | 262 +- .../Herb Arrays/Noblegarden/Mulgore.lua | 262 +- .../Noblegarden/Tirisfal Glades.lua | 262 +- .../Herb Arrays/Noblegarden/Waypoints | 332 +- .../Herb Arrays/Skinning/Some apes.lua | 472 +- .../Projects}/Herb Sniffer/Herb Arrays/Thing | 8 +- .../Projects}/Highfathers.lua | 76 +- .../Projects}/HoTP heal bars/1.0/HP1.lua | 94 +- .../Projects}/HoTP heal bars/1.0/HP2.lua | 152 +- .../Projects}/HoTP heal bars/2.0/HP1 2.0.lua | 156 +- .../Projects}/HoTP heal bars/2.0/HP2 2.0.lua | 136 +- .../Projects}/HoTP heal bars/3.0/AAAAAA.txt | 8 +- .../Projects}/HoTP heal bars/3.0/HP1 3.0.lua | 154 +- .../Projects}/HoTP heal bars/3.0/HP2 3.0.lua | 20 +- .../Projects}/Holy Shield.lua | 152 +- .../Legion => WeakAuras/Projects}/HowDead.lua | 142 +- {WIP => WeakAuras/Projects}/Hydra Shot 2.lua | 138 +- {WIP => WeakAuras/Projects}/Hydra Shot.lua | 100 +- {WIP => WeakAuras/Projects}/Icey AP/C AP.lua | 8 +- .../Projects}/Icey AP/Cast AP.lua | 52 +- .../Projects}/Icey AP/Pred AP.lua | 8 +- .../Projects}/Ignore Alliance.lua | 16 +- .../Projects}/Ilterendi Uptime.lua | 40 +- .../Projects}/Incoming/export | 0 .../Projects}/Incoming/sct | 0 .../Legion => WeakAuras/Projects}/Init.lua | 8 +- .../Projects}/Innervate on Whisper.lua | 134 +- .../Projects}/InspectIlvl.lua | 40 +- .../Legion => WeakAuras/Projects}/Ironfur.lua | 88 +- .../Projects}/JanaPullTimer.lua | 92 +- ...gment of Light DebuffConsumedPerSecond.lua | 104 +- .../Projects}/Judgment of Light.lua | 80 +- .../Projects}/Judgment of Light/AP.lua | 32 +- .../Judgment of Light/Background.lua | 48 +- .../Projects}/Judgment of Light/CODE.txt | 0 .../Judgment of Light/Current AP.lua | 48 +- .../Legion => WeakAuras/Projects}/Juked.lua | 258 +- .../Legion => WeakAuras/Projects}/KeyGlow.lua | 84 +- .../Projects}/Kill - Wipe counter.lua | 64 +- .../Legion => WeakAuras/Projects}/KoSList.lua | 66 +- .../Projects}/Last n Melee.lua | 186 +- .../Projects}/Last n Spells.lua | 184 +- .../Projects}/Last n spells cast.lua | 58 +- .../Projects}/Leggo Sniffer.lua | 64 +- .../Projects}/List the bois.lua | 192 +- .../Projects}/Loot Filter.lua | 706 +- .../Projects}/Maiden Color Assignment.lua | 152 +- .../Projects}/Members Alive.lua | 72 +- .../Projects}/Misdirect God.lua | 84 +- .../Projects}/Misdirect.lua | 96 +- .../Projects}/Mistress Fuckery.lua | 156 +- .../Projects}/Mitigation.lua | 366 +- .../Projects}/Mob Kill Counter.lua | 32 +- .../Projects}/Nameplate HP Sort.lua | 86 +- .../Projects}/NameplateAchivTest.lua | 10 +- .../Projects}/NameplateInfo/Hostility.lua | 0 .../Projects}/NearbyPlayers/Event.lua | 12 +- .../Projects}/NearbyPlayers/Init.lua | 166 +- .../Projects}/Necrotic Rot.lua | 136 +- .../Projects}/Nightwell Energy/Background.lua | 48 +- .../Projects}/Nightwell Energy/CODE.txt | 0 .../Projects}/Nightwell Energy/Shield.lua | 60 +- .../Projects}/Nightwell Energy/Stacks.lua | 32 +- .../Projects}/Nightwell Energy/Text.lua | 76 +- .../Projects}/Nightwell Energy/Todo | 4 +- .../Projects}/NullBarrier/CLEU1.lua | 18 +- .../Projects}/NullBarrier/CLEU2.lua | 18 +- .../Projects}/NullBarrier/CustomDuration1.lua | 4 +- .../Projects}/NullBarrier/CustomDuration2.lua | 4 +- .../Projects}/NullBarrier/Export | 0 .../Projects}/NullBarrier/INIT1.lua | 78 +- .../Projects}/NullBarrier/INIT2.lua | 8 +- .../Projects}/NullBarrier/Text1.lua | 4 +- .../Projects}/OneSecondTicker.lua | 12 +- .../Projects}/OreCamper/event.lua | 46 +- .../Projects}/OreCamper/event2.lua | 70 +- .../Projects}/OreCamper/export | 2 +- .../Projects}/OreCamper/init.lua | 10 +- .../Projects}/OverallAbsorbs/Export.txt | 0 .../Projects}/OverallAbsorbs/INIT.lua | 86 +- .../Legion => WeakAuras/Projects}/PPM.lua | 122 +- .../Projects}/PersonalAnnouncer/event.lua | 24 +- .../Projects}/PersonalAnnouncer/export | 0 .../Projects}/PersonalAnnouncer/init.lua | 374 +- .../Projects}/Premade Automation.lua | 30 +- .../Projects}/Premade Groups.lua | 124 +- .../Projects}/PrimaryStatBar/CLEU.lua | 12 +- .../PrimaryStatBar/CustomDuration.lua | 4 +- .../Projects}/PrimaryStatBar/Export.txt | 0 .../Projects}/PrimaryStatBar/INIT.lua | 34 +- .../Legion => WeakAuras/Projects}/Prydaz.lua | 102 +- .../Projects}/PrydazBar/event.lua | 54 +- .../Projects}/PrydazBar/export | 0 .../Projects}/PrydazOLD.lua | 40 +- .../Projects}/PrydazTimer.lua | 58 +- .../Projects}/PullTimer.lua | 90 +- .../Projects}/QuestSyncer.lua | 800 +- .../Projects}/RIOChecker/display.lua | 4 +- .../Projects}/RIOChecker/event.lua | 78 +- .../Projects}/RIOChecker/event2.lua | 28 +- .../Projects}/RIOChecker/export | 0 .../Projects}/RIOChecker/init.lua | 438 +- .../Projects}/Raid Frame Glow.lua | 346 +- .../Projects}/Raid Rolls.lua | 62 +- .../Projects}/Raid loot DOESNT WORK.lua | 118 +- .../Legion => WeakAuras/Projects}/RaidCDs.lua | 298 +- .../Projects}/RaidCooldownAlert.lua | 34 +- WeakAuras/Projects/RaiderSA/.gitignore | 2 + .../Projects/RaiderSA/buildscript/main.js | 110 + .../RaiderSA/buildscript/package.json | 12 + .../RaiderSA/buildscript/words2luaArr.js | 27 + WeakAuras/Projects/RaiderSA/deploy.sh | 4 + WeakAuras/Projects/RaiderSA/info.txt | 29 + WeakAuras/Projects/RaiderSA/luaarr.lua | 915 ++ .../RaiderSA/out/animegirl/Annihilation.ogg | 3 + .../RaiderSA/out/animegirl/Arcane Blitz.ogg | 3 + .../RaiderSA/out/animegirl/Arcane Slicer.ogg | 3 + .../RaiderSA/out/animegirl/Arcing Bolt.ogg | 3 + .../RaiderSA/out/animegirl/Arrow Barrage.ogg | 3 + .../RaiderSA/out/animegirl/Bellowing Roar.ogg | 3 + .../RaiderSA/out/animegirl/Bile Breath.ogg | 3 + .../RaiderSA/out/animegirl/Blinding Glare.ogg | 3 + .../out/animegirl/Bone Chilling Scream.ogg | 3 + .../out/animegirl/Bonebreaking Strike.ogg | 3 + .../Projects/RaiderSA/out/animegirl/Bound.ogg | 3 + .../out/animegirl/Brackwater Barrage.ogg | 3 + .../out/animegirl/Breath of Corruption.ogg | 3 + .../RaiderSA/out/animegirl/Brutal Assault.ogg | 3 + .../out/animegirl/Brutal Haymaker.ogg | 3 + .../RaiderSA/out/animegirl/Burning Blast.ogg | 3 + .../out/animegirl/Burning Leg Sweep.ogg | 3 + .../RaiderSA/out/animegirl/Carnage.ogg | 3 + .../out/animegirl/Ceaseless Winter.ogg | 3 + .../RaiderSA/out/animegirl/Celerity Zone.ogg | 3 + .../RaiderSA/out/animegirl/Chaotic Energy.ogg | 3 + .../out/animegirl/Chaotic Shadows.ogg | 3 + .../out/animegirl/Chaotic Tempest.ogg | 3 + .../RaiderSA/out/animegirl/Charged Blasts.ogg | 3 + .../RaiderSA/out/animegirl/Charged Smash.ogg | 3 + .../out/animegirl/Charging Station.ogg | 3 + .../RaiderSA/out/animegirl/Chilled Blood.ogg | 3 + .../RaiderSA/out/animegirl/Claw Frenzy.ogg | 3 + .../out/animegirl/Collapsing World.ogg | 3 + .../RaiderSA/out/animegirl/Cone of Death.ogg | 3 + .../RaiderSA/out/animegirl/Consume Magic.ogg | 3 + .../out/animegirl/Consuming Sphere.ogg | 3 + .../RaiderSA/out/animegirl/Cosmic Scythe.ogg | 3 + .../RaiderSA/out/animegirl/Dark Mending.ogg | 3 + .../out/animegirl/Deafening Screech.ogg | 3 + .../out/animegirl/Debilitating Shout.ogg | 3 + .../RaiderSA/out/animegirl/Decimation.ogg | 3 + .../RaiderSA/out/animegirl/Demolish.ogg | 3 + .../out/animegirl/Demonic Ascension.ogg | 3 + .../out/animegirl/Demonic Mending.ogg | 3 + .../out/animegirl/Demonic Upheaval.ogg | 3 + .../out/animegirl/Demoralizing Shout.ogg | 3 + .../RaiderSA/out/animegirl/Desolate Gaze.ogg | 3 + .../out/animegirl/Detonating Moonglaive.ogg | 3 + .../RaiderSA/out/animegirl/Diabolic Bomb.ogg | 3 + .../RaiderSA/out/animegirl/Dinner Bell.ogg | 3 + .../RaiderSA/out/animegirl/Disintegrate.ogg | 3 + .../out/animegirl/Disintegration Beam.ogg | 3 + .../RaiderSA/out/animegirl/Drain Magic.ogg | 3 + .../Projects/RaiderSA/out/animegirl/Drain.ogg | 3 + .../RaiderSA/out/animegirl/Dread Inferno.ogg | 3 + .../RaiderSA/out/animegirl/Echoes of Doom.ogg | 3 + .../out/animegirl/Empowered Flame Rend.ogg | 3 + .../out/animegirl/Empowered Flare.ogg | 3 + .../out/animegirl/Empowered Pulse Grenade.ogg | 3 + .../out/animegirl/Empowered Shock Lance.ogg | 3 + .../animegirl/Empowered Shrapnel Blast.ogg | 3 + .../out/animegirl/Enflame Corruption.ogg | 3 + .../RaiderSA/out/animegirl/Entropic Mine.ogg | 3 + .../RaiderSA/out/animegirl/Eradication.ogg | 3 + .../RaiderSA/out/animegirl/Evocation.ogg | 3 + .../RaiderSA/out/animegirl/Expel Light.ogg | 3 + .../RaiderSA/out/animegirl/Eye Storm.ogg | 3 + .../out/animegirl/Eye of the Storm.ogg | 3 + .../out/animegirl/Feed on the Weak.ogg | 3 + .../out/animegirl/Fel Bombardment.ogg | 3 + .../RaiderSA/out/animegirl/Fel Breath.ogg | 3 + .../RaiderSA/out/animegirl/Fel Detonation.ogg | 3 + .../RaiderSA/out/animegirl/Fel Fireball.ogg | 3 + .../RaiderSA/out/animegirl/Fel Mortar.ogg | 3 + .../RaiderSA/out/animegirl/Felblaze Orb.ogg | 3 + .../RaiderSA/out/animegirl/Felsoul Cleave.ogg | 3 + .../RaiderSA/out/animegirl/Fiery Strike.ogg | 3 + .../RaiderSA/out/animegirl/Flame Rend.ogg | 3 + .../RaiderSA/out/animegirl/Flame Wreath.ogg | 3 + .../Projects/RaiderSA/out/animegirl/Flare.ogg | 3 + .../RaiderSA/out/animegirl/Flashlight.ogg | 3 + .../out/animegirl/Floral Fulmination.ogg | 3 + .../out/animegirl/Focused Lightning.ogg | 3 + .../RaiderSA/out/animegirl/Foe Braker.ogg | 3 + .../RaiderSA/out/animegirl/Forging Strike.ogg | 3 + .../RaiderSA/out/animegirl/Fragment.ogg | 3 + .../RaiderSA/out/animegirl/Frostbite.ogg | 3 + .../RaiderSA/out/animegirl/Hateful Gaze.ogg | 3 + .../RaiderSA/out/animegirl/Hatred.ogg | 3 + .../RaiderSA/out/animegirl/Healing Touch.ogg | 3 + .../RaiderSA/out/animegirl/Heat Wave.ogg | 3 + .../RaiderSA/out/animegirl/Hinder.ogg | 3 + .../RaiderSA/out/animegirl/Holy Radiance.ogg | 3 + .../RaiderSA/out/animegirl/Horn of Valor.ogg | 3 + .../RaiderSA/out/animegirl/Inferno Bolt.ogg | 3 + .../out/animegirl/Intangible Presence.ogg | 3 + .../RaiderSA/out/animegirl/Iron Whirlwind.ogg | 3 + .../RaiderSA/out/animegirl/Kara Kazham.ogg | 3 + .../RaiderSA/out/animegirl/Knife Dance.ogg | 3 + .../RaiderSA/out/animegirl/Landslide.ogg | 3 + .../out/animegirl/Lantern of Darkness.ogg | 3 + .../RaiderSA/out/animegirl/Lava Wreath.ogg | 3 + .../RaiderSA/out/animegirl/Leech Life.ogg | 3 + .../RaiderSA/out/animegirl/Lifebloom.ogg | 3 + .../out/animegirl/Lightning Breath.ogg | 3 + .../RaiderSA/out/animegirl/Lingering Gaze.ogg | 3 + .../RaiderSA/out/animegirl/Maddening Roar.ogg | 3 + .../out/animegirl/Magic Magnificent.ogg | 3 + .../RaiderSA/out/animegirl/Mana Fang.ogg | 3 + .../RaiderSA/out/animegirl/Marked Prey.ogg | 3 + .../out/animegirl/Mass Repentance.ogg | 3 + .../RaiderSA/out/animegirl/Meteor.ogg | 3 + .../RaiderSA/out/animegirl/Mighty Slam.ogg | 3 + .../RaiderSA/out/animegirl/Misery.ogg | 3 + .../RaiderSA/out/animegirl/Molten Crash.ogg | 3 + .../RaiderSA/out/animegirl/Molten Touch.ogg | 3 + .../RaiderSA/out/animegirl/Mortal Strike.ogg | 3 + .../out/animegirl/Necrotic Embrace.ogg | 3 + .../RaiderSA/out/animegirl/Nether Venom.ogg | 3 + .../RaiderSA/out/animegirl/Nightmares.ogg | 3 + .../RaiderSA/out/animegirl/Nullification.ogg | 3 + .../out/animegirl/Overcharge Mana.ogg | 3 + .../out/animegirl/Penetrating Shot.ogg | 3 + .../RaiderSA/out/animegirl/Phase Breach.ogg | 3 + .../RaiderSA/out/animegirl/Piercing Gale.ogg | 3 + .../out/animegirl/Piercing Missiles.ogg | 3 + .../out/animegirl/Piercing Shards.ogg | 3 + .../RaiderSA/out/animegirl/Polymorh Fish.ogg | 3 + .../out/animegirl/Prophecies of Doom.ogg | 3 + .../RaiderSA/out/animegirl/Pulse Grenade.ogg | 3 + .../RaiderSA/out/animegirl/Quarantine.ogg | 3 + .../out/animegirl/Quelling Strike.ogg | 3 + .../out/animegirl/Radiant Tempest.ogg | 3 + .../RaiderSA/out/animegirl/Ragnarok.ogg | 3 + .../RaiderSA/out/animegirl/Rampage.ogg | 3 + .../RaiderSA/out/animegirl/Rapid Rupture.ogg | 3 + .../RaiderSA/out/animegirl/Ravenous Blaze.ogg | 3 + .../RaiderSA/out/animegirl/Razor Shards.ogg | 3 + .../RaiderSA/out/animegirl/Reality Tear.ogg | 3 + .../RaiderSA/out/animegirl/Reap Soul.ogg | 3 + .../out/animegirl/Rejuvenating Waters.ogg | 3 + .../RaiderSA/out/animegirl/Rejuvenation.ogg | 3 + .../out/animegirl/Reverberating Strike.ogg | 3 + .../RaiderSA/out/animegirl/Roiling Storm.ogg | 3 + .../RaiderSA/out/animegirl/Ruiner.ogg | 3 + .../out/animegirl/Rune of Healing.ogg | 3 + .../RaiderSA/out/animegirl/Runic Band.ogg | 3 + .../RaiderSA/out/animegirl/Sacred Ground.ogg | 3 + .../RaiderSA/out/animegirl/Sacrifice Soul.ogg | 3 + .../RaiderSA/out/animegirl/Sanctify.ogg | 3 + .../RaiderSA/out/animegirl/Sandstorm.ogg | 3 + .../RaiderSA/out/animegirl/Scornful Gaze.ogg | 3 + .../out/animegirl/Screams of the Dead.ogg | 3 + .../RaiderSA/out/animegirl/Sea Legs.ogg | 3 + .../RaiderSA/out/animegirl/Seal Magic.ogg | 3 + .../Projects/RaiderSA/out/animegirl/Sever.ogg | 3 + .../RaiderSA/out/animegirl/Severe Dusting.ogg | 3 + .../out/animegirl/Shackles of Servitude.ogg | 3 + .../RaiderSA/out/animegirl/Shadow Blades.ogg | 3 + .../out/animegirl/Shadow Bolt Volley.ogg | 3 + .../RaiderSA/out/animegirl/Shadow Crash.ogg | 3 + .../out/animegirl/Shadow Rejuvenation.ogg | 3 + .../RaiderSA/out/animegirl/Shadow Strike.ogg | 3 + .../RaiderSA/out/animegirl/Shadow Sweep.ogg | 3 + .../RaiderSA/out/animegirl/Shadow Wall.ogg | 3 + .../out/animegirl/Shared Suffering.ogg | 3 + .../out/animegirl/Shield of Light.ogg | 3 + .../RaiderSA/out/animegirl/Shivan Pact.ogg | 3 + .../RaiderSA/out/animegirl/Shock Lance.ogg | 3 + .../RaiderSA/out/animegirl/Shockwave.ogg | 3 + .../out/animegirl/Siphon Corruption.ogg | 3 + .../out/animegirl/Six Pound Barrel.ogg | 3 + .../RaiderSA/out/animegirl/Sleep Canister.ogg | 3 + .../out/animegirl/Slicing Maelstrom.ogg | 3 + .../RaiderSA/out/animegirl/Soul Echoes.ogg | 3 + .../RaiderSA/out/animegirl/Soulblight.ogg | 3 + .../RaiderSA/out/animegirl/Soulbomb.ogg | 3 + .../RaiderSA/out/animegirl/Sound Alarm.ogg | 3 + .../RaiderSA/out/animegirl/Spear of Light.ogg | 3 + .../RaiderSA/out/animegirl/Spiked Tongue.ogg | 3 + .../RaiderSA/out/animegirl/Spray Sand.ogg | 3 + .../RaiderSA/out/animegirl/Stasis Trap.ogg | 3 + .../RaiderSA/out/animegirl/Static Nova.ogg | 3 + .../RaiderSA/out/animegirl/Stone Gaze.ogg | 3 + .../RaiderSA/out/animegirl/Streetsweeper.ogg | 3 + .../RaiderSA/out/animegirl/Strike Down.ogg | 3 + .../RaiderSA/out/animegirl/Sultry Heat.ogg | 3 + .../out/animegirl/Summon Reinforcements.ogg | 3 + .../out/animegirl/Summon Volatile Energy.ogg | 3 + .../RaiderSA/out/animegirl/Sunder.ogg | 3 + .../Projects/RaiderSA/out/animegirl/Surge.ogg | 3 + .../out/animegirl/Swirling Scythe.ogg | 3 + .../RaiderSA/out/animegirl/Tangled Web.ogg | 3 + .../RaiderSA/out/animegirl/Teleport.ogg | 3 + .../out/animegirl/Thundering Stomp.ogg | 3 + .../RaiderSA/out/animegirl/Thunderstrike.ogg | 3 + .../RaiderSA/out/animegirl/Torrent.ogg | 3 + .../RaiderSA/out/animegirl/Tortured Rage.ogg | 3 + .../RaiderSA/out/animegirl/Turn Kick.ogg | 3 + .../RaiderSA/out/animegirl/Unleash Fury.ogg | 3 + .../out/animegirl/Unnerving Screech.ogg | 3 + .../RaiderSA/out/animegirl/Unruly Yell.ogg | 3 + .../RaiderSA/out/animegirl/Unstable Mana.ogg | 3 + .../RaiderSA/out/animegirl/Vengeful Shear.ogg | 3 + .../RaiderSA/out/animegirl/Venom Storm.ogg | 3 + .../RaiderSA/out/animegirl/Vile Roots.ogg | 3 + .../RaiderSA/out/animegirl/Wake of Flame.ogg | 3 + .../RaiderSA/out/animegirl/Whirling Edge.ogg | 3 + .../RaiderSA/out/animegirl/Whirling Saber.ogg | 3 + .../RaiderSA/out/animegirl/Wicked Dagger.ogg | 3 + .../RaiderSA/out/animegirl/Wicked Slam.ogg | 3 + .../RaiderSA/out/animegirl/Will Breaker.ogg | 3 + .../out/genericfemale/Annihilation.ogg | 3 + .../out/genericfemale/Arcane Blitz.ogg | 3 + .../out/genericfemale/Arcane Slicer.ogg | 3 + .../out/genericfemale/Arcing Bolt.ogg | 3 + .../out/genericfemale/Arrow Barrage.ogg | 3 + .../out/genericfemale/Bellowing Roar.ogg | 3 + .../out/genericfemale/Bile Breath.ogg | 3 + .../out/genericfemale/Blinding Glare.ogg | 3 + .../genericfemale/Bone Chilling Scream.ogg | 3 + .../out/genericfemale/Bonebreaking Strike.ogg | 3 + .../RaiderSA/out/genericfemale/Bound.ogg | 3 + .../out/genericfemale/Brackwater Barrage.ogg | 3 + .../genericfemale/Breath of Corruption.ogg | 3 + .../out/genericfemale/Brutal Assault.ogg | 3 + .../out/genericfemale/Brutal Haymaker.ogg | 3 + .../out/genericfemale/Burning Blast.ogg | 3 + .../out/genericfemale/Burning Leg Sweep.ogg | 3 + .../RaiderSA/out/genericfemale/Carnage.ogg | 3 + .../out/genericfemale/Ceaseless Winter.ogg | 3 + .../out/genericfemale/Celerity Zone.ogg | 3 + .../out/genericfemale/Chaotic Energy.ogg | 3 + .../out/genericfemale/Chaotic Shadows.ogg | 3 + .../out/genericfemale/Chaotic Tempest.ogg | 3 + .../out/genericfemale/Charged Blasts.ogg | 3 + .../out/genericfemale/Charged Smash.ogg | 3 + .../out/genericfemale/Charging Station.ogg | 3 + .../out/genericfemale/Chilled Blood.ogg | 3 + .../out/genericfemale/Claw Frenzy.ogg | 3 + .../out/genericfemale/Collapsing World.ogg | 3 + .../out/genericfemale/Cone of Death.ogg | 3 + .../out/genericfemale/Consume Magic.ogg | 3 + .../out/genericfemale/Consuming Sphere.ogg | 3 + .../out/genericfemale/Cosmic Scythe.ogg | 3 + .../out/genericfemale/Dark Fissure.ogg | 3 + .../out/genericfemale/Dark Mending.ogg | 3 + .../out/genericfemale/Deafening Screech.ogg | 3 + .../out/genericfemale/Debilitating Shout.ogg | 3 + .../RaiderSA/out/genericfemale/Decimation.ogg | 3 + .../RaiderSA/out/genericfemale/Demolish.ogg | 3 + .../out/genericfemale/Demonic Ascension.ogg | 3 + .../out/genericfemale/Demonic Mending.ogg | 3 + .../out/genericfemale/Demonic Upheaval.ogg | 3 + .../out/genericfemale/Demoralizing Shout.ogg | 3 + .../out/genericfemale/Desolate Gaze.ogg | 3 + .../genericfemale/Detonating Moonglaive.ogg | 3 + .../out/genericfemale/Diabolic Bomb.ogg | 3 + .../out/genericfemale/Dinner Bell.ogg | 3 + .../out/genericfemale/Disintegrate.ogg | 3 + .../out/genericfemale/Disintegration Beam.ogg | 3 + .../out/genericfemale/Drain Magic.ogg | 3 + .../RaiderSA/out/genericfemale/Drain.ogg | 3 + .../out/genericfemale/Dread Inferno.ogg | 3 + .../out/genericfemale/Echoes of Doom.ogg | 3 + .../genericfemale/Empowered Flame Rend.ogg | 3 + .../out/genericfemale/Empowered Flare.ogg | 3 + .../genericfemale/Empowered Pulse Grenade.ogg | 3 + .../genericfemale/Empowered Shock Lance.ogg | 3 + .../Empowered Shrapnel Blast.ogg | 3 + .../out/genericfemale/Enflame Corruption.ogg | 3 + .../out/genericfemale/Entropic Mine.ogg | 3 + .../out/genericfemale/Eradication.ogg | 3 + .../RaiderSA/out/genericfemale/Evocation.ogg | 3 + .../out/genericfemale/Expel Light.ogg | 3 + .../RaiderSA/out/genericfemale/Eye Storm.ogg | 3 + .../out/genericfemale/Eye of the Storm.ogg | 3 + .../out/genericfemale/Feed on the Weak.ogg | 3 + .../out/genericfemale/Fel Bombardment.ogg | 3 + .../RaiderSA/out/genericfemale/Fel Breath.ogg | 3 + .../out/genericfemale/Fel Detonation.ogg | 3 + .../out/genericfemale/Fel Fireball.ogg | 3 + .../RaiderSA/out/genericfemale/Fel Mortar.ogg | 3 + .../out/genericfemale/Felblaze Orb.ogg | 3 + .../out/genericfemale/Felsoul Cleave.ogg | 3 + .../out/genericfemale/Felstorm Barrage.ogg | 3 + .../out/genericfemale/Fiery Strike.ogg | 3 + .../RaiderSA/out/genericfemale/Flame Rend.ogg | 3 + .../out/genericfemale/Flame Wreath.ogg | 3 + .../RaiderSA/out/genericfemale/Flare.ogg | 3 + .../RaiderSA/out/genericfemale/Flashlight.ogg | 3 + .../out/genericfemale/Floral Fulmination.ogg | 3 + .../out/genericfemale/Focused Lightning.ogg | 3 + .../RaiderSA/out/genericfemale/Foe Braker.ogg | 3 + .../out/genericfemale/Forging Strike.ogg | 3 + .../RaiderSA/out/genericfemale/Fragment.ogg | 3 + .../RaiderSA/out/genericfemale/Frostbite.ogg | 3 + .../out/genericfemale/Hateful Gaze.ogg | 3 + .../RaiderSA/out/genericfemale/Hatred.ogg | 3 + .../out/genericfemale/Healing Touch.ogg | 3 + .../RaiderSA/out/genericfemale/Heat Wave.ogg | 3 + .../RaiderSA/out/genericfemale/Hinder.ogg | 3 + .../out/genericfemale/Holy Radiance.ogg | 3 + .../out/genericfemale/Horn of Valor.ogg | 3 + .../out/genericfemale/Inferno Bolt.ogg | 3 + .../out/genericfemale/Intangible Presence.ogg | 3 + .../out/genericfemale/Iron Whirlwind.ogg | 3 + .../out/genericfemale/Kara Kazham.ogg | 3 + .../out/genericfemale/Knife Dance.ogg | 3 + .../RaiderSA/out/genericfemale/Landslide.ogg | 3 + .../out/genericfemale/Lantern of Darkness.ogg | 3 + .../out/genericfemale/Lava Wreath.ogg | 3 + .../RaiderSA/out/genericfemale/Leech Life.ogg | 3 + .../RaiderSA/out/genericfemale/Lifebloom.ogg | 3 + .../out/genericfemale/Lightning Breath.ogg | 3 + .../out/genericfemale/Lingering Gaze.ogg | 3 + .../out/genericfemale/Maddening Roar.ogg | 3 + .../out/genericfemale/Magic Magnificent.ogg | 3 + .../RaiderSA/out/genericfemale/Mana Fang.ogg | 3 + .../out/genericfemale/Marked Prey.ogg | 3 + .../out/genericfemale/Mass Repentance.ogg | 3 + .../RaiderSA/out/genericfemale/Meteor.ogg | 3 + .../out/genericfemale/Mighty Slam.ogg | 3 + .../RaiderSA/out/genericfemale/Misery.ogg | 3 + .../out/genericfemale/Molten Crash.ogg | 3 + .../out/genericfemale/Molten Touch.ogg | 3 + .../out/genericfemale/Mortal Strike.ogg | 3 + .../out/genericfemale/Necrotic Embrace.ogg | 3 + .../out/genericfemale/Nether Venom.ogg | 3 + .../RaiderSA/out/genericfemale/Nightmares.ogg | 3 + .../out/genericfemale/Nullification.ogg | 3 + .../out/genericfemale/Overcharge Mana.ogg | 3 + .../out/genericfemale/Penetrating Shot.ogg | 3 + .../out/genericfemale/Phase Breach.ogg | 3 + .../out/genericfemale/Piercing Gale.ogg | 3 + .../out/genericfemale/Piercing Missiles.ogg | 3 + .../out/genericfemale/Piercing Shards.ogg | 3 + .../out/genericfemale/Polymorh Fish.ogg | 3 + .../out/genericfemale/Prophecies of Doom.ogg | 3 + .../out/genericfemale/Pulse Grenade.ogg | 3 + .../RaiderSA/out/genericfemale/Quarantine.ogg | 3 + .../out/genericfemale/Quelling Strike.ogg | 3 + .../out/genericfemale/Radiant Tempest.ogg | 3 + .../RaiderSA/out/genericfemale/Ragnarok.ogg | 3 + .../RaiderSA/out/genericfemale/Rampage.ogg | 3 + .../out/genericfemale/Rapid Rupture.ogg | 3 + .../out/genericfemale/Ravenous Blaze.ogg | 3 + .../out/genericfemale/Razor Shards.ogg | 3 + .../out/genericfemale/Reality Tear.ogg | 3 + .../RaiderSA/out/genericfemale/Reap Soul.ogg | 3 + .../out/genericfemale/Rejuvenating Waters.ogg | 3 + .../out/genericfemale/Rejuvenation.ogg | 3 + .../genericfemale/Reverberating Strike.ogg | 3 + .../out/genericfemale/Roiling Storm.ogg | 3 + .../RaiderSA/out/genericfemale/Ruiner.ogg | 3 + .../out/genericfemale/Rune of Healing.ogg | 3 + .../RaiderSA/out/genericfemale/Runic Band.ogg | 3 + .../out/genericfemale/Sacred Ground.ogg | 3 + .../out/genericfemale/Sacrifice Soul.ogg | 3 + .../RaiderSA/out/genericfemale/Sanctify.ogg | 3 + .../RaiderSA/out/genericfemale/Sandstorm.ogg | 3 + .../out/genericfemale/Scornful Gaze.ogg | 3 + .../out/genericfemale/Screams of the Dead.ogg | 3 + .../RaiderSA/out/genericfemale/Sea Legs.ogg | 3 + .../RaiderSA/out/genericfemale/Seal Magic.ogg | 3 + .../RaiderSA/out/genericfemale/Sever.ogg | 3 + .../out/genericfemale/Severe Dusting.ogg | 3 + .../genericfemale/Shackles of Servitude.ogg | 3 + .../out/genericfemale/Shadow Blades.ogg | 3 + .../out/genericfemale/Shadow Bolt Volley.ogg | 3 + .../out/genericfemale/Shadow Crash.ogg | 3 + .../out/genericfemale/Shadow Rejuvenation.ogg | 3 + .../out/genericfemale/Shadow Strike.ogg | 3 + .../out/genericfemale/Shadow Sweep.ogg | 3 + .../out/genericfemale/Shadow Wall.ogg | 3 + .../out/genericfemale/Shared Suffering.ogg | 3 + .../out/genericfemale/Shield of Light.ogg | 3 + .../out/genericfemale/Shivan Pact.ogg | 3 + .../out/genericfemale/Shock Lance.ogg | 3 + .../RaiderSA/out/genericfemale/Shockwave.ogg | 3 + .../out/genericfemale/Siphon Corruption.ogg | 3 + .../out/genericfemale/Six Pound Barrel.ogg | 3 + .../out/genericfemale/Sleep Canister.ogg | 3 + .../out/genericfemale/Slicing Maelstrom.ogg | 3 + .../out/genericfemale/Soul Echoes.ogg | 3 + .../RaiderSA/out/genericfemale/Soulblight.ogg | 3 + .../RaiderSA/out/genericfemale/Soulbomb.ogg | 3 + .../out/genericfemale/Sound Alarm.ogg | 3 + .../out/genericfemale/Spear of Light.ogg | 3 + .../out/genericfemale/Spiked Tongue.ogg | 3 + .../RaiderSA/out/genericfemale/Spray Sand.ogg | 3 + .../out/genericfemale/Stasis Trap.ogg | 3 + .../out/genericfemale/Static Nova.ogg | 3 + .../RaiderSA/out/genericfemale/Stone Gaze.ogg | 3 + .../out/genericfemale/Streetsweeper.ogg | 3 + .../out/genericfemale/Strike Down.ogg | 3 + .../out/genericfemale/Sultry Heat.ogg | 3 + .../genericfemale/Summon Reinforcements.ogg | 3 + .../genericfemale/Summon Volatile Energy.ogg | 3 + .../RaiderSA/out/genericfemale/Sunder.ogg | 3 + .../RaiderSA/out/genericfemale/Surge.ogg | 3 + .../out/genericfemale/Swirling Scythe.ogg | 3 + .../out/genericfemale/Tangled Web.ogg | 3 + .../RaiderSA/out/genericfemale/Teleport.ogg | 3 + .../out/genericfemale/Thundering Stomp.ogg | 3 + .../out/genericfemale/Thunderstrike.ogg | 3 + .../RaiderSA/out/genericfemale/Torrent.ogg | 3 + .../out/genericfemale/Tortured Rage.ogg | 3 + .../RaiderSA/out/genericfemale/Turn Kick.ogg | 3 + .../out/genericfemale/Unleash Fury.ogg | 3 + .../out/genericfemale/Unnerving Screech.ogg | 3 + .../out/genericfemale/Unruly Yell.ogg | 3 + .../out/genericfemale/Unstable Mana.ogg | 3 + .../out/genericfemale/Vengeful Shear.ogg | 3 + .../out/genericfemale/Venom Storm.ogg | 3 + .../RaiderSA/out/genericfemale/Vile Roots.ogg | 3 + .../out/genericfemale/Wake of Flame.ogg | 3 + .../out/genericfemale/Whirling Edge.ogg | 3 + .../out/genericfemale/Whirling Saber.ogg | 3 + .../out/genericfemale/Wicked Dagger.ogg | 3 + .../out/genericfemale/Wicked Slam.ogg | 3 + .../out/genericfemale/Will Breaker.ogg | 3 + .../RaiderSA/out/trump/Annihilation.ogg | 3 + .../RaiderSA/out/trump/Arcane Blitz.ogg | 3 + .../RaiderSA/out/trump/Arcane Slicer.ogg | 3 + .../RaiderSA/out/trump/Arcing Bolt.ogg | 3 + .../RaiderSA/out/trump/Arrow Barrage.ogg | 3 + .../RaiderSA/out/trump/Bellowing Roar.ogg | 3 + .../RaiderSA/out/trump/Bile Breath.ogg | 3 + .../RaiderSA/out/trump/Blinding Glare.ogg | 3 + .../out/trump/Bone Chilling Scream.ogg | 3 + .../out/trump/Bonebreaking Strike.ogg | 3 + .../Projects/RaiderSA/out/trump/Bound.ogg | 3 + .../RaiderSA/out/trump/Brackwater Barrage.ogg | 3 + .../out/trump/Breath of Corruption.ogg | 3 + .../RaiderSA/out/trump/Brutal Assault.ogg | 3 + .../RaiderSA/out/trump/Brutal Haymaker.ogg | 3 + .../RaiderSA/out/trump/Burning Blast.ogg | 3 + .../RaiderSA/out/trump/Burning Leg Sweep.ogg | 3 + .../Projects/RaiderSA/out/trump/Carnage.ogg | 3 + .../RaiderSA/out/trump/Ceaseless Winter.ogg | 3 + .../RaiderSA/out/trump/Celerity Zone.ogg | 3 + .../RaiderSA/out/trump/Chaotic Energy.ogg | 3 + .../RaiderSA/out/trump/Chaotic Shadows.ogg | 3 + .../RaiderSA/out/trump/Chaotic Tempest.ogg | 3 + .../RaiderSA/out/trump/Charged Blasts.ogg | 3 + .../RaiderSA/out/trump/Charged Smash.ogg | 3 + .../RaiderSA/out/trump/Charging Station.ogg | 3 + .../RaiderSA/out/trump/Chilled Blood.ogg | 3 + .../RaiderSA/out/trump/Claw Frenzy.ogg | 3 + .../RaiderSA/out/trump/Collapsing World.ogg | 3 + .../RaiderSA/out/trump/Cone of Death.ogg | 3 + .../RaiderSA/out/trump/Consume Magic.ogg | 3 + .../RaiderSA/out/trump/Consuming Sphere.ogg | 3 + .../RaiderSA/out/trump/Cosmic Scythe.ogg | 3 + .../RaiderSA/out/trump/Dark Mending.ogg | 3 + .../RaiderSA/out/trump/Deafening Screech.ogg | 3 + .../RaiderSA/out/trump/Debilitating Shout.ogg | 3 + .../RaiderSA/out/trump/Decimation.ogg | 3 + .../Projects/RaiderSA/out/trump/Demolish.ogg | 3 + .../RaiderSA/out/trump/Demonic Ascension.ogg | 3 + .../RaiderSA/out/trump/Demonic Mending.ogg | 3 + .../RaiderSA/out/trump/Demonic Upheaval.ogg | 3 + .../RaiderSA/out/trump/Demoralizing Shout.ogg | 3 + .../RaiderSA/out/trump/Desolate Gaze.ogg | 3 + .../out/trump/Detonating Moonglaive.ogg | 3 + .../RaiderSA/out/trump/Diabolic Bomb.ogg | 3 + .../RaiderSA/out/trump/Dinner Bell.ogg | 3 + .../RaiderSA/out/trump/Disintegrate.ogg | 3 + .../out/trump/Disintegration Beam.ogg | 3 + .../RaiderSA/out/trump/Drain Magic.ogg | 3 + .../Projects/RaiderSA/out/trump/Drain.ogg | 3 + .../RaiderSA/out/trump/Dread Inferno.ogg | 3 + .../RaiderSA/out/trump/Echoes of Doom.ogg | 3 + .../out/trump/Empowered Flame Rend.ogg | 3 + .../RaiderSA/out/trump/Empowered Flare.ogg | 3 + .../out/trump/Empowered Pulse Grenade.ogg | 3 + .../out/trump/Empowered Shock Lance.ogg | 3 + .../out/trump/Empowered Shrapnel Blast.ogg | 3 + .../RaiderSA/out/trump/Enflame Corruption.ogg | 3 + .../RaiderSA/out/trump/Entropic Mine.ogg | 3 + .../RaiderSA/out/trump/Eradication.ogg | 3 + .../Projects/RaiderSA/out/trump/Evocation.ogg | 3 + .../RaiderSA/out/trump/Expel Light.ogg | 3 + .../Projects/RaiderSA/out/trump/Eye Storm.ogg | 3 + .../RaiderSA/out/trump/Eye of the Storm.ogg | 3 + .../RaiderSA/out/trump/Feed on the Weak.ogg | 3 + .../RaiderSA/out/trump/Fel Bombardment.ogg | 3 + .../RaiderSA/out/trump/Fel Breath.ogg | 3 + .../RaiderSA/out/trump/Fel Detonation.ogg | 3 + .../RaiderSA/out/trump/Fel Fireball.ogg | 3 + .../RaiderSA/out/trump/Fel Mortar.ogg | 3 + .../RaiderSA/out/trump/Felblaze Orb.ogg | 3 + .../RaiderSA/out/trump/Felsoul Cleave.ogg | 3 + .../RaiderSA/out/trump/Fiery Strike.ogg | 3 + .../RaiderSA/out/trump/Flame Rend.ogg | 3 + .../RaiderSA/out/trump/Flame Wreath.ogg | 3 + .../Projects/RaiderSA/out/trump/Flare.ogg | 3 + .../RaiderSA/out/trump/Flashlight.ogg | 3 + .../RaiderSA/out/trump/Floral Fulmination.ogg | 3 + .../RaiderSA/out/trump/Focused Lightning.ogg | 3 + .../RaiderSA/out/trump/Foe Braker.ogg | 3 + .../RaiderSA/out/trump/Forging Strike.ogg | 3 + .../Projects/RaiderSA/out/trump/Fragment.ogg | 3 + .../Projects/RaiderSA/out/trump/Frostbite.ogg | 3 + .../RaiderSA/out/trump/Hateful Gaze.ogg | 3 + .../Projects/RaiderSA/out/trump/Hatred.ogg | 3 + .../RaiderSA/out/trump/Healing Touch.ogg | 3 + .../Projects/RaiderSA/out/trump/Heat Wave.ogg | 3 + .../Projects/RaiderSA/out/trump/Hinder.ogg | 3 + .../RaiderSA/out/trump/Holy Radiance.ogg | 3 + .../RaiderSA/out/trump/Horn of Valor.ogg | 3 + .../RaiderSA/out/trump/Inferno Bolt.ogg | 3 + .../out/trump/Intangible Presence.ogg | 3 + .../RaiderSA/out/trump/Iron Whirlwind.ogg | 3 + .../RaiderSA/out/trump/Kara Kazham.ogg | 3 + .../RaiderSA/out/trump/Knife Dance.ogg | 3 + .../Projects/RaiderSA/out/trump/Landslide.ogg | 3 + .../out/trump/Lantern of Darkness.ogg | 3 + .../RaiderSA/out/trump/Lava Wreath.ogg | 3 + .../RaiderSA/out/trump/Leech Life.ogg | 3 + .../Projects/RaiderSA/out/trump/Lifebloom.ogg | 3 + .../RaiderSA/out/trump/Lightning Breath.ogg | 3 + .../RaiderSA/out/trump/Lingering Gaze.ogg | 3 + .../RaiderSA/out/trump/Maddening Roar.ogg | 3 + .../RaiderSA/out/trump/Magic Magnificent.ogg | 3 + .../Projects/RaiderSA/out/trump/Mana Fang.ogg | 3 + .../RaiderSA/out/trump/Marked Prey.ogg | 3 + .../RaiderSA/out/trump/Mass Repentance.ogg | 3 + .../Projects/RaiderSA/out/trump/Meteor.ogg | 3 + .../RaiderSA/out/trump/Mighty Slam.ogg | 3 + .../Projects/RaiderSA/out/trump/Misery.ogg | 3 + .../RaiderSA/out/trump/Molten Crash.ogg | 3 + .../RaiderSA/out/trump/Molten Touch.ogg | 3 + .../RaiderSA/out/trump/Mortal Strike.ogg | 3 + .../RaiderSA/out/trump/Necrotic Embrace.ogg | 3 + .../RaiderSA/out/trump/Nether Venom.ogg | 3 + .../RaiderSA/out/trump/Nightmares.ogg | 3 + .../RaiderSA/out/trump/Nullification.ogg | 3 + .../RaiderSA/out/trump/Overcharge Mana.ogg | 3 + .../RaiderSA/out/trump/Penetrating Shot.ogg | 3 + .../RaiderSA/out/trump/Phase Breach.ogg | 3 + .../RaiderSA/out/trump/Piercing Gale.ogg | 3 + .../RaiderSA/out/trump/Piercing Missiles.ogg | 3 + .../RaiderSA/out/trump/Piercing Shards.ogg | 3 + .../RaiderSA/out/trump/Polymorh Fish.ogg | 3 + .../RaiderSA/out/trump/Prophecies of Doom.ogg | 3 + .../RaiderSA/out/trump/Pulse Grenade.ogg | 3 + .../RaiderSA/out/trump/Quarantine.ogg | 3 + .../RaiderSA/out/trump/Quelling Strike.ogg | 3 + .../RaiderSA/out/trump/Radiant Tempest.ogg | 3 + .../Projects/RaiderSA/out/trump/Ragnarok.ogg | 3 + .../Projects/RaiderSA/out/trump/Rampage.ogg | 3 + .../RaiderSA/out/trump/Rapid Rupture.ogg | 3 + .../RaiderSA/out/trump/Ravenous Blaze.ogg | 3 + .../RaiderSA/out/trump/Razor Shards.ogg | 3 + .../RaiderSA/out/trump/Reality Tear.ogg | 3 + .../Projects/RaiderSA/out/trump/Reap Soul.ogg | 3 + .../out/trump/Rejuvenating Waters.ogg | 3 + .../RaiderSA/out/trump/Rejuvenation.ogg | 3 + .../out/trump/Reverberating Strike.ogg | 3 + .../RaiderSA/out/trump/Roiling Storm.ogg | 3 + .../Projects/RaiderSA/out/trump/Ruiner.ogg | 3 + .../RaiderSA/out/trump/Rune of Healing.ogg | 3 + .../RaiderSA/out/trump/Runic Band.ogg | 3 + .../RaiderSA/out/trump/Sacred Ground.ogg | 3 + .../RaiderSA/out/trump/Sacrifice Soul.ogg | 3 + .../Projects/RaiderSA/out/trump/Sanctify.ogg | 3 + .../Projects/RaiderSA/out/trump/Sandstorm.ogg | 3 + .../RaiderSA/out/trump/Scornful Gaze.ogg | 3 + .../out/trump/Screams of the Dead.ogg | 3 + .../Projects/RaiderSA/out/trump/Sea Legs.ogg | 3 + .../RaiderSA/out/trump/Seal Magic.ogg | 3 + .../Projects/RaiderSA/out/trump/Sever.ogg | 3 + .../RaiderSA/out/trump/Severe Dusting.ogg | 3 + .../out/trump/Shackles of Servitude.ogg | 3 + .../RaiderSA/out/trump/Shadow Blades.ogg | 3 + .../RaiderSA/out/trump/Shadow Bolt Volley.ogg | 3 + .../RaiderSA/out/trump/Shadow Crash.ogg | 3 + .../out/trump/Shadow Rejuvenation.ogg | 3 + .../RaiderSA/out/trump/Shadow Strike.ogg | 3 + .../RaiderSA/out/trump/Shadow Sweep.ogg | 3 + .../RaiderSA/out/trump/Shadow Wall.ogg | 3 + .../RaiderSA/out/trump/Shared Suffering.ogg | 3 + .../RaiderSA/out/trump/Shield of Light.ogg | 3 + .../RaiderSA/out/trump/Shivan Pact.ogg | 3 + .../RaiderSA/out/trump/Shock Lance.ogg | 3 + .../Projects/RaiderSA/out/trump/Shockwave.ogg | 3 + .../RaiderSA/out/trump/Siphon Corruption.ogg | 3 + .../RaiderSA/out/trump/Six Pound Barrel.ogg | 3 + .../RaiderSA/out/trump/Sleep Canister.ogg | 3 + .../RaiderSA/out/trump/Slicing Maelstrom.ogg | 3 + .../RaiderSA/out/trump/Soul Echoes.ogg | 3 + .../RaiderSA/out/trump/Soulblight.ogg | 3 + .../Projects/RaiderSA/out/trump/Soulbomb.ogg | 3 + .../RaiderSA/out/trump/Sound Alarm.ogg | 3 + .../RaiderSA/out/trump/Spear of Light.ogg | 3 + .../RaiderSA/out/trump/Spiked Tongue.ogg | 3 + .../RaiderSA/out/trump/Spray Sand.ogg | 3 + .../RaiderSA/out/trump/Stasis Trap.ogg | 3 + .../RaiderSA/out/trump/Static Nova.ogg | 3 + .../RaiderSA/out/trump/Stone Gaze.ogg | 3 + .../RaiderSA/out/trump/Streetsweeper.ogg | 3 + .../RaiderSA/out/trump/Strike Down.ogg | 3 + .../RaiderSA/out/trump/Sultry Heat.ogg | 3 + .../out/trump/Summon Reinforcements.ogg | 3 + .../out/trump/Summon Volatile Energy.ogg | 3 + .../Projects/RaiderSA/out/trump/Sunder.ogg | 3 + .../Projects/RaiderSA/out/trump/Surge.ogg | 3 + .../RaiderSA/out/trump/Swirling Scythe.ogg | 3 + .../RaiderSA/out/trump/Tangled Web.ogg | 3 + .../Projects/RaiderSA/out/trump/Teleport.ogg | 3 + .../RaiderSA/out/trump/Thundering Stomp.ogg | 3 + .../RaiderSA/out/trump/Thunderstrike.ogg | 3 + .../Projects/RaiderSA/out/trump/Torrent.ogg | 3 + .../RaiderSA/out/trump/Tortured Rage.ogg | 3 + .../Projects/RaiderSA/out/trump/Turn Kick.ogg | 3 + .../RaiderSA/out/trump/Unleash Fury.ogg | 3 + .../RaiderSA/out/trump/Unnerving Screech.ogg | 3 + .../RaiderSA/out/trump/Unruly Yell.ogg | 3 + .../RaiderSA/out/trump/Unstable Mana.ogg | 3 + .../RaiderSA/out/trump/Vengeful Shear.ogg | 3 + .../RaiderSA/out/trump/Venom Storm.ogg | 3 + .../RaiderSA/out/trump/Vile Roots.ogg | 3 + .../RaiderSA/out/trump/Wake of Flame.ogg | 3 + .../RaiderSA/out/trump/Whirling Edge.ogg | 3 + .../RaiderSA/out/trump/Whirling Saber.ogg | 3 + .../RaiderSA/out/trump/Wicked Dagger.ogg | 3 + .../RaiderSA/out/trump/Wicked Slam.ogg | 3 + .../RaiderSA/out/trump/Will Breaker.ogg | 3 + WeakAuras/Projects/RaiderSA/runtts.sh | 13 + .../RaiderSA/samples/animedangerboy.wav | 3 + .../Projects/RaiderSA/samples/animegirl.wav | 3 + .../Projects/RaiderSA/samples/boberkurwa.wav | 3 + .../RaiderSA/samples/genericfemale.wav | 3 + WeakAuras/Projects/RaiderSA/samples/trump.wav | 3 + WeakAuras/Projects/RaiderSA/speedify.sh | 5 + WeakAuras/Projects/RaiderSA/test.sh | 8 + WeakAuras/Projects/RaiderSA/tts_output.wav | 3 + WeakAuras/Projects/RaiderSA/weakaura/init.lua | 955 ++ .../Projects/RaiderSA/weakaura/trigger.lua | 18 + WeakAuras/Projects/RaiderSA/words.txt | 548 + WeakAuras/Projects/RaiderSA/working_out.tar | Bin 0 -> 3133440 bytes .../Projects}/RaiderlosSA.lua | 112 +- .../Projects}/RaiderlosSA/color.lua | 56 +- .../Projects}/RaiderlosSA/event.lua | 52 +- .../Projects}/RaiderlosSA/event2.lua | 20 +- .../Projects}/RaiderlosSA/export | 0 .../Projects}/RaiderlosSA/filterLogBySpell.sh | 0 .../Projects}/RaiderlosSA/init.lua | 1070 +- .../Projects}/RaiderlosSA/logger.lua | 24 +- WeakAuras/Projects/RaiderlosSA/out/162135.txt | 0 WeakAuras/Projects/RaiderlosSA/out/185539.txt | 13 + WeakAuras/Projects/RaiderlosSA/out/188169.txt | 5 + WeakAuras/Projects/RaiderlosSA/out/189469.txt | 5 + WeakAuras/Projects/RaiderlosSA/out/190620.txt | 0 WeakAuras/Projects/RaiderlosSA/out/190836.txt | 0 WeakAuras/Projects/RaiderlosSA/out/191284.txt | 8 + WeakAuras/Projects/RaiderlosSA/out/191326.txt | 5 + WeakAuras/Projects/RaiderlosSA/out/191735.txt | 2 + WeakAuras/Projects/RaiderlosSA/out/191848.txt | 0 WeakAuras/Projects/RaiderlosSA/out/191976.txt | 10 + WeakAuras/Projects/RaiderlosSA/out/192018.txt | 6 + WeakAuras/Projects/RaiderlosSA/out/192019.txt | 8 + WeakAuras/Projects/RaiderlosSA/out/192048.txt | 4 + WeakAuras/Projects/RaiderlosSA/out/192305.txt | 0 WeakAuras/Projects/RaiderlosSA/out/192307.txt | 9 + WeakAuras/Projects/RaiderlosSA/out/192631.txt | 2 + WeakAuras/Projects/RaiderlosSA/out/193069.txt | 4 + WeakAuras/Projects/RaiderlosSA/out/193364.txt | 14 + WeakAuras/Projects/RaiderlosSA/out/193585.txt | 8 + WeakAuras/Projects/RaiderlosSA/out/193597.txt | 11 + WeakAuras/Projects/RaiderlosSA/out/193611.txt | 9 + WeakAuras/Projects/RaiderlosSA/out/193826.txt | 8 + WeakAuras/Projects/RaiderlosSA/out/194099.txt | 12 + WeakAuras/Projects/RaiderlosSA/out/194216.txt | 4 + WeakAuras/Projects/RaiderlosSA/out/194325.txt | 2 + WeakAuras/Projects/RaiderlosSA/out/194442.txt | 4 + WeakAuras/Projects/RaiderlosSA/out/194615.txt | 4 + WeakAuras/Projects/RaiderlosSA/out/194945.txt | 5 + WeakAuras/Projects/RaiderlosSA/out/194956.txt | 7 + WeakAuras/Projects/RaiderlosSA/out/194996.txt | 0 WeakAuras/Projects/RaiderlosSA/out/195046.txt | 4 + WeakAuras/Projects/RaiderlosSA/out/195129.txt | 7 + WeakAuras/Projects/RaiderlosSA/out/195172.txt | 5 + WeakAuras/Projects/RaiderlosSA/out/195254.txt | 4 + WeakAuras/Projects/RaiderlosSA/out/195293.txt | 2 + WeakAuras/Projects/RaiderlosSA/out/195791.txt | 2 + WeakAuras/Projects/RaiderlosSA/out/196129.txt | 3 + WeakAuras/Projects/RaiderlosSA/out/196144.txt | 5 + WeakAuras/Projects/RaiderlosSA/out/196249.txt | 2 + WeakAuras/Projects/RaiderlosSA/out/196290.txt | 8 + WeakAuras/Projects/RaiderlosSA/out/196296.txt | 8 + WeakAuras/Projects/RaiderlosSA/out/196392.txt | 1 + WeakAuras/Projects/RaiderlosSA/out/196512.txt | 8 + WeakAuras/Projects/RaiderlosSA/out/197105.txt | 8 + WeakAuras/Projects/RaiderlosSA/out/197418.txt | 8 + WeakAuras/Projects/RaiderlosSA/out/197513.txt | 0 WeakAuras/Projects/RaiderlosSA/out/197799.txt | 0 WeakAuras/Projects/RaiderlosSA/out/197810.txt | 5 + WeakAuras/Projects/RaiderlosSA/out/197961.txt | 4 + WeakAuras/Projects/RaiderlosSA/out/198072.txt | 0 WeakAuras/Projects/RaiderlosSA/out/198079.txt | 4 + WeakAuras/Projects/RaiderlosSA/out/198245.txt | 3 + WeakAuras/Projects/RaiderlosSA/out/198263.txt | 4 + WeakAuras/Projects/RaiderlosSA/out/198405.txt | 8 + WeakAuras/Projects/RaiderlosSA/out/198495.txt | 4 + WeakAuras/Projects/RaiderlosSA/out/198496.txt | 5 + WeakAuras/Projects/RaiderlosSA/out/198605.txt | 3 + WeakAuras/Projects/RaiderlosSA/out/198750.txt | 2 + WeakAuras/Projects/RaiderlosSA/out/198888.txt | 6 + WeakAuras/Projects/RaiderlosSA/out/198934.txt | 2 + WeakAuras/Projects/RaiderlosSA/out/199176.txt | 2 + WeakAuras/Projects/RaiderlosSA/out/199210.txt | 4 + WeakAuras/Projects/RaiderlosSA/out/199652.txt | 15 + WeakAuras/Projects/RaiderlosSA/out/199674.txt | 11 + WeakAuras/Projects/RaiderlosSA/out/199726.txt | 7 + WeakAuras/Projects/RaiderlosSA/out/199917.txt | 0 WeakAuras/Projects/RaiderlosSA/out/200040.txt | 5 + WeakAuras/Projects/RaiderlosSA/out/200105.txt | 4 + WeakAuras/Projects/RaiderlosSA/out/200227.txt | 2 + WeakAuras/Projects/RaiderlosSA/out/200238.txt | 7 + WeakAuras/Projects/RaiderlosSA/out/200248.txt | 8 + WeakAuras/Projects/RaiderlosSA/out/200261.txt | 7 + WeakAuras/Projects/RaiderlosSA/out/200291.txt | 4 + WeakAuras/Projects/RaiderlosSA/out/200345.txt | 2 + WeakAuras/Projects/RaiderlosSA/out/200580.txt | 8 + WeakAuras/Projects/RaiderlosSA/out/200631.txt | 12 + WeakAuras/Projects/RaiderlosSA/out/200700.txt | 2 + WeakAuras/Projects/RaiderlosSA/out/200732.txt | 5 + WeakAuras/Projects/RaiderlosSA/out/200898.txt | 2 + WeakAuras/Projects/RaiderlosSA/out/201139.txt | 4 + WeakAuras/Projects/RaiderlosSA/out/201400.txt | 1 + WeakAuras/Projects/RaiderlosSA/out/202098.txt | 5 + WeakAuras/Projects/RaiderlosSA/out/202181.txt | 4 + WeakAuras/Projects/RaiderlosSA/out/202658.txt | 7 + WeakAuras/Projects/RaiderlosSA/out/202913.txt | 2 + WeakAuras/Projects/RaiderlosSA/out/207979.txt | 7 + WeakAuras/Projects/RaiderlosSA/out/207980.txt | 4 + WeakAuras/Projects/RaiderlosSA/out/209027.txt | 7 + WeakAuras/Projects/RaiderlosSA/out/209404.txt | 7 + WeakAuras/Projects/RaiderlosSA/out/209485.txt | 0 WeakAuras/Projects/RaiderlosSA/out/209495.txt | 5 + WeakAuras/Projects/RaiderlosSA/out/209516.txt | 7 + WeakAuras/Projects/RaiderlosSA/out/209628.txt | 5 + WeakAuras/Projects/RaiderlosSA/out/209676.txt | 4 + WeakAuras/Projects/RaiderlosSA/out/210261.txt | 3 + WeakAuras/Projects/RaiderlosSA/out/211037.txt | 0 WeakAuras/Projects/RaiderlosSA/out/211115.txt | 5 + WeakAuras/Projects/RaiderlosSA/out/211217.txt | 2 + WeakAuras/Projects/RaiderlosSA/out/211464.txt | 9 + WeakAuras/Projects/RaiderlosSA/out/211771.txt | 5 + WeakAuras/Projects/RaiderlosSA/out/212784.txt | 4 + WeakAuras/Projects/RaiderlosSA/out/215204.txt | 4 + WeakAuras/Projects/RaiderlosSA/out/215433.txt | 4 + WeakAuras/Projects/RaiderlosSA/out/219488.txt | 2 + WeakAuras/Projects/RaiderlosSA/out/220871.txt | 4 + WeakAuras/Projects/RaiderlosSA/out/225100.txt | 4 + WeakAuras/Projects/RaiderlosSA/out/225573.txt | 8 + WeakAuras/Projects/RaiderlosSA/out/225732.txt | 7 + WeakAuras/Projects/RaiderlosSA/out/226285.txt | 4 + WeakAuras/Projects/RaiderlosSA/out/226296.txt | 9 + WeakAuras/Projects/RaiderlosSA/out/226316.txt | 0 WeakAuras/Projects/RaiderlosSA/out/227254.txt | 3 + WeakAuras/Projects/RaiderlosSA/out/227267.txt | 1 + WeakAuras/Projects/RaiderlosSA/out/227404.txt | 4 + WeakAuras/Projects/RaiderlosSA/out/227463.txt | 4 + WeakAuras/Projects/RaiderlosSA/out/227493.txt | 10 + WeakAuras/Projects/RaiderlosSA/out/227508.txt | 4 + WeakAuras/Projects/RaiderlosSA/out/227568.txt | 8 + WeakAuras/Projects/RaiderlosSA/out/227592.txt | 5 + WeakAuras/Projects/RaiderlosSA/out/227615.txt | 2 + WeakAuras/Projects/RaiderlosSA/out/227628.txt | 1 + WeakAuras/Projects/RaiderlosSA/out/227646.txt | 4 + WeakAuras/Projects/RaiderlosSA/out/227672.txt | 5 + WeakAuras/Projects/RaiderlosSA/out/227776.txt | 0 WeakAuras/Projects/RaiderlosSA/out/227779.txt | 0 WeakAuras/Projects/RaiderlosSA/out/227793.txt | 0 WeakAuras/Projects/RaiderlosSA/out/227966.txt | 3 + WeakAuras/Projects/RaiderlosSA/out/227987.txt | 1 + WeakAuras/Projects/RaiderlosSA/out/228025.txt | 0 WeakAuras/Projects/RaiderlosSA/out/228221.txt | 2 + WeakAuras/Projects/RaiderlosSA/out/228225.txt | 0 WeakAuras/Projects/RaiderlosSA/out/228269.txt | 2 + WeakAuras/Projects/RaiderlosSA/out/228277.txt | 8 + WeakAuras/Projects/RaiderlosSA/out/228278.txt | 8 + WeakAuras/Projects/RaiderlosSA/out/228279.txt | 8 + WeakAuras/Projects/RaiderlosSA/out/228837.txt | 0 WeakAuras/Projects/RaiderlosSA/out/228852.txt | 3 + WeakAuras/Projects/RaiderlosSA/out/229083.txt | 9 + WeakAuras/Projects/RaiderlosSA/out/229151.txt | 5 + WeakAuras/Projects/RaiderlosSA/out/229159.txt | 0 WeakAuras/Projects/RaiderlosSA/out/229662.txt | 0 WeakAuras/Projects/RaiderlosSA/out/229706.txt | 8 + WeakAuras/Projects/RaiderlosSA/out/229714.txt | 0 WeakAuras/Projects/RaiderlosSA/out/230083.txt | 2 + WeakAuras/Projects/RaiderlosSA/out/232153.txt | 2 + WeakAuras/Projects/RaiderlosSA/out/234107.txt | 3 + WeakAuras/Projects/RaiderlosSA/out/236543.txt | 5 + WeakAuras/Projects/RaiderlosSA/out/236627.txt | 0 WeakAuras/Projects/RaiderlosSA/out/237726.txt | 3 + WeakAuras/Projects/RaiderlosSA/out/238315.txt | 5 + WeakAuras/Projects/RaiderlosSA/out/238543.txt | 3 + WeakAuras/Projects/RaiderlosSA/out/239217.txt | 5 + WeakAuras/Projects/RaiderlosSA/out/239268.txt | 3 + WeakAuras/Projects/RaiderlosSA/out/241937.txt | 2 + WeakAuras/Projects/RaiderlosSA/out/242792.txt | 5 + WeakAuras/Projects/RaiderlosSA/out/243168.txt | 0 WeakAuras/Projects/RaiderlosSA/out/243960.txt | 8 + WeakAuras/Projects/RaiderlosSA/out/243961.txt | 6 + WeakAuras/Projects/RaiderlosSA/out/243983.txt | 8 + WeakAuras/Projects/RaiderlosSA/out/243999.txt | 4 + WeakAuras/Projects/RaiderlosSA/out/244000.txt | 4 + WeakAuras/Projects/RaiderlosSA/out/244016.txt | 14 + WeakAuras/Projects/RaiderlosSA/out/244033.txt | 6 + WeakAuras/Projects/RaiderlosSA/out/244042.txt | 6 + WeakAuras/Projects/RaiderlosSA/out/244056.txt | 8 + WeakAuras/Projects/RaiderlosSA/out/244057.txt | 8 + WeakAuras/Projects/RaiderlosSA/out/244086.txt | 6 + WeakAuras/Projects/RaiderlosSA/out/244093.txt | 2 + WeakAuras/Projects/RaiderlosSA/out/244106.txt | 0 WeakAuras/Projects/RaiderlosSA/out/244131.txt | 4 + WeakAuras/Projects/RaiderlosSA/out/244291.txt | 10 + WeakAuras/Projects/RaiderlosSA/out/244410.txt | 6 + WeakAuras/Projects/RaiderlosSA/out/244693.txt | 4 + WeakAuras/Projects/RaiderlosSA/out/244768.txt | 4 + WeakAuras/Projects/RaiderlosSA/out/244899.txt | 16 + WeakAuras/Projects/RaiderlosSA/out/244969.txt | 10 + WeakAuras/Projects/RaiderlosSA/out/245161.txt | 0 WeakAuras/Projects/RaiderlosSA/out/245281.txt | 0 WeakAuras/Projects/RaiderlosSA/out/245546.txt | 0 WeakAuras/Projects/RaiderlosSA/out/245586.txt | 8 + WeakAuras/Projects/RaiderlosSA/out/245627.txt | 4 + WeakAuras/Projects/RaiderlosSA/out/245983.txt | 0 WeakAuras/Projects/RaiderlosSA/out/246037.txt | 0 WeakAuras/Projects/RaiderlosSA/out/246220.txt | 6 + WeakAuras/Projects/RaiderlosSA/out/246664.txt | 8 + WeakAuras/Projects/RaiderlosSA/out/246706.txt | 6 + WeakAuras/Projects/RaiderlosSA/out/246779.txt | 6 + WeakAuras/Projects/RaiderlosSA/out/246840.txt | 10 + WeakAuras/Projects/RaiderlosSA/out/247079.txt | 5 + WeakAuras/Projects/RaiderlosSA/out/247367.txt | 16 + WeakAuras/Projects/RaiderlosSA/out/247376.txt | 4 + WeakAuras/Projects/RaiderlosSA/out/247552.txt | 2 + WeakAuras/Projects/RaiderlosSA/out/247687.txt | 20 + WeakAuras/Projects/RaiderlosSA/out/247716.txt | 13 + WeakAuras/Projects/RaiderlosSA/out/248068.txt | 4 + WeakAuras/Projects/RaiderlosSA/out/248070.txt | 4 + WeakAuras/Projects/RaiderlosSA/out/248396.txt | 9 + WeakAuras/Projects/RaiderlosSA/out/248732.txt | 0 WeakAuras/Projects/RaiderlosSA/out/250255.txt | 16 + WeakAuras/Projects/RaiderlosSA/out/251570.txt | 10 + WeakAuras/Projects/RaiderlosSA/out/253189.txt | 0 WeakAuras/Projects/RaiderlosSA/out/254452.txt | 6 + WeakAuras/Projects/RaiderlosSA/out/254919.txt | 16 + WeakAuras/Projects/RaiderlosSA/out/254926.txt | 10 + WeakAuras/Projects/RaiderlosSA/out/256457.txt | 0 WeakAuras/Projects/RaiderlosSA/out/257296.txt | 10 + WeakAuras/Projects/RaiderlosSA/out/36247.txt | 1 + .../Projects}/RaiderlosSA/scratch.lua | 18 +- .../Projects}/RaiderlosSA/spells.txt | 1094 +- .../Account with herbalism dudu.txt | 10 +- .../Asakawa debuffs on nameplate non tsu.lua | 88 +- .../Projects/Random Trash}/GM Chat | 254 +- .../Random Trash}/Glowy Nameplate.lua | 354 +- .../Projects/Random Trash}/Hashing/1.lua | 342 +- .../Projects/Random Trash}/Hashing/2.lua | 284 +- .../Projects/Random Trash}/Herbs/Aethril.txt | 298 +- .../Random Trash}/Herbs/Dreamleaf.txt | 398 +- .../Random Trash}/Herbs/Fjarnskaggl.txt | 398 +- .../Random Trash}/Herbs/Foxflower.txt | 396 +- .../Projects/Random Trash}/Herbs/Icecap.txt | 168 +- .../Herbs/Mountain Silversage.txt | 104 +- .../Random Trash}/Herbs/Starlight Rose.txt | 398 +- .../Random Trash}/Herbs/_How2Find.txt | 2 +- .../Interesting Shit/BARS QUESTIONMARK.lua | 262 +- .../Interesting Shit/SeaStar.lua | 268 +- .../Projects/Random Trash}/Some stuff.lua | 34 +- .../Random Trash}/Spells of some sort.txt | 1538 +-- .../Projects/Random Trash}/TomTom/2.lua | 92 +- .../Projects/Random Trash}/TomTom/3.lua | 116 +- .../Projects/Random Trash}/TomTom/TomTom.lua | 2688 ++-- .../Projects/Random Trash}/idk/idk.lua | 128 +- .../Projects/Random Trash}/idk/idk2.lua | 176 +- .../Projects/Random Trash}/idk/idk3.lua | 2664 ++-- .../Projects}/RayOfHope/1/display.lua | 0 .../Projects}/RayOfHope/2/display.lua | 0 .../Projects}/RayOfHope/export | 0 .../Projects}/RayOfHope/init.lua | 0 .../Projects}/RayOfHope/trigger1.lua | 0 .../Projects}/RayOfHope/trigger2.lua | 0 .../Projects}/RedpilledFoFDildos.lua | 88 +- .../Legion => WeakAuras/Projects}/Rejuv.lua | 132 +- {WIP => WeakAuras/Projects}/Reply to MOVE.lua | 26 +- .../Projects}/Reputation for Beloved.lua | 56 +- .../Projects}/Reputations for Insane.lua | 22 +- .../Rogue Sniffer 9000/Target Direction.lua | 158 +- .../Rogue Sniffer 9000/Target Distance.lua | 84 +- .../Rogue Sniffer 9000/Target Zone.lua | 36 +- .../Projects}/Rogue Stealth.lua | 78 +- .../Projects}/RogueBullshit/Cooldowns | 0 .../Projects}/RogueBullshit/Mouse | 0 .../Projects}/RuneDinger.lua | 60 +- .../Projects}/SaveCombatLog.lua | 24 +- .../Projects}/ScrollingText/export | 0 .../Projects}/Sea-Star Proc.lua | 78 +- .../Projects}/SephuzBar/event.lua | 54 +- .../Projects}/SephuzBar/export | 0 .../Projects}/ShardCounter/display.lua | 4 +- .../Projects}/ShardCounter/event.lua | 14 +- .../Projects}/ShardCounter/event2.lua | 26 +- .../Projects}/ShardCounter/event3.lua | 26 +- .../Projects}/ShardCounter/event5.lua | 12 +- .../Projects}/ShardCounter/export | 0 .../Projects}/ShardCounter/init.lua | 104 +- .../Projects}/Shield proc.lua | 52 +- .../Projects}/Shin Thing.lua | 28 +- .../Projects}/Skinning Skill.lua | 20 +- .../Projects}/SoTR Counter.lua | 48 +- .../Projects}/SoTR Counter/Event.lua | 14 +- .../Projects}/SoTR Counter/Export | 0 .../Projects}/SoTR Counter/Init.lua | 6 +- .../Projects}/SoTR Counter/Text.lua | 4 +- .../Projects}/SoTR Mitigation.lua | 108 +- .../Projects}/SoTR Texture/Export | 0 .../Projects}/SoTR Texture/Init.lua | 12 +- .../Projects}/SoTR Texture/Text.lua | 4 +- .../Projects}/Some Premade Documentation.lua | 5954 ++++----- .../Projects}/Some next gen shit.lua | 118 +- .../Projects}/Soul Leech.lua | 38 +- .../Projects}/Sounds/Bababooey.ogg | 0 .../Projects}/Sounds/Bing.ogg | 0 .../Projects}/Sounds/Bing2.ogg | 0 .../Projects}/Sounds/Bong.ogg | 0 .../Projects}/Sounds/BonusDucks.ogg | 0 .../Projects}/Sounds/Boom2.ogg | 0 .../Projects}/Sounds/Boom3.ogg | 0 .../Projects}/Sounds/Boom4.ogg | 0 .../Projects}/Sounds/BoomVery.ogg | 0 .../Projects}/Sounds/China.ogg | 0 .../Projects}/Sounds/China2.ogg | 0 .../Projects}/Sounds/China3.ogg | 0 .../Projects}/Sounds/China4.ogg | 0 .../Projects}/Sounds/China5.ogg | 0 .../Projects}/Sounds/China6.ogg | 0 .../Projects}/Sounds/Cloak.ogg | 0 .../Projects}/Sounds/Conga.ogg | 0 .../Projects}/Sounds/Dead.ogg | 0 .../Projects}/Sounds/Domination.ogg | 0 .../Projects}/Sounds/FortressReel.ogg | 0 .../Projects}/Sounds/FortressReelLoop.ogg | 0 .../Projects}/Sounds/Gaben.ogg | 0 .../Projects}/Sounds/GetFucked.ogg | 0 .../Projects}/Sounds/HL2ButtonClick.ogg | 0 .../Projects}/Sounds/HL2ButtonRelease.ogg | 0 .../Projects}/Sounds/HL2ButtonRollover.ogg | 0 .../Projects}/Sounds/Hitsound.ogg | 0 .../Projects}/Sounds/Hitsound2.ogg | 0 .../Projects}/Sounds/Hitsound3.ogg | 0 .../Projects}/Sounds/Hitsound4.ogg | 0 .../Projects}/Sounds/Hitsound5.ogg | 0 .../Projects}/Sounds/HitsoundBap.ogg | 0 .../Projects}/Sounds/HitsoundBell.ogg | 0 .../Projects}/Sounds/HitsoundBoom.ogg | 0 .../Projects}/Sounds/HitsoundBubble.ogg | 0 .../Projects}/Sounds/HitsoundCOD.ogg | 0 .../Projects}/Sounds/HitsoundCasino1.ogg | 0 .../Projects}/Sounds/HitsoundCasino2.ogg | 0 .../Projects}/Sounds/HitsoundCasino3.ogg | 0 .../Projects}/Sounds/HitsoundDing.ogg | 0 .../Projects}/Sounds/HitsoundDuck.ogg | 0 .../Projects}/Sounds/HitsoundHardbass.ogg | 0 .../Projects}/Sounds/HitsoundMinecraft.ogg | 0 .../Projects}/Sounds/HitsoundNootNoot.ogg | 0 .../Projects}/Sounds/HitsoundOra.ogg | 0 .../Projects}/Sounds/HitsoundQuake.ogg | 0 .../Projects}/Sounds/HitsoundRS.ogg | 0 .../Projects}/Sounds/HitsoundRing.ogg | 0 .../Projects}/Sounds/HitsoundSans.ogg | 0 .../Projects}/Sounds/HitsoundSqueak.ogg | 0 .../Projects}/Sounds/HitsoundTin.ogg | 0 .../Projects}/Sounds/HitsoundUltrakill.ogg | 0 .../Projects}/Sounds/ItsOverJerma.ogg | 0 .../Projects}/Sounds/KillsoundHardbass.ogg | 0 .../Projects}/Sounds/KillsoundLego.ogg | 0 .../Projects}/Sounds/KillsoundRing.ogg | 0 .../Projects}/Sounds/KillsoundUltrakill.ogg | 0 .../Projects}/Sounds/KillsoundYoda.ogg | 0 .../Projects}/Sounds/MGSSpot.ogg | 0 .../Projects}/Sounds/MedicGaming.ogg | 0 .../Sounds/MedicGangsterParadise.ogg | 0 .../Projects}/Sounds/MeetTheSniper.ogg | 0 .../Projects}/Sounds/Nemesis.ogg | 0 .../Projects}/Sounds/OOF.ogg | 0 .../Projects}/Sounds/OhNo.ogg | 0 .../Projects}/Sounds/POOT.ogg | 0 .../Projects}/Sounds/Piss.ogg | 0 .../Projects}/Sounds/Revenge.ogg | 0 .../Projects}/Sounds/StarScream.ogg | 0 .../Sounds/TheOnlyThingTheyFearIsYou.ogg | 0 .../TheOnlyThingTheyFearIsYou_Fried.ogg | 0 .../Projects}/Sounds/Uncloak.ogg | 0 .../Projects}/Sounds/WeAreNumberOne.ogg | 0 .../Projects}/Sounds/WeAreNumberOneFried.ogg | 0 .../Projects}/Sounds/WindowsXPError.ogg | 0 .../Projects}/Sounds/YouveGotMail.ogg | 0 .../Projects}/Sounds/bckp.tar.gz | Bin .../Projects}/Sounds/output.ogg | 0 .../Projects}/Sounds/wav/Bing.wav | 0 .../Projects}/Sounds/wav/Bing2.wav | 0 .../Projects}/Sounds/wav/Bong.wav | 0 .../Projects}/Sounds/wav/BonusDucks.wav | 0 .../Projects}/Sounds/wav/Boom2.wav | 0 .../Projects}/Sounds/wav/Boom4.wav | 0 .../Projects}/Sounds/wav/BoomVery.wav | 0 .../Projects}/Sounds/wav/China.wav | 0 .../Projects}/Sounds/wav/China2.wav | 0 .../Projects}/Sounds/wav/China4.wav | 0 .../Projects}/Sounds/wav/China6.wav | 0 .../Projects}/Sounds/wav/Dead.wav | 0 .../Projects}/Sounds/wav/Domination.wav | 0 .../Projects}/Sounds/wav/FortressReel.wav | 0 .../Projects}/Sounds/wav/FortressReelLoop.wav | 0 .../Projects}/Sounds/wav/GetFucked.wav | 0 .../Projects}/Sounds/wav/HL2ButtonClick.wav | 0 .../Sounds/wav/HL2ButtonRollover.wav | 0 .../Projects}/Sounds/wav/Hitsound.wav | 0 .../Projects}/Sounds/wav/Hitsound3.wav | 0 .../Projects}/Sounds/wav/Hitsound4.wav | 0 .../Projects}/Sounds/wav/Hitsound5.wav | 0 .../Projects}/Sounds/wav/HitsoundBap.wav | 0 .../Projects}/Sounds/wav/HitsoundBoom.wav | 0 .../Projects}/Sounds/wav/HitsoundBubble.wav | 0 .../Projects}/Sounds/wav/HitsoundCasino3.wav | 0 .../Projects}/Sounds/wav/HitsoundDuck.wav | 0 .../Projects}/Sounds/wav/HitsoundHardbass.wav | 0 .../Sounds/wav/HitsoundMinecraft.wav | 0 .../Projects}/Sounds/wav/HitsoundOra.wav | 0 .../Projects}/Sounds/wav/HitsoundSqueak.wav | 0 .../Sounds/wav/HitsoundUltrakill.wav | 0 .../Sounds/wav/KillsoundHardbass.wav | 0 .../Projects}/Sounds/wav/KillsoundLego.wav | 0 .../Sounds/wav/KillsoundUltrakill.wav | 0 .../Projects}/Sounds/wav/MeetTheSniper.wav | 0 .../Projects}/Sounds/wav/Nemesis.wav | 0 .../Projects}/Sounds/wav/OOF.wav | 0 .../Projects}/Sounds/wav/OhNo.wav | 0 .../Projects}/Sounds/wav/POOT.wav | 0 .../Projects}/Sounds/wav/Piss.wav | 0 .../Projects}/Sounds/wav/Revenge.wav | 0 .../Projects}/Sounds/wav/Uncloak.wav | 0 .../Projects}/Sounds/wav/WeAreNumberOne.wav | 0 .../Sounds/wav/WeAreNumberOneFried.wav | 0 .../Projects}/Spam Begone.lua | 86 +- .../Projects}/Spell Charges/01.lua | 34 +- .../Projects}/Spell Charges/12.lua | 40 +- .../Projects}/Spell Charges/23.lua | 40 +- .../Projects}/Spotter/event.lua | 46 +- .../Projects}/Spotter/export | 0 .../Projects}/Spotter/init.lua | 110 +- .../Projects}/SpySatellite/event.lua | 6 +- .../Projects}/SpySatellite/event2.lua | 18 +- .../Projects}/SpySatellite/event3.lua | 24 +- .../Projects}/SpySatellite/init.lua | 204 +- .../Projects}/StinkyDetector/event.lua | 56 +- .../Projects}/StinkyDetector/event2.lua | 88 +- .../Projects}/StinkyDetector/export | 0 .../Projects}/StinkyDetector/init.lua | 80 +- .../Projects}/StinkyDetector/macro | 36 +- .../Projects}/StinkyDetector/trigger.lua | 4 +- {WIP => WeakAuras/Projects}/Swelter.lua | 58 +- {WIP => WeakAuras/Projects}/TODO.lua | 66 +- .../Projects}/TSU - DAI SPELL.lua | 114 +- .../TSU - EnemyPlayerHealth - CLEV.lua | 304 +- .../Projects}/TSU - EnemyPlayerHealth.lua | 284 +- .../Projects}/TSU - Explosives.lua | 172 +- .../Projects}/TSU - GroupConcordance.lua | 218 +- .../Projects}/TSU - HealerMana.lua | 198 +- .../Projects}/TSU - Item Monitor.lua | 74 +- .../Projects}/TSU - Jana do a spell.lua | 130 +- .../Projects}/TSU - PlayerEvaluator.lua | 154 +- .../Projects}/TSU - RepBars.lua | 94 +- .../Projects}/TSU - Shitty kara trinket.lua | 116 +- .../Projects}/TSU - Spell Alert.lua | 986 +- .../Projects}/TSU - Spells.lua | 798 +- .../Projects}/Tank Stack Alerts(UNTESTED).lua | 150 +- .../Projects}/Target TTD.lua | 86 +- .../Projects}/Taunt God.lua | 120 +- .../Legion => WeakAuras/Projects}/Taunt.lua | 116 +- .../Projects}/Titanguard.lua | 172 +- {WIP => WeakAuras/Projects}/ToDissect.lua | 1128 +- .../Projects}/Trinket Equip.lua | 122 +- .../Projects}/TrinketTest.lua | 50 +- .../UwowLadderboardScraper/event.lua | 58 +- .../Projects}/UwowLadderboardScraper/init.lua | 178 +- .../Projects}/Valentine's Charms.lua | 28 +- .../Projects}/Visp Bogec.lua | 232 +- .../Projects}/Warlock Artifact.lua | 32 +- .../Projects}/WarlockDispelMaster/event.lua | 30 +- .../Projects}/WarlockDispelMaster/event2.lua | 6 +- .../Projects}/WarlockDispelMaster/export | 0 .../Projects}/WarlockDispelMaster/init.lua | 152 +- .../Projects}/WhoSniffer/allstates.lua | 44 +- .../Projects}/WhoSniffer/event.lua | 128 +- .../Projects}/WhoSniffer/event2.lua | 66 +- .../Projects}/WhoSniffer/event3.lua | 26 +- .../Projects}/WhoSniffer/event4.lua | 32 +- .../Projects}/WhoSniffer/event5.lua | 52 +- .../Projects}/WhoSniffer/export | 0 .../Projects}/WhoSniffer/init.lua | 650 +- .../Projects}/WhoSniffer/plan.lua | 0 .../Projects}/_Autoruns/event.lua | 8 +- .../Projects}/_Autoruns/export | 0 .../Projects}/_Big ass hammer thing.lua | 56 +- .../Projects}/_GlobalSoundPlayer/event.lua | 12 +- .../Projects}/_GlobalTicker.lua | 22 +- .../Projects}/_GlobalTickers/event.lua | 26 +- .../Projects}/_GlobalTickers/export | 0 .../Projects}/_GlobalTickers/init.lua | 20 +- .../Projects}/_ReactiveValue/event.lua | 1360 +- .../Projects}/_ReactiveValue/export | 0 .../Projects}/_Shared/CLEUParser.lua | 2566 ++-- .../Projects}/_Shared/Colorer.lua | 128 +- .../Projects}/_Shared/Messenger.lua | 158 +- .../Projects}/_Shared/Messenger_Export | 0 .../__Ascension/Cooldowner/display.lua | 10 +- .../Projects}/__Ascension/Cooldowner/init.lua | 110 +- .../__Ascension/TooltipItemInfo/export | 0 .../__Ascension/TooltipItemInfo/init.lua | 42 +- .../__Ascension/TotemTicker/event.lua | 44 +- .../__Ascension/TotemTicker/init.lua | 4 +- .../Projects}/__Ascension/__Other/buffs | 0 .../Projects}/__Ascension/__Other/cooldowns | 0 .../Projects}/__Ascension/__Other/cursoricons | 0 .../Projects}/__Ascension/__Other/procs | 0 .../Projects}/hekilidisplay | 0 .../Snippets}/Add Strings.lua | 18 +- .../Snippets}/Adding text.lua | 22 +- .../Snippets}/Anchor to nameplate.lua | 10 +- .../Snippets}/Buttons.lua | 16 +- .../Snippets}/C_Timer.lua | 2 +- .../Snippets}/Class Colors.lua | 180 +- .../Snippets}/Click Buttons.lua | 4 +- .../Snippets}/Color Gradient.lua | 118 +- .../Snippets}/Date and Time.lua | 70 +- .../Snippets}/DefStack.lua | 12 +- .../Snippets}/Find Aura ID.lua | 20 +- .../Snippets}/FormatTime.lua | 22 +- .../Snippets}/Functions.lua | 6 +- .../Get Item Link from chat link.lua | 8 +- .../Snippets}/GetSpellWithCooldown.lua | 70 +- .../Snippets}/Hashing.lua | 202 +- {WA snippets => WeakAuras/Snippets}/IconPrint | 2 +- .../Snippets}/Jump God.lua | 2 +- .../Snippets}/NameplateGlow.lua | 16 +- .../Snippets}/New Texture and Anchor.lua | 34 +- .../Snippets}/Print Table.lua | 30 +- .../Snippets}/Reading Tooltips.lua | 22 +- .../Snippets}/Registers.lua | 168 +- {WA snippets => WeakAuras/Snippets}/Round.lua | 16 +- .../Snippets}/Shorten Number.lua | 40 +- .../Snippets}/Size to range.lua | 8 +- .../Snippets}/TableSort.lua | 44 +- .../Snippets}/Talent IDs.lua | 90 +- .../Snippets}/Text Frame.lua | 16 +- .../Snippets}/Timed Hide.lua | 6 +- {WA snippets => WeakAuras/Snippets}/ToHex.lua | 8 +- .../Snippets}/UnitBuff.lua | 20 +- .../Snippets}/UnitDebuffC.lua | 40 +- .../Snippets}/Weakaurs Useful Shit.lua | 6 +- .../Snippets}/wow this works.lua | 14 +- scratch.lua | 1 - 1595 files changed, 75381 insertions(+), 70006 deletions(-) delete mode 100644 AttackSpeedTest.lua delete mode 160000 Complete Projects/Legion/RaiderSA delete mode 100644 Complete Projects/trash/Button delete mode 100644 Complete Projects/trash/Cunting shit 2.lua delete mode 100644 Complete Projects/trash/Cunting shit.lua delete mode 100644 LegionWA/.gitignore delete mode 100644 Metadata for userdata!!.txt delete mode 100644 ModelResearch.lua delete mode 100644 Sort Array.lua rename {WA codes => WeakAuras/Exports}/BossHpNameplate (WA CODE).txt (100%) rename {WA codes => WeakAuras/Exports}/Bulwark of Order (WA CODE).txt (100%) rename {WA codes => WeakAuras/Exports}/Dumpy Fuckery(WA CODE).txt (100%) rename {WA codes => WeakAuras/Exports}/HoTP Heal bars(WA CODE).txt (100%) rename {WA codes => WeakAuras/Exports}/Holy Pala Crap (WA CODE).txt (99%) rename {WA codes => WeakAuras/Exports}/Hunter Focus (WA CODE).txt (99%) rename {WA codes => WeakAuras/Exports}/Icey bog(WA CODE).txt (100%) rename {WA codes => WeakAuras/Exports}/JulijaButtons(WA CODE).txt (100%) rename {WA codes => WeakAuras/Exports}/Necrotic Rot(WA CODE).txt (100%) rename {WA codes => WeakAuras/Exports}/Neki Bog(WA CODE).txt (100%) rename {WA codes => WeakAuras/Exports}/Prot Pala Crap (WA CODE).txt (100%) rename {WA codes => WeakAuras/Exports}/Prot pala CD popups (WA CODE).txt (100%) rename {WA codes => WeakAuras/Exports}/Prot pala CDS (WA CODE).txt (100%) rename {WA codes => WeakAuras/Exports}/Prydaz (WA CODE).txt (99%) rename {WA codes => WeakAuras/Exports}/Prydaz Bars (WA CODE).txt (100%) rename {WA codes => WeakAuras/Exports}/Random Number Crap (WA CODE).txt (100%) rename {WA codes => WeakAuras/Exports}/Rogue Sniffer 9000(WA CODE).txt (100%) rename {WA codes => WeakAuras/Exports}/Trinket procs (WA CODE).txt (100%) rename {Complete Projects/Legion => WeakAuras/Projects}/ABS.lua (97%) rename {NewAge => WeakAuras/Projects}/AHBot/AUCTION_HOUSE_BROWSE_RESULTS_UPDATED.lua (97%) rename {NewAge => WeakAuras/Projects}/AHBot/EveryFrameThrottled.lua (97%) rename {NewAge => WeakAuras/Projects}/AHBot/INIT.lua (97%) rename {NewAge => WeakAuras/Projects}/AHBot/Info.txt (98%) rename {FreshShit => WeakAuras/Projects}/Absorbs/color.lua (97%) rename {FreshShit => WeakAuras/Projects}/Absorbs/duration.lua (96%) rename {FreshShit => WeakAuras/Projects}/Absorbs/event.lua (95%) rename {FreshShit => WeakAuras/Projects}/Absorbs/export (100%) rename {FreshShit => WeakAuras/Projects}/Absorbs/init.lua (100%) rename {FreshShit => WeakAuras/Projects}/Absorbs/scratch.lua (95%) rename {FreshShit => WeakAuras/Projects}/Absorbs/text.lua (97%) rename {FreshShit => WeakAuras/Projects}/AchievementSniffer/event.lua (96%) rename {FreshShit => WeakAuras/Projects}/AchievementSniffer/event2.lua (97%) rename {FreshShit => WeakAuras/Projects}/AchievementSniffer/event3.lua (94%) rename {FreshShit => WeakAuras/Projects}/AchievementSniffer/event4.lua (95%) rename {FreshShit => WeakAuras/Projects}/AchievementSniffer/event4_variables.lua (90%) rename {FreshShit => WeakAuras/Projects}/AchievementSniffer/export (100%) rename {FreshShit => WeakAuras/Projects}/AchievementSniffer/info (97%) rename {FreshShit => WeakAuras/Projects}/AchievementSniffer/init.lua (93%) rename {FreshShit => WeakAuras/Projects}/AchievementSniffer/scratch.lua (95%) rename {Complete Projects/Legion => WeakAuras/Projects}/Achiv Inspector.lua (94%) rename {Complete Projects/Legion => WeakAuras/Projects}/Active Seeds.lua (95%) rename {FreshShit => WeakAuras/Projects}/AfkTimer/event.lua (96%) rename {FreshShit => WeakAuras/Projects}/AfkTimer/event2.lua (97%) rename {FreshShit => WeakAuras/Projects}/AfkTimer/event2duration.lua (98%) rename {FreshShit => WeakAuras/Projects}/AfkTimer/export (100%) rename {FreshShit => WeakAuras/Projects}/AfkTimer/init.lua (95%) rename {FreshShit => WeakAuras/Projects}/AfkTimer/trigger.lua (93%) rename {Complete Projects/Legion => WeakAuras/Projects}/AntorusQuestlineThing.lua (96%) rename {WIP => WeakAuras/Projects}/Atrigan Interrupt/Display.lua (97%) rename {WIP => WeakAuras/Projects}/Atrigan Interrupt/INIT.lua (96%) rename {WIP => WeakAuras/Projects}/Atrigan Interrupt/Libs.lua (97%) rename {WIP => WeakAuras/Projects}/Atrigan Interrupt/Trigger1.lua (97%) rename {WIP => WeakAuras/Projects}/Atrigan Interrupt/Trigger2.lua (96%) rename {WIP => WeakAuras/Projects}/Atrigan Interrupt/Trigger3.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/AutoAttackInterval.lua (97%) rename {FreshShit => WeakAuras/Projects}/AutoLoot/AutoLootDisplay/Event.lua (95%) rename {FreshShit => WeakAuras/Projects}/AutoLoot/AutoLootDisplay/Init.lua (96%) rename {FreshShit => WeakAuras/Projects}/AutoLoot/Event.lua (95%) rename {FreshShit => WeakAuras/Projects}/AutoLoot/Event2.lua (95%) rename {FreshShit => WeakAuras/Projects}/AutoLoot/Init.lua (96%) rename {FreshShit => WeakAuras/Projects}/AutoLoot/export (100%) rename {LegionWA => WeakAuras/Projects}/AutoQuest/Event.lua (97%) rename {LegionWA => WeakAuras/Projects}/AutoQuest/Export (100%) rename {FreshShit => WeakAuras/Projects}/AutoVendor/Event.lua (96%) rename {FreshShit => WeakAuras/Projects}/AutoVendor/Export (100%) rename {FreshShit => WeakAuras/Projects}/AutoVendor/Init.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/Autoloot.lua (97%) rename {NewAge => WeakAuras/Projects}/Automation/Eventz.lua (98%) rename {NewAge => WeakAuras/Projects}/Automation/INIT.lua (95%) rename {NewAge => WeakAuras/Projects}/Automation/LOOT_READY.lua (98%) rename {Complete Projects/Legion => WeakAuras/Projects}/Average Raid Health.lua (97%) rename {LegionWA => WeakAuras/Projects}/BagBoEGlow/Event.lua (94%) rename {LegionWA => WeakAuras/Projects}/BagBoEGlow/Init.lua (97%) rename {LegionWA => WeakAuras/Projects}/BagBoEGlow/README (97%) rename {FreshShit => WeakAuras/Projects}/BattlePassTimer/duration.lua (97%) rename {FreshShit => WeakAuras/Projects}/BattlePassTimer/event.lua (100%) rename {FreshShit => WeakAuras/Projects}/BattlePassTimer/event2.lua (94%) rename {FreshShit => WeakAuras/Projects}/BattlePassTimer/export (100%) rename {FreshShit => WeakAuras/Projects}/BattlePassTimer/init.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/Ben Paralytic.lua (96%) rename {WIP => WeakAuras/Projects}/Block.lua (95%) rename {Complete Projects/Legion => WeakAuras/Projects}/Boat Fish (Draenor).lua (95%) rename {Complete Projects/Legion => WeakAuras/Projects}/BossHpNameplate(VERY INEFFICIENT!!).lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/Bulwark of Order.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/Buttons.lua (97%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA Freakz/Grand Crusader Proc.lua (98%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA Freakz/RareAlert.lua (96%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Adding text to texture.lua (97%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Anna Arrow.lua (96%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Anna Trade.lua (95%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Autoloot.lua (97%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Azerite Power Energize.lua (95%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Block Ratio.lua (96%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Block and Absorb Melee.lua (97%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/CD.lua (97%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/CD2.lua (97%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Chat Macro (97%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Combat.lua (97%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Cooldown Gradient.lua (95%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Deepcoral Bud Glow.lua (97%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Dodge Bog.lua (96%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Drop Track/BAQS/BAQ farm.lua (96%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Drop Track/BAQS/BAQ nameplate.lua (96%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Drop Track/Follower Garbage/Garbage Nameplate.lua (96%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Drop Track/Follower Garbage/Garbage.lua (96%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Drop Track/STONES/Stone nameplates.lua (96%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Drop Track/STONES/Stone.lua (96%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Global Debug.lua (97%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Guild Spam.lua (98%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Icon Database Update.lua (98%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Ignite.lua (96%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Ignor Pain ALERT.lua (97%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Ignore Pain.lua (96%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Kindling.lua (97%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Loot List.lua (95%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Map.lua (97%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Mob Highlight.lua (96%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Null Barrier.lua (96%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Quest Fuckery.lua (95%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Rare Tracc.lua (97%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Reset Custom Variable.lua (95%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/SCT ABANDONED.lua (96%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Saved/TSU - Combat HP Bars (100%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Saved/Warrior CDs (100%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Saved/Warrior Rage (100%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Second Wind.lua (94%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/SetupChat.lua (97%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Shield Block.lua (97%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Slabhide Farm.lua (97%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Stat Recap.lua (98%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Stun Counter.lua (96%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Stun Recap.lua (96%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/TSU - Combat HP Bars.lua (96%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/TSU - Enemy Health.lua (96%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/TSU - Enemy Nameplates Maybe.lua (97%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/TSU - Herb Icons.lua (95%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/TSU - Loot Window.lua (95%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/TSU - Loot.lua (96%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/TSU - Spell Alert.lua (95%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Tank Taunt UNTESTED.lua (97%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Taunt Cunt UNFINISHED.lua (95%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Taunterino.lua (98%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/UnitDebuff.lua (96%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Vaultbot Beep.lua (97%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Whoa/CTRL c to copy wowhead link to quest.lua (96%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Whoa/Events.lua (100%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Whoa/Nnoga's Hide Guild Chat.lua (97%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/Withdraw Guild Bank.lua (96%) rename {Complete Projects => WeakAuras/Projects/ByExp}/BFA/__GOOD SHIT (100%) rename {Complete Projects => WeakAuras/Projects/ByExp}/Classic/Warrior Heroic Strike.lua (96%) rename {Complete Projects => WeakAuras/Projects/ByExp}/Classic/Warrior Rage.lua (97%) rename {Complete Projects => WeakAuras/Projects/ByExp}/Fivver Stuff/Aura Uptime.lua (97%) rename {Complete Projects => WeakAuras/Projects/ByExp}/Fivver Stuff/Buff Me Daddy.lua (97%) rename {Complete Projects => WeakAuras/Projects/ByExp}/Fivver Stuff/FO1B8D1F40B6 - Conductive Ink.lua (97%) rename {Complete Projects => WeakAuras/Projects/ByExp}/Fivver Stuff/FO1F38C4D1A8 - Magus Portals.lua (96%) rename {Complete Projects => WeakAuras/Projects/ByExp}/Fivver Stuff/FO2BF89E3995 - Warrior Stuff.lua (96%) rename {Complete Projects => WeakAuras/Projects/ByExp}/Fivver Stuff/FO2C01B46B55 - Monk Tutor.lua (96%) rename {Complete Projects => WeakAuras/Projects/ByExp}/Fivver Stuff/FO3BCAB05F84 - Magus Portals.lua (96%) rename {Complete Projects => WeakAuras/Projects/ByExp}/Fivver Stuff/FO3BE740D804 - BG Q.lua (98%) rename {Complete Projects => WeakAuras/Projects/ByExp}/Fivver Stuff/FO3BE740D804 - Magus Portals.lua (97%) rename {Complete Projects => WeakAuras/Projects/ByExp}/Fivver Stuff/FO4DBEE93B84 - Raid Scan Frames.lua (97%) rename {Complete Projects => WeakAuras/Projects/ByExp}/Fivver Stuff/FO4DBEE93B84 - Raid Scan.lua (97%) rename {Complete Projects => WeakAuras/Projects/ByExp}/Fivver Stuff/FO5A22680021 - Druid Stuff.lua (97%) rename {Complete Projects => WeakAuras/Projects/ByExp}/Fivver Stuff/FO815D7649125 - Swing Timer.lua (97%) rename {Complete Projects => WeakAuras/Projects/ByExp}/Fivver Stuff/FO815F92E76D5 - Combat Timer.lua (98%) rename {Complete Projects => WeakAuras/Projects/ByExp}/Fivver Stuff/Fiverr - Conductive Ink.lua (97%) rename {Complete Projects => WeakAuras/Projects/ByExp}/Fivver Stuff/Fiverr - Conductive Ink2.lua (97%) rename {Complete Projects => WeakAuras/Projects/ByExp}/Fivver Stuff/Fivver - DK Festering Wounds.lua (97%) rename {Complete Projects => WeakAuras/Projects/ByExp}/Fivver Stuff/Fivver Druid Stuff.lua (98%) rename {Complete Projects => WeakAuras/Projects/ByExp}/Fivver Stuff/Fivver Loot Logging.lua (97%) rename {Complete Projects => WeakAuras/Projects/ByExp}/Fivver Stuff/RaidTranqShot.lua (96%) rename {Complete Projects => WeakAuras/Projects/ByExp}/Fivver Stuff/Spellbook cooldowns and talent cooldowns/GeneralStuff.txt (100%) rename {Complete Projects => WeakAuras/Projects/ByExp}/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Instructions.txt (98%) rename {Complete Projects => WeakAuras/Projects/ByExp}/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Other stuff.lua (95%) rename {Complete Projects => WeakAuras/Projects/ByExp}/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Spellbook Cooldowns.lua (97%) rename {Complete Projects => WeakAuras/Projects/ByExp}/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Spellbook Scan.lua (97%) rename {Complete Projects => WeakAuras/Projects/ByExp}/Fivver Stuff/Spellbook cooldowns and talent cooldowns/SpellbookCooldowns.txt (100%) rename {Complete Projects => WeakAuras/Projects/ByExp}/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Talent Cooldowns.lua (96%) rename {Complete Projects => WeakAuras/Projects/ByExp}/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Talent Scan.lua (97%) rename {Complete Projects => WeakAuras/Projects/ByExp}/Fivver Stuff/Spellbook cooldowns and talent cooldowns/TalentCooldowns.txt (100%) rename {LegionWA => WeakAuras/Projects}/CDs/Color.lua (96%) rename {LegionWA => WeakAuras/Projects}/CDs/Event.lua (96%) rename {LegionWA => WeakAuras/Projects}/CDs/Init.lua (96%) rename {FreshShit => WeakAuras/Projects}/CLEUSaver/event.lua (96%) rename {FreshShit => WeakAuras/Projects}/CLEUSaver/export (100%) rename {FreshShit => WeakAuras/Projects}/CLEUSaver/init.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/CachedNPCLevels.lua (100%) rename {NewAge => WeakAuras/Projects}/CataAuraBar/CustomOptions.lua (96%) rename {NewAge => WeakAuras/Projects}/CataAuraBar/CustomText.lua (96%) rename {NewAge => WeakAuras/Projects}/CataAuraBar/Export (100%) rename {NewAge => WeakAuras/Projects}/CataAuraBar/INIT.lua (96%) rename {NewAge => WeakAuras/Projects}/CataAuraBar/INIT_BFA.lua (96%) rename {NewAge => WeakAuras/Projects}/CataAuraBar/README.md (96%) rename {NewAge => WeakAuras/Projects}/CataAuraBar/TSU.lua (95%) rename {Complete Projects/Legion => WeakAuras/Projects}/Celestial Map.lua (97%) rename {FreshShit => WeakAuras/Projects}/ChannelDinger/event.lua (96%) rename {FreshShit => WeakAuras/Projects}/ChannelDinger/export (100%) rename {FreshShit => WeakAuras/Projects}/ChannelDinger/init.lua (97%) rename {FreshShit => WeakAuras/Projects}/ChannelJoiner/event.lua (96%) rename {FreshShit => WeakAuras/Projects}/ChannelJoiner/export (100%) rename {FreshShit => WeakAuras/Projects}/ChannelJoiner/init.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/Chat !.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/Chat.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/ChatFilter.lua (96%) rename {FreshShit => WeakAuras/Projects}/ChatKeyScanner/event.lua (100%) rename {FreshShit => WeakAuras/Projects}/ChatKeyScanner/export (100%) rename {FreshShit => WeakAuras/Projects}/ChatKeyScanner/init.lua (100%) rename {Complete Projects/Legion => WeakAuras/Projects}/ClassMissChance.lua (98%) rename {Complete Projects/Legion => WeakAuras/Projects}/CombatLogFindClass.lua (96%) rename {FreshShit => WeakAuras/Projects}/CombopointFlasher/display.lua (95%) rename {FreshShit => WeakAuras/Projects}/CombopointFlasher/event.lua (96%) rename {FreshShit => WeakAuras/Projects}/CombopointFlasher/export (100%) rename {Complete Projects/Legion => WeakAuras/Projects}/Concordance.lua (97%) rename {LegionWA => WeakAuras/Projects}/CooldownAlert/Event.lua (96%) rename {LegionWA => WeakAuras/Projects}/CooldownAlert/Export (100%) rename {LegionWA => WeakAuras/Projects}/CooldownAlert/Init.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/CooldownAnnouncer.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/Cross Char Quota.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/DAI KEY 2.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/DAI KEY.lua (97%) rename {NewAge => WeakAuras/Projects}/DHRogueSniffer/sniffer.lua (100%) rename {Complete Projects/Legion => WeakAuras/Projects}/DK Bone Shield Stacks.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/DPS HPS.lua (97%) rename {NewAge => WeakAuras/Projects}/DamageIntake/export (100%) rename {NewAge => WeakAuras/Projects}/DamageIntake/init.lua (100%) rename {NewAge => WeakAuras/Projects}/DamageIntake/trigger.lua (100%) rename {NewAge => WeakAuras/Projects}/DamageIntake/vars.lua (100%) rename {Complete Projects/Legion => WeakAuras/Projects}/Dangerous Spells!.lua (97%) rename {WIP => WeakAuras/Projects}/Dargul Timer(UNTESTED).lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/DavyStone.lua (98%) rename {Complete Projects/Legion => WeakAuras/Projects}/DavyStone2.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/DeathTrack.lua (96%) rename {LegionWA => WeakAuras/Projects}/DebuffAlert/Event.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/Delete Items.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/DickRiderCounter.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/Divine Purpose Procs.lua (96%) rename {LegionWA => WeakAuras/Projects}/DruidEnergyBar/Export (100%) rename {Complete Projects/Legion => WeakAuras/Projects}/Drums.lua (96%) rename {FreshShit => WeakAuras/Projects}/DuelerAccepter/event.lua (100%) rename {FreshShit => WeakAuras/Projects}/DuelerAccepter/init.lua (100%) rename {Complete Projects/Legion => WeakAuras/Projects}/EHP.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/Easter Achiv Bullshit.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/ElwynnForestSpam.lua (98%) rename {Complete Projects/Legion => WeakAuras/Projects}/Emote on Friendlies.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/Emotebot.lua (97%) rename {NewAge => WeakAuras/Projects}/EquipmentManager/INIT.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/Fevered Carapace.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/Fish.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/Focus Thing.lua (96%) rename {FreshShit => WeakAuras/Projects}/FriendTracker/event.lua (95%) rename {FreshShit => WeakAuras/Projects}/FriendTracker/event2.lua (93%) rename {FreshShit => WeakAuras/Projects}/FriendTracker/export (100%) rename {FreshShit => WeakAuras/Projects}/FriendTracker/init.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/Friendlist.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/Full House.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/GMCommandsResearch(.add).lua (98%) rename {Complete Projects/Legion => WeakAuras/Projects}/GPS.lua (94%) rename {Complete Projects/Legion => WeakAuras/Projects}/GUIDSniffer.lua (95%) rename {Complete Projects/Legion => WeakAuras/Projects}/Glowing Raid Frames.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/Group Breakdown.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/GuildRecap.lua (95%) rename {Complete Projects/Legion => WeakAuras/Projects}/GuildWave.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/Hammers n Shields.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/HealerDispels.lua (97%) rename {LegionWA => WeakAuras/Projects}/HealerRaidDanger/color.lua (97%) rename {LegionWA => WeakAuras/Projects}/HealerRaidDanger/init.lua (96%) rename {LegionWA => WeakAuras/Projects}/HealerRaidDanger/tsu.lua (94%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Counter 2.0.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Counter.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Quota.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/0.5/Direction.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/0.5/Distance.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/0.5/Herb Arrays Legion.lua (93%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/2.0/Direction.lua (94%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/Direction.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/Distance.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/Herb Arrays Legion.lua (94%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/Herb Arrays/All Ores.lua (92%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/Herb Arrays/ArgusWeed.lua (92%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/Herb Arrays/Herbalism/Aethril.lua (92%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/Herb Arrays/Herbalism/Azshara's Veil.lua (93%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/Herb Arrays/Herbalism/Cinderbloom.lua (93%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/Herb Arrays/Herbalism/Dreamleaf.lua (92%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/Herb Arrays/Herbalism/Fel Herbs.lua (93%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/Herb Arrays/Herbalism/Fjarnskaggl.lua (92%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/Herb Arrays/Herbalism/Foxflower.lua (92%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/Herb Arrays/Herbalism/Icecap And Silversage.lua (92%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/Herb Arrays/Herbalism/Icecap.lua (92%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/Herb Arrays/Herbalism/Roses.lua (92%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/Herb Arrays/Herbalism/Silversage.lua (93%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/Herb Arrays/Mining/Cobalt - Dragonblight.lua (93%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/Herb Arrays/Mining/Cobalt - Howling Fjord.lua (92%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/Herb Arrays/Mining/Cobalt - Rich - Zul'Drak.lua (93%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/Herb Arrays/Mining/Cobalt - Zul'Drak.lua (93%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate Seam(Highmountain).lua (92%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate Seam(Suramar).lua (92%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate Total.lua (92%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate.lua (93%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/Herb Arrays/Mining/Leystone/Leystone Deposit.lua (93%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/Herb Arrays/Mining/Leystone/Leystone Total.lua (92%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/Herb Arrays/Mining/Leystone/Rich Leystone Deposit.lua (92%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/Herb Arrays/Mining/Titanium.lua (93%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/Herb Arrays/Misc/Anna dogs.lua (93%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/Herb Arrays/Noblegarden/Durotar.lua (93%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/Herb Arrays/Noblegarden/Eversong Woods.lua (93%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/Herb Arrays/Noblegarden/Mulgore.lua (93%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/Herb Arrays/Noblegarden/Tirisfal Glades.lua (93%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/Herb Arrays/Noblegarden/Waypoints (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/Herb Arrays/Skinning/Some apes.lua (93%) rename {Complete Projects/Legion => WeakAuras/Projects}/Herb Sniffer/Herb Arrays/Thing (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/Highfathers.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/HoTP heal bars/1.0/HP1.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/HoTP heal bars/1.0/HP2.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/HoTP heal bars/2.0/HP1 2.0.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/HoTP heal bars/2.0/HP2 2.0.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/HoTP heal bars/3.0/AAAAAA.txt (99%) rename {Complete Projects/Legion => WeakAuras/Projects}/HoTP heal bars/3.0/HP1 3.0.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/HoTP heal bars/3.0/HP2 3.0.lua (93%) rename {Complete Projects/Legion => WeakAuras/Projects}/Holy Shield.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/HowDead.lua (95%) rename {WIP => WeakAuras/Projects}/Hydra Shot 2.lua (97%) rename {WIP => WeakAuras/Projects}/Hydra Shot.lua (97%) rename {WIP => WeakAuras/Projects}/Icey AP/C AP.lua (96%) rename {WIP => WeakAuras/Projects}/Icey AP/Cast AP.lua (97%) rename {WIP => WeakAuras/Projects}/Icey AP/Pred AP.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/Ignore Alliance.lua (95%) rename {Complete Projects/Legion => WeakAuras/Projects}/Ilterendi Uptime.lua (96%) rename {FreshShit => WeakAuras/Projects}/Incoming/export (100%) rename {FreshShit => WeakAuras/Projects}/Incoming/sct (100%) rename {Complete Projects/Legion => WeakAuras/Projects}/Init.lua (95%) rename {Complete Projects/Legion => WeakAuras/Projects}/Innervate on Whisper.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/InspectIlvl.lua (95%) rename {Complete Projects/Legion => WeakAuras/Projects}/Ironfur.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/JanaPullTimer.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/Judgment of Light DebuffConsumedPerSecond.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/Judgment of Light.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/Judgment of Light/AP.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/Judgment of Light/Background.lua (95%) rename {Complete Projects/Legion => WeakAuras/Projects}/Judgment of Light/CODE.txt (100%) rename {Complete Projects/Legion => WeakAuras/Projects}/Judgment of Light/Current AP.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/Juked.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/KeyGlow.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/Kill - Wipe counter.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/KoSList.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/Last n Melee.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/Last n Spells.lua (96%) rename {WIP => WeakAuras/Projects}/Last n spells cast.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/Leggo Sniffer.lua (95%) rename {Complete Projects/Legion => WeakAuras/Projects}/List the bois.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/Loot Filter.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/Maiden Color Assignment.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/Members Alive.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/Misdirect God.lua (98%) rename {Complete Projects/Legion => WeakAuras/Projects}/Misdirect.lua (98%) rename {Complete Projects/Legion => WeakAuras/Projects}/Mistress Fuckery.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/Mitigation.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/Mob Kill Counter.lua (95%) rename {WIP => WeakAuras/Projects}/Nameplate HP Sort.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/NameplateAchivTest.lua (96%) rename {NewAge => WeakAuras/Projects}/NameplateInfo/Hostility.lua (100%) rename {LegionWA => WeakAuras/Projects}/NearbyPlayers/Event.lua (96%) rename {LegionWA => WeakAuras/Projects}/NearbyPlayers/Init.lua (95%) rename {Complete Projects/Legion => WeakAuras/Projects}/Necrotic Rot.lua (95%) rename {Complete Projects/Legion => WeakAuras/Projects}/Nightwell Energy/Background.lua (95%) rename {Complete Projects/Legion => WeakAuras/Projects}/Nightwell Energy/CODE.txt (100%) rename {Complete Projects/Legion => WeakAuras/Projects}/Nightwell Energy/Shield.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/Nightwell Energy/Stacks.lua (95%) rename {Complete Projects/Legion => WeakAuras/Projects}/Nightwell Energy/Text.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/Nightwell Energy/Todo (98%) rename {NewAge => WeakAuras/Projects}/NullBarrier/CLEU1.lua (97%) rename {NewAge => WeakAuras/Projects}/NullBarrier/CLEU2.lua (97%) rename {NewAge => WeakAuras/Projects}/NullBarrier/CustomDuration1.lua (96%) rename {NewAge => WeakAuras/Projects}/NullBarrier/CustomDuration2.lua (96%) rename {NewAge => WeakAuras/Projects}/NullBarrier/Export (100%) rename {NewAge => WeakAuras/Projects}/NullBarrier/INIT1.lua (94%) rename {NewAge => WeakAuras/Projects}/NullBarrier/INIT2.lua (94%) rename {NewAge => WeakAuras/Projects}/NullBarrier/Text1.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/OneSecondTicker.lua (97%) rename {FreshShit => WeakAuras/Projects}/OreCamper/event.lua (97%) rename {FreshShit => WeakAuras/Projects}/OreCamper/event2.lua (96%) rename {FreshShit => WeakAuras/Projects}/OreCamper/export (99%) rename {FreshShit => WeakAuras/Projects}/OreCamper/init.lua (96%) rename {NewAge => WeakAuras/Projects}/OverallAbsorbs/Export.txt (100%) rename {NewAge => WeakAuras/Projects}/OverallAbsorbs/INIT.lua (94%) rename {Complete Projects/Legion => WeakAuras/Projects}/PPM.lua (95%) rename {FreshShit => WeakAuras/Projects}/PersonalAnnouncer/event.lua (96%) rename {FreshShit => WeakAuras/Projects}/PersonalAnnouncer/export (100%) rename {FreshShit => WeakAuras/Projects}/PersonalAnnouncer/init.lua (96%) rename {WIP => WeakAuras/Projects}/Premade Automation.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/Premade Groups.lua (96%) rename {NewAge => WeakAuras/Projects}/PrimaryStatBar/CLEU.lua (97%) rename {NewAge => WeakAuras/Projects}/PrimaryStatBar/CustomDuration.lua (97%) rename {NewAge => WeakAuras/Projects}/PrimaryStatBar/Export.txt (100%) rename {NewAge => WeakAuras/Projects}/PrimaryStatBar/INIT.lua (95%) rename {Complete Projects/Legion => WeakAuras/Projects}/Prydaz.lua (96%) rename {FreshShit => WeakAuras/Projects}/PrydazBar/event.lua (95%) rename {FreshShit => WeakAuras/Projects}/PrydazBar/export (100%) rename {Complete Projects/Legion => WeakAuras/Projects}/PrydazOLD.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/PrydazTimer.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/PullTimer.lua (98%) rename {Complete Projects/Legion => WeakAuras/Projects}/QuestSyncer.lua (97%) rename {FreshShit => WeakAuras/Projects}/RIOChecker/display.lua (95%) rename {FreshShit => WeakAuras/Projects}/RIOChecker/event.lua (97%) rename {FreshShit => WeakAuras/Projects}/RIOChecker/event2.lua (97%) rename {FreshShit => WeakAuras/Projects}/RIOChecker/export (100%) rename {FreshShit => WeakAuras/Projects}/RIOChecker/init.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/Raid Frame Glow.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/Raid Rolls.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/Raid loot DOESNT WORK.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/RaidCDs.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/RaidCooldownAlert.lua (96%) create mode 100644 WeakAuras/Projects/RaiderSA/.gitignore create mode 100644 WeakAuras/Projects/RaiderSA/buildscript/main.js create mode 100644 WeakAuras/Projects/RaiderSA/buildscript/package.json create mode 100644 WeakAuras/Projects/RaiderSA/buildscript/words2luaArr.js create mode 100644 WeakAuras/Projects/RaiderSA/deploy.sh create mode 100644 WeakAuras/Projects/RaiderSA/info.txt create mode 100644 WeakAuras/Projects/RaiderSA/luaarr.lua create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Annihilation.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Arcane Blitz.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Arcane Slicer.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Arcing Bolt.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Arrow Barrage.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Bellowing Roar.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Bile Breath.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Blinding Glare.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Bone Chilling Scream.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Bonebreaking Strike.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Bound.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Brackwater Barrage.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Breath of Corruption.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Brutal Assault.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Brutal Haymaker.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Burning Blast.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Burning Leg Sweep.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Carnage.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Ceaseless Winter.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Celerity Zone.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Chaotic Energy.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Chaotic Shadows.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Chaotic Tempest.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Charged Blasts.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Charged Smash.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Charging Station.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Chilled Blood.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Claw Frenzy.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Collapsing World.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Cone of Death.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Consume Magic.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Consuming Sphere.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Cosmic Scythe.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Dark Mending.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Deafening Screech.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Debilitating Shout.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Decimation.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Demolish.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Demonic Ascension.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Demonic Mending.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Demonic Upheaval.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Demoralizing Shout.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Desolate Gaze.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Detonating Moonglaive.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Diabolic Bomb.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Dinner Bell.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Disintegrate.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Disintegration Beam.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Drain Magic.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Drain.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Dread Inferno.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Echoes of Doom.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Empowered Flame Rend.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Empowered Flare.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Empowered Pulse Grenade.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Empowered Shock Lance.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Empowered Shrapnel Blast.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Enflame Corruption.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Entropic Mine.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Eradication.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Evocation.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Expel Light.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Eye Storm.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Eye of the Storm.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Feed on the Weak.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Fel Bombardment.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Fel Breath.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Fel Detonation.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Fel Fireball.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Fel Mortar.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Felblaze Orb.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Felsoul Cleave.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Fiery Strike.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Flame Rend.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Flame Wreath.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Flare.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Flashlight.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Floral Fulmination.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Focused Lightning.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Foe Braker.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Forging Strike.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Fragment.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Frostbite.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Hateful Gaze.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Hatred.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Healing Touch.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Heat Wave.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Hinder.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Holy Radiance.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Horn of Valor.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Inferno Bolt.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Intangible Presence.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Iron Whirlwind.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Kara Kazham.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Knife Dance.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Landslide.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Lantern of Darkness.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Lava Wreath.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Leech Life.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Lifebloom.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Lightning Breath.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Lingering Gaze.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Maddening Roar.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Magic Magnificent.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Mana Fang.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Marked Prey.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Mass Repentance.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Meteor.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Mighty Slam.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Misery.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Molten Crash.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Molten Touch.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Mortal Strike.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Necrotic Embrace.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Nether Venom.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Nightmares.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Nullification.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Overcharge Mana.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Penetrating Shot.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Phase Breach.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Piercing Gale.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Piercing Missiles.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Piercing Shards.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Polymorh Fish.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Prophecies of Doom.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Pulse Grenade.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Quarantine.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Quelling Strike.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Radiant Tempest.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Ragnarok.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Rampage.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Rapid Rupture.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Ravenous Blaze.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Razor Shards.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Reality Tear.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Reap Soul.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Rejuvenating Waters.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Rejuvenation.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Reverberating Strike.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Roiling Storm.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Ruiner.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Rune of Healing.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Runic Band.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Sacred Ground.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Sacrifice Soul.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Sanctify.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Sandstorm.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Scornful Gaze.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Screams of the Dead.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Sea Legs.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Seal Magic.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Sever.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Severe Dusting.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Shackles of Servitude.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Shadow Blades.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Shadow Bolt Volley.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Shadow Crash.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Shadow Rejuvenation.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Shadow Strike.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Shadow Sweep.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Shadow Wall.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Shared Suffering.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Shield of Light.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Shivan Pact.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Shock Lance.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Shockwave.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Siphon Corruption.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Six Pound Barrel.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Sleep Canister.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Slicing Maelstrom.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Soul Echoes.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Soulblight.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Soulbomb.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Sound Alarm.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Spear of Light.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Spiked Tongue.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Spray Sand.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Stasis Trap.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Static Nova.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Stone Gaze.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Streetsweeper.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Strike Down.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Sultry Heat.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Summon Reinforcements.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Summon Volatile Energy.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Sunder.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Surge.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Swirling Scythe.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Tangled Web.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Teleport.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Thundering Stomp.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Thunderstrike.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Torrent.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Tortured Rage.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Turn Kick.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Unleash Fury.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Unnerving Screech.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Unruly Yell.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Unstable Mana.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Vengeful Shear.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Venom Storm.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Vile Roots.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Wake of Flame.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Whirling Edge.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Whirling Saber.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Wicked Dagger.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Wicked Slam.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/animegirl/Will Breaker.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Annihilation.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Arcane Blitz.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Arcane Slicer.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Arcing Bolt.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Arrow Barrage.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Bellowing Roar.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Bile Breath.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Blinding Glare.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Bone Chilling Scream.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Bonebreaking Strike.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Bound.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Brackwater Barrage.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Breath of Corruption.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Brutal Assault.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Brutal Haymaker.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Burning Blast.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Burning Leg Sweep.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Carnage.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Ceaseless Winter.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Celerity Zone.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Chaotic Energy.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Chaotic Shadows.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Chaotic Tempest.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Charged Blasts.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Charged Smash.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Charging Station.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Chilled Blood.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Claw Frenzy.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Collapsing World.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Cone of Death.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Consume Magic.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Consuming Sphere.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Cosmic Scythe.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Dark Fissure.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Dark Mending.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Deafening Screech.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Debilitating Shout.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Decimation.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Demolish.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Demonic Ascension.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Demonic Mending.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Demonic Upheaval.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Demoralizing Shout.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Desolate Gaze.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Detonating Moonglaive.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Diabolic Bomb.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Dinner Bell.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Disintegrate.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Disintegration Beam.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Drain Magic.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Drain.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Dread Inferno.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Echoes of Doom.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Empowered Flame Rend.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Empowered Flare.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Empowered Pulse Grenade.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Empowered Shock Lance.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Empowered Shrapnel Blast.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Enflame Corruption.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Entropic Mine.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Eradication.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Evocation.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Expel Light.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Eye Storm.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Eye of the Storm.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Feed on the Weak.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Fel Bombardment.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Fel Breath.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Fel Detonation.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Fel Fireball.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Fel Mortar.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Felblaze Orb.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Felsoul Cleave.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Felstorm Barrage.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Fiery Strike.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Flame Rend.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Flame Wreath.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Flare.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Flashlight.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Floral Fulmination.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Focused Lightning.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Foe Braker.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Forging Strike.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Fragment.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Frostbite.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Hateful Gaze.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Hatred.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Healing Touch.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Heat Wave.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Hinder.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Holy Radiance.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Horn of Valor.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Inferno Bolt.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Intangible Presence.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Iron Whirlwind.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Kara Kazham.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Knife Dance.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Landslide.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Lantern of Darkness.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Lava Wreath.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Leech Life.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Lifebloom.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Lightning Breath.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Lingering Gaze.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Maddening Roar.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Magic Magnificent.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Mana Fang.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Marked Prey.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Mass Repentance.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Meteor.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Mighty Slam.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Misery.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Molten Crash.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Molten Touch.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Mortal Strike.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Necrotic Embrace.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Nether Venom.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Nightmares.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Nullification.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Overcharge Mana.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Penetrating Shot.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Phase Breach.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Piercing Gale.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Piercing Missiles.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Piercing Shards.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Polymorh Fish.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Prophecies of Doom.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Pulse Grenade.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Quarantine.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Quelling Strike.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Radiant Tempest.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Ragnarok.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Rampage.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Rapid Rupture.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Ravenous Blaze.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Razor Shards.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Reality Tear.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Reap Soul.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Rejuvenating Waters.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Rejuvenation.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Reverberating Strike.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Roiling Storm.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Ruiner.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Rune of Healing.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Runic Band.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Sacred Ground.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Sacrifice Soul.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Sanctify.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Sandstorm.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Scornful Gaze.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Screams of the Dead.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Sea Legs.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Seal Magic.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Sever.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Severe Dusting.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Shackles of Servitude.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Shadow Blades.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Shadow Bolt Volley.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Shadow Crash.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Shadow Rejuvenation.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Shadow Strike.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Shadow Sweep.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Shadow Wall.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Shared Suffering.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Shield of Light.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Shivan Pact.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Shock Lance.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Shockwave.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Siphon Corruption.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Six Pound Barrel.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Sleep Canister.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Slicing Maelstrom.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Soul Echoes.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Soulblight.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Soulbomb.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Sound Alarm.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Spear of Light.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Spiked Tongue.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Spray Sand.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Stasis Trap.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Static Nova.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Stone Gaze.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Streetsweeper.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Strike Down.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Sultry Heat.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Summon Reinforcements.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Summon Volatile Energy.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Sunder.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Surge.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Swirling Scythe.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Tangled Web.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Teleport.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Thundering Stomp.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Thunderstrike.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Torrent.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Tortured Rage.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Turn Kick.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Unleash Fury.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Unnerving Screech.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Unruly Yell.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Unstable Mana.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Vengeful Shear.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Venom Storm.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Vile Roots.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Wake of Flame.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Whirling Edge.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Whirling Saber.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Wicked Dagger.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Wicked Slam.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/genericfemale/Will Breaker.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Annihilation.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Arcane Blitz.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Arcane Slicer.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Arcing Bolt.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Arrow Barrage.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Bellowing Roar.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Bile Breath.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Blinding Glare.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Bone Chilling Scream.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Bonebreaking Strike.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Bound.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Brackwater Barrage.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Breath of Corruption.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Brutal Assault.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Brutal Haymaker.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Burning Blast.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Burning Leg Sweep.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Carnage.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Ceaseless Winter.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Celerity Zone.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Chaotic Energy.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Chaotic Shadows.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Chaotic Tempest.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Charged Blasts.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Charged Smash.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Charging Station.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Chilled Blood.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Claw Frenzy.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Collapsing World.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Cone of Death.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Consume Magic.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Consuming Sphere.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Cosmic Scythe.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Dark Mending.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Deafening Screech.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Debilitating Shout.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Decimation.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Demolish.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Demonic Ascension.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Demonic Mending.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Demonic Upheaval.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Demoralizing Shout.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Desolate Gaze.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Detonating Moonglaive.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Diabolic Bomb.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Dinner Bell.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Disintegrate.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Disintegration Beam.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Drain Magic.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Drain.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Dread Inferno.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Echoes of Doom.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Empowered Flame Rend.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Empowered Flare.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Empowered Pulse Grenade.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Empowered Shock Lance.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Empowered Shrapnel Blast.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Enflame Corruption.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Entropic Mine.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Eradication.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Evocation.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Expel Light.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Eye Storm.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Eye of the Storm.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Feed on the Weak.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Fel Bombardment.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Fel Breath.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Fel Detonation.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Fel Fireball.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Fel Mortar.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Felblaze Orb.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Felsoul Cleave.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Fiery Strike.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Flame Rend.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Flame Wreath.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Flare.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Flashlight.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Floral Fulmination.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Focused Lightning.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Foe Braker.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Forging Strike.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Fragment.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Frostbite.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Hateful Gaze.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Hatred.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Healing Touch.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Heat Wave.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Hinder.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Holy Radiance.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Horn of Valor.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Inferno Bolt.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Intangible Presence.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Iron Whirlwind.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Kara Kazham.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Knife Dance.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Landslide.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Lantern of Darkness.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Lava Wreath.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Leech Life.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Lifebloom.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Lightning Breath.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Lingering Gaze.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Maddening Roar.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Magic Magnificent.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Mana Fang.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Marked Prey.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Mass Repentance.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Meteor.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Mighty Slam.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Misery.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Molten Crash.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Molten Touch.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Mortal Strike.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Necrotic Embrace.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Nether Venom.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Nightmares.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Nullification.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Overcharge Mana.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Penetrating Shot.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Phase Breach.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Piercing Gale.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Piercing Missiles.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Piercing Shards.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Polymorh Fish.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Prophecies of Doom.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Pulse Grenade.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Quarantine.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Quelling Strike.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Radiant Tempest.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Ragnarok.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Rampage.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Rapid Rupture.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Ravenous Blaze.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Razor Shards.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Reality Tear.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Reap Soul.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Rejuvenating Waters.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Rejuvenation.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Reverberating Strike.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Roiling Storm.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Ruiner.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Rune of Healing.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Runic Band.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Sacred Ground.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Sacrifice Soul.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Sanctify.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Sandstorm.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Scornful Gaze.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Screams of the Dead.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Sea Legs.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Seal Magic.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Sever.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Severe Dusting.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Shackles of Servitude.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Shadow Blades.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Shadow Bolt Volley.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Shadow Crash.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Shadow Rejuvenation.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Shadow Strike.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Shadow Sweep.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Shadow Wall.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Shared Suffering.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Shield of Light.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Shivan Pact.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Shock Lance.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Shockwave.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Siphon Corruption.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Six Pound Barrel.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Sleep Canister.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Slicing Maelstrom.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Soul Echoes.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Soulblight.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Soulbomb.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Sound Alarm.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Spear of Light.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Spiked Tongue.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Spray Sand.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Stasis Trap.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Static Nova.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Stone Gaze.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Streetsweeper.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Strike Down.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Sultry Heat.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Summon Reinforcements.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Summon Volatile Energy.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Sunder.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Surge.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Swirling Scythe.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Tangled Web.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Teleport.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Thundering Stomp.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Thunderstrike.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Torrent.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Tortured Rage.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Turn Kick.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Unleash Fury.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Unnerving Screech.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Unruly Yell.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Unstable Mana.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Vengeful Shear.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Venom Storm.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Vile Roots.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Wake of Flame.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Whirling Edge.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Whirling Saber.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Wicked Dagger.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Wicked Slam.ogg create mode 100644 WeakAuras/Projects/RaiderSA/out/trump/Will Breaker.ogg create mode 100644 WeakAuras/Projects/RaiderSA/runtts.sh create mode 100644 WeakAuras/Projects/RaiderSA/samples/animedangerboy.wav create mode 100644 WeakAuras/Projects/RaiderSA/samples/animegirl.wav create mode 100644 WeakAuras/Projects/RaiderSA/samples/boberkurwa.wav create mode 100644 WeakAuras/Projects/RaiderSA/samples/genericfemale.wav create mode 100644 WeakAuras/Projects/RaiderSA/samples/trump.wav create mode 100644 WeakAuras/Projects/RaiderSA/speedify.sh create mode 100644 WeakAuras/Projects/RaiderSA/test.sh create mode 100644 WeakAuras/Projects/RaiderSA/tts_output.wav create mode 100644 WeakAuras/Projects/RaiderSA/weakaura/init.lua create mode 100644 WeakAuras/Projects/RaiderSA/weakaura/trigger.lua create mode 100644 WeakAuras/Projects/RaiderSA/words.txt create mode 100644 WeakAuras/Projects/RaiderSA/working_out.tar rename {Complete Projects/Legion => WeakAuras/Projects}/RaiderlosSA.lua (97%) rename {FreshShit => WeakAuras/Projects}/RaiderlosSA/color.lua (96%) rename {FreshShit => WeakAuras/Projects}/RaiderlosSA/event.lua (97%) rename {FreshShit => WeakAuras/Projects}/RaiderlosSA/event2.lua (95%) rename {FreshShit => WeakAuras/Projects}/RaiderlosSA/export (100%) rename {FreshShit => WeakAuras/Projects}/RaiderlosSA/filterLogBySpell.sh (100%) rename {FreshShit => WeakAuras/Projects}/RaiderlosSA/init.lua (97%) rename {FreshShit => WeakAuras/Projects}/RaiderlosSA/logger.lua (96%) create mode 100644 WeakAuras/Projects/RaiderlosSA/out/162135.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/185539.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/188169.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/189469.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/190620.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/190836.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/191284.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/191326.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/191735.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/191848.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/191976.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/192018.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/192019.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/192048.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/192305.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/192307.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/192631.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/193069.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/193364.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/193585.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/193597.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/193611.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/193826.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/194099.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/194216.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/194325.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/194442.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/194615.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/194945.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/194956.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/194996.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/195046.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/195129.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/195172.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/195254.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/195293.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/195791.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/196129.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/196144.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/196249.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/196290.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/196296.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/196392.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/196512.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/197105.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/197418.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/197513.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/197799.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/197810.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/197961.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/198072.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/198079.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/198245.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/198263.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/198405.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/198495.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/198496.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/198605.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/198750.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/198888.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/198934.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/199176.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/199210.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/199652.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/199674.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/199726.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/199917.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/200040.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/200105.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/200227.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/200238.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/200248.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/200261.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/200291.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/200345.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/200580.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/200631.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/200700.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/200732.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/200898.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/201139.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/201400.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/202098.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/202181.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/202658.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/202913.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/207979.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/207980.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/209027.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/209404.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/209485.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/209495.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/209516.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/209628.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/209676.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/210261.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/211037.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/211115.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/211217.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/211464.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/211771.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/212784.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/215204.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/215433.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/219488.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/220871.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/225100.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/225573.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/225732.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/226285.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/226296.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/226316.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/227254.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/227267.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/227404.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/227463.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/227493.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/227508.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/227568.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/227592.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/227615.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/227628.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/227646.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/227672.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/227776.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/227779.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/227793.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/227966.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/227987.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/228025.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/228221.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/228225.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/228269.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/228277.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/228278.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/228279.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/228837.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/228852.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/229083.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/229151.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/229159.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/229662.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/229706.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/229714.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/230083.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/232153.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/234107.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/236543.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/236627.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/237726.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/238315.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/238543.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/239217.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/239268.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/241937.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/242792.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/243168.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/243960.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/243961.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/243983.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/243999.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/244000.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/244016.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/244033.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/244042.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/244056.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/244057.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/244086.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/244093.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/244106.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/244131.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/244291.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/244410.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/244693.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/244768.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/244899.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/244969.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/245161.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/245281.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/245546.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/245586.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/245627.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/245983.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/246037.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/246220.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/246664.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/246706.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/246779.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/246840.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/247079.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/247367.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/247376.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/247552.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/247687.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/247716.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/248068.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/248070.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/248396.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/248732.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/250255.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/251570.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/253189.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/254452.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/254919.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/254926.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/256457.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/257296.txt create mode 100644 WeakAuras/Projects/RaiderlosSA/out/36247.txt rename {FreshShit => WeakAuras/Projects}/RaiderlosSA/scratch.lua (96%) rename {FreshShit => WeakAuras/Projects}/RaiderlosSA/spells.txt (94%) rename {Random Trash => WeakAuras/Projects/Random Trash}/Account with herbalism dudu.txt (90%) rename {Random Trash => WeakAuras/Projects/Random Trash}/Asakawa debuffs on nameplate non tsu.lua (97%) rename {Random Trash => WeakAuras/Projects/Random Trash}/GM Chat (98%) rename {Random Trash => WeakAuras/Projects/Random Trash}/Glowy Nameplate.lua (96%) rename {Random Trash => WeakAuras/Projects/Random Trash}/Hashing/1.lua (96%) rename {Random Trash => WeakAuras/Projects/Random Trash}/Hashing/2.lua (97%) rename {Random Trash => WeakAuras/Projects/Random Trash}/Herbs/Aethril.txt (95%) rename {Random Trash => WeakAuras/Projects/Random Trash}/Herbs/Dreamleaf.txt (96%) rename {Random Trash => WeakAuras/Projects/Random Trash}/Herbs/Fjarnskaggl.txt (96%) rename {Random Trash => WeakAuras/Projects/Random Trash}/Herbs/Foxflower.txt (96%) rename {Random Trash => WeakAuras/Projects/Random Trash}/Herbs/Icecap.txt (96%) rename {Random Trash => WeakAuras/Projects/Random Trash}/Herbs/Mountain Silversage.txt (96%) rename {Random Trash => WeakAuras/Projects/Random Trash}/Herbs/Starlight Rose.txt (96%) rename {Random Trash => WeakAuras/Projects/Random Trash}/Herbs/_How2Find.txt (97%) rename {Random Trash => WeakAuras/Projects/Random Trash}/Interesting Shit/BARS QUESTIONMARK.lua (96%) rename {Random Trash => WeakAuras/Projects/Random Trash}/Interesting Shit/SeaStar.lua (96%) rename {Random Trash => WeakAuras/Projects/Random Trash}/Some stuff.lua (96%) rename {Random Trash => WeakAuras/Projects/Random Trash}/Spells of some sort.txt (95%) rename {Random Trash => WeakAuras/Projects/Random Trash}/TomTom/2.lua (96%) rename {Random Trash => WeakAuras/Projects/Random Trash}/TomTom/3.lua (97%) rename {Random Trash => WeakAuras/Projects/Random Trash}/TomTom/TomTom.lua (96%) rename {Random Trash => WeakAuras/Projects/Random Trash}/idk/idk.lua (95%) rename {Random Trash => WeakAuras/Projects/Random Trash}/idk/idk2.lua (94%) rename {Random Trash => WeakAuras/Projects/Random Trash}/idk/idk3.lua (95%) rename {FreshShit => WeakAuras/Projects}/RayOfHope/1/display.lua (100%) rename {FreshShit => WeakAuras/Projects}/RayOfHope/2/display.lua (100%) rename {FreshShit => WeakAuras/Projects}/RayOfHope/export (100%) rename {FreshShit => WeakAuras/Projects}/RayOfHope/init.lua (100%) rename {FreshShit => WeakAuras/Projects}/RayOfHope/trigger1.lua (100%) rename {FreshShit => WeakAuras/Projects}/RayOfHope/trigger2.lua (100%) rename {Complete Projects/Legion => WeakAuras/Projects}/RedpilledFoFDildos.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/Rejuv.lua (97%) rename {WIP => WeakAuras/Projects}/Reply to MOVE.lua (95%) rename {Complete Projects/Legion => WeakAuras/Projects}/Reputation for Beloved.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/Reputations for Insane.lua (98%) rename {Complete Projects/Legion => WeakAuras/Projects}/Rogue Sniffer 9000/Target Direction.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/Rogue Sniffer 9000/Target Distance.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/Rogue Sniffer 9000/Target Zone.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/Rogue Stealth.lua (96%) rename {FreshShit => WeakAuras/Projects}/RogueBullshit/Cooldowns (100%) rename {FreshShit => WeakAuras/Projects}/RogueBullshit/Mouse (100%) rename {Complete Projects/Legion => WeakAuras/Projects}/RuneDinger.lua (95%) rename {Complete Projects/Legion => WeakAuras/Projects}/SaveCombatLog.lua (96%) rename {NewAge => WeakAuras/Projects}/ScrollingText/export (100%) rename {Complete Projects/Legion => WeakAuras/Projects}/Sea-Star Proc.lua (96%) rename {FreshShit => WeakAuras/Projects}/SephuzBar/event.lua (95%) rename {FreshShit => WeakAuras/Projects}/SephuzBar/export (100%) rename {FreshShit => WeakAuras/Projects}/ShardCounter/display.lua (95%) rename {FreshShit => WeakAuras/Projects}/ShardCounter/event.lua (96%) rename {FreshShit => WeakAuras/Projects}/ShardCounter/event2.lua (97%) rename {FreshShit => WeakAuras/Projects}/ShardCounter/event3.lua (97%) rename {FreshShit => WeakAuras/Projects}/ShardCounter/event5.lua (96%) rename {FreshShit => WeakAuras/Projects}/ShardCounter/export (100%) rename {FreshShit => WeakAuras/Projects}/ShardCounter/init.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/Shield proc.lua (95%) rename {Complete Projects/Legion => WeakAuras/Projects}/Shin Thing.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/Skinning Skill.lua (95%) rename {Complete Projects/Legion => WeakAuras/Projects}/SoTR Counter.lua (95%) rename {LegionWA => WeakAuras/Projects}/SoTR Counter/Event.lua (96%) rename {LegionWA => WeakAuras/Projects}/SoTR Counter/Export (100%) rename {LegionWA => WeakAuras/Projects}/SoTR Counter/Init.lua (97%) rename {LegionWA => WeakAuras/Projects}/SoTR Counter/Text.lua (95%) rename {Complete Projects/Legion => WeakAuras/Projects}/SoTR Mitigation.lua (95%) rename {LegionWA => WeakAuras/Projects}/SoTR Texture/Export (100%) rename {LegionWA => WeakAuras/Projects}/SoTR Texture/Init.lua (95%) rename {LegionWA => WeakAuras/Projects}/SoTR Texture/Text.lua (98%) rename {WIP => WeakAuras/Projects}/Some Premade Documentation.lua (97%) rename {WIP => WeakAuras/Projects}/Some next gen shit.lua (99%) rename {Complete Projects/Legion => WeakAuras/Projects}/Soul Leech.lua (96%) rename {FreshShit => WeakAuras/Projects}/Sounds/Bababooey.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/Bing.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/Bing2.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/Bong.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/BonusDucks.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/Boom2.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/Boom3.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/Boom4.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/BoomVery.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/China.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/China2.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/China3.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/China4.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/China5.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/China6.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/Cloak.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/Conga.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/Dead.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/Domination.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/FortressReel.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/FortressReelLoop.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/Gaben.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/GetFucked.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/HL2ButtonClick.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/HL2ButtonRelease.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/HL2ButtonRollover.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/Hitsound.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/Hitsound2.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/Hitsound3.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/Hitsound4.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/Hitsound5.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/HitsoundBap.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/HitsoundBell.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/HitsoundBoom.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/HitsoundBubble.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/HitsoundCOD.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/HitsoundCasino1.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/HitsoundCasino2.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/HitsoundCasino3.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/HitsoundDing.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/HitsoundDuck.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/HitsoundHardbass.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/HitsoundMinecraft.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/HitsoundNootNoot.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/HitsoundOra.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/HitsoundQuake.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/HitsoundRS.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/HitsoundRing.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/HitsoundSans.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/HitsoundSqueak.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/HitsoundTin.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/HitsoundUltrakill.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/ItsOverJerma.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/KillsoundHardbass.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/KillsoundLego.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/KillsoundRing.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/KillsoundUltrakill.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/KillsoundYoda.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/MGSSpot.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/MedicGaming.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/MedicGangsterParadise.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/MeetTheSniper.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/Nemesis.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/OOF.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/OhNo.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/POOT.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/Piss.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/Revenge.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/StarScream.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/TheOnlyThingTheyFearIsYou.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/TheOnlyThingTheyFearIsYou_Fried.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/Uncloak.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/WeAreNumberOne.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/WeAreNumberOneFried.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/WindowsXPError.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/YouveGotMail.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/bckp.tar.gz (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/output.ogg (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/Bing.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/Bing2.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/Bong.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/BonusDucks.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/Boom2.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/Boom4.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/BoomVery.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/China.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/China2.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/China4.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/China6.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/Dead.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/Domination.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/FortressReel.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/FortressReelLoop.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/GetFucked.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/HL2ButtonClick.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/HL2ButtonRollover.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/Hitsound.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/Hitsound3.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/Hitsound4.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/Hitsound5.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/HitsoundBap.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/HitsoundBoom.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/HitsoundBubble.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/HitsoundCasino3.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/HitsoundDuck.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/HitsoundHardbass.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/HitsoundMinecraft.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/HitsoundOra.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/HitsoundSqueak.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/HitsoundUltrakill.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/KillsoundHardbass.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/KillsoundLego.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/KillsoundUltrakill.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/MeetTheSniper.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/Nemesis.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/OOF.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/OhNo.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/POOT.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/Piss.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/Revenge.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/Uncloak.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/WeAreNumberOne.wav (100%) rename {FreshShit => WeakAuras/Projects}/Sounds/wav/WeAreNumberOneFried.wav (100%) rename {Complete Projects/Legion => WeakAuras/Projects}/Spam Begone.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/Spell Charges/01.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/Spell Charges/12.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/Spell Charges/23.lua (96%) rename {FreshShit => WeakAuras/Projects}/Spotter/event.lua (96%) rename {FreshShit => WeakAuras/Projects}/Spotter/export (100%) rename {FreshShit => WeakAuras/Projects}/Spotter/init.lua (96%) rename {FreshShit => WeakAuras/Projects}/SpySatellite/event.lua (94%) rename {FreshShit => WeakAuras/Projects}/SpySatellite/event2.lua (96%) rename {FreshShit => WeakAuras/Projects}/SpySatellite/event3.lua (96%) rename {FreshShit => WeakAuras/Projects}/SpySatellite/init.lua (97%) rename {FreshShit => WeakAuras/Projects}/StinkyDetector/event.lua (95%) rename {FreshShit => WeakAuras/Projects}/StinkyDetector/event2.lua (96%) rename {FreshShit => WeakAuras/Projects}/StinkyDetector/export (100%) rename {FreshShit => WeakAuras/Projects}/StinkyDetector/init.lua (96%) rename {FreshShit => WeakAuras/Projects}/StinkyDetector/macro (92%) rename {FreshShit => WeakAuras/Projects}/StinkyDetector/trigger.lua (93%) rename {WIP => WeakAuras/Projects}/Swelter.lua (96%) rename {WIP => WeakAuras/Projects}/TODO.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/TSU - DAI SPELL.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/TSU - EnemyPlayerHealth - CLEV.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/TSU - EnemyPlayerHealth.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/TSU - Explosives.lua (95%) rename {Complete Projects/Legion => WeakAuras/Projects}/TSU - GroupConcordance.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/TSU - HealerMana.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/TSU - Item Monitor.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/TSU - Jana do a spell.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/TSU - PlayerEvaluator.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/TSU - RepBars.lua (95%) rename {Complete Projects/Legion => WeakAuras/Projects}/TSU - Shitty kara trinket.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/TSU - Spell Alert.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/TSU - Spells.lua (97%) rename {WIP => WeakAuras/Projects}/Tank Stack Alerts(UNTESTED).lua (95%) rename {Complete Projects/Legion => WeakAuras/Projects}/Target TTD.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/Taunt God.lua (98%) rename {Complete Projects/Legion => WeakAuras/Projects}/Taunt.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/Titanguard.lua (96%) rename {WIP => WeakAuras/Projects}/ToDissect.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/Trinket Equip.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/TrinketTest.lua (96%) rename {FreshShit => WeakAuras/Projects}/UwowLadderboardScraper/event.lua (96%) rename {FreshShit => WeakAuras/Projects}/UwowLadderboardScraper/init.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/Valentine's Charms.lua (96%) rename {Complete Projects/Legion => WeakAuras/Projects}/Visp Bogec.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/Warlock Artifact.lua (96%) rename {FreshShit => WeakAuras/Projects}/WarlockDispelMaster/event.lua (96%) rename {FreshShit => WeakAuras/Projects}/WarlockDispelMaster/event2.lua (95%) rename {FreshShit => WeakAuras/Projects}/WarlockDispelMaster/export (100%) rename {FreshShit => WeakAuras/Projects}/WarlockDispelMaster/init.lua (96%) rename {FreshShit => WeakAuras/Projects}/WhoSniffer/allstates.lua (98%) rename {FreshShit => WeakAuras/Projects}/WhoSniffer/event.lua (96%) rename {FreshShit => WeakAuras/Projects}/WhoSniffer/event2.lua (96%) rename {FreshShit => WeakAuras/Projects}/WhoSniffer/event3.lua (96%) rename {FreshShit => WeakAuras/Projects}/WhoSniffer/event4.lua (96%) rename {FreshShit => WeakAuras/Projects}/WhoSniffer/event5.lua (95%) rename {FreshShit => WeakAuras/Projects}/WhoSniffer/export (100%) rename {FreshShit => WeakAuras/Projects}/WhoSniffer/init.lua (96%) rename {FreshShit => WeakAuras/Projects}/WhoSniffer/plan.lua (100%) rename {FreshShit => WeakAuras/Projects}/_Autoruns/event.lua (97%) rename {FreshShit => WeakAuras/Projects}/_Autoruns/export (100%) rename {Complete Projects/Legion => WeakAuras/Projects}/_Big ass hammer thing.lua (97%) rename {FreshShit => WeakAuras/Projects}/_GlobalSoundPlayer/event.lua (97%) rename {Complete Projects/Legion => WeakAuras/Projects}/_GlobalTicker.lua (97%) rename {FreshShit => WeakAuras/Projects}/_GlobalTickers/event.lua (97%) rename {FreshShit => WeakAuras/Projects}/_GlobalTickers/export (100%) rename {FreshShit => WeakAuras/Projects}/_GlobalTickers/init.lua (93%) rename {FreshShit => WeakAuras/Projects}/_ReactiveValue/event.lua (96%) rename {FreshShit => WeakAuras/Projects}/_ReactiveValue/export (100%) rename {FreshShit => WeakAuras/Projects}/_Shared/CLEUParser.lua (96%) rename {FreshShit => WeakAuras/Projects}/_Shared/Colorer.lua (96%) rename {FreshShit => WeakAuras/Projects}/_Shared/Messenger.lua (97%) rename {FreshShit => WeakAuras/Projects}/_Shared/Messenger_Export (100%) rename {FreshShit => WeakAuras/Projects}/__Ascension/Cooldowner/display.lua (94%) rename {FreshShit => WeakAuras/Projects}/__Ascension/Cooldowner/init.lua (96%) rename {FreshShit => WeakAuras/Projects}/__Ascension/TooltipItemInfo/export (100%) rename {FreshShit => WeakAuras/Projects}/__Ascension/TooltipItemInfo/init.lua (97%) rename {FreshShit => WeakAuras/Projects}/__Ascension/TotemTicker/event.lua (97%) rename {FreshShit => WeakAuras/Projects}/__Ascension/TotemTicker/init.lua (97%) rename {FreshShit => WeakAuras/Projects}/__Ascension/__Other/buffs (100%) rename {FreshShit => WeakAuras/Projects}/__Ascension/__Other/cooldowns (100%) rename {FreshShit => WeakAuras/Projects}/__Ascension/__Other/cursoricons (100%) rename {FreshShit => WeakAuras/Projects}/__Ascension/__Other/procs (100%) rename {FreshShit => WeakAuras/Projects}/hekilidisplay (100%) rename {WA snippets => WeakAuras/Snippets}/Add Strings.lua (94%) rename {WA snippets => WeakAuras/Snippets}/Adding text.lua (98%) rename {WA snippets => WeakAuras/Snippets}/Anchor to nameplate.lua (97%) rename {WA snippets => WeakAuras/Snippets}/Buttons.lua (98%) rename {WA snippets => WeakAuras/Snippets}/C_Timer.lua (98%) rename {WA snippets => WeakAuras/Snippets}/Class Colors.lua (96%) rename {WA snippets => WeakAuras/Snippets}/Click Buttons.lua (96%) rename {WA snippets => WeakAuras/Snippets}/Color Gradient.lua (96%) rename {WA snippets => WeakAuras/Snippets}/Date and Time.lua (97%) rename {WA snippets => WeakAuras/Snippets}/DefStack.lua (95%) rename {WA snippets => WeakAuras/Snippets}/Find Aura ID.lua (94%) rename {WA snippets => WeakAuras/Snippets}/FormatTime.lua (95%) rename {WA snippets => WeakAuras/Snippets}/Functions.lua (96%) rename {WA snippets => WeakAuras/Snippets}/Get Item Link from chat link.lua (97%) rename {WA snippets => WeakAuras/Snippets}/GetSpellWithCooldown.lua (96%) rename {WA snippets => WeakAuras/Snippets}/Hashing.lua (97%) rename {WA snippets => WeakAuras/Snippets}/IconPrint (97%) rename {WA snippets => WeakAuras/Snippets}/Jump God.lua (98%) rename {WA snippets => WeakAuras/Snippets}/NameplateGlow.lua (97%) rename {WA snippets => WeakAuras/Snippets}/New Texture and Anchor.lua (97%) rename {WA snippets => WeakAuras/Snippets}/Print Table.lua (95%) rename {WA snippets => WeakAuras/Snippets}/Reading Tooltips.lua (97%) rename {WA snippets => WeakAuras/Snippets}/Registers.lua (95%) rename {WA snippets => WeakAuras/Snippets}/Round.lua (95%) rename {WA snippets => WeakAuras/Snippets}/Shorten Number.lua (95%) rename {WA snippets => WeakAuras/Snippets}/Size to range.lua (96%) rename {WA snippets => WeakAuras/Snippets}/TableSort.lua (95%) rename {WA snippets => WeakAuras/Snippets}/Talent IDs.lua (96%) rename {WA snippets => WeakAuras/Snippets}/Text Frame.lua (97%) rename {WA snippets => WeakAuras/Snippets}/Timed Hide.lua (97%) rename {WA snippets => WeakAuras/Snippets}/ToHex.lua (96%) rename {WA snippets => WeakAuras/Snippets}/UnitBuff.lua (95%) rename {WA snippets => WeakAuras/Snippets}/UnitDebuffC.lua (95%) rename {WA snippets => WeakAuras/Snippets}/Weakaurs Useful Shit.lua (98%) rename {WA snippets => WeakAuras/Snippets}/wow this works.lua (97%) delete mode 100644 scratch.lua diff --git a/AttackSpeedTest.lua b/AttackSpeedTest.lua deleted file mode 100644 index ec62382..0000000 --- a/AttackSpeedTest.lua +++ /dev/null @@ -1,58 +0,0 @@ ---Guess attack speed by taking entire data set and comparing 2 - 4 intervals then storing the n into seperate array and incrementing it ---Attack speed with most counts in latter array is the best guess by m% ---Correct this by repeating step on exit combat maybe? ---Look at tolerances as well - -local dataSet2s = { - [1] = 540390408.9506, - [2] = 540392394.9163, - [3] = 540394398.5326, - [4] = 540396409.5288, - [5] = 540398396.6414, - [6] = 540400397.0754, - [7] = 540402384.8113, - [8] = 540404385.3304, - [9] = 540406398.99, - [10] = 540408386.472, - [11] = 540410386.9851, - [12] = 540412374.8497, - [13] = 540414375.1427, - [14] = 540416373.0995, - [15] = 540418376.9931, - [16] = 540420390.6971, -} -local dataSet1p5s = { - [1] = 541651364.1916, - [2] = 541652857.9058, - [3] = 541654365.8491, - [4] = 541655858.3292, - [5] = 541657352.4962, - [6] = 541658846.2963, - [7] = 541660354.015, - [8] = 541661847.0112, - [9] = 541663340.6759, - [10] = 541664861.3772, - [11] = 541666354.9449, - [12] = 541667848.8308, - [13] = 541669343.2332, - [14] = 541670849.9777, - [15] = 541672344.0613, - [16] = 541673851.2346, -} -local tolerance = 50 -local tempAverages = {} --- rounds .5 to 0 or 1; want to round to .5 or .2 or alike -for k, v in ipairs(dataSet1p5s) do - if k > 1 then - local tempAvg = (dataSet1p5s[k] - dataSet1p5s[k - 1]) - print( - ((math.floor(tempAvg / 1000) - (tempAvg / 1000)) * 1000), - (math.ceil(tempAvg / 1000) - (tempAvg / 1000)) * 1000 - ) - if not tempAverages[tempAvg] then tempAverages[tempAvg] = 0 end - tempAverages[tempAvg] = tempAverages[tempAvg] + 1 - end -end -for k, v in pairs(tempAverages) do - print(k, v) -end diff --git a/Complete Projects/Legion/RaiderSA b/Complete Projects/Legion/RaiderSA deleted file mode 160000 index 7a3f912..0000000 --- a/Complete Projects/Legion/RaiderSA +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 7a3f9125490399d579b71d2a4427b0707aa695f5 diff --git a/Complete Projects/trash/Button b/Complete Projects/trash/Button deleted file mode 100644 index 790f4be..0000000 --- a/Complete Projects/trash/Button +++ /dev/null @@ -1,11 +0,0 @@ - - -local Button = CreateFrame("Button", "MyButton", UIParent, "UIPanelButtonTemplate") -Button:SetWidth(150) -Button:SetHeight(25) -Button:SetPoint("TOP") -Button:SetText("Dance") -Button:RegisterForClicks("AnyUp") -Button:SetScript("OnClick", function() - DoEmote("dance", UnitName("target")) -end ) \ No newline at end of file diff --git a/Complete Projects/trash/Cunting shit 2.lua b/Complete Projects/trash/Cunting shit 2.lua deleted file mode 100644 index 1fa3ef7..0000000 --- a/Complete Projects/trash/Cunting shit 2.lua +++ /dev/null @@ -1,38 +0,0 @@ -EVERY FRAME -function() - local function range (val, min, max, max2) - val = 1 - (((max - val) / (max - min)) * max2) - return val - end - local pX = UnitPosition("player") or 0 - local pY = select(2,UnitPosition("player")) or 0 - local tX = UnitPosition("Alurielle") or 0 - local tY = select(2,UnitPosition("Alurielle")) or 0 - local X = pX - tX - local Y = pY - tY - local playerFace = GetPlayerFacing() or 0 - local playerA = math.floor(playerFace * 100) - playerA = range(playerA, 0, 630, 360) - 1 - playerA = - playerA - playerA = playerA - 90 - if playerA < 0 then playerA = playerA + 360 end - aura_env.hyp = math.sqrt((math.abs(X^2)) + (math.abs(Y^2))) - aura_env.angle = math.deg(math.atan2(X,Y)) - if aura_env.angle < 0 then aura_env.angle = aura_env.angle + 360 end - aura_env.angle = aura_env.angle - playerA -end - -DISPLAY -function() - local pX = UnitPosition("player") or 0 - local pY = select(2,UnitPosition("player")) or 0 - local tX = UnitPosition("Alurielle") or 0 - local tY = select(2,UnitPosition("Alurielle")) or 0 - local X = pX - tX - local Y = pY - tY - local hyp = math.floor(math.sqrt((math.abs(X^2)) + (math.abs(Y^2)))) - return hyp -end - -INIT -aura_env.angle = 0 \ No newline at end of file diff --git a/Complete Projects/trash/Cunting shit.lua b/Complete Projects/trash/Cunting shit.lua deleted file mode 100644 index 89ab85c..0000000 --- a/Complete Projects/trash/Cunting shit.lua +++ /dev/null @@ -1,31 +0,0 @@ -EVERY FRAME -function() - local function range (val, min, max, max2) - val = 1 - (((max - val) / (max - min)) * max2) - return val - end - local pX = UnitPosition("player") or 0 - local pY = select(2,UnitPosition("player")) or 0 - local tX = UnitPosition("Alurielle") or 0 - local tY = select(2,UnitPosition("Alurielle")) or 0 - local X = pX - tX - local Y = pY - tY - local playerFace = GetPlayerFacing() or 0 - local playerA = math.floor(playerFace * 100) - playerA = range(playerA, 0, 630, 360) - 1 - playerA = - playerA - playerA = playerA - 90 - if playerA < 0 then playerA = playerA + 360 end - aura_env.hyp = math.sqrt((math.abs(X^2)) + (math.abs(Y^2))) - aura_env.angle = math.deg(math.atan2(X,Y)) - if aura_env.angle < 0 then aura_env.angle = aura_env.angle + 360 end - aura_env.angle = aura_env.angle - playerA -end - -ANIMATION -function() - return - aura_env.angle -end - -INIT -aura_env.angle = 0 \ No newline at end of file diff --git a/LegionWA/.gitignore b/LegionWA/.gitignore deleted file mode 100644 index b4fa2c9..0000000 --- a/LegionWA/.gitignore +++ /dev/null @@ -1 +0,0 @@ -.vscode diff --git a/Metadata for userdata!!.txt b/Metadata for userdata!!.txt deleted file mode 100644 index 6e5fd06..0000000 --- a/Metadata for userdata!!.txt +++ /dev/null @@ -1 +0,0 @@ -/dump getmetatable(LFGListApplicationViewerScrollFrameButton3.Member1.Name) \ No newline at end of file diff --git a/ModelResearch.lua b/ModelResearch.lua deleted file mode 100644 index 483b540..0000000 --- a/ModelResearch.lua +++ /dev/null @@ -1,24 +0,0 @@ ---MODEL_TEST -function() - frame:SetAlpha(1); - frame:SetFrameStrata("DIALOG"); - local model = CreateFrame("PlayerModel", "QCP", QCQuestTitleFrame); - model:SetFrameStrata("DIALOG"); - model:SetUnit("TARGET"); - model:ClearModel(); - model:SetPortraitZoom(0.3); - model:SetPosition(-1.6, 0, 0); - model:SetScale(0.8); - model:SetFacing(-(math.pi / -26)) - model:SetAlpha(1); - model:SetScript("OnAnimStarted", function() model:SetAnimation(60); end); - model:SetScript("OnAnimFinished", function() model:SetAnimation(60); end); - model:SetAllPoints(frame); - model:RegisterEvent("PLAYER_TARGET_CHANGED"); - model:RegisterEvent("UNIT_PORTRAIT_UPDATE"); - model:RegisterEvent("UNIT_MODEL_CHANGED"); - model:SetScript("OnEvent", TargetPortrait_EventHandler); - --yeet_env.region:SetSequenceTime(120) - --aura_env.region:SetOffsetAnim(120) - return true -end diff --git a/Sort Array.lua b/Sort Array.lua deleted file mode 100644 index e4ec0a2..0000000 --- a/Sort Array.lua +++ /dev/null @@ -1,19 +0,0 @@ -local array = { 13, 14, 52, 63, 764, 12342, 143, 2, 54, 63, 25, 15 } -local sortedarray = { 0 } - -for ka, va in ipairs(array) do - for j = 1, #sortedarray do - if va > sortedarray[j] then - if sortedarray[j] > 0 then - for i = #sortedarray, j, -1 do - sortedarray[i + 1] = sortedarray[i] - end - end - sortedarray[j] = va - end - end -end - -for k, v in ipairs(sortedarray) do - print(k, v) -end diff --git a/WA codes/BossHpNameplate (WA CODE).txt b/WeakAuras/Exports/BossHpNameplate (WA CODE).txt similarity index 100% rename from WA codes/BossHpNameplate (WA CODE).txt rename to WeakAuras/Exports/BossHpNameplate (WA CODE).txt diff --git a/WA codes/Bulwark of Order (WA CODE).txt b/WeakAuras/Exports/Bulwark of Order (WA CODE).txt similarity index 100% rename from WA codes/Bulwark of Order (WA CODE).txt rename to WeakAuras/Exports/Bulwark of Order (WA CODE).txt diff --git a/WA codes/Dumpy Fuckery(WA CODE).txt b/WeakAuras/Exports/Dumpy Fuckery(WA CODE).txt similarity index 100% rename from WA codes/Dumpy Fuckery(WA CODE).txt rename to WeakAuras/Exports/Dumpy Fuckery(WA CODE).txt diff --git a/WA codes/HoTP Heal bars(WA CODE).txt b/WeakAuras/Exports/HoTP Heal bars(WA CODE).txt similarity index 100% rename from WA codes/HoTP Heal bars(WA CODE).txt rename to WeakAuras/Exports/HoTP Heal bars(WA CODE).txt diff --git a/WA codes/Holy Pala Crap (WA CODE).txt b/WeakAuras/Exports/Holy Pala Crap (WA CODE).txt similarity index 99% rename from WA codes/Holy Pala Crap (WA CODE).txt rename to WeakAuras/Exports/Holy Pala Crap (WA CODE).txt index b5030e8..29adb98 100644 --- a/WA codes/Holy Pala Crap (WA CODE).txt +++ b/WeakAuras/Exports/Holy Pala Crap (WA CODE).txt @@ -1 +1 @@ -da1F)aqissyrkjDjssQpPKsgLiPtjszvkufnlLuDlssTlvLFPqvyyqLJPQAzOQEMcLPbjDnQK2MsIVbPQXjsCovPsRJQkUNsk2NcvLdIkSqfYdHQAIku5IQs2iQsFujLAKKeojKyLkHxQqv1mrfDtrQ2PI(jvQHss0sPQQEQWuH4QqQSvss0xrvmwvPI3svLMlKYDPQk7v6VIyWuLddAXQIhtftgkxMyZkvFMeJgv60KA1KKKxtvz2aUTsz3O8BKgUcoUcvPLRYZrmDkxxuBNK67ujgVs05HQSEvPmFvPQ9d09VinGfPwdsd(FJ9H(gBnWAGvKgyAIQkZCmTAPbeaOXjkAkdbVbPHYrZdnGoMwTGCAff5sNIjDQ6FCnKLdqgMG1Ng45EFNiwNQ()hxdIaSRsQMzng5gbXD6C(IxKgASgQGcGhO3aeac69KbaiC1MjhEny5nKtROihPZ)gauiwrAyqaHzfPXwgW0fPwTgy69DTtgWWRin2YaMUi1Q14GosrASLbmDrQvRHdaKqksdIMPainujhCYX4qzwRXG6bdcimRin2YaMUi1Q14OasrASLbmDrQvRrMijoaqcPHDzPXo0X0uwrASLbmDrQvRwTgofPZ)I0WKLgVaqfsd3OdHtuMVAS09(orSovTR8BGN79DIyDQA(8BODOS(0yNYmEbGkKgUrhcNOmF1Gia7QKQzwde3QSXd8WNcqVI0j)oX9HE()UUskRWh9O6kU3nLAngoQYjeIkpXrt0uwNO2aGcXksddcimJFrASLbmDrQvRrMijdI9andq6tJmrsyIA56tddcimRin2YaMUi1Q1itKe1cxTdG0NgoaqcPiniAMcG0qLCWjhJdLzTgKbXPiniAMcG05FTgy69DTtgWWRin2YaMUi1Q1itKehaiH0rnoOJuKgBzatxKA1AKjscdUj9PrMijKbXPJASdDmnLvKgBzatxKA1AmOEWGacZksJTmGPlsTAnokGuKgBzatxKA1Q14efnLHG3G0aMp4d8AqmOJpsFAyYslFsdEuaGesdtwA8szwJxlhoHqCbIxJ3O0ToX9nwdYa881rnm9MC8szwdoWulmlFsdYa88HpfGEfPZ)oX1j)oX15yDIRwdNmXOBiYsRXEM5yAkl1K1twFinWfGEGEGEGE6DqVbqpidd0Ba0d89Rb0dhOhKHb6na6b((18d6zCfgO3jw(yGEdGEcddCbOhOhOhO3jw(yGER1AbUqyyGlaxaUaCb4cWfGlax0iZStROixrAq4sDXnRbHl1f3m8PuamQlSgKbbayc3Ko5Jdv0pwTgqhtRwqoTIICPtXKov9pUgMS0c9BsN)OVHDAff5ksdNmXOBjgEdsdIbTmPrMijBqZHRG5)mt6tJmrsC4cpfH0NgKbbayc3Ko5Jdv0pwJmrsozdQzAMsFA4WvC81ipGbnPHH3G0GyqltAiQfMrAGV70hXbscNUx7KxQYxtKe0n5fforE5)xJRHtMy0TeUAmPHtMy0TgoCHNIqsOdYbn61y8TMgoCHNIqA83iZe1cZAaZgTrMijeUuxCZ6OgIAHznWNsbWOUWa9u5rvoHqa9sngeaG0ACceigeaGjCtAOckaEGEbxQJVgzIKqgeaGjCt6OgzIKKzARJAq4sDXnRbHl1f3m8PuamQlSAnidWZx667OxFAqgGNpezPLpPbkmtUDOJGghyyUze04rG(4iFqcAPlyAiAiYslFcbTy8MHNKWdxTjnW0KbaiEiYsJtz3Aa6PQhAOXAOckaEGEeUuhFn0mTLqm4zcwN)n4kAfUw5nfurfv(UUsk)O31F(Oo2F3vnQVBdtVjhVaqfsJ0DpDJVk8V70F9EevGc(JF3OdHtuMVAqgGNVracdlDkM0yeNVMJRXd0Xh2rhWNcqVI05FN46KFN46CSoX1jQD(xRblVHCAff5iD(3a6yAkJuKgAM2ksdmAItMy0T(0Wjtm6wdEeOpoYhK8DIIMYi(fMpyIWu)PX833jkAk77bEF7k(jedrwA5tsDvuyMC7qhbn0gLnJYiOHgpQafKxP8oPSAAGl4rG(4iFqY3jkAkJ4xy(Gjct9NgZFFNOOPSVh499O4NqmezPLpj1vrHzYTdDe0qBu2mkJGgA8OcuqELY7KYQPbUaMpyIWu)Ttz26W8bteM6VDkZsi63K1H5dMim1F7uMLSdaviGERb0Jhb6JJ8bjFNOOPmIFH5dMim1FAm)9DIIMY(mzP5N1wmEPml10axWJa9Xr(GKVtu0ugXVW8bteM6pnM)(orrtzFMS08tigVuMLkmFWeHP(BNYS1H5dMim1F7uMLq0VjRVQB0HWjkZxRMg4cEeOpoYhK8DIIMYi(fMpyIWu)PX833jkAk7ZKLMFcXcUqmQlU33jILk)1b9u9FA1Q1WfnMXTZFC4A8qpm56Ogp0dtUxyksJra63EdEyGE4ZfAGEJYppasdmnrvLzoMwT0aYWRXd9WKl0VjDYVH2HYsiAmPbNV4fPXd0XNYrZmm8Pa0RiD(35FN878VZX68VtulVUI(vqDLFCR87kQ)4wjfx7UQDDLAnidWZNkeTcxRt(8BqgGNpE0yg3o534HEyYnc64d7OdnckGgRHP3KRpnGyyAttzqGe70kkYrksTgoua6vKAn2p4Me2bnyNJ14HEyYHcJiwN)nEOhMC4tbOxr68VtCDYVtCDowN46e1o)R1qZulhr6Ogp0dto377eX6e1ADYVinidWZhpAmJBN8BS09(orSovTR8BGN79DIyDQA(8BaDmnLrksdntBfPbgnXjtm6wFA4KjgDRbpc0hh5ds(orrtze)cZhmryQ)0y(77efnL99aVVDf)eIHilT8jPUkkmtUDOJGgAJYMrze0qJhvGcYRuENuwnnWf8iqFCKpi57efnLr8lmFWeHP(tJ5VVtu0u23d8(Eu8tigIS0YNK6QOWm52HocAOnkBgLrqdnEubkiVs5Dsz10axaZhmryQ)2PmBDy(Gjct93oLzje9BY6W8bteM6VDkZs2bGkeqV1a6XJa9Xr(GKVtu0ugXVW8bteM6pnM)(orrtzFMS08ZAlgVuMLAAGl4rG(4iFqY3jkAkJ4xy(Gjct9NgZFFNOOPSptwA(jeJxkZsfMpyIWu)Ttz26W8bteM6VDkZsi63K1x1n6q4eL5RvtdCbpc0hh5ds(orrtze)cZhmryQ)0y(77efnL9zYsZpHybxig1f377eXsL)6GEQ(pTA1AStzgVaqfsd3OdHtuMVAqeGDvs1mRbIBv24bE4tbOxr68VtCFON)VRRKYk8rpQUI7DtPt(D(xRXWrvoHqu5joAIMY6e1gauiwrAyqaHz8lsJTmGPlsTAnYejzqShOzasFAKjsctulxFAyqaHzfPXwgW0fPwTgzIKOw4QDaK(0WbasifPbrZuaKgQKdo5yCOmR1GmiofPbrZuaKo)R1itKegCt6tJmrsCaGesh14GosrASLbmDrQvRbMEFx7Kbm8ksJTmGPlsTAnYejHmioDuJb1dgeqywrASLbmDrQvRXo0X0uwrASLbmDrQvRXrbKI0yldy6IuRwTgNOOPme8gKgW8bFGxdIbD8r6tdtwA5tAWJcaKqAyYsJxkZA8A5WjeIlq8A8gLU1jUVXAqgGNVoQHP3KJxkZAWbMAHz5tAqgGNp8Pa0RiD(3jUo53jUohRtC1AGPjQQmZX0QLgqgEnCYeJUHilTg7zMJPPSutwpz9H0axa6b6b6b6P3b9ga9GmmqVbqpW3VgqpCGEqggO3aOh47xZpONXvyGENy5Jb6na6jmmWfGEGEGEGENy5Jb6TwRf4cHHbUaCb4cWfGlaxaUaCrdOJPvliNwrrU0PysNQ(hxdtwAH(nPZF03WoTIICfPHtMy0TedVbPbXGwM0itKKnO5WvW8FMj9PrMijoCHNIq6tJmrsYmT1rniCPU4M1GWL6IBM)figEnidcaWeUjDYhhQOFSgoCHNIqsOdYbn61y8TMgoCHNIqA83itKKt2GAMMP0NgzMOwywdy2OnYejHWL6IBwh14eiqmiaat4M0qfua8a9cUuhFne1cZAGpLcGrDHb6PYJQCcHa6LAmiaaP1itKeYGaamHBsh1qulmJ0aF3PpIdKeoDV2jVuLVMijOBYlkCI8Y)VgxdhUIJVg5bmOjnm8gKgedAzsdNmXOBjC1ysdNmXOB1AqgGNV013rV(04HEyY5EFNiwNO2GROv4AL3uqfvu576kP8JEx)5J6y)Dx1O(Unm9MC8cavins390n(QW)Ut)17rubk4p(DJoeorz(QXd0XNYrZmm8Pa0RiD(35FN878VZX68VtulVUI(vqDLFCR87kQ)4wjfx7UQDDLAnidWZ3iaHHLoftAmIZxZX14b64d7Od4tbOxr68VtCDYVtCDowN46e1o)R1qZulhr6Ogp0dto8Pa0RiD(3jUo53jUohRtCDIAN)1A8qpm5qHreRZ)gp0dtUoQXd9WK7fMI0yeG(T3GhgOh(CHgO3O8ZdG0WHcqVIuRXd9WKl0VjDYVbedtBAkdcKyNwrrosrQ1q7qzjenM0GZx8I0W0BY1NgKb45tfIwHR1jF(nmzPXlauH0Wn6q4eL5Rgp0dtUrqhFyhDOrqb0yn0ynubfapqpcxQJpqp)3iZStROixrAq4sDXnRbHl1f3m)lqm8AqgeaGjCt6Kpour)y1ASFWnjSdAWohRHlAmJBN)4W1q7qz9PblVHCAff5iD(3qZ0wcXGNjyD(3GmapFiYslFsduyMC7qhbnoWWCZiOXJa9Xr(Ge0sxW0q0qKLw(ecAX4ndpjHhUAtAGPjdaq8qKLgNYU1qfua8a9cUuhF16CSI0GmapF8OXmUDYVXs377eX60v(nWZ9(orSovnF(nGoMMYifPHMPTI0aJM4KjgDRpnCYeJU1Ghb6JJ8bjFNOOPmIFH5dMim1FAm)9DIIMY(EG33UIFcXqKLw(KuxffMj3o0rqdTrzZOmcAOXJkqb5vkVtkRMg4cEeOpoYhK8DIIMYi(fMpyIWu)PX833jkAk77bEFpk(jedrwA5tsDvuyMC7qhbn0gLnJYiOHgpQafKxP8oPSAAGlG5dMim1F7uMTomFWeHP(BNYSeI(nzDy(Gjct93oLzj7aqfcO3Aa94rG(4iFqY3jkAkJ4xy(Gjct9NgZFFNOOPSptwA(zTfJxkZsnnWf8iqFCKpi57efnLr8lmFWeHP(tJ5VVtu0u2Njln)eIXlLzPcZhmryQ)2PmBDy(Gjct93oLzje9BY6R6gDiCIY81QPbUGhb6JJ8bjFNOOPmIFH5dMim1FAm)9DIIMY(mzP5NqSGleJ6I79DIyPYFDqpv)NwTAn2PmJxaOcPHB0HWjkZxnicWUkPAM1aXTkB8ap8Pa0RiDYVtCFON)VRRKYk8rpQUI7DtPZXkVPm2yRGd9OUcouhlf0JEurF3vTRUwRXWrvoHqu5joAIMY6e1gauiwrAyqaHz8lsJTmGPlsTAnYejzqShOzasFAKjsctulxFAyqaHzfPXwgW0fPwTgzIKOw4QDaK(0WbasifPbrZuaKgQKdo5yCOmR1GmiofPbrZuaKo)R1itKegCt6tJmrsCaGesh14GosrASLbmDrQvRbMEFx7Kbm8ksJTmGPlsTAnYejHmioDuJb1dgeqywrASLbmDrQvRXo0X0uwrASLbmDrQvRXrbKI0yldy6IuRwTgNOOPme8gKgW8bFGxdIbD8r6tdtwA5tAWJcaKqAyYsJxkZA8A5WjeIlq8A8gLU1jUVXAqgGNVoQHP3KJxkZAWbMAHz5tAqgGNp8Pa0RiD(3jUo53jUohRtC1AGPjQQmZX0QLgqgEnCYeJUHilTg7zMJPPSutwpz9H0axa6b6b6b6P3b9ga9GmmqVbqpW3VgqpCGEqggO3aOh47xZpONXvyGENy5Jb6na6jmmWfGEGEGEGENy5Jb6TwRf4cHHbUaCb4cWfGlaxaUaCrdOJPvliNwrrU0PysNQ(hxdtwAH(nPZF03WoTIICfPHtMy0TedVbPbXGwM0itKKnO5WvW8FMj9PrMijoCHNIq6tJmrsYmT1rniCPU4M1GWL6IBg(ukag1fwdYGaamHBsNP4kF(8B4WfEkcjHoih0OxJX3AA4WfEkcPXFJmrsozdQzAMsFAKzIAHznGzJ2itKecxQlUzDuJtGaXGaamHBsdo1kCnqp6oO34GUWAiQfM1aFkfaJ6cd0tLhv5ecb0l1yqaasRrMijKbbayc3KoQHOwygPb(UtFehijC6ETtEPkFnrsq3Kxu4e5L)FnUgoCfhFnYdyqtAy4ninig0YKgozIr3s4QXKgozIr3Q1GmapFPRVJE9PXd9WKZ9(orSorTbxrRW1kVPGkQOY31vs5h9U(Zh1X(7UQr9DBy6n54faQqAKU7PB8vH)DN(R3JOcuWF87gDiCIY8vJhOJpLJMzy4tbOxr68VZ)o535FNJ15FNOwEDf9RG6k)4w53vu)XTskU2Dv76k1AqgGNVracdlDkM0yeNVMJRXd0Xh2rhWNcqVI05FN46KFN46CSoX1jQD(xRHMPwoI0rnEOhMC4tbOxr68VtCDYVtCDowN46e1o)R14HEyYHcJiwN)nEOhMCDuJh6Hj3lmfPXia9BVbpmqp85cnqVr5NhaPHdfGEfPwJh6HjxOFt6KFdigM20ugeiXoTIICKIuRH2HYsiAmPbNV4fPHP3KRpnidWZNkeTcxRt(8ByYsJxaOcPHB0HWjkZxnEOhMCJGo(Wo6qJGcOXAOXAWjDCnYm70kkYvKgeUuxCZAq4sDXndFkfaJ6cRbzqaaMWnPZuCLpF(1ASFWnjSdAWohRHlAmJBN)4W1q7qz9PblVHCAff5iD(3qZ0wcXGNjyD(3GmapFiYslFsduyMC7qhbnoWWCZiOXJa9Xr(Ge0sxW0q0qKLw(ecAX4ndpjHhUAtAGPjdaq8qKLgNYU1a0tvpuRtulsdtwA8cavinCJoeorz(QXs377eX60v(nWZ9(orSovnF(nEOhMC4tbOxr68VtCDYVtCDowN46e1o)R1a6yAkJuKgAM2ksdmAItMy0T(0Wjtm6wdEeOpoYhK8DIIMYi(fMpyIWu)PX833jkAk77bEF7k(jedrwA5tsDvuyMC7qhbn0gLnJYiOHgpQafKxP8oPSAAGl4rG(4iFqY3jkAkJ4xy(Gjct9NgZFFNOOPSVh499O4NqmezPLpj1vrHzYTdDe0qBu2mkJGgA8OcuqELY7KYQPbUaMpyIWu)Ttz26W8bteM6VDkZsi63K1H5dMim1F7uMLSdaviGERb0Jhb6JJ8bjFNOOPmIFH5dMim1FAm)9DIIMY(mzP5N1wmEPml10axWJa9Xr(GKVtu0ugXVW8bteM6pnM)(orrtzFMS08tigVuMLkmFWeHP(BNYS1H5dMim1F7uMLq0VjRVQB0HWjkZxRMg4cEeOpoYhK8DIIMYi(fMpyIWu)PX833jkAk7ZKLMFcXcUqmQlU33jILk)1b9u9FA1Q1yNYmEbGkKgUrhcNOmF1Gia7QKQzwde3QSXd8WNcqVI05FN4(qp)FxxjLv4JEuDf37MsN878VwJHJQCcHOYtC0enL1jQnaOqSI0WGacZ4xKgBzatxKA1AKjsYGypqZaK(0itKeMOwU(0WGacZksJTmGPlsTAnYejrTWv7ai9PHdaKqksdIMPainujhCYX4qzwRbzqCksdIMPaiD(xRbMEFx7Kbm8ksJTmGPlsTAnYejXbasiDuJJcifPXwgW0fPwTgzIKWGBsFAKjsczqC6Og7qhttzfPXwgW0fPwTgdQhmiGWSI0yldy6IuRwJd6ifPXwgW0fPwTAnorrtzi4ninG5d(aVged64J0NgMS0YN0GhfaiH0WKLgVuM141YHtiexG414nkDRtCFJ1W0BYXlLzn4atTWS8jnidWZh(ua6vKo)7exN87exNJ1jUAnCOa0Ri1A4KjgDdrwAn2ZmhttzPMSEY6dPbUa0d0d0d0tVd6na6bzyGEdGEGVFnGE4a9GmmqVbqpW3VMFqpJRWa9oXYhd0Ba0tyyGla9a9a9a9oXYhd0BTwlWfcddCb4cWfGlaxaUaCb4IgqhtRwqoTIICPtXKov9pUgMS0c9BsN)OVHDAff5ksdNmXOBjgEdsdIbTmPrMijBqZHRG5)mt6tJmrsC4cpfH0NgozIr3s4QXKgozIr3Ay4ninig0YKgoCfhFnYdyqtA4WfEkcPXFdrTWmsd8DN(ioqs409AN8sv(AIKGUjVOWjYl))ACnC4cpfHKqhKdA0RX4BnnYej5KnOMPzk9PrMjQfM1aMnAJmrsiCPU4M1rne1cZAGpLcGrDHb6PYJQCcHa6LAmiaaP14eiqmiaat4M0GtTcxd0JUd6noOlSgzIKqgeaGjCt6OgeUuxCZAq4sDXnZ)cedVgKbbayc3KotXv(853itKKmtBDuTgKb45lD9D0RpnW0KbaiEiYsJtz3AWjDCnidWZhIS0YN0afMj3o0rqJdmm3mcA8iqFCKpibT0fmnenezPLpHGwmEZWts4HR2KgAM2sig8mbRZ)gCfTcxR8McQOIkFxxjLF076pFuh7V7Qg13THP3KJxaOcPr6UNUXxf(3D6VEpIkqb)XVB0HWjkZxnEOhMCU33jI1jQnidWZ3iaHHLoftAmIZxZX14b64d7Od4tbOxr68VtCDYVtCDowN46e1o)R1GL3qoTIICKo)BODOS(0WfnMXTZFC4A8qpm56Ogp0dtUxyksJra63EdEyGE4ZfAGEJYppasJmZoTIICfPbHl1f3SgeUuxCZ8VaXWRbzqaaMWnPZuCLpF(1A8qpm5c9BsN8BOXAWjDCGE(VH2HYsiAmPbNV4fPbzaE(uHOv4ADYNFdYa88XJgZ42j)gp0dtUrqhFyhDOrqb0ynW0evvM5yA1sdidVgpqhFkhnZWWNcqVI05FN)DYVZ)ohRZ)orT86k6xb1v(XTYVRO(JBLuCT7Q21vQ1y)GBsyh0GDowdtVjxFAaXW0MMYGaj2PvuKJuKAn0m1YrKoQXd9WKdfgrSo)BqgGNVoQwNUwKgMS04faQqA4gDiCIY8vJhOJpLJMzy4tbOxr68VZ)o535FNJ15FNOwEDf9RG6k)4w53vu)XTskU2Dv76k1AStzgVaqfsd3OdHtuMVAqeGDvs1mRbIBv24bE4tbOxr6KFN4(qp)FxxjLv4JEuDf37MsTgdhv5ecrLN4OjAkRtuBaqHyfPHbbeMXVin2YaMUi1Q1itKKbXEGMbi9PrMijmrTC9PHbbeMvKgBzatxKA1AKjsIAHR2bq6tdhaiHuKgentbqAOso4KJXHYSwdYG4uKgentbq68VwJmrsyWnPpnYejXbasiDuJd6ifPXwgW0fPwTgy69DTtgWWRin2YaMUi1Q1itKeYG40rngupyqaHzfPXwgW0fPwTg7qhttzfPXwgW0fPwTghfqksJTmGPlsTA1ACIIMYqWBqAaZh8bEnig0XhPpnmzPLpPbpkaqcPHjlnEPmRXRLdNqiUaXRbzaE(6OgMEtoEPmRbhyQfMLpPbzaE(WNcqVI05FN46KFN46CSoXvRbMMOQYmhtRwAaz41Wjtm6gIS0ASNzoMMYsnz9K1hsdCbOhOhOhONEh0Ba0dYWa9ga9aF)Aa9Wb6bzyGEdGEGVFn)GEgxHb6DILpgO3aONWWaxa6b6b6b6DILpgO3ATwGlegg4cWfGlaxaUaCb4cWfnYm70kkYvKgeUuxCZAq4sDXndFkfaJ6cRbzqaaMWnPt(4WHJVR1AaDmTAb50kkYLoft6u1)4AyYsl0VjD(J(g2PvuKRinYejzdAoCfm)NzsFAKjsIdx4PiK(0Wjtm6wIH3G0GyqltAKjssMPToQHdx4PiKg)nC4ko(AKhWGM0WWBqAqmOLjne1cZinW3D6J4ajHt3RDYlv5Rjsc6M8IcNiV8)RX1Gmiaat4M0jFC4WX31goCHNIqsOdYbn61y8TMgzIKCYguZ0mL(0iZe1cZAaZgTrMijeUuxCZ6OgIAHznWNsbWOUWa9u5rvoHqa9sngeaG0ACceigeaGjCtAmsGougOhDh0tvQpllnYejHmiaat4M0rniCPU4M1GWL6IBg(ukag1fwdNmXOBjC1ysdNmXOB1AqgGNV013rV(04HEyY5EFNiwNO24HEyYHcJiwN)n0mTLqm4zcwN)nm9MC8cavins390n(QW)Ut)17rubk4p(DJoeorz(QbedtBAkdcKyNwrrosrQ1GmapFJaegw6umPXioFnhxJhOJpSJoGpfGEfPZ)oX1j)oX15yDIRtu78VwdwEd50kkYr68Vb0X0ugPin0mTvKgy0eNmXOB9PHtMy0Tg8iqFCKpi57efnLr8lmFWeHP(tJ5VVtu0u23d8(2v8tigIS0YNK6QOWm52HocAOnkBgLrqdnEubkiVs5Dsz10axWJa9Xr(GKVtu0ugXVW8bteM6pnM)(orrtzFpW77rXpHyiYslFsQRIcZKBh6iOH2OSzugbn04rfOG8kL3jLvtdCbmFWeHP(BNYS1H5dMim1F7uMLq0VjRdZhmryQ)2PmlzhaQqa9wdOhpc0hh5ds(orrtze)cZhmryQ)0y(77efnL9zYsZpRTy8szwQPbUGhb6JJ8bjFNOOPmIFH5dMim1FAm)9DIIMY(mzP5NqmEPmlvy(Gjct93oLzRdZhmryQ)2PmlHOFtwFv3OdHtuMVwnnWf8iqFCKpi57efnLr8lmFWeHP(tJ5VVtu0u2Njln)eIfCHyuxCVVtelv(Rd6P6)0QvRHlAmJBN)RGRXd9WKRJA8qpm5EHPingbOF7n4Hb6HpxOb6nk)8ainEOhMCH(nPt(n0ouwcrJjn48fVinidWZhIS0YN0afMj3o0rqJdmm3mcA8iqFCKpibT0fmnenezPLpHGwmEZWts4HR2KgKb45tfIwHR1jF(nidWZhpAmJBN8B8qpm5gbD8HD0HgbfqJ1W0BY1NgASgJeOdLb6H)4A4qbOxrQ1y)GBsyh0GDowJh6Hjh(ua6vKo)7exN87exNJ1jUorTZ)An0ouwFAOzQLJiDudmnzaaIhIS04u2TgGEQ6HgVrPBDI7BSADUsrAyYsJxaOcPHB0HWjkZxnEOhMC4tbOxr68VtCDYVtCDowN46e1o)R1a6yAkJuKgAM2ksdmAItMy0T(0Wjtm6wdEeOpoYhK8DIIMYi(fMpyIWu)PX833jkAk77bEF7k(jedrwA5tsDvuyMC7qhbn0gLnJYiOHgpQafKxP8oPSAAGl4rG(4iFqY3jkAkJ4xy(Gjct9NgZFFNOOPSVh499O4NqmezPLpj1vrHzYTdDe0qBu2mkJGgA8OcuqELY7KYQPbUaMpyIWu)Ttz26W8bteM6VDkZsi63K1H5dMim1F7uMLSdaviGERb0Jhb6JJ8bjFNOOPmIFH5dMim1FAm)9DIIMY(mzP5N1wmEPml10axWJa9Xr(GKVtu0ugXVW8bteM6pnM)(orrtzFMS08tigVuMLkmFWeHP(BNYS1H5dMim1F7uMLq0VjRVQB0HWjkZxRMg4cEeOpoYhK8DIIMYi(fMpyIWu)PX833jkAk7ZKLMFcXcUqmQlU33jILk)1b9u9FA1Q1yNYmEbGkKgUrhcNOmF1Gia7QKQzwde3QSXd8WNcqVI05FN4(qp)FxxjLv4JEuDf37MsN878VwJHJQCcHOYtC0enL1jQnaOqSI0WGacZ4xKgBzatxKA1AKjsYGypqZaK(0itKeMOwU(0WGacZksJTmGPlsTAnYejrTWv7ai9PHdaKqksdIMPainujhCYX4qzwRbzqCksdIMPaiD(xRbMEFx7Kbm8ksJTmGPlsTAnYejXbasiDuJd6ifPXwgW0fPwTgzIKWGBsFAKjsczqC6Og7qhttzfPXwgW0fPwTgdQhmiGWSI0yldy6IuRwJJcifPXwgW0fPwTAnorrtzi4ninG5d(aVged64J0NgMS0YN0GhfaiH0WKLgVuM141YHtiexG41W0BYXlLzn4atTWS8jnidWZh(ua6vKo)7exN87exNJ1jUAnCYeJUHilTg7zMJPPSutwpz9H0axa6b6b6b6P3b9ga9GmmqVbqpW3VgqpCGEqggO3aOh47xZpONXvyGENy5Jb6na6jmmWfGEGEGEGENy5Jb6TwRf4cHHbUaCb4cWfGlaxaUaCrJmZoTIICfPbHl1f3SgeUuxCZ8VaXWRbzqaaMWnPt(4WHJVR1AaDmTAb50kkYLoft6u1)4AyYsl0VjD(J(g2PvuKRinYejzdAoCfm)NzsFAKjsIdx4PiK(0Wjtm6wIH3G0GyqltAKjssMPToQbHl1f3SgeUuxCZ8VaXWRHtMy0TeUAmPHtMy0TgoCHNIqsOdYbn61y8TMggEdsdIbTmPrMijNSb1mntPpnYmrTWSgWSrBKjscHl1f3SoQXjqGyqaaMWnPXib6qzGE0DqpvP(SS0qulmRb(ukag1fgONkpQYjecOxQXGaaKwJmrsidcaWeUjDudrTWmsd8DN(ioqs409AN8sv(AIKGUjVOWjYl))ACnC4ko(AKhWGM0WHl8uesJ)gKbbayc3Ko5Jdho(UwRbzaE(sxFh96tJ3O0ToX9nwdYa88HilT8jnqHzYTdDe04adZnJGgpc0hh5dsqlDbtdrdrwA5tiOfJ3m8KeE4QnPbzaE(6OgMEtoEbGkKgP7E6gFv4F3P)69iQaf8h)UrhcNOmF1qJ1yKaDOmqp)3GmapFJaegw6umPXioFnhxJhOJpSJoGpfGEfPZ)oX1j)oX15yDIRtu78VwdntTCePJA8aD8PC0mddFka9ksN)D(3j)o)7CSo)7e1YRROFfux5h3k)UI6pUvsX1URAxxPwJh6Hjxh14HEyY9ctrAmcq)2BWdd0dFUqd0Bu(5bqA8qpm5CVVteRtuB8qpm5c9BsN8BaXW0MMYGaj2PvuKJuKAn0ouwcrJjn48fVinidWZhpAmJBN8BqgGNpviAfUwN853W0BY1Ngp0dtUrqhFyhDOrqb0ynW0evvM5yA1sdidVg7hCtc7GgSZXA4IgZ425)k4AODOS(0WHcqVIuRblVHCAff5iD(3qZ0wcXGNjyD(3attgaG4HilnoLDRXib6qznEOhMCOWiI15FTorFrAyYsJxaOcPHB0HWjkZxnWZ9(orSovTRP0yNYmEbGkKgUrhcNOmF14bE4tbOxr68VtCDYVtCFON)VRRKYk8rpQUI7DtPZX68VwdakeRinmiGWSI0yldy6IuRwdYG4uKgentbq68VXwgW0fPt(DuTAngupyqaHzfPXwgW0fPwTgzIK4aajKoQXrbKI0yldy6IuRwJmrsidIth1yh6yAkRin2YaMUi1Q1WbasifPbrZuaKgQKdo5yCOmR1atVVRDYagEfPXwgW0fPwTgh0rksJTmGPlsTA1ACIIMYqWBqAaZh8bEnig0XhPpn0mTL4q3gaetW68VHjlT8jn4rbasinmzPXlLznETC4ecXfiEnidWZxh1W0BYXlLznETC4ecXfiEnEOhMCOWiI15FdNmXOBiYsRXEM5yAkl10axa6b6b6b6DILpgOxQRQQ)WT7d0B8a0tv)HB33QP5ND6TbTurhtBPdzWuxDaaINCRMgO34bO3poC4wh0dDmTLoKbthUm1vhaG4j3QPb6nEa69JdhU0aximmqpWfGlAaDmTAb50kkYLoft6u1)4AGPjdaq8qKLgNYU1qv70WoTIICfPHH3G0Wjtm6wdNmXOBjC1ysdtVjynCYeJULy4ninig0YKgozIr3ASNzoMMYsnnWfGEGEGEGENy5Jb6zxwaximmWfGlaxaUaCrdNmXOBJlFqttzn2ZmhttzPMg4cqpqpqpqpaQdea0BBa0BnGEBqJ73gCzQ4wh0dDmTLoKbtD1baiEYTAAPb6nEa6TbnUFBWLP(VoOh6yAlDidMoCzQRoaaXtUvtlnqVXtqVFC4axa6b6b6b6DILpgO32W6)4WTUDzbCHWWA4KjgDBc3Kg7zMJPPSutdCbOhOhOhOha1bca6Tna6TgqVnOX9BdUmvCRd6HoM2shYGPU6aaep5wnT0a9gpa92Gg3Vn4Yu)xh0dDmTLoKbthUm1vhaG4j3QPLgO34jO3poCGla9a9a9a9oXYhd0JyNMP8TtVnOL6QQ6V9vxh0BBinWfcdRHOwygPb6MOGKOs388Y)nC4ko(AiQfMvRbzaE(WNcqVI05FN46KFN46CSoXvRbzaE(qKLw(KgOWm52HocACGH5MrqJhb6JJ8bjOLUGPHOHilT8je0IXBgEscpC1M0GROv4ADogUgMEtoEbGkKgUrhcNOmF14b64d7Od4tbOxr68VtCDYVtCDowN46e1o)R1GL3qoTIICKo)B8qpm5gbD8HD0HgbfqJ14HEyY1rnEOhMCVWuKgJa0V9g8Wa9WNl0a9gLFEaKgUOXmUDYhvCnEOhMCH(nPt(nmzPf63Ko5JAdnwdvHQqvOkufQcvHQqvKoKbBqgGNpE0yg3o53W0BYf63Ko5JAdmnzaaIhIS08VwHR1qvZAGPjQQmZX0QLgqaGgqmmTPPmiqIDAff5ifPwJh6Hjh(ua6vKo)7exN87exNJ1jUorTZ)An2p4Me2bnyNJ1q7qz9PXd9WKZ9(orSorTwTgQ78hv()1Ab +da1F)aqissyrkjDjssQpPKsgLiPtjszvkufnlLuDlssTlvLFPqvyyqLJPQAzOQEMcLPbjDnQK2MsIVbPQXjsCovPsRJQkUNsk2NcvLdIkSqfYdHQAIku5IQs2iQsFujLAKKeojKyLkHxQqv1mrfDtrQ2PI(jvQHss0sPQQEQWuH4QqQSvss0xrvmwvPI3svLMlKYDPQk7v6VIyWuLddAXQIhtftgkxMyZkvFMeJgv60KA1KKKxtvz2aUTsz3O8BKgUcoUcvPLRYZrmDkxxuBNK67ujgVs05HQSEvPmFvPQ9d09VinGfPwdsd(FJ9H(gBnWAGvKgyAIQkZCmTAPbeaOXjkAkdbVbPHYrZdnGoMwTGCAff5sNIjDQ6FCnKLdqgMG1Ng45EFNiwNQ()hxdIaSRsQMzng5gbXD6C(IxKgASgQGcGhO3aeac69KbaiC1MjhEny5nKtROihPZ)gauiwrAyqaHzfPXwgW0fPwTgy69DTtgWWRin2YaMUi1Q14GosrASLbmDrQvRHdaKqksdIMPainujhCYX4qzwRXG6bdcimRin2YaMUi1Q14OasrASLbmDrQvRrMijoaqcPHDzPXo0X0uwrASLbmDrQvRwTgofPZ)I0WKLgVaqfsd3OdHtuMVAS09(orSovTR8BGN79DIyDQA(8BODOS(0yNYmEbGkKgUrhcNOmF1Gia7QKQzwde3QSXd8WNcqVI0j)oX9HE()UUskRWh9O6kU3nLAngoQYjeIkpXrt0uwNO2aGcXksddcimJFrASLbmDrQvRrMijdI9andq6tJmrsyIA56tddcimRin2YaMUi1Q1itKe1cxTdG0NgoaqcPiniAMcG0qLCWjhJdLzTgKbXPiniAMcG05FTgy69DTtgWWRin2YaMUi1Q1itKehaiH0rnoOJuKgBzatxKA1AKjscdUj9PrMijKbXPJASdDmnLvKgBzatxKA1AmOEWGacZksJTmGPlsTAnokGuKgBzatxKA1Q14efnLHG3G0aMp4d8AqmOJpsFAyYslFsdEuaGesdtwA8szwJxlhoHqCbIxJ3O0ToX9nwdYa881rnm9MC8szwdoWulmlFsdYa88HpfGEfPZ)oX1j)oX15yDIRwdNmXOBiYsRXEM5yAkl1K1twFinWfGEGEGEGE6DqVbqpidd0Ba0d89Rb0dhOhKHb6na6b((18d6zCfgO3jw(yGEdGEcddCbOhOhOhO3jw(yGER1AbUqyyGlaxaUaCb4cWfGlax0iZStROixrAq4sDXnRbHl1f3m8PuamQlSgKbbayc3Ko5Jdv0pwTgqhtRwqoTIICPtXKov9pUgMS0c9BsN)OVHDAff5ksdNmXOBjgEdsdIbTmPrMijBqZHRG5)mt6tJmrsC4cpfH0NgKbbayc3Ko5Jdv0pwJmrsozdQzAMsFA4WvC81ipGbnPHH3G0GyqltAiQfMrAGV70hXbscNUx7KxQYxtKe0n5fforE5)xJRHtMy0TeUAmPHtMy0TgoCHNIqsOdYbn61y8TMgoCHNIqA83iZe1cZAaZgTrMijeUuxCZ6OgIAHznWNsbWOUWa9u5rvoHqa9sngeaG0ACceigeaGjCtAOckaEGEbxQJVgzIKqgeaGjCt6OgzIKKzARJAq4sDXnRbHl1f3m8PuamQlSAnidWZx667OxFAqgGNpezPLpPbkmtUDOJGghyyUze04rG(4iFqcAPlyAiAiYslFcbTy8MHNKWdxTjnW0KbaiEiYsJtz3Aa6PQhAOXAOckaEGEeUuhFn0mTLqm4zcwN)n4kAfUw5nfurfv(UUsk)O31F(Oo2F3vnQVBdtVjhVaqfsJ0DpDJVk8V70F9EevGc(JF3OdHtuMVAqgGNVracdlDkM0yeNVMJRXd0Xh2rhWNcqVI05FN46KFN46CSoX1jQD(xRblVHCAff5iD(3a6yAkJuKgAM2ksdmAItMy0T(0Wjtm6wdEeOpoYhK8DIIMYi(fMpyIWu)PX833jkAk77bEF7k(jedrwA5tsDvuyMC7qhbn0gLnJYiOHgpQafKxP8oPSAAGl4rG(4iFqY3jkAkJ4xy(Gjct9NgZFFNOOPSVh499O4NqmezPLpj1vrHzYTdDe0qBu2mkJGgA8OcuqELY7KYQPbUaMpyIWu)Ttz26W8bteM6VDkZsi63K1H5dMim1F7uMLSdaviGERb0Jhb6JJ8bjFNOOPmIFH5dMim1FAm)9DIIMY(mzP5N1wmEPml10axWJa9Xr(GKVtu0ugXVW8bteM6pnM)(orrtzFMS08tigVuMLkmFWeHP(BNYS1H5dMim1F7uMLq0VjRVQB0HWjkZxRMg4cEeOpoYhK8DIIMYi(fMpyIWu)PX833jkAk7ZKLMFcXcUqmQlU33jILk)1b9u9FA1Q1WfnMXTZFC4A8qpm56Ogp0dtUxyksJra63EdEyGE4ZfAGEJYppasdmnrvLzoMwT0aYWRXd9WKl0VjDYVH2HYsiAmPbNV4fPXd0XNYrZmm8Pa0RiD(35FN878VZX68VtulVUI(vqDLFCR87kQ)4wjfx7UQDDLAnidWZNkeTcxRt(8BqgGNpE0yg3o534HEyYnc64d7OdnckGgRHP3KRpnGyyAttzqGe70kkYrksTgoua6vKAn2p4Me2bnyNJ14HEyYHcJiwN)nEOhMC4tbOxr68VtCDYVtCDowN46e1o)R1qZulhr6Ogp0dto377eX6e1ADYVinidWZhpAmJBN8BS09(orSovTR8BGN79DIyDQA(8BaDmnLrksdntBfPbgnXjtm6wFA4KjgDRbpc0hh5ds(orrtze)cZhmryQ)0y(77efnL99aVVDf)eIHilT8jPUkkmtUDOJGgAJYMrze0qJhvGcYRuENuwnnWf8iqFCKpi57efnLr8lmFWeHP(tJ5VVtu0u23d8(Eu8tigIS0YNK6QOWm52HocAOnkBgLrqdnEubkiVs5Dsz10axaZhmryQ)2PmBDy(Gjct93oLzje9BY6W8bteM6VDkZs2bGkeqV1a6XJa9Xr(GKVtu0ugXVW8bteM6pnM)(orrtzFMS08ZAlgVuMLAAGl4rG(4iFqY3jkAkJ4xy(Gjct9NgZFFNOOPSptwA(jeJxkZsfMpyIWu)Ttz26W8bteM6VDkZsi63K1x1n6q4eL5RvtdCbpc0hh5ds(orrtze)cZhmryQ)0y(77efnL9zYsZpHybxig1f377eXsL)6GEQ(pTA1AStzgVaqfsd3OdHtuMVAqeGDvs1mRbIBv24bE4tbOxr68VtCFON)VRRKYk8rpQUI7DtPt(D(xRXWrvoHqu5joAIMY6e1gauiwrAyqaHz8lsJTmGPlsTAnYejzqShOzasFAKjsctulxFAyqaHzfPXwgW0fPwTgzIKOw4QDaK(0WbasifPbrZuaKgQKdo5yCOmR1GmiofPbrZuaKo)R1itKegCt6tJmrsCaGesh14GosrASLbmDrQvRbMEFx7Kbm8ksJTmGPlsTAnYejHmioDuJb1dgeqywrASLbmDrQvRXo0X0uwrASLbmDrQvRXrbKI0yldy6IuRwTgNOOPme8gKgW8bFGxdIbD8r6tdtwA5tAWJcaKqAyYsJxkZA8A5WjeIlq8A8gLU1jUVXAqgGNVoQHP3KJxkZAWbMAHz5tAqgGNp8Pa0RiD(3jUo53jUohRtC1AGPjQQmZX0QLgqgEnCYeJUHilTg7zMJPPSutwpz9H0axa6b6b6b6P3b9ga9GmmqVbqpW3VgqpCGEqggO3aOh47xZpONXvyGENy5Jb6na6jmmWfGEGEGEGENy5Jb6TwRf4cHHbUaCb4cWfGlaxaUaCrdOJPvliNwrrU0PysNQ(hxdtwAH(nPZF03WoTIICfPHtMy0TedVbPbXGwM0itKKnO5WvW8FMj9PrMijoCHNIq6tJmrsYmT1rniCPU4M1GWL6IBM)figEnidcaWeUjDYhhQOFSgoCHNIqsOdYbn61y8TMgoCHNIqA83itKKt2GAMMP0NgzMOwywdy2OnYejHWL6IBwh14eiqmiaat4M0qfua8a9cUuhFne1cZAGpLcGrDHb6PYJQCcHa6LAmiaaP1itKeYGaamHBsh1qulmJ0aF3PpIdKeoDV2jVuLVMijOBYlkCI8Y)VgxdhUIJVg5bmOjnm8gKgedAzsdNmXOBjC1ysdNmXOB1AqgGNV013rV(04HEyY5EFNiwNO2GROv4AL3uqfvu576kP8JEx)5J6y)Dx1O(Unm9MC8cavins390n(QW)Ut)17rubk4p(DJoeorz(QXd0XNYrZmm8Pa0RiD(35FN878VZX68VtulVUI(vqDLFCR87kQ)4wjfx7UQDDLAnidWZ3iaHHLoftAmIZxZX14b64d7Od4tbOxr68VtCDYVtCDowN46e1o)R1qZulhr6Ogp0dto8Pa0RiD(3jUo53jUohRtCDIAN)1A8qpm5qHreRZ)gp0dtUoQXd9WK7fMI0yeG(T3GhgOh(CHgO3O8ZdG0WHcqVIuRXd9WKl0VjDYVbedtBAkdcKyNwrrosrQ1q7qzjenM0GZx8I0W0BY1NgKb45tfIwHR1jF(nmzPXlauH0Wn6q4eL5Rgp0dtUrqhFyhDOrqb0yn0ynubfapqpcxQJpqp)3iZStROixrAq4sDXnRbHl1f3m)lqm8AqgeaGjCt6Kpour)y1ASFWnjSdAWohRHlAmJBN)4W1q7qz9PblVHCAff5iD(3qZ0wcXGNjyD(3GmapFiYslFsduyMC7qhbnoWWCZiOXJa9Xr(Ge0sxW0q0qKLw(ecAX4ndpjHhUAtAGPjdaq8qKLgNYU1qfua8a9cUuhF16CSI0GmapF8OXmUDYVXs377eX60v(nWZ9(orSovnF(nGoMMYifPHMPTI0aJM4KjgDRpnCYeJU1Ghb6JJ8bjFNOOPmIFH5dMim1FAm)9DIIMY(EG33UIFcXqKLw(KuxffMj3o0rqdTrzZOmcAOXJkqb5vkVtkRMg4cEeOpoYhK8DIIMYi(fMpyIWu)PX833jkAk77bEFpk(jedrwA5tsDvuyMC7qhbn0gLnJYiOHgpQafKxP8oPSAAGlG5dMim1F7uMTomFWeHP(BNYSeI(nzDy(Gjct93oLzj7aqfcO3Aa94rG(4iFqY3jkAkJ4xy(Gjct9NgZFFNOOPSptwA(zTfJxkZsnnWf8iqFCKpi57efnLr8lmFWeHP(tJ5VVtu0u2Njln)eIXlLzPcZhmryQ)2PmBDy(Gjct93oLzje9BY6R6gDiCIY81QPbUGhb6JJ8bjFNOOPmIFH5dMim1FAm)9DIIMY(mzP5NqSGleJ6I79DIyPYFDqpv)NwTAn2PmJxaOcPHB0HWjkZxnicWUkPAM1aXTkB8ap8Pa0RiDYVtCFON)VRRKYk8rpQUI7DtPZXkVPm2yRGd9OUcouhlf0JEurF3vTRUwRXWrvoHqu5joAIMY6e1gauiwrAyqaHz8lsJTmGPlsTAnYejzqShOzasFAKjsctulxFAyqaHzfPXwgW0fPwTgzIKOw4QDaK(0WbasifPbrZuaKgQKdo5yCOmR1GmiofPbrZuaKo)R1itKegCt6tJmrsCaGesh14GosrASLbmDrQvRbMEFx7Kbm8ksJTmGPlsTAnYejHmioDuJb1dgeqywrASLbmDrQvRXo0X0uwrASLbmDrQvRXrbKI0yldy6IuRwTgNOOPme8gKgW8bFGxdIbD8r6tdtwA5tAWJcaKqAyYsJxkZA8A5WjeIlq8A8gLU1jUVXAqgGNVoQHP3KJxkZAWbMAHz5tAqgGNp8Pa0RiD(3jUo53jUohRtC1AGPjQQmZX0QLgqgEnCYeJUHilTg7zMJPPSutwpz9H0axa6b6b6b6P3b9ga9GmmqVbqpW3VgqpCGEqggO3aOh47xZpONXvyGENy5Jb6na6jmmWfGEGEGEGENy5Jb6TwRf4cHHbUaCb4cWfGlaxaUaCrdOJPvliNwrrU0PysNQ(hxdtwAH(nPZF03WoTIICfPHtMy0TedVbPbXGwM0itKKnO5WvW8FMj9PrMijoCHNIq6tJmrsYmT1rniCPU4M1GWL6IBg(ukag1fwdYGaamHBsNP4kF(8B4WfEkcjHoih0OxJX3AA4WfEkcPXFJmrsozdQzAMsFAKzIAHznGzJ2itKecxQlUzDuJtGaXGaamHBsdo1kCnqp6oO34GUWAiQfM1aFkfaJ6cd0tLhv5ecb0l1yqaasRrMijKbbayc3KoQHOwygPb(UtFehijC6ETtEPkFnrsq3Kxu4e5L)FnUgoCfhFnYdyqtAy4ninig0YKgozIr3s4QXKgozIr3Q1GmapFPRVJE9PXd9WKZ9(orSorTbxrRW1kVPGkQOY31vs5h9U(Zh1X(7UQr9DBy6n54faQqAKU7PB8vH)DN(R3JOcuWF87gDiCIY8vJhOJpLJMzy4tbOxr68VZ)o535FNJ15FNOwEDf9RG6k)4w53vu)XTskU2Dv76k1AqgGNVracdlDkM0yeNVMJRXd0Xh2rhWNcqVI05FN46KFN46CSoX1jQD(xRHMPwoI0rnEOhMC4tbOxr68VtCDYVtCDowN46e1o)R14HEyYHcJiwN)nEOhMCDuJh6Hj3lmfPXia9BVbpmqp85cnqVr5NhaPHdfGEfPwJh6HjxOFt6KFdigM20ugeiXoTIICKIuRH2HYsiAmPbNV4fPHP3KRpnidWZNkeTcxRt(8ByYsJxaOcPHB0HWjkZxnEOhMCJGo(Wo6qJGcOXAOXAWjDCnYm70kkYvKgeUuxCZAq4sDXndFkfaJ6cRbzqaaMWnPZuCLpF(1ASFWnjSdAWohRHlAmJBN)4W1q7qz9PblVHCAff5iD(3qZ0wcXGNjyD(3GmapFiYslFsduyMC7qhbnoWWCZiOXJa9Xr(Ge0sxW0q0qKLw(ecAX4ndpjHhUAtAGPjdaq8qKLgNYU1a0tvpuRtulsdtwA8cavinCJoeorz(QXs377eX60v(nWZ9(orSovnF(nEOhMC4tbOxr68VtCDYVtCDowN46e1o)R1a6yAkJuKgAM2ksdmAItMy0T(0Wjtm6wdEeOpoYhK8DIIMYi(fMpyIWu)PX833jkAk77bEF7k(jedrwA5tsDvuyMC7qhbn0gLnJYiOHgpQafKxP8oPSAAGl4rG(4iFqY3jkAkJ4xy(Gjct9NgZFFNOOPSVh499O4NqmezPLpj1vrHzYTdDe0qBu2mkJGgA8OcuqELY7KYQPbUaMpyIWu)Ttz26W8bteM6VDkZsi63K1H5dMim1F7uMLSdaviGERb0Jhb6JJ8bjFNOOPmIFH5dMim1FAm)9DIIMY(mzP5N1wmEPml10axWJa9Xr(GKVtu0ugXVW8bteM6pnM)(orrtzFMS08tigVuMLkmFWeHP(BNYS1H5dMim1F7uMLq0VjRVQB0HWjkZxRMg4cEeOpoYhK8DIIMYi(fMpyIWu)PX833jkAk7ZKLMFcXcUqmQlU33jILk)1b9u9FA1Q1yNYmEbGkKgUrhcNOmF1Gia7QKQzwde3QSXd8WNcqVI05FN4(qp)FxxjLv4JEuDf37MsN878VwJHJQCcHOYtC0enL1jQnaOqSI0WGacZ4xKgBzatxKA1AKjsYGypqZaK(0itKeMOwU(0WGacZksJTmGPlsTAnYejrTWv7ai9PHdaKqksdIMPainujhCYX4qzwRbzqCksdIMPaiD(xRbMEFx7Kbm8ksJTmGPlsTAnYejXbasiDuJJcifPXwgW0fPwTgzIKWGBsFAKjsczqC6Og7qhttzfPXwgW0fPwTgdQhmiGWSI0yldy6IuRwJd6ifPXwgW0fPwTAnorrtzi4ninG5d(aVged64J0NgMS0YN0GhfaiH0WKLgVuM141YHtiexG414nkDRtCFJ1W0BYXlLzn4atTWS8jnidWZh(ua6vKo)7exN87exNJ1jUAnCOa0Ri1A4KjgDdrwAn2ZmhttzPMSEY6dPbUa0d0d0d0tVd6na6bzyGEdGEGVFnGE4a9GmmqVbqpW3VMFqpJRWa9oXYhd0Ba0tyyGla9a9a9a9oXYhd0BTwlWfcddCb4cWfGlaxaUaCb4IgqhtRwqoTIICPtXKov9pUgMS0c9BsN)OVHDAff5ksdNmXOBjgEdsdIbTmPrMijBqZHRG5)mt6tJmrsC4cpfH0NgozIr3s4QXKgozIr3Ay4ninig0YKgoCfhFnYdyqtA4WfEkcPXFdrTWmsd8DN(ioqs409AN8sv(AIKGUjVOWjYl))ACnC4cpfHKqhKdA0RX4BnnYej5KnOMPzk9PrMjQfM1aMnAJmrsiCPU4M1rne1cZAGpLcGrDHb6PYJQCcHa6LAmiaaP14eiqmiaat4M0GtTcxd0JUd6noOlSgzIKqgeaGjCt6OgeUuxCZAq4sDXnZ)cedVgKbbayc3KotXv(853itKKmtBDuTgKb45lD9D0RpnW0KbaiEiYsJtz3AWjDCnidWZhIS0YN0afMj3o0rqJdmm3mcA8iqFCKpibT0fmnenezPLpHGwmEZWts4HR2KgAM2sig8mbRZ)gCfTcxR8McQOIkFxxjLF076pFuh7V7Qg13THP3KJxaOcPr6UNUXxf(3D6VEpIkqb)XVB0HWjkZxnEOhMCU33jI1jQnidWZ3iaHHLoftAmIZxZX14b64d7Od4tbOxr68VtCDYVtCDowN46e1o)R1GL3qoTIICKo)BODOS(0WfnMXTZFC4A8qpm56Ogp0dtUxyksJra63EdEyGE4ZfAGEJYppasJmZoTIICfPbHl1f3SgeUuxCZ8VaXWRbzqaaMWnPZuCLpF(1A8qpm5c9BsN8BOXAWjDCGE(VH2HYsiAmPbNV4fPbzaE(uHOv4ADYNFdYa88XJgZ42j)gp0dtUrqhFyhDOrqb0ynW0evvM5yA1sdidVgpqhFkhnZWWNcqVI05FN)DYVZ)ohRZ)orT86k6xb1v(XTYVRO(JBLuCT7Q21vQ1y)GBsyh0GDowdtVjxFAaXW0MMYGaj2PvuKJuKAn0m1YrKoQXd9WKdfgrSo)BqgGNVoQwNUwKgMS04faQqA4gDiCIY8vJhOJpLJMzy4tbOxr68VZ)o535FNJ15FNOwEDf9RG6k)4w53vu)XTskU2Dv76k1AStzgVaqfsd3OdHtuMVAqeGDvs1mRbIBv24bE4tbOxr6KFN4(qp)FxxjLv4JEuDf37MsTgdhv5ecrLN4OjAkRtuBaqHyfPHbbeMXVin2YaMUi1Q1itKKbXEGMbi9PrMijmrTC9PHbbeMvKgBzatxKA1AKjsIAHR2bq6tdhaiHuKgentbqAOso4KJXHYSwdYG4uKgentbq68VwJmrsyWnPpnYejXbasiDuJd6ifPXwgW0fPwTgy69DTtgWWRin2YaMUi1Q1itKeYG40rngupyqaHzfPXwgW0fPwTg7qhttzfPXwgW0fPwTghfqksJTmGPlsTA1ACIIMYqWBqAaZh8bEnig0XhPpnmzPLpPbpkaqcPHjlnEPmRXRLdNqiUaXRbzaE(6OgMEtoEPmRbhyQfMLpPbzaE(WNcqVI05FN46KFN46CSoXvRbMMOQYmhtRwAaz41Wjtm6gIS0ASNzoMMYsnz9K1hsdCbOhOhOhONEh0Ba0dYWa9ga9aF)Aa9Wb6bzyGEdGEGVFn)GEgxHb6DILpgO3aONWWaxa6b6b6b6DILpgO3ATwGlegg4cWfGlaxaUaCb4cWfnYm70kkYvKgeUuxCZAq4sDXndFkfaJ6cRbzqaaMWnPt(4WHJVR1AaDmTAb50kkYLoft6u1)4AyYsl0VjD(J(g2PvuKRinYejzdAoCfm)NzsFAKjsIdx4PiK(0Wjtm6wIH3G0GyqltAKjssMPToQHdx4PiKg)nC4ko(AKhWGM0WWBqAqmOLjne1cZinW3D6J4ajHt3RDYlv5Rjsc6M8IcNiV8)RX1Gmiaat4M0jFC4WX31goCHNIqsOdYbn61y8TMgzIKCYguZ0mL(0iZe1cZAaZgTrMijeUuxCZ6OgIAHznWNsbWOUWa9u5rvoHqa9sngeaG0ACceigeaGjCtAmsGougOhDh0tvQpllnYejHmiaat4M0rniCPU4M1GWL6IBg(ukag1fwdNmXOBjC1ysdNmXOB1AqgGNV013rV(04HEyY5EFNiwNO24HEyYHcJiwN)n0mTLqm4zcwN)nm9MC8cavins390n(QW)Ut)17rubk4p(DJoeorz(QbedtBAkdcKyNwrrosrQ1GmapFJaegw6umPXioFnhxJhOJpSJoGpfGEfPZ)oX1j)oX15yDIRtu78VwdwEd50kkYr68Vb0X0ugPin0mTvKgy0eNmXOB9PHtMy0Tg8iqFCKpi57efnLr8lmFWeHP(tJ5VVtu0u23d8(2v8tigIS0YNK6QOWm52HocAOnkBgLrqdnEubkiVs5Dsz10axWJa9Xr(GKVtu0ugXVW8bteM6pnM)(orrtzFpW77rXpHyiYslFsQRIcZKBh6iOH2OSzugbn04rfOG8kL3jLvtdCbmFWeHP(BNYS1H5dMim1F7uMLq0VjRdZhmryQ)2PmlzhaQqa9wdOhpc0hh5ds(orrtze)cZhmryQ)0y(77efnL9zYsZpRTy8szwQPbUGhb6JJ8bjFNOOPmIFH5dMim1FAm)9DIIMY(mzP5NqmEPmlvy(Gjct93oLzRdZhmryQ)2PmlHOFtwFv3OdHtuMVwnnWf8iqFCKpi57efnLr8lmFWeHP(tJ5VVtu0u2Njln)eIfCHyuxCVVtelv(Rd6P6)0QvRHlAmJBN)RGRXd9WKRJA8qpm5EHPingbOF7n4Hb6HpxOb6nk)8ainEOhMCH(nPt(n0ouwcrJjn48fVinidWZhIS0YN0afMj3o0rqJdmm3mcA8iqFCKpibT0fmnenezPLpHGwmEZWts4HR2KgKb45tfIwHR1jF(nidWZhpAmJBN8B8qpm5gbD8HD0HgbfqJ1W0BY1NgASgJeOdLb6H)4A4qbOxrQ1y)GBsyh0GDowJh6Hjh(ua6vKo)7exN87exNJ1jUorTZ)An0ouwFAOzQLJiDudmnzaaIhIS04u2TgGEQ6HgVrPBDI7BSADUsrAyYsJxaOcPHB0HWjkZxnEOhMC4tbOxr68VtCDYVtCDowN46e1o)R1a6yAkJuKgAM2ksdmAItMy0T(0Wjtm6wdEeOpoYhK8DIIMYi(fMpyIWu)PX833jkAk77bEF7k(jedrwA5tsDvuyMC7qhbn0gLnJYiOHgpQafKxP8oPSAAGl4rG(4iFqY3jkAkJ4xy(Gjct9NgZFFNOOPSVh499O4NqmezPLpj1vrHzYTdDe0qBu2mkJGgA8OcuqELY7KYQPbUaMpyIWu)Ttz26W8bteM6VDkZsi63K1H5dMim1F7uMLSdaviGERb0Jhb6JJ8bjFNOOPmIFH5dMim1FAm)9DIIMY(mzP5N1wmEPml10axWJa9Xr(GKVtu0ugXVW8bteM6pnM)(orrtzFMS08tigVuMLkmFWeHP(BNYS1H5dMim1F7uMLq0VjRVQB0HWjkZxRMg4cEeOpoYhK8DIIMYi(fMpyIWu)PX833jkAk7ZKLMFcXcUqmQlU33jILk)1b9u9FA1Q1yNYmEbGkKgUrhcNOmF1Gia7QKQzwde3QSXd8WNcqVI05FN4(qp)FxxjLv4JEuDf37MsN878VwJHJQCcHOYtC0enL1jQnaOqSI0WGacZ4xKgBzatxKA1AKjsYGypqZaK(0itKeMOwU(0WGacZksJTmGPlsTAnYejrTWv7ai9PHdaKqksdIMPainujhCYX4qzwRbzqCksdIMPaiD(xRbMEFx7Kbm8ksJTmGPlsTAnYejXbasiDuJd6ifPXwgW0fPwTgzIKWGBsFAKjsczqC6Og7qhttzfPXwgW0fPwTgdQhmiGWSI0yldy6IuRwJJcifPXwgW0fPwTAnorrtzi4ninG5d(aVged64J0NgMS0YN0GhfaiH0WKLgVuM141YHtiexG41W0BYXlLzn4atTWS8jnidWZh(ua6vKo)7exN87exNJ1jUAnCYeJUHilTg7zMJPPSutwpz9H0axa6b6b6b6P3b9ga9GmmqVbqpW3VgqpCGEqggO3aOh47xZpONXvyGENy5Jb6na6jmmWfGEGEGEGENy5Jb6TwRf4cHHbUaCb4cWfGlaxaUaCrJmZoTIICfPbHl1f3SgeUuxCZ8VaXWRbzqaaMWnPt(4WHJVR1AaDmTAb50kkYLoft6u1)4AyYsl0VjD(J(g2PvuKRinYejzdAoCfm)NzsFAKjsIdx4PiK(0Wjtm6wIH3G0GyqltAKjssMPToQbHl1f3SgeUuxCZ8VaXWRHtMy0TeUAmPHtMy0TgoCHNIqsOdYbn61y8TMggEdsdIbTmPrMijNSb1mntPpnYmrTWSgWSrBKjscHl1f3SoQXjqGyqaaMWnPXib6qzGE0DqpvP(SS0qulmRb(ukag1fgONkpQYjecOxQXGaaKwJmrsidcaWeUjDudrTWmsd8DN(ioqs409AN8sv(AIKGUjVOWjYl))ACnC4ko(AKhWGM0WHl8uesJ)gKbbayc3Ko5Jdho(UwRbzaE(sxFh96tJ3O0ToX9nwdYa88HilT8jnqHzYTdDe04adZnJGgpc0hh5dsqlDbtdrdrwA5tiOfJ3m8KeE4QnPbzaE(6OgMEtoEbGkKgP7E6gFv4F3P)69iQaf8h)UrhcNOmF1qJ1yKaDOmqp)3GmapFJaegw6umPXioFnhxJhOJpSJoGpfGEfPZ)oX1j)oX15yDIRtu78VwdntTCePJA8aD8PC0mddFka9ksN)D(3j)o)7CSo)7e1YRROFfux5h3k)UI6pUvsX1URAxxPwJh6Hjxh14HEyY9ctrAmcq)2BWdd0dFUqd0Bu(5bqA8qpm5CVVteRtuB8qpm5c9BsN8BaXW0MMYGaj2PvuKJuKAn0ouwcrJjn48fVinidWZhpAmJBN8BqgGNpviAfUwN853W0BY1Ngp0dtUrqhFyhDOrqb0ynW0evvM5yA1sdidVg7hCtc7GgSZXA4IgZ425)k4AODOS(0WHcqVIuRblVHCAff5iD(3qZ0wcXGNjyD(3attgaG4HilnoLDRXib6qznEOhMCOWiI15FTorFrAyYsJxaOcPHB0HWjkZxnWZ9(orSovTRP0yNYmEbGkKgUrhcNOmF14bE4tbOxr68VtCDYVtCFON)VRRKYk8rpQUI7DtPZX68VwdakeRinmiGWSI0yldy6IuRwdYG4uKgentbq68VXwgW0fPt(DuTAngupyqaHzfPXwgW0fPwTgzIK4aajKoQXrbKI0yldy6IuRwJmrsidIth1yh6yAkRin2YaMUi1Q1WbasifPbrZuaKgQKdo5yCOmR1atVVRDYagEfPXwgW0fPwTgh0rksJTmGPlsTA1ACIIMYqWBqAaZh8bEnig0XhPpn0mTL4q3gaetW68VHjlT8jn4rbasinmzPXlLznETC4ecXfiEnidWZxh1W0BYXlLznETC4ecXfiEnEOhMCOWiI15FdNmXOBiYsRXEM5yAkl10axa6b6b6b6DILpgOxQRQQ)WT7d0B8a0tv)HB33QP5ND6TbTurhtBPdzWuxDaaINCRMgO34bO3poC4wh0dDmTLoKbthUm1vhaG4j3QPb6nEa69JdhU0aximmqpWfGlAaDmTAb50kkYLoft6u1)4AGPjdaq8qKLgNYU1qv70WoTIICfPHH3G0Wjtm6wdNmXOBjC1ysdtVjynCYeJULy4ninig0YKgozIr3ASNzoMMYsnnWfGEGEGEGENy5Jb6zxwaximmWfGlaxaUaCrdNmXOBJlFqttzn2ZmhttzPMg4cqpqpqpqpaQdea0BBa0BnGEBqJ73gCzQ4wh0dDmTLoKbtD1baiEYTAAPb6nEa6TbnUFBWLP(VoOh6yAlDidMoCzQRoaaXtUvtlnqVXtqVFC4axa6b6b6b6DILpgO32W6)4WTUDzbCHWWA4KjgDBc3Kg7zMJPPSutdCbOhOhOhOha1bca6Tna6TgqVnOX9BdUmvCRd6HoM2shYGPU6aaep5wnT0a9gpa92Gg3Vn4Yu)xh0dDmTLoKbthUm1vhaG4j3QPLgO34jO3poCGla9a9a9a9oXYhd0JyNMP8TtVnOL6QQ6V9vxh0BBinWfcdRHOwygPb6MOGKOs388Y)nC4ko(AiQfMvRbzaE(WNcqVI05FN46KFN46CSoXvRbzaE(qKLw(KgOWm52HocACGH5MrqJhb6JJ8bjOLUGPHOHilT8je0IXBgEscpC1M0GROv4ADogUgMEtoEbGkKgUrhcNOmF14b64d7Od4tbOxr68VtCDYVtCDowN46e1o)R1GL3qoTIICKo)B8qpm5gbD8HD0HgbfqJ14HEyY1rnEOhMCVWuKgJa0V9g8Wa9WNl0a9gLFEaKgUOXmUDYhvCnEOhMCH(nPt(nmzPf63Ko5JAdnwdvHQqvOkufQcvHQqvKoKbBqgGNpE0yg3o53W0BYf63Ko5JAdmnzaaIhIS08VwHR1qvZAGPjQQmZX0QLgqaGgqmmTPPmiqIDAff5ifPwJh6Hjh(ua6vKo)7exN87exNJ1jUorTZ)An2p4Me2bnyNJ1q7qz9PXd9WKZ9(orSorTwTgQ78hv()1Ab diff --git a/WA codes/Hunter Focus (WA CODE).txt b/WeakAuras/Exports/Hunter Focus (WA CODE).txt similarity index 99% rename from WA codes/Hunter Focus (WA CODE).txt rename to WeakAuras/Exports/Hunter Focus (WA CODE).txt index 20555b0..e01cb77 100644 --- a/WA codes/Hunter Focus (WA CODE).txt +++ b/WeakAuras/Exports/Hunter Focus (WA CODE).txt @@ -1 +1 @@ -dye0taqicOfPcDjcGrbGtPsAvkQOzPs0Tae7sO4xkQWWuPoMQyzcQNrGMMkQRHuABeQ6BQeACkQ05aOCpvcoOa1crQ8qaPjcqLlsOSrfvnsHsDsbPvQImtck3eGStL6NkkgQIslvOKNsAQsCva1xjuzUcK9s9xKQgmrhgvlwf8yKmzGUSuBwv6ZkYOjKtJYQja9AKIzlYTvv7wj)wHHlKJdqvlh0ZL00HUUO2ob57cIXlGZluTEcQ2pI9Jlw5Uy0A1A4yemMlA9Bf0kOlw5uitOUazttneqdW2BG8CBTdeXxGnOPZA8zEFRn6nqcFFBf2tSXQepQTobh5iR1o9o7GTqR0ntPmdGeMyZxSYaTkqbkqbkqbkqbkqbkqRGSQaMxuitO2kpLSUY)cKnn1WQ3pwtdoOlwrEQxOlw)5eYCXOrRujET6I1kBnLARXg4DrSyz0AU20tL41QveMBRqov7I1FoHmxmA0AKqrip1l0fR)CczUy0O1xofYglxS(ZjK5IrJwHJu7I1FoHmxmA0ki79LrLtyCxS(ZjK5IrJgnALYfVFCXAnIdPrCmquK3HT(ow48j(u16maxewOBXSEGdb6inGU4Dyp)CbS7NWcgo89zXpxAd)iE)ceAp7TGE(5cy3pHfmC47ZIFU0g(r8(fi0sRrRPbh0fRip1l0fR)CczUy0O1Aut5I1kBnLAVFS(ZjK5I3pMoVdB6mA0AU20tL41QPZkKt1Uy9NtiZfJgTgjueYt9cDX6pNqMlgnA9LtHSXYfR)CczUy0OvQeVwDXALTMsT1yd8UiwSS(ZjK5I1zdwybd4cDB6mA0ki79LrLtyCxS(ZjK5IrJwHJu7I1FoHmxmA0OvypXgRs8O2kpd5h4qRvKtrt1hSYwmKEQXpk1yd69JvSdGzyBvSKqahkrUhWVvSdGZpwO1GHmEIi3CiCeI1ddiydN59T2O3NTwJ4qAmDwr2VHZpwOvXceb7AneECR1ioKgGosdOlE)49T3H9(2Bb9(2O1ddiydPJtrdiCezvhjgOvQCfh)shaT(MxuiBSa4k5ersKejrcBmdxe5rIKijsIKijsIKijsIKijsI8irgtmejWlgo7iKgcWXOepEdpELCQxGw5uitOUazttneqdW2BG8CBfKvJs84LoakS(fTkauwriBAQHUyfJh1wPYvC8TsLR44tVigyBfz)g0kvUIJp9y8O2Af5yUATfQxy1kW7ql0p7mItSyzLkxXXhWLHCKnwwFZlkKnwaCLCIijsIKitdkEIi)re5fiYphffZNhaG7ljsGxmC2rineGJrjE8gE86vICoiYphffZNhaGNljsGxmC2rineq8aaCmkXJ3WJxVsKZjr(CFtorKejrsKPbfprK1OoL28FtKxGibEXqGYRiBnf66DaWXOepEdpELCIijsIKizVeznQtPn)3e5fUarEmy2Vbjsv0apsKOOErK)iI8ce5pIibcrs7nr2lqYjIKijsIe2ygUiYF0Lp33xIWCto1lqRu5ko(B(VT(MxuiBSa4k5ersKejrMgu8er(JiYlqKFokkMppaa3xsKaVy4SJqAiahJs84n841Re5CqKFokkMppaapxsKaVy4SJqAiG4ba4yuIhVHhVELiNtI85(MCIijsIKiHnMHlISIq2AkM3b8ZraokaX8E8sI8hDLCQxGwPYvC8T(MxuiBSa4k5ersKejrcBmdxejcZn5uVajNiNiNiNiNSsjQPOXAocKJTrRi73qLj827WNTwJ4qAkDamdBRHUWg(YP6GcgeCMvniX1CAcod51GaudY4bv6ayg21GuaFMdB6fNig2wr2VH(GvK9B48j(u16maxewOBXSEGtrdiCeb0rAaDX7hVV9oS33ElO33EF27hJwzGwJDEHnKiXUIejkITMSUY)cKnn1WQ3pwXoaQmH3Eh(Svg1y5dwpmGGnumWP2kDjMWfohcsKavehjs6YhoKARHWarrE)ay0A9Wac2qLj827WwpmGGneOJ0a6I3pEF7DyVV9wqVV9(S3pgTYbbziBS4j6riBAQHvxmAf7a48j(u16maxewOBXScYQrjE8shaJfBseAvawwbzvbmVOqMqTvEkz9fY)TIqoY9(S1dCkAMGJ8ceOJ0a6I3N9(2OvrnBse6D4BRhgqWgg6Q2O3pg9oSlwRrCinIJbII8oS13XcNpXNQwNb4IWcDlM1dCiqhPb0fVF88NPfWEaSBAP9o85hXdyxu8(fi0E27WEEXh(r8xuqbf)TGHVy4WpN9lqOvqVf0ZpxANRGck4ZnTNP95IZDUI3VaHwb9(S33XqRrRPbh0fRip1l0fR)CczUy0O1Aut5I1kBnLAVFS(ZjK5I3pMoVdB6mA0ki79LrLtyCxS(ZjK5IrJwHCQ2fR)CczUy0O1xofYglxS(ZjK5IrJwJekc5PEHUy9NtiZfJgTchP2fR)CczUy0O1CTPNkXRvtNvQeVwDXALTMsT1yd8UiwSS(ZjK5I1zdwybd4cDB6mA0OvypXgRs8O2kpd5h4qRvKtrt1hSYwmKEQXpk1yd69JvSdGzyBvSKqahkrUhWVvSdGZpwOvXceb7AneECRhgqWgoZ7BTrVpBTgXH0y6SISFdNFSqRIfic21Ai84wpmGGnm0vTrVFSEyabBiDCkAaHJiR6iXaTsLR44x6aO138IczJfaxjNisIKijsyJz4IipsKejrsKejrsKejrsKejrsKhjYyIHibEXWzhH0qaogL4XB4XRKt9c0kNczc1fiBAQHaAa2EdKNBRGSAuIhV0bqH1VOvbGYkczttn0fRy8O2kvUIJVvQCfhF6fXaBRi73GwPYvC8PhJh1wRihZvRTq9cRwbEhAH(zNrCIflRu5ko(aUmKJSXY6BErHSXcGRKtejrsKezAqXte5pIiVar(5OOy(8aaCFjrc8IHZocPHaCmkXJ3WJxVsKZbr(5OOy(8aa8Cjrc8IHZocPHaIhaGJrjE8gE86vICojYN7BYjIKijsIe2ygUiYF0Lp33xIWCto1lqRu5ko(B(VT(MxuiBSa4k5ersKejrMgu8er(JiYlqKFokkMppaa3xsKaVy4SJqAiahJs84n841Re5CqKFokkMppaapxsKaVy4SJqAiG4ba4yuIhVHhVELiNtI85(MCIijsIKiHnMHlISIq2AkM3b8ZraokaX8E8sI8hDLCQxGwPYvC8T(MxuiBSa4k5ersKejrcBmdxejcZn5uVajNiNiNiNiNSsjQPOXAocKJTrRyha9bRCqqgYglEIEeYMMAy1fJwzuJLpyfz)g6dwr2VHZN4tvRZaCryHUfZ6bofnGWreqhPb0fVF8(27WEF7TGEF79zVFmAvuZMeHEh(2AnIdPbOJ0a6I3pEF7DyVV9wqVVnADL)fiBAQHvVFSIDauzcV9o8zRhgqWgA6SEyabBOyGtTv6smHlCoeKibQiosK0LpCi1wdHbII8(bWO16HbeSHkt4T3HTcYQcyErHmHAR8uYkd0ASZlSHej2vKirrS1erkOvSdGZN4tvRZaCryHUfZkiRgL4XlDamwSjrOvbyzfz)gQmH3Eh(S1xi)3kc5i3BbTEyabBiqhPb0fVF8(27WEF7TGEF79zVFmA9aNIMj4iVab6inGU49zVVnATgXH0u6ayg2wdDHn8Lt1bfmi4mRAqIR50eCgYRbbOgKXdQ0bWmSRbPa(mh20lormSn6TGUynWmVV1g9giHP1kd0ASZlSHej2vKirrS1er(yf2tSXQepQTIDamdBRuJ0a6I3N9(XOvofYeQlq20udb0aS9gip3wXoaMHT1qxydF5uDqbdcow1GexZPj4mKxdA2rinm4mKxbudY4bfCgYRbfCgYV4zRGSQaMxuitO2kpLSIq20udDXkgpQTwroMRwPYvC8PhJh1wRihZvR5vluVqR8moSsLR44tVigyBfz)g0kLOMIgR5iqo2wZ1M(8IHMoJwFH8FRiKJCVpBnegikYBATUY)cKnn1WQ3pwf1SjrO30EBnn4GUyf5PEHUy9NtiZfJgTsL41QlwRS1uQTgBG3fXILrR5AtpvIxRMoRqov7I1FoHmxmA0AKqrip1l0fR)CczUy0O1xofYglxS(ZjK5IrJwHJu7I1FoHmxmA0ki79LrLtyCxS(ZjK5IrJgn69zxScYQcyErHmHAR8uYkd0ASZlSHej2vKirrS1erg2kSNyJvjEuBf7ayg2wPgPb0fVp79JrRCkKjuxGSPPgcOby7nqEUTIDamdBRHUWg(YP6GcgeCSQbjUMttWziVg0SJqAyWziVcOgKXdk4mKxdk4mKFXZwdmZ7BTrVP92kczttn0fRy8O2Af5yUAnVAH6fALNXHvQCfhF6X4rT1kYXC1kvUIJp9IyGTvK9BqRuIAkASMJa5yBnxB6ZlgA6mA9fY)TIqoY9(S1qyGOiVP16k)lq20udRE)yvuZMeHEt7T10Gd6IvKN6f6I1FoHmxmA0kvIxRUyTYwtP2ASbExelwgTMRn9ujETA6SchP2fR)CczUy0O1iHIqEQxOlw)5eYCXOrRVCkKnwUy9NtiZfJgTc5uTlw)5eYCXOrRGS3xgvoHXDX6pNqMlgnA0OrRc59Z5WpgTb +dye0taqicOfPcDjcGrbGtPsAvkQOzPs0Tae7sO4xkQWWuPoMQyzcQNrGMMkQRHuABeQ6BQeACkQ05aOCpvcoOa1crQ8qaPjcqLlsOSrfvnsHsDsbPvQImtck3eGStL6NkkgQIslvOKNsAQsCva1xjuzUcK9s9xKQgmrhgvlwf8yKmzGUSuBwv6ZkYOjKtJYQja9AKIzlYTvv7wj)wHHlKJdqvlh0ZL00HUUO2ob57cIXlGZluTEcQ2pI9Jlw5Uy0A1A4yemMlA9Bf0kOlw5uitOUazttneqdW2BG8CBTdeXxGnOPZA8zEFRn6nqcFFBf2tSXQepQTobh5iR1o9o7GTqR0ntPmdGeMyZxSYaTkqbkqbkqbkqbkqbkqRGSQaMxuitO2kpLSUY)cKnn1WQ3pwtdoOlwrEQxOlw)5eYCXOrRujET6I1kBnLARXg4DrSyz0AU20tL41QveMBRqov7I1FoHmxmA0AKqrip1l0fR)CczUy0O1xofYglxS(ZjK5IrJwHJu7I1FoHmxmA0ki79LrLtyCxS(ZjK5IrJgnALYfVFCXAnIdPrCmquK3HT(ow48j(u16maxewOBXSEGdb6inGU4Dyp)CbS7NWcgo89zXpxAd)iE)ceAp7TGE(5cy3pHfmC47ZIFU0g(r8(fi0sRrRPbh0fRip1l0fR)CczUy0O1Aut5I1kBnLAVFS(ZjK5I3pMoVdB6mA0AU20tL41QPZkKt1Uy9NtiZfJgTgjueYt9cDX6pNqMlgnA9LtHSXYfR)CczUy0OvQeVwDXALTMsT1yd8UiwSS(ZjK5I1zdwybd4cDB6mA0ki79LrLtyCxS(ZjK5IrJwHJu7I1FoHmxmA0OvypXgRs8O2kpd5h4qRvKtrt1hSYwmKEQXpk1yd69JvSdGzyBvSKqahkrUhWVvSdGZpwO1GHmEIi3CiCeI1ddiydN59T2O3NTwJ4qAmDwr2VHZpwOvXceb7AneECR1ioKgGosdOlE)49T3H9(2Bb9(2O1ddiydPJtrdiCezvhjgOvQCfh)shaT(MxuiBSa4k5ersKejrcBmdxe5rIKijsIKijsIKijsIKijsI8irgtmejWlgo7iKgcWXOepEdpELCQxGw5uitOUazttneqdW2BG8CBfKvJs84LoakS(fTkauwriBAQHUyfJh1wPYvC8TsLR44tVigyBfz)g0kvUIJp9y8O2Af5yUATfQxy1kW7ql0p7mItSyzLkxXXhWLHCKnwwFZlkKnwaCLCIijsIKitdkEIi)re5fiYphffZNhaG7ljsGxmC2rineGJrjE8gE86vICoiYphffZNhaGNljsGxmC2rineq8aaCmkXJ3WJxVsKZjr(CFtorKejrsKPbfprK1OoL28FtKxGibEXqGYRiBnf66DaWXOepEdpELCIijsIKizVeznQtPn)3e5fUarEmy2Vbjsv0apsKOOErK)iI8ce5pIibcrs7nr2lqYjIKijsIe2ygUiYF0Lp33xIWCto1lqRu5ko(B(VT(MxuiBSa4k5ersKejrMgu8er(JiYlqKFokkMppaa3xsKaVy4SJqAiahJs84n841Re5CqKFokkMppaapxsKaVy4SJqAiG4ba4yuIhVHhVELiNtI85(MCIijsIKiHnMHlISIq2AkM3b8ZraokaX8E8sI8hDLCQxGwPYvC8T(MxuiBSa4k5ersKejrcBmdxejcZn5uVajNiNiNiNiNSsjQPOXAocKJTrRi73qLj827WNTwJ4qAkDamdBRHUWg(YP6GcgeCMvniX1CAcod51GaudY4bv6ayg21GuaFMdB6fNig2wr2VH(GvK9B48j(u16maxewOBXSEGtrdiCeb0rAaDX7hVV9oS33ElO33EF27hJwzGwJDEHnKiXUIejkITMSUY)cKnn1WQ3pwXoaQmH3Eh(Svg1y5dwpmGGnumWP2kDjMWfohcsKavehjs6YhoKARHWarrE)ay0A9Wac2qLj827WwpmGGneOJ0a6I3pEF7DyVV9wqVV9(S3pgTYbbziBS4j6riBAQHvxmAf7a48j(u16maxewOBXScYQrjE8shaJfBseAvawwbzvbmVOqMqTvEkz9fY)TIqoY9(S1dCkAMGJ8ceOJ0a6I3N9(2OvrnBse6D4BRhgqWgg6Q2O3pg9oSlwRrCinIJbII8oS13XcNpXNQwNb4IWcDlM1dCiqhPb0fVF88NPfWEaSBAP9o85hXdyxu8(fi0E27WEEXh(r8xuqbf)TGHVy4WpN9lqOvqVf0ZpxANRGck4ZnTNP95IZDUI3VaHwb9(S33XqRrRPbh0fRip1l0fR)CczUy0O1Aut5I1kBnLAVFS(ZjK5I3pMoVdB6mA0ki79LrLtyCxS(ZjK5IrJwHCQ2fR)CczUy0O1xofYglxS(ZjK5IrJwJekc5PEHUy9NtiZfJgTchP2fR)CczUy0O1CTPNkXRvtNvQeVwDXALTMsT1yd8UiwSS(ZjK5I1zdwybd4cDB6mA0OvypXgRs8O2kpd5h4qRvKtrt1hSYwmKEQXpk1yd69JvSdGzyBvSKqahkrUhWVvSdGZpwOvXceb7AneECRhgqWgoZ7BTrVpBTgXH0y6SISFdNFSqRIfic21Ai84wpmGGnm0vTrVFSEyabBiDCkAaHJiR6iXaTsLR44x6aO138IczJfaxjNisIKijsyJz4IipsKejrsKejrsKejrsKejrsKhjYyIHibEXWzhH0qaogL4XB4XRKt9c0kNczc1fiBAQHaAa2EdKNBRGSAuIhV0bqH1VOvbGYkczttn0fRy8O2kvUIJVvQCfhF6fXaBRi73GwPYvC8PhJh1wRihZvRTq9cRwbEhAH(zNrCIflRu5ko(aUmKJSXY6BErHSXcGRKtejrsKezAqXte5pIiVar(5OOy(8aaCFjrc8IHZocPHaCmkXJ3WJxVsKZbr(5OOy(8aa8Cjrc8IHZocPHaIhaGJrjE8gE86vICojYN7BYjIKijsIe2ygUiYF0Lp33xIWCto1lqRu5ko(B(VT(MxuiBSa4k5ersKejrMgu8er(JiYlqKFokkMppaa3xsKaVy4SJqAiahJs84n841Re5CqKFokkMppaapxsKaVy4SJqAiG4ba4yuIhVHhVELiNtI85(MCIijsIKiHnMHlISIq2AkM3b8ZraokaX8E8sI8hDLCQxGwPYvC8T(MxuiBSa4k5ersKejrcBmdxejcZn5uVajNiNiNiNiNSsjQPOXAocKJTrRyha9bRCqqgYglEIEeYMMAy1fJwzuJLpyfz)g6dwr2VHZN4tvRZaCryHUfZ6bofnGWreqhPb0fVF8(27WEF7TGEF79zVFmAvuZMeHEh(2AnIdPbOJ0a6I3pEF7DyVV9wqVVnADL)fiBAQHvVFSIDauzcV9o8zRhgqWgA6SEyabBOyGtTv6smHlCoeKibQiosK0LpCi1wdHbII8(bWO16HbeSHkt4T3HTcYQcyErHmHAR8uYkd0ASZlSHej2vKirrS1erkOvSdGZN4tvRZaCryHUfZkiRgL4XlDamwSjrOvbyzfz)gQmH3Eh(S1xi)3kc5i3BbTEyabBiqhPb0fVF8(27WEF7TGEF79zVFmA9aNIMj4iVab6inGU49zVVnATgXH0u6ayg2wdDHn8Lt1bfmi4mRAqIR50eCgYRbbOgKXdQ0bWmSRbPa(mh20lormSn6TGUynWmVV1g9giHP1kd0ASZlSHej2vKirrS1er(yf2tSXQepQTIDamdBRuJ0a6I3N9(XOvofYeQlq20udb0aS9gip3wXoaMHT1qxydF5uDqbdcow1GexZPj4mKxdA2rinm4mKxbudY4bfCgYRbfCgYV4zRGSQaMxuitO2kpLSIq20udDXkgpQTwroMRwPYvC8PhJh1wRihZvR5vluVqR8moSsLR44tVigyBfz)g0kLOMIgR5iqo2wZ1M(8IHMoJwFH8FRiKJCVpBnegikYBATUY)cKnn1WQ3pwf1SjrO30EBnn4GUyf5PEHUy9NtiZfJgTsL41QlwRS1uQTgBG3fXILrR5AtpvIxRMoRqov7I1FoHmxmA0AKqrip1l0fR)CczUy0O1xofYglxS(ZjK5IrJwHJu7I1FoHmxmA0ki79LrLtyCxS(ZjK5IrJgn69zxScYQcyErHmHAR8uYkd0ASZlSHej2vKirrS1erg2kSNyJvjEuBf7ayg2wPgPb0fVp79JrRCkKjuxGSPPgcOby7nqEUTIDamdBRHUWg(YP6GcgeCSQbjUMttWziVg0SJqAyWziVcOgKXdk4mKxdk4mKFXZwdmZ7BTrVP92kczttn0fRy8O2Af5yUAnVAH6fALNXHvQCfhF6X4rT1kYXC1kvUIJp9IyGTvK9BqRuIAkASMJa5yBnxB6ZlgA6mA9fY)TIqoY9(S1qyGOiVP16k)lq20udRE)yvuZMeHEt7T10Gd6IvKN6f6I1FoHmxmA0kvIxRUyTYwtP2ASbExelwgTMRn9ujETA6SchP2fR)CczUy0O1iHIqEQxOlw)5eYCXOrRVCkKnwUy9NtiZfJgTc5uTlw)5eYCXOrRGS3xgvoHXDX6pNqMlgnA0OrRc59Z5WpgTb diff --git a/WA codes/Icey bog(WA CODE).txt b/WeakAuras/Exports/Icey bog(WA CODE).txt similarity index 100% rename from WA codes/Icey bog(WA CODE).txt rename to WeakAuras/Exports/Icey bog(WA CODE).txt diff --git a/WA codes/JulijaButtons(WA CODE).txt b/WeakAuras/Exports/JulijaButtons(WA CODE).txt similarity index 100% rename from WA codes/JulijaButtons(WA CODE).txt rename to WeakAuras/Exports/JulijaButtons(WA CODE).txt diff --git a/WA codes/Necrotic Rot(WA CODE).txt b/WeakAuras/Exports/Necrotic Rot(WA CODE).txt similarity index 100% rename from WA codes/Necrotic Rot(WA CODE).txt rename to WeakAuras/Exports/Necrotic Rot(WA CODE).txt diff --git a/WA codes/Neki Bog(WA CODE).txt b/WeakAuras/Exports/Neki Bog(WA CODE).txt similarity index 100% rename from WA codes/Neki Bog(WA CODE).txt rename to WeakAuras/Exports/Neki Bog(WA CODE).txt diff --git a/WA codes/Prot Pala Crap (WA CODE).txt b/WeakAuras/Exports/Prot Pala Crap (WA CODE).txt similarity index 100% rename from WA codes/Prot Pala Crap (WA CODE).txt rename to WeakAuras/Exports/Prot Pala Crap (WA CODE).txt diff --git a/WA codes/Prot pala CD popups (WA CODE).txt b/WeakAuras/Exports/Prot pala CD popups (WA CODE).txt similarity index 100% rename from WA codes/Prot pala CD popups (WA CODE).txt rename to WeakAuras/Exports/Prot pala CD popups (WA CODE).txt diff --git a/WA codes/Prot pala CDS (WA CODE).txt b/WeakAuras/Exports/Prot pala CDS (WA CODE).txt similarity index 100% rename from WA codes/Prot pala CDS (WA CODE).txt rename to WeakAuras/Exports/Prot pala CDS (WA CODE).txt diff --git a/WA codes/Prydaz (WA CODE).txt b/WeakAuras/Exports/Prydaz (WA CODE).txt similarity index 99% rename from WA codes/Prydaz (WA CODE).txt rename to WeakAuras/Exports/Prydaz (WA CODE).txt index e59da27..820f835 100644 --- a/WA codes/Prydaz (WA CODE).txt +++ b/WeakAuras/Exports/Prydaz (WA CODE).txt @@ -1 +1 @@ -dWe3DaGiHkxsirFIqvgLqCksQvri5vsPQzPQ0Tqq2LqPFriLHHIogIwgQ0ZekMMuY1qq12KsfFtvrJtOkNtiPUhcK9HavCqeQfIcEOqQMiHQ6IiKnIs8reOmscPYjvvyLOqZKqCtPk2PQ8tcLHkKYsrq5PuMkKUQuL2kcu1xLsLgRqsMlcyVk)fLAWGomulwkEmetMexwYMvv9zu1OrjDArwTqcVwkLzlQBtWUj1VrA4sLJtivTCvEortNQRly7sv9DcvgpQ48KK1luvZhbQ0(bEKdDgEOZNjNXn2yI9ZzcZuMPm0zxXNOAuvD1m(Jg6MHr8u)c9s8811dvP2JqKmNvC6WALszmmtjjJIGgXt9Rz4CEwszw0ovk44ptLy))YY3JqrnZz6Ga6L45RtUh5mzL)JgnP9zmigkQy9icrSGoltXkdDMJZL2h6mHq2tdD(8zkP))esi7Qg6mHq2tdD(8zhgPg6mHq2tdD(8z)yepr1dDMqi7PHoF(SU(DooxAFOZeczpn05ZND0Cn0zcHSNg685ZcYInsglLRz(8zidDpYHoliRJTQ9yot6yK2Kwk(1EKXBwqwhBo7XCMss2LXQqlo(SOebW4SF6v8hnOvIontVHUh5EK7XDpY9IzpY9ATh58zsSqHwC8WvJHz)uTZsgZlNjwVOI8XJOzn4l60m9g6EC3JC(SJ6ypr17XCwMIvg6mhNlTp0zcHSNg685Zus))jKq2vn0zcHSNg685ZoAUg6mHq2tdD(8zD97CCU0(qNjeYEAOZNp7hJ4jQEOZeczpn05ZNDyKAOZeczpn05ZNpt64ZjwZNR9yod5OD7Xm2wKZKogPn5AM1KlTspuLAgdIq0t8NL0jNncvOlxEPSh5mV44HRM1U8zSuoZlooluTpRPWANkoDSxXhY4BM0XiTjzHQ9znfw7uXPJ9k(qgFZqOcDxjLRzMNeQJfQ2N1uyTtfNo2R4dz8nRbJ0g)rdAfX()LLVh3z0GNt6AMy9IkYhpIMHqZ0BO7rUh5EC3JCVy2JCVw7roFMssgfbnIN6xZW58mKG0PcOfhF2FqJ4jQoIAaJaiacGayMIGZaOaMdBCJKEnaibbGcyN1y)Zu6fPxDYfDfo7S2dMtK46Yyv1fNAau0aWwQbmcGaiacGzkcodG4gj9AaqccaLvUq8iKF(fa7vNCgc))rIRlJvvxCFbW4IkCF8Lqepja2dMxheaqX6cY4uRgaPhaYeWiacGaiaELhonakGDwJ9ptPxKi4gj9AaqrdafWCyJBK0RrnakkaKKjt1aglTYmV44wk(1EKXBMsjXE4WEXagPn(Jg0kRzMoiGEjE(6K7XDggXt9l0lXZxxpuLApMZusYUmwfAXXfP(9zrjcGXzLwHynFU2lM2H5mXLuCw3JlHZCgwNeWEIQh6mbCsp0zi0m9iEpYzbzXgHMP3yygN9yotIGZfN9iNHZDSI3J5meAMEOQ6QzibPtfMPApMZqOz6XWEKZqOz6rW2JCgcntpcBpYzi0m9yjOrMbGaiacGx5HtdG)bnINO6iDhL)kP8laEKFbqEYVayd5xaet(fapUFbqEUFbWgUFbqmx1agbqaeabqaeaVYdNgapsaS9ayKUJYFLucGIcaJCCbqcbGhPA1FbqEsaS9ayKUJYFLucGIcaJWZfajeaYtQw9xaSHeaBpagP7O8xjLaOOaWinCbqcbGnKQv)faXKay7bWiDhL)kPeaffagbZfajeaIjvRgWiacGaiawAfaJaiao7Oo2R9yotIGZLQ9iNpFMFjE(6g6SGSyh0jFmmZv1vZqcsNkmlil2Sw4SZ6yygRfo7SYM2vh2P3mcoZyTWzN1zmNHeKovWCmsBYzZqcsNki(Hd7jQE2FqJ4jQoIAaJaiacGayMIGZaOaMdBCJKEnaibbGcyN1y)Zu6fPxDYfDfo7S2dMtK46Yyv1fNAau0aWwQbmcGaiacGzkcodG4gj9AaqccaLvUq8iKF(fa7vNCgc))rIRlJvvxCFbW4IkCF8Lqepja2dMxheaqX6cY4uRgaPhaYeWiacGaiaMPi4ma2vhsPDmFbGeeakGDwJ9ptPxKi4gj9AaqrdafWCyJBK0RrnakkaKKjt1agbqaeabWR8WPbWU6qkTJ5RVaijtMFbq)cfGXsRmdjiDQaBxvxnt6ypiNv9lTlNfDX6HbIrzlIyem2erWt0dLDVpw(qeuIimIe)zibPtfM9h0iEIQJOgWiacGaiaMPi4ma2e()bqcca7vNCgc))rIRlJvvxCFbW4IkCF8Lqepja2dMxheaqX6cY4udG0dazcyeabqaeat)ayt4)habeCjiauNYaOZAPbWR8WPbq)cfawzzbGx5HtdG)4SSaWsRayS0kZqyTqABwOtb71SGU6xAFgo40zibPtfyZAsPM5jHsz(mSIsYtunoZ2VepFDYHUh5qN5xINVUHoZv1vZKo2dYzYqt1V0Uf()tCMXo6eBOSnuIjm0zbzXo5LWdluJHzv)s7Z(WlbaKirFi11vkZKHMQFP9OD1FIZmlAejIiZsEj8Wc1EKXWTvRwZcYIDqN8XWSGU6xAFgo40zbDYN1LXQQB(SG2VepFDdDwYlHhwO2JmgUTA1A(85ZusYUmwfAXXjSepR(SOuoZloolzmVCMy9IkYhpIM5jH6yjJ5LZeRxur(4r0SgmsB8hnOvqloE4QzOfhpCLKawxLZeJ4P(ypr1I1VUmwLKaeHKtDYITf0Z8KqDRzwcHQxZmH0D0BnZsiunBzsPMjcrSGoRbJ0g)rdALOtZ0BO7rowAr4Cj52omJhtUX8zu)zu)5(jeHhZEChlTiCUKCBhMXJj3y(mQ)mQ)C)eIWJzVyglTiCUKCBhMXJj3y(mQ)mQ)C)eIWJzVw7XC(mKJ2Xw1EmJTf5mLsI9WH9If6v8hnOvwZmpjuNLIFThz8MLuMfTtLwbhF5SR4tunQQUAgoC4g8n7)WcL5h2X71AwueKE6x1mriIf0z)0R4pAqRGwC8WvZ(q719JrkcqSIcvljq7w42ioCyjbIgvC1rC4WYEkLeMaehoSKaeho8NTMHC0o2C2JzSTiNVh3HoliRJTQ9yot6yK2Kwk(1EKXBwqwhBo7XCMss2LXQqlo(SOebW4SF6v8hnOvIontVHUh5EK7XDpY9IzpY9ATh58zsSqHwC8WvJHz)uTZsgZlNjwVOI8XJOzn4l60m9g6EC3JCVw7XC(SJ6ypr17XCwMIvg6SGSyRR(1TMzooxAFOZeczpn05ZNPK()tiHSRAOZeczpn05ZND0Cn0zcHSNg685Z66354CP9HotiK90qNpF2HrQHotiK90qNpF2pgXtu9qNjeYEAOZNpF2v8jQgvvxndhoCd(MjDmsBY1mRjxALEOk1mgeHON4plPtoBeQqxU8szpYzEXXdxnRD5ZyPCMxCCwOAFwtH1ovC6yVIpKX3mPJrAtYcv7ZAkS2PIth7v8Hm(MHqf6UskxZmpjuhluTpRPWANkoDSxXhY4BwdgPn(Jg0kI9)llFpUZObpN01mX6fvKpEendHMP3q3JCpY94Uh5EXSh5ET2JC(mLKmkcAep1VMHZ5zihTBpMX2ICgsq6ub0IJp7pOr8evhrnGraeabqamtrWzauaZHnUrsVgaKGaqbSZAS)zk9I0Ro5IUcNDw7bZjsCDzSQ6ItnakAayl1agbqaeabWmfbNbqCJKEnaibbGYkxiEeYp)cG9QtodH))iX1LXQQlUVayCrfUp(siINea7bZRdcaOyDbzCQvdG0dazcyeabqaeaVYdNgafWoRX(NP0lseCJKEnaOObGcyoSXns61OgaffasYKPAaJLwzM0XNtSMpx7XCMsjXE4WEXagPn(Jg0kRzggXt9l0lXZxxpuLApcrYCMss2LXQqloUi1Vplk1agNvAfI185AVyAhMZ8IJZsgZlNjwVOI8XJOzyDsa7jQEOZeWj9qNjrW5IZEKZKi4CPApYzi0m9yypYzbzXgHMP3yygo3XkEpMZqOz6HQQRMHeKovyMQ9yoJZEmNHqZ0JGTh5meAMEe2EKZqOz6XsqJmdabqaeaVYdNga)dAepr1r6ok)vs5xa8i)cG8KFbWgYVaiM8laEC)cG8C)cGnC)cGyUQbmcGaiacGaiaELhonaEKay7bWiDhL)kPeaffag54cGecaps1Q)cG8Kay7bWiDhL)kPeaffagHNlasiaKNuT6Vaydja2Eams3r5VskbqrbGrA4cGecaBivR(laIjbW2dGr6ok)vsjakkamcMlasiaetQwnGraeabqaS0kagbqaC2rDSx7XCgcntpI3JC(8z(L45RBOZCvD1mPJ9GCwqwStEj8Wc1yyw1V0(Sp8saajs0hsDDLYSKxcpSqThzmCB1Q1SGSyh0jFmmlOR(L2NHdoDgsq6ub2SMuQzEsOuMpZlo(AM9tVI)ObTcAXXdxn7dTx3pgPiaXkkuTKaTBHBJ4WHLeiAuXvhXHdl7PusycqC4WscqC4WF2Agwrj5jQgNz7xINVo5qNplPmlANkTco(saK7SOii90VQzIqelOZyTs8S67XnMzbTFjE(6g6SKxcpSqThzmCB1Q18znyK24pAqRGwC8WvZqloE4kjbSUkNjgXt9XEIQfRFDzSkjbicjN6KfBlONPusShoSxSqVI)ObTYAMHC0o2Q2JzSTiNLqO61mtiDh9wZSgmsB8hnOvIontVHUxR9iNplHq1SLjLAMieXc6mpju3AM5jH6Su8R9iJ3S)dluMFyhVxmZexsXzDpUeE8M5fh3sXV2JmEZ0bb0lXZxNCpYzihTJnN9ygBlY57fZqNfK1Xw1EmNjDmsBslf)ApY4nliRJnN9yotjj7YyvOfhFwuIayC2p9k(Jg0krNMP3q3JCpY94Uh5EXSh5ET2JC(mjwOqloE4QXWSFQ2zjJ5LZeRxur(4r0Sg8fDAMEdDVw7XC(SJ6ypr17XCwMIvg6mhNlTp0zcHSNg685Zus))jKq2vn0zcHSNg685ZoAUg6mHq2tdD(8zD97CCU0(qNjeYEAOZNp7Wi1qNjeYEAOZNp7hJ4jQEOZeczpn05ZNpt64ZjwZNR9yod5OD7Xm2wKZKogPn5AM1KlTspuLAgdIq0t8NL0jNncvOlxEPSh5mV44HRM1U8zSuoZlooluTpRPWANkoDSxXhY4BgcvO7kPCnZ8KqDSq1(SMcRDQ40XEfFiJVznyK24pAqRi2)VS894oJg8CsxZeRxur(4r0meAMEdDpY9i3J7EK7fZEK71ApY5ZusYOiOr8u)AgoNNHeKovaT44Z(dAepr1rudyeabqaeaZueCgafWCyJBK0Rbajiaua7Sg7FMsVi9QtUORWzN1EWCIexxgRQU4udGIga2snGraeabqamtrWzae3iPxdasqaOSYfIhH8ZVayV6KZq4)psCDzSQ6I7lagxuH7JVeI4jbWEW86GaakwxqgNA1ai9aqMagbqaeabWR8WPbqbSZAS)zk9Ieb3iPxdakAaOaMdBCJKEnQbqrbGKmzQgWyPvMPusShoSxmGrAJ)ObTYAMPdcOxINVo5ECNHr8u)c9s8811dvP2JqKmNPKKDzSk0IJls97ZIseaJZ8IJBP4x7rgVzEXXzjJ5LZeRxur(4r0SsRqSMpx7ft7WCM4skoR7XLWzoZtc1zP4x7rgVzyDsa7jQEOZeWj9qNHqZ0J49iNHqZ0dvvxndjiDQWmjcoxQ2JCgo3XkEpMZ4ShZzQ2J5meAMEmSh5meAMEeS9iNHqZ0JW2JCgcntpwcAKzaiacGa4vE40a4FqJ4jQos3r5Vsk)cGh5xaKN8la2q(faXKFbWJ7xaKN7xaSH7xaeZvnGraeabqaeabWR8WPbWJeaBpagP7O8xjLaOOaWihxaKqa4rQw9xaKNeaBpagP7O8xjLaOOaWi8CbqcbG8KQv)faBibW2dGr6ok)vsjakkamsdxaKqaydPA1Fbqmja2Eams3r5VskbqrbGrWCbqcbGys1QbmcGaiacGLwbWiacGZoQJ9ApMZcYIncntVXWmjcoxC2JC(8z(L45RBOZKDvo)HYmUm)S1NCNPusVxDYN1LXQQBwqwSrYuD9HYyygsq6ub2SMuQzibPtfMHeKovGTRQRMv9lTptgAQ(L2TW)FIZm2e3lHrmBIJw0e5dIe)zbD1V0(mpjukZs6(1jRXWSQFPD5SOlwpmqmkBreJGXMicEIEOS79XYhIGseHrK4pR6xAFw0PcnyhafHYplil2YUkN)qzmmt2v58hkYHUh5ECz(zRp5oFMgluZIkCF8Lqepja2dMxheaqX6cYzASqjh6EKZIkCF8Lqepja2dMxheaqX6cY5ZcYITsj9E1jFnZN5fhFnZWkkjpr14mB)s881jh6EKdDMFjE(6g6mxvxnt6ypiNjdnv)s7w4)pXzg7OtSHY2qjMWqNfKf7KxcpSqngMf0jFwxgRQUzv)s7Z(WlbaKirFi11vkZKHMQFP9OD1FIZmlAejIiZsEj8Wc1EKXWTvRwZcYIDqN8XWSGU6xAFgo40zibPtfyZAsPM5jHsz(SG2VepFDdDwYlHhwO2JmgUTA1A(85ZAWiTXF0GwbT44HRMHwC8WvscyDvotmIN6J9evlw)6Yyvscqeso1jl2wqpZtc1TMzjeQEnZes3rV1mlHq1SLjLAMieXc6SgmsB8hnOvIontVHUh5EK71ApY5ZqoAhBv7Xm2wKZukj2dh2lwOxXF0GwznZIIG0t)QMjcrSGolPmlANkTco(samMz)hwOm)WoEVyM9tVI)ObTcAXXdxn7dTx3pgPiaXkkuTKaTBHBJ4WHLeiAuXvhXHdl7PusycqC4WscqC4WF2A2v8jQgvvxndhoCd(ML09RtwJHzihTJnN9ygBlYzshJ0MKfQ2N1uyTtfNo2R4dz8nF(S(7r2Il58na +dWe3DaGiHkxsirFIqvgLqCksQvri5vsPQzPQ0Tqq2LqPFriLHHIogIwgQ0ZekMMuY1qq12KsfFtvrJtOkNtiPUhcK9HavCqeQfIcEOqQMiHQ6IiKnIs8reOmscPYjvvyLOqZKqCtPk2PQ8tcLHkKYsrq5PuMkKUQuL2kcu1xLsLgRqsMlcyVk)fLAWGomulwkEmetMexwYMvv9zu1OrjDArwTqcVwkLzlQBtWUj1VrA4sLJtivTCvEortNQRly7sv9DcvgpQ48KK1luvZhbQ0(bEKdDgEOZNjNXn2yI9ZzcZuMPm0zxXNOAuvD1m(Jg6MHr8u)c9s8811dvP2JqKmNvC6WALszmmtjjJIGgXt9Rz4CEwszw0ovk44ptLy))YY3JqrnZz6Ga6L45RtUh5mzL)JgnP9zmigkQy9icrSGoltXkdDMJZL2h6mHq2tdD(8zkP))esi7Qg6mHq2tdD(8zhgPg6mHq2tdD(8z)yepr1dDMqi7PHoF(SU(DooxAFOZeczpn05ZND0Cn0zcHSNg685ZcYInsglLRz(8zidDpYHoliRJTQ9yot6yK2Kwk(1EKXBwqwhBo7XCMss2LXQqlo(SOebW4SF6v8hnOvIontVHUh5EK7XDpY9IzpY9ATh58zsSqHwC8WvJHz)uTZsgZlNjwVOI8XJOzn4l60m9g6EC3JC(SJ6ypr17XCwMIvg6mhNlTp0zcHSNg685Zus))jKq2vn0zcHSNg685ZoAUg6mHq2tdD(8zD97CCU0(qNjeYEAOZNp7hJ4jQEOZeczpn05ZNDyKAOZeczpn05ZNpt64ZjwZNR9yod5OD7Xm2wKZKogPn5AM1KlTspuLAgdIq0t8NL0jNncvOlxEPSh5mV44HRM1U8zSuoZlooluTpRPWANkoDSxXhY4BM0XiTjzHQ9znfw7uXPJ9k(qgFZqOcDxjLRzMNeQJfQ2N1uyTtfNo2R4dz8nRbJ0g)rdAfX()LLVh3z0GNt6AMy9IkYhpIMHqZ0BO7rUh5EC3JCVy2JCVw7roFMssgfbnIN6xZW58mKG0PcOfhF2FqJ4jQoIAaJaiacGayMIGZaOaMdBCJKEnaibbGcyN1y)Zu6fPxDYfDfo7S2dMtK46Yyv1fNAau0aWwQbmcGaiacGzkcodG4gj9AaqccaLvUq8iKF(fa7vNCgc))rIRlJvvxCFbW4IkCF8Lqepja2dMxheaqX6cY4uRgaPhaYeWiacGaiaELhonakGDwJ9ptPxKi4gj9AaqrdafWCyJBK0RrnakkaKKjt1aglTYmV44wk(1EKXBMsjXE4WEXagPn(Jg0kRzMoiGEjE(6K7XDggXt9l0lXZxxpuLApMZusYUmwfAXXfP(9zrjcGXzLwHynFU2lM2H5mXLuCw3JlHZCgwNeWEIQh6mbCsp0zi0m9iEpYzbzXgHMP3yygN9yotIGZfN9iNHZDSI3J5meAMEOQ6QzibPtfMPApMZqOz6XWEKZqOz6rW2JCgcntpcBpYzi0m9yjOrMbGaiacGx5HtdG)bnINO6iDhL)kP8laEKFbqEYVayd5xaet(fapUFbqEUFbWgUFbqmx1agbqaeabqaeaVYdNgapsaS9ayKUJYFLucGIcaJCCbqcbGhPA1FbqEsaS9ayKUJYFLucGIcaJWZfajeaYtQw9xaSHeaBpagP7O8xjLaOOaWinCbqcbGnKQv)faXKay7bWiDhL)kPeaffagbZfajeaIjvRgWiacGaiawAfaJaiao7Oo2R9yotIGZLQ9iNpFMFjE(6g6SGSyh0jFmmZv1vZqcsNkmlil2Sw4SZ6yygRfo7SYM2vh2P3mcoZyTWzN1zmNHeKovWCmsBYzZqcsNki(Hd7jQE2FqJ4jQoIAaJaiacGayMIGZaOaMdBCJKEnaibbGcyN1y)Zu6fPxDYfDfo7S2dMtK46Yyv1fNAau0aWwQbmcGaiacGzkcodG4gj9AaqccaLvUq8iKF(fa7vNCgc))rIRlJvvxCFbW4IkCF8Lqepja2dMxheaqX6cY4uRgaPhaYeWiacGaiaMPi4ma2vhsPDmFbGeeakGDwJ9ptPxKi4gj9AaqrdafWCyJBK0RrnakkaKKjt1agbqaeabWR8WPbWU6qkTJ5RVaijtMFbq)cfGXsRmdjiDQaBxvxnt6ypiNv9lTlNfDX6HbIrzlIyem2erWt0dLDVpw(qeuIimIe)zibPtfM9h0iEIQJOgWiacGaiaMPi4ma2e()bqcca7vNCgc))rIRlJvvxCFbW4IkCF8Lqepja2dMxheaqX6cY4udG0dazcyeabqaeat)ayt4)habeCjiauNYaOZAPbWR8WPbq)cfawzzbGx5HtdG)4SSaWsRayS0kZqyTqABwOtb71SGU6xAFgo40zibPtfyZAsPM5jHsz(mSIsYtunoZ2VepFDYHUh5qN5xINVUHoZv1vZKo2dYzYqt1V0Uf()tCMXo6eBOSnuIjm0zbzXo5LWdluJHzv)s7Z(WlbaKirFi11vkZKHMQFP9OD1FIZmlAejIiZsEj8Wc1EKXWTvRwZcYIDqN8XWSGU6xAFgo40zbDYN1LXQQB(SG2VepFDdDwYlHhwO2JmgUTA1A(85ZusYUmwfAXXjSepR(SOuoZloolzmVCMy9IkYhpIM5jH6yjJ5LZeRxur(4r0SgmsB8hnOvqloE4QzOfhpCLKawxLZeJ4P(ypr1I1VUmwLKaeHKtDYITf0Z8KqDRzwcHQxZmH0D0BnZsiunBzsPMjcrSGoRbJ0g)rdALOtZ0BO7rowAr4Cj52omJhtUX8zu)zu)5(jeHhZEChlTiCUKCBhMXJj3y(mQ)mQ)C)eIWJzVyglTiCUKCBhMXJj3y(mQ)mQ)C)eIWJzVw7XC(mKJ2Xw1EmJTf5mLsI9WH9If6v8hnOvwZmpjuNLIFThz8MLuMfTtLwbhF5SR4tunQQUAgoC4g8n7)WcL5h2X71AwueKE6x1mriIf0z)0R4pAqRGwC8WvZ(q719JrkcqSIcvljq7w42ioCyjbIgvC1rC4WYEkLeMaehoSKaeho8NTMHC0o2C2JzSTiNVh3HoliRJTQ9yot6yK2Kwk(1EKXBwqwhBo7XCMss2LXQqlo(SOebW4SF6v8hnOvIontVHUh5EK7XDpY9IzpY9ATh58zsSqHwC8WvJHz)uTZsgZlNjwVOI8XJOzn4l60m9g6EC3JCVw7XC(SJ6ypr17XCwMIvg6SGSyRR(1TMzooxAFOZeczpn05ZNPK()tiHSRAOZeczpn05ZND0Cn0zcHSNg685Z66354CP9HotiK90qNpF2HrQHotiK90qNpF2pgXtu9qNjeYEAOZNpF2v8jQgvvxndhoCd(MjDmsBY1mRjxALEOk1mgeHON4plPtoBeQqxU8szpYzEXXdxnRD5ZyPCMxCCwOAFwtH1ovC6yVIpKX3mPJrAtYcv7ZAkS2PIth7v8Hm(MHqf6UskxZmpjuhluTpRPWANkoDSxXhY4BwdgPn(Jg0kI9)llFpUZObpN01mX6fvKpEendHMP3q3JCpY94Uh5EXSh5ET2JC(mLKmkcAep1VMHZ5zihTBpMX2ICgsq6ub0IJp7pOr8evhrnGraeabqamtrWzauaZHnUrsVgaKGaqbSZAS)zk9I0Ro5IUcNDw7bZjsCDzSQ6ItnakAayl1agbqaeabWmfbNbqCJKEnaibbGYkxiEeYp)cG9QtodH))iX1LXQQlUVayCrfUp(siINea7bZRdcaOyDbzCQvdG0dazcyeabqaeaVYdNgafWoRX(NP0lseCJKEnaOObGcyoSXns61OgaffasYKPAaJLwzM0XNtSMpx7XCMsjXE4WEXagPn(Jg0kRzggXt9l0lXZxxpuLApcrYCMss2LXQqloUi1Vplk1agNvAfI185AVyAhMZ8IJZsgZlNjwVOI8XJOzyDsa7jQEOZeWj9qNjrW5IZEKZKi4CPApYzi0m9yypYzbzXgHMP3yygo3XkEpMZqOz6HQQRMHeKovyMQ9yoJZEmNHqZ0JGTh5meAMEe2EKZqOz6XsqJmdabqaeaVYdNga)dAepr1r6ok)vs5xa8i)cG8KFbWgYVaiM8laEC)cG8C)cGnC)cGyUQbmcGaiacGaiaELhonaEKay7bWiDhL)kPeaffag54cGecaps1Q)cG8Kay7bWiDhL)kPeaffagHNlasiaKNuT6Vaydja2Eams3r5VskbqrbGrA4cGecaBivR(laIjbW2dGr6ok)vsjakkamcMlasiaetQwnGraeabqaS0kagbqaC2rDSx7XCgcntpI3JC(8z(L45RBOZCvD1mPJ9GCwqwStEj8Wc1yyw1V0(Sp8saajs0hsDDLYSKxcpSqThzmCB1Q1SGSyh0jFmmlOR(L2NHdoDgsq6ub2SMuQzEsOuMpZlo(AM9tVI)ObTcAXXdxn7dTx3pgPiaXkkuTKaTBHBJ4WHLeiAuXvhXHdl7PusycqC4WscqC4WF2Agwrj5jQgNz7xINVo5qNplPmlANkTco(saK7SOii90VQzIqelOZyTs8S67XnMzbTFjE(6g6SKxcpSqThzmCB1Q18znyK24pAqRGwC8WvZqloE4kjbSUkNjgXt9XEIQfRFDzSkjbicjN6KfBlONPusShoSxSqVI)ObTYAMHC0o2Q2JzSTiNLqO61mtiDh9wZSgmsB8hnOvIontVHUxR9iNplHq1SLjLAMieXc6mpju3AM5jH6Su8R9iJ3S)dluMFyhVxmZexsXzDpUeE8M5fh3sXV2JmEZ0bb0lXZxNCpYzihTJnN9ygBlY57fZqNfK1Xw1EmNjDmsBslf)ApY4nliRJnN9yotjj7YyvOfhFwuIayC2p9k(Jg0krNMP3q3JCpY94Uh5EXSh5ET2JC(mjwOqloE4QXWSFQ2zjJ5LZeRxur(4r0Sg8fDAMEdDVw7XC(SJ6ypr17XCwMIvg6mhNlTp0zcHSNg685Zus))jKq2vn0zcHSNg685ZoAUg6mHq2tdD(8zD97CCU0(qNjeYEAOZNp7Wi1qNjeYEAOZNp7hJ4jQEOZeczpn05ZNpt64ZjwZNR9yod5OD7Xm2wKZKogPn5AM1KlTspuLAgdIq0t8NL0jNncvOlxEPSh5mV44HRM1U8zSuoZlooluTpRPWANkoDSxXhY4BgcvO7kPCnZ8KqDSq1(SMcRDQ40XEfFiJVznyK24pAqRi2)VS894oJg8CsxZeRxur(4r0meAMEdDpY9i3J7EK7fZEK71ApY5ZusYOiOr8u)AgoNNHeKovaT44Z(dAepr1rudyeabqaeaZueCgafWCyJBK0Rbajiaua7Sg7FMsVi9QtUORWzN1EWCIexxgRQU4udGIga2snGraeabqamtrWzae3iPxdasqaOSYfIhH8ZVayV6KZq4)psCDzSQ6I7lagxuH7JVeI4jbWEW86GaakwxqgNA1ai9aqMagbqaeabWR8WPbqbSZAS)zk9Ieb3iPxdakAaOaMdBCJKEnQbqrbGKmzQgWyPvMPusShoSxmGrAJ)ObTYAMPdcOxINVo5ECNHr8u)c9s8811dvP2JqKmNPKKDzSk0IJls97ZIseaJZ8IJBP4x7rgVzEXXzjJ5LZeRxur(4r0SsRqSMpx7ft7WCM4skoR7XLWzoZtc1zP4x7rgVzyDsa7jQEOZeWj9qNHqZ0J49iNHqZ0dvvxndjiDQWmjcoxQ2JCgo3XkEpMZ4ShZzQ2J5meAMEmSh5meAMEeS9iNHqZ0JW2JCgcntpwcAKzaiacGa4vE40a4FqJ4jQos3r5Vsk)cGh5xaKN8la2q(faXKFbWJ7xaKN7xaSH7xaeZvnGraeabqaeabWR8WPbWJeaBpagP7O8xjLaOOaWihxaKqa4rQw9xaKNeaBpagP7O8xjLaOOaWi8CbqcbG8KQv)faBibW2dGr6ok)vsjakkamsdxaKqaydPA1Fbqmja2Eams3r5VskbqrbGrWCbqcbGys1QbmcGaiacGLwbWiacGZoQJ9ApMZcYIncntVXWmjcoxC2JC(8z(L45RBOZKDvo)HYmUm)S1NCNPusVxDYN1LXQQBwqwSrYuD9HYyygsq6ub2SMuQzibPtfMHeKovGTRQRMv9lTptgAQ(L2TW)FIZm2e3lHrmBIJw0e5dIe)zbD1V0(mpjukZs6(1jRXWSQFPD5SOlwpmqmkBreJGXMicEIEOS79XYhIGseHrK4pR6xAFw0PcnyhafHYplil2YUkN)qzmmt2v58hkYHUh5ECz(zRp5oFMgluZIkCF8Lqepja2dMxheaqX6cYzASqjh6EKZIkCF8Lqepja2dMxheaqX6cY5ZcYITsj9E1jFnZN5fhFnZWkkjpr14mB)s881jh6EKdDMFjE(6g6mxvxnt6ypiNjdnv)s7w4)pXzg7OtSHY2qjMWqNfKf7KxcpSqngMf0jFwxgRQUzv)s7Z(WlbaKirFi11vkZKHMQFP9OD1FIZmlAejIiZsEj8Wc1EKXWTvRwZcYIDqN8XWSGU6xAFgo40zibPtfyZAsPM5jHsz(SG2VepFDdDwYlHhwO2JmgUTA1A(85ZAWiTXF0GwbT44HRMHwC8WvscyDvotmIN6J9evlw)6Yyvscqeso1jl2wqpZtc1TMzjeQEnZes3rV1mlHq1SLjLAMieXc6SgmsB8hnOvIontVHUh5EK71ApY5ZqoAhBv7Xm2wKZukj2dh2lwOxXF0GwznZIIG0t)QMjcrSGolPmlANkTco(samMz)hwOm)WoEVyM9tVI)ObTcAXXdxn7dTx3pgPiaXkkuTKaTBHBJ4WHLeiAuXvhXHdl7PusycqC4WscqC4WF2A2v8jQgvvxndhoCd(ML09RtwJHzihTJnN9ygBlYzshJ0MKfQ2N1uyTtfNo2R4dz8nF(S(7r2Il58na diff --git a/WA codes/Prydaz Bars (WA CODE).txt b/WeakAuras/Exports/Prydaz Bars (WA CODE).txt similarity index 100% rename from WA codes/Prydaz Bars (WA CODE).txt rename to WeakAuras/Exports/Prydaz Bars (WA CODE).txt diff --git a/WA codes/Random Number Crap (WA CODE).txt b/WeakAuras/Exports/Random Number Crap (WA CODE).txt similarity index 100% rename from WA codes/Random Number Crap (WA CODE).txt rename to WeakAuras/Exports/Random Number Crap (WA CODE).txt diff --git a/WA codes/Rogue Sniffer 9000(WA CODE).txt b/WeakAuras/Exports/Rogue Sniffer 9000(WA CODE).txt similarity index 100% rename from WA codes/Rogue Sniffer 9000(WA CODE).txt rename to WeakAuras/Exports/Rogue Sniffer 9000(WA CODE).txt diff --git a/WA codes/Trinket procs (WA CODE).txt b/WeakAuras/Exports/Trinket procs (WA CODE).txt similarity index 100% rename from WA codes/Trinket procs (WA CODE).txt rename to WeakAuras/Exports/Trinket procs (WA CODE).txt diff --git a/Complete Projects/Legion/ABS.lua b/WeakAuras/Projects/ABS.lua similarity index 97% rename from Complete Projects/Legion/ABS.lua rename to WeakAuras/Projects/ABS.lua index be0e916..d78b1bc 100644 --- a/Complete Projects/Legion/ABS.lua +++ b/WeakAuras/Projects/ABS.lua @@ -1,239 +1,239 @@ ---UPDATE_BIND_TABLE UPDATE_BINDS UPDATE_BAR_TABLE UPDATE_BARS DELETE_SET LIST_SETS ---[[ -UPDATE_BIND_TABLE saves current binds -UPDATE_BINDS restores saved binds -UPDATE_BAR_TABLE saves current bar layout also supports sets -UPDATE_BARS restores bar layout; defaults to the "default" set -DELETE_SET deletes a specified set -LIST_SETS lists all sets -DELETE and LIST only work for bar layouts - - - -/run WeakAuras.ScanEvents("UPDATE_BINDS") -/run WeakAuras.ScanEvents("UPDATE_BIND_TABLE") - -]] -function(e, ...) - if InCombatLockdown() ~= 1 then - if e == "UPDATE_BIND_TABLE" then - if not WeakAurasSaved.CustomTrash then WeakAurasSaved.CustomTrash = {} end - if not WeakAurasSaved.CustomTrash.BindTableTwo then WeakAurasSaved.CustomTrash.BindTableTwo = {} end - for i = 1, GetNumBindings() do - local comm, bind, bind2 = GetBinding(i) - if comm and bind2 and not WeakAurasSaved.CustomTrash.BindTableTwo[comm] then - print("Adding", comm, "with bind", bind2, "to bind table") - WeakAurasSaved.CustomTrash.BindTableTwo[comm] = {} - WeakAurasSaved.CustomTrash.BindTableTwo[comm].bind = bind2 - WeakAurasSaved.CustomTrash.BindTableTwo[comm].index = i - end - if comm and not bind2 and WeakAurasSaved.CustomTrash.BindTableTwo[comm] then - print("Removing", comm, "with no bind from the bind table") - WeakAurasSaved.CustomTrash.BindTableTwo[comm] = nil - end - end - elseif e == "UPDATE_BINDS" then - for k, v in pairs(WeakAurasSaved.CustomTrash.BindTableTwo) do - local command, bind, bind2 = GetBinding(v.index) - if bind2 ~= v.bind then - --The key should be aura_env.keyBinds[command] but the key is bind2 - print("Key", command, "has bind", bind2, "but should have", v.bind) - if bind2 then SetBinding(bind2) end - if v.bind then SetBinding(v.bind, command) end - end - end - SaveBindings(1) - elseif e == "UPDATE_BAR_TABLE" then - local arg2 = "default" - if ... then arg2 = ... end - if not WeakAurasSaved.CustomTrash then WeakAurasSaved.CustomTrash = {} end - if not WeakAurasSaved.CustomTrash.BarTable then WeakAurasSaved.CustomTrash.BarTable = {} end - if not WeakAurasSaved.CustomTrash.BarTable[arg2] then WeakAurasSaved.CustomTrash.BarTable[arg2] = {} end - for i = 1, 72 do - PickupAction(i) - if GetCursorInfo() then - local type = GetCursorInfo() - local id, name = nil, nil - if not type then WeakAurasSaved.CustomTrash.BarTable[arg2][i] = nil end - if type == "spell" then - id = select(4, GetCursorInfo()) - elseif type == "mount" then - id = select(2, GetCursorInfo()) - elseif type == "macro" then - id = select(2, GetCursorInfo()) - name = select(1, GetMacroInfo(id)) - elseif type == "item" then - id = select(2, GetCursorInfo()) - elseif type == "equipmentset" then - name = select(2, GetCursorInfo()) - end --elseif end - if not WeakAurasSaved.CustomTrash.BarTable[arg2][i] then WeakAurasSaved.CustomTrash.BarTable[arg2][i] = {} end - if id ~= WeakAurasSaved.CustomTrash.BarTable[arg2][i].id or type ~= WeakAurasSaved.CustomTrash.BarTable[arg2][i].type then - WeakAurasSaved.CustomTrash.BarTable[arg2][i].type = type - WeakAurasSaved.CustomTrash.BarTable[arg2][i].id = id - WeakAurasSaved.CustomTrash.BarTable[arg2][i].name = name - if not name then - print("Adding", type, "by id", id, "on slot", i, "to the table") - elseif name then - print("Adding", type, "by id", id, "and name", name, "on slot", i, "to the table") - end - end - end - PickupAction(i) - end - elseif e == "UPDATE_BARS" then - local arg2 = "default" - if ... then arg2 = ... end - for k, v in pairs(WeakAurasSaved.CustomTrash.BarTable[arg2]) do - if v.type == "spell" then - if GetCursorInfo() then ClearCursor() end - PickupAction(k) - if GetCursorInfo() then - local id = select(4, GetCursorInfo()) - if id ~= v.id then - ClearCursor() - PickupSpell(v.id) - PickupAction(k) - ClearCursor() - end - PickupAction(k) - else - ClearCursor() - PickupSpell(v.id) - PickupAction(k) - ClearCursor() - end - elseif v.type == "mount" then - local mid, mindex - --Looking for mount in mount journal - for i = 1, C_MountJournal.GetNumMounts() do - mid = select(12, C_MountJournal.GetDisplayedMountInfo(i)) - local ishave = select(11, C_MountJournal.GetDisplayedMountInfo(i)) - if mid == v.id then - mindex = i - break - end - if ishave == false then - break - end - end - - --Checking what's on the bar - if GetCursorInfo() then ClearCursor() end - PickupAction(k) - if GetCursorInfo() then - local id = select(2, GetCursorInfo()) - if id ~= v.id and mindex then - ClearCursor() - C_MountJournal.Pickup(mindex) - PickupAction(k) - ClearCursor() - end - PickupAction(k) - elseif not GetCursorInfo() and mindex then - ClearCursor() - C_MountJournal.Pickup(mindex) - PickupAction(k) - ClearCursor() - end - elseif v.type == "macro" then - if GetCursorInfo() then ClearCursor() end - PickupAction(k) - if GetCursorInfo() then - local id = select(2, GetCursorInfo()) - local name = select(1, GetMacroInfo(id)) - if id ~= v.id or name ~= v.name then - ClearCursor() - PickupMacro(v.id) - PickupAction(k) - ClearCursor() - end - PickupAction(k) - else - ClearCursor() - local name = GetMacroInfo(v.id) - if name == v.name then - PickupMacro(v.id) - PickupAction(k) - ClearCursor() - end - end - elseif v.type == "equipmentset" then - if GetCursorInfo() then ClearCursor() end - local eqindex - for i = 1, GetNumEquipmentSets() do - local nam = GetEquipmentSetInfo(i) - if nam == v.name then - eqindex = i - break - end - end - if eqindex then - PickupAction(k) - if GetCursorInfo() then - local name = select(2, GetCursorInfo()) - if name ~= v.name then - ClearCursor() - PickupEquipmentSet(eqindex) - PickupAction(k) - ClearCursor() - end - PickupAction(k) - else - ClearCursor() - PickupEquipmentSet(eqindex) - PickupAction(k) - ClearCursor() - end - end - elseif v.type == "item" then - if GetCursorInfo() then ClearCursor() end - local ios, jos - for i = 0, 4 do - for j = 1, GetContainerNumSlots(i) do - local link = select(7, GetContainerItemInfo(i, j)) - if link then - local id = link:match("item:(%d+):") - if id then - id = tonumber(id) - if id == v.id then - ios = i - jos = j - break - end - end - end - end - end - if ios and jos then - PickupAction(k) - if GetCursorInfo() then - local id = select(2, GetCursorInfo()) - if id ~= v.id then - ClearCursor() - PickupContainerItem(ios, jos) - PickupAction(k) - ClearCursor() - end - PickupAction(k) - else - ClearCursor() - PickupContainerItem(ios, jos) - PickupAction(k) - ClearCursor() - end - end - end --elseif end - end - elseif e == "DELETE_SET" then - local arg2 = ... - if arg2 and WeakAurasSaved.CustomTrash.BarTable[arg2] then - WeakAurasSaved.CustomTrash.BarTable[arg2] = nil - end - elseif e == "LIST_SETS" then - for k, v in pairs(WeakAurasSaved.CustomTrash.BarTable) do - print(k) - end - end --elseif end - end -end +--UPDATE_BIND_TABLE UPDATE_BINDS UPDATE_BAR_TABLE UPDATE_BARS DELETE_SET LIST_SETS +--[[ +UPDATE_BIND_TABLE saves current binds +UPDATE_BINDS restores saved binds +UPDATE_BAR_TABLE saves current bar layout also supports sets +UPDATE_BARS restores bar layout; defaults to the "default" set +DELETE_SET deletes a specified set +LIST_SETS lists all sets +DELETE and LIST only work for bar layouts + + + +/run WeakAuras.ScanEvents("UPDATE_BINDS") +/run WeakAuras.ScanEvents("UPDATE_BIND_TABLE") + +]] +function(e, ...) + if InCombatLockdown() ~= 1 then + if e == "UPDATE_BIND_TABLE" then + if not WeakAurasSaved.CustomTrash then WeakAurasSaved.CustomTrash = {} end + if not WeakAurasSaved.CustomTrash.BindTableTwo then WeakAurasSaved.CustomTrash.BindTableTwo = {} end + for i = 1, GetNumBindings() do + local comm, bind, bind2 = GetBinding(i) + if comm and bind2 and not WeakAurasSaved.CustomTrash.BindTableTwo[comm] then + print("Adding", comm, "with bind", bind2, "to bind table") + WeakAurasSaved.CustomTrash.BindTableTwo[comm] = {} + WeakAurasSaved.CustomTrash.BindTableTwo[comm].bind = bind2 + WeakAurasSaved.CustomTrash.BindTableTwo[comm].index = i + end + if comm and not bind2 and WeakAurasSaved.CustomTrash.BindTableTwo[comm] then + print("Removing", comm, "with no bind from the bind table") + WeakAurasSaved.CustomTrash.BindTableTwo[comm] = nil + end + end + elseif e == "UPDATE_BINDS" then + for k, v in pairs(WeakAurasSaved.CustomTrash.BindTableTwo) do + local command, bind, bind2 = GetBinding(v.index) + if bind2 ~= v.bind then + --The key should be aura_env.keyBinds[command] but the key is bind2 + print("Key", command, "has bind", bind2, "but should have", v.bind) + if bind2 then SetBinding(bind2) end + if v.bind then SetBinding(v.bind, command) end + end + end + SaveBindings(1) + elseif e == "UPDATE_BAR_TABLE" then + local arg2 = "default" + if ... then arg2 = ... end + if not WeakAurasSaved.CustomTrash then WeakAurasSaved.CustomTrash = {} end + if not WeakAurasSaved.CustomTrash.BarTable then WeakAurasSaved.CustomTrash.BarTable = {} end + if not WeakAurasSaved.CustomTrash.BarTable[arg2] then WeakAurasSaved.CustomTrash.BarTable[arg2] = {} end + for i = 1, 72 do + PickupAction(i) + if GetCursorInfo() then + local type = GetCursorInfo() + local id, name = nil, nil + if not type then WeakAurasSaved.CustomTrash.BarTable[arg2][i] = nil end + if type == "spell" then + id = select(4, GetCursorInfo()) + elseif type == "mount" then + id = select(2, GetCursorInfo()) + elseif type == "macro" then + id = select(2, GetCursorInfo()) + name = select(1, GetMacroInfo(id)) + elseif type == "item" then + id = select(2, GetCursorInfo()) + elseif type == "equipmentset" then + name = select(2, GetCursorInfo()) + end --elseif end + if not WeakAurasSaved.CustomTrash.BarTable[arg2][i] then WeakAurasSaved.CustomTrash.BarTable[arg2][i] = {} end + if id ~= WeakAurasSaved.CustomTrash.BarTable[arg2][i].id or type ~= WeakAurasSaved.CustomTrash.BarTable[arg2][i].type then + WeakAurasSaved.CustomTrash.BarTable[arg2][i].type = type + WeakAurasSaved.CustomTrash.BarTable[arg2][i].id = id + WeakAurasSaved.CustomTrash.BarTable[arg2][i].name = name + if not name then + print("Adding", type, "by id", id, "on slot", i, "to the table") + elseif name then + print("Adding", type, "by id", id, "and name", name, "on slot", i, "to the table") + end + end + end + PickupAction(i) + end + elseif e == "UPDATE_BARS" then + local arg2 = "default" + if ... then arg2 = ... end + for k, v in pairs(WeakAurasSaved.CustomTrash.BarTable[arg2]) do + if v.type == "spell" then + if GetCursorInfo() then ClearCursor() end + PickupAction(k) + if GetCursorInfo() then + local id = select(4, GetCursorInfo()) + if id ~= v.id then + ClearCursor() + PickupSpell(v.id) + PickupAction(k) + ClearCursor() + end + PickupAction(k) + else + ClearCursor() + PickupSpell(v.id) + PickupAction(k) + ClearCursor() + end + elseif v.type == "mount" then + local mid, mindex + --Looking for mount in mount journal + for i = 1, C_MountJournal.GetNumMounts() do + mid = select(12, C_MountJournal.GetDisplayedMountInfo(i)) + local ishave = select(11, C_MountJournal.GetDisplayedMountInfo(i)) + if mid == v.id then + mindex = i + break + end + if ishave == false then + break + end + end + + --Checking what's on the bar + if GetCursorInfo() then ClearCursor() end + PickupAction(k) + if GetCursorInfo() then + local id = select(2, GetCursorInfo()) + if id ~= v.id and mindex then + ClearCursor() + C_MountJournal.Pickup(mindex) + PickupAction(k) + ClearCursor() + end + PickupAction(k) + elseif not GetCursorInfo() and mindex then + ClearCursor() + C_MountJournal.Pickup(mindex) + PickupAction(k) + ClearCursor() + end + elseif v.type == "macro" then + if GetCursorInfo() then ClearCursor() end + PickupAction(k) + if GetCursorInfo() then + local id = select(2, GetCursorInfo()) + local name = select(1, GetMacroInfo(id)) + if id ~= v.id or name ~= v.name then + ClearCursor() + PickupMacro(v.id) + PickupAction(k) + ClearCursor() + end + PickupAction(k) + else + ClearCursor() + local name = GetMacroInfo(v.id) + if name == v.name then + PickupMacro(v.id) + PickupAction(k) + ClearCursor() + end + end + elseif v.type == "equipmentset" then + if GetCursorInfo() then ClearCursor() end + local eqindex + for i = 1, GetNumEquipmentSets() do + local nam = GetEquipmentSetInfo(i) + if nam == v.name then + eqindex = i + break + end + end + if eqindex then + PickupAction(k) + if GetCursorInfo() then + local name = select(2, GetCursorInfo()) + if name ~= v.name then + ClearCursor() + PickupEquipmentSet(eqindex) + PickupAction(k) + ClearCursor() + end + PickupAction(k) + else + ClearCursor() + PickupEquipmentSet(eqindex) + PickupAction(k) + ClearCursor() + end + end + elseif v.type == "item" then + if GetCursorInfo() then ClearCursor() end + local ios, jos + for i = 0, 4 do + for j = 1, GetContainerNumSlots(i) do + local link = select(7, GetContainerItemInfo(i, j)) + if link then + local id = link:match("item:(%d+):") + if id then + id = tonumber(id) + if id == v.id then + ios = i + jos = j + break + end + end + end + end + end + if ios and jos then + PickupAction(k) + if GetCursorInfo() then + local id = select(2, GetCursorInfo()) + if id ~= v.id then + ClearCursor() + PickupContainerItem(ios, jos) + PickupAction(k) + ClearCursor() + end + PickupAction(k) + else + ClearCursor() + PickupContainerItem(ios, jos) + PickupAction(k) + ClearCursor() + end + end + end --elseif end + end + elseif e == "DELETE_SET" then + local arg2 = ... + if arg2 and WeakAurasSaved.CustomTrash.BarTable[arg2] then + WeakAurasSaved.CustomTrash.BarTable[arg2] = nil + end + elseif e == "LIST_SETS" then + for k, v in pairs(WeakAurasSaved.CustomTrash.BarTable) do + print(k) + end + end --elseif end + end +end diff --git a/NewAge/AHBot/AUCTION_HOUSE_BROWSE_RESULTS_UPDATED.lua b/WeakAuras/Projects/AHBot/AUCTION_HOUSE_BROWSE_RESULTS_UPDATED.lua similarity index 97% rename from NewAge/AHBot/AUCTION_HOUSE_BROWSE_RESULTS_UPDATED.lua rename to WeakAuras/Projects/AHBot/AUCTION_HOUSE_BROWSE_RESULTS_UPDATED.lua index 85ef8c0..c3898d1 100644 --- a/NewAge/AHBot/AUCTION_HOUSE_BROWSE_RESULTS_UPDATED.lua +++ b/WeakAuras/Projects/AHBot/AUCTION_HOUSE_BROWSE_RESULTS_UPDATED.lua @@ -1,19 +1,19 @@ -function() - results = C_AuctionHouse.GetBrowseResults() - -- DevTools_Dump(results) - for k,v in ipairs(results) do - local itemID = v.itemKey.itemID - local itemName = GetItemInfo(itemID) - if aura_env.sellPriceThresholds[itemID] then - if v.minPrice > aura_env.sellPriceThresholds[itemID] then - print(itemName, "too expensive") - SendChatMessage("POKE", "WHISPER", nil, UnitName("player")) - end - elseif aura_env.buyPriceThresholds[itemID] then - if v.minPrice < aura_env.buyPriceThresholds[itemID] then - print(itemName, "too cheap") - SendChatMessage("POKE", "WHISPER", nil, UnitName("player")) - end - end - end +function() + results = C_AuctionHouse.GetBrowseResults() + -- DevTools_Dump(results) + for k,v in ipairs(results) do + local itemID = v.itemKey.itemID + local itemName = GetItemInfo(itemID) + if aura_env.sellPriceThresholds[itemID] then + if v.minPrice > aura_env.sellPriceThresholds[itemID] then + print(itemName, "too expensive") + SendChatMessage("POKE", "WHISPER", nil, UnitName("player")) + end + elseif aura_env.buyPriceThresholds[itemID] then + if v.minPrice < aura_env.buyPriceThresholds[itemID] then + print(itemName, "too cheap") + SendChatMessage("POKE", "WHISPER", nil, UnitName("player")) + end + end + end end \ No newline at end of file diff --git a/NewAge/AHBot/EveryFrameThrottled.lua b/WeakAuras/Projects/AHBot/EveryFrameThrottled.lua similarity index 97% rename from NewAge/AHBot/EveryFrameThrottled.lua rename to WeakAuras/Projects/AHBot/EveryFrameThrottled.lua index 2fafe3f..6e30da2 100644 --- a/NewAge/AHBot/EveryFrameThrottled.lua +++ b/WeakAuras/Projects/AHBot/EveryFrameThrottled.lua @@ -1,6 +1,6 @@ -function() - if not aura_env.last or aura_env.last < GetTime() - aura_env.throttleTime then - aura_env.last = GetTime() - AuctionHouseFrame.SearchBar.FavoritesSearchButton:Click() - end +function() + if not aura_env.last or aura_env.last < GetTime() - aura_env.throttleTime then + aura_env.last = GetTime() + AuctionHouseFrame.SearchBar.FavoritesSearchButton:Click() + end end \ No newline at end of file diff --git a/NewAge/AHBot/INIT.lua b/WeakAuras/Projects/AHBot/INIT.lua similarity index 97% rename from NewAge/AHBot/INIT.lua rename to WeakAuras/Projects/AHBot/INIT.lua index bdd5d98..f6fb62b 100644 --- a/NewAge/AHBot/INIT.lua +++ b/WeakAuras/Projects/AHBot/INIT.lua @@ -1,17 +1,17 @@ -aura_env.throttleTime = 10 - -aura_env.sellPriceThresholds = { - [168446] = 5000 * 100 * 100, -- Accord of Critical Strike - [168447] = 5000 * 100 * 100, -- Accord of Haste - [168448] = 5000 * 100 * 100, -- Accord of Mastery - [168449] = 5000 * 100 * 100, -- Accord of Versatility - [168592] = 4500 * 100 * 100, -- Oceanic Restoration - [168496] = 4500 * 100 * 100, -- Force Multiplier - [168593] = 4500 * 100 * 100, -- Machinist's Brilliance - [168598] = 4500 * 100 * 100, -- Naga Hide -} - -aura_env.buyPriceThresholds = { - [152576] = 5 * 100 * 100, -- Tidesrpay Linen - [152877] = 500 * 100 * 100, -- Veiled Crystal -} +aura_env.throttleTime = 10 + +aura_env.sellPriceThresholds = { + [168446] = 5000 * 100 * 100, -- Accord of Critical Strike + [168447] = 5000 * 100 * 100, -- Accord of Haste + [168448] = 5000 * 100 * 100, -- Accord of Mastery + [168449] = 5000 * 100 * 100, -- Accord of Versatility + [168592] = 4500 * 100 * 100, -- Oceanic Restoration + [168496] = 4500 * 100 * 100, -- Force Multiplier + [168593] = 4500 * 100 * 100, -- Machinist's Brilliance + [168598] = 4500 * 100 * 100, -- Naga Hide +} + +aura_env.buyPriceThresholds = { + [152576] = 5 * 100 * 100, -- Tidesrpay Linen + [152877] = 500 * 100 * 100, -- Veiled Crystal +} diff --git a/NewAge/AHBot/Info.txt b/WeakAuras/Projects/AHBot/Info.txt similarity index 98% rename from NewAge/AHBot/Info.txt rename to WeakAuras/Projects/AHBot/Info.txt index d4a3b55..599f3f8 100644 --- a/NewAge/AHBot/Info.txt +++ b/WeakAuras/Projects/AHBot/Info.txt @@ -1,3 +1,3 @@ -/run AuctionHouseFrame.SearchBar.FavoritesSearchButton:Click() - +/run AuctionHouseFrame.SearchBar.FavoritesSearchButton:Click() + /dump C_AuctionHouse.GetBrowseResults() \ No newline at end of file diff --git a/FreshShit/Absorbs/color.lua b/WeakAuras/Projects/Absorbs/color.lua similarity index 97% rename from FreshShit/Absorbs/color.lua rename to WeakAuras/Projects/Absorbs/color.lua index af02e43..81ecc1e 100644 --- a/FreshShit/Absorbs/color.lua +++ b/WeakAuras/Projects/Absorbs/color.lua @@ -1,3 +1,3 @@ -function(progress) - return aura_env.Display.color.r, aura_env.Display.color.g, aura_env.Display.color.b, 1 - end +function(progress) + return aura_env.Display.color.r, aura_env.Display.color.g, aura_env.Display.color.b, 1 + end diff --git a/FreshShit/Absorbs/duration.lua b/WeakAuras/Projects/Absorbs/duration.lua similarity index 96% rename from FreshShit/Absorbs/duration.lua rename to WeakAuras/Projects/Absorbs/duration.lua index 2e57a3e..6558a26 100644 --- a/FreshShit/Absorbs/duration.lua +++ b/WeakAuras/Projects/Absorbs/duration.lua @@ -1,4 +1,4 @@ -function() - local current, max = aura_env.ShieldManager.GetStats() - return current, max, 1 +function() + local current, max = aura_env.ShieldManager.GetStats() + return current, max, 1 end \ No newline at end of file diff --git a/FreshShit/Absorbs/event.lua b/WeakAuras/Projects/Absorbs/event.lua similarity index 95% rename from FreshShit/Absorbs/event.lua rename to WeakAuras/Projects/Absorbs/event.lua index 041aee8..e2d2668 100644 --- a/FreshShit/Absorbs/event.lua +++ b/WeakAuras/Projects/Absorbs/event.lua @@ -1,8 +1,8 @@ --- TICKER_500 -function() - for _, shield in pairs(aura_env.Shields) do - shield:Update() - end - aura_env.Display.Update() - return true +-- TICKER_500 +function() + for _, shield in pairs(aura_env.Shields) do + shield:Update() + end + aura_env.Display.Update() + return true end \ No newline at end of file diff --git a/FreshShit/Absorbs/export b/WeakAuras/Projects/Absorbs/export similarity index 100% rename from FreshShit/Absorbs/export rename to WeakAuras/Projects/Absorbs/export diff --git a/FreshShit/Absorbs/init.lua b/WeakAuras/Projects/Absorbs/init.lua similarity index 100% rename from FreshShit/Absorbs/init.lua rename to WeakAuras/Projects/Absorbs/init.lua diff --git a/FreshShit/Absorbs/scratch.lua b/WeakAuras/Projects/Absorbs/scratch.lua similarity index 95% rename from FreshShit/Absorbs/scratch.lua rename to WeakAuras/Projects/Absorbs/scratch.lua index d0aba94..fa480df 100644 --- a/FreshShit/Absorbs/scratch.lua +++ b/WeakAuras/Projects/Absorbs/scratch.lua @@ -1,28 +1,28 @@ ----@param table table ----@param depth number? -function DumpTable(table, depth) - if depth == nil then depth = 0 end - if depth > 200 then - print("Error: Depth > 200 in dumpTable()") - return - end - for k, v in pairs(table) do - if type(v) == "table" then - print(string.rep(" ", depth) .. k .. ":") - DumpTable(v, depth + 1) - else - print(string.rep(" ", depth) .. k .. ": ", v) - end - end -end - -local colorer = Colorer.new() - -local value = 1.21 -local rgb = colorer:Interpolate(value) - -for i = 1, 150 do - local value = i / 100 - local rgb = colorer:Interpolate(value) - print(value, rgb.r, rgb.g, rgb.b) -end +---@param table table +---@param depth number? +function DumpTable(table, depth) + if depth == nil then depth = 0 end + if depth > 200 then + print("Error: Depth > 200 in dumpTable()") + return + end + for k, v in pairs(table) do + if type(v) == "table" then + print(string.rep(" ", depth) .. k .. ":") + DumpTable(v, depth + 1) + else + print(string.rep(" ", depth) .. k .. ": ", v) + end + end +end + +local colorer = Colorer.new() + +local value = 1.21 +local rgb = colorer:Interpolate(value) + +for i = 1, 150 do + local value = i / 100 + local rgb = colorer:Interpolate(value) + print(value, rgb.r, rgb.g, rgb.b) +end diff --git a/FreshShit/Absorbs/text.lua b/WeakAuras/Projects/Absorbs/text.lua similarity index 97% rename from FreshShit/Absorbs/text.lua rename to WeakAuras/Projects/Absorbs/text.lua index 9a4fb30..660d4fb 100644 --- a/FreshShit/Absorbs/text.lua +++ b/WeakAuras/Projects/Absorbs/text.lua @@ -1,3 +1,3 @@ -function() - return aura_env.Display.current, aura_env.Display.max, aura_env.Display.ofHp +function() + return aura_env.Display.current, aura_env.Display.max, aura_env.Display.ofHp end \ No newline at end of file diff --git a/FreshShit/AchievementSniffer/event.lua b/WeakAuras/Projects/AchievementSniffer/event.lua similarity index 96% rename from FreshShit/AchievementSniffer/event.lua rename to WeakAuras/Projects/AchievementSniffer/event.lua index 854642b..d6aa2cd 100644 --- a/FreshShit/AchievementSniffer/event.lua +++ b/WeakAuras/Projects/AchievementSniffer/event.lua @@ -1,5 +1,5 @@ ---- PLAYER_TARGET_CHANGED ---- Deprecated in favor of Heimdall.AchievementSniffer ---function(allstates) --- aura_env.TryInspect() ---end +--- PLAYER_TARGET_CHANGED +--- Deprecated in favor of Heimdall.AchievementSniffer +--function(allstates) +-- aura_env.TryInspect() +--end diff --git a/FreshShit/AchievementSniffer/event2.lua b/WeakAuras/Projects/AchievementSniffer/event2.lua similarity index 97% rename from FreshShit/AchievementSniffer/event2.lua rename to WeakAuras/Projects/AchievementSniffer/event2.lua index ab96e90..7874343 100644 --- a/FreshShit/AchievementSniffer/event2.lua +++ b/WeakAuras/Projects/AchievementSniffer/event2.lua @@ -1,16 +1,16 @@ ---- INSPECT_ACHIEVEMENT_READY ---- Deprecated in favor of Heimdall.AchievementSniffer ---function() --- local targetGuid = UnitGUID("target") --- if not targetGuid then return end --- if not string.match(targetGuid, "Player") then return end --- local targetName = UnitName("target") --- --- local should = false --- if not WeakAurasSaved.Cyka.AchievementSniffer[targetName] then should = true end --- if WeakAurasSaved.Cyka.AchievementSniffer2[targetName] then should = false end --- if aura_env.config.rescan then should = true end --- if not should then return end --- --- aura_env.Scan(targetName) ---end +--- INSPECT_ACHIEVEMENT_READY +--- Deprecated in favor of Heimdall.AchievementSniffer +--function() +-- local targetGuid = UnitGUID("target") +-- if not targetGuid then return end +-- if not string.match(targetGuid, "Player") then return end +-- local targetName = UnitName("target") +-- +-- local should = false +-- if not WeakAurasSaved.Cyka.AchievementSniffer[targetName] then should = true end +-- if WeakAurasSaved.Cyka.AchievementSniffer2[targetName] then should = false end +-- if aura_env.config.rescan then should = true end +-- if not should then return end +-- +-- aura_env.Scan(targetName) +--end diff --git a/FreshShit/AchievementSniffer/event3.lua b/WeakAuras/Projects/AchievementSniffer/event3.lua similarity index 94% rename from FreshShit/AchievementSniffer/event3.lua rename to WeakAuras/Projects/AchievementSniffer/event3.lua index 98988f9..986edaf 100644 --- a/FreshShit/AchievementSniffer/event3.lua +++ b/WeakAuras/Projects/AchievementSniffer/event3.lua @@ -1,4 +1,4 @@ --- TICKER_500 -function() - aura_env.TryInspect() +-- TICKER_500 +function() + aura_env.TryInspect() end \ No newline at end of file diff --git a/FreshShit/AchievementSniffer/event4.lua b/WeakAuras/Projects/AchievementSniffer/event4.lua similarity index 95% rename from FreshShit/AchievementSniffer/event4.lua rename to WeakAuras/Projects/AchievementSniffer/event4.lua index 8bfa7d8..12d087e 100644 --- a/FreshShit/AchievementSniffer/event4.lua +++ b/WeakAuras/Projects/AchievementSniffer/event4.lua @@ -1,32 +1,32 @@ ---- TICKER_200 -function(allstates) - for i = 0, 40 do - local unit = "nameplate" .. i - if UnitIsPlayer(unit) then - local name = UnitName(unit) - local seen = false - if not Heimdall_Achievements then return end - if not Heimdall_Achievements.players then return end - if not Heimdall_Achievements.alreadySeen then return end - - if Heimdall_Achievements.players[name] then seen = true end - if Heimdall_Achievements.alreadySeen[name] then seen = true end - - allstates[unit] = { - show = true, - changed = true, - name = name, - unit = unit, - seen = seen, - } - else - allstates[unit] = { - show = false, - changed = true, - seen = false, - } - end - end - - return true +--- TICKER_200 +function(allstates) + for i = 0, 40 do + local unit = "nameplate" .. i + if UnitIsPlayer(unit) then + local name = UnitName(unit) + local seen = false + if not Heimdall_Achievements then return end + if not Heimdall_Achievements.players then return end + if not Heimdall_Achievements.alreadySeen then return end + + if Heimdall_Achievements.players[name] then seen = true end + if Heimdall_Achievements.alreadySeen[name] then seen = true end + + allstates[unit] = { + show = true, + changed = true, + name = name, + unit = unit, + seen = seen, + } + else + allstates[unit] = { + show = false, + changed = true, + seen = false, + } + end + end + + return true end \ No newline at end of file diff --git a/FreshShit/AchievementSniffer/event4_variables.lua b/WeakAuras/Projects/AchievementSniffer/event4_variables.lua similarity index 90% rename from FreshShit/AchievementSniffer/event4_variables.lua rename to WeakAuras/Projects/AchievementSniffer/event4_variables.lua index e457baa..021dd8e 100644 --- a/FreshShit/AchievementSniffer/event4_variables.lua +++ b/WeakAuras/Projects/AchievementSniffer/event4_variables.lua @@ -1,3 +1,3 @@ -{ - seen = "bool", +{ + seen = "bool", } \ No newline at end of file diff --git a/FreshShit/AchievementSniffer/export b/WeakAuras/Projects/AchievementSniffer/export similarity index 100% rename from FreshShit/AchievementSniffer/export rename to WeakAuras/Projects/AchievementSniffer/export diff --git a/FreshShit/AchievementSniffer/info b/WeakAuras/Projects/AchievementSniffer/info similarity index 97% rename from FreshShit/AchievementSniffer/info rename to WeakAuras/Projects/AchievementSniffer/info index a9e972f..f0389e8 100644 --- a/FreshShit/AchievementSniffer/info +++ b/WeakAuras/Projects/AchievementSniffer/info @@ -1,135 +1,135 @@ -main achievement frame is AchievementFrame -The tabs are -AchievementFrameTab1 2 3 -First is "Achievements", 2nd guild and 3rd statistics -Statistics might also be useful but that would be hard to tell, for now - -AchievementFrame > AchievementFrameComparison -The comparison frame is AchievementFrameComparisonContainer (N/A) -Scroll buttons are AchievementFrameComparisonContainerScrollBarScrollDownButton (scrollDown) and AchievementFrameComparisonContainerScrollBarScrollUpButton (scrollUp) - -The actual individual achievement data is in -AchievementFrameComparisonContainerScrollChild (ScrollChild) (not a typo) -It has achievements listed as: -AchievementFrameComparisonContainerButton1 .. 10 -Always seems to be 10 -Scrolling should move 1 new into the view and 1 old out of view - -The buttons themselves represent one row (one achievement) -Our achievement is found in -AchievementFrameComparisonContainerButton1Player (player) -AchievementFrameComparisonContainerButton1Friend (friend) -Ours has names while friend has no names -So we will have to use names from Player and dates from Friend - -Name, title, is under AchievementFrameComparisonContainerButton1PlayerLabel (label) -Friend date achieved is under AchievementFrameComparisonContainerButton1FriendStatus (status) - -We can also get achievement ID from the button frame -AchievementFrameComparisonContainerButton1P under the "id" property - -Categories are under -AchievementFrameCategories (N/A) > AchievementFrameCategoriesContainer (N/A) - -Structure is the same as AchievementFrameComparisonContainer -We have scroll child and scroll up/down -Although there's no scrolling so I'm not sure what we scroll -Not true - the buttons are categories to be expanded into -And clicking one does expand -So after we click we have to recalculate their positions - -In AchievementFrameCategoriesContainer we have many buttons which correspond to categories -The best way of browsing them that I can see is reading the title of each -Since we are only interested in a few -AchievementFrameCategoriesContainerButton1 .. n - -The title is the same structure as the achievement title -AchievementFrameCategoriesContainerButton1Label (label) -Under each button of course - -We can also get the category ID and name from the button frame -AchievementFrameCategoriesContainerButton1 -Under "categoryID" and "name" - - -[11:20 PM] [Virag's DT]: 23:20:04 INSPECT_ACHIEVEMENT_READY - (2) table: 000001AF07021540 -Fires when the achievement frame is ready -Argument #2 is the GUID of the player -None is fired when the frame is closed... -I guess we'll have to check each frame we go over - -See -canInspect = CanInspect("unit", showError) -Arguments: - unit - A unit to inspect (string, unitID) - showError - True to fire a UI_ERROR_MESSAGE event (causing the default UI to display an error message) if the unit cannot be inspected; otherwise false (boolean) -Returns: - canInspect - 1 if the unit can be inspected; otherwise nil (1nil) - -Actually nevermind, this seems much easier and simpler: -completed, month, day, year = GetAchievementComparisonInfo(achievementID) - completed - boolean - Returns true/false depending on whether the unit has completed the achievement or not. - month - number - Month in which the unit has completed the achievement. Returns nil if completed is false. - day - number - Day of the month in which the unit has completed the achievement. Returns nil if completed is false. - year - number - Year (two digits, 21st century is assumed) in which the unit has completed the achievement. Returns nil if completed is false. -Only accurate after the after SetAchievementComparisonUnit is called and the INSPECT_ACHIEVEMENT_READY event has fired. - -success = SetAchievementComparisonUnit(unit) - success - boolean - Returns true/false depending on whether the unit is valid. --> INSPECT_ACHIEVEMENT_READY - -522 -- Somebody Likes Me -523 -- 5 Exalted Reputations -524 -- 10 Exalted Reputations -521 -- 15 Exalted Reputations -520 -- 20 Exalted Reputations -519 -- 25 Exalted Reputations -518 -- 30 Exalted Reputations -1556 -- 25 Fish -1557 -- 50 Fish -1558 -- 100 Fish -238 -- An Honorable Kill -513 -- 100 Honorable Kills -515 -- 500 Honorable Kills -516 -- 1000 Honorable Kills -512 -- 5000 Honorable Kills -509 -- 10000 Honorable Kills -239 -- 25000 Honorable Kills -503 -- 50 Quests Completed -504 -- 100 Quests Completed -505 -- 250 Quests Completed -506 -- 500 Quests Completed -507 -- 1000 Quests Completed -1017 -- Can I Keep Him? -15 -- Plenty of Pets -1248 -- Plethora of Pets -1250 -- Shop Smart, Shop Pet...Smart -2516 -- Lil' Game Hunter -5876 -- Petting Zoo -11188 -- Broken Isles Explorer -11190 -- Broken Isles Pathfinder, Part One -11157 -- Loremaster of Legion -10763 -- Azsuna Matata -10790 -- Vrykul Story, Bro -11124 -- Good Suramaritan -10059 -- Ain't No Mountain High Enough -10698 -- That's Val'sharah Folks! -10672 -- Broken Isles Diplomat -10665 -- Explore Azsuna -10666 -- Explore Val'sharah -10667 -- Explore Highmountain -10668 -- Explore Stormheim -10669 -- Explore Suramar -12069 -- Explore Argus -2141 -- Stable Keeper -2142 -- Filling Up The Barn -2143 -- Leading the Cavalry -7382 -- Dynamic Duo -7383 -- Terrific Trio -7384 -- Quintessential Quintet +main achievement frame is AchievementFrame +The tabs are +AchievementFrameTab1 2 3 +First is "Achievements", 2nd guild and 3rd statistics +Statistics might also be useful but that would be hard to tell, for now + +AchievementFrame > AchievementFrameComparison +The comparison frame is AchievementFrameComparisonContainer (N/A) +Scroll buttons are AchievementFrameComparisonContainerScrollBarScrollDownButton (scrollDown) and AchievementFrameComparisonContainerScrollBarScrollUpButton (scrollUp) + +The actual individual achievement data is in +AchievementFrameComparisonContainerScrollChild (ScrollChild) (not a typo) +It has achievements listed as: +AchievementFrameComparisonContainerButton1 .. 10 +Always seems to be 10 +Scrolling should move 1 new into the view and 1 old out of view + +The buttons themselves represent one row (one achievement) +Our achievement is found in +AchievementFrameComparisonContainerButton1Player (player) +AchievementFrameComparisonContainerButton1Friend (friend) +Ours has names while friend has no names +So we will have to use names from Player and dates from Friend + +Name, title, is under AchievementFrameComparisonContainerButton1PlayerLabel (label) +Friend date achieved is under AchievementFrameComparisonContainerButton1FriendStatus (status) + +We can also get achievement ID from the button frame +AchievementFrameComparisonContainerButton1P under the "id" property + +Categories are under +AchievementFrameCategories (N/A) > AchievementFrameCategoriesContainer (N/A) + +Structure is the same as AchievementFrameComparisonContainer +We have scroll child and scroll up/down +Although there's no scrolling so I'm not sure what we scroll +Not true - the buttons are categories to be expanded into +And clicking one does expand +So after we click we have to recalculate their positions + +In AchievementFrameCategoriesContainer we have many buttons which correspond to categories +The best way of browsing them that I can see is reading the title of each +Since we are only interested in a few +AchievementFrameCategoriesContainerButton1 .. n + +The title is the same structure as the achievement title +AchievementFrameCategoriesContainerButton1Label (label) +Under each button of course + +We can also get the category ID and name from the button frame +AchievementFrameCategoriesContainerButton1 +Under "categoryID" and "name" + + +[11:20 PM] [Virag's DT]: 23:20:04 INSPECT_ACHIEVEMENT_READY - (2) table: 000001AF07021540 +Fires when the achievement frame is ready +Argument #2 is the GUID of the player +None is fired when the frame is closed... +I guess we'll have to check each frame we go over + +See +canInspect = CanInspect("unit", showError) +Arguments: + unit - A unit to inspect (string, unitID) + showError - True to fire a UI_ERROR_MESSAGE event (causing the default UI to display an error message) if the unit cannot be inspected; otherwise false (boolean) +Returns: + canInspect - 1 if the unit can be inspected; otherwise nil (1nil) + +Actually nevermind, this seems much easier and simpler: +completed, month, day, year = GetAchievementComparisonInfo(achievementID) + completed + boolean - Returns true/false depending on whether the unit has completed the achievement or not. + month + number - Month in which the unit has completed the achievement. Returns nil if completed is false. + day + number - Day of the month in which the unit has completed the achievement. Returns nil if completed is false. + year + number - Year (two digits, 21st century is assumed) in which the unit has completed the achievement. Returns nil if completed is false. +Only accurate after the after SetAchievementComparisonUnit is called and the INSPECT_ACHIEVEMENT_READY event has fired. + +success = SetAchievementComparisonUnit(unit) + success + boolean - Returns true/false depending on whether the unit is valid. +-> INSPECT_ACHIEVEMENT_READY + +522 -- Somebody Likes Me +523 -- 5 Exalted Reputations +524 -- 10 Exalted Reputations +521 -- 15 Exalted Reputations +520 -- 20 Exalted Reputations +519 -- 25 Exalted Reputations +518 -- 30 Exalted Reputations +1556 -- 25 Fish +1557 -- 50 Fish +1558 -- 100 Fish +238 -- An Honorable Kill +513 -- 100 Honorable Kills +515 -- 500 Honorable Kills +516 -- 1000 Honorable Kills +512 -- 5000 Honorable Kills +509 -- 10000 Honorable Kills +239 -- 25000 Honorable Kills +503 -- 50 Quests Completed +504 -- 100 Quests Completed +505 -- 250 Quests Completed +506 -- 500 Quests Completed +507 -- 1000 Quests Completed +1017 -- Can I Keep Him? +15 -- Plenty of Pets +1248 -- Plethora of Pets +1250 -- Shop Smart, Shop Pet...Smart +2516 -- Lil' Game Hunter +5876 -- Petting Zoo +11188 -- Broken Isles Explorer +11190 -- Broken Isles Pathfinder, Part One +11157 -- Loremaster of Legion +10763 -- Azsuna Matata +10790 -- Vrykul Story, Bro +11124 -- Good Suramaritan +10059 -- Ain't No Mountain High Enough +10698 -- That's Val'sharah Folks! +10672 -- Broken Isles Diplomat +10665 -- Explore Azsuna +10666 -- Explore Val'sharah +10667 -- Explore Highmountain +10668 -- Explore Stormheim +10669 -- Explore Suramar +12069 -- Explore Argus +2141 -- Stable Keeper +2142 -- Filling Up The Barn +2143 -- Leading the Cavalry +7382 -- Dynamic Duo +7383 -- Terrific Trio +7384 -- Quintessential Quintet 245 -- That Takes Class \ No newline at end of file diff --git a/FreshShit/AchievementSniffer/init.lua b/WeakAuras/Projects/AchievementSniffer/init.lua similarity index 93% rename from FreshShit/AchievementSniffer/init.lua rename to WeakAuras/Projects/AchievementSniffer/init.lua index b95ecf2..fbe1c7f 100644 --- a/FreshShit/AchievementSniffer/init.lua +++ b/WeakAuras/Projects/AchievementSniffer/init.lua @@ -1,223 +1,223 @@ ----@class aura_env ----@field achievements table ----@field Scan fun(playerName: string) ----@field TryInspect fun() - ----@class WeakAurasSaved ----@field Cyka table>> - -if not WeakAurasSaved.Cyka then WeakAurasSaved.Cyka = {} end -if not WeakAurasSaved.Cyka.AchievementSniffer then WeakAurasSaved.Cyka.AchievementSniffer = {} end -if not WeakAurasSaved.Cyka.AchievementSniffer2 then WeakAurasSaved.Cyka.AchievementSniffer2 = {} end -for k, v in pairs(WeakAurasSaved.Cyka.AchievementSniffer2) do - if WeakAurasSaved.Cyka.AchievementSniffer[k] then WeakAurasSaved.Cyka.AchievementSniffer[k] = nil end -end - -aura_env.achievements = { - 15, - 153, - 245, - 506, - 507, - 513, - 524, - 648, - 649, - 651, - 655, - 657, - 660, - 661, - 667, - 668, - 669, - 671, - 676, - 678, - 681, - 682, - 697, - 777, - 958, - 974, - 975, - 1017, - 1266, - 1556, - 1557, - 1558, - 1576, - 2078, - 2141, - 2200, - 4477, - 4478, - 4624, - 4914, - 4958, - 4960, - 5455, - 5456, - 5749, - 5752, - 6456, - 6460, - 6753, - 6757, - 6758, - 6835, - 7382, - 7383, - 7384, - 7437, - 7948, - 8929, - 8952, - 8956, - 8966, - 8967, - 8969, - 8978, - 8979, - 8980, - 8981, - 8982, - 8983, - 9017, - 9038, - 9132, - 9493, - 9507, - 10059, - 10079, - 10278, - 10460, - 10581, - 10585, - 10595, - 10597, - 10617, - 10657, - 10666, - 10667, - 10668, - 10672, - 10682, - 10684, - 10688, - 10689, - 10692, - 10693, - 10698, - 10706, - 10746, - 10755, - 10756, - 10763, - 10772, - 10775, - 10790, - 10800, - 10818, - 10819, - 10820, - 10875, - 10994, - 11124, - 11126, - 11127, - 11128, - 11153, - 11157, - 11164, - 11188, - 11189, - 11190, - 11214, - 11220, - 11298, - 11338, - 11394, - 11446, - 11473, - 11545, - 11559, - 11610, - 11611, - 11653, - 11657, - 11658, - 11659, - 11660, - 11674, - 11773, - 11787, - 11789, - 11790, - 11796, - 11992, - 11993, - 11994, - 11995, - 11996, - 11997, - 11998, - 11999, - 12000, - 12001, - 12008, - 12015, - 12020, - 12026, - 12028, - 12030, - 12072, - 12074, - 12085, - 12086, - 12103, - 12110, - 12445, - 12447, - 12448, -} - -aura_env.TryInspect = function() - local targetPlayer = UnitIsPlayer("target") - if not targetPlayer then return end - local targetName = UnitName("target") - - local should = false - if not WeakAurasSaved.Cyka.AchievementSniffer[targetName] then should = true end - if WeakAurasSaved.Cyka.AchievementSniffer2[targetName] then should = false end - if aura_env.config.rescan then should = true end - if not should then return end - - local canInspect = CheckInteractDistance("target", 1) - if canInspect then SetAchievementComparisonUnit("target") end -end - ----@param playerName string -aura_env.Scan = function(playerName) - WeakAurasSaved.Cyka.AchievementSniffer[playerName] = {} - for i, aid in ipairs(aura_env.achievements) do - local completed, month, day, year = GetAchievementComparisonInfo(aid) - if completed then - ---@type string - local yearstr = "" .. year - if year < 100 then yearstr = "20" .. year end - - local date = string.format("%04d-%02d-%02d", yearstr, month, day) - - local data = { - id = aid, - date = date, - completed = completed, - } - WeakAurasSaved.Cyka.AchievementSniffer[playerName][aid] = data - end - end -end - ---/run WeakAurasSaved.Cyka.AchievementSniffer = {} ---/dump WeakAurasSaved.Cyka.AchievementSniffer["Pinkleta"] +---@class aura_env +---@field achievements table +---@field Scan fun(playerName: string) +---@field TryInspect fun() + +---@class WeakAurasSaved +---@field Cyka table>> + +if not WeakAurasSaved.Cyka then WeakAurasSaved.Cyka = {} end +if not WeakAurasSaved.Cyka.AchievementSniffer then WeakAurasSaved.Cyka.AchievementSniffer = {} end +if not WeakAurasSaved.Cyka.AchievementSniffer2 then WeakAurasSaved.Cyka.AchievementSniffer2 = {} end +for k, v in pairs(WeakAurasSaved.Cyka.AchievementSniffer2) do + if WeakAurasSaved.Cyka.AchievementSniffer[k] then WeakAurasSaved.Cyka.AchievementSniffer[k] = nil end +end + +aura_env.achievements = { + 15, + 153, + 245, + 506, + 507, + 513, + 524, + 648, + 649, + 651, + 655, + 657, + 660, + 661, + 667, + 668, + 669, + 671, + 676, + 678, + 681, + 682, + 697, + 777, + 958, + 974, + 975, + 1017, + 1266, + 1556, + 1557, + 1558, + 1576, + 2078, + 2141, + 2200, + 4477, + 4478, + 4624, + 4914, + 4958, + 4960, + 5455, + 5456, + 5749, + 5752, + 6456, + 6460, + 6753, + 6757, + 6758, + 6835, + 7382, + 7383, + 7384, + 7437, + 7948, + 8929, + 8952, + 8956, + 8966, + 8967, + 8969, + 8978, + 8979, + 8980, + 8981, + 8982, + 8983, + 9017, + 9038, + 9132, + 9493, + 9507, + 10059, + 10079, + 10278, + 10460, + 10581, + 10585, + 10595, + 10597, + 10617, + 10657, + 10666, + 10667, + 10668, + 10672, + 10682, + 10684, + 10688, + 10689, + 10692, + 10693, + 10698, + 10706, + 10746, + 10755, + 10756, + 10763, + 10772, + 10775, + 10790, + 10800, + 10818, + 10819, + 10820, + 10875, + 10994, + 11124, + 11126, + 11127, + 11128, + 11153, + 11157, + 11164, + 11188, + 11189, + 11190, + 11214, + 11220, + 11298, + 11338, + 11394, + 11446, + 11473, + 11545, + 11559, + 11610, + 11611, + 11653, + 11657, + 11658, + 11659, + 11660, + 11674, + 11773, + 11787, + 11789, + 11790, + 11796, + 11992, + 11993, + 11994, + 11995, + 11996, + 11997, + 11998, + 11999, + 12000, + 12001, + 12008, + 12015, + 12020, + 12026, + 12028, + 12030, + 12072, + 12074, + 12085, + 12086, + 12103, + 12110, + 12445, + 12447, + 12448, +} + +aura_env.TryInspect = function() + local targetPlayer = UnitIsPlayer("target") + if not targetPlayer then return end + local targetName = UnitName("target") + + local should = false + if not WeakAurasSaved.Cyka.AchievementSniffer[targetName] then should = true end + if WeakAurasSaved.Cyka.AchievementSniffer2[targetName] then should = false end + if aura_env.config.rescan then should = true end + if not should then return end + + local canInspect = CheckInteractDistance("target", 1) + if canInspect then SetAchievementComparisonUnit("target") end +end + +---@param playerName string +aura_env.Scan = function(playerName) + WeakAurasSaved.Cyka.AchievementSniffer[playerName] = {} + for i, aid in ipairs(aura_env.achievements) do + local completed, month, day, year = GetAchievementComparisonInfo(aid) + if completed then + ---@type string + local yearstr = "" .. year + if year < 100 then yearstr = "20" .. year end + + local date = string.format("%04d-%02d-%02d", yearstr, month, day) + + local data = { + id = aid, + date = date, + completed = completed, + } + WeakAurasSaved.Cyka.AchievementSniffer[playerName][aid] = data + end + end +end + +--/run WeakAurasSaved.Cyka.AchievementSniffer = {} +--/dump WeakAurasSaved.Cyka.AchievementSniffer["Pinkleta"] diff --git a/FreshShit/AchievementSniffer/scratch.lua b/WeakAuras/Projects/AchievementSniffer/scratch.lua similarity index 95% rename from FreshShit/AchievementSniffer/scratch.lua rename to WeakAuras/Projects/AchievementSniffer/scratch.lua index aa8a0c6..56fc449 100644 --- a/FreshShit/AchievementSniffer/scratch.lua +++ b/WeakAuras/Projects/AchievementSniffer/scratch.lua @@ -1,7 +1,7 @@ -local year = 20 -local month = 7 -local day = 12 - -if year < 100 then year = "20" .. year end - -print(string.format("%4d-%02d-%02d", year, month, day)) +local year = 20 +local month = 7 +local day = 12 + +if year < 100 then year = "20" .. year end + +print(string.format("%4d-%02d-%02d", year, month, day)) diff --git a/Complete Projects/Legion/Achiv Inspector.lua b/WeakAuras/Projects/Achiv Inspector.lua similarity index 94% rename from Complete Projects/Legion/Achiv Inspector.lua rename to WeakAuras/Projects/Achiv Inspector.lua index e643bdb..0b7ab06 100644 --- a/Complete Projects/Legion/Achiv Inspector.lua +++ b/WeakAuras/Projects/Achiv Inspector.lua @@ -1,318 +1,318 @@ ---UPDATE_MOUSEOVER_UNIT PLAYER_TARGET_CHANGED -function() - if not UnitExists("target") and UnitExists("mouseover") and UnitIsPlayer("mouseover") then - aura_env.output = "Boss RF NM HC Myth" .. "\n" - bossKills = - { - { - [1] = 0, - [2] = 0, - [3] = 0, - [4] = 0 - }, - { - [1] = 0, - [2] = 0, - [3] = 0, - [4] = 0 - }, - { - [1] = 0, - [2] = 0, - [3] = 0, - [4] = 0 - }, - { - [1] = 0, - [2] = 0, - [3] = 0, - [4] = 0 - }, - { - [1] = 0, - [2] = 0, - [3] = 0, - [4] = 0 - }, - { - [1] = 0, - [2] = 0, - [3] = 0, - [4] = 0 - }, - { - [1] = 0, - [2] = 0, - [3] = 0, - [4] = 0 - }, - { - [1] = 0, - [2] = 0, - [3] = 0, - [4] = 0 - }, - { - [1] = 0, - [2] = 0, - [3] = 0, - [4] = 0 - }, - } - SetAchievementComparisonUnit("mouseover") - end - if not UnitExists("mouseover") and UnitExists("target") and UnitIsPlayer("target") then - aura_env.output = "Boss RF NM HC Myth" .. "\n" - bossKills = - { - { - [1] = 0, - [2] = 0, - [3] = 0, - [4] = 0 - }, - { - [1] = 0, - [2] = 0, - [3] = 0, - [4] = 0 - }, - { - [1] = 0, - [2] = 0, - [3] = 0, - [4] = 0 - }, - { - [1] = 0, - [2] = 0, - [3] = 0, - [4] = 0 - }, - { - [1] = 0, - [2] = 0, - [3] = 0, - [4] = 0 - }, - { - [1] = 0, - [2] = 0, - [3] = 0, - [4] = 0 - }, - { - [1] = 0, - [2] = 0, - [3] = 0, - [4] = 0 - }, - { - [1] = 0, - [2] = 0, - [3] = 0, - [4] = 0 - }, - { - [1] = 0, - [2] = 0, - [3] = 0, - [4] = 0 - }, - } - SetAchievementComparisonUnit("target") - end -end - ---INSPECT_ACHIEVEMENT_READY -function() - aura_env.output = "Boss RF NM HC Myth" .. "\n" - for k,v in ipairs(aura_env.TOS) do - if GetComparisonStatistic(aura_env.TOS[k][1]) ~= "--" or GetComparisonStatistic(aura_env.TOS[k][2]) ~= "--" or GetComparisonStatistic(aura_env.TOS[k][3]) ~= "--" or GetComparisonStatistic(aura_env.TOS[k][4]) ~= "--" then - local bossname = select(2, GetAchievementInfo(aura_env.TOS[k][1])) - bossname = bossname:match("[a-zA-Z' ]*kills") - bossname = bossname:gsub(" kills", "") - aura_env.output = aura_env.output .. bossname .. "\n" - if GetComparisonStatistic(aura_env.TOS[k][1]) ~= "--" then - bossKills[k][1] = GetComparisonStatistic(aura_env.TOS[k][1]) - end - if GetComparisonStatistic(aura_env.TOS[k][2]) ~= "--" then - bossKills[k][2] = GetComparisonStatistic(aura_env.TOS[k][2]) - end - if GetComparisonStatistic(aura_env.TOS[k][3]) ~= "--" then - bossKills[k][3] = GetComparisonStatistic(aura_env.TOS[k][3]) - end - if GetComparisonStatistic(aura_env.TOS[k][4]) ~= "--" then - bossKills[k][4] = GetComparisonStatistic(aura_env.TOS[k][4]) - end - end - end - ClearAchievementComparisonUnit() -end - ---WEAKAURA 2 DISPLAY -- RF BOSSES -function() - local output = "" - for k,v in ipairs(bossKills) do - if tonumber(bossKills[k][1]) > 0 then - output = output .. bossKills[k][1] .. "\n" - end - end - return output -end - ---WEAKAURA 2 DISPLAY -- NM BOSSES -function() - local output = "" - for k,v in ipairs(bossKills) do - if tonumber(bossKills[k][2]) > 0 then - output = output .. bossKills[k][2] .. "\n" - end - end - return output -end - ---WEAKAURA 2 DISPLAY -- HC BOSSES -function() - local output = "" - for k,v in ipairs(bossKills) do - if tonumber(bossKills[k][3]) > 0 then - output = output .. bossKills[k][3] .. "\n" - end - end - return output -end - ---WEAKAURA 2 DISPLAY -- Myth BOSSES -function() - local output = "" - for k,v in ipairs(bossKills) do - if tonumber(bossKills[k][4]) > 0 then - output = output .. bossKills[k][4] .. "\n" - end - end - return output -end - ---INIT -aura_env.TOS = -{ - { --Goroth - 11877, -- [1] - 11878, -- [2] - 11879, -- [3] - 11880, -- [4] - }, -- [1] - { --Inquisition - 11881, -- [1] - 11882, -- [2] - 11883, -- [3] - 11884, -- [4] - }, -- [2] - { --Harjatan - 11885, -- [1] - 11886, -- [2] - 11887, -- [3] - 11888, -- [4] - }, -- [3] - { --Sisters - 11889, -- [1] - 11890, -- [2] - 11891, -- [3] - 11892, -- [4] - }, -- [4] - { --Mistress - 11893, -- [1] - 11894, -- [2] - 11895, -- [3] - 11896, -- [4] - }, -- [5] - { --Host - 11897, -- [1] - 11898, -- [2] - 11899, -- [3] - 11900, -- [4] - }, -- [6] - { --Maiden - 11901, -- [1] - 11902, -- [2] - 11903, -- [3] - 11904, -- [4] - }, -- [7] - { --Avatar - 11905, -- [1] - 11906, -- [2] - 11907, -- [3] - 11908, -- [4] - }, -- [8] - { --Kil'jaeden - 11909, -- [1] - 11910, -- [2] - 11911, -- [3] - 11912, -- [4] - }, -- [9] -} -aura_env.NH = -{ - { --Skorp - 10940, -- [1] - 10941, -- [2] - 10942, -- [3] - 10943, -- [4] - }, -- [1] - { --Anomaly - 10944, -- [1] - 10945, -- [2] - 10946, -- [3] - 10947, -- [4] - }, -- [2] - { --Trilliax - 10948, -- [1] - 10949, -- [2] - 10950, -- [3] - 10951, -- [4] - }, -- [3] - { --Aluriel - 10952, -- [1] - 10953, -- [2] - 10954, -- [3] - 10955, -- [4] - }, -- [4] - { --Augur - 10956, -- [1] - 10957, -- [2] - 10959, -- [3] - 10960, -- [4] - }, -- [5] - { --Botanist - 10961, -- [1] - 10962, -- [2] - 10963, -- [3] - 10964, -- [4] - }, -- [6] - { --Tich - 10965, -- [1] - 10966, -- [2] - 10967, -- [3] - 10968, -- [4] - }, -- [7] - { --Krosus - 10969, -- [1] - 10970, -- [2] - 10971, -- [3] - 10972, -- [4] - }, -- [8] - { --Elisande - 10973, -- [1] - 10974, -- [2] - 10975, -- [3] - 10976, -- [4] - }, -- [9] - { --Gul'dan - 10977, -- [1] - 10978, -- [2] - 10979, -- [3] - 10980, -- [4] - }, -- [10] -} +--UPDATE_MOUSEOVER_UNIT PLAYER_TARGET_CHANGED +function() + if not UnitExists("target") and UnitExists("mouseover") and UnitIsPlayer("mouseover") then + aura_env.output = "Boss RF NM HC Myth" .. "\n" + bossKills = + { + { + [1] = 0, + [2] = 0, + [3] = 0, + [4] = 0 + }, + { + [1] = 0, + [2] = 0, + [3] = 0, + [4] = 0 + }, + { + [1] = 0, + [2] = 0, + [3] = 0, + [4] = 0 + }, + { + [1] = 0, + [2] = 0, + [3] = 0, + [4] = 0 + }, + { + [1] = 0, + [2] = 0, + [3] = 0, + [4] = 0 + }, + { + [1] = 0, + [2] = 0, + [3] = 0, + [4] = 0 + }, + { + [1] = 0, + [2] = 0, + [3] = 0, + [4] = 0 + }, + { + [1] = 0, + [2] = 0, + [3] = 0, + [4] = 0 + }, + { + [1] = 0, + [2] = 0, + [3] = 0, + [4] = 0 + }, + } + SetAchievementComparisonUnit("mouseover") + end + if not UnitExists("mouseover") and UnitExists("target") and UnitIsPlayer("target") then + aura_env.output = "Boss RF NM HC Myth" .. "\n" + bossKills = + { + { + [1] = 0, + [2] = 0, + [3] = 0, + [4] = 0 + }, + { + [1] = 0, + [2] = 0, + [3] = 0, + [4] = 0 + }, + { + [1] = 0, + [2] = 0, + [3] = 0, + [4] = 0 + }, + { + [1] = 0, + [2] = 0, + [3] = 0, + [4] = 0 + }, + { + [1] = 0, + [2] = 0, + [3] = 0, + [4] = 0 + }, + { + [1] = 0, + [2] = 0, + [3] = 0, + [4] = 0 + }, + { + [1] = 0, + [2] = 0, + [3] = 0, + [4] = 0 + }, + { + [1] = 0, + [2] = 0, + [3] = 0, + [4] = 0 + }, + { + [1] = 0, + [2] = 0, + [3] = 0, + [4] = 0 + }, + } + SetAchievementComparisonUnit("target") + end +end + +--INSPECT_ACHIEVEMENT_READY +function() + aura_env.output = "Boss RF NM HC Myth" .. "\n" + for k,v in ipairs(aura_env.TOS) do + if GetComparisonStatistic(aura_env.TOS[k][1]) ~= "--" or GetComparisonStatistic(aura_env.TOS[k][2]) ~= "--" or GetComparisonStatistic(aura_env.TOS[k][3]) ~= "--" or GetComparisonStatistic(aura_env.TOS[k][4]) ~= "--" then + local bossname = select(2, GetAchievementInfo(aura_env.TOS[k][1])) + bossname = bossname:match("[a-zA-Z' ]*kills") + bossname = bossname:gsub(" kills", "") + aura_env.output = aura_env.output .. bossname .. "\n" + if GetComparisonStatistic(aura_env.TOS[k][1]) ~= "--" then + bossKills[k][1] = GetComparisonStatistic(aura_env.TOS[k][1]) + end + if GetComparisonStatistic(aura_env.TOS[k][2]) ~= "--" then + bossKills[k][2] = GetComparisonStatistic(aura_env.TOS[k][2]) + end + if GetComparisonStatistic(aura_env.TOS[k][3]) ~= "--" then + bossKills[k][3] = GetComparisonStatistic(aura_env.TOS[k][3]) + end + if GetComparisonStatistic(aura_env.TOS[k][4]) ~= "--" then + bossKills[k][4] = GetComparisonStatistic(aura_env.TOS[k][4]) + end + end + end + ClearAchievementComparisonUnit() +end + +--WEAKAURA 2 DISPLAY -- RF BOSSES +function() + local output = "" + for k,v in ipairs(bossKills) do + if tonumber(bossKills[k][1]) > 0 then + output = output .. bossKills[k][1] .. "\n" + end + end + return output +end + +--WEAKAURA 2 DISPLAY -- NM BOSSES +function() + local output = "" + for k,v in ipairs(bossKills) do + if tonumber(bossKills[k][2]) > 0 then + output = output .. bossKills[k][2] .. "\n" + end + end + return output +end + +--WEAKAURA 2 DISPLAY -- HC BOSSES +function() + local output = "" + for k,v in ipairs(bossKills) do + if tonumber(bossKills[k][3]) > 0 then + output = output .. bossKills[k][3] .. "\n" + end + end + return output +end + +--WEAKAURA 2 DISPLAY -- Myth BOSSES +function() + local output = "" + for k,v in ipairs(bossKills) do + if tonumber(bossKills[k][4]) > 0 then + output = output .. bossKills[k][4] .. "\n" + end + end + return output +end + +--INIT +aura_env.TOS = +{ + { --Goroth + 11877, -- [1] + 11878, -- [2] + 11879, -- [3] + 11880, -- [4] + }, -- [1] + { --Inquisition + 11881, -- [1] + 11882, -- [2] + 11883, -- [3] + 11884, -- [4] + }, -- [2] + { --Harjatan + 11885, -- [1] + 11886, -- [2] + 11887, -- [3] + 11888, -- [4] + }, -- [3] + { --Sisters + 11889, -- [1] + 11890, -- [2] + 11891, -- [3] + 11892, -- [4] + }, -- [4] + { --Mistress + 11893, -- [1] + 11894, -- [2] + 11895, -- [3] + 11896, -- [4] + }, -- [5] + { --Host + 11897, -- [1] + 11898, -- [2] + 11899, -- [3] + 11900, -- [4] + }, -- [6] + { --Maiden + 11901, -- [1] + 11902, -- [2] + 11903, -- [3] + 11904, -- [4] + }, -- [7] + { --Avatar + 11905, -- [1] + 11906, -- [2] + 11907, -- [3] + 11908, -- [4] + }, -- [8] + { --Kil'jaeden + 11909, -- [1] + 11910, -- [2] + 11911, -- [3] + 11912, -- [4] + }, -- [9] +} +aura_env.NH = +{ + { --Skorp + 10940, -- [1] + 10941, -- [2] + 10942, -- [3] + 10943, -- [4] + }, -- [1] + { --Anomaly + 10944, -- [1] + 10945, -- [2] + 10946, -- [3] + 10947, -- [4] + }, -- [2] + { --Trilliax + 10948, -- [1] + 10949, -- [2] + 10950, -- [3] + 10951, -- [4] + }, -- [3] + { --Aluriel + 10952, -- [1] + 10953, -- [2] + 10954, -- [3] + 10955, -- [4] + }, -- [4] + { --Augur + 10956, -- [1] + 10957, -- [2] + 10959, -- [3] + 10960, -- [4] + }, -- [5] + { --Botanist + 10961, -- [1] + 10962, -- [2] + 10963, -- [3] + 10964, -- [4] + }, -- [6] + { --Tich + 10965, -- [1] + 10966, -- [2] + 10967, -- [3] + 10968, -- [4] + }, -- [7] + { --Krosus + 10969, -- [1] + 10970, -- [2] + 10971, -- [3] + 10972, -- [4] + }, -- [8] + { --Elisande + 10973, -- [1] + 10974, -- [2] + 10975, -- [3] + 10976, -- [4] + }, -- [9] + { --Gul'dan + 10977, -- [1] + 10978, -- [2] + 10979, -- [3] + 10980, -- [4] + }, -- [10] +} aura_env.output = "" \ No newline at end of file diff --git a/Complete Projects/Legion/Active Seeds.lua b/WeakAuras/Projects/Active Seeds.lua similarity index 95% rename from Complete Projects/Legion/Active Seeds.lua rename to WeakAuras/Projects/Active Seeds.lua index 05e1cd6..bac117b 100644 --- a/Complete Projects/Legion/Active Seeds.lua +++ b/WeakAuras/Projects/Active Seeds.lua @@ -1,9 +1,9 @@ -function() - local seeds = 0 - for i = 1, 100 do - if UnitDebuff("nameplate" .. i, "Seed of Corruption") then - seeds = seeds + 1 - end - end - return seeds +function() + local seeds = 0 + for i = 1, 100 do + if UnitDebuff("nameplate" .. i, "Seed of Corruption") then + seeds = seeds + 1 + end + end + return seeds end \ No newline at end of file diff --git a/FreshShit/AfkTimer/event.lua b/WeakAuras/Projects/AfkTimer/event.lua similarity index 96% rename from FreshShit/AfkTimer/event.lua rename to WeakAuras/Projects/AfkTimer/event.lua index cac64b6..d57aa3e 100644 --- a/FreshShit/AfkTimer/event.lua +++ b/WeakAuras/Projects/AfkTimer/event.lua @@ -1,14 +1,14 @@ --- CHAT_MSG_SYSTEM -function(e, msg) - if msg == nil then return false end - if string.find(msg, "You are now Away") then - aura_env.KickTime = time() + 30 * 60 - aura_env.AfkSince = time() - return true - end - if string.find(msg, "You are no longer Away") then - aura_env.KickTime = 0 - aura_env.AfkSince = 0 - return false - end +-- CHAT_MSG_SYSTEM +function(e, msg) + if msg == nil then return false end + if string.find(msg, "You are now Away") then + aura_env.KickTime = time() + 30 * 60 + aura_env.AfkSince = time() + return true + end + if string.find(msg, "You are no longer Away") then + aura_env.KickTime = 0 + aura_env.AfkSince = 0 + return false + end end \ No newline at end of file diff --git a/FreshShit/AfkTimer/event2.lua b/WeakAuras/Projects/AfkTimer/event2.lua similarity index 97% rename from FreshShit/AfkTimer/event2.lua rename to WeakAuras/Projects/AfkTimer/event2.lua index 3c12bb8..5265ce2 100644 --- a/FreshShit/AfkTimer/event2.lua +++ b/WeakAuras/Projects/AfkTimer/event2.lua @@ -1,16 +1,16 @@ --- TICKER_500 -function(e) - local timeToKick = aura_env.KickTime - time() - if timeToKick > 0 and timeToKick < 10 * 60 then - WeakAuras.ScanEvents("PLAY_SOUND", "Interface\\Sounds\\quack.ogg") - -- SendChatMessage("QUACK", "WHISPER", nil, UnitName("player")) - end - - local rewardClaimed = WeakAurasSaved.Cyka.LoginInfo[Today][UnitName("player")].claimed - local onlineTime = WeakAurasSaved.Cyka.LoginInfo[Today][UnitName("player")].onlineTimeInMinutes - if rewardClaimed == 0 and onlineTime >= 120 then - WeakAuras.ScanEvents("PLAY_SOUND", "Interface\\Sounds\\quack.ogg") - end - - return aura_env.KickTime > 0 +-- TICKER_500 +function(e) + local timeToKick = aura_env.KickTime - time() + if timeToKick > 0 and timeToKick < 10 * 60 then + WeakAuras.ScanEvents("PLAY_SOUND", "Interface\\Sounds\\quack.ogg") + -- SendChatMessage("QUACK", "WHISPER", nil, UnitName("player")) + end + + local rewardClaimed = WeakAurasSaved.Cyka.LoginInfo[Today][UnitName("player")].claimed + local onlineTime = WeakAurasSaved.Cyka.LoginInfo[Today][UnitName("player")].onlineTimeInMinutes + if rewardClaimed == 0 and onlineTime >= 120 then + WeakAuras.ScanEvents("PLAY_SOUND", "Interface\\Sounds\\quack.ogg") + end + + return aura_env.KickTime > 0 end \ No newline at end of file diff --git a/FreshShit/AfkTimer/event2duration.lua b/WeakAuras/Projects/AfkTimer/event2duration.lua similarity index 98% rename from FreshShit/AfkTimer/event2duration.lua rename to WeakAuras/Projects/AfkTimer/event2duration.lua index 261af4a..1b71db7 100644 --- a/FreshShit/AfkTimer/event2duration.lua +++ b/WeakAuras/Projects/AfkTimer/event2duration.lua @@ -1,3 +1,3 @@ -function(e) - return math.floor(time() - aura_env.AfkSince), math.floor(aura_env.KickTime - aura_env.AfkSince), 1 +function(e) + return math.floor(time() - aura_env.AfkSince), math.floor(aura_env.KickTime - aura_env.AfkSince), 1 end \ No newline at end of file diff --git a/FreshShit/AfkTimer/export b/WeakAuras/Projects/AfkTimer/export similarity index 100% rename from FreshShit/AfkTimer/export rename to WeakAuras/Projects/AfkTimer/export diff --git a/FreshShit/AfkTimer/init.lua b/WeakAuras/Projects/AfkTimer/init.lua similarity index 95% rename from FreshShit/AfkTimer/init.lua rename to WeakAuras/Projects/AfkTimer/init.lua index b60c33e..411c10d 100644 --- a/FreshShit/AfkTimer/init.lua +++ b/WeakAuras/Projects/AfkTimer/init.lua @@ -1,6 +1,6 @@ -aura_env.KickTime = 0 -aura_env.AfkSince = 0 - -WeakAurasSaved.Cyka.LoginInfo = { - [Today] = WeakAurasSaved.Cyka.LoginInfo[Today] or {}, -} +aura_env.KickTime = 0 +aura_env.AfkSince = 0 + +WeakAurasSaved.Cyka.LoginInfo = { + [Today] = WeakAurasSaved.Cyka.LoginInfo[Today] or {}, +} diff --git a/FreshShit/AfkTimer/trigger.lua b/WeakAuras/Projects/AfkTimer/trigger.lua similarity index 93% rename from FreshShit/AfkTimer/trigger.lua rename to WeakAuras/Projects/AfkTimer/trigger.lua index 1527e31..817313e 100644 --- a/FreshShit/AfkTimer/trigger.lua +++ b/WeakAuras/Projects/AfkTimer/trigger.lua @@ -1,3 +1,3 @@ -function(t) - return t[2] +function(t) + return t[2] end \ No newline at end of file diff --git a/Complete Projects/Legion/AntorusQuestlineThing.lua b/WeakAuras/Projects/AntorusQuestlineThing.lua similarity index 96% rename from Complete Projects/Legion/AntorusQuestlineThing.lua rename to WeakAuras/Projects/AntorusQuestlineThing.lua index 833bd06..6fb43cf 100644 --- a/Complete Projects/Legion/AntorusQuestlineThing.lua +++ b/WeakAuras/Projects/AntorusQuestlineThing.lua @@ -1,305 +1,305 @@ ---QUEST_ACCEPTED QUEST_TURNED_IN -function(e) - for k, v in ipairs(aura_env.questDatabase) do - if IsQuestFlaggedCompleted(v) == false then - --print(aura_env.TESTCOMPLETION[k]) - --if aura_env.TESTCOMPLETION[k] == false then - --print(k, IsQuestFlaggedCompleted(v)) - if k < 36 or k > 37 then - aura_env.currentQuest = k - break - elseif (k == 36 and IsQuestFlaggedCompleted(aura_env.questDatabase[37]) == true) or (k == 37 and IsQuestFlaggedCompleted(aura_env.questDatabase[36]) == true) then - --elseif (k == 36 and aura_env.TESTCOMPLETION[37] == true) or (k == 37 and aura_env.TESTCOMPLETION[36] == true) then - k = 38 - end - end - end - --print(aura_env.currentQuest) - return true -end - ---DISPLAY -function() - if aura_env.currentQuest < 89 then - return "Progress: " .. aura_env.currentQuest .. "/" .. #aura_env.questDatabase .. "\nCurrent quest: " .. aura_env.questNames[aura_env.currentQuest] .. "\nNext Quest: " .. aura_env.questNames[aura_env.currentQuest + 1] - else - return "Progress: " .. aura_env.currentQuest .. "/" .. #aura_env.questDatabase .. "\nCurrent quest: " .. aura_env.questNames[aura_env.currentQuest] - end -end - ---INIT -aura_env.currentQuest = 1 -aura_env.questDatabase = { - [1] = 47835, - [2] = 47867, - [3] = 47223, - [4] = 47224, - [5] = 48440, - [6] = 46938, - [7] = 47589, - [8] = 46297, - [9] = 48483, - [10] = 47627, - [11] = 47641, - [12] = 46732, - [13] = 46816, - [14] = 46839, - [15] = 46840, - [16] = 46841, - [17] = 46842, - [18] = 46843, - [19] = 48500, - [20] = 47431, - [21] = 46213, - [22] = 40238, - [23] = 47541, - [24] = 47508, - [25] = 47771, - [26] = 47526, - [27] = 47754, - [28] = 47652, - [29] = 47653, - [30] = 47743, - [31] = 49143, - [32] = 47287, - [33] = 48559, - [34] = 48199, - [35] = 48200, - [36] = 48201, - [37] = 48202, - [38] = 47473, - [39] = 47889, - [40] = 47890, - [41] = 47891, - [42] = 47892, - [43] = 47986, - [44] = 47987, - [45] = 47988, - [46] = 47991, - [47] = 47990, - [48] = 47989, - [49] = 47992, - [50] = 47993, - [51] = 47994, - [52] = 48081, - [53] = 46815, - [54] = 46818, - [55] = 46834, - [56] = 47066, - [57] = 46941, - [58] = 47686, - [59] = 47882, - [60] = 47688, - [61] = 47883, - [62] = 47689, - [63] = 47685, - [64] = 47687, - [65] = 47690, - [66] = 48107, - [67] = 48461, - [68] = 48344, - [69] = 47691, - [70] = 47854, - [71] = 47995, - [72] = 47853, - [73] = 48345, - [74] = 47855, - [75] = 47856, - [76] = 47416, - [77] = 47238, - [78] = 40761, - [79] = 47101, - [80] = 47180, - [81] = 47100, - [82] = 47183, - [83] = 47184, - [84] = 47203, - [85] = 47217, - [86] = 47218, - [87] = 47219, - [88] = 47220, - [89] = 48560, -} -aura_env.questNames = { - [1] = "The Hand of Fate", - [2] = "Two If By Sea", - [3] = "Light's Exodus", - [4] = "The Vindicaar", - [5] = "Into the Night", - [6] = "Alone in the Abyss", - [7] = "Righteous Fury", - [8] = "Overwhelming Power", - [9] = "A Stranger's Plea", - [10] = "Vengeance", - [11] = "Sign of Resistance", - [12] = "The Prophet's Gambit", - [13] = "Rendezvous", - [14] = "From Darkness", - [15] = "Prisoners No More", - [16] = "Threat Reduction", - [17] = "A Strike at the Heart", - [18] = "Return to the Vindicaar", - [19] = "A Moment of Respite", - [20] = "Gathering Light", - [21] = "Crystals Not Included", - [22] = "A Grim Equation", - [23] = "The Best Prevention", - [24] = "Fire at Will", - [25] = "Locating the Longshot", - [26] = "Bringing the Big Guns", - [27] = "Lightly Roasted", - [28] = "The Light Mother", - [29] = "Light's Return", - [30] = "The Child of Light and Shadow", - [31] = "Essence of the Light Mother", - [32] = "The Vindicaar Matrix Core", - [33] = "An Offering of Light", - [34] = "The Burning Heart", - [35] = "Securing a Foothold", - [36] = "Reinforce Light's Purchase", - [37] = "Reinforce the Veiled Den", - [38] = "Sizing Up The Opposition", - [39] = "The Speaker Calls", - [40] = "Visions of Torment", - [41] = "Dire News", - [42] = "Storming the Citadel", - [43] = "Scars of the Past", - [44] = "Preventive Measures", - [45] = "Chaos Theory", - [46] = "Dark Machinations", - [47] = "A Touch of Fel", - [48] = "Heralds of Apocalypse", - [49] = "Dawn of Justice", - [50] = "Lord of the Spire", - [51] = "Forming a Bond", - [52] = "A Floating Ruin", - [53] = "Mac'Aree, Jewel of Argus", - [54] = "Defenseless and Afraid", - [55] = "Khazaduum, First of His Name", - [56] = "Consecrating Ground", - [57] = "The Path Forward", - [58] = "Not-So-Humble Beginnings", - [59] = "Conservation of Magic", - [60] = "Invasive Species", - [61] = "The Longest Vigil", - [62] = "Gatekeeper's Challenge: Tenacity", - [63] = "Gatekeeper's Challenge: Cunning", - [64] = "Gatekeeper's Challenge: Mastery", - [65] = "The Defiler's Legacy", - [66] = "The Sigil of Awakening", - [67] = "Where They Least Expect It", - [68] = "We Have a Problem", - [69] = "A Non-Prophet Organization", - [70] = "Wrath of the Hight Exarch", - [71] = "Overt Ops", - [72] = "Flanking Maneuvers", - [73] = "Talgath's Forces", - [74] = "What Might Have Been", - [75] = "Across the Universe", - [76] = "Shadow of the Triumvirate", - [77] = "The Seat of the Triumvirate", - [78] = "Whispers from Oronaar", - [79] = "Arkhaan's Prayers", - [80] = "The Pulsing Madness", - [81] = "Arkhaan's Pain", - [82] = "Arkhaan's Plan", - [83] = "Arkhaan's Peril", - [84] = "Throwing Shade", - [85] = "Sources of Darkness", - [86] = "The Shadowguard Incursion", - [87] = "A Vessel Made Ready", - [88] = "A Beacon in the Dark", - [89] = "An Offering of Shadow", -} -aura_env.TESTCOMPLETION = { - [1] = true, - [2] = true, - [3] = true, - [4] = true, - [5] = true, - [6] = true, - [7] = true, - [8] = true, - [9] = true, - [10] = true, - [11] = true, - [12] = true, - [13] = true, - [14] = true, - [15] = true, - [16] = true, - [17] = true, - [18] = true, - [19] = true, - [20] = true, - [21] = true, - [22] = true, - [23] = true, - [24] = true, - [25] = true, - [26] = true, - [27] = true, - [28] = true, - [29] = true, - [30] = true, - [31] = true, - [32] = true, - [33] = true, - [34] = true, - [35] = true, - [36] = false, - [37] = true, - [38] = true, - [39] = true, - [40] = true, - [41] = true, - [42] = true, - [43] = true, - [44] = true, - [45] = true, - [46] = true, - [47] = true, - [48] = true, - [49] = false, - [50] = false, - [51] = false, - [52] = false, - [53] = false, - [54] = false, - [55] = false, - [56] = false, - [57] = false, - [58] = false, - [59] = false, - [60] = false, - [61] = false, - [62] = false, - [63] = false, - [64] = false, - [65] = false, - [66] = false, - [67] = false, - [68] = false, - [69] = false, - [70] = false, - [71] = false, - [72] = false, - [73] = false, - [74] = false, - [75] = false, - [76] = false, - [77] = false, - [78] = false, - [79] = false, - [80] = false, - [81] = false, - [82] = false, - [83] = false, - [84] = false, - [85] = false, - [86] = false, - [87] = false, - [88] = false, - [89] = false, -} -WeakAuras.ScanEvents("QUEST_TURNED_IN") +--QUEST_ACCEPTED QUEST_TURNED_IN +function(e) + for k, v in ipairs(aura_env.questDatabase) do + if IsQuestFlaggedCompleted(v) == false then + --print(aura_env.TESTCOMPLETION[k]) + --if aura_env.TESTCOMPLETION[k] == false then + --print(k, IsQuestFlaggedCompleted(v)) + if k < 36 or k > 37 then + aura_env.currentQuest = k + break + elseif (k == 36 and IsQuestFlaggedCompleted(aura_env.questDatabase[37]) == true) or (k == 37 and IsQuestFlaggedCompleted(aura_env.questDatabase[36]) == true) then + --elseif (k == 36 and aura_env.TESTCOMPLETION[37] == true) or (k == 37 and aura_env.TESTCOMPLETION[36] == true) then + k = 38 + end + end + end + --print(aura_env.currentQuest) + return true +end + +--DISPLAY +function() + if aura_env.currentQuest < 89 then + return "Progress: " .. aura_env.currentQuest .. "/" .. #aura_env.questDatabase .. "\nCurrent quest: " .. aura_env.questNames[aura_env.currentQuest] .. "\nNext Quest: " .. aura_env.questNames[aura_env.currentQuest + 1] + else + return "Progress: " .. aura_env.currentQuest .. "/" .. #aura_env.questDatabase .. "\nCurrent quest: " .. aura_env.questNames[aura_env.currentQuest] + end +end + +--INIT +aura_env.currentQuest = 1 +aura_env.questDatabase = { + [1] = 47835, + [2] = 47867, + [3] = 47223, + [4] = 47224, + [5] = 48440, + [6] = 46938, + [7] = 47589, + [8] = 46297, + [9] = 48483, + [10] = 47627, + [11] = 47641, + [12] = 46732, + [13] = 46816, + [14] = 46839, + [15] = 46840, + [16] = 46841, + [17] = 46842, + [18] = 46843, + [19] = 48500, + [20] = 47431, + [21] = 46213, + [22] = 40238, + [23] = 47541, + [24] = 47508, + [25] = 47771, + [26] = 47526, + [27] = 47754, + [28] = 47652, + [29] = 47653, + [30] = 47743, + [31] = 49143, + [32] = 47287, + [33] = 48559, + [34] = 48199, + [35] = 48200, + [36] = 48201, + [37] = 48202, + [38] = 47473, + [39] = 47889, + [40] = 47890, + [41] = 47891, + [42] = 47892, + [43] = 47986, + [44] = 47987, + [45] = 47988, + [46] = 47991, + [47] = 47990, + [48] = 47989, + [49] = 47992, + [50] = 47993, + [51] = 47994, + [52] = 48081, + [53] = 46815, + [54] = 46818, + [55] = 46834, + [56] = 47066, + [57] = 46941, + [58] = 47686, + [59] = 47882, + [60] = 47688, + [61] = 47883, + [62] = 47689, + [63] = 47685, + [64] = 47687, + [65] = 47690, + [66] = 48107, + [67] = 48461, + [68] = 48344, + [69] = 47691, + [70] = 47854, + [71] = 47995, + [72] = 47853, + [73] = 48345, + [74] = 47855, + [75] = 47856, + [76] = 47416, + [77] = 47238, + [78] = 40761, + [79] = 47101, + [80] = 47180, + [81] = 47100, + [82] = 47183, + [83] = 47184, + [84] = 47203, + [85] = 47217, + [86] = 47218, + [87] = 47219, + [88] = 47220, + [89] = 48560, +} +aura_env.questNames = { + [1] = "The Hand of Fate", + [2] = "Two If By Sea", + [3] = "Light's Exodus", + [4] = "The Vindicaar", + [5] = "Into the Night", + [6] = "Alone in the Abyss", + [7] = "Righteous Fury", + [8] = "Overwhelming Power", + [9] = "A Stranger's Plea", + [10] = "Vengeance", + [11] = "Sign of Resistance", + [12] = "The Prophet's Gambit", + [13] = "Rendezvous", + [14] = "From Darkness", + [15] = "Prisoners No More", + [16] = "Threat Reduction", + [17] = "A Strike at the Heart", + [18] = "Return to the Vindicaar", + [19] = "A Moment of Respite", + [20] = "Gathering Light", + [21] = "Crystals Not Included", + [22] = "A Grim Equation", + [23] = "The Best Prevention", + [24] = "Fire at Will", + [25] = "Locating the Longshot", + [26] = "Bringing the Big Guns", + [27] = "Lightly Roasted", + [28] = "The Light Mother", + [29] = "Light's Return", + [30] = "The Child of Light and Shadow", + [31] = "Essence of the Light Mother", + [32] = "The Vindicaar Matrix Core", + [33] = "An Offering of Light", + [34] = "The Burning Heart", + [35] = "Securing a Foothold", + [36] = "Reinforce Light's Purchase", + [37] = "Reinforce the Veiled Den", + [38] = "Sizing Up The Opposition", + [39] = "The Speaker Calls", + [40] = "Visions of Torment", + [41] = "Dire News", + [42] = "Storming the Citadel", + [43] = "Scars of the Past", + [44] = "Preventive Measures", + [45] = "Chaos Theory", + [46] = "Dark Machinations", + [47] = "A Touch of Fel", + [48] = "Heralds of Apocalypse", + [49] = "Dawn of Justice", + [50] = "Lord of the Spire", + [51] = "Forming a Bond", + [52] = "A Floating Ruin", + [53] = "Mac'Aree, Jewel of Argus", + [54] = "Defenseless and Afraid", + [55] = "Khazaduum, First of His Name", + [56] = "Consecrating Ground", + [57] = "The Path Forward", + [58] = "Not-So-Humble Beginnings", + [59] = "Conservation of Magic", + [60] = "Invasive Species", + [61] = "The Longest Vigil", + [62] = "Gatekeeper's Challenge: Tenacity", + [63] = "Gatekeeper's Challenge: Cunning", + [64] = "Gatekeeper's Challenge: Mastery", + [65] = "The Defiler's Legacy", + [66] = "The Sigil of Awakening", + [67] = "Where They Least Expect It", + [68] = "We Have a Problem", + [69] = "A Non-Prophet Organization", + [70] = "Wrath of the Hight Exarch", + [71] = "Overt Ops", + [72] = "Flanking Maneuvers", + [73] = "Talgath's Forces", + [74] = "What Might Have Been", + [75] = "Across the Universe", + [76] = "Shadow of the Triumvirate", + [77] = "The Seat of the Triumvirate", + [78] = "Whispers from Oronaar", + [79] = "Arkhaan's Prayers", + [80] = "The Pulsing Madness", + [81] = "Arkhaan's Pain", + [82] = "Arkhaan's Plan", + [83] = "Arkhaan's Peril", + [84] = "Throwing Shade", + [85] = "Sources of Darkness", + [86] = "The Shadowguard Incursion", + [87] = "A Vessel Made Ready", + [88] = "A Beacon in the Dark", + [89] = "An Offering of Shadow", +} +aura_env.TESTCOMPLETION = { + [1] = true, + [2] = true, + [3] = true, + [4] = true, + [5] = true, + [6] = true, + [7] = true, + [8] = true, + [9] = true, + [10] = true, + [11] = true, + [12] = true, + [13] = true, + [14] = true, + [15] = true, + [16] = true, + [17] = true, + [18] = true, + [19] = true, + [20] = true, + [21] = true, + [22] = true, + [23] = true, + [24] = true, + [25] = true, + [26] = true, + [27] = true, + [28] = true, + [29] = true, + [30] = true, + [31] = true, + [32] = true, + [33] = true, + [34] = true, + [35] = true, + [36] = false, + [37] = true, + [38] = true, + [39] = true, + [40] = true, + [41] = true, + [42] = true, + [43] = true, + [44] = true, + [45] = true, + [46] = true, + [47] = true, + [48] = true, + [49] = false, + [50] = false, + [51] = false, + [52] = false, + [53] = false, + [54] = false, + [55] = false, + [56] = false, + [57] = false, + [58] = false, + [59] = false, + [60] = false, + [61] = false, + [62] = false, + [63] = false, + [64] = false, + [65] = false, + [66] = false, + [67] = false, + [68] = false, + [69] = false, + [70] = false, + [71] = false, + [72] = false, + [73] = false, + [74] = false, + [75] = false, + [76] = false, + [77] = false, + [78] = false, + [79] = false, + [80] = false, + [81] = false, + [82] = false, + [83] = false, + [84] = false, + [85] = false, + [86] = false, + [87] = false, + [88] = false, + [89] = false, +} +WeakAuras.ScanEvents("QUEST_TURNED_IN") diff --git a/WIP/Atrigan Interrupt/Display.lua b/WeakAuras/Projects/Atrigan Interrupt/Display.lua similarity index 97% rename from WIP/Atrigan Interrupt/Display.lua rename to WeakAuras/Projects/Atrigan Interrupt/Display.lua index 6de7af8..ddf810f 100644 --- a/WIP/Atrigan Interrupt/Display.lua +++ b/WeakAuras/Projects/Atrigan Interrupt/Display.lua @@ -1,26 +1,26 @@ ---Display every frame for text ---Every frame -function() - print(aura_env.peopleList[aura_env.currentInterrupt]) - if aura_env.peopleList[aura_env.currentInterrupt] == UnitName("player") then - if UnitCastingInfo("Belac") then - local sname = UnitCastingInfo("Belac") - if sname == "Phangs of Guilt" then - return "Interrupt it reeee" - end - end - if UnitDebuff("player", "Belac's Prisoner") or UnitIsDead("player") then --If is in cage - local msg = aura_env.messages["Cannot Interrupt"] - local msg = aura_env.encode(msg) - SendChatMessage(msg, "RAID") - aura_env.currentInterrupt = aura_env.currentInterrupt + 1 - end - if GetTime() < aura_env.interruptTime then --If is on cooldown - local msg = aura_env.messages["Cannot Interrupt"] - local msg = aura_env.encode(msg) - SendChatMessage(msg, "RAID") - aura_env.currentInterrupt = aura_env.currentInterrupt + 1 - end - return "You're next" - end +--Display every frame for text +--Every frame +function() + print(aura_env.peopleList[aura_env.currentInterrupt]) + if aura_env.peopleList[aura_env.currentInterrupt] == UnitName("player") then + if UnitCastingInfo("Belac") then + local sname = UnitCastingInfo("Belac") + if sname == "Phangs of Guilt" then + return "Interrupt it reeee" + end + end + if UnitDebuff("player", "Belac's Prisoner") or UnitIsDead("player") then --If is in cage + local msg = aura_env.messages["Cannot Interrupt"] + local msg = aura_env.encode(msg) + SendChatMessage(msg, "RAID") + aura_env.currentInterrupt = aura_env.currentInterrupt + 1 + end + if GetTime() < aura_env.interruptTime then --If is on cooldown + local msg = aura_env.messages["Cannot Interrupt"] + local msg = aura_env.encode(msg) + SendChatMessage(msg, "RAID") + aura_env.currentInterrupt = aura_env.currentInterrupt + 1 + end + return "You're next" + end end \ No newline at end of file diff --git a/WIP/Atrigan Interrupt/INIT.lua b/WeakAuras/Projects/Atrigan Interrupt/INIT.lua similarity index 96% rename from WIP/Atrigan Interrupt/INIT.lua rename to WeakAuras/Projects/Atrigan Interrupt/INIT.lua index 2c0af31..03c38cb 100644 --- a/WIP/Atrigan Interrupt/INIT.lua +++ b/WeakAuras/Projects/Atrigan Interrupt/INIT.lua @@ -1,40 +1,40 @@ -aura_env.interruptTime = 0 -aura_env.interruptCD = 24 -aura_env.peopleList = {} -aura_env.currentInterrupt = 1 -local playerClass = UnitClass("player") -if playerClass == "Hunter" then - aura_env.classInterrupt = "Counter Shot" elseif - playerClass == "Mage" then - aura_env.classInterrupt = "Counterspell" elseif - playerClass == "Warlock" then - aura.classInterrupt = "Spell Lock" -end -aura_env.messages = -{ - ["Interrupted"] = 9461, - ["Cannot Interrupt"] = 9462, - ["Initialized"] = 9451, - ["Added to interrupt list"], = 9452, - ["Cycle Interrupt DEBUG"] = 9551 -} -aura_env.encode = function(msg) - local date = date() - local localtime = date:match("%d%d%/%d%d%/%d%d%s(%d%d%p%d%d%p%d%d)") --15:37:43 - local hr = localtime:match("(%d%d)") - local min = localtime:match("%d%d%p(%d%d)") - - local retmsg = msg - (hr * min) - retmsg = tostring(retmsg) - return retmsg -end -aura_env.decode = function(msg) - local date = date() - local localtime = date:match("%d%d%/%d%d%/%d%d%s(%d%d%p%d%d%p%d%d)") --15:37:43 - local hr = localtime:match("(%d%d)") - local min = localtime:match("%d%d%p(%d%d)") - - tonumber(msg) - local retint = msg + (hr * min) - return retint +aura_env.interruptTime = 0 +aura_env.interruptCD = 24 +aura_env.peopleList = {} +aura_env.currentInterrupt = 1 +local playerClass = UnitClass("player") +if playerClass == "Hunter" then + aura_env.classInterrupt = "Counter Shot" elseif + playerClass == "Mage" then + aura_env.classInterrupt = "Counterspell" elseif + playerClass == "Warlock" then + aura.classInterrupt = "Spell Lock" +end +aura_env.messages = +{ + ["Interrupted"] = 9461, + ["Cannot Interrupt"] = 9462, + ["Initialized"] = 9451, + ["Added to interrupt list"], = 9452, + ["Cycle Interrupt DEBUG"] = 9551 +} +aura_env.encode = function(msg) + local date = date() + local localtime = date:match("%d%d%/%d%d%/%d%d%s(%d%d%p%d%d%p%d%d)") --15:37:43 + local hr = localtime:match("(%d%d)") + local min = localtime:match("%d%d%p(%d%d)") + + local retmsg = msg - (hr * min) + retmsg = tostring(retmsg) + return retmsg +end +aura_env.decode = function(msg) + local date = date() + local localtime = date:match("%d%d%/%d%d%/%d%d%s(%d%d%p%d%d%p%d%d)") --15:37:43 + local hr = localtime:match("(%d%d)") + local min = localtime:match("%d%d%p(%d%d)") + + tonumber(msg) + local retint = msg + (hr * min) + return retint end \ No newline at end of file diff --git a/WIP/Atrigan Interrupt/Libs.lua b/WeakAuras/Projects/Atrigan Interrupt/Libs.lua similarity index 97% rename from WIP/Atrigan Interrupt/Libs.lua rename to WeakAuras/Projects/Atrigan Interrupt/Libs.lua index e85e7f0..d1fefd5 100644 --- a/WIP/Atrigan Interrupt/Libs.lua +++ b/WeakAuras/Projects/Atrigan Interrupt/Libs.lua @@ -1,28 +1,28 @@ -[02:39 PM] [Virags DT]: 14:35:39 UNIT_SPELLCAST_INTERRUPTED - (6) table: 000000004830D3C0 --seems to only work on player -[02:39 PM] [Virags DT]: 1 - UNIT_SPELLCAST_INTERRUPTED -[02:39 PM] [Virags DT]: 2 - player -[02:39 PM] [Virags DT]: 3 - Flash of Light -[02:39 PM] [Virags DT]: 5 - 3-5-1-0-19750-00000056B2 -[02:39 PM] [Virags DT]: 6 - 19750 - - - -[02:40 PM] [Virags DT]: 14:35:50 COMBAT_LOG_EVENT_UNFILTERED - (18) table: 00000000543D23B0 -- realistically the only important one since the only interrupts are outgoing -[02:40 PM] [Virags DT]: 1 - COMBAT_LOG_EVENT_UNFILTERED -[02:40 PM] [Virags DT]: 2 - 1549632949.728 -[02:40 PM] [Virags DT]: 3 - SPELL_INTERRUPT -[02:40 PM] [Virags DT]: 4 - false -[02:40 PM] [Virags DT]: 5 - Player-5-000AD3B6 -[02:40 PM] [Virags DT]: 6 - Pinkiepiie -[02:40 PM] [Virags DT]: 7 - 1297 -[02:40 PM] [Virags DT]: 8 - 0 -[02:40 PM] [Virags DT]: 9 - Player-5-000A70EF -[02:40 PM] [Virags DT]: 10 - Lilithiy -[02:40 PM] [Virags DT]: 11 - 66888 -[02:40 PM] [Virags DT]: 12 - 0 -[02:40 PM] [Virags DT]: 13 - 96231 -[02:40 PM] [Virags DT]: 14 - Rebuke -[02:40 PM] [Virags DT]: 15 - 1 -[02:40 PM] [Virags DT]: 16 - 116 -[02:40 PM] [Virags DT]: 17 - Frostbolt +[02:39 PM] [Virags DT]: 14:35:39 UNIT_SPELLCAST_INTERRUPTED - (6) table: 000000004830D3C0 --seems to only work on player +[02:39 PM] [Virags DT]: 1 - UNIT_SPELLCAST_INTERRUPTED +[02:39 PM] [Virags DT]: 2 - player +[02:39 PM] [Virags DT]: 3 - Flash of Light +[02:39 PM] [Virags DT]: 5 - 3-5-1-0-19750-00000056B2 +[02:39 PM] [Virags DT]: 6 - 19750 + + + +[02:40 PM] [Virags DT]: 14:35:50 COMBAT_LOG_EVENT_UNFILTERED - (18) table: 00000000543D23B0 -- realistically the only important one since the only interrupts are outgoing +[02:40 PM] [Virags DT]: 1 - COMBAT_LOG_EVENT_UNFILTERED +[02:40 PM] [Virags DT]: 2 - 1549632949.728 +[02:40 PM] [Virags DT]: 3 - SPELL_INTERRUPT +[02:40 PM] [Virags DT]: 4 - false +[02:40 PM] [Virags DT]: 5 - Player-5-000AD3B6 +[02:40 PM] [Virags DT]: 6 - Pinkiepiie +[02:40 PM] [Virags DT]: 7 - 1297 +[02:40 PM] [Virags DT]: 8 - 0 +[02:40 PM] [Virags DT]: 9 - Player-5-000A70EF +[02:40 PM] [Virags DT]: 10 - Lilithiy +[02:40 PM] [Virags DT]: 11 - 66888 +[02:40 PM] [Virags DT]: 12 - 0 +[02:40 PM] [Virags DT]: 13 - 96231 +[02:40 PM] [Virags DT]: 14 - Rebuke +[02:40 PM] [Virags DT]: 15 - 1 +[02:40 PM] [Virags DT]: 16 - 116 +[02:40 PM] [Virags DT]: 17 - Frostbolt [02:40 PM] [Virags DT]: 18 - 16 \ No newline at end of file diff --git a/WIP/Atrigan Interrupt/Trigger1.lua b/WeakAuras/Projects/Atrigan Interrupt/Trigger1.lua similarity index 97% rename from WIP/Atrigan Interrupt/Trigger1.lua rename to WeakAuras/Projects/Atrigan Interrupt/Trigger1.lua index 8f7e797..9f0d54b 100644 --- a/WIP/Atrigan Interrupt/Trigger1.lua +++ b/WeakAuras/Projects/Atrigan Interrupt/Trigger1.lua @@ -1,18 +1,18 @@ ---The interrupt detection trigger ---COMBAT_LOG_EVENT_UNFILTERED -function(...) - local subevent = select(3, ...) - if subevent == "SPELL_INTERRUPT" then - local playerName = select(6, ...) - local targetName = select(10, ...) - local spellName = select(14, ...) - local interruptedSpellName = select(17, ...) - if playerName == UnitName("player") and targetName == "Belac" and and interruptedSpellName == "Phangs of Guilt" then - local msg = aura_env.messages["Interrupted"] - local msg = aura_env.encode(msg) - SendChatMessage(msg, "RAID") - aura_env.currentInterrupt = aura_env.currentInterrupt + 1 - aura_env.interruptTime = GetTime() + aura_env.interruptCD - end - end +--The interrupt detection trigger +--COMBAT_LOG_EVENT_UNFILTERED +function(...) + local subevent = select(3, ...) + if subevent == "SPELL_INTERRUPT" then + local playerName = select(6, ...) + local targetName = select(10, ...) + local spellName = select(14, ...) + local interruptedSpellName = select(17, ...) + if playerName == UnitName("player") and targetName == "Belac" and and interruptedSpellName == "Phangs of Guilt" then + local msg = aura_env.messages["Interrupted"] + local msg = aura_env.encode(msg) + SendChatMessage(msg, "RAID") + aura_env.currentInterrupt = aura_env.currentInterrupt + 1 + aura_env.interruptTime = GetTime() + aura_env.interruptCD + end + end end \ No newline at end of file diff --git a/WIP/Atrigan Interrupt/Trigger2.lua b/WeakAuras/Projects/Atrigan Interrupt/Trigger2.lua similarity index 96% rename from WIP/Atrigan Interrupt/Trigger2.lua rename to WeakAuras/Projects/Atrigan Interrupt/Trigger2.lua index 9c2b332..e821465 100644 --- a/WIP/Atrigan Interrupt/Trigger2.lua +++ b/WeakAuras/Projects/Atrigan Interrupt/Trigger2.lua @@ -1,40 +1,40 @@ ---The encoding trigger ---CHAT_MSG_RAID, CHAT_MSG_RAID_LEADER -function(_,msg,sender) - local sender = string.match(sender, "%a+") - local returnMessage = aura_env.decode(msg) - if returnMessage == aura_env.messages["Initialized"] then - local isfound = 0 - for k,v in pairs(aura_env.peopleList) do - if v == UnitName("player") then - isfound = 1 - break - end - end - if isfound == 0 then - aura_env.peopleList[#aura_env.peopleList + 1] = UnitName("player") - end - local msg = aura_env.messages["Added to interrupt list"] - local msg = aura_env.encode(msg) - SendChatMessage(msg, "RAID") - end - if returnMessage == aura_env.messages["Added to interrupt list"] then - local isfound = 0 - for k,v in pairs(aura_env.peopleList) do - if v == sender then - isfound = 1 - break - end - end - if isfound == 0 then - aura_env.peopleList[#aura_env.peopleList + 1] = sender - end - end - if returnMessage == aura_env.messages["Interrupted"] then - aura_env.currentInterrupt = aura_env.currentInterrupt + 1 - end - if returnMessage == aura_env.messages["Cycle Interrupt DEBUG"] then - aura_env.currentInterrupt = aura_env.currentInterrupt + 1 - end - return true +--The encoding trigger +--CHAT_MSG_RAID, CHAT_MSG_RAID_LEADER +function(_,msg,sender) + local sender = string.match(sender, "%a+") + local returnMessage = aura_env.decode(msg) + if returnMessage == aura_env.messages["Initialized"] then + local isfound = 0 + for k,v in pairs(aura_env.peopleList) do + if v == UnitName("player") then + isfound = 1 + break + end + end + if isfound == 0 then + aura_env.peopleList[#aura_env.peopleList + 1] = UnitName("player") + end + local msg = aura_env.messages["Added to interrupt list"] + local msg = aura_env.encode(msg) + SendChatMessage(msg, "RAID") + end + if returnMessage == aura_env.messages["Added to interrupt list"] then + local isfound = 0 + for k,v in pairs(aura_env.peopleList) do + if v == sender then + isfound = 1 + break + end + end + if isfound == 0 then + aura_env.peopleList[#aura_env.peopleList + 1] = sender + end + end + if returnMessage == aura_env.messages["Interrupted"] then + aura_env.currentInterrupt = aura_env.currentInterrupt + 1 + end + if returnMessage == aura_env.messages["Cycle Interrupt DEBUG"] then + aura_env.currentInterrupt = aura_env.currentInterrupt + 1 + end + return true end \ No newline at end of file diff --git a/WIP/Atrigan Interrupt/Trigger3.lua b/WeakAuras/Projects/Atrigan Interrupt/Trigger3.lua similarity index 97% rename from WIP/Atrigan Interrupt/Trigger3.lua rename to WeakAuras/Projects/Atrigan Interrupt/Trigger3.lua index df52ac5..ed6eb0e 100644 --- a/WIP/Atrigan Interrupt/Trigger3.lua +++ b/WeakAuras/Projects/Atrigan Interrupt/Trigger3.lua @@ -1,15 +1,15 @@ ---Trigger for raid wide initialization ---CHAT_MSG_WHISPER -function(_,msg,sender) - local sender = string.match(sender, "%a+") - if sender == "Pinkiepiie" and msg == "init_the_thing_i_guess_101_?" then - local msg = aura_env.messages["Initialized"] - local msg = aura_env.encode(msg) - SendChatMessage(msg, "RAID") - end - if sender == "Pinkiepiie" and msg == "cycle_interrupt_debug" then - local msg = aura_env.messages["Cycle Interrupt DEBUG"] - local msg = aura_env.encode(msg) - SendChatMessage(msg, "RAID") - end +--Trigger for raid wide initialization +--CHAT_MSG_WHISPER +function(_,msg,sender) + local sender = string.match(sender, "%a+") + if sender == "Pinkiepiie" and msg == "init_the_thing_i_guess_101_?" then + local msg = aura_env.messages["Initialized"] + local msg = aura_env.encode(msg) + SendChatMessage(msg, "RAID") + end + if sender == "Pinkiepiie" and msg == "cycle_interrupt_debug" then + local msg = aura_env.messages["Cycle Interrupt DEBUG"] + local msg = aura_env.encode(msg) + SendChatMessage(msg, "RAID") + end end \ No newline at end of file diff --git a/Complete Projects/Legion/AutoAttackInterval.lua b/WeakAuras/Projects/AutoAttackInterval.lua similarity index 97% rename from Complete Projects/Legion/AutoAttackInterval.lua rename to WeakAuras/Projects/AutoAttackInterval.lua index acd77df..5747304 100644 --- a/Complete Projects/Legion/AutoAttackInterval.lua +++ b/WeakAuras/Projects/AutoAttackInterval.lua @@ -1,56 +1,56 @@ ---make auto attack speed predictor thing please ---COMBAT_LOG_EVENT_UNFILTERED PLAYER_REGEN_DISABLED PLAYER_REGEN_ENABLED -function(allstates, e, ...) - if e == "COMBAT_LOG_EVENT_UNFILTERED" then - local time = debugprofilestop() - local subevent = select(2, ...) - if subevent == "SWING_DAMAGE" or subevent == "SWING_MISSED" then - local source = select(4, ...) - local destination = select(9, ...) - if source == UnitGUID("target") and destination == UnitName("player") then - if #aura_env.swings == aura_env.lines * 2 then - for k,v in ipairs(aura_env.swings) do - if k > 1 then - aura_env.swings[k - 1] = v - end - end - table.remove(aura_env.swings, (aura_env.lines * 2)) - table.insert(aura_env.swings, time) - else - table.insert(aura_env.swings, time) - end - local avgTime = 0 - for k,v in ipairs(aura_env.swings) do - if k > 1 then - if avgTime == 0 then - avgTime = aura_env.swings[k] - aura_env.swings[k - 1] - else - avgTime = (avgTime + (aura_env.swings[k] - aura_env.swings[k - 1])) / 2 - end - end - end - allstates[1] = { - show = true, - changed = true, - progressType = "timed", - avgTime = string.format("%.2f", avgTime / 1000), - expirationTime = GetTime() + (avgTime / 1000), - duration = avgTime / 1000, - } - print("return true", allstates[1].expirationTime, allstates[1].duration) - return true - end - end - elseif e == "PLAYER_REGEN_DISABLED" or e == "PLAYER_REGEN_ENABLED" then - aura_env.swings = {} - if allstates[1] then - allstates[1].show = false - allstates[1].changed = true - end - return true - end -end - ---INIT -aura_env.swings = {} +--make auto attack speed predictor thing please +--COMBAT_LOG_EVENT_UNFILTERED PLAYER_REGEN_DISABLED PLAYER_REGEN_ENABLED +function(allstates, e, ...) + if e == "COMBAT_LOG_EVENT_UNFILTERED" then + local time = debugprofilestop() + local subevent = select(2, ...) + if subevent == "SWING_DAMAGE" or subevent == "SWING_MISSED" then + local source = select(4, ...) + local destination = select(9, ...) + if source == UnitGUID("target") and destination == UnitName("player") then + if #aura_env.swings == aura_env.lines * 2 then + for k,v in ipairs(aura_env.swings) do + if k > 1 then + aura_env.swings[k - 1] = v + end + end + table.remove(aura_env.swings, (aura_env.lines * 2)) + table.insert(aura_env.swings, time) + else + table.insert(aura_env.swings, time) + end + local avgTime = 0 + for k,v in ipairs(aura_env.swings) do + if k > 1 then + if avgTime == 0 then + avgTime = aura_env.swings[k] - aura_env.swings[k - 1] + else + avgTime = (avgTime + (aura_env.swings[k] - aura_env.swings[k - 1])) / 2 + end + end + end + allstates[1] = { + show = true, + changed = true, + progressType = "timed", + avgTime = string.format("%.2f", avgTime / 1000), + expirationTime = GetTime() + (avgTime / 1000), + duration = avgTime / 1000, + } + print("return true", allstates[1].expirationTime, allstates[1].duration) + return true + end + end + elseif e == "PLAYER_REGEN_DISABLED" or e == "PLAYER_REGEN_ENABLED" then + aura_env.swings = {} + if allstates[1] then + allstates[1].show = false + allstates[1].changed = true + end + return true + end +end + +--INIT +aura_env.swings = {} aura_env.lines = 2 \ No newline at end of file diff --git a/FreshShit/AutoLoot/AutoLootDisplay/Event.lua b/WeakAuras/Projects/AutoLoot/AutoLootDisplay/Event.lua similarity index 95% rename from FreshShit/AutoLoot/AutoLootDisplay/Event.lua rename to WeakAuras/Projects/AutoLoot/AutoLootDisplay/Event.lua index 9f93ca0..e35b380 100644 --- a/FreshShit/AutoLoot/AutoLootDisplay/Event.lua +++ b/WeakAuras/Projects/AutoLoot/AutoLootDisplay/Event.lua @@ -1,7 +1,7 @@ --- CHAT_MSG_LOOT -function(allstates, e, msg) - if msg:match("You receive loot") then - DrawIcon(msg, allstates) - return true - end -end +-- CHAT_MSG_LOOT +function(allstates, e, msg) + if msg:match("You receive loot") then + DrawIcon(msg, allstates) + return true + end +end diff --git a/FreshShit/AutoLoot/AutoLootDisplay/Init.lua b/WeakAuras/Projects/AutoLoot/AutoLootDisplay/Init.lua similarity index 96% rename from FreshShit/AutoLoot/AutoLootDisplay/Init.lua rename to WeakAuras/Projects/AutoLoot/AutoLootDisplay/Init.lua index 1272159..4fab3d1 100644 --- a/FreshShit/AutoLoot/AutoLootDisplay/Init.lua +++ b/WeakAuras/Projects/AutoLoot/AutoLootDisplay/Init.lua @@ -1,46 +1,46 @@ -local iconDisplayDuration = 3 - ----@alias CItemInfo {name: string, icon: number, quantity: number, color: string} - ----@param msg string ----@return CItemInfo, string | nil -GetItemInfo = function(msg) - local itemInfo = { name = "", icon = 134400, quantity = 0, color = "" } - local name = msg:match("h%[(.+)%]") - if not name then return itemInfo, "No item name found" end - local quantity = msg:match("x(%d+)") or 1 - itemInfo.name = name - itemInfo.quantity = quantity - - if WeakAurasSaved.Cyka.ItemCache[name] then itemInfo.icon = WeakAurasSaved.Cyka.ItemCache[name].icon end - local color = msg:match("cff(%w%w%w%w%w%w)") or "ffffff" - itemInfo.color = color - - return itemInfo, nil -end - ----@param msg string ----@param allstates allstates -DrawIcon = function(msg, allstates) - local info, err = GetItemInfo(msg) - if err then - print(err) - return - end - - local formattedName = "\124cff" .. info.color .. "[" .. info.name .. "]\124r x" .. info.quantity - allstates[#aura_env.allstates + 1] = { - show = true, - changed = true, - index = GetTime(), - resort = true, - - icon = info.icon, - name = formattedName, - - progressType = "timed", - expirationTime = GetTime() + iconDisplayDuration, - duration = iconDisplayDuration, - autoHide = true, - } -end +local iconDisplayDuration = 3 + +---@alias CItemInfo {name: string, icon: number, quantity: number, color: string} + +---@param msg string +---@return CItemInfo, string | nil +GetItemInfo = function(msg) + local itemInfo = { name = "", icon = 134400, quantity = 0, color = "" } + local name = msg:match("h%[(.+)%]") + if not name then return itemInfo, "No item name found" end + local quantity = msg:match("x(%d+)") or 1 + itemInfo.name = name + itemInfo.quantity = quantity + + if WeakAurasSaved.Cyka.ItemCache[name] then itemInfo.icon = WeakAurasSaved.Cyka.ItemCache[name].icon end + local color = msg:match("cff(%w%w%w%w%w%w)") or "ffffff" + itemInfo.color = color + + return itemInfo, nil +end + +---@param msg string +---@param allstates allstates +DrawIcon = function(msg, allstates) + local info, err = GetItemInfo(msg) + if err then + print(err) + return + end + + local formattedName = "\124cff" .. info.color .. "[" .. info.name .. "]\124r x" .. info.quantity + allstates[#aura_env.allstates + 1] = { + show = true, + changed = true, + index = GetTime(), + resort = true, + + icon = info.icon, + name = formattedName, + + progressType = "timed", + expirationTime = GetTime() + iconDisplayDuration, + duration = iconDisplayDuration, + autoHide = true, + } +end diff --git a/FreshShit/AutoLoot/Event.lua b/WeakAuras/Projects/AutoLoot/Event.lua similarity index 95% rename from FreshShit/AutoLoot/Event.lua rename to WeakAuras/Projects/AutoLoot/Event.lua index ada64de..5cb25a8 100644 --- a/FreshShit/AutoLoot/Event.lua +++ b/WeakAuras/Projects/AutoLoot/Event.lua @@ -1,6 +1,6 @@ --- LOOT_READY -function(e) - C_Timer.After(0.1, function() - WeakAuras.ScanEvents("DO_AUTOLOOT") - end) -end +-- LOOT_READY +function(e) + C_Timer.After(0.1, function() + WeakAuras.ScanEvents("DO_AUTOLOOT") + end) +end diff --git a/FreshShit/AutoLoot/Event2.lua b/WeakAuras/Projects/AutoLoot/Event2.lua similarity index 95% rename from FreshShit/AutoLoot/Event2.lua rename to WeakAuras/Projects/AutoLoot/Event2.lua index a367e72..e4ffcb4 100644 --- a/FreshShit/AutoLoot/Event2.lua +++ b/WeakAuras/Projects/AutoLoot/Event2.lua @@ -1,6 +1,6 @@ --- DO_AUTOLOOT -function(e) - local lootInfo = GetLootInfo() - aura_env.FilterService.Run(lootInfo) - CloseLoot() -end +-- DO_AUTOLOOT +function(e) + local lootInfo = GetLootInfo() + aura_env.FilterService.Run(lootInfo) + CloseLoot() +end diff --git a/FreshShit/AutoLoot/Init.lua b/WeakAuras/Projects/AutoLoot/Init.lua similarity index 96% rename from FreshShit/AutoLoot/Init.lua rename to WeakAuras/Projects/AutoLoot/Init.lua index 00f662e..52feea2 100644 --- a/FreshShit/AutoLoot/Init.lua +++ b/WeakAuras/Projects/AutoLoot/Init.lua @@ -1,829 +1,829 @@ -local debug = false -if not WeakAurasSaved then WeakAurasSaved = {} end -if not WeakAurasSaved.Cyka then WeakAurasSaved.Cyka = {} end -if not WeakAurasSaved.Cyka.ItemCache then WeakAurasSaved.Cyka.ItemCache = {} end - ----@param slot number ----@return string, string|nil -local function getItemLink(slot) - if slot == nil then return "", string.format("Slot can not be nil") end - local link = GetLootSlotLink(slot) - if link == nil then return "", string.format("GetLootSlotLink returned nil for slot %d", slot) end - return link, nil -end ----@param slot number ----@return string, string|nil -local function getItemName(slot) - if slot == nil then return "", string.format("Slot can not be null") end - local name = select(2, GetLootSlotInfo(slot)) - if name == nil then return "", string.format("GetLootSlotInfo returned nil for slot %d", slot) end - return name, nil -end ----@param slot number ----@return string, string|nil -local function getItemType(slot) - if slot == nil then return "", string.format("Slot can not be nil") end - local itemLink, err = getItemLink(slot) - if err then return "", err end - local itemType = select(6, GetItemInfo(itemLink)) - if itemType == nil then return "", string.format("GetItemInfo returned nil for slot %d", slot) end - return itemType, nil -end ----@param slot number ----@return string, string|nil -local function getItemSubtype(slot) - if slot == nil then return "", string.format("Slot can not be nil") end - local itemLink, err = getItemLink(slot) - if err then return "", err end - local itemSubtype = select(7, GetItemInfo(itemLink)) - if itemSubtype == nil then return "", string.format("GetItemInfo returned nil for slot %d", slot) end - return itemSubtype, nil -end ----@param slot number ----@return number, string|nil -local function getItemLevel(slot) - if slot == nil then return 0, string.format("Slot can not be nil") end - local itemLink, err = getItemLink(slot) - if err then return 0, err end - local itemLevel = select(4, GetItemInfo(itemLink)) - if itemLevel == nil then return 0, string.format("GetItemInfo returned nil for slot %d", slot) end - return itemLevel, nil -end - ----The vendor price in copper, or 0 for items that cannot be sold ----@param slot number ----@return number, string|nil -local function getItemValue(slot) - if slot == nil then return 0, string.format("Slot can not be nil") end - local itemLink, err = getItemLink(slot) - if err then return 0, err end - local value = select(11, GetItemInfo(itemLink)) - if value == nil then return 0, string.format("GetItemInfo returned nil for slot %d", slot) end - return value, nil -end ----@param slot number ----@return number, string|nil -local function getItemSubclassId(slot) - if slot == nil then return 0, string.format("Slot can not be nil") end - local itemLink, err = getItemLink(slot) - if err then return 0, err end - local subclassId = select(13, GetItemInfo(itemLink)) - if subclassId == nil then return 0, string.format("GetItemInfo returned nil for slot %d", slot) end - return subclassId, nil -end ----@param slot number ----@return number, string|nil -local function getItemQuantity(slot) - if slot == nil then return 0, string.format("Slot can not be nil") end - local quantity = select(3, GetLootSlotInfo(slot)) - if quantity == nil then return 0, string.format("GetLootSlotInfo returned nil for slot %d", slot) end - return quantity, nil -end ----@param slot number ----@return Enum.ItemQuality, string|nil -local function getItemQuality(slot) - if slot == nil then return 0, string.format("Slot can not be nil") end - local itemLink, err = getItemLink(slot) - if err then return 0, err end - local quality = select(3, GetItemInfo(itemLink)) - if quality == nil then return 0, string.format("GetItemInfo returned nil for slot %d", slot) end - return quality, nil -end ----@param slot number ----@return string, string|nil -local function getItemEquipLocation(slot) - if slot == nil then return "", string.format("Slot can not be nil") end - local itemLink, err = getItemLink(slot) - if err then return "", err end - local equipLoc = select(9, GetItemInfo(itemLink)) - if equipLoc == nil then return "", string.format("GetItemInfo returned nil for slot %d", slot) end - return equipLoc, nil -end ----@param slot number ----@return number, string|nil -local function getItemIcon(slot) - if slot == nil then return 134400, string.format("Slot can not be nil") end - local itemLink, err = getItemLink(slot) - if err then return 134400, err end - local icon = select(10, GetItemInfo(itemLink)) - if icon == nil then return 134400, string.format("GetItemInfo returned nil for slot %d", slot) end - return icon, nil -end ----@param slot number ----@return number, string|nil -local function getBindType(slot) - if slot == nil then return 0, string.format("Slot can not be nil") end - local itemLink, err = getItemLink(slot) - if err then return 0, err end - local bindType = select(14, GetItemInfo(itemLink)) - if bindType == nil then return 0, string.format("GetItemInfo returned nil for slot %d", slot) end - return bindType, nil -end - ----@class Filter ----@field requires table | nil ----@field filter fun(slot: number, provided: table): boolean -Filter = { - ---@param requires table | nil - ---@param filter fun(slot: number, provided: table): boolean - ---@return Filter - new = function(requires, filter) - local self = setmetatable({}, { - __index = Filter, - }) - self.requires = requires - self.filter = filter - return self - end, - - ---@param self Filter - ---@param slot number - ---@return boolean, string|nil - Run = function(self, slot) - ---@type table - local provided = {} - if self.requires then - for k, v in pairs(self.requires) do - local res, err = v(slot) - if err ~= nil then - if debug then print(err) end - return false, err - end - provided[k] = res - end - end - local res, err = self.filter(slot, provided) - if err ~= nil then - if debug then print(err) end - end - return res, nil - end, -} - -local goldFilter = Filter.new({ ["name"] = getItemName }, function(slot, provided) - ---@cast provided { name: string } - if not aura_env.config.goldFilter then return false end - if - string.find(provided.name, "Gold") - or string.find(provided.name, "Silver") - or string.find(provided.name, "Copper") - then - if debug then print(string.format("Gold filter pass for %s", provided.name)) end - return true - end - if debug then print(string.format("Gold filter fail for %s", provided.name)) end - return false -end) -local orderResourcesFilter = Filter.new({ ["name"] = getItemName }, function(slot, provided) - ---@cast provided { name: string } - if not aura_env.config.orderResourcesFilter then return false end - if string.find(provided.name, "Order Resources") then - if debug then print(string.format("Order resource filter pass for %s", provided.name)) end - return true - end - if debug then print(string.format("Order resource filter fail for %s", provided.name)) end - return false -end) -local mountFilter = Filter.new({ ["type"] = getItemType }, function(slot, provided) - ---@cast provided { type: string } - if not aura_env.config.mountFilter then return false end - if provided.type == "Mount" then - if debug then print(string.format("Mount filter pass for type %s", provided.type)) end - return true - end - if debug then print(string.format("Mount filter fail for type %s", provided.type)) end - return false -end) -local ilvlFilter = Filter.new({ ["ilvl"] = getItemLevel }, function(slot, provided) - ---@cast provided { ilvl: number } - if not aura_env.config.ilvlFilter then return false end - if provided.ilvl and provided.ilvl > aura_env.config.ilvlFilterThreshold then - if debug then print(string.format("ilvl filter pass for ilvl %d", provided.ilvl)) end - return true - end - if debug then print(string.format("ilvl filter fail for ilvl %d", provided.ilvl)) end - return false -end) -local professionFilter = Filter.new({ - ["type"] = getItemType, - ["subtype"] = getItemSubtype, -}, function(slot, provided) - ---@cast provided { type: string, subtype: string } - if not aura_env.config.professionFilter then return false end - - local enabled = { - ["Cloth"] = aura_env.config.professionFilterProfessions[1], - ["Cooking"] = aura_env.config.professionFilterProfessions[2], - ["Enchanting"] = aura_env.config.professionFilterProfessions[3], - ["Herb"] = aura_env.config.professionFilterProfessions[4], - ["Inscription"] = aura_env.config.professionFilterProfessions[5], - ["Jewelcrafting"] = aura_env.config.professionFilterProfessions[6], - ["Leather"] = aura_env.config.professionFilterProfessions[7], - ["Metal & Stone"] = aura_env.config.professionFilterProfessions[8], - ["Ore"] = aura_env.config.professionFilterProfessions[9], - } - - -- Maybe implement an expansion based filter - if provided.type == "Tradeskill" then - if enabled[provided.subtype] then - if debug then print(string.format("Profession filter pass for type %s", provided.type)) end - return true - end - end - if debug then print(string.format("Profession filter fail for type %s", provided.type)) end - return false -end) -local valueFilter = Filter.new({ - ["value"] = getItemValue, - ["quantity"] = getItemQuality, -}, function(slot, provided) - ---@cast provided { value: number, quantity: number } - if not aura_env.config.valueFilter then return false end - - local valueThreshold = aura_env.config.valueFilterThreshold - - local value = provided.value - if aura_env.config.valueFilterApplyValueToStack then value = value * provided.quantity end - - if value > valueThreshold then - if debug then print(string.format("Value filter pass for value %d", value)) end - return true - end - if debug then print(string.format("Value filter fail for value %d", value)) end - return false -end) -local greyValueFilter = Filter.new({ - ["quality"] = getItemQuality, - ["value"] = getItemValue, - ["quantity"] = getItemQuantity, -}, function(slot, provided) - ---@cast provided { quality: number, value: number, quantity: number } - if not aura_env.config.greyValueFilter then return false end - - local valueThreshold = aura_env.config.greyValueFilterThreshold - - if provided.quality == 0 then - local value = provided.value - if aura_env.config.greyValueFilterApplyValueToStack then value = value * provided.quantity end - - if value > valueThreshold then - if debug then - print(string.format("Grey value filter pass for value %d of %s quality items", value, provided.quality)) - end - return true - end - end - if debug then - print( - string.format("Grey value filter fail for value %d of %s quality items", provided.value, provided.quality) - ) - end - return false -end) -local questItemFilter = Filter.new({ - ["type"] = getItemType, - ["subtype"] = getItemSubtype, -}, function(slot, provided) - ---@cast provided { type: string, subtype: string } - if not aura_env.config.questItemsFilter then return false end - - if provided.type == "Quest" and provided.subtype == "Quest" then - if debug then - print(string.format("Quest item filter pass for type %s and subtype", provided.type, provided.subtype)) - end - return true - end - if debug then - print(string.format("Quest item filter fail for type %s and subtype", provided.type, provided.subtype)) - end - return false -end) -local classGearFilter = Filter.new({ - ["ilvl"] = getItemLevel, - ["quality"] = getItemQuality, - ["type"] = getItemType, - ["subtype"] = getItemSubtype, - ["equiploc"] = getItemEquipLocation, -}, function(slot, provided) - ---@cast provided { ilvl: number, quality: number, type: string, subtype: string, equiploc: string } - if not aura_env.config.classGearFilter then return false end - - local ilvlThreshold = aura_env.config.classGearFilterIlvlThreshold - local qualityThreshold = aura_env.config.classGearFilterQualityThreshold - - local isEquippable = aura_env.skills[select(3, UnitClass("player"))][provided.subtype] == 1 - - if isEquippable and provided.ilvl > ilvlThreshold and provided.quality > qualityThreshold then - if debug then - print(string.format("Class gear filter pass for ilvl %d and quality %d", provided.ilvl, provided.quality)) - end - return true - end - if debug then - print(string.format("Class gear filter fail for ilvl %d and quality %d", provided.ilvl, provided.quality)) - end - return false -end) -local nameFilter = Filter.new({ ["name"] = getItemName }, function(slot, provided) - ---@cast provided { name: string } - if not aura_env.config.nameFilter then return false end - - local names = string.split(",", aura_env.config.nameFilterNames or "") - if #names == 0 then return false end - for _, name in ipairs(names) do - name = string.trim(name) - - if aura_env.config.nameFilterIgnoreCase then - name = string.lower(name) - provided.name = string.lower(provided.name) - end - - if provided.name == name then - if debug then print(string.format("Name filter pass for %s", provided.name)) end - return true - end - end - if debug then print(string.format("Name filter fail for %s", provided.name)) end - return false -end) -local reicpeFilter = Filter.new({ ["name"] = getItemName }, function(slot, provided) - ---@cast provided { name: string } - if string.find(provided.name, "Recipe") or string.find(provided.name, "Technique") then - if debug then print(string.format("Recipe filter pass for %s", provided.name)) end - return true - end - if debug then print(string.format("Recipe filter fail for %s", provided.name)) end - return false -end) -local boeFilter = Filter.new({ - ["ilvl"] = getItemLevel, - ["type"] = getItemType, - ["quality"] = getItemQuality, - ["equiploc"] = getItemEquipLocation, - ["bindtype"] = getBindType, -}, function(slot, provided) - ---@cast provided { ilvl: number, type: string, quality: number, equiploc: string, bindtype: number } - aura_env.config.boeFilter = true - - local ilvlThreshold = aura_env.config.boeFilterIlvlThreshold - local qualityThreshold = aura_env.config.boeFilterQualityThreshold - - local itemType = provided.type - local itemEquipLoc = provided.equiploc - if - itemType == "Armor" - or itemType == "Weapon" - or itemEquipLoc == "INVTYPE_FINGER" - or itemEquipLoc == "INVTYPE_TRINKET" - or itemEquipLoc == "INVTYPE_CLOAK" - or itemEquipLoc == "INVTYPE_NECK" - then - local itemLevel = provided.ilvl - local itemQuality = provided.quality - local bindType = provided.bindtype - - if itemLevel > ilvlThreshold and itemQuality > qualityThreshold and bindType == 1 then - if debug then print(string.format("BoE filter pass for ilvl %d and quality %d", itemLevel, itemQuality)) end - return true - end - end - if debug then - print(string.format("BoE filter fail for ilvl %d and quality %d", provided.ilvl, provided.quality)) - end - return false -end) -local artifactPowerFilter = Filter.new({ - ["type"] = getItemType, - ["subtype"] = getItemSubtype, - ["subclassid"] = getItemSubclassId, - ["value"] = getItemValue, -}, function(slot, provided) - ---@cast provided { type: string, subtype: string, subclassid: number, value: number } - if not aura_env.config.artifactPowerFilter then return false end - if - provided.value == 0 - and provided.type == "Consumable" - and provided.subtype == "Other" - and provided.subclassid == 8 - then - if debug then - print( - string.format( - "Artifact power filter pass for type %s and subtype %s and subclassid %d with value %d", - provided.type, - provided.subtype, - provided.subclassid, - provided.value - ) - ) - end - return true - end - if debug then - DevTools_Dump(provided) - print( - string.format( - "Artifact power filter fail for type %s and subtype %s and subclassid %d with value %d", - provided.type, - provided.subtype, - provided.subclassid, - provided.value - ) - ) - end - return false -end) -local everythingFilter = Filter.new({ ["name"] = getItemName }, function(slot, provided) - ---@cast provided { name: string } - return aura_env.config.everythingFilter -end) - ----@type table -local filters = { - everythingFilter, - artifactPowerFilter, - boeFilter, - classGearFilter, - goldFilter, - greyValueFilter, - ilvlFilter, - mountFilter, - orderResourcesFilter, - professionFilter, - questItemFilter, - -- reicpeFilter, - valueFilter, - nameFilter, -} - ----@class FilterService -aura_env.FilterService = { - ---@param lootInfo table - Run = function(lootInfo) - ---@type table - local slotsToLoot = {} - for slot, item in pairs(lootInfo) do - if debug then - local itemname = getItemName(slot) - print(string.format("Checking slot %d for %s", slot, itemname)) - end - for _, filter in ipairs(filters) do - local res, err = filter:Run(slot) - if err then - if debug then print(err) end - end - if res then - slotsToLoot[#slotsToLoot + 1] = slot - break - end - end - end - - aura_env.FilterService.doLoot(slotsToLoot) - end, - - ---@param slots table - ---@return nil - doLoot = function(slots) - for i = #slots, 1, -1 do - aura_env.FilterService.lootslot(slots[i]) - end - end, - - ---@param slot number - ---@return nil - lootslot = function(slot) - LootSlot(slot) - - local itemIcon = getItemIcon(slot) or 134400 - local itemName = getItemName(slot) or "Unknown" - itemName = itemName:gsub("\n", ", ") - local itemQuality = getItemQuality(slot) or 0 - - if - string.find(itemName, "Gold") == nil - and string.find(itemName, "Silver") == nil - and string.find(itemName, "Copper") == nil - then - if not WeakAurasSaved.Cyka.ItemCache[itemName] then - WeakAurasSaved.Cyka.ItemCache[itemName] = { - icon = itemIcon, - quality = itemQuality, - } - end - end - end, -} - -aura_env.skills = { - --Warrior - [1] = { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 0, - ["Mail"] = 0, - ["Plate"] = 1, - ["Shields"] = 1, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 1, - ["Bows"] = 1, - ["Guns"] = 1, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 1, - ["Polearms"] = 1, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 1, - ["Warglaives"] = 1, - ["Staves"] = 1, - ["Fist Weapons"] = 1, - ["Daggers"] = 1, - ["Crossbows"] = 1, - ["Wands"] = 0, - }, - --Paladin - [2] = { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 0, - ["Mail"] = 0, - ["Plate"] = 1, - ["Shields"] = 1, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 1, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 1, - ["Polearms"] = 1, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 1, - ["Warglaives"] = 0, - ["Staves"] = 0, - ["Fist Weapons"] = 0, - ["Daggers"] = 0, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, - --Hunter - [3] = { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 0, - ["Mail"] = 1, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 1, - ["Bows"] = 1, - ["Guns"] = 1, - ["One-Handed Maces"] = 0, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 1, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 1, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 1, - ["Daggers"] = 1, - ["Crossbows"] = 1, - ["Wands"] = 0, - }, - --Rogue - [4] = { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 1, - ["Mail"] = 0, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 0, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 0, - ["Fist Weapons"] = 1, - ["Daggers"] = 1, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, - --Priest - [5] = { - --Armor Skills - ["Cloth"] = 1, - ["Leather"] = 0, - ["Mail"] = 0, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 0, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 0, - ["One-Handed Swords"] = 0, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 0, - ["Daggers"] = 1, - ["Crossbows"] = 0, - ["Wands"] = 1, - }, - --Death Knight - [6] = { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 0, - ["Mail"] = 0, - ["Plate"] = 1, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 1, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 1, - ["Polearms"] = 1, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 1, - ["Warglaives"] = 0, - ["Staves"] = 0, - ["Fist Weapons"] = 0, - ["Daggers"] = 0, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, - --Shaman - [7] = { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 0, - ["Mail"] = 1, - ["Plate"] = 0, - ["Shields"] = 1, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 0, - ["One-Handed Swords"] = 0, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 1, - ["Daggers"] = 1, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, - --Mage - [8] = { - --Armor Skills - ["Cloth"] = 1, - ["Leather"] = 0, - ["Mail"] = 0, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 0, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 0, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 0, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 0, - ["Daggers"] = 1, - ["Crossbows"] = 0, - ["Wands"] = 1, - }, - --Warlock - [9] = { - --Armor Skills - ["Cloth"] = 1, - ["Leather"] = 0, - ["Mail"] = 0, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 0, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 0, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 0, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 0, - ["Daggers"] = 1, - ["Crossbows"] = 0, - ["Wands"] = 1, - }, - --Monk - [10] = { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 1, - ["Mail"] = 0, - ["Plate"] = 1, - ["Shields"] = 1, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 1, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 1, - ["Daggers"] = 0, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, - --Druid - [11] = { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 1, - ["Mail"] = 0, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 0, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 1, - ["One-Handed Swords"] = 0, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 1, - ["Daggers"] = 1, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, - --Demon Hunter - [12] = { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 1, - ["Mail"] = 0, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 0, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 0, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 1, - ["Staves"] = 0, - ["Fist Weapons"] = 1, - ["Daggers"] = 0, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, -} -aura_env.qualityColors = { - "\124cff9d9d9d", -- Poor - "\124cffffffff", -- Common - "\124cff1eff00", -- Uncommon - "\124cff0070dd", -- Rare - "\124cffa335ee", -- Epic - "\124cffff8000", -- Legendary - "\124cffe6cc80", -- Artifact - "\124cff00ccff", -- Heirloom -} +local debug = false +if not WeakAurasSaved then WeakAurasSaved = {} end +if not WeakAurasSaved.Cyka then WeakAurasSaved.Cyka = {} end +if not WeakAurasSaved.Cyka.ItemCache then WeakAurasSaved.Cyka.ItemCache = {} end + +---@param slot number +---@return string, string|nil +local function getItemLink(slot) + if slot == nil then return "", string.format("Slot can not be nil") end + local link = GetLootSlotLink(slot) + if link == nil then return "", string.format("GetLootSlotLink returned nil for slot %d", slot) end + return link, nil +end +---@param slot number +---@return string, string|nil +local function getItemName(slot) + if slot == nil then return "", string.format("Slot can not be null") end + local name = select(2, GetLootSlotInfo(slot)) + if name == nil then return "", string.format("GetLootSlotInfo returned nil for slot %d", slot) end + return name, nil +end +---@param slot number +---@return string, string|nil +local function getItemType(slot) + if slot == nil then return "", string.format("Slot can not be nil") end + local itemLink, err = getItemLink(slot) + if err then return "", err end + local itemType = select(6, GetItemInfo(itemLink)) + if itemType == nil then return "", string.format("GetItemInfo returned nil for slot %d", slot) end + return itemType, nil +end +---@param slot number +---@return string, string|nil +local function getItemSubtype(slot) + if slot == nil then return "", string.format("Slot can not be nil") end + local itemLink, err = getItemLink(slot) + if err then return "", err end + local itemSubtype = select(7, GetItemInfo(itemLink)) + if itemSubtype == nil then return "", string.format("GetItemInfo returned nil for slot %d", slot) end + return itemSubtype, nil +end +---@param slot number +---@return number, string|nil +local function getItemLevel(slot) + if slot == nil then return 0, string.format("Slot can not be nil") end + local itemLink, err = getItemLink(slot) + if err then return 0, err end + local itemLevel = select(4, GetItemInfo(itemLink)) + if itemLevel == nil then return 0, string.format("GetItemInfo returned nil for slot %d", slot) end + return itemLevel, nil +end + +---The vendor price in copper, or 0 for items that cannot be sold +---@param slot number +---@return number, string|nil +local function getItemValue(slot) + if slot == nil then return 0, string.format("Slot can not be nil") end + local itemLink, err = getItemLink(slot) + if err then return 0, err end + local value = select(11, GetItemInfo(itemLink)) + if value == nil then return 0, string.format("GetItemInfo returned nil for slot %d", slot) end + return value, nil +end +---@param slot number +---@return number, string|nil +local function getItemSubclassId(slot) + if slot == nil then return 0, string.format("Slot can not be nil") end + local itemLink, err = getItemLink(slot) + if err then return 0, err end + local subclassId = select(13, GetItemInfo(itemLink)) + if subclassId == nil then return 0, string.format("GetItemInfo returned nil for slot %d", slot) end + return subclassId, nil +end +---@param slot number +---@return number, string|nil +local function getItemQuantity(slot) + if slot == nil then return 0, string.format("Slot can not be nil") end + local quantity = select(3, GetLootSlotInfo(slot)) + if quantity == nil then return 0, string.format("GetLootSlotInfo returned nil for slot %d", slot) end + return quantity, nil +end +---@param slot number +---@return Enum.ItemQuality, string|nil +local function getItemQuality(slot) + if slot == nil then return 0, string.format("Slot can not be nil") end + local itemLink, err = getItemLink(slot) + if err then return 0, err end + local quality = select(3, GetItemInfo(itemLink)) + if quality == nil then return 0, string.format("GetItemInfo returned nil for slot %d", slot) end + return quality, nil +end +---@param slot number +---@return string, string|nil +local function getItemEquipLocation(slot) + if slot == nil then return "", string.format("Slot can not be nil") end + local itemLink, err = getItemLink(slot) + if err then return "", err end + local equipLoc = select(9, GetItemInfo(itemLink)) + if equipLoc == nil then return "", string.format("GetItemInfo returned nil for slot %d", slot) end + return equipLoc, nil +end +---@param slot number +---@return number, string|nil +local function getItemIcon(slot) + if slot == nil then return 134400, string.format("Slot can not be nil") end + local itemLink, err = getItemLink(slot) + if err then return 134400, err end + local icon = select(10, GetItemInfo(itemLink)) + if icon == nil then return 134400, string.format("GetItemInfo returned nil for slot %d", slot) end + return icon, nil +end +---@param slot number +---@return number, string|nil +local function getBindType(slot) + if slot == nil then return 0, string.format("Slot can not be nil") end + local itemLink, err = getItemLink(slot) + if err then return 0, err end + local bindType = select(14, GetItemInfo(itemLink)) + if bindType == nil then return 0, string.format("GetItemInfo returned nil for slot %d", slot) end + return bindType, nil +end + +---@class Filter +---@field requires table | nil +---@field filter fun(slot: number, provided: table): boolean +Filter = { + ---@param requires table | nil + ---@param filter fun(slot: number, provided: table): boolean + ---@return Filter + new = function(requires, filter) + local self = setmetatable({}, { + __index = Filter, + }) + self.requires = requires + self.filter = filter + return self + end, + + ---@param self Filter + ---@param slot number + ---@return boolean, string|nil + Run = function(self, slot) + ---@type table + local provided = {} + if self.requires then + for k, v in pairs(self.requires) do + local res, err = v(slot) + if err ~= nil then + if debug then print(err) end + return false, err + end + provided[k] = res + end + end + local res, err = self.filter(slot, provided) + if err ~= nil then + if debug then print(err) end + end + return res, nil + end, +} + +local goldFilter = Filter.new({ ["name"] = getItemName }, function(slot, provided) + ---@cast provided { name: string } + if not aura_env.config.goldFilter then return false end + if + string.find(provided.name, "Gold") + or string.find(provided.name, "Silver") + or string.find(provided.name, "Copper") + then + if debug then print(string.format("Gold filter pass for %s", provided.name)) end + return true + end + if debug then print(string.format("Gold filter fail for %s", provided.name)) end + return false +end) +local orderResourcesFilter = Filter.new({ ["name"] = getItemName }, function(slot, provided) + ---@cast provided { name: string } + if not aura_env.config.orderResourcesFilter then return false end + if string.find(provided.name, "Order Resources") then + if debug then print(string.format("Order resource filter pass for %s", provided.name)) end + return true + end + if debug then print(string.format("Order resource filter fail for %s", provided.name)) end + return false +end) +local mountFilter = Filter.new({ ["type"] = getItemType }, function(slot, provided) + ---@cast provided { type: string } + if not aura_env.config.mountFilter then return false end + if provided.type == "Mount" then + if debug then print(string.format("Mount filter pass for type %s", provided.type)) end + return true + end + if debug then print(string.format("Mount filter fail for type %s", provided.type)) end + return false +end) +local ilvlFilter = Filter.new({ ["ilvl"] = getItemLevel }, function(slot, provided) + ---@cast provided { ilvl: number } + if not aura_env.config.ilvlFilter then return false end + if provided.ilvl and provided.ilvl > aura_env.config.ilvlFilterThreshold then + if debug then print(string.format("ilvl filter pass for ilvl %d", provided.ilvl)) end + return true + end + if debug then print(string.format("ilvl filter fail for ilvl %d", provided.ilvl)) end + return false +end) +local professionFilter = Filter.new({ + ["type"] = getItemType, + ["subtype"] = getItemSubtype, +}, function(slot, provided) + ---@cast provided { type: string, subtype: string } + if not aura_env.config.professionFilter then return false end + + local enabled = { + ["Cloth"] = aura_env.config.professionFilterProfessions[1], + ["Cooking"] = aura_env.config.professionFilterProfessions[2], + ["Enchanting"] = aura_env.config.professionFilterProfessions[3], + ["Herb"] = aura_env.config.professionFilterProfessions[4], + ["Inscription"] = aura_env.config.professionFilterProfessions[5], + ["Jewelcrafting"] = aura_env.config.professionFilterProfessions[6], + ["Leather"] = aura_env.config.professionFilterProfessions[7], + ["Metal & Stone"] = aura_env.config.professionFilterProfessions[8], + ["Ore"] = aura_env.config.professionFilterProfessions[9], + } + + -- Maybe implement an expansion based filter + if provided.type == "Tradeskill" then + if enabled[provided.subtype] then + if debug then print(string.format("Profession filter pass for type %s", provided.type)) end + return true + end + end + if debug then print(string.format("Profession filter fail for type %s", provided.type)) end + return false +end) +local valueFilter = Filter.new({ + ["value"] = getItemValue, + ["quantity"] = getItemQuality, +}, function(slot, provided) + ---@cast provided { value: number, quantity: number } + if not aura_env.config.valueFilter then return false end + + local valueThreshold = aura_env.config.valueFilterThreshold + + local value = provided.value + if aura_env.config.valueFilterApplyValueToStack then value = value * provided.quantity end + + if value > valueThreshold then + if debug then print(string.format("Value filter pass for value %d", value)) end + return true + end + if debug then print(string.format("Value filter fail for value %d", value)) end + return false +end) +local greyValueFilter = Filter.new({ + ["quality"] = getItemQuality, + ["value"] = getItemValue, + ["quantity"] = getItemQuantity, +}, function(slot, provided) + ---@cast provided { quality: number, value: number, quantity: number } + if not aura_env.config.greyValueFilter then return false end + + local valueThreshold = aura_env.config.greyValueFilterThreshold + + if provided.quality == 0 then + local value = provided.value + if aura_env.config.greyValueFilterApplyValueToStack then value = value * provided.quantity end + + if value > valueThreshold then + if debug then + print(string.format("Grey value filter pass for value %d of %s quality items", value, provided.quality)) + end + return true + end + end + if debug then + print( + string.format("Grey value filter fail for value %d of %s quality items", provided.value, provided.quality) + ) + end + return false +end) +local questItemFilter = Filter.new({ + ["type"] = getItemType, + ["subtype"] = getItemSubtype, +}, function(slot, provided) + ---@cast provided { type: string, subtype: string } + if not aura_env.config.questItemsFilter then return false end + + if provided.type == "Quest" and provided.subtype == "Quest" then + if debug then + print(string.format("Quest item filter pass for type %s and subtype", provided.type, provided.subtype)) + end + return true + end + if debug then + print(string.format("Quest item filter fail for type %s and subtype", provided.type, provided.subtype)) + end + return false +end) +local classGearFilter = Filter.new({ + ["ilvl"] = getItemLevel, + ["quality"] = getItemQuality, + ["type"] = getItemType, + ["subtype"] = getItemSubtype, + ["equiploc"] = getItemEquipLocation, +}, function(slot, provided) + ---@cast provided { ilvl: number, quality: number, type: string, subtype: string, equiploc: string } + if not aura_env.config.classGearFilter then return false end + + local ilvlThreshold = aura_env.config.classGearFilterIlvlThreshold + local qualityThreshold = aura_env.config.classGearFilterQualityThreshold + + local isEquippable = aura_env.skills[select(3, UnitClass("player"))][provided.subtype] == 1 + + if isEquippable and provided.ilvl > ilvlThreshold and provided.quality > qualityThreshold then + if debug then + print(string.format("Class gear filter pass for ilvl %d and quality %d", provided.ilvl, provided.quality)) + end + return true + end + if debug then + print(string.format("Class gear filter fail for ilvl %d and quality %d", provided.ilvl, provided.quality)) + end + return false +end) +local nameFilter = Filter.new({ ["name"] = getItemName }, function(slot, provided) + ---@cast provided { name: string } + if not aura_env.config.nameFilter then return false end + + local names = string.split(",", aura_env.config.nameFilterNames or "") + if #names == 0 then return false end + for _, name in ipairs(names) do + name = string.trim(name) + + if aura_env.config.nameFilterIgnoreCase then + name = string.lower(name) + provided.name = string.lower(provided.name) + end + + if provided.name == name then + if debug then print(string.format("Name filter pass for %s", provided.name)) end + return true + end + end + if debug then print(string.format("Name filter fail for %s", provided.name)) end + return false +end) +local reicpeFilter = Filter.new({ ["name"] = getItemName }, function(slot, provided) + ---@cast provided { name: string } + if string.find(provided.name, "Recipe") or string.find(provided.name, "Technique") then + if debug then print(string.format("Recipe filter pass for %s", provided.name)) end + return true + end + if debug then print(string.format("Recipe filter fail for %s", provided.name)) end + return false +end) +local boeFilter = Filter.new({ + ["ilvl"] = getItemLevel, + ["type"] = getItemType, + ["quality"] = getItemQuality, + ["equiploc"] = getItemEquipLocation, + ["bindtype"] = getBindType, +}, function(slot, provided) + ---@cast provided { ilvl: number, type: string, quality: number, equiploc: string, bindtype: number } + aura_env.config.boeFilter = true + + local ilvlThreshold = aura_env.config.boeFilterIlvlThreshold + local qualityThreshold = aura_env.config.boeFilterQualityThreshold + + local itemType = provided.type + local itemEquipLoc = provided.equiploc + if + itemType == "Armor" + or itemType == "Weapon" + or itemEquipLoc == "INVTYPE_FINGER" + or itemEquipLoc == "INVTYPE_TRINKET" + or itemEquipLoc == "INVTYPE_CLOAK" + or itemEquipLoc == "INVTYPE_NECK" + then + local itemLevel = provided.ilvl + local itemQuality = provided.quality + local bindType = provided.bindtype + + if itemLevel > ilvlThreshold and itemQuality > qualityThreshold and bindType == 1 then + if debug then print(string.format("BoE filter pass for ilvl %d and quality %d", itemLevel, itemQuality)) end + return true + end + end + if debug then + print(string.format("BoE filter fail for ilvl %d and quality %d", provided.ilvl, provided.quality)) + end + return false +end) +local artifactPowerFilter = Filter.new({ + ["type"] = getItemType, + ["subtype"] = getItemSubtype, + ["subclassid"] = getItemSubclassId, + ["value"] = getItemValue, +}, function(slot, provided) + ---@cast provided { type: string, subtype: string, subclassid: number, value: number } + if not aura_env.config.artifactPowerFilter then return false end + if + provided.value == 0 + and provided.type == "Consumable" + and provided.subtype == "Other" + and provided.subclassid == 8 + then + if debug then + print( + string.format( + "Artifact power filter pass for type %s and subtype %s and subclassid %d with value %d", + provided.type, + provided.subtype, + provided.subclassid, + provided.value + ) + ) + end + return true + end + if debug then + DevTools_Dump(provided) + print( + string.format( + "Artifact power filter fail for type %s and subtype %s and subclassid %d with value %d", + provided.type, + provided.subtype, + provided.subclassid, + provided.value + ) + ) + end + return false +end) +local everythingFilter = Filter.new({ ["name"] = getItemName }, function(slot, provided) + ---@cast provided { name: string } + return aura_env.config.everythingFilter +end) + +---@type table +local filters = { + everythingFilter, + artifactPowerFilter, + boeFilter, + classGearFilter, + goldFilter, + greyValueFilter, + ilvlFilter, + mountFilter, + orderResourcesFilter, + professionFilter, + questItemFilter, + -- reicpeFilter, + valueFilter, + nameFilter, +} + +---@class FilterService +aura_env.FilterService = { + ---@param lootInfo table + Run = function(lootInfo) + ---@type table + local slotsToLoot = {} + for slot, item in pairs(lootInfo) do + if debug then + local itemname = getItemName(slot) + print(string.format("Checking slot %d for %s", slot, itemname)) + end + for _, filter in ipairs(filters) do + local res, err = filter:Run(slot) + if err then + if debug then print(err) end + end + if res then + slotsToLoot[#slotsToLoot + 1] = slot + break + end + end + end + + aura_env.FilterService.doLoot(slotsToLoot) + end, + + ---@param slots table + ---@return nil + doLoot = function(slots) + for i = #slots, 1, -1 do + aura_env.FilterService.lootslot(slots[i]) + end + end, + + ---@param slot number + ---@return nil + lootslot = function(slot) + LootSlot(slot) + + local itemIcon = getItemIcon(slot) or 134400 + local itemName = getItemName(slot) or "Unknown" + itemName = itemName:gsub("\n", ", ") + local itemQuality = getItemQuality(slot) or 0 + + if + string.find(itemName, "Gold") == nil + and string.find(itemName, "Silver") == nil + and string.find(itemName, "Copper") == nil + then + if not WeakAurasSaved.Cyka.ItemCache[itemName] then + WeakAurasSaved.Cyka.ItemCache[itemName] = { + icon = itemIcon, + quality = itemQuality, + } + end + end + end, +} + +aura_env.skills = { + --Warrior + [1] = { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 0, + ["Mail"] = 0, + ["Plate"] = 1, + ["Shields"] = 1, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 1, + ["Bows"] = 1, + ["Guns"] = 1, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 1, + ["Polearms"] = 1, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 1, + ["Warglaives"] = 1, + ["Staves"] = 1, + ["Fist Weapons"] = 1, + ["Daggers"] = 1, + ["Crossbows"] = 1, + ["Wands"] = 0, + }, + --Paladin + [2] = { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 0, + ["Mail"] = 0, + ["Plate"] = 1, + ["Shields"] = 1, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 1, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 1, + ["Polearms"] = 1, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 1, + ["Warglaives"] = 0, + ["Staves"] = 0, + ["Fist Weapons"] = 0, + ["Daggers"] = 0, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, + --Hunter + [3] = { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 0, + ["Mail"] = 1, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 1, + ["Bows"] = 1, + ["Guns"] = 1, + ["One-Handed Maces"] = 0, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 1, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 1, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 1, + ["Daggers"] = 1, + ["Crossbows"] = 1, + ["Wands"] = 0, + }, + --Rogue + [4] = { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 1, + ["Mail"] = 0, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 0, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 0, + ["Fist Weapons"] = 1, + ["Daggers"] = 1, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, + --Priest + [5] = { + --Armor Skills + ["Cloth"] = 1, + ["Leather"] = 0, + ["Mail"] = 0, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 0, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 0, + ["One-Handed Swords"] = 0, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 0, + ["Daggers"] = 1, + ["Crossbows"] = 0, + ["Wands"] = 1, + }, + --Death Knight + [6] = { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 0, + ["Mail"] = 0, + ["Plate"] = 1, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 1, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 1, + ["Polearms"] = 1, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 1, + ["Warglaives"] = 0, + ["Staves"] = 0, + ["Fist Weapons"] = 0, + ["Daggers"] = 0, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, + --Shaman + [7] = { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 0, + ["Mail"] = 1, + ["Plate"] = 0, + ["Shields"] = 1, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 0, + ["One-Handed Swords"] = 0, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 1, + ["Daggers"] = 1, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, + --Mage + [8] = { + --Armor Skills + ["Cloth"] = 1, + ["Leather"] = 0, + ["Mail"] = 0, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 0, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 0, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 0, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 0, + ["Daggers"] = 1, + ["Crossbows"] = 0, + ["Wands"] = 1, + }, + --Warlock + [9] = { + --Armor Skills + ["Cloth"] = 1, + ["Leather"] = 0, + ["Mail"] = 0, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 0, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 0, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 0, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 0, + ["Daggers"] = 1, + ["Crossbows"] = 0, + ["Wands"] = 1, + }, + --Monk + [10] = { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 1, + ["Mail"] = 0, + ["Plate"] = 1, + ["Shields"] = 1, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 1, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 1, + ["Daggers"] = 0, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, + --Druid + [11] = { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 1, + ["Mail"] = 0, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 0, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 1, + ["One-Handed Swords"] = 0, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 1, + ["Daggers"] = 1, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, + --Demon Hunter + [12] = { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 1, + ["Mail"] = 0, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 0, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 0, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 1, + ["Staves"] = 0, + ["Fist Weapons"] = 1, + ["Daggers"] = 0, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, +} +aura_env.qualityColors = { + "\124cff9d9d9d", -- Poor + "\124cffffffff", -- Common + "\124cff1eff00", -- Uncommon + "\124cff0070dd", -- Rare + "\124cffa335ee", -- Epic + "\124cffff8000", -- Legendary + "\124cffe6cc80", -- Artifact + "\124cff00ccff", -- Heirloom +} diff --git a/FreshShit/AutoLoot/export b/WeakAuras/Projects/AutoLoot/export similarity index 100% rename from FreshShit/AutoLoot/export rename to WeakAuras/Projects/AutoLoot/export diff --git a/LegionWA/AutoQuest/Event.lua b/WeakAuras/Projects/AutoQuest/Event.lua similarity index 97% rename from LegionWA/AutoQuest/Event.lua rename to WeakAuras/Projects/AutoQuest/Event.lua index b599f2c..54ed108 100644 --- a/LegionWA/AutoQuest/Event.lua +++ b/WeakAuras/Projects/AutoQuest/Event.lua @@ -1,42 +1,42 @@ --- QUEST_POI_UPDATE QUEST_DETAIL QUEST_COMPLETE QUEST_GREETING QUEST_PROGRESS GOSSIP_SHOW -function(e) - if e == "QUEST_POI_UPDATE" then - CloseGossip() - elseif e == "QUEST_DETAIL" then - AcceptQuest() - elseif e == "QUEST_COMPLETE" then - if GetNumQuestChoices() <= 1 then - GetQuestReward(1) - end - elseif e == "GOSSIP_SHOW" then - local quests = GetNumGossipAvailableQuests() - local completedQuests = GetNumGossipActiveQuests() - local options = GetNumGossipOptions() - if completedQuests > 0 and options == 0 then - for i = 1, completedQuests do - SelectGossipActiveQuest(i) - end - end - if quests > 0 and options == 0 then - SelectGossipAvailableQuest(1) - end - if options == 1 and quests + completedQuests == 0 then - SelectGossipOption(1) - end - elseif e == "QUEST_GREETING" then - local quests = GetNumGossipAvailableQuests() - local completedQuests = GetNumGossipActiveQuests() - if completedQuests > 0 then - for i = 1, completedQuests do - SelectActiveQuest(1) - end - end - if quests > 0 then - SelectAvailableQuest(1) - end - elseif e == "QUEST_PROGRESS" then - if IsQuestCompletable(i) then - CompleteQuest() - end - end +-- QUEST_POI_UPDATE QUEST_DETAIL QUEST_COMPLETE QUEST_GREETING QUEST_PROGRESS GOSSIP_SHOW +function(e) + if e == "QUEST_POI_UPDATE" then + CloseGossip() + elseif e == "QUEST_DETAIL" then + AcceptQuest() + elseif e == "QUEST_COMPLETE" then + if GetNumQuestChoices() <= 1 then + GetQuestReward(1) + end + elseif e == "GOSSIP_SHOW" then + local quests = GetNumGossipAvailableQuests() + local completedQuests = GetNumGossipActiveQuests() + local options = GetNumGossipOptions() + if completedQuests > 0 and options == 0 then + for i = 1, completedQuests do + SelectGossipActiveQuest(i) + end + end + if quests > 0 and options == 0 then + SelectGossipAvailableQuest(1) + end + if options == 1 and quests + completedQuests == 0 then + SelectGossipOption(1) + end + elseif e == "QUEST_GREETING" then + local quests = GetNumGossipAvailableQuests() + local completedQuests = GetNumGossipActiveQuests() + if completedQuests > 0 then + for i = 1, completedQuests do + SelectActiveQuest(1) + end + end + if quests > 0 then + SelectAvailableQuest(1) + end + elseif e == "QUEST_PROGRESS" then + if IsQuestCompletable(i) then + CompleteQuest() + end + end end \ No newline at end of file diff --git a/LegionWA/AutoQuest/Export b/WeakAuras/Projects/AutoQuest/Export similarity index 100% rename from LegionWA/AutoQuest/Export rename to WeakAuras/Projects/AutoQuest/Export diff --git a/FreshShit/AutoVendor/Event.lua b/WeakAuras/Projects/AutoVendor/Event.lua similarity index 96% rename from FreshShit/AutoVendor/Event.lua rename to WeakAuras/Projects/AutoVendor/Event.lua index 99f39b8..d958dfe 100644 --- a/FreshShit/AutoVendor/Event.lua +++ b/WeakAuras/Projects/AutoVendor/Event.lua @@ -1,15 +1,15 @@ --- MERCHANT_SHOW -function(allstates, e) - if (GetMerchantNumItems() > 0) then - aura_env.allstates = allstates - - if CanMerchantRepair() == true then RepairAllItems() end - - for container = 0, 4 do - for slot = 1, GetContainerNumSlots(container) do - aura_env.FilterService.Run(container, slot) - end - end - return true - end -end +-- MERCHANT_SHOW +function(allstates, e) + if (GetMerchantNumItems() > 0) then + aura_env.allstates = allstates + + if CanMerchantRepair() == true then RepairAllItems() end + + for container = 0, 4 do + for slot = 1, GetContainerNumSlots(container) do + aura_env.FilterService.Run(container, slot) + end + end + return true + end +end diff --git a/FreshShit/AutoVendor/Export b/WeakAuras/Projects/AutoVendor/Export similarity index 100% rename from FreshShit/AutoVendor/Export rename to WeakAuras/Projects/AutoVendor/Export diff --git a/FreshShit/AutoVendor/Init.lua b/WeakAuras/Projects/AutoVendor/Init.lua similarity index 97% rename from FreshShit/AutoVendor/Init.lua rename to WeakAuras/Projects/AutoVendor/Init.lua index 42d63fa..cd6a820 100644 --- a/FreshShit/AutoVendor/Init.lua +++ b/WeakAuras/Projects/AutoVendor/Init.lua @@ -1,259 +1,259 @@ -local debug = false -local iconDisplayDuration = 3 - ----@param container number ----@param slot number ----@return string, string|nil -local function getItemLink(container, slot) - if container == nil then return "", string.format("Container is nil") end - if slot == nil then return "", string.format("Slot is nil") end - local link = select(7, GetContainerItemInfo(container, slot)) - if link == nil then return "", string.format("GetContainerItemInfo returned nil for link (arg 7)") end - return link -end ----@param container number ----@param slot number ----@return string, string|nil -local function getItemQuantity(container, slot) - if container == nil then return "", string.format("Container is nil") end - if slot == nil then return "", string.format("Slot is nil") end - local quantity = select(2, GetContainerItemInfo(container, slot)) - if quantity == nil then return "", string.format("GetContainerItemInfo returned nil for quantity (arg 2)") end - return quantity -end ----@param container number ----@param slot number ----@return string, string|nil -local function getItemName(container, slot) - if container == nil then return "", string.format("Container is nil") end - if slot == nil then return "", string.format("Slot is nil") end - local name = select(1, GetItemInfo(getItemLink(container, slot))) - if name == nil then return "", string.format("GetItemInfo returned nil for name (arg 1)") end - return name -end ----@param container number ----@param slot number ----@return string, string|nil -local function getItemType(container, slot) - if container == nil then return "", string.format("Container is nil") end - if slot == nil then return "", string.format("Slot is nil") end - local type = select(6, GetItemInfo(getItemLink(container, slot))) - if type == nil then return "", string.format("GetItemInfo returned nil for type (arg 6)") end - return type -end ----@param container number ----@param slot number ----@return string, string|nil -local function getItemSubtype(container, slot) - if container == nil then return "", string.format("Container is nil") end - if slot == nil then return "", string.format("Slot is nil") end - local subtype = select(7, GetItemInfo(getItemLink(container, slot))) - if subtype == nil then return "", string.format("GetItemInfo returned nil for subtype (arg 7)") end - return subtype -end ----@param container number ----@param slot number ----@return string, string|nil -local function getItemLevel(container, slot) - if container == nil then return "", string.format("Container is nil") end - if slot == nil then return "", string.format("Slot is nil") end - local level = select(4, GetItemInfo(getItemLink(container, slot))) - if level == nil then return "", string.format("GetItemInfo returned nil for level (arg 4)") end - return level -end ----@param container number ----@param slot number ----@return string, string|nil -local function getItemValue(container, slot) - if container == nil then return "", string.format("Container is nil") end - if slot == nil then return "", string.format("Slot is nil") end - local value = select(11, GetItemInfo(getItemLink(container, slot))) - if value == nil then return "", string.format("GetItemInfo returned nil for value (arg 11)") end - return value -end ----@param container number ----@param slot number ----@return string, string|nil -local function getItemQuality(container, slot) - if container == nil then return "", string.format("Container is nil") end - if slot == nil then return "", string.format("Slot is nil") end - local quality = select(3, GetItemInfo(getItemLink(container, slot))) - if quality == nil then return "", string.format("GetItemInfo returned nil for quality (arg 3)") end - return quality -end ----@param container number ----@param slot number ----@return string, string|nil -local function getItemEquipLocation(container, slot) - if container == nil then return "", string.format("Container is nil") end - if slot == nil then return "", string.format("Slot is nil") end - local equipLoc = select(9, GetItemInfo(getItemLink(container, slot))) - if equipLoc == nil then return "", string.format("GetItemInfo returned nil for equipLoc (arg 9)") end - return equipLoc -end ----@param container number ----@param slot number ----@return string, string|nil -local function getItemIcon(container, slot) - if container == nil then return "", string.format("Container is nil") end - if slot == nil then return "", string.format("Slot is nil") end - local icon = select(10, GetItemInfo(getItemLink(container, slot))) - if icon == nil then return "", string.format("GetItemInfo returned nil for icon (arg 10)") end - return icon -end ----@param container number ----@param slot number ----@return string, string|nil -local function getBindType(container, slot) - if container == nil then return "", string.format("Container is nil") end - if slot == nil then return "", string.format("Slot is nil") end - local bindType = select(14, GetItemInfo(getItemLink(container, slot))) - if bindType == nil then return "", string.format("GetItemInfo returned nil for bindType (arg 14)") end - return bindType -end - ----@class Filter ----@field requires table | nil ----@field filter fun(container: number, slot: number, provided: table): boolean -Filter = { - ---@param requires table | nil - ---@param filter fun(container: number, slot: number, provided: table): boolean - ---@return Filter - new = function(requires, filter) - local self = setmetatable({}, { - __index = Filter, - }) - self.requires = requires - self.filter = filter - return self - end, - - ---@param self Filter - ---@param container number - ---@param slot number - ---@return boolean, string|nil - Run = function(self, container, slot) - ---@type table - local provided = {} - if self.requires then - for k, v in pairs(self.requires) do - local res, err = v(container, slot) - if err then - if debug then print(err) end - return false, err - end - provided[k] = res - end - end - local res, err = self.filter(container, slot, provided) - if err then - if debug then print(err) end - end - return res, nil - end, -} - -local grayFilter = Filter.new({ - ["quality"] = getItemQuality, -}, function(container, slot, provided) - if not aura_env.config.grayFilter then return false end - if provided.quality == 0 then return true end - return false -end) -local gearFilter = Filter.new({ - ["ilvl"] = getItemLevel, - ["bindType"] = getBindType, - ["type"] = getItemType, - ["equipLoc"] = getItemEquipLocation, -}, function(container, slot, provided) - if not aura_env.config.gearFilter then return false end - local ilvlThreshold = aura_env.config.gearFilterIlvlFilterThreshold - local sellBoe = aura_env.config.gearFilterSellBoe - - if - provided.type == "Armor" - or provided.type == "Weapon" - or provided.equipLoc == "INVTYPE_FINGER" - or provided.equipLoc == "INVTYPE_TRINKET" - or provided.equipLoc == "INVTYPE_CLOAK" - or provided.equipLoc == "INVTYPE_NECK" - then - if provided.ilvl < ilvlThreshold and (provided.bindType == 1 or sellBoe) then return true end - end - return false -end) - ----@param container number ----@param slot number ----@return nil, string|nil -local function doSell(container, slot) - local itemIcon, err = getItemIcon(container, slot) - if err then return nil, string.format("Error getting item icon: %s", err) end - local itemName, err = getItemName(container, slot) - if err then return nil, string.format("Error getting item name: %s", err) end - local itemQuantity, err = getItemQuantity(container, slot) - if err then return nil, string.format("Error getting item quantity: %s", err) end - local itemQuality, err = getItemQuality(container, slot) - if err then return nil, string.format("Error getting item quality: %s", err) end - - local nameWithColor = string.format("%s[%s]\124r", aura_env.qualityColors[itemQuality + 1], itemName) - local nameWithQuantity = string.format("%s x%s", nameWithColor, itemQuantity) - - aura_env.allstates[#aura_env.allstates + 1] = { - show = true, - changed = true, - index = GetTime(), - resort = true, - - icon = itemIcon, - name = nameWithQuantity, - amount = itemQuantity, - - progressType = "timed", - expirationTime = GetTime() + iconDisplayDuration, - duration = iconDisplayDuration, - autoHide = true, - } - - UseContainerItem(container, slot) - return nil, nil -end - ----@type table -local filters = { - grayFilter, - gearFilter, -} - ----@class FilterService -aura_env.FilterService = { - ---@param container number - ---@param slot number - ---@return nil, nil - Run = function(container, slot) - local itemLink, err = getItemLink(container, slot) - if err then return nil, string.format("Err: slot empty (%d-%d) - %s", container, slot, err) end - for k, filter in pairs(filters) do - local res, err = filter:Run(container, slot) - if err then - if debug then print(err) end - else - if res then - doSell(container, slot) - return - end - end - end - end, -} - -aura_env.qualityColors = { - "\124cff9d9d9d", -- Poor - "\124cffffffff", -- Common - "\124cff1eff00", -- Uncommon - "\124cff0070dd", -- Rare - "\124cffa335ee", -- Epic - "\124cffff8000", -- Legendary - "\124cffe6cc80", -- Artifact - "\124cff00ccff", -- Heirloom -} +local debug = false +local iconDisplayDuration = 3 + +---@param container number +---@param slot number +---@return string, string|nil +local function getItemLink(container, slot) + if container == nil then return "", string.format("Container is nil") end + if slot == nil then return "", string.format("Slot is nil") end + local link = select(7, GetContainerItemInfo(container, slot)) + if link == nil then return "", string.format("GetContainerItemInfo returned nil for link (arg 7)") end + return link +end +---@param container number +---@param slot number +---@return string, string|nil +local function getItemQuantity(container, slot) + if container == nil then return "", string.format("Container is nil") end + if slot == nil then return "", string.format("Slot is nil") end + local quantity = select(2, GetContainerItemInfo(container, slot)) + if quantity == nil then return "", string.format("GetContainerItemInfo returned nil for quantity (arg 2)") end + return quantity +end +---@param container number +---@param slot number +---@return string, string|nil +local function getItemName(container, slot) + if container == nil then return "", string.format("Container is nil") end + if slot == nil then return "", string.format("Slot is nil") end + local name = select(1, GetItemInfo(getItemLink(container, slot))) + if name == nil then return "", string.format("GetItemInfo returned nil for name (arg 1)") end + return name +end +---@param container number +---@param slot number +---@return string, string|nil +local function getItemType(container, slot) + if container == nil then return "", string.format("Container is nil") end + if slot == nil then return "", string.format("Slot is nil") end + local type = select(6, GetItemInfo(getItemLink(container, slot))) + if type == nil then return "", string.format("GetItemInfo returned nil for type (arg 6)") end + return type +end +---@param container number +---@param slot number +---@return string, string|nil +local function getItemSubtype(container, slot) + if container == nil then return "", string.format("Container is nil") end + if slot == nil then return "", string.format("Slot is nil") end + local subtype = select(7, GetItemInfo(getItemLink(container, slot))) + if subtype == nil then return "", string.format("GetItemInfo returned nil for subtype (arg 7)") end + return subtype +end +---@param container number +---@param slot number +---@return string, string|nil +local function getItemLevel(container, slot) + if container == nil then return "", string.format("Container is nil") end + if slot == nil then return "", string.format("Slot is nil") end + local level = select(4, GetItemInfo(getItemLink(container, slot))) + if level == nil then return "", string.format("GetItemInfo returned nil for level (arg 4)") end + return level +end +---@param container number +---@param slot number +---@return string, string|nil +local function getItemValue(container, slot) + if container == nil then return "", string.format("Container is nil") end + if slot == nil then return "", string.format("Slot is nil") end + local value = select(11, GetItemInfo(getItemLink(container, slot))) + if value == nil then return "", string.format("GetItemInfo returned nil for value (arg 11)") end + return value +end +---@param container number +---@param slot number +---@return string, string|nil +local function getItemQuality(container, slot) + if container == nil then return "", string.format("Container is nil") end + if slot == nil then return "", string.format("Slot is nil") end + local quality = select(3, GetItemInfo(getItemLink(container, slot))) + if quality == nil then return "", string.format("GetItemInfo returned nil for quality (arg 3)") end + return quality +end +---@param container number +---@param slot number +---@return string, string|nil +local function getItemEquipLocation(container, slot) + if container == nil then return "", string.format("Container is nil") end + if slot == nil then return "", string.format("Slot is nil") end + local equipLoc = select(9, GetItemInfo(getItemLink(container, slot))) + if equipLoc == nil then return "", string.format("GetItemInfo returned nil for equipLoc (arg 9)") end + return equipLoc +end +---@param container number +---@param slot number +---@return string, string|nil +local function getItemIcon(container, slot) + if container == nil then return "", string.format("Container is nil") end + if slot == nil then return "", string.format("Slot is nil") end + local icon = select(10, GetItemInfo(getItemLink(container, slot))) + if icon == nil then return "", string.format("GetItemInfo returned nil for icon (arg 10)") end + return icon +end +---@param container number +---@param slot number +---@return string, string|nil +local function getBindType(container, slot) + if container == nil then return "", string.format("Container is nil") end + if slot == nil then return "", string.format("Slot is nil") end + local bindType = select(14, GetItemInfo(getItemLink(container, slot))) + if bindType == nil then return "", string.format("GetItemInfo returned nil for bindType (arg 14)") end + return bindType +end + +---@class Filter +---@field requires table | nil +---@field filter fun(container: number, slot: number, provided: table): boolean +Filter = { + ---@param requires table | nil + ---@param filter fun(container: number, slot: number, provided: table): boolean + ---@return Filter + new = function(requires, filter) + local self = setmetatable({}, { + __index = Filter, + }) + self.requires = requires + self.filter = filter + return self + end, + + ---@param self Filter + ---@param container number + ---@param slot number + ---@return boolean, string|nil + Run = function(self, container, slot) + ---@type table + local provided = {} + if self.requires then + for k, v in pairs(self.requires) do + local res, err = v(container, slot) + if err then + if debug then print(err) end + return false, err + end + provided[k] = res + end + end + local res, err = self.filter(container, slot, provided) + if err then + if debug then print(err) end + end + return res, nil + end, +} + +local grayFilter = Filter.new({ + ["quality"] = getItemQuality, +}, function(container, slot, provided) + if not aura_env.config.grayFilter then return false end + if provided.quality == 0 then return true end + return false +end) +local gearFilter = Filter.new({ + ["ilvl"] = getItemLevel, + ["bindType"] = getBindType, + ["type"] = getItemType, + ["equipLoc"] = getItemEquipLocation, +}, function(container, slot, provided) + if not aura_env.config.gearFilter then return false end + local ilvlThreshold = aura_env.config.gearFilterIlvlFilterThreshold + local sellBoe = aura_env.config.gearFilterSellBoe + + if + provided.type == "Armor" + or provided.type == "Weapon" + or provided.equipLoc == "INVTYPE_FINGER" + or provided.equipLoc == "INVTYPE_TRINKET" + or provided.equipLoc == "INVTYPE_CLOAK" + or provided.equipLoc == "INVTYPE_NECK" + then + if provided.ilvl < ilvlThreshold and (provided.bindType == 1 or sellBoe) then return true end + end + return false +end) + +---@param container number +---@param slot number +---@return nil, string|nil +local function doSell(container, slot) + local itemIcon, err = getItemIcon(container, slot) + if err then return nil, string.format("Error getting item icon: %s", err) end + local itemName, err = getItemName(container, slot) + if err then return nil, string.format("Error getting item name: %s", err) end + local itemQuantity, err = getItemQuantity(container, slot) + if err then return nil, string.format("Error getting item quantity: %s", err) end + local itemQuality, err = getItemQuality(container, slot) + if err then return nil, string.format("Error getting item quality: %s", err) end + + local nameWithColor = string.format("%s[%s]\124r", aura_env.qualityColors[itemQuality + 1], itemName) + local nameWithQuantity = string.format("%s x%s", nameWithColor, itemQuantity) + + aura_env.allstates[#aura_env.allstates + 1] = { + show = true, + changed = true, + index = GetTime(), + resort = true, + + icon = itemIcon, + name = nameWithQuantity, + amount = itemQuantity, + + progressType = "timed", + expirationTime = GetTime() + iconDisplayDuration, + duration = iconDisplayDuration, + autoHide = true, + } + + UseContainerItem(container, slot) + return nil, nil +end + +---@type table +local filters = { + grayFilter, + gearFilter, +} + +---@class FilterService +aura_env.FilterService = { + ---@param container number + ---@param slot number + ---@return nil, nil + Run = function(container, slot) + local itemLink, err = getItemLink(container, slot) + if err then return nil, string.format("Err: slot empty (%d-%d) - %s", container, slot, err) end + for k, filter in pairs(filters) do + local res, err = filter:Run(container, slot) + if err then + if debug then print(err) end + else + if res then + doSell(container, slot) + return + end + end + end + end, +} + +aura_env.qualityColors = { + "\124cff9d9d9d", -- Poor + "\124cffffffff", -- Common + "\124cff1eff00", -- Uncommon + "\124cff0070dd", -- Rare + "\124cffa335ee", -- Epic + "\124cffff8000", -- Legendary + "\124cffe6cc80", -- Artifact + "\124cff00ccff", -- Heirloom +} diff --git a/Complete Projects/Legion/Autoloot.lua b/WeakAuras/Projects/Autoloot.lua similarity index 97% rename from Complete Projects/Legion/Autoloot.lua rename to WeakAuras/Projects/Autoloot.lua index 25f2f7f..b5feea5 100644 --- a/Complete Projects/Legion/Autoloot.lua +++ b/WeakAuras/Projects/Autoloot.lua @@ -1,698 +1,698 @@ ---LOOT_READY MERCHANT_SHOW QUEST_POI_UPDATE QUEST_DETAIL QUEST_COMPLETE QUEST_GREETING QUEST_PROGRESS GOSSIP_SHOW SCRAPPING_MACHINE_SHOW MERCHANT_CLOSED EQUIP_BIND_CONFIRM -function(e) - local aura_env = aura_env - if e == "LOOT_READY" then --Auto Loot - local slot = 1 - local lootinfo = GetLootInfo() - for k, v in pairs(lootinfo) do - if v.locked == false then - local link = GetLootSlotLink(slot) - local looted = false - if not link then link = GetLootSlotLink(slot) end - if aura_env.filter[1] == true and (v.item:match("%d+ Gold") or v.item:match("%d+ Silver") or v.item:match("%d+ Copper")) then - LootSlot(slot) - if aura_env.debug == true then - print("loot 1 ", v.item, type, subtype) - end - if link then - WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) - end - elseif aura_env.filter[2] == true and link:match("Azerite") then - LootSlot(slot) - if aura_env.debug == true then - print("loot 2 ", v.item, type, subtype) - end - if link then - WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) - end - elseif aura_env.filter[3] == true and v.item:match("War Resources") then - LootSlot(slot) - if aura_env.debug == true then - print("loot 3 ", v.item, type, subtype) - end - if link then - WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) - end - elseif aura_env.filter[4] == true and v.item:match("Residuum") then - LootSlot(slot) - if aura_env.debug == true then - print("loot 4 ", v.item, type, subtype) - end - if link then - WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) - end - elseif aura_env.filter[5] == true and v.item:match("Manapearl") then - LootSlot(slot) - if aura_env.debug == true then - print("loot 5 ", v.item, type, subtype) - end - if link then - WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) - end - end - if link then - local icon = v.texture - local id = link:match("item:(%d+):") - if not WeakAurasSaved.CustomTrash.IconDatabase[v.item] and v.item and icon then - WeakAurasSaved.CustomTrash.IconDatabase[v.item] = icon - print("Adding ", v.item, " to the icon database") - end - if not WeakAurasSaved.CustomTrash.IDDatabase[v.item] and v.item and id then - WeakAurasSaved.CustomTrash.IDDatabase[v.item] = id - print("Adding ", v.item, " to the id database") - end - local type = select(6, GetItemInfo(link)) or "" - local subtype = select(7, GetItemInfo(link)) or "" - local ilvl = select(4, GetItemInfo(link)) or 0 - local equip = select(9, GetItemInfo(link)) - if aura_env.filter[6] == true and (select(7, GetItemInfo(link)) or 0) == "Mount" then - LootSlot(slot) - if aura_env.debug == true then - print("loot 6 ", v.item, type, subtype) - end - if link then - WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) - end - elseif aura_env.filter[7] == true and ilvl > aura_env.ilvlFilter then - LootSlot(slot) - if aura_env.debug == true then - print("loot 7 ", v.item, type, subtype) - end - if link then - WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) - end - elseif aura_env.filter[8] == true and (select(7, GetItemInfo(link)) or 0) == "Herb" then - LootSlot(slot) - if aura_env.debug == true then - print("loot 8 ", v.item, type, subtype) - end - if link then - WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) - end - elseif aura_env.filter[9] == true and (select(7, GetItemInfo(link)) or 0) == "Cooking" then - LootSlot(slot) - if aura_env.debug == true then - print("loot 9 ", v.item, type, subtype) - end - if link then - WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) - end - elseif aura_env.filter[10] == true and (select(7, GetItemInfo(link)) or 0) == "Cloth" and type == "Tradeskill" then - LootSlot(slot) - if aura_env.debug == true then - print("loot 10 ", v.item, type, subtype) - end - if link then - WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) - end - elseif aura_env.filter[11] == true and (select(7, GetItemInfo(link)) or 0) == "Metal & Stone" then - LootSlot(slot) - if aura_env.debug == true then - print("loot 11 ", v.item, type, subtype) - end - if link then - WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) - end - elseif aura_env.filter[12] == true and (select(11, GetItemInfo(link)) or 0) > aura_env.goldFilter and v.quality == 0 then - LootSlot(slot) - if aura_env.debug == true then - print("loot 12 ", v.item, type, subtype) - end - if link then - WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) - end - elseif aura_env.filter[13] == true and v.quality > 1 and v.quality < 4 and type ~= "Weapon" and type ~= "Armor" then - LootSlot(slot) - if aura_env.debug == true then - print("loot 13 ", v.item, type, subtype) - end - if link then - WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) - end - elseif aura_env.filter[14] == true and v.isQuestItem == true then - LootSlot(slot) - if aura_env.debug == true then - print("loot 14 ", v.item, type, subtype) - end - if link then - WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) - end - elseif aura_env.filter[15] == true and v.quality == 0 then - LootSlot(slot) - if aura_env.debug == true then - print("loot 15 ", v.item, type, subtype) - end - if link then - WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) - end - elseif aura_env.filter[16] == true and aura_env.whitelist[v.item] then - LootSlot(slot) - if aura_env.debug == true then - print("loot 16 ", v.item, type, subtype) - end - if link then - WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) - end - elseif aura_env.filter[17] == true and type == "Quest" and subtype == "Quest" then - LootSlot(slot) - if aura_env.debug == true then - print("loot 17 ", v.item, type, subtype) - end - if link then - WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) - end - elseif aura_env.filter[21] == true and type == "Consumable" and subtype == "Other" then - LootSlot(slot) - if aura_env.debug == true then - print("loot 21 ", v.item, type, subtype) - end - if link then - WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) - end - else - if type == "Weapon" or type == "Armor" then - if aura_env.filter[18] == true and aura_env.skills[select(3, UnitClass("player"))][subtype] == 1 and v.quality > 2 then - LootSlot(slot) - if aura_env.debug == true then - print("loot 18 ", v.item, type, subtype) - end - if link then - WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) - end - elseif aura_env.filter[19] == true and (equip == "INVTYPE_FINGER" or equip == "INVTYPE_TRINKET" or equip == "INVTYPE_CLOAK" or equip == "INVTYPE_NECK") and v.quality > 2 then - LootSlot(slot) - if aura_env.debug == true then - print("loot 19 ", v.item, type, subtype) - end - if link then - WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) - end - end - elseif aura_env.filter[20] == true and type == "Miscellaneous" then - if subtype == "Mount" then - LootSlot(slot) - if aura_env.debug == true then - print("loot 20 ", v.item, type, subtype) - end - if link then - WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) - end - end - end - end - end - slot = slot + 1 - end - end - CloseLoot() - elseif e == "EQUIP_BIND_CONFIRM" then - StaticPopup1Button1:Click() - elseif e == "SCRAPPING_MACHINE_SHOW" then - for i = 0, 4 do - for j = 1, GetContainerNumSlots(i) do - local link = select(7, GetContainerItemInfo(i, j)) - if link then - local name = GetItemInfo(link) - local rarity = select(3, GetItemInfo(link)) - local ilvl = select(4, GetItemInfo(link)) or 0 - local type = select(6, GetItemInfo(link)) - local equip = select(9, GetItemInfo(link)) or "" - local price = select(11, GetItemInfo(link)) - if aura_env.sellWhitelist[name] ~= 1 then - if name and rarity and ilvl and type and equip and price then - if (type == "Armor" or type == "Weapon") and rarity <= 3 and aura_env.getequipID(equip) then - UseContainerItem(i, j) - elseif rarity > 3 and aura_env.getequipID(equip) then - if equip ~= "INVTYPE_FINGER" then - local eqID = aura_env.getequipID(equip) - local elink = GetInventoryItemLink("player", eqID) - local eilvl = select(4, GetItemInfo(elink)) or 0 - if eilvl > ilvl + 5 then - print("Scrapping " .. link .. "over " .. eilvl - ilvl .. " ilvl difference from " .. elink) - UseContainerItem(i, j) - end - elseif equip == "INVTYPE_FINGER" then - local eqID1, eqID2 = 11, 12 - local elink1, elink2 = GetInventoryItemLink("player", eqID1), GetInventoryItemLink("player", eqID2) - local eilvl1, eilvl2 = select(4, GetItemInfo(elink1)) or 0, select(4, GetItemInfo(elink2)) or 0 - if eilvl1 > ilvl + 5 then - print("Scrapping " .. link .. " over " .. eilvl1 - ilvl .. " ilvl difference from " .. elink1) - UseContainerItem(i, j) - elseif eilvl2 > ilvl + 5 then - print("Scrapping " .. link .. " over " .. eilvl2 - ilvl .. " ilvl difference from " .. elink2) - UseContainerItem(i, j) - end - end - end - end - end - end - end - end - elseif e == "MERCHANT_SHOW" then --Sell grey and white wepaon - if CanMerchantRepair() == true then RepairAllItems() end - local i, j = 0, 1 - for c = 0, 4 do - for s = 1, GetContainerNumSlots(c) do - local link = select(7, GetContainerItemInfo(c, s)) - if link then - local name = GetItemInfo(link) - local rarity = select(3, GetItemInfo(link)) - local ilvl = select(4, GetItemInfo(link)) or 0 - local type = select(6, GetItemInfo(link)) - local price = select(11, GetItemInfo(link)) - if price and price > 0 then - if aura_env.sellWhitelist[name] ~= 1 then - if rarity == 0 then - aura_env.toSell[#aura_env.toSell + 1] = {["c"] = c, ["s"] = s} - elseif (type == "Armor" or type == "Weapon") and ilvl < 350 then - aura_env.toSell[#aura_env.toSell + 1] = {["c"] = c, ["s"] = s} - end - end - end - end - end - end - aura_env.ticker = C_Timer.NewTicker(0.15, function() - if aura_env.toSell[1] then - UseContainerItem(aura_env.toSell[1].c, aura_env.toSell[1].s) - table.remove(aura_env.toSell, 1) - else - aura_env.ticker:Cancel() - end - if j >= GetContainerNumSlots(i) then i = i + 1 - j = 1 end - if i >= 4 then aura_env.ticker:Cancel() end - end) - elseif e == "MERCHANT_CLOSED" then - if aura_env.ticker then aura_env.ticker:Cancel() end - aura_env.toSell = {} - elseif e == "QUEST_POI_UPDATE" then - CloseGossip() - elseif e == "QUEST_DETAIL" then - AcceptQuest() - elseif e == "QUEST_COMPLETE" then - if GetNumQuestChoices() <= 1 then - GetQuestReward(1) - end - elseif e == "GOSSIP_SHOW" then - local quests = GetNumGossipAvailableQuests() - local complquests = GetNumGossipActiveQuests() - local opt = GetNumGossipOptions() - if complquests > 0 and opt == 0 then - for i = 1, complquests do - SelectGossipActiveQuest(i) - end - end - if quests > 0 and opt == 0 then - SelectGossipAvailableQuest(1) - end - if opt == 1 and quests + complquests == 0 then - SelectGossipOption(1) - end - elseif e == "QUEST_GREETING" then - local quests = GetNumGossipAvailableQuests() - local complquests = GetNumGossipActiveQuests() - if complquests > 0 then - for i = 1, complquests do - SelectActiveQuest(1) - end - end - if quests > 0 then - SelectAvailableQuest(1) - end - elseif e == "QUEST_PROGRESS" then - if IsQuestCompletable(i) then - CompleteQuest() - end - end -end - ---INIT -aura_env.debug = true -aura_env.filter = { - [1] = true, --Gold - [2] = true, --Azerite - [3] = true, --War resources - [4] = true, --Residuum - [5] = true, --Manapearls - [6] = true, --Mounts - [7] = true, --High ilvl - [8] = true, --Herbs - [9] = false, --Cooking - [10] = false, --Cloth - [11] = true, --Metal & Stone - [12] = true, --Gold filter greys - [13] = true, -- >1 && <4 quality items, no gear - [14] = true, --Quest items - [15] = false, --All greys - [16] = true, --Whitelist - [17] = true, --Quest items (different filter) - [18] = true, --Class aproperiate >2 items - [19] = true, --Jewelery >2 quality - [20] = true, --Additional mount filter - [21] = true, --Tradeskill // Elemental -} -aura_env.ilvlFilter = 940 -aura_env.goldFilter = 500000 - -aura_env.whitelist = { - ["Pygmy Suckerfish"] = 1, - ["Drakkari Offerings"] = 1, - ["Deepcoral Pod"] = 1, - ["Hardened Spring"] = 1, - ["Machined Gear Assembly"] = 1, - ["Tempered Plating"] = 1, - ["Hefty Glimmershell"] = 1, - ["Fresh Meat"] = 1, - ["Wood"] = 1, - - ["Blood of Sargeras"] = 1, - ["Primal Sargerite"] = 1, -} -aura_env.sellWhitelist = { - ["Blacksmith Hammer"] = 1, - ["Endless Tincture of Renewed Combat"] = 1, - ["Mr. Munchykins"] = 1, - ["Arclight Spanner"] = 1, - ["Runeblade of Baron Rivendare"] = 1, -} -aura_env.toSell = {} -aura_env.getequipID = function(equip) - if equip == "INVTYPE_HEAD" then return 1 - elseif equip == "INVTYPE_NECK" then return 2 - elseif equip == "INVTYPE_SHOULDER" then return 3 - elseif equip == "INVTYPE_BODY" then return 4 - elseif equip == "INVTYPE_CHEST" or equip == "INVTYPE_ROBE" then return 5 - elseif equip == "INVTYPE_WAIST" then return 6 - elseif equip == "INVTYPE_LEGS" then return 7 - elseif equip == "INVTYPE_FEET" then return 8 - elseif equip == "INVTYPE_WRIST" then return 9 - elseif equip == "INVTYPE_HAND" then return 10 - elseif equip == "INVTYPE_CLOAK" then return 15 - elseif equip == "INVTYPE_WEAPON" or equip == "INVTYPE_WEAPONMAINHAND" or equip == "INVTYPE_2HWEAPON" then return 16 - elseif equip == "INVTYPE_SHIELD" then return 17 - else return nil end -end -aura_env.skills = { - --Warrior - [1] = { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 0, - ["Mail"] = 0, - ["Plate"] = 1, - ["Shields"] = 1, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 1, - ["Bows"] = 1, - ["Guns"] = 1, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 1, - ["Polearms"] = 1, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 1, - ["Warglaives"] = 1, - ["Staves"] = 1, - ["Fist Weapons"] = 1, - ["Daggers"] = 1, - ["Crossbows"] = 1, - ["Wands"] = 0, - }, - --Paladin - [2] = { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 0, - ["Mail"] = 0, - ["Plate"] = 1, - ["Shields"] = 1, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 1, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 1, - ["Polearms"] = 1, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 1, - ["Warglaives"] = 0, - ["Staves"] = 0, - ["Fist Weapons"] = 0, - ["Daggers"] = 0, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, - --Hunter - [3] = { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 0, - ["Mail"] = 1, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 1, - ["Bows"] = 1, - ["Guns"] = 1, - ["One-Handed Maces"] = 0, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 1, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 1, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 1, - ["Daggers"] = 1, - ["Crossbows"] = 1, - ["Wands"] = 0, - }, - --Rogue - [4] = { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 1, - ["Mail"] = 0, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 0, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 0, - ["Fist Weapons"] = 1, - ["Daggers"] = 1, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, - --Priest - [5] = { - --Armor Skills - ["Cloth"] = 1, - ["Leather"] = 0, - ["Mail"] = 0, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 0, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 0, - ["One-Handed Swords"] = 0, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 0, - ["Daggers"] = 1, - ["Crossbows"] = 0, - ["Wands"] = 1, - }, - --Death Knight - [6] = { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 0, - ["Mail"] = 0, - ["Plate"] = 1, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 1, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 1, - ["Polearms"] = 1, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 1, - ["Warglaives"] = 0, - ["Staves"] = 0, - ["Fist Weapons"] = 0, - ["Daggers"] = 0, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, - --Shaman - [7] = { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 0, - ["Mail"] = 1, - ["Plate"] = 0, - ["Shields"] = 1, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 0, - ["One-Handed Swords"] = 0, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 1, - ["Daggers"] = 1, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, - --Mage - [8] = { - --Armor Skills - ["Cloth"] = 1, - ["Leather"] = 0, - ["Mail"] = 0, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 0, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 0, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 0, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 0, - ["Daggers"] = 1, - ["Crossbows"] = 0, - ["Wands"] = 1, - }, - --Warlock - [9] = { - --Armor Skills - ["Cloth"] = 1, - ["Leather"] = 0, - ["Mail"] = 0, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 0, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 0, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 0, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 0, - ["Daggers"] = 1, - ["Crossbows"] = 0, - ["Wands"] = 1, - }, - --Monk - [10] = { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 1, - ["Mail"] = 0, - ["Plate"] = 1, - ["Shields"] = 1, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 1, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 1, - ["Daggers"] = 0, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, - --Druid - [11] = { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 1, - ["Mail"] = 0, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 0, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 1, - ["One-Handed Swords"] = 0, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 1, - ["Daggers"] = 1, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, - --Demon Hunter - [12] = { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 1, - ["Mail"] = 0, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 0, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 0, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 1, - ["Staves"] = 0, - ["Fist Weapons"] = 1, - ["Daggers"] = 0, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, -} +--LOOT_READY MERCHANT_SHOW QUEST_POI_UPDATE QUEST_DETAIL QUEST_COMPLETE QUEST_GREETING QUEST_PROGRESS GOSSIP_SHOW SCRAPPING_MACHINE_SHOW MERCHANT_CLOSED EQUIP_BIND_CONFIRM +function(e) + local aura_env = aura_env + if e == "LOOT_READY" then --Auto Loot + local slot = 1 + local lootinfo = GetLootInfo() + for k, v in pairs(lootinfo) do + if v.locked == false then + local link = GetLootSlotLink(slot) + local looted = false + if not link then link = GetLootSlotLink(slot) end + if aura_env.filter[1] == true and (v.item:match("%d+ Gold") or v.item:match("%d+ Silver") or v.item:match("%d+ Copper")) then + LootSlot(slot) + if aura_env.debug == true then + print("loot 1 ", v.item, type, subtype) + end + if link then + WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) + end + elseif aura_env.filter[2] == true and link:match("Azerite") then + LootSlot(slot) + if aura_env.debug == true then + print("loot 2 ", v.item, type, subtype) + end + if link then + WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) + end + elseif aura_env.filter[3] == true and v.item:match("War Resources") then + LootSlot(slot) + if aura_env.debug == true then + print("loot 3 ", v.item, type, subtype) + end + if link then + WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) + end + elseif aura_env.filter[4] == true and v.item:match("Residuum") then + LootSlot(slot) + if aura_env.debug == true then + print("loot 4 ", v.item, type, subtype) + end + if link then + WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) + end + elseif aura_env.filter[5] == true and v.item:match("Manapearl") then + LootSlot(slot) + if aura_env.debug == true then + print("loot 5 ", v.item, type, subtype) + end + if link then + WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) + end + end + if link then + local icon = v.texture + local id = link:match("item:(%d+):") + if not WeakAurasSaved.CustomTrash.IconDatabase[v.item] and v.item and icon then + WeakAurasSaved.CustomTrash.IconDatabase[v.item] = icon + print("Adding ", v.item, " to the icon database") + end + if not WeakAurasSaved.CustomTrash.IDDatabase[v.item] and v.item and id then + WeakAurasSaved.CustomTrash.IDDatabase[v.item] = id + print("Adding ", v.item, " to the id database") + end + local type = select(6, GetItemInfo(link)) or "" + local subtype = select(7, GetItemInfo(link)) or "" + local ilvl = select(4, GetItemInfo(link)) or 0 + local equip = select(9, GetItemInfo(link)) + if aura_env.filter[6] == true and (select(7, GetItemInfo(link)) or 0) == "Mount" then + LootSlot(slot) + if aura_env.debug == true then + print("loot 6 ", v.item, type, subtype) + end + if link then + WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) + end + elseif aura_env.filter[7] == true and ilvl > aura_env.ilvlFilter then + LootSlot(slot) + if aura_env.debug == true then + print("loot 7 ", v.item, type, subtype) + end + if link then + WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) + end + elseif aura_env.filter[8] == true and (select(7, GetItemInfo(link)) or 0) == "Herb" then + LootSlot(slot) + if aura_env.debug == true then + print("loot 8 ", v.item, type, subtype) + end + if link then + WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) + end + elseif aura_env.filter[9] == true and (select(7, GetItemInfo(link)) or 0) == "Cooking" then + LootSlot(slot) + if aura_env.debug == true then + print("loot 9 ", v.item, type, subtype) + end + if link then + WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) + end + elseif aura_env.filter[10] == true and (select(7, GetItemInfo(link)) or 0) == "Cloth" and type == "Tradeskill" then + LootSlot(slot) + if aura_env.debug == true then + print("loot 10 ", v.item, type, subtype) + end + if link then + WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) + end + elseif aura_env.filter[11] == true and (select(7, GetItemInfo(link)) or 0) == "Metal & Stone" then + LootSlot(slot) + if aura_env.debug == true then + print("loot 11 ", v.item, type, subtype) + end + if link then + WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) + end + elseif aura_env.filter[12] == true and (select(11, GetItemInfo(link)) or 0) > aura_env.goldFilter and v.quality == 0 then + LootSlot(slot) + if aura_env.debug == true then + print("loot 12 ", v.item, type, subtype) + end + if link then + WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) + end + elseif aura_env.filter[13] == true and v.quality > 1 and v.quality < 4 and type ~= "Weapon" and type ~= "Armor" then + LootSlot(slot) + if aura_env.debug == true then + print("loot 13 ", v.item, type, subtype) + end + if link then + WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) + end + elseif aura_env.filter[14] == true and v.isQuestItem == true then + LootSlot(slot) + if aura_env.debug == true then + print("loot 14 ", v.item, type, subtype) + end + if link then + WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) + end + elseif aura_env.filter[15] == true and v.quality == 0 then + LootSlot(slot) + if aura_env.debug == true then + print("loot 15 ", v.item, type, subtype) + end + if link then + WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) + end + elseif aura_env.filter[16] == true and aura_env.whitelist[v.item] then + LootSlot(slot) + if aura_env.debug == true then + print("loot 16 ", v.item, type, subtype) + end + if link then + WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) + end + elseif aura_env.filter[17] == true and type == "Quest" and subtype == "Quest" then + LootSlot(slot) + if aura_env.debug == true then + print("loot 17 ", v.item, type, subtype) + end + if link then + WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) + end + elseif aura_env.filter[21] == true and type == "Consumable" and subtype == "Other" then + LootSlot(slot) + if aura_env.debug == true then + print("loot 21 ", v.item, type, subtype) + end + if link then + WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) + end + else + if type == "Weapon" or type == "Armor" then + if aura_env.filter[18] == true and aura_env.skills[select(3, UnitClass("player"))][subtype] == 1 and v.quality > 2 then + LootSlot(slot) + if aura_env.debug == true then + print("loot 18 ", v.item, type, subtype) + end + if link then + WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) + end + elseif aura_env.filter[19] == true and (equip == "INVTYPE_FINGER" or equip == "INVTYPE_TRINKET" or equip == "INVTYPE_CLOAK" or equip == "INVTYPE_NECK") and v.quality > 2 then + LootSlot(slot) + if aura_env.debug == true then + print("loot 19 ", v.item, type, subtype) + end + if link then + WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) + end + end + elseif aura_env.filter[20] == true and type == "Miscellaneous" then + if subtype == "Mount" then + LootSlot(slot) + if aura_env.debug == true then + print("loot 20 ", v.item, type, subtype) + end + if link then + WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity) + end + end + end + end + end + slot = slot + 1 + end + end + CloseLoot() + elseif e == "EQUIP_BIND_CONFIRM" then + StaticPopup1Button1:Click() + elseif e == "SCRAPPING_MACHINE_SHOW" then + for i = 0, 4 do + for j = 1, GetContainerNumSlots(i) do + local link = select(7, GetContainerItemInfo(i, j)) + if link then + local name = GetItemInfo(link) + local rarity = select(3, GetItemInfo(link)) + local ilvl = select(4, GetItemInfo(link)) or 0 + local type = select(6, GetItemInfo(link)) + local equip = select(9, GetItemInfo(link)) or "" + local price = select(11, GetItemInfo(link)) + if aura_env.sellWhitelist[name] ~= 1 then + if name and rarity and ilvl and type and equip and price then + if (type == "Armor" or type == "Weapon") and rarity <= 3 and aura_env.getequipID(equip) then + UseContainerItem(i, j) + elseif rarity > 3 and aura_env.getequipID(equip) then + if equip ~= "INVTYPE_FINGER" then + local eqID = aura_env.getequipID(equip) + local elink = GetInventoryItemLink("player", eqID) + local eilvl = select(4, GetItemInfo(elink)) or 0 + if eilvl > ilvl + 5 then + print("Scrapping " .. link .. "over " .. eilvl - ilvl .. " ilvl difference from " .. elink) + UseContainerItem(i, j) + end + elseif equip == "INVTYPE_FINGER" then + local eqID1, eqID2 = 11, 12 + local elink1, elink2 = GetInventoryItemLink("player", eqID1), GetInventoryItemLink("player", eqID2) + local eilvl1, eilvl2 = select(4, GetItemInfo(elink1)) or 0, select(4, GetItemInfo(elink2)) or 0 + if eilvl1 > ilvl + 5 then + print("Scrapping " .. link .. " over " .. eilvl1 - ilvl .. " ilvl difference from " .. elink1) + UseContainerItem(i, j) + elseif eilvl2 > ilvl + 5 then + print("Scrapping " .. link .. " over " .. eilvl2 - ilvl .. " ilvl difference from " .. elink2) + UseContainerItem(i, j) + end + end + end + end + end + end + end + end + elseif e == "MERCHANT_SHOW" then --Sell grey and white wepaon + if CanMerchantRepair() == true then RepairAllItems() end + local i, j = 0, 1 + for c = 0, 4 do + for s = 1, GetContainerNumSlots(c) do + local link = select(7, GetContainerItemInfo(c, s)) + if link then + local name = GetItemInfo(link) + local rarity = select(3, GetItemInfo(link)) + local ilvl = select(4, GetItemInfo(link)) or 0 + local type = select(6, GetItemInfo(link)) + local price = select(11, GetItemInfo(link)) + if price and price > 0 then + if aura_env.sellWhitelist[name] ~= 1 then + if rarity == 0 then + aura_env.toSell[#aura_env.toSell + 1] = {["c"] = c, ["s"] = s} + elseif (type == "Armor" or type == "Weapon") and ilvl < 350 then + aura_env.toSell[#aura_env.toSell + 1] = {["c"] = c, ["s"] = s} + end + end + end + end + end + end + aura_env.ticker = C_Timer.NewTicker(0.15, function() + if aura_env.toSell[1] then + UseContainerItem(aura_env.toSell[1].c, aura_env.toSell[1].s) + table.remove(aura_env.toSell, 1) + else + aura_env.ticker:Cancel() + end + if j >= GetContainerNumSlots(i) then i = i + 1 + j = 1 end + if i >= 4 then aura_env.ticker:Cancel() end + end) + elseif e == "MERCHANT_CLOSED" then + if aura_env.ticker then aura_env.ticker:Cancel() end + aura_env.toSell = {} + elseif e == "QUEST_POI_UPDATE" then + CloseGossip() + elseif e == "QUEST_DETAIL" then + AcceptQuest() + elseif e == "QUEST_COMPLETE" then + if GetNumQuestChoices() <= 1 then + GetQuestReward(1) + end + elseif e == "GOSSIP_SHOW" then + local quests = GetNumGossipAvailableQuests() + local complquests = GetNumGossipActiveQuests() + local opt = GetNumGossipOptions() + if complquests > 0 and opt == 0 then + for i = 1, complquests do + SelectGossipActiveQuest(i) + end + end + if quests > 0 and opt == 0 then + SelectGossipAvailableQuest(1) + end + if opt == 1 and quests + complquests == 0 then + SelectGossipOption(1) + end + elseif e == "QUEST_GREETING" then + local quests = GetNumGossipAvailableQuests() + local complquests = GetNumGossipActiveQuests() + if complquests > 0 then + for i = 1, complquests do + SelectActiveQuest(1) + end + end + if quests > 0 then + SelectAvailableQuest(1) + end + elseif e == "QUEST_PROGRESS" then + if IsQuestCompletable(i) then + CompleteQuest() + end + end +end + +--INIT +aura_env.debug = true +aura_env.filter = { + [1] = true, --Gold + [2] = true, --Azerite + [3] = true, --War resources + [4] = true, --Residuum + [5] = true, --Manapearls + [6] = true, --Mounts + [7] = true, --High ilvl + [8] = true, --Herbs + [9] = false, --Cooking + [10] = false, --Cloth + [11] = true, --Metal & Stone + [12] = true, --Gold filter greys + [13] = true, -- >1 && <4 quality items, no gear + [14] = true, --Quest items + [15] = false, --All greys + [16] = true, --Whitelist + [17] = true, --Quest items (different filter) + [18] = true, --Class aproperiate >2 items + [19] = true, --Jewelery >2 quality + [20] = true, --Additional mount filter + [21] = true, --Tradeskill // Elemental +} +aura_env.ilvlFilter = 940 +aura_env.goldFilter = 500000 + +aura_env.whitelist = { + ["Pygmy Suckerfish"] = 1, + ["Drakkari Offerings"] = 1, + ["Deepcoral Pod"] = 1, + ["Hardened Spring"] = 1, + ["Machined Gear Assembly"] = 1, + ["Tempered Plating"] = 1, + ["Hefty Glimmershell"] = 1, + ["Fresh Meat"] = 1, + ["Wood"] = 1, + + ["Blood of Sargeras"] = 1, + ["Primal Sargerite"] = 1, +} +aura_env.sellWhitelist = { + ["Blacksmith Hammer"] = 1, + ["Endless Tincture of Renewed Combat"] = 1, + ["Mr. Munchykins"] = 1, + ["Arclight Spanner"] = 1, + ["Runeblade of Baron Rivendare"] = 1, +} +aura_env.toSell = {} +aura_env.getequipID = function(equip) + if equip == "INVTYPE_HEAD" then return 1 + elseif equip == "INVTYPE_NECK" then return 2 + elseif equip == "INVTYPE_SHOULDER" then return 3 + elseif equip == "INVTYPE_BODY" then return 4 + elseif equip == "INVTYPE_CHEST" or equip == "INVTYPE_ROBE" then return 5 + elseif equip == "INVTYPE_WAIST" then return 6 + elseif equip == "INVTYPE_LEGS" then return 7 + elseif equip == "INVTYPE_FEET" then return 8 + elseif equip == "INVTYPE_WRIST" then return 9 + elseif equip == "INVTYPE_HAND" then return 10 + elseif equip == "INVTYPE_CLOAK" then return 15 + elseif equip == "INVTYPE_WEAPON" or equip == "INVTYPE_WEAPONMAINHAND" or equip == "INVTYPE_2HWEAPON" then return 16 + elseif equip == "INVTYPE_SHIELD" then return 17 + else return nil end +end +aura_env.skills = { + --Warrior + [1] = { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 0, + ["Mail"] = 0, + ["Plate"] = 1, + ["Shields"] = 1, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 1, + ["Bows"] = 1, + ["Guns"] = 1, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 1, + ["Polearms"] = 1, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 1, + ["Warglaives"] = 1, + ["Staves"] = 1, + ["Fist Weapons"] = 1, + ["Daggers"] = 1, + ["Crossbows"] = 1, + ["Wands"] = 0, + }, + --Paladin + [2] = { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 0, + ["Mail"] = 0, + ["Plate"] = 1, + ["Shields"] = 1, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 1, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 1, + ["Polearms"] = 1, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 1, + ["Warglaives"] = 0, + ["Staves"] = 0, + ["Fist Weapons"] = 0, + ["Daggers"] = 0, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, + --Hunter + [3] = { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 0, + ["Mail"] = 1, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 1, + ["Bows"] = 1, + ["Guns"] = 1, + ["One-Handed Maces"] = 0, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 1, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 1, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 1, + ["Daggers"] = 1, + ["Crossbows"] = 1, + ["Wands"] = 0, + }, + --Rogue + [4] = { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 1, + ["Mail"] = 0, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 0, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 0, + ["Fist Weapons"] = 1, + ["Daggers"] = 1, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, + --Priest + [5] = { + --Armor Skills + ["Cloth"] = 1, + ["Leather"] = 0, + ["Mail"] = 0, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 0, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 0, + ["One-Handed Swords"] = 0, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 0, + ["Daggers"] = 1, + ["Crossbows"] = 0, + ["Wands"] = 1, + }, + --Death Knight + [6] = { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 0, + ["Mail"] = 0, + ["Plate"] = 1, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 1, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 1, + ["Polearms"] = 1, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 1, + ["Warglaives"] = 0, + ["Staves"] = 0, + ["Fist Weapons"] = 0, + ["Daggers"] = 0, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, + --Shaman + [7] = { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 0, + ["Mail"] = 1, + ["Plate"] = 0, + ["Shields"] = 1, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 0, + ["One-Handed Swords"] = 0, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 1, + ["Daggers"] = 1, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, + --Mage + [8] = { + --Armor Skills + ["Cloth"] = 1, + ["Leather"] = 0, + ["Mail"] = 0, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 0, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 0, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 0, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 0, + ["Daggers"] = 1, + ["Crossbows"] = 0, + ["Wands"] = 1, + }, + --Warlock + [9] = { + --Armor Skills + ["Cloth"] = 1, + ["Leather"] = 0, + ["Mail"] = 0, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 0, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 0, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 0, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 0, + ["Daggers"] = 1, + ["Crossbows"] = 0, + ["Wands"] = 1, + }, + --Monk + [10] = { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 1, + ["Mail"] = 0, + ["Plate"] = 1, + ["Shields"] = 1, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 1, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 1, + ["Daggers"] = 0, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, + --Druid + [11] = { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 1, + ["Mail"] = 0, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 0, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 1, + ["One-Handed Swords"] = 0, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 1, + ["Daggers"] = 1, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, + --Demon Hunter + [12] = { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 1, + ["Mail"] = 0, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 0, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 0, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 1, + ["Staves"] = 0, + ["Fist Weapons"] = 1, + ["Daggers"] = 0, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, +} diff --git a/NewAge/Automation/Eventz.lua b/WeakAuras/Projects/Automation/Eventz.lua similarity index 98% rename from NewAge/Automation/Eventz.lua rename to WeakAuras/Projects/Automation/Eventz.lua index a9c580b..007e5a0 100644 --- a/NewAge/Automation/Eventz.lua +++ b/WeakAuras/Projects/Automation/Eventz.lua @@ -1,205 +1,205 @@ ---- LOOT_READY LOOT_OPENED MERCHANT_SHOW QUEST_POI_UPDATE QUEST_DETAIL QUEST_COMPLETE QUEST_GREETING QUEST_PROGRESS GOSSIP_SHOW SCRAPPING_MACHINE_SHOW MERCHANT_CLOSED EQUIP_BIND_CONFIRM -function(e) - local aura_env = aura_env - if e == "LOOT_READY" or e == "LOOT_OPENED" then --Auto Loot - local slot = 1 - local lootinfo = GetLootInfo() - for k, v in pairs(lootinfo) do - if v.locked == false then - local link = GetLootSlotLink(slot) - local looted = false - if not link then link = GetLootSlotLink(slot) end - if aura_env.filter[1] == true and (v.item:match("%d+ Gold") or v.item:match("%d+ Silver") or v.item:match("%d+ Copper")) then - LootSlot(slot) - elseif aura_env.filter[2] == true and link:match("Azerite") then - LootSlot(slot) - elseif aura_env.filter[3] == true and v.item:match("War Resources") then - LootSlot(slot) - elseif aura_env.filter[4] == true and v.item:match("Residuum") then - LootSlot(slot) - elseif aura_env.filter[5] == true and v.item:match("Manapearl") then - LootSlot(slot) - end - if link then - local icon = v.texture - local id = link:match("item:(%d+):") - local type = select(6, GetItemInfo(link)) or "" - local subtype = select(7, GetItemInfo(link)) or "" - local ilvl = select(4, GetItemInfo(link)) or 0 - local equip = select(9, GetItemInfo(link)) - if aura_env.filter[6] == true and (select(7, GetItemInfo(link)) or 0) == "Mount" then - LootSlot(slot) - elseif aura_env.filter[7] == true and ilvl > aura_env.ilvlFilter then - LootSlot(slot) - elseif aura_env.filter[8] == true and (select(7, GetItemInfo(link)) or 0) == "Herb" then - LootSlot(slot) - elseif aura_env.filter[9] == true and (select(7, GetItemInfo(link)) or 0) == "Cooking" then - LootSlot(slot) - elseif aura_env.filter[10] == true and (select(7, GetItemInfo(link)) or 0) == "Cloth" and type == "Tradeskill" then - LootSlot(slot) - elseif aura_env.filter[11] == true and (select(7, GetItemInfo(link)) or 0) == "Metal & Stone" then - LootSlot(slot) - elseif aura_env.filter[12] == true and (select(11, GetItemInfo(link)) or 0) > aura_env.goldFilter and v.quality == 0 then - LootSlot(slot) - elseif aura_env.filter[13] == true and v.quality > 1 and v.quality < 4 and type ~= "Weapon" and type ~= "Armor" then - LootSlot(slot) - elseif aura_env.filter[14] == true and v.isQuestItem == true then - LootSlot(slot) - elseif aura_env.filter[15] == true and v.quality == 0 then - LootSlot(slot) - elseif aura_env.filter[16] == true and aura_env.whitelist[v.item] then - LootSlot(slot) - elseif aura_env.filter[17] == true and type == "Quest" and subtype == "Quest" then - LootSlot(slot) - elseif aura_env.filter[21] == true and type == "Tradeskill" and subtype == "Elemental" then - LootSlot(slot) - else - if type == "Weapon" or type == "Armor" then - if aura_env.filter[18] == true and aura_env.skills[select(3, UnitClass("player"))][subtype] == 1 and v.quality > 2 then - LootSlot(slot) - elseif aura_env.filter[19] == true and (equip == "INVTYPE_FINGER" or equip == "INVTYPE_TRINKET" or equip == "INVTYPE_CLOAK" or equip == "INVTYPE_NECK") and v.quality > 2 then - LootSlot(slot) - end - elseif aura_env.filter[20] == true and type == "Miscellaneous" then - if subtype == "Mount" then - LootSlot(slot) - end - end - end - end - slot = slot + 1 - end - end - --CloseLoot() - elseif e == "EQUIP_BIND_CONFIRM" then - StaticPopup1Button1:Click() - elseif e == "SCRAPPING_MACHINE_SHOW" then - for i = 0, 4 do - for j = 1, GetContainerNumSlots(i) do - local link = select(7, GetContainerItemInfo(i, j)) - if link then - local name = GetItemInfo(link) - local rarity = select(3, GetItemInfo(link)) - local ilvl = select(4, GetItemInfo(link)) or 0 - local type = select(6, GetItemInfo(link)) - local equip = select(9, GetItemInfo(link)) or "" - local price = select(11, GetItemInfo(link)) - if aura_env.sellWhitelist[name] ~= 1 then - if name and rarity and ilvl and type and equip and price then - if (type == "Armor" or type == "Weapon") and rarity <= 3 and aura_env.getequipID(equip) then - UseContainerItem(i, j) - elseif rarity > 3 and aura_env.getequipID(equip) then - if equip ~= "INVTYPE_FINGER" then - local eqID = aura_env.getequipID(equip) - local elink = GetInventoryItemLink("player", eqID) - local eilvl = select(4, GetItemInfo(elink)) or 0 - if eilvl > ilvl + 5 then - print("Scrapping " .. link .. "over " .. eilvl - ilvl .. " ilvl difference from " .. elink) - UseContainerItem(i, j) - end - elseif equip == "INVTYPE_FINGER" then - local eqID1, eqID2 = 11, 12 - local elink1, elink2 = GetInventoryItemLink("player", eqID1), GetInventoryItemLink("player", eqID2) - local eilvl1, eilvl2 = select(4, GetItemInfo(elink1)) or 0, select(4, GetItemInfo(elink2)) or 0 - if eilvl1 > ilvl + 5 then - print("Scrapping " .. link .. " over " .. eilvl1 - ilvl .. " ilvl difference from " .. elink1) - UseContainerItem(i, j) - elseif eilvl2 > ilvl + 5 then - print("Scrapping " .. link .. " over " .. eilvl2 - ilvl .. " ilvl difference from " .. elink2) - UseContainerItem(i, j) - end - end - end - end - end - end - end - end - elseif e == "MERCHANT_SHOW" then --Sell grey and white wepaon - if CanMerchantRepair() == true then RepairAllItems() end - local i, j = 0, 1 - for c = 0, 4 do - for s = 1, GetContainerNumSlots(c) do - local link = select(7, GetContainerItemInfo(c, s)) - if link then - local name = GetItemInfo(link) - local rarity = select(3, GetItemInfo(link)) - local ilvl = select(4, GetItemInfo(link)) or 0 - local type = select(6, GetItemInfo(link)) - local price = select(11, GetItemInfo(link)) - if price and price > 0 then - if aura_env.sellWhitelist[name] ~= 1 then - if rarity == 0 then - if aura_env.throttleSell == true then - aura_env.toSell[#aura_env.toSell + 1] = {["c"] = c, ["s"] = s} - else - UseContainerItem(c, s) - end - elseif (type == "Armor" or type == "Weapon") and ilvl < 200 then - if aura_env.throttleSell == true then - aura_env.toSell[#aura_env.toSell + 1] = {["c"] = c, ["s"] = s} - else - UseContainerItem(c, s) - end - end - end - end - end - end - end - if aura_env.throttleSell == true then - aura_env.ticker = C_Timer.NewTicker(0.05, function() - if aura_env.toSell[1] then - UseContainerItem(aura_env.toSell[1].c, aura_env.toSell[1].s) - table.remove(aura_env.toSell, 1) - else - aura_env.ticker:Cancel() - end - if j >= GetContainerNumSlots(i) then i = i + 1 - j = 1 end - if i >= 4 then aura_env.ticker:Cancel() end - end) - end - elseif e == "MERCHANT_CLOSED" then - if aura_env.ticker then aura_env.ticker:Cancel() end - aura_env.toSell = {} - elseif e == "QUEST_POI_UPDATE" then - CloseGossip() - elseif e == "QUEST_DETAIL" then - AcceptQuest() - elseif e == "QUEST_COMPLETE" then - if GetNumQuestChoices() <= 1 then - GetQuestReward(1) - end - elseif e == "GOSSIP_SHOW" then - local quests = GetNumGossipAvailableQuests() - local complquests = GetNumGossipActiveQuests() - local opt = GetNumGossipOptions() - if complquests > 0 and opt == 0 then - for i = 1, complquests do - SelectGossipActiveQuest(i) - end - end - if quests > 0 and opt == 0 then - SelectGossipAvailableQuest(1) - end - if opt == 1 and quests + complquests == 0 then - SelectGossipOption(1) - end - elseif e == "QUEST_GREETING" then - local quests = GetNumGossipAvailableQuests() - local complquests = GetNumGossipActiveQuests() - if complquests > 0 then - for i = 1, complquests do - SelectActiveQuest(1) - end - end - if quests > 0 then - SelectAvailableQuest(1) - end - elseif e == "QUEST_PROGRESS" then - if IsQuestCompletable(i) then - CompleteQuest() - end - end +--- LOOT_READY LOOT_OPENED MERCHANT_SHOW QUEST_POI_UPDATE QUEST_DETAIL QUEST_COMPLETE QUEST_GREETING QUEST_PROGRESS GOSSIP_SHOW SCRAPPING_MACHINE_SHOW MERCHANT_CLOSED EQUIP_BIND_CONFIRM +function(e) + local aura_env = aura_env + if e == "LOOT_READY" or e == "LOOT_OPENED" then --Auto Loot + local slot = 1 + local lootinfo = GetLootInfo() + for k, v in pairs(lootinfo) do + if v.locked == false then + local link = GetLootSlotLink(slot) + local looted = false + if not link then link = GetLootSlotLink(slot) end + if aura_env.filter[1] == true and (v.item:match("%d+ Gold") or v.item:match("%d+ Silver") or v.item:match("%d+ Copper")) then + LootSlot(slot) + elseif aura_env.filter[2] == true and link:match("Azerite") then + LootSlot(slot) + elseif aura_env.filter[3] == true and v.item:match("War Resources") then + LootSlot(slot) + elseif aura_env.filter[4] == true and v.item:match("Residuum") then + LootSlot(slot) + elseif aura_env.filter[5] == true and v.item:match("Manapearl") then + LootSlot(slot) + end + if link then + local icon = v.texture + local id = link:match("item:(%d+):") + local type = select(6, GetItemInfo(link)) or "" + local subtype = select(7, GetItemInfo(link)) or "" + local ilvl = select(4, GetItemInfo(link)) or 0 + local equip = select(9, GetItemInfo(link)) + if aura_env.filter[6] == true and (select(7, GetItemInfo(link)) or 0) == "Mount" then + LootSlot(slot) + elseif aura_env.filter[7] == true and ilvl > aura_env.ilvlFilter then + LootSlot(slot) + elseif aura_env.filter[8] == true and (select(7, GetItemInfo(link)) or 0) == "Herb" then + LootSlot(slot) + elseif aura_env.filter[9] == true and (select(7, GetItemInfo(link)) or 0) == "Cooking" then + LootSlot(slot) + elseif aura_env.filter[10] == true and (select(7, GetItemInfo(link)) or 0) == "Cloth" and type == "Tradeskill" then + LootSlot(slot) + elseif aura_env.filter[11] == true and (select(7, GetItemInfo(link)) or 0) == "Metal & Stone" then + LootSlot(slot) + elseif aura_env.filter[12] == true and (select(11, GetItemInfo(link)) or 0) > aura_env.goldFilter and v.quality == 0 then + LootSlot(slot) + elseif aura_env.filter[13] == true and v.quality > 1 and v.quality < 4 and type ~= "Weapon" and type ~= "Armor" then + LootSlot(slot) + elseif aura_env.filter[14] == true and v.isQuestItem == true then + LootSlot(slot) + elseif aura_env.filter[15] == true and v.quality == 0 then + LootSlot(slot) + elseif aura_env.filter[16] == true and aura_env.whitelist[v.item] then + LootSlot(slot) + elseif aura_env.filter[17] == true and type == "Quest" and subtype == "Quest" then + LootSlot(slot) + elseif aura_env.filter[21] == true and type == "Tradeskill" and subtype == "Elemental" then + LootSlot(slot) + else + if type == "Weapon" or type == "Armor" then + if aura_env.filter[18] == true and aura_env.skills[select(3, UnitClass("player"))][subtype] == 1 and v.quality > 2 then + LootSlot(slot) + elseif aura_env.filter[19] == true and (equip == "INVTYPE_FINGER" or equip == "INVTYPE_TRINKET" or equip == "INVTYPE_CLOAK" or equip == "INVTYPE_NECK") and v.quality > 2 then + LootSlot(slot) + end + elseif aura_env.filter[20] == true and type == "Miscellaneous" then + if subtype == "Mount" then + LootSlot(slot) + end + end + end + end + slot = slot + 1 + end + end + --CloseLoot() + elseif e == "EQUIP_BIND_CONFIRM" then + StaticPopup1Button1:Click() + elseif e == "SCRAPPING_MACHINE_SHOW" then + for i = 0, 4 do + for j = 1, GetContainerNumSlots(i) do + local link = select(7, GetContainerItemInfo(i, j)) + if link then + local name = GetItemInfo(link) + local rarity = select(3, GetItemInfo(link)) + local ilvl = select(4, GetItemInfo(link)) or 0 + local type = select(6, GetItemInfo(link)) + local equip = select(9, GetItemInfo(link)) or "" + local price = select(11, GetItemInfo(link)) + if aura_env.sellWhitelist[name] ~= 1 then + if name and rarity and ilvl and type and equip and price then + if (type == "Armor" or type == "Weapon") and rarity <= 3 and aura_env.getequipID(equip) then + UseContainerItem(i, j) + elseif rarity > 3 and aura_env.getequipID(equip) then + if equip ~= "INVTYPE_FINGER" then + local eqID = aura_env.getequipID(equip) + local elink = GetInventoryItemLink("player", eqID) + local eilvl = select(4, GetItemInfo(elink)) or 0 + if eilvl > ilvl + 5 then + print("Scrapping " .. link .. "over " .. eilvl - ilvl .. " ilvl difference from " .. elink) + UseContainerItem(i, j) + end + elseif equip == "INVTYPE_FINGER" then + local eqID1, eqID2 = 11, 12 + local elink1, elink2 = GetInventoryItemLink("player", eqID1), GetInventoryItemLink("player", eqID2) + local eilvl1, eilvl2 = select(4, GetItemInfo(elink1)) or 0, select(4, GetItemInfo(elink2)) or 0 + if eilvl1 > ilvl + 5 then + print("Scrapping " .. link .. " over " .. eilvl1 - ilvl .. " ilvl difference from " .. elink1) + UseContainerItem(i, j) + elseif eilvl2 > ilvl + 5 then + print("Scrapping " .. link .. " over " .. eilvl2 - ilvl .. " ilvl difference from " .. elink2) + UseContainerItem(i, j) + end + end + end + end + end + end + end + end + elseif e == "MERCHANT_SHOW" then --Sell grey and white wepaon + if CanMerchantRepair() == true then RepairAllItems() end + local i, j = 0, 1 + for c = 0, 4 do + for s = 1, GetContainerNumSlots(c) do + local link = select(7, GetContainerItemInfo(c, s)) + if link then + local name = GetItemInfo(link) + local rarity = select(3, GetItemInfo(link)) + local ilvl = select(4, GetItemInfo(link)) or 0 + local type = select(6, GetItemInfo(link)) + local price = select(11, GetItemInfo(link)) + if price and price > 0 then + if aura_env.sellWhitelist[name] ~= 1 then + if rarity == 0 then + if aura_env.throttleSell == true then + aura_env.toSell[#aura_env.toSell + 1] = {["c"] = c, ["s"] = s} + else + UseContainerItem(c, s) + end + elseif (type == "Armor" or type == "Weapon") and ilvl < 200 then + if aura_env.throttleSell == true then + aura_env.toSell[#aura_env.toSell + 1] = {["c"] = c, ["s"] = s} + else + UseContainerItem(c, s) + end + end + end + end + end + end + end + if aura_env.throttleSell == true then + aura_env.ticker = C_Timer.NewTicker(0.05, function() + if aura_env.toSell[1] then + UseContainerItem(aura_env.toSell[1].c, aura_env.toSell[1].s) + table.remove(aura_env.toSell, 1) + else + aura_env.ticker:Cancel() + end + if j >= GetContainerNumSlots(i) then i = i + 1 + j = 1 end + if i >= 4 then aura_env.ticker:Cancel() end + end) + end + elseif e == "MERCHANT_CLOSED" then + if aura_env.ticker then aura_env.ticker:Cancel() end + aura_env.toSell = {} + elseif e == "QUEST_POI_UPDATE" then + CloseGossip() + elseif e == "QUEST_DETAIL" then + AcceptQuest() + elseif e == "QUEST_COMPLETE" then + if GetNumQuestChoices() <= 1 then + GetQuestReward(1) + end + elseif e == "GOSSIP_SHOW" then + local quests = GetNumGossipAvailableQuests() + local complquests = GetNumGossipActiveQuests() + local opt = GetNumGossipOptions() + if complquests > 0 and opt == 0 then + for i = 1, complquests do + SelectGossipActiveQuest(i) + end + end + if quests > 0 and opt == 0 then + SelectGossipAvailableQuest(1) + end + if opt == 1 and quests + complquests == 0 then + SelectGossipOption(1) + end + elseif e == "QUEST_GREETING" then + local quests = GetNumGossipAvailableQuests() + local complquests = GetNumGossipActiveQuests() + if complquests > 0 then + for i = 1, complquests do + SelectActiveQuest(1) + end + end + if quests > 0 then + SelectAvailableQuest(1) + end + elseif e == "QUEST_PROGRESS" then + if IsQuestCompletable(i) then + CompleteQuest() + end + end end \ No newline at end of file diff --git a/NewAge/Automation/INIT.lua b/WeakAuras/Projects/Automation/INIT.lua similarity index 95% rename from NewAge/Automation/INIT.lua rename to WeakAuras/Projects/Automation/INIT.lua index bdec97a..98484c1 100644 --- a/NewAge/Automation/INIT.lua +++ b/WeakAuras/Projects/Automation/INIT.lua @@ -1,394 +1,394 @@ -aura_env.debug = true -aura_env.filter = { - [1] = true, --Gold - [2] = true, --Azerite - [3] = true, --War resources - [4] = true, --Residuum - [5] = true, --Manapearls - [6] = true, --Mounts - [7] = true, --High ilvl - [8] = false, --Herbs - [9] = true, --Cooking - [10] = true, --Cloth - [11] = false, --Metal & Stone - [12] = true, --Gold filter greys - [13] = true, -- >1 && <4 quality items, no gear - [14] = true, --Quest items - [15] = true, --All greys - [16] = true, --Whitelist - [17] = true, --Quest items (different filter) - [18] = true, --Class aproperiate >2 items - [19] = true, --Jewelery >2 quality - [20] = true, --Additional mount filter - [21] = true, --Tradeskill // Elemental -} -aura_env.ilvlFilter = 200 -aura_env.goldFilter = 0.5 -aura_env.goldFilter = aura_env.goldFilter * 10000 -aura_env.throttleSell = false - -aura_env.whitelist = { - ["Pygmy Suckerfish"] = 1, - ["Drakkari Offerings"] = 1, - ["Deepcoral Pod"] = 1, - ["Hardened Spring"] = 1, - ["Machined Gear Assembly"] = 1, - ["Tempered Plating"] = 1, - ["Hefty Glimmershell"] = 1, - ["Fresh Meat"] = 1, - ["Wood"] = 1, - - ["Gloom Dust"] = 1, - ["Veiled Crytal"] = 1, - ["Coalescing Visions"] = 1, - ["Echoes of Ny'alotha"] = 1, - ["Corrupted Mementos"] = 1, - - ["Blood of Sargeras"] = 1, - ["Primal Sargerite"] = 1, - - ["Chain Ignitercoil"] = 1, - ["Galvanic Oscillator"] = 1, - ["Corrupted Memento"] = 1, -} -aura_env.sellWhitelist = { - ["Blacksmith Hammer"] = 1, - ["Endless Tincture of Renewed Combat"] = 1, - ["Mr. Munchykins"] = 1, - ["Arclight Spanner"] = 1, - ["Runeblade of Baron Rivendare"] = 1, -} -aura_env.toSell = {} -aura_env.getequipID = function(equip) - if equip == "INVTYPE_HEAD" then - return 1 - elseif equip == "INVTYPE_NECK" then - return 2 - elseif equip == "INVTYPE_SHOULDER" then - return 3 - elseif equip == "INVTYPE_BODY" then - return 4 - elseif equip == "INVTYPE_CHEST" or equip == "INVTYPE_ROBE" then - return 5 - elseif equip == "INVTYPE_WAIST" then - return 6 - elseif equip == "INVTYPE_LEGS" then - return 7 - elseif equip == "INVTYPE_FEET" then - return 8 - elseif equip == "INVTYPE_WRIST" then - return 9 - elseif equip == "INVTYPE_HAND" then - return 10 - elseif equip == "INVTYPE_CLOAK" then - return 15 - elseif equip == "INVTYPE_WEAPON" or equip == "INVTYPE_WEAPONMAINHAND" or equip == "INVTYPE_2HWEAPON" then - return 16 - elseif equip == "INVTYPE_SHIELD" then - return 17 - else - return nil - end -end -aura_env.skills = { - --Warrior - [1] = { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 0, - ["Mail"] = 0, - ["Plate"] = 1, - ["Shields"] = 1, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 1, - ["Bows"] = 1, - ["Guns"] = 1, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 1, - ["Polearms"] = 1, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 1, - ["Warglaives"] = 1, - ["Staves"] = 1, - ["Fist Weapons"] = 1, - ["Daggers"] = 1, - ["Crossbows"] = 1, - ["Wands"] = 0, - }, - --Paladin - [2] = { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 0, - ["Mail"] = 0, - ["Plate"] = 1, - ["Shields"] = 1, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 1, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 1, - ["Polearms"] = 1, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 1, - ["Warglaives"] = 0, - ["Staves"] = 0, - ["Fist Weapons"] = 0, - ["Daggers"] = 0, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, - --Hunter - [3] = { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 0, - ["Mail"] = 1, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 1, - ["Bows"] = 1, - ["Guns"] = 1, - ["One-Handed Maces"] = 0, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 1, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 1, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 1, - ["Daggers"] = 1, - ["Crossbows"] = 1, - ["Wands"] = 0, - }, - --Rogue - [4] = { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 1, - ["Mail"] = 0, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 0, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 0, - ["Fist Weapons"] = 1, - ["Daggers"] = 1, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, - --Priest - [5] = { - --Armor Skills - ["Cloth"] = 1, - ["Leather"] = 0, - ["Mail"] = 0, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 0, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 0, - ["One-Handed Swords"] = 0, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 0, - ["Daggers"] = 1, - ["Crossbows"] = 0, - ["Wands"] = 1, - }, - --Death Knight - [6] = { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 0, - ["Mail"] = 0, - ["Plate"] = 1, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 1, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 1, - ["Polearms"] = 1, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 1, - ["Warglaives"] = 0, - ["Staves"] = 0, - ["Fist Weapons"] = 0, - ["Daggers"] = 0, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, - --Shaman - [7] = { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 0, - ["Mail"] = 1, - ["Plate"] = 0, - ["Shields"] = 1, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 0, - ["One-Handed Swords"] = 0, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 1, - ["Daggers"] = 1, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, - --Mage - [8] = { - --Armor Skills - ["Cloth"] = 1, - ["Leather"] = 0, - ["Mail"] = 0, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 0, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 0, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 0, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 0, - ["Daggers"] = 1, - ["Crossbows"] = 0, - ["Wands"] = 1, - }, - --Warlock - [9] = { - --Armor Skills - ["Cloth"] = 1, - ["Leather"] = 0, - ["Mail"] = 0, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 0, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 0, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 0, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 0, - ["Daggers"] = 1, - ["Crossbows"] = 0, - ["Wands"] = 1, - }, - --Monk - [10] = { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 1, - ["Mail"] = 0, - ["Plate"] = 1, - ["Shields"] = 1, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 1, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 1, - ["Daggers"] = 0, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, - --Druid - [11] = { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 1, - ["Mail"] = 0, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 0, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 1, - ["One-Handed Swords"] = 0, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 1, - ["Daggers"] = 1, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, - --Demon Hunter - [12] = { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 1, - ["Mail"] = 0, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 0, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 0, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 1, - ["Staves"] = 0, - ["Fist Weapons"] = 1, - ["Daggers"] = 0, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, -} +aura_env.debug = true +aura_env.filter = { + [1] = true, --Gold + [2] = true, --Azerite + [3] = true, --War resources + [4] = true, --Residuum + [5] = true, --Manapearls + [6] = true, --Mounts + [7] = true, --High ilvl + [8] = false, --Herbs + [9] = true, --Cooking + [10] = true, --Cloth + [11] = false, --Metal & Stone + [12] = true, --Gold filter greys + [13] = true, -- >1 && <4 quality items, no gear + [14] = true, --Quest items + [15] = true, --All greys + [16] = true, --Whitelist + [17] = true, --Quest items (different filter) + [18] = true, --Class aproperiate >2 items + [19] = true, --Jewelery >2 quality + [20] = true, --Additional mount filter + [21] = true, --Tradeskill // Elemental +} +aura_env.ilvlFilter = 200 +aura_env.goldFilter = 0.5 +aura_env.goldFilter = aura_env.goldFilter * 10000 +aura_env.throttleSell = false + +aura_env.whitelist = { + ["Pygmy Suckerfish"] = 1, + ["Drakkari Offerings"] = 1, + ["Deepcoral Pod"] = 1, + ["Hardened Spring"] = 1, + ["Machined Gear Assembly"] = 1, + ["Tempered Plating"] = 1, + ["Hefty Glimmershell"] = 1, + ["Fresh Meat"] = 1, + ["Wood"] = 1, + + ["Gloom Dust"] = 1, + ["Veiled Crytal"] = 1, + ["Coalescing Visions"] = 1, + ["Echoes of Ny'alotha"] = 1, + ["Corrupted Mementos"] = 1, + + ["Blood of Sargeras"] = 1, + ["Primal Sargerite"] = 1, + + ["Chain Ignitercoil"] = 1, + ["Galvanic Oscillator"] = 1, + ["Corrupted Memento"] = 1, +} +aura_env.sellWhitelist = { + ["Blacksmith Hammer"] = 1, + ["Endless Tincture of Renewed Combat"] = 1, + ["Mr. Munchykins"] = 1, + ["Arclight Spanner"] = 1, + ["Runeblade of Baron Rivendare"] = 1, +} +aura_env.toSell = {} +aura_env.getequipID = function(equip) + if equip == "INVTYPE_HEAD" then + return 1 + elseif equip == "INVTYPE_NECK" then + return 2 + elseif equip == "INVTYPE_SHOULDER" then + return 3 + elseif equip == "INVTYPE_BODY" then + return 4 + elseif equip == "INVTYPE_CHEST" or equip == "INVTYPE_ROBE" then + return 5 + elseif equip == "INVTYPE_WAIST" then + return 6 + elseif equip == "INVTYPE_LEGS" then + return 7 + elseif equip == "INVTYPE_FEET" then + return 8 + elseif equip == "INVTYPE_WRIST" then + return 9 + elseif equip == "INVTYPE_HAND" then + return 10 + elseif equip == "INVTYPE_CLOAK" then + return 15 + elseif equip == "INVTYPE_WEAPON" or equip == "INVTYPE_WEAPONMAINHAND" or equip == "INVTYPE_2HWEAPON" then + return 16 + elseif equip == "INVTYPE_SHIELD" then + return 17 + else + return nil + end +end +aura_env.skills = { + --Warrior + [1] = { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 0, + ["Mail"] = 0, + ["Plate"] = 1, + ["Shields"] = 1, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 1, + ["Bows"] = 1, + ["Guns"] = 1, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 1, + ["Polearms"] = 1, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 1, + ["Warglaives"] = 1, + ["Staves"] = 1, + ["Fist Weapons"] = 1, + ["Daggers"] = 1, + ["Crossbows"] = 1, + ["Wands"] = 0, + }, + --Paladin + [2] = { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 0, + ["Mail"] = 0, + ["Plate"] = 1, + ["Shields"] = 1, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 1, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 1, + ["Polearms"] = 1, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 1, + ["Warglaives"] = 0, + ["Staves"] = 0, + ["Fist Weapons"] = 0, + ["Daggers"] = 0, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, + --Hunter + [3] = { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 0, + ["Mail"] = 1, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 1, + ["Bows"] = 1, + ["Guns"] = 1, + ["One-Handed Maces"] = 0, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 1, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 1, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 1, + ["Daggers"] = 1, + ["Crossbows"] = 1, + ["Wands"] = 0, + }, + --Rogue + [4] = { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 1, + ["Mail"] = 0, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 0, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 0, + ["Fist Weapons"] = 1, + ["Daggers"] = 1, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, + --Priest + [5] = { + --Armor Skills + ["Cloth"] = 1, + ["Leather"] = 0, + ["Mail"] = 0, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 0, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 0, + ["One-Handed Swords"] = 0, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 0, + ["Daggers"] = 1, + ["Crossbows"] = 0, + ["Wands"] = 1, + }, + --Death Knight + [6] = { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 0, + ["Mail"] = 0, + ["Plate"] = 1, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 1, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 1, + ["Polearms"] = 1, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 1, + ["Warglaives"] = 0, + ["Staves"] = 0, + ["Fist Weapons"] = 0, + ["Daggers"] = 0, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, + --Shaman + [7] = { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 0, + ["Mail"] = 1, + ["Plate"] = 0, + ["Shields"] = 1, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 0, + ["One-Handed Swords"] = 0, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 1, + ["Daggers"] = 1, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, + --Mage + [8] = { + --Armor Skills + ["Cloth"] = 1, + ["Leather"] = 0, + ["Mail"] = 0, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 0, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 0, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 0, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 0, + ["Daggers"] = 1, + ["Crossbows"] = 0, + ["Wands"] = 1, + }, + --Warlock + [9] = { + --Armor Skills + ["Cloth"] = 1, + ["Leather"] = 0, + ["Mail"] = 0, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 0, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 0, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 0, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 0, + ["Daggers"] = 1, + ["Crossbows"] = 0, + ["Wands"] = 1, + }, + --Monk + [10] = { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 1, + ["Mail"] = 0, + ["Plate"] = 1, + ["Shields"] = 1, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 1, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 1, + ["Daggers"] = 0, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, + --Druid + [11] = { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 1, + ["Mail"] = 0, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 0, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 1, + ["One-Handed Swords"] = 0, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 1, + ["Daggers"] = 1, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, + --Demon Hunter + [12] = { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 1, + ["Mail"] = 0, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 0, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 0, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 1, + ["Staves"] = 0, + ["Fist Weapons"] = 1, + ["Daggers"] = 0, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, +} diff --git a/NewAge/Automation/LOOT_READY.lua b/WeakAuras/Projects/Automation/LOOT_READY.lua similarity index 98% rename from NewAge/Automation/LOOT_READY.lua rename to WeakAuras/Projects/Automation/LOOT_READY.lua index d4bb2e2..dc26120 100644 --- a/NewAge/Automation/LOOT_READY.lua +++ b/WeakAuras/Projects/Automation/LOOT_READY.lua @@ -1,69 +1,69 @@ --- LOOT_READY LOOT_OPENED - -function(e, ...) - local slot = 1 - local lootinfo = GetLootInfo() - for k, v in pairs(lootinfo) do - if v.locked == false then - local link = GetLootSlotLink(slot) - if not link then link = GetLootSlotLink(slot) end - if aura_env.filter[1] == true and (v.item:match("%d+ Gold") or v.item:match("%d+ Silver") or v.item:match("%d+ Copper")) then - LootSlot(slot) - elseif aura_env.filter[2] == true and link:match("Azerite") then - LootSlot(slot) - elseif aura_env.filter[3] == true and v.item:match("War Resources") then - LootSlot(slot) - elseif aura_env.filter[4] == true and v.item:match("Residuum") then - LootSlot(slot) - elseif aura_env.filter[5] == true and v.item:match("Manapearl") then - LootSlot(slot) - end - if link then - local type = select(6, GetItemInfo(link)) or "" - local subtype = select(7, GetItemInfo(link)) or "" - local ilvl = select(4, GetItemInfo(link)) or 0 - local equip = select(9, GetItemInfo(link)) - if aura_env.filter[6] == true and (select(7, GetItemInfo(link)) or 0) == "Mount" then - LootSlot(slot) - elseif aura_env.filter[7] == true and ilvl > aura_env.ilvlFilter then - LootSlot(slot) - elseif aura_env.filter[8] == true and (select(7, GetItemInfo(link)) or 0) == "Herb" then - LootSlot(slot) - elseif aura_env.filter[9] == true and (select(7, GetItemInfo(link)) or 0) == "Cooking" then - LootSlot(slot) - elseif aura_env.filter[10] == true and (select(7, GetItemInfo(link)) or 0) == "Cloth" and type == "Tradeskill" then - LootSlot(slot) - elseif aura_env.filter[11] == true and (select(7, GetItemInfo(link)) or 0) == "Metal & Stone" then - LootSlot(slot) - elseif aura_env.filter[12] == true and (select(11, GetItemInfo(link)) or 0) > aura_env.goldFilter and v.quality == 0 then - LootSlot(slot) - elseif aura_env.filter[13] == true and v.quality > 1 and v.quality < 4 and type ~= "Weapon" and type ~= "Armor" then - LootSlot(slot) - elseif aura_env.filter[14] == true and v.isQuestItem == true then - LootSlot(slot) - elseif aura_env.filter[15] == true and v.quality == 0 then - LootSlot(slot) - elseif aura_env.filter[16] == true and aura_env.whitelist[v.item] then - LootSlot(slot) - elseif aura_env.filter[17] == true and type == "Quest" and subtype == "Quest" then - LootSlot(slot) - elseif aura_env.filter[21] == true and type == "Tradeskill" and subtype == "Elemental" then - LootSlot(slot) - else - if type == "Weapon" or type == "Armor" then - if aura_env.filter[18] == true and aura_env.skills[select(3, UnitClass("player"))][subtype] == 1 and v.quality > 2 then - LootSlot(slot) - elseif aura_env.filter[19] == true and (equip == "INVTYPE_FINGER" or equip == "INVTYPE_TRINKET" or equip == "INVTYPE_CLOAK" or equip == "INVTYPE_NECK") and v.quality > 2 then - LootSlot(slot) - end - elseif aura_env.filter[20] == true and type == "Miscellaneous" then - if subtype == "Mount" then - LootSlot(slot) - end - end - end - end - slot = slot + 1 - end - end +-- LOOT_READY LOOT_OPENED + +function(e, ...) + local slot = 1 + local lootinfo = GetLootInfo() + for k, v in pairs(lootinfo) do + if v.locked == false then + local link = GetLootSlotLink(slot) + if not link then link = GetLootSlotLink(slot) end + if aura_env.filter[1] == true and (v.item:match("%d+ Gold") or v.item:match("%d+ Silver") or v.item:match("%d+ Copper")) then + LootSlot(slot) + elseif aura_env.filter[2] == true and link:match("Azerite") then + LootSlot(slot) + elseif aura_env.filter[3] == true and v.item:match("War Resources") then + LootSlot(slot) + elseif aura_env.filter[4] == true and v.item:match("Residuum") then + LootSlot(slot) + elseif aura_env.filter[5] == true and v.item:match("Manapearl") then + LootSlot(slot) + end + if link then + local type = select(6, GetItemInfo(link)) or "" + local subtype = select(7, GetItemInfo(link)) or "" + local ilvl = select(4, GetItemInfo(link)) or 0 + local equip = select(9, GetItemInfo(link)) + if aura_env.filter[6] == true and (select(7, GetItemInfo(link)) or 0) == "Mount" then + LootSlot(slot) + elseif aura_env.filter[7] == true and ilvl > aura_env.ilvlFilter then + LootSlot(slot) + elseif aura_env.filter[8] == true and (select(7, GetItemInfo(link)) or 0) == "Herb" then + LootSlot(slot) + elseif aura_env.filter[9] == true and (select(7, GetItemInfo(link)) or 0) == "Cooking" then + LootSlot(slot) + elseif aura_env.filter[10] == true and (select(7, GetItemInfo(link)) or 0) == "Cloth" and type == "Tradeskill" then + LootSlot(slot) + elseif aura_env.filter[11] == true and (select(7, GetItemInfo(link)) or 0) == "Metal & Stone" then + LootSlot(slot) + elseif aura_env.filter[12] == true and (select(11, GetItemInfo(link)) or 0) > aura_env.goldFilter and v.quality == 0 then + LootSlot(slot) + elseif aura_env.filter[13] == true and v.quality > 1 and v.quality < 4 and type ~= "Weapon" and type ~= "Armor" then + LootSlot(slot) + elseif aura_env.filter[14] == true and v.isQuestItem == true then + LootSlot(slot) + elseif aura_env.filter[15] == true and v.quality == 0 then + LootSlot(slot) + elseif aura_env.filter[16] == true and aura_env.whitelist[v.item] then + LootSlot(slot) + elseif aura_env.filter[17] == true and type == "Quest" and subtype == "Quest" then + LootSlot(slot) + elseif aura_env.filter[21] == true and type == "Tradeskill" and subtype == "Elemental" then + LootSlot(slot) + else + if type == "Weapon" or type == "Armor" then + if aura_env.filter[18] == true and aura_env.skills[select(3, UnitClass("player"))][subtype] == 1 and v.quality > 2 then + LootSlot(slot) + elseif aura_env.filter[19] == true and (equip == "INVTYPE_FINGER" or equip == "INVTYPE_TRINKET" or equip == "INVTYPE_CLOAK" or equip == "INVTYPE_NECK") and v.quality > 2 then + LootSlot(slot) + end + elseif aura_env.filter[20] == true and type == "Miscellaneous" then + if subtype == "Mount" then + LootSlot(slot) + end + end + end + end + slot = slot + 1 + end + end end \ No newline at end of file diff --git a/Complete Projects/Legion/Average Raid Health.lua b/WeakAuras/Projects/Average Raid Health.lua similarity index 97% rename from Complete Projects/Legion/Average Raid Health.lua rename to WeakAuras/Projects/Average Raid Health.lua index 5e1676d..4bf3be0 100644 --- a/Complete Projects/Legion/Average Raid Health.lua +++ b/WeakAuras/Projects/Average Raid Health.lua @@ -1,40 +1,40 @@ ---DISPLAY -function() - return aura_env.output -end - ---Try SPELL_RESSURECT -- RESSURECT event?? ---UNIT_HEALTH -function() - local healthP = 0 - local aliveMembers = GetNumGroupMembers() - if IsInRaid("player") == true then - for i = 1, GetNumGroupMembers() do - if UnitIsDeadOrGhost("raid" .. i) == false and UnitIsConnected("raid" .. i) == true then - healthP = healthP + math.floor(UnitHealth("raid" .. i) / UnitHealthMax("raid" .. i) * 10000) / 100 - end - if UnitIsDeadOrGhost("raid" .. i) == true or UnitIsConnected("raid" .. i) == false then - aliveMembers = aliveMembers - 1 - end - end - else - for i = 1, GetNumGroupMembers() - 1 do - if UnitIsDeadOrGhost("party" .. i) == false and UnitIsConnected("party" .. i) == true then - healthP = healthP + math.floor(UnitHealth("party" .. i) / UnitHealthMax("party" .. i) * 10000) / 100 - end - if UnitIsDeadOrGhost("party" .. i) == true or UnitIsConnected("party" .. i) == false then - aliveMembers = aliveMembers - 1 - end - end - if UnitIsDeadOrGhost("player") == false and UnitIsConnected("player") == true then - healthP = healthP + math.floor(UnitHealth("player") / UnitHealthMax("player") * 10000) / 100 - end - if UnitIsDeadOrGhost("player") == true or UnitIsConnected("player") == false then - aliveMembers = aliveMembers - 1 - end - end - aura_env.output = math.floor(healthP / aliveMembers * 100) / 100 .. "%%" -end - ---INIT -aura_env.output = 0 +--DISPLAY +function() + return aura_env.output +end + +--Try SPELL_RESSURECT -- RESSURECT event?? +--UNIT_HEALTH +function() + local healthP = 0 + local aliveMembers = GetNumGroupMembers() + if IsInRaid("player") == true then + for i = 1, GetNumGroupMembers() do + if UnitIsDeadOrGhost("raid" .. i) == false and UnitIsConnected("raid" .. i) == true then + healthP = healthP + math.floor(UnitHealth("raid" .. i) / UnitHealthMax("raid" .. i) * 10000) / 100 + end + if UnitIsDeadOrGhost("raid" .. i) == true or UnitIsConnected("raid" .. i) == false then + aliveMembers = aliveMembers - 1 + end + end + else + for i = 1, GetNumGroupMembers() - 1 do + if UnitIsDeadOrGhost("party" .. i) == false and UnitIsConnected("party" .. i) == true then + healthP = healthP + math.floor(UnitHealth("party" .. i) / UnitHealthMax("party" .. i) * 10000) / 100 + end + if UnitIsDeadOrGhost("party" .. i) == true or UnitIsConnected("party" .. i) == false then + aliveMembers = aliveMembers - 1 + end + end + if UnitIsDeadOrGhost("player") == false and UnitIsConnected("player") == true then + healthP = healthP + math.floor(UnitHealth("player") / UnitHealthMax("player") * 10000) / 100 + end + if UnitIsDeadOrGhost("player") == true or UnitIsConnected("player") == false then + aliveMembers = aliveMembers - 1 + end + end + aura_env.output = math.floor(healthP / aliveMembers * 100) / 100 .. "%%" +end + +--INIT +aura_env.output = 0 diff --git a/LegionWA/BagBoEGlow/Event.lua b/WeakAuras/Projects/BagBoEGlow/Event.lua similarity index 94% rename from LegionWA/BagBoEGlow/Event.lua rename to WeakAuras/Projects/BagBoEGlow/Event.lua index 365f687..2cbf14c 100644 --- a/LegionWA/BagBoEGlow/Event.lua +++ b/WeakAuras/Projects/BagBoEGlow/Event.lua @@ -1,4 +1,4 @@ --- BAG_UPDATE -function(e) - aura_env.update() +-- BAG_UPDATE +function(e) + aura_env.update() end \ No newline at end of file diff --git a/LegionWA/BagBoEGlow/Init.lua b/WeakAuras/Projects/BagBoEGlow/Init.lua similarity index 97% rename from LegionWA/BagBoEGlow/Init.lua rename to WeakAuras/Projects/BagBoEGlow/Init.lua index 15fa855..aeef3ab 100644 --- a/LegionWA/BagBoEGlow/Init.lua +++ b/WeakAuras/Projects/BagBoEGlow/Init.lua @@ -1,23 +1,23 @@ -local function getItemLink(container, slot) return select(7, GetContainerItemInfo(container, slot)) or "" end -local function getBindType(container, slot) return select(14, GetItemInfo(getItemLink(container, slot))) or 0 end -local function isBoe(container, slot) return getBindType(container, slot) == 1 end - -local showGlow = function(container, slot) - ActionButton_ShowOverlayGlow(_G["ElvUI_ContainerFrameBag" .. container .. "Slot" .. slot]) -end -local hideGlow = function(container, slot) - ActionButton_HideOverlayGlow(_G["ElvUI_ContainerFrameBag" .. container .. "Slot" .. slot]) -end - -aura_env.update = function() - for container = 0, 4 do - for slot = 1, GetContainerNumSlots(container) do - print(C_Item.IsBound(ItemLocation:CreateFromBagAndSlot(container, slot))) - if isBoe(container, slot) then - showGlow(container, slot) - else - hideGlow(container, slot) - end - end - end -end +local function getItemLink(container, slot) return select(7, GetContainerItemInfo(container, slot)) or "" end +local function getBindType(container, slot) return select(14, GetItemInfo(getItemLink(container, slot))) or 0 end +local function isBoe(container, slot) return getBindType(container, slot) == 1 end + +local showGlow = function(container, slot) + ActionButton_ShowOverlayGlow(_G["ElvUI_ContainerFrameBag" .. container .. "Slot" .. slot]) +end +local hideGlow = function(container, slot) + ActionButton_HideOverlayGlow(_G["ElvUI_ContainerFrameBag" .. container .. "Slot" .. slot]) +end + +aura_env.update = function() + for container = 0, 4 do + for slot = 1, GetContainerNumSlots(container) do + print(C_Item.IsBound(ItemLocation:CreateFromBagAndSlot(container, slot))) + if isBoe(container, slot) then + showGlow(container, slot) + else + hideGlow(container, slot) + end + end + end +end diff --git a/LegionWA/BagBoEGlow/README b/WeakAuras/Projects/BagBoEGlow/README similarity index 97% rename from LegionWA/BagBoEGlow/README rename to WeakAuras/Projects/BagBoEGlow/README index 2bf5842..434ab32 100644 --- a/LegionWA/BagBoEGlow/README +++ b/WeakAuras/Projects/BagBoEGlow/README @@ -1,18 +1,18 @@ -Haven't found a way of determining whether an item is soulbound or not without tooltip scanning which I don't want to do - -local cTip = CreateFrame("GameTooltip","PrivTooltip",nil,"GameTooltipTemplate") -local function IsSoulbound(bag, slot) - cTip:SetOwner(UIParent, "ANCHOR_NONE") - cTip:SetBagItem(bag, slot) - cTip:Show() - for i = 1,cTip:NumLines() do - if(_G[name.."TooltipTextLeft"..i]:GetText()==ITEM_SOULBOUND) then - cTip:Hide() - return true - end - end - cTip:Hide() - return false -end - +Haven't found a way of determining whether an item is soulbound or not without tooltip scanning which I don't want to do + +local cTip = CreateFrame("GameTooltip","PrivTooltip",nil,"GameTooltipTemplate") +local function IsSoulbound(bag, slot) + cTip:SetOwner(UIParent, "ANCHOR_NONE") + cTip:SetBagItem(bag, slot) + cTip:Show() + for i = 1,cTip:NumLines() do + if(_G[name.."TooltipTextLeft"..i]:GetText()==ITEM_SOULBOUND) then + cTip:Hide() + return true + end + end + cTip:Hide() + return false +end + Some guy says this is good \ No newline at end of file diff --git a/FreshShit/BattlePassTimer/duration.lua b/WeakAuras/Projects/BattlePassTimer/duration.lua similarity index 97% rename from FreshShit/BattlePassTimer/duration.lua rename to WeakAuras/Projects/BattlePassTimer/duration.lua index b760250..2676ae3 100644 --- a/FreshShit/BattlePassTimer/duration.lua +++ b/WeakAuras/Projects/BattlePassTimer/duration.lua @@ -1,3 +1,3 @@ -function() - return BattlepassInfo.currentDayOnlineTimeMinutes, 120, 1 +function() + return BattlepassInfo.currentDayOnlineTimeMinutes, 120, 1 end \ No newline at end of file diff --git a/FreshShit/BattlePassTimer/event.lua b/WeakAuras/Projects/BattlePassTimer/event.lua similarity index 100% rename from FreshShit/BattlePassTimer/event.lua rename to WeakAuras/Projects/BattlePassTimer/event.lua diff --git a/FreshShit/BattlePassTimer/event2.lua b/WeakAuras/Projects/BattlePassTimer/event2.lua similarity index 94% rename from FreshShit/BattlePassTimer/event2.lua rename to WeakAuras/Projects/BattlePassTimer/event2.lua index f0f76d8..574f81a 100644 --- a/FreshShit/BattlePassTimer/event2.lua +++ b/WeakAuras/Projects/BattlePassTimer/event2.lua @@ -1,4 +1,4 @@ ---- TICKER_10000 -function() - BattlepassInfo() +--- TICKER_10000 +function() + BattlepassInfo() end \ No newline at end of file diff --git a/FreshShit/BattlePassTimer/export b/WeakAuras/Projects/BattlePassTimer/export similarity index 100% rename from FreshShit/BattlePassTimer/export rename to WeakAuras/Projects/BattlePassTimer/export diff --git a/FreshShit/BattlePassTimer/init.lua b/WeakAuras/Projects/BattlePassTimer/init.lua similarity index 97% rename from FreshShit/BattlePassTimer/init.lua rename to WeakAuras/Projects/BattlePassTimer/init.lua index ed429de..7b30c82 100644 --- a/FreshShit/BattlePassTimer/init.lua +++ b/WeakAuras/Projects/BattlePassTimer/init.lua @@ -1,109 +1,109 @@ -if not WeakAurasSaved.Cyka then WeakAurasSaved.Cyka = {} end -if not WeakAurasSaved.Cyka.LoginInfo then WeakAurasSaved.Cyka.LoginInfo = {} end - -Today = date("%Y-%m-%d") -if not WeakAurasSaved.Cyka.LoginInfo[Today] then WeakAurasSaved.Cyka.LoginInfo[Today] = {} end -if not WeakAurasSaved.Cyka.LoginInfo[Today][UnitName("player")] then - WeakAurasSaved.Cyka.LoginInfo[Today][UnitName("player")] = { - onlineTimeInMinutes = 0, - claimed = 0, - } -end - -local greenColor = "|cff00ff00" -local noColor = "|r" -BattlepassAccountInfo = "" -local function UpdateAccountInfo() - local ret = {} - for char, info in pairs(WeakAurasSaved.Cyka.LoginInfo[Today]) do - if info.claimed == 1 then - char = string.format("%s%s %d%s", greenColor, char, info.onlineTimeInMinutes, noColor) - else - char = string.format("%s %d", char, info.onlineTimeInMinutes) - end - ret[#ret + 1] = char - end - BattlepassAccountInfo = table.concat(ret, "\n") -end - --- [02:37 PM] Bluepotato --- [02:37 PM] onlineTimeInMinutes=120, --- [02:37 PM] claimed=1 --- [02:37 PM] Smolpotato --- [02:37 PM] onlineTimeInMinutes=120, --- [02:37 PM] claimed=1 --- [02:37 PM] Thiccpotato --- [02:37 PM] onlineTimeInMinutes=57, --- [02:37 PM] claimed=0 - ----@param input string ----@param deliminer string ----@return table -aura_env.Split = function(input, deliminer) - local ret = {} - for str in string.gmatch(input, "([^" .. deliminer .. "]+)") do - table.insert(ret, str) - end - return ret -end - ----@class BattlepassInfo ----@field week number ----@field getRew number ----@field dayRewardComplete number ----@field lostDay number ----@field cost number ----@field currentDayOnlineTimeMinutes number ----@field currentDayOnlineTimeMilliseconds number -BattlepassInfo = { - PingApi = function() - SendAddonMessage("UIMSG_TO_SERVER", "UIMSG_GET_ONLINETIME_DAY" .. "\t", "WHISPER", UnitName("player")) - end, - ParseApi = function(msg) - local packets = aura_env.Split(msg, ":") - if packets[1] ~= "UISMSG_EVT_WEEK_TIME" then return end - - BattlepassInfo.currentDayOnlineTimeMilliseconds = tonumber(packets[2]) - BattlepassInfo.week = tonumber(packets[3]) + 1 - BattlepassInfo.getRew = tonumber(packets[4]) - BattlepassInfo.dayRewardComplete = tonumber(packets[5]) - BattlepassInfo.lostDay = tonumber(packets[6]) - BattlepassInfo.cost = tonumber(packets[7]) - BattlepassInfo.currentDayOnlineTimeMinutes = math.floor(BattlepassInfo.currentDayOnlineTimeMilliseconds / 60000) - - WeakAurasSaved.Cyka.LoginInfo[Today][UnitName("player")].onlineTimeInMinutes = - BattlepassInfo.currentDayOnlineTimeMinutes - WeakAurasSaved.Cyka.LoginInfo[Today][UnitName("player")].claimed = BattlepassInfo.dayRewardComplete - - if BattlepassInfo.dayRewardComplete == 0 and BattlepassInfo.currentDayOnlineTimeMinutes >= 120 then - BattlepassInfo.DoClaim() - C_Timer.After(0.2, function() BattlepassInfo.PingApi() end) - end - - UpdateAccountInfo() - end, - DoClaim = function() - SendAddonMessage("UIMSG_TO_SERVER", "UIMSG_WEEKLY_REW_GET" .. "\t", "WHISPER", UnitName("player")) - WeakAuras.ScanEvents("PLAY_SOUND", "Interface\\Sounds\\quack.ogg") - SendChatMessage("YEEE", "WHISPER", nil, UnitName("player")) - end, -} -setmetatable(BattlepassInfo, { - __call = BattlepassInfo.PingApi, - __index = BattlepassInfo, - __tostring = function() - local ret = {} - for k, v in pairs(BattlepassInfo) do - table.insert(ret, k .. ": " .. tostring(v)) - end - return table.concat(ret, "\n") - end, -}) - -for k, v in pairs(BattlepassInfo) do - if type(v) == "number" then BattlepassInfo[k] = 0 end -end -BattlepassInfo() - --- Claiming rewards works fine --- But the bar does not hide once rewards are claimed +if not WeakAurasSaved.Cyka then WeakAurasSaved.Cyka = {} end +if not WeakAurasSaved.Cyka.LoginInfo then WeakAurasSaved.Cyka.LoginInfo = {} end + +Today = date("%Y-%m-%d") +if not WeakAurasSaved.Cyka.LoginInfo[Today] then WeakAurasSaved.Cyka.LoginInfo[Today] = {} end +if not WeakAurasSaved.Cyka.LoginInfo[Today][UnitName("player")] then + WeakAurasSaved.Cyka.LoginInfo[Today][UnitName("player")] = { + onlineTimeInMinutes = 0, + claimed = 0, + } +end + +local greenColor = "|cff00ff00" +local noColor = "|r" +BattlepassAccountInfo = "" +local function UpdateAccountInfo() + local ret = {} + for char, info in pairs(WeakAurasSaved.Cyka.LoginInfo[Today]) do + if info.claimed == 1 then + char = string.format("%s%s %d%s", greenColor, char, info.onlineTimeInMinutes, noColor) + else + char = string.format("%s %d", char, info.onlineTimeInMinutes) + end + ret[#ret + 1] = char + end + BattlepassAccountInfo = table.concat(ret, "\n") +end + +-- [02:37 PM] Bluepotato +-- [02:37 PM] onlineTimeInMinutes=120, +-- [02:37 PM] claimed=1 +-- [02:37 PM] Smolpotato +-- [02:37 PM] onlineTimeInMinutes=120, +-- [02:37 PM] claimed=1 +-- [02:37 PM] Thiccpotato +-- [02:37 PM] onlineTimeInMinutes=57, +-- [02:37 PM] claimed=0 + +---@param input string +---@param deliminer string +---@return table +aura_env.Split = function(input, deliminer) + local ret = {} + for str in string.gmatch(input, "([^" .. deliminer .. "]+)") do + table.insert(ret, str) + end + return ret +end + +---@class BattlepassInfo +---@field week number +---@field getRew number +---@field dayRewardComplete number +---@field lostDay number +---@field cost number +---@field currentDayOnlineTimeMinutes number +---@field currentDayOnlineTimeMilliseconds number +BattlepassInfo = { + PingApi = function() + SendAddonMessage("UIMSG_TO_SERVER", "UIMSG_GET_ONLINETIME_DAY" .. "\t", "WHISPER", UnitName("player")) + end, + ParseApi = function(msg) + local packets = aura_env.Split(msg, ":") + if packets[1] ~= "UISMSG_EVT_WEEK_TIME" then return end + + BattlepassInfo.currentDayOnlineTimeMilliseconds = tonumber(packets[2]) + BattlepassInfo.week = tonumber(packets[3]) + 1 + BattlepassInfo.getRew = tonumber(packets[4]) + BattlepassInfo.dayRewardComplete = tonumber(packets[5]) + BattlepassInfo.lostDay = tonumber(packets[6]) + BattlepassInfo.cost = tonumber(packets[7]) + BattlepassInfo.currentDayOnlineTimeMinutes = math.floor(BattlepassInfo.currentDayOnlineTimeMilliseconds / 60000) + + WeakAurasSaved.Cyka.LoginInfo[Today][UnitName("player")].onlineTimeInMinutes = + BattlepassInfo.currentDayOnlineTimeMinutes + WeakAurasSaved.Cyka.LoginInfo[Today][UnitName("player")].claimed = BattlepassInfo.dayRewardComplete + + if BattlepassInfo.dayRewardComplete == 0 and BattlepassInfo.currentDayOnlineTimeMinutes >= 120 then + BattlepassInfo.DoClaim() + C_Timer.After(0.2, function() BattlepassInfo.PingApi() end) + end + + UpdateAccountInfo() + end, + DoClaim = function() + SendAddonMessage("UIMSG_TO_SERVER", "UIMSG_WEEKLY_REW_GET" .. "\t", "WHISPER", UnitName("player")) + WeakAuras.ScanEvents("PLAY_SOUND", "Interface\\Sounds\\quack.ogg") + SendChatMessage("YEEE", "WHISPER", nil, UnitName("player")) + end, +} +setmetatable(BattlepassInfo, { + __call = BattlepassInfo.PingApi, + __index = BattlepassInfo, + __tostring = function() + local ret = {} + for k, v in pairs(BattlepassInfo) do + table.insert(ret, k .. ": " .. tostring(v)) + end + return table.concat(ret, "\n") + end, +}) + +for k, v in pairs(BattlepassInfo) do + if type(v) == "number" then BattlepassInfo[k] = 0 end +end +BattlepassInfo() + +-- Claiming rewards works fine +-- But the bar does not hide once rewards are claimed diff --git a/Complete Projects/Legion/Ben Paralytic.lua b/WeakAuras/Projects/Ben Paralytic.lua similarity index 96% rename from Complete Projects/Legion/Ben Paralytic.lua rename to WeakAuras/Projects/Ben Paralytic.lua index f9463aa..e957580 100644 --- a/Complete Projects/Legion/Ben Paralytic.lua +++ b/WeakAuras/Projects/Ben Paralytic.lua @@ -1,29 +1,29 @@ --- DISPLAY -function aa() - if UnitDebuff("focus", "Paralytic Poison") then -- application for stun - local stacks = select(4, UnitDebuff("focus", "Paralytic Poison")) - return stacks - end - if UnitDebuff("focus", "Partial Paralysis") then return "ROOT'D" end - if UnitDebuff("focus", "Paralysis") then return "PLS HELP" end -end --- TRIGGER -function bb() - if - UnitDebuff("focus", "Paralytic Poison") - or UnitDebuff("focus", "Partial Paralysis") - or UnitDebuff("focus", "Paralysis") - then -- application for stun - return true - end -end --- UNTRIGGER -function cc() - if - UnitDebuff("focus", "Paralytic Poison") == nil - and UnitDebuff("focus", "Partial Paralysis") == nil - and UnitDebuff("focus", "Paralysis") == nil - then -- application for stun - return true - end -end +-- DISPLAY +function aa() + if UnitDebuff("focus", "Paralytic Poison") then -- application for stun + local stacks = select(4, UnitDebuff("focus", "Paralytic Poison")) + return stacks + end + if UnitDebuff("focus", "Partial Paralysis") then return "ROOT'D" end + if UnitDebuff("focus", "Paralysis") then return "PLS HELP" end +end +-- TRIGGER +function bb() + if + UnitDebuff("focus", "Paralytic Poison") + or UnitDebuff("focus", "Partial Paralysis") + or UnitDebuff("focus", "Paralysis") + then -- application for stun + return true + end +end +-- UNTRIGGER +function cc() + if + UnitDebuff("focus", "Paralytic Poison") == nil + and UnitDebuff("focus", "Partial Paralysis") == nil + and UnitDebuff("focus", "Paralysis") == nil + then -- application for stun + return true + end +end diff --git a/WIP/Block.lua b/WeakAuras/Projects/Block.lua similarity index 95% rename from WIP/Block.lua rename to WeakAuras/Projects/Block.lua index d9e188d..8ff0024 100644 --- a/WIP/Block.lua +++ b/WeakAuras/Projects/Block.lua @@ -1,40 +1,40 @@ -COMBAT_LOG_EVENT_UNFILTERED -function(...) - local subevent = select(3, ...) - local target = select(10, ...) - if subevent == "SWING_DAMAGE" and target == UnitName("player") then - local dmg = select(13, ...) - local block = select(17, ...) or 0 - if block > 0 then - aura_env.overallBlock = aura_env.overallBlock + block - end - end -end - -DISPLAY -function() - local function shorten(val) - local function round(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var - end - local n = 2 - if val < 1e3 then - return round(val, n) - elseif val > 1e3 and val < 1e6 then - return round(val / 1e3, n) .. "k" - elseif val > 1e6 and val < 1e9 then - return round(val / 1e6, n) .. "M" - elseif val > 1e9 then - return round(val / 1e9, n) .. "G" - end -end - return shorten(aura_env.overallBlock) -end - -INIT +COMBAT_LOG_EVENT_UNFILTERED +function(...) + local subevent = select(3, ...) + local target = select(10, ...) + if subevent == "SWING_DAMAGE" and target == UnitName("player") then + local dmg = select(13, ...) + local block = select(17, ...) or 0 + if block > 0 then + aura_env.overallBlock = aura_env.overallBlock + block + end + end +end + +DISPLAY +function() + local function shorten(val) + local function round(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var + end + local n = 2 + if val < 1e3 then + return round(val, n) + elseif val > 1e3 and val < 1e6 then + return round(val / 1e3, n) .. "k" + elseif val > 1e6 and val < 1e9 then + return round(val / 1e6, n) .. "M" + elseif val > 1e9 then + return round(val / 1e9, n) .. "G" + end +end + return shorten(aura_env.overallBlock) +end + +INIT aura_env.overallBlock = 0 \ No newline at end of file diff --git a/Complete Projects/Legion/Boat Fish (Draenor).lua b/WeakAuras/Projects/Boat Fish (Draenor).lua similarity index 95% rename from Complete Projects/Legion/Boat Fish (Draenor).lua rename to WeakAuras/Projects/Boat Fish (Draenor).lua index 43dc1ef..31678a5 100644 --- a/Complete Projects/Legion/Boat Fish (Draenor).lua +++ b/WeakAuras/Projects/Boat Fish (Draenor).lua @@ -1,17 +1,17 @@ -LOOT_OPENED -function() - aura_env.lootTime = math.floor(GetTime()) + 300 -end - -DISPLAY -function() - local currentTime = math.floor(GetTime()) - if currentTime > aura_env.lootTime and aura_env.lootTime > 0 then - return "FISHING BOAT MOTHERFUCKERS" - else - return aura_env.lootTime - currentTime - end -end - -INTI -aura_env.lootTime = 0 +LOOT_OPENED +function() + aura_env.lootTime = math.floor(GetTime()) + 300 +end + +DISPLAY +function() + local currentTime = math.floor(GetTime()) + if currentTime > aura_env.lootTime and aura_env.lootTime > 0 then + return "FISHING BOAT MOTHERFUCKERS" + else + return aura_env.lootTime - currentTime + end +end + +INTI +aura_env.lootTime = 0 diff --git a/Complete Projects/Legion/BossHpNameplate(VERY INEFFICIENT!!).lua b/WeakAuras/Projects/BossHpNameplate(VERY INEFFICIENT!!).lua similarity index 97% rename from Complete Projects/Legion/BossHpNameplate(VERY INEFFICIENT!!).lua rename to WeakAuras/Projects/BossHpNameplate(VERY INEFFICIENT!!).lua index a90239e..f2b332c 100644 --- a/Complete Projects/Legion/BossHpNameplate(VERY INEFFICIENT!!).lua +++ b/WeakAuras/Projects/BossHpNameplate(VERY INEFFICIENT!!).lua @@ -1,275 +1,275 @@ ---TODO: FIX THE FUCKING THING ---I had no idea what I was doing lol - -TRIGGER FOR HP -function() - local bossList = - { - "Skorpyron", "Anomaly", "Trilliax", "Tichon", "Krosus", "Aluriel", "Botanist", "Augur", "Elisande", "Gul'dan", --Nighthold - "Amalgam of souls", "Illysanna", "Smashspite", "Kur'talos", --BRH - "Gerdo", "Flamewreath", "Advisor Melandrus", --CoS - "Glaidalis", "Oakheart", "Dresaron", "of Xavius", --DHT - "Parjesh", "Lady Hatecoil", "Deepbeard", "Serpentrix", "Wrath of Azshara", --EoA - "Hymdall", "Hyrja", "Fenryr", "Skovald", "Odyn", --HoV - "Ymiron", "Harbaron", "Helya", --MoS - "Rokmora", "Ularogg", "Naraxas", "Dargrul", --NL - "Ivanyr", "Corstilax", "Xakal", "Nal'tira", "Vandros", --Arcway - "Saltheril", "Inquisitor Tormen", "Ash'golm", "Glazer", "Cordana Fel" --VoTW - } - local output = "" - - for i = 1, 40 do - for j = 1, table.getn(bossList) do - --if UnitName("nameplate" .. i) == bossList[j] then - if UnitExists("nameplate" .. i) then - if string.match(string.lower(UnitName("nameplate" .. i)), string.lower(bossList[j])) then - return true - end - end - end - end -end - -TRIGGER FOR POWER -function() - local bossList = - { - "Skorpyron", "Anomaly", "Trilliax", "Tichon", "Krosus", "Aluriel", "Botanist", "Augur", "Elisande", "Gul'dan", --Nighthold - "Amalgam of souls", "Illysanna", "Smashspite", "Kur'talos", --BRH - "Gerdo", "Flamewreath", "Advisor Melandrus", --CoS - "Glaidalis", "Oakheart", "Dresaron", "of Xavius", --DHT - "Parjesh", "Lady Hatecoil", "Deepbeard", "Serpentrix", "Wrath of Azshara", --EoA - "Hymdall", "Hyrja", "Fenryr", "Skovald", "Odyn", --HoV - "Ymiron", "Harbaron", "Helya", --MoS - "Rokmora", "Ularogg", "Naraxas", "Dargrul", --NL - "Ivanyr", "Corstilax", "Xakal", "Nal'tira", "Vandros", --Arcway - "Saltheril", "Inquisitor Tormen", "Ash'golm", "Glazer", "Cordana Fel" --VoTW - } - - for i = 1, 40 do - for j = 1, table.getn(bossList) do - --if UnitName("nameplate" .. i) == bossList[j] then - if UnitExists("nameplate" .. i) then - if string.match(string.lower(UnitName("nameplate" .. i)), string.lower(bossList[j])) then - if UnitPower("nameplate" .. i) > 0 then - return true - end - end - end - end - end -end - -TRIGGER FOR CASTBAR -function() - local bossList = - { - "Skorpyron", "Anomaly", "Trilliax", "Tichon", "Krosus", "Aluriel", "Botanist", "Augur", "Elisande", "Gul'dan", --Nighthold - "Amalgam of souls", "Illysanna", "Smashspite", "Kur'talos", --BRH - "Gerdo", "Flamewreath", "Advisor Melandrus", --CoS - "Glaidalis", "Oakheart", "Dresaron", "of Xavius", --DHT - "Parjesh", "Lady Hatecoil", "Deepbeard", "Serpentrix", "Wrath of Azshara", --EoA - "Hymdall", "Hyrja", "Fenryr", "Skovald", "Odyn", --HoV - "Ymiron", "Harbaron", "Helya", --MoS - "Rokmora", "Ularogg", "Naraxas", "Dargrul", --NL - "Ivanyr", "Corstilax", "Xakal", "Nal'tira", "Vandros", --Arcway - "Saltheril", "Inquisitor Tormen", "Ash'golm", "Glazer", "Cordana Fel" --VoTW - } - local output = "" - - for i = 1, 40 do - for j = 1, table.getn(bossList) do - if UnitExists("nameplate" .. i) then - if string.match(string.lower(UnitName("nameplate" .. i)), string.lower(bossList[j])) then - if UnitCastingInfo("nameplate" .. i) then - return true - end - end - end - end - end -end - -DISPLAY FOR HP -function() - local bossList = - { - "Skorpyron", "Anomaly", "Trilliax", "Tichon", "Krosus", "Aluriel", "Botanist", "Augur", "Elisande", "Gul'dan", --Nighthold - "Amalgam of souls", "Illysanna", "Smashspite", "Kur'talos", --BRH - "Gerdo", "Flamewreath", "Advisor Melandrus", --CoS - "Glaidalis", "Oakheart", "Dresaron", "of Xavius", --DHT - "Parjesh", "Lady Hatecoil", "Deepbeard", "Serpentrix", "Wrath of Azshara", --EoA - "Hymdall", "Hyrja", "Fenryr", "Skovald", "Odyn", --HoV - "Ymiron", "Harbaron", "Helya", --MoS - "Rokmora", "Ularogg", "Naraxas", "Dargrul", --NL - "Ivanyr", "Corstilax", "Xakal", "Nal'tira", "Vandros", --Arcway - "Saltheril", "Inquisitor Tormen", "Ash'golm", "Glazer", "Cordana Fel" --VoTW - } - local output = "" - - for i = 1, 40 do - for j = 1, table.getn(bossList) do - --if UnitName("nameplate" .. i) == bossList[j] then - if UnitExists("nameplate" .. i) then - if string.match(string.lower(UnitName("nameplate" .. i)), string.lower(bossList[j])) then - aura_env.bossHp = UnitHealth("nameplate" .. i) - aura_env.bossMaxHp = UnitHealthMax("nameplate" .. i) - aura_env.bossPer = math.floor((aura_env.bossHp / aura_env.bossMaxHp) * 100) - output = math.floor(aura_env.bossHp / 1e6) .. "M%/" .. math.floor(aura_env.bossMaxHp / 1e6) .. "M - " .. aura_env.bossPer .. "%%" - break - end - end - end - end - return output -end - -DISPLAY FOR POWER -function() - local bossList = - { - "Skorpyron", "Anomaly", "Trilliax", "Tichon", "Krosus", "Aluriel", "Botanist", "Augur", "Elisande", "Gul'dan", --Nighthold - "Amalgam of souls", "Illysanna", "Smashspite", "Kur'talos", --BRH - "Gerdo", "Flamewreath", "Advisor Melandrus", --CoS - "Glaidalis", "Oakheart", "Dresaron", "of Xavius", --DHT - "Parjesh", "Lady Hatecoil", "Deepbeard", "Serpentrix", "Wrath of Azshara", --EoA - "Hymdall", "Hyrja", "Fenryr", "Skovald", "Odyn", --HoV - "Ymiron", "Harbaron", "Helya", --MoS - "Rokmora", "Ularogg", "Naraxas", "Dargrul", --NL - "Ivanyr", "Corstilax", "Xakal", "Nal'tira", "Vandros", --Arcway - "Saltheril", "Inquisitor Tormen", "Ash'golm", "Glazer", "Cordana Fel" --VoTW - } - local output = "" - - for i = 1, 40 do - for j = 1, table.getn(bossList) do - --if UnitName("nameplate" .. i) == bossList[j] then - if UnitExists("nameplate" .. i) then - if string.match(string.lower(UnitName("nameplate" .. i)), string.lower(bossList[j])) then - if UnitPower("nameplate" .. i) > 0 then - aura_env.bossPower = UnitPower("nameplate" .. i) - aura_env.bossPowerMax = UnitPowerMax("nameplate" .. i) - aura_env.bossPer = math.floor((aura_env.bossPower / aura_env.bossPowerMax) * 100) - output = aura_env.bossPower .. "%/" .. aura_env.bossPowerMax .. " " .. aura_env.bossPer .. "%%" - break - end - end - end - end - end - return output -end - -DISPLAY FOR CASTBAR -function() - local bossList = - { - "Skorpyron", "Anomaly", "Trilliax", "Tichon", "Krosus", "Aluriel", "Botanist", "Augur", "Elisande", "Gul'dan", --Nighthold - "Amalgam of souls", "Illysanna", "Smashspite", "Kur'talos", --BRH - "Gerdo", "Flamewreath", "Advisor Melandrus", --CoS - "Glaidalis", "Oakheart", "Dresaron", "of Xavius", --DHT - "Parjesh", "Lady Hatecoil", "Deepbeard", "Serpentrix", "Wrath of Azshara", --EoA - "Hymdall", "Hyrja", "Fenryr", "Skovald", "Odyn", --HoV - "Ymiron", "Harbaron", "Helya", --MoS - "Rokmora", "Ularogg", "Naraxas", "Dargrul", --NL - "Ivanyr", "Corstilax", "Xakal", "Nal'tira", "Vandros", --Arcway - "Saltheril", "Inquisitor Tormen", "Ash'golm", "Glazer", "Cordana Fel" --VoTW - } - local output = "" - - for i = 1, 40 do - for j = 1, table.getn(bossList) do - if UnitExists("nameplate" .. i) then - if string.match(string.lower(UnitName("nameplate" .. i)), string.lower(bossList[j])) then - if UnitCastingInfo("nameplate" .. i) then - aura_env.bossCast = UnitCastingInfo("nameplate" .. i) - aura_env.castEnd = select(6, UnitCastingInfo("nameplate" .. i)) - aura_env.castStart = select(5, UnitCastingInfo("nameplate" .. i)) - output = aura_env.bossCast .. " - " .. math.floor(((aura_env.castEnd - GetTime() * 1000) / 1000) * 100) / 100 - break - end - end - end - end - end - return output -end - -DURATION FOR HP -function() - return aura_env.bossHp, aura_env.bossMaxHp, 1 -end - -DURATION FOR POWER -function() - return aura_env.bossPower, aura_env.bossPowerMax, 1 -end - -DURATION FOR CASTBAR -function() - return aura_env.castEnd - GetTime() * 1000, aura_env.castEnd - aura_env.castStart, 1 -end - -DISPLAY FOR NAME -function() - local bossList = - { - "Skorpyron", "Anomaly", "Trilliax", "Tichon", "Krosus", "Aluriel", "Botanist", "Augur", "Elisande", "Gul'dan", --Nighthold - "Amalgam of souls", "Illysanna", "Smashspite", "Kur'talos", --BRH - "Gerdo", "Flamewreath", "Advisor Melandrus", --CoS - "Glaidalis", "Oakheart", "Dresaron", "of Xavius", --DHT - "Parjesh", "Lady Hatecoil", "Deepbeard", "Serpentrix", "Wrath of Azshara", --EoA - "Hymdall", "Hyrja", "Fenryr", "Skovald", "Odyn", --HoV - "Ymiron", "Harbaron", "Helya", --MoS - "Rokmora", "Ularogg", "Naraxas", "Dargrul", --NL - "Ivanyr", "Corstilax", "Xakal", "Nal'tira", "Vandros", --Arcway - "Saltheril", "Inquisitor Tormen", "Ash'golm", "Glazer", "Cordana Fel" --VoTW - } - local output = "" - - for i = 1, 40 do - for j = 1, table.getn(bossList) do - --if UnitName("nameplate" .. i) == bossList[j] then - if UnitExists("nameplate" .. i) then - if string.match(string.lower(UnitName("nameplate" .. i)), string.lower(bossList[j])) then - output = UnitName("nameplate" .. i) - break - end - end - end - end - return output -end - -ANIMATION FOR HP -function() - local function range (val, min, max, max2) - val = 1 - (((max - val) / (max - min)) * max2) - return val - end - local c = aura_env.bossHp / aura_env.bossMaxHp - c = 1 - c - --c expected as [0, 1] - if c > 0.5 then - c = 1 - (2 * (c - 0.5)) - return c, 1, 0, 1 - else - c = c * 2 - return 1, c, 0, 1 - end -end - -INIT FOR HP -aura_env.bossHp = 1 -aura_env.bossMaxHp = 1 -aura_env.bossPer = 1 - -INIT FOR POWER -aura_env.bossPower = 1 -aura_env.bossPowerMax = 1 -aura_env.bossPer = 1 - -INIT FOR CASTBAR -aura_env.castEnd = 0 -aura_env.castStart = 0 -aura_env.bossCast = "" +--TODO: FIX THE FUCKING THING +--I had no idea what I was doing lol + +TRIGGER FOR HP +function() + local bossList = + { + "Skorpyron", "Anomaly", "Trilliax", "Tichon", "Krosus", "Aluriel", "Botanist", "Augur", "Elisande", "Gul'dan", --Nighthold + "Amalgam of souls", "Illysanna", "Smashspite", "Kur'talos", --BRH + "Gerdo", "Flamewreath", "Advisor Melandrus", --CoS + "Glaidalis", "Oakheart", "Dresaron", "of Xavius", --DHT + "Parjesh", "Lady Hatecoil", "Deepbeard", "Serpentrix", "Wrath of Azshara", --EoA + "Hymdall", "Hyrja", "Fenryr", "Skovald", "Odyn", --HoV + "Ymiron", "Harbaron", "Helya", --MoS + "Rokmora", "Ularogg", "Naraxas", "Dargrul", --NL + "Ivanyr", "Corstilax", "Xakal", "Nal'tira", "Vandros", --Arcway + "Saltheril", "Inquisitor Tormen", "Ash'golm", "Glazer", "Cordana Fel" --VoTW + } + local output = "" + + for i = 1, 40 do + for j = 1, table.getn(bossList) do + --if UnitName("nameplate" .. i) == bossList[j] then + if UnitExists("nameplate" .. i) then + if string.match(string.lower(UnitName("nameplate" .. i)), string.lower(bossList[j])) then + return true + end + end + end + end +end + +TRIGGER FOR POWER +function() + local bossList = + { + "Skorpyron", "Anomaly", "Trilliax", "Tichon", "Krosus", "Aluriel", "Botanist", "Augur", "Elisande", "Gul'dan", --Nighthold + "Amalgam of souls", "Illysanna", "Smashspite", "Kur'talos", --BRH + "Gerdo", "Flamewreath", "Advisor Melandrus", --CoS + "Glaidalis", "Oakheart", "Dresaron", "of Xavius", --DHT + "Parjesh", "Lady Hatecoil", "Deepbeard", "Serpentrix", "Wrath of Azshara", --EoA + "Hymdall", "Hyrja", "Fenryr", "Skovald", "Odyn", --HoV + "Ymiron", "Harbaron", "Helya", --MoS + "Rokmora", "Ularogg", "Naraxas", "Dargrul", --NL + "Ivanyr", "Corstilax", "Xakal", "Nal'tira", "Vandros", --Arcway + "Saltheril", "Inquisitor Tormen", "Ash'golm", "Glazer", "Cordana Fel" --VoTW + } + + for i = 1, 40 do + for j = 1, table.getn(bossList) do + --if UnitName("nameplate" .. i) == bossList[j] then + if UnitExists("nameplate" .. i) then + if string.match(string.lower(UnitName("nameplate" .. i)), string.lower(bossList[j])) then + if UnitPower("nameplate" .. i) > 0 then + return true + end + end + end + end + end +end + +TRIGGER FOR CASTBAR +function() + local bossList = + { + "Skorpyron", "Anomaly", "Trilliax", "Tichon", "Krosus", "Aluriel", "Botanist", "Augur", "Elisande", "Gul'dan", --Nighthold + "Amalgam of souls", "Illysanna", "Smashspite", "Kur'talos", --BRH + "Gerdo", "Flamewreath", "Advisor Melandrus", --CoS + "Glaidalis", "Oakheart", "Dresaron", "of Xavius", --DHT + "Parjesh", "Lady Hatecoil", "Deepbeard", "Serpentrix", "Wrath of Azshara", --EoA + "Hymdall", "Hyrja", "Fenryr", "Skovald", "Odyn", --HoV + "Ymiron", "Harbaron", "Helya", --MoS + "Rokmora", "Ularogg", "Naraxas", "Dargrul", --NL + "Ivanyr", "Corstilax", "Xakal", "Nal'tira", "Vandros", --Arcway + "Saltheril", "Inquisitor Tormen", "Ash'golm", "Glazer", "Cordana Fel" --VoTW + } + local output = "" + + for i = 1, 40 do + for j = 1, table.getn(bossList) do + if UnitExists("nameplate" .. i) then + if string.match(string.lower(UnitName("nameplate" .. i)), string.lower(bossList[j])) then + if UnitCastingInfo("nameplate" .. i) then + return true + end + end + end + end + end +end + +DISPLAY FOR HP +function() + local bossList = + { + "Skorpyron", "Anomaly", "Trilliax", "Tichon", "Krosus", "Aluriel", "Botanist", "Augur", "Elisande", "Gul'dan", --Nighthold + "Amalgam of souls", "Illysanna", "Smashspite", "Kur'talos", --BRH + "Gerdo", "Flamewreath", "Advisor Melandrus", --CoS + "Glaidalis", "Oakheart", "Dresaron", "of Xavius", --DHT + "Parjesh", "Lady Hatecoil", "Deepbeard", "Serpentrix", "Wrath of Azshara", --EoA + "Hymdall", "Hyrja", "Fenryr", "Skovald", "Odyn", --HoV + "Ymiron", "Harbaron", "Helya", --MoS + "Rokmora", "Ularogg", "Naraxas", "Dargrul", --NL + "Ivanyr", "Corstilax", "Xakal", "Nal'tira", "Vandros", --Arcway + "Saltheril", "Inquisitor Tormen", "Ash'golm", "Glazer", "Cordana Fel" --VoTW + } + local output = "" + + for i = 1, 40 do + for j = 1, table.getn(bossList) do + --if UnitName("nameplate" .. i) == bossList[j] then + if UnitExists("nameplate" .. i) then + if string.match(string.lower(UnitName("nameplate" .. i)), string.lower(bossList[j])) then + aura_env.bossHp = UnitHealth("nameplate" .. i) + aura_env.bossMaxHp = UnitHealthMax("nameplate" .. i) + aura_env.bossPer = math.floor((aura_env.bossHp / aura_env.bossMaxHp) * 100) + output = math.floor(aura_env.bossHp / 1e6) .. "M%/" .. math.floor(aura_env.bossMaxHp / 1e6) .. "M - " .. aura_env.bossPer .. "%%" + break + end + end + end + end + return output +end + +DISPLAY FOR POWER +function() + local bossList = + { + "Skorpyron", "Anomaly", "Trilliax", "Tichon", "Krosus", "Aluriel", "Botanist", "Augur", "Elisande", "Gul'dan", --Nighthold + "Amalgam of souls", "Illysanna", "Smashspite", "Kur'talos", --BRH + "Gerdo", "Flamewreath", "Advisor Melandrus", --CoS + "Glaidalis", "Oakheart", "Dresaron", "of Xavius", --DHT + "Parjesh", "Lady Hatecoil", "Deepbeard", "Serpentrix", "Wrath of Azshara", --EoA + "Hymdall", "Hyrja", "Fenryr", "Skovald", "Odyn", --HoV + "Ymiron", "Harbaron", "Helya", --MoS + "Rokmora", "Ularogg", "Naraxas", "Dargrul", --NL + "Ivanyr", "Corstilax", "Xakal", "Nal'tira", "Vandros", --Arcway + "Saltheril", "Inquisitor Tormen", "Ash'golm", "Glazer", "Cordana Fel" --VoTW + } + local output = "" + + for i = 1, 40 do + for j = 1, table.getn(bossList) do + --if UnitName("nameplate" .. i) == bossList[j] then + if UnitExists("nameplate" .. i) then + if string.match(string.lower(UnitName("nameplate" .. i)), string.lower(bossList[j])) then + if UnitPower("nameplate" .. i) > 0 then + aura_env.bossPower = UnitPower("nameplate" .. i) + aura_env.bossPowerMax = UnitPowerMax("nameplate" .. i) + aura_env.bossPer = math.floor((aura_env.bossPower / aura_env.bossPowerMax) * 100) + output = aura_env.bossPower .. "%/" .. aura_env.bossPowerMax .. " " .. aura_env.bossPer .. "%%" + break + end + end + end + end + end + return output +end + +DISPLAY FOR CASTBAR +function() + local bossList = + { + "Skorpyron", "Anomaly", "Trilliax", "Tichon", "Krosus", "Aluriel", "Botanist", "Augur", "Elisande", "Gul'dan", --Nighthold + "Amalgam of souls", "Illysanna", "Smashspite", "Kur'talos", --BRH + "Gerdo", "Flamewreath", "Advisor Melandrus", --CoS + "Glaidalis", "Oakheart", "Dresaron", "of Xavius", --DHT + "Parjesh", "Lady Hatecoil", "Deepbeard", "Serpentrix", "Wrath of Azshara", --EoA + "Hymdall", "Hyrja", "Fenryr", "Skovald", "Odyn", --HoV + "Ymiron", "Harbaron", "Helya", --MoS + "Rokmora", "Ularogg", "Naraxas", "Dargrul", --NL + "Ivanyr", "Corstilax", "Xakal", "Nal'tira", "Vandros", --Arcway + "Saltheril", "Inquisitor Tormen", "Ash'golm", "Glazer", "Cordana Fel" --VoTW + } + local output = "" + + for i = 1, 40 do + for j = 1, table.getn(bossList) do + if UnitExists("nameplate" .. i) then + if string.match(string.lower(UnitName("nameplate" .. i)), string.lower(bossList[j])) then + if UnitCastingInfo("nameplate" .. i) then + aura_env.bossCast = UnitCastingInfo("nameplate" .. i) + aura_env.castEnd = select(6, UnitCastingInfo("nameplate" .. i)) + aura_env.castStart = select(5, UnitCastingInfo("nameplate" .. i)) + output = aura_env.bossCast .. " - " .. math.floor(((aura_env.castEnd - GetTime() * 1000) / 1000) * 100) / 100 + break + end + end + end + end + end + return output +end + +DURATION FOR HP +function() + return aura_env.bossHp, aura_env.bossMaxHp, 1 +end + +DURATION FOR POWER +function() + return aura_env.bossPower, aura_env.bossPowerMax, 1 +end + +DURATION FOR CASTBAR +function() + return aura_env.castEnd - GetTime() * 1000, aura_env.castEnd - aura_env.castStart, 1 +end + +DISPLAY FOR NAME +function() + local bossList = + { + "Skorpyron", "Anomaly", "Trilliax", "Tichon", "Krosus", "Aluriel", "Botanist", "Augur", "Elisande", "Gul'dan", --Nighthold + "Amalgam of souls", "Illysanna", "Smashspite", "Kur'talos", --BRH + "Gerdo", "Flamewreath", "Advisor Melandrus", --CoS + "Glaidalis", "Oakheart", "Dresaron", "of Xavius", --DHT + "Parjesh", "Lady Hatecoil", "Deepbeard", "Serpentrix", "Wrath of Azshara", --EoA + "Hymdall", "Hyrja", "Fenryr", "Skovald", "Odyn", --HoV + "Ymiron", "Harbaron", "Helya", --MoS + "Rokmora", "Ularogg", "Naraxas", "Dargrul", --NL + "Ivanyr", "Corstilax", "Xakal", "Nal'tira", "Vandros", --Arcway + "Saltheril", "Inquisitor Tormen", "Ash'golm", "Glazer", "Cordana Fel" --VoTW + } + local output = "" + + for i = 1, 40 do + for j = 1, table.getn(bossList) do + --if UnitName("nameplate" .. i) == bossList[j] then + if UnitExists("nameplate" .. i) then + if string.match(string.lower(UnitName("nameplate" .. i)), string.lower(bossList[j])) then + output = UnitName("nameplate" .. i) + break + end + end + end + end + return output +end + +ANIMATION FOR HP +function() + local function range (val, min, max, max2) + val = 1 - (((max - val) / (max - min)) * max2) + return val + end + local c = aura_env.bossHp / aura_env.bossMaxHp + c = 1 - c + --c expected as [0, 1] + if c > 0.5 then + c = 1 - (2 * (c - 0.5)) + return c, 1, 0, 1 + else + c = c * 2 + return 1, c, 0, 1 + end +end + +INIT FOR HP +aura_env.bossHp = 1 +aura_env.bossMaxHp = 1 +aura_env.bossPer = 1 + +INIT FOR POWER +aura_env.bossPower = 1 +aura_env.bossPowerMax = 1 +aura_env.bossPer = 1 + +INIT FOR CASTBAR +aura_env.castEnd = 0 +aura_env.castStart = 0 +aura_env.bossCast = "" diff --git a/Complete Projects/Legion/Bulwark of Order.lua b/WeakAuras/Projects/Bulwark of Order.lua similarity index 96% rename from Complete Projects/Legion/Bulwark of Order.lua rename to WeakAuras/Projects/Bulwark of Order.lua index 564b68c..1168c61 100644 --- a/Complete Projects/Legion/Bulwark of Order.lua +++ b/WeakAuras/Projects/Bulwark of Order.lua @@ -1,67 +1,67 @@ ---GET MAX SHIELD ABSORB AND BAR FOR ABSORB -TRIGGER -function() - local buff = UnitBuff("player", "Bulwark of Order") or "" - if buff ~= "" then return true else return false end -end - -DURATION -function() - local shieldAmount = select(17, UnitBuff("player", "Bulwark of Order")) - if shieldAmount > aura_env.maxShield then - aura_env.maxShield = shieldAmount - end - return shieldAmount, aura_env.maxShield, 1 -end - -DISPLAY -function() - local shield = select(17, UnitBuff("player", "Bulwark of Order")) or 0 - return math.floor(shield / 1000) .. "k" -end - -ANIMATION -function() - local function range(val, min, max, max2) - local val = 1 - (((max - val) / (max - min)) * max2) - return val - end - - local endTime = select(7, UnitBuff("player", "Bulwark of Order")) * 1000 - local time = GetTime() * 1000 - local maxDur = select(6, UnitBuff("player", "Bulwark of Order")) * 1000 - local duration = endTime - time - local c = range(duration, 0, maxDur, 1) - --c expected as [0, 1] - if c > 0.5 then - c = 1 - (2 * (c - 0.5)) - return c, 1, 0, 1 - else - c = c * 2 - return 1, c, 0, 1 - end -end - -ON SHOW -aura_env.maxShield = 0 - -TRIGGER -function() - local buff = UnitBuff("player", "Bulwark of Order") or "" - if buff ~= "" then return true else return false end -end - -DURATION -function() - local shieldAmount = select(17, UnitBuff("player", "Bulwark of Order")) - local maxShield = UnitHealth("player") / 5 - return shieldAmount, maxShield, 1 -end - -DISPLAY -function() - local shield = select(17, UnitBuff("player", "Bulwark of Order")) or 0 - local maxShield = UnitHealth("player") / 5 - local pp = (shield / maxShield) * 20 - return string.format("%2.1f", pp) -end +--GET MAX SHIELD ABSORB AND BAR FOR ABSORB +TRIGGER +function() + local buff = UnitBuff("player", "Bulwark of Order") or "" + if buff ~= "" then return true else return false end +end + +DURATION +function() + local shieldAmount = select(17, UnitBuff("player", "Bulwark of Order")) + if shieldAmount > aura_env.maxShield then + aura_env.maxShield = shieldAmount + end + return shieldAmount, aura_env.maxShield, 1 +end + +DISPLAY +function() + local shield = select(17, UnitBuff("player", "Bulwark of Order")) or 0 + return math.floor(shield / 1000) .. "k" +end + +ANIMATION +function() + local function range(val, min, max, max2) + local val = 1 - (((max - val) / (max - min)) * max2) + return val + end + + local endTime = select(7, UnitBuff("player", "Bulwark of Order")) * 1000 + local time = GetTime() * 1000 + local maxDur = select(6, UnitBuff("player", "Bulwark of Order")) * 1000 + local duration = endTime - time + local c = range(duration, 0, maxDur, 1) + --c expected as [0, 1] + if c > 0.5 then + c = 1 - (2 * (c - 0.5)) + return c, 1, 0, 1 + else + c = c * 2 + return 1, c, 0, 1 + end +end + +ON SHOW +aura_env.maxShield = 0 + +TRIGGER +function() + local buff = UnitBuff("player", "Bulwark of Order") or "" + if buff ~= "" then return true else return false end +end + +DURATION +function() + local shieldAmount = select(17, UnitBuff("player", "Bulwark of Order")) + local maxShield = UnitHealth("player") / 5 + return shieldAmount, maxShield, 1 +end + +DISPLAY +function() + local shield = select(17, UnitBuff("player", "Bulwark of Order")) or 0 + local maxShield = UnitHealth("player") / 5 + local pp = (shield / maxShield) * 20 + return string.format("%2.1f", pp) +end diff --git a/Complete Projects/Legion/Buttons.lua b/WeakAuras/Projects/Buttons.lua similarity index 97% rename from Complete Projects/Legion/Buttons.lua rename to WeakAuras/Projects/Buttons.lua index e828b75..f8612dc 100644 --- a/Complete Projects/Legion/Buttons.lua +++ b/WeakAuras/Projects/Buttons.lua @@ -1,40 +1,40 @@ -PLAYER_ENTERING_WORLD -function() - if aura_env.enabled == 1 then - local r = WeakAuras.regions['julijabutton0'].region - local b = CreateFrame("Button", "JulijaButton", r, "SecureActionButtonTemplate") - if aura_env.type:match("spell") then - b:SetAllPoints() - b:SetAttribute("unit", aura_env.target) - b:SetAttribute("spell", aura_env.name) - b:SetAttribute("type", "spell") - end - if aura_env.type:match("macro") then - b:SetAllPoints() - b:SetAttribute("macro", aura_env.name) - b:SetAttribute("type", "macro") - end - return true - else - return false - end -end - -INIT -aura_env.enabled = 0 -aura_env.target = "player" --UnitID; player, focus, target, partyn (where n is the number in order of the party member), raidn (For more elaborate UnitIDs look up UnitID API Wiki thing; NO DYNAMIC INFO); I don't think it works for macros though.... So I've disabled it for macros -aura_env.type = "spell" --"spell" or "macro" CASE SENSITIVE -aura_env.name = "Hand of the Protector" --Spell or Macro name CASE SENSITIVE - -if aura_env.enabled == 1 then - if not aura_env.type:match("spell") and not aura_env.type:match("macro") then - print("|cFFFF0000Error 'type' on julijabutton0") - aura_env.enabled = 0 - end - if aura_env.name == "" then - print("|cFFFF0000Error 'name' on julijabutton0") - end - if aura_env.target == "" and not aura_env.type:match("macro") then - print("|cFFFF0000Error 'target' on julijabutton0") - end -end +PLAYER_ENTERING_WORLD +function() + if aura_env.enabled == 1 then + local r = WeakAuras.regions['julijabutton0'].region + local b = CreateFrame("Button", "JulijaButton", r, "SecureActionButtonTemplate") + if aura_env.type:match("spell") then + b:SetAllPoints() + b:SetAttribute("unit", aura_env.target) + b:SetAttribute("spell", aura_env.name) + b:SetAttribute("type", "spell") + end + if aura_env.type:match("macro") then + b:SetAllPoints() + b:SetAttribute("macro", aura_env.name) + b:SetAttribute("type", "macro") + end + return true + else + return false + end +end + +INIT +aura_env.enabled = 0 +aura_env.target = "player" --UnitID; player, focus, target, partyn (where n is the number in order of the party member), raidn (For more elaborate UnitIDs look up UnitID API Wiki thing; NO DYNAMIC INFO); I don't think it works for macros though.... So I've disabled it for macros +aura_env.type = "spell" --"spell" or "macro" CASE SENSITIVE +aura_env.name = "Hand of the Protector" --Spell or Macro name CASE SENSITIVE + +if aura_env.enabled == 1 then + if not aura_env.type:match("spell") and not aura_env.type:match("macro") then + print("|cFFFF0000Error 'type' on julijabutton0") + aura_env.enabled = 0 + end + if aura_env.name == "" then + print("|cFFFF0000Error 'name' on julijabutton0") + end + if aura_env.target == "" and not aura_env.type:match("macro") then + print("|cFFFF0000Error 'target' on julijabutton0") + end +end diff --git a/Complete Projects/BFA Freakz/Grand Crusader Proc.lua b/WeakAuras/Projects/ByExp/BFA Freakz/Grand Crusader Proc.lua similarity index 98% rename from Complete Projects/BFA Freakz/Grand Crusader Proc.lua rename to WeakAuras/Projects/ByExp/BFA Freakz/Grand Crusader Proc.lua index 004db86..af55f9f 100644 --- a/Complete Projects/BFA Freakz/Grand Crusader Proc.lua +++ b/WeakAuras/Projects/ByExp/BFA Freakz/Grand Crusader Proc.lua @@ -1,16 +1,16 @@ ---COMBAT_LOG_EVENT_UNFILTERED UNIT_AURA -function(e, ...) - if e == "COMBAT_LOG_EVENT_UNFILTERED" then - local se = select(2, CombatLogGetCurrentEventInfo()) - local sid = select(12, CombatLogGetCurrentEventInfo()) - local caster = select(5, CombatLogGetCurrentEventInfo()) - if caster == UnitName("player") and se == "SPELL_CAST_SUCCESS" and sid == 53595 then - WeakAurasSaved.CustomTrash.ProcShit.casts = WeakAurasSaved.CustomTrash.ProcShit.casts + 1 - end - end -end - ---DISPLAY -function() - return WeakAurasSaved.CustomTrash.ProcShit.procs .. " / " .. WeakAurasSaved.CustomTrash.ProcShit.casts .. "\n" .. WeakAurasSaved.CustomTrash.ProcShit.procs / WeakAurasSaved.CustomTrash.ProcShit.casts +--COMBAT_LOG_EVENT_UNFILTERED UNIT_AURA +function(e, ...) + if e == "COMBAT_LOG_EVENT_UNFILTERED" then + local se = select(2, CombatLogGetCurrentEventInfo()) + local sid = select(12, CombatLogGetCurrentEventInfo()) + local caster = select(5, CombatLogGetCurrentEventInfo()) + if caster == UnitName("player") and se == "SPELL_CAST_SUCCESS" and sid == 53595 then + WeakAurasSaved.CustomTrash.ProcShit.casts = WeakAurasSaved.CustomTrash.ProcShit.casts + 1 + end + end +end + +--DISPLAY +function() + return WeakAurasSaved.CustomTrash.ProcShit.procs .. " / " .. WeakAurasSaved.CustomTrash.ProcShit.casts .. "\n" .. WeakAurasSaved.CustomTrash.ProcShit.procs / WeakAurasSaved.CustomTrash.ProcShit.casts end \ No newline at end of file diff --git a/Complete Projects/BFA Freakz/RareAlert.lua b/WeakAuras/Projects/ByExp/BFA Freakz/RareAlert.lua similarity index 96% rename from Complete Projects/BFA Freakz/RareAlert.lua rename to WeakAuras/Projects/ByExp/BFA Freakz/RareAlert.lua index 3cd3406..40b9497 100644 --- a/Complete Projects/BFA Freakz/RareAlert.lua +++ b/WeakAuras/Projects/ByExp/BFA Freakz/RareAlert.lua @@ -1,34 +1,34 @@ ---Custom text -function() - output = "" - for k, v in pairs(aura_env.elites) do - output = output .. aura_env.eliteColor .. k .. " " .. v .. "\124r\n" - end - for k, v in pairs(aura_env.rares) do - output = output .. aura_env.rareColor .. k .. " " .. v .. "\124r\n" - end - return output -end - ---NAME_PLATE_UNIT_ADDED -function(e, u) - class = UnitClassification(u) - -- use date() for time - if class == "elite" then - aura_env.elites[UnitName(u)] = aura_env.GetTime() - return true - elseif class == "rare" or class == "rareelite" then - aura_env.rares[UnitName(u)] = aura_env.GetTime() - return true - end -end - ---INIT -aura_env.elites = {} -aura_env.rares = {} -aura_env.eliteColor = "\124c" .. "ff3e3e3e" -aura_env.rareColor = "\124c" .. "ffffe72e" - -aura_env.GetTime = function() - return string.match(date(), "%d%d:%d%d:%d%d") +--Custom text +function() + output = "" + for k, v in pairs(aura_env.elites) do + output = output .. aura_env.eliteColor .. k .. " " .. v .. "\124r\n" + end + for k, v in pairs(aura_env.rares) do + output = output .. aura_env.rareColor .. k .. " " .. v .. "\124r\n" + end + return output +end + +--NAME_PLATE_UNIT_ADDED +function(e, u) + class = UnitClassification(u) + -- use date() for time + if class == "elite" then + aura_env.elites[UnitName(u)] = aura_env.GetTime() + return true + elseif class == "rare" or class == "rareelite" then + aura_env.rares[UnitName(u)] = aura_env.GetTime() + return true + end +end + +--INIT +aura_env.elites = {} +aura_env.rares = {} +aura_env.eliteColor = "\124c" .. "ff3e3e3e" +aura_env.rareColor = "\124c" .. "ffffe72e" + +aura_env.GetTime = function() + return string.match(date(), "%d%d:%d%d:%d%d") endee \ No newline at end of file diff --git a/Complete Projects/BFA/Adding text to texture.lua b/WeakAuras/Projects/ByExp/BFA/Adding text to texture.lua similarity index 97% rename from Complete Projects/BFA/Adding text to texture.lua rename to WeakAuras/Projects/ByExp/BFA/Adding text to texture.lua index 615eace..2ed0c47 100644 --- a/Complete Projects/BFA/Adding text to texture.lua +++ b/WeakAuras/Projects/ByExp/BFA/Adding text to texture.lua @@ -1,10 +1,10 @@ -if not aura_env.region.text then - local text = aura_env.region:CreateFontString(nil, aura_env.region) - aura_env.region.text = text - print("ok!") -end -aura_env.region.text:SetFont("Fonts\\FRIZQT__.TTF", 10, "OUTLINE, MONOCHROME") -aura_env.region.text:SetTextColor(0, 1, 0, 0.8) -aura_env.region.text:SetPoint("CENTER", aura_env.region, "CENTER", 1, 0) -aura_env.region.text:SetText("SW") -aura_env.region.text:Show() +if not aura_env.region.text then + local text = aura_env.region:CreateFontString(nil, aura_env.region) + aura_env.region.text = text + print("ok!") +end +aura_env.region.text:SetFont("Fonts\\FRIZQT__.TTF", 10, "OUTLINE, MONOCHROME") +aura_env.region.text:SetTextColor(0, 1, 0, 0.8) +aura_env.region.text:SetPoint("CENTER", aura_env.region, "CENTER", 1, 0) +aura_env.region.text:SetText("SW") +aura_env.region.text:Show() diff --git a/Complete Projects/BFA/Anna Arrow.lua b/WeakAuras/Projects/ByExp/BFA/Anna Arrow.lua similarity index 96% rename from Complete Projects/BFA/Anna Arrow.lua rename to WeakAuras/Projects/ByExp/BFA/Anna Arrow.lua index 2b797cf..6148f4f 100644 --- a/Complete Projects/BFA/Anna Arrow.lua +++ b/WeakAuras/Projects/ByExp/BFA/Anna Arrow.lua @@ -1,27 +1,27 @@ ---NAME_PLATE_UNIT_ADDED NAME_PLATE_UNIT_REMOVED -function(e, unit) - if e == "NAME_PLATE_UNIT_ADDED" then - if aura_env.altlist[UnitName(unit)] then - local plate = C_NamePlate.GetNamePlateForUnit(unit) - if plate then - aura_env.region:SetAnchor("CENTER", plate, "CENTER") - aura_env.region:SetOffset(0, 50) - aura_env.region:Color(1, 1, 1, 1) - return true - end - end - elseif e == "NAME_PLATE_UNIT_REMOVED" then - if aura_env.altlist[UnitName(unit)] then - aura_env.region:ClearAllPoints() - aura_env.region:Color(1, 1, 1, 0) - return false - end - end -end - ---INIT -aura_env.altlist = -{ - ["Elna"] = 1, - ["Melna"] = 1, +--NAME_PLATE_UNIT_ADDED NAME_PLATE_UNIT_REMOVED +function(e, unit) + if e == "NAME_PLATE_UNIT_ADDED" then + if aura_env.altlist[UnitName(unit)] then + local plate = C_NamePlate.GetNamePlateForUnit(unit) + if plate then + aura_env.region:SetAnchor("CENTER", plate, "CENTER") + aura_env.region:SetOffset(0, 50) + aura_env.region:Color(1, 1, 1, 1) + return true + end + end + elseif e == "NAME_PLATE_UNIT_REMOVED" then + if aura_env.altlist[UnitName(unit)] then + aura_env.region:ClearAllPoints() + aura_env.region:Color(1, 1, 1, 0) + return false + end + end +end + +--INIT +aura_env.altlist = +{ + ["Elna"] = 1, + ["Melna"] = 1, } \ No newline at end of file diff --git a/Complete Projects/BFA/Anna Trade.lua b/WeakAuras/Projects/ByExp/BFA/Anna Trade.lua similarity index 95% rename from Complete Projects/BFA/Anna Trade.lua rename to WeakAuras/Projects/ByExp/BFA/Anna Trade.lua index 1b32fee..2be18d2 100644 --- a/Complete Projects/BFA/Anna Trade.lua +++ b/WeakAuras/Projects/ByExp/BFA/Anna Trade.lua @@ -1,22 +1,22 @@ ---TRADE_SHOW -function() - if UnitName("target") == "Melna" then - local items = 0 - for i = 0, 4 do - for j = 1, GetContainerNumSlots(i) do - local link = select(7, GetContainerItemInfo(i, j)) - if link then - local type = select(7, GetItemInfo(link)) - if (type == "Cooking" or type == "Cloth") and items < 6 then - UseContainerItem(i, j) - items = items + 1 - elseif items >= 6 then - AcceptTrade() - return - end - end - end - end - AcceptTrade() - end +--TRADE_SHOW +function() + if UnitName("target") == "Melna" then + local items = 0 + for i = 0, 4 do + for j = 1, GetContainerNumSlots(i) do + local link = select(7, GetContainerItemInfo(i, j)) + if link then + local type = select(7, GetItemInfo(link)) + if (type == "Cooking" or type == "Cloth") and items < 6 then + UseContainerItem(i, j) + items = items + 1 + elseif items >= 6 then + AcceptTrade() + return + end + end + end + end + AcceptTrade() + end end \ No newline at end of file diff --git a/Complete Projects/BFA/Autoloot.lua b/WeakAuras/Projects/ByExp/BFA/Autoloot.lua similarity index 97% rename from Complete Projects/BFA/Autoloot.lua rename to WeakAuras/Projects/ByExp/BFA/Autoloot.lua index ca61293..f463d2d 100644 --- a/Complete Projects/BFA/Autoloot.lua +++ b/WeakAuras/Projects/ByExp/BFA/Autoloot.lua @@ -1,531 +1,531 @@ ---LOOT_READY MERCHANT_SHOW QUEST_POI_UPDATE QUEST_DETAIL QUEST_COMPLETE QUEST_GREETING QUEST_PROGRESS GOSSIP_SHOW SCRAPPING_MACHINE_SHOW MERCHANT_CLOSED EQUIP_BIND_CONFIRM -function(e) - local aura_env = aura_env - if e == "LOOT_READY" then --Auto Loot - local slot = 1 - local lootinfo = GetLootInfo() - for k, v in pairs(lootinfo) do - if v.locked == false then - local link = GetLootSlotLink(slot) - local looted = false - if not link then link = GetLootSlotLink(slot) end - if v.item:match("%d* Gold") or v.item:match("%d* Silver") or v.item:match("%d* Copper") then LootSlot(slot); print("|cff78cb00loot 1 |r", v.item, type, subtype) - elseif link:match("Azerite") then LootSlot(slot); print("|cff78cb00loot 2 |r", v.item, type, subtype) - elseif v.item:match("War Resources") then LootSlot(slot); print("|cff78cb00loot 3 |r", v.item, type, subtype) - elseif v.item:match("Residuum") then LootSlot(slot); print("|cff78cb00loot 4 |r", v.item, type, subtype) - elseif v.item:match("Manapearl") then LootSlot(slot); print("|cff78cb00loot 5 |r", v.item, type, subtype) - end - if link then - local icon = v.texture - local id = link:match("item:(%d+):") - if not WeakAurasSaved.CustomTrash.IconDatabase[v.item] and v.item and icon then WeakAurasSaved.CustomTrash.IconDatabase[v.item] = icon; print("Adding|cff78cb00 ", v.item, " |rto the icon database") end - if not WeakAurasSaved.CustomTrash.IDDatabase[v.item] and v.item and id then WeakAurasSaved.CustomTrash.IDDatabase[v.item] = id; print("Adding|cff3366ff ", v.item, " |rto the id database") end - local type = select(6, GetItemInfo(link)) or "" - local subtype = select(7, GetItemInfo(link)) or "" - local ilvl = select(4, GetItemInfo(link)) or 0 - local equip = select(9, GetItemInfo(link)) - if (select(7, GetItemInfo(link)) or 0) == "Mount" then LootSlot(slot); print("|cff78cb00loot 6 |r", v.item, type, subtype) - elseif ilvl > 390 then LootSlot(slot); print("|cff78cb00loot 7 |r", v.item, type, subtype) - elseif (select(7, GetItemInfo(link)) or 0) == "Herb" then LootSlot(slot); print("|cff78cb00loot 8 |r", v.item, type, subtype) - elseif (select(7, GetItemInfo(link)) or 0) == "Cooking" then LootSlot(slot); print("|cff78cb00loot 9 |r", v.item, type, subtype) - elseif (select(7, GetItemInfo(link)) or 0) == "Cloth" and type == "Tradeskill" then LootSlot(slot); print("|cff78cb00loot 10 |r", v.item, type, subtype) - elseif (select(7, GetItemInfo(link)) or 0) == "Metal & Stone" then LootSlot(slot); print("|cff78cb00loot 11 |r", v.item, type, subtype) - elseif (select(11, GetItemInfo(link)) or 0) > 150000 and v.quality == 0 then LootSlot(slot); print("|cff78cb00loot 12 |r", v.item, type, subtype) - elseif v.quality > 1 and v.quality < 4 and type ~= "Weapon" and type ~= "Armor" then LootSlot(slot); print("|cff78cb00loot 13 |r", v.item, type, subtype) - elseif v.isQuestItem == true then LootSlot(slot); print("|cff78cb00loot 14 |r", v.item, type, subtype) - elseif v.quality == 0 then LootSlot(slot); print("|cff78cb00loot 15 |r", v.item, type, subtype) - elseif aura_env.whitelist[v.item] then LootSlot(slot); print("|cff78cb00loot 16 |r", v.item, type, subtype) - --elseif type == "Quest" and subtype == "Quest" then LootSlot(slot); print("|cff78cb00loot 17 |r", v.item, type, subtype) - else - print(type, subtype) - if type == "Weapon" or type == "Armor" then - if aura_env.skills[select(3, UnitClass("player"))][subtype] == 1 then - LootSlot(slot); print("|cff78cb00loot 18 |r", v.item, type, subtype) - elseif equip == "INVTYPE_FINGER" or equip == "INVTYPE_TRINKET" or equip == "INVTYPE_CLOAK" or equip == "INVTYPE_NECK" then - LootSlot(slot); print("|cff78cb00loot 19 |r", v.item, type, subtype) - end - elseif type == "Miscellaneous" then - if subtype == "Mount" then - LootSlot(slot); print("|cff78cb00loot 20 |r", v.item, type, subtype) - end - end - end - end - if link then WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity, looted) end - slot = slot + 1 - end - end - CloseLoot() - elseif e == "EQUIP_BIND_CONFIRM" then - StaticPopup1Button1:Click() - elseif e == "SCRAPPING_MACHINE_SHOW" then - for i = 0, 4 do - for j = 1, GetContainerNumSlots(i) do - local link = select(7, GetContainerItemInfo(i, j)) - if link then - local name = GetItemInfo(link) - local rarity = select(3, GetItemInfo(link)) - local ilvl = select(4, GetItemInfo(link)) or 0 - local type = select(6, GetItemInfo(link)) - local equip = select(9, GetItemInfo(link)) or "" - local price = select(11, GetItemInfo(link)) - if aura_env.sellWhitelist[name] ~= 1 then - if name and rarity and ilvl and type and equip and price then - if (type == "Armor" or type == "Weapon") and rarity <= 3 and aura_env.getequipID(equip) then - UseContainerItem(i, j) - elseif rarity > 3 and aura_env.getequipID(equip) then - if equip ~= "INVTYPE_FINGER" then - local eqID = aura_env.getequipID(equip) - local elink = GetInventoryItemLink("player", eqID) - local eilvl = select(4, GetItemInfo(elink)) or 0 - if eilvl > ilvl + 5 then - print("Scrapping " .. link .. "over |cFF780000" .. eilvl - ilvl .. "|r ilvl difference from " .. elink) - UseContainerItem(i, j) - end - elseif equip == "INVTYPE_FINGER" then - local eqID1, eqID2 = 11, 12 - local elink1, elink2 = GetInventoryItemLink("player", eqID1), GetInventoryItemLink("player", eqID2) - local eilvl1, eilvl2 = select(4, GetItemInfo(elink1)) or 0, select(4, GetItemInfo(elink2)) or 0 - if eilvl1 > ilvl + 5 then - print("Scrapping " .. link .. " over |cFF780000" .. eilvl1 - ilvl .. "|r ilvl difference from " .. elink1) - UseContainerItem(i, j) - elseif eilvl2 > ilvl + 5 then - print("Scrapping " .. link .. " over |cFF780000" .. eilvl2 - ilvl .. "|r ilvl difference from " .. elink2) - UseContainerItem(i, j) - end - end - end - end - end - end - end - end - elseif e == "MERCHANT_SHOW" then --Sell grey and white wepaon - if CanMerchantRepair() == true then RepairAllItems() end - local i, j = 0, 1 - for c = 0, 4 do - for s = 1, GetContainerNumSlots(c) do - local link = select(7, GetContainerItemInfo(c, s)) - if link then - local name = GetItemInfo(link) - local rarity = select(3, GetItemInfo(link)) - local ilvl = select(4, GetItemInfo(link)) or 0 - local type = select(6, GetItemInfo(link)) - local price = select(11, GetItemInfo(link)) - if price and price > 0 then - if aura_env.sellWhitelist[name] ~= 1 then - if rarity == 0 then - aura_env.toSell[#aura_env.toSell + 1] = {["c"] = c, ["s"] = s} - elseif (type == "Armor" or type == "Weapon") and ilvl < 350 then - aura_env.toSell[#aura_env.toSell + 1] = {["c"] = c, ["s"] = s} - end - end - end - end - end - end - aura_env.ticker = C_Timer.NewTicker(0.15, function() - if aura_env.toSell[1] then - UseContainerItem(aura_env.toSell[1].c, aura_env.toSell[1].s) - table.remove(aura_env.toSell, 1) - else - aura_env.ticker:Cancel() - end - if j >= GetContainerNumSlots(i) then i = i + 1; j = 1 end - if i >= 4 then aura_env.ticker:Cancel() end - end) - elseif e == "MERCHANT_CLOSED" then - if aura_env.ticker then aura_env.ticker:Cancel() end - aura_env.toSell = {} - elseif e == "QUEST_POI_UPDATE" then - CloseGossip() - elseif e == "QUEST_DETAIL" then - AcceptQuest() - elseif e == "QUEST_COMPLETE" then - if GetNumQuestChoices() <= 1 then - GetQuestReward(1) - end - elseif e == "GOSSIP_SHOW" then - local quests = GetNumGossipAvailableQuests() - local complquests = GetNumGossipActiveQuests() - local opt = GetNumGossipOptions() - if complquests > 0 and opt == 0 then - for i = 1, complquests do - SelectGossipActiveQuest(i) - end - end - if quests > 0 and opt == 0 then - SelectGossipAvailableQuest(1) - end - if opt == 1 and quests + complquests == 0 then - SelectGossipOption(1) - end - elseif e == "QUEST_GREETING" then - local quests = GetNumGossipAvailableQuests() - local complquests = GetNumGossipActiveQuests() - if complquests > 0 then - for i = 1, complquests do - SelectActiveQuest(1) - end - end - if quests > 0 then - SelectAvailableQuest(1) - end - elseif e == "QUEST_PROGRESS" then - if IsQuestCompletable(i) then - CompleteQuest() - end - end -end - ---INIT -aura_env.whitelist = -{ - ["Pygmy Suckerfish"] = 1, - ["Drakkari Offerings"] = 1, - ["Deepcoral Pod"] = 1, - ["Hardened Spring"] = 1, - ["Machined Gear Assembly"] = 1, - ["Tempered Plating"] = 1, - ["Hefty Glimmershell"] = 1, - ["Fresh Meat"] = 1, - ["Wood"] = 1, -} -aura_env.sellWhitelist = -{ - ["Blacksmith Hammer"] = 1, - ["Endless Tincture of Renewed Combat"] = 1, - ["Mr. Munchykins"] = 1, -} -aura_env.toSell = {} -aura_env.getequipID = function(equip) - if equip == "INVTYPE_HEAD" then return 1 - elseif equip == "INVTYPE_NECK" then return 2 - elseif equip == "INVTYPE_SHOULDER" then return 3 - elseif equip == "INVTYPE_BODY" then return 4 - elseif equip == "INVTYPE_CHEST" or equip == "INVTYPE_ROBE" then return 5 - elseif equip == "INVTYPE_WAIST" then return 6 - elseif equip == "INVTYPE_LEGS" then return 7 - elseif equip == "INVTYPE_FEET" then return 8 - elseif equip == "INVTYPE_WRIST" then return 9 - elseif equip == "INVTYPE_HAND" then return 10 - elseif equip == "INVTYPE_CLOAK" then return 15 - elseif equip == "INVTYPE_WEAPON" or equip == "INVTYPE_WEAPONMAINHAND" or equip == "INVTYPE_2HWEAPON" then return 16 - elseif equip == "INVTYPE_SHIELD" then return 17 - else return nil end -end -aura_env.skills = -{ - --Warrior - [1] = - { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 0, - ["Mail"] = 0, - ["Plate"] = 1, - ["Shields"] = 1, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 1, - ["Bows"] = 1, - ["Guns"] = 1, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 1, - ["Polearms"] = 1, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 1, - ["Warglaives"] = 1, - ["Staves"] = 1, - ["Fist Weapons"] = 1, - ["Daggers"] = 1, - ["Crossbows"] = 1, - ["Wands"] = 0, - }, - --Paladin - [2] = - { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 0, - ["Mail"] = 0, - ["Plate"] = 1, - ["Shields"] = 1, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 1, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 1, - ["Polearms"] = 1, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 1, - ["Warglaives"] = 0, - ["Staves"] = 0, - ["Fist Weapons"] = 0, - ["Daggers"] = 0, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, - --Hunter - [3] = - { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 0, - ["Mail"] = 1, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 1, - ["Bows"] = 1, - ["Guns"] = 1, - ["One-Handed Maces"] = 0, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 1, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 1, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 1, - ["Daggers"] = 1, - ["Crossbows"] = 1, - ["Wands"] = 0, - }, - --Rogue - [4] = - { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 1, - ["Mail"] = 0, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 0, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 0, - ["Fist Weapons"] = 1, - ["Daggers"] = 1, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, - --Priest - [5] = - { - --Armor Skills - ["Cloth"] = 1, - ["Leather"] = 0, - ["Mail"] = 0, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 0, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 0, - ["One-Handed Swords"] = 0, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 0, - ["Daggers"] = 1, - ["Crossbows"] = 0, - ["Wands"] = 1, - }, - --Death Knight - [6] = - { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 0, - ["Mail"] = 0, - ["Plate"] = 1, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 1, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 1, - ["Polearms"] = 1, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 1, - ["Warglaives"] = 0, - ["Staves"] = 0, - ["Fist Weapons"] = 0, - ["Daggers"] = 0, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, - --Shaman - [7] = - { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 0, - ["Mail"] = 1, - ["Plate"] = 0, - ["Shields"] = 1, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 0, - ["One-Handed Swords"] = 0, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 1, - ["Daggers"] = 1, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, - --Mage - [8] = - { - --Armor Skills - ["Cloth"] = 1, - ["Leather"] = 0, - ["Mail"] = 0, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 0, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 0, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 0, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 0, - ["Daggers"] = 1, - ["Crossbows"] = 0, - ["Wands"] = 1, - }, - --Warlock - [9] = - { - --Armor Skills - ["Cloth"] = 1, - ["Leather"] = 0, - ["Mail"] = 0, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 0, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 0, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 0, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 0, - ["Daggers"] = 1, - ["Crossbows"] = 0, - ["Wands"] = 1, - }, - --Monk - [10] = - { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 1, - ["Mail"] = 0, - ["Plate"] = 1, - ["Shields"] = 1, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 1, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 1, - ["Daggers"] = 0, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, - --Druid - [11] = - { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 1, - ["Mail"] = 0, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 0, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 1, - ["One-Handed Swords"] = 0, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 1, - ["Daggers"] = 1, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, - --Demon Hunter - [12] = - { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 1, - ["Mail"] = 0, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 0, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 0, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 1, - ["Staves"] = 0, - ["Fist Weapons"] = 1, - ["Daggers"] = 0, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, -} +--LOOT_READY MERCHANT_SHOW QUEST_POI_UPDATE QUEST_DETAIL QUEST_COMPLETE QUEST_GREETING QUEST_PROGRESS GOSSIP_SHOW SCRAPPING_MACHINE_SHOW MERCHANT_CLOSED EQUIP_BIND_CONFIRM +function(e) + local aura_env = aura_env + if e == "LOOT_READY" then --Auto Loot + local slot = 1 + local lootinfo = GetLootInfo() + for k, v in pairs(lootinfo) do + if v.locked == false then + local link = GetLootSlotLink(slot) + local looted = false + if not link then link = GetLootSlotLink(slot) end + if v.item:match("%d* Gold") or v.item:match("%d* Silver") or v.item:match("%d* Copper") then LootSlot(slot); print("|cff78cb00loot 1 |r", v.item, type, subtype) + elseif link:match("Azerite") then LootSlot(slot); print("|cff78cb00loot 2 |r", v.item, type, subtype) + elseif v.item:match("War Resources") then LootSlot(slot); print("|cff78cb00loot 3 |r", v.item, type, subtype) + elseif v.item:match("Residuum") then LootSlot(slot); print("|cff78cb00loot 4 |r", v.item, type, subtype) + elseif v.item:match("Manapearl") then LootSlot(slot); print("|cff78cb00loot 5 |r", v.item, type, subtype) + end + if link then + local icon = v.texture + local id = link:match("item:(%d+):") + if not WeakAurasSaved.CustomTrash.IconDatabase[v.item] and v.item and icon then WeakAurasSaved.CustomTrash.IconDatabase[v.item] = icon; print("Adding|cff78cb00 ", v.item, " |rto the icon database") end + if not WeakAurasSaved.CustomTrash.IDDatabase[v.item] and v.item and id then WeakAurasSaved.CustomTrash.IDDatabase[v.item] = id; print("Adding|cff3366ff ", v.item, " |rto the id database") end + local type = select(6, GetItemInfo(link)) or "" + local subtype = select(7, GetItemInfo(link)) or "" + local ilvl = select(4, GetItemInfo(link)) or 0 + local equip = select(9, GetItemInfo(link)) + if (select(7, GetItemInfo(link)) or 0) == "Mount" then LootSlot(slot); print("|cff78cb00loot 6 |r", v.item, type, subtype) + elseif ilvl > 390 then LootSlot(slot); print("|cff78cb00loot 7 |r", v.item, type, subtype) + elseif (select(7, GetItemInfo(link)) or 0) == "Herb" then LootSlot(slot); print("|cff78cb00loot 8 |r", v.item, type, subtype) + elseif (select(7, GetItemInfo(link)) or 0) == "Cooking" then LootSlot(slot); print("|cff78cb00loot 9 |r", v.item, type, subtype) + elseif (select(7, GetItemInfo(link)) or 0) == "Cloth" and type == "Tradeskill" then LootSlot(slot); print("|cff78cb00loot 10 |r", v.item, type, subtype) + elseif (select(7, GetItemInfo(link)) or 0) == "Metal & Stone" then LootSlot(slot); print("|cff78cb00loot 11 |r", v.item, type, subtype) + elseif (select(11, GetItemInfo(link)) or 0) > 150000 and v.quality == 0 then LootSlot(slot); print("|cff78cb00loot 12 |r", v.item, type, subtype) + elseif v.quality > 1 and v.quality < 4 and type ~= "Weapon" and type ~= "Armor" then LootSlot(slot); print("|cff78cb00loot 13 |r", v.item, type, subtype) + elseif v.isQuestItem == true then LootSlot(slot); print("|cff78cb00loot 14 |r", v.item, type, subtype) + elseif v.quality == 0 then LootSlot(slot); print("|cff78cb00loot 15 |r", v.item, type, subtype) + elseif aura_env.whitelist[v.item] then LootSlot(slot); print("|cff78cb00loot 16 |r", v.item, type, subtype) + --elseif type == "Quest" and subtype == "Quest" then LootSlot(slot); print("|cff78cb00loot 17 |r", v.item, type, subtype) + else + print(type, subtype) + if type == "Weapon" or type == "Armor" then + if aura_env.skills[select(3, UnitClass("player"))][subtype] == 1 then + LootSlot(slot); print("|cff78cb00loot 18 |r", v.item, type, subtype) + elseif equip == "INVTYPE_FINGER" or equip == "INVTYPE_TRINKET" or equip == "INVTYPE_CLOAK" or equip == "INVTYPE_NECK" then + LootSlot(slot); print("|cff78cb00loot 19 |r", v.item, type, subtype) + end + elseif type == "Miscellaneous" then + if subtype == "Mount" then + LootSlot(slot); print("|cff78cb00loot 20 |r", v.item, type, subtype) + end + end + end + end + if link then WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity, looted) end + slot = slot + 1 + end + end + CloseLoot() + elseif e == "EQUIP_BIND_CONFIRM" then + StaticPopup1Button1:Click() + elseif e == "SCRAPPING_MACHINE_SHOW" then + for i = 0, 4 do + for j = 1, GetContainerNumSlots(i) do + local link = select(7, GetContainerItemInfo(i, j)) + if link then + local name = GetItemInfo(link) + local rarity = select(3, GetItemInfo(link)) + local ilvl = select(4, GetItemInfo(link)) or 0 + local type = select(6, GetItemInfo(link)) + local equip = select(9, GetItemInfo(link)) or "" + local price = select(11, GetItemInfo(link)) + if aura_env.sellWhitelist[name] ~= 1 then + if name and rarity and ilvl and type and equip and price then + if (type == "Armor" or type == "Weapon") and rarity <= 3 and aura_env.getequipID(equip) then + UseContainerItem(i, j) + elseif rarity > 3 and aura_env.getequipID(equip) then + if equip ~= "INVTYPE_FINGER" then + local eqID = aura_env.getequipID(equip) + local elink = GetInventoryItemLink("player", eqID) + local eilvl = select(4, GetItemInfo(elink)) or 0 + if eilvl > ilvl + 5 then + print("Scrapping " .. link .. "over |cFF780000" .. eilvl - ilvl .. "|r ilvl difference from " .. elink) + UseContainerItem(i, j) + end + elseif equip == "INVTYPE_FINGER" then + local eqID1, eqID2 = 11, 12 + local elink1, elink2 = GetInventoryItemLink("player", eqID1), GetInventoryItemLink("player", eqID2) + local eilvl1, eilvl2 = select(4, GetItemInfo(elink1)) or 0, select(4, GetItemInfo(elink2)) or 0 + if eilvl1 > ilvl + 5 then + print("Scrapping " .. link .. " over |cFF780000" .. eilvl1 - ilvl .. "|r ilvl difference from " .. elink1) + UseContainerItem(i, j) + elseif eilvl2 > ilvl + 5 then + print("Scrapping " .. link .. " over |cFF780000" .. eilvl2 - ilvl .. "|r ilvl difference from " .. elink2) + UseContainerItem(i, j) + end + end + end + end + end + end + end + end + elseif e == "MERCHANT_SHOW" then --Sell grey and white wepaon + if CanMerchantRepair() == true then RepairAllItems() end + local i, j = 0, 1 + for c = 0, 4 do + for s = 1, GetContainerNumSlots(c) do + local link = select(7, GetContainerItemInfo(c, s)) + if link then + local name = GetItemInfo(link) + local rarity = select(3, GetItemInfo(link)) + local ilvl = select(4, GetItemInfo(link)) or 0 + local type = select(6, GetItemInfo(link)) + local price = select(11, GetItemInfo(link)) + if price and price > 0 then + if aura_env.sellWhitelist[name] ~= 1 then + if rarity == 0 then + aura_env.toSell[#aura_env.toSell + 1] = {["c"] = c, ["s"] = s} + elseif (type == "Armor" or type == "Weapon") and ilvl < 350 then + aura_env.toSell[#aura_env.toSell + 1] = {["c"] = c, ["s"] = s} + end + end + end + end + end + end + aura_env.ticker = C_Timer.NewTicker(0.15, function() + if aura_env.toSell[1] then + UseContainerItem(aura_env.toSell[1].c, aura_env.toSell[1].s) + table.remove(aura_env.toSell, 1) + else + aura_env.ticker:Cancel() + end + if j >= GetContainerNumSlots(i) then i = i + 1; j = 1 end + if i >= 4 then aura_env.ticker:Cancel() end + end) + elseif e == "MERCHANT_CLOSED" then + if aura_env.ticker then aura_env.ticker:Cancel() end + aura_env.toSell = {} + elseif e == "QUEST_POI_UPDATE" then + CloseGossip() + elseif e == "QUEST_DETAIL" then + AcceptQuest() + elseif e == "QUEST_COMPLETE" then + if GetNumQuestChoices() <= 1 then + GetQuestReward(1) + end + elseif e == "GOSSIP_SHOW" then + local quests = GetNumGossipAvailableQuests() + local complquests = GetNumGossipActiveQuests() + local opt = GetNumGossipOptions() + if complquests > 0 and opt == 0 then + for i = 1, complquests do + SelectGossipActiveQuest(i) + end + end + if quests > 0 and opt == 0 then + SelectGossipAvailableQuest(1) + end + if opt == 1 and quests + complquests == 0 then + SelectGossipOption(1) + end + elseif e == "QUEST_GREETING" then + local quests = GetNumGossipAvailableQuests() + local complquests = GetNumGossipActiveQuests() + if complquests > 0 then + for i = 1, complquests do + SelectActiveQuest(1) + end + end + if quests > 0 then + SelectAvailableQuest(1) + end + elseif e == "QUEST_PROGRESS" then + if IsQuestCompletable(i) then + CompleteQuest() + end + end +end + +--INIT +aura_env.whitelist = +{ + ["Pygmy Suckerfish"] = 1, + ["Drakkari Offerings"] = 1, + ["Deepcoral Pod"] = 1, + ["Hardened Spring"] = 1, + ["Machined Gear Assembly"] = 1, + ["Tempered Plating"] = 1, + ["Hefty Glimmershell"] = 1, + ["Fresh Meat"] = 1, + ["Wood"] = 1, +} +aura_env.sellWhitelist = +{ + ["Blacksmith Hammer"] = 1, + ["Endless Tincture of Renewed Combat"] = 1, + ["Mr. Munchykins"] = 1, +} +aura_env.toSell = {} +aura_env.getequipID = function(equip) + if equip == "INVTYPE_HEAD" then return 1 + elseif equip == "INVTYPE_NECK" then return 2 + elseif equip == "INVTYPE_SHOULDER" then return 3 + elseif equip == "INVTYPE_BODY" then return 4 + elseif equip == "INVTYPE_CHEST" or equip == "INVTYPE_ROBE" then return 5 + elseif equip == "INVTYPE_WAIST" then return 6 + elseif equip == "INVTYPE_LEGS" then return 7 + elseif equip == "INVTYPE_FEET" then return 8 + elseif equip == "INVTYPE_WRIST" then return 9 + elseif equip == "INVTYPE_HAND" then return 10 + elseif equip == "INVTYPE_CLOAK" then return 15 + elseif equip == "INVTYPE_WEAPON" or equip == "INVTYPE_WEAPONMAINHAND" or equip == "INVTYPE_2HWEAPON" then return 16 + elseif equip == "INVTYPE_SHIELD" then return 17 + else return nil end +end +aura_env.skills = +{ + --Warrior + [1] = + { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 0, + ["Mail"] = 0, + ["Plate"] = 1, + ["Shields"] = 1, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 1, + ["Bows"] = 1, + ["Guns"] = 1, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 1, + ["Polearms"] = 1, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 1, + ["Warglaives"] = 1, + ["Staves"] = 1, + ["Fist Weapons"] = 1, + ["Daggers"] = 1, + ["Crossbows"] = 1, + ["Wands"] = 0, + }, + --Paladin + [2] = + { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 0, + ["Mail"] = 0, + ["Plate"] = 1, + ["Shields"] = 1, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 1, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 1, + ["Polearms"] = 1, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 1, + ["Warglaives"] = 0, + ["Staves"] = 0, + ["Fist Weapons"] = 0, + ["Daggers"] = 0, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, + --Hunter + [3] = + { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 0, + ["Mail"] = 1, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 1, + ["Bows"] = 1, + ["Guns"] = 1, + ["One-Handed Maces"] = 0, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 1, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 1, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 1, + ["Daggers"] = 1, + ["Crossbows"] = 1, + ["Wands"] = 0, + }, + --Rogue + [4] = + { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 1, + ["Mail"] = 0, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 0, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 0, + ["Fist Weapons"] = 1, + ["Daggers"] = 1, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, + --Priest + [5] = + { + --Armor Skills + ["Cloth"] = 1, + ["Leather"] = 0, + ["Mail"] = 0, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 0, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 0, + ["One-Handed Swords"] = 0, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 0, + ["Daggers"] = 1, + ["Crossbows"] = 0, + ["Wands"] = 1, + }, + --Death Knight + [6] = + { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 0, + ["Mail"] = 0, + ["Plate"] = 1, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 1, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 1, + ["Polearms"] = 1, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 1, + ["Warglaives"] = 0, + ["Staves"] = 0, + ["Fist Weapons"] = 0, + ["Daggers"] = 0, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, + --Shaman + [7] = + { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 0, + ["Mail"] = 1, + ["Plate"] = 0, + ["Shields"] = 1, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 0, + ["One-Handed Swords"] = 0, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 1, + ["Daggers"] = 1, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, + --Mage + [8] = + { + --Armor Skills + ["Cloth"] = 1, + ["Leather"] = 0, + ["Mail"] = 0, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 0, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 0, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 0, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 0, + ["Daggers"] = 1, + ["Crossbows"] = 0, + ["Wands"] = 1, + }, + --Warlock + [9] = + { + --Armor Skills + ["Cloth"] = 1, + ["Leather"] = 0, + ["Mail"] = 0, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 0, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 0, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 0, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 0, + ["Daggers"] = 1, + ["Crossbows"] = 0, + ["Wands"] = 1, + }, + --Monk + [10] = + { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 1, + ["Mail"] = 0, + ["Plate"] = 1, + ["Shields"] = 1, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 1, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 1, + ["Daggers"] = 0, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, + --Druid + [11] = + { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 1, + ["Mail"] = 0, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 0, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 1, + ["One-Handed Swords"] = 0, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 1, + ["Daggers"] = 1, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, + --Demon Hunter + [12] = + { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 1, + ["Mail"] = 0, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 0, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 0, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 1, + ["Staves"] = 0, + ["Fist Weapons"] = 1, + ["Daggers"] = 0, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, +} diff --git a/Complete Projects/BFA/Azerite Power Energize.lua b/WeakAuras/Projects/ByExp/BFA/Azerite Power Energize.lua similarity index 95% rename from Complete Projects/BFA/Azerite Power Energize.lua rename to WeakAuras/Projects/ByExp/BFA/Azerite Power Energize.lua index 2b16d0e..b71a60e 100644 --- a/Complete Projects/BFA/Azerite Power Energize.lua +++ b/WeakAuras/Projects/ByExp/BFA/Azerite Power Energize.lua @@ -1,27 +1,27 @@ ---COMBAT_LOG_EVENT_UNFILTERED PLAYER_REGEN_DISABLED -function(e, ...) - if e == "COMBAT_LOG_EVENT_UNFILTERED" then - local se = select(2, ...) - if se == "SPELL_ENERGIZE" then - local caster = select(9, ...) - if caster == UnitName("player") then - local spell = select(13, ...) - if spell == "Lucid Dreams" then - local amount = select(15, ...) - aura_env.amount = aura_env.amount + amount - return true - end - end - end - elseif e == "PLAYER_REGEN_DISABLED" then - aura_env.amount = 0 - end -end - ---DISPLAY -function() - return aura_env.amount -end - ---INIT +--COMBAT_LOG_EVENT_UNFILTERED PLAYER_REGEN_DISABLED +function(e, ...) + if e == "COMBAT_LOG_EVENT_UNFILTERED" then + local se = select(2, ...) + if se == "SPELL_ENERGIZE" then + local caster = select(9, ...) + if caster == UnitName("player") then + local spell = select(13, ...) + if spell == "Lucid Dreams" then + local amount = select(15, ...) + aura_env.amount = aura_env.amount + amount + return true + end + end + end + elseif e == "PLAYER_REGEN_DISABLED" then + aura_env.amount = 0 + end +end + +--DISPLAY +function() + return aura_env.amount +end + +--INIT aura_env.amount = 0 \ No newline at end of file diff --git a/Complete Projects/BFA/Block Ratio.lua b/WeakAuras/Projects/ByExp/BFA/Block Ratio.lua similarity index 96% rename from Complete Projects/BFA/Block Ratio.lua rename to WeakAuras/Projects/ByExp/BFA/Block Ratio.lua index ad3ece5..b79ebac 100644 --- a/Complete Projects/BFA/Block Ratio.lua +++ b/WeakAuras/Projects/ByExp/BFA/Block Ratio.lua @@ -1,64 +1,64 @@ ---COMBAT_LOG_EVENT_UNFILTERED -function(...) - local se = select(3, ...) - if se == "SWING_DAMAGE" then - local dest = select(10, ...) - if dest == UnitName("player") then - aura_env.nummelee = aura_env.nummelee + 1 - local bloq = select(17, ...) - if bloq then - aura_env.numbloq = aura_env.numbloq + 1 - local amount = select(13, ...) - local total = amount + bloq - local pbloq = bloq / total * 100 - aura_env.bloqs[#aura_env.bloqs + 1] = pbloq - local count = 1 - for k,v in ipairs(aura_env.bloqs) do - aura_env.pbloq = aura_env.pbloq + v - count = count + 1 - end - aura_env.pbloq = aura_env.pbloq / count - return true - end - end - elseif se == "SPELL_DAMAGE" then - local dest = select(10, ...) - if dest == UnitName("player") then - aura_env.nummelee = aura_env.nummelee + 1 - local bloq = select(20, ...) - if bloq then - aura_env.numbloq = aura_env.numbloq + 1 - local amount = select(16, ...) - local total = amount + bloq - local pbloq = bloq / total * 100 - aura_env.bloqs[#aura_env.bloqs + 1] = pbloq - local count = 1 - for k,v in ipairs(aura_env.bloqs) do - aura_env.pbloq = aura_env.pbloq + v - count = count + 1 - end - aura_env.pbloq = aura_env.pbloq / count - return true - end - end - end -end - ---DISPLAY -function() - return aura_env.round(aura_env.pbloq, 2) .. "\n" .. aura_env.round((aura_env.numbloq / aura_env.nummelee) * 100, 2) -end - ---INIT -aura_env.bloqs = {} -aura_env.numbloq = 0 -aura_env.nummelee = 0 -aura_env.pbloq = 0 -aura_env.round = function(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var +--COMBAT_LOG_EVENT_UNFILTERED +function(...) + local se = select(3, ...) + if se == "SWING_DAMAGE" then + local dest = select(10, ...) + if dest == UnitName("player") then + aura_env.nummelee = aura_env.nummelee + 1 + local bloq = select(17, ...) + if bloq then + aura_env.numbloq = aura_env.numbloq + 1 + local amount = select(13, ...) + local total = amount + bloq + local pbloq = bloq / total * 100 + aura_env.bloqs[#aura_env.bloqs + 1] = pbloq + local count = 1 + for k,v in ipairs(aura_env.bloqs) do + aura_env.pbloq = aura_env.pbloq + v + count = count + 1 + end + aura_env.pbloq = aura_env.pbloq / count + return true + end + end + elseif se == "SPELL_DAMAGE" then + local dest = select(10, ...) + if dest == UnitName("player") then + aura_env.nummelee = aura_env.nummelee + 1 + local bloq = select(20, ...) + if bloq then + aura_env.numbloq = aura_env.numbloq + 1 + local amount = select(16, ...) + local total = amount + bloq + local pbloq = bloq / total * 100 + aura_env.bloqs[#aura_env.bloqs + 1] = pbloq + local count = 1 + for k,v in ipairs(aura_env.bloqs) do + aura_env.pbloq = aura_env.pbloq + v + count = count + 1 + end + aura_env.pbloq = aura_env.pbloq / count + return true + end + end + end +end + +--DISPLAY +function() + return aura_env.round(aura_env.pbloq, 2) .. "\n" .. aura_env.round((aura_env.numbloq / aura_env.nummelee) * 100, 2) +end + +--INIT +aura_env.bloqs = {} +aura_env.numbloq = 0 +aura_env.nummelee = 0 +aura_env.pbloq = 0 +aura_env.round = function(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var end \ No newline at end of file diff --git a/Complete Projects/BFA/Block and Absorb Melee.lua b/WeakAuras/Projects/ByExp/BFA/Block and Absorb Melee.lua similarity index 97% rename from Complete Projects/BFA/Block and Absorb Melee.lua rename to WeakAuras/Projects/ByExp/BFA/Block and Absorb Melee.lua index 3af0fb6..24063c3 100644 --- a/Complete Projects/BFA/Block and Absorb Melee.lua +++ b/WeakAuras/Projects/ByExp/BFA/Block and Absorb Melee.lua @@ -1,162 +1,162 @@ ---COMBAT_LOG_EVENT_UNFILTERED -function(...) - local se = select(3, ...) - if se == "SWING_DAMAGE" then - local dest = select(10, ...) - if dest == UnitName("player") then - local amount = select(13, ...) - local block = select(17, ...) or 0 - local absorb = select(18, ...) or 0 - if amount then - local output = amount - local total = amount - total = total + block + absorb - local rel = aura_env.round(((absorb + block) / total) * 100, 2) or 0 - output = output .. " " .. block .. " " .. absorb .. " " .. rel - if #aura_env.melee == aura_env.lines then - table.remove(aura_env.melee, 1) - table.insert(aura_env.melee, output) - else - table.insert(aura_env.melee, output) - end - return true - end - end - elseif se == "SPELL_DAMAGE" then - local dest = select(10, ...) - if dest == UnitName("player") then - local amount = select(16, ...) - local block = select(20, ...) or 0 - local absorb = select(21, ...) or 0 - if amount then - local output = amount - local total = amount - total = total + block + absorb - local rel = aura_env.round(((absorb + block) / total) * 100, 2) or 0 - output = output .. " " .. block .. " " .. absorb .. " " .. rel - if #aura_env.melee == aura_env.lines then - table.remove(aura_env.melee, 1) - table.insert(aura_env.melee, output) - else - table.insert(aura_env.melee, output) - end - return true - end - end - end -end - ---DISPLAY -function() - local meleeT, blockT, absorbT, perT = "", "", "", "" - local melee, block, absorb, per = 0, 0, 0, 0 - for i = #aura_env.melee, 1, -1 do - melee = aura_env.melee[i]:match("(%d+)") - if melee then - melee = tonumber(melee) - block = aura_env.melee[i]:match("%d+ (%d+)") or 0 - block = tonumber(block) - absorb = aura_env.melee[i]:match("%d+ %d+ (%d+)") or 0 - absorb = tonumber(absorb) - if block or absorb then - per = aura_env.melee[i]:match("%d+ %d+ %d+ (%d+%.?%d*)") or 0 - per = tonumber(per) - end - meleeT = meleeT .. aura_env.shorten(melee) .. "\n" - blockT = blockT .. aura_env.shorten(block) .. "\n" - absorbT = absorbT .. aura_env.shorten(absorb) .. "\n" - perT = perT .. aura_env.shorten(per) .. "\n" - end - end - aura_env.region.melee:SetText(meleeT) - aura_env.region.block:SetText(blockT) - aura_env.region.absorb:SetText(absorbT) - aura_env.region.percentage:SetText(perT) -end - ---INIT -aura_env.lines = 10 - ----------------------------------------- --- PLEASE DO NOT EDIT BELOW THIS LINE -- ----------------------------------------- -local fontsize = select(2, aura_env.region.text:GetFont()) -aura_env.region:SetWidth(fontsize * 20) -aura_env.region:SetHeight(fontsize * aura_env.lines) -aura_env.melee = {""} -aura_env.round = function(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var -end -if not aura_env.region.melee then - local melee = aura_env.region:CreateFontString(nil, aura_env.region) - aura_env.region.melee = melee -end -aura_env.region.melee:SetFont(aura_env.region.text:GetFont()) -aura_env.region.melee:SetTextColor(1, 1, 1) -aura_env.region.melee:SetPoint("CENTER", aura_env.region, "CENTER", -fontsize * 7.5, 0) -aura_env.region.melee:SetWidth(fontsize * 5) -aura_env.region.melee:SetJustifyH("LEFT") -aura_env.region.melee:SetText("") -aura_env.region.melee:Show() - -if not aura_env.region.block then - local block = aura_env.region:CreateFontString(nil, aura_env.region) - aura_env.region.block = block -end -aura_env.region.block:SetFont(aura_env.region.text:GetFont()) -aura_env.region.block:SetTextColor(0.75, 0.23, 0.23) -aura_env.region.block:SetPoint("CENTER", aura_env.region, "CENTER", -fontsize * 2.5, 0) -aura_env.region.block:SetWidth(fontsize * 5) -aura_env.region.block:SetJustifyH("LEFT") -aura_env.region.block:SetText("") -aura_env.region.block:Show() - -if not aura_env.region.absorb then - local absorb = aura_env.region:CreateFontString(nil, aura_env.region) - aura_env.region.absorb = absorb -end -aura_env.region.absorb:SetFont(aura_env.region.text:GetFont()) -aura_env.region.absorb:SetTextColor(0.1227, 0.4089, 0.65) -aura_env.region.absorb:SetPoint("CENTER", aura_env.region, "CENTER", fontsize * 2.5, 0) -aura_env.region.absorb:SetWidth(fontsize * 5) -aura_env.region.absorb:SetJustifyH("LEFT") -aura_env.region.absorb:SetText("") -aura_env.region.absorb:Show() - -if not aura_env.region.percentage then - local percentage = aura_env.region:CreateFontString(nil, aura_env.region) - aura_env.region.percentage = percentage -end -aura_env.region.percentage:SetFont(aura_env.region.text:GetFont()) -aura_env.region.percentage:SetTextColor(0.32, 0.32, 0.34) -aura_env.region.percentage:SetPoint("CENTER", aura_env.region, "CENTER", fontsize * 7.5, 0) -aura_env.region.percentage:SetWidth(fontsize * 5) -aura_env.region.percentage:SetJustifyH("LEFT") -aura_env.region.percentage:SetText("") -aura_env.region.percentage:Show() - -aura_env.shorten = function(val) - local function round(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var - end - local n = 2 - if val <= 1e3 then - return round(val, n) - elseif val > 1e3 and val < 1e6 then - return round(val / 1e3, n) .. "k" - elseif val > 1e6 and val < 1e9 then - return round(val / 1e6, n) .. "M" - elseif val > 1e9 then - return round(val / 1e9, n) .. "G" - end +--COMBAT_LOG_EVENT_UNFILTERED +function(...) + local se = select(3, ...) + if se == "SWING_DAMAGE" then + local dest = select(10, ...) + if dest == UnitName("player") then + local amount = select(13, ...) + local block = select(17, ...) or 0 + local absorb = select(18, ...) or 0 + if amount then + local output = amount + local total = amount + total = total + block + absorb + local rel = aura_env.round(((absorb + block) / total) * 100, 2) or 0 + output = output .. " " .. block .. " " .. absorb .. " " .. rel + if #aura_env.melee == aura_env.lines then + table.remove(aura_env.melee, 1) + table.insert(aura_env.melee, output) + else + table.insert(aura_env.melee, output) + end + return true + end + end + elseif se == "SPELL_DAMAGE" then + local dest = select(10, ...) + if dest == UnitName("player") then + local amount = select(16, ...) + local block = select(20, ...) or 0 + local absorb = select(21, ...) or 0 + if amount then + local output = amount + local total = amount + total = total + block + absorb + local rel = aura_env.round(((absorb + block) / total) * 100, 2) or 0 + output = output .. " " .. block .. " " .. absorb .. " " .. rel + if #aura_env.melee == aura_env.lines then + table.remove(aura_env.melee, 1) + table.insert(aura_env.melee, output) + else + table.insert(aura_env.melee, output) + end + return true + end + end + end +end + +--DISPLAY +function() + local meleeT, blockT, absorbT, perT = "", "", "", "" + local melee, block, absorb, per = 0, 0, 0, 0 + for i = #aura_env.melee, 1, -1 do + melee = aura_env.melee[i]:match("(%d+)") + if melee then + melee = tonumber(melee) + block = aura_env.melee[i]:match("%d+ (%d+)") or 0 + block = tonumber(block) + absorb = aura_env.melee[i]:match("%d+ %d+ (%d+)") or 0 + absorb = tonumber(absorb) + if block or absorb then + per = aura_env.melee[i]:match("%d+ %d+ %d+ (%d+%.?%d*)") or 0 + per = tonumber(per) + end + meleeT = meleeT .. aura_env.shorten(melee) .. "\n" + blockT = blockT .. aura_env.shorten(block) .. "\n" + absorbT = absorbT .. aura_env.shorten(absorb) .. "\n" + perT = perT .. aura_env.shorten(per) .. "\n" + end + end + aura_env.region.melee:SetText(meleeT) + aura_env.region.block:SetText(blockT) + aura_env.region.absorb:SetText(absorbT) + aura_env.region.percentage:SetText(perT) +end + +--INIT +aura_env.lines = 10 + +---------------------------------------- +-- PLEASE DO NOT EDIT BELOW THIS LINE -- +---------------------------------------- +local fontsize = select(2, aura_env.region.text:GetFont()) +aura_env.region:SetWidth(fontsize * 20) +aura_env.region:SetHeight(fontsize * aura_env.lines) +aura_env.melee = {""} +aura_env.round = function(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var +end +if not aura_env.region.melee then + local melee = aura_env.region:CreateFontString(nil, aura_env.region) + aura_env.region.melee = melee +end +aura_env.region.melee:SetFont(aura_env.region.text:GetFont()) +aura_env.region.melee:SetTextColor(1, 1, 1) +aura_env.region.melee:SetPoint("CENTER", aura_env.region, "CENTER", -fontsize * 7.5, 0) +aura_env.region.melee:SetWidth(fontsize * 5) +aura_env.region.melee:SetJustifyH("LEFT") +aura_env.region.melee:SetText("") +aura_env.region.melee:Show() + +if not aura_env.region.block then + local block = aura_env.region:CreateFontString(nil, aura_env.region) + aura_env.region.block = block +end +aura_env.region.block:SetFont(aura_env.region.text:GetFont()) +aura_env.region.block:SetTextColor(0.75, 0.23, 0.23) +aura_env.region.block:SetPoint("CENTER", aura_env.region, "CENTER", -fontsize * 2.5, 0) +aura_env.region.block:SetWidth(fontsize * 5) +aura_env.region.block:SetJustifyH("LEFT") +aura_env.region.block:SetText("") +aura_env.region.block:Show() + +if not aura_env.region.absorb then + local absorb = aura_env.region:CreateFontString(nil, aura_env.region) + aura_env.region.absorb = absorb +end +aura_env.region.absorb:SetFont(aura_env.region.text:GetFont()) +aura_env.region.absorb:SetTextColor(0.1227, 0.4089, 0.65) +aura_env.region.absorb:SetPoint("CENTER", aura_env.region, "CENTER", fontsize * 2.5, 0) +aura_env.region.absorb:SetWidth(fontsize * 5) +aura_env.region.absorb:SetJustifyH("LEFT") +aura_env.region.absorb:SetText("") +aura_env.region.absorb:Show() + +if not aura_env.region.percentage then + local percentage = aura_env.region:CreateFontString(nil, aura_env.region) + aura_env.region.percentage = percentage +end +aura_env.region.percentage:SetFont(aura_env.region.text:GetFont()) +aura_env.region.percentage:SetTextColor(0.32, 0.32, 0.34) +aura_env.region.percentage:SetPoint("CENTER", aura_env.region, "CENTER", fontsize * 7.5, 0) +aura_env.region.percentage:SetWidth(fontsize * 5) +aura_env.region.percentage:SetJustifyH("LEFT") +aura_env.region.percentage:SetText("") +aura_env.region.percentage:Show() + +aura_env.shorten = function(val) + local function round(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var + end + local n = 2 + if val <= 1e3 then + return round(val, n) + elseif val > 1e3 and val < 1e6 then + return round(val / 1e3, n) .. "k" + elseif val > 1e6 and val < 1e9 then + return round(val / 1e6, n) .. "M" + elseif val > 1e9 then + return round(val / 1e9, n) .. "G" + end end \ No newline at end of file diff --git a/Complete Projects/BFA/CD.lua b/WeakAuras/Projects/ByExp/BFA/CD.lua similarity index 97% rename from Complete Projects/BFA/CD.lua rename to WeakAuras/Projects/ByExp/BFA/CD.lua index 2f58ea9..e3589f7 100644 --- a/Complete Projects/BFA/CD.lua +++ b/WeakAuras/Projects/ByExp/BFA/CD.lua @@ -1,89 +1,89 @@ ---COMBAT_LOG_EVENT_UNFILTERED -function(...) - local se = select(3, ...) - if se == "SPELL_CAST_SUCCESS" then - local dest = select(6, ...) - if dest == UnitName("player") then - local name = select(14, ...) - if name == "Shield Block" or name == "Ignore Pain" then - local c1, c2, c3, c4 = "|cFFFFFFFF", "|cFFFFFFFF", "|cFFFFFFFF", "|cFFFFFFFF" - local Avatar = GetSpellCooldown("Avatar") - local AvatarD = select(2, GetSpellCooldown("Avatar")) - local LastStand = GetSpellCooldown("Last Stand") - local ShieldWall = GetSpellCooldown("Shield Wall") - local DemoralizingShout = GetSpellCooldown("Demoralizing Shout") - local DemoralizingShoutD = select(2, GetSpellCooldown("Demoralizing Shout")) - if Avatar > 0 and AvatarD > 2 then - if name == "Shield Block" then - aura_env.AvatarCD = aura_env.AvatarCD + 3 - else - aura_env.AvatarCD = aura_env.AvatarCD + 4 - end - end - if LastStand > 0 then - if name == "Shield Block" then - aura_env.LastStandCD = aura_env.LastStandCD + 3 - else - aura_env.LastStandCD = aura_env.LastStandCD + 4 - end - end - if ShieldWall > 0 then - if name == "Shield Block" then - aura_env.ShieldWallCD = aura_env.ShieldWallCD + 3 - else - aura_env.ShieldWallCD = aura_env.ShieldWallCD + 4 - end - end - if DemoralizingShout > 0 and DemoralizingShoutD > 2 then - if name == "Shield Block" then - aura_env.DemoralizingShoutCD = aura_env.DemoralizingShoutCD + 3 - else - aura_env.DemoralizingShoutCD = aura_env.DemoralizingShoutCD + 4 - end - end - if AvatarD < 2 then c1 = "|cFF0080FF" end - if LastStand == 0 then c2 = "|cFF0080FF" end - if ShieldWall == 0 then c3 = "|cFF0080FF" end - if DemoralizingShoutD < 2 then c4 = "|cFF0080FF" end - aura_env.region.text2:SetText(c1 .. aura_env.AvatarCD .. "|r\n" .. c2 .. aura_env.LastStandCD .. "|r\n" .. c3 .. aura_env.ShieldWallCD .. "|r\n" .. c4 .. aura_env.DemoralizingShoutCD .. "|r") - elseif name == "Avatar" then - aura_env.AvatarCD = 0 - elseif name == "Last Stand" then - aura_env.LastStandCD = 0 - elseif name == "Shield Wall" then - aura_env.ShieldWallCD = 0 - elseif name == "Demoralizing Shout" then - aura_env.DemoralizingShoutCD = 0 - end - end - end -end - ---INIT -aura_env.AvatarCD, aura_env.LastStandCD, aura_env.ShieldWallCD, aura_env.DemoralizingShoutCD = 0, 0, 0, 0 -local fontsize = 16 -local font, size, flags = aura_env.region.text:GetFont() -if not aura_env.region.text then - local text = aura_env.region:CreateFontString(nil, aura_env.region) - aura_env.region.text = text - print("ok!") -end -aura_env.region:SetWidth(128) -aura_env.region.text:SetFont(font, size, flags) -aura_env.region.text:SetTextColor(1,1,1,1) -aura_env.region.text:SetPoint("CENTER", aura_env.region, "CENTER") -aura_env.region.text:SetJustifyH("LEFT") -aura_env.region.text:SetText("Avatar\nLast Stand\nShield Wall\nDemoralizing Shout") -aura_env.region.text:Show() - -if not aura_env.region.text2 then - local text2 = aura_env.region:CreateFontString(nil, aura_env.region) - aura_env.region.text2 = text2 - print("ok!") -end -aura_env.region.text2:SetFont(font, size, flags) -aura_env.region.text2:SetTextColor(1,1,1,1) -aura_env.region.text2:SetPoint("RIGHT", aura_env.region, "RIGHT", 128, 0) -aura_env.region.text2:SetJustifyH("LEFT") -aura_env.region.text2:SetText("0" .. "\n" .. "0" .. "\n" .. "0" .. "\n" .. "0") +--COMBAT_LOG_EVENT_UNFILTERED +function(...) + local se = select(3, ...) + if se == "SPELL_CAST_SUCCESS" then + local dest = select(6, ...) + if dest == UnitName("player") then + local name = select(14, ...) + if name == "Shield Block" or name == "Ignore Pain" then + local c1, c2, c3, c4 = "|cFFFFFFFF", "|cFFFFFFFF", "|cFFFFFFFF", "|cFFFFFFFF" + local Avatar = GetSpellCooldown("Avatar") + local AvatarD = select(2, GetSpellCooldown("Avatar")) + local LastStand = GetSpellCooldown("Last Stand") + local ShieldWall = GetSpellCooldown("Shield Wall") + local DemoralizingShout = GetSpellCooldown("Demoralizing Shout") + local DemoralizingShoutD = select(2, GetSpellCooldown("Demoralizing Shout")) + if Avatar > 0 and AvatarD > 2 then + if name == "Shield Block" then + aura_env.AvatarCD = aura_env.AvatarCD + 3 + else + aura_env.AvatarCD = aura_env.AvatarCD + 4 + end + end + if LastStand > 0 then + if name == "Shield Block" then + aura_env.LastStandCD = aura_env.LastStandCD + 3 + else + aura_env.LastStandCD = aura_env.LastStandCD + 4 + end + end + if ShieldWall > 0 then + if name == "Shield Block" then + aura_env.ShieldWallCD = aura_env.ShieldWallCD + 3 + else + aura_env.ShieldWallCD = aura_env.ShieldWallCD + 4 + end + end + if DemoralizingShout > 0 and DemoralizingShoutD > 2 then + if name == "Shield Block" then + aura_env.DemoralizingShoutCD = aura_env.DemoralizingShoutCD + 3 + else + aura_env.DemoralizingShoutCD = aura_env.DemoralizingShoutCD + 4 + end + end + if AvatarD < 2 then c1 = "|cFF0080FF" end + if LastStand == 0 then c2 = "|cFF0080FF" end + if ShieldWall == 0 then c3 = "|cFF0080FF" end + if DemoralizingShoutD < 2 then c4 = "|cFF0080FF" end + aura_env.region.text2:SetText(c1 .. aura_env.AvatarCD .. "|r\n" .. c2 .. aura_env.LastStandCD .. "|r\n" .. c3 .. aura_env.ShieldWallCD .. "|r\n" .. c4 .. aura_env.DemoralizingShoutCD .. "|r") + elseif name == "Avatar" then + aura_env.AvatarCD = 0 + elseif name == "Last Stand" then + aura_env.LastStandCD = 0 + elseif name == "Shield Wall" then + aura_env.ShieldWallCD = 0 + elseif name == "Demoralizing Shout" then + aura_env.DemoralizingShoutCD = 0 + end + end + end +end + +--INIT +aura_env.AvatarCD, aura_env.LastStandCD, aura_env.ShieldWallCD, aura_env.DemoralizingShoutCD = 0, 0, 0, 0 +local fontsize = 16 +local font, size, flags = aura_env.region.text:GetFont() +if not aura_env.region.text then + local text = aura_env.region:CreateFontString(nil, aura_env.region) + aura_env.region.text = text + print("ok!") +end +aura_env.region:SetWidth(128) +aura_env.region.text:SetFont(font, size, flags) +aura_env.region.text:SetTextColor(1,1,1,1) +aura_env.region.text:SetPoint("CENTER", aura_env.region, "CENTER") +aura_env.region.text:SetJustifyH("LEFT") +aura_env.region.text:SetText("Avatar\nLast Stand\nShield Wall\nDemoralizing Shout") +aura_env.region.text:Show() + +if not aura_env.region.text2 then + local text2 = aura_env.region:CreateFontString(nil, aura_env.region) + aura_env.region.text2 = text2 + print("ok!") +end +aura_env.region.text2:SetFont(font, size, flags) +aura_env.region.text2:SetTextColor(1,1,1,1) +aura_env.region.text2:SetPoint("RIGHT", aura_env.region, "RIGHT", 128, 0) +aura_env.region.text2:SetJustifyH("LEFT") +aura_env.region.text2:SetText("0" .. "\n" .. "0" .. "\n" .. "0" .. "\n" .. "0") aura_env.region.text2:Show() \ No newline at end of file diff --git a/Complete Projects/BFA/CD2.lua b/WeakAuras/Projects/ByExp/BFA/CD2.lua similarity index 97% rename from Complete Projects/BFA/CD2.lua rename to WeakAuras/Projects/ByExp/BFA/CD2.lua index b985af3..debe9e1 100644 --- a/Complete Projects/BFA/CD2.lua +++ b/WeakAuras/Projects/ByExp/BFA/CD2.lua @@ -1,50 +1,50 @@ ---COMBAT_LOG_EVENT_UNFILTERED -function(...) - local se = select(3, ...) - if se == "SPELL_CAST_SUCCESS" then - local caster = select(6, ...) - if caster == UnitName("player") then - local name = select(14, ...) - if name == "Rampage" then - local c1 = "|cFFFFFFFF" - local Recklessness = GetSpellCooldown("Recklessness") - local RecklessnessD = select(2, GetSpellCooldown("Recklessness")) - if Recklessness > 0 and RecklessnessD > 2 then - aura_env.RecklessnessCD = aura_env.RecklessnessCD + 3.75 - end - if RecklessnessD < 2 then c1 = "|cFF0080FF" end - aura_env.region.text2:SetText(c1 .. aura_env.RecklessnessCD .. "|r") - elseif name == "Recklessness" then - aura_env.RecklessnessCD = 0 - end - end - end -end - ---INIT -aura_env.RecklessnessCD = 0 -local font, size, flags = aura_env.region.text:GetFont() -if not aura_env.region.text then - local text = aura_env.region:CreateFontString(nil, aura_env.region) - aura_env.region.text = text - print("ok!") -end -aura_env.region:SetWidth(128) -aura_env.region.text:SetFont(font, size, flags) -aura_env.region.text:SetTextColor(1,1,1,1) -aura_env.region.text:SetPoint("CENTER", aura_env.region, "CENTER") -aura_env.region.text:SetJustifyH("LEFT") -aura_env.region.text:SetText("Recklessness") -aura_env.region.text:Show() - -if not aura_env.region.text2 then - local text2 = aura_env.region:CreateFontString(nil, aura_env.region) - aura_env.region.text2 = text2 - print("ok!") -end -aura_env.region.text2:SetFont(font, size, flags) -aura_env.region.text2:SetTextColor(1,1,1,1) -aura_env.region.text2:SetPoint("RIGHT", aura_env.region, "RIGHT", 128, 0) -aura_env.region.text2:SetJustifyH("LEFT") -aura_env.region.text2:SetText("0") +--COMBAT_LOG_EVENT_UNFILTERED +function(...) + local se = select(3, ...) + if se == "SPELL_CAST_SUCCESS" then + local caster = select(6, ...) + if caster == UnitName("player") then + local name = select(14, ...) + if name == "Rampage" then + local c1 = "|cFFFFFFFF" + local Recklessness = GetSpellCooldown("Recklessness") + local RecklessnessD = select(2, GetSpellCooldown("Recklessness")) + if Recklessness > 0 and RecklessnessD > 2 then + aura_env.RecklessnessCD = aura_env.RecklessnessCD + 3.75 + end + if RecklessnessD < 2 then c1 = "|cFF0080FF" end + aura_env.region.text2:SetText(c1 .. aura_env.RecklessnessCD .. "|r") + elseif name == "Recklessness" then + aura_env.RecklessnessCD = 0 + end + end + end +end + +--INIT +aura_env.RecklessnessCD = 0 +local font, size, flags = aura_env.region.text:GetFont() +if not aura_env.region.text then + local text = aura_env.region:CreateFontString(nil, aura_env.region) + aura_env.region.text = text + print("ok!") +end +aura_env.region:SetWidth(128) +aura_env.region.text:SetFont(font, size, flags) +aura_env.region.text:SetTextColor(1,1,1,1) +aura_env.region.text:SetPoint("CENTER", aura_env.region, "CENTER") +aura_env.region.text:SetJustifyH("LEFT") +aura_env.region.text:SetText("Recklessness") +aura_env.region.text:Show() + +if not aura_env.region.text2 then + local text2 = aura_env.region:CreateFontString(nil, aura_env.region) + aura_env.region.text2 = text2 + print("ok!") +end +aura_env.region.text2:SetFont(font, size, flags) +aura_env.region.text2:SetTextColor(1,1,1,1) +aura_env.region.text2:SetPoint("RIGHT", aura_env.region, "RIGHT", 128, 0) +aura_env.region.text2:SetJustifyH("LEFT") +aura_env.region.text2:SetText("0") aura_env.region.text2:Show() \ No newline at end of file diff --git a/Complete Projects/BFA/Chat Macro b/WeakAuras/Projects/ByExp/BFA/Chat Macro similarity index 97% rename from Complete Projects/BFA/Chat Macro rename to WeakAuras/Projects/ByExp/BFA/Chat Macro index bbb68df..5503018 100644 --- a/Complete Projects/BFA/Chat Macro +++ b/WeakAuras/Projects/ByExp/BFA/Chat Macro @@ -1,15 +1,15 @@ -/click ChatFrame1Tab RightButton -DropDownList1Button4 - - -/click ChatFrame3Tab RightButton -/click DropDownList1Button10 -/click ChatConfigChatSettingsLeftCheckBox2Check -/click ChatConfigChatSettingsLeftCheckBox4Check -/click ChatConfigChatSettingsLeftCheckBox12Check -/click ChatConfigChatSettingsLeftCheckBox13Check -/click ChatConfigChatSettingsLeftCheckBox14Check -/click ChatConfigChatSettingsLeftCheckBox15Check -/click ChatConfigChatSettingsLeftCheckBox16Check - +/click ChatFrame1Tab RightButton +DropDownList1Button4 + + +/click ChatFrame3Tab RightButton +/click DropDownList1Button10 +/click ChatConfigChatSettingsLeftCheckBox2Check +/click ChatConfigChatSettingsLeftCheckBox4Check +/click ChatConfigChatSettingsLeftCheckBox12Check +/click ChatConfigChatSettingsLeftCheckBox13Check +/click ChatConfigChatSettingsLeftCheckBox14Check +/click ChatConfigChatSettingsLeftCheckBox15Check +/click ChatConfigChatSettingsLeftCheckBox16Check + /run local c="ChatConfigChatSettingsLeftCheckBox2Check";c:Click();c=c:gsub("%d","4");c:Click();for i=12,14 do c=c:gsub("%d", i); c:Click() end --no work \ No newline at end of file diff --git a/Complete Projects/BFA/Combat.lua b/WeakAuras/Projects/ByExp/BFA/Combat.lua similarity index 97% rename from Complete Projects/BFA/Combat.lua rename to WeakAuras/Projects/ByExp/BFA/Combat.lua index 9b337d5..8351930 100644 --- a/Complete Projects/BFA/Combat.lua +++ b/WeakAuras/Projects/ByExp/BFA/Combat.lua @@ -1,20 +1,20 @@ ---PLAYER_REGEN_DISABLED PLAYER_REGEN_ENABLED UPDATE -function(e) - if e == "PLAYER_REGEN_DISABLED" then - if not aura_env.seconds then aura_env.seconds = 0 end - if not aura_env.minutes then aura_env.minutes = 0 end - local aura_env = aura_env - aura_env.ticker = C_Timer.NewTicker(1, function() aura_env.seconds = aura_env.seconds + 1; if aura_env.seconds > 59 then aura_env.seconds = 0; aura_env.minutes = aura_env.minutes + 1 end; WeakAuras.ScanEvents("UPDATE") end) - return true - elseif e == "PLAYER_REGEN_ENABLED" then - aura_env.minutes = 0; aura_env.seconds = 0 - if aura_env.ticker then aura_env.ticker:Cancel() end - elseif e == "UPDATE" then return true end -end - ---DISPLAY -function() - if aura_env.seconds and aura_env.minutes then - return aura_env.minutes .. ":" .. aura_env.seconds - end +--PLAYER_REGEN_DISABLED PLAYER_REGEN_ENABLED UPDATE +function(e) + if e == "PLAYER_REGEN_DISABLED" then + if not aura_env.seconds then aura_env.seconds = 0 end + if not aura_env.minutes then aura_env.minutes = 0 end + local aura_env = aura_env + aura_env.ticker = C_Timer.NewTicker(1, function() aura_env.seconds = aura_env.seconds + 1; if aura_env.seconds > 59 then aura_env.seconds = 0; aura_env.minutes = aura_env.minutes + 1 end; WeakAuras.ScanEvents("UPDATE") end) + return true + elseif e == "PLAYER_REGEN_ENABLED" then + aura_env.minutes = 0; aura_env.seconds = 0 + if aura_env.ticker then aura_env.ticker:Cancel() end + elseif e == "UPDATE" then return true end +end + +--DISPLAY +function() + if aura_env.seconds and aura_env.minutes then + return aura_env.minutes .. ":" .. aura_env.seconds + end end \ No newline at end of file diff --git a/Complete Projects/BFA/Cooldown Gradient.lua b/WeakAuras/Projects/ByExp/BFA/Cooldown Gradient.lua similarity index 95% rename from Complete Projects/BFA/Cooldown Gradient.lua rename to WeakAuras/Projects/ByExp/BFA/Cooldown Gradient.lua index 994188d..aa33b2c 100644 --- a/Complete Projects/BFA/Cooldown Gradient.lua +++ b/WeakAuras/Projects/ByExp/BFA/Cooldown Gradient.lua @@ -1,27 +1,27 @@ ---ANIMATION -function() - if GetSpellCooldown("Memory of Lucid Dreams") then - local start, dur = GetSpellCooldown("Memory of Lucid Dreams") - local remcd = start + dur - GetTime() - if remcd > 0 then - remcd = 1 - aura_env.range(remcd, 0, 120, 1) - return aura_env.grad(remcd) - end - end -end - ---INIT -aura_env.grad = function(c) - --c expected as [0, 1] - if c > 0.5 then - c = 1 - (2 * (c - 0.5)) - return c, 1, 0, 1 - else - c = c * 2 - return 1, c, 0, 1 - end -end -aura_env.range = function(val, min, max, max2) - val = 1 - (((max - val) / (max - min)) * max2) - return val +--ANIMATION +function() + if GetSpellCooldown("Memory of Lucid Dreams") then + local start, dur = GetSpellCooldown("Memory of Lucid Dreams") + local remcd = start + dur - GetTime() + if remcd > 0 then + remcd = 1 - aura_env.range(remcd, 0, 120, 1) + return aura_env.grad(remcd) + end + end +end + +--INIT +aura_env.grad = function(c) + --c expected as [0, 1] + if c > 0.5 then + c = 1 - (2 * (c - 0.5)) + return c, 1, 0, 1 + else + c = c * 2 + return 1, c, 0, 1 + end +end +aura_env.range = function(val, min, max, max2) + val = 1 - (((max - val) / (max - min)) * max2) + return val end \ No newline at end of file diff --git a/Complete Projects/BFA/Deepcoral Bud Glow.lua b/WeakAuras/Projects/ByExp/BFA/Deepcoral Bud Glow.lua similarity index 97% rename from Complete Projects/BFA/Deepcoral Bud Glow.lua rename to WeakAuras/Projects/ByExp/BFA/Deepcoral Bud Glow.lua index d08a5b0..20c91db 100644 --- a/Complete Projects/BFA/Deepcoral Bud Glow.lua +++ b/WeakAuras/Projects/ByExp/BFA/Deepcoral Bud Glow.lua @@ -1,17 +1,17 @@ ---NAME_PLATE_UNIT_ADDED NAME_PLATE_UNIT_REMOVED -function(e, unit) - local LCG = LibStub("LibCustomGlow-1.0") - if e == "NAME_PLATE_UNIT_ADDED" then - local name = UnitName(unit) or "" - if name == "Deepcoral Bud" then - local nameplate = C_NamePlate.GetNamePlateForUnit(unit) - LCG.PixelGlow_Start(nameplate, {1,1,1,1}, nil, 0, 8, 2, 0, -4) - end - elseif e == "NAME_PLATE_UNIT_REMOVED" then - local name = UnitName(unit) or "" - if name == "Deepcoral Bud" then - local nameplate = C_NamePlate.GetNamePlateForUnit(unit) - LCG.PixelGlow_Stop(nameplate) - end - end +--NAME_PLATE_UNIT_ADDED NAME_PLATE_UNIT_REMOVED +function(e, unit) + local LCG = LibStub("LibCustomGlow-1.0") + if e == "NAME_PLATE_UNIT_ADDED" then + local name = UnitName(unit) or "" + if name == "Deepcoral Bud" then + local nameplate = C_NamePlate.GetNamePlateForUnit(unit) + LCG.PixelGlow_Start(nameplate, {1,1,1,1}, nil, 0, 8, 2, 0, -4) + end + elseif e == "NAME_PLATE_UNIT_REMOVED" then + local name = UnitName(unit) or "" + if name == "Deepcoral Bud" then + local nameplate = C_NamePlate.GetNamePlateForUnit(unit) + LCG.PixelGlow_Stop(nameplate) + end + end end \ No newline at end of file diff --git a/Complete Projects/BFA/Dodge Bog.lua b/WeakAuras/Projects/ByExp/BFA/Dodge Bog.lua similarity index 96% rename from Complete Projects/BFA/Dodge Bog.lua rename to WeakAuras/Projects/ByExp/BFA/Dodge Bog.lua index b1ca3fa..c9256d7 100644 --- a/Complete Projects/BFA/Dodge Bog.lua +++ b/WeakAuras/Projects/ByExp/BFA/Dodge Bog.lua @@ -1,19 +1,19 @@ ---COMBAT_LOG_EVENT_UNFILTERED -function(e, ...) - local se = select(2, ...) - if se == "SWING_MISSED" or se == "SPELL_MISSED" then - local target = select(9, ...) - local misstype = select(12, ...) - if misstype == "DODGE" and target == UnitName("player") then - if not aura_env.dodg then aura_env.dodg = 0 end - aura_env.dodg = aura_env.dodg + 1 - return true - end - end -end - ---DISPLAY -function() - if not aura_env.dodg then aura_env.dodg = 0 end - return aura_env.dodg +--COMBAT_LOG_EVENT_UNFILTERED +function(e, ...) + local se = select(2, ...) + if se == "SWING_MISSED" or se == "SPELL_MISSED" then + local target = select(9, ...) + local misstype = select(12, ...) + if misstype == "DODGE" and target == UnitName("player") then + if not aura_env.dodg then aura_env.dodg = 0 end + aura_env.dodg = aura_env.dodg + 1 + return true + end + end +end + +--DISPLAY +function() + if not aura_env.dodg then aura_env.dodg = 0 end + return aura_env.dodg end \ No newline at end of file diff --git a/Complete Projects/BFA/Drop Track/BAQS/BAQ farm.lua b/WeakAuras/Projects/ByExp/BFA/Drop Track/BAQS/BAQ farm.lua similarity index 96% rename from Complete Projects/BFA/Drop Track/BAQS/BAQ farm.lua rename to WeakAuras/Projects/ByExp/BFA/Drop Track/BAQS/BAQ farm.lua index bc56d03..ec8ccfd 100644 --- a/Complete Projects/BFA/Drop Track/BAQS/BAQ farm.lua +++ b/WeakAuras/Projects/ByExp/BFA/Drop Track/BAQS/BAQ farm.lua @@ -1,40 +1,40 @@ ---CLEU -function(...) - local se = select(3, ...) - if se == "PARTY_KILL" then - local name = select(10, ...) - if aura_env.mobs[name] then - Garbage.baqcrap.count = Garbage.baqcrap.count + aura_env.mobs[name] - return true - end - end -end - ---DISPLAY -function() - return Garbage.baqcrap.count .. "%" -end - ---INIT -if not Garbage.baqcrap then Garbage.baqcrap = {} end -if not Garbage.baqcrap.count then Garbage.baqcrap.count = 0 end -aura_env.mobs = -{ - ["Tidemistress Ethendriss"] = 3, - ["Shirakess Starseeker"] = 1.2, - ["Azsh'ari Siegemistress"] = 0.9, - ["Shirakess Voidtwister"] = 0.7, - ["Shadowbinder Athissa"] = 0.6, - ["Azsh'ari Invoker"] = 0.5, - ["Shirakess Apprentice"] = 0.5, - ["Shirakess Overseer"] = 0.5, - ["Incantatrix Vazina"] = 0.5, - ["Lady Naz'jess"] = 0.5, - ["Herald of the Queen"] = 0.5, - ["Shirakess Apprentice"] = 0.4, - ["Azsh'ari Stormsurger"] = 0.3, - ["Azsh'ari Stormsurger"] = 0.3, - ["Theurgist Nitara"] = 0.2, - ["Azsh'ari Oracle"] = 0.13, - ["Tidebinder Sarjezi"] = 0.09, +--CLEU +function(...) + local se = select(3, ...) + if se == "PARTY_KILL" then + local name = select(10, ...) + if aura_env.mobs[name] then + Garbage.baqcrap.count = Garbage.baqcrap.count + aura_env.mobs[name] + return true + end + end +end + +--DISPLAY +function() + return Garbage.baqcrap.count .. "%" +end + +--INIT +if not Garbage.baqcrap then Garbage.baqcrap = {} end +if not Garbage.baqcrap.count then Garbage.baqcrap.count = 0 end +aura_env.mobs = +{ + ["Tidemistress Ethendriss"] = 3, + ["Shirakess Starseeker"] = 1.2, + ["Azsh'ari Siegemistress"] = 0.9, + ["Shirakess Voidtwister"] = 0.7, + ["Shadowbinder Athissa"] = 0.6, + ["Azsh'ari Invoker"] = 0.5, + ["Shirakess Apprentice"] = 0.5, + ["Shirakess Overseer"] = 0.5, + ["Incantatrix Vazina"] = 0.5, + ["Lady Naz'jess"] = 0.5, + ["Herald of the Queen"] = 0.5, + ["Shirakess Apprentice"] = 0.4, + ["Azsh'ari Stormsurger"] = 0.3, + ["Azsh'ari Stormsurger"] = 0.3, + ["Theurgist Nitara"] = 0.2, + ["Azsh'ari Oracle"] = 0.13, + ["Tidebinder Sarjezi"] = 0.09, } \ No newline at end of file diff --git a/Complete Projects/BFA/Drop Track/BAQS/BAQ nameplate.lua b/WeakAuras/Projects/ByExp/BFA/Drop Track/BAQS/BAQ nameplate.lua similarity index 96% rename from Complete Projects/BFA/Drop Track/BAQS/BAQ nameplate.lua rename to WeakAuras/Projects/ByExp/BFA/Drop Track/BAQS/BAQ nameplate.lua index 87e467c..8056c59 100644 --- a/Complete Projects/BFA/Drop Track/BAQS/BAQ nameplate.lua +++ b/WeakAuras/Projects/ByExp/BFA/Drop Track/BAQS/BAQ nameplate.lua @@ -1,40 +1,40 @@ ---NAME_PLATE_UNIT_ADDED NAME_PLATE_UNIT_REMOVED -function(e, unit) - --handle death exception - local LCG = LibStub("LibCustomGlow-1.0") - if e == "NAME_PLATE_UNIT_ADDED" then - local name = UnitName(unit) or "" - if aura_env.mobs[name] then - local nameplate = C_NamePlate.GetNamePlateForUnit(unit) - LCG.PixelGlow_Start(nameplate, {1,1,1,1}, nil, 0, 8, 2, 0, -4) - end - elseif e == "NAME_PLATE_UNIT_REMOVED" then - local name = UnitName(unit) or "" - if aura_env.mobs[name] then - local nameplate = C_NamePlate.GetNamePlateForUnit(unit) - LCG.PixelGlow_Stop(nameplate) - end - end -end - ---INIT -aura_env.mobs = -{ - ["Tidemistress Ethendriss"] = 3, - ["Shirakess Starseeker"] = 1.2, - ["Azsh'ari Siegemistress"] = 0.9, - ["Shirakess Voidtwister"] = 0.7, - ["Shadowbinder Athissa"] = 0.6, - ["Azsh'ari Invoker"] = 0.5, - ["Shirakess Apprentice"] = 0.5, - ["Shirakess Overseer"] = 0.5, - ["Incantatrix Vazina"] = 0.5, - ["Lady Naz'jess"] = 0.5, - ["Herald of the Queen"] = 0.5, - ["Shirakess Apprentice"] = 0.4, - ["Azsh'ari Stormsurger"] = 0.3, - ["Azsh'ari Stormsurger"] = 0.3, - ["Theurgist Nitara"] = 0.2, - ["Azsh'ari Oracle"] = 0.13, - ["Tidebinder Sarjezi"] = 0.09, +--NAME_PLATE_UNIT_ADDED NAME_PLATE_UNIT_REMOVED +function(e, unit) + --handle death exception + local LCG = LibStub("LibCustomGlow-1.0") + if e == "NAME_PLATE_UNIT_ADDED" then + local name = UnitName(unit) or "" + if aura_env.mobs[name] then + local nameplate = C_NamePlate.GetNamePlateForUnit(unit) + LCG.PixelGlow_Start(nameplate, {1,1,1,1}, nil, 0, 8, 2, 0, -4) + end + elseif e == "NAME_PLATE_UNIT_REMOVED" then + local name = UnitName(unit) or "" + if aura_env.mobs[name] then + local nameplate = C_NamePlate.GetNamePlateForUnit(unit) + LCG.PixelGlow_Stop(nameplate) + end + end +end + +--INIT +aura_env.mobs = +{ + ["Tidemistress Ethendriss"] = 3, + ["Shirakess Starseeker"] = 1.2, + ["Azsh'ari Siegemistress"] = 0.9, + ["Shirakess Voidtwister"] = 0.7, + ["Shadowbinder Athissa"] = 0.6, + ["Azsh'ari Invoker"] = 0.5, + ["Shirakess Apprentice"] = 0.5, + ["Shirakess Overseer"] = 0.5, + ["Incantatrix Vazina"] = 0.5, + ["Lady Naz'jess"] = 0.5, + ["Herald of the Queen"] = 0.5, + ["Shirakess Apprentice"] = 0.4, + ["Azsh'ari Stormsurger"] = 0.3, + ["Azsh'ari Stormsurger"] = 0.3, + ["Theurgist Nitara"] = 0.2, + ["Azsh'ari Oracle"] = 0.13, + ["Tidebinder Sarjezi"] = 0.09, } \ No newline at end of file diff --git a/Complete Projects/BFA/Drop Track/Follower Garbage/Garbage Nameplate.lua b/WeakAuras/Projects/ByExp/BFA/Drop Track/Follower Garbage/Garbage Nameplate.lua similarity index 96% rename from Complete Projects/BFA/Drop Track/Follower Garbage/Garbage Nameplate.lua rename to WeakAuras/Projects/ByExp/BFA/Drop Track/Follower Garbage/Garbage Nameplate.lua index e990446..8019d8b 100644 --- a/Complete Projects/BFA/Drop Track/Follower Garbage/Garbage Nameplate.lua +++ b/WeakAuras/Projects/ByExp/BFA/Drop Track/Follower Garbage/Garbage Nameplate.lua @@ -1,51 +1,51 @@ ---NAME_PLATE_UNIT_ADDED NAME_PLATE_UNIT_REMOVED -function(e, unit) - --handle death exception - local LCG = LibStub("LibCustomGlow-1.0") - if e == "NAME_PLATE_UNIT_ADDED" then - local name = UnitName(unit) or "" - if aura_env.mobs[name] then - local nameplate = C_NamePlate.GetNamePlateForUnit(unit) - LCG.PixelGlow_Start(nameplate, {0,1,0,1}, nil, 0, 8, 2, 0, -4) - end - elseif e == "NAME_PLATE_UNIT_REMOVED" then - local name = UnitName(unit) or "" - if aura_env.mobs[name] then - local nameplate = C_NamePlate.GetNamePlateForUnit(unit) - LCG.PixelGlow_Stop(nameplate) - end - end -end - ---INIT -aura_env.mobs = -{ - ["Barnacled Reefwalker"] = 1.6, - ["Gloomchasm Reefwalker"] = 1.4, - ["Whitewave Reefwalker"] = 1.2, - ["Staghorn Reefwalker"] = 1.2, - ["Deep Reefwalker"] = 1.2, - ["Sunbleached Reefwalker"] = 1, - ["Kelpwillow"] = 1, - ["Anemonar"] = 0.9, - ["Seashelf Reefwalker"] = 0.8, - ["Murkbloom Reefwalker"] = 0.7, - ["Oronu"] = 0.6, - ["Urduu"] = 0.6, - ["Emorneth"] = 0.5, - ["Sandclaw Stoneshell"] = 6, - ["Chitterspine Ambusher"] = 0.8, - ["Chitterspine Crab"] = 0.5, - ["Chitterspine Lurker"] = 0.5, - ["Iridescent Glimmershell"] = 0.5, - ["Needlespine"] = 0.5, - ["Chitterspine Encroacher"] = 0.4, - ["Glimmershell Crab"] = 0.4, - ["Sandclaw Crab"] = 0.4, - ["Chitterspine Ambusher"] = 0.4, - ["Crackleclaw Crab"] = 0.3, - ["Glimmershell Hulk"] = 0.3, - ["Chitterspine Crab"] = 0.3, - ["Braxicus"] = 0.3, - ["Chitterspine Guillotine"] = 0.16, +--NAME_PLATE_UNIT_ADDED NAME_PLATE_UNIT_REMOVED +function(e, unit) + --handle death exception + local LCG = LibStub("LibCustomGlow-1.0") + if e == "NAME_PLATE_UNIT_ADDED" then + local name = UnitName(unit) or "" + if aura_env.mobs[name] then + local nameplate = C_NamePlate.GetNamePlateForUnit(unit) + LCG.PixelGlow_Start(nameplate, {0,1,0,1}, nil, 0, 8, 2, 0, -4) + end + elseif e == "NAME_PLATE_UNIT_REMOVED" then + local name = UnitName(unit) or "" + if aura_env.mobs[name] then + local nameplate = C_NamePlate.GetNamePlateForUnit(unit) + LCG.PixelGlow_Stop(nameplate) + end + end +end + +--INIT +aura_env.mobs = +{ + ["Barnacled Reefwalker"] = 1.6, + ["Gloomchasm Reefwalker"] = 1.4, + ["Whitewave Reefwalker"] = 1.2, + ["Staghorn Reefwalker"] = 1.2, + ["Deep Reefwalker"] = 1.2, + ["Sunbleached Reefwalker"] = 1, + ["Kelpwillow"] = 1, + ["Anemonar"] = 0.9, + ["Seashelf Reefwalker"] = 0.8, + ["Murkbloom Reefwalker"] = 0.7, + ["Oronu"] = 0.6, + ["Urduu"] = 0.6, + ["Emorneth"] = 0.5, + ["Sandclaw Stoneshell"] = 6, + ["Chitterspine Ambusher"] = 0.8, + ["Chitterspine Crab"] = 0.5, + ["Chitterspine Lurker"] = 0.5, + ["Iridescent Glimmershell"] = 0.5, + ["Needlespine"] = 0.5, + ["Chitterspine Encroacher"] = 0.4, + ["Glimmershell Crab"] = 0.4, + ["Sandclaw Crab"] = 0.4, + ["Chitterspine Ambusher"] = 0.4, + ["Crackleclaw Crab"] = 0.3, + ["Glimmershell Hulk"] = 0.3, + ["Chitterspine Crab"] = 0.3, + ["Braxicus"] = 0.3, + ["Chitterspine Guillotine"] = 0.16, } \ No newline at end of file diff --git a/Complete Projects/BFA/Drop Track/Follower Garbage/Garbage.lua b/WeakAuras/Projects/ByExp/BFA/Drop Track/Follower Garbage/Garbage.lua similarity index 96% rename from Complete Projects/BFA/Drop Track/Follower Garbage/Garbage.lua rename to WeakAuras/Projects/ByExp/BFA/Drop Track/Follower Garbage/Garbage.lua index 78d4b1b..d78c46f 100644 --- a/Complete Projects/BFA/Drop Track/Follower Garbage/Garbage.lua +++ b/WeakAuras/Projects/ByExp/BFA/Drop Track/Follower Garbage/Garbage.lua @@ -1,51 +1,51 @@ ---CLEU -function(...) - local se = select(3, ...) - if se == "PARTY_KILL" then - local name = select(10, ...) - if aura_env.mobs[name] then - Garbage.baqcrap.count3 = Garbage.baqcrap.count3 + aura_env.mobs[name] - return true - end - end -end - ---DISPLAY -function() - return Garbage.baqcrap.count3 .. "%" -end - ---INIT -if not Garbage.baqcrap then Garbage.baqcrap = {} end -if not Garbage.baqcrap.count3 then Garbage.baqcrap.count3 = 0 end -aura_env.mobs = -{ - ["Barnacled Reefwalker"] = 1.6, - ["Gloomchasm Reefwalker"] = 1.4, - ["Whitewave Reefwalker"] = 1.2, - ["Staghorn Reefwalker"] = 1.2, - ["Deep Reefwalker"] = 1.2, - ["Sunbleached Reefwalker"] = 1, - ["Kelpwillow"] = 1, - ["Anemonar"] = 0.9, - ["Seashelf Reefwalker"] = 0.8, - ["Murkbloom Reefwalker"] = 0.7, - ["Oronu"] = 0.6, - ["Urduu"] = 0.6, - ["Emorneth"] = 0.5, - ["Sandclaw Stoneshell"] = 6, - ["Chitterspine Ambusher"] = 0.8, - ["Chitterspine Crab"] = 0.5, - ["Chitterspine Lurker"] = 0.5, - ["Iridescent Glimmershell"] = 0.5, - ["Needlespine"] = 0.5, - ["Chitterspine Encroacher"] = 0.4, - ["Glimmershell Crab"] = 0.4, - ["Sandclaw Crab"] = 0.4, - ["Chitterspine Ambusher"] = 0.4, - ["Crackleclaw Crab"] = 0.3, - ["Glimmershell Hulk"] = 0.3, - ["Chitterspine Crab"] = 0.3, - ["Braxicus"] = 0.3, - ["Chitterspine Guillotine"] = 0.16, +--CLEU +function(...) + local se = select(3, ...) + if se == "PARTY_KILL" then + local name = select(10, ...) + if aura_env.mobs[name] then + Garbage.baqcrap.count3 = Garbage.baqcrap.count3 + aura_env.mobs[name] + return true + end + end +end + +--DISPLAY +function() + return Garbage.baqcrap.count3 .. "%" +end + +--INIT +if not Garbage.baqcrap then Garbage.baqcrap = {} end +if not Garbage.baqcrap.count3 then Garbage.baqcrap.count3 = 0 end +aura_env.mobs = +{ + ["Barnacled Reefwalker"] = 1.6, + ["Gloomchasm Reefwalker"] = 1.4, + ["Whitewave Reefwalker"] = 1.2, + ["Staghorn Reefwalker"] = 1.2, + ["Deep Reefwalker"] = 1.2, + ["Sunbleached Reefwalker"] = 1, + ["Kelpwillow"] = 1, + ["Anemonar"] = 0.9, + ["Seashelf Reefwalker"] = 0.8, + ["Murkbloom Reefwalker"] = 0.7, + ["Oronu"] = 0.6, + ["Urduu"] = 0.6, + ["Emorneth"] = 0.5, + ["Sandclaw Stoneshell"] = 6, + ["Chitterspine Ambusher"] = 0.8, + ["Chitterspine Crab"] = 0.5, + ["Chitterspine Lurker"] = 0.5, + ["Iridescent Glimmershell"] = 0.5, + ["Needlespine"] = 0.5, + ["Chitterspine Encroacher"] = 0.4, + ["Glimmershell Crab"] = 0.4, + ["Sandclaw Crab"] = 0.4, + ["Chitterspine Ambusher"] = 0.4, + ["Crackleclaw Crab"] = 0.3, + ["Glimmershell Hulk"] = 0.3, + ["Chitterspine Crab"] = 0.3, + ["Braxicus"] = 0.3, + ["Chitterspine Guillotine"] = 0.16, } \ No newline at end of file diff --git a/Complete Projects/BFA/Drop Track/STONES/Stone nameplates.lua b/WeakAuras/Projects/ByExp/BFA/Drop Track/STONES/Stone nameplates.lua similarity index 96% rename from Complete Projects/BFA/Drop Track/STONES/Stone nameplates.lua rename to WeakAuras/Projects/ByExp/BFA/Drop Track/STONES/Stone nameplates.lua index 36c48a9..70431fc 100644 --- a/Complete Projects/BFA/Drop Track/STONES/Stone nameplates.lua +++ b/WeakAuras/Projects/ByExp/BFA/Drop Track/STONES/Stone nameplates.lua @@ -1,80 +1,80 @@ ---NAME_PLATE_UNIT_ADDED NAME_PLATE_UNIT_REMOVED -function(e, unit) - --handle death exception - local LCG = LibStub("LibCustomGlow-1.0") - if e == "NAME_PLATE_UNIT_ADDED" then - local name = UnitName(unit) or "" - if aura_env.mobs[name] then - local nameplate = C_NamePlate.GetNamePlateForUnit(unit) - LCG.PixelGlow_Start(nameplate, {0,0,1,1}, nil, 0, 8, 2, 0, -4) - end - elseif e == "NAME_PLATE_UNIT_REMOVED" then - local name = UnitName(unit) or "" - if aura_env.mobs[name] then - local nameplate = C_NamePlate.GetNamePlateForUnit(unit) - LCG.PixelGlow_Stop(nameplate) - end - end -end - ---INIT -aura_env.mobs = -{ - ["Herald of Salgos"] = 33, - ["Spawn of Salgos"] = 33, - ["Osgen"] = 30, - ["Ungormath"] = 30, - ["Burning Amalgamation"] = 29, - ["Moghiea"] = 29, - ["Salgos the Eternal"] = 28, - ["Zomera"] = 27, - ["Arcane Amalgamation"] = 25, - ["Xue"] = 25, - ["Aldrantiss"] = 22, - ["Watery Amalgamation"] = 22, - ["Dusty Amalgamation"] = 22, - ["Alzana"] = 21, - ["Vyz'olgo the Mind-Taker"] = 20, - ["Qalina"] = 19, - ["Omus"] = 19, - ["Voice in the Deeps"] = 13, - ["King Gakula"] = 11, - ["Chasm-Haunter"] = 11, - ["Scale Matriarch Vynara"] = 11, - ["Anemonar"] = 10, - ["Sandcastle"] = 9, - ["Shiz'narasz the Consumer"] = 9, - ["Toxigore the Alpha"] = 9, - ["Needlespine"] = 9, - ["Siltstalker the Packmother"] = 9, - ["Urduu"] = 9, - ["Tidemistress Leth'sindra"] = 9, - ["Banescale the Packfather"] = 9, - ["Sandclaw Stoneshell"] = 8, - ["Garnetscale"] = 8, - ["Allseer Oma'kil"] = 8, - ["Vor'koth"] = 8, - ["Elder Unu"] = 8, - ["Caverndark Terror"] = 8, - ["Blindlight"] = 8, - ["Shassera"] = 8, - ["Soundless"] = 8, - ["Scale Matriarch Gratinax"] = 8, - ["Tidelord Aquatus"] = 8, - ["Tidelord Dispersius"] = 8, - ["Carnivorous Lasher"] = 7, - ["Mirecrawler"] = 7, - ["Daggertooth Terror"] = 7, - ["Amethyst Spireshell"] = 7, - ["Prince Typhonus"] = 7, - ["Alga the Eyeless"] = 7, - ["Prince Vortran"] = 7, - ["Kelpwillow"] = 7, - ["Deepglider"] = 7, - ["Scale Matriarch Zodia"] = 7, - ["Rockweed Shambler"] = 7, - ["Avarius"] = 6, - ["Iridescent Glimmershell"] = 6, - ["Oronu"] = 6, - ["Elderspawn Nalaada"] = 5, +--NAME_PLATE_UNIT_ADDED NAME_PLATE_UNIT_REMOVED +function(e, unit) + --handle death exception + local LCG = LibStub("LibCustomGlow-1.0") + if e == "NAME_PLATE_UNIT_ADDED" then + local name = UnitName(unit) or "" + if aura_env.mobs[name] then + local nameplate = C_NamePlate.GetNamePlateForUnit(unit) + LCG.PixelGlow_Start(nameplate, {0,0,1,1}, nil, 0, 8, 2, 0, -4) + end + elseif e == "NAME_PLATE_UNIT_REMOVED" then + local name = UnitName(unit) or "" + if aura_env.mobs[name] then + local nameplate = C_NamePlate.GetNamePlateForUnit(unit) + LCG.PixelGlow_Stop(nameplate) + end + end +end + +--INIT +aura_env.mobs = +{ + ["Herald of Salgos"] = 33, + ["Spawn of Salgos"] = 33, + ["Osgen"] = 30, + ["Ungormath"] = 30, + ["Burning Amalgamation"] = 29, + ["Moghiea"] = 29, + ["Salgos the Eternal"] = 28, + ["Zomera"] = 27, + ["Arcane Amalgamation"] = 25, + ["Xue"] = 25, + ["Aldrantiss"] = 22, + ["Watery Amalgamation"] = 22, + ["Dusty Amalgamation"] = 22, + ["Alzana"] = 21, + ["Vyz'olgo the Mind-Taker"] = 20, + ["Qalina"] = 19, + ["Omus"] = 19, + ["Voice in the Deeps"] = 13, + ["King Gakula"] = 11, + ["Chasm-Haunter"] = 11, + ["Scale Matriarch Vynara"] = 11, + ["Anemonar"] = 10, + ["Sandcastle"] = 9, + ["Shiz'narasz the Consumer"] = 9, + ["Toxigore the Alpha"] = 9, + ["Needlespine"] = 9, + ["Siltstalker the Packmother"] = 9, + ["Urduu"] = 9, + ["Tidemistress Leth'sindra"] = 9, + ["Banescale the Packfather"] = 9, + ["Sandclaw Stoneshell"] = 8, + ["Garnetscale"] = 8, + ["Allseer Oma'kil"] = 8, + ["Vor'koth"] = 8, + ["Elder Unu"] = 8, + ["Caverndark Terror"] = 8, + ["Blindlight"] = 8, + ["Shassera"] = 8, + ["Soundless"] = 8, + ["Scale Matriarch Gratinax"] = 8, + ["Tidelord Aquatus"] = 8, + ["Tidelord Dispersius"] = 8, + ["Carnivorous Lasher"] = 7, + ["Mirecrawler"] = 7, + ["Daggertooth Terror"] = 7, + ["Amethyst Spireshell"] = 7, + ["Prince Typhonus"] = 7, + ["Alga the Eyeless"] = 7, + ["Prince Vortran"] = 7, + ["Kelpwillow"] = 7, + ["Deepglider"] = 7, + ["Scale Matriarch Zodia"] = 7, + ["Rockweed Shambler"] = 7, + ["Avarius"] = 6, + ["Iridescent Glimmershell"] = 6, + ["Oronu"] = 6, + ["Elderspawn Nalaada"] = 5, } \ No newline at end of file diff --git a/Complete Projects/BFA/Drop Track/STONES/Stone.lua b/WeakAuras/Projects/ByExp/BFA/Drop Track/STONES/Stone.lua similarity index 96% rename from Complete Projects/BFA/Drop Track/STONES/Stone.lua rename to WeakAuras/Projects/ByExp/BFA/Drop Track/STONES/Stone.lua index a491bbd..4d5bf9d 100644 --- a/Complete Projects/BFA/Drop Track/STONES/Stone.lua +++ b/WeakAuras/Projects/ByExp/BFA/Drop Track/STONES/Stone.lua @@ -1,80 +1,80 @@ ---CLEU -function(...) - local se = select(3, ...) - if se == "PARTY_KILL" then - local name = select(10, ...) - if aura_env.mobs[name] then - Garbage.baqcrap.count2 = Garbage.baqcrap.count2 + aura_env.mobs[name] - return true - end - end -end - ---DISPLAY -function() - return Garbage.baqcrap.count2 .. "%" -end - ---INIT -if not Garbage.baqcrap then Garbage.baqcrap = {} end -if not Garbage.baqcrap.count2 then Garbage.baqcrap.count2 = 0 end -aura_env.mobs = -{ - ["Herald of Salgos"] = 33, - ["Spawn of Salgos"] = 33, - ["Osgen"] = 30, - ["Ungormath"] = 30, - ["Burning Amalgamation"] = 29, - ["Moghiea"] = 29, - ["Salgos the Eternal"] = 28, - ["Zomera"] = 27, - ["Arcane Amalgamation"] = 25, - ["Xue"] = 25, - ["Aldrantiss"] = 22, - ["Watery Amalgamation"] = 22, - ["Dusty Amalgamation"] = 22, - ["Alzana"] = 21, - ["Vyz'olgo the Mind-Taker"] = 20, - ["Qalina"] = 19, - ["Omus"] = 19, - ["Voice in the Deeps"] = 13, - ["King Gakula"] = 11, - ["Chasm-Haunter"] = 11, - ["Scale Matriarch Vynara"] = 11, - ["Anemonar"] = 10, - ["Sandcastle"] = 9, - ["Shiz'narasz the Consumer"] = 9, - ["Toxigore the Alpha"] = 9, - ["Needlespine"] = 9, - ["Siltstalker the Packmother"] = 9, - ["Urduu"] = 9, - ["Tidemistress Leth'sindra"] = 9, - ["Banescale the Packfather"] = 9, - ["Sandclaw Stoneshell"] = 8, - ["Garnetscale"] = 8, - ["Allseer Oma'kil"] = 8, - ["Vor'koth"] = 8, - ["Elder Unu"] = 8, - ["Caverndark Terror"] = 8, - ["Blindlight"] = 8, - ["Shassera"] = 8, - ["Soundless"] = 8, - ["Scale Matriarch Gratinax"] = 8, - ["Tidelord Aquatus"] = 8, - ["Tidelord Dispersius"] = 8, - ["Carnivorous Lasher"] = 7, - ["Mirecrawler"] = 7, - ["Daggertooth Terror"] = 7, - ["Amethyst Spireshell"] = 7, - ["Prince Typhonus"] = 7, - ["Alga the Eyeless"] = 7, - ["Prince Vortran"] = 7, - ["Kelpwillow"] = 7, - ["Deepglider"] = 7, - ["Scale Matriarch Zodia"] = 7, - ["Rockweed Shambler"] = 7, - ["Avarius"] = 6, - ["Iridescent Glimmershell"] = 6, - ["Oronu"] = 6, - ["Elderspawn Nalaada"] = 5, +--CLEU +function(...) + local se = select(3, ...) + if se == "PARTY_KILL" then + local name = select(10, ...) + if aura_env.mobs[name] then + Garbage.baqcrap.count2 = Garbage.baqcrap.count2 + aura_env.mobs[name] + return true + end + end +end + +--DISPLAY +function() + return Garbage.baqcrap.count2 .. "%" +end + +--INIT +if not Garbage.baqcrap then Garbage.baqcrap = {} end +if not Garbage.baqcrap.count2 then Garbage.baqcrap.count2 = 0 end +aura_env.mobs = +{ + ["Herald of Salgos"] = 33, + ["Spawn of Salgos"] = 33, + ["Osgen"] = 30, + ["Ungormath"] = 30, + ["Burning Amalgamation"] = 29, + ["Moghiea"] = 29, + ["Salgos the Eternal"] = 28, + ["Zomera"] = 27, + ["Arcane Amalgamation"] = 25, + ["Xue"] = 25, + ["Aldrantiss"] = 22, + ["Watery Amalgamation"] = 22, + ["Dusty Amalgamation"] = 22, + ["Alzana"] = 21, + ["Vyz'olgo the Mind-Taker"] = 20, + ["Qalina"] = 19, + ["Omus"] = 19, + ["Voice in the Deeps"] = 13, + ["King Gakula"] = 11, + ["Chasm-Haunter"] = 11, + ["Scale Matriarch Vynara"] = 11, + ["Anemonar"] = 10, + ["Sandcastle"] = 9, + ["Shiz'narasz the Consumer"] = 9, + ["Toxigore the Alpha"] = 9, + ["Needlespine"] = 9, + ["Siltstalker the Packmother"] = 9, + ["Urduu"] = 9, + ["Tidemistress Leth'sindra"] = 9, + ["Banescale the Packfather"] = 9, + ["Sandclaw Stoneshell"] = 8, + ["Garnetscale"] = 8, + ["Allseer Oma'kil"] = 8, + ["Vor'koth"] = 8, + ["Elder Unu"] = 8, + ["Caverndark Terror"] = 8, + ["Blindlight"] = 8, + ["Shassera"] = 8, + ["Soundless"] = 8, + ["Scale Matriarch Gratinax"] = 8, + ["Tidelord Aquatus"] = 8, + ["Tidelord Dispersius"] = 8, + ["Carnivorous Lasher"] = 7, + ["Mirecrawler"] = 7, + ["Daggertooth Terror"] = 7, + ["Amethyst Spireshell"] = 7, + ["Prince Typhonus"] = 7, + ["Alga the Eyeless"] = 7, + ["Prince Vortran"] = 7, + ["Kelpwillow"] = 7, + ["Deepglider"] = 7, + ["Scale Matriarch Zodia"] = 7, + ["Rockweed Shambler"] = 7, + ["Avarius"] = 6, + ["Iridescent Glimmershell"] = 6, + ["Oronu"] = 6, + ["Elderspawn Nalaada"] = 5, } \ No newline at end of file diff --git a/Complete Projects/BFA/Global Debug.lua b/WeakAuras/Projects/ByExp/BFA/Global Debug.lua similarity index 97% rename from Complete Projects/BFA/Global Debug.lua rename to WeakAuras/Projects/ByExp/BFA/Global Debug.lua index 036a72f..d21813a 100644 --- a/Complete Projects/BFA/Global Debug.lua +++ b/WeakAuras/Projects/ByExp/BFA/Global Debug.lua @@ -1,33 +1,33 @@ ---DEBUG_UPDATE DEBUG_ADD -function(e, m, t, c) - if e == "DEBUG_UPDATE" then - return true - elseif e == "DEBUG_ADD" and m and t then - if c then aura_env.DebugTextArray[#aura_env.DebugTextArray + 1] = {m, t, c} else aura_env.DebugTextArray[#aura_env.DebugTextArray + 1] = {m, t} end - WeakAuras.ScanEvents("DEBUG_UPDATE") - end -end - ---DISPLAY -function() - if aura_env.DebugTextArray then - aura_env.output = "" - if #aura_env.DebugTextArray > 0 then - for k,v in ipairs(aura_env.DebugTextArray) do - if v[3] then aura_env.output = aura_env.output .. "|c" .. v[3] end - aura_env.output = aura_env.output .. v[1] - if v[3] then aura_env.output = aura_env.output .. "|r" end - aura_env.output = aura_env.output .. "\n" - if v[2] > 0 then - local aura_env = aura_env - C_Timer.After(v[2], function() table.remove(aura_env.DebugTextArray, k); WeakAuras.ScanEvents("DEBUG_UPDATE") end) - end - end - end - return aura_env.output - end -end - ---INIT ---DevTools_Dump nice +--DEBUG_UPDATE DEBUG_ADD +function(e, m, t, c) + if e == "DEBUG_UPDATE" then + return true + elseif e == "DEBUG_ADD" and m and t then + if c then aura_env.DebugTextArray[#aura_env.DebugTextArray + 1] = {m, t, c} else aura_env.DebugTextArray[#aura_env.DebugTextArray + 1] = {m, t} end + WeakAuras.ScanEvents("DEBUG_UPDATE") + end +end + +--DISPLAY +function() + if aura_env.DebugTextArray then + aura_env.output = "" + if #aura_env.DebugTextArray > 0 then + for k,v in ipairs(aura_env.DebugTextArray) do + if v[3] then aura_env.output = aura_env.output .. "|c" .. v[3] end + aura_env.output = aura_env.output .. v[1] + if v[3] then aura_env.output = aura_env.output .. "|r" end + aura_env.output = aura_env.output .. "\n" + if v[2] > 0 then + local aura_env = aura_env + C_Timer.After(v[2], function() table.remove(aura_env.DebugTextArray, k); WeakAuras.ScanEvents("DEBUG_UPDATE") end) + end + end + end + return aura_env.output + end +end + +--INIT +--DevTools_Dump nice if not aura_env.DebugTextArray then aura_env.DebugTextArray = {} end \ No newline at end of file diff --git a/Complete Projects/BFA/Guild Spam.lua b/WeakAuras/Projects/ByExp/BFA/Guild Spam.lua similarity index 98% rename from Complete Projects/BFA/Guild Spam.lua rename to WeakAuras/Projects/ByExp/BFA/Guild Spam.lua index 8c39268..21caa1f 100644 --- a/Complete Projects/BFA/Guild Spam.lua +++ b/WeakAuras/Projects/ByExp/BFA/Guild Spam.lua @@ -1,25 +1,25 @@ ---[05:42 PM] [G] [Whispa]: is a newly created guild, we are looking for fun and social members. we are trying to get members to come into discord and we accept any levels. we are planning on making a raid team and hoping to get multiple teams for mythic dungeons ---/run WeakAuras.ScanEvents("BULLSHIT_BEGIN") ---BULLSHIT_BEGIN BULLSHIT_STOP PLAYER_ENTERING_WORLD -function(e) - if e == "BULLSHIT_BEGIN" then - if IsInInstance() == false then - aura_env.ticker = C_Timer.NewTicker(600, function() SendChatMessage(" is a newly created guild, we are looking for fun and social members. we are trying to get members to come into discord and we accept any levels. we are planning on making a raid team and hoping to get multiple teams for mythic dungeons", "CHANNEL", _, "1") end) - --aura_env.ticker = C_Timer.NewTicker(0.60, function() print(" is a newly created guild, we are looking for fun and social members. we are trying to get members to come into discord and we accept any levels. we are planning on making a raid team and hoping to get multiple teams for mythic dungeons") end) - else - if aura_env.ticker then - aura_env.ticker:Cancel() - end - end - elseif e == "BULLSHIT_STOP" then - if aura_env.ticker then - aura_env.ticker:Cancel() - end - elseif e == "PLAYER_ENTERING_WORLD" then - if IsInInstance() == true then - if aura_env.ticker then - aura_env.ticker:Cancel() - end - end - end +--[05:42 PM] [G] [Whispa]: is a newly created guild, we are looking for fun and social members. we are trying to get members to come into discord and we accept any levels. we are planning on making a raid team and hoping to get multiple teams for mythic dungeons +--/run WeakAuras.ScanEvents("BULLSHIT_BEGIN") +--BULLSHIT_BEGIN BULLSHIT_STOP PLAYER_ENTERING_WORLD +function(e) + if e == "BULLSHIT_BEGIN" then + if IsInInstance() == false then + aura_env.ticker = C_Timer.NewTicker(600, function() SendChatMessage(" is a newly created guild, we are looking for fun and social members. we are trying to get members to come into discord and we accept any levels. we are planning on making a raid team and hoping to get multiple teams for mythic dungeons", "CHANNEL", _, "1") end) + --aura_env.ticker = C_Timer.NewTicker(0.60, function() print(" is a newly created guild, we are looking for fun and social members. we are trying to get members to come into discord and we accept any levels. we are planning on making a raid team and hoping to get multiple teams for mythic dungeons") end) + else + if aura_env.ticker then + aura_env.ticker:Cancel() + end + end + elseif e == "BULLSHIT_STOP" then + if aura_env.ticker then + aura_env.ticker:Cancel() + end + elseif e == "PLAYER_ENTERING_WORLD" then + if IsInInstance() == true then + if aura_env.ticker then + aura_env.ticker:Cancel() + end + end + end end \ No newline at end of file diff --git a/Complete Projects/BFA/Icon Database Update.lua b/WeakAuras/Projects/ByExp/BFA/Icon Database Update.lua similarity index 98% rename from Complete Projects/BFA/Icon Database Update.lua rename to WeakAuras/Projects/ByExp/BFA/Icon Database Update.lua index ae63d44..54edfdf 100644 --- a/Complete Projects/BFA/Icon Database Update.lua +++ b/WeakAuras/Projects/ByExp/BFA/Icon Database Update.lua @@ -1,38 +1,38 @@ ---MERCHANT_SHOW PLAYER_ALIVE CHAT_MSG_LOOT -function(e, msg) - if e == "PLAYER_ALIVE" then - for c = 0, 5 do - for s = 1, GetContainerNumSlots(c) do - if GetContainerItemLink(c, s) then - local name = GetItemInfo(GetContainerItemLink(c, s)) - local icon = select(10, GetItemInfo(GetContainerItemLink(c, s))) - local link = GetContainerItemLink(c, s) - local id = link:match("item:(%d+):") - if not WeakAurasSaved.CustomTrash.IconDatabase[name] and name and icon then WeakAurasSaved.CustomTrash.IconDatabase[name] = icon; print("Adding|cff78cb00 ", name, " |rto the icon database") end - if not WeakAurasSaved.CustomTrash.IDDatabase[name] and name and id then WeakAurasSaved.CustomTrash.IDDatabase[name] = id; print("Adding|cff3366ff ", name, " |rto the id database") end - end - end - end - elseif e == "MERCHANT_SHOW" then - local i = 1 - C_Timer.After(0.2, function() - while GetMerchantItemInfo(i) do - local name, icon = GetMerchantItemInfo(i) - local link = GetMerchantItemLink(i) - local id = link:match("item:(%d+):") - if not WeakAurasSaved.CustomTrash.IconDatabase[name] and name and icon then WeakAurasSaved.CustomTrash.IconDatabase[name] = icon; print("Adding|cff78cb00 ", name, " |rto the icon database") end - if not WeakAurasSaved.CustomTrash.IDDatabase[name] and name and id then WeakAurasSaved.CustomTrash.IDDatabase[name] = id; print("Adding|cff3366ff ", name, " |rto the id database") end - i = i + 1 - end - end) - elseif e == "CHAT_MSG_LOOT" then - local itemID, icon, name - for itemLink in msg:gmatch("|%x+|Hitem:.-|h.-|h|r") do - itemID = itemLink:match("item:(%d+):") - icon = select(10, GetItemInfo(itemLink)) - name = GetItemInfo(itemLink) - end - if not WeakAurasSaved.CustomTrash.IconDatabase[name] and name and icon then WeakAurasSaved.CustomTrash.IconDatabase[name] = icon; print("Adding|cff78cb00 ", name, " |rto the icon database") end - if not WeakAurasSaved.CustomTrash.IDDatabase[name] and name and id then WeakAurasSaved.CustomTrash.IDDatabase[name] = id; print("Adding|cff3366ff ", name, " |rto the id database") end - end +--MERCHANT_SHOW PLAYER_ALIVE CHAT_MSG_LOOT +function(e, msg) + if e == "PLAYER_ALIVE" then + for c = 0, 5 do + for s = 1, GetContainerNumSlots(c) do + if GetContainerItemLink(c, s) then + local name = GetItemInfo(GetContainerItemLink(c, s)) + local icon = select(10, GetItemInfo(GetContainerItemLink(c, s))) + local link = GetContainerItemLink(c, s) + local id = link:match("item:(%d+):") + if not WeakAurasSaved.CustomTrash.IconDatabase[name] and name and icon then WeakAurasSaved.CustomTrash.IconDatabase[name] = icon; print("Adding|cff78cb00 ", name, " |rto the icon database") end + if not WeakAurasSaved.CustomTrash.IDDatabase[name] and name and id then WeakAurasSaved.CustomTrash.IDDatabase[name] = id; print("Adding|cff3366ff ", name, " |rto the id database") end + end + end + end + elseif e == "MERCHANT_SHOW" then + local i = 1 + C_Timer.After(0.2, function() + while GetMerchantItemInfo(i) do + local name, icon = GetMerchantItemInfo(i) + local link = GetMerchantItemLink(i) + local id = link:match("item:(%d+):") + if not WeakAurasSaved.CustomTrash.IconDatabase[name] and name and icon then WeakAurasSaved.CustomTrash.IconDatabase[name] = icon; print("Adding|cff78cb00 ", name, " |rto the icon database") end + if not WeakAurasSaved.CustomTrash.IDDatabase[name] and name and id then WeakAurasSaved.CustomTrash.IDDatabase[name] = id; print("Adding|cff3366ff ", name, " |rto the id database") end + i = i + 1 + end + end) + elseif e == "CHAT_MSG_LOOT" then + local itemID, icon, name + for itemLink in msg:gmatch("|%x+|Hitem:.-|h.-|h|r") do + itemID = itemLink:match("item:(%d+):") + icon = select(10, GetItemInfo(itemLink)) + name = GetItemInfo(itemLink) + end + if not WeakAurasSaved.CustomTrash.IconDatabase[name] and name and icon then WeakAurasSaved.CustomTrash.IconDatabase[name] = icon; print("Adding|cff78cb00 ", name, " |rto the icon database") end + if not WeakAurasSaved.CustomTrash.IDDatabase[name] and name and id then WeakAurasSaved.CustomTrash.IDDatabase[name] = id; print("Adding|cff3366ff ", name, " |rto the id database") end + end end \ No newline at end of file diff --git a/Complete Projects/BFA/Ignite.lua b/WeakAuras/Projects/ByExp/BFA/Ignite.lua similarity index 96% rename from Complete Projects/BFA/Ignite.lua rename to WeakAuras/Projects/ByExp/BFA/Ignite.lua index 4560059..7d4a206 100644 --- a/Complete Projects/BFA/Ignite.lua +++ b/WeakAuras/Projects/ByExp/BFA/Ignite.lua @@ -1,28 +1,28 @@ ---CLEU PLAYER_TARGET_CHANGED -function(e, ...) - if e == "COMBAT_LOG_EVENT_UNFILTERED" then - if (select(2, ...) == "SPELL_AURA_APPLIED" or select(2, ...) == "SPELL_AURA_REFRESH" or select(2, ...) == "SPELL_PERIODIC_DAMAGE") and select(5, ...) == UnitName("player") and select(13, ...) == "Ignite" then - return true - end - elseif e == "PLAYER_TARGET_CHANGED" then - return true - end -end - ---DISPLAY -function() - local function UnitDebuffC(unit, spell) - for i = 1, 40 do - local name = UnitDebuff(unit, i, PLAYER) - if name then - if name == spell then - return UnitDebuff(unit, i, PLAYER) - end - else - return nil - end - end - end - local thing = select(16, UnitDebuffC("target", "Ignite")) - if thing then return thing else return 0 end +--CLEU PLAYER_TARGET_CHANGED +function(e, ...) + if e == "COMBAT_LOG_EVENT_UNFILTERED" then + if (select(2, ...) == "SPELL_AURA_APPLIED" or select(2, ...) == "SPELL_AURA_REFRESH" or select(2, ...) == "SPELL_PERIODIC_DAMAGE") and select(5, ...) == UnitName("player") and select(13, ...) == "Ignite" then + return true + end + elseif e == "PLAYER_TARGET_CHANGED" then + return true + end +end + +--DISPLAY +function() + local function UnitDebuffC(unit, spell) + for i = 1, 40 do + local name = UnitDebuff(unit, i, PLAYER) + if name then + if name == spell then + return UnitDebuff(unit, i, PLAYER) + end + else + return nil + end + end + end + local thing = select(16, UnitDebuffC("target", "Ignite")) + if thing then return thing else return 0 end end \ No newline at end of file diff --git a/Complete Projects/BFA/Ignor Pain ALERT.lua b/WeakAuras/Projects/ByExp/BFA/Ignor Pain ALERT.lua similarity index 97% rename from Complete Projects/BFA/Ignor Pain ALERT.lua rename to WeakAuras/Projects/ByExp/BFA/Ignor Pain ALERT.lua index 17e2ef2..9aea6e6 100644 --- a/Complete Projects/BFA/Ignor Pain ALERT.lua +++ b/WeakAuras/Projects/ByExp/BFA/Ignor Pain ALERT.lua @@ -1,79 +1,79 @@ ---UNIT_AURA:player UNIT_POWER_UPDATE:player -function(e, ...) - if e == "UNIT_AURA" then - if aura_env.UnitBuffC("Ignore Pain") then - local expTime = math.floor((select(6, aura_env.UnitBuffC("Ignore Pain")) * 100)) - local ctime = math.floor((GetTime() * 100)) - if ctime + 1200 == expTime then aura_env.absorb = select(16, aura_env.UnitBuffC("Ignore Pain")) end - end - elseif e == "UNIT_POWER_UPDATE" then - local rage = UnitPower("player") - local time = GetTime() - if rage < 40 then - aura_env.region:Hide() - return false - elseif rage >= 40 and rage < 90 and not aura_env.UnitBuffC("player", "Ignore Pain") then - aura_env.region:SetIcon(GetSpellTexture("Ignore Pain")) - aura_env.region:SetOffset(128, 200) - aura_env.region:SetGlow(true) - aura_env.region:Color(1, 1, 1, 1) - aura_env.region:Show() - return true - elseif rage >= 40 and rage < 90 and aura_env.UnitBuffC("player", "Ignore Pain") then - local absorb = select(16, aura_env.UnitBuffC("player", "Ignore Pain")) or 0 - local expTime = select(6, aura_env.UnitBuffC("player", "Ignore Pain")) or 0 - if absorb > 0 and expTime > 0 then - if expTime - time <= 3 then - aura_env.region:SetIcon(GetSpellTexture("Ignore Pain")) - aura_env.region:SetOffset(128, 200) - aura_env.region:SetGlow(false) - aura_env.region:Color(1, 1, 1, 1) - aura_env.region:Show() - return true - elseif absorb <= 0.2 * aura_env.absorb then - aura_env.region:SetIcon(GetSpellTexture("Ignore Pain")) - aura_env.region:SetOffset(128, 200) - aura_env.region:SetGlow(false) - aura_env.region:Color(1, 1, 1, 1) - aura_env.region:Show() - return true - else - aura_env.region:Hide() - return false - end - end - elseif rage >= 90 and not aura_env.UnitBuffC("player", "Shield Block") then - aura_env.region:SetIcon(GetSpellTexture("Shield Block")) - aura_env.region:SetOffset(-128, 200) - aura_env.region:SetGlow(false) - aura_env.region:Color(1, 1, 1, 0.33) - aura_env.region:Show() - return true - elseif rage >= 90 and aura_env.UnitBuffC("player", "Shield Block") then - aura_env.region:SetIcon(GetSpellTexture("Ignore Pain")) - aura_env.region:SetOffset(128, 200) - aura_env.region:SetGlow(false) - aura_env.region:Color(1, 1, 1, 0.5) - aura_env.region:Show() - return true - else - aura_env.region:Hide()() - return false - end - end -end - ---INIT -aura_env.absorb = 0 -aura_env.UnitBuffC = function(unit, spell) - for i = 1, 40 do - local name = UnitBuff(unit, i) - if name then - if name == spell then - return UnitBuff(unit, i) - end - else - return nil - end - end +--UNIT_AURA:player UNIT_POWER_UPDATE:player +function(e, ...) + if e == "UNIT_AURA" then + if aura_env.UnitBuffC("Ignore Pain") then + local expTime = math.floor((select(6, aura_env.UnitBuffC("Ignore Pain")) * 100)) + local ctime = math.floor((GetTime() * 100)) + if ctime + 1200 == expTime then aura_env.absorb = select(16, aura_env.UnitBuffC("Ignore Pain")) end + end + elseif e == "UNIT_POWER_UPDATE" then + local rage = UnitPower("player") + local time = GetTime() + if rage < 40 then + aura_env.region:Hide() + return false + elseif rage >= 40 and rage < 90 and not aura_env.UnitBuffC("player", "Ignore Pain") then + aura_env.region:SetIcon(GetSpellTexture("Ignore Pain")) + aura_env.region:SetOffset(128, 200) + aura_env.region:SetGlow(true) + aura_env.region:Color(1, 1, 1, 1) + aura_env.region:Show() + return true + elseif rage >= 40 and rage < 90 and aura_env.UnitBuffC("player", "Ignore Pain") then + local absorb = select(16, aura_env.UnitBuffC("player", "Ignore Pain")) or 0 + local expTime = select(6, aura_env.UnitBuffC("player", "Ignore Pain")) or 0 + if absorb > 0 and expTime > 0 then + if expTime - time <= 3 then + aura_env.region:SetIcon(GetSpellTexture("Ignore Pain")) + aura_env.region:SetOffset(128, 200) + aura_env.region:SetGlow(false) + aura_env.region:Color(1, 1, 1, 1) + aura_env.region:Show() + return true + elseif absorb <= 0.2 * aura_env.absorb then + aura_env.region:SetIcon(GetSpellTexture("Ignore Pain")) + aura_env.region:SetOffset(128, 200) + aura_env.region:SetGlow(false) + aura_env.region:Color(1, 1, 1, 1) + aura_env.region:Show() + return true + else + aura_env.region:Hide() + return false + end + end + elseif rage >= 90 and not aura_env.UnitBuffC("player", "Shield Block") then + aura_env.region:SetIcon(GetSpellTexture("Shield Block")) + aura_env.region:SetOffset(-128, 200) + aura_env.region:SetGlow(false) + aura_env.region:Color(1, 1, 1, 0.33) + aura_env.region:Show() + return true + elseif rage >= 90 and aura_env.UnitBuffC("player", "Shield Block") then + aura_env.region:SetIcon(GetSpellTexture("Ignore Pain")) + aura_env.region:SetOffset(128, 200) + aura_env.region:SetGlow(false) + aura_env.region:Color(1, 1, 1, 0.5) + aura_env.region:Show() + return true + else + aura_env.region:Hide()() + return false + end + end +end + +--INIT +aura_env.absorb = 0 +aura_env.UnitBuffC = function(unit, spell) + for i = 1, 40 do + local name = UnitBuff(unit, i) + if name then + if name == spell then + return UnitBuff(unit, i) + end + else + return nil + end + end end \ No newline at end of file diff --git a/Complete Projects/BFA/Ignore Pain.lua b/WeakAuras/Projects/ByExp/BFA/Ignore Pain.lua similarity index 96% rename from Complete Projects/BFA/Ignore Pain.lua rename to WeakAuras/Projects/ByExp/BFA/Ignore Pain.lua index ba987c1..48997b4 100644 --- a/Complete Projects/BFA/Ignore Pain.lua +++ b/WeakAuras/Projects/ByExp/BFA/Ignore Pain.lua @@ -1,65 +1,65 @@ ---UNIT_COMBAT:player UNIT_AURA:player -function(e, ...) - if e == "UNIT_AURA" then - if aura_env.CUnitBuff("Ignore Pain") then - aura_env.amount = select(16, aura_env.CUnitBuff("Ignore Pain")) - local expTime = math.floor((select(6, aura_env.CUnitBuff("Ignore Pain")) * 100)) - local ctime = math.floor((GetTime() * 100)) - if ctime + 1200 == expTime then aura_env.lastTime = GetTime(); aura_env.maxamount = select(16, aura_env.CUnitBuff("Ignore Pain")) end - aura_env.region.text:SetText(aura_env.shorten(aura_env.amount)) - aura_env.region.timer:SetText(aura_env.shorten(aura_env.maxamount)) - else - aura_env.region.text:SetText("") - aura_env.region.timer:SetText("") - aura_env.maxamount = 0 - end - return true - elseif e == "UNIT_COMBAT" then - if aura_env.CUnitBuff("Ignore Pain") then - aura_env.amount = select(16, aura_env.CUnitBuff("Ignore Pain")) - aura_env.region.text:SetText(aura_env.shorten(aura_env.amount)) - aura_env.region.timer:SetText(aura_env.shorten(aura_env.maxamount)) - end - return true - end -end - ---DURATION -function() - return aura_env.amount, aura_env.maxamount, 1 -end - ---INIT -aura_env.absorb = 0 -aura_env.CUnitBuff = function(spell) - for i = 1, 40 do - local name = UnitBuff("player", i) - if name then - if name == spell then - return UnitBuff("player", i) - end - else - break - end - end -end -aura_env.shorten = function(val) - local function round(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var - end - local n = 2 - if val < 1e3 then - return round(val, n) - elseif val > 1e3 and val < 1e6 then - return round(val / 1e3, n) .. "k" - elseif val > 1e6 and val < 1e9 then - return round(val / 1e6, n) .. "M" - elseif val > 1e9 then - return round(val / 1e9, n) .. "G" - end +--UNIT_COMBAT:player UNIT_AURA:player +function(e, ...) + if e == "UNIT_AURA" then + if aura_env.CUnitBuff("Ignore Pain") then + aura_env.amount = select(16, aura_env.CUnitBuff("Ignore Pain")) + local expTime = math.floor((select(6, aura_env.CUnitBuff("Ignore Pain")) * 100)) + local ctime = math.floor((GetTime() * 100)) + if ctime + 1200 == expTime then aura_env.lastTime = GetTime(); aura_env.maxamount = select(16, aura_env.CUnitBuff("Ignore Pain")) end + aura_env.region.text:SetText(aura_env.shorten(aura_env.amount)) + aura_env.region.timer:SetText(aura_env.shorten(aura_env.maxamount)) + else + aura_env.region.text:SetText("") + aura_env.region.timer:SetText("") + aura_env.maxamount = 0 + end + return true + elseif e == "UNIT_COMBAT" then + if aura_env.CUnitBuff("Ignore Pain") then + aura_env.amount = select(16, aura_env.CUnitBuff("Ignore Pain")) + aura_env.region.text:SetText(aura_env.shorten(aura_env.amount)) + aura_env.region.timer:SetText(aura_env.shorten(aura_env.maxamount)) + end + return true + end +end + +--DURATION +function() + return aura_env.amount, aura_env.maxamount, 1 +end + +--INIT +aura_env.absorb = 0 +aura_env.CUnitBuff = function(spell) + for i = 1, 40 do + local name = UnitBuff("player", i) + if name then + if name == spell then + return UnitBuff("player", i) + end + else + break + end + end +end +aura_env.shorten = function(val) + local function round(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var + end + local n = 2 + if val < 1e3 then + return round(val, n) + elseif val > 1e3 and val < 1e6 then + return round(val / 1e3, n) .. "k" + elseif val > 1e6 and val < 1e9 then + return round(val / 1e6, n) .. "M" + elseif val > 1e9 then + return round(val / 1e9, n) .. "G" + end end \ No newline at end of file diff --git a/Complete Projects/BFA/Kindling.lua b/WeakAuras/Projects/ByExp/BFA/Kindling.lua similarity index 97% rename from Complete Projects/BFA/Kindling.lua rename to WeakAuras/Projects/ByExp/BFA/Kindling.lua index d826450..3eb2a71 100644 --- a/Complete Projects/BFA/Kindling.lua +++ b/WeakAuras/Projects/ByExp/BFA/Kindling.lua @@ -1,24 +1,24 @@ ---CLEU SPELL_UPDATE_COOLDOWN -function(e, ...) - if e == "COMBAT_LOG_EVENT_UNFILTERED" then - if select(2, ...) == "SPELL_DAMAGE" and select(5, ...) == UnitName("player") and (select(13, ...) == "Fireball" or select(13, ...) == "Fire Blast" or select(13, ...) == "Pyroblast") and select(21, ...) == true and GetSpellCooldown("Combustion") > 0 then - if not aura_env.cd then aura_env.cd = 0 end - aura_env.cd = aura_env.cd + 1 - return true - end - if select(2, ...) == "SPELL_CAST_SUCCESS" and select(5, ...) == UnitName("player") and select(13, ...) == "Combustion" then - aura_env.cd = 0 - end - elseif e == "SPELL_UPDATE_COOLDOWN" then return true - end -end - ---DISPLAY -function() - if not aura_env.cd then aura_env.cd = 0 end - if GetSpellCooldown("Combustion") > 0 then - return "|cfffd477b" .. aura_env.cd - else - return "|cff78cb00" .. aura_env.cd - end +--CLEU SPELL_UPDATE_COOLDOWN +function(e, ...) + if e == "COMBAT_LOG_EVENT_UNFILTERED" then + if select(2, ...) == "SPELL_DAMAGE" and select(5, ...) == UnitName("player") and (select(13, ...) == "Fireball" or select(13, ...) == "Fire Blast" or select(13, ...) == "Pyroblast") and select(21, ...) == true and GetSpellCooldown("Combustion") > 0 then + if not aura_env.cd then aura_env.cd = 0 end + aura_env.cd = aura_env.cd + 1 + return true + end + if select(2, ...) == "SPELL_CAST_SUCCESS" and select(5, ...) == UnitName("player") and select(13, ...) == "Combustion" then + aura_env.cd = 0 + end + elseif e == "SPELL_UPDATE_COOLDOWN" then return true + end +end + +--DISPLAY +function() + if not aura_env.cd then aura_env.cd = 0 end + if GetSpellCooldown("Combustion") > 0 then + return "|cfffd477b" .. aura_env.cd + else + return "|cff78cb00" .. aura_env.cd + end end \ No newline at end of file diff --git a/Complete Projects/BFA/Loot List.lua b/WeakAuras/Projects/ByExp/BFA/Loot List.lua similarity index 95% rename from Complete Projects/BFA/Loot List.lua rename to WeakAuras/Projects/ByExp/BFA/Loot List.lua index a2ea64a..38b2c5b 100644 --- a/Complete Projects/BFA/Loot List.lua +++ b/WeakAuras/Projects/ByExp/BFA/Loot List.lua @@ -1,34 +1,34 @@ ---CHAT_MSG_LOOT -function(_,msg,who) - local who = who:match(UnitName("player")) - local what = msg:match("%[([a-zA-Z ' -]+)%]") - if who == UnitName("player") then - local link = "" - for i = 0, 4 do - for j = 1, GetContainerNumSlots(i) do - if GetContainerItemLink(i,j) then - if GetItemInfo(GetContainerItemLink(i, j)) == what then - link = GetContainerItemLink(i, j) - end - end - end - end - table.insert(aura_env.loot, {["Who"] = who, ["What"] = what, ["When"] = GetTime() + 2.5, ["Link"] = link}) - end -end - ---DISPLAY -function() - local output = "" - for k,v in ipairs(aura_env.loot) do - if v.When < GetTime() then - table.remove(aura_env.loot, k) - else - output = output .. v.Link .. "\n" - end - end - return output -end - ---INIT +--CHAT_MSG_LOOT +function(_,msg,who) + local who = who:match(UnitName("player")) + local what = msg:match("%[([a-zA-Z ' -]+)%]") + if who == UnitName("player") then + local link = "" + for i = 0, 4 do + for j = 1, GetContainerNumSlots(i) do + if GetContainerItemLink(i,j) then + if GetItemInfo(GetContainerItemLink(i, j)) == what then + link = GetContainerItemLink(i, j) + end + end + end + end + table.insert(aura_env.loot, {["Who"] = who, ["What"] = what, ["When"] = GetTime() + 2.5, ["Link"] = link}) + end +end + +--DISPLAY +function() + local output = "" + for k,v in ipairs(aura_env.loot) do + if v.When < GetTime() then + table.remove(aura_env.loot, k) + else + output = output .. v.Link .. "\n" + end + end + return output +end + +--INIT aura_env.loot = {} \ No newline at end of file diff --git a/Complete Projects/BFA/Map.lua b/WeakAuras/Projects/ByExp/BFA/Map.lua similarity index 97% rename from Complete Projects/BFA/Map.lua rename to WeakAuras/Projects/ByExp/BFA/Map.lua index 9220b82..fa37846 100644 --- a/Complete Projects/BFA/Map.lua +++ b/WeakAuras/Projects/ByExp/BFA/Map.lua @@ -1,121 +1,121 @@ ---EVERY FRAME (Throttled) -function() - if aura_env.lastscan < GetTime() then - if UnitExists("focus") then - if UnitInParty("focus") then - --Get MapID for both - local myMapID = C_Map.GetBestMapForUnit("player") - local focusMapID = C_Map.GetBestMapForUnit("focus") - - --Get Coordinates for both within same map - local pX, pY, fX, fY = 0, 0, 0, 0 - if myMapID == focusMapID then - pX, pY = aura_env.round(C_Map.GetPlayerMapPosition(myMapID, "player").x, 4) * 10000, aura_env.round(C_Map.GetPlayerMapPosition(myMapID, "player").y, 4) * 10000 - fX, fY = aura_env.round(C_Map.GetPlayerMapPosition(myMapID, "focus").x, 4) * 10000, aura_env.round(C_Map.GetPlayerMapPosition(myMapID, "focus").y, 4) * 10000 - end - - if pX > 0 and pY > 0 and fX > 0 and fY > 0 then - --Get player direction facing and convert to angle - local playerFace = GetPlayerFacing() or 0 - local playerA = math.floor(playerFace * 100) - playerA = aura_env.range(playerA, 0, 630, 360) - 1 - playerA = - playerA - playerA = math.floor(playerA) - playerA = playerA - 90 - if playerA < 0 then playerA = playerA + 360 end - - --Get relative Coordinates - local X = fX - pX - local Y = fY - pY - local hyp = math.sqrt((X ^ 2) + (Y ^ 2)) - local a = math.atan2(Y, X) - a = a - math.rad(playerA) - local Y2, X2 = hyp * math.cos(a), hyp * math.sin(a) - local zoomout, zoomin = 100, 50 - if (math.abs((X2 * aura_env.zoom)) > zoomout or math.abs((Y2 * aura_env.zoom)) > zoomout) and aura_env.zoom > 0.3 then - aura_env.zoom = aura_env.zoom - 0.2 - elseif (math.abs((X2 * aura_env.zoom)) > zoomout or math.abs((Y2 * aura_env.zoom)) > zoomout) and aura_env.zoom <= 0.3 and aura_env.zoom > 0.1 then - aura_env.zoom = aura_env.zoom - 0.05 - elseif (math.abs((X2 * aura_env.zoom)) > zoomout or math.abs((Y2 * aura_env.zoom)) > zoomout) and aura_env.zoom <= 0.1 and aura_env.zoom > 0.0005 then - aura_env.zoom = aura_env.zoom - 0.0005 - elseif (math.abs((X2 * aura_env.zoom)) > zoomout or math.abs((Y2 * aura_env.zoom)) > zoomout) and aura_env.zoom < 0.001 then - aura_env.zoom = 1 - end - if (math.abs((X2 * aura_env.zoom)) < zoomin and math.abs((Y2 * aura_env.zoom)) < zoomin) and aura_env.zoom < 50 then - aura_env.zoom = aura_env.zoom + 0.2 - end - aura_env.region.text:SetText("Zoom: " .. aura_env.zoom .. "\nDistance: " .. aura_env.round(hyp, 0)) - aura_env.region.playerTexture:SetPoint("CENTER", aura_env.region, "CENTER", 0, 0) - aura_env.region.focusTexture:SetPoint("CENTER", aura_env.region, "CENTER", X2 * aura_env.zoom, Y2 * aura_env.zoom) - - --Get class to color - local pclass, fclass = select(3, UnitClass("player")), select(3, UnitClass("focus")) - aura_env.region.playerTexture:SetVertexColor(aura_env.classColor(pclass)) - aura_env.region.focusTexture:SetVertexColor(aura_env.classColor(fclass)) - return true - else - print("Focus not in map!") - end - aura_env.lastscan = GetTime() + aura_env.throttle / 1000 - else print("Focus not in party!"); aura_env.region.playerTexture:Hide(); aura_env.region.focusTexture:Hide(); aura_env.lastscan = GetTime() + 5 end - else print("No focus found!"); aura_env.region.playerTexture:Hide(); aura_env.region.focusTexture:Hide(); aura_env.lastscan = GetTime() + 5 end - end -end - ---INIT -aura_env.throttle = 250 -aura_env.lastscan = 0 -aura_env.zoom = 1 -aura_env.range = function(val, min, max, max2) - val = 1 - (((max - val) / (max - min)) * max2) - return val -end -aura_env.round = function(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var -end -aura_env.classColor = function(class) - if class == 1 then return 0.78, 0.61, 0.43, 0.75 elseif - class == 2 then return 0.96, 0.55, 0.73, 0.75 elseif - class == 3 then return 0.67, 0.83, 0.45, 0.75 elseif - class == 4 then return 1, 0.96, 0.41, 0.75 elseif - class == 5 then return 1, 1, 1, 0.75 elseif - class == 6 then return 0.77, 0.12, 0.23, 0.75 elseif - class == 7 then return 0, 0.44, 0.87, 0.75 elseif - class == 8 then return 0.25, 0.78, 0.92, 0.75 elseif - class == 9 then return 0.53, 0.53, 0.93, 0.75 elseif - class == 10 then return 0, 1, 0.59, 0.75 elseif - class == 11 then return 1, 0.49, 0.04, 0.75 elseif - class == 12 then return 0.64, 0.19, 0.79, 0.75 else - return 1, 1, 1, 1 end -end - -if not aura_env.region.playerTexture then - local playerTexture = aura_env.region:CreateTexture(nil, "OVERLAY") - aura_env.region.playerTexture = playerTexture -end -aura_env.region.playerTexture:SetTexture("Interface\\Addons\\WeakAuras\\PowerAurasMedia\\Auras\\Aura72") -aura_env.region.playerTexture:SetHeight(16) -aura_env.region.playerTexture:SetWidth(16) -aura_env.region.playerTexture:Show() -if not aura_env.region.focusTexture then - local focusTexture = aura_env.region:CreateTexture(nil, "OVERLAY") - aura_env.region.focusTexture = focusTexture -end -aura_env.region.focusTexture:SetTexture("Interface\\Addons\\WeakAuras\\PowerAurasMedia\\Auras\\Aura72") -aura_env.region.focusTexture:SetHeight(16) -aura_env.region.focusTexture:SetWidth(16) -aura_env.region.focusTexture:Show() -if not aura_env.region.text then - local text = aura_env.region:CreateFontString(nil, aura_env.region) - aura_env.region.text = text -end -aura_env.region.text:ClearAllPoints() -aura_env.region.text:SetPoint("CENTER", aura_env.region, "CENTER", 0, 500) -aura_env.region.text:SetFont("Interface\\AddOns\\SharedMedia_MyMedia\\font\\FiraCode-Medium.ttf", 16, "OUTLINE") -aura_env.region.text:SetJustifyH("CENTER") +--EVERY FRAME (Throttled) +function() + if aura_env.lastscan < GetTime() then + if UnitExists("focus") then + if UnitInParty("focus") then + --Get MapID for both + local myMapID = C_Map.GetBestMapForUnit("player") + local focusMapID = C_Map.GetBestMapForUnit("focus") + + --Get Coordinates for both within same map + local pX, pY, fX, fY = 0, 0, 0, 0 + if myMapID == focusMapID then + pX, pY = aura_env.round(C_Map.GetPlayerMapPosition(myMapID, "player").x, 4) * 10000, aura_env.round(C_Map.GetPlayerMapPosition(myMapID, "player").y, 4) * 10000 + fX, fY = aura_env.round(C_Map.GetPlayerMapPosition(myMapID, "focus").x, 4) * 10000, aura_env.round(C_Map.GetPlayerMapPosition(myMapID, "focus").y, 4) * 10000 + end + + if pX > 0 and pY > 0 and fX > 0 and fY > 0 then + --Get player direction facing and convert to angle + local playerFace = GetPlayerFacing() or 0 + local playerA = math.floor(playerFace * 100) + playerA = aura_env.range(playerA, 0, 630, 360) - 1 + playerA = - playerA + playerA = math.floor(playerA) + playerA = playerA - 90 + if playerA < 0 then playerA = playerA + 360 end + + --Get relative Coordinates + local X = fX - pX + local Y = fY - pY + local hyp = math.sqrt((X ^ 2) + (Y ^ 2)) + local a = math.atan2(Y, X) + a = a - math.rad(playerA) + local Y2, X2 = hyp * math.cos(a), hyp * math.sin(a) + local zoomout, zoomin = 100, 50 + if (math.abs((X2 * aura_env.zoom)) > zoomout or math.abs((Y2 * aura_env.zoom)) > zoomout) and aura_env.zoom > 0.3 then + aura_env.zoom = aura_env.zoom - 0.2 + elseif (math.abs((X2 * aura_env.zoom)) > zoomout or math.abs((Y2 * aura_env.zoom)) > zoomout) and aura_env.zoom <= 0.3 and aura_env.zoom > 0.1 then + aura_env.zoom = aura_env.zoom - 0.05 + elseif (math.abs((X2 * aura_env.zoom)) > zoomout or math.abs((Y2 * aura_env.zoom)) > zoomout) and aura_env.zoom <= 0.1 and aura_env.zoom > 0.0005 then + aura_env.zoom = aura_env.zoom - 0.0005 + elseif (math.abs((X2 * aura_env.zoom)) > zoomout or math.abs((Y2 * aura_env.zoom)) > zoomout) and aura_env.zoom < 0.001 then + aura_env.zoom = 1 + end + if (math.abs((X2 * aura_env.zoom)) < zoomin and math.abs((Y2 * aura_env.zoom)) < zoomin) and aura_env.zoom < 50 then + aura_env.zoom = aura_env.zoom + 0.2 + end + aura_env.region.text:SetText("Zoom: " .. aura_env.zoom .. "\nDistance: " .. aura_env.round(hyp, 0)) + aura_env.region.playerTexture:SetPoint("CENTER", aura_env.region, "CENTER", 0, 0) + aura_env.region.focusTexture:SetPoint("CENTER", aura_env.region, "CENTER", X2 * aura_env.zoom, Y2 * aura_env.zoom) + + --Get class to color + local pclass, fclass = select(3, UnitClass("player")), select(3, UnitClass("focus")) + aura_env.region.playerTexture:SetVertexColor(aura_env.classColor(pclass)) + aura_env.region.focusTexture:SetVertexColor(aura_env.classColor(fclass)) + return true + else + print("Focus not in map!") + end + aura_env.lastscan = GetTime() + aura_env.throttle / 1000 + else print("Focus not in party!"); aura_env.region.playerTexture:Hide(); aura_env.region.focusTexture:Hide(); aura_env.lastscan = GetTime() + 5 end + else print("No focus found!"); aura_env.region.playerTexture:Hide(); aura_env.region.focusTexture:Hide(); aura_env.lastscan = GetTime() + 5 end + end +end + +--INIT +aura_env.throttle = 250 +aura_env.lastscan = 0 +aura_env.zoom = 1 +aura_env.range = function(val, min, max, max2) + val = 1 - (((max - val) / (max - min)) * max2) + return val +end +aura_env.round = function(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var +end +aura_env.classColor = function(class) + if class == 1 then return 0.78, 0.61, 0.43, 0.75 elseif + class == 2 then return 0.96, 0.55, 0.73, 0.75 elseif + class == 3 then return 0.67, 0.83, 0.45, 0.75 elseif + class == 4 then return 1, 0.96, 0.41, 0.75 elseif + class == 5 then return 1, 1, 1, 0.75 elseif + class == 6 then return 0.77, 0.12, 0.23, 0.75 elseif + class == 7 then return 0, 0.44, 0.87, 0.75 elseif + class == 8 then return 0.25, 0.78, 0.92, 0.75 elseif + class == 9 then return 0.53, 0.53, 0.93, 0.75 elseif + class == 10 then return 0, 1, 0.59, 0.75 elseif + class == 11 then return 1, 0.49, 0.04, 0.75 elseif + class == 12 then return 0.64, 0.19, 0.79, 0.75 else + return 1, 1, 1, 1 end +end + +if not aura_env.region.playerTexture then + local playerTexture = aura_env.region:CreateTexture(nil, "OVERLAY") + aura_env.region.playerTexture = playerTexture +end +aura_env.region.playerTexture:SetTexture("Interface\\Addons\\WeakAuras\\PowerAurasMedia\\Auras\\Aura72") +aura_env.region.playerTexture:SetHeight(16) +aura_env.region.playerTexture:SetWidth(16) +aura_env.region.playerTexture:Show() +if not aura_env.region.focusTexture then + local focusTexture = aura_env.region:CreateTexture(nil, "OVERLAY") + aura_env.region.focusTexture = focusTexture +end +aura_env.region.focusTexture:SetTexture("Interface\\Addons\\WeakAuras\\PowerAurasMedia\\Auras\\Aura72") +aura_env.region.focusTexture:SetHeight(16) +aura_env.region.focusTexture:SetWidth(16) +aura_env.region.focusTexture:Show() +if not aura_env.region.text then + local text = aura_env.region:CreateFontString(nil, aura_env.region) + aura_env.region.text = text +end +aura_env.region.text:ClearAllPoints() +aura_env.region.text:SetPoint("CENTER", aura_env.region, "CENTER", 0, 500) +aura_env.region.text:SetFont("Interface\\AddOns\\SharedMedia_MyMedia\\font\\FiraCode-Medium.ttf", 16, "OUTLINE") +aura_env.region.text:SetJustifyH("CENTER") aura_env.region.text:Show() \ No newline at end of file diff --git a/Complete Projects/BFA/Mob Highlight.lua b/WeakAuras/Projects/ByExp/BFA/Mob Highlight.lua similarity index 96% rename from Complete Projects/BFA/Mob Highlight.lua rename to WeakAuras/Projects/ByExp/BFA/Mob Highlight.lua index a49913b..bea3079 100644 --- a/Complete Projects/BFA/Mob Highlight.lua +++ b/WeakAuras/Projects/ByExp/BFA/Mob Highlight.lua @@ -1,108 +1,108 @@ ---QUEST_LOG_UPDATE -function(e, unit) - if e == "QUEST_LOG_UPDATE" then - local entries = GetNumQuestLogEntries() - for i = 1, entries do - if GetQuestLogLeaderBoard(1, i) then - for j = 1, 40 do - local text, type, finished = GetQuestLogLeaderBoard(1, i) - if not text then - break - elseif text and not finished then - if type == "monster" and text:match("slain") then - local count, mcount = text:match("(%d*)%/(%d*)") - local rem = mcount - count - local mob = text:match("%d*%/%d* (.+) slain") - aura_env.mobs[mob] = rem - end - elseif finished and aura_env.mobs[mob] then - local mob = text:match("%d*%/%d* (.+) slain") - table.remove(aura_env.mobs, mob) - end - end - end - end - end -end - ---NAME_PLATE_UNIT_ADDED NAME_PLATE_UNIT_REMOVED ---TSU -function(allstates, e, unit) - if e == "NAME_PLATE_UNIT_ADDED" then - if UnitExists(unit) then - if aura_env.mobs[UnitName(unit)] then - local name = UnitName(unit) - allstates[unit] = - { - show = true, - changed = true, - unit = unit, - name = name, - count = aura_env.mobs[name], - } - return true - end - end - elseif e == "NAME_PLATE_UNIT_REMOVED" then - if allstates[unit] then - allstates[unit] = - { - show = false, - changed = true, - } - return true - end - end -end - ---ON SHOW -if not aura_env.region.text then - local text = aura_env.region:CreateFontString(nil, "OVERLAY") - aura_env.region.text = text -end -aura_env.region:SetHeight(128) -aura_env.region:SetWidth(512) -aura_env.region.text:SetFont("Interface\\AddOns\\SharedMedia_MyMedia\\font\\FiraCode-Regular.ttf", 18, "OUTLINE") -aura_env.region.text:SetTextColor(1,1,1,1) -aura_env.region.text:SetText(aura_env.statee.count) -if not aura_env.region.texture then - local texture = aura_env.region:CreateTexture(nil, "OVERLAY") - aura_env.region.texture = texture -end -aura_env.region.texture:SetTexture("Interface\\Addons\\WeakAuras\\PowerAurasMedia\\Auras\\Aura51") -aura_env.region.texture:SetHeight(32) -aura_env.region.texture:SetWidth(32) -local plate = C_NamePlate.GetNamePlateForUnit(aura_env.statee.unit) -if plate then - print("found plate pls work") - aura_env.region.texture:ClearAllPoints() - aura_env.region.texture:SetPoint("TOP", plate, "TOP", 0, 32) - aura_env.region.texture:Show() - aura_env.region.text:ClearAllPoints() - aura_env.region.text:SetPoint("CENTER", plate, "CENTER", 32, 48) - aura_env.region.text:Show() -end - ---INIT -aura_env.mobs = {} -local entries = GetNumQuestLogEntries() -for i = 1, entries do - if GetQuestLogLeaderBoard(1, i) then - for j = 1, 40 do - local text, type, finished = GetQuestLogLeaderBoard(1, i) - if not text then - break - elseif text and not finished then - if type == "monster" and text:match("slain") then - local count, mcount = text:match("(%d*)%/(%d*)") - local rem = mcount - count - local mob = text:match("%d*%/%d* (.+) slain") - aura_env.mobs[mob] = rem - end - elseif finished and aura_env.mobs[mob] then - local mob = text:match("%d*%/%d* (.+) slain") - table.remove(aura_env.mobs, mob) - end - end - end +--QUEST_LOG_UPDATE +function(e, unit) + if e == "QUEST_LOG_UPDATE" then + local entries = GetNumQuestLogEntries() + for i = 1, entries do + if GetQuestLogLeaderBoard(1, i) then + for j = 1, 40 do + local text, type, finished = GetQuestLogLeaderBoard(1, i) + if not text then + break + elseif text and not finished then + if type == "monster" and text:match("slain") then + local count, mcount = text:match("(%d*)%/(%d*)") + local rem = mcount - count + local mob = text:match("%d*%/%d* (.+) slain") + aura_env.mobs[mob] = rem + end + elseif finished and aura_env.mobs[mob] then + local mob = text:match("%d*%/%d* (.+) slain") + table.remove(aura_env.mobs, mob) + end + end + end + end + end +end + +--NAME_PLATE_UNIT_ADDED NAME_PLATE_UNIT_REMOVED +--TSU +function(allstates, e, unit) + if e == "NAME_PLATE_UNIT_ADDED" then + if UnitExists(unit) then + if aura_env.mobs[UnitName(unit)] then + local name = UnitName(unit) + allstates[unit] = + { + show = true, + changed = true, + unit = unit, + name = name, + count = aura_env.mobs[name], + } + return true + end + end + elseif e == "NAME_PLATE_UNIT_REMOVED" then + if allstates[unit] then + allstates[unit] = + { + show = false, + changed = true, + } + return true + end + end +end + +--ON SHOW +if not aura_env.region.text then + local text = aura_env.region:CreateFontString(nil, "OVERLAY") + aura_env.region.text = text +end +aura_env.region:SetHeight(128) +aura_env.region:SetWidth(512) +aura_env.region.text:SetFont("Interface\\AddOns\\SharedMedia_MyMedia\\font\\FiraCode-Regular.ttf", 18, "OUTLINE") +aura_env.region.text:SetTextColor(1,1,1,1) +aura_env.region.text:SetText(aura_env.statee.count) +if not aura_env.region.texture then + local texture = aura_env.region:CreateTexture(nil, "OVERLAY") + aura_env.region.texture = texture +end +aura_env.region.texture:SetTexture("Interface\\Addons\\WeakAuras\\PowerAurasMedia\\Auras\\Aura51") +aura_env.region.texture:SetHeight(32) +aura_env.region.texture:SetWidth(32) +local plate = C_NamePlate.GetNamePlateForUnit(aura_env.statee.unit) +if plate then + print("found plate pls work") + aura_env.region.texture:ClearAllPoints() + aura_env.region.texture:SetPoint("TOP", plate, "TOP", 0, 32) + aura_env.region.texture:Show() + aura_env.region.text:ClearAllPoints() + aura_env.region.text:SetPoint("CENTER", plate, "CENTER", 32, 48) + aura_env.region.text:Show() +end + +--INIT +aura_env.mobs = {} +local entries = GetNumQuestLogEntries() +for i = 1, entries do + if GetQuestLogLeaderBoard(1, i) then + for j = 1, 40 do + local text, type, finished = GetQuestLogLeaderBoard(1, i) + if not text then + break + elseif text and not finished then + if type == "monster" and text:match("slain") then + local count, mcount = text:match("(%d*)%/(%d*)") + local rem = mcount - count + local mob = text:match("%d*%/%d* (.+) slain") + aura_env.mobs[mob] = rem + end + elseif finished and aura_env.mobs[mob] then + local mob = text:match("%d*%/%d* (.+) slain") + table.remove(aura_env.mobs, mob) + end + end + end end \ No newline at end of file diff --git a/Complete Projects/BFA/Null Barrier.lua b/WeakAuras/Projects/ByExp/BFA/Null Barrier.lua similarity index 96% rename from Complete Projects/BFA/Null Barrier.lua rename to WeakAuras/Projects/ByExp/BFA/Null Barrier.lua index 9fc2edd..84efb55 100644 --- a/Complete Projects/BFA/Null Barrier.lua +++ b/WeakAuras/Projects/ByExp/BFA/Null Barrier.lua @@ -1,67 +1,67 @@ ---UNIT_COMBAT:player UNIT_AURA:player -function(e, ...) - if e == "UNIT_AURA" then - if aura_env.CUnitBuff("Null Barrier") then - aura_env.amount = select(16, aura_env.CUnitBuff("Null Barrier")) - local expTime = math.floor((select(6, aura_env.CUnitBuff("Null Barrier")) * 100)) - local ctime = math.floor((GetTime() * 100)) - if ctime + 1000 == expTime then aura_env.lastTime = GetTime(); aura_env.maxamount = select(16, aura_env.CUnitBuff("Null Barrier")) end - end - return true - elseif e == "UNIT_COMBAT" then - if aura_env.CUnitBuff("Null Barrier") then - aura_env.amount = select(16, aura_env.CUnitBuff("Null Barrier")) - end - return true - end -end - ---DURATION -function() - if aura_env.CUnitBuff("Null Barrier") then - aura_env.region:SetInverse(false) - aura_env.region:Color(0.5, 0, 0.5, 1) - return aura_env.amount, aura_env.maxamount, 1 - else - aura_env.region:SetInverse(true) - aura_env.region:Color(0.5, 0.5, 0.5, 1) - return 15, aura_env.lastTime + 15 - end -end - ---INIT -aura_env.maxamount = 0 -aura_env.amount = 0 -aura_env.lastTime = GetTime() -aura_env.CUnitBuff = function(spell) - for i = 1, 40 do - local name = UnitBuff("player", i) - if name then - if name == spell then - return UnitBuff("player", i) - end - else - break - end - end -end -aura_env.shorten = function(val) - local function round(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var - end - local n = 2 - if val < 1e3 then - return round(val, n) - elseif val > 1e3 and val < 1e6 then - return round(val / 1e3, n) .. "k" - elseif val > 1e6 and val < 1e9 then - return round(val / 1e6, n) .. "M" - elseif val > 1e9 then - return round(val / 1e9, n) .. "G" - end +--UNIT_COMBAT:player UNIT_AURA:player +function(e, ...) + if e == "UNIT_AURA" then + if aura_env.CUnitBuff("Null Barrier") then + aura_env.amount = select(16, aura_env.CUnitBuff("Null Barrier")) + local expTime = math.floor((select(6, aura_env.CUnitBuff("Null Barrier")) * 100)) + local ctime = math.floor((GetTime() * 100)) + if ctime + 1000 == expTime then aura_env.lastTime = GetTime(); aura_env.maxamount = select(16, aura_env.CUnitBuff("Null Barrier")) end + end + return true + elseif e == "UNIT_COMBAT" then + if aura_env.CUnitBuff("Null Barrier") then + aura_env.amount = select(16, aura_env.CUnitBuff("Null Barrier")) + end + return true + end +end + +--DURATION +function() + if aura_env.CUnitBuff("Null Barrier") then + aura_env.region:SetInverse(false) + aura_env.region:Color(0.5, 0, 0.5, 1) + return aura_env.amount, aura_env.maxamount, 1 + else + aura_env.region:SetInverse(true) + aura_env.region:Color(0.5, 0.5, 0.5, 1) + return 15, aura_env.lastTime + 15 + end +end + +--INIT +aura_env.maxamount = 0 +aura_env.amount = 0 +aura_env.lastTime = GetTime() +aura_env.CUnitBuff = function(spell) + for i = 1, 40 do + local name = UnitBuff("player", i) + if name then + if name == spell then + return UnitBuff("player", i) + end + else + break + end + end +end +aura_env.shorten = function(val) + local function round(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var + end + local n = 2 + if val < 1e3 then + return round(val, n) + elseif val > 1e3 and val < 1e6 then + return round(val / 1e3, n) .. "k" + elseif val > 1e6 and val < 1e9 then + return round(val / 1e6, n) .. "M" + elseif val > 1e9 then + return round(val / 1e9, n) .. "G" + end end \ No newline at end of file diff --git a/Complete Projects/BFA/Quest Fuckery.lua b/WeakAuras/Projects/ByExp/BFA/Quest Fuckery.lua similarity index 95% rename from Complete Projects/BFA/Quest Fuckery.lua rename to WeakAuras/Projects/ByExp/BFA/Quest Fuckery.lua index b56261f..929848e 100644 --- a/Complete Projects/BFA/Quest Fuckery.lua +++ b/WeakAuras/Projects/ByExp/BFA/Quest Fuckery.lua @@ -1,20 +1,20 @@ ---QUEST_POI_UPDATE UPDATE_Q_ITEM -function() - if InCombatLockdown() ~= 1 then - for i = 0, 4 do - for j = 1, GetContainerNumSlots(i) do - local link = select(7, GetContainerItemInfo(i, j)) - if link then - local type = select(6, GetItemInfo(link)) - if type == "Quest" then - PickupContainerItem(i, j) - if CursorHasItem() then - PickupAction(22) - ClearCursor() - end - end - end - end - end - end +--QUEST_POI_UPDATE UPDATE_Q_ITEM +function() + if InCombatLockdown() ~= 1 then + for i = 0, 4 do + for j = 1, GetContainerNumSlots(i) do + local link = select(7, GetContainerItemInfo(i, j)) + if link then + local type = select(6, GetItemInfo(link)) + if type == "Quest" then + PickupContainerItem(i, j) + if CursorHasItem() then + PickupAction(22) + ClearCursor() + end + end + end + end + end + end end \ No newline at end of file diff --git a/Complete Projects/BFA/Rare Tracc.lua b/WeakAuras/Projects/ByExp/BFA/Rare Tracc.lua similarity index 97% rename from Complete Projects/BFA/Rare Tracc.lua rename to WeakAuras/Projects/ByExp/BFA/Rare Tracc.lua index ac8e576..56e3623 100644 --- a/Complete Projects/BFA/Rare Tracc.lua +++ b/WeakAuras/Projects/ByExp/BFA/Rare Tracc.lua @@ -1,100 +1,100 @@ ---CHAT_MSG_CHANNEL -function(e, msg, _, _, channel) - if channel:match("General") and (channel:match("Nazjatar") or channel:match("Mechagon")) then - if msg:match("(KX%-T57 (%d+%.?%d*))") then msg = msg:gsub("(KX%-T57 (%d+%.?%d*))", "") end - local x, y = msg:match("(%d+%.?%d*)[ ,/]+(%d+%.?%d*)") - if x and y then - local command = x .. " " .. y - aura_env.waypoints[#aura_env.waypoints + 1] = {["x"] = x, ["y"] = y,} - WeakAuras.ScanEvents("NEW_ID") - end - end -end - ---EVERY FRAME -function() - if not aura_env.noidee then - local function range (val, min, max, max2) - val = 1 - (((max - val) / (max - min)) * max2) - return val - end - if not aura_env.idee then WeakAuras.ScanEvents("NEW_ID") - else - local hX, hY = aura_env.waypoints[aura_env.idee]["x"], aura_env.waypoints[aura_env.idee]["y"] - local myMapID = C_Map.GetBestMapForUnit("player") - local pX, pY = C_Map.GetPlayerMapPosition(myMapID, "player").x * 100, C_Map.GetPlayerMapPosition(myMapID, "player").y * 100 - local X = pX - hX - local Y = pY - hY - local playerFace = GetPlayerFacing() or 0 - local playerA = math.floor(playerFace * 100) - playerA = range(playerA, 0, 630, 360) - 1 - playerA = - playerA - playerA = playerA - 90 - if playerA < 0 then playerA = playerA + 360 end - aura_env.hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) * 100 - aura_env.region.distance:SetText(math.floor(aura_env.hyp)) - aura_env.angle = math.deg(math.atan2(Y, X)) - aura_env.angle = aura_env.angle - playerA - aura_env.angle = aura_env.angle - 180 - if aura_env.hyp < aura_env.wipeDistance then - table.remove(aura_env.waypoints, aura_env.idee) - aura_env.idee = nil - WeakAuras.ScanEvents("NEW_ID") - end - return true - end - end -end - ---NEW_ID REMOVE_ID -function(e) - if e == "NEW_ID" then - if not IsInInstance() then - local maxhyp = 100000 - local myMapID = C_Map.GetBestMapForUnit("player") - local pX, pY = C_Map.GetPlayerMapPosition(myMapID, "player").x * 100, C_Map.GetPlayerMapPosition(myMapID, "player").y * 100 - for k,v in ipairs(aura_env.waypoints) do - local hX, hY = aura_env.waypoints[k].x, aura_env.waypoints[k].y - local X, Y = pX - hX, pY - hY - local hyp = math.sqrt((math.abs(X^2)) + (math.abs(Y^2))) - if hyp < maxhyp then - maxhyp = hyp - aura_env.idee = k - end - end - if not aura_env.idee then aura_env.noidee = true end - if aura_env.idee then aura_env.noidee = nil end - end - elseif e == "REMOVE_ID" then - if aura_env.idee then - table.remove(aura_env.waypoints, aura_env.idee) - aura_env.idee = nil - WeakAuras.ScanEvents("NEW_ID") - else - end - end -end - ---ANIMATION -function() - if aura_env.angle then - return - aura_env.angle - else - return 0 - end -end - ---INIT -aura_env.waypoints = {} -if not aura_env.region.distance then - local distance = aura_env.region:CreateFontString(nil, aura_env.region) - aura_env.region.distance = distance -end -aura_env.region.distance:ClearAllPoints() -aura_env.region.distance:SetFont("Interface\\AddOns\\SharedMedia_MyMedia\\font\\FiraCode-Bold.ttf", 16, "OUTLINE") -aura_env.region.distance:SetPoint("CENTER", aura_env.region, "CENTER") -aura_env.region.distance:SetJustifyH("CENTER") -aura_env.region.distance:SetJustifyV("CENTER") -aura_env.region.distance:Show() -aura_env.wipeDistance = 50 +--CHAT_MSG_CHANNEL +function(e, msg, _, _, channel) + if channel:match("General") and (channel:match("Nazjatar") or channel:match("Mechagon")) then + if msg:match("(KX%-T57 (%d+%.?%d*))") then msg = msg:gsub("(KX%-T57 (%d+%.?%d*))", "") end + local x, y = msg:match("(%d+%.?%d*)[ ,/]+(%d+%.?%d*)") + if x and y then + local command = x .. " " .. y + aura_env.waypoints[#aura_env.waypoints + 1] = {["x"] = x, ["y"] = y,} + WeakAuras.ScanEvents("NEW_ID") + end + end +end + +--EVERY FRAME +function() + if not aura_env.noidee then + local function range (val, min, max, max2) + val = 1 - (((max - val) / (max - min)) * max2) + return val + end + if not aura_env.idee then WeakAuras.ScanEvents("NEW_ID") + else + local hX, hY = aura_env.waypoints[aura_env.idee]["x"], aura_env.waypoints[aura_env.idee]["y"] + local myMapID = C_Map.GetBestMapForUnit("player") + local pX, pY = C_Map.GetPlayerMapPosition(myMapID, "player").x * 100, C_Map.GetPlayerMapPosition(myMapID, "player").y * 100 + local X = pX - hX + local Y = pY - hY + local playerFace = GetPlayerFacing() or 0 + local playerA = math.floor(playerFace * 100) + playerA = range(playerA, 0, 630, 360) - 1 + playerA = - playerA + playerA = playerA - 90 + if playerA < 0 then playerA = playerA + 360 end + aura_env.hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) * 100 + aura_env.region.distance:SetText(math.floor(aura_env.hyp)) + aura_env.angle = math.deg(math.atan2(Y, X)) + aura_env.angle = aura_env.angle - playerA + aura_env.angle = aura_env.angle - 180 + if aura_env.hyp < aura_env.wipeDistance then + table.remove(aura_env.waypoints, aura_env.idee) + aura_env.idee = nil + WeakAuras.ScanEvents("NEW_ID") + end + return true + end + end +end + +--NEW_ID REMOVE_ID +function(e) + if e == "NEW_ID" then + if not IsInInstance() then + local maxhyp = 100000 + local myMapID = C_Map.GetBestMapForUnit("player") + local pX, pY = C_Map.GetPlayerMapPosition(myMapID, "player").x * 100, C_Map.GetPlayerMapPosition(myMapID, "player").y * 100 + for k,v in ipairs(aura_env.waypoints) do + local hX, hY = aura_env.waypoints[k].x, aura_env.waypoints[k].y + local X, Y = pX - hX, pY - hY + local hyp = math.sqrt((math.abs(X^2)) + (math.abs(Y^2))) + if hyp < maxhyp then + maxhyp = hyp + aura_env.idee = k + end + end + if not aura_env.idee then aura_env.noidee = true end + if aura_env.idee then aura_env.noidee = nil end + end + elseif e == "REMOVE_ID" then + if aura_env.idee then + table.remove(aura_env.waypoints, aura_env.idee) + aura_env.idee = nil + WeakAuras.ScanEvents("NEW_ID") + else + end + end +end + +--ANIMATION +function() + if aura_env.angle then + return - aura_env.angle + else + return 0 + end +end + +--INIT +aura_env.waypoints = {} +if not aura_env.region.distance then + local distance = aura_env.region:CreateFontString(nil, aura_env.region) + aura_env.region.distance = distance +end +aura_env.region.distance:ClearAllPoints() +aura_env.region.distance:SetFont("Interface\\AddOns\\SharedMedia_MyMedia\\font\\FiraCode-Bold.ttf", 16, "OUTLINE") +aura_env.region.distance:SetPoint("CENTER", aura_env.region, "CENTER") +aura_env.region.distance:SetJustifyH("CENTER") +aura_env.region.distance:SetJustifyV("CENTER") +aura_env.region.distance:Show() +aura_env.wipeDistance = 50 WeakAuras.ScanEvents("NEW_ID") \ No newline at end of file diff --git a/Complete Projects/BFA/Reset Custom Variable.lua b/WeakAuras/Projects/ByExp/BFA/Reset Custom Variable.lua similarity index 95% rename from Complete Projects/BFA/Reset Custom Variable.lua rename to WeakAuras/Projects/ByExp/BFA/Reset Custom Variable.lua index 79f4fa6..308908d 100644 --- a/Complete Projects/BFA/Reset Custom Variable.lua +++ b/WeakAuras/Projects/ByExp/BFA/Reset Custom Variable.lua @@ -1,4 +1,4 @@ ---PLAYER_ALIVE -function() - WeakAurasSaved["CustomTrash"] = "" +--PLAYER_ALIVE +function() + WeakAurasSaved["CustomTrash"] = "" end \ No newline at end of file diff --git a/Complete Projects/BFA/SCT ABANDONED.lua b/WeakAuras/Projects/ByExp/BFA/SCT ABANDONED.lua similarity index 96% rename from Complete Projects/BFA/SCT ABANDONED.lua rename to WeakAuras/Projects/ByExp/BFA/SCT ABANDONED.lua index 46d5774..7623d4b 100644 --- a/Complete Projects/BFA/SCT ABANDONED.lua +++ b/WeakAuras/Projects/ByExp/BFA/SCT ABANDONED.lua @@ -1,42 +1,42 @@ ---CLEU UPDATE_TEXT -function(e, ...) - if e == "COMBAT_LOG_EVENT_UNFILTERED" then - local se = select(2, ...) - local aura_env = aura_env - if se == "SPELL_DAMAGE" or se == "SPELL_PERIODIC_DAMAGE" then - local _, _, _, _, caster, _, _, _, target, _, _, sID, sName, sSchool, amount, overkill, school, resisted, blocked, absorbed, critical = ... - if caster == UnitName("player") and critical == false then - if not aura_env.hits then aura_env.hits = {} end - local ID = #aura_env.hits + 1 - aura_env.hits[ID] = - { - ["sID"] = sID, - ["sName"] = sName, - ["sSchool"] = sSchool, - ["amount"] = amount, - ["resisted"] = resisted, - ["blocked"] = blocked, - ["absorbed"] = absorbed, - ["target"] = target, - ["time"] = GetTime(), - } - WeakAuras.ScanEvents("UPDATE_TEXT") - C_Timer.After(2, function() table.remove(aura_env.hits, ID); WeakAuras.ScanEvents("UPDATE_TEXT") end) - return true - end - end - elseif e == "UPDATE_TEXT" then - aura_env.output = "" - print(#aura_env.hits) - for k,v in ipairs(aura_env.hits) do - print(k, v.amount) - aura_env.output = aura_env.output .. v.amount .. "\n" - end - print("") - end -end - ---DISPLAY -function() - return aura_env.output +--CLEU UPDATE_TEXT +function(e, ...) + if e == "COMBAT_LOG_EVENT_UNFILTERED" then + local se = select(2, ...) + local aura_env = aura_env + if se == "SPELL_DAMAGE" or se == "SPELL_PERIODIC_DAMAGE" then + local _, _, _, _, caster, _, _, _, target, _, _, sID, sName, sSchool, amount, overkill, school, resisted, blocked, absorbed, critical = ... + if caster == UnitName("player") and critical == false then + if not aura_env.hits then aura_env.hits = {} end + local ID = #aura_env.hits + 1 + aura_env.hits[ID] = + { + ["sID"] = sID, + ["sName"] = sName, + ["sSchool"] = sSchool, + ["amount"] = amount, + ["resisted"] = resisted, + ["blocked"] = blocked, + ["absorbed"] = absorbed, + ["target"] = target, + ["time"] = GetTime(), + } + WeakAuras.ScanEvents("UPDATE_TEXT") + C_Timer.After(2, function() table.remove(aura_env.hits, ID); WeakAuras.ScanEvents("UPDATE_TEXT") end) + return true + end + end + elseif e == "UPDATE_TEXT" then + aura_env.output = "" + print(#aura_env.hits) + for k,v in ipairs(aura_env.hits) do + print(k, v.amount) + aura_env.output = aura_env.output .. v.amount .. "\n" + end + print("") + end +end + +--DISPLAY +function() + return aura_env.output end \ No newline at end of file diff --git a/Complete Projects/BFA/Saved/TSU - Combat HP Bars b/WeakAuras/Projects/ByExp/BFA/Saved/TSU - Combat HP Bars similarity index 100% rename from Complete Projects/BFA/Saved/TSU - Combat HP Bars rename to WeakAuras/Projects/ByExp/BFA/Saved/TSU - Combat HP Bars diff --git a/Complete Projects/BFA/Saved/Warrior CDs b/WeakAuras/Projects/ByExp/BFA/Saved/Warrior CDs similarity index 100% rename from Complete Projects/BFA/Saved/Warrior CDs rename to WeakAuras/Projects/ByExp/BFA/Saved/Warrior CDs diff --git a/Complete Projects/BFA/Saved/Warrior Rage b/WeakAuras/Projects/ByExp/BFA/Saved/Warrior Rage similarity index 100% rename from Complete Projects/BFA/Saved/Warrior Rage rename to WeakAuras/Projects/ByExp/BFA/Saved/Warrior Rage diff --git a/Complete Projects/BFA/Second Wind.lua b/WeakAuras/Projects/ByExp/BFA/Second Wind.lua similarity index 94% rename from Complete Projects/BFA/Second Wind.lua rename to WeakAuras/Projects/ByExp/BFA/Second Wind.lua index b110d72..5a756c1 100644 --- a/Complete Projects/BFA/Second Wind.lua +++ b/WeakAuras/Projects/ByExp/BFA/Second Wind.lua @@ -1,22 +1,22 @@ ---UNIT_COMBAT -function(_, target, event, _, amount) - if target == "player" and event ~= "HEAL" and amount then - aura_env.lasthit = GetTime() - return true - end -end - ---UNTRIGGER -function() - if aura_env.lasthit + 5 < GetTime() then - return true - end -end - ---DURATION -function() - return 5, aura_env.lasthit + 5 -end - ---INIT +--UNIT_COMBAT +function(_, target, event, _, amount) + if target == "player" and event ~= "HEAL" and amount then + aura_env.lasthit = GetTime() + return true + end +end + +--UNTRIGGER +function() + if aura_env.lasthit + 5 < GetTime() then + return true + end +end + +--DURATION +function() + return 5, aura_env.lasthit + 5 +end + +--INIT aura_env.lasthit = 0 \ No newline at end of file diff --git a/Complete Projects/BFA/SetupChat.lua b/WeakAuras/Projects/ByExp/BFA/SetupChat.lua similarity index 97% rename from Complete Projects/BFA/SetupChat.lua rename to WeakAuras/Projects/ByExp/BFA/SetupChat.lua index f2423fe..95ae374 100644 --- a/Complete Projects/BFA/SetupChat.lua +++ b/WeakAuras/Projects/ByExp/BFA/SetupChat.lua @@ -1,132 +1,132 @@ ---CHAT_MSG_WHISPER ---/run SendChatMessage("hi", "WHISPER",_, UnitName("player")) -function(e,msg,sender) - sender = sender:gsub("-.+", "") - msg = msg:lower() - print(sender,msg) - if msg == "setup party" and sender == UnitName("player") then - aura_env.party() - end - if msg == "setup general" and sender == UnitName("player") then - aura_env.general() - end -end - ---INIT -aura_env.party = function() - print("Setting party up") - print("Check1 " .. ChatCOnfigChatSettingsLeftCheckBox1Check:GetChecked()) - if ChatConfigChatSettingsLeftCheckBox1Check:GetChecked() == false then --Say - ChatConfigChatSettingsLeftCheckBox1Check:Click() - end - print("Check4 " .. ChatCOnfigChatSettingsLeftCheckBox4Check:GetChecked()) - if ChatConfigChatSettingsLeftCheckBox2Check:GetChecked() == false then --Emote - ChatConfigChatSettingsLeftCheckBox2Check:Click() - end - print("Check5 " .. ChatCOnfigChatSettingsLeftCheckBox5Check:GetChecked()) - if ChatConfigChatSettingsLeftCheckBox3Check:GetChecked() == false then --Yell - ChatConfigChatSettingsLeftCheckBox3Check:Click() - end - print("Check6 " .. ChatCOnfigChatSettingsLeftCheckBox6Check:GetChecked()) - if ChatConfigChatSettingsLeftCheckBox4Check:GetChecked() == true then --Guild chat - ChatConfigChatSettingsLeftCheckBox4Check:Click() - end - print("Check7 " .. ChatCOnfigChatSettingsLeftCheckBox7Check:GetChecked()) - if ChatConfigChatSettingsLeftCheckBox5Check:GetChecked() == true then --Officer chat - ChatConfigChatSettingsLeftCheckBox5Check:Click() - end - print("Check8 " .. ChatCOnfigChatSettingsLeftCheckBox8Check:GetChecked()) - if ChatConfigChatSettingsLeftCheckBox6Check:GetChecked() == true then --Guild announce - ChatConfigChatSettingsLeftCheckBox6Check:Click() - end - print("Check9 " .. ChatCOnfigChatSettingsLeftCheckBox9Check:GetChecked()) - if ChatConfigChatSettingsLeftCheckBox7Check:GetChecked() == true then --Achievement announce - ChatConfigChatSettingsLeftCheckBox7Check:Click() - end - print("Check 10 " .. ChatCOnfigChatSettingsLeftCheckBox10Check:GetChecked()) - if ChatConfigChatSettingsLeftCheckBox8Check:GetChecked() == false then --Whisper - ChatConfigChatSettingsLeftCheckBox8Check:Click() - end - print("Check 11 " .. ChatCOnfigChatSettingsLeftCheckBox11Check:GetChecked()) - if ChatConfigChatSettingsLeftCheckBox9Check:GetChecked() == false then --Blizzard whisper - ChatConfigChatSettingsLeftCheckBox9Check:Click() - end - print("Check 12 " .. ChatCOnfigChatSettingsLeftCheckBox12Check:GetChecked()) - if ChatConfigChatSettingsLeftCheckBox10Check:GetChecked() == false then --Party - ChatConfigChatSettingsLeftCheckBox10Check:Click() - end - print("Check 13 " .. ChatCOnfigChatSettingsLeftCheckBox13Check:GetChecked()) - if ChatConfigChatSettingsLeftCheckBox11Check:GetChecked() == false then --Party leader - ChatConfigChatSettingsLeftCheckBox11Check:Click() - end - print("Check 14 " .. ChatCOnfigChatSettingsLeftCheckBox14Check:GetChecked()) - if ChatConfigChatSettingsLeftCheckBox12Check:GetChecked() == false then --Raid - ChatConfigChatSettingsLeftCheckBox12Check:Click() - end - print("Check 15 " .. ChatCOnfigChatSettingsLeftCheckBox15Check:GetChecked()) - if ChatConfigChatSettingsLeftCheckBox13Check:GetChecked() == false then --Raid leader - ChatConfigChatSettingsLeftCheckBox13Check:Click() - end - print("Check 16 " .. ChatCOnfigChatSettingsLeftCheckBox16Check:GetChecked()) - if ChatConfigChatSettingsLeftCheckBox14Check:GetChecked() == false then --Raid Warning - ChatConfigChatSettingsLeftCheckBox14Check:Click() - end - print("Check1 " .. ChatCOnfigChatSettingsLeftCheckBox1Check:GetChecked()) - if ChatConfigChatSettingsLeftCheckBox15Check:GetChecked() == false then --Instance - ChatConfigChatSettingsLeftCheckBox15Check:Click() - end - print("Check2 " .. ChatCOnfigChatSettingsLeftCheckBox2Check:GetChecked()) - if ChatConfigChatSettingsLeftCheckBox16Check:GetChecked() == false then --Instance leader - ChatConfigChatSettingsLeftCheckBox16Check:Click() - end -end -aura_env.general = function() - if ChatConfigChatSettingsLeftCheckBox1Check:GetChecked() == true then --Say - ChatConfigChatSettingsLeftCheckBox1Check:Click() - end - if ChatConfigChatSettingsLeftCheckBox2Check:GetChecked() == true then --Emote - ChatConfigChatSettingsLeftCheckBox2Check:Click() - end - if ChatConfigChatSettingsLeftCheckBox3Check:GetChecked() == true then --Yell - ChatConfigChatSettingsLeftCheckBox3Check:Click() - end - if ChatConfigChatSettingsLeftCheckBox4Check:GetChecked() == true then --Guild chat - ChatConfigChatSettingsLeftCheckBox4Check:Click() - end - if ChatConfigChatSettingsLeftCheckBox5Check:GetChecked() == true then --Officer chat - ChatConfigChatSettingsLeftCheckBox5Check:Click() - end - if ChatConfigChatSettingsLeftCheckBox6Check:GetChecked() == true then --Guild announce - ChatConfigChatSettingsLeftCheckBox6Check:Click() - end - if ChatConfigChatSettingsLeftCheckBox7Check:GetChecked() == true then --Achievement announce - ChatConfigChatSettingsLeftCheckBox7Check:Click() - end - if ChatConfigChatSettingsLeftCheckBox8Check:GetChecked() == true then --Whisper - ChatConfigChatSettingsLeftCheckBox8Check:Click() - end - if ChatConfigChatSettingsLeftCheckBox9Check:GetChecked() == true then --Blizzard whisper - ChatConfigChatSettingsLeftCheckBox9Check:Click() - end - if ChatConfigChatSettingsLeftCheckBox10Check:GetChecked() == true then --Party - ChatConfigChatSettingsLeftCheckBox10Check:Click() - end - if ChatConfigChatSettingsLeftCheckBox11Check:GetChecked() == true then --Party leader - ChatConfigChatSettingsLeftCheckBox11Check:Click() - end - if ChatConfigChatSettingsLeftCheckBox12Check:GetChecked() == true then --Raid - ChatConfigChatSettingsLeftCheckBox12Check:Click() - end - if ChatConfigChatSettingsLeftCheckBox13Check:GetChecked() == true then --Raid leader - ChatConfigChatSettingsLeftCheckBox13Check:Click() - end - if ChatConfigChatSettingsLeftCheckBox14Check:GetChecked() == true then --Raid Warning - ChatConfigChatSettingsLeftCheckBox14Check:Click() - end - if ChatConfigChatSettingsLeftCheckBox15Check:GetChecked() == true then --Instance - ChatConfigChatSettingsLeftCheckBox15Check:Click() - end - if ChatConfigChatSettingsLeftCheckBox16Check:GetChecked() == true then --Instance leader - ChatConfigChatSettingsLeftCheckBox16Check:Click() - end +--CHAT_MSG_WHISPER +--/run SendChatMessage("hi", "WHISPER",_, UnitName("player")) +function(e,msg,sender) + sender = sender:gsub("-.+", "") + msg = msg:lower() + print(sender,msg) + if msg == "setup party" and sender == UnitName("player") then + aura_env.party() + end + if msg == "setup general" and sender == UnitName("player") then + aura_env.general() + end +end + +--INIT +aura_env.party = function() + print("Setting party up") + print("Check1 " .. ChatCOnfigChatSettingsLeftCheckBox1Check:GetChecked()) + if ChatConfigChatSettingsLeftCheckBox1Check:GetChecked() == false then --Say + ChatConfigChatSettingsLeftCheckBox1Check:Click() + end + print("Check4 " .. ChatCOnfigChatSettingsLeftCheckBox4Check:GetChecked()) + if ChatConfigChatSettingsLeftCheckBox2Check:GetChecked() == false then --Emote + ChatConfigChatSettingsLeftCheckBox2Check:Click() + end + print("Check5 " .. ChatCOnfigChatSettingsLeftCheckBox5Check:GetChecked()) + if ChatConfigChatSettingsLeftCheckBox3Check:GetChecked() == false then --Yell + ChatConfigChatSettingsLeftCheckBox3Check:Click() + end + print("Check6 " .. ChatCOnfigChatSettingsLeftCheckBox6Check:GetChecked()) + if ChatConfigChatSettingsLeftCheckBox4Check:GetChecked() == true then --Guild chat + ChatConfigChatSettingsLeftCheckBox4Check:Click() + end + print("Check7 " .. ChatCOnfigChatSettingsLeftCheckBox7Check:GetChecked()) + if ChatConfigChatSettingsLeftCheckBox5Check:GetChecked() == true then --Officer chat + ChatConfigChatSettingsLeftCheckBox5Check:Click() + end + print("Check8 " .. ChatCOnfigChatSettingsLeftCheckBox8Check:GetChecked()) + if ChatConfigChatSettingsLeftCheckBox6Check:GetChecked() == true then --Guild announce + ChatConfigChatSettingsLeftCheckBox6Check:Click() + end + print("Check9 " .. ChatCOnfigChatSettingsLeftCheckBox9Check:GetChecked()) + if ChatConfigChatSettingsLeftCheckBox7Check:GetChecked() == true then --Achievement announce + ChatConfigChatSettingsLeftCheckBox7Check:Click() + end + print("Check 10 " .. ChatCOnfigChatSettingsLeftCheckBox10Check:GetChecked()) + if ChatConfigChatSettingsLeftCheckBox8Check:GetChecked() == false then --Whisper + ChatConfigChatSettingsLeftCheckBox8Check:Click() + end + print("Check 11 " .. ChatCOnfigChatSettingsLeftCheckBox11Check:GetChecked()) + if ChatConfigChatSettingsLeftCheckBox9Check:GetChecked() == false then --Blizzard whisper + ChatConfigChatSettingsLeftCheckBox9Check:Click() + end + print("Check 12 " .. ChatCOnfigChatSettingsLeftCheckBox12Check:GetChecked()) + if ChatConfigChatSettingsLeftCheckBox10Check:GetChecked() == false then --Party + ChatConfigChatSettingsLeftCheckBox10Check:Click() + end + print("Check 13 " .. ChatCOnfigChatSettingsLeftCheckBox13Check:GetChecked()) + if ChatConfigChatSettingsLeftCheckBox11Check:GetChecked() == false then --Party leader + ChatConfigChatSettingsLeftCheckBox11Check:Click() + end + print("Check 14 " .. ChatCOnfigChatSettingsLeftCheckBox14Check:GetChecked()) + if ChatConfigChatSettingsLeftCheckBox12Check:GetChecked() == false then --Raid + ChatConfigChatSettingsLeftCheckBox12Check:Click() + end + print("Check 15 " .. ChatCOnfigChatSettingsLeftCheckBox15Check:GetChecked()) + if ChatConfigChatSettingsLeftCheckBox13Check:GetChecked() == false then --Raid leader + ChatConfigChatSettingsLeftCheckBox13Check:Click() + end + print("Check 16 " .. ChatCOnfigChatSettingsLeftCheckBox16Check:GetChecked()) + if ChatConfigChatSettingsLeftCheckBox14Check:GetChecked() == false then --Raid Warning + ChatConfigChatSettingsLeftCheckBox14Check:Click() + end + print("Check1 " .. ChatCOnfigChatSettingsLeftCheckBox1Check:GetChecked()) + if ChatConfigChatSettingsLeftCheckBox15Check:GetChecked() == false then --Instance + ChatConfigChatSettingsLeftCheckBox15Check:Click() + end + print("Check2 " .. ChatCOnfigChatSettingsLeftCheckBox2Check:GetChecked()) + if ChatConfigChatSettingsLeftCheckBox16Check:GetChecked() == false then --Instance leader + ChatConfigChatSettingsLeftCheckBox16Check:Click() + end +end +aura_env.general = function() + if ChatConfigChatSettingsLeftCheckBox1Check:GetChecked() == true then --Say + ChatConfigChatSettingsLeftCheckBox1Check:Click() + end + if ChatConfigChatSettingsLeftCheckBox2Check:GetChecked() == true then --Emote + ChatConfigChatSettingsLeftCheckBox2Check:Click() + end + if ChatConfigChatSettingsLeftCheckBox3Check:GetChecked() == true then --Yell + ChatConfigChatSettingsLeftCheckBox3Check:Click() + end + if ChatConfigChatSettingsLeftCheckBox4Check:GetChecked() == true then --Guild chat + ChatConfigChatSettingsLeftCheckBox4Check:Click() + end + if ChatConfigChatSettingsLeftCheckBox5Check:GetChecked() == true then --Officer chat + ChatConfigChatSettingsLeftCheckBox5Check:Click() + end + if ChatConfigChatSettingsLeftCheckBox6Check:GetChecked() == true then --Guild announce + ChatConfigChatSettingsLeftCheckBox6Check:Click() + end + if ChatConfigChatSettingsLeftCheckBox7Check:GetChecked() == true then --Achievement announce + ChatConfigChatSettingsLeftCheckBox7Check:Click() + end + if ChatConfigChatSettingsLeftCheckBox8Check:GetChecked() == true then --Whisper + ChatConfigChatSettingsLeftCheckBox8Check:Click() + end + if ChatConfigChatSettingsLeftCheckBox9Check:GetChecked() == true then --Blizzard whisper + ChatConfigChatSettingsLeftCheckBox9Check:Click() + end + if ChatConfigChatSettingsLeftCheckBox10Check:GetChecked() == true then --Party + ChatConfigChatSettingsLeftCheckBox10Check:Click() + end + if ChatConfigChatSettingsLeftCheckBox11Check:GetChecked() == true then --Party leader + ChatConfigChatSettingsLeftCheckBox11Check:Click() + end + if ChatConfigChatSettingsLeftCheckBox12Check:GetChecked() == true then --Raid + ChatConfigChatSettingsLeftCheckBox12Check:Click() + end + if ChatConfigChatSettingsLeftCheckBox13Check:GetChecked() == true then --Raid leader + ChatConfigChatSettingsLeftCheckBox13Check:Click() + end + if ChatConfigChatSettingsLeftCheckBox14Check:GetChecked() == true then --Raid Warning + ChatConfigChatSettingsLeftCheckBox14Check:Click() + end + if ChatConfigChatSettingsLeftCheckBox15Check:GetChecked() == true then --Instance + ChatConfigChatSettingsLeftCheckBox15Check:Click() + end + if ChatConfigChatSettingsLeftCheckBox16Check:GetChecked() == true then --Instance leader + ChatConfigChatSettingsLeftCheckBox16Check:Click() + end end \ No newline at end of file diff --git a/Complete Projects/BFA/Shield Block.lua b/WeakAuras/Projects/ByExp/BFA/Shield Block.lua similarity index 97% rename from Complete Projects/BFA/Shield Block.lua rename to WeakAuras/Projects/ByExp/BFA/Shield Block.lua index 0fc88d0..2478707 100644 --- a/Complete Projects/BFA/Shield Block.lua +++ b/WeakAuras/Projects/ByExp/BFA/Shield Block.lua @@ -1,110 +1,110 @@ ---COMBAT_LOG_EVENT_UNFILTERED -function(...) - local se = select(3, ...) - if se == "SWING_DAMAGE" then - local dest = select(10, ...) - if dest == UnitName("player") then - local bloq = select(17, ...) - if bloq then - aura_env.dmgbloq = aura_env.dmgbloq + bloq - aura_env.numbloq = aura_env.numbloq + 1 - aura_env.region.blocks:SetText(aura_env.numbloq) - aura_env.region.damag:SetText(aura_env.color(aura_env.dmgbloq) .. aura_env.shorten(aura_env.dmgbloq)) - end - end - elseif se == "SPELL_DAMAGE" then - local dest = select(10, ...) - if dest == UnitName("player") then - local bloq = select(20, ...) - if bloq then - aura_env.dmgbloq = aura_env.dmgbloq + bloq - aura_env.numbloq = aura_env.numbloq + 1 - aura_env.region.blocks:SetText(aura_env.numbloq) - aura_env.region.damag:SetText(aura_env.color(aura_env.dmgbloq) .. aura_env.shorten(aura_env.dmgbloq)) - end - end - elseif se == "SPELL_AURA_APPLIED" then - local dest = select(6, ...) - if dest == UnitName("player") then - local name = select(14, ...) - if name == "Shield Block" or name == "Last Stand" then - aura_env.numbloq = 0 - aura_env.dmgbloq = 0 - aura_env.region.blocks:SetText(aura_env.numbloq) - aura_env.region.damag:SetText(aura_env.color(aura_env.dmgbloq) .. aura_env.shorten(aura_env.dmgbloq)) - end - end - end -end - ---INIT -aura_env.numbloq = 0 -aura_env.dmgbloq = 0 -aura_env.color = function(damag) - local damagcolor = "|cFFFFFFFF" - if damag <= 0.25 * UnitHealth("player") then damagcolor = "|cFFFF0000" - elseif damag > 0.25 * UnitHealth("player") and damag <= 0.5 * UnitHealth("player") then damagcolor = "|cFFFF8000" - elseif damag > 0.5 * UnitHealth("player") and damag <= 0.75 * UnitHealth("player") then damagcolor = "|cFF00FF00" - elseif damag > 0.75 * UnitHealth("player") and damag <= UnitHealth("player") then damagcolor = "|cFF00FFFF" - elseif damag > UnitHealth("player") and damag <= 1.33 * UnitHealth("player") then damagcolor = "|cFFFF00FF" - elseif damag > 1.33 * UnitHealth("player") and damag <= 1.66 * UnitHealth("player") then damagcolor = "|cFFFFFF00" - elseif damag > 1.66 * UnitHealth("player") then damagcolor = "|c" end - return damagcolor -end -local fontsize = 32 -if not aura_env.region.blocks then - local text = aura_env.region:CreateFontString(nil, aura_env.region) - aura_env.region.blocks = text - print("ok!") -end -aura_env.region.blocks:SetFont("Interface\\AddOns\\SharedMedia_MyMedia\\font\\FiraCode-Bold.ttf", fontsize, "OUTLINE") -aura_env.region.blocks:SetTextColor(1,1,1,1) -aura_env.region.blocks:SetPoint("CENTER", aura_env.region, "CENTER") -aura_env.region.blocks:SetJustifyH("LEFT") -aura_env.region.blocks:SetText("0") -aura_env.region.blocks:Show() - -if not aura_env.region.damag then - local text = aura_env.region:CreateFontString(nil, aura_env.region) - aura_env.region.damag = text - print("ok!") -end -aura_env.region.damag:SetFont("Interface\\AddOns\\SharedMedia_MyMedia\\font\\FiraCode-Bold.ttf", 16, "OUTLINE") -aura_env.region.damag:SetTextColor(1,1,1,1) -aura_env.region.damag:SetPoint("CENTER", aura_env.region, "CENTER", 0, -32) -aura_env.region.damag:SetJustifyH("LEFT") -aura_env.region.damag:SetText("0") -aura_env.region.damag:Show() - -aura_env.shorten = function(val) - local function round(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var - end - local n = 2 - if val <= 1e3 then - return round(val, n) - elseif val > 1e3 and val < 1e6 then - return round(val / 1e3, n) .. "k" - elseif val > 1e6 and val < 1e9 then - return round(val / 1e6, n) .. "M" - elseif val > 1e9 then - return round(val / 1e9, n) .. "G" - end -end -aura_env.auraID = function(spell) - for i = 1, 40 do - local name = UnitBuff("player", i) - if name then - if name == spell then - return i - end - else - break - end - end +--COMBAT_LOG_EVENT_UNFILTERED +function(...) + local se = select(3, ...) + if se == "SWING_DAMAGE" then + local dest = select(10, ...) + if dest == UnitName("player") then + local bloq = select(17, ...) + if bloq then + aura_env.dmgbloq = aura_env.dmgbloq + bloq + aura_env.numbloq = aura_env.numbloq + 1 + aura_env.region.blocks:SetText(aura_env.numbloq) + aura_env.region.damag:SetText(aura_env.color(aura_env.dmgbloq) .. aura_env.shorten(aura_env.dmgbloq)) + end + end + elseif se == "SPELL_DAMAGE" then + local dest = select(10, ...) + if dest == UnitName("player") then + local bloq = select(20, ...) + if bloq then + aura_env.dmgbloq = aura_env.dmgbloq + bloq + aura_env.numbloq = aura_env.numbloq + 1 + aura_env.region.blocks:SetText(aura_env.numbloq) + aura_env.region.damag:SetText(aura_env.color(aura_env.dmgbloq) .. aura_env.shorten(aura_env.dmgbloq)) + end + end + elseif se == "SPELL_AURA_APPLIED" then + local dest = select(6, ...) + if dest == UnitName("player") then + local name = select(14, ...) + if name == "Shield Block" or name == "Last Stand" then + aura_env.numbloq = 0 + aura_env.dmgbloq = 0 + aura_env.region.blocks:SetText(aura_env.numbloq) + aura_env.region.damag:SetText(aura_env.color(aura_env.dmgbloq) .. aura_env.shorten(aura_env.dmgbloq)) + end + end + end +end + +--INIT +aura_env.numbloq = 0 +aura_env.dmgbloq = 0 +aura_env.color = function(damag) + local damagcolor = "|cFFFFFFFF" + if damag <= 0.25 * UnitHealth("player") then damagcolor = "|cFFFF0000" + elseif damag > 0.25 * UnitHealth("player") and damag <= 0.5 * UnitHealth("player") then damagcolor = "|cFFFF8000" + elseif damag > 0.5 * UnitHealth("player") and damag <= 0.75 * UnitHealth("player") then damagcolor = "|cFF00FF00" + elseif damag > 0.75 * UnitHealth("player") and damag <= UnitHealth("player") then damagcolor = "|cFF00FFFF" + elseif damag > UnitHealth("player") and damag <= 1.33 * UnitHealth("player") then damagcolor = "|cFFFF00FF" + elseif damag > 1.33 * UnitHealth("player") and damag <= 1.66 * UnitHealth("player") then damagcolor = "|cFFFFFF00" + elseif damag > 1.66 * UnitHealth("player") then damagcolor = "|c" end + return damagcolor +end +local fontsize = 32 +if not aura_env.region.blocks then + local text = aura_env.region:CreateFontString(nil, aura_env.region) + aura_env.region.blocks = text + print("ok!") +end +aura_env.region.blocks:SetFont("Interface\\AddOns\\SharedMedia_MyMedia\\font\\FiraCode-Bold.ttf", fontsize, "OUTLINE") +aura_env.region.blocks:SetTextColor(1,1,1,1) +aura_env.region.blocks:SetPoint("CENTER", aura_env.region, "CENTER") +aura_env.region.blocks:SetJustifyH("LEFT") +aura_env.region.blocks:SetText("0") +aura_env.region.blocks:Show() + +if not aura_env.region.damag then + local text = aura_env.region:CreateFontString(nil, aura_env.region) + aura_env.region.damag = text + print("ok!") +end +aura_env.region.damag:SetFont("Interface\\AddOns\\SharedMedia_MyMedia\\font\\FiraCode-Bold.ttf", 16, "OUTLINE") +aura_env.region.damag:SetTextColor(1,1,1,1) +aura_env.region.damag:SetPoint("CENTER", aura_env.region, "CENTER", 0, -32) +aura_env.region.damag:SetJustifyH("LEFT") +aura_env.region.damag:SetText("0") +aura_env.region.damag:Show() + +aura_env.shorten = function(val) + local function round(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var + end + local n = 2 + if val <= 1e3 then + return round(val, n) + elseif val > 1e3 and val < 1e6 then + return round(val / 1e3, n) .. "k" + elseif val > 1e6 and val < 1e9 then + return round(val / 1e6, n) .. "M" + elseif val > 1e9 then + return round(val / 1e9, n) .. "G" + end +end +aura_env.auraID = function(spell) + for i = 1, 40 do + local name = UnitBuff("player", i) + if name then + if name == spell then + return i + end + else + break + end + end end \ No newline at end of file diff --git a/Complete Projects/BFA/Slabhide Farm.lua b/WeakAuras/Projects/ByExp/BFA/Slabhide Farm.lua similarity index 97% rename from Complete Projects/BFA/Slabhide Farm.lua rename to WeakAuras/Projects/ByExp/BFA/Slabhide Farm.lua index 58a6a13..994c4e0 100644 --- a/Complete Projects/BFA/Slabhide Farm.lua +++ b/WeakAuras/Projects/ByExp/BFA/Slabhide Farm.lua @@ -1,54 +1,54 @@ ---COMBAT_LOG_EVENT_UNFILTERED UPDATE REMOVE PLAYER_ALIVE -function(e, ...) - if e == "COMBAT_LOG_EVENT_UNFILTERED" then - local se = select(2, ...) - if se == "UNIT_DIED" then - local name = select(9, ...) - if name:match(aura_env.farmanimal) then - local date = date() - local h, m, s = date:match("%w+ %w+ %d* (%d*)%:(%d*)%:(%d*)") or 0, 0, 0 - WeakAurasSaved.CustomTrash.Farm[aura_env.farmanimal][#WeakAurasSaved.CustomTrash.Farm[aura_env.farmanimal] + 1] = {["h"] = h, ["m"] = m, ["s"] = s} - WeakAurasSaved.CustomTrash.Farm[aura_env.farmanimal].Count = WeakAurasSaved.CustomTrash.Farm[aura_env.farmanimal].Count + 1 - return true - end - end - elseif e == "UPDATE" then - return true - elseif e == "REMOVE" then - for i = 1, #WeakAurasSaved.CustomTrash.Farm[aura_env.farmanimal] do - WeakAurasSaved.CustomTrash.Farm[aura_env.farmanimal][i] = nil - end - return true - elseif e == "PLAYER_ALIVE" and IsInInstance() == false then - ResetInstances() - return true - end -end - ---DISPLAY -function() - local output = #WeakAurasSaved.CustomTrash.Farm[aura_env.farmanimal] .. " " .. WeakAurasSaved.CustomTrash.Farm[aura_env.farmanimal].Count .. " " .. WeakAurasSaved.CustomTrash.Farm[aura_env.farmanimal].Count * aura_env.prob .. "%\n" - local date = date() - local h, m, s = date:match("%w+ %w+ %d* (%d*)%:(%d*)%:(%d*)") or 0, 0, 0 - for k,v in ipairs(WeakAurasSaved.CustomTrash.Farm[aura_env.farmanimal]) do - output = output .. v.h .. ":" .. v.m .. ":" .. v.s .. " -" .. aura_env.round((s - v.s + (m - v.m) * 60 + (h - v.h) * 3600) / 60, 0) .. "m" .. "\n" - end - return output -end - ---INIT -aura_env.farmanimal = "Altairus" -aura_env.prob = 0.8 -if not WeakAurasSaved.CustomTrash.Farm[aura_env.farmanimal] then WeakAurasSaved.CustomTrash.Farm[aura_env.farmanimal] = {}; WeakAurasSaved.CustomTrash.Farm[aura_env.farmanimal].Count = 0 end -aura_env.ticker = C_Timer.NewTicker(10, function() WeakAuras.ScanEvents("UPDATE") end) -if WeakAuras.IsOptionsOpen() then - aura_env.ticker:Cancel() -end -aura_env.round = function(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var +--COMBAT_LOG_EVENT_UNFILTERED UPDATE REMOVE PLAYER_ALIVE +function(e, ...) + if e == "COMBAT_LOG_EVENT_UNFILTERED" then + local se = select(2, ...) + if se == "UNIT_DIED" then + local name = select(9, ...) + if name:match(aura_env.farmanimal) then + local date = date() + local h, m, s = date:match("%w+ %w+ %d* (%d*)%:(%d*)%:(%d*)") or 0, 0, 0 + WeakAurasSaved.CustomTrash.Farm[aura_env.farmanimal][#WeakAurasSaved.CustomTrash.Farm[aura_env.farmanimal] + 1] = {["h"] = h, ["m"] = m, ["s"] = s} + WeakAurasSaved.CustomTrash.Farm[aura_env.farmanimal].Count = WeakAurasSaved.CustomTrash.Farm[aura_env.farmanimal].Count + 1 + return true + end + end + elseif e == "UPDATE" then + return true + elseif e == "REMOVE" then + for i = 1, #WeakAurasSaved.CustomTrash.Farm[aura_env.farmanimal] do + WeakAurasSaved.CustomTrash.Farm[aura_env.farmanimal][i] = nil + end + return true + elseif e == "PLAYER_ALIVE" and IsInInstance() == false then + ResetInstances() + return true + end +end + +--DISPLAY +function() + local output = #WeakAurasSaved.CustomTrash.Farm[aura_env.farmanimal] .. " " .. WeakAurasSaved.CustomTrash.Farm[aura_env.farmanimal].Count .. " " .. WeakAurasSaved.CustomTrash.Farm[aura_env.farmanimal].Count * aura_env.prob .. "%\n" + local date = date() + local h, m, s = date:match("%w+ %w+ %d* (%d*)%:(%d*)%:(%d*)") or 0, 0, 0 + for k,v in ipairs(WeakAurasSaved.CustomTrash.Farm[aura_env.farmanimal]) do + output = output .. v.h .. ":" .. v.m .. ":" .. v.s .. " -" .. aura_env.round((s - v.s + (m - v.m) * 60 + (h - v.h) * 3600) / 60, 0) .. "m" .. "\n" + end + return output +end + +--INIT +aura_env.farmanimal = "Altairus" +aura_env.prob = 0.8 +if not WeakAurasSaved.CustomTrash.Farm[aura_env.farmanimal] then WeakAurasSaved.CustomTrash.Farm[aura_env.farmanimal] = {}; WeakAurasSaved.CustomTrash.Farm[aura_env.farmanimal].Count = 0 end +aura_env.ticker = C_Timer.NewTicker(10, function() WeakAuras.ScanEvents("UPDATE") end) +if WeakAuras.IsOptionsOpen() then + aura_env.ticker:Cancel() +end +aura_env.round = function(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var end \ No newline at end of file diff --git a/Complete Projects/BFA/Stat Recap.lua b/WeakAuras/Projects/ByExp/BFA/Stat Recap.lua similarity index 98% rename from Complete Projects/BFA/Stat Recap.lua rename to WeakAuras/Projects/ByExp/BFA/Stat Recap.lua index e2b13d6..4529f79 100644 --- a/Complete Projects/BFA/Stat Recap.lua +++ b/WeakAuras/Projects/ByExp/BFA/Stat Recap.lua @@ -1,77 +1,77 @@ ---EVERY FRAME -function() - local crit, haste, mastery = aura_env.round(GetCritChance(), 2), aura_env.round(GetHaste(), 2), aura_env.round(GetMastery(), 2) - aura_env.region.crit:SetText(crit); aura_env.region.haste:SetText(haste); aura_env.region.mastery:SetText(mastery) - if crit >= 15 and crit < 20 then aura_env.region.crit:SetTextColor(aura_env.c11, aura_env.c12, aura_env.c13, 1) - elseif crit >= 20 and crit < 25 then aura_env.region.crit:SetTextColor(aura_env.c21, aura_env.c22, aura_env.c23, 1) - elseif crit >= 25 and crit < 30 then aura_env.region.crit:SetTextColor(aura_env.c31, aura_env.c32, aura_env.c33, 1) - elseif crit >= 30 and crit < 35 then aura_env.region.crit:SetTextColor(aura_env.c41, aura_env.c42, aura_env.c43, 1) - elseif crit >= 35 and crit < 40 then aura_env.region.crit:SetTextColor(aura_env.c51, aura_env.c52, aura_env.c53, 1) - elseif crit >= 40 then aura_env.region.crit:SetTextColor(aura_env.c61, aura_env.c62, aura_env.c63, 1) - end - if haste >= 10 and haste < 20 then aura_env.region.haste:SetTextColor(aura_env.c11, aura_env.c12, aura_env.c13, 1) - elseif haste >= 20 and haste < 30 then aura_env.region.haste:SetTextColor(aura_env.c21, aura_env.c22, aura_env.c23, 1) - elseif haste >= 30 and haste < 40 then aura_env.region.haste:SetTextColor(aura_env.c31, aura_env.c32, aura_env.c33, 1) - elseif haste >= 40 and haste < 50 then aura_env.region.haste:SetTextColor(aura_env.c41, aura_env.c42, aura_env.c43, 1) - elseif haste >= 50 and haste < 60 then aura_env.region.haste:SetTextColor(aura_env.c51, aura_env.c52, aura_env.c53, 1) - elseif haste >= 60 then aura_env.region.haste:SetTextColor(aura_env.c61, aura_env.c62, aura_env.c63, 1) - end - if mastery >= 15 and mastery < 20 then aura_env.region.mastery:SetTextColor(aura_env.c11, aura_env.c12, aura_env.c13, 1) - elseif mastery >= 20 and mastery < 25 then aura_env.region.mastery:SetTextColor(aura_env.c21, aura_env.c22, aura_env.c23, 1) - elseif mastery >= 25 and mastery < 35 then aura_env.region.mastery:SetTextColor(aura_env.c31, aura_env.c32, aura_env.c33, 1) - elseif mastery >= 35 and mastery < 40 then aura_env.region.mastery:SetTextColor(aura_env.c41, aura_env.c42, aura_env.c43, 1) - elseif mastery >= 40 and mastery < 45 then aura_env.region.mastery:SetTextColor(aura_env.c51, aura_env.c52, aura_env.c53, 1) - elseif mastery >= 45 then aura_env.region.mastery:SetTextColor(aura_env.c61, aura_env.c62, aura_env.c63, 1) - end - return "Crit\nHaste\nMastery" -end - ---INIT -local font, size, flags = aura_env.region.text:GetFont() -if not aura_env.region.crit then - local crit = aura_env.region:CreateFontString(nil, aura_env.region) - aura_env.region.crit = crit - print("ok!") -end -aura_env.region.crit:SetFont(font, size, flags) -aura_env.region.crit:SetTextColor(1,1,1,1) -aura_env.region.crit:SetPoint("RIGHT", aura_env.region, "CENTER", 96, size) -aura_env.region.crit:SetJustifyH("RIGHT") -aura_env.region.crit:SetText("11111111") -aura_env.region.crit:Show() -if not aura_env.region.haste then - local haste = aura_env.region:CreateFontString(nil, aura_env.region) - aura_env.region.haste = haste - print("ok!") -end -aura_env.region.haste:SetFont(font, size, flags) -aura_env.region.haste:SetTextColor(1,1,1,1) -aura_env.region.haste:SetPoint("RIGHT", aura_env.region, "CENTER", 96, 0) -aura_env.region.haste:SetJustifyH("RIGHT") -aura_env.region.haste:SetText("22222222") -aura_env.region.haste:Show() -if not aura_env.region.mastery then - local mastery = aura_env.region:CreateFontString(nil, aura_env.region) - aura_env.region.mastery = mastery - print("ok!") -end -aura_env.region.mastery:SetFont(font, size, flags) -aura_env.region.mastery:SetTextColor(1,1,1,1) -aura_env.region.mastery:SetPoint("RIGHT", aura_env.region, "CENTER", 96, - size) -aura_env.region.mastery:SetJustifyH("RIGHT") -aura_env.region.mastery:SetText("33333333") -aura_env.region.mastery:Show() -aura_env.round = function(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var -end -aura_env.c11, aura_env.c12, aura_env.c13 = 1, 0, 0 -aura_env.c21, aura_env.c22, aura_env.c23 = 1, 0.5, 0 -aura_env.c31, aura_env.c32, aura_env.c33 = 0, 1, 0 -aura_env.c41, aura_env.c42, aura_env.c43 = 0, 1, 1 -aura_env.c51, aura_env.c52, aura_env.c53 = 1, 0, 1 +--EVERY FRAME +function() + local crit, haste, mastery = aura_env.round(GetCritChance(), 2), aura_env.round(GetHaste(), 2), aura_env.round(GetMastery(), 2) + aura_env.region.crit:SetText(crit); aura_env.region.haste:SetText(haste); aura_env.region.mastery:SetText(mastery) + if crit >= 15 and crit < 20 then aura_env.region.crit:SetTextColor(aura_env.c11, aura_env.c12, aura_env.c13, 1) + elseif crit >= 20 and crit < 25 then aura_env.region.crit:SetTextColor(aura_env.c21, aura_env.c22, aura_env.c23, 1) + elseif crit >= 25 and crit < 30 then aura_env.region.crit:SetTextColor(aura_env.c31, aura_env.c32, aura_env.c33, 1) + elseif crit >= 30 and crit < 35 then aura_env.region.crit:SetTextColor(aura_env.c41, aura_env.c42, aura_env.c43, 1) + elseif crit >= 35 and crit < 40 then aura_env.region.crit:SetTextColor(aura_env.c51, aura_env.c52, aura_env.c53, 1) + elseif crit >= 40 then aura_env.region.crit:SetTextColor(aura_env.c61, aura_env.c62, aura_env.c63, 1) + end + if haste >= 10 and haste < 20 then aura_env.region.haste:SetTextColor(aura_env.c11, aura_env.c12, aura_env.c13, 1) + elseif haste >= 20 and haste < 30 then aura_env.region.haste:SetTextColor(aura_env.c21, aura_env.c22, aura_env.c23, 1) + elseif haste >= 30 and haste < 40 then aura_env.region.haste:SetTextColor(aura_env.c31, aura_env.c32, aura_env.c33, 1) + elseif haste >= 40 and haste < 50 then aura_env.region.haste:SetTextColor(aura_env.c41, aura_env.c42, aura_env.c43, 1) + elseif haste >= 50 and haste < 60 then aura_env.region.haste:SetTextColor(aura_env.c51, aura_env.c52, aura_env.c53, 1) + elseif haste >= 60 then aura_env.region.haste:SetTextColor(aura_env.c61, aura_env.c62, aura_env.c63, 1) + end + if mastery >= 15 and mastery < 20 then aura_env.region.mastery:SetTextColor(aura_env.c11, aura_env.c12, aura_env.c13, 1) + elseif mastery >= 20 and mastery < 25 then aura_env.region.mastery:SetTextColor(aura_env.c21, aura_env.c22, aura_env.c23, 1) + elseif mastery >= 25 and mastery < 35 then aura_env.region.mastery:SetTextColor(aura_env.c31, aura_env.c32, aura_env.c33, 1) + elseif mastery >= 35 and mastery < 40 then aura_env.region.mastery:SetTextColor(aura_env.c41, aura_env.c42, aura_env.c43, 1) + elseif mastery >= 40 and mastery < 45 then aura_env.region.mastery:SetTextColor(aura_env.c51, aura_env.c52, aura_env.c53, 1) + elseif mastery >= 45 then aura_env.region.mastery:SetTextColor(aura_env.c61, aura_env.c62, aura_env.c63, 1) + end + return "Crit\nHaste\nMastery" +end + +--INIT +local font, size, flags = aura_env.region.text:GetFont() +if not aura_env.region.crit then + local crit = aura_env.region:CreateFontString(nil, aura_env.region) + aura_env.region.crit = crit + print("ok!") +end +aura_env.region.crit:SetFont(font, size, flags) +aura_env.region.crit:SetTextColor(1,1,1,1) +aura_env.region.crit:SetPoint("RIGHT", aura_env.region, "CENTER", 96, size) +aura_env.region.crit:SetJustifyH("RIGHT") +aura_env.region.crit:SetText("11111111") +aura_env.region.crit:Show() +if not aura_env.region.haste then + local haste = aura_env.region:CreateFontString(nil, aura_env.region) + aura_env.region.haste = haste + print("ok!") +end +aura_env.region.haste:SetFont(font, size, flags) +aura_env.region.haste:SetTextColor(1,1,1,1) +aura_env.region.haste:SetPoint("RIGHT", aura_env.region, "CENTER", 96, 0) +aura_env.region.haste:SetJustifyH("RIGHT") +aura_env.region.haste:SetText("22222222") +aura_env.region.haste:Show() +if not aura_env.region.mastery then + local mastery = aura_env.region:CreateFontString(nil, aura_env.region) + aura_env.region.mastery = mastery + print("ok!") +end +aura_env.region.mastery:SetFont(font, size, flags) +aura_env.region.mastery:SetTextColor(1,1,1,1) +aura_env.region.mastery:SetPoint("RIGHT", aura_env.region, "CENTER", 96, - size) +aura_env.region.mastery:SetJustifyH("RIGHT") +aura_env.region.mastery:SetText("33333333") +aura_env.region.mastery:Show() +aura_env.round = function(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var +end +aura_env.c11, aura_env.c12, aura_env.c13 = 1, 0, 0 +aura_env.c21, aura_env.c22, aura_env.c23 = 1, 0.5, 0 +aura_env.c31, aura_env.c32, aura_env.c33 = 0, 1, 0 +aura_env.c41, aura_env.c42, aura_env.c43 = 0, 1, 1 +aura_env.c51, aura_env.c52, aura_env.c53 = 1, 0, 1 aura_env.c61, aura_env.c62, aura_env.c63 = 1, 1, 0 \ No newline at end of file diff --git a/Complete Projects/BFA/Stun Counter.lua b/WeakAuras/Projects/ByExp/BFA/Stun Counter.lua similarity index 96% rename from Complete Projects/BFA/Stun Counter.lua rename to WeakAuras/Projects/ByExp/BFA/Stun Counter.lua index c2db5f3..93e80b3 100644 --- a/Complete Projects/BFA/Stun Counter.lua +++ b/WeakAuras/Projects/ByExp/BFA/Stun Counter.lua @@ -1,160 +1,160 @@ ---COMBAT_LOG_EVENT_UNFILTERED RESET GROUP_ROSTER_UPDATE -function(...) - local e = select(1, ...) - if e == "COMBAT_LOG_EVENT_UNFILTERED" then - local se = select(3, ...) - if se == "SPELL_CAST_SUCCESS" then - local caster = select(6, ...) - if UnitName(caster) then - if UnitInParty(caster) or UnitName(caster) == UnitName("player") then - local spell = select(14, ...) - if aura_env.spells[spell] then - caster = caster:gsub("%-.+", "") - caster = caster:gsub(" ", "") - if not aura_env.stuns[caster] then aura_env.stuns[caster] = 1 else aura_env.stuns[caster] = aura_env.stuns[caster] + 1 end - local output1, output2 = "", "" - for k,v in pairs(aura_env.stuns) do - local class = UnitClass(k) or "" - output1 = output1 .. aura_env.classColor(class) .. k .. "|r\n" - output2 = output2 .. aura_env.classColor(class) .. v .. "|r\n" - end - aura_env.region.text2:SetText(output1) - aura_env.region.text3:SetText(output2) - end - end - end - end - elseif e == "GROUP_ROSTER_UPDATE" then - aura_env.stuns = nil - aura_env.stuns = {} - aura_env.region.text2:SetText("") - aura_env.region.text3:SetText("") - elseif e == "RESET" then - aura_env.stuns = nil - aura_env.stuns = {} - aura_env.region.text2:SetText("") - aura_env.region.text3:SetText("") - end -end - ---INIT -if not aura_env.region.text2 then - local text2 = aura_env.region:CreateFontString(nil, "OVERLAY") - aura_env.region.text2 = text2 -end -aura_env.region.text2:SetFont(aura_env.region.text:GetFont()) -aura_env.region.text2:SetTextColor(1,1,1,1) -aura_env.region.text2:SetPoint("CENTER", aura_env.region, "CENTER", 0, 0) -aura_env.region.text2:SetJustifyH("LEFT") -aura_env.region.text2:SetText("") -aura_env.region.text2:Show() - -if not aura_env.region.text3 then - local text3 = aura_env.region:CreateFontString(nil, "OVERLAY") - aura_env.region.text3 = text3 -end -aura_env.region.text3:SetFont(aura_env.region.text:GetFont()) -aura_env.region.text3:SetTextColor(1,1,1,1) -aura_env.region.text3:SetPoint("CENTER", aura_env.region, "CENTER", 100, 0) -aura_env.region.text3:SetJustifyH("LEFT") -aura_env.region.text3:SetText("") -aura_env.region.text3:Show() -aura_env.stuns = {} -aura_env.spells = -{ - --DK - ["Asphyxiate"] = 1, - ["Gnaw"] = 1, - ["Monstrous Blow"] = 1, - ["Blinding Sleet"] = 1, - ["Death Grip"] = 1, - ["Gorefiend's Grasp"] = 1, - ["Mind Freeze"] = 1, - ["Shambling Rush"] = 1, - - --DH - ["Chaos Nova"] = 1, - ["Fel Eruption"] = 1, - ["Sigil of Misery"] = 1, - ["Sigil of Chains"] = 1, - ["Disrupt"] = 1, - - --Druid - ["Maim"] = 1, - ["Mighty Bash"] = 1, - ["Rake"] = 1, - ["Typhoon"] = 1, - ["Ursol's Vortex"] = 1, - ["Skull Bash"] = 1, - - --Hunter - ["Intimidation"] = 1, - ["Bursting Shot"] = 1, - ["Muzzle"] = 1, - ["Counter Shot"] = 1, - - --Monk - ["Leg Sweep"] = 1, - ["Song of Chi-ji"] = 1, - ["Ring of Peace"] = 1, - ["Spear Hand Strike"] = 1, - - --Mage - ["Dragon's Breath"] = 1, - ["Blast Wave"] = 1, - ["Supernova"] = 1, - - --Paladin - ["Hammer of Justice"] = 1, - ["Blinding Light"] = 1, - ["Avenger's Shield"] = 1, - ["Rebuke"] = 1, - - --Priest - ["Holy Word: Chastise"] = 1, - ["Psychic Horror"] = 1, - ["Mind Bomb"] = 1, - ["Psychic Scream"] = 1, - ["Silence"] = 1, - - --Rogue - ["Between the Eyes"] = 1, - ["Cheap Shot"] = 1, - ["Kidney Shot"] = 1, - ["Blind"] = 1, - ["Kick"] = 1, - - --Shaman - ["Capacitor Totem"] = 1, - ["Pulverize"] = 1, - ["Thunderstorm"] = 1, - ["Wind Shear"] = 1, - - --Warlock - ["Axe Toss"] = 1, - ["Shadowfury"] = 1, - ["Summon Infernal"] = 1, - ["Seduction"] = 1, - ["Spell Lock"] = 1, - - --Warrior - ["Shockwave"] = 1, - ["Storm Bolt"] = 1, - ["Intimidating Shout"] = 1, - ["Pummel"] = 1, -} -aura_env.classColor = function(class) - if class == "Death Knight" then return "|cFFC41F3B" elseif - class == "Demon Hunter" then return "|cFFA330C9" elseif - class == "Druid" then return "|cFFFF7D0A" elseif - class == "Hunter" then return "|cFFABD473" elseif - class == "Mage" then return "|cFF40C7EB" elseif - class == "Monk" then return "|cFF00FF96" elseif - class == "Paladin" then return "|cFFF58CBA" elseif - class == "Priest" then return "|cFFFFFFFF" elseif - class == "Rogue" then return "|cFFFFF569" elseif - class == "Shaman" then return "|cFF0070DE" elseif - class == "Warlock" then return "|cFF8787ED" elseif - class == "Warrior" then return "|cFFC79C6E" else - return "|cFFFFFFFF" end +--COMBAT_LOG_EVENT_UNFILTERED RESET GROUP_ROSTER_UPDATE +function(...) + local e = select(1, ...) + if e == "COMBAT_LOG_EVENT_UNFILTERED" then + local se = select(3, ...) + if se == "SPELL_CAST_SUCCESS" then + local caster = select(6, ...) + if UnitName(caster) then + if UnitInParty(caster) or UnitName(caster) == UnitName("player") then + local spell = select(14, ...) + if aura_env.spells[spell] then + caster = caster:gsub("%-.+", "") + caster = caster:gsub(" ", "") + if not aura_env.stuns[caster] then aura_env.stuns[caster] = 1 else aura_env.stuns[caster] = aura_env.stuns[caster] + 1 end + local output1, output2 = "", "" + for k,v in pairs(aura_env.stuns) do + local class = UnitClass(k) or "" + output1 = output1 .. aura_env.classColor(class) .. k .. "|r\n" + output2 = output2 .. aura_env.classColor(class) .. v .. "|r\n" + end + aura_env.region.text2:SetText(output1) + aura_env.region.text3:SetText(output2) + end + end + end + end + elseif e == "GROUP_ROSTER_UPDATE" then + aura_env.stuns = nil + aura_env.stuns = {} + aura_env.region.text2:SetText("") + aura_env.region.text3:SetText("") + elseif e == "RESET" then + aura_env.stuns = nil + aura_env.stuns = {} + aura_env.region.text2:SetText("") + aura_env.region.text3:SetText("") + end +end + +--INIT +if not aura_env.region.text2 then + local text2 = aura_env.region:CreateFontString(nil, "OVERLAY") + aura_env.region.text2 = text2 +end +aura_env.region.text2:SetFont(aura_env.region.text:GetFont()) +aura_env.region.text2:SetTextColor(1,1,1,1) +aura_env.region.text2:SetPoint("CENTER", aura_env.region, "CENTER", 0, 0) +aura_env.region.text2:SetJustifyH("LEFT") +aura_env.region.text2:SetText("") +aura_env.region.text2:Show() + +if not aura_env.region.text3 then + local text3 = aura_env.region:CreateFontString(nil, "OVERLAY") + aura_env.region.text3 = text3 +end +aura_env.region.text3:SetFont(aura_env.region.text:GetFont()) +aura_env.region.text3:SetTextColor(1,1,1,1) +aura_env.region.text3:SetPoint("CENTER", aura_env.region, "CENTER", 100, 0) +aura_env.region.text3:SetJustifyH("LEFT") +aura_env.region.text3:SetText("") +aura_env.region.text3:Show() +aura_env.stuns = {} +aura_env.spells = +{ + --DK + ["Asphyxiate"] = 1, + ["Gnaw"] = 1, + ["Monstrous Blow"] = 1, + ["Blinding Sleet"] = 1, + ["Death Grip"] = 1, + ["Gorefiend's Grasp"] = 1, + ["Mind Freeze"] = 1, + ["Shambling Rush"] = 1, + + --DH + ["Chaos Nova"] = 1, + ["Fel Eruption"] = 1, + ["Sigil of Misery"] = 1, + ["Sigil of Chains"] = 1, + ["Disrupt"] = 1, + + --Druid + ["Maim"] = 1, + ["Mighty Bash"] = 1, + ["Rake"] = 1, + ["Typhoon"] = 1, + ["Ursol's Vortex"] = 1, + ["Skull Bash"] = 1, + + --Hunter + ["Intimidation"] = 1, + ["Bursting Shot"] = 1, + ["Muzzle"] = 1, + ["Counter Shot"] = 1, + + --Monk + ["Leg Sweep"] = 1, + ["Song of Chi-ji"] = 1, + ["Ring of Peace"] = 1, + ["Spear Hand Strike"] = 1, + + --Mage + ["Dragon's Breath"] = 1, + ["Blast Wave"] = 1, + ["Supernova"] = 1, + + --Paladin + ["Hammer of Justice"] = 1, + ["Blinding Light"] = 1, + ["Avenger's Shield"] = 1, + ["Rebuke"] = 1, + + --Priest + ["Holy Word: Chastise"] = 1, + ["Psychic Horror"] = 1, + ["Mind Bomb"] = 1, + ["Psychic Scream"] = 1, + ["Silence"] = 1, + + --Rogue + ["Between the Eyes"] = 1, + ["Cheap Shot"] = 1, + ["Kidney Shot"] = 1, + ["Blind"] = 1, + ["Kick"] = 1, + + --Shaman + ["Capacitor Totem"] = 1, + ["Pulverize"] = 1, + ["Thunderstorm"] = 1, + ["Wind Shear"] = 1, + + --Warlock + ["Axe Toss"] = 1, + ["Shadowfury"] = 1, + ["Summon Infernal"] = 1, + ["Seduction"] = 1, + ["Spell Lock"] = 1, + + --Warrior + ["Shockwave"] = 1, + ["Storm Bolt"] = 1, + ["Intimidating Shout"] = 1, + ["Pummel"] = 1, +} +aura_env.classColor = function(class) + if class == "Death Knight" then return "|cFFC41F3B" elseif + class == "Demon Hunter" then return "|cFFA330C9" elseif + class == "Druid" then return "|cFFFF7D0A" elseif + class == "Hunter" then return "|cFFABD473" elseif + class == "Mage" then return "|cFF40C7EB" elseif + class == "Monk" then return "|cFF00FF96" elseif + class == "Paladin" then return "|cFFF58CBA" elseif + class == "Priest" then return "|cFFFFFFFF" elseif + class == "Rogue" then return "|cFFFFF569" elseif + class == "Shaman" then return "|cFF0070DE" elseif + class == "Warlock" then return "|cFF8787ED" elseif + class == "Warrior" then return "|cFFC79C6E" else + return "|cFFFFFFFF" end end \ No newline at end of file diff --git a/Complete Projects/BFA/Stun Recap.lua b/WeakAuras/Projects/ByExp/BFA/Stun Recap.lua similarity index 96% rename from Complete Projects/BFA/Stun Recap.lua rename to WeakAuras/Projects/ByExp/BFA/Stun Recap.lua index 6c4e879..4ccd3d3 100644 --- a/Complete Projects/BFA/Stun Recap.lua +++ b/WeakAuras/Projects/ByExp/BFA/Stun Recap.lua @@ -1,137 +1,137 @@ ---CLEU -function(...) - local se = select(3, ...) - if se == "SPELL_CAST_SUCCESS" then - local spell = select(14, ...) - if aura_env.spells[spell] then - local caster = select(6, ...) - caster = caster:gsub("%-.+", "") - caster = caster:gsub(" ", "") - if #aura_env.stuns == 5 then - table.remove(aura_env.stuns, 1) - table.insert(aura_env.stuns, caster .. " - " .. spell) - else - table.insert(aura_env.stuns, caster .. " - " .. spell) - end - local output = "" - for k,v in ipairs(aura_env.stuns) do - local name = v:match("(.-) ") - local class = UnitClass(name) or "" - output = output .. aura_env.classColor(class) .. v .. "|r\n" - end - aura_env.region.text2:SetText(output) - aura_env.region.text2:Show() - end - end -end - ---INIT -if not aura_env.region.text2 then - local text2 = aura_env.region:CreateFontString(nil, "OVERLAY") - aura_env.region.text2 = text2 -end -aura_env.region.text2:SetFont(aura_env.region.text:GetFont()) -aura_env.region.text2:SetTextColor(1,1,1,1) -aura_env.region.text2:SetPoint("CENTER", aura_env.region, "CENTER", 0, 0) -aura_env.region.text2:SetJustifyH("CENTER") -aura_env.region.text2:SetText("") -aura_env.region.text2:Show() -aura_env.stuns = {} -aura_env.spells = -{ - --DK - ["Asphyxiate"] = 1, - ["Gnaw"] = 1, - ["Monstrous Blow"] = 1, - ["Blinding Sleet"] = 1, - ["Death Grip"] = 1, - ["Gorefiend's Grasp"] = 1, - ["Mind Freeze"] = 1, - ["Shambling Rush"] = 1, - - --DH - ["Chaos Nova"] = 1, - ["Fel Eruption"] = 1, - ["Sigil of Misery"] = 1, - ["Sigil of Chains"] = 1, - ["Disrupt"] = 1, - - --Druid - ["Maim"] = 1, - ["Mighty Bash"] = 1, - ["Rake"] = 1, - ["Typhoon"] = 1, - ["Ursol's Vortex"] = 1, - ["Skull Bash"] = 1, - - --Hunter - ["Intimidation"] = 1, - ["Bursting Shot"] = 1, - ["Muzzle"] = 1, - ["Counter Shot"] = 1, - - --Monk - ["Leg Sweep"] = 1, - ["Song of Chi-ji"] = 1, - ["Ring of Peace"] = 1, - ["Spear Hand Strike"] = 1, - - --Mage - ["Dragon's Breath"] = 1, - ["Blast Wave"] = 1, - ["Supernova"] = 1, - - --Paladin - ["Hammer of Justice"] = 1, - ["Blinding Light"] = 1, - ["Avenger's Shield"] = 1, - ["Rebuke"] = 1, - - --Priest - ["Holy Word: Chastise"] = 1, - ["Psychic Horror"] = 1, - ["Mind Bomb"] = 1, - ["Psychic Scream"] = 1, - ["Silence"] = 1, - - --Rogue - ["Between the Eyes"] = 1, - ["Cheap Shot"] = 1, - ["Kidney Shot"] = 1, - ["Blind"] = 1, - ["Kick"] = 1, - - --Shaman - ["Capacitor Totem"] = 1, - ["Pulverize"] = 1, - ["Thunderstorm"] = 1, - ["Wind Shear"] = 1, - - --Warlock - ["Axe Toss"] = 1, - ["Shadowfury"] = 1, - ["Summon Infernal"] = 1, - ["Seduction"] = 1, - ["Spell Lock"] = 1, - - --Warrior - ["Shockwave"] = 1, - ["Storm Bolt"] = 1, - ["Intimidating Shout"] = 1, - ["Pummel"] = 1, -} -aura_env.classColor = function(class) - if class == "Death Knight" then return "|cFFC41F3B" elseif - class == "Demon Hunter" then return "|cFFA330C9" elseif - class == "Druid" then return "|cFFFF7D0A" elseif - class == "Hunter" then return "|cFFABD473" elseif - class == "Mage" then return "|cFF40C7EB" elseif - class == "Monk" then return "|cFF00FF96" elseif - class == "Paladin" then return "|cFFF58CBA" elseif - class == "Priest" then return "|cFFFFFFFF" elseif - class == "Rogue" then return "|cFFFFF569" elseif - class == "Shaman" then return "|cFF0070DE" elseif - class == "Warlock" then return "|cFF8787ED" elseif - class == "Warrior" then return "|cFFC79C6E" else - return "|cFFFFFFFF" end +--CLEU +function(...) + local se = select(3, ...) + if se == "SPELL_CAST_SUCCESS" then + local spell = select(14, ...) + if aura_env.spells[spell] then + local caster = select(6, ...) + caster = caster:gsub("%-.+", "") + caster = caster:gsub(" ", "") + if #aura_env.stuns == 5 then + table.remove(aura_env.stuns, 1) + table.insert(aura_env.stuns, caster .. " - " .. spell) + else + table.insert(aura_env.stuns, caster .. " - " .. spell) + end + local output = "" + for k,v in ipairs(aura_env.stuns) do + local name = v:match("(.-) ") + local class = UnitClass(name) or "" + output = output .. aura_env.classColor(class) .. v .. "|r\n" + end + aura_env.region.text2:SetText(output) + aura_env.region.text2:Show() + end + end +end + +--INIT +if not aura_env.region.text2 then + local text2 = aura_env.region:CreateFontString(nil, "OVERLAY") + aura_env.region.text2 = text2 +end +aura_env.region.text2:SetFont(aura_env.region.text:GetFont()) +aura_env.region.text2:SetTextColor(1,1,1,1) +aura_env.region.text2:SetPoint("CENTER", aura_env.region, "CENTER", 0, 0) +aura_env.region.text2:SetJustifyH("CENTER") +aura_env.region.text2:SetText("") +aura_env.region.text2:Show() +aura_env.stuns = {} +aura_env.spells = +{ + --DK + ["Asphyxiate"] = 1, + ["Gnaw"] = 1, + ["Monstrous Blow"] = 1, + ["Blinding Sleet"] = 1, + ["Death Grip"] = 1, + ["Gorefiend's Grasp"] = 1, + ["Mind Freeze"] = 1, + ["Shambling Rush"] = 1, + + --DH + ["Chaos Nova"] = 1, + ["Fel Eruption"] = 1, + ["Sigil of Misery"] = 1, + ["Sigil of Chains"] = 1, + ["Disrupt"] = 1, + + --Druid + ["Maim"] = 1, + ["Mighty Bash"] = 1, + ["Rake"] = 1, + ["Typhoon"] = 1, + ["Ursol's Vortex"] = 1, + ["Skull Bash"] = 1, + + --Hunter + ["Intimidation"] = 1, + ["Bursting Shot"] = 1, + ["Muzzle"] = 1, + ["Counter Shot"] = 1, + + --Monk + ["Leg Sweep"] = 1, + ["Song of Chi-ji"] = 1, + ["Ring of Peace"] = 1, + ["Spear Hand Strike"] = 1, + + --Mage + ["Dragon's Breath"] = 1, + ["Blast Wave"] = 1, + ["Supernova"] = 1, + + --Paladin + ["Hammer of Justice"] = 1, + ["Blinding Light"] = 1, + ["Avenger's Shield"] = 1, + ["Rebuke"] = 1, + + --Priest + ["Holy Word: Chastise"] = 1, + ["Psychic Horror"] = 1, + ["Mind Bomb"] = 1, + ["Psychic Scream"] = 1, + ["Silence"] = 1, + + --Rogue + ["Between the Eyes"] = 1, + ["Cheap Shot"] = 1, + ["Kidney Shot"] = 1, + ["Blind"] = 1, + ["Kick"] = 1, + + --Shaman + ["Capacitor Totem"] = 1, + ["Pulverize"] = 1, + ["Thunderstorm"] = 1, + ["Wind Shear"] = 1, + + --Warlock + ["Axe Toss"] = 1, + ["Shadowfury"] = 1, + ["Summon Infernal"] = 1, + ["Seduction"] = 1, + ["Spell Lock"] = 1, + + --Warrior + ["Shockwave"] = 1, + ["Storm Bolt"] = 1, + ["Intimidating Shout"] = 1, + ["Pummel"] = 1, +} +aura_env.classColor = function(class) + if class == "Death Knight" then return "|cFFC41F3B" elseif + class == "Demon Hunter" then return "|cFFA330C9" elseif + class == "Druid" then return "|cFFFF7D0A" elseif + class == "Hunter" then return "|cFFABD473" elseif + class == "Mage" then return "|cFF40C7EB" elseif + class == "Monk" then return "|cFF00FF96" elseif + class == "Paladin" then return "|cFFF58CBA" elseif + class == "Priest" then return "|cFFFFFFFF" elseif + class == "Rogue" then return "|cFFFFF569" elseif + class == "Shaman" then return "|cFF0070DE" elseif + class == "Warlock" then return "|cFF8787ED" elseif + class == "Warrior" then return "|cFFC79C6E" else + return "|cFFFFFFFF" end end \ No newline at end of file diff --git a/Complete Projects/BFA/TSU - Combat HP Bars.lua b/WeakAuras/Projects/ByExp/BFA/TSU - Combat HP Bars.lua similarity index 96% rename from Complete Projects/BFA/TSU - Combat HP Bars.lua rename to WeakAuras/Projects/ByExp/BFA/TSU - Combat HP Bars.lua index 8dce339..b5b8eae 100644 --- a/Complete Projects/BFA/TSU - Combat HP Bars.lua +++ b/WeakAuras/Projects/ByExp/BFA/TSU - Combat HP Bars.lua @@ -1,106 +1,106 @@ ---UNIT_HEALTH NAME_PLATE_UNIT_REMOVED NAME_PLATE_UNIT_ADDED UNIT_THREAT_LIST_UPDATE PLAYER_TARGET_CHANGED -function(allstates, e, u) - if e == "PLAYER_TARGET_CHANGED" then - return true - elseif e == "UNIT_HEALTH" or e == "UNIT_THREAT_LIST_UPDATE" then - if u then - print(UnitDetailedThreatSituation("player", u)) - if UnitExists(u) and u:match("nameplate") and UnitDetailedThreatSituation("player", u) then - local threat = select(5, UnitDetailedThreatSituation("player", u)) - local tank = UnitDetailedThreatSituation("player", u) - local hp = UnitHealth(u) - local maxhp = UnitHealthMax(u) - local php = aura_env.round((hp / maxhp) * 100, 1) - local name = UnitName(u) - local target = false - if UnitIsUnit(u, "target") then target = true end - allstates[u] = - { - show = true, - changed = true, - name = name, - unit = u, - value = hp, - total = maxhp, - index = php, - shp = aura_env.shorten(hp), - tank = tank, - target = target, - resort = true, - progressType = "static", - } - return true - end - end - elseif e == "NAME_PLATE_UNIT_REMOVED" then - if allstates[u] then allstates[u].changed = true; allstates[u].show = false; return true end - elseif e == "NAME_PLATE_UNIT_ADDED" then - if not allstates[u] then - if u then - if UnitExists(u) and UnitDetailedThreatSituation("player", u) then - local threat = select(5, UnitDetailedThreatSituation("player", u)) - local tank = UnitDetailedThreatSituation("player", u) - local hp = UnitHealth(u) - local maxhp = UnitHealthMax(u) - local php = aura_env.round((hp / maxhp) * 100, 1) - local name = UnitName(u) - local target = false - if UnitIsUnit(u, "target") then target = true end - allstates[u] = - { - show = true, - changed = true, - name = name, - unit = u, - value = hp, - total = maxhp, - index = php, - shp = aura_env.shorten(hp), - tank = tank, - target = target, - resort = true, - progressType = "static", - } - return true - end - end - end - end -end - ---ADDITIONAL INFO -{ - tank = "bool", - target = "bool", - index = "number", -} - ---INIT -aura_env.round = function(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var -end -aura_env.shorten = function(val) - local function round(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var - end - local n = 2 - if val < 1e3 then - return round(val, n) - elseif val > 1e3 and val < 1e6 then - return round(val / 1e3, n) .. "k" - elseif val > 1e6 and val < 1e9 then - return round(val / 1e6, n) .. "M" - elseif val > 1e9 then - return round(val / 1e9, n) .. "G" - end +--UNIT_HEALTH NAME_PLATE_UNIT_REMOVED NAME_PLATE_UNIT_ADDED UNIT_THREAT_LIST_UPDATE PLAYER_TARGET_CHANGED +function(allstates, e, u) + if e == "PLAYER_TARGET_CHANGED" then + return true + elseif e == "UNIT_HEALTH" or e == "UNIT_THREAT_LIST_UPDATE" then + if u then + print(UnitDetailedThreatSituation("player", u)) + if UnitExists(u) and u:match("nameplate") and UnitDetailedThreatSituation("player", u) then + local threat = select(5, UnitDetailedThreatSituation("player", u)) + local tank = UnitDetailedThreatSituation("player", u) + local hp = UnitHealth(u) + local maxhp = UnitHealthMax(u) + local php = aura_env.round((hp / maxhp) * 100, 1) + local name = UnitName(u) + local target = false + if UnitIsUnit(u, "target") then target = true end + allstates[u] = + { + show = true, + changed = true, + name = name, + unit = u, + value = hp, + total = maxhp, + index = php, + shp = aura_env.shorten(hp), + tank = tank, + target = target, + resort = true, + progressType = "static", + } + return true + end + end + elseif e == "NAME_PLATE_UNIT_REMOVED" then + if allstates[u] then allstates[u].changed = true; allstates[u].show = false; return true end + elseif e == "NAME_PLATE_UNIT_ADDED" then + if not allstates[u] then + if u then + if UnitExists(u) and UnitDetailedThreatSituation("player", u) then + local threat = select(5, UnitDetailedThreatSituation("player", u)) + local tank = UnitDetailedThreatSituation("player", u) + local hp = UnitHealth(u) + local maxhp = UnitHealthMax(u) + local php = aura_env.round((hp / maxhp) * 100, 1) + local name = UnitName(u) + local target = false + if UnitIsUnit(u, "target") then target = true end + allstates[u] = + { + show = true, + changed = true, + name = name, + unit = u, + value = hp, + total = maxhp, + index = php, + shp = aura_env.shorten(hp), + tank = tank, + target = target, + resort = true, + progressType = "static", + } + return true + end + end + end + end +end + +--ADDITIONAL INFO +{ + tank = "bool", + target = "bool", + index = "number", +} + +--INIT +aura_env.round = function(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var +end +aura_env.shorten = function(val) + local function round(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var + end + local n = 2 + if val < 1e3 then + return round(val, n) + elseif val > 1e3 and val < 1e6 then + return round(val / 1e3, n) .. "k" + elseif val > 1e6 and val < 1e9 then + return round(val / 1e6, n) .. "M" + elseif val > 1e9 then + return round(val / 1e9, n) .. "G" + end end \ No newline at end of file diff --git a/Complete Projects/BFA/TSU - Enemy Health.lua b/WeakAuras/Projects/ByExp/BFA/TSU - Enemy Health.lua similarity index 96% rename from Complete Projects/BFA/TSU - Enemy Health.lua rename to WeakAuras/Projects/ByExp/BFA/TSU - Enemy Health.lua index 5eaea2e..d57495f 100644 --- a/Complete Projects/BFA/TSU - Enemy Health.lua +++ b/WeakAuras/Projects/ByExp/BFA/TSU - Enemy Health.lua @@ -1,121 +1,121 @@ ---TSU ---UNIT_HEALTH NAME_PLATE_UNIT_ADDED NAME_PLATE_UNIT_REMOVED -function(allstates) - for _,v in pairs(allstates) do - v.show = false - v.changed = true - end - - for i = 1, 40 do - local unit = "nameplate" .. i - if UnitExists(unit) then - if UnitIsPlayer(unit) then - print("3", unit) - if UnitIsEnemy("player", unit) then - print("4", unit) - local hp = UnitHealth(unit) - local maxHp = UnitHealthMax(unit) - local hppp = aura_env.round(hp / maxHp * 100, 2) - local shortHP = aura_env.shorten(hp) - local shortmaxHP = aura_env.shorten(maxHp) - local name = UnitName(unit) - local class = UnitClass(unit) - print(hp, maxHp, hppp, shortHP, shortmaxHP, name, class) - allstates[unit] = - { - changed = true, - show = true, - resort = true, - progressType = "static", - value = hp, - total = maxHp, - index = hppp, - name = name, - hppp = hppp, - shortHP = shortHP, - shortmaxHP = shortmaxHP, - class = class, - } - end - end - else - break - end - end - return true -end - ---INIT -aura_env.round = function(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var -end -aura_env.shorten = function(val) - local function round(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var - end - local n = 2 - if val < 1e3 then - return round(val, n) - elseif val > 1e3 and val < 1e6 then - return round(val / 1e3, n) .. "k" - elseif val > 1e6 and val < 1e9 then - return round(val / 1e6, n) .. "M" - elseif val > 1e9 then - return round(val / 1e9, n) .. "G" - end -end -aura_env.classColor = function(class) - if class == "Death Knight" then return 0.77, 0.12, 0.23, 1 elseif - class == "Demon Hunter" then return 0.64, 0.19, 0.79, 1 elseif - class == "Druid" then return 1, 0.49, 0.04, 1 elseif - class == "Hunter" then return 0.67, 0.83, 0.45, 1 elseif - class == "Mage" then return 0.25, 0.78, 0.92, 1 elseif - class == "Monk" then return 0, 1, 0.59, 1 elseif - class == "Paladin" then return 0.96, 0.55, 0.73, 1 elseif - class == "Priest" then return 1, 1, 1, 1 elseif - class == "Rogue" then return 1, 0.96, 0.41, 1 elseif - class == "Shaman" then return 0, 0.44, 0.87, 1 elseif - class == "Warlock" then return 0.53, 0.53, 0.93, 1 elseif - class == "Warrior" then return 0.78, 0.61, 0.43, 1 else - return 1, 1, 1, 1 end -end -aura_env.round = function(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var -end -aura_env.grad = function(c) - --c expected as [0, 1] - if c > 0.5 then - c = 1 - (2 * (c - 0.5)) - return c, 1, 0, 1 - else - c = c * 2 - return 1, c, 0, 1 - end -end -aura_env.range = function(val, min, max, max2) - val = 1 - (((max - val) / (max - min)) * max2) - return val -end - ---ANIMATION -function() - if aura_env.statee then - -- print(aura_env.state.class) - return aura_env.classColor(aura_env.statee.class) - end +--TSU +--UNIT_HEALTH NAME_PLATE_UNIT_ADDED NAME_PLATE_UNIT_REMOVED +function(allstates) + for _,v in pairs(allstates) do + v.show = false + v.changed = true + end + + for i = 1, 40 do + local unit = "nameplate" .. i + if UnitExists(unit) then + if UnitIsPlayer(unit) then + print("3", unit) + if UnitIsEnemy("player", unit) then + print("4", unit) + local hp = UnitHealth(unit) + local maxHp = UnitHealthMax(unit) + local hppp = aura_env.round(hp / maxHp * 100, 2) + local shortHP = aura_env.shorten(hp) + local shortmaxHP = aura_env.shorten(maxHp) + local name = UnitName(unit) + local class = UnitClass(unit) + print(hp, maxHp, hppp, shortHP, shortmaxHP, name, class) + allstates[unit] = + { + changed = true, + show = true, + resort = true, + progressType = "static", + value = hp, + total = maxHp, + index = hppp, + name = name, + hppp = hppp, + shortHP = shortHP, + shortmaxHP = shortmaxHP, + class = class, + } + end + end + else + break + end + end + return true +end + +--INIT +aura_env.round = function(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var +end +aura_env.shorten = function(val) + local function round(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var + end + local n = 2 + if val < 1e3 then + return round(val, n) + elseif val > 1e3 and val < 1e6 then + return round(val / 1e3, n) .. "k" + elseif val > 1e6 and val < 1e9 then + return round(val / 1e6, n) .. "M" + elseif val > 1e9 then + return round(val / 1e9, n) .. "G" + end +end +aura_env.classColor = function(class) + if class == "Death Knight" then return 0.77, 0.12, 0.23, 1 elseif + class == "Demon Hunter" then return 0.64, 0.19, 0.79, 1 elseif + class == "Druid" then return 1, 0.49, 0.04, 1 elseif + class == "Hunter" then return 0.67, 0.83, 0.45, 1 elseif + class == "Mage" then return 0.25, 0.78, 0.92, 1 elseif + class == "Monk" then return 0, 1, 0.59, 1 elseif + class == "Paladin" then return 0.96, 0.55, 0.73, 1 elseif + class == "Priest" then return 1, 1, 1, 1 elseif + class == "Rogue" then return 1, 0.96, 0.41, 1 elseif + class == "Shaman" then return 0, 0.44, 0.87, 1 elseif + class == "Warlock" then return 0.53, 0.53, 0.93, 1 elseif + class == "Warrior" then return 0.78, 0.61, 0.43, 1 else + return 1, 1, 1, 1 end +end +aura_env.round = function(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var +end +aura_env.grad = function(c) + --c expected as [0, 1] + if c > 0.5 then + c = 1 - (2 * (c - 0.5)) + return c, 1, 0, 1 + else + c = c * 2 + return 1, c, 0, 1 + end +end +aura_env.range = function(val, min, max, max2) + val = 1 - (((max - val) / (max - min)) * max2) + return val +end + +--ANIMATION +function() + if aura_env.statee then + -- print(aura_env.state.class) + return aura_env.classColor(aura_env.statee.class) + end end \ No newline at end of file diff --git a/Complete Projects/BFA/TSU - Enemy Nameplates Maybe.lua b/WeakAuras/Projects/ByExp/BFA/TSU - Enemy Nameplates Maybe.lua similarity index 97% rename from Complete Projects/BFA/TSU - Enemy Nameplates Maybe.lua rename to WeakAuras/Projects/ByExp/BFA/TSU - Enemy Nameplates Maybe.lua index 55efe2d..382c524 100644 --- a/Complete Projects/BFA/TSU - Enemy Nameplates Maybe.lua +++ b/WeakAuras/Projects/ByExp/BFA/TSU - Enemy Nameplates Maybe.lua @@ -1,58 +1,58 @@ ---NAME_PLATE_UNIT_ADDED NAME_PLATE_UNIT_REMOVED REMOVE_UNIT -function(allstates, e, unit) - if e == "NAME_PLATE_UNIT_ADDED" and unit then - if UnitIsPlayer(unit) then - if UnitIsEnemy("player", unit) then - local _, _, class = UnitClass(unit) - allstates[unit] = - { - changed = true, - show = true, - unit = unit, - class = class, - } - return true - end - end - elseif e == "NAME_PLATE_UNIT_REMOVED" and unit then - if allstates[unit] then - local LCG = LibStub("LibCustomGlow-1.0") - allstates[unit].show = false - allstates[unit].changed = true - local nameplate = C_NamePlate.GetNamePlateForUnit(unit) - LCG.PixelGlow_Stop(nameplate) - return true - end - elseif e == "REMOVE_UNIT" then - if allstates[unit] then - allstates[unit].show = false - allstates[unit].changed = true - return true - end - end -end - ---ON SHOW -local LCG = LibStub("LibCustomGlow-1.0") -local nameplate = C_NamePlate.GetNamePlateForUnit(aura_env.statee.unit) -local aura_env = aura_env -local unit = aura_env.statee.unit -LCG.PixelGlow_Start(nameplate, {aura_env.classColor(aura_env.statee.class)}, nil, 0, 8, 4, 0, -4) -C_Timer.After(4, function() WeakAuras.ScanEvents("REMOVE_UNIT", unit); LCG.PixelGlow_Stop(nameplate) end) - ---INIT -aura_env.classColor = function(class) - if class == 1 then return 0.78, 0.61, 0.43, 1 elseif - class == 2 then return 0.96, 0.55, 0.73, 1 elseif - class == 3 then return 0.67, 0.83, 0.45, 1 elseif - class == 4 then return 1, 0.96, 0.41, 1 elseif - class == 5 then return 1, 1, 1, 1 elseif - class == 6 then return 0.77, 0.12, 0.23, 1 elseif - class == 7 then return 0, 0.44, 0.87, 1 elseif - class == 8 then return 0.25, 0.78, 0.92, 1 elseif - class == 9 then return 0.53, 0.53, 0.93, 1 elseif - class == 10 then return 0, 1, 0.59, 1 elseif - class == 11 then return 1, 0.49, 0.04, 1 elseif - class == 12 then return 0.64, 0.19, 0.79, 1 else - return 1, 1, 1, 1 end +--NAME_PLATE_UNIT_ADDED NAME_PLATE_UNIT_REMOVED REMOVE_UNIT +function(allstates, e, unit) + if e == "NAME_PLATE_UNIT_ADDED" and unit then + if UnitIsPlayer(unit) then + if UnitIsEnemy("player", unit) then + local _, _, class = UnitClass(unit) + allstates[unit] = + { + changed = true, + show = true, + unit = unit, + class = class, + } + return true + end + end + elseif e == "NAME_PLATE_UNIT_REMOVED" and unit then + if allstates[unit] then + local LCG = LibStub("LibCustomGlow-1.0") + allstates[unit].show = false + allstates[unit].changed = true + local nameplate = C_NamePlate.GetNamePlateForUnit(unit) + LCG.PixelGlow_Stop(nameplate) + return true + end + elseif e == "REMOVE_UNIT" then + if allstates[unit] then + allstates[unit].show = false + allstates[unit].changed = true + return true + end + end +end + +--ON SHOW +local LCG = LibStub("LibCustomGlow-1.0") +local nameplate = C_NamePlate.GetNamePlateForUnit(aura_env.statee.unit) +local aura_env = aura_env +local unit = aura_env.statee.unit +LCG.PixelGlow_Start(nameplate, {aura_env.classColor(aura_env.statee.class)}, nil, 0, 8, 4, 0, -4) +C_Timer.After(4, function() WeakAuras.ScanEvents("REMOVE_UNIT", unit); LCG.PixelGlow_Stop(nameplate) end) + +--INIT +aura_env.classColor = function(class) + if class == 1 then return 0.78, 0.61, 0.43, 1 elseif + class == 2 then return 0.96, 0.55, 0.73, 1 elseif + class == 3 then return 0.67, 0.83, 0.45, 1 elseif + class == 4 then return 1, 0.96, 0.41, 1 elseif + class == 5 then return 1, 1, 1, 1 elseif + class == 6 then return 0.77, 0.12, 0.23, 1 elseif + class == 7 then return 0, 0.44, 0.87, 1 elseif + class == 8 then return 0.25, 0.78, 0.92, 1 elseif + class == 9 then return 0.53, 0.53, 0.93, 1 elseif + class == 10 then return 0, 1, 0.59, 1 elseif + class == 11 then return 1, 0.49, 0.04, 1 elseif + class == 12 then return 0.64, 0.19, 0.79, 1 else + return 1, 1, 1, 1 end end \ No newline at end of file diff --git a/Complete Projects/BFA/TSU - Herb Icons.lua b/WeakAuras/Projects/ByExp/BFA/TSU - Herb Icons.lua similarity index 95% rename from Complete Projects/BFA/TSU - Herb Icons.lua rename to WeakAuras/Projects/ByExp/BFA/TSU - Herb Icons.lua index 19c6182..1971507 100644 --- a/Complete Projects/BFA/TSU - Herb Icons.lua +++ b/WeakAuras/Projects/ByExp/BFA/TSU - Herb Icons.lua @@ -1,64 +1,64 @@ ---BAG_UPDATE UPDATE -function(allstates, e, id) - if e == "BAG_UPDATE" then - if id then - for i = 1, GetContainerNumSlots(id) do - local iid = GetContainerItemID(id, i) - if aura_env.herbIDs[iid] then - local texture = select(1, GetContainerItemInfo(id, i)) - local amount = GetItemCount(iid, false) - local bank = GetItemCount(iid, true) - amount - allstates[iid] = - { - show = true, - changed = true, - amount = amount, - bank = bank, - index = amount, - icon = texture, - itemId = iid, - resort = true, - } - return true - end - end - end - elseif e == "UPDATE" then - for i = 0, 4 do - for j = 1, GetContainerNumSlots(i) do - local iid = GetContainerItemID(i, j) - if aura_env.herbIDs[iid] then - local texture = select(1, GetContainerItemInfo(i, j)) - local amount = GetItemCount(iid, false) - local bank = GetItemCount(iid, true) - amount - allstates[iid] = - { - show = true, - changed = true, - amount = amount, - bank = bank, - index = amount, - icon = texture, - itemId = iid, - resort = true, - } - end - end - end - return true - end -end - ---INIT -aura_env.herbIDs = -{ - [168487] = "Zin'anthid", - [152511] = "Sea Stalk", - [152505] = "Riverbud", - [152506] = "Star Moss", - [152507] = "Akunda's Bite", - [152508] = "Winter's Kiss", - [152509] = "Siren's Pollen", - [152510] = "Anchor Weed", -} +--BAG_UPDATE UPDATE +function(allstates, e, id) + if e == "BAG_UPDATE" then + if id then + for i = 1, GetContainerNumSlots(id) do + local iid = GetContainerItemID(id, i) + if aura_env.herbIDs[iid] then + local texture = select(1, GetContainerItemInfo(id, i)) + local amount = GetItemCount(iid, false) + local bank = GetItemCount(iid, true) - amount + allstates[iid] = + { + show = true, + changed = true, + amount = amount, + bank = bank, + index = amount, + icon = texture, + itemId = iid, + resort = true, + } + return true + end + end + end + elseif e == "UPDATE" then + for i = 0, 4 do + for j = 1, GetContainerNumSlots(i) do + local iid = GetContainerItemID(i, j) + if aura_env.herbIDs[iid] then + local texture = select(1, GetContainerItemInfo(i, j)) + local amount = GetItemCount(iid, false) + local bank = GetItemCount(iid, true) - amount + allstates[iid] = + { + show = true, + changed = true, + amount = amount, + bank = bank, + index = amount, + icon = texture, + itemId = iid, + resort = true, + } + end + end + end + return true + end +end + +--INIT +aura_env.herbIDs = +{ + [168487] = "Zin'anthid", + [152511] = "Sea Stalk", + [152505] = "Riverbud", + [152506] = "Star Moss", + [152507] = "Akunda's Bite", + [152508] = "Winter's Kiss", + [152509] = "Siren's Pollen", + [152510] = "Anchor Weed", +} WeakAuras.ScanEvents("UPDATE") \ No newline at end of file diff --git a/Complete Projects/BFA/TSU - Loot Window.lua b/WeakAuras/Projects/ByExp/BFA/TSU - Loot Window.lua similarity index 95% rename from Complete Projects/BFA/TSU - Loot Window.lua rename to WeakAuras/Projects/ByExp/BFA/TSU - Loot Window.lua index c0c2886..37e0e4e 100644 --- a/Complete Projects/BFA/TSU - Loot Window.lua +++ b/WeakAuras/Projects/ByExp/BFA/TSU - Loot Window.lua @@ -1,371 +1,371 @@ ---REMOVE_ITEM_SHOW ADD_ITEM_SHOW -function(allstates, e, what, howmuch, looted) - if e == "ADD_ITEM_SHOW" then - if what then - --Get info about item - local icon = 0 - local name = GetItemInfo(what) - --Save icon to databases - if not WeakAurasSaved.CustomTrash.IconDatabase[name] then icon = select(10, GetItemInfo(name)) else icon = WeakAurasSaved.CustomTrash.IconDatabase[name] end - if name and icon and not WeakAurasSaved.CustomTrash.IconDatabase[name] then WeakAurasSaved.CustomTrash.IconDatabase[name] = icon; print("Adding|cff78cb00 ", name, " |rto the icon database") end - --Get ID for tooltip - local indexid = #allstates + 1 - local ID - if WeakAurasSaved.CustomTrash.IDDatabase[name] then ID = WeakAurasSaved.CustomTrash.IDDatabase[name] end - allstates[indexid] = - { - show = true, - changed = true, - index = GetTime(), - resort = true, - icon = icon, - name = what, - amount = howmuch, - looted = looted, - } - if ID then - allstates[indexid].itemId = ID - end - C_Timer.After(5, function() WeakAuras.ScanEvents("REMOVE_ITEM_SHOW", indexid) end) - return true - end - elseif e == "REMOVE_ITEM_SHOW" then - if allstates[what] then - allstates[what].show = false - allstates[what].changed = true - return true - end - end -end - ---ON SHOW -if aura_env.statee.looted == true then - if not aura_env.region.texture then - local texture = aura_env.region:CreateTexture(nil, aura_env.region) - aura_env.region.texture = texture - end - aura_env.region.texture:SetTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\ok-icon.tga") - aura_env.region.texture:ClearAllPoints() - aura_env.region.texture:SetPoint("CENTER", aura_env.region, "CENTER") - aura_env.region.texture:Show() -end - ---ON HIDE -if aura_env.region.texture then aura_env.region.texture:Hide() end - ---INIT -aura_env.skills = -{ - --Warrior - [1] = - { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 0, - ["Mail"] = 0, - ["Plate"] = 1, - ["Shields"] = 1, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 1, - ["Bows"] = 1, - ["Guns"] = 1, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 1, - ["Polearms"] = 1, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 1, - ["Warglaives"] = 1, - ["Staves"] = 1, - ["Fist Weapons"] = 1, - ["Daggers"] = 1, - ["Crossbows"] = 1, - ["Wands"] = 0, - }, - --Paladin - [2] = - { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 0, - ["Mail"] = 0, - ["Plate"] = 1, - ["Shields"] = 1, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 1, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 1, - ["Polearms"] = 1, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 1, - ["Warglaives"] = 0, - ["Staves"] = 0, - ["Fist Weapons"] = 0, - ["Daggers"] = 0, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, - --Hunter - [3] = - { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 0, - ["Mail"] = 1, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 1, - ["Bows"] = 1, - ["Guns"] = 1, - ["One-Handed Maces"] = 0, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 1, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 1, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 1, - ["Daggers"] = 1, - ["Crossbows"] = 1, - ["Wands"] = 0, - }, - --Rogue - [4] = - { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 1, - ["Mail"] = 0, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 0, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 0, - ["Fist Weapons"] = 1, - ["Daggers"] = 1, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, - --Priest - [5] = - { - --Armor Skills - ["Cloth"] = 1, - ["Leather"] = 0, - ["Mail"] = 0, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 0, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 0, - ["One-Handed Swords"] = 0, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 0, - ["Daggers"] = 1, - ["Crossbows"] = 0, - ["Wands"] = 1, - }, - --Death Knight - [6] = - { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 0, - ["Mail"] = 0, - ["Plate"] = 1, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 1, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 1, - ["Polearms"] = 1, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 1, - ["Warglaives"] = 0, - ["Staves"] = 0, - ["Fist Weapons"] = 0, - ["Daggers"] = 0, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, - --Shaman - [7] = - { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 0, - ["Mail"] = 1, - ["Plate"] = 0, - ["Shields"] = 1, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 0, - ["One-Handed Swords"] = 0, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 1, - ["Daggers"] = 1, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, - --Mage - [8] = - { - --Armor Skills - ["Cloth"] = 1, - ["Leather"] = 0, - ["Mail"] = 0, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 0, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 0, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 0, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 0, - ["Daggers"] = 1, - ["Crossbows"] = 0, - ["Wands"] = 1, - }, - --Warlock - [9] = - { - --Armor Skills - ["Cloth"] = 1, - ["Leather"] = 0, - ["Mail"] = 0, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 0, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 0, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 0, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 0, - ["Daggers"] = 1, - ["Crossbows"] = 0, - ["Wands"] = 1, - }, - --Monk - [10] = - { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 1, - ["Mail"] = 0, - ["Plate"] = 1, - ["Shields"] = 1, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 1, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 1, - ["Daggers"] = 0, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, - --Druid - [11] = - { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 1, - ["Mail"] = 0, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 0, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 1, - ["One-Handed Swords"] = 0, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 1, - ["Daggers"] = 1, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, - --Demon Hunter - [12] = - { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 1, - ["Mail"] = 0, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 0, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 0, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 1, - ["Staves"] = 0, - ["Fist Weapons"] = 1, - ["Daggers"] = 0, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, +--REMOVE_ITEM_SHOW ADD_ITEM_SHOW +function(allstates, e, what, howmuch, looted) + if e == "ADD_ITEM_SHOW" then + if what then + --Get info about item + local icon = 0 + local name = GetItemInfo(what) + --Save icon to databases + if not WeakAurasSaved.CustomTrash.IconDatabase[name] then icon = select(10, GetItemInfo(name)) else icon = WeakAurasSaved.CustomTrash.IconDatabase[name] end + if name and icon and not WeakAurasSaved.CustomTrash.IconDatabase[name] then WeakAurasSaved.CustomTrash.IconDatabase[name] = icon; print("Adding|cff78cb00 ", name, " |rto the icon database") end + --Get ID for tooltip + local indexid = #allstates + 1 + local ID + if WeakAurasSaved.CustomTrash.IDDatabase[name] then ID = WeakAurasSaved.CustomTrash.IDDatabase[name] end + allstates[indexid] = + { + show = true, + changed = true, + index = GetTime(), + resort = true, + icon = icon, + name = what, + amount = howmuch, + looted = looted, + } + if ID then + allstates[indexid].itemId = ID + end + C_Timer.After(5, function() WeakAuras.ScanEvents("REMOVE_ITEM_SHOW", indexid) end) + return true + end + elseif e == "REMOVE_ITEM_SHOW" then + if allstates[what] then + allstates[what].show = false + allstates[what].changed = true + return true + end + end +end + +--ON SHOW +if aura_env.statee.looted == true then + if not aura_env.region.texture then + local texture = aura_env.region:CreateTexture(nil, aura_env.region) + aura_env.region.texture = texture + end + aura_env.region.texture:SetTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\ok-icon.tga") + aura_env.region.texture:ClearAllPoints() + aura_env.region.texture:SetPoint("CENTER", aura_env.region, "CENTER") + aura_env.region.texture:Show() +end + +--ON HIDE +if aura_env.region.texture then aura_env.region.texture:Hide() end + +--INIT +aura_env.skills = +{ + --Warrior + [1] = + { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 0, + ["Mail"] = 0, + ["Plate"] = 1, + ["Shields"] = 1, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 1, + ["Bows"] = 1, + ["Guns"] = 1, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 1, + ["Polearms"] = 1, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 1, + ["Warglaives"] = 1, + ["Staves"] = 1, + ["Fist Weapons"] = 1, + ["Daggers"] = 1, + ["Crossbows"] = 1, + ["Wands"] = 0, + }, + --Paladin + [2] = + { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 0, + ["Mail"] = 0, + ["Plate"] = 1, + ["Shields"] = 1, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 1, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 1, + ["Polearms"] = 1, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 1, + ["Warglaives"] = 0, + ["Staves"] = 0, + ["Fist Weapons"] = 0, + ["Daggers"] = 0, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, + --Hunter + [3] = + { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 0, + ["Mail"] = 1, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 1, + ["Bows"] = 1, + ["Guns"] = 1, + ["One-Handed Maces"] = 0, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 1, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 1, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 1, + ["Daggers"] = 1, + ["Crossbows"] = 1, + ["Wands"] = 0, + }, + --Rogue + [4] = + { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 1, + ["Mail"] = 0, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 0, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 0, + ["Fist Weapons"] = 1, + ["Daggers"] = 1, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, + --Priest + [5] = + { + --Armor Skills + ["Cloth"] = 1, + ["Leather"] = 0, + ["Mail"] = 0, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 0, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 0, + ["One-Handed Swords"] = 0, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 0, + ["Daggers"] = 1, + ["Crossbows"] = 0, + ["Wands"] = 1, + }, + --Death Knight + [6] = + { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 0, + ["Mail"] = 0, + ["Plate"] = 1, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 1, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 1, + ["Polearms"] = 1, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 1, + ["Warglaives"] = 0, + ["Staves"] = 0, + ["Fist Weapons"] = 0, + ["Daggers"] = 0, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, + --Shaman + [7] = + { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 0, + ["Mail"] = 1, + ["Plate"] = 0, + ["Shields"] = 1, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 0, + ["One-Handed Swords"] = 0, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 1, + ["Daggers"] = 1, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, + --Mage + [8] = + { + --Armor Skills + ["Cloth"] = 1, + ["Leather"] = 0, + ["Mail"] = 0, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 0, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 0, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 0, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 0, + ["Daggers"] = 1, + ["Crossbows"] = 0, + ["Wands"] = 1, + }, + --Warlock + [9] = + { + --Armor Skills + ["Cloth"] = 1, + ["Leather"] = 0, + ["Mail"] = 0, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 0, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 0, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 0, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 0, + ["Daggers"] = 1, + ["Crossbows"] = 0, + ["Wands"] = 1, + }, + --Monk + [10] = + { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 1, + ["Mail"] = 0, + ["Plate"] = 1, + ["Shields"] = 1, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 1, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 1, + ["Daggers"] = 0, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, + --Druid + [11] = + { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 1, + ["Mail"] = 0, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 0, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 1, + ["One-Handed Swords"] = 0, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 1, + ["Daggers"] = 1, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, + --Demon Hunter + [12] = + { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 1, + ["Mail"] = 0, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 0, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 0, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 1, + ["Staves"] = 0, + ["Fist Weapons"] = 1, + ["Daggers"] = 0, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, } \ No newline at end of file diff --git a/Complete Projects/BFA/TSU - Loot.lua b/WeakAuras/Projects/ByExp/BFA/TSU - Loot.lua similarity index 96% rename from Complete Projects/BFA/TSU - Loot.lua rename to WeakAuras/Projects/ByExp/BFA/TSU - Loot.lua index 61b90d2..6c597cc 100644 --- a/Complete Projects/BFA/TSU - Loot.lua +++ b/WeakAuras/Projects/ByExp/BFA/TSU - Loot.lua @@ -1,58 +1,58 @@ ---CHAT_MSG_LOOT REMOVE_ITEM ADD_ITEM -function(allstates, e, msg, howmuch) - if e == "CHAT_MSG_LOOT" then - if msg then - local who = msg:match("%w+") - if who == "You" then - local howmuch = msg:match("(x%d+).$") - local what - for itemLink in msg:gmatch("|%x+|Hitem:.-|h.-|h|r") do - what = itemLink - end - --WeakAuras.ScanEvents("ADD_ITEM", what, howmuch) - C_Timer.After(0.05, function() WeakAuras.ScanEvents("ADD_ITEM", what, howmuch) end) - end - end - elseif e == "ADD_ITEM" then - local what = msg - if what then - local rarity = select(3, GetItemInfo(what)) - local icon = 0 - local name = GetItemInfo(what) - if not WeakAurasSaved.CustomTrash.IconDatabase[name] then icon = select(10, GetItemInfo(name)) else icon = WeakAurasSaved.CustomTrash.IconDatabase[name] end - if name and icon and not WeakAurasSaved.CustomTrash.IconDatabase[name] then WeakAurasSaved.CustomTrash.IconDatabase[name] = icon; print("Adding|cff78cb00 ", name, " |rto the icon database") end - local color = "ffffffff" - if rarity then - color = select(4, GetItemQualityColor(rarity)) - end - color = "|c" .. color - local indexid = #allstates + 1 - local ID - if WeakAurasSaved.CustomTrash.IDDatabase[name] then ID = WeakAurasSaved.CustomTrash.IDDatabase[name] end - allstates[indexid] = - { - show = true, - changed = true, - expirationTime = GetTime() + 1, - index = GetTime(), - autoHide = true, - resort = true, - icon = icon, - name = what, - color = color, - amount = howmuch, - } - if ID then - allstates[indexid].itemId = ID - end - C_Timer.After(1, function() WeakAuras.ScanEvents("REMOVE_ITEM", indexid) end) - return true - end - elseif e == "REMOVE_ITEM" then - if allstates[msg] then - allstates[msg].show = false - allstates[msg].changed = true - return true - end - end +--CHAT_MSG_LOOT REMOVE_ITEM ADD_ITEM +function(allstates, e, msg, howmuch) + if e == "CHAT_MSG_LOOT" then + if msg then + local who = msg:match("%w+") + if who == "You" then + local howmuch = msg:match("(x%d+).$") + local what + for itemLink in msg:gmatch("|%x+|Hitem:.-|h.-|h|r") do + what = itemLink + end + --WeakAuras.ScanEvents("ADD_ITEM", what, howmuch) + C_Timer.After(0.05, function() WeakAuras.ScanEvents("ADD_ITEM", what, howmuch) end) + end + end + elseif e == "ADD_ITEM" then + local what = msg + if what then + local rarity = select(3, GetItemInfo(what)) + local icon = 0 + local name = GetItemInfo(what) + if not WeakAurasSaved.CustomTrash.IconDatabase[name] then icon = select(10, GetItemInfo(name)) else icon = WeakAurasSaved.CustomTrash.IconDatabase[name] end + if name and icon and not WeakAurasSaved.CustomTrash.IconDatabase[name] then WeakAurasSaved.CustomTrash.IconDatabase[name] = icon; print("Adding|cff78cb00 ", name, " |rto the icon database") end + local color = "ffffffff" + if rarity then + color = select(4, GetItemQualityColor(rarity)) + end + color = "|c" .. color + local indexid = #allstates + 1 + local ID + if WeakAurasSaved.CustomTrash.IDDatabase[name] then ID = WeakAurasSaved.CustomTrash.IDDatabase[name] end + allstates[indexid] = + { + show = true, + changed = true, + expirationTime = GetTime() + 1, + index = GetTime(), + autoHide = true, + resort = true, + icon = icon, + name = what, + color = color, + amount = howmuch, + } + if ID then + allstates[indexid].itemId = ID + end + C_Timer.After(1, function() WeakAuras.ScanEvents("REMOVE_ITEM", indexid) end) + return true + end + elseif e == "REMOVE_ITEM" then + if allstates[msg] then + allstates[msg].show = false + allstates[msg].changed = true + return true + end + end end \ No newline at end of file diff --git a/Complete Projects/BFA/TSU - Spell Alert.lua b/WeakAuras/Projects/ByExp/BFA/TSU - Spell Alert.lua similarity index 95% rename from Complete Projects/BFA/TSU - Spell Alert.lua rename to WeakAuras/Projects/ByExp/BFA/TSU - Spell Alert.lua index f50b274..10727a3 100644 --- a/Complete Projects/BFA/TSU - Spell Alert.lua +++ b/WeakAuras/Projects/ByExp/BFA/TSU - Spell Alert.lua @@ -1,731 +1,731 @@ ---COMBAT_LOG_EVENT_UNFILTERED REMOVE_GUID NAME_PLATE_UNIT_ADDED NAME_PLATE_UNIT_REMOVED -function(allstates, e, ...) - if e == "COMBAT_LOG_EVENT_UNFILTERED" then - local se = select(2, CombatLogGetCurrentEventInfo()) - if se == "SPELL_CAST_START" or se == "SPELL_CAST_SUCCESS" then - local spell = select(13, CombatLogGetCurrentEventInfo()) - if aura_env.spells[spell] then - local ID = select(7, GetSpellInfo(aura_env.spells[spell].ID)) - if ID == aura_env.spells[spell].ID then - local castTime = select(4, GetSpellInfo(aura_env.spells[spell].ID)) - local GUID = select(4, CombatLogGetCurrentEventInfo()) - if GUID then allstates[GUID] = {} end - if allstates[GUID].timer then allstates[GUID].timer:Cancel() end - local unit = "" - local target = select(9, CombatLogGetCurrentEventInfo()) - if target and UnitIsPlayer(target) == true then - local targetClass = UnitClass(target) or "" - target = aura_env.classColor(targetClass) .. target - allstates[GUID].target = target - end - for i = 1, 30 do - if UnitExists("nameplate" .. i) then - if UnitGUID("nameplate" .. i) == GUID then - unit = "nameplate" .. i - break - end - end - end - -- unit = "player" - local LCG = LibStub("LibCustomGlow-1.0") - if castTime > 1000 and se == "SPELL_CAST_START" then - if unit == "player" or unit == "" then unit = "nameplate1" end - if allstates[GUID].timer then allstates[GUID].timer:Cancel() end - allstates[GUID].changed = true - allstates[GUID].show = true - allstates[GUID].showTime = GetTime() - allstates[GUID].ID = aura_env.spells[spell].ID - allstates[GUID].ins = aura_env.spells[spell].ins - allstates[GUID].unit = unit - allstates[GUID].GUID = GUID - allstates[GUID].progressType = "timed" - allstates[GUID].expirationTime = GetTime() + castTime / 1000 - allstates[GUID].duration = castTime / 1000 - allstates[GUID].timer = C_Timer.NewTimer(castTime / 1000, function() WeakAuras.ScanEvents("REMOVE_GUID", GUID); LCG.PixelGlow_Stop(nameplate); end) - return true - elseif castTime == 0 and se == "SPELL_CAST_SUCCESS" then - if unit == "player" or unit == "" then unit = "nameplate1" end - if allstates[GUID].timer then allstates[GUID].timer:Cancel() end - allstates[GUID].changed = true - allstates[GUID].show = true - allstates[GUID].showTime = GetTime() - allstates[GUID].ID = aura_env.spells[spell].ID - allstates[GUID].ins = aura_env.spells[spell].ins - allstates[GUID].unit = unit - allstates[GUID].GUID = GUID - allstates[GUID].expirationTime = GetTime() + 2 - allstates[GUID].timer = C_Timer.NewTimer(2, function() WeakAuras.ScanEvents("REMOVE_GUID", GUID); LCG.PixelGlow_Stop(nameplate); end) - return true - end - end - end - elseif se == "SPELL_CAST_FAILED" then - local spell = select(13, CombatLogGetCurrentEventInfo()) - if aura_env.spells[spell] then - local ID = select(7, GetSpellInfo(aura_env.spells[spell].ID)) - if ID == aura_env.spells[spell].ID then - local LCG = LibStub("LibCustomGlow-1.0") - local GUID = select(4, CombatLogGetCurrentEventInfo()) - if allstates[GUID].timer then allstates[GUID].timer:Cancel() end - local unit = "" - for i = 1, 30 do - if UnitExists("nameplate" .. i) then - if UnitGUID("nameplate" .. i) == GUID then - unit = "nameplate" .. i - break - end - end - end - --WeakAuras.ScanEvents("REMOVE_GUID", GUID) - local rem = allstates[GUID].expirationTime - GetTime() - local maxrem = allstates[GUID].expirationTime - allstates[GUID].showTime - allstates[GUID].changed = true - allstates[GUID].show = true - allstates[GUID].progressType = "static" - allstates[GUID].value = string.format("%.1f", rem) - allstates[GUID].total = maxrem - allstates[GUID].interrupted = true - allstates[GUID].timer = C_Timer.NewTimer(1, function() WeakAuras.ScanEvents("REMOVE_GUID", GUID) end) - if unit ~= "" then - local nameplate = C_NamePlate.GetNamePlateForUnit(unit) - LCG.PixelGlow_Stop(nameplate) - end - return true - end - end - elseif se == "UNIT_DIED" then - local GUID = select(8, CombatLogGetCurrentEventInfo()) - if allstates[GUID] and allstates[GUID].expirationTime and not allstates[GUID].interrupted then - local rem = allstates[GUID].expirationTime - GetTime() - local maxrem = allstates[GUID].expirationTime - allstates[GUID].showTime - allstates[GUID].changed = true - allstates[GUID].show = true - allstates[GUID].progressType = "static" - allstates[GUID].value = rem - allstates[GUID].total = maxrem - allstates[GUID].interrupted = true - allstates[GUID].timer = C_Timer.NewTimer(1, function() WeakAuras.ScanEvents("REMOVE_GUID", GUID) end) - return true - end - end - elseif e == "REMOVE_GUID" then - local GUID = select(1, ...) - if allstates[GUID] then - allstates[GUID].show = false - allstates[GUID].changed = true - return true - end - elseif e == "NAME_PLATE_UNIT_ADDED" then - local u = select(1, ...) - if u then - local GUID = UnitGUID(u) - if allstates[GUID] then - local LCG = LibStub("LibCustomGlow-1.0") - local nameplate = C_NamePlate.GetNamePlateForUnit(u) - LCG.PixelGlow_Start(nameplate, {1, 1, 0, 1}, 100, 0, 200, 4, 0, -4) - end - end - elseif e == "NAME_PLATE_UNIT_REMOVED" then - local u = select(1, ...) - if u then - local GUID = UnitGUID(u) - local LCG = LibStub("LibCustomGlow-1.0") - local nameplate = C_NamePlate.GetNamePlateForUnit(u) - LCG.PixelGlow_Stop(nameplate) - end - end -end - ---ON SHOW -local LCG = LibStub("LibCustomGlow-1.0") -local font, size, flags = aura_env.region.text:GetFont() -PlaySoundFile("Interface\\AddOns\\WeakAuras\\Media\\Sounds\\RobotBlip.ogg", "Master") -if not aura_env.region.text then - local text = aura_env.region:CreateFontString(nil, "OVERLAY") - aura_env.region.text = text -end -aura_env.region.text:SetFont(font, size, flags) -aura_env.region.text:SetTextColor(1,1,1,1) -aura_env.region.text:ClearAllPoints() -aura_env.region.text:SetPoint("CENTER", aura_env.region, "CENTER") -aura_env.region.text:SetJustifyH("CENTER") -aura_env.region.text:SetJustifyV("CENTER") -local output = aura_env.statee.ins -if aura_env.statee.target then output = output .. " > " .. aura_env.statee.target end -aura_env.region.text:SetText(output) -aura_env.region.text:Show() -local aura_env = aura_env -local nameplate = C_NamePlate.GetNamePlateForUnit(aura_env.statee.unit, true) -LCG.PixelGlow_Start(nameplate, {1, 1, 0, 1}, 100, 0, 200, 4, 0, -4) -local GUID = aura_env.statee.GUID - ---ON HIDE -local LCG = LibStub("LibCustomGlow-1.0") -local nameplate = C_NamePlate.GetNamePlateForUnit(aura_env.statee.unit, true) -if nameplate then - LCG.PixelGlow_Stop(nameplate) -end - ---ANIMATION -function() - if aura_env.statee and aura_env.statee.interrupted then return 0, 1, 0, 1 end -end - ---INIT -aura_env.spells = { - -- ["Vivify"] = - -- { - -- ["ID"] = 116670, - -- ["ins"] = "Test", - -- }, - ["Brutal Backhand"] = - { - ["ID"] = 257426, - ["ins"] = "Brutal Backhand - Sidestep", - }, - ["Shattering Toss"] = - { - ["ID"] = 274860, - ["ins"] = "Shattering Toss - Brace" - }, - ["Suppression Slam"] = - { - ["ID"] = 270003, - ["ins"] = "Suppression Slam - Sidestep" - }, - ["Axe Barrage"] = - { - ["ID"] = 270084, - ["ins"] = "Axe Barrage - Stun" - }, - ["Poison Barrage"] = - { - ["ID"] = 270507, - ["ins"] = "Poison Barrage - Move with" - }, - ["Slobber Knocker"] = - { - ["ID"] = 256627, - ["ins"] = "Slobber Knocker - Sidestep" - }, - ["Heavy Slash"] = - { - ["ID"] = 257292, - ["ins"] = "Heavy Slash - Sidestep" - }, - ["Singing Steel"] = - { - ["ID"] = 256709, - ["ins"] = "Singing Steel - Sidestep" - }, - ["Crimson Swipe"] = - { - ["ID"] = 268230, - ["ins"] = "Crimson Swipe - Sidestep" - }, - ["Tail Thrash"] = - { - ["ID"] = 265910, - ["ins"] = "Tail Thrash - Mitigation" - }, - ["Debilitating Backhand"] = - { - ["ID"] = 266237, - ["ins"] = "Debilitating Backhand - Sidestep" - }, - ["Poison Nova"] = - { - ["ID"] = 267273, - ["ins"] = "Poison Nova - Interrupt" - }, - ["Blade Combo"] = - { - ["ID"] = 268586, - ["ins"] = "Blade Combo - Mitigation" - }, - ["Clear the Deck"] = - { - ["ID"] = 269029, - ["ins"] = "Clear the Deck - Sidestep" - }, - ["Viscous Slobber"] = - { - ["ID"] = 272827, - ["ins"] = "Viscous Slobber - Place out of group" - }, - ["Crashing Tide"] = - { - ["ID"] = 261563, - ["ins"] = "Crashing Tide - Face to wall" - }, - ["Noxious Breath"] = - { - ["ID"] = 272657, - ["ins"] = "Noxious Breath - Sidestep" - }, - ["Dust Cloud"] = - { - ["ID"] = 268705, - ["ins"] = "Dust Cloud - Move enemies" - }, - ["Shocking Claw"] = - { - ["ID"] = 257337, - ["ins"] = "Shocking Claw - Sidestep" - }, - ["Power Through"] = - { - ["ID"] = 268415, - ["ins"] = "Power Through - Face away" - }, - ["Cover"] = - { - ["ID"] = 263275, - ["ins"] = "Cover - Move enemies" - }, - ["Desperate Measures"] = - { - ["ID"] = 263601, - ["ins"] = "Desperate Measures - Mitigation" - }, - ["Blowtorch"] = - { - ["ID"] = 263103, - ["ins"] = "Blowtorch - Face away" - }, - ["Echo Blade"] = - { - ["ID"] = 268846, - ["ins"] = "Echo Blade - Face away" - }, - ["Charged Shot"] = - { - ["ID"] = 269429, - ["ins"] = "Charged Shot - Mitigation" - }, - ["Shockwave"] = - { - ["ID"] = 272457, - ["ins"] = "Shockwave - Mitigation" - }, - ["Maddening Gaze"] = - { - ["ID"] = 272609, - ["ins"] = "Maddening Gaze - Sidestep" - }, - ["Suppression Fire"] = - { - ["ID"] = 258864, - ["ins"] = "Suppression Fire - Face away" - }, - ["Shadow Cleave"] = - { - ["ID"] = 265372, - ["ins"] = "Shadow Cleave - Face away" - }, - ["Thorned Barrage"] = - { - ["ID"] = 265760, - ["ins"] = "Thorned Barrage - Mitigation" - }, - ["Crush"] = - { - ["ID"] = 260508, - ["ins"] = "Crush - Mitigation" - }, - ["Marking Cleave"] = - { - ["ID"] = 263905, - ["ins"] = "Marking Cleave - Sidestep" - }, - ["Warding Candles"] = - { - ["ID"] = 263961, - ["ins"] = "Warding Candles - Move enemies" - }, - ["Tectonic Smash"] = - { - ["ID"] = 275907, - ["ins"] = "Tectonic Smash - Sidestep" - }, - ["Heaving Blow"] = - { - ["ID"] = 276268, - ["ins"] = "Heaving Blow - Sidestep" - }, - ["Hindering Cleave"] = - { - ["ID"] = 267899, - ["ins"] = "Hindering Cleave - Sidestep" - }, - ["Mental Assault"] = - { - ["ID"] = 268391, - ["ins"] = "Mental Assault - Sidestep" - }, - ["Rotten Bile"] = - { - ["ID"] = 265540, - ["ins"] = "Rotten Bile - MOVE CUNT" - }, - ["Blade Barrage"] = - { - ["ID"] = 257870, - ["ins"] = "Blade Barrage - Mitigation" - }, - ["Skewer"] = - { - ["ID"] = 249919, - ["ins"] = "Skewer - Mitigation" - }, - ["Heavy Slash"] = - { - ["ID"] = 257292, - ["ins"] = "Heavy Slash - Sidestep" - }, - ["Broadside"] = - { - ["ID"] = 268260, - ["ins"] = "Broadside - Sidestep" - }, - ["Crushing Slam"] = - { - ["ID"] = 272711, - ["ins"] = "Crushing Slam - Sidestep" - }, - ["Slam"] = - { - ["ID"] = 269266, - ["ins"] = "Slam - Sidestep" - }, - ["Energy Lash"] = - { - ["ID"] = 262794, - ["ins"] = "Energy Lash - Reflect" - }, - ["Grasping Hex"] = - { - ["ID"] = 300436, - ["ins"] = "Grasping Hex - Interrupt", - }, - ["Stoneskin"] = - { - ["ID"] = 300514, - ["ins"] = "Stoneskin - Interrupt", - }, - ["Shockwave"] = - { - ["ID"] = 300424, - ["ins"] = "Shockwave - Sidestep", - }, - ["Charged Smash"] = - { - ["ID"] = 297254, - ["ins"] = "Charged Smash - Stack on tank", - }, - ["Rapid Fire"] = - { - ["ID"] = 301667, - ["ins"] = "Rapid Fire - Sidestep", - }, - ["Enlarge"] = - { - ["ID"] = 301629, - ["ins"] = "Enlarge - Interrupt", - }, - ["Shrink"] = - { - ["ID"] = 284219, - ["ins"] = "Shrink - Interrupt", - }, - ["Wreck"] = - { - ["ID"] = 302279, - ["ins"] = "Wreck - Mitigation", - }, - ["Pedal to the Metal"] = - { - ["ID"] = 299164, - ["ins"] = "Pedal to the Metal - Sidestep", - }, - ["Burnout"] = - { - ["ID"] = 298571, - ["ins"] = "Burnout - move from smoke", - }, - ["Bolt Buster"] = - { - ["ID"] = 298940, - ["ins"] = "Bolt Buster - Sidestep", - }, - ["Mega Taze"] = - { - ["ID"] = 298718, - ["ins"] = "Mega Taze - Run into smoke", - }, - ["Slimewave"] = - { - ["ID"] = 300777, - ["ins"] = "Slimewave - Sidestep", - }, - ["Toxic Wave"] = - { - ["ID"] = 297834, - ["ins"] = "Toxic Wave - Run to robot", - }, - ["Disassembling Protocol"] = - { - ["ID"] = 301990, - ["ins"] = "Disassembling Protocol - Mitigation", - }, - ["Gyro-Scrap"] = - { - ["ID"] = 300159, - ["ins"] = "Gyro-Scrap - Run away", - }, - ["Exhaust"] = - { - ["ID"] = 300177, - ["ins"] = "Exhaust - Move from smoke", - }, - ["Repair Protocol"] = - { - ["ID"] = 300171, - ["ins"] = "Repair Protocol - Interrupt", - }, - ["Shield Bash"] = - { - ["ID"] = 273185, - ["ins"] = "Shield Bash - Mitigation", - }, - ["Overclock"] = - { - ["ID"] = 299588, - ["ins"] = "Overclock - Interrupt", - }, - ["Repair"] = - { - ["ID"] = 300087, - ["ins"] = "Repair - Interrupt", - }, - ["Scrap Cannon"] = - { - ["ID"] = 300188, - ["ins"] = "Scrap Cannon - Sidestep", - }, - ["Detonate"] = - { - ["ID"] = 301088, - ["ins"] = "Detonate - Interrupt", - }, - ["Whirling Edge"] = - { - ["ID"] = 285020, - ["ins"] = "Whirling Edge - Run away", - }, - ["Maximum Thrust"] = - { - ["ID"] = 283421, - ["ins"] = "Maximum Thrust - Sidestep", - }, - ["Process Waste"] = - { - ["ID"] = 294290, - ["ins"] = "Process Waste - Sidestep", - }, - ["Venting Flames"] = - { - ["ID"] = 291946, - ["ins"] = "Venting Flames - Go behind cool cube", - }, - ["Capacitor Discharge"] = - { - ["ID"] = 295169, - ["ins"] = "Capacitor Discharge - Run to free floor", - }, - ["Tune-Up"] = - { - ["ID"] = 293729, - ["ins"] = "Tune-Up - Interrupt", - }, - ["Sonic Pulse"] = - { - ["ID"] = 293986, - ["ins"] = "Sonic Pulse - Sidestep", - }, - ["Skullcracker"] = - { - ["ID"] = 300296, - ["ins"] = "Skullcracker - Mitigation", - }, - ["Coalesce"] = - { - ["ID"] = 297835, - ["ins"] = "Coalesce - Run to robot", - }, - ["Maximum Thrust"] = - { - ["ID"] = 283421, - ["ins"] = "Maximum Thrust - Sidestep", - }, - ["Vent Jets"] = - { - ["ID"] = 285388, - ["ins"] = "Vent Jets - Run Away", - }, - ["Giga-Zap"] = - { - ["ID"] = 291939, - ["ins"] = "Giga-Zap - Face Away", - }, - ["Rock Lance"] = - { - ["ID"] = 263202, - ["ins"] = "Rock Lance - Send Help", - }, - ["Azerite Heartseeker"] = - { - ["ID"] = 262513, - ["ins"] = "Azerite Heartseeker - Help", - }, - ["Savage Cleave"] = - { - ["ID"] = 265019, - ["ins"] = "Savage Cleave - Sidestep", - }, - ["Decaying Mind"] = - { - ["ID"] = 278961, - ["ins"] = "Decaying Mind - Interrupt", - }, - ["Short Out"] = - { - ["ID"] = 297128, - ["ins"] = "Short Out - Run to bubble", - }, - ["Cyclone Strike"] = - { - ["ID"] = 263573, - ["ins"] = "Cyclone Strike - Sidestep", - }, - ["Power Shot"] = - { - ["ID"] = 264574, - ["ins"] = "Power Shot - Sidestep", - }, - ["Overflow"] = - { - ["ID"] = 295346, - ["ins"] = "Overflow - Run cunt", - }, - ["Crushing Reverberation"] = - { - ["ID"] = 295332, - ["ins"] = "Crushing Reverberation - Stack on tank cunt", - }, - ["Overwhelming Barrage"] = - { - ["ID"] = 295138, - ["ins"] = "Overwhelming Barrage - Dodge cunt", - }, - ["Frostshock Bolts"] = - { - ["ID"] = 295601, - ["ins"] = "Frostshock Bolts - Dodge cunt", - }, - ["Inversion"] = - { - ["ID"] = 295791, - ["ins"] = "Inversion - Spread cunt", - }, - ["Bioluminescent Cloud"] = - { - ["ID"] = 292205, - ["ins"] = "Bioluminescent Cloud - Get glowing cunt", - }, - ["Shock Pulse"] = - { - ["ID"] = 292279, - ["ins"] = "Shock Pulse - Run cunt", - }, - ["Arcane Bomb"] = - { - ["ID"] = 296746, - ["ins"] = "Arcane Bomb - Run cunt", - }, - ["Gale Buffet"] = - { - ["ID"] = 296701, - ["ins"] = "Gale Buffet - Run to stormy cunt", - }, - ["Arcanado Burst"] = - { - ["ID"] = 296701, - ["ins"] = "Arcanado Burst - Tornados cunt", - }, - ["Coral Growth"] = - { - ["ID"] = 296555, - ["ins"] = "Coral Growth - Run cunt", - }, - ["Briny Bubble"] = - { - ["ID"] = 297333, - ["ins"] = "Briny Bubble - Help cunt-s", - }, - ["Rippling Wave"] = - { - ["ID"] = 296688, - ["ins"] = "Rippling Wave - Soak - s l o w l y - cunt", - }, - ["Arcing Azerite"] = - { - ["ID"] = 296944, - ["ins"] = "Arcing Azerite - Destroy Corals cunt", - }, - ["Conductive Pulse"] = - { - ["ID"] = 295822, - ["ins"] = "Conductive Pulse - Interrupt cunt", - }, - ["Frenetic Charge"] = - { - ["ID"] = 299914, - ["ins"] = "Frenetic Charge - Soak cunt", - }, - ["Zealous Eruption"] = - { - ["ID"] = 301807, - ["ins"] = "Zealous Eruption - Run to safe boss cunt", - }, - ["Fanatical Verdict"] = - { - ["ID"] = 296850, - ["ins"] = "Fanatical Verdict - Spread cunt", - }, - ["Potent Spark"] = - { - ["ID"] = 301947, - ["ins"] = "Potent Spark - Botanist orbs cunt", - }, - ["Violent Outburst"] = - { - ["ID"] = 297325, - ["ins"] = "Violent Outburst - Run cunt", - }, -} -aura_env.classColor = function(class) - if class == "Death Knight" then return "|cFFC41F3B" elseif - class == "Demon Hunter" then return "|cFFA330C9" elseif - class == "Druid" then return "|cFFFF7D0A" elseif - class == "Hunter" then return "|cFFABD473" elseif - class == "Mage" then return "|cFF40C7EB" elseif - class == "Monk" then return "|cFF00FF96" elseif - class == "Paladin" then return "|cFFF58CBA" elseif - class == "Priest" then return "|cFFFFFFFF" elseif - class == "Rogue" then return "|cFFFFF569" elseif - class == "Shaman" then return "|cFF0070DE" elseif - class == "Warlock" then return "|cFF8787ED" elseif - class == "Warrior" then return "|cFFC79C6E" else - return "|cFFFFFFFF" end +--COMBAT_LOG_EVENT_UNFILTERED REMOVE_GUID NAME_PLATE_UNIT_ADDED NAME_PLATE_UNIT_REMOVED +function(allstates, e, ...) + if e == "COMBAT_LOG_EVENT_UNFILTERED" then + local se = select(2, CombatLogGetCurrentEventInfo()) + if se == "SPELL_CAST_START" or se == "SPELL_CAST_SUCCESS" then + local spell = select(13, CombatLogGetCurrentEventInfo()) + if aura_env.spells[spell] then + local ID = select(7, GetSpellInfo(aura_env.spells[spell].ID)) + if ID == aura_env.spells[spell].ID then + local castTime = select(4, GetSpellInfo(aura_env.spells[spell].ID)) + local GUID = select(4, CombatLogGetCurrentEventInfo()) + if GUID then allstates[GUID] = {} end + if allstates[GUID].timer then allstates[GUID].timer:Cancel() end + local unit = "" + local target = select(9, CombatLogGetCurrentEventInfo()) + if target and UnitIsPlayer(target) == true then + local targetClass = UnitClass(target) or "" + target = aura_env.classColor(targetClass) .. target + allstates[GUID].target = target + end + for i = 1, 30 do + if UnitExists("nameplate" .. i) then + if UnitGUID("nameplate" .. i) == GUID then + unit = "nameplate" .. i + break + end + end + end + -- unit = "player" + local LCG = LibStub("LibCustomGlow-1.0") + if castTime > 1000 and se == "SPELL_CAST_START" then + if unit == "player" or unit == "" then unit = "nameplate1" end + if allstates[GUID].timer then allstates[GUID].timer:Cancel() end + allstates[GUID].changed = true + allstates[GUID].show = true + allstates[GUID].showTime = GetTime() + allstates[GUID].ID = aura_env.spells[spell].ID + allstates[GUID].ins = aura_env.spells[spell].ins + allstates[GUID].unit = unit + allstates[GUID].GUID = GUID + allstates[GUID].progressType = "timed" + allstates[GUID].expirationTime = GetTime() + castTime / 1000 + allstates[GUID].duration = castTime / 1000 + allstates[GUID].timer = C_Timer.NewTimer(castTime / 1000, function() WeakAuras.ScanEvents("REMOVE_GUID", GUID); LCG.PixelGlow_Stop(nameplate); end) + return true + elseif castTime == 0 and se == "SPELL_CAST_SUCCESS" then + if unit == "player" or unit == "" then unit = "nameplate1" end + if allstates[GUID].timer then allstates[GUID].timer:Cancel() end + allstates[GUID].changed = true + allstates[GUID].show = true + allstates[GUID].showTime = GetTime() + allstates[GUID].ID = aura_env.spells[spell].ID + allstates[GUID].ins = aura_env.spells[spell].ins + allstates[GUID].unit = unit + allstates[GUID].GUID = GUID + allstates[GUID].expirationTime = GetTime() + 2 + allstates[GUID].timer = C_Timer.NewTimer(2, function() WeakAuras.ScanEvents("REMOVE_GUID", GUID); LCG.PixelGlow_Stop(nameplate); end) + return true + end + end + end + elseif se == "SPELL_CAST_FAILED" then + local spell = select(13, CombatLogGetCurrentEventInfo()) + if aura_env.spells[spell] then + local ID = select(7, GetSpellInfo(aura_env.spells[spell].ID)) + if ID == aura_env.spells[spell].ID then + local LCG = LibStub("LibCustomGlow-1.0") + local GUID = select(4, CombatLogGetCurrentEventInfo()) + if allstates[GUID].timer then allstates[GUID].timer:Cancel() end + local unit = "" + for i = 1, 30 do + if UnitExists("nameplate" .. i) then + if UnitGUID("nameplate" .. i) == GUID then + unit = "nameplate" .. i + break + end + end + end + --WeakAuras.ScanEvents("REMOVE_GUID", GUID) + local rem = allstates[GUID].expirationTime - GetTime() + local maxrem = allstates[GUID].expirationTime - allstates[GUID].showTime + allstates[GUID].changed = true + allstates[GUID].show = true + allstates[GUID].progressType = "static" + allstates[GUID].value = string.format("%.1f", rem) + allstates[GUID].total = maxrem + allstates[GUID].interrupted = true + allstates[GUID].timer = C_Timer.NewTimer(1, function() WeakAuras.ScanEvents("REMOVE_GUID", GUID) end) + if unit ~= "" then + local nameplate = C_NamePlate.GetNamePlateForUnit(unit) + LCG.PixelGlow_Stop(nameplate) + end + return true + end + end + elseif se == "UNIT_DIED" then + local GUID = select(8, CombatLogGetCurrentEventInfo()) + if allstates[GUID] and allstates[GUID].expirationTime and not allstates[GUID].interrupted then + local rem = allstates[GUID].expirationTime - GetTime() + local maxrem = allstates[GUID].expirationTime - allstates[GUID].showTime + allstates[GUID].changed = true + allstates[GUID].show = true + allstates[GUID].progressType = "static" + allstates[GUID].value = rem + allstates[GUID].total = maxrem + allstates[GUID].interrupted = true + allstates[GUID].timer = C_Timer.NewTimer(1, function() WeakAuras.ScanEvents("REMOVE_GUID", GUID) end) + return true + end + end + elseif e == "REMOVE_GUID" then + local GUID = select(1, ...) + if allstates[GUID] then + allstates[GUID].show = false + allstates[GUID].changed = true + return true + end + elseif e == "NAME_PLATE_UNIT_ADDED" then + local u = select(1, ...) + if u then + local GUID = UnitGUID(u) + if allstates[GUID] then + local LCG = LibStub("LibCustomGlow-1.0") + local nameplate = C_NamePlate.GetNamePlateForUnit(u) + LCG.PixelGlow_Start(nameplate, {1, 1, 0, 1}, 100, 0, 200, 4, 0, -4) + end + end + elseif e == "NAME_PLATE_UNIT_REMOVED" then + local u = select(1, ...) + if u then + local GUID = UnitGUID(u) + local LCG = LibStub("LibCustomGlow-1.0") + local nameplate = C_NamePlate.GetNamePlateForUnit(u) + LCG.PixelGlow_Stop(nameplate) + end + end +end + +--ON SHOW +local LCG = LibStub("LibCustomGlow-1.0") +local font, size, flags = aura_env.region.text:GetFont() +PlaySoundFile("Interface\\AddOns\\WeakAuras\\Media\\Sounds\\RobotBlip.ogg", "Master") +if not aura_env.region.text then + local text = aura_env.region:CreateFontString(nil, "OVERLAY") + aura_env.region.text = text +end +aura_env.region.text:SetFont(font, size, flags) +aura_env.region.text:SetTextColor(1,1,1,1) +aura_env.region.text:ClearAllPoints() +aura_env.region.text:SetPoint("CENTER", aura_env.region, "CENTER") +aura_env.region.text:SetJustifyH("CENTER") +aura_env.region.text:SetJustifyV("CENTER") +local output = aura_env.statee.ins +if aura_env.statee.target then output = output .. " > " .. aura_env.statee.target end +aura_env.region.text:SetText(output) +aura_env.region.text:Show() +local aura_env = aura_env +local nameplate = C_NamePlate.GetNamePlateForUnit(aura_env.statee.unit, true) +LCG.PixelGlow_Start(nameplate, {1, 1, 0, 1}, 100, 0, 200, 4, 0, -4) +local GUID = aura_env.statee.GUID + +--ON HIDE +local LCG = LibStub("LibCustomGlow-1.0") +local nameplate = C_NamePlate.GetNamePlateForUnit(aura_env.statee.unit, true) +if nameplate then + LCG.PixelGlow_Stop(nameplate) +end + +--ANIMATION +function() + if aura_env.statee and aura_env.statee.interrupted then return 0, 1, 0, 1 end +end + +--INIT +aura_env.spells = { + -- ["Vivify"] = + -- { + -- ["ID"] = 116670, + -- ["ins"] = "Test", + -- }, + ["Brutal Backhand"] = + { + ["ID"] = 257426, + ["ins"] = "Brutal Backhand - Sidestep", + }, + ["Shattering Toss"] = + { + ["ID"] = 274860, + ["ins"] = "Shattering Toss - Brace" + }, + ["Suppression Slam"] = + { + ["ID"] = 270003, + ["ins"] = "Suppression Slam - Sidestep" + }, + ["Axe Barrage"] = + { + ["ID"] = 270084, + ["ins"] = "Axe Barrage - Stun" + }, + ["Poison Barrage"] = + { + ["ID"] = 270507, + ["ins"] = "Poison Barrage - Move with" + }, + ["Slobber Knocker"] = + { + ["ID"] = 256627, + ["ins"] = "Slobber Knocker - Sidestep" + }, + ["Heavy Slash"] = + { + ["ID"] = 257292, + ["ins"] = "Heavy Slash - Sidestep" + }, + ["Singing Steel"] = + { + ["ID"] = 256709, + ["ins"] = "Singing Steel - Sidestep" + }, + ["Crimson Swipe"] = + { + ["ID"] = 268230, + ["ins"] = "Crimson Swipe - Sidestep" + }, + ["Tail Thrash"] = + { + ["ID"] = 265910, + ["ins"] = "Tail Thrash - Mitigation" + }, + ["Debilitating Backhand"] = + { + ["ID"] = 266237, + ["ins"] = "Debilitating Backhand - Sidestep" + }, + ["Poison Nova"] = + { + ["ID"] = 267273, + ["ins"] = "Poison Nova - Interrupt" + }, + ["Blade Combo"] = + { + ["ID"] = 268586, + ["ins"] = "Blade Combo - Mitigation" + }, + ["Clear the Deck"] = + { + ["ID"] = 269029, + ["ins"] = "Clear the Deck - Sidestep" + }, + ["Viscous Slobber"] = + { + ["ID"] = 272827, + ["ins"] = "Viscous Slobber - Place out of group" + }, + ["Crashing Tide"] = + { + ["ID"] = 261563, + ["ins"] = "Crashing Tide - Face to wall" + }, + ["Noxious Breath"] = + { + ["ID"] = 272657, + ["ins"] = "Noxious Breath - Sidestep" + }, + ["Dust Cloud"] = + { + ["ID"] = 268705, + ["ins"] = "Dust Cloud - Move enemies" + }, + ["Shocking Claw"] = + { + ["ID"] = 257337, + ["ins"] = "Shocking Claw - Sidestep" + }, + ["Power Through"] = + { + ["ID"] = 268415, + ["ins"] = "Power Through - Face away" + }, + ["Cover"] = + { + ["ID"] = 263275, + ["ins"] = "Cover - Move enemies" + }, + ["Desperate Measures"] = + { + ["ID"] = 263601, + ["ins"] = "Desperate Measures - Mitigation" + }, + ["Blowtorch"] = + { + ["ID"] = 263103, + ["ins"] = "Blowtorch - Face away" + }, + ["Echo Blade"] = + { + ["ID"] = 268846, + ["ins"] = "Echo Blade - Face away" + }, + ["Charged Shot"] = + { + ["ID"] = 269429, + ["ins"] = "Charged Shot - Mitigation" + }, + ["Shockwave"] = + { + ["ID"] = 272457, + ["ins"] = "Shockwave - Mitigation" + }, + ["Maddening Gaze"] = + { + ["ID"] = 272609, + ["ins"] = "Maddening Gaze - Sidestep" + }, + ["Suppression Fire"] = + { + ["ID"] = 258864, + ["ins"] = "Suppression Fire - Face away" + }, + ["Shadow Cleave"] = + { + ["ID"] = 265372, + ["ins"] = "Shadow Cleave - Face away" + }, + ["Thorned Barrage"] = + { + ["ID"] = 265760, + ["ins"] = "Thorned Barrage - Mitigation" + }, + ["Crush"] = + { + ["ID"] = 260508, + ["ins"] = "Crush - Mitigation" + }, + ["Marking Cleave"] = + { + ["ID"] = 263905, + ["ins"] = "Marking Cleave - Sidestep" + }, + ["Warding Candles"] = + { + ["ID"] = 263961, + ["ins"] = "Warding Candles - Move enemies" + }, + ["Tectonic Smash"] = + { + ["ID"] = 275907, + ["ins"] = "Tectonic Smash - Sidestep" + }, + ["Heaving Blow"] = + { + ["ID"] = 276268, + ["ins"] = "Heaving Blow - Sidestep" + }, + ["Hindering Cleave"] = + { + ["ID"] = 267899, + ["ins"] = "Hindering Cleave - Sidestep" + }, + ["Mental Assault"] = + { + ["ID"] = 268391, + ["ins"] = "Mental Assault - Sidestep" + }, + ["Rotten Bile"] = + { + ["ID"] = 265540, + ["ins"] = "Rotten Bile - MOVE CUNT" + }, + ["Blade Barrage"] = + { + ["ID"] = 257870, + ["ins"] = "Blade Barrage - Mitigation" + }, + ["Skewer"] = + { + ["ID"] = 249919, + ["ins"] = "Skewer - Mitigation" + }, + ["Heavy Slash"] = + { + ["ID"] = 257292, + ["ins"] = "Heavy Slash - Sidestep" + }, + ["Broadside"] = + { + ["ID"] = 268260, + ["ins"] = "Broadside - Sidestep" + }, + ["Crushing Slam"] = + { + ["ID"] = 272711, + ["ins"] = "Crushing Slam - Sidestep" + }, + ["Slam"] = + { + ["ID"] = 269266, + ["ins"] = "Slam - Sidestep" + }, + ["Energy Lash"] = + { + ["ID"] = 262794, + ["ins"] = "Energy Lash - Reflect" + }, + ["Grasping Hex"] = + { + ["ID"] = 300436, + ["ins"] = "Grasping Hex - Interrupt", + }, + ["Stoneskin"] = + { + ["ID"] = 300514, + ["ins"] = "Stoneskin - Interrupt", + }, + ["Shockwave"] = + { + ["ID"] = 300424, + ["ins"] = "Shockwave - Sidestep", + }, + ["Charged Smash"] = + { + ["ID"] = 297254, + ["ins"] = "Charged Smash - Stack on tank", + }, + ["Rapid Fire"] = + { + ["ID"] = 301667, + ["ins"] = "Rapid Fire - Sidestep", + }, + ["Enlarge"] = + { + ["ID"] = 301629, + ["ins"] = "Enlarge - Interrupt", + }, + ["Shrink"] = + { + ["ID"] = 284219, + ["ins"] = "Shrink - Interrupt", + }, + ["Wreck"] = + { + ["ID"] = 302279, + ["ins"] = "Wreck - Mitigation", + }, + ["Pedal to the Metal"] = + { + ["ID"] = 299164, + ["ins"] = "Pedal to the Metal - Sidestep", + }, + ["Burnout"] = + { + ["ID"] = 298571, + ["ins"] = "Burnout - move from smoke", + }, + ["Bolt Buster"] = + { + ["ID"] = 298940, + ["ins"] = "Bolt Buster - Sidestep", + }, + ["Mega Taze"] = + { + ["ID"] = 298718, + ["ins"] = "Mega Taze - Run into smoke", + }, + ["Slimewave"] = + { + ["ID"] = 300777, + ["ins"] = "Slimewave - Sidestep", + }, + ["Toxic Wave"] = + { + ["ID"] = 297834, + ["ins"] = "Toxic Wave - Run to robot", + }, + ["Disassembling Protocol"] = + { + ["ID"] = 301990, + ["ins"] = "Disassembling Protocol - Mitigation", + }, + ["Gyro-Scrap"] = + { + ["ID"] = 300159, + ["ins"] = "Gyro-Scrap - Run away", + }, + ["Exhaust"] = + { + ["ID"] = 300177, + ["ins"] = "Exhaust - Move from smoke", + }, + ["Repair Protocol"] = + { + ["ID"] = 300171, + ["ins"] = "Repair Protocol - Interrupt", + }, + ["Shield Bash"] = + { + ["ID"] = 273185, + ["ins"] = "Shield Bash - Mitigation", + }, + ["Overclock"] = + { + ["ID"] = 299588, + ["ins"] = "Overclock - Interrupt", + }, + ["Repair"] = + { + ["ID"] = 300087, + ["ins"] = "Repair - Interrupt", + }, + ["Scrap Cannon"] = + { + ["ID"] = 300188, + ["ins"] = "Scrap Cannon - Sidestep", + }, + ["Detonate"] = + { + ["ID"] = 301088, + ["ins"] = "Detonate - Interrupt", + }, + ["Whirling Edge"] = + { + ["ID"] = 285020, + ["ins"] = "Whirling Edge - Run away", + }, + ["Maximum Thrust"] = + { + ["ID"] = 283421, + ["ins"] = "Maximum Thrust - Sidestep", + }, + ["Process Waste"] = + { + ["ID"] = 294290, + ["ins"] = "Process Waste - Sidestep", + }, + ["Venting Flames"] = + { + ["ID"] = 291946, + ["ins"] = "Venting Flames - Go behind cool cube", + }, + ["Capacitor Discharge"] = + { + ["ID"] = 295169, + ["ins"] = "Capacitor Discharge - Run to free floor", + }, + ["Tune-Up"] = + { + ["ID"] = 293729, + ["ins"] = "Tune-Up - Interrupt", + }, + ["Sonic Pulse"] = + { + ["ID"] = 293986, + ["ins"] = "Sonic Pulse - Sidestep", + }, + ["Skullcracker"] = + { + ["ID"] = 300296, + ["ins"] = "Skullcracker - Mitigation", + }, + ["Coalesce"] = + { + ["ID"] = 297835, + ["ins"] = "Coalesce - Run to robot", + }, + ["Maximum Thrust"] = + { + ["ID"] = 283421, + ["ins"] = "Maximum Thrust - Sidestep", + }, + ["Vent Jets"] = + { + ["ID"] = 285388, + ["ins"] = "Vent Jets - Run Away", + }, + ["Giga-Zap"] = + { + ["ID"] = 291939, + ["ins"] = "Giga-Zap - Face Away", + }, + ["Rock Lance"] = + { + ["ID"] = 263202, + ["ins"] = "Rock Lance - Send Help", + }, + ["Azerite Heartseeker"] = + { + ["ID"] = 262513, + ["ins"] = "Azerite Heartseeker - Help", + }, + ["Savage Cleave"] = + { + ["ID"] = 265019, + ["ins"] = "Savage Cleave - Sidestep", + }, + ["Decaying Mind"] = + { + ["ID"] = 278961, + ["ins"] = "Decaying Mind - Interrupt", + }, + ["Short Out"] = + { + ["ID"] = 297128, + ["ins"] = "Short Out - Run to bubble", + }, + ["Cyclone Strike"] = + { + ["ID"] = 263573, + ["ins"] = "Cyclone Strike - Sidestep", + }, + ["Power Shot"] = + { + ["ID"] = 264574, + ["ins"] = "Power Shot - Sidestep", + }, + ["Overflow"] = + { + ["ID"] = 295346, + ["ins"] = "Overflow - Run cunt", + }, + ["Crushing Reverberation"] = + { + ["ID"] = 295332, + ["ins"] = "Crushing Reverberation - Stack on tank cunt", + }, + ["Overwhelming Barrage"] = + { + ["ID"] = 295138, + ["ins"] = "Overwhelming Barrage - Dodge cunt", + }, + ["Frostshock Bolts"] = + { + ["ID"] = 295601, + ["ins"] = "Frostshock Bolts - Dodge cunt", + }, + ["Inversion"] = + { + ["ID"] = 295791, + ["ins"] = "Inversion - Spread cunt", + }, + ["Bioluminescent Cloud"] = + { + ["ID"] = 292205, + ["ins"] = "Bioluminescent Cloud - Get glowing cunt", + }, + ["Shock Pulse"] = + { + ["ID"] = 292279, + ["ins"] = "Shock Pulse - Run cunt", + }, + ["Arcane Bomb"] = + { + ["ID"] = 296746, + ["ins"] = "Arcane Bomb - Run cunt", + }, + ["Gale Buffet"] = + { + ["ID"] = 296701, + ["ins"] = "Gale Buffet - Run to stormy cunt", + }, + ["Arcanado Burst"] = + { + ["ID"] = 296701, + ["ins"] = "Arcanado Burst - Tornados cunt", + }, + ["Coral Growth"] = + { + ["ID"] = 296555, + ["ins"] = "Coral Growth - Run cunt", + }, + ["Briny Bubble"] = + { + ["ID"] = 297333, + ["ins"] = "Briny Bubble - Help cunt-s", + }, + ["Rippling Wave"] = + { + ["ID"] = 296688, + ["ins"] = "Rippling Wave - Soak - s l o w l y - cunt", + }, + ["Arcing Azerite"] = + { + ["ID"] = 296944, + ["ins"] = "Arcing Azerite - Destroy Corals cunt", + }, + ["Conductive Pulse"] = + { + ["ID"] = 295822, + ["ins"] = "Conductive Pulse - Interrupt cunt", + }, + ["Frenetic Charge"] = + { + ["ID"] = 299914, + ["ins"] = "Frenetic Charge - Soak cunt", + }, + ["Zealous Eruption"] = + { + ["ID"] = 301807, + ["ins"] = "Zealous Eruption - Run to safe boss cunt", + }, + ["Fanatical Verdict"] = + { + ["ID"] = 296850, + ["ins"] = "Fanatical Verdict - Spread cunt", + }, + ["Potent Spark"] = + { + ["ID"] = 301947, + ["ins"] = "Potent Spark - Botanist orbs cunt", + }, + ["Violent Outburst"] = + { + ["ID"] = 297325, + ["ins"] = "Violent Outburst - Run cunt", + }, +} +aura_env.classColor = function(class) + if class == "Death Knight" then return "|cFFC41F3B" elseif + class == "Demon Hunter" then return "|cFFA330C9" elseif + class == "Druid" then return "|cFFFF7D0A" elseif + class == "Hunter" then return "|cFFABD473" elseif + class == "Mage" then return "|cFF40C7EB" elseif + class == "Monk" then return "|cFF00FF96" elseif + class == "Paladin" then return "|cFFF58CBA" elseif + class == "Priest" then return "|cFFFFFFFF" elseif + class == "Rogue" then return "|cFFFFF569" elseif + class == "Shaman" then return "|cFF0070DE" elseif + class == "Warlock" then return "|cFF8787ED" elseif + class == "Warrior" then return "|cFFC79C6E" else + return "|cFFFFFFFF" end end \ No newline at end of file diff --git a/Complete Projects/BFA/Tank Taunt UNTESTED.lua b/WeakAuras/Projects/ByExp/BFA/Tank Taunt UNTESTED.lua similarity index 97% rename from Complete Projects/BFA/Tank Taunt UNTESTED.lua rename to WeakAuras/Projects/ByExp/BFA/Tank Taunt UNTESTED.lua index 278feea..2ef3bfc 100644 --- a/Complete Projects/BFA/Tank Taunt UNTESTED.lua +++ b/WeakAuras/Projects/ByExp/BFA/Tank Taunt UNTESTED.lua @@ -1,69 +1,69 @@ ---COMBAT_LOG_EVENT_UNFILTERED GROUP_ROSTER_UPDATE UNTRIGGER -function(e, ...) - if e == "COMBAT_LOG_EVENT_UNFILTERED" then --CLEU - if not aura_env.tank then aura_env.tank = "" end - local se = select(2, ...) - if se == "SPELL_AURA_APPLIED" then - local type = select(15, ...) - if type == "DEBUFF" then - local caster = select(5, ...) - local target = select(9, ...) - local name = select(13, ...) - --If selected debuff is cast on other tank, get other tank from other trigger - if (target == aura_env.tank or target == UnitName("player")) and aura_env.auras[name] then - --Get stacks duration and expiry time for duration control and trigger - local stacks, dur = select(3, aura_env.unitDebuffC(target, name)), select(5, aura_env.unitDebuffC(target, name)) - if stacks > aura_env.auras[name] then - --If I have too many stacks and I am tanking then -- other taunts - if target == UnitName("player") and select(1, UnitDetailedThreatSituation("player", "target")) then - aura_env.returnName = "DEBIL TAUNT" - aura_env.region:Color(0.3715, 0.6285, 0, 1) - --If other tank has too many stacks and other tank is tanking then -- I taunt - elseif target == aura_env.tank and select(1, UnitDetailedThreatSituation(target, "target")) then - aura_env.returnName = "TAUNT DEBIL" - aura_env.region:Color(0.5660, 0.1588, 0.2752, 1) - end - if aura_env.timer then aura_env.timer:Cancel() end - aura_env.timer = C_Timer.NewTimer(dur, function() WeakAuras.ScanEvents("UNTRIGGER") end) - return true - end - end - end - end - elseif e == "GROUP_ROSTER_UPDATE" then --Find other tank - if IsInRaid() then - for i = 1, GetNumGroupMembers() do - if UnitGroupRolesAssigned("raid" .. i) == "TANK" and UnitName("raid" .. i) ~= UnitName("player") then - aura_env.tank = UnitName("raid" .. i) - end - end - end - elseif e == "UNTRIGGER" then - return false - end -end - ---NAME INFO -function() - return aura_env.returnName -end - ---INIT -aura_env.UnitDebuffC = function(unit, spell) - for i = 1, 40 do - local name = UnitDebuff(unit, i) - if name then - if name == spell then - return UnitDebuff(unit, i) - end - else - return nil - end - end -end -aura_env.auras = -{ - ["Rimefrost"] = 5, - ["Septic Taint"] = 5, - +--COMBAT_LOG_EVENT_UNFILTERED GROUP_ROSTER_UPDATE UNTRIGGER +function(e, ...) + if e == "COMBAT_LOG_EVENT_UNFILTERED" then --CLEU + if not aura_env.tank then aura_env.tank = "" end + local se = select(2, ...) + if se == "SPELL_AURA_APPLIED" then + local type = select(15, ...) + if type == "DEBUFF" then + local caster = select(5, ...) + local target = select(9, ...) + local name = select(13, ...) + --If selected debuff is cast on other tank, get other tank from other trigger + if (target == aura_env.tank or target == UnitName("player")) and aura_env.auras[name] then + --Get stacks duration and expiry time for duration control and trigger + local stacks, dur = select(3, aura_env.unitDebuffC(target, name)), select(5, aura_env.unitDebuffC(target, name)) + if stacks > aura_env.auras[name] then + --If I have too many stacks and I am tanking then -- other taunts + if target == UnitName("player") and select(1, UnitDetailedThreatSituation("player", "target")) then + aura_env.returnName = "DEBIL TAUNT" + aura_env.region:Color(0.3715, 0.6285, 0, 1) + --If other tank has too many stacks and other tank is tanking then -- I taunt + elseif target == aura_env.tank and select(1, UnitDetailedThreatSituation(target, "target")) then + aura_env.returnName = "TAUNT DEBIL" + aura_env.region:Color(0.5660, 0.1588, 0.2752, 1) + end + if aura_env.timer then aura_env.timer:Cancel() end + aura_env.timer = C_Timer.NewTimer(dur, function() WeakAuras.ScanEvents("UNTRIGGER") end) + return true + end + end + end + end + elseif e == "GROUP_ROSTER_UPDATE" then --Find other tank + if IsInRaid() then + for i = 1, GetNumGroupMembers() do + if UnitGroupRolesAssigned("raid" .. i) == "TANK" and UnitName("raid" .. i) ~= UnitName("player") then + aura_env.tank = UnitName("raid" .. i) + end + end + end + elseif e == "UNTRIGGER" then + return false + end +end + +--NAME INFO +function() + return aura_env.returnName +end + +--INIT +aura_env.UnitDebuffC = function(unit, spell) + for i = 1, 40 do + local name = UnitDebuff(unit, i) + if name then + if name == spell then + return UnitDebuff(unit, i) + end + else + return nil + end + end +end +aura_env.auras = +{ + ["Rimefrost"] = 5, + ["Septic Taint"] = 5, + } \ No newline at end of file diff --git a/Complete Projects/BFA/Taunt Cunt UNFINISHED.lua b/WeakAuras/Projects/ByExp/BFA/Taunt Cunt UNFINISHED.lua similarity index 95% rename from Complete Projects/BFA/Taunt Cunt UNFINISHED.lua rename to WeakAuras/Projects/ByExp/BFA/Taunt Cunt UNFINISHED.lua index c28e09e..87bcd73 100644 --- a/Complete Projects/BFA/Taunt Cunt UNFINISHED.lua +++ b/WeakAuras/Projects/ByExp/BFA/Taunt Cunt UNFINISHED.lua @@ -1,33 +1,33 @@ ---UNIT_AURA -function(_,unit) - if UnitGroupRolesAssigned(unit) == "TANK" and UnitName(unit) ~= UnitName("player") then - local tank = UnitDetailedThreatSituation(unit, "boss1") - if not tank then - for k,v in pairs(aura_env.debuffs) do - if aura_env.UnitDebuffC(k, unit) then - return true - end - end - else - return false - end - end -end - ---INIT -aura_env.debuffs = -{ - ["Sacred Blade"] = 1 -} -aura_env.UnitDebuffC = function(spell, unit) - for i = 1, 40 do - local name = UnitDebuff(unit, i) - if name then - if name == spell then - return UnitDebuff(unit, i) - end - else - return nil - end - end +--UNIT_AURA +function(_,unit) + if UnitGroupRolesAssigned(unit) == "TANK" and UnitName(unit) ~= UnitName("player") then + local tank = UnitDetailedThreatSituation(unit, "boss1") + if not tank then + for k,v in pairs(aura_env.debuffs) do + if aura_env.UnitDebuffC(k, unit) then + return true + end + end + else + return false + end + end +end + +--INIT +aura_env.debuffs = +{ + ["Sacred Blade"] = 1 +} +aura_env.UnitDebuffC = function(spell, unit) + for i = 1, 40 do + local name = UnitDebuff(unit, i) + if name then + if name == spell then + return UnitDebuff(unit, i) + end + else + return nil + end + end end \ No newline at end of file diff --git a/Complete Projects/BFA/Taunterino.lua b/WeakAuras/Projects/ByExp/BFA/Taunterino.lua similarity index 98% rename from Complete Projects/BFA/Taunterino.lua rename to WeakAuras/Projects/ByExp/BFA/Taunterino.lua index 44756e0..55f6416 100644 --- a/Complete Projects/BFA/Taunterino.lua +++ b/WeakAuras/Projects/ByExp/BFA/Taunterino.lua @@ -1,62 +1,62 @@ ---COMBAT_LOG_EVENT_UNFILTERED UPDATE_TAUNT_GOD -function(...) - local e = select(1, ...) - if e == "COMBAT_LOG_EVENT_UNFILTERED" then - local spellName = select(14, ...) - if (spellName == "Taunt" - or spellName == "Provoke" - or spellName == "Dark Command" - or spellName == "Torment" - or spellName == "Hand of Reckoning" - or spellName == "Growl") - and subEvent == "SPELL_CAST_SUCCESS" then - local target = select(10, ...) - local source = select(6, ...) - local subEvent = select(3, ...) - aura_env.spellName = spellName - aura_env.caster = source - aura_env.target = target - aura_env.cast_time = GetTime() - if aura_env.ticker then aura_env.ticker:Cancel() end - if not aura_env.ticker then aura_env.ticker = C_Timer.NewTicker(1, function() WeakAuras.ScanEvents("UPDATE_TAUNT_GOD") end) - return true - else - return false - end - end - elseif e == "UPDATE_TAUNT_GOD" then - return true - end -end - ---DISPLAY -function() - if aura_env.caster then - local source_class = UnitClass(aura_env.caster) - local source_class_color = "|cFFFFFFFF" - local time_color = "|cFFFFFFFF" - local target_color = "|cFFFFFFFF" - if aura_env.spellName == "Taunt" - or aura_env.spellName == "Provoke" - or aura_env.spellName == "Hand of Reckoning" - or aura_env.spellName == "Dark Command" - or aura_env.spellName == "Torment" - or aura_env.spellName == "Growl" - then cooldown_time = aura_env.cast_time + 8 else cooldown_time = 0 end - if (cooldown_time / GetTime()) < 1 then time_color = "|cFF00FF00" else time_color = "|cFFFF0000" end - if source_class == "Death Knight" then source_class_color = "|cFFC41F3B" - elseif source_class == "Demon Hunter" then source_class_color = "|cFFA330C9" - elseif source_class == "Druid" then source_class_color = "|cFFFF7D0A" - elseif source_class == "Hunter" then source_class_color = "|cFFABD473" - elseif source_class == "Mage" then source_class_color = "|cFF40C7EB" - elseif source_class == "Monk" then source_class_color = "|cFF00FF96" - elseif source_class == "Paladin" then source_class_color = "|cFFF58CBA" - elseif source_class == "Priest" then source_class_color = "|cFFFFFFFF" - elseif source_class == "Rogue" then source_class_color = "|cFFFFF569" - elseif source_class == "Shaman" then source_class_color = "|cFF0070DE" - elseif source_class == "Warlock" then source_class_color = "|cFF8787ED" - elseif source_class == "Warrior" then source_class_color = "|cFFC79C6E" end - if aura_env.target == UnitName("target") then target_color = "|cFF00FF00" else target_color = "|cFFFF0000" end - return source_class_color .. aura_env.caster .. "\n" .. target_color .. aura_env.target .. "\n" .. source_class_color .. aura_env.spellName .. "\n" .. time_color .. math.floor(GetTime() - aura_env.cast_time) - end -end +--COMBAT_LOG_EVENT_UNFILTERED UPDATE_TAUNT_GOD +function(...) + local e = select(1, ...) + if e == "COMBAT_LOG_EVENT_UNFILTERED" then + local spellName = select(14, ...) + if (spellName == "Taunt" + or spellName == "Provoke" + or spellName == "Dark Command" + or spellName == "Torment" + or spellName == "Hand of Reckoning" + or spellName == "Growl") + and subEvent == "SPELL_CAST_SUCCESS" then + local target = select(10, ...) + local source = select(6, ...) + local subEvent = select(3, ...) + aura_env.spellName = spellName + aura_env.caster = source + aura_env.target = target + aura_env.cast_time = GetTime() + if aura_env.ticker then aura_env.ticker:Cancel() end + if not aura_env.ticker then aura_env.ticker = C_Timer.NewTicker(1, function() WeakAuras.ScanEvents("UPDATE_TAUNT_GOD") end) + return true + else + return false + end + end + elseif e == "UPDATE_TAUNT_GOD" then + return true + end +end + +--DISPLAY +function() + if aura_env.caster then + local source_class = UnitClass(aura_env.caster) + local source_class_color = "|cFFFFFFFF" + local time_color = "|cFFFFFFFF" + local target_color = "|cFFFFFFFF" + if aura_env.spellName == "Taunt" + or aura_env.spellName == "Provoke" + or aura_env.spellName == "Hand of Reckoning" + or aura_env.spellName == "Dark Command" + or aura_env.spellName == "Torment" + or aura_env.spellName == "Growl" + then cooldown_time = aura_env.cast_time + 8 else cooldown_time = 0 end + if (cooldown_time / GetTime()) < 1 then time_color = "|cFF00FF00" else time_color = "|cFFFF0000" end + if source_class == "Death Knight" then source_class_color = "|cFFC41F3B" + elseif source_class == "Demon Hunter" then source_class_color = "|cFFA330C9" + elseif source_class == "Druid" then source_class_color = "|cFFFF7D0A" + elseif source_class == "Hunter" then source_class_color = "|cFFABD473" + elseif source_class == "Mage" then source_class_color = "|cFF40C7EB" + elseif source_class == "Monk" then source_class_color = "|cFF00FF96" + elseif source_class == "Paladin" then source_class_color = "|cFFF58CBA" + elseif source_class == "Priest" then source_class_color = "|cFFFFFFFF" + elseif source_class == "Rogue" then source_class_color = "|cFFFFF569" + elseif source_class == "Shaman" then source_class_color = "|cFF0070DE" + elseif source_class == "Warlock" then source_class_color = "|cFF8787ED" + elseif source_class == "Warrior" then source_class_color = "|cFFC79C6E" end + if aura_env.target == UnitName("target") then target_color = "|cFF00FF00" else target_color = "|cFFFF0000" end + return source_class_color .. aura_env.caster .. "\n" .. target_color .. aura_env.target .. "\n" .. source_class_color .. aura_env.spellName .. "\n" .. time_color .. math.floor(GetTime() - aura_env.cast_time) + end +end diff --git a/Complete Projects/BFA/UnitDebuff.lua b/WeakAuras/Projects/ByExp/BFA/UnitDebuff.lua similarity index 96% rename from Complete Projects/BFA/UnitDebuff.lua rename to WeakAuras/Projects/ByExp/BFA/UnitDebuff.lua index da1389a..93455da 100644 --- a/Complete Projects/BFA/UnitDebuff.lua +++ b/WeakAuras/Projects/ByExp/BFA/UnitDebuff.lua @@ -1,58 +1,58 @@ ---UNIT_AURA COMBAT_LOG_EVENT_UNFILTERED PLAYER_REGEN_ENABLED PLAYER_REGEN_DISABLED -function(e, unit, ...) - if e == "UNIT_AURA" then - if UnitExists(unit) then - if aura_env.UnitDebuffC(aura_env.debuff, unit) and not aura_env.auras[UnitGUID(unit)] and select(7, aura_env.UnitDebuffC(aura_env.debuff, unit)) == "player" then - aura_env.auras[UnitGUID(unit)] = 1 - aura_env.count = aura_env.count + 1 - return true - elseif not aura_env.UnitDebuffC(aura_env.debuff, unit) and aura_env.auras[UnitGUID(unit)] then - aura_env.auras[UnitGUID(unit)] = nil - aura_env.count = aura_env.count - 1 - return true - end - end - elseif e == "COMBAT_LOG_EVENT_UNFILTERED" then - local se = select(1, ...) - if se == "UNIT_DIED" then - local GUID = select(7, ...) - if aura_env.auras[GUID] then - aura_env.auras[GUID] = nil - aura_env.count = aura_env.count - 1 - return true - end - end - elseif e == "PLAYER_REGEN_ENABLED" or e == "PLAYER_REGEN_DISABLED" then - for k,v in pairs(aura_env.auras) do - k = nil - v = nil - end - end -end - ---UNTRIGGER -function() - if aura_env.count == 0 then return true end -end - ---DISPLAY -function() - if aura_env.count > 0 then return aura_env.count else return "" end -end - ---INIT -aura_env.debuff = "Dagger in the Back" -aura_env.count = 0 -aura_env.auras = {} -aura_env.UnitDebuffC = function(spell, unit) - for i = 1, 40 do - local name = UnitDebuff(unit, i) - if name then - if name == spell then - return UnitDebuff(unit, i) - end - else - return nil - end - end +--UNIT_AURA COMBAT_LOG_EVENT_UNFILTERED PLAYER_REGEN_ENABLED PLAYER_REGEN_DISABLED +function(e, unit, ...) + if e == "UNIT_AURA" then + if UnitExists(unit) then + if aura_env.UnitDebuffC(aura_env.debuff, unit) and not aura_env.auras[UnitGUID(unit)] and select(7, aura_env.UnitDebuffC(aura_env.debuff, unit)) == "player" then + aura_env.auras[UnitGUID(unit)] = 1 + aura_env.count = aura_env.count + 1 + return true + elseif not aura_env.UnitDebuffC(aura_env.debuff, unit) and aura_env.auras[UnitGUID(unit)] then + aura_env.auras[UnitGUID(unit)] = nil + aura_env.count = aura_env.count - 1 + return true + end + end + elseif e == "COMBAT_LOG_EVENT_UNFILTERED" then + local se = select(1, ...) + if se == "UNIT_DIED" then + local GUID = select(7, ...) + if aura_env.auras[GUID] then + aura_env.auras[GUID] = nil + aura_env.count = aura_env.count - 1 + return true + end + end + elseif e == "PLAYER_REGEN_ENABLED" or e == "PLAYER_REGEN_DISABLED" then + for k,v in pairs(aura_env.auras) do + k = nil + v = nil + end + end +end + +--UNTRIGGER +function() + if aura_env.count == 0 then return true end +end + +--DISPLAY +function() + if aura_env.count > 0 then return aura_env.count else return "" end +end + +--INIT +aura_env.debuff = "Dagger in the Back" +aura_env.count = 0 +aura_env.auras = {} +aura_env.UnitDebuffC = function(spell, unit) + for i = 1, 40 do + local name = UnitDebuff(unit, i) + if name then + if name == spell then + return UnitDebuff(unit, i) + end + else + return nil + end + end end \ No newline at end of file diff --git a/Complete Projects/BFA/Vaultbot Beep.lua b/WeakAuras/Projects/ByExp/BFA/Vaultbot Beep.lua similarity index 97% rename from Complete Projects/BFA/Vaultbot Beep.lua rename to WeakAuras/Projects/ByExp/BFA/Vaultbot Beep.lua index 0deb985..23b27a2 100644 --- a/Complete Projects/BFA/Vaultbot Beep.lua +++ b/WeakAuras/Projects/ByExp/BFA/Vaultbot Beep.lua @@ -1,33 +1,33 @@ ---NAME_PLATE_UNIT_ADDED NAME_PLATE_UNIT_REMOVED PLAYER_REGEN_DISABLED PLAYER_TARGET_CHANGED -function(e, u) - --local mname = "Armored Vaultbot" - local mname = "Sickly Saurid" - local LCG = LibStub("LibCustomGlow-1.0") - if e == "NAME_PLATE_UNIT_ADDED" then - local name = UnitName(u) - if name == mname then - PlaySoundFile("Interface\\AddOns\\WeakAuras\\PowerAurasMedia\\Sounds\\sonar.ogg", "master") - aura_env.ticker = C_Timer.NewTicker(1, function() PlaySoundFile("Interface\\AddOns\\WeakAuras\\PowerAurasMedia\\Sounds\\sonar.ogg", "master"); end) - local nameplate = C_NamePlate.GetNamePlateForUnit(u) - LCG.PixelGlow_Start(nameplate, {1,1,1,1}, nil, 0, 8, 2, 0, -4) - end - elseif e == "NAME_PLATE_UNIT_REMOVED" then - local name = UnitName(u) - if name == mname then - if aura_env.ticker then - aura_env.ticker:Cancel() - aura_env.ticker = nil - end - local nameplate = C_NamePlate.GetNamePlateForUnit(u) - LCG.PixelGlow_Stop() - end - elseif e == "PLAYER_REGEN_DISABLED" and aura_env.ticker then - aura_env.ticker:Cancel() - aura_env.ticker = nil - elseif e == "PLAYER_TARGET_CHANGED" and aura_env.ticker then - if UnitName("target") == mname then - aura_env.ticker:Cancel() - aura_env.ticker = nil - end - end +--NAME_PLATE_UNIT_ADDED NAME_PLATE_UNIT_REMOVED PLAYER_REGEN_DISABLED PLAYER_TARGET_CHANGED +function(e, u) + --local mname = "Armored Vaultbot" + local mname = "Sickly Saurid" + local LCG = LibStub("LibCustomGlow-1.0") + if e == "NAME_PLATE_UNIT_ADDED" then + local name = UnitName(u) + if name == mname then + PlaySoundFile("Interface\\AddOns\\WeakAuras\\PowerAurasMedia\\Sounds\\sonar.ogg", "master") + aura_env.ticker = C_Timer.NewTicker(1, function() PlaySoundFile("Interface\\AddOns\\WeakAuras\\PowerAurasMedia\\Sounds\\sonar.ogg", "master"); end) + local nameplate = C_NamePlate.GetNamePlateForUnit(u) + LCG.PixelGlow_Start(nameplate, {1,1,1,1}, nil, 0, 8, 2, 0, -4) + end + elseif e == "NAME_PLATE_UNIT_REMOVED" then + local name = UnitName(u) + if name == mname then + if aura_env.ticker then + aura_env.ticker:Cancel() + aura_env.ticker = nil + end + local nameplate = C_NamePlate.GetNamePlateForUnit(u) + LCG.PixelGlow_Stop() + end + elseif e == "PLAYER_REGEN_DISABLED" and aura_env.ticker then + aura_env.ticker:Cancel() + aura_env.ticker = nil + elseif e == "PLAYER_TARGET_CHANGED" and aura_env.ticker then + if UnitName("target") == mname then + aura_env.ticker:Cancel() + aura_env.ticker = nil + end + end end \ No newline at end of file diff --git a/Complete Projects/BFA/Whoa/CTRL c to copy wowhead link to quest.lua b/WeakAuras/Projects/ByExp/BFA/Whoa/CTRL c to copy wowhead link to quest.lua similarity index 96% rename from Complete Projects/BFA/Whoa/CTRL c to copy wowhead link to quest.lua rename to WeakAuras/Projects/ByExp/BFA/Whoa/CTRL c to copy wowhead link to quest.lua index a4b9f1f..014daae 100644 --- a/Complete Projects/BFA/Whoa/CTRL c to copy wowhead link to quest.lua +++ b/WeakAuras/Projects/ByExp/BFA/Whoa/CTRL c to copy wowhead link to quest.lua @@ -1,60 +1,60 @@ -local baseUrl = "https://www.wowhead.com/" -local keybind = "CTRL-C" -local popupText = "Wowhead %s Link\n" .. keybind .. " to copy" - -local typeAttributeMap = { - quest = { "id", "questId", "questID" }, - item = { info = { "id" } }, -} - -local function ShowUrlPopup(id, type) - if not (id or type) then return end - local url = baseUrl .. type .. "=" .. id - StaticPopup_Show("WowheadQuestLinkUrl", type:sub(1, 1):upper() .. type:sub(2), _, url) -end - -local function getIdAndType(focus) - local function loop(focus, keys) - if not focus then return end - for key, value in pairs(keys) do - if type(value) == "table" then return loop(focus[key], value) end - local id = focus[value] - if id then return id end - end - end - if not focus then return end - for type, keys in pairs(typeAttributeMap) do - local id = loop(focus, keys) - if id then return id, type end - end - return getIdAndType(focus:GetParent()) -end - -local function run() - local focus = GetMouseFocus() - local id, type = getIdAndType(focus) - ShowUrlPopup(id, type) -end - -StaticPopupDialogs["WowheadQuestLinkUrl"] = { - text = popupText, - button1 = "Close", - OnShow = function(self, data) - local function HidePopup(self) self:GetParent():Hide() end - self.editBox:SetScript("OnEscapePressed", HidePopup) - self.editBox:SetScript("OnEnterPressed", HidePopup) - self.editBox:SetMaxLetters(0) - self.editBox:SetText(data) - self.editBox:HighlightText(0, self.editBox:GetNumLetters()) - end, - hasEditBox = true, - editBoxWidth = 233, - timeout = 0, - whileDead = true, - hideOnEscape = true, - preferredIndex = 3, -} - -local btn = CreateFrame("BUTTON", "KeybindBtn") -SetBindingClick(keybind, btn:GetName()) -btn:SetScript("OnClick", run) +local baseUrl = "https://www.wowhead.com/" +local keybind = "CTRL-C" +local popupText = "Wowhead %s Link\n" .. keybind .. " to copy" + +local typeAttributeMap = { + quest = { "id", "questId", "questID" }, + item = { info = { "id" } }, +} + +local function ShowUrlPopup(id, type) + if not (id or type) then return end + local url = baseUrl .. type .. "=" .. id + StaticPopup_Show("WowheadQuestLinkUrl", type:sub(1, 1):upper() .. type:sub(2), _, url) +end + +local function getIdAndType(focus) + local function loop(focus, keys) + if not focus then return end + for key, value in pairs(keys) do + if type(value) == "table" then return loop(focus[key], value) end + local id = focus[value] + if id then return id end + end + end + if not focus then return end + for type, keys in pairs(typeAttributeMap) do + local id = loop(focus, keys) + if id then return id, type end + end + return getIdAndType(focus:GetParent()) +end + +local function run() + local focus = GetMouseFocus() + local id, type = getIdAndType(focus) + ShowUrlPopup(id, type) +end + +StaticPopupDialogs["WowheadQuestLinkUrl"] = { + text = popupText, + button1 = "Close", + OnShow = function(self, data) + local function HidePopup(self) self:GetParent():Hide() end + self.editBox:SetScript("OnEscapePressed", HidePopup) + self.editBox:SetScript("OnEnterPressed", HidePopup) + self.editBox:SetMaxLetters(0) + self.editBox:SetText(data) + self.editBox:HighlightText(0, self.editBox:GetNumLetters()) + end, + hasEditBox = true, + editBoxWidth = 233, + timeout = 0, + whileDead = true, + hideOnEscape = true, + preferredIndex = 3, +} + +local btn = CreateFrame("BUTTON", "KeybindBtn") +SetBindingClick(keybind, btn:GetName()) +btn:SetScript("OnClick", run) diff --git a/Complete Projects/BFA/Whoa/Events.lua b/WeakAuras/Projects/ByExp/BFA/Whoa/Events.lua similarity index 100% rename from Complete Projects/BFA/Whoa/Events.lua rename to WeakAuras/Projects/ByExp/BFA/Whoa/Events.lua diff --git a/Complete Projects/BFA/Whoa/Nnoga's Hide Guild Chat.lua b/WeakAuras/Projects/ByExp/BFA/Whoa/Nnoga's Hide Guild Chat.lua similarity index 97% rename from Complete Projects/BFA/Whoa/Nnoga's Hide Guild Chat.lua rename to WeakAuras/Projects/ByExp/BFA/Whoa/Nnoga's Hide Guild Chat.lua index 69d7d21..4356139 100644 --- a/Complete Projects/BFA/Whoa/Nnoga's Hide Guild Chat.lua +++ b/WeakAuras/Projects/ByExp/BFA/Whoa/Nnoga's Hide Guild Chat.lua @@ -1,45 +1,45 @@ -function(event,addonName) - if event == "ADDON_LOADED" and addonName == "Blizzard_Communities" then - --create overlay - local f = CreateFrame("Button",nil,UIParent) - f:SetFrameStrata("HIGH") - f.tex = f:CreateTexture(nil, "BACKGROUND") - f.tex:SetAllPoints() - f.tex:SetColorTexture(0.1,0.1,0.1,1) - f.text = f:CreateFontString() - f.text:SetFontObject("GameFontNormalMed3") - f.text:SetText("Chat Hidden. Click to show") - f.text:SetTextColor(1, 1, 1, 1) - f.text:SetJustifyH("CENTER") - f.text:SetJustifyV("CENTER") - f.text:SetHeight(20) - f.text:SetPoint("CENTER",f,"CENTER",0,0) - f:EnableMouse(true) - f:RegisterForClicks("AnyUp") - f:SetScript("OnClick",function(...) - f:Hide() - end) - --toggle - local function toggleOverlay() - if CommunitiesFrame:GetDisplayMode() == COMMUNITIES_FRAME_DISPLAY_MODES.CHAT then - f:SetAllPoints(CommunitiesFrame.Chat.InsetFrame) - f:Show() - elseif CommunitiesFrame:GetDisplayMode() == COMMUNITIES_FRAME_DISPLAY_MODES.MINIMIZED then - f:SetAllPoints(CommunitiesFrameInset) - f:Show() - else - f:Hide() - end - end - local function hideOverlay() - f:Hide() - end - toggleOverlay() --run once - - --hook - hooksecurefunc(CommunitiesFrame,"SetDisplayMode", toggleOverlay) - hooksecurefunc(CommunitiesFrame,"Show",toggleOverlay) - hooksecurefunc(CommunitiesFrame,"Hide",hideOverlay) - hooksecurefunc(CommunitiesFrame,"OnClubSelected", toggleOverlay) - end +function(event,addonName) + if event == "ADDON_LOADED" and addonName == "Blizzard_Communities" then + --create overlay + local f = CreateFrame("Button",nil,UIParent) + f:SetFrameStrata("HIGH") + f.tex = f:CreateTexture(nil, "BACKGROUND") + f.tex:SetAllPoints() + f.tex:SetColorTexture(0.1,0.1,0.1,1) + f.text = f:CreateFontString() + f.text:SetFontObject("GameFontNormalMed3") + f.text:SetText("Chat Hidden. Click to show") + f.text:SetTextColor(1, 1, 1, 1) + f.text:SetJustifyH("CENTER") + f.text:SetJustifyV("CENTER") + f.text:SetHeight(20) + f.text:SetPoint("CENTER",f,"CENTER",0,0) + f:EnableMouse(true) + f:RegisterForClicks("AnyUp") + f:SetScript("OnClick",function(...) + f:Hide() + end) + --toggle + local function toggleOverlay() + if CommunitiesFrame:GetDisplayMode() == COMMUNITIES_FRAME_DISPLAY_MODES.CHAT then + f:SetAllPoints(CommunitiesFrame.Chat.InsetFrame) + f:Show() + elseif CommunitiesFrame:GetDisplayMode() == COMMUNITIES_FRAME_DISPLAY_MODES.MINIMIZED then + f:SetAllPoints(CommunitiesFrameInset) + f:Show() + else + f:Hide() + end + end + local function hideOverlay() + f:Hide() + end + toggleOverlay() --run once + + --hook + hooksecurefunc(CommunitiesFrame,"SetDisplayMode", toggleOverlay) + hooksecurefunc(CommunitiesFrame,"Show",toggleOverlay) + hooksecurefunc(CommunitiesFrame,"Hide",hideOverlay) + hooksecurefunc(CommunitiesFrame,"OnClubSelected", toggleOverlay) + end end \ No newline at end of file diff --git a/Complete Projects/BFA/Withdraw Guild Bank.lua b/WeakAuras/Projects/ByExp/BFA/Withdraw Guild Bank.lua similarity index 96% rename from Complete Projects/BFA/Withdraw Guild Bank.lua rename to WeakAuras/Projects/ByExp/BFA/Withdraw Guild Bank.lua index af56f21..422481e 100644 --- a/Complete Projects/BFA/Withdraw Guild Bank.lua +++ b/WeakAuras/Projects/ByExp/BFA/Withdraw Guild Bank.lua @@ -1,45 +1,45 @@ ---START DEPOSIT GUILDBANKFRAME_CLOSED -function(e) - local interval = 0.5 - local item = "U'taka" - if e == "START" then - for t = 1, GetNumGuildBankTabs() do - for s = 1, 98 do - local l = GetGuildBankItemLink(t, s) - if l then - local name = GetItemInfo(l) - if name:match(item) then - SetCurrentGuildBankTab(t) - aura_env.tab = t - break - end - end - end - end - if not aura_env.tab then print("NO FISH FOUND CUNT") else - local s = 1 - local aura_env = aura_env - aura_env.ticker = C_Timer.NewTicker(interval, function() - print(aura_env.tab, s) - AutoStoreGuildBankItem(aura_env.tab, s) - s = s + 1 - end) - end - elseif e == "DEPOSIT" then - local b = 0 - local s = 1 - local bs = 1 - local stage = 1 - local aura_env = aura_env - aura_env.ticker = C_Timer.NewTicker(interval, function() - if stage == 1 then SplitContainerItem(b, s, 1); print(stage); stage = stage + 1 - elseif stage == 2 then PickupGuildBankItem(6, bs); print(stage); stage = stage + 1 - elseif stage == 3 then PickupContainerItem(b, s); print(stage); stage = stage + 1 - elseif stage == 4 then PickupGuildBankItem(6, bs); print(stage); stage = stage + 1 - elseif stage == 5 then s = s + 1; bs = bs + 1; stage = 1 end - if s >= GetContainerNumSlots(b) then s = 1; b = b + 1 end - end) - elseif e == "GUILDBANKFRAME_CLOSED" then - if aura_env.ticker then aura_env.ticker:Cancel() end - end +--START DEPOSIT GUILDBANKFRAME_CLOSED +function(e) + local interval = 0.5 + local item = "U'taka" + if e == "START" then + for t = 1, GetNumGuildBankTabs() do + for s = 1, 98 do + local l = GetGuildBankItemLink(t, s) + if l then + local name = GetItemInfo(l) + if name:match(item) then + SetCurrentGuildBankTab(t) + aura_env.tab = t + break + end + end + end + end + if not aura_env.tab then print("NO FISH FOUND CUNT") else + local s = 1 + local aura_env = aura_env + aura_env.ticker = C_Timer.NewTicker(interval, function() + print(aura_env.tab, s) + AutoStoreGuildBankItem(aura_env.tab, s) + s = s + 1 + end) + end + elseif e == "DEPOSIT" then + local b = 0 + local s = 1 + local bs = 1 + local stage = 1 + local aura_env = aura_env + aura_env.ticker = C_Timer.NewTicker(interval, function() + if stage == 1 then SplitContainerItem(b, s, 1); print(stage); stage = stage + 1 + elseif stage == 2 then PickupGuildBankItem(6, bs); print(stage); stage = stage + 1 + elseif stage == 3 then PickupContainerItem(b, s); print(stage); stage = stage + 1 + elseif stage == 4 then PickupGuildBankItem(6, bs); print(stage); stage = stage + 1 + elseif stage == 5 then s = s + 1; bs = bs + 1; stage = 1 end + if s >= GetContainerNumSlots(b) then s = 1; b = b + 1 end + end) + elseif e == "GUILDBANKFRAME_CLOSED" then + if aura_env.ticker then aura_env.ticker:Cancel() end + end end \ No newline at end of file diff --git a/Complete Projects/BFA/__GOOD SHIT b/WeakAuras/Projects/ByExp/BFA/__GOOD SHIT similarity index 100% rename from Complete Projects/BFA/__GOOD SHIT rename to WeakAuras/Projects/ByExp/BFA/__GOOD SHIT diff --git a/Complete Projects/Classic/Warrior Heroic Strike.lua b/WeakAuras/Projects/ByExp/Classic/Warrior Heroic Strike.lua similarity index 96% rename from Complete Projects/Classic/Warrior Heroic Strike.lua rename to WeakAuras/Projects/ByExp/Classic/Warrior Heroic Strike.lua index 217fab6..2e547c9 100644 --- a/Complete Projects/Classic/Warrior Heroic Strike.lua +++ b/WeakAuras/Projects/ByExp/Classic/Warrior Heroic Strike.lua @@ -1,7 +1,7 @@ ---UPDATE_RAGE -function(e, ...) - if e == "UPDATE_RAGE" then - local hs = IsCurrentSpell("Cleave") - if hs == true then return true else return false end - end +--UPDATE_RAGE +function(e, ...) + if e == "UPDATE_RAGE" then + local hs = IsCurrentSpell("Cleave") + if hs == true then return true else return false end + end end \ No newline at end of file diff --git a/Complete Projects/Classic/Warrior Rage.lua b/WeakAuras/Projects/ByExp/Classic/Warrior Rage.lua similarity index 97% rename from Complete Projects/Classic/Warrior Rage.lua rename to WeakAuras/Projects/ByExp/Classic/Warrior Rage.lua index 1c7eec6..86e17a9 100644 --- a/Complete Projects/Classic/Warrior Rage.lua +++ b/WeakAuras/Projects/ByExp/Classic/Warrior Rage.lua @@ -1,36 +1,36 @@ ---UPDATE_RAGE -function(e, ...) - if e == "UPDATE_RAGE" then - return true - elseif e == "PLAYER_REGEN_DISABLED" then - if not aura_env.ticker then aura_env.ticker = C_Timer.NewTicker(0.05, function() WeakAuras.ScanEvents("UPDATE_RAGE") end) end - end -end - ---DURATION -function() - local rage, maxrage = UnitPower("player"), UnitPowerMax("player") - WeakAurasSaved.CustomTrash.CustomRage = rage - return rage, maxrage, 1 -end - ---DURATION2 ---Other aura -function() - local hs = IsCurrentSpell("Heroic Strike") - local cleave = IsCurrentSpell("Cleave") - if hs then return WeakAurasSaved.CustomTrash.CustomRage - 15, UnitPowerMax("player"), 1 elseif cleave then return WeakAurasSaved.CustomTrash.CustomRage - 20, UnitPowerMax("player"), 1 else return WeakAurasSaved.CustomTrash.CustomRage, UnitPowerMax("player"), 1 end -end - ---TEXT -function() - return WeakAurasSaved.CustomTrash.CustomRage -end - ---INIT -if not WeakAurasSaved.CustomTrash then WeakAurasSaved.CustomTrash = {} end -if WeakAuras.IsOptionsOpen() and aura_env.ticker then - aura_env.ticker:Cancel() -else - if not aura_env.ticker then aura_env.ticker = C_Timer.NewTicker(0.05, function() WeakAuras.ScanEvents("UPDATE_RAGE") end) end +--UPDATE_RAGE +function(e, ...) + if e == "UPDATE_RAGE" then + return true + elseif e == "PLAYER_REGEN_DISABLED" then + if not aura_env.ticker then aura_env.ticker = C_Timer.NewTicker(0.05, function() WeakAuras.ScanEvents("UPDATE_RAGE") end) end + end +end + +--DURATION +function() + local rage, maxrage = UnitPower("player"), UnitPowerMax("player") + WeakAurasSaved.CustomTrash.CustomRage = rage + return rage, maxrage, 1 +end + +--DURATION2 +--Other aura +function() + local hs = IsCurrentSpell("Heroic Strike") + local cleave = IsCurrentSpell("Cleave") + if hs then return WeakAurasSaved.CustomTrash.CustomRage - 15, UnitPowerMax("player"), 1 elseif cleave then return WeakAurasSaved.CustomTrash.CustomRage - 20, UnitPowerMax("player"), 1 else return WeakAurasSaved.CustomTrash.CustomRage, UnitPowerMax("player"), 1 end +end + +--TEXT +function() + return WeakAurasSaved.CustomTrash.CustomRage +end + +--INIT +if not WeakAurasSaved.CustomTrash then WeakAurasSaved.CustomTrash = {} end +if WeakAuras.IsOptionsOpen() and aura_env.ticker then + aura_env.ticker:Cancel() +else + if not aura_env.ticker then aura_env.ticker = C_Timer.NewTicker(0.05, function() WeakAuras.ScanEvents("UPDATE_RAGE") end) end end \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/Aura Uptime.lua b/WeakAuras/Projects/ByExp/Fivver Stuff/Aura Uptime.lua similarity index 97% rename from Complete Projects/Fivver Stuff/Aura Uptime.lua rename to WeakAuras/Projects/ByExp/Fivver Stuff/Aura Uptime.lua index 68d9f3e..c6c8772 100644 --- a/Complete Projects/Fivver Stuff/Aura Uptime.lua +++ b/WeakAuras/Projects/ByExp/Fivver Stuff/Aura Uptime.lua @@ -1,199 +1,199 @@ ---PLAYER_REGEN_DISABLED PLAYER_REGEN_ENABLED UPDATE --- look for auras every frame --- or maybe look for combatlog ? --- get time when each aura is applied/expires --- calculate uptime based on the log ? --- alternatively sample each frame and add up # of frames aura was active and # of frames combat was ongoing --- bad solution though -function(e) - if e == "PLAYER_REGEN_DISABLED" then - local aura_env = aura_env - aura_env.ticker = C_Timer.NewTicker(1, function() WeakAuras.ScanEvents("UPDATE") end) - aura_env.startCombat = debugprofilestop() - aura_env.buffs = {} - aura_env.debuffs = {} - return true - elseif e == "PLAYER_REGEN_ENABLED" then - if aura_env.ticker then aura_env.ticker:Cancel() end - elseif e == "UPDATE" then return true end -end - ---CLEU ---COMBAT_LOG_EVENT_UNFILTERED -function(e) - if not aura_env.buffs then aura_env.buffs = {} end - if not aura_env.debuffs then aura_env.debuffs = {} end - - local timestamp, subEvent, _, _, caster, _, _, _, target = CombatLogGetCurrentEventInfo() - -- print(CombatLogGetCurrentEventInfo()) - - -- if "buff" is selected in the menu and - -- there has been an aura applied or removed and - -- the aura has been cast by the player on the player then - -- do fancy data stuff pls - if InCombatLockdown() ~= false then - local targetUnit = "boss1" - if UnitExists(targetUnit) == false then targetUnit = "target" end - if (aura_env.config.menu == 1 or aura_env.config.menu == 3) and (subEvent == "SPELL_AURA_REMOVED" or subEvent == "SPELL_AURA_APPLIED") and (caster == target and caster == UnitName("player")) then - local spell = select(12, CombatLogGetCurrentEventInfo()) - print("SPell", spell) - if not aura_env.buffs[spell] then - aura_env.buffs[spell] = { - ["timeActive"] = 0, - ["timeInactive"] = 0, - ["active"] = false, - ["lastSwitch"] = debugprofilestop(), - } - -- print("OPA; NEW SPELL") - end - if subEvent == "SPELL_AURA_APPLIED" and aura_env.buffs[spell] then - aura_env.buffs[spell].active = true - aura_env.buffs[spell].timeInactive = aura_env.buffs[spell].timeInactive + debugprofilestop() - aura_env.buffs[spell].lastSwitch - aura_env.buffs[spell].lastSwitch = debugprofilestop() - elseif subEvent == "SPELL_AURA_REMOVED" and aura_env.buffs[spell] then - aura_env.buffs[spell].active = false - aura_env.buffs[spell].timeActive = aura_env.buffs[spell].timeActive + debugprofilestop() - aura_env.buffs[spell].lastSwitch - aura_env.buffs[spell].lastSwitch = debugprofilestop() - end - elseif (aura_env.config.menu == 2 or aura_env.config.menu == 3) and (subEvent == "SPELL_AURA_REMOVED" or subEvent == "SPELL_AURA_APPLIED") and (caster == UnitName("player") and target == UnitName(targetUnit)) then - local spell = select(12, CombatLogGetCurrentEventInfo()) - if not aura_env.debuffs[spell] then - aura_env.debuffs[spell] = { - ["timeActive"] = 0, - ["timeInactive"] = 0, - ["active"] = false, - ["lastSwitch"] = debugprofilestop(), - } - -- print("OPA; NEW SPELL") - end - if subEvent == "SPELL_AURA_APPLIED" and aura_env.debuffs[spell] then - aura_env.debuffs[spell].active = true - aura_env.debuffs[spell].timeInactive = aura_env.debuffs[spell].timeInactive + debugprofilestop() - aura_env.debuffs[spell].lastSwitch - aura_env.debuffs[spell].lastSwitch = debugprofilestop() - elseif subEvent == "SPELL_AURA_REMOVED" and aura_env.debuffs[spell] then - aura_env.debuffs[spell].active = false - aura_env.debuffs[spell].timeActive = aura_env.debuffs[spell].timeActive + debugprofilestop() - aura_env.debuffs[spell].lastSwitch - aura_env.debuffs[spell].lastSwitch = debugprofilestop() - end - end - end - - -- debug print pls - for k,v in pairs(aura_env.buffs) do - -- print(k,v) - if type(v) == "table" then - for k2,v2 in pairs(v) do - -- print(k2,v2) - if type(v2) == "table" then - for k3,v3 in pairs(v2) do - -- print(k3,v3) - end - end - end - end - end - -end - ---DISPLAY -function() - aura_env.combatTime = (debugprofilestop() - aura_env.startCombat) / 1000 - local output = aura_env.formatTime(aura_env.combatTime) .. "\n" - aura_env.getColor(1) - for k,v in pairs(aura_env.buffs) do - - -- DEBUG - -- print(k) - -- for k2,v2 in pairs(v) do - -- print(k2, v2) - -- end - -- print("DEBUG TIME", debugprofilestop()) - -- print("END" .. "\n") - - local totalActiveTime = 0 - if v.active == true then - totalActiveTime = totalActiveTime + debugprofilestop() - v.lastSwitch + v.timeActive - else - totalActiveTime = totalActiveTime + v.timeActive - end - - output = string.format("%s %s%20s %10s %10s\n", output, aura_env.getColor(1), GetSpellInfo(k), aura_env.formatTime(totalActiveTime / 1000), string.format("%.2f%%", ((totalActiveTime / 1000) / aura_env.combatTime) * 100)) - -- output = output .. aura_env.getColor(1) .. GetSpellInfo(k) .. " " .. aura_env.formatTime(totalActiveTime / 1000) .. " " .. string.format("%.2f%%", ((totalActiveTime / 1000) / aura_env.combatTime) * 100) .. "\n" - end - - for k,v in pairs(aura_env.debuffs) do - - -- DEBUG - -- print(k) - for k2,v2 in pairs(v) do - -- print(k2, v2) - end - -- print("DEBUG TIME", debugprofilestop()) - -- print("END" .. "\n") - - local totalActiveTime = 0 - if v.active == true then - totalActiveTime = totalActiveTime + debugprofilestop() - v.lastSwitch + v.timeActive - else - totalActiveTime = totalActiveTime + v.timeActive - end - output = output .. aura_env.getColor(2) - if k == 233490 or (k >= 233496 and k <= 233499) then - if k == 233490 then - output = output .. GetSpellInfo(k) .. " 1" - elseif k >= 233496 and k <= 233499 then - output = output .. GetSpellInfo(k) .. " " .. (k % 233496) + 2 - end - else - output = output .. GetSpellInfo(k) - end - output = output .. " " .. aura_env.formatTime(totalActiveTime / 1000) .. " " .. string.format("%.2f%%", ((totalActiveTime / 1000) / aura_env.combatTime) * 100) .. "\n" - end - return output -end - ---INIT -aura_env.buffs = {} -aura_env.debuffs = {} -aura_env.combatTime = 0 -aura_env.startCombat = 0 - -aura_env.formatTime = function(time) - local res, m, s = tonumber(string.format("%d", time)), 0, 0 - while res >= 60 do - m = m + 1 - res = res - 60 - end - s = res - if s < 10 then - s = string.format("0%d", s) - end - if type(s) ~= "string" then tostring(s) end - return string.format("%d:%s", m, s) -end - -aura_env.getColor = function(mode) - -- ff78cb00 - local output = "\124c" - local colors = {} - if mode == 1 then - colors = {aura_env.config.bcolor[4], aura_env.config.bcolor[1], aura_env.config.bcolor[2], aura_env.config.bcolor[3]} - elseif mode == 2 then - colors = {aura_env.config.dcolor[4], aura_env.config.dcolor[1], aura_env.config.dcolor[2], aura_env.config.dcolor[3]} - end - local a, r, g, b = "00", "00", "00", "00" - - a = string.format("%x", colors[1] * 255) - r = string.format("%x", colors[2] * 255) - g = string.format("%x", colors[3] * 255) - b = string.format("%x", colors[4] * 255) - - - if string.len(a) == 1 then a = "0" .. a end - if string.len(r) == 1 then r = "0" .. r end - if string.len(g) == 1 then g = "0" .. g end - if string.len(b) == 1 then b = "0" .. b end - - output = output .. a .. r .. g .. b - return output +--PLAYER_REGEN_DISABLED PLAYER_REGEN_ENABLED UPDATE +-- look for auras every frame +-- or maybe look for combatlog ? +-- get time when each aura is applied/expires +-- calculate uptime based on the log ? +-- alternatively sample each frame and add up # of frames aura was active and # of frames combat was ongoing +-- bad solution though +function(e) + if e == "PLAYER_REGEN_DISABLED" then + local aura_env = aura_env + aura_env.ticker = C_Timer.NewTicker(1, function() WeakAuras.ScanEvents("UPDATE") end) + aura_env.startCombat = debugprofilestop() + aura_env.buffs = {} + aura_env.debuffs = {} + return true + elseif e == "PLAYER_REGEN_ENABLED" then + if aura_env.ticker then aura_env.ticker:Cancel() end + elseif e == "UPDATE" then return true end +end + +--CLEU +--COMBAT_LOG_EVENT_UNFILTERED +function(e) + if not aura_env.buffs then aura_env.buffs = {} end + if not aura_env.debuffs then aura_env.debuffs = {} end + + local timestamp, subEvent, _, _, caster, _, _, _, target = CombatLogGetCurrentEventInfo() + -- print(CombatLogGetCurrentEventInfo()) + + -- if "buff" is selected in the menu and + -- there has been an aura applied or removed and + -- the aura has been cast by the player on the player then + -- do fancy data stuff pls + if InCombatLockdown() ~= false then + local targetUnit = "boss1" + if UnitExists(targetUnit) == false then targetUnit = "target" end + if (aura_env.config.menu == 1 or aura_env.config.menu == 3) and (subEvent == "SPELL_AURA_REMOVED" or subEvent == "SPELL_AURA_APPLIED") and (caster == target and caster == UnitName("player")) then + local spell = select(12, CombatLogGetCurrentEventInfo()) + print("SPell", spell) + if not aura_env.buffs[spell] then + aura_env.buffs[spell] = { + ["timeActive"] = 0, + ["timeInactive"] = 0, + ["active"] = false, + ["lastSwitch"] = debugprofilestop(), + } + -- print("OPA; NEW SPELL") + end + if subEvent == "SPELL_AURA_APPLIED" and aura_env.buffs[spell] then + aura_env.buffs[spell].active = true + aura_env.buffs[spell].timeInactive = aura_env.buffs[spell].timeInactive + debugprofilestop() - aura_env.buffs[spell].lastSwitch + aura_env.buffs[spell].lastSwitch = debugprofilestop() + elseif subEvent == "SPELL_AURA_REMOVED" and aura_env.buffs[spell] then + aura_env.buffs[spell].active = false + aura_env.buffs[spell].timeActive = aura_env.buffs[spell].timeActive + debugprofilestop() - aura_env.buffs[spell].lastSwitch + aura_env.buffs[spell].lastSwitch = debugprofilestop() + end + elseif (aura_env.config.menu == 2 or aura_env.config.menu == 3) and (subEvent == "SPELL_AURA_REMOVED" or subEvent == "SPELL_AURA_APPLIED") and (caster == UnitName("player") and target == UnitName(targetUnit)) then + local spell = select(12, CombatLogGetCurrentEventInfo()) + if not aura_env.debuffs[spell] then + aura_env.debuffs[spell] = { + ["timeActive"] = 0, + ["timeInactive"] = 0, + ["active"] = false, + ["lastSwitch"] = debugprofilestop(), + } + -- print("OPA; NEW SPELL") + end + if subEvent == "SPELL_AURA_APPLIED" and aura_env.debuffs[spell] then + aura_env.debuffs[spell].active = true + aura_env.debuffs[spell].timeInactive = aura_env.debuffs[spell].timeInactive + debugprofilestop() - aura_env.debuffs[spell].lastSwitch + aura_env.debuffs[spell].lastSwitch = debugprofilestop() + elseif subEvent == "SPELL_AURA_REMOVED" and aura_env.debuffs[spell] then + aura_env.debuffs[spell].active = false + aura_env.debuffs[spell].timeActive = aura_env.debuffs[spell].timeActive + debugprofilestop() - aura_env.debuffs[spell].lastSwitch + aura_env.debuffs[spell].lastSwitch = debugprofilestop() + end + end + end + + -- debug print pls + for k,v in pairs(aura_env.buffs) do + -- print(k,v) + if type(v) == "table" then + for k2,v2 in pairs(v) do + -- print(k2,v2) + if type(v2) == "table" then + for k3,v3 in pairs(v2) do + -- print(k3,v3) + end + end + end + end + end + +end + +--DISPLAY +function() + aura_env.combatTime = (debugprofilestop() - aura_env.startCombat) / 1000 + local output = aura_env.formatTime(aura_env.combatTime) .. "\n" + aura_env.getColor(1) + for k,v in pairs(aura_env.buffs) do + + -- DEBUG + -- print(k) + -- for k2,v2 in pairs(v) do + -- print(k2, v2) + -- end + -- print("DEBUG TIME", debugprofilestop()) + -- print("END" .. "\n") + + local totalActiveTime = 0 + if v.active == true then + totalActiveTime = totalActiveTime + debugprofilestop() - v.lastSwitch + v.timeActive + else + totalActiveTime = totalActiveTime + v.timeActive + end + + output = string.format("%s %s%20s %10s %10s\n", output, aura_env.getColor(1), GetSpellInfo(k), aura_env.formatTime(totalActiveTime / 1000), string.format("%.2f%%", ((totalActiveTime / 1000) / aura_env.combatTime) * 100)) + -- output = output .. aura_env.getColor(1) .. GetSpellInfo(k) .. " " .. aura_env.formatTime(totalActiveTime / 1000) .. " " .. string.format("%.2f%%", ((totalActiveTime / 1000) / aura_env.combatTime) * 100) .. "\n" + end + + for k,v in pairs(aura_env.debuffs) do + + -- DEBUG + -- print(k) + for k2,v2 in pairs(v) do + -- print(k2, v2) + end + -- print("DEBUG TIME", debugprofilestop()) + -- print("END" .. "\n") + + local totalActiveTime = 0 + if v.active == true then + totalActiveTime = totalActiveTime + debugprofilestop() - v.lastSwitch + v.timeActive + else + totalActiveTime = totalActiveTime + v.timeActive + end + output = output .. aura_env.getColor(2) + if k == 233490 or (k >= 233496 and k <= 233499) then + if k == 233490 then + output = output .. GetSpellInfo(k) .. " 1" + elseif k >= 233496 and k <= 233499 then + output = output .. GetSpellInfo(k) .. " " .. (k % 233496) + 2 + end + else + output = output .. GetSpellInfo(k) + end + output = output .. " " .. aura_env.formatTime(totalActiveTime / 1000) .. " " .. string.format("%.2f%%", ((totalActiveTime / 1000) / aura_env.combatTime) * 100) .. "\n" + end + return output +end + +--INIT +aura_env.buffs = {} +aura_env.debuffs = {} +aura_env.combatTime = 0 +aura_env.startCombat = 0 + +aura_env.formatTime = function(time) + local res, m, s = tonumber(string.format("%d", time)), 0, 0 + while res >= 60 do + m = m + 1 + res = res - 60 + end + s = res + if s < 10 then + s = string.format("0%d", s) + end + if type(s) ~= "string" then tostring(s) end + return string.format("%d:%s", m, s) +end + +aura_env.getColor = function(mode) + -- ff78cb00 + local output = "\124c" + local colors = {} + if mode == 1 then + colors = {aura_env.config.bcolor[4], aura_env.config.bcolor[1], aura_env.config.bcolor[2], aura_env.config.bcolor[3]} + elseif mode == 2 then + colors = {aura_env.config.dcolor[4], aura_env.config.dcolor[1], aura_env.config.dcolor[2], aura_env.config.dcolor[3]} + end + local a, r, g, b = "00", "00", "00", "00" + + a = string.format("%x", colors[1] * 255) + r = string.format("%x", colors[2] * 255) + g = string.format("%x", colors[3] * 255) + b = string.format("%x", colors[4] * 255) + + + if string.len(a) == 1 then a = "0" .. a end + if string.len(r) == 1 then r = "0" .. r end + if string.len(g) == 1 then g = "0" .. g end + if string.len(b) == 1 then b = "0" .. b end + + output = output .. a .. r .. g .. b + return output end \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/Buff Me Daddy.lua b/WeakAuras/Projects/ByExp/Fivver Stuff/Buff Me Daddy.lua similarity index 97% rename from Complete Projects/Fivver Stuff/Buff Me Daddy.lua rename to WeakAuras/Projects/ByExp/Fivver Stuff/Buff Me Daddy.lua index 7e25ec7..c3f2aa4 100644 --- a/Complete Projects/Fivver Stuff/Buff Me Daddy.lua +++ b/WeakAuras/Projects/ByExp/Fivver Stuff/Buff Me Daddy.lua @@ -1,127 +1,127 @@ ---COMBAT_LOG_EVENT_UNFILTERED ADD_BUFF REMOVE_BUFF ---https://pastebin.com/4xyHRftN -function(e, ...) - if e == "COMBAT_LOG_EVENT_UNFILTERED" then - local se = select(2, ...) - if se == "SPELL_AURA_APPLIED" or se == "SPELL_AURA_REMOVED" then - aura_env.scanBuffs() - end - elseif e == "ADD_BUFF" then - local msg = select(1, ...) - local arg = select(2, ...) - if msg then - if not WeakAurasSaved.CustomTrash.BuffButtons.Buffs[msg] then - WeakAurasSaved.CustomTrash.BuffButtons.Buffs[msg] = {["active"] = false} - if arg then - WeakAurasSaved.CustomTrash.BuffButtons.Buffs[msg].group = arg - if not WeakAurasSaved.CustomTrash.BuffButtons.Groups[arg] then WeakAurasSaved.CustomTrash.BuffButtons.Groups[arg] = {["active"] = 0, ["shown"] = true} end - end - print(msg, "added") - else - print(msg, "already exists") - end - end - aura_env.scanBuffs() - elseif e == "REMOVE_BUFF" then - local msg = select(1, ...) - if msg and WeakAurasSaved.CustomTrash.BuffButtons.Buffs[msg] then - WeakAurasSaved.CustomTrash.BuffButtons.Buffs[msg] = nil - print(msg, "removed") - else - print(msg, WeakAurasSaved.CustomTrash.BuffButtons.Buffs[msg]) - print("Cannot remove", msg) - end - aura_env.scanBuffs() - end -end - ---INIT -if not WeakAurasSaved.CustomTrash then WeakAurasSaved.CustomTrash = {} end -if not WeakAurasSaved.CustomTrash.BuffButtons then WeakAurasSaved.CustomTrash.BuffButtons = {} end -if not WeakAurasSaved.CustomTrash.BuffButtons.Buffs then WeakAurasSaved.CustomTrash.BuffButtons.Buffs = {} end -if not WeakAurasSaved.CustomTrash.BuffButtons.Buttons then WeakAurasSaved.CustomTrash.BuffButtons.Buttons = {} end -if not WeakAurasSaved.CustomTrash.BuffButtons.Groups then WeakAurasSaved.CustomTrash.BuffButtons.Groups = {} end -aura_env.buttons = 0 - -aura_env.scanBuffs = function() - for k,v in pairs(WeakAurasSaved.CustomTrash.BuffButtons.Buffs) do - v.active = false - end - for i = 1, 40 do - local name = UnitBuff("player", i) - print(name) - if WeakAurasSaved.CustomTrash.BuffButtons.Buffs[name] then - WeakAurasSaved.CustomTrash.BuffButtons.Buffs[name].active = true - end - if not name then break end - end - aura_env.refreshButtons() -end - -aura_env.resortButtons = function() - aura_env.buttons = 0 - for k,v in pairs(WeakAurasSaved.CustomTrash.BuffButtons.Buttons) do - if v:IsShown() == true then - if not WeakAurasSaved.CustomTrash.BuffButtons.Buffs[k] then - v:Hide() - else - v:SetPoint("CENTER", aura_env.region, "CENTER", aura_env.buttons * aura_env.config.size, 0) - aura_env.buttons = aura_env.buttons + 1 - end - end - end -end - -aura_env.refreshButtons = function() - for k,v in pairs(WeakAurasSaved.CustomTrash.BuffButtons.Buffs) do - if not WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k] or not WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k][0] then - WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k] = CreateFrame("Button", "buton", aura_env.region, "SecureActionButtonTemplate") - WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k]:SetAttribute("type", "macro") - WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k]:RegisterForClicks("LeftButtonDown") - WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k]:Show() - WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k]:SetPoint("CENTER", aura_env.region, "CENTER", aura_env.buttons * aura_env.config.size, 0) - end - WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k]:SetAttribute("macrotext", format("/use %s", k)) - WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k]:SetSize(aura_env.config.size, aura_env.config.size) - end - for k,v in pairs(WeakAurasSaved.CustomTrash.BuffButtons.Buffs) do - if v.active == false then - local texture = GetItemIcon(k) or GetSpellTexture(k) - if not GetSpellTexture(k) then - local count = GetItemCount(k) - if not WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k].Text then WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k].Text = WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k]:CreateFontString("ItemCount", "ARTWORK") end - WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k].Text:SetFont("Fonts\\FRIZQT__.TTF", aura_env.config.size / 2, "OUTLINE, MONOCHROME") - WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k].Text:SetPoint("CENTER", WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k], "CENTER") - WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k].Text:SetText(count) - WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k].Text:Show() - end - WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k]:SetNormalTexture(texture) - WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k]:Show() - ActionButton_ShowOverlayGlow(WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k]) - else - WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k]:Hide() - end - end - aura_env.resortButtons() -end - -for k,v in pairs(WeakAurasSaved.CustomTrash.BuffButtons.Buttons) do - if k[0] then - print(k,v) - v:SetSize(aura_env.config.size, aura_env.config.size) - ActionButton_HideOverlayGlow(k) - end -end -aura_env.scanBuffs() - - ---INIT -local xsize, ysize = aura_env.region:GetSize() -if not aura_env.button then aura_env.button = CreateFrame("Button", "buton", aura_env.region, "SecureActionButtonTemplate") end -if aura_env.button then - aura_env.button:SetPoint("CENTER", aura_env.region, "CENTER") - aura_env.button:SetSize(xsize, ysize) - aura_env.button:SetAttribute("type", "macro") - aura_env.button:RegisterForClicks("LeftButtonDown") - aura_env.button:SetAttribute("macrotext", format("/use %s", aura_env.id)) +--COMBAT_LOG_EVENT_UNFILTERED ADD_BUFF REMOVE_BUFF +--https://pastebin.com/4xyHRftN +function(e, ...) + if e == "COMBAT_LOG_EVENT_UNFILTERED" then + local se = select(2, ...) + if se == "SPELL_AURA_APPLIED" or se == "SPELL_AURA_REMOVED" then + aura_env.scanBuffs() + end + elseif e == "ADD_BUFF" then + local msg = select(1, ...) + local arg = select(2, ...) + if msg then + if not WeakAurasSaved.CustomTrash.BuffButtons.Buffs[msg] then + WeakAurasSaved.CustomTrash.BuffButtons.Buffs[msg] = {["active"] = false} + if arg then + WeakAurasSaved.CustomTrash.BuffButtons.Buffs[msg].group = arg + if not WeakAurasSaved.CustomTrash.BuffButtons.Groups[arg] then WeakAurasSaved.CustomTrash.BuffButtons.Groups[arg] = {["active"] = 0, ["shown"] = true} end + end + print(msg, "added") + else + print(msg, "already exists") + end + end + aura_env.scanBuffs() + elseif e == "REMOVE_BUFF" then + local msg = select(1, ...) + if msg and WeakAurasSaved.CustomTrash.BuffButtons.Buffs[msg] then + WeakAurasSaved.CustomTrash.BuffButtons.Buffs[msg] = nil + print(msg, "removed") + else + print(msg, WeakAurasSaved.CustomTrash.BuffButtons.Buffs[msg]) + print("Cannot remove", msg) + end + aura_env.scanBuffs() + end +end + +--INIT +if not WeakAurasSaved.CustomTrash then WeakAurasSaved.CustomTrash = {} end +if not WeakAurasSaved.CustomTrash.BuffButtons then WeakAurasSaved.CustomTrash.BuffButtons = {} end +if not WeakAurasSaved.CustomTrash.BuffButtons.Buffs then WeakAurasSaved.CustomTrash.BuffButtons.Buffs = {} end +if not WeakAurasSaved.CustomTrash.BuffButtons.Buttons then WeakAurasSaved.CustomTrash.BuffButtons.Buttons = {} end +if not WeakAurasSaved.CustomTrash.BuffButtons.Groups then WeakAurasSaved.CustomTrash.BuffButtons.Groups = {} end +aura_env.buttons = 0 + +aura_env.scanBuffs = function() + for k,v in pairs(WeakAurasSaved.CustomTrash.BuffButtons.Buffs) do + v.active = false + end + for i = 1, 40 do + local name = UnitBuff("player", i) + print(name) + if WeakAurasSaved.CustomTrash.BuffButtons.Buffs[name] then + WeakAurasSaved.CustomTrash.BuffButtons.Buffs[name].active = true + end + if not name then break end + end + aura_env.refreshButtons() +end + +aura_env.resortButtons = function() + aura_env.buttons = 0 + for k,v in pairs(WeakAurasSaved.CustomTrash.BuffButtons.Buttons) do + if v:IsShown() == true then + if not WeakAurasSaved.CustomTrash.BuffButtons.Buffs[k] then + v:Hide() + else + v:SetPoint("CENTER", aura_env.region, "CENTER", aura_env.buttons * aura_env.config.size, 0) + aura_env.buttons = aura_env.buttons + 1 + end + end + end +end + +aura_env.refreshButtons = function() + for k,v in pairs(WeakAurasSaved.CustomTrash.BuffButtons.Buffs) do + if not WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k] or not WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k][0] then + WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k] = CreateFrame("Button", "buton", aura_env.region, "SecureActionButtonTemplate") + WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k]:SetAttribute("type", "macro") + WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k]:RegisterForClicks("LeftButtonDown") + WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k]:Show() + WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k]:SetPoint("CENTER", aura_env.region, "CENTER", aura_env.buttons * aura_env.config.size, 0) + end + WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k]:SetAttribute("macrotext", format("/use %s", k)) + WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k]:SetSize(aura_env.config.size, aura_env.config.size) + end + for k,v in pairs(WeakAurasSaved.CustomTrash.BuffButtons.Buffs) do + if v.active == false then + local texture = GetItemIcon(k) or GetSpellTexture(k) + if not GetSpellTexture(k) then + local count = GetItemCount(k) + if not WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k].Text then WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k].Text = WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k]:CreateFontString("ItemCount", "ARTWORK") end + WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k].Text:SetFont("Fonts\\FRIZQT__.TTF", aura_env.config.size / 2, "OUTLINE, MONOCHROME") + WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k].Text:SetPoint("CENTER", WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k], "CENTER") + WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k].Text:SetText(count) + WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k].Text:Show() + end + WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k]:SetNormalTexture(texture) + WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k]:Show() + ActionButton_ShowOverlayGlow(WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k]) + else + WeakAurasSaved.CustomTrash.BuffButtons.Buttons[k]:Hide() + end + end + aura_env.resortButtons() +end + +for k,v in pairs(WeakAurasSaved.CustomTrash.BuffButtons.Buttons) do + if k[0] then + print(k,v) + v:SetSize(aura_env.config.size, aura_env.config.size) + ActionButton_HideOverlayGlow(k) + end +end +aura_env.scanBuffs() + + +--INIT +local xsize, ysize = aura_env.region:GetSize() +if not aura_env.button then aura_env.button = CreateFrame("Button", "buton", aura_env.region, "SecureActionButtonTemplate") end +if aura_env.button then + aura_env.button:SetPoint("CENTER", aura_env.region, "CENTER") + aura_env.button:SetSize(xsize, ysize) + aura_env.button:SetAttribute("type", "macro") + aura_env.button:RegisterForClicks("LeftButtonDown") + aura_env.button:SetAttribute("macrotext", format("/use %s", aura_env.id)) end \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/FO1B8D1F40B6 - Conductive Ink.lua b/WeakAuras/Projects/ByExp/Fivver Stuff/FO1B8D1F40B6 - Conductive Ink.lua similarity index 97% rename from Complete Projects/Fivver Stuff/FO1B8D1F40B6 - Conductive Ink.lua rename to WeakAuras/Projects/ByExp/Fivver Stuff/FO1B8D1F40B6 - Conductive Ink.lua index 45569ee..44be28d 100644 --- a/Complete Projects/Fivver Stuff/FO1B8D1F40B6 - Conductive Ink.lua +++ b/WeakAuras/Projects/ByExp/Fivver Stuff/FO1B8D1F40B6 - Conductive Ink.lua @@ -1,357 +1,357 @@ ---CLEU PLAYER_TARGET_CHANGED PLAYER_FOCUS_CHANGED -function(e, ...) - if aura_env.config.tsuenable == false then - local se = select(2, ...) - if se == "SPELL_AURA_APPLIED_DOSE" or e == "PLAYER_TARGET_CHANGED" then - aura_env.owndebuff = {["stacks"] = 0, ["damage"] = 0,} - aura_env.totaldebuff = {["stacks"] = 0, ["damage"] = 0,} - aura_env.damagepercentage = 0 - local unit = "target" - if aura_env.config.tar == 2 then unit = "focus" elseif aura_env.config.tar == 3 then unit = "Boss1" end - local bossmax = UnitHealthMax(unit) - if aura_env.config.pdmg == true then - for i = 1, 200 do - local name = UnitDebuff(unit, i) - if name == "Conductive Ink" then - local caster = select(7, UnitDebuff(unit, i)) - local stacks = select(3, UnitDebuff(unit, i)) - aura_env.totaldebuff.stacks = aura_env.totaldebuff.stacks + stacks - aura_env.myTooltip:SetUnitDebuff(unit, i) - local text = _G["MyAddOnTooltipTextLeft2"]:GetText() - if text:match("Falling below %d*%% health will cause") then - local damage = text:match("inflict (%d+%,?%d*)") - damage = damage:gsub("%,", "") - damage = damage:gsub(" ", "") - damage = tonumber(damage) - aura_env.totaldebuff.damage = aura_env.totaldebuff.damage + damage - if caster == "player" then aura_env.owndebuff.damage = damage; aura_env.owndebuff.stacks = stacks end - end - elseif not name then break end - end - else - for i = 1, 200 do - local name = UnitDebuff(unit, i) - if name == "Conductive Ink" then - aura_env.totaldebuff.stacks = aura_env.totaldebuff.stacks + select(3, UnitDebuff(unit, i)) - aura_env.myTooltip:SetUnitDebuff(unit, i) - local text = _G["MyAddOnTooltipTextLeft2"]:GetText() - if text:match("Falling below %d*%% health will cause") then - aura_env.totaldebuff.damage = text:match("inflict (%d+%,?%d*)") - aura_env.totaldebuff.damage = aura_env.totaldebuff.damage:gsub("%,", "") - aura_env.totaldebuff.damage = aura_env.totaldebuff.damage:gsub(" ", "") - aura_env.totaldebuff.damage = tonumber(aura_env.totaldebuff.damage) - end - break - elseif not name then break end - end - end - aura_env.damagepercentage = aura_env.round(((aura_env.totaldebuff.damage / bossmax) * 100), 2) - return true - end - end -end - ---TSU ---CLEU PLAYER_TARGET_CHANGED PLAYER_FOCUS_CHANGED -function(allstates, e, ...) - if aura_env.config.tsuenable == true then - if InCombatLockdown() == true then - --Base setup - local unit = "target" - if not aura_env.data then aura_env.data = {} end - local crit = false - local function update_allstates(data, unit) - local maxdmg, maxstack = 0, 0 - local totaldmg, totalstack = 0, 0 - --Get max and total damage - for k,v in pairs(data) do - if v.d > maxdmg then - maxdmg = v.d - end - if v.s > maxstack then - maxstack = v.s - end - totaldmg = totaldmg + v.d - totalstack = totalstack + v.s - end - --Get damage in boss % - local perc = 0 - local pp = 0 - local islow = false - if UnitExists(unit) then - local hp, maxhp = UnitHealth(unit), UnitHealthMax(unit) - pp = hp/maxhp - if pp < 0.3 then islow = true end - perc = aura_env.round(((totaldmg / maxhp) * 100), 2) - end - --Store all members in allstates - for k,v in pairs(data) do - allstates[k] = { - show = true, - changed = true, - resort = true, - progressType = "static", - caster = k, - class = v.c, - value = v.d, - total = maxdmg, - index = v.d, - stacks = v.s, - crit = v.cr, - } - end - --Total bar control - if UnitExists(unit) then - allstates[1] = { - show = true, - changed = true, - resort = true, - progressType = "static", - caster = "Total", - class = 5, --priest; White - value = totaldmg, - total = totaldmg, - index = totaldmg + 1, - stacks = totalstack, - percent = perc, - } - if islow == true then - allstates[1].class = 15 - end - end - end - --Debug and options - local command = UnitDebuff; if aura_env.config.debug == true then command = aura_env.UnitDebuffC end - if aura_env.config.tar == 2 then unit = "focus" elseif aura_env.config.tar == 3 then unit = "Boss1" end - --Trying to store info of debuff into data table from , looking for damage, stacks and caster, also included debug - if UnitExists(unit) then - if e == "PLAYER_TARGET_CHANGED" or e == "PLAYER_FOCUS_CHANGED" then - for k,v in pairs(allstates) do - v.show = false - v.changed = true - end - aura_env.data = {} - if UnitExists(unit) then - local hp, maxhp = UnitHealth(unit), UnitHealthMax(unit) - for i = 1, 100 do - local name = command(unit, i) - if name == "Conductive Ink" then - local caster = select(7, command(unit, i)) - caster = UnitName(caster) - local stacks = select(3, command(unit, i)) - if aura_env.config.debug == false then - aura_env.myTooltip:SetUnitDebuff(unit, i) - local text = _G["MyAddOnTooltipTextLeft2"]:GetText() - if text:match("Falling below %d*%% health will cause") then - local damage = text:match("inflict (%d+%,?%d*)") - damage = damage:gsub("%,", "") - damage = damage:gsub(" ", "") - damage = tonumber(damage) - aura_env.data[caster] = { - ["d"] = damage, - ["s"] = stacks, - ["c"] = select(3, UnitClass(caster)), - } - end - else - local damage = i * 523427 - aura_env.data[caster] = { - ["d"] = damage, - ["s"] = stacks, - ["c"] = select(4, command(unit, i)), - } - end - elseif not name then - break - end - end - update_allstates(aura_env.data, unit) - end - elseif e == "COMBAT_LOG_EVENT_UNFILTERED" then - local se = select(2, ...) - local hp, maxhp = UnitHealth(unit), UnitHealthMax(unit) - --Looking for debuff info upon applying new stack, to update data table - if se == "SPELL_AURA_APPLIED_DOSE" then - for i = 1, 100 do - local name = command(unit, i) - if name == "Conductive Ink" then - local caster = select(7, command(unit, i)) - caster = UnitName(caster) - local stacks = select(3, command(unit, i)) - if aura_env.config.debug == false then - aura_env.myTooltip:SetUnitDebuff(unit, i) - local text = _G["MyAddOnTooltipTextLeft2"]:GetText() - if text:match("Falling below %d*%% health will cause") then - local damage = text:match("inflict (%d+%,?%d*)") - damage = damage:gsub("%,", "") - damage = damage:gsub(" ", "") - damage = tonumber(damage) - aura_env.data[caster] = { - ["d"] = damage, - ["s"] = stacks, - ["c"] = select(3, UnitClass(caster)), - } - end - else - local damage = i * 12312 - aura_env.data[caster] = { - ["d"] = damage, - ["s"] = stacks, - ["c"] = select(4, command(unit, i)), - } - end - elseif not name then - break - end - update_allstates(aura_env.data, unit) - end - --Looking for damage done by debuff at 30% and storing into data as new damage - elseif se == "SPELL_DAMAGE" and select(13, ...) == "Conductive Ink" then - local caster = select(5, ...) - local hit = select(15, ...) - local crit = select(21, ...) - if aura_env.data[caster] then - aura_env.data[caster].d = hit - aura_env.data[caster].cr = crit - update_allstates(aura_env.data, unit) - end - end - end - end - return true - end - end -end - ---CUSTOM TRIGGER -function(t) - if aura_env.config.tsuenable == false then return t[1] and t[2] elseif aura_env.config.tsuenable == true then return t[3] and t[2] end -end - ---COLOR ANIMATION -function() - if aura_env.statee then - return aura_env.classColor(aura_env.statee.class) - end -end - ---DISPLAY -function() - if aura_env.config.tsuenable == false then - if aura_env.config.pdmg == true then - if aura_env.config.sh == true then aura_env.owndebuff.damage = aura_env.shorten(aura_env.owndebuff.damage); aura_env.totaldebuff.damage = aura_env.shorten(aura_env.totaldebuff.damage) end - aura_env.region.text2:SetText(aura_env.owndebuff.stacks .. "\n" .. aura_env.owndebuff.damage .. "\n" .. aura_env.totaldebuff.stacks .. "\n" .. aura_env.totaldebuff.damage .. "\n" .. aura_env.damagepercentage .. "%") - if aura_env.config.stext == true then aura_env.region.text3:SetText("Player stacks\nPlayer damage\nTotal stacks\nTotal damage\nDamage in %") else aura_env.region.text3:SetText("") end - else - if aura_env.config.sh == true then aura_env.totaldebuff.damage = aura_env.shorten(aura_env.totaldebuff.damage) end - aura_env.region.text2:SetText(aura_env.totaldebuff.stacks .. "\n" .. aura_env.totaldebuff.damage .. "\n" .. aura_env.damagepercentage .. "%") - if aura_env.config.stext == true then aura_env.region.text3:SetText("Total stacks\nTotal damage\nDamage in %") else aura_env.region.text3:SetText("") end - end - else - if aura_env.statee.caster == "Total" then - return aura_env.shorten(aura_env.statee.value) .. " - " .. aura_env.statee.stacks .. " - " .. aura_env.statee.percent .. "%" - else - if aura_env.statee.crit == true then - return aura_env.statee.stacks .. " - " .. aura_env.shorten(aura_env.statee.value) .. "(C)" - else - return aura_env.statee.stacks .. " - " .. aura_env.shorten(aura_env.statee.value) - end - end - end -end - ---INIT -aura_env.myTooltip = CreateFrame("GameTooltip", "MyAddOnTooltip", UIParent, "GameTooltipTemplate") -aura_env.myTooltip:SetOwner(UIParent, "ANCHOR_NONE") -aura_env.owndebuff = {["stacks"] = 0, ["damage"] = 0,} -aura_env.totaldebuff = {["stacks"] = 0, ["damage"] = 0,} - -if aura_env.config.tsuenable == false then - if not aura_env.region.text2 then - local text2 = aura_env.region:CreateFontString(nil, aura_env.region) - aura_env.region.text2 = text2 - end - local font, size, flags = aura_env.region.text:GetFont() - aura_env.region.text2:SetFont(font, size, flags) - aura_env.region.text2:SetTextColor(aura_env.config.color[1], aura_env.config.color[2], aura_env.config.color[3], aura_env.config.color[4]) - aura_env.region.text2:SetPoint("CENTER", aura_env.region, "CENTER", aura_env.config.x, 0) - aura_env.region.text2:SetText("") - aura_env.region.text2:Show() - - if not aura_env.region.text3 then - local text3 = aura_env.region:CreateFontString(nil, aura_env.region) - aura_env.region.text3 = text3 - end - local font, size, flags = aura_env.region.text:GetFont() - aura_env.region.text3:SetFont(font, size, flags) - aura_env.region.text3:SetTextColor(aura_env.config.color[1], aura_env.config.color[2], aura_env.config.color[3], aura_env.config.color[4]) - aura_env.region.text3:SetPoint("CENTER", aura_env.region, "CENTER", - aura_env.config.x, 0) - aura_env.region.text3:SetText("") - aura_env.region.text3:Show() - aura_env.region.bar:Hide() -end - -if aura_env.config.tsuenable == true and aura_env.region.text2 then aura_env.region.text2:Hide() end -if aura_env.config.tsuenable == true and aura_env.region.text3 then aura_env.region.text3:Hide() end -if aura_env.config.tsuenable == true and aura_env.region.bar then aura_env.region.bar:Show() end - -aura_env.shorten = function(val) - local function round(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var - end - local n = 2 - if val < 1e3 then - return round(val, n) - elseif val > 1e3 and val < 1e6 then - return round(val / 1e3, n) .. "k" - elseif val > 1e6 and val < 1e9 then - return round(val / 1e6, n) .. "M" - elseif val > 1e9 then - return round(val / 1e9, n) .. "G" - end -end -aura_env.round = function(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var -end -aura_env.classColor = function(class) - if class == 1 then return 0.78, 0.61, 0.43 - elseif class == 2 then return 0.96, 0.55, 0.73 - elseif class == 3 then return 0.67, 0.83, 0.45 - elseif class == 4 then return 1, 0.96, 0.41, 1 - elseif class == 5 then return 1, 1, 1 - elseif class == 6 then return 0.77, 0.12, 0.23 - elseif class == 7 then return 0, 0.44, 0.87 - elseif class == 8 then return 0.25, 0.78, 0.92 - elseif class == 9 then return 0.53, 0.53, 0.93 - elseif class == 10 then return 0, 1, 0.59 - elseif class == 11 then return 1, 0.49, 0.04 - elseif class == 12 then return 0.64, 0.19, 0.79 - elseif class == 15 then return 0, 1, 0 - else return 1, 1, 1 end -end ---TESTING ---Conductive Ink 1500960 1 Magic 120 119774.845 player false false 302565 false false true false 1 -aura_env.UnitDebuffC = function(unit, i) - if i == 1 then return "Conductive Ink", 1500960, 1, 2, 120, 119774.845, "Pinko" - elseif i == 1 then return "Conductive Ink", 1500960, 3, 4, 120, 119774.845, "Billy" - elseif i == 2 then return "Conductive Ink", 1500960, 7, 7, 120, 119774.845, "Mary" - elseif i == 3 then return "Conductive Ink", 1500960, 35, 11, 120, 119774.845, "Anna" - elseif i == 4 then return "Conductive Ink", 1500960, 8, 6, 120, 119774.845, "John" - elseif i == 5 then return "Conductive Ink", 1500960, 72, 2, 120, 119774.845, "Frank" - elseif i == 6 then return "Conductive Ink", 1500960, 25, 7, 120, 119774.845, "Emma" - elseif i == 7 then return "Conductive Ink", 1500960, 45, 8, 120, 119774.845, "Sophia" - elseif i == 8 then return "Conductive Ink", 1500960, 37, 5, 120, 119774.845, "Henry" - elseif i == 9 then return "Conductive Ink", 1500960, 4, 3, 120, 119774.845, "Ethan" - elseif i == 10 then return "Conductive Ink", 1500960, 1, 1, 120, 119774.845, "Michael" - end +--CLEU PLAYER_TARGET_CHANGED PLAYER_FOCUS_CHANGED +function(e, ...) + if aura_env.config.tsuenable == false then + local se = select(2, ...) + if se == "SPELL_AURA_APPLIED_DOSE" or e == "PLAYER_TARGET_CHANGED" then + aura_env.owndebuff = {["stacks"] = 0, ["damage"] = 0,} + aura_env.totaldebuff = {["stacks"] = 0, ["damage"] = 0,} + aura_env.damagepercentage = 0 + local unit = "target" + if aura_env.config.tar == 2 then unit = "focus" elseif aura_env.config.tar == 3 then unit = "Boss1" end + local bossmax = UnitHealthMax(unit) + if aura_env.config.pdmg == true then + for i = 1, 200 do + local name = UnitDebuff(unit, i) + if name == "Conductive Ink" then + local caster = select(7, UnitDebuff(unit, i)) + local stacks = select(3, UnitDebuff(unit, i)) + aura_env.totaldebuff.stacks = aura_env.totaldebuff.stacks + stacks + aura_env.myTooltip:SetUnitDebuff(unit, i) + local text = _G["MyAddOnTooltipTextLeft2"]:GetText() + if text:match("Falling below %d*%% health will cause") then + local damage = text:match("inflict (%d+%,?%d*)") + damage = damage:gsub("%,", "") + damage = damage:gsub(" ", "") + damage = tonumber(damage) + aura_env.totaldebuff.damage = aura_env.totaldebuff.damage + damage + if caster == "player" then aura_env.owndebuff.damage = damage; aura_env.owndebuff.stacks = stacks end + end + elseif not name then break end + end + else + for i = 1, 200 do + local name = UnitDebuff(unit, i) + if name == "Conductive Ink" then + aura_env.totaldebuff.stacks = aura_env.totaldebuff.stacks + select(3, UnitDebuff(unit, i)) + aura_env.myTooltip:SetUnitDebuff(unit, i) + local text = _G["MyAddOnTooltipTextLeft2"]:GetText() + if text:match("Falling below %d*%% health will cause") then + aura_env.totaldebuff.damage = text:match("inflict (%d+%,?%d*)") + aura_env.totaldebuff.damage = aura_env.totaldebuff.damage:gsub("%,", "") + aura_env.totaldebuff.damage = aura_env.totaldebuff.damage:gsub(" ", "") + aura_env.totaldebuff.damage = tonumber(aura_env.totaldebuff.damage) + end + break + elseif not name then break end + end + end + aura_env.damagepercentage = aura_env.round(((aura_env.totaldebuff.damage / bossmax) * 100), 2) + return true + end + end +end + +--TSU +--CLEU PLAYER_TARGET_CHANGED PLAYER_FOCUS_CHANGED +function(allstates, e, ...) + if aura_env.config.tsuenable == true then + if InCombatLockdown() == true then + --Base setup + local unit = "target" + if not aura_env.data then aura_env.data = {} end + local crit = false + local function update_allstates(data, unit) + local maxdmg, maxstack = 0, 0 + local totaldmg, totalstack = 0, 0 + --Get max and total damage + for k,v in pairs(data) do + if v.d > maxdmg then + maxdmg = v.d + end + if v.s > maxstack then + maxstack = v.s + end + totaldmg = totaldmg + v.d + totalstack = totalstack + v.s + end + --Get damage in boss % + local perc = 0 + local pp = 0 + local islow = false + if UnitExists(unit) then + local hp, maxhp = UnitHealth(unit), UnitHealthMax(unit) + pp = hp/maxhp + if pp < 0.3 then islow = true end + perc = aura_env.round(((totaldmg / maxhp) * 100), 2) + end + --Store all members in allstates + for k,v in pairs(data) do + allstates[k] = { + show = true, + changed = true, + resort = true, + progressType = "static", + caster = k, + class = v.c, + value = v.d, + total = maxdmg, + index = v.d, + stacks = v.s, + crit = v.cr, + } + end + --Total bar control + if UnitExists(unit) then + allstates[1] = { + show = true, + changed = true, + resort = true, + progressType = "static", + caster = "Total", + class = 5, --priest; White + value = totaldmg, + total = totaldmg, + index = totaldmg + 1, + stacks = totalstack, + percent = perc, + } + if islow == true then + allstates[1].class = 15 + end + end + end + --Debug and options + local command = UnitDebuff; if aura_env.config.debug == true then command = aura_env.UnitDebuffC end + if aura_env.config.tar == 2 then unit = "focus" elseif aura_env.config.tar == 3 then unit = "Boss1" end + --Trying to store info of debuff into data table from , looking for damage, stacks and caster, also included debug + if UnitExists(unit) then + if e == "PLAYER_TARGET_CHANGED" or e == "PLAYER_FOCUS_CHANGED" then + for k,v in pairs(allstates) do + v.show = false + v.changed = true + end + aura_env.data = {} + if UnitExists(unit) then + local hp, maxhp = UnitHealth(unit), UnitHealthMax(unit) + for i = 1, 100 do + local name = command(unit, i) + if name == "Conductive Ink" then + local caster = select(7, command(unit, i)) + caster = UnitName(caster) + local stacks = select(3, command(unit, i)) + if aura_env.config.debug == false then + aura_env.myTooltip:SetUnitDebuff(unit, i) + local text = _G["MyAddOnTooltipTextLeft2"]:GetText() + if text:match("Falling below %d*%% health will cause") then + local damage = text:match("inflict (%d+%,?%d*)") + damage = damage:gsub("%,", "") + damage = damage:gsub(" ", "") + damage = tonumber(damage) + aura_env.data[caster] = { + ["d"] = damage, + ["s"] = stacks, + ["c"] = select(3, UnitClass(caster)), + } + end + else + local damage = i * 523427 + aura_env.data[caster] = { + ["d"] = damage, + ["s"] = stacks, + ["c"] = select(4, command(unit, i)), + } + end + elseif not name then + break + end + end + update_allstates(aura_env.data, unit) + end + elseif e == "COMBAT_LOG_EVENT_UNFILTERED" then + local se = select(2, ...) + local hp, maxhp = UnitHealth(unit), UnitHealthMax(unit) + --Looking for debuff info upon applying new stack, to update data table + if se == "SPELL_AURA_APPLIED_DOSE" then + for i = 1, 100 do + local name = command(unit, i) + if name == "Conductive Ink" then + local caster = select(7, command(unit, i)) + caster = UnitName(caster) + local stacks = select(3, command(unit, i)) + if aura_env.config.debug == false then + aura_env.myTooltip:SetUnitDebuff(unit, i) + local text = _G["MyAddOnTooltipTextLeft2"]:GetText() + if text:match("Falling below %d*%% health will cause") then + local damage = text:match("inflict (%d+%,?%d*)") + damage = damage:gsub("%,", "") + damage = damage:gsub(" ", "") + damage = tonumber(damage) + aura_env.data[caster] = { + ["d"] = damage, + ["s"] = stacks, + ["c"] = select(3, UnitClass(caster)), + } + end + else + local damage = i * 12312 + aura_env.data[caster] = { + ["d"] = damage, + ["s"] = stacks, + ["c"] = select(4, command(unit, i)), + } + end + elseif not name then + break + end + update_allstates(aura_env.data, unit) + end + --Looking for damage done by debuff at 30% and storing into data as new damage + elseif se == "SPELL_DAMAGE" and select(13, ...) == "Conductive Ink" then + local caster = select(5, ...) + local hit = select(15, ...) + local crit = select(21, ...) + if aura_env.data[caster] then + aura_env.data[caster].d = hit + aura_env.data[caster].cr = crit + update_allstates(aura_env.data, unit) + end + end + end + end + return true + end + end +end + +--CUSTOM TRIGGER +function(t) + if aura_env.config.tsuenable == false then return t[1] and t[2] elseif aura_env.config.tsuenable == true then return t[3] and t[2] end +end + +--COLOR ANIMATION +function() + if aura_env.statee then + return aura_env.classColor(aura_env.statee.class) + end +end + +--DISPLAY +function() + if aura_env.config.tsuenable == false then + if aura_env.config.pdmg == true then + if aura_env.config.sh == true then aura_env.owndebuff.damage = aura_env.shorten(aura_env.owndebuff.damage); aura_env.totaldebuff.damage = aura_env.shorten(aura_env.totaldebuff.damage) end + aura_env.region.text2:SetText(aura_env.owndebuff.stacks .. "\n" .. aura_env.owndebuff.damage .. "\n" .. aura_env.totaldebuff.stacks .. "\n" .. aura_env.totaldebuff.damage .. "\n" .. aura_env.damagepercentage .. "%") + if aura_env.config.stext == true then aura_env.region.text3:SetText("Player stacks\nPlayer damage\nTotal stacks\nTotal damage\nDamage in %") else aura_env.region.text3:SetText("") end + else + if aura_env.config.sh == true then aura_env.totaldebuff.damage = aura_env.shorten(aura_env.totaldebuff.damage) end + aura_env.region.text2:SetText(aura_env.totaldebuff.stacks .. "\n" .. aura_env.totaldebuff.damage .. "\n" .. aura_env.damagepercentage .. "%") + if aura_env.config.stext == true then aura_env.region.text3:SetText("Total stacks\nTotal damage\nDamage in %") else aura_env.region.text3:SetText("") end + end + else + if aura_env.statee.caster == "Total" then + return aura_env.shorten(aura_env.statee.value) .. " - " .. aura_env.statee.stacks .. " - " .. aura_env.statee.percent .. "%" + else + if aura_env.statee.crit == true then + return aura_env.statee.stacks .. " - " .. aura_env.shorten(aura_env.statee.value) .. "(C)" + else + return aura_env.statee.stacks .. " - " .. aura_env.shorten(aura_env.statee.value) + end + end + end +end + +--INIT +aura_env.myTooltip = CreateFrame("GameTooltip", "MyAddOnTooltip", UIParent, "GameTooltipTemplate") +aura_env.myTooltip:SetOwner(UIParent, "ANCHOR_NONE") +aura_env.owndebuff = {["stacks"] = 0, ["damage"] = 0,} +aura_env.totaldebuff = {["stacks"] = 0, ["damage"] = 0,} + +if aura_env.config.tsuenable == false then + if not aura_env.region.text2 then + local text2 = aura_env.region:CreateFontString(nil, aura_env.region) + aura_env.region.text2 = text2 + end + local font, size, flags = aura_env.region.text:GetFont() + aura_env.region.text2:SetFont(font, size, flags) + aura_env.region.text2:SetTextColor(aura_env.config.color[1], aura_env.config.color[2], aura_env.config.color[3], aura_env.config.color[4]) + aura_env.region.text2:SetPoint("CENTER", aura_env.region, "CENTER", aura_env.config.x, 0) + aura_env.region.text2:SetText("") + aura_env.region.text2:Show() + + if not aura_env.region.text3 then + local text3 = aura_env.region:CreateFontString(nil, aura_env.region) + aura_env.region.text3 = text3 + end + local font, size, flags = aura_env.region.text:GetFont() + aura_env.region.text3:SetFont(font, size, flags) + aura_env.region.text3:SetTextColor(aura_env.config.color[1], aura_env.config.color[2], aura_env.config.color[3], aura_env.config.color[4]) + aura_env.region.text3:SetPoint("CENTER", aura_env.region, "CENTER", - aura_env.config.x, 0) + aura_env.region.text3:SetText("") + aura_env.region.text3:Show() + aura_env.region.bar:Hide() +end + +if aura_env.config.tsuenable == true and aura_env.region.text2 then aura_env.region.text2:Hide() end +if aura_env.config.tsuenable == true and aura_env.region.text3 then aura_env.region.text3:Hide() end +if aura_env.config.tsuenable == true and aura_env.region.bar then aura_env.region.bar:Show() end + +aura_env.shorten = function(val) + local function round(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var + end + local n = 2 + if val < 1e3 then + return round(val, n) + elseif val > 1e3 and val < 1e6 then + return round(val / 1e3, n) .. "k" + elseif val > 1e6 and val < 1e9 then + return round(val / 1e6, n) .. "M" + elseif val > 1e9 then + return round(val / 1e9, n) .. "G" + end +end +aura_env.round = function(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var +end +aura_env.classColor = function(class) + if class == 1 then return 0.78, 0.61, 0.43 + elseif class == 2 then return 0.96, 0.55, 0.73 + elseif class == 3 then return 0.67, 0.83, 0.45 + elseif class == 4 then return 1, 0.96, 0.41, 1 + elseif class == 5 then return 1, 1, 1 + elseif class == 6 then return 0.77, 0.12, 0.23 + elseif class == 7 then return 0, 0.44, 0.87 + elseif class == 8 then return 0.25, 0.78, 0.92 + elseif class == 9 then return 0.53, 0.53, 0.93 + elseif class == 10 then return 0, 1, 0.59 + elseif class == 11 then return 1, 0.49, 0.04 + elseif class == 12 then return 0.64, 0.19, 0.79 + elseif class == 15 then return 0, 1, 0 + else return 1, 1, 1 end +end +--TESTING +--Conductive Ink 1500960 1 Magic 120 119774.845 player false false 302565 false false true false 1 +aura_env.UnitDebuffC = function(unit, i) + if i == 1 then return "Conductive Ink", 1500960, 1, 2, 120, 119774.845, "Pinko" + elseif i == 1 then return "Conductive Ink", 1500960, 3, 4, 120, 119774.845, "Billy" + elseif i == 2 then return "Conductive Ink", 1500960, 7, 7, 120, 119774.845, "Mary" + elseif i == 3 then return "Conductive Ink", 1500960, 35, 11, 120, 119774.845, "Anna" + elseif i == 4 then return "Conductive Ink", 1500960, 8, 6, 120, 119774.845, "John" + elseif i == 5 then return "Conductive Ink", 1500960, 72, 2, 120, 119774.845, "Frank" + elseif i == 6 then return "Conductive Ink", 1500960, 25, 7, 120, 119774.845, "Emma" + elseif i == 7 then return "Conductive Ink", 1500960, 45, 8, 120, 119774.845, "Sophia" + elseif i == 8 then return "Conductive Ink", 1500960, 37, 5, 120, 119774.845, "Henry" + elseif i == 9 then return "Conductive Ink", 1500960, 4, 3, 120, 119774.845, "Ethan" + elseif i == 10 then return "Conductive Ink", 1500960, 1, 1, 120, 119774.845, "Michael" + end end \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/FO1F38C4D1A8 - Magus Portals.lua b/WeakAuras/Projects/ByExp/Fivver Stuff/FO1F38C4D1A8 - Magus Portals.lua similarity index 96% rename from Complete Projects/Fivver Stuff/FO1F38C4D1A8 - Magus Portals.lua rename to WeakAuras/Projects/ByExp/Fivver Stuff/FO1F38C4D1A8 - Magus Portals.lua index 865731c..2c8a245 100644 --- a/Complete Projects/Fivver Stuff/FO1F38C4D1A8 - Magus Portals.lua +++ b/WeakAuras/Projects/ByExp/Fivver Stuff/FO1F38C4D1A8 - Magus Portals.lua @@ -1,87 +1,87 @@ ---CHAT_MSG_SAY CHAT_MSG_YELL CHAT_MSG_WHISPER ADD_KEYWORD REMOVE_KEYWORD LIST_KEYWORDS TOGGLE_MAGUS -function(e, msg, sender, ...) - if not aura_env.toggle then aura_env.toggle = 1 end - if not WeakAurasSaved.MagusKeywords then WeakAurasSaved.MagusKeywords = { - ["port"] = 1, - ["portal"] = 1, - ["org"] = 1, - ["og"] = 1, - ["uc"] = 1, - ["under"] = 1, - ["thunder"] = 1, - ["tb"] = 1, - ["wtb"] = 1, - } - end - if e == "CHAT_MSG_SAY" or e == "CHAT_MSG_YELL" or e == "CHAT_MSG_WHISPER" then - local class = select(2, GetPlayerInfoByGUID(select(10, ...))) - if msg and aura_env.toggle == 1 then - msg = msg:lower() - local noRealmSender = sender:match("(.+)-%w+") - for k,v in pairs(WeakAurasSaved.MagusKeywords) do - if msg:match(k) then - local st, en = msg:find(k) - if not (st > 1 and msg:match(".", st - 1) ~= " ") and not (en < strlen(msg) and msg:match(".", en + 1) ~= " ") and class ~= "MAGE" then - InviteUnit(sender) - return true - end - end - end - end - elseif e == "TOGGLE_MAGUS" then - if aura_env.toggle == 0 then - print("Toggling script on") - aura_env.toggle = 1 - else - print("Toggling script off") - aura_env.toggle = 0 - end - elseif e == "ADD_KEYWORD" then - if msg then - print("Adding", msg) - msg = msg:lower() - WeakAurasSaved.MagusKeywords[msg] = 1 - else - print("No keyword provided") - end - elseif e == "LIST_KEYWORDS" then - local test = "" - for k,v in pairs(WeakAurasSaved.MagusKeywords) do - print(k) - test = test .. k .. "\n" - end - message(test) - elseif e == "REMOVE_KEYWORD" then - if msg then - if WeakAurasSaved.MagusKeywords[msg] then - print("Removing", msg) - WeakAurasSaved.MagusKeywords[msg] = nil - else - print(msg, "does not exist in the keyword table") - end - else - print("No keyword provided") - end - end -end - ---INIT -aura_env.button = CreateFrame("Button", "buton", UIParent, "SecureActionButtonTemplate") -aura_env.button:SetAttribute("type", "macro") -aura_env.button:SetPoint("CENTER", UIParent, "CENTER") -aura_env.button:SetWidth(128) -aura_env.button:SetHeight(128) -aura_env.button:SetNormalTexture("interface/icons/inv_misc_enggizmos_rocketchicken.blp") -aura_env.button:SetPushedTexture("interface/icons/inv_misc_enggizmos_rocketchicken.blp") -if not aura_env.toggle then aura_env.toggle = 1 end -if not WeakAurasSaved.MagusKeywords then WeakAurasSaved.MagusKeywords = { - "port", - "portal", - "org", - "og", - "UC", - "under", - "thunder", - "tb", - "wtb", +--CHAT_MSG_SAY CHAT_MSG_YELL CHAT_MSG_WHISPER ADD_KEYWORD REMOVE_KEYWORD LIST_KEYWORDS TOGGLE_MAGUS +function(e, msg, sender, ...) + if not aura_env.toggle then aura_env.toggle = 1 end + if not WeakAurasSaved.MagusKeywords then WeakAurasSaved.MagusKeywords = { + ["port"] = 1, + ["portal"] = 1, + ["org"] = 1, + ["og"] = 1, + ["uc"] = 1, + ["under"] = 1, + ["thunder"] = 1, + ["tb"] = 1, + ["wtb"] = 1, + } + end + if e == "CHAT_MSG_SAY" or e == "CHAT_MSG_YELL" or e == "CHAT_MSG_WHISPER" then + local class = select(2, GetPlayerInfoByGUID(select(10, ...))) + if msg and aura_env.toggle == 1 then + msg = msg:lower() + local noRealmSender = sender:match("(.+)-%w+") + for k,v in pairs(WeakAurasSaved.MagusKeywords) do + if msg:match(k) then + local st, en = msg:find(k) + if not (st > 1 and msg:match(".", st - 1) ~= " ") and not (en < strlen(msg) and msg:match(".", en + 1) ~= " ") and class ~= "MAGE" then + InviteUnit(sender) + return true + end + end + end + end + elseif e == "TOGGLE_MAGUS" then + if aura_env.toggle == 0 then + print("Toggling script on") + aura_env.toggle = 1 + else + print("Toggling script off") + aura_env.toggle = 0 + end + elseif e == "ADD_KEYWORD" then + if msg then + print("Adding", msg) + msg = msg:lower() + WeakAurasSaved.MagusKeywords[msg] = 1 + else + print("No keyword provided") + end + elseif e == "LIST_KEYWORDS" then + local test = "" + for k,v in pairs(WeakAurasSaved.MagusKeywords) do + print(k) + test = test .. k .. "\n" + end + message(test) + elseif e == "REMOVE_KEYWORD" then + if msg then + if WeakAurasSaved.MagusKeywords[msg] then + print("Removing", msg) + WeakAurasSaved.MagusKeywords[msg] = nil + else + print(msg, "does not exist in the keyword table") + end + else + print("No keyword provided") + end + end +end + +--INIT +aura_env.button = CreateFrame("Button", "buton", UIParent, "SecureActionButtonTemplate") +aura_env.button:SetAttribute("type", "macro") +aura_env.button:SetPoint("CENTER", UIParent, "CENTER") +aura_env.button:SetWidth(128) +aura_env.button:SetHeight(128) +aura_env.button:SetNormalTexture("interface/icons/inv_misc_enggizmos_rocketchicken.blp") +aura_env.button:SetPushedTexture("interface/icons/inv_misc_enggizmos_rocketchicken.blp") +if not aura_env.toggle then aura_env.toggle = 1 end +if not WeakAurasSaved.MagusKeywords then WeakAurasSaved.MagusKeywords = { + "port", + "portal", + "org", + "og", + "UC", + "under", + "thunder", + "tb", + "wtb", } \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/FO2BF89E3995 - Warrior Stuff.lua b/WeakAuras/Projects/ByExp/Fivver Stuff/FO2BF89E3995 - Warrior Stuff.lua similarity index 96% rename from Complete Projects/Fivver Stuff/FO2BF89E3995 - Warrior Stuff.lua rename to WeakAuras/Projects/ByExp/Fivver Stuff/FO2BF89E3995 - Warrior Stuff.lua index ff3856d..134a837 100644 --- a/Complete Projects/Fivver Stuff/FO2BF89E3995 - Warrior Stuff.lua +++ b/WeakAuras/Projects/ByExp/Fivver Stuff/FO2BF89E3995 - Warrior Stuff.lua @@ -1,84 +1,84 @@ ---COMBAT_LOG_EVENT_UNFILTERED UNIT_STATS PLAYER_TARGET_CHANGED -function(e, ...) - local function updateStats() - aura_env.output = "BUFFS " - local noBuffs = 0 - local hitPercent = 0 - local critPercent = 0 - local attackPower = 0 - local effArmor = 0 - local armorPercent = 0 - - for i = 1, 40 do - if UnitBuff("player", i) then - noBuffs = noBuffs + 1 - end - end - hitPercent = GetCombatRatingBonus(6) + GetHitModifier() - critPercent = GetCritChance() - local base, pos, neg = UnitAttackPower("player") - attackPower = base + pos - neg - effArmor = select(2, UnitArmor("player")) - if UnitExists("target") then - local tlevel = UnitLevel("target") - if tlevel < 60 then - armorPercent = (effArmor / ((85 * tlevel) + effArmor + 400)) * 100 - elseif tlevel >= 60 then - armorPercent = (effArmor / ((467.5 * tlevel) + effArmor - 22167.5)) * 100 - end - end - - -- BUFFS %d%d (5 + 2 + 1 = 8 + 4) - aura_env.output = aura_env.output .. noBuffs - while string.len(aura_env.output) < 12 do - aura_env.output = aura_env.output .. " " - end - -- BUFFS %d%d<4>HIT %d%d.%d (12 + 3 + 1 + 4 = 20 + 4) - aura_env.output = aura_env.output .. "HIT " .. math.ceil((hitPercent * 10)) / 10 .. "%" - while string.len(aura_env.output) < 24 do - aura_env.output = aura_env.output .. " " - end - -- BUFFS %d%d<4>HIT %d%d.%d<4>CRIT %d%d.%d (24 + 4 + 1 + 4 = 33 + 4) - aura_env.output = aura_env.output .. "CRIT " .. math.ceil((critPercent * 10)) / 10 .. "%" - while string.len(aura_env.output) < 37 do - aura_env.output = aura_env.output .. " " - end - -- BUFFS %d%d<4>HIT %d%d.%d<4>CRIT %d%d.%d<4>AP %d+ - -- APPEND AP - -- 37 + 3 + 8 = 48 - aura_env.output = aura_env.output .. "AP " .. attackPower - while string.len(aura_env.output) < 48 do - aura_env.output = aura_env.output .. " " - end - aura_env.output = aura_env.output .. "A " .. effArmor .. " " .. math.ceil((armorPercent * 10)) / 10 .. "%" - end - if e == "COMBAT_LOG_EVENT_UNFILTERED" then - local se = select(2, ...) - local subevents = { - ["SPELL_AURA_APPLIED"] = true, - ["SPELL_AURA_APPLIED_DOSE"] = true, - ["SPELL_AURA_REMOVED"] = true, - ["SPELL_AURA_REMOVED_DOSE"] = true, - ["SPELL_AURA_REFRESH"] = true, - } - if subevents[se] then - local target = select(9, ...) - if target == UnitName("player") then - updateStats() - return true - end - end - elseif e == "UNIT_STATS" or e == "PLAYER_TARGET_CHANGED" then - updateStats() - return true - end -end - ---DISPLAY -function() - return aura_env.output or "" -end - ---INIT -aura_env.output = "" +--COMBAT_LOG_EVENT_UNFILTERED UNIT_STATS PLAYER_TARGET_CHANGED +function(e, ...) + local function updateStats() + aura_env.output = "BUFFS " + local noBuffs = 0 + local hitPercent = 0 + local critPercent = 0 + local attackPower = 0 + local effArmor = 0 + local armorPercent = 0 + + for i = 1, 40 do + if UnitBuff("player", i) then + noBuffs = noBuffs + 1 + end + end + hitPercent = GetCombatRatingBonus(6) + GetHitModifier() + critPercent = GetCritChance() + local base, pos, neg = UnitAttackPower("player") + attackPower = base + pos - neg + effArmor = select(2, UnitArmor("player")) + if UnitExists("target") then + local tlevel = UnitLevel("target") + if tlevel < 60 then + armorPercent = (effArmor / ((85 * tlevel) + effArmor + 400)) * 100 + elseif tlevel >= 60 then + armorPercent = (effArmor / ((467.5 * tlevel) + effArmor - 22167.5)) * 100 + end + end + + -- BUFFS %d%d (5 + 2 + 1 = 8 + 4) + aura_env.output = aura_env.output .. noBuffs + while string.len(aura_env.output) < 12 do + aura_env.output = aura_env.output .. " " + end + -- BUFFS %d%d<4>HIT %d%d.%d (12 + 3 + 1 + 4 = 20 + 4) + aura_env.output = aura_env.output .. "HIT " .. math.ceil((hitPercent * 10)) / 10 .. "%" + while string.len(aura_env.output) < 24 do + aura_env.output = aura_env.output .. " " + end + -- BUFFS %d%d<4>HIT %d%d.%d<4>CRIT %d%d.%d (24 + 4 + 1 + 4 = 33 + 4) + aura_env.output = aura_env.output .. "CRIT " .. math.ceil((critPercent * 10)) / 10 .. "%" + while string.len(aura_env.output) < 37 do + aura_env.output = aura_env.output .. " " + end + -- BUFFS %d%d<4>HIT %d%d.%d<4>CRIT %d%d.%d<4>AP %d+ + -- APPEND AP + -- 37 + 3 + 8 = 48 + aura_env.output = aura_env.output .. "AP " .. attackPower + while string.len(aura_env.output) < 48 do + aura_env.output = aura_env.output .. " " + end + aura_env.output = aura_env.output .. "A " .. effArmor .. " " .. math.ceil((armorPercent * 10)) / 10 .. "%" + end + if e == "COMBAT_LOG_EVENT_UNFILTERED" then + local se = select(2, ...) + local subevents = { + ["SPELL_AURA_APPLIED"] = true, + ["SPELL_AURA_APPLIED_DOSE"] = true, + ["SPELL_AURA_REMOVED"] = true, + ["SPELL_AURA_REMOVED_DOSE"] = true, + ["SPELL_AURA_REFRESH"] = true, + } + if subevents[se] then + local target = select(9, ...) + if target == UnitName("player") then + updateStats() + return true + end + end + elseif e == "UNIT_STATS" or e == "PLAYER_TARGET_CHANGED" then + updateStats() + return true + end +end + +--DISPLAY +function() + return aura_env.output or "" +end + +--INIT +aura_env.output = "" WeakAuras.ScanEvents("UNIT_STATS") \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/FO2C01B46B55 - Monk Tutor.lua b/WeakAuras/Projects/ByExp/Fivver Stuff/FO2C01B46B55 - Monk Tutor.lua similarity index 96% rename from Complete Projects/Fivver Stuff/FO2C01B46B55 - Monk Tutor.lua rename to WeakAuras/Projects/ByExp/Fivver Stuff/FO2C01B46B55 - Monk Tutor.lua index 7459c09..024906d 100644 --- a/Complete Projects/Fivver Stuff/FO2C01B46B55 - Monk Tutor.lua +++ b/WeakAuras/Projects/ByExp/Fivver Stuff/FO2C01B46B55 - Monk Tutor.lua @@ -1,81 +1,81 @@ ---UNIT_HEALTH UNIT_AURA PLAYER_REGEN_DISABLED -function(e, u) - if e == "PLAYER_REGEN_DISABLED" then - aura_env.lowppl = 0 - aura_env.renw = 0 - elseif e == "UNIT_AURA" then - if u == "player" then - local i = 1 - while UnitBuff(u, i) do - local name = UnitBuff(u, i) - if name == "Mana Tea" then - aura_env.manaTea = true - break - end - i = i + 1 - end - elseif u:match("raid") then - if not aura_env.people[u] then aura_env.people[u] = {} end - aura_env.people[u].buff = false - local i = 1 - while UnitBuff(u, i) do - local caster = select(8, UnitBuff(u, i)) - local name = UnitBuff(u, i) - if name == "Renewing Mist" and caster == "player" then - aura_env.people[u].buff = true - break - end - i = i + 1 - end - aura_env.renw = 0 - for k,v in pairs(aura_env.people) do - if v.buff == true then - aura_env.renw = aura_env.renw + 1 - end - end - end - return true - elseif e == "UNIT_HEALTH" then - if u:match("raid") then - if not aura_env.people[u] then aura_env.people[u] = {} end - aura_env.people[u].hp = UnitHealth(u) - aura_env.people[u].mhp = UnitHealthMax(u) - aura_env.people[u].php = UnitHealth(u) / UnitHealthMax(u) - if aura_env.people[u].php < aura_env.config.low then - aura_env.people[u].low = true - else - aura_env.people[u].low = false - end - end - aura_env.lowppl = 0 - for k,v in pairs(aura_env.people) do - if v.low == true then - aura_env.lowppl = aura_env.lowppl + 1 - end - end - return true - end - return true -end - ---ICON -function() - if aura_env.manaTea == true then - return 1360980 - elseif aura_env.lowppl < 6 or aura_env.renw >= 5 then - return 1360980 - elseif aura_env.lowppl >= 6 and aura_env.renw < 5 then - return 1360978 - end -end - ---DISPLAY -function() - return format("Renewing mists active: %d\nPeople on low health: %d", aura_env.renw, aura_env.lowppl) -end - ---INIT -aura_env.manaTea = false -aura_env.lowppl = 0 -aura_env.renw = 0 +--UNIT_HEALTH UNIT_AURA PLAYER_REGEN_DISABLED +function(e, u) + if e == "PLAYER_REGEN_DISABLED" then + aura_env.lowppl = 0 + aura_env.renw = 0 + elseif e == "UNIT_AURA" then + if u == "player" then + local i = 1 + while UnitBuff(u, i) do + local name = UnitBuff(u, i) + if name == "Mana Tea" then + aura_env.manaTea = true + break + end + i = i + 1 + end + elseif u:match("raid") then + if not aura_env.people[u] then aura_env.people[u] = {} end + aura_env.people[u].buff = false + local i = 1 + while UnitBuff(u, i) do + local caster = select(8, UnitBuff(u, i)) + local name = UnitBuff(u, i) + if name == "Renewing Mist" and caster == "player" then + aura_env.people[u].buff = true + break + end + i = i + 1 + end + aura_env.renw = 0 + for k,v in pairs(aura_env.people) do + if v.buff == true then + aura_env.renw = aura_env.renw + 1 + end + end + end + return true + elseif e == "UNIT_HEALTH" then + if u:match("raid") then + if not aura_env.people[u] then aura_env.people[u] = {} end + aura_env.people[u].hp = UnitHealth(u) + aura_env.people[u].mhp = UnitHealthMax(u) + aura_env.people[u].php = UnitHealth(u) / UnitHealthMax(u) + if aura_env.people[u].php < aura_env.config.low then + aura_env.people[u].low = true + else + aura_env.people[u].low = false + end + end + aura_env.lowppl = 0 + for k,v in pairs(aura_env.people) do + if v.low == true then + aura_env.lowppl = aura_env.lowppl + 1 + end + end + return true + end + return true +end + +--ICON +function() + if aura_env.manaTea == true then + return 1360980 + elseif aura_env.lowppl < 6 or aura_env.renw >= 5 then + return 1360980 + elseif aura_env.lowppl >= 6 and aura_env.renw < 5 then + return 1360978 + end +end + +--DISPLAY +function() + return format("Renewing mists active: %d\nPeople on low health: %d", aura_env.renw, aura_env.lowppl) +end + +--INIT +aura_env.manaTea = false +aura_env.lowppl = 0 +aura_env.renw = 0 aura_env.people = {} \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/FO3BCAB05F84 - Magus Portals.lua b/WeakAuras/Projects/ByExp/Fivver Stuff/FO3BCAB05F84 - Magus Portals.lua similarity index 96% rename from Complete Projects/Fivver Stuff/FO3BCAB05F84 - Magus Portals.lua rename to WeakAuras/Projects/ByExp/Fivver Stuff/FO3BCAB05F84 - Magus Portals.lua index 7f4480d..ecd56e8 100644 --- a/Complete Projects/Fivver Stuff/FO3BCAB05F84 - Magus Portals.lua +++ b/WeakAuras/Projects/ByExp/Fivver Stuff/FO3BCAB05F84 - Magus Portals.lua @@ -1,54 +1,54 @@ ---CHAT_MSG_SAY CHAT_MSG_YELL CHAT_MSG_CHANNEL CHAT_MSG_WHISPER ADD_KEYWORD REMOVE_KEYWORD LIST_KEYWORDS TOGGLE_MAGUS -function(e, msg, sender, ...) - if not WeakAurasSaved.MagusKeywords then WeakAurasSaved.MagusKeywords = {} end - if e == "CHAT_MSG_SAY" or e == "CHAT_MSG_YELL" or e == "CHAT_MSG_WHISPER" or e == "CHAT_MSG_CHANNEL" then - local class = select(2, GetPlayerInfoByGUID(select(10, ...))) - if msg and aura_env.toggle == 1 then - msg = msg:lower() - local noRealmSender = sender:match("(.+)-%w+") - for k,v in pairs(WeakAurasSaved.MagusKeywords) do - if msg:match(k) then - local st, en = msg:find(k) - if not (st > 1 and msg:match(".", st - 1) ~= " ") and not (en < strlen(msg) and msg:match(".", en + 1) ~= " ") and class ~= "MAGE" then - InviteUnit(sender) - end - end - end - end - elseif e == "TOGGLE_MAGUS" then - if aura_env.toggle == 0 then - print("Toggling script on") - aura_env.toggle = 1 - else - print("Toggling script off") - aura_env.toggle = 0 - end - elseif e == "ADD_KEYWORD" then - if msg then - print("Adding", msg) - msg = msg:lower() - WeakAurasSaved.MagusKeywords[msg] = 1 - else - print("No keyword provided") - end - elseif e == "LIST_KEYWORDS" then - for k,v in pairs(WeakAurasSaved.MagusKeywords) do - print(k) - end - elseif e == "REMOVE_KEYWORD" then - if msg then - if WeakAurasSaved.MagusKeywords[msg] then - print("Removing", msg) - WeakAurasSaved.MagusKeywords[msg] = nil - else - print(msg, "does not exist in the keyword table") - end - else - print("No keyword provided") - end - end -end - ---INIT -aura_env.toggle = 0 +--CHAT_MSG_SAY CHAT_MSG_YELL CHAT_MSG_CHANNEL CHAT_MSG_WHISPER ADD_KEYWORD REMOVE_KEYWORD LIST_KEYWORDS TOGGLE_MAGUS +function(e, msg, sender, ...) + if not WeakAurasSaved.MagusKeywords then WeakAurasSaved.MagusKeywords = {} end + if e == "CHAT_MSG_SAY" or e == "CHAT_MSG_YELL" or e == "CHAT_MSG_WHISPER" or e == "CHAT_MSG_CHANNEL" then + local class = select(2, GetPlayerInfoByGUID(select(10, ...))) + if msg and aura_env.toggle == 1 then + msg = msg:lower() + local noRealmSender = sender:match("(.+)-%w+") + for k,v in pairs(WeakAurasSaved.MagusKeywords) do + if msg:match(k) then + local st, en = msg:find(k) + if not (st > 1 and msg:match(".", st - 1) ~= " ") and not (en < strlen(msg) and msg:match(".", en + 1) ~= " ") and class ~= "MAGE" then + InviteUnit(sender) + end + end + end + end + elseif e == "TOGGLE_MAGUS" then + if aura_env.toggle == 0 then + print("Toggling script on") + aura_env.toggle = 1 + else + print("Toggling script off") + aura_env.toggle = 0 + end + elseif e == "ADD_KEYWORD" then + if msg then + print("Adding", msg) + msg = msg:lower() + WeakAurasSaved.MagusKeywords[msg] = 1 + else + print("No keyword provided") + end + elseif e == "LIST_KEYWORDS" then + for k,v in pairs(WeakAurasSaved.MagusKeywords) do + print(k) + end + elseif e == "REMOVE_KEYWORD" then + if msg then + if WeakAurasSaved.MagusKeywords[msg] then + print("Removing", msg) + WeakAurasSaved.MagusKeywords[msg] = nil + else + print(msg, "does not exist in the keyword table") + end + else + print("No keyword provided") + end + end +end + +--INIT +aura_env.toggle = 0 if not WeakAurasSaved.MagusKeywords then WeakAurasSaved.MagusKeywords = {} end \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/FO3BE740D804 - BG Q.lua b/WeakAuras/Projects/ByExp/Fivver Stuff/FO3BE740D804 - BG Q.lua similarity index 98% rename from Complete Projects/Fivver Stuff/FO3BE740D804 - BG Q.lua rename to WeakAuras/Projects/ByExp/Fivver Stuff/FO3BE740D804 - BG Q.lua index 075cba6..f2dac6a 100644 --- a/Complete Projects/Fivver Stuff/FO3BE740D804 - BG Q.lua +++ b/WeakAuras/Projects/ByExp/Fivver Stuff/FO3BE740D804 - BG Q.lua @@ -1,12 +1,12 @@ ---GOSSIP_SHOW UPDATE_BATTLEFIELD_STATUS -function(e, ...) - if e == "GOSSIP_SHOW" then - local target = UnitName("target") - if target:match("Grizzle Halfmane") or target:match("Kartra Bloodsnarl") or target:match("Glordrum Steelbeard") or target:match("Thelman Slatefist") or target:match(" Taim Ragetotem") or target:match("Brogun Stoneshield") or target:match("Innkeeper Gryshka") then - GossipTitleButton1:Click() - BattlefieldFrameJoinButton:Click() - end - elseif e == "UPDATE_BATTLEFIELD_STATUS" then - StaticPopup1Button1:Click() - end +--GOSSIP_SHOW UPDATE_BATTLEFIELD_STATUS +function(e, ...) + if e == "GOSSIP_SHOW" then + local target = UnitName("target") + if target:match("Grizzle Halfmane") or target:match("Kartra Bloodsnarl") or target:match("Glordrum Steelbeard") or target:match("Thelman Slatefist") or target:match(" Taim Ragetotem") or target:match("Brogun Stoneshield") or target:match("Innkeeper Gryshka") then + GossipTitleButton1:Click() + BattlefieldFrameJoinButton:Click() + end + elseif e == "UPDATE_BATTLEFIELD_STATUS" then + StaticPopup1Button1:Click() + end end \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/FO3BE740D804 - Magus Portals.lua b/WeakAuras/Projects/ByExp/Fivver Stuff/FO3BE740D804 - Magus Portals.lua similarity index 97% rename from Complete Projects/Fivver Stuff/FO3BE740D804 - Magus Portals.lua rename to WeakAuras/Projects/ByExp/Fivver Stuff/FO3BE740D804 - Magus Portals.lua index 58b8fa1..3965457 100644 --- a/Complete Projects/Fivver Stuff/FO3BE740D804 - Magus Portals.lua +++ b/WeakAuras/Projects/ByExp/Fivver Stuff/FO3BE740D804 - Magus Portals.lua @@ -1,277 +1,277 @@ ---CHAT_MSG_SAY CHAT_MSG_YELL CHAT_MSG_WHISPER ADD_KEYWORD REMOVE_KEYWORD LIST_KEYWORDS TOGGLE_MAGUS CHAT_MSG_SYSTEM COMBAT_LOG_EVENT_UNFILTERED TRADE_SHOW TRADE_MONEY_CHANGED PLAYER_TRADE_MONEY TRADE_ACCEPT_UPDATE TRADE_CLOSED -function(e, msg, sender, ...) - local function updateText() - local texts = {[1] = {}, [2] = {}, [3] = {}, [4] = {}} - for k,v in pairs(aura_env.people) do - if v.state == 5 then - if v.kw == "uc" or v.kw == "under" or v.kw == "undercity" then - texts[1][#texts[1] + 1] = k - elseif v.kw == "org" or v.kw == "og" or v.kw == "orgrimmar" then - texts[2][#texts[2] + 1] = k - elseif v.kw == "tb" or v.kw == "thunder" or v.kw == "thunderbluff" then - texts[3][#texts[3] + 1] = k - elseif v.kw == "test" then - texts[4][#texts[4] + 1] = k - end - end - end - for k,v in pairs(texts) do - local text = "" - for k2,v2 in pairs(v) do - text = text .. v2 .. "\n" - end - WeakAurasSaved.MagusKeywords.buttons[k].text:SetText(text) - end - end - - local aura_env = aura_env - if not aura_env.toggle then aura_env.toggle = 1 end - if not WeakAurasSaved.MagusKeywords then WeakAurasSaved.MagusKeywords = { - ["port"] = 1, - ["portal"] = 1, - ["org"] = 1, - ["og"] = 1, - ["uc"] = 1, - ["under"] = 1, - ["thunder"] = 1, - ["tb"] = 1, - ["wtb"] = 1, - ["test"] = 1, - } end - if e == "CHAT_MSG_SAY" or e == "CHAT_MSG_YELL" or e == "CHAT_MSG_WHISPER" then - local class = select(2, GetPlayerInfoByGUID(select(10, ...))) - if msg and aura_env.toggle == 1 then - msg = msg:lower() - local noRealmSender = sender:match("(.+)-?%w*") or sender - for k,v in pairs(WeakAurasSaved.MagusKeywords) do - if msg:match(k) then - local st, en = msg:find(k) - if not (st > 1 and msg:match(".", st - 1) ~= " ") and not (en < strlen(msg) and msg:match(".", en + 1) ~= " ") and class ~= "MAGE" then - InviteUnit(sender) - if not aura_env.people[noRealmSender] then aura_env.people[noRealmSender] = {["state"] = 0, ["kw"] = k} end - return true - end - end - end - end - elseif e == "CHAT_MSG_SYSTEM" then - if msg:match("You have invited") then - local sender = msg:match("You have invited (.+) to join your group") - local noRealmSender = sender:match("(.+)-%w+") or sender - if aura_env.people[noRealmSender] then - aura_env.people[noRealmSender].state = 0 - end - elseif msg:match("joins the party") then - local sender = msg:match("(.+) joins the party") - local noRealmSender = sender:match("(.+)-%w+") or sender - if aura_env.people[noRealmSender] and aura_env.people[noRealmSender].state == 0 then - aura_env.people[noRealmSender].state = 1 - for i = 1, GetNumGroupMembers() do - if UnitName("party" .. i) == sender then - aura_env.people[noRealmSender].unitID = "party" .. i - break - end - end - --If not tradeable create ticker and do other stuff - if CheckInteractDistance(aura_env.people[noRealmSender].unitID, 2) then - InitiateTrade(aura_env.people[noRealmSender].unitID) - aura_env.people[noRealmSender].state = 2 - end - end - elseif msg:match("leaves the party") then - local sender = msg:match("(.+) leaves the party") - local noRealmSender = sender:match("(.+)-%w+") or sender - if aura_env.people[noRealmSender] and aura_env[noRealmSender].state == 6 then - aura_env.people[noRealmSender] = nil - end - end - elseif e == "TRADE_SHOW" then - for k,v in pairs(aura_env.people) do - if v.state == 2 then - aura_env.isTrade = true - aura_env.tradee = k - aura_env.people[k].state = 3 - end - end - elseif e == "TRADE_ACCEPT_UPDATE" then - if msg == 1 and sender == 1 then - if aura_env.isTrade == true then - aura_env.people[aura_env.tradee].state = 4 - if aura_env.people[aura_env.tradee].kw == "uc" or aura_env.people[aura_env.tradee].kw == "under" or aura_env.people[aura_env.tradee].kw == "undercity" then - ActionButton_ShowOverlayGlow(WeakAurasSaved.MagusKeywords.buttons[3]) - aura_env.castQueue["Portal: Undercity"] = true - aura_env.people[aura_env.tradee]["Portal: Undercity"] = true - aura_env.people[aura_env.tradee].state = 5 - elseif aura_env.people[aura_env.tradee].kw == "org" or aura_env.people[aura_env.tradee].kw == "og" or aura_env.people[aura_env.tradee].kw == "orgrimmar" then - ActionButton_ShowOverlayGlow(WeakAurasSaved.MagusKeywords.buttons[2]) - aura_env.castQueue["Portal: Orgrimmar"] = true - aura_env.people[aura_env.tradee]["Portal: Orgrimmar"] = true - aura_env.people[aura_env.tradee].state = 5 - elseif aura_env.people[aura_env.tradee].kw == "tb" or aura_env.people[aura_env.tradee].kw == "thunder" or aura_env.people[aura_env.tradee].kw == "thunderbluff" then - ActionButton_ShowOverlayGlow(WeakAurasSaved.MagusKeywords.buttons[1]) - aura_env.castQueue["Portal: Thunder Bluff"] = true - aura_env.people[aura_env.tradee]["Portal: Thunder Bluff"] = true - aura_env.people[aura_env.tradee].state = 5 - elseif aura_env.people[aura_env.tradee].kw == "test" then - ActionButton_ShowOverlayGlow(WeakAurasSaved.MagusKeywords.buttons[4]) - aura_env.castQueue["Consecration"] = true - aura_env.people[aura_env.tradee]["Consecration"] = true - aura_env.people[aura_env.tradee].state = 5 - end - aura_env.isTrade = false - aura_env.tradee = "" - updateText() - end - end - elseif e == "TRADE_CLOSED" then - if aura_env.isTrade == true then - aura_env.people[aura_env.tradee].state = 2 - aura_env.isTrade = false - aura_env.tradee = "" - end - elseif e == "COMBAT_LOG_EVENT_UNFILTERED" then - local se = sender - local caster = select(3, ...) - if se == "SPELL_CAST_SUCCESS" and caster == UnitName("player") then - local spell = select(11, ...) - if aura_env.castQueue[spell] == true then aura_env.castQueue[spell] = false end - if spell == "Portal: Undercity" then - ActionButton_HideOverlayGlow(WeakAurasSaved.MagusKeywords.buttons[3]) - elseif spell == "Portal: Orgrimmar" then - ActionButton_HideOverlayGlow(WeakAurasSaved.MagusKeywords.buttons[2]) - elseif spell == "Portal: Thunder Bluff" then - ActionButton_HideOverlayGlow(WeakAurasSaved.MagusKeywords.buttons[1]) - elseif spell == "Consecration" then - ActionButton_HideOverlayGlow(WeakAurasSaved.MagusKeywords.buttons[4]) - end - for k,v in pairs(aura_env.people) do - if v[spell] and v.state == 5 then - v[spell] = false - aura_env.people[k] = nil - updateText() - end - end - end - elseif e == "TOGGLE_MAGUS" then - if aura_env.toggle == 0 then - print("Toggling script on") - aura_env.toggle = 1 - for i = 1, 3 do - WeakAurasSaved.MagusKeywords.buttons[i]:Show() - end - else - print("Toggling script off") - aura_env.toggle = 0 - for i = 1, 3 do - WeakAurasSaved.MagusKeywords.buttons[i]:Hide() - end - end - elseif e == "ADD_KEYWORD" then - if msg then - print("Adding", msg) - msg = msg:lower() - WeakAurasSaved.MagusKeywords[msg] = 1 - else - print("No keyword provided") - end - elseif e == "LIST_KEYWORDS" then - local test = "" - for k,v in pairs(WeakAurasSaved.MagusKeywords) do - print(k) - test = test .. k .. "\n" - end - message(test) - elseif e == "REMOVE_KEYWORD" then - if msg then - if WeakAurasSaved.MagusKeywords[msg] then - print("Removing", msg) - WeakAurasSaved.MagusKeywords[msg] = nil - else - print(msg, "does not exist in the keyword table") - end - else - print("No keyword provided") - end - end -end - ---INIT -if not aura_env.toggle then aura_env.toggle = 1 end -if not WeakAurasSaved.MagusKeywords then WeakAurasSaved.MagusKeywords = { - ["port"] = 1, - ["portal"] = 1, - ["org"] = 1, - ["og"] = 1, - ["uc"] = 1, - ["under"] = 1, - ["thunder"] = 1, - ["tb"] = 1, - ["wtb"] = 1, -} end - ---[[ -Player state table -0 - invited -1 - joined -2 - trade queue -3 - trading -4 - trade complete -5 - light up portal -6 - portal cast -7 - left? clean table - -Cancel everything if person leave -]] -aura_env.people = {} -aura_env.castQueue = {} -aura_env.isTrade = false -aura_env.tradee = "" - ---[[local function hideButon(self) - ActionButton_HideOverlayGlow(self) -end--]] - -if not WeakAurasSaved.MagusKeywords.buttons or not WeakAurasSaved.MagusKeywords.buttons[1][0] then WeakAurasSaved.MagusKeywords.buttons = { - [1] = CreateFrame("Button", "buton", aura_env.region, "SecureActionButtonTemplate"), - [2] = CreateFrame("Button", "buton", aura_env.region, "SecureActionButtonTemplate"), - [3] = CreateFrame("Button", "buton", aura_env.region, "SecureActionButtonTemplate"), - [4] = CreateFrame("Button", "buton", aura_env.region, "SecureActionButtonTemplate"), -} end - -for i = 1, 4 do - WeakAurasSaved.MagusKeywords.buttons[i]:SetAttribute("type", "macro") - WeakAurasSaved.MagusKeywords.buttons[i]:SetSize(aura_env.config.size, aura_env.config.size) - WeakAurasSaved.MagusKeywords.buttons[i]:SetPoint("CENTER", aura_env.region, "CENTER", (i - 1) * aura_env.config.size, 0) - WeakAurasSaved.MagusKeywords.buttons[i]:RegisterForClicks("LeftButtonDown") - --WeakAurasSaved.MagusKeywords.buttons[i]:SetScript("PreClick", hideButon) - WeakAurasSaved.MagusKeywords.buttons[i].text = WeakAurasSaved.MagusKeywords.buttons[i]:CreateFontString("text", "ARTWORK") - WeakAurasSaved.MagusKeywords.buttons[i].text:SetFont("Fonts\\FRIZQT__.TTF", 14, "OUTLINE, MONOCHROME") - WeakAurasSaved.MagusKeywords.buttons[i].text:SetPoint("CENTER", WeakAurasSaved.MagusKeywords.buttons[i], "CENTER", 0, -aura_env.config.size / 2 - 14) - WeakAurasSaved.MagusKeywords.buttons[i].text:Show() - WeakAurasSaved.MagusKeywords.buttons[i]:Show() -end - -WeakAurasSaved.MagusKeywords.buttons[1]:SetNormalTexture(135750) -WeakAurasSaved.MagusKeywords.buttons[1]:SetAttribute("macrotext", format("/cast Portal: Thunder Bluff")) -WeakAurasSaved.MagusKeywords.buttons[2]:SetNormalTexture(135744) -WeakAurasSaved.MagusKeywords.buttons[2]:SetAttribute("macrotext", format("/cast Portal: Orgrimmar")) -WeakAurasSaved.MagusKeywords.buttons[3]:SetNormalTexture(135751) -WeakAurasSaved.MagusKeywords.buttons[3]:SetAttribute("macrotext", format("/cast Portal: Undercity")) -WeakAurasSaved.MagusKeywords.buttons[4]:SetNormalTexture(135926) -WeakAurasSaved.MagusKeywords.buttons[4]:SetAttribute("macrotext", format("/cast Consecration")) - -aura_env.printTable = function(table, n) - if not n then n = 0 end - for k,v in pairs(table) do - local printText = "" - for i = 1, n do - printText = printText .. " " - end - printText = printText .. "[" .. k .. "] = " .. tostring(v) - print(printText) - if type(v) == "table" then - n = n + 1 - aura_env.printTable(v, n) - end - end +--CHAT_MSG_SAY CHAT_MSG_YELL CHAT_MSG_WHISPER ADD_KEYWORD REMOVE_KEYWORD LIST_KEYWORDS TOGGLE_MAGUS CHAT_MSG_SYSTEM COMBAT_LOG_EVENT_UNFILTERED TRADE_SHOW TRADE_MONEY_CHANGED PLAYER_TRADE_MONEY TRADE_ACCEPT_UPDATE TRADE_CLOSED +function(e, msg, sender, ...) + local function updateText() + local texts = {[1] = {}, [2] = {}, [3] = {}, [4] = {}} + for k,v in pairs(aura_env.people) do + if v.state == 5 then + if v.kw == "uc" or v.kw == "under" or v.kw == "undercity" then + texts[1][#texts[1] + 1] = k + elseif v.kw == "org" or v.kw == "og" or v.kw == "orgrimmar" then + texts[2][#texts[2] + 1] = k + elseif v.kw == "tb" or v.kw == "thunder" or v.kw == "thunderbluff" then + texts[3][#texts[3] + 1] = k + elseif v.kw == "test" then + texts[4][#texts[4] + 1] = k + end + end + end + for k,v in pairs(texts) do + local text = "" + for k2,v2 in pairs(v) do + text = text .. v2 .. "\n" + end + WeakAurasSaved.MagusKeywords.buttons[k].text:SetText(text) + end + end + + local aura_env = aura_env + if not aura_env.toggle then aura_env.toggle = 1 end + if not WeakAurasSaved.MagusKeywords then WeakAurasSaved.MagusKeywords = { + ["port"] = 1, + ["portal"] = 1, + ["org"] = 1, + ["og"] = 1, + ["uc"] = 1, + ["under"] = 1, + ["thunder"] = 1, + ["tb"] = 1, + ["wtb"] = 1, + ["test"] = 1, + } end + if e == "CHAT_MSG_SAY" or e == "CHAT_MSG_YELL" or e == "CHAT_MSG_WHISPER" then + local class = select(2, GetPlayerInfoByGUID(select(10, ...))) + if msg and aura_env.toggle == 1 then + msg = msg:lower() + local noRealmSender = sender:match("(.+)-?%w*") or sender + for k,v in pairs(WeakAurasSaved.MagusKeywords) do + if msg:match(k) then + local st, en = msg:find(k) + if not (st > 1 and msg:match(".", st - 1) ~= " ") and not (en < strlen(msg) and msg:match(".", en + 1) ~= " ") and class ~= "MAGE" then + InviteUnit(sender) + if not aura_env.people[noRealmSender] then aura_env.people[noRealmSender] = {["state"] = 0, ["kw"] = k} end + return true + end + end + end + end + elseif e == "CHAT_MSG_SYSTEM" then + if msg:match("You have invited") then + local sender = msg:match("You have invited (.+) to join your group") + local noRealmSender = sender:match("(.+)-%w+") or sender + if aura_env.people[noRealmSender] then + aura_env.people[noRealmSender].state = 0 + end + elseif msg:match("joins the party") then + local sender = msg:match("(.+) joins the party") + local noRealmSender = sender:match("(.+)-%w+") or sender + if aura_env.people[noRealmSender] and aura_env.people[noRealmSender].state == 0 then + aura_env.people[noRealmSender].state = 1 + for i = 1, GetNumGroupMembers() do + if UnitName("party" .. i) == sender then + aura_env.people[noRealmSender].unitID = "party" .. i + break + end + end + --If not tradeable create ticker and do other stuff + if CheckInteractDistance(aura_env.people[noRealmSender].unitID, 2) then + InitiateTrade(aura_env.people[noRealmSender].unitID) + aura_env.people[noRealmSender].state = 2 + end + end + elseif msg:match("leaves the party") then + local sender = msg:match("(.+) leaves the party") + local noRealmSender = sender:match("(.+)-%w+") or sender + if aura_env.people[noRealmSender] and aura_env[noRealmSender].state == 6 then + aura_env.people[noRealmSender] = nil + end + end + elseif e == "TRADE_SHOW" then + for k,v in pairs(aura_env.people) do + if v.state == 2 then + aura_env.isTrade = true + aura_env.tradee = k + aura_env.people[k].state = 3 + end + end + elseif e == "TRADE_ACCEPT_UPDATE" then + if msg == 1 and sender == 1 then + if aura_env.isTrade == true then + aura_env.people[aura_env.tradee].state = 4 + if aura_env.people[aura_env.tradee].kw == "uc" or aura_env.people[aura_env.tradee].kw == "under" or aura_env.people[aura_env.tradee].kw == "undercity" then + ActionButton_ShowOverlayGlow(WeakAurasSaved.MagusKeywords.buttons[3]) + aura_env.castQueue["Portal: Undercity"] = true + aura_env.people[aura_env.tradee]["Portal: Undercity"] = true + aura_env.people[aura_env.tradee].state = 5 + elseif aura_env.people[aura_env.tradee].kw == "org" or aura_env.people[aura_env.tradee].kw == "og" or aura_env.people[aura_env.tradee].kw == "orgrimmar" then + ActionButton_ShowOverlayGlow(WeakAurasSaved.MagusKeywords.buttons[2]) + aura_env.castQueue["Portal: Orgrimmar"] = true + aura_env.people[aura_env.tradee]["Portal: Orgrimmar"] = true + aura_env.people[aura_env.tradee].state = 5 + elseif aura_env.people[aura_env.tradee].kw == "tb" or aura_env.people[aura_env.tradee].kw == "thunder" or aura_env.people[aura_env.tradee].kw == "thunderbluff" then + ActionButton_ShowOverlayGlow(WeakAurasSaved.MagusKeywords.buttons[1]) + aura_env.castQueue["Portal: Thunder Bluff"] = true + aura_env.people[aura_env.tradee]["Portal: Thunder Bluff"] = true + aura_env.people[aura_env.tradee].state = 5 + elseif aura_env.people[aura_env.tradee].kw == "test" then + ActionButton_ShowOverlayGlow(WeakAurasSaved.MagusKeywords.buttons[4]) + aura_env.castQueue["Consecration"] = true + aura_env.people[aura_env.tradee]["Consecration"] = true + aura_env.people[aura_env.tradee].state = 5 + end + aura_env.isTrade = false + aura_env.tradee = "" + updateText() + end + end + elseif e == "TRADE_CLOSED" then + if aura_env.isTrade == true then + aura_env.people[aura_env.tradee].state = 2 + aura_env.isTrade = false + aura_env.tradee = "" + end + elseif e == "COMBAT_LOG_EVENT_UNFILTERED" then + local se = sender + local caster = select(3, ...) + if se == "SPELL_CAST_SUCCESS" and caster == UnitName("player") then + local spell = select(11, ...) + if aura_env.castQueue[spell] == true then aura_env.castQueue[spell] = false end + if spell == "Portal: Undercity" then + ActionButton_HideOverlayGlow(WeakAurasSaved.MagusKeywords.buttons[3]) + elseif spell == "Portal: Orgrimmar" then + ActionButton_HideOverlayGlow(WeakAurasSaved.MagusKeywords.buttons[2]) + elseif spell == "Portal: Thunder Bluff" then + ActionButton_HideOverlayGlow(WeakAurasSaved.MagusKeywords.buttons[1]) + elseif spell == "Consecration" then + ActionButton_HideOverlayGlow(WeakAurasSaved.MagusKeywords.buttons[4]) + end + for k,v in pairs(aura_env.people) do + if v[spell] and v.state == 5 then + v[spell] = false + aura_env.people[k] = nil + updateText() + end + end + end + elseif e == "TOGGLE_MAGUS" then + if aura_env.toggle == 0 then + print("Toggling script on") + aura_env.toggle = 1 + for i = 1, 3 do + WeakAurasSaved.MagusKeywords.buttons[i]:Show() + end + else + print("Toggling script off") + aura_env.toggle = 0 + for i = 1, 3 do + WeakAurasSaved.MagusKeywords.buttons[i]:Hide() + end + end + elseif e == "ADD_KEYWORD" then + if msg then + print("Adding", msg) + msg = msg:lower() + WeakAurasSaved.MagusKeywords[msg] = 1 + else + print("No keyword provided") + end + elseif e == "LIST_KEYWORDS" then + local test = "" + for k,v in pairs(WeakAurasSaved.MagusKeywords) do + print(k) + test = test .. k .. "\n" + end + message(test) + elseif e == "REMOVE_KEYWORD" then + if msg then + if WeakAurasSaved.MagusKeywords[msg] then + print("Removing", msg) + WeakAurasSaved.MagusKeywords[msg] = nil + else + print(msg, "does not exist in the keyword table") + end + else + print("No keyword provided") + end + end +end + +--INIT +if not aura_env.toggle then aura_env.toggle = 1 end +if not WeakAurasSaved.MagusKeywords then WeakAurasSaved.MagusKeywords = { + ["port"] = 1, + ["portal"] = 1, + ["org"] = 1, + ["og"] = 1, + ["uc"] = 1, + ["under"] = 1, + ["thunder"] = 1, + ["tb"] = 1, + ["wtb"] = 1, +} end + +--[[ +Player state table +0 - invited +1 - joined +2 - trade queue +3 - trading +4 - trade complete +5 - light up portal +6 - portal cast +7 - left? clean table + +Cancel everything if person leave +]] +aura_env.people = {} +aura_env.castQueue = {} +aura_env.isTrade = false +aura_env.tradee = "" + +--[[local function hideButon(self) + ActionButton_HideOverlayGlow(self) +end--]] + +if not WeakAurasSaved.MagusKeywords.buttons or not WeakAurasSaved.MagusKeywords.buttons[1][0] then WeakAurasSaved.MagusKeywords.buttons = { + [1] = CreateFrame("Button", "buton", aura_env.region, "SecureActionButtonTemplate"), + [2] = CreateFrame("Button", "buton", aura_env.region, "SecureActionButtonTemplate"), + [3] = CreateFrame("Button", "buton", aura_env.region, "SecureActionButtonTemplate"), + [4] = CreateFrame("Button", "buton", aura_env.region, "SecureActionButtonTemplate"), +} end + +for i = 1, 4 do + WeakAurasSaved.MagusKeywords.buttons[i]:SetAttribute("type", "macro") + WeakAurasSaved.MagusKeywords.buttons[i]:SetSize(aura_env.config.size, aura_env.config.size) + WeakAurasSaved.MagusKeywords.buttons[i]:SetPoint("CENTER", aura_env.region, "CENTER", (i - 1) * aura_env.config.size, 0) + WeakAurasSaved.MagusKeywords.buttons[i]:RegisterForClicks("LeftButtonDown") + --WeakAurasSaved.MagusKeywords.buttons[i]:SetScript("PreClick", hideButon) + WeakAurasSaved.MagusKeywords.buttons[i].text = WeakAurasSaved.MagusKeywords.buttons[i]:CreateFontString("text", "ARTWORK") + WeakAurasSaved.MagusKeywords.buttons[i].text:SetFont("Fonts\\FRIZQT__.TTF", 14, "OUTLINE, MONOCHROME") + WeakAurasSaved.MagusKeywords.buttons[i].text:SetPoint("CENTER", WeakAurasSaved.MagusKeywords.buttons[i], "CENTER", 0, -aura_env.config.size / 2 - 14) + WeakAurasSaved.MagusKeywords.buttons[i].text:Show() + WeakAurasSaved.MagusKeywords.buttons[i]:Show() +end + +WeakAurasSaved.MagusKeywords.buttons[1]:SetNormalTexture(135750) +WeakAurasSaved.MagusKeywords.buttons[1]:SetAttribute("macrotext", format("/cast Portal: Thunder Bluff")) +WeakAurasSaved.MagusKeywords.buttons[2]:SetNormalTexture(135744) +WeakAurasSaved.MagusKeywords.buttons[2]:SetAttribute("macrotext", format("/cast Portal: Orgrimmar")) +WeakAurasSaved.MagusKeywords.buttons[3]:SetNormalTexture(135751) +WeakAurasSaved.MagusKeywords.buttons[3]:SetAttribute("macrotext", format("/cast Portal: Undercity")) +WeakAurasSaved.MagusKeywords.buttons[4]:SetNormalTexture(135926) +WeakAurasSaved.MagusKeywords.buttons[4]:SetAttribute("macrotext", format("/cast Consecration")) + +aura_env.printTable = function(table, n) + if not n then n = 0 end + for k,v in pairs(table) do + local printText = "" + for i = 1, n do + printText = printText .. " " + end + printText = printText .. "[" .. k .. "] = " .. tostring(v) + print(printText) + if type(v) == "table" then + n = n + 1 + aura_env.printTable(v, n) + end + end end \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/FO4DBEE93B84 - Raid Scan Frames.lua b/WeakAuras/Projects/ByExp/Fivver Stuff/FO4DBEE93B84 - Raid Scan Frames.lua similarity index 97% rename from Complete Projects/Fivver Stuff/FO4DBEE93B84 - Raid Scan Frames.lua rename to WeakAuras/Projects/ByExp/Fivver Stuff/FO4DBEE93B84 - Raid Scan Frames.lua index db314a4..c859ce6 100644 --- a/Complete Projects/Fivver Stuff/FO4DBEE93B84 - Raid Scan Frames.lua +++ b/WeakAuras/Projects/ByExp/Fivver Stuff/FO4DBEE93B84 - Raid Scan Frames.lua @@ -1,234 +1,234 @@ ---GROUP_ROSTER_UPDATE INSPECT_READY -function(e) - if e == "GROUP_ROSTER_UPDATE" then - for i = 1, 40 do - local u = "raid" .. i - if UnitExists(u) and not UnitIsUnit(u, "player") then - if not aura_env.data[u] then - aura_env.data[u] = { - ["name"] = UnitName(u), - ["class"] = select(3, UnitClass(u)), - ["neckilvl"] = 0, - ["backilvl"] = 0, - ["corruption"] = 0, - ["inspectQueue"] = false, - ["inspected"] = false - } - end - if aura_env.data[u] then - if aura_env.data[u].name ~= UnitName(u) then - aura_env.data[u] = { - ["name"] = UnitName(u), - ["class"] = select(3, UnitClass(u)), - ["neckilvl"] = 0, - ["backilvl"] = 0, - ["corruption"] = 0, - ["inspectQueue"] = false, - ["inspected"] = false - } - end - end - elseif not UnitExists(u) and aura_env.data[u] then - if aura_env.data[u] then - aura_env.data[u] = nil - end - for k,v in pairs(aura_env.inspectQueue) do - if v == u then - table.remove(aura_env.inspectQueue, k) - end - end - end - end - elseif e == "INSPECT_READY" then - if aura_env.notifyInspect ~= false and aura_env.inspecting == false then - InspectUnit(aura_env.notifyInspect) - aura_env.inspecting = true - elseif aura_env.notifyInspect ~= false and aura_env.inspecting == true then - for i = 1, 17 do - local link = GetInventoryItemLink(aura_env.notifyInspect, i) or 0 - if link ~= 0 then - local stats = {} - GetItemStats(link, stats) - local rarity = select(3, GetItemInfo(link)) - local ilvl = select(4, GetItemInfo(link)) - if aura_env.config.debug == true then - for k,v in pairs(stats) do - end - end - if i == 2 then - aura_env.data[aura_env.notifyInspect].neckilvl = ilvl - elseif i == 15 and rarity == 5 then - aura_env.data[aura_env.notifyInspect].backilvl = ilvl - end - if stats["ITEM_MOD_CORRUPTION"] then - --print("Item", link, "adds", stats["ITEM_MOD_CORRUPTION"], "corruption") - aura_env.data[aura_env.notifyInspect].corruption = aura_env.data[aura_env.notifyInspect].corruption + stats["ITEM_MOD_CORRUPTION"] - end - if stats["ITEM_MOD_CORRUPTION_RESISTANCE"] then - --print("Item", link, "reduces corruption by", stats["ITEM_MOD_CORRUPTION_RESISTANCE"]) - aura_env.data[aura_env.notifyInspect].corruption = aura_env.data[aura_env.notifyInspect].corruption - stats["ITEM_MOD_CORRUPTION_RESISTANCE"] - end - end - end - aura_env.data[aura_env.notifyInspect].inspectQueue = false - aura_env.data[aura_env.notifyInspect].inspected = true - aura_env.notifyInspect = false - if not aura_env.ticker then aura_env.ticker = C_Timer.NewTicker(0.5, aura_env.inspectPing) end - ClearInspectPlayer() - end - end - - for k,v in pairs(aura_env.data) do - if v.inspected == false and v.inspectQueue == false then - aura_env.inspectQueue[#aura_env.inspectQueue + 1] = k - v.inspectQueue = true - end - if v.neckilvl == 0 and v.inspectQueue == false then - aura_env.inspectQueue[#aura_env.inspectQueue + 1] = k - v.inspectQueue = true - end - end - - local text = {"", "", "", ""} - for k,v in pairs(aura_env.data) do - text[1] = text[1] .. aura_env.classColor(v.class) .. v.name .. "\n" - text[2] = text[2] .. "|cff" .. aura_env.config.ncolor .. v.neckilvl .. "\n" - text[3] = text[3] .. "|cff" .. aura_env.config.ccolor .. v.backilvl .. "\n" - text[4] = text[4] .. "|cff" .. aura_env.config.cocolor .. v.corruption .. "\n" - end - - aura_env.text = text[1] - aura_env.randomFrame.text2:SetText(text[2]) - aura_env.randomFrame.text3:SetText(text[3]) - aura_env.randomFrame.text4:SetText(text[4]) - - return true -end - ---DISPLAY -function() - return aura_env.text -end - ---INIT -if WeakAuras.IsOptionsOpen() then - if aura_env.ticker then - aura_env.ticker:Cancel() - aura_env.ticker = nil - end -end -local aura_env = aura_env -aura_env.data = {} -aura_env.text = "" -aura_env.inspectQueue = {} -aura_env.insIndex = 1 -aura_env.notifyInspect = false -aura_env.inspecting = false -aura_env.output = "" -if not WeakAurasSaved.CustomTrash then WeakAurasSaved.CustomTrash = {} end -if not WeakAurasSaved.CustomTrash.Debug then WeakAurasSaved.CustomTrash.Debug = {} end - -aura_env.printTable = function(table, n) - if not n then n = 0 end - for k,v in pairs(table) do - local printText = "" - for i = 1, n do - printText = printText .. " " - end - printText = printText .. "[" .. k .. "] = " .. tostring(v) - print(printText) - if type(v) == "table" then - n = n + 1 - aura_env.printTable(v, n) - end - end -end - -local function uninspect() - aura_env.inspecting = false -end -hooksecurefunc("ClearInspectPlayer", uninspect) - -aura_env.classColor = function(class) - if class == 6 then return "|cFFC41F3B" elseif - class == 12 then return "|cFFA330C9" elseif - class == 11 then return "|cFFFF7D0A" elseif - class == 3 then return "|cFFABD473" elseif - class == 8 then return "|cFF40C7EB" elseif - class == 10 then return "|cFF00FF96" elseif - class == 2 then return "|cFFF58CBA" elseif - class == 5 then return "|cFFFFFFFF" elseif - class == 4 then return "|cFFFFF569" elseif - class == 7 then return "|cFF0070DE" elseif - class == 9 then return "|cFF8787ED" elseif - class == 1 then return "|cFFC79C6E" else - return "|cFF000000" end -end - -aura_env.inspectPing = function() - if aura_env.inspecting == false and aura_env.notifyInspect == false then - if #aura_env.inspectQueue > 0 then - if aura_env.insIndex >= #aura_env.inspectQueue then - aura_env.insIndex = 1 - end - for i = aura_env.insIndex, #aura_env.inspectQueue do - if CheckInteractDistance(aura_env.inspectQueue[i], 2) == true then - ClearInspectPlayer() - NotifyInspect(aura_env.inspectQueue[i]) - aura_env.notifyInspect = aura_env.inspectQueue[i] - if aura_env.ticker then aura_env.ticker:Cancel(); aura_env.ticker = nil end - table.remove(aura_env.inspectQueue, i) - break - end - end - end - end - for k,v in pairs(aura_env.data) do - if v.neckilvl == 0 and v.inspectQueue == false then - aura_env.inspectQueue[#aura_env.inspectQueue + 1] = k - v.inspectQueue = true - end - end -end - -if not aura_env.ticker then - aura_env.ticker = C_Timer.NewTicker(0.5, aura_env.inspectPing) -end - -local font, fontSize, fontFlags = aura_env.region.text:GetFont() -local charWidth = fontSize * 0.6 -fontSize = fontSize * 0.65 - -aura_env.randomFrame = CreateFrame("frame") -aura_env.randomFrame:ClearAllPoints() -aura_env.randomFrame:SetPoint("CENTER", aura_env.region, "CENTER") - -if not aura_env.randomFrame.text2 then - aura_env.randomFrame.text2 = aura_env.randomFrame:CreateFontString() -end -aura_env.randomFrame.text2:SetFont(font, fontSize, fontFlags) -aura_env.randomFrame.text2:SetPoint("CENTER", aura_env.region, "CENTER", charWidth * 8, 0) -aura_env.randomFrame.text2:SetText("") -aura_env.randomFrame.text2:SetJustifyV("center") -aura_env.randomFrame.text2:SetJustifyH("center") -aura_env.randomFrame.text2:Show() - -if not aura_env.randomFrame.text3 then - aura_env.randomFrame.text3 = aura_env.randomFrame:CreateFontString() -end -aura_env.randomFrame.text3:SetFont(font, fontSize, fontFlags) -aura_env.randomFrame.text3:SetPoint("CENTER", aura_env.region, "CENTER", (charWidth * 8) + (charWidth * 3), 0) -aura_env.randomFrame.text3:SetText("") -aura_env.randomFrame.text3:SetJustifyV("center") -aura_env.randomFrame.text3:SetJustifyH("center") -aura_env.randomFrame.text3:Show() - -if not aura_env.randomFrame.text4 then - aura_env.randomFrame.text4 = aura_env.randomFrame:CreateFontString() -end -aura_env.randomFrame.text4:SetFont(font, fontSize, fontFlags) -aura_env.randomFrame.text4:SetPoint("CENTER", aura_env.region, "CENTER", (charWidth * 8) + (charWidth * 3) + (charWidth * 3), 0) -aura_env.randomFrame.text4:SetText("") -aura_env.randomFrame.text4:SetJustifyV("center") -aura_env.randomFrame.text4:SetJustifyH("center") +--GROUP_ROSTER_UPDATE INSPECT_READY +function(e) + if e == "GROUP_ROSTER_UPDATE" then + for i = 1, 40 do + local u = "raid" .. i + if UnitExists(u) and not UnitIsUnit(u, "player") then + if not aura_env.data[u] then + aura_env.data[u] = { + ["name"] = UnitName(u), + ["class"] = select(3, UnitClass(u)), + ["neckilvl"] = 0, + ["backilvl"] = 0, + ["corruption"] = 0, + ["inspectQueue"] = false, + ["inspected"] = false + } + end + if aura_env.data[u] then + if aura_env.data[u].name ~= UnitName(u) then + aura_env.data[u] = { + ["name"] = UnitName(u), + ["class"] = select(3, UnitClass(u)), + ["neckilvl"] = 0, + ["backilvl"] = 0, + ["corruption"] = 0, + ["inspectQueue"] = false, + ["inspected"] = false + } + end + end + elseif not UnitExists(u) and aura_env.data[u] then + if aura_env.data[u] then + aura_env.data[u] = nil + end + for k,v in pairs(aura_env.inspectQueue) do + if v == u then + table.remove(aura_env.inspectQueue, k) + end + end + end + end + elseif e == "INSPECT_READY" then + if aura_env.notifyInspect ~= false and aura_env.inspecting == false then + InspectUnit(aura_env.notifyInspect) + aura_env.inspecting = true + elseif aura_env.notifyInspect ~= false and aura_env.inspecting == true then + for i = 1, 17 do + local link = GetInventoryItemLink(aura_env.notifyInspect, i) or 0 + if link ~= 0 then + local stats = {} + GetItemStats(link, stats) + local rarity = select(3, GetItemInfo(link)) + local ilvl = select(4, GetItemInfo(link)) + if aura_env.config.debug == true then + for k,v in pairs(stats) do + end + end + if i == 2 then + aura_env.data[aura_env.notifyInspect].neckilvl = ilvl + elseif i == 15 and rarity == 5 then + aura_env.data[aura_env.notifyInspect].backilvl = ilvl + end + if stats["ITEM_MOD_CORRUPTION"] then + --print("Item", link, "adds", stats["ITEM_MOD_CORRUPTION"], "corruption") + aura_env.data[aura_env.notifyInspect].corruption = aura_env.data[aura_env.notifyInspect].corruption + stats["ITEM_MOD_CORRUPTION"] + end + if stats["ITEM_MOD_CORRUPTION_RESISTANCE"] then + --print("Item", link, "reduces corruption by", stats["ITEM_MOD_CORRUPTION_RESISTANCE"]) + aura_env.data[aura_env.notifyInspect].corruption = aura_env.data[aura_env.notifyInspect].corruption - stats["ITEM_MOD_CORRUPTION_RESISTANCE"] + end + end + end + aura_env.data[aura_env.notifyInspect].inspectQueue = false + aura_env.data[aura_env.notifyInspect].inspected = true + aura_env.notifyInspect = false + if not aura_env.ticker then aura_env.ticker = C_Timer.NewTicker(0.5, aura_env.inspectPing) end + ClearInspectPlayer() + end + end + + for k,v in pairs(aura_env.data) do + if v.inspected == false and v.inspectQueue == false then + aura_env.inspectQueue[#aura_env.inspectQueue + 1] = k + v.inspectQueue = true + end + if v.neckilvl == 0 and v.inspectQueue == false then + aura_env.inspectQueue[#aura_env.inspectQueue + 1] = k + v.inspectQueue = true + end + end + + local text = {"", "", "", ""} + for k,v in pairs(aura_env.data) do + text[1] = text[1] .. aura_env.classColor(v.class) .. v.name .. "\n" + text[2] = text[2] .. "|cff" .. aura_env.config.ncolor .. v.neckilvl .. "\n" + text[3] = text[3] .. "|cff" .. aura_env.config.ccolor .. v.backilvl .. "\n" + text[4] = text[4] .. "|cff" .. aura_env.config.cocolor .. v.corruption .. "\n" + end + + aura_env.text = text[1] + aura_env.randomFrame.text2:SetText(text[2]) + aura_env.randomFrame.text3:SetText(text[3]) + aura_env.randomFrame.text4:SetText(text[4]) + + return true +end + +--DISPLAY +function() + return aura_env.text +end + +--INIT +if WeakAuras.IsOptionsOpen() then + if aura_env.ticker then + aura_env.ticker:Cancel() + aura_env.ticker = nil + end +end +local aura_env = aura_env +aura_env.data = {} +aura_env.text = "" +aura_env.inspectQueue = {} +aura_env.insIndex = 1 +aura_env.notifyInspect = false +aura_env.inspecting = false +aura_env.output = "" +if not WeakAurasSaved.CustomTrash then WeakAurasSaved.CustomTrash = {} end +if not WeakAurasSaved.CustomTrash.Debug then WeakAurasSaved.CustomTrash.Debug = {} end + +aura_env.printTable = function(table, n) + if not n then n = 0 end + for k,v in pairs(table) do + local printText = "" + for i = 1, n do + printText = printText .. " " + end + printText = printText .. "[" .. k .. "] = " .. tostring(v) + print(printText) + if type(v) == "table" then + n = n + 1 + aura_env.printTable(v, n) + end + end +end + +local function uninspect() + aura_env.inspecting = false +end +hooksecurefunc("ClearInspectPlayer", uninspect) + +aura_env.classColor = function(class) + if class == 6 then return "|cFFC41F3B" elseif + class == 12 then return "|cFFA330C9" elseif + class == 11 then return "|cFFFF7D0A" elseif + class == 3 then return "|cFFABD473" elseif + class == 8 then return "|cFF40C7EB" elseif + class == 10 then return "|cFF00FF96" elseif + class == 2 then return "|cFFF58CBA" elseif + class == 5 then return "|cFFFFFFFF" elseif + class == 4 then return "|cFFFFF569" elseif + class == 7 then return "|cFF0070DE" elseif + class == 9 then return "|cFF8787ED" elseif + class == 1 then return "|cFFC79C6E" else + return "|cFF000000" end +end + +aura_env.inspectPing = function() + if aura_env.inspecting == false and aura_env.notifyInspect == false then + if #aura_env.inspectQueue > 0 then + if aura_env.insIndex >= #aura_env.inspectQueue then + aura_env.insIndex = 1 + end + for i = aura_env.insIndex, #aura_env.inspectQueue do + if CheckInteractDistance(aura_env.inspectQueue[i], 2) == true then + ClearInspectPlayer() + NotifyInspect(aura_env.inspectQueue[i]) + aura_env.notifyInspect = aura_env.inspectQueue[i] + if aura_env.ticker then aura_env.ticker:Cancel(); aura_env.ticker = nil end + table.remove(aura_env.inspectQueue, i) + break + end + end + end + end + for k,v in pairs(aura_env.data) do + if v.neckilvl == 0 and v.inspectQueue == false then + aura_env.inspectQueue[#aura_env.inspectQueue + 1] = k + v.inspectQueue = true + end + end +end + +if not aura_env.ticker then + aura_env.ticker = C_Timer.NewTicker(0.5, aura_env.inspectPing) +end + +local font, fontSize, fontFlags = aura_env.region.text:GetFont() +local charWidth = fontSize * 0.6 +fontSize = fontSize * 0.65 + +aura_env.randomFrame = CreateFrame("frame") +aura_env.randomFrame:ClearAllPoints() +aura_env.randomFrame:SetPoint("CENTER", aura_env.region, "CENTER") + +if not aura_env.randomFrame.text2 then + aura_env.randomFrame.text2 = aura_env.randomFrame:CreateFontString() +end +aura_env.randomFrame.text2:SetFont(font, fontSize, fontFlags) +aura_env.randomFrame.text2:SetPoint("CENTER", aura_env.region, "CENTER", charWidth * 8, 0) +aura_env.randomFrame.text2:SetText("") +aura_env.randomFrame.text2:SetJustifyV("center") +aura_env.randomFrame.text2:SetJustifyH("center") +aura_env.randomFrame.text2:Show() + +if not aura_env.randomFrame.text3 then + aura_env.randomFrame.text3 = aura_env.randomFrame:CreateFontString() +end +aura_env.randomFrame.text3:SetFont(font, fontSize, fontFlags) +aura_env.randomFrame.text3:SetPoint("CENTER", aura_env.region, "CENTER", (charWidth * 8) + (charWidth * 3), 0) +aura_env.randomFrame.text3:SetText("") +aura_env.randomFrame.text3:SetJustifyV("center") +aura_env.randomFrame.text3:SetJustifyH("center") +aura_env.randomFrame.text3:Show() + +if not aura_env.randomFrame.text4 then + aura_env.randomFrame.text4 = aura_env.randomFrame:CreateFontString() +end +aura_env.randomFrame.text4:SetFont(font, fontSize, fontFlags) +aura_env.randomFrame.text4:SetPoint("CENTER", aura_env.region, "CENTER", (charWidth * 8) + (charWidth * 3) + (charWidth * 3), 0) +aura_env.randomFrame.text4:SetText("") +aura_env.randomFrame.text4:SetJustifyV("center") +aura_env.randomFrame.text4:SetJustifyH("center") aura_env.randomFrame.text4:Show() \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/FO4DBEE93B84 - Raid Scan.lua b/WeakAuras/Projects/ByExp/Fivver Stuff/FO4DBEE93B84 - Raid Scan.lua similarity index 97% rename from Complete Projects/Fivver Stuff/FO4DBEE93B84 - Raid Scan.lua rename to WeakAuras/Projects/ByExp/Fivver Stuff/FO4DBEE93B84 - Raid Scan.lua index 133f582..e11243f 100644 --- a/Complete Projects/Fivver Stuff/FO4DBEE93B84 - Raid Scan.lua +++ b/WeakAuras/Projects/ByExp/Fivver Stuff/FO4DBEE93B84 - Raid Scan.lua @@ -1,223 +1,223 @@ ---GROUP_ROSTER_UPDATE INSPECT_READY -function(allstates, e) - if e == "GROUP_ROSTER_UPDATE" then - for i = 1, 40 do - local u = "raid" .. i - if UnitExists(u) and not UnitIsUnit(u, "player") then - if not aura_env.data[u] then - aura_env.data[u] = { - ["name"] = UnitName(u), - ["class"] = select(3, UnitClass(u)), - ["neckilvl"] = 0, - ["backilvl"] = 0, - ["corruption"] = 0, - ["inspectQueue"] = false, - ["inspected"] = false - } - end - if aura_env.data[u] then - if aura_env.data[u].name ~= UnitName(u) then - aura_env.data[u] = { - ["name"] = UnitName(u), - ["class"] = select(3, UnitClass(u)), - ["neckilvl"] = 0, - ["backilvl"] = 0, - ["corruption"] = 0, - ["inspectQueue"] = false, - ["inspected"] = false - } - end - end - elseif not UnitExists(u) and (aura_env.data[u] or allstates[u]) then - if aura_env.data[u] then - aura_env.data[u] = nil - end - for k,v in pairs(aura_env.inspectQueue) do - if v == u then - table.remove(aura_env.inspectQueue, k) - end - end - if allstates[u] then - allstates[u].show = false - allstates[u].changed = true - end - end - end - elseif e == "INSPECT_READY" then - if aura_env.notifyInspect ~= false and aura_env.inspecting == false then - InspectUnit(aura_env.notifyInspect) - aura_env.inspecting = true - elseif aura_env.notifyInspect ~= false and aura_env.inspecting == true then - for i = 1, 17 do - local link = GetInventoryItemLink(aura_env.notifyInspect, i) or 0 - if link ~= 0 then - local stats = {} - GetItemStats(link, stats) - local rarity = select(3, GetItemInfo(link)) - local ilvl = select(4, GetItemInfo(link)) - if aura_env.config.debug == true then - for k,v in pairs(stats) do - end - end - if i == 2 then - aura_env.data[aura_env.notifyInspect].neckilvl = ilvl - elseif i == 15 and rarity == 5 then - aura_env.data[aura_env.notifyInspect].backilvl = ilvl - end - if stats["ITEM_MOD_CORRUPTION"] then - aura_env.data[aura_env.notifyInspect].corruption = aura_env.data[aura_env.notifyInspect].corruption + stats["ITEM_MOD_CORRUPTION"] - end - if stats["ITEM_MOD_CORRUPTION_RESISTANCE"] then - aura_env.data[aura_env.notifyInspect].corruption = aura_env.data[aura_env.notifyInspect].corruption - stats["ITEM_MOD_CORRUPTION_RESISTANCE"] - end - end - end - if aura_env.data[aura_env.notifyInspect].backilvl > 0 then - local bil = aura_env.data[aura_env.notifyInspect].backilvl - if bil >= 470 and bil < 472 then - aura_env.data[aura_env.notifyInspect].corruption = aura_env.data[aura_env.notifyInspect].corruption - 5 - elseif bil >= 472 and bil <= 474 then - aura_env.data[aura_env.notifyInspect].corruption = aura_env.data[aura_env.notifyInspect].corruption - 12 - elseif bil >= 476 and bil <= 480 then - aura_env.data[aura_env.notifyInspect].corruption = aura_env.data[aura_env.notifyInspect].corruption - 20 - elseif bil >= 482 and bil <= 484 then - aura_env.data[aura_env.notifyInspect].corruption = aura_env.data[aura_env.notifyInspect].corruption - 27 - elseif bil >= 486 and bil <= 488 then - aura_env.data[aura_env.notifyInspect].corruption = aura_env.data[aura_env.notifyInspect].corruption - 35 - elseif bil >= 490 and bil <= 494 then - aura_env.data[aura_env.notifyInspect].corruption = aura_env.data[aura_env.notifyInspect].corruption - 42 - elseif bil >= 494 then - aura_env.data[aura_env.notifyInspect].corruption = aura_env.data[aura_env.notifyInspect].corruption - 50 - end - end - aura_env.data[aura_env.notifyInspect].inspectQueue = false - aura_env.data[aura_env.notifyInspect].inspected = true - aura_env.notifyInspect = false - ClearInspectPlayer() - end - end - - for k,v in pairs(aura_env.data) do - if v.inspected == false and v.inspectQueue == false then - aura_env.inspectQueue[#aura_env.inspectQueue + 1] = k - v.inspectQueue = true - end - if v.neckilvl == 0 and v.inspectQueue == false then - aura_env.inspectQueue[#aura_env.inspectQueue + 1] = k - v.inspectQueue = true - end - end - - for k,v in pairs(aura_env.data) do - allstates[k] = { - show = true, - changed = true, - name = v.name, - class = v.class, - classColor = aura_env.classColor(v.class), - backilvl = v.backilvl, - backColor = "|cff" .. aura_env.config.ccolor, - neckilvl = v.neckilvl, - neckColor = "|cff" .. aura_env.config.ncolor, - corruption = v.corruption, - corruptionColor = "|cff" .. aura_env.config.cocolor, - resort = true, - index = v.name, - } - if aura_env.config.sort == 1 then - allstates[k].index = v.name - elseif aura_env.config.sort == 2 then - allstates[k].index = v.backilvl - elseif aura_env.config.sort == 3 then - allstates[k].index = v.neckilvl - elseif aura_env.config.sort == 4 then - allstates[k].index = v.corruption - end - end - return true -end - ---DISPLAY -%classColor%n %neckColor%neckilvl %backColor%backilvl %corruptionColor%corruption - ---INIT -if WeakAuras.IsOptionsOpen() then - if aura_env.ticker then - aura_env.ticker:Cancel() - aura_env.ticker = nil - end -end -local aura_env = aura_env -aura_env.data = {} -aura_env.inspectQueue = {} -aura_env.insIndex = 1 -aura_env.notifyInspect = false -aura_env.inspecting = false -aura_env.output = "" -if not WeakAurasSaved.CustomTrash then WeakAurasSaved.CustomTrash = {} end -if not WeakAurasSaved.CustomTrash.Debug then WeakAurasSaved.CustomTrash.Debug = {} end - -aura_env.printTable = function(table, n) - if not n then n = 0 end - for k,v in pairs(table) do - local printText = "" - for i = 1, n do - printText = printText .. " " - end - printText = printText .. "[" .. k .. "] = " .. tostring(v) - print(printText) - if type(v) == "table" then - n = n + 1 - aura_env.printTable(v, n) - end - end -end - -local function uninspect() - aura_env.inspecting = false -end -hooksecurefunc("ClearInspectPlayer", uninspect) - -aura_env.classColor = function(class) - if class == 6 then return "|cFFC41F3B" elseif - class == 12 then return "|cFFA330C9" elseif - class == 11 then return "|cFFFF7D0A" elseif - class == 3 then return "|cFFABD473" elseif - class == 8 then return "|cFF40C7EB" elseif - class == 10 then return "|cFF00FF96" elseif - class == 2 then return "|cFFF58CBA" elseif - class == 5 then return "|cFFFFFFFF" elseif - class == 4 then return "|cFFFFF569" elseif - class == 7 then return "|cFF0070DE" elseif - class == 9 then return "|cFF8787ED" elseif - class == 1 then return "|cFFC79C6E" else - return "|cFF000000" end -end - -aura_env.inspectPing = function() - if aura_env.inspecting == false and aura_env.notifyInspect == false then - if #aura_env.inspectQueue > 0 then - --print("There are units to inspect D:") - if aura_env.insIndex >= #aura_env.inspectQueue then - aura_env.insIndex = 1 - end - for i = aura_env.insIndex, #aura_env.inspectQueue do - if CheckInteractDistance(aura_env.inspectQueue[i], 2) == true then - --print("QUEUEING INSPECT FOR", aura_env.inspectQueue[i]) - ClearInspectPlayer() - NotifyInspect(aura_env.inspectQueue[i]) - aura_env.notifyInspect = aura_env.inspectQueue[i] - table.remove(aura_env.inspectQueue, i) - break - end - end - end - end - for k,v in pairs(aura_env.data) do - if v.neckilvl == 0 and v.inspectQueue == false then - aura_env.inspectQueue[#aura_env.inspectQueue + 1] = k - v.inspectQueue = true - end - end -end +--GROUP_ROSTER_UPDATE INSPECT_READY +function(allstates, e) + if e == "GROUP_ROSTER_UPDATE" then + for i = 1, 40 do + local u = "raid" .. i + if UnitExists(u) and not UnitIsUnit(u, "player") then + if not aura_env.data[u] then + aura_env.data[u] = { + ["name"] = UnitName(u), + ["class"] = select(3, UnitClass(u)), + ["neckilvl"] = 0, + ["backilvl"] = 0, + ["corruption"] = 0, + ["inspectQueue"] = false, + ["inspected"] = false + } + end + if aura_env.data[u] then + if aura_env.data[u].name ~= UnitName(u) then + aura_env.data[u] = { + ["name"] = UnitName(u), + ["class"] = select(3, UnitClass(u)), + ["neckilvl"] = 0, + ["backilvl"] = 0, + ["corruption"] = 0, + ["inspectQueue"] = false, + ["inspected"] = false + } + end + end + elseif not UnitExists(u) and (aura_env.data[u] or allstates[u]) then + if aura_env.data[u] then + aura_env.data[u] = nil + end + for k,v in pairs(aura_env.inspectQueue) do + if v == u then + table.remove(aura_env.inspectQueue, k) + end + end + if allstates[u] then + allstates[u].show = false + allstates[u].changed = true + end + end + end + elseif e == "INSPECT_READY" then + if aura_env.notifyInspect ~= false and aura_env.inspecting == false then + InspectUnit(aura_env.notifyInspect) + aura_env.inspecting = true + elseif aura_env.notifyInspect ~= false and aura_env.inspecting == true then + for i = 1, 17 do + local link = GetInventoryItemLink(aura_env.notifyInspect, i) or 0 + if link ~= 0 then + local stats = {} + GetItemStats(link, stats) + local rarity = select(3, GetItemInfo(link)) + local ilvl = select(4, GetItemInfo(link)) + if aura_env.config.debug == true then + for k,v in pairs(stats) do + end + end + if i == 2 then + aura_env.data[aura_env.notifyInspect].neckilvl = ilvl + elseif i == 15 and rarity == 5 then + aura_env.data[aura_env.notifyInspect].backilvl = ilvl + end + if stats["ITEM_MOD_CORRUPTION"] then + aura_env.data[aura_env.notifyInspect].corruption = aura_env.data[aura_env.notifyInspect].corruption + stats["ITEM_MOD_CORRUPTION"] + end + if stats["ITEM_MOD_CORRUPTION_RESISTANCE"] then + aura_env.data[aura_env.notifyInspect].corruption = aura_env.data[aura_env.notifyInspect].corruption - stats["ITEM_MOD_CORRUPTION_RESISTANCE"] + end + end + end + if aura_env.data[aura_env.notifyInspect].backilvl > 0 then + local bil = aura_env.data[aura_env.notifyInspect].backilvl + if bil >= 470 and bil < 472 then + aura_env.data[aura_env.notifyInspect].corruption = aura_env.data[aura_env.notifyInspect].corruption - 5 + elseif bil >= 472 and bil <= 474 then + aura_env.data[aura_env.notifyInspect].corruption = aura_env.data[aura_env.notifyInspect].corruption - 12 + elseif bil >= 476 and bil <= 480 then + aura_env.data[aura_env.notifyInspect].corruption = aura_env.data[aura_env.notifyInspect].corruption - 20 + elseif bil >= 482 and bil <= 484 then + aura_env.data[aura_env.notifyInspect].corruption = aura_env.data[aura_env.notifyInspect].corruption - 27 + elseif bil >= 486 and bil <= 488 then + aura_env.data[aura_env.notifyInspect].corruption = aura_env.data[aura_env.notifyInspect].corruption - 35 + elseif bil >= 490 and bil <= 494 then + aura_env.data[aura_env.notifyInspect].corruption = aura_env.data[aura_env.notifyInspect].corruption - 42 + elseif bil >= 494 then + aura_env.data[aura_env.notifyInspect].corruption = aura_env.data[aura_env.notifyInspect].corruption - 50 + end + end + aura_env.data[aura_env.notifyInspect].inspectQueue = false + aura_env.data[aura_env.notifyInspect].inspected = true + aura_env.notifyInspect = false + ClearInspectPlayer() + end + end + + for k,v in pairs(aura_env.data) do + if v.inspected == false and v.inspectQueue == false then + aura_env.inspectQueue[#aura_env.inspectQueue + 1] = k + v.inspectQueue = true + end + if v.neckilvl == 0 and v.inspectQueue == false then + aura_env.inspectQueue[#aura_env.inspectQueue + 1] = k + v.inspectQueue = true + end + end + + for k,v in pairs(aura_env.data) do + allstates[k] = { + show = true, + changed = true, + name = v.name, + class = v.class, + classColor = aura_env.classColor(v.class), + backilvl = v.backilvl, + backColor = "|cff" .. aura_env.config.ccolor, + neckilvl = v.neckilvl, + neckColor = "|cff" .. aura_env.config.ncolor, + corruption = v.corruption, + corruptionColor = "|cff" .. aura_env.config.cocolor, + resort = true, + index = v.name, + } + if aura_env.config.sort == 1 then + allstates[k].index = v.name + elseif aura_env.config.sort == 2 then + allstates[k].index = v.backilvl + elseif aura_env.config.sort == 3 then + allstates[k].index = v.neckilvl + elseif aura_env.config.sort == 4 then + allstates[k].index = v.corruption + end + end + return true +end + +--DISPLAY +%classColor%n %neckColor%neckilvl %backColor%backilvl %corruptionColor%corruption + +--INIT +if WeakAuras.IsOptionsOpen() then + if aura_env.ticker then + aura_env.ticker:Cancel() + aura_env.ticker = nil + end +end +local aura_env = aura_env +aura_env.data = {} +aura_env.inspectQueue = {} +aura_env.insIndex = 1 +aura_env.notifyInspect = false +aura_env.inspecting = false +aura_env.output = "" +if not WeakAurasSaved.CustomTrash then WeakAurasSaved.CustomTrash = {} end +if not WeakAurasSaved.CustomTrash.Debug then WeakAurasSaved.CustomTrash.Debug = {} end + +aura_env.printTable = function(table, n) + if not n then n = 0 end + for k,v in pairs(table) do + local printText = "" + for i = 1, n do + printText = printText .. " " + end + printText = printText .. "[" .. k .. "] = " .. tostring(v) + print(printText) + if type(v) == "table" then + n = n + 1 + aura_env.printTable(v, n) + end + end +end + +local function uninspect() + aura_env.inspecting = false +end +hooksecurefunc("ClearInspectPlayer", uninspect) + +aura_env.classColor = function(class) + if class == 6 then return "|cFFC41F3B" elseif + class == 12 then return "|cFFA330C9" elseif + class == 11 then return "|cFFFF7D0A" elseif + class == 3 then return "|cFFABD473" elseif + class == 8 then return "|cFF40C7EB" elseif + class == 10 then return "|cFF00FF96" elseif + class == 2 then return "|cFFF58CBA" elseif + class == 5 then return "|cFFFFFFFF" elseif + class == 4 then return "|cFFFFF569" elseif + class == 7 then return "|cFF0070DE" elseif + class == 9 then return "|cFF8787ED" elseif + class == 1 then return "|cFFC79C6E" else + return "|cFF000000" end +end + +aura_env.inspectPing = function() + if aura_env.inspecting == false and aura_env.notifyInspect == false then + if #aura_env.inspectQueue > 0 then + --print("There are units to inspect D:") + if aura_env.insIndex >= #aura_env.inspectQueue then + aura_env.insIndex = 1 + end + for i = aura_env.insIndex, #aura_env.inspectQueue do + if CheckInteractDistance(aura_env.inspectQueue[i], 2) == true then + --print("QUEUEING INSPECT FOR", aura_env.inspectQueue[i]) + ClearInspectPlayer() + NotifyInspect(aura_env.inspectQueue[i]) + aura_env.notifyInspect = aura_env.inspectQueue[i] + table.remove(aura_env.inspectQueue, i) + break + end + end + end + end + for k,v in pairs(aura_env.data) do + if v.neckilvl == 0 and v.inspectQueue == false then + aura_env.inspectQueue[#aura_env.inspectQueue + 1] = k + v.inspectQueue = true + end + end +end aura_env.ticker = C_Timer.NewTicker(0.5, aura_env.inspectPing) \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/FO5A22680021 - Druid Stuff.lua b/WeakAuras/Projects/ByExp/Fivver Stuff/FO5A22680021 - Druid Stuff.lua similarity index 97% rename from Complete Projects/Fivver Stuff/FO5A22680021 - Druid Stuff.lua rename to WeakAuras/Projects/ByExp/Fivver Stuff/FO5A22680021 - Druid Stuff.lua index 67894f3..eaeca6b 100644 --- a/Complete Projects/Fivver Stuff/FO5A22680021 - Druid Stuff.lua +++ b/WeakAuras/Projects/ByExp/Fivver Stuff/FO5A22680021 - Druid Stuff.lua @@ -1,71 +1,71 @@ ---UNIT_AURA DRUID_HOTS_REMOVE_HOT UPDATE_HOTS -function(e, ...) - if not WeakAurasSaved.DruidHots then WeakAurasSaved.DruidHots = {} end - if not WeakAurasSaved.DruidHotsTotal then WeakAurasSaved.DruidHotsTotal = { - ["Rejuvenation"] = 0, - ["Regrowth"] = 0, - ["Lifebloom"] = 0, - ["Wild Growth"] = 0, - ["Spring Blossoms"] = 0, - ["Grove Tending"] = 0, - ["Rejuvenation (Germination)"] = 0, - } end - if e == "UNIT_AURA" then - local u = ... - local index = 1 - local GUID = UnitGUID(u) - local buff, update = 0, 0 - WeakAurasSaved.DruidHots[GUID] = {} - while UnitBuff(u, index, "PLAYER") do - local name = UnitBuff(u, index, "PLAYER") - local dur = select(6, UnitBuff(u, index, "PLAYER")) - if aura_env.hots[name] then - buff = 1 - WeakAurasSaved.DruidHots[GUID][name] = C_Timer.NewTimer(dur, function() WeakAuras.ScanEvents("DRUID_HOTS_REMOVE_HOT", GUID, name) end) - end - index = index + 1 - if index > 20 then break end - end - if buff == 0 then WeakAurasSaved.DruidHots[GUID] = nil end - if buff == 1 then WeakAuras.ScanEvents("UPDATE_HOTS") end - --DevTools_Dump(WeakAurasSaved.DruidHots) - elseif e == "DRUID_HOTS_REMOVE_HOT" then - local GUID, bname = ... - WeakAurasSaved.DruidHots[GUID][bname] = nil - WeakAuras.ScanEvents("UPDATE_HOTS") - --DevTools_Dump(WeakAurasSaved.DruidHots) - elseif e == "UPDATE_HOTS" then - WeakAurasSaved.DruidHotsTotal = { - ["Rejuvenation"] = 0, - ["Regrowth"] = 0, - ["Lifebloom"] = 0, - ["Wild Growth"] = 0, - ["Spring Blossoms"] = 0, - ["Grove Tending"] = 0, - ["Rejuvenation (Germination)"] = 0, - } - for k,v in pairs(WeakAurasSaved.DruidHots) do - for k2, v2 in pairs(v) do - --print(k2) - WeakAurasSaved.DruidHotsTotal[k2] = WeakAurasSaved.DruidHotsTotal[k2] + 1 - end - end - --DevTools_Dump(WeakAurasSaved.DruidHotsTotal) - end -end - ---DISPLAY -function() - return WeakAurasSaved.DruidHotsTotal["Grove Tending"] -end - ---INIT -aura_env.hots = { - ["Rejuvenation"] = 1, - ["Regrowth"] = 1, - ["Lifebloom"] = 1, - ["Wild Growth"] = 1, - ["Spring Blossoms"] = 1, - ["Grove Tending"] = 1, - ["Rejuvenation (Germination)"] = 1, +--UNIT_AURA DRUID_HOTS_REMOVE_HOT UPDATE_HOTS +function(e, ...) + if not WeakAurasSaved.DruidHots then WeakAurasSaved.DruidHots = {} end + if not WeakAurasSaved.DruidHotsTotal then WeakAurasSaved.DruidHotsTotal = { + ["Rejuvenation"] = 0, + ["Regrowth"] = 0, + ["Lifebloom"] = 0, + ["Wild Growth"] = 0, + ["Spring Blossoms"] = 0, + ["Grove Tending"] = 0, + ["Rejuvenation (Germination)"] = 0, + } end + if e == "UNIT_AURA" then + local u = ... + local index = 1 + local GUID = UnitGUID(u) + local buff, update = 0, 0 + WeakAurasSaved.DruidHots[GUID] = {} + while UnitBuff(u, index, "PLAYER") do + local name = UnitBuff(u, index, "PLAYER") + local dur = select(6, UnitBuff(u, index, "PLAYER")) + if aura_env.hots[name] then + buff = 1 + WeakAurasSaved.DruidHots[GUID][name] = C_Timer.NewTimer(dur, function() WeakAuras.ScanEvents("DRUID_HOTS_REMOVE_HOT", GUID, name) end) + end + index = index + 1 + if index > 20 then break end + end + if buff == 0 then WeakAurasSaved.DruidHots[GUID] = nil end + if buff == 1 then WeakAuras.ScanEvents("UPDATE_HOTS") end + --DevTools_Dump(WeakAurasSaved.DruidHots) + elseif e == "DRUID_HOTS_REMOVE_HOT" then + local GUID, bname = ... + WeakAurasSaved.DruidHots[GUID][bname] = nil + WeakAuras.ScanEvents("UPDATE_HOTS") + --DevTools_Dump(WeakAurasSaved.DruidHots) + elseif e == "UPDATE_HOTS" then + WeakAurasSaved.DruidHotsTotal = { + ["Rejuvenation"] = 0, + ["Regrowth"] = 0, + ["Lifebloom"] = 0, + ["Wild Growth"] = 0, + ["Spring Blossoms"] = 0, + ["Grove Tending"] = 0, + ["Rejuvenation (Germination)"] = 0, + } + for k,v in pairs(WeakAurasSaved.DruidHots) do + for k2, v2 in pairs(v) do + --print(k2) + WeakAurasSaved.DruidHotsTotal[k2] = WeakAurasSaved.DruidHotsTotal[k2] + 1 + end + end + --DevTools_Dump(WeakAurasSaved.DruidHotsTotal) + end +end + +--DISPLAY +function() + return WeakAurasSaved.DruidHotsTotal["Grove Tending"] +end + +--INIT +aura_env.hots = { + ["Rejuvenation"] = 1, + ["Regrowth"] = 1, + ["Lifebloom"] = 1, + ["Wild Growth"] = 1, + ["Spring Blossoms"] = 1, + ["Grove Tending"] = 1, + ["Rejuvenation (Germination)"] = 1, } \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/FO815D7649125 - Swing Timer.lua b/WeakAuras/Projects/ByExp/Fivver Stuff/FO815D7649125 - Swing Timer.lua similarity index 97% rename from Complete Projects/Fivver Stuff/FO815D7649125 - Swing Timer.lua rename to WeakAuras/Projects/ByExp/Fivver Stuff/FO815D7649125 - Swing Timer.lua index 925800e..e2bbe02 100644 --- a/Complete Projects/Fivver Stuff/FO815D7649125 - Swing Timer.lua +++ b/WeakAuras/Projects/ByExp/Fivver Stuff/FO815D7649125 - Swing Timer.lua @@ -1,105 +1,105 @@ ---COMBAT_LOG_EVENT_UNFILTERED PLAYER_REGEN_ENABLED ---I fucked it up. -function(e, msg, sender) - if not WeakAurasSaved.MagusKeywords then WeakAurasSaved.MagusKeywords = {["tb"] = "Thunder Bluff", ["org"] = "Orgrimmar", ["uc"] = "Undercity", ["portal"] = "Portal", ["port"] = "Portal", ["water"] = "Water", ["waters"] = "Waters", ["food"] = "Food"} end - if e == "CHAT_MSG_SAY" or e == "CHAT_MSG_YELL" or e == "CHAT_MSG_WHISPER" then - if msg and aura_env.toggle == 1 then - msg = msg:lower() - local noRealmSender = sender:match("(.+)-%w+") - --print(sender, noRealmSender, UnitClass(sender), UnitClass(noRealmSender)) - if select(3, UnitClass(noRealmSender)) == 8 and not WeakAurasSaved.MagusKeywords.AntiMagusTable[noRealmSender] then - print("Adding", noRealmSender, "to the ignore") - WeakAurasSaved.MagusKeywords.AntiMagusTable[noRealmSender] = 1 - end - for k,v in pairs(WeakAurasSaved.MagusKeywords) do - if msg:match(k) then - local st, en = msg:find(k) - if not (st > 1 and msg:match(".", st - 1) ~= " ") and not (en < strlen(msg) and msg:match(".", en + 1) ~= " ") and select(3, UnitClass(noRealmSender)) ~= 8 then - if not WeakAurasSaved.MagusKeywords.AntiMagusTable[noRealmSender] then - InviteUnit(sender) - end - end - end - end - end - elseif e == "TOGGLE_MAGUS" then - if aura_env.toggle == 0 then - print("Toggling script on") - SendWho('z-"azsuna" c-"Mage"') - aura_env.toggle = 1 - else - print("Toggling script off") - aura_env.toggle = 0 - end - elseif e == "WHO_LIST_UPDATE" then - for i = 1, GetNumWhoResults() do - local name = select(1, GetWhoInfo(i)) - local class = select(5, GetWhoInfo(i)) - if class:match("Mage") then - if not WeakAurasSaved.MagusKeywords.AntiMagusTable[name] then - print("Adding", name, "to the ignore table") - WeakAurasSaved.MagusKeywords.AntiMagusTable[name] = 1 - end - end - end - FriendsFrameCloseButton:Click() - elseif e == "NAME_PLATE_UNIT_ADDED" then - local name, class = UnitName(msg), select(3, UnitClass(msg)) - local ispl = UnitIsPlayer(msg) - if class == 8 and WeakAurasSaved.MagusKeywords.AntiMagusTable[name] == nil and ispl == true then - print("Adding", name, "to the ignore table") - WeakAurasSaved.MagusKeywords.AntiMagusTable[name] = 1 - end - elseif e =="NAME_PLATE_UNIT_REMOVED" then - local name, class = UnitName(msg), select(3, UnitClass(msg)) - local ispl = UnitIsPlayer(msg) - if class == 8 and WeakAurasSaved.MagusKeywords.AntiMagusTable[name] == nil and ispl == true then - print("Adding", name, "to the ignore table") - WeakAurasSaved.MagusKeywords.AntiMagusTable[name] = 1 - end - elseif e == "ADD_KEYWORD" then - print("Adding", msg) - msg = msg:lower() - WeakAurasSaved.MagusKeywords[msg] = 1 - elseif e == "LIST_KEYWORDS" then - for k,v in pairs(WeakAurasSaved.MagusKeywords) do - print(k) - end - elseif e == "REMOVE_KEYWORD" then - if WeakAurasSaved.MagusKeywords[msg] then - print("Removing", msg) - WeakAurasSaved.MagusKeywords[msg] = nil - else - print(msg, "does not exist in the keyword table") - end - end -end - ---EVERY FRAME 1 -function() - if (WeakAurasSaved.CustomTrash.swingone - GetTime()) > 0 then - return string.format("%.1f", WeakAurasSaved.CustomTrash.swingone - GetTime()) - end -end - ---EVERY FRAME 2 -function() - if (WeakAurasSaved.CustomTrash.swingtwo - GetTime()) > 0 then - return string.format("%.1f", WeakAurasSaved.CustomTrash.swingtwo - GetTime()) - end -end - ---DISPLAY -function() - if WeakAurasSaved.CustomTrash.swingRotation == 1 then - return "MH" - elseif WeakAurasSaved.CustomTrash.swingRotation == 2 then - return "OH" - end -end - ---INIT -if not WeakAurasSaved.CustomTrash then WeakAurasSaved.CustomTrash = {} end -WeakAurasSaved.CustomTrash.swingRotation = 1 -WeakAurasSaved.CustomTrash.swingone = 0 +--COMBAT_LOG_EVENT_UNFILTERED PLAYER_REGEN_ENABLED +--I fucked it up. +function(e, msg, sender) + if not WeakAurasSaved.MagusKeywords then WeakAurasSaved.MagusKeywords = {["tb"] = "Thunder Bluff", ["org"] = "Orgrimmar", ["uc"] = "Undercity", ["portal"] = "Portal", ["port"] = "Portal", ["water"] = "Water", ["waters"] = "Waters", ["food"] = "Food"} end + if e == "CHAT_MSG_SAY" or e == "CHAT_MSG_YELL" or e == "CHAT_MSG_WHISPER" then + if msg and aura_env.toggle == 1 then + msg = msg:lower() + local noRealmSender = sender:match("(.+)-%w+") + --print(sender, noRealmSender, UnitClass(sender), UnitClass(noRealmSender)) + if select(3, UnitClass(noRealmSender)) == 8 and not WeakAurasSaved.MagusKeywords.AntiMagusTable[noRealmSender] then + print("Adding", noRealmSender, "to the ignore") + WeakAurasSaved.MagusKeywords.AntiMagusTable[noRealmSender] = 1 + end + for k,v in pairs(WeakAurasSaved.MagusKeywords) do + if msg:match(k) then + local st, en = msg:find(k) + if not (st > 1 and msg:match(".", st - 1) ~= " ") and not (en < strlen(msg) and msg:match(".", en + 1) ~= " ") and select(3, UnitClass(noRealmSender)) ~= 8 then + if not WeakAurasSaved.MagusKeywords.AntiMagusTable[noRealmSender] then + InviteUnit(sender) + end + end + end + end + end + elseif e == "TOGGLE_MAGUS" then + if aura_env.toggle == 0 then + print("Toggling script on") + SendWho('z-"azsuna" c-"Mage"') + aura_env.toggle = 1 + else + print("Toggling script off") + aura_env.toggle = 0 + end + elseif e == "WHO_LIST_UPDATE" then + for i = 1, GetNumWhoResults() do + local name = select(1, GetWhoInfo(i)) + local class = select(5, GetWhoInfo(i)) + if class:match("Mage") then + if not WeakAurasSaved.MagusKeywords.AntiMagusTable[name] then + print("Adding", name, "to the ignore table") + WeakAurasSaved.MagusKeywords.AntiMagusTable[name] = 1 + end + end + end + FriendsFrameCloseButton:Click() + elseif e == "NAME_PLATE_UNIT_ADDED" then + local name, class = UnitName(msg), select(3, UnitClass(msg)) + local ispl = UnitIsPlayer(msg) + if class == 8 and WeakAurasSaved.MagusKeywords.AntiMagusTable[name] == nil and ispl == true then + print("Adding", name, "to the ignore table") + WeakAurasSaved.MagusKeywords.AntiMagusTable[name] = 1 + end + elseif e =="NAME_PLATE_UNIT_REMOVED" then + local name, class = UnitName(msg), select(3, UnitClass(msg)) + local ispl = UnitIsPlayer(msg) + if class == 8 and WeakAurasSaved.MagusKeywords.AntiMagusTable[name] == nil and ispl == true then + print("Adding", name, "to the ignore table") + WeakAurasSaved.MagusKeywords.AntiMagusTable[name] = 1 + end + elseif e == "ADD_KEYWORD" then + print("Adding", msg) + msg = msg:lower() + WeakAurasSaved.MagusKeywords[msg] = 1 + elseif e == "LIST_KEYWORDS" then + for k,v in pairs(WeakAurasSaved.MagusKeywords) do + print(k) + end + elseif e == "REMOVE_KEYWORD" then + if WeakAurasSaved.MagusKeywords[msg] then + print("Removing", msg) + WeakAurasSaved.MagusKeywords[msg] = nil + else + print(msg, "does not exist in the keyword table") + end + end +end + +--EVERY FRAME 1 +function() + if (WeakAurasSaved.CustomTrash.swingone - GetTime()) > 0 then + return string.format("%.1f", WeakAurasSaved.CustomTrash.swingone - GetTime()) + end +end + +--EVERY FRAME 2 +function() + if (WeakAurasSaved.CustomTrash.swingtwo - GetTime()) > 0 then + return string.format("%.1f", WeakAurasSaved.CustomTrash.swingtwo - GetTime()) + end +end + +--DISPLAY +function() + if WeakAurasSaved.CustomTrash.swingRotation == 1 then + return "MH" + elseif WeakAurasSaved.CustomTrash.swingRotation == 2 then + return "OH" + end +end + +--INIT +if not WeakAurasSaved.CustomTrash then WeakAurasSaved.CustomTrash = {} end +WeakAurasSaved.CustomTrash.swingRotation = 1 +WeakAurasSaved.CustomTrash.swingone = 0 WeakAurasSaved.CustomTrash.swingtwo = 0 \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/FO815F92E76D5 - Combat Timer.lua b/WeakAuras/Projects/ByExp/Fivver Stuff/FO815F92E76D5 - Combat Timer.lua similarity index 98% rename from Complete Projects/Fivver Stuff/FO815F92E76D5 - Combat Timer.lua rename to WeakAuras/Projects/ByExp/Fivver Stuff/FO815F92E76D5 - Combat Timer.lua index a530264..c540235 100644 --- a/Complete Projects/Fivver Stuff/FO815F92E76D5 - Combat Timer.lua +++ b/WeakAuras/Projects/ByExp/Fivver Stuff/FO815F92E76D5 - Combat Timer.lua @@ -1,103 +1,103 @@ ---PLAYER_REGEN_DISABLED PLAYER_REGEN_ENABLED COMBAT_TICKER_TICK COMBAT_TICKER_FALSE -function(e) - if not WeakAurasSaved.CustomTrash then WeakAurasSaved.CustomTrash = {} end - if not WeakAurasSaved.CustomTrash.CombatTimers then WeakAurasSaved.CustomTrash.CombatTimers = {}; aura_env.updateTimers() end - if e == "PLAYER_REGEN_ENABLED" then - if WeakAurasSaved.CustomTrash.CombatTimers.ticker then WeakAurasSaved.CustomTrash.CombatTimers.ticker:Cancel(); WeakAurasSaved.CustomTrash.CombatTimers.ticker = nil end - elseif e == "PLAYER_REGEN_DISABLED" then - WeakAurasSaved.CustomTrash.CombatTimers.time = 0 - WeakAuras.ScanEvents("COMBAT_TICKER_TICK") - WeakAurasSaved.CustomTrash.CombatTimers.nearestTime = {["time"] = 999, ["id"] = 0} - aura_env.nextTimer(WeakAurasSaved.CustomTrash.CombatTimers.time) - if not WeakAurasSaved.CustomTrash.CombatTimers.ticker then WeakAurasSaved.CustomTrash.CombatTimers.ticker = C_Timer.NewTicker(1, function() WeakAuras.ScanEvents("COMBAT_TICKER_TICK") end) end - elseif e == "COMBAT_TICKER_TICK" then - WeakAurasSaved.CustomTrash.CombatTimers.time = WeakAurasSaved.CustomTrash.CombatTimers.time + 1 - WeakAurasSaved.CustomTrash.CombatTimers.nearestTime.time = WeakAurasSaved.CustomTrash.CombatTimers.nearestTime.time - 1 - if WeakAurasSaved.CustomTrash.CombatTimers.timers[WeakAurasSaved.CustomTrash.CombatTimers.time] then - WeakAurasSaved.CustomTrash.CombatTimers.nearestTime = {["time"] = 999, ["id"] = 0} - aura_env.nextTimer(WeakAurasSaved.CustomTrash.CombatTimers.time) - C_Timer.After(aura_env.config.dur, function() WeakAuras.ScanEvents("COMBAT_TICKER_FALSE") end) - return true - end - end -end - ---UNTRIGGER -function(e) - if e == "COMBAT_TICKER_FALSE" then - return true - end -end - ---Aura #2 ---COMBAT_TICKER_TICK -function(e) - return true -end - ---DISPLAY -function() - local temps = { - [1] = {["m"] = 0, ["s"] = 0, ["res"] = WeakAurasSaved.CustomTrash.CombatTimers.time}, - [2] = {["m"] = 0, ["s"] = 0, ["res"] = WeakAurasSaved.CustomTrash.CombatTimers.nearestTime.time}, - [3] = {["m"] = 0, ["s"] = 0, ["res"] = WeakAurasSaved.CustomTrash.CombatTimers.nearestTime.id}, - } - - for k,v in ipairs(temps) do - while v.res >= 60 do - v.m = v.m + 1 - v.res = v.res - 60 - end - v.s = v.res - if v.s < 10 then - v.s = string.format("0%d", v.s) - end - if type(v.s) ~= "string" then tostring(v.s) end - end - - return string.format("%d:%s\n%d:%s (%d:%s)", temps[1].m, temps[1].s, temps[2].m, temps[2].s, temps[3].m, temps[3].s) -end - ---INIT -if not WeakAurasSaved.CustomTrash then WeakAurasSaved.CustomTrash = {} end -if not WeakAurasSaved.CustomTrash.CombatTimers then WeakAurasSaved.CustomTrash.CombatTimers = {} end - -WeakAurasSaved.CustomTrash.CombatTimers.nearestTime = {["time"] = 999, ["id"] = 0} -WeakAurasSaved.CustomTrash.CombatTimers.time = 0 - -aura_env.updateTimers = function() - WeakAurasSaved.CustomTrash.CombatTimers.timers = {} - WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m1 or 0) * 60) + (aura_env.config.s1 or 0)] = 1 - WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m2 or 0) * 60) + (aura_env.config.s2 or 0)] = 1 - WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m3 or 0) * 60) + (aura_env.config.s3 or 0)] = 1 - WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m4 or 0) * 60) + (aura_env.config.s4 or 0)] = 1 - WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m5 or 0) * 60) + (aura_env.config.s5 or 0)] = 1 - WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m6 or 0) * 60) + (aura_env.config.s6 or 0)] = 1 - WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m7 or 0) * 60) + (aura_env.config.s7 or 0)] = 1 - WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m8 or 0) * 60) + (aura_env.config.s8 or 0)] = 1 - WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m9 or 0) * 60) + (aura_env.config.s9 or 0)] = 1 - WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m10 or 0) * 60) + (aura_env.config.s10 or 0)] = 1 - WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m11 or 0) * 60) + (aura_env.config.s11 or 0)] = 1 - WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m12 or 0) * 60) + (aura_env.config.s12 or 0)] = 1 - WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m13 or 0) * 60) + (aura_env.config.s13 or 0)] = 1 - WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m14 or 0) * 60) + (aura_env.config.s14 or 0)] = 1 - WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m15 or 0) * 60) + (aura_env.config.s15 or 0)] = 1 - WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m16 or 0) * 60) + (aura_env.config.s16 or 0)] = 1 - WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m17 or 0) * 60) + (aura_env.config.s17 or 0)] = 1 - WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m18 or 0) * 60) + (aura_env.config.s18 or 0)] = 1 - WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m19 or 0) * 60) + (aura_env.config.s19 or 0)] = 1 - WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m20 or 0) * 60) + (aura_env.config.s20 or 0)] = 1 -end - -aura_env.updateTimers() - -aura_env.nextTimer = function(time) - for k,v in pairs(WeakAurasSaved.CustomTrash.CombatTimers.timers) do - local dtime = k - time - if dtime < WeakAurasSaved.CustomTrash.CombatTimers.nearestTime.time and dtime > 0 then - WeakAurasSaved.CustomTrash.CombatTimers.nearestTime.time = dtime - WeakAurasSaved.CustomTrash.CombatTimers.nearestTime.id = k - end - end - return 0 +--PLAYER_REGEN_DISABLED PLAYER_REGEN_ENABLED COMBAT_TICKER_TICK COMBAT_TICKER_FALSE +function(e) + if not WeakAurasSaved.CustomTrash then WeakAurasSaved.CustomTrash = {} end + if not WeakAurasSaved.CustomTrash.CombatTimers then WeakAurasSaved.CustomTrash.CombatTimers = {}; aura_env.updateTimers() end + if e == "PLAYER_REGEN_ENABLED" then + if WeakAurasSaved.CustomTrash.CombatTimers.ticker then WeakAurasSaved.CustomTrash.CombatTimers.ticker:Cancel(); WeakAurasSaved.CustomTrash.CombatTimers.ticker = nil end + elseif e == "PLAYER_REGEN_DISABLED" then + WeakAurasSaved.CustomTrash.CombatTimers.time = 0 + WeakAuras.ScanEvents("COMBAT_TICKER_TICK") + WeakAurasSaved.CustomTrash.CombatTimers.nearestTime = {["time"] = 999, ["id"] = 0} + aura_env.nextTimer(WeakAurasSaved.CustomTrash.CombatTimers.time) + if not WeakAurasSaved.CustomTrash.CombatTimers.ticker then WeakAurasSaved.CustomTrash.CombatTimers.ticker = C_Timer.NewTicker(1, function() WeakAuras.ScanEvents("COMBAT_TICKER_TICK") end) end + elseif e == "COMBAT_TICKER_TICK" then + WeakAurasSaved.CustomTrash.CombatTimers.time = WeakAurasSaved.CustomTrash.CombatTimers.time + 1 + WeakAurasSaved.CustomTrash.CombatTimers.nearestTime.time = WeakAurasSaved.CustomTrash.CombatTimers.nearestTime.time - 1 + if WeakAurasSaved.CustomTrash.CombatTimers.timers[WeakAurasSaved.CustomTrash.CombatTimers.time] then + WeakAurasSaved.CustomTrash.CombatTimers.nearestTime = {["time"] = 999, ["id"] = 0} + aura_env.nextTimer(WeakAurasSaved.CustomTrash.CombatTimers.time) + C_Timer.After(aura_env.config.dur, function() WeakAuras.ScanEvents("COMBAT_TICKER_FALSE") end) + return true + end + end +end + +--UNTRIGGER +function(e) + if e == "COMBAT_TICKER_FALSE" then + return true + end +end + +--Aura #2 +--COMBAT_TICKER_TICK +function(e) + return true +end + +--DISPLAY +function() + local temps = { + [1] = {["m"] = 0, ["s"] = 0, ["res"] = WeakAurasSaved.CustomTrash.CombatTimers.time}, + [2] = {["m"] = 0, ["s"] = 0, ["res"] = WeakAurasSaved.CustomTrash.CombatTimers.nearestTime.time}, + [3] = {["m"] = 0, ["s"] = 0, ["res"] = WeakAurasSaved.CustomTrash.CombatTimers.nearestTime.id}, + } + + for k,v in ipairs(temps) do + while v.res >= 60 do + v.m = v.m + 1 + v.res = v.res - 60 + end + v.s = v.res + if v.s < 10 then + v.s = string.format("0%d", v.s) + end + if type(v.s) ~= "string" then tostring(v.s) end + end + + return string.format("%d:%s\n%d:%s (%d:%s)", temps[1].m, temps[1].s, temps[2].m, temps[2].s, temps[3].m, temps[3].s) +end + +--INIT +if not WeakAurasSaved.CustomTrash then WeakAurasSaved.CustomTrash = {} end +if not WeakAurasSaved.CustomTrash.CombatTimers then WeakAurasSaved.CustomTrash.CombatTimers = {} end + +WeakAurasSaved.CustomTrash.CombatTimers.nearestTime = {["time"] = 999, ["id"] = 0} +WeakAurasSaved.CustomTrash.CombatTimers.time = 0 + +aura_env.updateTimers = function() + WeakAurasSaved.CustomTrash.CombatTimers.timers = {} + WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m1 or 0) * 60) + (aura_env.config.s1 or 0)] = 1 + WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m2 or 0) * 60) + (aura_env.config.s2 or 0)] = 1 + WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m3 or 0) * 60) + (aura_env.config.s3 or 0)] = 1 + WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m4 or 0) * 60) + (aura_env.config.s4 or 0)] = 1 + WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m5 or 0) * 60) + (aura_env.config.s5 or 0)] = 1 + WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m6 or 0) * 60) + (aura_env.config.s6 or 0)] = 1 + WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m7 or 0) * 60) + (aura_env.config.s7 or 0)] = 1 + WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m8 or 0) * 60) + (aura_env.config.s8 or 0)] = 1 + WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m9 or 0) * 60) + (aura_env.config.s9 or 0)] = 1 + WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m10 or 0) * 60) + (aura_env.config.s10 or 0)] = 1 + WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m11 or 0) * 60) + (aura_env.config.s11 or 0)] = 1 + WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m12 or 0) * 60) + (aura_env.config.s12 or 0)] = 1 + WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m13 or 0) * 60) + (aura_env.config.s13 or 0)] = 1 + WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m14 or 0) * 60) + (aura_env.config.s14 or 0)] = 1 + WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m15 or 0) * 60) + (aura_env.config.s15 or 0)] = 1 + WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m16 or 0) * 60) + (aura_env.config.s16 or 0)] = 1 + WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m17 or 0) * 60) + (aura_env.config.s17 or 0)] = 1 + WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m18 or 0) * 60) + (aura_env.config.s18 or 0)] = 1 + WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m19 or 0) * 60) + (aura_env.config.s19 or 0)] = 1 + WeakAurasSaved.CustomTrash.CombatTimers.timers[((aura_env.config.m20 or 0) * 60) + (aura_env.config.s20 or 0)] = 1 +end + +aura_env.updateTimers() + +aura_env.nextTimer = function(time) + for k,v in pairs(WeakAurasSaved.CustomTrash.CombatTimers.timers) do + local dtime = k - time + if dtime < WeakAurasSaved.CustomTrash.CombatTimers.nearestTime.time and dtime > 0 then + WeakAurasSaved.CustomTrash.CombatTimers.nearestTime.time = dtime + WeakAurasSaved.CustomTrash.CombatTimers.nearestTime.id = k + end + end + return 0 end \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/Fiverr - Conductive Ink.lua b/WeakAuras/Projects/ByExp/Fivver Stuff/Fiverr - Conductive Ink.lua similarity index 97% rename from Complete Projects/Fivver Stuff/Fiverr - Conductive Ink.lua rename to WeakAuras/Projects/ByExp/Fivver Stuff/Fiverr - Conductive Ink.lua index e635e25..07c7f4a 100644 --- a/Complete Projects/Fivver Stuff/Fiverr - Conductive Ink.lua +++ b/WeakAuras/Projects/ByExp/Fivver Stuff/Fiverr - Conductive Ink.lua @@ -1,65 +1,65 @@ ---CLEU -function(e, ...) - local se = select(2, ...) - if se == "SPELL_AURA_APPLIED_DOSE" or e == "PLAYER_TARGET_CHANGED" then - aura_env.owndebuff = {["stacks"] = 0, ["damage"] = 0,} - aura_env.totaldebuff = {["stacks"] = 0, ["damage"] = 0,} - for i = 1, 40 do - local name = UnitDebuff("target", i) - if name == "Conductive Ink" then - aura_env.totaldebuff.stacks = aura_env.totaldebuff.stacks + select(3, UnitDebuff("target", i)) - aura_env.totaldebuff.damage = aura_env.totaldebuff.stacks * aura_env.config.mediandamage - end - end - for i = 1, 40 do - local name = UnitDebuff("target", i, PLAYER) - if name == "Conductive Ink" then - aura_env.owndebuff.stacks = select(3, UnitDebuff("target", i, PLAYER)) - aura_env.owndebuff.damage = aura_env.owndebuff.stacks * aura_env.config.mediandamage - break - end - end - return true - end -end - ---DISPLAY -function() - if aura_env.config.sh == true then aura_env.owndebuff.damage = aura_env.shorten(aura_env.owndebuff.damage); aura_env.totaldebuff.damage = aura_env.shorten(aura_env.totaldebuff.damage) end - aura_env.region.text2:SetText(aura_env.owndebuff.stacks .. "\n" .. aura_env.owndebuff.damage .. "\n" .. aura_env.totaldebuff.stacks .. "\n" .. aura_env.totaldebuff.damage) - return "Player stacks\nPlayer damage\nTotal stacks\nTotal damage" -end - ---INIT -aura_env.owndebuff = {["stacks"] = 0, ["damage"] = 0,} -aura_env.totaldebuff = {["stacks"] = 0, ["damage"] = 0,} -if not aura_env.region.text2 then - local text2 = aura_env.region:CreateFontString(nil, aura_env.region) - aura_env.region.text2 = text2 -end -local font, size, flags = aura_env.region.text:GetFont() -aura_env.region.text2:SetFont(font, size, flags) -aura_env.region.text2:SetTextColor(aura_env.config.color[1], aura_env.config.color[2], aura_env.config.color[3], aura_env.config.color[4]) -aura_env.region.text2:SetPoint("CENTER", aura_env.region, "CENTER", aura_env.config.x, 0) -aura_env.region.text2:SetText("") -aura_env.region.text2:Show() -aura_env.shorten = function(val) - local function round(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var - end - local n = 2 - if val < 1e3 then - return round(val, n) - elseif val > 1e3 and val < 1e6 then - return round(val / 1e3, n) .. "k" - elseif val > 1e6 and val < 1e9 then - return round(val / 1e6, n) .. "M" - elseif val > 1e9 then - return round(val / 1e9, n) .. "G" - end +--CLEU +function(e, ...) + local se = select(2, ...) + if se == "SPELL_AURA_APPLIED_DOSE" or e == "PLAYER_TARGET_CHANGED" then + aura_env.owndebuff = {["stacks"] = 0, ["damage"] = 0,} + aura_env.totaldebuff = {["stacks"] = 0, ["damage"] = 0,} + for i = 1, 40 do + local name = UnitDebuff("target", i) + if name == "Conductive Ink" then + aura_env.totaldebuff.stacks = aura_env.totaldebuff.stacks + select(3, UnitDebuff("target", i)) + aura_env.totaldebuff.damage = aura_env.totaldebuff.stacks * aura_env.config.mediandamage + end + end + for i = 1, 40 do + local name = UnitDebuff("target", i, PLAYER) + if name == "Conductive Ink" then + aura_env.owndebuff.stacks = select(3, UnitDebuff("target", i, PLAYER)) + aura_env.owndebuff.damage = aura_env.owndebuff.stacks * aura_env.config.mediandamage + break + end + end + return true + end +end + +--DISPLAY +function() + if aura_env.config.sh == true then aura_env.owndebuff.damage = aura_env.shorten(aura_env.owndebuff.damage); aura_env.totaldebuff.damage = aura_env.shorten(aura_env.totaldebuff.damage) end + aura_env.region.text2:SetText(aura_env.owndebuff.stacks .. "\n" .. aura_env.owndebuff.damage .. "\n" .. aura_env.totaldebuff.stacks .. "\n" .. aura_env.totaldebuff.damage) + return "Player stacks\nPlayer damage\nTotal stacks\nTotal damage" +end + +--INIT +aura_env.owndebuff = {["stacks"] = 0, ["damage"] = 0,} +aura_env.totaldebuff = {["stacks"] = 0, ["damage"] = 0,} +if not aura_env.region.text2 then + local text2 = aura_env.region:CreateFontString(nil, aura_env.region) + aura_env.region.text2 = text2 +end +local font, size, flags = aura_env.region.text:GetFont() +aura_env.region.text2:SetFont(font, size, flags) +aura_env.region.text2:SetTextColor(aura_env.config.color[1], aura_env.config.color[2], aura_env.config.color[3], aura_env.config.color[4]) +aura_env.region.text2:SetPoint("CENTER", aura_env.region, "CENTER", aura_env.config.x, 0) +aura_env.region.text2:SetText("") +aura_env.region.text2:Show() +aura_env.shorten = function(val) + local function round(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var + end + local n = 2 + if val < 1e3 then + return round(val, n) + elseif val > 1e3 and val < 1e6 then + return round(val / 1e3, n) .. "k" + elseif val > 1e6 and val < 1e9 then + return round(val / 1e6, n) .. "M" + elseif val > 1e9 then + return round(val / 1e9, n) .. "G" + end end \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/Fiverr - Conductive Ink2.lua b/WeakAuras/Projects/ByExp/Fivver Stuff/Fiverr - Conductive Ink2.lua similarity index 97% rename from Complete Projects/Fivver Stuff/Fiverr - Conductive Ink2.lua rename to WeakAuras/Projects/ByExp/Fivver Stuff/Fiverr - Conductive Ink2.lua index 1ef3700..3c9a609 100644 --- a/Complete Projects/Fivver Stuff/Fiverr - Conductive Ink2.lua +++ b/WeakAuras/Projects/ByExp/Fivver Stuff/Fiverr - Conductive Ink2.lua @@ -1,290 +1,290 @@ ---CLEU PLAYER_TARGET_CHANGED PLAYER_FOCUS_CHANGED -function(e, ...) - if aura_env.config.tsuenable == false then - local se = select(2, ...) - if se == "SPELL_AURA_APPLIED_DOSE" or e == "PLAYER_TARGET_CHANGED" then - aura_env.owndebuff = {["stacks"] = 0, ["damage"] = 0,} - aura_env.totaldebuff = {["stacks"] = 0, ["damage"] = 0,} - aura_env.damagepercentage = 0 - local unit = "target" - if aura_env.config.tar == 2 then unit = "focus" elseif aura_env.config.tar == 3 then unit = "Boss1" end - local bossmax = UnitHealthMax(unit) - if aura_env.config.pdmg == true then - for i = 1, 200 do - local name = UnitDebuff(unit, i) - if name == "Conductive Ink" then - local caster = select(7, UnitDebuff(unit, i)) - local stacks = select(3, UnitDebuff(unit, i)) - aura_env.totaldebuff.stacks = aura_env.totaldebuff.stacks + stacks - aura_env.myTooltip:SetUnitDebuff(unit, i) - local text = _G["MyAddOnTooltipTextLeft2"]:GetText() - if text:match("Falling below %d*%% health will cause") then - local damage = text:match("inflict (%d+%,?%d*)") - damage = damage:gsub("%,", "") - damage = damage:gsub(" ", "") - damage = tonumber(damage) - aura_env.totaldebuff.damage = aura_env.totaldebuff.damage + damage - if caster == "player" then aura_env.owndebuff.damage = damage; aura_env.owndebuff.stacks = stacks end - end - elseif not name then break end - end - else - for i = 1, 200 do - local name = UnitDebuff(unit, i) - if name == "Conductive Ink" then - aura_env.totaldebuff.stacks = aura_env.totaldebuff.stacks + select(3, UnitDebuff(unit, i)) - aura_env.myTooltip:SetUnitDebuff(unit, i) - local text = _G["MyAddOnTooltipTextLeft2"]:GetText() - if text:match("Falling below %d*%% health will cause") then - aura_env.totaldebuff.damage = text:match("inflict (%d+%,?%d*)") - aura_env.totaldebuff.damage = aura_env.totaldebuff.damage:gsub("%,", "") - aura_env.totaldebuff.damage = aura_env.totaldebuff.damage:gsub(" ", "") - aura_env.totaldebuff.damage = tonumber(aura_env.totaldebuff.damage) - end - break - elseif not name then break end - end - end - aura_env.damagepercentage = aura_env.round(((aura_env.totaldebuff.damage / bossmax) * 100), 2) - return true - end - end -end - ---TSU ---CLEU PLAYER_TARGET_CHANGED -function(allstates, e, ...) - if aura_env.config.tsuenable == true then - local unit = "target" - if aura_env.config.tar == 2 then unit = "focus" elseif aura_env.config.tar == 3 then unit = "Boss1" end - if UnitExists(unit) then - local hp, maxhp = UnitHealth(unit), UnitHealthMax(unit) - local pp = hp / maxhp - if pp > 0.3 then - local totaldamage, totalstacks = 0, 0 - local maxdamage, maxstacks = {["d"] = 0, ["c"] = ""}, {["s"] = 0, ["c"] = ""} - local datatable = {} - aura_env.damagepercentage = 0 - local se = select(2, ...) - if se == "SPELL_AURA_APPLIED_DOSE" or e == "PLAYER_TARGET_CHANGED" or e == "PLAYER_FOCUS_CHANGED" then - for i = 1, #allstates do - allstates[i].sub30 = false - if i > 1 then - allstates[i] = {["show"] = false, ["changed"] = true} - end - end - for i = 1, 200 do - local name = UnitDebuff(unit, i) - if name == "Conductive Ink" then - local caster = select(7, UnitDebuff(unit, i)) - local stacks = select(3, UnitDebuff(unit, i)) - aura_env.totaldebuff.stacks = aura_env.totaldebuff.stacks + stacks - aura_env.myTooltip:SetUnitDebuff(unit, i) - local text = _G["MyAddOnTooltipTextLeft2"]:GetText() - if text:match("Falling below %d*%% health will cause") then - local damage = text:match("inflict (%d+%,?%d*)") - damage = damage:gsub("%,", "") - damage = damage:gsub(" ", "") - damage = tonumber(damage) - --local damage = i * 23412 - datatable[caster] = {["damage"] = damage, ["stacks"] = stacks, ["name"] = UnitName(caster), ["class"] = select(3, UnitClass(caster))} --UnitName(caster) UnitClass(caster) - if damage > maxdamage.d then maxdamage.d = damage; maxdamage.c = caster; maxstacks.s = stacks; maxstacks.c = caster end - totaldamage = totaldamage + damage; totalstacks = totalstacks + stacks - end - elseif not name then break end - end - local allstatesindex = 2 - for k,v in pairs(datatable) do - allstates[allstatesindex] = - { - show = true, - changed = true, - progressType = "static", - caster = v.name, - class = v.class, - stacks = v.stacks, - damage = v.damage, - } - if aura_env.config.sort == 1 then - allstates[allstatesindex].resort = true - allstates[allstatesindex].index = v.damage --/ totaldamage - allstates[allstatesindex].value = v.damage --/ totaldamage - allstates[allstatesindex].total = maxdamage.d - elseif aura_env.config.sort == 2 then - allstates[allstatesindex].resort = true - allstates[allstatesindex].index = v.stacks - allstates[allstatesindex].value = v.stacks - allstates[allstatesindex].total = totalstacks - end - allstatesindex = allstatesindex + 1 - end - dmgper = aura_env.round(((totaldamage / maxhp) * 100), 2) - allstates[1] = - { - show = true, - changed = true, - progressType = "static", - caster = "Total", - stacks = totalstacks, - damage = totaldamage, - resort = true, - percent = dmgper, - index = maxdamage.d + 1, - value = maxdamage.d + 1, - total = maxdamage.d + 1, - } - if totalstacks == 0 then totalstacks = 1 end - if aura_env.config.sort == 2 then allstates[1].index = totalstacks + 1 end - end - return true - else - for i = 1, #allstates do - if allstates[i] then - allstates[i].show = true - allstates[i].changed = true - allstates[i].sub30 = true - end - end - allstates[1].percent = "<30" - allstates[1].class = 15 - return true - end - else - for i = 1, #allstates do - if allstates[i].sub30 == false or not allstates[i].sub30 then - allstates[i] = {["show"] = false, ["changed"] = true} - end - end - return true - end - end -end - ---CUSTOM TRIGGER -function(t) - if aura_env.config.tsuenable == false then return t[1] and t[2] elseif aura_env.config.tsuenable == true then return t[3] and t[2] end -end - ---COLOR ANIMATION -function() - if aura_env.statee then - return aura_env.classColor(aura_env.statee.class) - end -end - ---DISPLAY -function() - if aura_env.config.tsuenable == false then - if aura_env.config.pdmg == true then - if aura_env.config.sh == true then aura_env.owndebuff.damage = aura_env.shorten(aura_env.owndebuff.damage); aura_env.totaldebuff.damage = aura_env.shorten(aura_env.totaldebuff.damage) end - aura_env.region.text2:SetText(aura_env.owndebuff.stacks .. "\n" .. aura_env.owndebuff.damage .. "\n" .. aura_env.totaldebuff.stacks .. "\n" .. aura_env.totaldebuff.damage .. "\n" .. aura_env.damagepercentage .. "%") - if aura_env.config.stext == true then aura_env.region.text3:SetText("Player stacks\nPlayer damage\nTotal stacks\nTotal damage\nDamage in %") else aura_env.region.text3:SetText("") end - else - if aura_env.config.sh == true then aura_env.totaldebuff.damage = aura_env.shorten(aura_env.totaldebuff.damage) end - aura_env.region.text2:SetText(aura_env.totaldebuff.stacks .. "\n" .. aura_env.totaldebuff.damage .. "\n" .. aura_env.damagepercentage .. "%") - if aura_env.config.stext == true then aura_env.region.text3:SetText("Total stacks\nTotal damage\nDamage in %") else aura_env.region.text3:SetText("") end - end - else - if aura_env.statee.caster == "Total" then - return aura_env.shorten(aura_env.statee.damage) .. " - " .. aura_env.statee.stacks .. " - " .. aura_env.statee.percent .. "%" - else - return aura_env.shorten(aura_env.statee.damage) .. " - " .. aura_env.statee.stacks - end - end -end - ---INIT -aura_env.myTooltip = CreateFrame("GameTooltip", "MyAddOnTooltip", UIParent, "GameTooltipTemplate") -aura_env.myTooltip:SetOwner(UIParent, "ANCHOR_NONE") -aura_env.owndebuff = {["stacks"] = 0, ["damage"] = 0,} -aura_env.totaldebuff = {["stacks"] = 0, ["damage"] = 0,} - -if aura_env.config.tsuenable == false then - if not aura_env.region.text2 then - local text2 = aura_env.region:CreateFontString(nil, aura_env.region) - aura_env.region.text2 = text2 - end - local font, size, flags = aura_env.region.text:GetFont() - aura_env.region.text2:SetFont(font, size, flags) - aura_env.region.text2:SetTextColor(aura_env.config.color[1], aura_env.config.color[2], aura_env.config.color[3], aura_env.config.color[4]) - aura_env.region.text2:SetPoint("CENTER", aura_env.region, "CENTER", aura_env.config.x, 0) - aura_env.region.text2:SetText("") - aura_env.region.text2:Show() - - if not aura_env.region.text3 then - local text3 = aura_env.region:CreateFontString(nil, aura_env.region) - aura_env.region.text3 = text3 - end - local font, size, flags = aura_env.region.text:GetFont() - aura_env.region.text3:SetFont(font, size, flags) - aura_env.region.text3:SetTextColor(aura_env.config.color[1], aura_env.config.color[2], aura_env.config.color[3], aura_env.config.color[4]) - aura_env.region.text3:SetPoint("CENTER", aura_env.region, "CENTER", - aura_env.config.x, 0) - aura_env.region.text3:SetText("") - aura_env.region.text3:Show() - aura_env.region.bar:Hide() -end - -if aura_env.config.tsuenable == true and aura_env.region.text2 then aura_env.region.text2:Hide() end -if aura_env.config.tsuenable == true and aura_env.region.text3 then aura_env.region.text3:Hide() end -if aura_env.config.tsuenable == true and aura_env.region.bar then aura_env.region.bar:Show() end - -aura_env.shorten = function(val) - local function round(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var - end - local n = 2 - if val < 1e3 then - return round(val, n) - elseif val > 1e3 and val < 1e6 then - return round(val / 1e3, n) .. "k" - elseif val > 1e6 and val < 1e9 then - return round(val / 1e6, n) .. "M" - elseif val > 1e9 then - return round(val / 1e9, n) .. "G" - end -end -aura_env.round = function(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var -end -aura_env.classColor = function(class) - if class == 1 then return 0.78, 0.61, 0.43 - elseif class == 2 then return 0.96, 0.55, 0.73 - elseif class == 3 then return 0.67, 0.83, 0.45 - elseif class == 4 then return 1, 0.96, 0.41, 1 - elseif class == 5 then return 1, 1, 1 - elseif class == 6 then return 0.77, 0.12, 0.23 - elseif class == 7 then return 0, 0.44, 0.87 - elseif class == 8 then return 0.25, 0.78, 0.92 - elseif class == 9 then return 0.53, 0.53, 0.93 - elseif class == 10 then return 0, 1, 0.59 - elseif class == 11 then return 1, 0.49, 0.04 - elseif class == 12 then return 0.64, 0.19, 0.79 - elseif class == 15 then return 0, 1, 0 - else return 1, 1, 1 end -end ---TESTING ---Conductive Ink 1500960 1 Magic 120 119774.845 player false false 302565 false false true false 1 -aura_env.UnitDebuffC = function(unit, i) - if i == 1 then return "Conductive Ink", 1500960, 1, 2, 120, 119774.845, "Pinko" - elseif i == 1 then return "Conductive Ink", 1500960, 3, 4, 120, 119774.845, "Billy" - elseif i == 2 then return "Conductive Ink", 1500960, 7, 7, 120, 119774.845, "Mary" - elseif i == 3 then return "Conductive Ink", 1500960, 35, 11, 120, 119774.845, "Anna" - elseif i == 4 then return "Conductive Ink", 1500960, 8, 6, 120, 119774.845, "John" - elseif i == 5 then return "Conductive Ink", 1500960, 72, 2, 120, 119774.845, "Frank" - elseif i == 6 then return "Conductive Ink", 1500960, 25, 7, 120, 119774.845, "Emma" - elseif i == 7 then return "Conductive Ink", 1500960, 45, 8, 120, 119774.845, "Sophia" - elseif i == 8 then return "Conductive Ink", 1500960, 37, 5, 120, 119774.845, "Henry" - elseif i == 9 then return "Conductive Ink", 1500960, 4, 3, 120, 119774.845, "Ethan" - elseif i == 10 then return "Conductive Ink", 1500960, 1, 1, 120, 119774.845, "Michael" - end +--CLEU PLAYER_TARGET_CHANGED PLAYER_FOCUS_CHANGED +function(e, ...) + if aura_env.config.tsuenable == false then + local se = select(2, ...) + if se == "SPELL_AURA_APPLIED_DOSE" or e == "PLAYER_TARGET_CHANGED" then + aura_env.owndebuff = {["stacks"] = 0, ["damage"] = 0,} + aura_env.totaldebuff = {["stacks"] = 0, ["damage"] = 0,} + aura_env.damagepercentage = 0 + local unit = "target" + if aura_env.config.tar == 2 then unit = "focus" elseif aura_env.config.tar == 3 then unit = "Boss1" end + local bossmax = UnitHealthMax(unit) + if aura_env.config.pdmg == true then + for i = 1, 200 do + local name = UnitDebuff(unit, i) + if name == "Conductive Ink" then + local caster = select(7, UnitDebuff(unit, i)) + local stacks = select(3, UnitDebuff(unit, i)) + aura_env.totaldebuff.stacks = aura_env.totaldebuff.stacks + stacks + aura_env.myTooltip:SetUnitDebuff(unit, i) + local text = _G["MyAddOnTooltipTextLeft2"]:GetText() + if text:match("Falling below %d*%% health will cause") then + local damage = text:match("inflict (%d+%,?%d*)") + damage = damage:gsub("%,", "") + damage = damage:gsub(" ", "") + damage = tonumber(damage) + aura_env.totaldebuff.damage = aura_env.totaldebuff.damage + damage + if caster == "player" then aura_env.owndebuff.damage = damage; aura_env.owndebuff.stacks = stacks end + end + elseif not name then break end + end + else + for i = 1, 200 do + local name = UnitDebuff(unit, i) + if name == "Conductive Ink" then + aura_env.totaldebuff.stacks = aura_env.totaldebuff.stacks + select(3, UnitDebuff(unit, i)) + aura_env.myTooltip:SetUnitDebuff(unit, i) + local text = _G["MyAddOnTooltipTextLeft2"]:GetText() + if text:match("Falling below %d*%% health will cause") then + aura_env.totaldebuff.damage = text:match("inflict (%d+%,?%d*)") + aura_env.totaldebuff.damage = aura_env.totaldebuff.damage:gsub("%,", "") + aura_env.totaldebuff.damage = aura_env.totaldebuff.damage:gsub(" ", "") + aura_env.totaldebuff.damage = tonumber(aura_env.totaldebuff.damage) + end + break + elseif not name then break end + end + end + aura_env.damagepercentage = aura_env.round(((aura_env.totaldebuff.damage / bossmax) * 100), 2) + return true + end + end +end + +--TSU +--CLEU PLAYER_TARGET_CHANGED +function(allstates, e, ...) + if aura_env.config.tsuenable == true then + local unit = "target" + if aura_env.config.tar == 2 then unit = "focus" elseif aura_env.config.tar == 3 then unit = "Boss1" end + if UnitExists(unit) then + local hp, maxhp = UnitHealth(unit), UnitHealthMax(unit) + local pp = hp / maxhp + if pp > 0.3 then + local totaldamage, totalstacks = 0, 0 + local maxdamage, maxstacks = {["d"] = 0, ["c"] = ""}, {["s"] = 0, ["c"] = ""} + local datatable = {} + aura_env.damagepercentage = 0 + local se = select(2, ...) + if se == "SPELL_AURA_APPLIED_DOSE" or e == "PLAYER_TARGET_CHANGED" or e == "PLAYER_FOCUS_CHANGED" then + for i = 1, #allstates do + allstates[i].sub30 = false + if i > 1 then + allstates[i] = {["show"] = false, ["changed"] = true} + end + end + for i = 1, 200 do + local name = UnitDebuff(unit, i) + if name == "Conductive Ink" then + local caster = select(7, UnitDebuff(unit, i)) + local stacks = select(3, UnitDebuff(unit, i)) + aura_env.totaldebuff.stacks = aura_env.totaldebuff.stacks + stacks + aura_env.myTooltip:SetUnitDebuff(unit, i) + local text = _G["MyAddOnTooltipTextLeft2"]:GetText() + if text:match("Falling below %d*%% health will cause") then + local damage = text:match("inflict (%d+%,?%d*)") + damage = damage:gsub("%,", "") + damage = damage:gsub(" ", "") + damage = tonumber(damage) + --local damage = i * 23412 + datatable[caster] = {["damage"] = damage, ["stacks"] = stacks, ["name"] = UnitName(caster), ["class"] = select(3, UnitClass(caster))} --UnitName(caster) UnitClass(caster) + if damage > maxdamage.d then maxdamage.d = damage; maxdamage.c = caster; maxstacks.s = stacks; maxstacks.c = caster end + totaldamage = totaldamage + damage; totalstacks = totalstacks + stacks + end + elseif not name then break end + end + local allstatesindex = 2 + for k,v in pairs(datatable) do + allstates[allstatesindex] = + { + show = true, + changed = true, + progressType = "static", + caster = v.name, + class = v.class, + stacks = v.stacks, + damage = v.damage, + } + if aura_env.config.sort == 1 then + allstates[allstatesindex].resort = true + allstates[allstatesindex].index = v.damage --/ totaldamage + allstates[allstatesindex].value = v.damage --/ totaldamage + allstates[allstatesindex].total = maxdamage.d + elseif aura_env.config.sort == 2 then + allstates[allstatesindex].resort = true + allstates[allstatesindex].index = v.stacks + allstates[allstatesindex].value = v.stacks + allstates[allstatesindex].total = totalstacks + end + allstatesindex = allstatesindex + 1 + end + dmgper = aura_env.round(((totaldamage / maxhp) * 100), 2) + allstates[1] = + { + show = true, + changed = true, + progressType = "static", + caster = "Total", + stacks = totalstacks, + damage = totaldamage, + resort = true, + percent = dmgper, + index = maxdamage.d + 1, + value = maxdamage.d + 1, + total = maxdamage.d + 1, + } + if totalstacks == 0 then totalstacks = 1 end + if aura_env.config.sort == 2 then allstates[1].index = totalstacks + 1 end + end + return true + else + for i = 1, #allstates do + if allstates[i] then + allstates[i].show = true + allstates[i].changed = true + allstates[i].sub30 = true + end + end + allstates[1].percent = "<30" + allstates[1].class = 15 + return true + end + else + for i = 1, #allstates do + if allstates[i].sub30 == false or not allstates[i].sub30 then + allstates[i] = {["show"] = false, ["changed"] = true} + end + end + return true + end + end +end + +--CUSTOM TRIGGER +function(t) + if aura_env.config.tsuenable == false then return t[1] and t[2] elseif aura_env.config.tsuenable == true then return t[3] and t[2] end +end + +--COLOR ANIMATION +function() + if aura_env.statee then + return aura_env.classColor(aura_env.statee.class) + end +end + +--DISPLAY +function() + if aura_env.config.tsuenable == false then + if aura_env.config.pdmg == true then + if aura_env.config.sh == true then aura_env.owndebuff.damage = aura_env.shorten(aura_env.owndebuff.damage); aura_env.totaldebuff.damage = aura_env.shorten(aura_env.totaldebuff.damage) end + aura_env.region.text2:SetText(aura_env.owndebuff.stacks .. "\n" .. aura_env.owndebuff.damage .. "\n" .. aura_env.totaldebuff.stacks .. "\n" .. aura_env.totaldebuff.damage .. "\n" .. aura_env.damagepercentage .. "%") + if aura_env.config.stext == true then aura_env.region.text3:SetText("Player stacks\nPlayer damage\nTotal stacks\nTotal damage\nDamage in %") else aura_env.region.text3:SetText("") end + else + if aura_env.config.sh == true then aura_env.totaldebuff.damage = aura_env.shorten(aura_env.totaldebuff.damage) end + aura_env.region.text2:SetText(aura_env.totaldebuff.stacks .. "\n" .. aura_env.totaldebuff.damage .. "\n" .. aura_env.damagepercentage .. "%") + if aura_env.config.stext == true then aura_env.region.text3:SetText("Total stacks\nTotal damage\nDamage in %") else aura_env.region.text3:SetText("") end + end + else + if aura_env.statee.caster == "Total" then + return aura_env.shorten(aura_env.statee.damage) .. " - " .. aura_env.statee.stacks .. " - " .. aura_env.statee.percent .. "%" + else + return aura_env.shorten(aura_env.statee.damage) .. " - " .. aura_env.statee.stacks + end + end +end + +--INIT +aura_env.myTooltip = CreateFrame("GameTooltip", "MyAddOnTooltip", UIParent, "GameTooltipTemplate") +aura_env.myTooltip:SetOwner(UIParent, "ANCHOR_NONE") +aura_env.owndebuff = {["stacks"] = 0, ["damage"] = 0,} +aura_env.totaldebuff = {["stacks"] = 0, ["damage"] = 0,} + +if aura_env.config.tsuenable == false then + if not aura_env.region.text2 then + local text2 = aura_env.region:CreateFontString(nil, aura_env.region) + aura_env.region.text2 = text2 + end + local font, size, flags = aura_env.region.text:GetFont() + aura_env.region.text2:SetFont(font, size, flags) + aura_env.region.text2:SetTextColor(aura_env.config.color[1], aura_env.config.color[2], aura_env.config.color[3], aura_env.config.color[4]) + aura_env.region.text2:SetPoint("CENTER", aura_env.region, "CENTER", aura_env.config.x, 0) + aura_env.region.text2:SetText("") + aura_env.region.text2:Show() + + if not aura_env.region.text3 then + local text3 = aura_env.region:CreateFontString(nil, aura_env.region) + aura_env.region.text3 = text3 + end + local font, size, flags = aura_env.region.text:GetFont() + aura_env.region.text3:SetFont(font, size, flags) + aura_env.region.text3:SetTextColor(aura_env.config.color[1], aura_env.config.color[2], aura_env.config.color[3], aura_env.config.color[4]) + aura_env.region.text3:SetPoint("CENTER", aura_env.region, "CENTER", - aura_env.config.x, 0) + aura_env.region.text3:SetText("") + aura_env.region.text3:Show() + aura_env.region.bar:Hide() +end + +if aura_env.config.tsuenable == true and aura_env.region.text2 then aura_env.region.text2:Hide() end +if aura_env.config.tsuenable == true and aura_env.region.text3 then aura_env.region.text3:Hide() end +if aura_env.config.tsuenable == true and aura_env.region.bar then aura_env.region.bar:Show() end + +aura_env.shorten = function(val) + local function round(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var + end + local n = 2 + if val < 1e3 then + return round(val, n) + elseif val > 1e3 and val < 1e6 then + return round(val / 1e3, n) .. "k" + elseif val > 1e6 and val < 1e9 then + return round(val / 1e6, n) .. "M" + elseif val > 1e9 then + return round(val / 1e9, n) .. "G" + end +end +aura_env.round = function(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var +end +aura_env.classColor = function(class) + if class == 1 then return 0.78, 0.61, 0.43 + elseif class == 2 then return 0.96, 0.55, 0.73 + elseif class == 3 then return 0.67, 0.83, 0.45 + elseif class == 4 then return 1, 0.96, 0.41, 1 + elseif class == 5 then return 1, 1, 1 + elseif class == 6 then return 0.77, 0.12, 0.23 + elseif class == 7 then return 0, 0.44, 0.87 + elseif class == 8 then return 0.25, 0.78, 0.92 + elseif class == 9 then return 0.53, 0.53, 0.93 + elseif class == 10 then return 0, 1, 0.59 + elseif class == 11 then return 1, 0.49, 0.04 + elseif class == 12 then return 0.64, 0.19, 0.79 + elseif class == 15 then return 0, 1, 0 + else return 1, 1, 1 end +end +--TESTING +--Conductive Ink 1500960 1 Magic 120 119774.845 player false false 302565 false false true false 1 +aura_env.UnitDebuffC = function(unit, i) + if i == 1 then return "Conductive Ink", 1500960, 1, 2, 120, 119774.845, "Pinko" + elseif i == 1 then return "Conductive Ink", 1500960, 3, 4, 120, 119774.845, "Billy" + elseif i == 2 then return "Conductive Ink", 1500960, 7, 7, 120, 119774.845, "Mary" + elseif i == 3 then return "Conductive Ink", 1500960, 35, 11, 120, 119774.845, "Anna" + elseif i == 4 then return "Conductive Ink", 1500960, 8, 6, 120, 119774.845, "John" + elseif i == 5 then return "Conductive Ink", 1500960, 72, 2, 120, 119774.845, "Frank" + elseif i == 6 then return "Conductive Ink", 1500960, 25, 7, 120, 119774.845, "Emma" + elseif i == 7 then return "Conductive Ink", 1500960, 45, 8, 120, 119774.845, "Sophia" + elseif i == 8 then return "Conductive Ink", 1500960, 37, 5, 120, 119774.845, "Henry" + elseif i == 9 then return "Conductive Ink", 1500960, 4, 3, 120, 119774.845, "Ethan" + elseif i == 10 then return "Conductive Ink", 1500960, 1, 1, 120, 119774.845, "Michael" + end end \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/Fivver - DK Festering Wounds.lua b/WeakAuras/Projects/ByExp/Fivver Stuff/Fivver - DK Festering Wounds.lua similarity index 97% rename from Complete Projects/Fivver Stuff/Fivver - DK Festering Wounds.lua rename to WeakAuras/Projects/ByExp/Fivver Stuff/Fivver - DK Festering Wounds.lua index 6c42f68..c99c5d5 100644 --- a/Complete Projects/Fivver Stuff/Fivver - DK Festering Wounds.lua +++ b/WeakAuras/Projects/ByExp/Fivver Stuff/Fivver - DK Festering Wounds.lua @@ -1,76 +1,76 @@ ---COMBAT_LOG_EVENT_UNFILTERED PLAYER_REGEN_ENABLED PLAYER_REGEN_DISABLED DRUID_HOTS_REMOVE_HOT UPDATE_WOUNDS -function(e, ...) - if not WeakAurasSaved.FesteringWounds then WeakAurasSaved.FesteringWounds = {["count"] = 0} end - if not WeakAurasSaved.FesteringWounds.ticker then WeakAurasSaved.FesteringWounds.ticker = C_Timer.NewTicker(0.5, function() WeakAuras.ScanEvents("UPDATE_WOUNDS") end) end - if e == "UPDATE_WOUNDS" then return true - elseif e == "COMBAT_LOG_EVENT_UNFILTERED" then - local se = select(2, ...) - local caster = select(5, ...) - local spellname = select(13, ...) - local stacks = select(16, ...) - if se == "SPELL_AURA_APPLIED" or se == "SPELL_AURA_APPLIED_DOSE" or se == "SPELL_AURA_REMOVED" or se == "SPELL_AURA_REMOVED_DOSE" then - if caster and caster == UnitName("player") and spellname == "Festering Wound" then - local countsum = 0 - local counted = 0 - for i = 1, 40 do - if UnitExists("nameplate" .. i) then - local index = 1 - while UnitDebuff("nameplate" .. i, index) do - local name, _, _, count = UnitDebuff("nameplate" .. i, index) - local caster = select(8, UnitDebuff("nameplate" .. i, index)) - if name == "Festering Wound" then - countsum = countsum + count - if counted == 0 then counted = 1 end - end - index = index + 1 - end - end - end - if counted == 0 and se == "SPELL_AURA_REMOVED" then - WeakAurasSaved.FesteringWounds.count = 0 - end - if counted == 1 then - WeakAurasSaved.FesteringWounds.count = countsum - end - --DevTools_Dump(WeakAurasSaved.FesteringWounds) - return true - end - end - elseif e == "PLAYER_REGEN_ENABLED" or e == "PLAYER_REGEN_DISABLED" then - WeakAurasSaved.FesteringWounds.count = 0 - local countsum = 0 - local counted = 0 - for i = 1, 40 do - if UnitExists("nameplate" .. i) then - local index = 1 - while UnitDebuff("nameplate" .. i, index) do - local name, _, _, count = UnitDebuff("nameplate" .. i, index) - local caster = select(8, UnitDebuff("nameplate" .. i, index)) - if name == "Festering Wound" then - countsum = countsum + count - if counted == 0 then counted = 1 end - end - index = index + 1 - end - end - end - if counted == 1 then - WeakAurasSaved.FesteringWounds.count = countsum - end - --DevTools_Dump(WeakAurasSaved.FesteringWounds) - return true - end -end - ---STACK INFO -function() - return WeakAurasSaved.FesteringWounds.count -end - ---DISPLAY -function() - return WeakAurasSaved.FesteringWounds["Spring Blossoms"].count -end - ---INIT +--COMBAT_LOG_EVENT_UNFILTERED PLAYER_REGEN_ENABLED PLAYER_REGEN_DISABLED DRUID_HOTS_REMOVE_HOT UPDATE_WOUNDS +function(e, ...) + if not WeakAurasSaved.FesteringWounds then WeakAurasSaved.FesteringWounds = {["count"] = 0} end + if not WeakAurasSaved.FesteringWounds.ticker then WeakAurasSaved.FesteringWounds.ticker = C_Timer.NewTicker(0.5, function() WeakAuras.ScanEvents("UPDATE_WOUNDS") end) end + if e == "UPDATE_WOUNDS" then return true + elseif e == "COMBAT_LOG_EVENT_UNFILTERED" then + local se = select(2, ...) + local caster = select(5, ...) + local spellname = select(13, ...) + local stacks = select(16, ...) + if se == "SPELL_AURA_APPLIED" or se == "SPELL_AURA_APPLIED_DOSE" or se == "SPELL_AURA_REMOVED" or se == "SPELL_AURA_REMOVED_DOSE" then + if caster and caster == UnitName("player") and spellname == "Festering Wound" then + local countsum = 0 + local counted = 0 + for i = 1, 40 do + if UnitExists("nameplate" .. i) then + local index = 1 + while UnitDebuff("nameplate" .. i, index) do + local name, _, _, count = UnitDebuff("nameplate" .. i, index) + local caster = select(8, UnitDebuff("nameplate" .. i, index)) + if name == "Festering Wound" then + countsum = countsum + count + if counted == 0 then counted = 1 end + end + index = index + 1 + end + end + end + if counted == 0 and se == "SPELL_AURA_REMOVED" then + WeakAurasSaved.FesteringWounds.count = 0 + end + if counted == 1 then + WeakAurasSaved.FesteringWounds.count = countsum + end + --DevTools_Dump(WeakAurasSaved.FesteringWounds) + return true + end + end + elseif e == "PLAYER_REGEN_ENABLED" or e == "PLAYER_REGEN_DISABLED" then + WeakAurasSaved.FesteringWounds.count = 0 + local countsum = 0 + local counted = 0 + for i = 1, 40 do + if UnitExists("nameplate" .. i) then + local index = 1 + while UnitDebuff("nameplate" .. i, index) do + local name, _, _, count = UnitDebuff("nameplate" .. i, index) + local caster = select(8, UnitDebuff("nameplate" .. i, index)) + if name == "Festering Wound" then + countsum = countsum + count + if counted == 0 then counted = 1 end + end + index = index + 1 + end + end + end + if counted == 1 then + WeakAurasSaved.FesteringWounds.count = countsum + end + --DevTools_Dump(WeakAurasSaved.FesteringWounds) + return true + end +end + +--STACK INFO +function() + return WeakAurasSaved.FesteringWounds.count +end + +--DISPLAY +function() + return WeakAurasSaved.FesteringWounds["Spring Blossoms"].count +end + +--INIT if not WeakAurasSaved.FesteringWounds then WeakAurasSaved.FesteringWounds = {["count"] = 0} end \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/Fivver Druid Stuff.lua b/WeakAuras/Projects/ByExp/Fivver Stuff/Fivver Druid Stuff.lua similarity index 98% rename from Complete Projects/Fivver Stuff/Fivver Druid Stuff.lua rename to WeakAuras/Projects/ByExp/Fivver Stuff/Fivver Druid Stuff.lua index dea7759..684e9f8 100644 --- a/Complete Projects/Fivver Stuff/Fivver Druid Stuff.lua +++ b/WeakAuras/Projects/ByExp/Fivver Stuff/Fivver Druid Stuff.lua @@ -1,119 +1,119 @@ ---COMBAT_LOG_EVENT_UNFILTERED PLAYER_REGEN_ENABLED PLAYER_REGEN_DISABLED DRUID_HOTS_REMOVE_HOT -function(e, ...) - if not WeakAurasSaved.DruidHots then - WeakAurasSaved.DruidHots = { - ["Rejuvenation"] = {["count"] = 0, ["duration"] = 18, ["timers"] = {}}, - ["Regrowth"] = {["count"] = 0, ["duration"] = 12, ["timers"] = {}}, - ["Lifebloom"] = {["count"] = 0, ["duration"] = 15, ["timers"] = {}}, - ["Wild Growth"] = {["count"] = 0, ["duration"] = 7, ["timers"] = {}}, - ["Spring Blossoms"] = {["count"] = 0, ["duration"] = 6, ["timers"] = {}}, - ["Grove Tending"] = {["count"] = 0, ["duration"] = 9, ["timers"] = {}}, - ["Rejuvenation (Germination)"] = {["count"] = 0, ["duration"] = 18, ["timers"] = {}}, - } - end - if not WeakAurasSaved.DruidHots.ticker then WeakAurasSaved.DruidHots.ticker = C_Timer.NewTicker(0.5, function() WeakAuras.ScanEvents("UPDATE_HOTS") end) end - if e == "DRUID_HOTS_REMOVE_HOT" then - local name, id = ... - --DevTools_Dump(WeakAurasSaved.DruidHots) - if WeakAurasSaved.DruidHots[name].timers[id] then - if WeakAurasSaved.DruidHots[name].timers[id] then WeakAurasSaved.DruidHots[name].timers[id]:Cancel() end - WeakAurasSaved.DruidHots[name].timers[id] = nil - WeakAurasSaved.DruidHots[name].count = WeakAurasSaved.DruidHots[name].count - 1 - end - WeakAuras.ScanEvents("UPDATE_HOTS") - --DevTools_Dump(WeakAurasSaved.DruidHots) - elseif e == "COMBAT_LOG_EVENT_UNFILTERED" then - local se = select(2, ...) - local caster = select(5, ...) - local spellname = select(13, ...) - local target = select(10, ...) - if se == "SPELL_AURA_APPLIED" then - if caster and caster == UnitName("player") then - if WeakAurasSaved.DruidHots[spellname] then - WeakAurasSaved.DruidHots[spellname].count = WeakAurasSaved.DruidHots[spellname].count + 1 - WeakAurasSaved.DruidHots[spellname].timers[WeakAurasSaved.DruidHots[spellname].count] = C_Timer.NewTimer(WeakAurasSaved.DruidHots[spellname].duration * 4, function() WeakAuras.ScanEvents("DRUID_HOTS_REMOVE_HOT", spellname, WeakAurasSaved.DruidHots[spellname].count) end) - --DevTools_Dump(WeakAurasSaved.DruidHots) - WeakAuras.ScanEvents("UPDATE_HOTS") - end - end - elseif se == "SPELL_AURA_REMOVED" then - if caster and caster == UnitName("player") then - if WeakAurasSaved.DruidHots[spellname] then - if WeakAurasSaved.DruidHots[spellname].count > 0 then - WeakAurasSaved.DruidHots[spellname].count = WeakAurasSaved.DruidHots[spellname].count - 1 - if WeakAurasSaved.DruidHots[spellname].timers[WeakAurasSaved.DruidHots[spellname].count + 1] then WeakAurasSaved.DruidHots[spellname].timers[WeakAurasSaved.DruidHots[spellname].count + 1]:Cancel(); WeakAurasSaved.DruidHots[spellname].timers[WeakAurasSaved.DruidHots[spellname].count + 1] = nil end - --DevTools_Dump(WeakAurasSaved.DruidHots) - WeakAuras.ScanEvents("UPDATE_HOTS") - end - end - end - end - elseif e == "PLAYER_REGEN_ENABLED" or e == "PLAYER_REGEN_DISABLED" then - WeakAurasSaved.DruidHots = { - ["Rejuvenation"] = {["count"] = 0, ["duration"] = 18, ["timers"] = {}}, - ["Regrowth"] = {["count"] = 0, ["duration"] = 12, ["timers"] = {}}, - ["Lifebloom"] = {["count"] = 0, ["duration"] = 15, ["timers"] = {}}, - ["Wild Growth"] = {["count"] = 0, ["duration"] = 7, ["timers"] = {}}, - ["Spring Blossoms"] = {["count"] = 0, ["duration"] = 6, ["timers"] = {}}, - ["Grove Tending"] = {["count"] = 0, ["duration"] = 9, ["timers"] = {}}, - ["Rejuvenation (Germination)"] = {["count"] = 0, ["duration"] = 18, ["timers"] = {}}, - } - local instance = "party" - if IsInRaid() then instance = "raid" end - local index = 1 - --DevTools_Dump(UnitBuff("player", index, "PLAYER")) - while UnitBuff("player", index, "PLAYER") do - local name = UnitBuff("player", index, "PLAYER") - if WeakAurasSaved.DruidHots[name] then - WeakAurasSaved.DruidHots[name].count = WeakAurasSaved.DruidHots[name].count + 1 - end - index = index + 1 - if index > 20 then break end - end - for i = 1, GetNumGroupMembers() do - local index = 1 - --DevTools_Dump(UnitBuff(instance .. i, index, "PLAYER")) - while UnitBuff(instance .. i, index, "PLAYER") do - --DevTools_Dump(UnitBuff(instance .. i , index, "PLAYER")) - local name = UnitBuff(instance .. i, index, "PLAYER") - if WeakAurasSaved.DruidHots[name] then - WeakAurasSaved.DruidHots[name].count = WeakAurasSaved.DruidHots[name].count + 1 - end - index = index + 1 - if index > 20 then break end - end - end - --DevTools_Dump(WeakAurasSaved.DruidHots) - WeakAuras.ScanEvents("UPDATE_HOTS") - end -end - ---DISPLAY -function() - return WeakAurasSaved.DruidHots["Spring Blossoms"].count -end - ---Mana bar ---DISPLAY -function() - local mana = UnitPower("player", 0) - if mana >= 1e3 and mana < 1e6 then - mana = string.format("%.1fk", mana / 1e3) - elseif mana >= 1e6 and mana < 1e9 then - mana = string.format("%.1fM", mana / 1e6) - end - return mana -end - ---INIT -if not WeakAurasSaved.DruidHots then - WeakAurasSaved.DruidHots = { - ["Rejuvenation"] = {["count"] = 0, ["duration"] = 18, ["timer"] = nil}, - ["Regrowth"] = {["count"] = 0, ["duration"] = 12, ["timer"] = nil}, - ["Lifebloom"] = {["count"] = 0, ["duration"] = 15, ["timer"] = nil}, - ["Wild Growth"] = {["count"] = 0, ["duration"] = 7, ["timer"] = nil}, - ["Spring Blossoms"] = {["count"] = 0, ["duration"] = 6, ["timer"] = nil}, - ["Grove Tending"] = {["count"] = 0, ["duration"] = 9, ["timer"] = nil}, - ["Rejuvenation (Germination)"] = {["count"] = 0, ["duration"] = 18, ["timer"] = nil}, - } +--COMBAT_LOG_EVENT_UNFILTERED PLAYER_REGEN_ENABLED PLAYER_REGEN_DISABLED DRUID_HOTS_REMOVE_HOT +function(e, ...) + if not WeakAurasSaved.DruidHots then + WeakAurasSaved.DruidHots = { + ["Rejuvenation"] = {["count"] = 0, ["duration"] = 18, ["timers"] = {}}, + ["Regrowth"] = {["count"] = 0, ["duration"] = 12, ["timers"] = {}}, + ["Lifebloom"] = {["count"] = 0, ["duration"] = 15, ["timers"] = {}}, + ["Wild Growth"] = {["count"] = 0, ["duration"] = 7, ["timers"] = {}}, + ["Spring Blossoms"] = {["count"] = 0, ["duration"] = 6, ["timers"] = {}}, + ["Grove Tending"] = {["count"] = 0, ["duration"] = 9, ["timers"] = {}}, + ["Rejuvenation (Germination)"] = {["count"] = 0, ["duration"] = 18, ["timers"] = {}}, + } + end + if not WeakAurasSaved.DruidHots.ticker then WeakAurasSaved.DruidHots.ticker = C_Timer.NewTicker(0.5, function() WeakAuras.ScanEvents("UPDATE_HOTS") end) end + if e == "DRUID_HOTS_REMOVE_HOT" then + local name, id = ... + --DevTools_Dump(WeakAurasSaved.DruidHots) + if WeakAurasSaved.DruidHots[name].timers[id] then + if WeakAurasSaved.DruidHots[name].timers[id] then WeakAurasSaved.DruidHots[name].timers[id]:Cancel() end + WeakAurasSaved.DruidHots[name].timers[id] = nil + WeakAurasSaved.DruidHots[name].count = WeakAurasSaved.DruidHots[name].count - 1 + end + WeakAuras.ScanEvents("UPDATE_HOTS") + --DevTools_Dump(WeakAurasSaved.DruidHots) + elseif e == "COMBAT_LOG_EVENT_UNFILTERED" then + local se = select(2, ...) + local caster = select(5, ...) + local spellname = select(13, ...) + local target = select(10, ...) + if se == "SPELL_AURA_APPLIED" then + if caster and caster == UnitName("player") then + if WeakAurasSaved.DruidHots[spellname] then + WeakAurasSaved.DruidHots[spellname].count = WeakAurasSaved.DruidHots[spellname].count + 1 + WeakAurasSaved.DruidHots[spellname].timers[WeakAurasSaved.DruidHots[spellname].count] = C_Timer.NewTimer(WeakAurasSaved.DruidHots[spellname].duration * 4, function() WeakAuras.ScanEvents("DRUID_HOTS_REMOVE_HOT", spellname, WeakAurasSaved.DruidHots[spellname].count) end) + --DevTools_Dump(WeakAurasSaved.DruidHots) + WeakAuras.ScanEvents("UPDATE_HOTS") + end + end + elseif se == "SPELL_AURA_REMOVED" then + if caster and caster == UnitName("player") then + if WeakAurasSaved.DruidHots[spellname] then + if WeakAurasSaved.DruidHots[spellname].count > 0 then + WeakAurasSaved.DruidHots[spellname].count = WeakAurasSaved.DruidHots[spellname].count - 1 + if WeakAurasSaved.DruidHots[spellname].timers[WeakAurasSaved.DruidHots[spellname].count + 1] then WeakAurasSaved.DruidHots[spellname].timers[WeakAurasSaved.DruidHots[spellname].count + 1]:Cancel(); WeakAurasSaved.DruidHots[spellname].timers[WeakAurasSaved.DruidHots[spellname].count + 1] = nil end + --DevTools_Dump(WeakAurasSaved.DruidHots) + WeakAuras.ScanEvents("UPDATE_HOTS") + end + end + end + end + elseif e == "PLAYER_REGEN_ENABLED" or e == "PLAYER_REGEN_DISABLED" then + WeakAurasSaved.DruidHots = { + ["Rejuvenation"] = {["count"] = 0, ["duration"] = 18, ["timers"] = {}}, + ["Regrowth"] = {["count"] = 0, ["duration"] = 12, ["timers"] = {}}, + ["Lifebloom"] = {["count"] = 0, ["duration"] = 15, ["timers"] = {}}, + ["Wild Growth"] = {["count"] = 0, ["duration"] = 7, ["timers"] = {}}, + ["Spring Blossoms"] = {["count"] = 0, ["duration"] = 6, ["timers"] = {}}, + ["Grove Tending"] = {["count"] = 0, ["duration"] = 9, ["timers"] = {}}, + ["Rejuvenation (Germination)"] = {["count"] = 0, ["duration"] = 18, ["timers"] = {}}, + } + local instance = "party" + if IsInRaid() then instance = "raid" end + local index = 1 + --DevTools_Dump(UnitBuff("player", index, "PLAYER")) + while UnitBuff("player", index, "PLAYER") do + local name = UnitBuff("player", index, "PLAYER") + if WeakAurasSaved.DruidHots[name] then + WeakAurasSaved.DruidHots[name].count = WeakAurasSaved.DruidHots[name].count + 1 + end + index = index + 1 + if index > 20 then break end + end + for i = 1, GetNumGroupMembers() do + local index = 1 + --DevTools_Dump(UnitBuff(instance .. i, index, "PLAYER")) + while UnitBuff(instance .. i, index, "PLAYER") do + --DevTools_Dump(UnitBuff(instance .. i , index, "PLAYER")) + local name = UnitBuff(instance .. i, index, "PLAYER") + if WeakAurasSaved.DruidHots[name] then + WeakAurasSaved.DruidHots[name].count = WeakAurasSaved.DruidHots[name].count + 1 + end + index = index + 1 + if index > 20 then break end + end + end + --DevTools_Dump(WeakAurasSaved.DruidHots) + WeakAuras.ScanEvents("UPDATE_HOTS") + end +end + +--DISPLAY +function() + return WeakAurasSaved.DruidHots["Spring Blossoms"].count +end + +--Mana bar +--DISPLAY +function() + local mana = UnitPower("player", 0) + if mana >= 1e3 and mana < 1e6 then + mana = string.format("%.1fk", mana / 1e3) + elseif mana >= 1e6 and mana < 1e9 then + mana = string.format("%.1fM", mana / 1e6) + end + return mana +end + +--INIT +if not WeakAurasSaved.DruidHots then + WeakAurasSaved.DruidHots = { + ["Rejuvenation"] = {["count"] = 0, ["duration"] = 18, ["timer"] = nil}, + ["Regrowth"] = {["count"] = 0, ["duration"] = 12, ["timer"] = nil}, + ["Lifebloom"] = {["count"] = 0, ["duration"] = 15, ["timer"] = nil}, + ["Wild Growth"] = {["count"] = 0, ["duration"] = 7, ["timer"] = nil}, + ["Spring Blossoms"] = {["count"] = 0, ["duration"] = 6, ["timer"] = nil}, + ["Grove Tending"] = {["count"] = 0, ["duration"] = 9, ["timer"] = nil}, + ["Rejuvenation (Germination)"] = {["count"] = 0, ["duration"] = 18, ["timer"] = nil}, + } end \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/Fivver Loot Logging.lua b/WeakAuras/Projects/ByExp/Fivver Stuff/Fivver Loot Logging.lua similarity index 97% rename from Complete Projects/Fivver Stuff/Fivver Loot Logging.lua rename to WeakAuras/Projects/ByExp/Fivver Stuff/Fivver Loot Logging.lua index 5e8ce77..1c10d25 100644 --- a/Complete Projects/Fivver Stuff/Fivver Loot Logging.lua +++ b/WeakAuras/Projects/ByExp/Fivver Stuff/Fivver Loot Logging.lua @@ -1,203 +1,203 @@ ---Idea: ---Get loot from everyone ---Put loot in table sorted with everyone ---If AH visit get prices of boe items? and DE mats ---In item table add value in vendor, AH and DE ---Add option to export all to excel ---Add timer (toggleable?) with a button and macro ---Add option to mark significant items, idk how maybe use macro maybe some sort of button ---Use only for guildies ---Maybe reminder to turn timer on ---Maybe individual member timer ---Sort table by member > item > iteminfo ---Where member holds time and key is name ---Maybe use time as start and endtime ---Maybe establish comms with other weakauras to make sure times are synced ---Add gold / hour !! ---Maybe add split gold f(totalgold, membertimespent)? ---Google sheets uses tab for column seperation and newline for row seperation !! ---Make into addon not weakaura - ---CHAT_MSG_LOOT AUCTION_HOUSE_SHOW AUCTION_ITEM_LIST_UPDATE AH_READY -function(e, msg) - if e == "CHAT_MSG_LOOT" then - if msg then - local who = msg:match("%w+") - if who == "You" then who = UnitName("player") end - if who:match("(-)") then who:match("(.+)-%w*") end - local howmuch = msg:match("(x%d+).$") - local link - for itemLink in msg:gmatch("|%x+|Hitem:.-|h.-|h|r") do - link = itemLink - end - local itemName, _, itemQuality, _, _, itemType = GetItemInfo(link) - local itemLevel = GetDetailedItemLevelInfo(link) - if itemQuality > 1 then - if not aura_env.lootTable[who] then aura_env.lootTable[who] = {["items"] = {}} end - if not aura_env.lootTable[who].items[itemName] then - aura_env.lootTable[who].items[itemName] = { - ["name"] = itemName, - ["vendor"] = select(11, GetItemInfo(link)), - ["quantity"] = howmuch or 1, - } - --Handles DE price prediction - --if itemType == "Armor" or itemType == "Weapon" then - -- print("itemLevel", itemLevel) - -- if itemLevel >= 45 and itemLevel <= 55 then - -- local price = 0 - -- for k,v in pairs(WeakAurasSaved.LootLog.DEStats[1]) do - -- price = price + (v * WeakAurasSaved.LootLog.AHPrices[k]) - -- end - -- price = price * (howmuch or 1) - -- aura_env.lootTable[who].items[itemName].DE = price - -- DevTools_Dump(aura_env.lootTable) - -- elseif itemLevel >= 56 then - -- local price = 0 - -- for k,v in pairs(WeakAurasSaved.LootLog.DEStats[2]) do - -- price = price + (v * WeakAurasSaved.LootLog.AHPrices[k]) - -- end - -- price = price * (howmuch or 1) - -- aura_env.lootTable[who].items[itemName].DE = price - -- DevTools_Dump(aura_env.lootTable) - -- elseif itemLevel > 58 and itemLevel < 77 and itemQuality == 4 then - -- local price = 0 - -- for k,v in pairs(WeakAurasSaved.LootLog.DEStats[3]) do - -- price = price + (v * WeakAurasSaved.LootLog.AHPrices[k]) - -- end - -- price = price * (howmuch or 1) - -- aura_env.lootTable[who].items[itemName].DE = price - -- DevTools_Dump(aura_env.lootTable) - -- end - --end - if WeakAurasSaved.LootLog.Notables[itemName] then - aura_env.lootTable[who].items[itemName].AH = WeakAurasSaved.LootLog.Notables[itemName] - end - else - aura_env.lootTable[who].items[itemName].quantity = aura_env.lootTable[who].items[itemName].quantity + 1 - end - end - DevTools_Dump(aura_env.lootTable) - --DevTools_Dump(WeakAurasSaved.LootLog) - end - elseif e == "AUCTION_HOUSE_SHOW" then - DevTools_Dump(WeakAurasSaved.LootLog.AHPrices) - if aura_env.i == 1 then - QueryAuctionItems("Illusion Dust") - print("Querry", "Illusion Dust") - end - --Querry update that fires item list update then get item info from like a page or two and get median value if the spread isn't too much - elseif e == "AUCTION_ITEM_LIST_UPDATE" then - --Get auction info - if not aura_env.timer then - SortAuctionSetSort("list", "buyout") - SortAuctionApplySort("list") - end - if aura_env.timer then aura_env.timer:Cancel(); aura_env.timer = nil end - if not aura_env.timer then aura_env.timer = C_Timer.NewTimer(1, function() WeakAuras.ScanEvents("AH_READY") end) end - elseif e == "AH_READY" then - if aura_env.timer then aura_env.timer = nil end - local masterName, masterID - if aura_env.i == 1 then - masterName = "Illusion Dust" - masterID = "ID" - elseif aura_env.i == 2 then - masterName = "Dream Dust" - masterID = "DD" - elseif aura_env.i == 3 then - masterName = "Small Brillaint Shard" - masterID = "SBS" - elseif aura_env.i == 4 then - masterName = "Large Brilliant Shard" - masterID = "LBS" - elseif aura_env.i == 5 then - masterName = "Lesser Eternal Essence" - masterID = "LEE" - elseif aura_env.i == 6 then - masterName = "Greater Eternal Essence" - masterID = "GEE" - end - for i = 1, GetNumAuctionItems("list") do - local name, _, count = GetAuctionItemInfo("list", i) - local buyoutPrice = select(10, GetAuctionItemInfo("list", i)) - if name == masterName then - local pricePerEach = buyoutPrice / count - if WeakAurasSaved.LootLog.AHPrices[masterID] == 0 then - WeakAurasSaved.LootLog.AHPrices[masterID] = pricePerEach - else - WeakAurasSaved.LootLog.AHPrices[masterID] = (WeakAurasSaved.LootLog.AHPrices[masterID] + pricePerEach) / 2 - end - end - end - aura_env.i = aura_env.i + 1 - if WeakAurasSaved.LootLog.AHPrices[masterID] then WeakAurasSaved.LootLog.AHPrices[masterID] = math.floor(WeakAurasSaved.LootLog.AHPrices[masterID]) end - --DevTools_Dump(WeakAurasSaved.LootLog.AHPrices) - if aura_env.i == 1 then - masterName = "Illusion Dust" - masterID = "ID" - elseif aura_env.i == 2 then - masterName = "Dream Dust" - masterID = "DD" - elseif aura_env.i == 3 then - masterName = "Small Brillaint Shard" - masterID = "SBS" - elseif aura_env.i == 4 then - masterName = "Large Brilliant Shard" - masterID = "LBS" - elseif aura_env.i == 5 then - masterName = "Lesser Eternal Essence" - masterID = "LEE" - elseif aura_env.i == 6 then - masterName = "Greater Eternal Essence" - masterID = "GEE" - elseif aura_env.i > 6 then - print("AH Scan complete") - DevTools_Dump(WeakAurasSaved.LootLog.AHPrices) - masterName = nil - masterID = nil - aura_env.i = 1 - end - if masterName then - QueryAuctionItems(masterName) - print("Querry", masterName) - end - end -end - ---INIT -aura_env.i = 1 -aura_env.lootTable = {} -if not WeakAurasSaved.LootLog then WeakAurasSaved.LootLog = {} end -if not WeakAurasSaved.LootLog.AHPrices then - WeakAurasSaved.LootLog.AHPrices = { - ["ID"] = 0, - ["DD"] = 0, - ["SBS"] = 0, - ["LBS"] = 0, - ["LEE"] = 0, - ["GEE"] = 0, - } -end -if not WeakAurasSaved.LootLog.DEStats then - WeakAurasSaved.LootLog.DEStats = { - --<45,55> - [1] = { - ["DD"] = 0, - ["SBS"] = 0, - ["LBS"] = 0, - ["LEE"] = 0, - ["GEE"] = 0, - ["GME"] = 0, - }, - --<56,65> - [2] = { - ["ID"] = 2.8699, - ["LBS"] = 0.018, - ["GEE"] = 0.4, - }, - --Purple items between 59 and 78 - [3] = { - ["LBS"] = 0, - }, - } -end +--Idea: +--Get loot from everyone +--Put loot in table sorted with everyone +--If AH visit get prices of boe items? and DE mats +--In item table add value in vendor, AH and DE +--Add option to export all to excel +--Add timer (toggleable?) with a button and macro +--Add option to mark significant items, idk how maybe use macro maybe some sort of button +--Use only for guildies +--Maybe reminder to turn timer on +--Maybe individual member timer +--Sort table by member > item > iteminfo +--Where member holds time and key is name +--Maybe use time as start and endtime +--Maybe establish comms with other weakauras to make sure times are synced +--Add gold / hour !! +--Maybe add split gold f(totalgold, membertimespent)? +--Google sheets uses tab for column seperation and newline for row seperation !! +--Make into addon not weakaura + +--CHAT_MSG_LOOT AUCTION_HOUSE_SHOW AUCTION_ITEM_LIST_UPDATE AH_READY +function(e, msg) + if e == "CHAT_MSG_LOOT" then + if msg then + local who = msg:match("%w+") + if who == "You" then who = UnitName("player") end + if who:match("(-)") then who:match("(.+)-%w*") end + local howmuch = msg:match("(x%d+).$") + local link + for itemLink in msg:gmatch("|%x+|Hitem:.-|h.-|h|r") do + link = itemLink + end + local itemName, _, itemQuality, _, _, itemType = GetItemInfo(link) + local itemLevel = GetDetailedItemLevelInfo(link) + if itemQuality > 1 then + if not aura_env.lootTable[who] then aura_env.lootTable[who] = {["items"] = {}} end + if not aura_env.lootTable[who].items[itemName] then + aura_env.lootTable[who].items[itemName] = { + ["name"] = itemName, + ["vendor"] = select(11, GetItemInfo(link)), + ["quantity"] = howmuch or 1, + } + --Handles DE price prediction + --if itemType == "Armor" or itemType == "Weapon" then + -- print("itemLevel", itemLevel) + -- if itemLevel >= 45 and itemLevel <= 55 then + -- local price = 0 + -- for k,v in pairs(WeakAurasSaved.LootLog.DEStats[1]) do + -- price = price + (v * WeakAurasSaved.LootLog.AHPrices[k]) + -- end + -- price = price * (howmuch or 1) + -- aura_env.lootTable[who].items[itemName].DE = price + -- DevTools_Dump(aura_env.lootTable) + -- elseif itemLevel >= 56 then + -- local price = 0 + -- for k,v in pairs(WeakAurasSaved.LootLog.DEStats[2]) do + -- price = price + (v * WeakAurasSaved.LootLog.AHPrices[k]) + -- end + -- price = price * (howmuch or 1) + -- aura_env.lootTable[who].items[itemName].DE = price + -- DevTools_Dump(aura_env.lootTable) + -- elseif itemLevel > 58 and itemLevel < 77 and itemQuality == 4 then + -- local price = 0 + -- for k,v in pairs(WeakAurasSaved.LootLog.DEStats[3]) do + -- price = price + (v * WeakAurasSaved.LootLog.AHPrices[k]) + -- end + -- price = price * (howmuch or 1) + -- aura_env.lootTable[who].items[itemName].DE = price + -- DevTools_Dump(aura_env.lootTable) + -- end + --end + if WeakAurasSaved.LootLog.Notables[itemName] then + aura_env.lootTable[who].items[itemName].AH = WeakAurasSaved.LootLog.Notables[itemName] + end + else + aura_env.lootTable[who].items[itemName].quantity = aura_env.lootTable[who].items[itemName].quantity + 1 + end + end + DevTools_Dump(aura_env.lootTable) + --DevTools_Dump(WeakAurasSaved.LootLog) + end + elseif e == "AUCTION_HOUSE_SHOW" then + DevTools_Dump(WeakAurasSaved.LootLog.AHPrices) + if aura_env.i == 1 then + QueryAuctionItems("Illusion Dust") + print("Querry", "Illusion Dust") + end + --Querry update that fires item list update then get item info from like a page or two and get median value if the spread isn't too much + elseif e == "AUCTION_ITEM_LIST_UPDATE" then + --Get auction info + if not aura_env.timer then + SortAuctionSetSort("list", "buyout") + SortAuctionApplySort("list") + end + if aura_env.timer then aura_env.timer:Cancel(); aura_env.timer = nil end + if not aura_env.timer then aura_env.timer = C_Timer.NewTimer(1, function() WeakAuras.ScanEvents("AH_READY") end) end + elseif e == "AH_READY" then + if aura_env.timer then aura_env.timer = nil end + local masterName, masterID + if aura_env.i == 1 then + masterName = "Illusion Dust" + masterID = "ID" + elseif aura_env.i == 2 then + masterName = "Dream Dust" + masterID = "DD" + elseif aura_env.i == 3 then + masterName = "Small Brillaint Shard" + masterID = "SBS" + elseif aura_env.i == 4 then + masterName = "Large Brilliant Shard" + masterID = "LBS" + elseif aura_env.i == 5 then + masterName = "Lesser Eternal Essence" + masterID = "LEE" + elseif aura_env.i == 6 then + masterName = "Greater Eternal Essence" + masterID = "GEE" + end + for i = 1, GetNumAuctionItems("list") do + local name, _, count = GetAuctionItemInfo("list", i) + local buyoutPrice = select(10, GetAuctionItemInfo("list", i)) + if name == masterName then + local pricePerEach = buyoutPrice / count + if WeakAurasSaved.LootLog.AHPrices[masterID] == 0 then + WeakAurasSaved.LootLog.AHPrices[masterID] = pricePerEach + else + WeakAurasSaved.LootLog.AHPrices[masterID] = (WeakAurasSaved.LootLog.AHPrices[masterID] + pricePerEach) / 2 + end + end + end + aura_env.i = aura_env.i + 1 + if WeakAurasSaved.LootLog.AHPrices[masterID] then WeakAurasSaved.LootLog.AHPrices[masterID] = math.floor(WeakAurasSaved.LootLog.AHPrices[masterID]) end + --DevTools_Dump(WeakAurasSaved.LootLog.AHPrices) + if aura_env.i == 1 then + masterName = "Illusion Dust" + masterID = "ID" + elseif aura_env.i == 2 then + masterName = "Dream Dust" + masterID = "DD" + elseif aura_env.i == 3 then + masterName = "Small Brillaint Shard" + masterID = "SBS" + elseif aura_env.i == 4 then + masterName = "Large Brilliant Shard" + masterID = "LBS" + elseif aura_env.i == 5 then + masterName = "Lesser Eternal Essence" + masterID = "LEE" + elseif aura_env.i == 6 then + masterName = "Greater Eternal Essence" + masterID = "GEE" + elseif aura_env.i > 6 then + print("AH Scan complete") + DevTools_Dump(WeakAurasSaved.LootLog.AHPrices) + masterName = nil + masterID = nil + aura_env.i = 1 + end + if masterName then + QueryAuctionItems(masterName) + print("Querry", masterName) + end + end +end + +--INIT +aura_env.i = 1 +aura_env.lootTable = {} +if not WeakAurasSaved.LootLog then WeakAurasSaved.LootLog = {} end +if not WeakAurasSaved.LootLog.AHPrices then + WeakAurasSaved.LootLog.AHPrices = { + ["ID"] = 0, + ["DD"] = 0, + ["SBS"] = 0, + ["LBS"] = 0, + ["LEE"] = 0, + ["GEE"] = 0, + } +end +if not WeakAurasSaved.LootLog.DEStats then + WeakAurasSaved.LootLog.DEStats = { + --<45,55> + [1] = { + ["DD"] = 0, + ["SBS"] = 0, + ["LBS"] = 0, + ["LEE"] = 0, + ["GEE"] = 0, + ["GME"] = 0, + }, + --<56,65> + [2] = { + ["ID"] = 2.8699, + ["LBS"] = 0.018, + ["GEE"] = 0.4, + }, + --Purple items between 59 and 78 + [3] = { + ["LBS"] = 0, + }, + } +end if not WeakAurasSaved.LootLog.Notables then WeakAurasSaved.LootLog.Notables = {} end \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/RaidTranqShot.lua b/WeakAuras/Projects/ByExp/Fivver Stuff/RaidTranqShot.lua similarity index 96% rename from Complete Projects/Fivver Stuff/RaidTranqShot.lua rename to WeakAuras/Projects/ByExp/Fivver Stuff/RaidTranqShot.lua index e69e4ff..7b8de87 100644 --- a/Complete Projects/Fivver Stuff/RaidTranqShot.lua +++ b/WeakAuras/Projects/ByExp/Fivver Stuff/RaidTranqShot.lua @@ -1,49 +1,49 @@ ---GROUP_ROSTER_UPDATE COMBAT_LOG_EVENT_UNFILTERED -function(allstates, e, ...) - if e == "GROUP_ROSTER_UPDATE" then - aura_env.playerList = {} - for i = 1, GetNumGroupMembers() do - local u = "raid" .. i - if select(3, UnitClass(u)) == 2 then - if not aura_env.playerList[UnitName(u)] then aura_env.playerList[UnitName(u)] = u end - if not allstates[UnitName(u)] then allstates[UnitName(u)] = { - show = true, - changed = true, - name = UnitName(u), - unit = u, - class = UnitClass(u), - resort = true, - cd = 0, - cdtotal = 20, - index = 0, - progressType = "static", - value = 0, - total = 1, - } end - end - end - return true - elseif e == "COMBAT_LOG_EVENT_UNFILTERED" then - local caster = select(5, ...) - if aura_env.playerList[caster] then - local se = select(2, ...) - if se == "SPELL_CAST_SUCCESS" then - local spellname = select(13, ...) - if spellname == "Consecration" then - if allstates[caster] then - allstates[caster].progressType = "timed" - allstates[caster].duration = 7.57 - allstates[caster].expirationTime = GetTime() + 7.57 - allstates[caster].index = GetTime() + 7.57 - allstates[caster].resort = true - allstates[caster].changed = true - end - end - end - end - return true - end -end - ---INIT +--GROUP_ROSTER_UPDATE COMBAT_LOG_EVENT_UNFILTERED +function(allstates, e, ...) + if e == "GROUP_ROSTER_UPDATE" then + aura_env.playerList = {} + for i = 1, GetNumGroupMembers() do + local u = "raid" .. i + if select(3, UnitClass(u)) == 2 then + if not aura_env.playerList[UnitName(u)] then aura_env.playerList[UnitName(u)] = u end + if not allstates[UnitName(u)] then allstates[UnitName(u)] = { + show = true, + changed = true, + name = UnitName(u), + unit = u, + class = UnitClass(u), + resort = true, + cd = 0, + cdtotal = 20, + index = 0, + progressType = "static", + value = 0, + total = 1, + } end + end + end + return true + elseif e == "COMBAT_LOG_EVENT_UNFILTERED" then + local caster = select(5, ...) + if aura_env.playerList[caster] then + local se = select(2, ...) + if se == "SPELL_CAST_SUCCESS" then + local spellname = select(13, ...) + if spellname == "Consecration" then + if allstates[caster] then + allstates[caster].progressType = "timed" + allstates[caster].duration = 7.57 + allstates[caster].expirationTime = GetTime() + 7.57 + allstates[caster].index = GetTime() + 7.57 + allstates[caster].resort = true + allstates[caster].changed = true + end + end + end + end + return true + end +end + +--INIT aura_env.playerList = {} \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/GeneralStuff.txt b/WeakAuras/Projects/ByExp/Fivver Stuff/Spellbook cooldowns and talent cooldowns/GeneralStuff.txt similarity index 100% rename from Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/GeneralStuff.txt rename to WeakAuras/Projects/ByExp/Fivver Stuff/Spellbook cooldowns and talent cooldowns/GeneralStuff.txt diff --git a/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Instructions.txt b/WeakAuras/Projects/ByExp/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Instructions.txt similarity index 98% rename from Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Instructions.txt rename to WeakAuras/Projects/ByExp/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Instructions.txt index ce7480a..33aa5d6 100644 --- a/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Instructions.txt +++ b/WeakAuras/Projects/ByExp/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Instructions.txt @@ -1,40 +1,40 @@ -There are more things these weakauras can do but it might be a pain to understand/read/care; this is what I got sidetracked doing -It is possible to tell the 4th-row aura to look for all cooldowns (in your spellbook) or to exclude/whitelist some; for example -You can tell it to find all spells with cooldowns in your spellbook except for Life Cocoon; likewise, you can tell it to only find Life Cocoon -There also are two modes this aura can appear in, one sorts the spells by their cooldown (so a 30s spell would be first, a 1 min spell second and so on) and the other sorts them by their active cooldown (so ready spells are always first and last are spells on cooldown sorted by their remaining cooldown) - -I got carried away designing this and I think there would be no point withholding it from you so, feature-full it is - -To begin, it has two modes of display (as mentioned previously) and this is how you toggle between them (ran in the chat of course) - -/run WeakAuras.ScanEvents("COOLDOWN_MANAGER_SWITCH_MODES") - -I also mentioned it being able to switch between whitelisted and blacklisted spells and this is how that's done (currently there is no way to tell what mode it's in other than looking at the actual aura and seeing for yourself (There is no output other than 0 and 1)) - -/run WeakAuras.ScanEvents("COOLDOWN_MANAGER_SWITCH_SCAN_MODES") - -What the above command essentially does is tells the aura to either look for the spells we want or those we don't want; once it is in either mode we also need to tell it what to look for - -/run WeakAuras.ScanEvents("PLAYER_SPELLBOOK_EXCLUSION_ADD", "") -/run WeakAuras.ScanEvents("PLAYER_SPELLBOOK_EXCLUSION_REMOVE", "") -/run WeakAuras.ScanEvents("PLAYER_SPELLBOOK_WHITELIST_ADD", "") -/run WeakAuras.ScanEvents("PLAYER_SPELLBOOK_WHITELIST_REMOVE", "") - -You can use these commands to either whitelist or blacklist spells using their name or their ID; if you wanted the aura to NOT show Chi Wave you would do - -/run WeakAuras.ScanEvents("PLAYER_SPELLBOOK_EXCLUSION_ADD", "Chi Wave") - -And if you wanted it to show Chi Wave again you would do - -/run WeakAuras.ScanEvents("PLAYER_SPELLBOOK_EXCLUSION_REMOVE", "Chi Wave") - -Few things to note here are if you want to use spell names you must place them in quotation marks however if you want to use ID's you may not use quotation marks; so an ID example would be and also if the aura is in Whitelisted mode (showing only the spells you told it to) the exclusion table/list will have no effect on it and adding or removing spells to it will not change the behavior, similarly if the aura is in Exclusion/Blacklist mode the whitelisted list will have no effect on it - -/run WeakAuras.ScanEvents("PLAYER_SPELLBOOK_EXCLUSION_REMOVE", 115008) - -And finally to check what spells are blacklisted or whitelisted you would do - -/run WeakAuras.ScanEvents("PLAYER_SPELLBOOK_EXCLUSION_LIST") -/run WeakAuras.ScanEvents("PLAYER_SPELLBOOK_WHITELIST_LIST") - +There are more things these weakauras can do but it might be a pain to understand/read/care; this is what I got sidetracked doing +It is possible to tell the 4th-row aura to look for all cooldowns (in your spellbook) or to exclude/whitelist some; for example +You can tell it to find all spells with cooldowns in your spellbook except for Life Cocoon; likewise, you can tell it to only find Life Cocoon +There also are two modes this aura can appear in, one sorts the spells by their cooldown (so a 30s spell would be first, a 1 min spell second and so on) and the other sorts them by their active cooldown (so ready spells are always first and last are spells on cooldown sorted by their remaining cooldown) + +I got carried away designing this and I think there would be no point withholding it from you so, feature-full it is + +To begin, it has two modes of display (as mentioned previously) and this is how you toggle between them (ran in the chat of course) + +/run WeakAuras.ScanEvents("COOLDOWN_MANAGER_SWITCH_MODES") + +I also mentioned it being able to switch between whitelisted and blacklisted spells and this is how that's done (currently there is no way to tell what mode it's in other than looking at the actual aura and seeing for yourself (There is no output other than 0 and 1)) + +/run WeakAuras.ScanEvents("COOLDOWN_MANAGER_SWITCH_SCAN_MODES") + +What the above command essentially does is tells the aura to either look for the spells we want or those we don't want; once it is in either mode we also need to tell it what to look for + +/run WeakAuras.ScanEvents("PLAYER_SPELLBOOK_EXCLUSION_ADD", "") +/run WeakAuras.ScanEvents("PLAYER_SPELLBOOK_EXCLUSION_REMOVE", "") +/run WeakAuras.ScanEvents("PLAYER_SPELLBOOK_WHITELIST_ADD", "") +/run WeakAuras.ScanEvents("PLAYER_SPELLBOOK_WHITELIST_REMOVE", "") + +You can use these commands to either whitelist or blacklist spells using their name or their ID; if you wanted the aura to NOT show Chi Wave you would do + +/run WeakAuras.ScanEvents("PLAYER_SPELLBOOK_EXCLUSION_ADD", "Chi Wave") + +And if you wanted it to show Chi Wave again you would do + +/run WeakAuras.ScanEvents("PLAYER_SPELLBOOK_EXCLUSION_REMOVE", "Chi Wave") + +Few things to note here are if you want to use spell names you must place them in quotation marks however if you want to use ID's you may not use quotation marks; so an ID example would be and also if the aura is in Whitelisted mode (showing only the spells you told it to) the exclusion table/list will have no effect on it and adding or removing spells to it will not change the behavior, similarly if the aura is in Exclusion/Blacklist mode the whitelisted list will have no effect on it + +/run WeakAuras.ScanEvents("PLAYER_SPELLBOOK_EXCLUSION_REMOVE", 115008) + +And finally to check what spells are blacklisted or whitelisted you would do + +/run WeakAuras.ScanEvents("PLAYER_SPELLBOOK_EXCLUSION_LIST") +/run WeakAuras.ScanEvents("PLAYER_SPELLBOOK_WHITELIST_LIST") + Why had I done this? I do not know \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Other stuff.lua b/WeakAuras/Projects/ByExp/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Other stuff.lua similarity index 95% rename from Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Other stuff.lua rename to WeakAuras/Projects/ByExp/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Other stuff.lua index d904123..ba61310 100644 --- a/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Other stuff.lua +++ b/WeakAuras/Projects/ByExp/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Other stuff.lua @@ -1,67 +1,67 @@ ---DISPLAY -function() - local mana = UnitPower("player") - local maxmana = UnitPowerMax("player") - return string.format("%.f%%", (mana / maxmana) * 100) -end - ---NAME -function() - local mana = UnitPower("player") - local maxmana = UnitPowerMax("player") - return aura_env.shorten(mana) -end - ---UNIT_POWER -function() - return true -end - ---DURATION -function() - local mana = UnitPower("player") - local maxmana = UnitPowerMax("player") - return maxmana - mana, maxmana, 1 -end - ---SPELL_UPDATE_COOLDOWN -function() - return true -end - ---DURATION -function() - local id = 109132 - if IsPlayerSpell(115008) then id = 115008 end - local charges, maxCharges, start, duration = GetSpellCharges(id) - if charges >= 2 then - return 0, 1, 1, 1 - elseif charges == 1 then - expirationTime = start + duration - return duration, expirationTime - elseif charges < 1 then - return 1, 1, 1, 1 - end -end - ---INIT -aura_env.shorten = function(val) - local function round(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var - end - local n = 2 - if val < 1e3 then - return round(val, n) - elseif val > 1e3 and val < 1e6 then - return round(val / 1e3, n) .. "k" - elseif val > 1e6 and val < 1e9 then - return round(val / 1e6, n) .. "M" - elseif val > 1e9 then - return round(val / 1e9, n) .. "G" - end +--DISPLAY +function() + local mana = UnitPower("player") + local maxmana = UnitPowerMax("player") + return string.format("%.f%%", (mana / maxmana) * 100) +end + +--NAME +function() + local mana = UnitPower("player") + local maxmana = UnitPowerMax("player") + return aura_env.shorten(mana) +end + +--UNIT_POWER +function() + return true +end + +--DURATION +function() + local mana = UnitPower("player") + local maxmana = UnitPowerMax("player") + return maxmana - mana, maxmana, 1 +end + +--SPELL_UPDATE_COOLDOWN +function() + return true +end + +--DURATION +function() + local id = 109132 + if IsPlayerSpell(115008) then id = 115008 end + local charges, maxCharges, start, duration = GetSpellCharges(id) + if charges >= 2 then + return 0, 1, 1, 1 + elseif charges == 1 then + expirationTime = start + duration + return duration, expirationTime + elseif charges < 1 then + return 1, 1, 1, 1 + end +end + +--INIT +aura_env.shorten = function(val) + local function round(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var + end + local n = 2 + if val < 1e3 then + return round(val, n) + elseif val > 1e3 and val < 1e6 then + return round(val / 1e3, n) .. "k" + elseif val > 1e6 and val < 1e9 then + return round(val / 1e6, n) .. "M" + elseif val > 1e9 then + return round(val / 1e9, n) .. "G" + end end \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Spellbook Cooldowns.lua b/WeakAuras/Projects/ByExp/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Spellbook Cooldowns.lua similarity index 97% rename from Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Spellbook Cooldowns.lua rename to WeakAuras/Projects/ByExp/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Spellbook Cooldowns.lua index 2c4443a..822f441 100644 --- a/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Spellbook Cooldowns.lua +++ b/WeakAuras/Projects/ByExp/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Spellbook Cooldowns.lua @@ -1,43 +1,43 @@ ---TSU ---SPELL_UPDATE_COOLDOWN RESET_COOLDOWN_MANAGER_SPELLS COOLDOWN_MANAGER_SWITCH_MODES -function(allstates, e) - if e == "RESET_COOLDOWN_MANAGER_SPELLS" then - for _, state in pairs(allstates) do - state.show = false; - state.changed = true; - end - end - if not aura_env.mode then aura_env.mode = 1 end - if e == "COOLDOWN_MANAGER_SWITCH_MODES" then - if aura_env.mode == 0 then - aura_env.mode = 1 - print(aura_env.mode) - else - aura_env.mode = 0 - print(aura_env.mode) - end - end - if not aura_env.spells then WeakAuras.ScanEvents("PLAYER_SPELLBOOK_UPDATE") end - for k,v in pairs(aura_env.spells) do - local start, duration = GetSpellCooldown(v) - local icon = GetSpellTexture(k) - local totalcd = GetSpellBaseCooldown(v) - allstates[v] = { - changed = true, - show = true, - resort = true, - progressType = "timed", - icon = icon, - } - if aura_env.mode == 0 then allstates[v].index = totalcd end - if start > 0 and duration > 1.5 then - allstates[v].expirationTime = start + duration - allstates[v].duration = duration - if not allstates[v].timer and aura_env.mode == 1 then allstates[v].timer = C_Timer.NewTimer(duration, function() WeakAuras.ScanEvents("SPELL_UPDATE_COOLDOWN") end) end - if aura_env.mode == 1 then allstates[v].index = start + duration end - else - if aura_env.mode == 1 then allstates[v].index = 0 end - end - end - return true +--TSU +--SPELL_UPDATE_COOLDOWN RESET_COOLDOWN_MANAGER_SPELLS COOLDOWN_MANAGER_SWITCH_MODES +function(allstates, e) + if e == "RESET_COOLDOWN_MANAGER_SPELLS" then + for _, state in pairs(allstates) do + state.show = false; + state.changed = true; + end + end + if not aura_env.mode then aura_env.mode = 1 end + if e == "COOLDOWN_MANAGER_SWITCH_MODES" then + if aura_env.mode == 0 then + aura_env.mode = 1 + print(aura_env.mode) + else + aura_env.mode = 0 + print(aura_env.mode) + end + end + if not aura_env.spells then WeakAuras.ScanEvents("PLAYER_SPELLBOOK_UPDATE") end + for k,v in pairs(aura_env.spells) do + local start, duration = GetSpellCooldown(v) + local icon = GetSpellTexture(k) + local totalcd = GetSpellBaseCooldown(v) + allstates[v] = { + changed = true, + show = true, + resort = true, + progressType = "timed", + icon = icon, + } + if aura_env.mode == 0 then allstates[v].index = totalcd end + if start > 0 and duration > 1.5 then + allstates[v].expirationTime = start + duration + allstates[v].duration = duration + if not allstates[v].timer and aura_env.mode == 1 then allstates[v].timer = C_Timer.NewTimer(duration, function() WeakAuras.ScanEvents("SPELL_UPDATE_COOLDOWN") end) end + if aura_env.mode == 1 then allstates[v].index = start + duration end + else + if aura_env.mode == 1 then allstates[v].index = 0 end + end + end + return true end \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Spellbook Scan.lua b/WeakAuras/Projects/ByExp/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Spellbook Scan.lua similarity index 97% rename from Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Spellbook Scan.lua rename to WeakAuras/Projects/ByExp/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Spellbook Scan.lua index 9d328bc..d0e0bbb 100644 --- a/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Spellbook Scan.lua +++ b/WeakAuras/Projects/ByExp/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Spellbook Scan.lua @@ -1,87 +1,87 @@ ---PLAYER_SPELLBOOK_UPDATE PLAYER_SPELLBOOK_EXCLUSION_ADD PLAYER_SPELLBOOK_EXCLUSION_REMOVE PLAYER_SPELLBOOK_EXCLUSION_LIST COOLDOWN_MANAGER_SWITCH_SCAN_MODES PLAYER_SPELLBOOK_WHITELIST_ADD PLAYER_SPELLBOOK_WHITELIST_REMOVE PLAYER_SPELLBOOK_WHITELIST_LIST -function(e, msg) - if not aura_env.mode then aura_env.mode = 1 end - if e == "COOLDOWN_MANAGER_SWITCH_SCAN_MODES" then - if aura_env.mode == 0 then - aura_env.mode = 1 - print(aura_env.mode) - else - aura_env.mode = 0 - print(aura_env.mode) - end - elseif e == "PLAYER_SPELLBOOK_UPDATE" then - if not WeakAurasSaved.CustomTrash then WeakAurasSaved.CustomTrash = {} end - if not WeakAurasSaved.CustomTrash.SpellExclusion then WeakAurasSaved.CustomTrash.SpellExclusion = {} end - if not WeakAurasSaved.CustomTrash.SpellWhitelist then WeakAurasSaved.CustomTrash.SpellWhitelist = { - ["Fortifying Brew"] = 1, - ["Life Cocoon"] = 1, - ["Revival"] = 1, - ["Paralysis"] = 1, - } end - aura_env.spells = {} - if aura_env.mode == 0 then - local index = 1 - while GetSpellBookItemName(index, "spell") do - local name = GetSpellInfo(index, "spell") - local id = select(7, GetSpellInfo(index, "spell")) - if IsPlayerSpell(id) == true and GetSpellBaseCooldown(id) > 10000 and (not (WeakAurasSaved.CustomTrash.SpellExclusion[name] or WeakAurasSaved.CustomTrash.SpellExclusion[id])) then - aura_env.spells[name] = id - end - index = index + 1 - end - else - for k,v in pairs(WeakAurasSaved.CustomTrash.SpellWhitelist) do - local name = GetSpellInfo(k) - local id = select(7, GetSpellInfo(k)) - if id and IsPlayerSpell(id) == true then - aura_env.spells[name] = id - end - end - end - WeakAuras.ScanEvents("RESET_COOLDOWN_MANAGER_SPELLS") - elseif e == "PLAYER_SPELLBOOK_EXCLUSION_ADD" then - if GetSpellInfo(msg) then - if not WeakAurasSaved.CustomTrash.SpellExclusion[msg] then WeakAurasSaved.CustomTrash.SpellExclusion[msg] = 1 end - print("Spell <", msg, "> added") - else - print("Spell <", msg, "> is invalid") - end - WeakAuras.ScanEvents("PLAYER_SPELLBOOK_UPDATE") - WeakAuras.ScanEvents("RESET_COOLDOWN_MANAGER_SPELLS") - elseif e == "PLAYER_SPELLBOOK_EXCLUSION_REMOVE" then - if GetSpellInfo(msg) then - if WeakAurasSaved.CustomTrash.SpellExclusion[msg] then WeakAurasSaved.CustomTrash.SpellExclusion[msg] = nil else print("Spell <", msg, "> is not excluded"); return end - print("Spell <", msg, "> removed") - else - print("Spell <", msg, "> is invalid") - end - WeakAuras.ScanEvents("PLAYER_SPELLBOOK_UPDATE") - WeakAuras.ScanEvents("RESET_COOLDOWN_MANAGER_SPELLS") - elseif e == "PLAYER_SPELLBOOK_EXCLUSION_LIST" then - for k,v in pairs(WeakAurasSaved.CustomTrash.SpellExclusion) do - print(k,v) - end - elseif e == "PLAYER_SPELLBOOK_WHITELIST_ADD" then - if GetSpellInfo(msg) then - if not WeakAurasSaved.CustomTrash.SpellWhitelist[msg] then WeakAurasSaved.CustomTrash.SpellWhitelist[msg] = 1 end - print("Spell <", msg, "> added") - else - print("Spell <", msg, "> is invalid") - end - WeakAuras.ScanEvents("PLAYER_SPELLBOOK_UPDATE") - WeakAuras.ScanEvents("RESET_COOLDOWN_MANAGER_SPELLS") - elseif e == "PLAYER_SPELLBOOK_WHITELIST_REMOVE" then - if GetSpellInfo(msg) then - if WeakAurasSaved.CustomTrash.SpellWhitelist[msg] then WeakAurasSaved.CustomTrash.SpellWhitelist[msg] = nil else print("Spell <", msg, "> is not excluded"); return end - print("Spell <", msg, "> removed") - else - print("Spell <", msg, "> is invalid") - end - WeakAuras.ScanEvents("PLAYER_SPELLBOOK_UPDATE") - WeakAuras.ScanEvents("RESET_COOLDOWN_MANAGER_SPELLS") - elseif e == "PLAYER_SPELLBOOK_WHITELIST_LIST" then - for k,v in pairs(WeakAurasSaved.CustomTrash.SpellWhitelist) do - print(k,v) - end - end +--PLAYER_SPELLBOOK_UPDATE PLAYER_SPELLBOOK_EXCLUSION_ADD PLAYER_SPELLBOOK_EXCLUSION_REMOVE PLAYER_SPELLBOOK_EXCLUSION_LIST COOLDOWN_MANAGER_SWITCH_SCAN_MODES PLAYER_SPELLBOOK_WHITELIST_ADD PLAYER_SPELLBOOK_WHITELIST_REMOVE PLAYER_SPELLBOOK_WHITELIST_LIST +function(e, msg) + if not aura_env.mode then aura_env.mode = 1 end + if e == "COOLDOWN_MANAGER_SWITCH_SCAN_MODES" then + if aura_env.mode == 0 then + aura_env.mode = 1 + print(aura_env.mode) + else + aura_env.mode = 0 + print(aura_env.mode) + end + elseif e == "PLAYER_SPELLBOOK_UPDATE" then + if not WeakAurasSaved.CustomTrash then WeakAurasSaved.CustomTrash = {} end + if not WeakAurasSaved.CustomTrash.SpellExclusion then WeakAurasSaved.CustomTrash.SpellExclusion = {} end + if not WeakAurasSaved.CustomTrash.SpellWhitelist then WeakAurasSaved.CustomTrash.SpellWhitelist = { + ["Fortifying Brew"] = 1, + ["Life Cocoon"] = 1, + ["Revival"] = 1, + ["Paralysis"] = 1, + } end + aura_env.spells = {} + if aura_env.mode == 0 then + local index = 1 + while GetSpellBookItemName(index, "spell") do + local name = GetSpellInfo(index, "spell") + local id = select(7, GetSpellInfo(index, "spell")) + if IsPlayerSpell(id) == true and GetSpellBaseCooldown(id) > 10000 and (not (WeakAurasSaved.CustomTrash.SpellExclusion[name] or WeakAurasSaved.CustomTrash.SpellExclusion[id])) then + aura_env.spells[name] = id + end + index = index + 1 + end + else + for k,v in pairs(WeakAurasSaved.CustomTrash.SpellWhitelist) do + local name = GetSpellInfo(k) + local id = select(7, GetSpellInfo(k)) + if id and IsPlayerSpell(id) == true then + aura_env.spells[name] = id + end + end + end + WeakAuras.ScanEvents("RESET_COOLDOWN_MANAGER_SPELLS") + elseif e == "PLAYER_SPELLBOOK_EXCLUSION_ADD" then + if GetSpellInfo(msg) then + if not WeakAurasSaved.CustomTrash.SpellExclusion[msg] then WeakAurasSaved.CustomTrash.SpellExclusion[msg] = 1 end + print("Spell <", msg, "> added") + else + print("Spell <", msg, "> is invalid") + end + WeakAuras.ScanEvents("PLAYER_SPELLBOOK_UPDATE") + WeakAuras.ScanEvents("RESET_COOLDOWN_MANAGER_SPELLS") + elseif e == "PLAYER_SPELLBOOK_EXCLUSION_REMOVE" then + if GetSpellInfo(msg) then + if WeakAurasSaved.CustomTrash.SpellExclusion[msg] then WeakAurasSaved.CustomTrash.SpellExclusion[msg] = nil else print("Spell <", msg, "> is not excluded"); return end + print("Spell <", msg, "> removed") + else + print("Spell <", msg, "> is invalid") + end + WeakAuras.ScanEvents("PLAYER_SPELLBOOK_UPDATE") + WeakAuras.ScanEvents("RESET_COOLDOWN_MANAGER_SPELLS") + elseif e == "PLAYER_SPELLBOOK_EXCLUSION_LIST" then + for k,v in pairs(WeakAurasSaved.CustomTrash.SpellExclusion) do + print(k,v) + end + elseif e == "PLAYER_SPELLBOOK_WHITELIST_ADD" then + if GetSpellInfo(msg) then + if not WeakAurasSaved.CustomTrash.SpellWhitelist[msg] then WeakAurasSaved.CustomTrash.SpellWhitelist[msg] = 1 end + print("Spell <", msg, "> added") + else + print("Spell <", msg, "> is invalid") + end + WeakAuras.ScanEvents("PLAYER_SPELLBOOK_UPDATE") + WeakAuras.ScanEvents("RESET_COOLDOWN_MANAGER_SPELLS") + elseif e == "PLAYER_SPELLBOOK_WHITELIST_REMOVE" then + if GetSpellInfo(msg) then + if WeakAurasSaved.CustomTrash.SpellWhitelist[msg] then WeakAurasSaved.CustomTrash.SpellWhitelist[msg] = nil else print("Spell <", msg, "> is not excluded"); return end + print("Spell <", msg, "> removed") + else + print("Spell <", msg, "> is invalid") + end + WeakAuras.ScanEvents("PLAYER_SPELLBOOK_UPDATE") + WeakAuras.ScanEvents("RESET_COOLDOWN_MANAGER_SPELLS") + elseif e == "PLAYER_SPELLBOOK_WHITELIST_LIST" then + for k,v in pairs(WeakAurasSaved.CustomTrash.SpellWhitelist) do + print(k,v) + end + end end \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/SpellbookCooldowns.txt b/WeakAuras/Projects/ByExp/Fivver Stuff/Spellbook cooldowns and talent cooldowns/SpellbookCooldowns.txt similarity index 100% rename from Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/SpellbookCooldowns.txt rename to WeakAuras/Projects/ByExp/Fivver Stuff/Spellbook cooldowns and talent cooldowns/SpellbookCooldowns.txt diff --git a/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Talent Cooldowns.lua b/WeakAuras/Projects/ByExp/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Talent Cooldowns.lua similarity index 96% rename from Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Talent Cooldowns.lua rename to WeakAuras/Projects/ByExp/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Talent Cooldowns.lua index 5e82ebb..db1d56f 100644 --- a/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Talent Cooldowns.lua +++ b/WeakAuras/Projects/ByExp/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Talent Cooldowns.lua @@ -1,31 +1,31 @@ ---TSU ---SPELL_UPDATE_COOLDOWN RESET_COOLDOWN_MANAGER -function(allstates, e) - if e == "RESET_COOLDOWN_MANAGER" then - for _, state in pairs(allstates) do - state.show = false; - state.changed = true; - end - end - if not aura_env.talents then WeakAuras.ScanEvents("PLAYER_TALENT_UPDATE") end - for k,v in pairs(aura_env.talents) do - local start, duration = GetSpellCooldown(v) - local icon = GetSpellTexture(k) - local enable = 0 - if start == 0 then enable = 1 else enable = 0 end - allstates[v] = { - changed = true, - show = true, - resort = true, - progressType = "timed", - icon = icon, - enable = enable, - } - if start > 0 and duration > 1.5 then - allstates[v].expirationTime = start + duration - allstates[v].duration = duration - allstates[v].index = duration - end - end - return true +--TSU +--SPELL_UPDATE_COOLDOWN RESET_COOLDOWN_MANAGER +function(allstates, e) + if e == "RESET_COOLDOWN_MANAGER" then + for _, state in pairs(allstates) do + state.show = false; + state.changed = true; + end + end + if not aura_env.talents then WeakAuras.ScanEvents("PLAYER_TALENT_UPDATE") end + for k,v in pairs(aura_env.talents) do + local start, duration = GetSpellCooldown(v) + local icon = GetSpellTexture(k) + local enable = 0 + if start == 0 then enable = 1 else enable = 0 end + allstates[v] = { + changed = true, + show = true, + resort = true, + progressType = "timed", + icon = icon, + enable = enable, + } + if start > 0 and duration > 1.5 then + allstates[v].expirationTime = start + duration + allstates[v].duration = duration + allstates[v].index = duration + end + end + return true end \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Talent Scan.lua b/WeakAuras/Projects/ByExp/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Talent Scan.lua similarity index 97% rename from Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Talent Scan.lua rename to WeakAuras/Projects/ByExp/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Talent Scan.lua index 8b8cdc8..ac0f08c 100644 --- a/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Talent Scan.lua +++ b/WeakAuras/Projects/ByExp/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Talent Scan.lua @@ -1,17 +1,17 @@ ---PLAYER_TALENT_UPDATE -function(e, msg) - aura_env.talents = {} - for row = 1, 7 do - for column = 1, 3 do - local id, name = GetTalentInfo(row, column, 1) - local sel = select(10, GetTalentInfoByID(id)) - local sid = select(6, GetTalentInfoByID(id)) - if GetSpellBaseCooldown(sid) > 0 and sel == true then - aura_env.talents[name] = sid - end - end - end - WeakAuras.ScanEvents("RESET_COOLDOWN_MANAGER") - WeakAuras.ScanEvents("RESET_COOLDOWN_MANAGER_SPELLS") - WeakAuras.ScanEvents("PLAYER_SPELLBOOK_UPDATE") +--PLAYER_TALENT_UPDATE +function(e, msg) + aura_env.talents = {} + for row = 1, 7 do + for column = 1, 3 do + local id, name = GetTalentInfo(row, column, 1) + local sel = select(10, GetTalentInfoByID(id)) + local sid = select(6, GetTalentInfoByID(id)) + if GetSpellBaseCooldown(sid) > 0 and sel == true then + aura_env.talents[name] = sid + end + end + end + WeakAuras.ScanEvents("RESET_COOLDOWN_MANAGER") + WeakAuras.ScanEvents("RESET_COOLDOWN_MANAGER_SPELLS") + WeakAuras.ScanEvents("PLAYER_SPELLBOOK_UPDATE") end \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/TalentCooldowns.txt b/WeakAuras/Projects/ByExp/Fivver Stuff/Spellbook cooldowns and talent cooldowns/TalentCooldowns.txt similarity index 100% rename from Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/TalentCooldowns.txt rename to WeakAuras/Projects/ByExp/Fivver Stuff/Spellbook cooldowns and talent cooldowns/TalentCooldowns.txt diff --git a/LegionWA/CDs/Color.lua b/WeakAuras/Projects/CDs/Color.lua similarity index 96% rename from LegionWA/CDs/Color.lua rename to WeakAuras/Projects/CDs/Color.lua index e9f9a16..7259a72 100644 --- a/LegionWA/CDs/Color.lua +++ b/WeakAuras/Projects/CDs/Color.lua @@ -1,20 +1,20 @@ -function(progress, r1, g1, b1, a1, r2, g2, b2, a2) - -- if aura_env.state.IsActive then - -- ActionButton_ShowOverlayGlow(aura_env.region.icon) - -- else - -- ActionButton_HideOverlayGlow(aura_env.region.icon) - -- end - - if aura_env.statee.IsActive then - aura_env.region.icon:SetDesaturated(false) - return r1, g1, b1, a1 - end - - if aura_env.IsOnCooldown then - aura_env.region.icon:SetDesaturated(true) - return r1, g1, b1, a1 - end - - aura_env.region.icon:SetDesaturated(false) - return r2, g2, b2, 0.6 +function(progress, r1, g1, b1, a1, r2, g2, b2, a2) + -- if aura_env.state.IsActive then + -- ActionButton_ShowOverlayGlow(aura_env.region.icon) + -- else + -- ActionButton_HideOverlayGlow(aura_env.region.icon) + -- end + + if aura_env.statee.IsActive then + aura_env.region.icon:SetDesaturated(false) + return r1, g1, b1, a1 + end + + if aura_env.IsOnCooldown then + aura_env.region.icon:SetDesaturated(true) + return r1, g1, b1, a1 + end + + aura_env.region.icon:SetDesaturated(false) + return r2, g2, b2, 0.6 end \ No newline at end of file diff --git a/LegionWA/CDs/Event.lua b/WeakAuras/Projects/CDs/Event.lua similarity index 96% rename from LegionWA/CDs/Event.lua rename to WeakAuras/Projects/CDs/Event.lua index 5fc898d..cf458e9 100644 --- a/LegionWA/CDs/Event.lua +++ b/WeakAuras/Projects/CDs/Event.lua @@ -1,4 +1,4 @@ -function(allstates) - aura_env.HandleEvent(allstates) - return true +function(allstates) + aura_env.HandleEvent(allstates) + return true end \ No newline at end of file diff --git a/LegionWA/CDs/Init.lua b/WeakAuras/Projects/CDs/Init.lua similarity index 96% rename from LegionWA/CDs/Init.lua rename to WeakAuras/Projects/CDs/Init.lua index a2e2f37..ae20406 100644 --- a/LegionWA/CDs/Init.lua +++ b/WeakAuras/Projects/CDs/Init.lua @@ -1,94 +1,94 @@ -local CooldownType = { - New = function(self) - local o = {} - setmetatable(o, self) - self.__index = self - return o - end, -} - -local NullType = CooldownType:New() -NullType.GetActiveInfo = function(self) return false, 0, 0 end -local TotemType = CooldownType:New() -TotemType.GetActiveInfo = function(self) - for i = 1, 4 do - local present, name, start, duration = GetTotemInfo(i) - if present and name == self.name then return true, start, duration end - end - return false, 0, 0 -end - -local Cooldown = { - New = function(self, type, spellid, keybind) - local o = { - ["type"] = type, - ["spellid"] = spellid, - ["name"] = GetSpellInfo(spellid), - ["icon"] = GetSpellTexture(spellid), - ["keybind"] = keybind, - } - setmetatable(o, self) - self.__index = self - return o - end, - - GetCooldownInfo = function(self) - local start, duration = GetSpellCooldown(self.spellid) - return start > 0 and duration > aura_env.gcdThreshold, start, duration - end, - - GetActiveInfo = function(self) return self.type:GetActiveInfo() end, -} - -aura_env.cooldowns = { - [5394] = Cooldown:New(TotemType, 5394, "C"), -- Healing Stream Totem - [2484] = Cooldown:New(TotemType, 2484, "SY"), -- Earthbind Totem - [8143] = Cooldown:New(TotemType, 8143, "S5"), -- Tremor Totem - [8177] = Cooldown:New(TotemType, 8177, "5"), -- Grounding Totem - [108273] = Cooldown:New(TotemType, 108273, "S4"), -- Windwalk Totem - [108270] = Cooldown:New(TotemType, 108270, "SF"), -- Stone Bulwark Totem -} -aura_env.gcdThreshold = 1.5 - -aura_env.Update = function(allstates, cd) - local state = allstates[cd.spellid] or {} - - state.IsOnCooldown = cd:GetCooldownInfo() - state.IsActive = cd:GetActiveInfo() - state.Keybind = cd.keybind - - if state.IsOnCooldown and not state.IsActive then - local _, start, duration = cd:GetCooldownInfo() - state.progressType = "timed" - state.duration = duration - state.expirationTime = start + duration - elseif state.IsOnCooldown and state.IsActive then - local _, start, duration = cd:GetActiveInfo() - state.progressType = "timed" - state.duration = duration - state.expirationTime = start + duration - end - - state.changed = true - state.show = true - state.name = cd.name - state.icon = cd.icon - state.spellid = cd.spellid - allstates[cd.spellid] = state -end - -aura_env.UpdateAll = function(allstates) - for _, v in pairs(aura_env.cooldowns) do - aura_env.Update(allstates, v) - end -end - -aura_env.HandleEvent = function(allstates) - -- TODO: Handle events better - -- On cooldown begin -> trigger update on relevant spell - -- On totem die -> same - -- On buff remove - -- On debuff remove - -- On... Whatever else might happen - aura_env.UpdateAll(allstates) -end +local CooldownType = { + New = function(self) + local o = {} + setmetatable(o, self) + self.__index = self + return o + end, +} + +local NullType = CooldownType:New() +NullType.GetActiveInfo = function(self) return false, 0, 0 end +local TotemType = CooldownType:New() +TotemType.GetActiveInfo = function(self) + for i = 1, 4 do + local present, name, start, duration = GetTotemInfo(i) + if present and name == self.name then return true, start, duration end + end + return false, 0, 0 +end + +local Cooldown = { + New = function(self, type, spellid, keybind) + local o = { + ["type"] = type, + ["spellid"] = spellid, + ["name"] = GetSpellInfo(spellid), + ["icon"] = GetSpellTexture(spellid), + ["keybind"] = keybind, + } + setmetatable(o, self) + self.__index = self + return o + end, + + GetCooldownInfo = function(self) + local start, duration = GetSpellCooldown(self.spellid) + return start > 0 and duration > aura_env.gcdThreshold, start, duration + end, + + GetActiveInfo = function(self) return self.type:GetActiveInfo() end, +} + +aura_env.cooldowns = { + [5394] = Cooldown:New(TotemType, 5394, "C"), -- Healing Stream Totem + [2484] = Cooldown:New(TotemType, 2484, "SY"), -- Earthbind Totem + [8143] = Cooldown:New(TotemType, 8143, "S5"), -- Tremor Totem + [8177] = Cooldown:New(TotemType, 8177, "5"), -- Grounding Totem + [108273] = Cooldown:New(TotemType, 108273, "S4"), -- Windwalk Totem + [108270] = Cooldown:New(TotemType, 108270, "SF"), -- Stone Bulwark Totem +} +aura_env.gcdThreshold = 1.5 + +aura_env.Update = function(allstates, cd) + local state = allstates[cd.spellid] or {} + + state.IsOnCooldown = cd:GetCooldownInfo() + state.IsActive = cd:GetActiveInfo() + state.Keybind = cd.keybind + + if state.IsOnCooldown and not state.IsActive then + local _, start, duration = cd:GetCooldownInfo() + state.progressType = "timed" + state.duration = duration + state.expirationTime = start + duration + elseif state.IsOnCooldown and state.IsActive then + local _, start, duration = cd:GetActiveInfo() + state.progressType = "timed" + state.duration = duration + state.expirationTime = start + duration + end + + state.changed = true + state.show = true + state.name = cd.name + state.icon = cd.icon + state.spellid = cd.spellid + allstates[cd.spellid] = state +end + +aura_env.UpdateAll = function(allstates) + for _, v in pairs(aura_env.cooldowns) do + aura_env.Update(allstates, v) + end +end + +aura_env.HandleEvent = function(allstates) + -- TODO: Handle events better + -- On cooldown begin -> trigger update on relevant spell + -- On totem die -> same + -- On buff remove + -- On debuff remove + -- On... Whatever else might happen + aura_env.UpdateAll(allstates) +end diff --git a/FreshShit/CLEUSaver/event.lua b/WeakAuras/Projects/CLEUSaver/event.lua similarity index 96% rename from FreshShit/CLEUSaver/event.lua rename to WeakAuras/Projects/CLEUSaver/event.lua index e76d162..9a7e9c5 100644 --- a/FreshShit/CLEUSaver/event.lua +++ b/WeakAuras/Projects/CLEUSaver/event.lua @@ -1,7 +1,7 @@ ---- COMBAT_LOG_EVENT_UNFILTERED ----@param e string ----@param ... any -function(e, ...) - if e ~= "COMBAT_LOG_EVENT_UNFILTERED" then return end - aura_env.LogSpell(...) -end +--- COMBAT_LOG_EVENT_UNFILTERED +---@param e string +---@param ... any +function(e, ...) + if e ~= "COMBAT_LOG_EVENT_UNFILTERED" then return end + aura_env.LogSpell(...) +end diff --git a/FreshShit/CLEUSaver/export b/WeakAuras/Projects/CLEUSaver/export similarity index 100% rename from FreshShit/CLEUSaver/export rename to WeakAuras/Projects/CLEUSaver/export diff --git a/FreshShit/CLEUSaver/init.lua b/WeakAuras/Projects/CLEUSaver/init.lua similarity index 97% rename from FreshShit/CLEUSaver/init.lua rename to WeakAuras/Projects/CLEUSaver/init.lua index 7a693db..181c3f0 100644 --- a/FreshShit/CLEUSaver/init.lua +++ b/WeakAuras/Projects/CLEUSaver/init.lua @@ -1,22 +1,22 @@ -local function varargToString(...) - local output = {} - for i = 1, select("#", ...) do - local value = select(i, ...) - output[#output + 1] = '"' .. tostring(value) .. '"' - end - return table.concat(output, ",") -end - -if not WeakAurasSaved then WeakAurasSaved = {} end -if not WeakAurasSaved.Cyka then WeakAurasSaved.Cyka = {} end -if not WeakAurasSaved.Cyka.CombatLog then WeakAurasSaved.Cyka.CombatLog = {} end ----@param spellName string ----@param spellId number ----@param subevent string ----@param ... any -aura_env.LogSpell = function(subevent, ...) - print(varargToString(subevent, ...)) - table.insert(WeakAurasSaved.Cyka.CombatLog, varargToString(subevent, ...)) -end --- /dump WeakAurasSaved.Cyka.CombatLog --- /run WeakAurasSaved.Cyka.CombatLog = {} +local function varargToString(...) + local output = {} + for i = 1, select("#", ...) do + local value = select(i, ...) + output[#output + 1] = '"' .. tostring(value) .. '"' + end + return table.concat(output, ",") +end + +if not WeakAurasSaved then WeakAurasSaved = {} end +if not WeakAurasSaved.Cyka then WeakAurasSaved.Cyka = {} end +if not WeakAurasSaved.Cyka.CombatLog then WeakAurasSaved.Cyka.CombatLog = {} end +---@param spellName string +---@param spellId number +---@param subevent string +---@param ... any +aura_env.LogSpell = function(subevent, ...) + print(varargToString(subevent, ...)) + table.insert(WeakAurasSaved.Cyka.CombatLog, varargToString(subevent, ...)) +end +-- /dump WeakAurasSaved.Cyka.CombatLog +-- /run WeakAurasSaved.Cyka.CombatLog = {} diff --git a/Complete Projects/Legion/CachedNPCLevels.lua b/WeakAuras/Projects/CachedNPCLevels.lua similarity index 100% rename from Complete Projects/Legion/CachedNPCLevels.lua rename to WeakAuras/Projects/CachedNPCLevels.lua diff --git a/NewAge/CataAuraBar/CustomOptions.lua b/WeakAuras/Projects/CataAuraBar/CustomOptions.lua similarity index 96% rename from NewAge/CataAuraBar/CustomOptions.lua rename to WeakAuras/Projects/CataAuraBar/CustomOptions.lua index 276c13d..462869e 100644 --- a/NewAge/CataAuraBar/CustomOptions.lua +++ b/WeakAuras/Projects/CataAuraBar/CustomOptions.lua @@ -1,20 +1,20 @@ -{ - IsOnCooldown = { - type = "bool", - test = function(state, needle) - return state.IsOnCooldown == (needle == 1) - end, - }, - IsActive = { - type = "bool", - test = function(state, needle) - return state.IsActive == (needle == 1) - end, - }, - IsDebuff = { - type = "bool", - test = function(state, needle) - return state.IsBad == (needle == 1) - end, - }, +{ + IsOnCooldown = { + type = "bool", + test = function(state, needle) + return state.IsOnCooldown == (needle == 1) + end, + }, + IsActive = { + type = "bool", + test = function(state, needle) + return state.IsActive == (needle == 1) + end, + }, + IsDebuff = { + type = "bool", + test = function(state, needle) + return state.IsBad == (needle == 1) + end, + }, } \ No newline at end of file diff --git a/NewAge/CataAuraBar/CustomText.lua b/WeakAuras/Projects/CataAuraBar/CustomText.lua similarity index 96% rename from NewAge/CataAuraBar/CustomText.lua rename to WeakAuras/Projects/CataAuraBar/CustomText.lua index 2240411..42ce0a5 100644 --- a/NewAge/CataAuraBar/CustomText.lua +++ b/WeakAuras/Projects/CataAuraBar/CustomText.lua @@ -1,11 +1,11 @@ -function() - if aura_env.statee.pname then - output = "" - if aura_env.statee.pclass then - output = aura_env.GetClassColor(aura_env.statee.pclass) .. aura_env.statee.pname .. "\124r" - else - output = aura_env.statee.pname - end - return output - end +function() + if aura_env.statee.pname then + output = "" + if aura_env.statee.pclass then + output = aura_env.GetClassColor(aura_env.statee.pclass) .. aura_env.statee.pname .. "\124r" + else + output = aura_env.statee.pname + end + return output + end end \ No newline at end of file diff --git a/NewAge/CataAuraBar/Export b/WeakAuras/Projects/CataAuraBar/Export similarity index 100% rename from NewAge/CataAuraBar/Export rename to WeakAuras/Projects/CataAuraBar/Export diff --git a/NewAge/CataAuraBar/INIT.lua b/WeakAuras/Projects/CataAuraBar/INIT.lua similarity index 96% rename from NewAge/CataAuraBar/INIT.lua rename to WeakAuras/Projects/CataAuraBar/INIT.lua index 10f84c6..36d2958 100644 --- a/NewAge/CataAuraBar/INIT.lua +++ b/WeakAuras/Projects/CataAuraBar/INIT.lua @@ -1,294 +1,294 @@ -local function StrSplit(inputString, separator) - local outputTable = {} - for str in string.gmatch(inputString, "([^" .. separator .. "]+)") do - outputTable[#outputTable + 1] = str - end - return outputTable -end - -local function PrintTable(table) - for k, v in pairs(table) do - print(k .. " " .. v) - end -end - -aura_env.GetClassColor = function(class) - if class == "Death Knight" then - return "\124cFFC41E3A" - elseif class == "Druid" then - return "\124cFFFF7C0A" - elseif class == "Hunter" then - return "\124cFFAAD372" - elseif class == "Mage" then - return "\124cFF3FC7EB" - elseif class == "Paladin" then - return "\124cFFF48CBA" - elseif class == "Priest" then - return "\124cFFFFFFFF" - elseif class == "Rogue" then - return "\124cFFFFF468" - elseif class == "Shaman" then - return "\124cFF0070DD" - elseif class == "Warlock" then - return "\124cFF8788EE" - elseif class == "Warrior" then - return "\124cFFC69B6D" - end -end - -local Unit = { - New = function(self, unit) - o = { - ["unit"] = unit, - } - setmetatable(o, self) - self.__index = self - return o - end, - - GetAuras = function(self, auraFunc, name, type) return nil end, -} -local BasicUnit = Unit:New("player") -function BasicUnit:GetAuras(auraFunc, name) - local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc(self.unit, name) - if aura ~= nil then - return { - [UnitName(self.unit)] = { - ["duration"] = duration, - ["expirationTime"] = expirationTime, - ["spellID"] = spellID, - ["stacks"] = stacks or 1, - }, - } - else - return {} - end -end --- Maybe implement some sort of throttle to group unit? -local GroupUnit = Unit:New("group") -function GroupUnit:GetAuras(auraFunc, name) - local raidMem = GetNumRaidMembers() - local num = GetNumPartyMembers() - local unitPrefix = "party" - if raidMem > num then - unitPrefix = "raid" - num = raidMem - end - auras = {} - for i = 1, num do - local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc(unitPrefix .. i, name) - if aura ~= nil then - auras[UnitName(unitPrefix .. i)] = { - ["duration"] = duration, - ["expirationTime"] = expirationTime, - ["spellID"] = spellID, - ["class"] = UnitClass(unitPrefix .. i) or "Paladin", - ["stacks"] = stacks or 1, - } - end - end - if unitPrefix == "party" then - local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc("player", name) - if aura ~= nil then - auras[UnitName("player")] = { - ["duration"] = duration, - ["expirationTime"] = expirationTime, - ["spellID"] = spellID, - ["class"] = UnitClass(unitPrefix .. i) or "Paladin", - ["stacks"] = stacks or 1, - } - end - end - return auras -end --- Nameplate does not work, find out why? -local NameplateUnit = Unit:New("nameplate") -function NameplateUnit:GetAuras(auraFunc, name) - local unitPrefix = "nameplate" - auras = {} - for i = 1, 40 do - local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc(auraPrefix .. i, name) - if aura ~= nil then - auras[UnitName(unitPrefix .. i)] = { - ["duration"] = duration, - ["expirationTime"] = expirationTime, - ["spellID"] = spellID, - ["stacks"] = stacks or 1, - } - end - end - return auras -end - -local UnitFactory = { - New = function(self) - o = {} - setmetatable(o, self) - self.__index = self - return o - end, - - CreateUnit = function(self, target) - target = string.lower(target) - if target == "player" or target == "target" or target == "focus" then - return BasicUnit:New(target) - elseif target == "group" then - return GroupUnit:New(target) - elseif target == "nameplate" then - return NameplateUnit:New(target) - end - end, -} -local unitFactory = UnitFactory:New() - -local Aura = { - New = function(self, entry, index) - o = { - ["name"] = entry.auraName, - ["unit"] = entry.target, - ["hasCooldown"] = entry.hasCooldown, - ["index"] = index, - ["GetAura"] = entry.GetAura, - } - setmetatable(o, self) - self.__index = self - return o - end, - - IsActive = function(self) - for k, v in pairs(self.unit:GetAuras(self.GetAura, self.name)) do - for k2, v2 in pairs(v) do - end - return true - end - return false - end, - IsOnCooldown = function(self) - if not self.hasCooldown then return false end - return GetSpellCooldown(self.name) > 0 - end, - - AddAsAura = function(self, allstates) - local auras = self.unit:GetAuras(self.GetAura, self.name) - for k, v in pairs(auras) do - duration = v.duration - expirationTime = v.expirationTime - icon = self:GetAuraIcon(v.spellID) - allstates[self.name .. k] = { - changed = true, - show = true, - resort = true, - progressType = "timed", - duration = duration, - expirationTime = expirationTime, - index = self.index, - icon = icon, - pname = k, - stacks = v.stacks, - pclass = v.class, - IsOnCooldown = true, - IsActive = true, - IsBad = self.GetAura == UnitDebuff, - } - end - end, - AddAsCooldown = function(self, allstates) - if not self.hasCooldown then return false end - startTime, duration = GetSpellCooldown(self.name) - icon = self:GetSpellIcon() - allstates[self.name] = { - changed = true, - show = true, - resort = true, - progressType = "timed", - duration = duration, - expirationTime = startTime + duration, - index = self.index, - icon = icon, - IsOnCooldown = true, - IsActive = false, - IsBad = self.GetAura == UnitDebuff, - } - end, - AddAsIcon = function(self, allstates) - if not self.hasCooldown then return false end - icon = self:GetSpellIcon() - allstates[self.name] = { - changed = true, - show = true, - resort = true, - progressType = "static", - value = 1, - total = 1, - index = self.index, - icon = icon, - IsOnCooldown = false, - IsActive = false, - IsBad = self.GetAura == UnitDebuff, - } - end, - - GetSpellIcon = function(self) return select(3, GetSpellInfo(self.name)) end, - GetAuraIcon = function(self, spellID) return select(3, GetSpellInfo(spellID)) end, -} - -local Entry = { - New = function(self, entry) - entry = self:TrimWhitespace(entry) - - local entryData = StrSplit(entry, ",") - local name = self:ReadEntryData(entryData, 1) - local type = self:ReadEntryData(entryData, 2) or "Buff" - local target = unitFactory:CreateUnit(self:ReadEntryData(entryData, 3) or "Player") - local cooldown = (self:ReadEntryData(entryData, 4) == "0") or false - cooldown = not cooldown - local GetAura = UnitBuff - - if type == "Debuff" then GetAura = UnitDebuff end - - o = { - ["entry"] = entry, - ["auraName"] = name, - ["GetAura"] = GetAura, - ["target"] = target, - ["hasCooldown"] = cooldown, - } - setmetatable(o, self) - self.__index = self - return o - end, - - ReadEntryData = function(self, entryData, index) - local str = entryData[index] - if str == nil then return nil end - str = self:TrimWhitespace(str) - return str - end, - - TrimWhitespace = function(self, str) - str = str:gsub("^[ ]+", "") - str = str:gsub("\n$", "") - str = str:gsub("[ ]+$", "") - return str - end, -} - -aura_env.auras = {} -for entry in string.gmatch(aura_env.config.spellList, "([a-zA-Z,0-9 ]+)") do - entry = Entry:New(entry) - - auraObj = Aura:New(entry, #aura_env.auras + 1) - aura_env.auras[#aura_env.auras + 1] = auraObj -end - -aura_env.HandleEvent = function(allstates) - for k, v in ipairs(aura_env.auras) do - if v:IsActive() then - v:AddAsAura(allstates) - elseif v:IsOnCooldown() and not v:IsActive() then - v:AddAsCooldown(allstates) - elseif not v:IsOnCooldown() and not v:IsActive() then - v:AddAsIcon(allstates) - end - end -end +local function StrSplit(inputString, separator) + local outputTable = {} + for str in string.gmatch(inputString, "([^" .. separator .. "]+)") do + outputTable[#outputTable + 1] = str + end + return outputTable +end + +local function PrintTable(table) + for k, v in pairs(table) do + print(k .. " " .. v) + end +end + +aura_env.GetClassColor = function(class) + if class == "Death Knight" then + return "\124cFFC41E3A" + elseif class == "Druid" then + return "\124cFFFF7C0A" + elseif class == "Hunter" then + return "\124cFFAAD372" + elseif class == "Mage" then + return "\124cFF3FC7EB" + elseif class == "Paladin" then + return "\124cFFF48CBA" + elseif class == "Priest" then + return "\124cFFFFFFFF" + elseif class == "Rogue" then + return "\124cFFFFF468" + elseif class == "Shaman" then + return "\124cFF0070DD" + elseif class == "Warlock" then + return "\124cFF8788EE" + elseif class == "Warrior" then + return "\124cFFC69B6D" + end +end + +local Unit = { + New = function(self, unit) + o = { + ["unit"] = unit, + } + setmetatable(o, self) + self.__index = self + return o + end, + + GetAuras = function(self, auraFunc, name, type) return nil end, +} +local BasicUnit = Unit:New("player") +function BasicUnit:GetAuras(auraFunc, name) + local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc(self.unit, name) + if aura ~= nil then + return { + [UnitName(self.unit)] = { + ["duration"] = duration, + ["expirationTime"] = expirationTime, + ["spellID"] = spellID, + ["stacks"] = stacks or 1, + }, + } + else + return {} + end +end +-- Maybe implement some sort of throttle to group unit? +local GroupUnit = Unit:New("group") +function GroupUnit:GetAuras(auraFunc, name) + local raidMem = GetNumRaidMembers() + local num = GetNumPartyMembers() + local unitPrefix = "party" + if raidMem > num then + unitPrefix = "raid" + num = raidMem + end + auras = {} + for i = 1, num do + local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc(unitPrefix .. i, name) + if aura ~= nil then + auras[UnitName(unitPrefix .. i)] = { + ["duration"] = duration, + ["expirationTime"] = expirationTime, + ["spellID"] = spellID, + ["class"] = UnitClass(unitPrefix .. i) or "Paladin", + ["stacks"] = stacks or 1, + } + end + end + if unitPrefix == "party" then + local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc("player", name) + if aura ~= nil then + auras[UnitName("player")] = { + ["duration"] = duration, + ["expirationTime"] = expirationTime, + ["spellID"] = spellID, + ["class"] = UnitClass(unitPrefix .. i) or "Paladin", + ["stacks"] = stacks or 1, + } + end + end + return auras +end +-- Nameplate does not work, find out why? +local NameplateUnit = Unit:New("nameplate") +function NameplateUnit:GetAuras(auraFunc, name) + local unitPrefix = "nameplate" + auras = {} + for i = 1, 40 do + local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc(auraPrefix .. i, name) + if aura ~= nil then + auras[UnitName(unitPrefix .. i)] = { + ["duration"] = duration, + ["expirationTime"] = expirationTime, + ["spellID"] = spellID, + ["stacks"] = stacks or 1, + } + end + end + return auras +end + +local UnitFactory = { + New = function(self) + o = {} + setmetatable(o, self) + self.__index = self + return o + end, + + CreateUnit = function(self, target) + target = string.lower(target) + if target == "player" or target == "target" or target == "focus" then + return BasicUnit:New(target) + elseif target == "group" then + return GroupUnit:New(target) + elseif target == "nameplate" then + return NameplateUnit:New(target) + end + end, +} +local unitFactory = UnitFactory:New() + +local Aura = { + New = function(self, entry, index) + o = { + ["name"] = entry.auraName, + ["unit"] = entry.target, + ["hasCooldown"] = entry.hasCooldown, + ["index"] = index, + ["GetAura"] = entry.GetAura, + } + setmetatable(o, self) + self.__index = self + return o + end, + + IsActive = function(self) + for k, v in pairs(self.unit:GetAuras(self.GetAura, self.name)) do + for k2, v2 in pairs(v) do + end + return true + end + return false + end, + IsOnCooldown = function(self) + if not self.hasCooldown then return false end + return GetSpellCooldown(self.name) > 0 + end, + + AddAsAura = function(self, allstates) + local auras = self.unit:GetAuras(self.GetAura, self.name) + for k, v in pairs(auras) do + duration = v.duration + expirationTime = v.expirationTime + icon = self:GetAuraIcon(v.spellID) + allstates[self.name .. k] = { + changed = true, + show = true, + resort = true, + progressType = "timed", + duration = duration, + expirationTime = expirationTime, + index = self.index, + icon = icon, + pname = k, + stacks = v.stacks, + pclass = v.class, + IsOnCooldown = true, + IsActive = true, + IsBad = self.GetAura == UnitDebuff, + } + end + end, + AddAsCooldown = function(self, allstates) + if not self.hasCooldown then return false end + startTime, duration = GetSpellCooldown(self.name) + icon = self:GetSpellIcon() + allstates[self.name] = { + changed = true, + show = true, + resort = true, + progressType = "timed", + duration = duration, + expirationTime = startTime + duration, + index = self.index, + icon = icon, + IsOnCooldown = true, + IsActive = false, + IsBad = self.GetAura == UnitDebuff, + } + end, + AddAsIcon = function(self, allstates) + if not self.hasCooldown then return false end + icon = self:GetSpellIcon() + allstates[self.name] = { + changed = true, + show = true, + resort = true, + progressType = "static", + value = 1, + total = 1, + index = self.index, + icon = icon, + IsOnCooldown = false, + IsActive = false, + IsBad = self.GetAura == UnitDebuff, + } + end, + + GetSpellIcon = function(self) return select(3, GetSpellInfo(self.name)) end, + GetAuraIcon = function(self, spellID) return select(3, GetSpellInfo(spellID)) end, +} + +local Entry = { + New = function(self, entry) + entry = self:TrimWhitespace(entry) + + local entryData = StrSplit(entry, ",") + local name = self:ReadEntryData(entryData, 1) + local type = self:ReadEntryData(entryData, 2) or "Buff" + local target = unitFactory:CreateUnit(self:ReadEntryData(entryData, 3) or "Player") + local cooldown = (self:ReadEntryData(entryData, 4) == "0") or false + cooldown = not cooldown + local GetAura = UnitBuff + + if type == "Debuff" then GetAura = UnitDebuff end + + o = { + ["entry"] = entry, + ["auraName"] = name, + ["GetAura"] = GetAura, + ["target"] = target, + ["hasCooldown"] = cooldown, + } + setmetatable(o, self) + self.__index = self + return o + end, + + ReadEntryData = function(self, entryData, index) + local str = entryData[index] + if str == nil then return nil end + str = self:TrimWhitespace(str) + return str + end, + + TrimWhitespace = function(self, str) + str = str:gsub("^[ ]+", "") + str = str:gsub("\n$", "") + str = str:gsub("[ ]+$", "") + return str + end, +} + +aura_env.auras = {} +for entry in string.gmatch(aura_env.config.spellList, "([a-zA-Z,0-9 ]+)") do + entry = Entry:New(entry) + + auraObj = Aura:New(entry, #aura_env.auras + 1) + aura_env.auras[#aura_env.auras + 1] = auraObj +end + +aura_env.HandleEvent = function(allstates) + for k, v in ipairs(aura_env.auras) do + if v:IsActive() then + v:AddAsAura(allstates) + elseif v:IsOnCooldown() and not v:IsActive() then + v:AddAsCooldown(allstates) + elseif not v:IsOnCooldown() and not v:IsActive() then + v:AddAsIcon(allstates) + end + end +end diff --git a/NewAge/CataAuraBar/INIT_BFA.lua b/WeakAuras/Projects/CataAuraBar/INIT_BFA.lua similarity index 96% rename from NewAge/CataAuraBar/INIT_BFA.lua rename to WeakAuras/Projects/CataAuraBar/INIT_BFA.lua index 787dfcc..fa5b527 100644 --- a/NewAge/CataAuraBar/INIT_BFA.lua +++ b/WeakAuras/Projects/CataAuraBar/INIT_BFA.lua @@ -1,304 +1,304 @@ -local function StrSplit(inputString, separator) - local outputTable = {} - for str in string.gmatch(inputString, "([^" .. separator .. "]+)") do - outputTable[#outputTable + 1] = str - end - return outputTable -end - -local function PrintTable(table) - for k, v in pairs(table) do - print(k .. " " .. v) - end -end - -local function GetAuraIndex(func, unit, name) - for i = 1, 40 do - local aura = func(unit, i) - if aura == "name" then return i end - if aura == nil then return 0 end - end - return 0 -end - -aura_env.GetClassColor = function(class) - if class == "Death Knight" then - return "\124cFFC41E3A" - elseif class == "Druid" then - return "\124cFFFF7C0A" - elseif class == "Hunter" then - return "\124cFFAAD372" - elseif class == "Mage" then - return "\124cFF3FC7EB" - elseif class == "Paladin" then - return "\124cFFF48CBA" - elseif class == "Priest" then - return "\124cFFFFFFFF" - elseif class == "Rogue" then - return "\124cFFFFF468" - elseif class == "Shaman" then - return "\124cFF0070DD" - elseif class == "Warlock" then - return "\124cFF8788EE" - elseif class == "Warrior" then - return "\124cFFC69B6D" - end -end - -local Unit = { - New = function(self, unit) - o = { - ["unit"] = unit, - } - setmetatable(o, self) - self.__index = self - return o - end, - - GetAuras = function(self, auraFunc, name, type) return nil end, -} -local BasicUnit = Unit:New("player") -function BasicUnit:GetAuras(auraFunc, name) - local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc(self.unit, name) - if aura ~= nil then - return { - [UnitName(self.unit)] = { - ["duration"] = duration, - ["expirationTime"] = expirationTime, - ["spellID"] = spellID, - ["stacks"] = stacks or 1, - }, - } - else - return {} - end -end --- Maybe implement some sort of throttle to group unit? -local GroupUnit = Unit:New("group") -function GroupUnit:GetAuras(auraFunc, name) - local num = GetNumGroupMembers() - local unitPrefix = "party" - if IsInRaid() then unitPrefix = "raid" end - auras = {} - for i = 1, num do - -- local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc(unitPrefix .. i, name) - local auraIndex = GetAuraIndex(auraFunc, unitPrefix .. i, name) - if auraIndex > 0 then - local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = - auraFunc(unitPrefix .. i, auraIndex) - auras[UnitName(unitPrefix .. i)] = { - ["duration"] = duration, - ["expirationTime"] = expirationTime, - ["spellID"] = spellID, - ["class"] = UnitClass(unitPrefix .. i) or "Paladin", - ["stacks"] = stacks or 1, - } - end - end - if unitPrefix == "party" then - -- local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc("player", name) - local auraIndex = GetAuraIndex(auraFunc, "player", name) - if auraIndex > 0 then - local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc("player", auraIndex) - auras[UnitName("player")] = { - ["duration"] = duration, - ["expirationTime"] = expirationTime, - ["spellID"] = spellID, - ["class"] = UnitClass(unitPrefix .. i) or "Paladin", - ["stacks"] = stacks or 1, - } - end - end - return auras -end --- Nameplate does not work, find out why? -local NameplateUnit = Unit:New("nameplate") -function NameplateUnit:GetAuras(auraFunc, name) - local unitPrefix = "nameplate" - auras = {} - for i = 1, 40 do - -- local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc(unitPrefix .. i, name) - local auraIndex = GetAuraIndex(auraFunc, unitPrefix .. i, name) - if auraIndex > 0 then - local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc("player", auraIndex) - auras[UnitName(unitPrefix .. i)] = { - ["duration"] = duration, - ["expirationTime"] = expirationTime, - ["spellID"] = spellID, - ["stacks"] = stacks or 1, - } - end - end - return auras -end - -local UnitFactory = { - New = function(self) - o = {} - setmetatable(o, self) - self.__index = self - return o - end, - - CreateUnit = function(self, target) - target = string.lower(target) - if target == "player" or target == "target" or target == "focus" then - return BasicUnit:New(target) - elseif target == "group" then - return GroupUnit:New(target) - elseif target == "nameplate" then - return NameplateUnit:New(target) - end - end, -} -local unitFactory = UnitFactory:New() - -local Aura = { - New = function(self, entry, index) - o = { - ["name"] = entry.auraName, - ["unit"] = entry.target, - ["hasCooldown"] = entry.hasCooldown, - ["index"] = index, - ["GetAura"] = entry.GetAura, - } - setmetatable(o, self) - self.__index = self - return o - end, - - IsActive = function(self) - for k, v in pairs(self.unit:GetAuras(self.GetAura, self.name)) do - return true - end - return false - end, - IsOnCooldown = function(self) - if not self.hasCooldown then return false end - return GetSpellCooldown(self.name) > 0 - end, - - AddAsAura = function(self, allstates) - local auras = self.unit:GetAuras(self.GetAura, self.name) - for k, v in pairs(auras) do - duration = v.duration - expirationTime = v.expirationTime - icon = self:GetAuraIcon(v.spellID) - allstates[self.name .. k] = { - changed = true, - show = true, - resort = true, - progressType = "timed", - duration = duration, - expirationTime = expirationTime, - index = self.index, - icon = icon, - pname = k, - stacks = v.stacks, - pclass = v.class, - IsOnCooldown = true, - IsActive = true, - IsBad = self.GetAura == UnitDebuff, - } - end - end, - AddAsCooldown = function(self, allstates) - if not self.hasCooldown then return false end - startTime, duration = GetSpellCooldown(self.name) - icon = self:GetSpellIcon() - allstates[self.name] = { - changed = true, - show = true, - resort = true, - progressType = "timed", - duration = duration, - expirationTime = startTime + duration, - index = self.index, - icon = icon, - IsOnCooldown = true, - IsActive = false, - IsBad = self.GetAura == UnitDebuff, - } - end, - AddAsIcon = function(self, allstates) - if not self.hasCooldown then return false end - icon = self:GetSpellIcon() - allstates[self.name] = { - changed = true, - show = true, - resort = true, - progressType = "static", - value = 1, - total = 1, - index = self.index, - icon = icon, - IsOnCooldown = false, - IsActive = false, - IsBad = self.GetAura == UnitDebuff, - } - end, - - GetSpellIcon = function(self) return select(3, GetSpellInfo(self.name)) end, - GetAuraIcon = function(self, spellID) return select(3, GetSpellInfo(spellID)) end, -} - -local Entry = { - New = function(self, entry) - entry = self:TrimWhitespace(entry) - - local entryData = StrSplit(entry, ",") - local name = self:ReadEntryData(entryData, 1) - local type = self:ReadEntryData(entryData, 2) or "Buff" - local target = unitFactory:CreateUnit(self:ReadEntryData(entryData, 3) or "Player") - local cooldown = (self:ReadEntryData(entryData, 4) == "0") or false - cooldown = not cooldown - local GetAura = UnitBuff - - if type == "Debuff" then GetAura = UnitDebuff end - - o = { - ["entry"] = entry, - ["auraName"] = name, - ["GetAura"] = GetAura, - ["target"] = target, - ["hasCooldown"] = cooldown, - } - setmetatable(o, self) - self.__index = self - return o - end, - - ReadEntryData = function(self, entryData, index) - local str = entryData[index] - if str == nil then return nil end - str = self:TrimWhitespace(str) - return str - end, - - TrimWhitespace = function(self, str) - str = str:gsub("^[ ]+", "") - str = str:gsub("\n$", "") - str = str:gsub("[ ]+$", "") - return str - end, -} - -aura_env.auras = {} -for entry in string.gmatch(aura_env.config.spellList, "([a-zA-Z,0-9 ]+)") do - entry = Entry:New(entry) - - auraObj = Aura:New(entry, #aura_env.auras + 1) - aura_env.auras[#aura_env.auras + 1] = auraObj -end - -aura_env.HandleEvent = function(allstates) - for k, v in ipairs(aura_env.auras) do - if v:IsActive() then - v:AddAsAura(allstates) - elseif v:IsOnCooldown() and not v:IsActive() then - v:AddAsCooldown(allstates) - elseif not v:IsOnCooldown() and not v:IsActive() then - v:AddAsIcon(allstates) - end - end -end +local function StrSplit(inputString, separator) + local outputTable = {} + for str in string.gmatch(inputString, "([^" .. separator .. "]+)") do + outputTable[#outputTable + 1] = str + end + return outputTable +end + +local function PrintTable(table) + for k, v in pairs(table) do + print(k .. " " .. v) + end +end + +local function GetAuraIndex(func, unit, name) + for i = 1, 40 do + local aura = func(unit, i) + if aura == "name" then return i end + if aura == nil then return 0 end + end + return 0 +end + +aura_env.GetClassColor = function(class) + if class == "Death Knight" then + return "\124cFFC41E3A" + elseif class == "Druid" then + return "\124cFFFF7C0A" + elseif class == "Hunter" then + return "\124cFFAAD372" + elseif class == "Mage" then + return "\124cFF3FC7EB" + elseif class == "Paladin" then + return "\124cFFF48CBA" + elseif class == "Priest" then + return "\124cFFFFFFFF" + elseif class == "Rogue" then + return "\124cFFFFF468" + elseif class == "Shaman" then + return "\124cFF0070DD" + elseif class == "Warlock" then + return "\124cFF8788EE" + elseif class == "Warrior" then + return "\124cFFC69B6D" + end +end + +local Unit = { + New = function(self, unit) + o = { + ["unit"] = unit, + } + setmetatable(o, self) + self.__index = self + return o + end, + + GetAuras = function(self, auraFunc, name, type) return nil end, +} +local BasicUnit = Unit:New("player") +function BasicUnit:GetAuras(auraFunc, name) + local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc(self.unit, name) + if aura ~= nil then + return { + [UnitName(self.unit)] = { + ["duration"] = duration, + ["expirationTime"] = expirationTime, + ["spellID"] = spellID, + ["stacks"] = stacks or 1, + }, + } + else + return {} + end +end +-- Maybe implement some sort of throttle to group unit? +local GroupUnit = Unit:New("group") +function GroupUnit:GetAuras(auraFunc, name) + local num = GetNumGroupMembers() + local unitPrefix = "party" + if IsInRaid() then unitPrefix = "raid" end + auras = {} + for i = 1, num do + -- local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc(unitPrefix .. i, name) + local auraIndex = GetAuraIndex(auraFunc, unitPrefix .. i, name) + if auraIndex > 0 then + local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = + auraFunc(unitPrefix .. i, auraIndex) + auras[UnitName(unitPrefix .. i)] = { + ["duration"] = duration, + ["expirationTime"] = expirationTime, + ["spellID"] = spellID, + ["class"] = UnitClass(unitPrefix .. i) or "Paladin", + ["stacks"] = stacks or 1, + } + end + end + if unitPrefix == "party" then + -- local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc("player", name) + local auraIndex = GetAuraIndex(auraFunc, "player", name) + if auraIndex > 0 then + local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc("player", auraIndex) + auras[UnitName("player")] = { + ["duration"] = duration, + ["expirationTime"] = expirationTime, + ["spellID"] = spellID, + ["class"] = UnitClass(unitPrefix .. i) or "Paladin", + ["stacks"] = stacks or 1, + } + end + end + return auras +end +-- Nameplate does not work, find out why? +local NameplateUnit = Unit:New("nameplate") +function NameplateUnit:GetAuras(auraFunc, name) + local unitPrefix = "nameplate" + auras = {} + for i = 1, 40 do + -- local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc(unitPrefix .. i, name) + local auraIndex = GetAuraIndex(auraFunc, unitPrefix .. i, name) + if auraIndex > 0 then + local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc("player", auraIndex) + auras[UnitName(unitPrefix .. i)] = { + ["duration"] = duration, + ["expirationTime"] = expirationTime, + ["spellID"] = spellID, + ["stacks"] = stacks or 1, + } + end + end + return auras +end + +local UnitFactory = { + New = function(self) + o = {} + setmetatable(o, self) + self.__index = self + return o + end, + + CreateUnit = function(self, target) + target = string.lower(target) + if target == "player" or target == "target" or target == "focus" then + return BasicUnit:New(target) + elseif target == "group" then + return GroupUnit:New(target) + elseif target == "nameplate" then + return NameplateUnit:New(target) + end + end, +} +local unitFactory = UnitFactory:New() + +local Aura = { + New = function(self, entry, index) + o = { + ["name"] = entry.auraName, + ["unit"] = entry.target, + ["hasCooldown"] = entry.hasCooldown, + ["index"] = index, + ["GetAura"] = entry.GetAura, + } + setmetatable(o, self) + self.__index = self + return o + end, + + IsActive = function(self) + for k, v in pairs(self.unit:GetAuras(self.GetAura, self.name)) do + return true + end + return false + end, + IsOnCooldown = function(self) + if not self.hasCooldown then return false end + return GetSpellCooldown(self.name) > 0 + end, + + AddAsAura = function(self, allstates) + local auras = self.unit:GetAuras(self.GetAura, self.name) + for k, v in pairs(auras) do + duration = v.duration + expirationTime = v.expirationTime + icon = self:GetAuraIcon(v.spellID) + allstates[self.name .. k] = { + changed = true, + show = true, + resort = true, + progressType = "timed", + duration = duration, + expirationTime = expirationTime, + index = self.index, + icon = icon, + pname = k, + stacks = v.stacks, + pclass = v.class, + IsOnCooldown = true, + IsActive = true, + IsBad = self.GetAura == UnitDebuff, + } + end + end, + AddAsCooldown = function(self, allstates) + if not self.hasCooldown then return false end + startTime, duration = GetSpellCooldown(self.name) + icon = self:GetSpellIcon() + allstates[self.name] = { + changed = true, + show = true, + resort = true, + progressType = "timed", + duration = duration, + expirationTime = startTime + duration, + index = self.index, + icon = icon, + IsOnCooldown = true, + IsActive = false, + IsBad = self.GetAura == UnitDebuff, + } + end, + AddAsIcon = function(self, allstates) + if not self.hasCooldown then return false end + icon = self:GetSpellIcon() + allstates[self.name] = { + changed = true, + show = true, + resort = true, + progressType = "static", + value = 1, + total = 1, + index = self.index, + icon = icon, + IsOnCooldown = false, + IsActive = false, + IsBad = self.GetAura == UnitDebuff, + } + end, + + GetSpellIcon = function(self) return select(3, GetSpellInfo(self.name)) end, + GetAuraIcon = function(self, spellID) return select(3, GetSpellInfo(spellID)) end, +} + +local Entry = { + New = function(self, entry) + entry = self:TrimWhitespace(entry) + + local entryData = StrSplit(entry, ",") + local name = self:ReadEntryData(entryData, 1) + local type = self:ReadEntryData(entryData, 2) or "Buff" + local target = unitFactory:CreateUnit(self:ReadEntryData(entryData, 3) or "Player") + local cooldown = (self:ReadEntryData(entryData, 4) == "0") or false + cooldown = not cooldown + local GetAura = UnitBuff + + if type == "Debuff" then GetAura = UnitDebuff end + + o = { + ["entry"] = entry, + ["auraName"] = name, + ["GetAura"] = GetAura, + ["target"] = target, + ["hasCooldown"] = cooldown, + } + setmetatable(o, self) + self.__index = self + return o + end, + + ReadEntryData = function(self, entryData, index) + local str = entryData[index] + if str == nil then return nil end + str = self:TrimWhitespace(str) + return str + end, + + TrimWhitespace = function(self, str) + str = str:gsub("^[ ]+", "") + str = str:gsub("\n$", "") + str = str:gsub("[ ]+$", "") + return str + end, +} + +aura_env.auras = {} +for entry in string.gmatch(aura_env.config.spellList, "([a-zA-Z,0-9 ]+)") do + entry = Entry:New(entry) + + auraObj = Aura:New(entry, #aura_env.auras + 1) + aura_env.auras[#aura_env.auras + 1] = auraObj +end + +aura_env.HandleEvent = function(allstates) + for k, v in ipairs(aura_env.auras) do + if v:IsActive() then + v:AddAsAura(allstates) + elseif v:IsOnCooldown() and not v:IsActive() then + v:AddAsCooldown(allstates) + elseif not v:IsOnCooldown() and not v:IsActive() then + v:AddAsIcon(allstates) + end + end +end diff --git a/NewAge/CataAuraBar/README.md b/WeakAuras/Projects/CataAuraBar/README.md similarity index 96% rename from NewAge/CataAuraBar/README.md rename to WeakAuras/Projects/CataAuraBar/README.md index 4d6179b..528ead0 100644 --- a/NewAge/CataAuraBar/README.md +++ b/WeakAuras/Projects/CataAuraBar/README.md @@ -1,11 +1,11 @@ -## While aura is active show aura - -## While aura is inactive and off cooldown show icon - -## While aura is inactive and on cooldown show cooldown - -## Use tsu - -### ACTIONBAR_UPDATE_COOLDOWN when anything on bar goes on cooldown - +## While aura is active show aura + +## While aura is inactive and off cooldown show icon + +## While aura is inactive and on cooldown show cooldown + +## Use tsu + +### ACTIONBAR_UPDATE_COOLDOWN when anything on bar goes on cooldown + ### UNIT_AURA with one argument which is unit when aura fades/gets applied \ No newline at end of file diff --git a/NewAge/CataAuraBar/TSU.lua b/WeakAuras/Projects/CataAuraBar/TSU.lua similarity index 95% rename from NewAge/CataAuraBar/TSU.lua rename to WeakAuras/Projects/CataAuraBar/TSU.lua index 932438c..704ff7c 100644 --- a/NewAge/CataAuraBar/TSU.lua +++ b/WeakAuras/Projects/CataAuraBar/TSU.lua @@ -1,12 +1,12 @@ -function(allstates, e, ...) - for _,v in pairs(allstates) do - v.show = false - v.changed = true - end - - aura_env.HandleEvent(allstates) - return true -end - --- /run WeakAuras.ScanEvents("SPELL_UPDATE_COOLDOWN") +function(allstates, e, ...) + for _,v in pairs(allstates) do + v.show = false + v.changed = true + end + + aura_env.HandleEvent(allstates) + return true +end + +-- /run WeakAuras.ScanEvents("SPELL_UPDATE_COOLDOWN") -- /dump UnitAura("player", "Blessing of Might") \ No newline at end of file diff --git a/Complete Projects/Legion/Celestial Map.lua b/WeakAuras/Projects/Celestial Map.lua similarity index 97% rename from Complete Projects/Legion/Celestial Map.lua rename to WeakAuras/Projects/Celestial Map.lua index 85d246b..ba52974 100644 --- a/Complete Projects/Legion/Celestial Map.lua +++ b/WeakAuras/Projects/Celestial Map.lua @@ -1,33 +1,33 @@ ---DISPLAY -function() - time = GetTime() - starttime - local mastery_ppm = celestial_map_mastery / (time / 60) - local haste_ppm = celestial_map_haste / (time / 60) - local crit_ppm = celestial_map_crit / (time / 60) - local map_ppm = celestial_map_procs / (time / 60) - - local mastery_ppm = math.floor(mastery_ppm * 100) / 100 - local haste_ppm = math.floor(haste_ppm * 100) / 100 - local crit_ppm = math.floor(crit_ppm * 100) / 100 - local map_ppm = math.floor(map_ppm * 100) / 100 - return celestial_map_mastery .. " " .. mastery_ppm .. " mastery" .. "\n" .. celestial_map_haste .. " " .. haste_ppm .. " haste" .. "\n" .. celestial_map_crit .. " " .. crit_ppm .. " crit" .. "\n" .. celestial_map_procs .. " " .. map_ppm .. " total" -end - ---COMBAT_LOG_EVENT_UNFILTERED -function(_, _, subEvent, _, _, sourceName, _, _, _, _, _, _, ...) - if subEvent == "SPELL_AURA_APPLIED" and sourceName == UnitName("player") then - local spellId = select(1, ...) - if spellId == 225752 then - celestial_map_mastery = celestial_map_mastery + 1 - end - if spellId == 225753 then - celestial_map_haste = celestial_map_haste + 1 - end - if spellId == 225749 then - celestial_map_crit = celestial_map_crit + 1 - end - if spellId == 225752 or spellId == 225753 or spellId == 225749 then - celestial_map_procs = celestial_map_procs + 1 - end - end -end +--DISPLAY +function() + time = GetTime() - starttime + local mastery_ppm = celestial_map_mastery / (time / 60) + local haste_ppm = celestial_map_haste / (time / 60) + local crit_ppm = celestial_map_crit / (time / 60) + local map_ppm = celestial_map_procs / (time / 60) + + local mastery_ppm = math.floor(mastery_ppm * 100) / 100 + local haste_ppm = math.floor(haste_ppm * 100) / 100 + local crit_ppm = math.floor(crit_ppm * 100) / 100 + local map_ppm = math.floor(map_ppm * 100) / 100 + return celestial_map_mastery .. " " .. mastery_ppm .. " mastery" .. "\n" .. celestial_map_haste .. " " .. haste_ppm .. " haste" .. "\n" .. celestial_map_crit .. " " .. crit_ppm .. " crit" .. "\n" .. celestial_map_procs .. " " .. map_ppm .. " total" +end + +--COMBAT_LOG_EVENT_UNFILTERED +function(_, _, subEvent, _, _, sourceName, _, _, _, _, _, _, ...) + if subEvent == "SPELL_AURA_APPLIED" and sourceName == UnitName("player") then + local spellId = select(1, ...) + if spellId == 225752 then + celestial_map_mastery = celestial_map_mastery + 1 + end + if spellId == 225753 then + celestial_map_haste = celestial_map_haste + 1 + end + if spellId == 225749 then + celestial_map_crit = celestial_map_crit + 1 + end + if spellId == 225752 or spellId == 225753 or spellId == 225749 then + celestial_map_procs = celestial_map_procs + 1 + end + end +end diff --git a/FreshShit/ChannelDinger/event.lua b/WeakAuras/Projects/ChannelDinger/event.lua similarity index 96% rename from FreshShit/ChannelDinger/event.lua rename to WeakAuras/Projects/ChannelDinger/event.lua index 1ac49c9..f111568 100644 --- a/FreshShit/ChannelDinger/event.lua +++ b/WeakAuras/Projects/ChannelDinger/event.lua @@ -1,21 +1,21 @@ --- COMBAT_LOG_EVENT_UNFILTERED -function(e, ...) - local se, err = CLEUParser.GetSubevent(...) - if err ~= nil then return end - local caster, err = CLEUParser.GetSourceGUID(...) - if err ~= nil then return end - local id, err = CLEUParser.GetSpellId(...) - if err ~= nil then return end - - if caster == aura_env.player and id == 198590 then - if se == "SPELL_CAST_SUCCESS" then - aura_env.statee:set(1) - end - if se == "SPELL_DAMAGE" then - aura_env.tick:set(aura_env.tick + 1) - end - if se == "SPELL_AURA_REMOVED" then - aura_env.statee:set(0) - end - end +-- COMBAT_LOG_EVENT_UNFILTERED +function(e, ...) + local se, err = CLEUParser.GetSubevent(...) + if err ~= nil then return end + local caster, err = CLEUParser.GetSourceGUID(...) + if err ~= nil then return end + local id, err = CLEUParser.GetSpellId(...) + if err ~= nil then return end + + if caster == aura_env.player and id == 198590 then + if se == "SPELL_CAST_SUCCESS" then + aura_env.statee:set(1) + end + if se == "SPELL_DAMAGE" then + aura_env.tick:set(aura_env.tick + 1) + end + if se == "SPELL_AURA_REMOVED" then + aura_env.statee:set(0) + end + end end \ No newline at end of file diff --git a/FreshShit/ChannelDinger/export b/WeakAuras/Projects/ChannelDinger/export similarity index 100% rename from FreshShit/ChannelDinger/export rename to WeakAuras/Projects/ChannelDinger/export diff --git a/FreshShit/ChannelDinger/init.lua b/WeakAuras/Projects/ChannelDinger/init.lua similarity index 97% rename from FreshShit/ChannelDinger/init.lua rename to WeakAuras/Projects/ChannelDinger/init.lua index a279740..89c7384 100644 --- a/FreshShit/ChannelDinger/init.lua +++ b/WeakAuras/Projects/ChannelDinger/init.lua @@ -1,28 +1,28 @@ -aura_env.timer = 0 -aura_env.totalTicks = 6 -aura_env.player = UnitGUID("player") -aura_env.tick = ReactiveValue.new(0) -aura_env.statee = ReactiveValue.new(0) --- Say... --- 0 - none --- 1 - channeling - -aura_env.statee:onChange(function(newstate) - -- print("newstate ".. newstate) - if newstate == 1 then - -- print("resetting ticks") - aura_env.tick:set(0) - end -end) -aura_env.tick:onChange(function(ticks) - -- print("ticks " .. ticks) - if ticks > 0 then - if ticks == aura_env.totalTicks - 1 then - -- WeakAuras.ScanEvents("PLAY_SOUND", "Interface\\AddOns\\WeakAuras\\Media\\Sounds\\RobotBlip.ogg") - PlaySoundFile("Interface\\AddOns\\WeakAuras\\Media\\Sounds\\RobotBlip.ogg", "Master") - -- elseif ticks == aura_env.totalTicks - 2 then - -- -- WeakAuras.ScanEvents("PLAY_SOUND", "Interface\\AddOns\\WeakAuras\\Media\\Sounds\\WaterDrop.ogg") - -- PlaySoundFile("Interface\\AddOns\\WeakAuras\\Media\\Sounds\\WaterDrop.ogg", "Master") - end - end -end) +aura_env.timer = 0 +aura_env.totalTicks = 6 +aura_env.player = UnitGUID("player") +aura_env.tick = ReactiveValue.new(0) +aura_env.statee = ReactiveValue.new(0) +-- Say... +-- 0 - none +-- 1 - channeling + +aura_env.statee:onChange(function(newstate) + -- print("newstate ".. newstate) + if newstate == 1 then + -- print("resetting ticks") + aura_env.tick:set(0) + end +end) +aura_env.tick:onChange(function(ticks) + -- print("ticks " .. ticks) + if ticks > 0 then + if ticks == aura_env.totalTicks - 1 then + -- WeakAuras.ScanEvents("PLAY_SOUND", "Interface\\AddOns\\WeakAuras\\Media\\Sounds\\RobotBlip.ogg") + PlaySoundFile("Interface\\AddOns\\WeakAuras\\Media\\Sounds\\RobotBlip.ogg", "Master") + -- elseif ticks == aura_env.totalTicks - 2 then + -- -- WeakAuras.ScanEvents("PLAY_SOUND", "Interface\\AddOns\\WeakAuras\\Media\\Sounds\\WaterDrop.ogg") + -- PlaySoundFile("Interface\\AddOns\\WeakAuras\\Media\\Sounds\\WaterDrop.ogg", "Master") + end + end +end) diff --git a/FreshShit/ChannelJoiner/event.lua b/WeakAuras/Projects/ChannelJoiner/event.lua similarity index 96% rename from FreshShit/ChannelJoiner/event.lua rename to WeakAuras/Projects/ChannelJoiner/event.lua index 41542f5..7629b16 100644 --- a/FreshShit/ChannelJoiner/event.lua +++ b/WeakAuras/Projects/ChannelJoiner/event.lua @@ -1,5 +1,5 @@ --- PLAYER_ENTERING_WORLD -function() - aura_env.JoinChannels() - aura_env.ConfigureChatWindow() +-- PLAYER_ENTERING_WORLD +function() + aura_env.JoinChannels() + aura_env.ConfigureChatWindow() end \ No newline at end of file diff --git a/FreshShit/ChannelJoiner/export b/WeakAuras/Projects/ChannelJoiner/export similarity index 100% rename from FreshShit/ChannelJoiner/export rename to WeakAuras/Projects/ChannelJoiner/export diff --git a/FreshShit/ChannelJoiner/init.lua b/WeakAuras/Projects/ChannelJoiner/init.lua similarity index 96% rename from FreshShit/ChannelJoiner/init.lua rename to WeakAuras/Projects/ChannelJoiner/init.lua index 00967ba..ce12f1c 100644 --- a/FreshShit/ChannelJoiner/init.lua +++ b/WeakAuras/Projects/ChannelJoiner/init.lua @@ -1,121 +1,121 @@ ----@type string[] -local channelNames = {} ----@type string[] -local channelPasswords = {} ----@type string|nil -local err ----@type string -local chatFrameName = aura_env.config.chatFrameName or "Auto" ----@type string[] -local subscribedMessageGroups = {} ----@type string[] -local subscribedChannels = {} - ----@param input string ----@param deliminer string ----@return string[], string|nil -local function StrSplit(input, deliminer) - if not deliminer then return {}, "deliminer is nil" end - if not input then return {}, "input is nil" end - local parts = {} - for part in string.gmatch(input, "([^" .. deliminer .. "]+)") do - table.insert(parts, strtrim(part)) - end - return parts, nil -end - -channelNames, err = StrSplit(aura_env.config.channels, ",") -if err then - print(string.format("Error splitting channels: %s", err)) - return -end - -channelPasswords, err = StrSplit(aura_env.config.channelPasswords, ",") -if err then - print(string.format("Error splitting channel passwords: %s", err)) - return -end - -subscribedMessageGroups, err = StrSplit(aura_env.config.subscribedMessageGroups, ",") -if err then - print(string.format("Error splitting subscribed message groups: %s", err)) - return -end - -subscribedChannels, err = StrSplit(aura_env.config.subscribedChannels, ",") -if err then - print(string.format("Error splitting subscribed channels: %s", err)) - return -end - -aura_env.JoinChannels = function() - for i, channelName in ipairs(channelNames) do - channelName = strtrim(channelName) - local password = nil - if i <= #channelPasswords then password = strtrim(channelPasswords[i]) end - JoinPermanentChannel(channelName, password) - end -end - -aura_env.FindOrCreateChatWindow = function() - for i = 1, NUM_CHAT_WINDOWS do - local name = GetChatWindowInfo(i) - if name == chatFrameName then - print(string.format("Found chat window %s", name)) - local frame = _G["ChatFrame" .. i] - if FCF_IsValidChatFrame(frame) then - print(string.format("Frame %s is valid", name)) - return frame - else - print(string.format("Frame %s is invalid", name)) - end - end - end - - print("Opening new chat window") - FCF_OpenNewWindow(chatFrameName) - for i = 1, NUM_CHAT_WINDOWS do - local name = GetChatWindowInfo(i) - if name == chatFrameName then - print(string.format("Found chat window %s", name)) - local frame = _G["ChatFrame" .. i] - if FCF_IsValidChatFrame(frame) then - print(string.format("Frame %s is valid", name)) - return frame - else - print(string.format("Frame %s is invalid", name)) - end - end - end - - return nil -end - -aura_env.ConfigureChatWindow = function() - local general = _G["ChatFrame1"] - local chatFrame = aura_env.FindOrCreateChatWindow() - if not chatFrame then - print(string.format("Chat window %s not found", chatFrameName)) - return - end - - --SetChatWindowName(chatFrame, chatFrameName) - print("Removing all message groups") - ChatFrame_RemoveAllMessageGroups(chatFrame) - print("Removing all channels") - ChatFrame_RemoveAllChannels(chatFrame) - print("Adding message groups") - for _, messageGroup in ipairs(subscribedMessageGroups) do - print(string.format("Adding message group: %s", messageGroup)) - ChatFrame_AddMessageGroup(chatFrame, strtrim(messageGroup)) - ChatFrame_RemoveMessageGroup(general, strtrim(messageGroup)) - end - print("Adding channels") - for _, channel in ipairs(subscribedChannels) do - print(string.format("Adding channel: %s", channel)) - ChatFrame_AddChannel(chatFrame, strtrim(channel)) - ChatFrame_RemoveChannel(general, strtrim(channel)) - end -end - -aura_env.ConfigureChatWindow() +---@type string[] +local channelNames = {} +---@type string[] +local channelPasswords = {} +---@type string|nil +local err +---@type string +local chatFrameName = aura_env.config.chatFrameName or "Auto" +---@type string[] +local subscribedMessageGroups = {} +---@type string[] +local subscribedChannels = {} + +---@param input string +---@param deliminer string +---@return string[], string|nil +local function StrSplit(input, deliminer) + if not deliminer then return {}, "deliminer is nil" end + if not input then return {}, "input is nil" end + local parts = {} + for part in string.gmatch(input, "([^" .. deliminer .. "]+)") do + table.insert(parts, strtrim(part)) + end + return parts, nil +end + +channelNames, err = StrSplit(aura_env.config.channels, ",") +if err then + print(string.format("Error splitting channels: %s", err)) + return +end + +channelPasswords, err = StrSplit(aura_env.config.channelPasswords, ",") +if err then + print(string.format("Error splitting channel passwords: %s", err)) + return +end + +subscribedMessageGroups, err = StrSplit(aura_env.config.subscribedMessageGroups, ",") +if err then + print(string.format("Error splitting subscribed message groups: %s", err)) + return +end + +subscribedChannels, err = StrSplit(aura_env.config.subscribedChannels, ",") +if err then + print(string.format("Error splitting subscribed channels: %s", err)) + return +end + +aura_env.JoinChannels = function() + for i, channelName in ipairs(channelNames) do + channelName = strtrim(channelName) + local password = nil + if i <= #channelPasswords then password = strtrim(channelPasswords[i]) end + JoinPermanentChannel(channelName, password) + end +end + +aura_env.FindOrCreateChatWindow = function() + for i = 1, NUM_CHAT_WINDOWS do + local name = GetChatWindowInfo(i) + if name == chatFrameName then + print(string.format("Found chat window %s", name)) + local frame = _G["ChatFrame" .. i] + if FCF_IsValidChatFrame(frame) then + print(string.format("Frame %s is valid", name)) + return frame + else + print(string.format("Frame %s is invalid", name)) + end + end + end + + print("Opening new chat window") + FCF_OpenNewWindow(chatFrameName) + for i = 1, NUM_CHAT_WINDOWS do + local name = GetChatWindowInfo(i) + if name == chatFrameName then + print(string.format("Found chat window %s", name)) + local frame = _G["ChatFrame" .. i] + if FCF_IsValidChatFrame(frame) then + print(string.format("Frame %s is valid", name)) + return frame + else + print(string.format("Frame %s is invalid", name)) + end + end + end + + return nil +end + +aura_env.ConfigureChatWindow = function() + local general = _G["ChatFrame1"] + local chatFrame = aura_env.FindOrCreateChatWindow() + if not chatFrame then + print(string.format("Chat window %s not found", chatFrameName)) + return + end + + --SetChatWindowName(chatFrame, chatFrameName) + print("Removing all message groups") + ChatFrame_RemoveAllMessageGroups(chatFrame) + print("Removing all channels") + ChatFrame_RemoveAllChannels(chatFrame) + print("Adding message groups") + for _, messageGroup in ipairs(subscribedMessageGroups) do + print(string.format("Adding message group: %s", messageGroup)) + ChatFrame_AddMessageGroup(chatFrame, strtrim(messageGroup)) + ChatFrame_RemoveMessageGroup(general, strtrim(messageGroup)) + end + print("Adding channels") + for _, channel in ipairs(subscribedChannels) do + print(string.format("Adding channel: %s", channel)) + ChatFrame_AddChannel(chatFrame, strtrim(channel)) + ChatFrame_RemoveChannel(general, strtrim(channel)) + end +end + +aura_env.ConfigureChatWindow() diff --git a/Complete Projects/Legion/Chat !.lua b/WeakAuras/Projects/Chat !.lua similarity index 97% rename from Complete Projects/Legion/Chat !.lua rename to WeakAuras/Projects/Chat !.lua index 80050dc..6c2ca8b 100644 --- a/Complete Projects/Legion/Chat !.lua +++ b/WeakAuras/Projects/Chat !.lua @@ -1,44 +1,44 @@ ---CHAT_MSG_SAY CHAT_MSG_PARTY CHAT_MSG_RAID CHAT_MSG_PARTY_LEADER CHAT_MSG_RAID_LEADER CHAT_MSG_RAID_WARNING -function(...) - aura_env.msgCount = aura_env.msgCount + 1 - n = select(7, GetChatWindowInfo(3)) - if n == true then - aura_env.msgCount = 0 - aura_env.region:Hide() - end - if aura_env.msgCount > 0 and aura_env.msgCount < 10 then - aura_env.text:SetText("\124cffffffff" .. aura_env.msgCount) - if aura_env.region:IsShown() == false then - aura_env.region:Show() - end - PlaySoundFile("Interface\\AddOns\\WeakAuras\\PowerAurasMedia\\Sounds\\huh_1.ogg", "Master") - return "\124cFFFFFFFF" .. aura_env.msgCount - elseif aura_env.msgCount >= 10 then - aura_env.text:SetText("\124cffff8100" .. aura_env.msgCount) - if aura_env.region:IsShown() == false then - aura_env.region:Show() - end - PlaySoundFile("Interface\\AddOns\\WeakAuras\\PowerAurasMedia\\Sounds\\huh_1.ogg", "Master") - return "\124cFFFF0000" .. aura_env.msgCount - end -end - ---GLOBAL_TICKER -function() - n = select(7, GetChatWindowInfo(3)) - if n == true then - if aura_env.region:IsShown() == true then - aura_env.region:Hide() - end - aura_env.msgCount = 0 - end -end - ---INIT -aura_env.msgCount = 0 -aura_env.text = aura_env.region:CreateFontString(nil, "ARTWORK") -aura_env.text:SetPoint("CENTER", aura_env.region, "CENTER") -aura_env.text:SetFont("Interface\\AddOns\\WeakAuras\\Media\\Fonts\\FiraMono-Medium.ttf", 16, "OUTLINE") -aura_env.text:SetText(aura_env.msgCount) -aura_env.text:Show() -aura_env.region:Hide() +--CHAT_MSG_SAY CHAT_MSG_PARTY CHAT_MSG_RAID CHAT_MSG_PARTY_LEADER CHAT_MSG_RAID_LEADER CHAT_MSG_RAID_WARNING +function(...) + aura_env.msgCount = aura_env.msgCount + 1 + n = select(7, GetChatWindowInfo(3)) + if n == true then + aura_env.msgCount = 0 + aura_env.region:Hide() + end + if aura_env.msgCount > 0 and aura_env.msgCount < 10 then + aura_env.text:SetText("\124cffffffff" .. aura_env.msgCount) + if aura_env.region:IsShown() == false then + aura_env.region:Show() + end + PlaySoundFile("Interface\\AddOns\\WeakAuras\\PowerAurasMedia\\Sounds\\huh_1.ogg", "Master") + return "\124cFFFFFFFF" .. aura_env.msgCount + elseif aura_env.msgCount >= 10 then + aura_env.text:SetText("\124cffff8100" .. aura_env.msgCount) + if aura_env.region:IsShown() == false then + aura_env.region:Show() + end + PlaySoundFile("Interface\\AddOns\\WeakAuras\\PowerAurasMedia\\Sounds\\huh_1.ogg", "Master") + return "\124cFFFF0000" .. aura_env.msgCount + end +end + +--GLOBAL_TICKER +function() + n = select(7, GetChatWindowInfo(3)) + if n == true then + if aura_env.region:IsShown() == true then + aura_env.region:Hide() + end + aura_env.msgCount = 0 + end +end + +--INIT +aura_env.msgCount = 0 +aura_env.text = aura_env.region:CreateFontString(nil, "ARTWORK") +aura_env.text:SetPoint("CENTER", aura_env.region, "CENTER") +aura_env.text:SetFont("Interface\\AddOns\\WeakAuras\\Media\\Fonts\\FiraMono-Medium.ttf", 16, "OUTLINE") +aura_env.text:SetText(aura_env.msgCount) +aura_env.text:Show() +aura_env.region:Hide() diff --git a/Complete Projects/Legion/Chat.lua b/WeakAuras/Projects/Chat.lua similarity index 97% rename from Complete Projects/Legion/Chat.lua rename to WeakAuras/Projects/Chat.lua index cd35e29..73bc303 100644 --- a/Complete Projects/Legion/Chat.lua +++ b/WeakAuras/Projects/Chat.lua @@ -1,48 +1,48 @@ ---CHAT_MSG_SAY, CHAT_MSG_PARTY, CHAT_MSG_PARTY_LEADER, CHAT_MSG_RAID, CHAT_MSG_RAID_LEADER, CHAT_MSG_WHISPER, CHAT_MSG_WHISPER_INFORM -function(event,msg,sender) - local isAnna = 0 - local date = date() - local localtime = date:match("%d%d%/%d%d%/%d%d%s(%d%d%p%d%d%p%d%d)") - local sender = sender:match("%a+") - local year = date:match("%d%d%/%d%d/(%d%d)") + 2000 --01/07/(19) 14:36:42 - local month = date:match("(%d%d)") --(01)/07/19 14:36:42 - local day = date:match("%d%d%/(%d%d)") --01/(07)/19 14:36:42 - --Remove first place zeros - if day:find("0") == 1 then - day = day:gsub("0", "") - end - if month:find("0") == 1 then - month = month:gsub("0", "") - end - local localdate = day .. "." .. month .. "." .. year - - if IsInGroup() and GetNumGroupMembers() == 2 and (UnitName("party1") == "Alurielle" or UnitName("party1") == "Eilishie") and event ~= "CHAT_MSG_WHISPER" and event ~= "CHAT_MSG_WHISPER_INFORM" then --If in group/raid with Anna - isAnna = 1 - else - for i = 1, 40 do - if UnitExists("nameplate" .. i) and (UnitName("nameplate" .. i) == "Alurielle" or UnitName("nameplate" .. i) == "Eilishie") then --If not in group but near Anna --TODO: only save playername and Alurielle /s - if sender == "Alurielle" or sender == "Eilishie" or sender == UnitName("player") then - isAnna = 1 - end - end - end - end - - if event == "CHAT_MSG_WHISPER" then --If whisper from Anna - if sender == "Alurielle" or sender == "Eilishie" then - isAnna = 1 - end - end - - if event == "CHAT_MSG_WHISPER_INFORM" then --If whispering Anna - if sender == "Alurielle" or sender == "Eilishie" then --Actually whisper target - local output = "[" .. localdate .. "][" .. localtime .. "]" .. "[" .. UnitName("player") .. "]: " .. msg - AnnaBoo[#AnnaBoo + 1] = output - end - end - - if isAnna == 1 then - local output = "[" .. localdate .. "][" .. localtime .. "]" .. "[" .. sender .. "]: " .. msg - AnnaBoo[#AnnaBoo + 1] = output - end +--CHAT_MSG_SAY, CHAT_MSG_PARTY, CHAT_MSG_PARTY_LEADER, CHAT_MSG_RAID, CHAT_MSG_RAID_LEADER, CHAT_MSG_WHISPER, CHAT_MSG_WHISPER_INFORM +function(event,msg,sender) + local isAnna = 0 + local date = date() + local localtime = date:match("%d%d%/%d%d%/%d%d%s(%d%d%p%d%d%p%d%d)") + local sender = sender:match("%a+") + local year = date:match("%d%d%/%d%d/(%d%d)") + 2000 --01/07/(19) 14:36:42 + local month = date:match("(%d%d)") --(01)/07/19 14:36:42 + local day = date:match("%d%d%/(%d%d)") --01/(07)/19 14:36:42 + --Remove first place zeros + if day:find("0") == 1 then + day = day:gsub("0", "") + end + if month:find("0") == 1 then + month = month:gsub("0", "") + end + local localdate = day .. "." .. month .. "." .. year + + if IsInGroup() and GetNumGroupMembers() == 2 and (UnitName("party1") == "Alurielle" or UnitName("party1") == "Eilishie") and event ~= "CHAT_MSG_WHISPER" and event ~= "CHAT_MSG_WHISPER_INFORM" then --If in group/raid with Anna + isAnna = 1 + else + for i = 1, 40 do + if UnitExists("nameplate" .. i) and (UnitName("nameplate" .. i) == "Alurielle" or UnitName("nameplate" .. i) == "Eilishie") then --If not in group but near Anna --TODO: only save playername and Alurielle /s + if sender == "Alurielle" or sender == "Eilishie" or sender == UnitName("player") then + isAnna = 1 + end + end + end + end + + if event == "CHAT_MSG_WHISPER" then --If whisper from Anna + if sender == "Alurielle" or sender == "Eilishie" then + isAnna = 1 + end + end + + if event == "CHAT_MSG_WHISPER_INFORM" then --If whispering Anna + if sender == "Alurielle" or sender == "Eilishie" then --Actually whisper target + local output = "[" .. localdate .. "][" .. localtime .. "]" .. "[" .. UnitName("player") .. "]: " .. msg + AnnaBoo[#AnnaBoo + 1] = output + end + end + + if isAnna == 1 then + local output = "[" .. localdate .. "][" .. localtime .. "]" .. "[" .. sender .. "]: " .. msg + AnnaBoo[#AnnaBoo + 1] = output + end end \ No newline at end of file diff --git a/Complete Projects/Legion/ChatFilter.lua b/WeakAuras/Projects/ChatFilter.lua similarity index 96% rename from Complete Projects/Legion/ChatFilter.lua rename to WeakAuras/Projects/ChatFilter.lua index afd65a1..871b5fb 100644 --- a/Complete Projects/Legion/ChatFilter.lua +++ b/WeakAuras/Projects/ChatFilter.lua @@ -1,142 +1,142 @@ ---[[ -UI ChatFrame:AddChannel(chatFrame, "channelName") - Activate channel in chatFrame. -UI ChatFrame:AddMessageEventFilter("event", filterFunc) - Add a chat message filtering function (added 2.4) -UI ChatFrame:GetMessageEventFilters("event") - Retreive the list of chat message filtering functions. (added 2.4) -UI ChatFrame:OnHyperlinkShow(reference, link, button) - called when the user clicks on a chatlink. -UI ChatFrame:RemoveMessageEventFilter("event", filterFunc) - Unregister a chat message filtering function (added 2.4) -]] - ---[[ -/run ChatFilter.Words[#ChatFilter.Words + 1] = "roar" -/dump ChatFilter.Words -/dump ChatFilter.RemovedLines - -/fr -/fa -/fu ---]] - -print("POGGIES") - -SLASH_FADD1 = "/fadd" -SLASH_FADD2 = "/fa" -SlashCmdList["FADD"] = add - -SLASH_FREMOVE1 = "/fremove" -SLASH_FREMOVE2 = "/fr" -SlashCmdList["FREMOVE"] = cleanse - -SLASH_FUPDATE1 = "/fupdate" -SLASH_FUPDATE2 = "/fu" -SlashCmdList["FUPDATE"] = function(msg) - cleanse() - add() -end - -local chatEvents = { - "CHAT_MSG_SAY", - "CHAT_MSG_RAID", - "CHAT_MSG_YELL", - "CHAT_MSG_PARTY", - "CHAT_MSG_GUILD", - "CHAT_MSG_WHISPER", - "CHAT_MSG_CHANNEL", -} - -if not ChatFilter then ChatFilter = {} end -if not ChatFilter.People then ChatFilter.People = {} end -if not ChatFilter.Words then ChatFilter.Words = {} end -if not ChatFilter.RemovedLines then ChatFilter.RemovedLines = {} end -if not ChatFilter.RemovedCommon then ChatFilter.RemovedCommon = {} end - ---Own filter -local function myChatFilter(self, e, msg, author, lang) - print(msg, author, lang) - - local function getDate() - local date = date() - local year = date:match("%d%d%/%d%d/(%d%d)") + 2000 --01/07/(19) 14:36:42 - local month = date:match("(%d%d)") --(01)/07/19 14:36:42 - local day = date:match("%d%d%/(%d%d)") --01/(07)/19 14:36:42 - --Remove first place zeros - if day:find("0") == 1 then day = day:gsub("0", "") end - if month:find("0") == 1 then month = month:gsub("0", "") end - local localdate = day .. "." .. month .. "." .. year - return localdate - end - - local function getTime() - local date = date() - local localtime = date:match("%d%d%/%d%d%/%d%d%s(%d%d%p%d%d%p%d%d)") - return localtime - end - - author = author:match("(.+)-") - - --Remove Alliance - if lang == "Common" then - -- print("Caught one!") - ChatFilter.RemovedCommon[#ChatFilter.RemovedCommon + 1] = - format("[%s][%s]%s: %s", getDate(), getTime(), author, msg) - return true - end - - --Remove People - for k, v in pairs(ChatFilter.People) do - if author == v then - if e == "CHAT_MSG_WHISPER" and author ~= UnitName("player") then - SendChatMessage( - format('Your message "%s" has been filtered out because I hate fun', msg), - "WHISPER", - nil, - author - ) - end - ChatFilter.RemovedLines[#ChatFilter.RemovedLines + 1] = - format("[%s][%s]%s: %s", getDate(), getTime(), author, msg) - -- print("Caught one!") - return true - end - end - - --Remove Words - for k, v in pairs(ChatFilter.Words) do - if msg:match(v) then - if e == "CHAT_MSG_WHISPER" and author ~= UnitName("player") then - SendChatMessage( - format('Your message "%s" has been filtered out because I hate fun', msg), - "WHISPER", - nil, - author - ) - end - ChatFilter.RemovedLines[#ChatFilter.RemovedLines + 1] = - format("[%s][%s]%s: %s", getDate(), getTime(), author, msg) - -- print("Caught one!") - return true - end - end -end - ---Remove all filters -local function cleanse() - for k, v in pairs(chatEvents) do - if ChatFrame_GetMessageEventFilters(v) then - print(v, unpack(ChatFrame_GetMessageEventFilters(v))) - for k2, v2 in pairs(ChatFrame_GetMessageEventFilters(v)) do - ChatFrame_RemoveMessageEventFilter(v, v2) - end - end - print("Done?") - if ChatFrame_GetMessageEventFilters(v) then print(unpack(ChatFrame_GetMessageEventFilters(v))) end - print("Got it.") - end -end - ---Add filter -local function add() - for k, v in pairs(chatEvents) do - print("Adding filter to", v) - ChatFrame_AddMessageEventFilter(v, myChatFilter) - end -end +--[[ +UI ChatFrame:AddChannel(chatFrame, "channelName") - Activate channel in chatFrame. +UI ChatFrame:AddMessageEventFilter("event", filterFunc) - Add a chat message filtering function (added 2.4) +UI ChatFrame:GetMessageEventFilters("event") - Retreive the list of chat message filtering functions. (added 2.4) +UI ChatFrame:OnHyperlinkShow(reference, link, button) - called when the user clicks on a chatlink. +UI ChatFrame:RemoveMessageEventFilter("event", filterFunc) - Unregister a chat message filtering function (added 2.4) +]] + +--[[ +/run ChatFilter.Words[#ChatFilter.Words + 1] = "roar" +/dump ChatFilter.Words +/dump ChatFilter.RemovedLines + +/fr +/fa +/fu +--]] + +print("POGGIES") + +SLASH_FADD1 = "/fadd" +SLASH_FADD2 = "/fa" +SlashCmdList["FADD"] = add + +SLASH_FREMOVE1 = "/fremove" +SLASH_FREMOVE2 = "/fr" +SlashCmdList["FREMOVE"] = cleanse + +SLASH_FUPDATE1 = "/fupdate" +SLASH_FUPDATE2 = "/fu" +SlashCmdList["FUPDATE"] = function(msg) + cleanse() + add() +end + +local chatEvents = { + "CHAT_MSG_SAY", + "CHAT_MSG_RAID", + "CHAT_MSG_YELL", + "CHAT_MSG_PARTY", + "CHAT_MSG_GUILD", + "CHAT_MSG_WHISPER", + "CHAT_MSG_CHANNEL", +} + +if not ChatFilter then ChatFilter = {} end +if not ChatFilter.People then ChatFilter.People = {} end +if not ChatFilter.Words then ChatFilter.Words = {} end +if not ChatFilter.RemovedLines then ChatFilter.RemovedLines = {} end +if not ChatFilter.RemovedCommon then ChatFilter.RemovedCommon = {} end + +--Own filter +local function myChatFilter(self, e, msg, author, lang) + print(msg, author, lang) + + local function getDate() + local date = date() + local year = date:match("%d%d%/%d%d/(%d%d)") + 2000 --01/07/(19) 14:36:42 + local month = date:match("(%d%d)") --(01)/07/19 14:36:42 + local day = date:match("%d%d%/(%d%d)") --01/(07)/19 14:36:42 + --Remove first place zeros + if day:find("0") == 1 then day = day:gsub("0", "") end + if month:find("0") == 1 then month = month:gsub("0", "") end + local localdate = day .. "." .. month .. "." .. year + return localdate + end + + local function getTime() + local date = date() + local localtime = date:match("%d%d%/%d%d%/%d%d%s(%d%d%p%d%d%p%d%d)") + return localtime + end + + author = author:match("(.+)-") + + --Remove Alliance + if lang == "Common" then + -- print("Caught one!") + ChatFilter.RemovedCommon[#ChatFilter.RemovedCommon + 1] = + format("[%s][%s]%s: %s", getDate(), getTime(), author, msg) + return true + end + + --Remove People + for k, v in pairs(ChatFilter.People) do + if author == v then + if e == "CHAT_MSG_WHISPER" and author ~= UnitName("player") then + SendChatMessage( + format('Your message "%s" has been filtered out because I hate fun', msg), + "WHISPER", + nil, + author + ) + end + ChatFilter.RemovedLines[#ChatFilter.RemovedLines + 1] = + format("[%s][%s]%s: %s", getDate(), getTime(), author, msg) + -- print("Caught one!") + return true + end + end + + --Remove Words + for k, v in pairs(ChatFilter.Words) do + if msg:match(v) then + if e == "CHAT_MSG_WHISPER" and author ~= UnitName("player") then + SendChatMessage( + format('Your message "%s" has been filtered out because I hate fun', msg), + "WHISPER", + nil, + author + ) + end + ChatFilter.RemovedLines[#ChatFilter.RemovedLines + 1] = + format("[%s][%s]%s: %s", getDate(), getTime(), author, msg) + -- print("Caught one!") + return true + end + end +end + +--Remove all filters +local function cleanse() + for k, v in pairs(chatEvents) do + if ChatFrame_GetMessageEventFilters(v) then + print(v, unpack(ChatFrame_GetMessageEventFilters(v))) + for k2, v2 in pairs(ChatFrame_GetMessageEventFilters(v)) do + ChatFrame_RemoveMessageEventFilter(v, v2) + end + end + print("Done?") + if ChatFrame_GetMessageEventFilters(v) then print(unpack(ChatFrame_GetMessageEventFilters(v))) end + print("Got it.") + end +end + +--Add filter +local function add() + for k, v in pairs(chatEvents) do + print("Adding filter to", v) + ChatFrame_AddMessageEventFilter(v, myChatFilter) + end +end diff --git a/FreshShit/ChatKeyScanner/event.lua b/WeakAuras/Projects/ChatKeyScanner/event.lua similarity index 100% rename from FreshShit/ChatKeyScanner/event.lua rename to WeakAuras/Projects/ChatKeyScanner/event.lua diff --git a/FreshShit/ChatKeyScanner/export b/WeakAuras/Projects/ChatKeyScanner/export similarity index 100% rename from FreshShit/ChatKeyScanner/export rename to WeakAuras/Projects/ChatKeyScanner/export diff --git a/FreshShit/ChatKeyScanner/init.lua b/WeakAuras/Projects/ChatKeyScanner/init.lua similarity index 100% rename from FreshShit/ChatKeyScanner/init.lua rename to WeakAuras/Projects/ChatKeyScanner/init.lua diff --git a/Complete Projects/Legion/ClassMissChance.lua b/WeakAuras/Projects/ClassMissChance.lua similarity index 98% rename from Complete Projects/Legion/ClassMissChance.lua rename to WeakAuras/Projects/ClassMissChance.lua index a4e615e..91be314 100644 --- a/Complete Projects/Legion/ClassMissChance.lua +++ b/WeakAuras/Projects/ClassMissChance.lua @@ -1,95 +1,95 @@ ---Add level brackets ---Add classification brackets ---[[ -/dump WeakAurasSaved.CustomTrash.MeleeMiss -/dump WeakAurasSaved.CustomTrash.CachedLevels -]] ---COMBAT_LOG_EVENT_UNFILTERED PLAYER_FOUND -function(e, ...) - if e == "COMBAT_LOG_EVENT_UNFILTERED" then - local se = select(2, ...) - if se == "SPELL_CAST_SUCCESS" or se == "SWING_DAMAGE" or se == "SWING_MISSED" then - local guid = select(4, ...) - local caster = select(5, ...) - local targetGUID = select(8, ...) - local targetName = select(9, ...) - if guid:match("Player") and targetGUID:match("Creature") then - if not WeakAurasSaved.CustomTrash.CachedLevels[targetName] then - WeakAuras.ScanEvents("GET_LEVEL", targetName) - return - else - if not WeakAurasSaved.CustomTrash.MeleeMiss[guid] then - WeakAurasSaved.CustomTrash.MeleeMiss[guid] = {} - WeakAurasSaved.CustomTrash.MeleeMiss[guid].guid = guid - WeakAurasSaved.CustomTrash.MeleeMiss[guid].name = caster - if not WeakAurasSaved.CustomTrash.MeleeMiss[guid][WeakAurasSaved.CustomTrash.CachedLevels[targetName]] then WeakAurasSaved.CustomTrash.MeleeMiss[guid][WeakAurasSaved.CustomTrash.CachedLevels[targetName]] = {} end - WeakAurasSaved.CustomTrash.MeleeMiss[guid][WeakAurasSaved.CustomTrash.CachedLevels[targetName]].hits = 0 - WeakAurasSaved.CustomTrash.MeleeMiss[guid][WeakAurasSaved.CustomTrash.CachedLevels[targetName]].miss = 0 - WeakAuras.ScanEvents("ADD_PLAYER", guid) - end - end - if WeakAurasSaved.CustomTrash.CachedLevels[targetName] and WeakAurasSaved.CustomTrash.MeleeMiss[guid][WeakAurasSaved.CustomTrash.CachedLevels[targetName]] then - if se == "SWING_DAMAGE" then - --Massive clusterfuck; table > playerGUID > guid, name, level bracket > hits, misses - WeakAurasSaved.CustomTrash.MeleeMiss[guid][WeakAurasSaved.CustomTrash.CachedLevels[targetName]].hits = WeakAurasSaved.CustomTrash.MeleeMiss[guid][WeakAurasSaved.CustomTrash.CachedLevels[targetName]].hits + 1 - elseif se == "SWING_MISSED" then - WeakAurasSaved.CustomTrash.MeleeMiss[guid][WeakAurasSaved.CustomTrash.CachedLevels[targetName]].miss = WeakAurasSaved.CustomTrash.MeleeMiss[guid][WeakAurasSaved.CustomTrash.CachedLevels[targetName]].miss + 1 - end - else - if WeakAurasSaved.CustomTrash.CachedLevels[targetName] then - WeakAurasSaved.CustomTrash.MeleeMiss[guid][WeakAurasSaved.CustomTrash.CachedLevels[targetName]] = {["hits"] = 0, ["miss"] = 0} - else - WeakAuras.ScanEvents("GET_LEVEL", targetName) - end - end - return true - end - end - elseif e == "PLAYER_FOUND" then - local guid, class, spec = ... - if WeakAurasSaved.CustomTrash.MeleeMiss[guid] then - WeakAurasSaved.CustomTrash.MeleeMiss[guid].class = class - WeakAurasSaved.CustomTrash.MeleeMiss[guid].spec = spec - end - end -end - ---INIT -if not WeakAurasSaved.CustomTrash.MeleeMiss then WeakAurasSaved.CustomTrash.MeleeMiss = {} end -aura_env.classColor = function(class) - if class == 6 then return "\124cFFC41F3B" elseif - class == 12 then return "\124cFFA330C9" elseif - class == 11 then return "\124cFFFF7D0A" elseif - class == 3 then return "\124cFFABD473" elseif - class == 8 then return "\124cFF40C7EB" elseif - class == 10 then return "\124cFF00FF96" elseif - class == 2 then return "\124cFFF58CBA" elseif - class == 5 then return "\124cFFFFFFFF" elseif - class == 4 then return "\124cFFFFF569" elseif - class == 7 then return "\124cFF0070DE" elseif - class == 9 then return "\124cFF8787ED" elseif - class == 1 then return "\124cFFC79C6E" else - return "\124cFF000000" end -end - ---DISPLAY -function() - local output = "" - for k, v in pairs(WeakAurasSaved.CustomTrash.MeleeMiss) do - if v.class then - output = output .. format("%s%s (%s) ", aura_env.classColor(v.class), v.name, v.spec) - for i = 110, 115 do - if v[i] and v[i].hits > 0 then - v[i].ratio = v[i].miss / v[i].hits - output = output .. format("[%d] %d / %d (%4.2f%%)", i, v[i].miss, v[i].hits, v[i].ratio * 100) .. "\n" - end - end - if v[-1] and v[-1].hits > 0 then - v[-1].ratio = v[-1].miss / v[-1].hits - output = output .. format("[%d] %d / %d (%4.2f%%)", i, v[-1].miss, v[-1].hits, v[-1].ratio * 100) .. "\n" - end - output = output .. "\n" - end - end - return output -end +--Add level brackets +--Add classification brackets +--[[ +/dump WeakAurasSaved.CustomTrash.MeleeMiss +/dump WeakAurasSaved.CustomTrash.CachedLevels +]] +--COMBAT_LOG_EVENT_UNFILTERED PLAYER_FOUND +function(e, ...) + if e == "COMBAT_LOG_EVENT_UNFILTERED" then + local se = select(2, ...) + if se == "SPELL_CAST_SUCCESS" or se == "SWING_DAMAGE" or se == "SWING_MISSED" then + local guid = select(4, ...) + local caster = select(5, ...) + local targetGUID = select(8, ...) + local targetName = select(9, ...) + if guid:match("Player") and targetGUID:match("Creature") then + if not WeakAurasSaved.CustomTrash.CachedLevels[targetName] then + WeakAuras.ScanEvents("GET_LEVEL", targetName) + return + else + if not WeakAurasSaved.CustomTrash.MeleeMiss[guid] then + WeakAurasSaved.CustomTrash.MeleeMiss[guid] = {} + WeakAurasSaved.CustomTrash.MeleeMiss[guid].guid = guid + WeakAurasSaved.CustomTrash.MeleeMiss[guid].name = caster + if not WeakAurasSaved.CustomTrash.MeleeMiss[guid][WeakAurasSaved.CustomTrash.CachedLevels[targetName]] then WeakAurasSaved.CustomTrash.MeleeMiss[guid][WeakAurasSaved.CustomTrash.CachedLevels[targetName]] = {} end + WeakAurasSaved.CustomTrash.MeleeMiss[guid][WeakAurasSaved.CustomTrash.CachedLevels[targetName]].hits = 0 + WeakAurasSaved.CustomTrash.MeleeMiss[guid][WeakAurasSaved.CustomTrash.CachedLevels[targetName]].miss = 0 + WeakAuras.ScanEvents("ADD_PLAYER", guid) + end + end + if WeakAurasSaved.CustomTrash.CachedLevels[targetName] and WeakAurasSaved.CustomTrash.MeleeMiss[guid][WeakAurasSaved.CustomTrash.CachedLevels[targetName]] then + if se == "SWING_DAMAGE" then + --Massive clusterfuck; table > playerGUID > guid, name, level bracket > hits, misses + WeakAurasSaved.CustomTrash.MeleeMiss[guid][WeakAurasSaved.CustomTrash.CachedLevels[targetName]].hits = WeakAurasSaved.CustomTrash.MeleeMiss[guid][WeakAurasSaved.CustomTrash.CachedLevels[targetName]].hits + 1 + elseif se == "SWING_MISSED" then + WeakAurasSaved.CustomTrash.MeleeMiss[guid][WeakAurasSaved.CustomTrash.CachedLevels[targetName]].miss = WeakAurasSaved.CustomTrash.MeleeMiss[guid][WeakAurasSaved.CustomTrash.CachedLevels[targetName]].miss + 1 + end + else + if WeakAurasSaved.CustomTrash.CachedLevels[targetName] then + WeakAurasSaved.CustomTrash.MeleeMiss[guid][WeakAurasSaved.CustomTrash.CachedLevels[targetName]] = {["hits"] = 0, ["miss"] = 0} + else + WeakAuras.ScanEvents("GET_LEVEL", targetName) + end + end + return true + end + end + elseif e == "PLAYER_FOUND" then + local guid, class, spec = ... + if WeakAurasSaved.CustomTrash.MeleeMiss[guid] then + WeakAurasSaved.CustomTrash.MeleeMiss[guid].class = class + WeakAurasSaved.CustomTrash.MeleeMiss[guid].spec = spec + end + end +end + +--INIT +if not WeakAurasSaved.CustomTrash.MeleeMiss then WeakAurasSaved.CustomTrash.MeleeMiss = {} end +aura_env.classColor = function(class) + if class == 6 then return "\124cFFC41F3B" elseif + class == 12 then return "\124cFFA330C9" elseif + class == 11 then return "\124cFFFF7D0A" elseif + class == 3 then return "\124cFFABD473" elseif + class == 8 then return "\124cFF40C7EB" elseif + class == 10 then return "\124cFF00FF96" elseif + class == 2 then return "\124cFFF58CBA" elseif + class == 5 then return "\124cFFFFFFFF" elseif + class == 4 then return "\124cFFFFF569" elseif + class == 7 then return "\124cFF0070DE" elseif + class == 9 then return "\124cFF8787ED" elseif + class == 1 then return "\124cFFC79C6E" else + return "\124cFF000000" end +end + +--DISPLAY +function() + local output = "" + for k, v in pairs(WeakAurasSaved.CustomTrash.MeleeMiss) do + if v.class then + output = output .. format("%s%s (%s) ", aura_env.classColor(v.class), v.name, v.spec) + for i = 110, 115 do + if v[i] and v[i].hits > 0 then + v[i].ratio = v[i].miss / v[i].hits + output = output .. format("[%d] %d / %d (%4.2f%%)", i, v[i].miss, v[i].hits, v[i].ratio * 100) .. "\n" + end + end + if v[-1] and v[-1].hits > 0 then + v[-1].ratio = v[-1].miss / v[-1].hits + output = output .. format("[%d] %d / %d (%4.2f%%)", i, v[-1].miss, v[-1].hits, v[-1].ratio * 100) .. "\n" + end + output = output .. "\n" + end + end + return output +end diff --git a/Complete Projects/Legion/CombatLogFindClass.lua b/WeakAuras/Projects/CombatLogFindClass.lua similarity index 96% rename from Complete Projects/Legion/CombatLogFindClass.lua rename to WeakAuras/Projects/CombatLogFindClass.lua index 2173afd..b3ffa44 100644 --- a/Complete Projects/Legion/CombatLogFindClass.lua +++ b/WeakAuras/Projects/CombatLogFindClass.lua @@ -1,105 +1,105 @@ ---[[ -Maybe improve later -Can use names from -https://wow.gamepedia.com/Specialization > spec -Can find link from scanning spellbook -Can find ID from link >> |Hspell:186265:0[Aspect of the Turtle] -Store ID and spec to table - -/run WeakAuras.ScanEvents("ADD_PLAYER", UnitGUID("target")) -WeakAuras.ScanEvents("PLAYER_FOUND", caster, aura_env.trackList[caster].class, aura_env.trackList[caster].spec) -]] ---ADD_PLAYER COMBAT_LOG_EVENT_UNFILTERED -function(e, ...) - if e == "ADD_PLAYER" then - local guid = ... - if not aura_env.trackList[guid] then - aura_env.trackList[guid] = true - end - elseif e == "COMBAT_LOG_EVENT_UNFILTERED" then - local se = select(2, ...) - local guid = select(4, ...) - if se == "SPELL_CAST_SUCCESS" then - local sid = select(12, ...) - if aura_env.abilities[sid] and aura_env.trackList[guid] == true then - aura_env.trackList[guid] = { - ["class"] = aura_env.classes[aura_env.abilities[sid]], - ["spec"] = aura_env.abilities[sid], - } - WeakAuras.ScanEvents("PLAYER_FOUND", guid, aura_env.trackList[guid].class, aura_env.trackList[guid].spec) - aura_env.trackList[guid] = nil - --DevTools_Dump(aura_env.trackList) - end - end - end -end ---Works OK ---INIT -aura_env.trackList = {} -aura_env.abilities = { - --Warrior - [12294] = "Arms", --Mortal Strike - [209577] = "Arms", --Warbreaker A - [85288] = "Fury", --Raging Blow - [205545] = "Fury", --Odyn's Fury A - - --Paladin - [35395] = "Retribution", --Crusader Strike - [217020] = "Retribution", --Zeal - [205273] = "Retribution", --Wake of Ashes A - - --Rogue - [192759] = "Assasination", --Kingsbane A - [703] = "Assasination", --Garrote - [1329] = "Assasination", --Mutilate - [1943] = "Assasination", --Rupture - [32645] = "Assasination", --Envenom - [202665] = "Outlaw", --Curse of the Dreadblades A - [193315] = "Outlaw", --Saber Slash - [185763] = "Outlaw", --Pistol Shot - [2098] = "Outlaw", --Run Through - [199804] = "Outlaw", --Between the Eyes - [209782] = "Subelty", --Goremaws Bite A - [185313] = "Subelty", --Shadow Dance - [19452] = "Subelty", --Nightblade - [185438] = "Subelty", --Shadowstrike - [53] = "Subelty", --Backstab - - --Death Knight - [85948] = "Unholy", --Festering Strike - [47541] = "Unholy", --Death Coil - [220143] = "Unholy", --Apocalypse A - [49143] = "Frost", --Frost Strike - [49148] = "Frost", --Howling Blast - [49020] = "Frost", --Obliterate - - --Shaman - [193796] = "Enhancement", --Flametongue - [17364] = "Enhancement", --Stormstrike - [204945] = "Enhancement", --Doom Winds A - - --Monk - [113656] = "Windwalker", --Fists of Fury - [205320] = "Windwalker", --Strike of the Windlord A - - --Demon Hunter -} -aura_env.classes = { - ["Fury"] = 1, - ["Arms"] = 1, - - ["Retribution"] = 2, - - ["Assasination"] = 4, - ["Subelty"] = 4, - ["Outlaw"] = 4, - - ["Frost"] = 6, - ["Unholy"] = 6, - - ["Enhancement"] = 7, - - ["Windwalker"] = 10, - - ["Havoc"] = 12, -} +--[[ +Maybe improve later +Can use names from +https://wow.gamepedia.com/Specialization > spec +Can find link from scanning spellbook +Can find ID from link >> |Hspell:186265:0[Aspect of the Turtle] +Store ID and spec to table + +/run WeakAuras.ScanEvents("ADD_PLAYER", UnitGUID("target")) +WeakAuras.ScanEvents("PLAYER_FOUND", caster, aura_env.trackList[caster].class, aura_env.trackList[caster].spec) +]] +--ADD_PLAYER COMBAT_LOG_EVENT_UNFILTERED +function(e, ...) + if e == "ADD_PLAYER" then + local guid = ... + if not aura_env.trackList[guid] then + aura_env.trackList[guid] = true + end + elseif e == "COMBAT_LOG_EVENT_UNFILTERED" then + local se = select(2, ...) + local guid = select(4, ...) + if se == "SPELL_CAST_SUCCESS" then + local sid = select(12, ...) + if aura_env.abilities[sid] and aura_env.trackList[guid] == true then + aura_env.trackList[guid] = { + ["class"] = aura_env.classes[aura_env.abilities[sid]], + ["spec"] = aura_env.abilities[sid], + } + WeakAuras.ScanEvents("PLAYER_FOUND", guid, aura_env.trackList[guid].class, aura_env.trackList[guid].spec) + aura_env.trackList[guid] = nil + --DevTools_Dump(aura_env.trackList) + end + end + end +end +--Works OK +--INIT +aura_env.trackList = {} +aura_env.abilities = { + --Warrior + [12294] = "Arms", --Mortal Strike + [209577] = "Arms", --Warbreaker A + [85288] = "Fury", --Raging Blow + [205545] = "Fury", --Odyn's Fury A + + --Paladin + [35395] = "Retribution", --Crusader Strike + [217020] = "Retribution", --Zeal + [205273] = "Retribution", --Wake of Ashes A + + --Rogue + [192759] = "Assasination", --Kingsbane A + [703] = "Assasination", --Garrote + [1329] = "Assasination", --Mutilate + [1943] = "Assasination", --Rupture + [32645] = "Assasination", --Envenom + [202665] = "Outlaw", --Curse of the Dreadblades A + [193315] = "Outlaw", --Saber Slash + [185763] = "Outlaw", --Pistol Shot + [2098] = "Outlaw", --Run Through + [199804] = "Outlaw", --Between the Eyes + [209782] = "Subelty", --Goremaws Bite A + [185313] = "Subelty", --Shadow Dance + [19452] = "Subelty", --Nightblade + [185438] = "Subelty", --Shadowstrike + [53] = "Subelty", --Backstab + + --Death Knight + [85948] = "Unholy", --Festering Strike + [47541] = "Unholy", --Death Coil + [220143] = "Unholy", --Apocalypse A + [49143] = "Frost", --Frost Strike + [49148] = "Frost", --Howling Blast + [49020] = "Frost", --Obliterate + + --Shaman + [193796] = "Enhancement", --Flametongue + [17364] = "Enhancement", --Stormstrike + [204945] = "Enhancement", --Doom Winds A + + --Monk + [113656] = "Windwalker", --Fists of Fury + [205320] = "Windwalker", --Strike of the Windlord A + + --Demon Hunter +} +aura_env.classes = { + ["Fury"] = 1, + ["Arms"] = 1, + + ["Retribution"] = 2, + + ["Assasination"] = 4, + ["Subelty"] = 4, + ["Outlaw"] = 4, + + ["Frost"] = 6, + ["Unholy"] = 6, + + ["Enhancement"] = 7, + + ["Windwalker"] = 10, + + ["Havoc"] = 12, +} diff --git a/FreshShit/CombopointFlasher/display.lua b/WeakAuras/Projects/CombopointFlasher/display.lua similarity index 95% rename from FreshShit/CombopointFlasher/display.lua rename to WeakAuras/Projects/CombopointFlasher/display.lua index 345eac2..0c7a819 100644 --- a/FreshShit/CombopointFlasher/display.lua +++ b/WeakAuras/Projects/CombopointFlasher/display.lua @@ -1,3 +1,3 @@ -function() - return UnitPower("player", 4) +function() + return UnitPower("player", 4) end \ No newline at end of file diff --git a/FreshShit/CombopointFlasher/event.lua b/WeakAuras/Projects/CombopointFlasher/event.lua similarity index 96% rename from FreshShit/CombopointFlasher/event.lua rename to WeakAuras/Projects/CombopointFlasher/event.lua index 3778a14..7c0287a 100644 --- a/FreshShit/CombopointFlasher/event.lua +++ b/WeakAuras/Projects/CombopointFlasher/event.lua @@ -1,9 +1,9 @@ --- UNIT_POWER_FREQUENT ----@param e string ----@param unit string ----@param power string -function(e, unit, power) - if unit ~= "player" then return end - if power ~= "COMBO_POINTS" then return end - return true +-- UNIT_POWER_FREQUENT +---@param e string +---@param unit string +---@param power string +function(e, unit, power) + if unit ~= "player" then return end + if power ~= "COMBO_POINTS" then return end + return true end \ No newline at end of file diff --git a/FreshShit/CombopointFlasher/export b/WeakAuras/Projects/CombopointFlasher/export similarity index 100% rename from FreshShit/CombopointFlasher/export rename to WeakAuras/Projects/CombopointFlasher/export diff --git a/Complete Projects/Legion/Concordance.lua b/WeakAuras/Projects/Concordance.lua similarity index 97% rename from Complete Projects/Legion/Concordance.lua rename to WeakAuras/Projects/Concordance.lua index 3bfe08c..cdbd008 100644 --- a/Complete Projects/Legion/Concordance.lua +++ b/WeakAuras/Projects/Concordance.lua @@ -1,9 +1,9 @@ -function() - local versa = GetCombatRatingBonus(CR_VERSATILITY_DAMAGE_DONE) - local rawversa = GetCombatRating(29) - local concversa = select(17, UnitBuff("player", "Concordance of the Legionfall")) or 0 - local oldversa = rawversa - concversa - local versapp = versa / rawversa - local pergranted = concversa * versapp - return string.format("+%.2f", pergranted) -end +function() + local versa = GetCombatRatingBonus(CR_VERSATILITY_DAMAGE_DONE) + local rawversa = GetCombatRating(29) + local concversa = select(17, UnitBuff("player", "Concordance of the Legionfall")) or 0 + local oldversa = rawversa - concversa + local versapp = versa / rawversa + local pergranted = concversa * versapp + return string.format("+%.2f", pergranted) +end diff --git a/LegionWA/CooldownAlert/Event.lua b/WeakAuras/Projects/CooldownAlert/Event.lua similarity index 96% rename from LegionWA/CooldownAlert/Event.lua rename to WeakAuras/Projects/CooldownAlert/Event.lua index 2ff9c4d..eaeb61e 100644 --- a/LegionWA/CooldownAlert/Event.lua +++ b/WeakAuras/Projects/CooldownAlert/Event.lua @@ -1,5 +1,5 @@ --- ACTIONBAR_UPDATE_COOLDOWN -function(allstates, e) - aura_env.processEvent(allstates) - return true +-- ACTIONBAR_UPDATE_COOLDOWN +function(allstates, e) + aura_env.processEvent(allstates) + return true end \ No newline at end of file diff --git a/LegionWA/CooldownAlert/Export b/WeakAuras/Projects/CooldownAlert/Export similarity index 100% rename from LegionWA/CooldownAlert/Export rename to WeakAuras/Projects/CooldownAlert/Export diff --git a/LegionWA/CooldownAlert/Init.lua b/WeakAuras/Projects/CooldownAlert/Init.lua similarity index 96% rename from LegionWA/CooldownAlert/Init.lua rename to WeakAuras/Projects/CooldownAlert/Init.lua index 23948ae..6d61e41 100644 --- a/LegionWA/CooldownAlert/Init.lua +++ b/WeakAuras/Projects/CooldownAlert/Init.lua @@ -1,72 +1,72 @@ -aura_env.trackedSpells = { - 20271, -- Judgement - 26573, -- Consecration - 209202, -- Eye of Tyr - 213652, -- Hand of the Protector - 31935, -- Avenger's Shield - 53600, -- Shield of the Righteous - 1044, -- Hand of Freedom - 155145, -- Arcane Torrent - 853, -- Hammer of Justice - 6940, -- Hand of Sacrifice - 31850, -- Ardent Defender - 86659, -- Guardian of Ancient Kings - 204018, -- Blessing of Spellwarding - -- - 108416, -- Dark Pact - 196447, -- Channel Demonfire - 104773, -- Unending Resolve - 196586, -- Dimensional Rift -} -local iconDisplayDuration = 0.4 -local gcdDuration = 1.5 - -aura_env.cache = {} -for k, spellId in pairs(aura_env.trackedSpells) do - aura_env.cache[spellId] = { - ready = true, - hasCharges = false, - } - if GetSpellCharges(spellId) then - aura_env.cache[spellId].hasCharges = true - aura_env.cache[spellId].charges = select(1, GetSpellCharges(spellId)) - end -end - -aura_env.processEvent = function(allstates) - for k, spellId in pairs(aura_env.trackedSpells) do - -- Handle spells with charges - local isReady - if aura_env.cache[spellId].hasCharges then - local charges = select(1, GetSpellCharges(spellId)) - if charges > aura_env.cache[spellId].charges then - isReady = true - aura_env.cache[spellId].charges = charges - else - isReady = false - aura_env.cache[spellId].charges = charges - end - else - isReady = select(2, GetSpellCooldown(spellId)) < gcdDuration - end - - if not aura_env.cache[spellId].ready and isReady then - local icon = select(3, GetSpellInfo(spellId)) - allstates[spellId] = { - show = true, - changed = true, - index = GetTime(), - resort = true, - - icon = icon, - - progressType = "timed", - expirationTime = GetTime() + iconDisplayDuration, - duration = iconDisplayDuration, - autoHide = true, - } - end - - aura_env.cache[spellId].ready = isReady - end -end +aura_env.trackedSpells = { + 20271, -- Judgement + 26573, -- Consecration + 209202, -- Eye of Tyr + 213652, -- Hand of the Protector + 31935, -- Avenger's Shield + 53600, -- Shield of the Righteous + 1044, -- Hand of Freedom + 155145, -- Arcane Torrent + 853, -- Hammer of Justice + 6940, -- Hand of Sacrifice + 31850, -- Ardent Defender + 86659, -- Guardian of Ancient Kings + 204018, -- Blessing of Spellwarding + -- + 108416, -- Dark Pact + 196447, -- Channel Demonfire + 104773, -- Unending Resolve + 196586, -- Dimensional Rift +} +local iconDisplayDuration = 0.4 +local gcdDuration = 1.5 + +aura_env.cache = {} +for k, spellId in pairs(aura_env.trackedSpells) do + aura_env.cache[spellId] = { + ready = true, + hasCharges = false, + } + if GetSpellCharges(spellId) then + aura_env.cache[spellId].hasCharges = true + aura_env.cache[spellId].charges = select(1, GetSpellCharges(spellId)) + end +end + +aura_env.processEvent = function(allstates) + for k, spellId in pairs(aura_env.trackedSpells) do + -- Handle spells with charges + local isReady + if aura_env.cache[spellId].hasCharges then + local charges = select(1, GetSpellCharges(spellId)) + if charges > aura_env.cache[spellId].charges then + isReady = true + aura_env.cache[spellId].charges = charges + else + isReady = false + aura_env.cache[spellId].charges = charges + end + else + isReady = select(2, GetSpellCooldown(spellId)) < gcdDuration + end + + if not aura_env.cache[spellId].ready and isReady then + local icon = select(3, GetSpellInfo(spellId)) + allstates[spellId] = { + show = true, + changed = true, + index = GetTime(), + resort = true, + + icon = icon, + + progressType = "timed", + expirationTime = GetTime() + iconDisplayDuration, + duration = iconDisplayDuration, + autoHide = true, + } + end + + aura_env.cache[spellId].ready = isReady + end +end diff --git a/Complete Projects/Legion/CooldownAnnouncer.lua b/WeakAuras/Projects/CooldownAnnouncer.lua similarity index 97% rename from Complete Projects/Legion/CooldownAnnouncer.lua rename to WeakAuras/Projects/CooldownAnnouncer.lua index f5f6330..fd1fff8 100644 --- a/Complete Projects/Legion/CooldownAnnouncer.lua +++ b/WeakAuras/Projects/CooldownAnnouncer.lua @@ -1,116 +1,116 @@ ---TSU ---COMBAT_LOG_EVENT_UNFILTERED GROUP_ROSTER_UPDATE COOLDOWN_TICKER -function(allstates, e, ...) - if not aura_env.ticker then - aura_env.ticker = C_Timer.NewTicker(0.05, function() WeakAuras.ScanEvents("COOLDOWN_TICKER") end) - end - if e == "COOLDOWN_TICKER" then - if allstates[1] then - if allstates[1].time + 2 < GetTime() then - allstates[1].show = false - allstates[1].changed = true - table.remove(allstates, 1) - WeakAuras.ScanEvents("COOLDOWN_TICKER") - return true - end - end - elseif e == "COMBAT_LOG_EVENT_UNFILTERED" then - local se = select(2, ...) - if se == "SPELL_CAST_SUCCESS" then - local caster = select(5, ...) or 0 - if aura_env.raid[caster] then - local spell = select(13, ...) - if aura_env.spells[spell] then - allstates[#allstates + 1] = { - caster = caster, - spell = spell, - string = caster .. " - " .. spell, - class = aura_env.raid[caster], - time = GetTime(), - show = true, - changed = true, - } - return true - end - end - end - elseif e == "GROUP_ROSTER_UPDATE" then - local prefix = "party" - if IsInRaid() == true then - prefix = "raid" - end - aura_env.raid = {} - aura_env.raid[UnitName("player")] = select(3, UnitClass("player")) - for i = 1, GetNumGroupMembers() do - if UnitName(prefix .. i) and not aura_env.raid[UnitName(prefix .. i)] then - aura_env.raid[UnitName(prefix .. i)] = select(3, UnitClass(prefix .. i)) - print("YEET", UnitName(prefix .. i), select(3, UnitClass(prefix .. i))) - end - end - end - --DevTools_Dump(aura_env.raid) - return true -end - ---INIT -aura_env.raid = {} -aura_env.spells = { - ["Divine Shield"] = true, - ["Blessing of Spellwarding"] = true, - ["Blessing of Protection"] = true, - ["Blessing of Sacrifice"] = true, - ["Avenging Wrath"] = true, - ["Aura Mastery"] = true, - ["Guardian Spirit"] = true, - ["Divine Hymn"] = true, - ["Raise Ally"] = true, - ["Tranquility"] = true, - ["Stampeding Roar"] = true, - ["Rebirth"] = true, - ["Ice Block"] = true, - ["Deterrence"] = true, - ["Survival Instincts"] = true, - ["Anti-Magic Shell"] = true, - ["Vampiric Blood"] = true, - ["Revival"] = true, - ["Life Cocoon"] = true, - ["Diffuse Magic"] = true, - ["Lay on Hands"] = true, - ["Dispersion"] = true, - ["Evasion"] = true, - ["Cloak of Shadows"] = true, - ["Bloodlust"] = true, - ["Healing Tide Totem"] = true, - ["Soulstone"] = true, - ["Rallying Cry"] = true, - ["Power Word: Barrier"] = true, - ["Spirit Link Totem"] = true, - ["Wind Rush Totem"] = true, - ["Ancestral Guidance"] = true, - --["Hand of the Protector"] = true, - --["Healing Rain"] = true, - --["Shimmer"] = true, - --["Death and Decay"] = true, -} - ---ANIMATION -function() - if aura_env.statee then - local classColor = function(class) - if class == 1 then return 0.78, 0.61, 0.43, 1 elseif - class == 2 then return 0.96, 0.55, 0.73, 1 elseif - class == 3 then return 0.67, 0.83, 0.45, 1 elseif - class == 4 then return 1, 0.96, 0.41, 1 elseif - class == 5 then return 1, 1, 1, 1 elseif - class == 6 then return 0.77, 0.12, 0.23, 1 elseif - class == 7 then return 0, 0.44, 0.87, 1 elseif - class == 8 then return 0.25, 0.78, 0.92, 1 elseif - class == 9 then return 0.53, 0.53, 0.93, 1 elseif - class == 10 then return 0, 1, 0.59, 1 elseif - class == 11 then return 1, 0.49, 0.04, 1 elseif - class == 12 then return 0.64, 0.19, 0.79, 1 else - return 1, 1, 1, 1 end - end - return classColor(aura_env.statee.class) - end -end +--TSU +--COMBAT_LOG_EVENT_UNFILTERED GROUP_ROSTER_UPDATE COOLDOWN_TICKER +function(allstates, e, ...) + if not aura_env.ticker then + aura_env.ticker = C_Timer.NewTicker(0.05, function() WeakAuras.ScanEvents("COOLDOWN_TICKER") end) + end + if e == "COOLDOWN_TICKER" then + if allstates[1] then + if allstates[1].time + 2 < GetTime() then + allstates[1].show = false + allstates[1].changed = true + table.remove(allstates, 1) + WeakAuras.ScanEvents("COOLDOWN_TICKER") + return true + end + end + elseif e == "COMBAT_LOG_EVENT_UNFILTERED" then + local se = select(2, ...) + if se == "SPELL_CAST_SUCCESS" then + local caster = select(5, ...) or 0 + if aura_env.raid[caster] then + local spell = select(13, ...) + if aura_env.spells[spell] then + allstates[#allstates + 1] = { + caster = caster, + spell = spell, + string = caster .. " - " .. spell, + class = aura_env.raid[caster], + time = GetTime(), + show = true, + changed = true, + } + return true + end + end + end + elseif e == "GROUP_ROSTER_UPDATE" then + local prefix = "party" + if IsInRaid() == true then + prefix = "raid" + end + aura_env.raid = {} + aura_env.raid[UnitName("player")] = select(3, UnitClass("player")) + for i = 1, GetNumGroupMembers() do + if UnitName(prefix .. i) and not aura_env.raid[UnitName(prefix .. i)] then + aura_env.raid[UnitName(prefix .. i)] = select(3, UnitClass(prefix .. i)) + print("YEET", UnitName(prefix .. i), select(3, UnitClass(prefix .. i))) + end + end + end + --DevTools_Dump(aura_env.raid) + return true +end + +--INIT +aura_env.raid = {} +aura_env.spells = { + ["Divine Shield"] = true, + ["Blessing of Spellwarding"] = true, + ["Blessing of Protection"] = true, + ["Blessing of Sacrifice"] = true, + ["Avenging Wrath"] = true, + ["Aura Mastery"] = true, + ["Guardian Spirit"] = true, + ["Divine Hymn"] = true, + ["Raise Ally"] = true, + ["Tranquility"] = true, + ["Stampeding Roar"] = true, + ["Rebirth"] = true, + ["Ice Block"] = true, + ["Deterrence"] = true, + ["Survival Instincts"] = true, + ["Anti-Magic Shell"] = true, + ["Vampiric Blood"] = true, + ["Revival"] = true, + ["Life Cocoon"] = true, + ["Diffuse Magic"] = true, + ["Lay on Hands"] = true, + ["Dispersion"] = true, + ["Evasion"] = true, + ["Cloak of Shadows"] = true, + ["Bloodlust"] = true, + ["Healing Tide Totem"] = true, + ["Soulstone"] = true, + ["Rallying Cry"] = true, + ["Power Word: Barrier"] = true, + ["Spirit Link Totem"] = true, + ["Wind Rush Totem"] = true, + ["Ancestral Guidance"] = true, + --["Hand of the Protector"] = true, + --["Healing Rain"] = true, + --["Shimmer"] = true, + --["Death and Decay"] = true, +} + +--ANIMATION +function() + if aura_env.statee then + local classColor = function(class) + if class == 1 then return 0.78, 0.61, 0.43, 1 elseif + class == 2 then return 0.96, 0.55, 0.73, 1 elseif + class == 3 then return 0.67, 0.83, 0.45, 1 elseif + class == 4 then return 1, 0.96, 0.41, 1 elseif + class == 5 then return 1, 1, 1, 1 elseif + class == 6 then return 0.77, 0.12, 0.23, 1 elseif + class == 7 then return 0, 0.44, 0.87, 1 elseif + class == 8 then return 0.25, 0.78, 0.92, 1 elseif + class == 9 then return 0.53, 0.53, 0.93, 1 elseif + class == 10 then return 0, 1, 0.59, 1 elseif + class == 11 then return 1, 0.49, 0.04, 1 elseif + class == 12 then return 0.64, 0.19, 0.79, 1 else + return 1, 1, 1, 1 end + end + return classColor(aura_env.statee.class) + end +end diff --git a/Complete Projects/Legion/Cross Char Quota.lua b/WeakAuras/Projects/Cross Char Quota.lua similarity index 97% rename from Complete Projects/Legion/Cross Char Quota.lua rename to WeakAuras/Projects/Cross Char Quota.lua index b420fb7..97ee737 100644 --- a/Complete Projects/Legion/Cross Char Quota.lua +++ b/WeakAuras/Projects/Cross Char Quota.lua @@ -1,66 +1,66 @@ ---PLAYER_ENTERING_WORLD BAG_UPDATE -function() - if UnitName("player") == "Pinkiepiie" then - CustomTrash.herbs = {} - local herbs = {"Starlight Rose", "Fjarnskaggl", "Foxflower", "Dreamleaf", "Aethril"} - for k,v in ipairs(herbs) do - CustomTrash.herbs[v] = GetItemCount(v, 1) --k berb v am - end - end - if UnitName("player") == "Kenono" then - aura_env.output = "" - local twok = 0 - local currentherbs = {} - for k,v in pairs(CustomTrash.herbs) do - currentherbs[k] = v - end - for k,v in pairs(CustomTrash.herbs) do - currentherbs[k] = v + GetItemCount(k, 1) - if v >= 2400 then twok = twok + 1 end - end - local function hexgrad(val, min, max) - if val >= 2400 then return "|cff0000ff" end - local function tohex(input) - local output = string.format("%x", input * 255) - return output - end - local function grad(c, min, max) - c = 1 - (((max - c) / (max - min)) * 1) - if c > 0.5 then - c = 1 - (2 * (c - 0.5)) - return c, 1, 0, 1 - else - c = c * 2 - return 1, c, 0, 1 - end - end - local color1, color2, color3, color4 = 0, 0, 0, 0 - color1, color2, color3, color4 = grad(val, min, max) - color1, color2, color3, color4 = tohex(color1), tohex(color2), tohex(color3), tohex(color4) - color1, color2, color3, color4 = tostring(color1), tostring(color2), tostring(color3), tostring(color4) - if string.len(color1) == 1 then color1 = "0" .. color1 end - if string.len(color2) == 1 then color2 = "0" .. color2 end - if string.len(color3) == 1 then color3 = "0" .. color3 end - if string.len(color4) == 1 then color4 = "0" .. color4 end - local color = "|c" .. color4 .. color1 .. color2 .. color3 - return color - end - for k,v in pairs(currentherbs) do - if twok < 5 then - aura_env.output = aura_env.output .. hexgrad(v, 0, 2400) .. k .. " " .. v .. " / 2400" .. "|r" .. "\n" - end - end - end -end - ---DISPLAY -function() - if UnitName("player") == "Kenono" then - return aura_env.output - else - return "" - end -end - ---INIT +--PLAYER_ENTERING_WORLD BAG_UPDATE +function() + if UnitName("player") == "Pinkiepiie" then + CustomTrash.herbs = {} + local herbs = {"Starlight Rose", "Fjarnskaggl", "Foxflower", "Dreamleaf", "Aethril"} + for k,v in ipairs(herbs) do + CustomTrash.herbs[v] = GetItemCount(v, 1) --k berb v am + end + end + if UnitName("player") == "Kenono" then + aura_env.output = "" + local twok = 0 + local currentherbs = {} + for k,v in pairs(CustomTrash.herbs) do + currentherbs[k] = v + end + for k,v in pairs(CustomTrash.herbs) do + currentherbs[k] = v + GetItemCount(k, 1) + if v >= 2400 then twok = twok + 1 end + end + local function hexgrad(val, min, max) + if val >= 2400 then return "|cff0000ff" end + local function tohex(input) + local output = string.format("%x", input * 255) + return output + end + local function grad(c, min, max) + c = 1 - (((max - c) / (max - min)) * 1) + if c > 0.5 then + c = 1 - (2 * (c - 0.5)) + return c, 1, 0, 1 + else + c = c * 2 + return 1, c, 0, 1 + end + end + local color1, color2, color3, color4 = 0, 0, 0, 0 + color1, color2, color3, color4 = grad(val, min, max) + color1, color2, color3, color4 = tohex(color1), tohex(color2), tohex(color3), tohex(color4) + color1, color2, color3, color4 = tostring(color1), tostring(color2), tostring(color3), tostring(color4) + if string.len(color1) == 1 then color1 = "0" .. color1 end + if string.len(color2) == 1 then color2 = "0" .. color2 end + if string.len(color3) == 1 then color3 = "0" .. color3 end + if string.len(color4) == 1 then color4 = "0" .. color4 end + local color = "|c" .. color4 .. color1 .. color2 .. color3 + return color + end + for k,v in pairs(currentherbs) do + if twok < 5 then + aura_env.output = aura_env.output .. hexgrad(v, 0, 2400) .. k .. " " .. v .. " / 2400" .. "|r" .. "\n" + end + end + end +end + +--DISPLAY +function() + if UnitName("player") == "Kenono" then + return aura_env.output + else + return "" + end +end + +--INIT aura_env.output = "" \ No newline at end of file diff --git a/Complete Projects/Legion/DAI KEY 2.lua b/WeakAuras/Projects/DAI KEY 2.lua similarity index 96% rename from Complete Projects/Legion/DAI KEY 2.lua rename to WeakAuras/Projects/DAI KEY 2.lua index d66e5dd..9e5641d 100644 --- a/Complete Projects/Legion/DAI KEY 2.lua +++ b/WeakAuras/Projects/DAI KEY 2.lua @@ -1,44 +1,44 @@ ---PLAYER_ENTERING_WORLD -function() - aura_env.output = "" - local key = - { - ["Name"] = "", - ["Level"] = 0, - } - for i = 1, 4 do - for j = 1, GetContainerNumSlots(i) do - local name = GetContainerItemLink(i, j) or "" - if name:match("key") then - local parts = {strsplit(':', name)} - local level = tonumber(parts[3]); - local name = parts[7]:gsub("%]", "") - name = name:gsub("|h|r", "") - name = name:sub(2) - key.Name = name - key.Level = level - end - end - end - aura_env.output = key.Name .. " " .. key.Level -end - ---CHAT_MSG_WHISPER -function(e, msg, sender) - local sender = sender:match("%a+") - msg = msg:lower() - if msg == "pls dai key" then - SendChatMessage(aura_env.output, "WHISPER", "Common", sender) - end -end - ---CHAT_MSG_PARTY CHAT_MSG_PARTY_LEADER -function(e, msg) - msg = msg:lower() - if msg == "pls dai key" then - SendChatMessage(aura_env.output, "PARTY") - end -end - ---INIT -aura_env.output = "" +--PLAYER_ENTERING_WORLD +function() + aura_env.output = "" + local key = + { + ["Name"] = "", + ["Level"] = 0, + } + for i = 1, 4 do + for j = 1, GetContainerNumSlots(i) do + local name = GetContainerItemLink(i, j) or "" + if name:match("key") then + local parts = {strsplit(':', name)} + local level = tonumber(parts[3]); + local name = parts[7]:gsub("%]", "") + name = name:gsub("|h|r", "") + name = name:sub(2) + key.Name = name + key.Level = level + end + end + end + aura_env.output = key.Name .. " " .. key.Level +end + +--CHAT_MSG_WHISPER +function(e, msg, sender) + local sender = sender:match("%a+") + msg = msg:lower() + if msg == "pls dai key" then + SendChatMessage(aura_env.output, "WHISPER", "Common", sender) + end +end + +--CHAT_MSG_PARTY CHAT_MSG_PARTY_LEADER +function(e, msg) + msg = msg:lower() + if msg == "pls dai key" then + SendChatMessage(aura_env.output, "PARTY") + end +end + +--INIT +aura_env.output = "" diff --git a/Complete Projects/Legion/DAI KEY.lua b/WeakAuras/Projects/DAI KEY.lua similarity index 97% rename from Complete Projects/Legion/DAI KEY.lua rename to WeakAuras/Projects/DAI KEY.lua index 7de2bbb..aa696bb 100644 --- a/Complete Projects/Legion/DAI KEY.lua +++ b/WeakAuras/Projects/DAI KEY.lua @@ -1,79 +1,79 @@ ---PLAYER_ENTERING_WORLD -function() - local date = date() - local year = date:match("%d%d%/%d%d/(%d%d)") + 2000 --01/07/(19) 14:36:42 - local month = date:match("(%d%d)") --(01)/07/19 14:36:42 - local day = date:match("%d%d%/(%d%d)") --01/(07)/19 14:36:42 - if day:find("0") == 1 then - day = day:gsub("0", "") - end - if month:find("0") == 1 then - month = month:gsub("0", "") - end - local class = UnitClass("player") - local localdate = day .. "." .. month .. "." .. year - WeakAurasSaved.globalCharacterRegistry[UnitName("player")] = - { - ["Key"] = "", - ["Level"] = 0, - ["Date"] = localdate, - ["Class"] = class, - } - for i = 1, 4 do - for j = 1, GetContainerNumSlots(i) do - local name = GetContainerItemLink(i, j) or "" - if name:match("key") then - local parts = {strsplit(':', name)} - local level = tonumber(parts[3]); - local name = parts[7]:gsub("%]", "") - name = name:sub(2) - WeakAurasSaved.globalCharacterRegistry[UnitName("player")].Key = name - WeakAurasSaved.globalCharacterRegistry[UnitName("player")].Level = level - end - end - end -end - ---CHAT_MSG_WHISPER -function(e, msg, sender) - local sender = sender:match("%a+") - msg = msg:lower() - if msg == "dai key" and sender == UnitName("player") then - local output = "" - for k, v in pairs(WeakAurasSaved.globalCharacterRegistry) do - local name = k - output = output .. aura_env.classColor(v.Class) .. name .. "|r " .. v.Key .. " " .. v.Level .. " - " .. v.Date .. "\n" - end - aura_env.f1.text:SetText(output) - aura_env.f1:Show() - end - if msg == "ok" and sender == UnitName("player") then - aura_env.f1:Hide() - end -end - ---INIT -aura_env.classColor = function(class) - if class == "Death Knight" then return "|cFFC41F3B" elseif - class == "Demon Hunter" then return "|cFFA330C9" elseif - class == "Druid" then return "|cFFFF7D0A" elseif - class == "Hunter" then return "|cFFABD473" elseif - class == "Mage" then return "|cFF40C7EB" elseif - class == "Monk" then return "|cFF00FF96" elseif - class == "Paladin" then return "|cFFF58CBA" elseif - class == "Priest" then return "|cFFFFFFFF" elseif - class == "Rogue" then return "|cFFFFF569" elseif - class == "Shaman" then return "|cFF0070DE" elseif - class == "Warlock" then return "|cFF8787ED" elseif - class == "Warrior" then return "|cFFC79C6E" else - return "|cFF000000" end -end -aura_env.f1 = CreateFrame("Frame", nil, UIParent) -aura_env.f1:SetWidth(100) -aura_env.f1:SetHeight(100) -aura_env.f1:SetPoint("CENTER", 0, 100) -aura_env.f1.text = aura_env.f1:CreateFontString(nil, "ARTWORK") -aura_env.f1.text:SetFont("Fonts\\ARIALN.ttf", 26, "OUTLINE") -aura_env.f1.text:SetPoint("CENTER", 0, 0) -aura_env.f1:Hide() -if not WeakAurasSaved.globalCharacterRegistry then WeakAurasSaved.globalCharacterRegistry = {} end +--PLAYER_ENTERING_WORLD +function() + local date = date() + local year = date:match("%d%d%/%d%d/(%d%d)") + 2000 --01/07/(19) 14:36:42 + local month = date:match("(%d%d)") --(01)/07/19 14:36:42 + local day = date:match("%d%d%/(%d%d)") --01/(07)/19 14:36:42 + if day:find("0") == 1 then + day = day:gsub("0", "") + end + if month:find("0") == 1 then + month = month:gsub("0", "") + end + local class = UnitClass("player") + local localdate = day .. "." .. month .. "." .. year + WeakAurasSaved.globalCharacterRegistry[UnitName("player")] = + { + ["Key"] = "", + ["Level"] = 0, + ["Date"] = localdate, + ["Class"] = class, + } + for i = 1, 4 do + for j = 1, GetContainerNumSlots(i) do + local name = GetContainerItemLink(i, j) or "" + if name:match("key") then + local parts = {strsplit(':', name)} + local level = tonumber(parts[3]); + local name = parts[7]:gsub("%]", "") + name = name:sub(2) + WeakAurasSaved.globalCharacterRegistry[UnitName("player")].Key = name + WeakAurasSaved.globalCharacterRegistry[UnitName("player")].Level = level + end + end + end +end + +--CHAT_MSG_WHISPER +function(e, msg, sender) + local sender = sender:match("%a+") + msg = msg:lower() + if msg == "dai key" and sender == UnitName("player") then + local output = "" + for k, v in pairs(WeakAurasSaved.globalCharacterRegistry) do + local name = k + output = output .. aura_env.classColor(v.Class) .. name .. "|r " .. v.Key .. " " .. v.Level .. " - " .. v.Date .. "\n" + end + aura_env.f1.text:SetText(output) + aura_env.f1:Show() + end + if msg == "ok" and sender == UnitName("player") then + aura_env.f1:Hide() + end +end + +--INIT +aura_env.classColor = function(class) + if class == "Death Knight" then return "|cFFC41F3B" elseif + class == "Demon Hunter" then return "|cFFA330C9" elseif + class == "Druid" then return "|cFFFF7D0A" elseif + class == "Hunter" then return "|cFFABD473" elseif + class == "Mage" then return "|cFF40C7EB" elseif + class == "Monk" then return "|cFF00FF96" elseif + class == "Paladin" then return "|cFFF58CBA" elseif + class == "Priest" then return "|cFFFFFFFF" elseif + class == "Rogue" then return "|cFFFFF569" elseif + class == "Shaman" then return "|cFF0070DE" elseif + class == "Warlock" then return "|cFF8787ED" elseif + class == "Warrior" then return "|cFFC79C6E" else + return "|cFF000000" end +end +aura_env.f1 = CreateFrame("Frame", nil, UIParent) +aura_env.f1:SetWidth(100) +aura_env.f1:SetHeight(100) +aura_env.f1:SetPoint("CENTER", 0, 100) +aura_env.f1.text = aura_env.f1:CreateFontString(nil, "ARTWORK") +aura_env.f1.text:SetFont("Fonts\\ARIALN.ttf", 26, "OUTLINE") +aura_env.f1.text:SetPoint("CENTER", 0, 0) +aura_env.f1:Hide() +if not WeakAurasSaved.globalCharacterRegistry then WeakAurasSaved.globalCharacterRegistry = {} end diff --git a/NewAge/DHRogueSniffer/sniffer.lua b/WeakAuras/Projects/DHRogueSniffer/sniffer.lua similarity index 100% rename from NewAge/DHRogueSniffer/sniffer.lua rename to WeakAuras/Projects/DHRogueSniffer/sniffer.lua diff --git a/Complete Projects/Legion/DK Bone Shield Stacks.lua b/WeakAuras/Projects/DK Bone Shield Stacks.lua similarity index 96% rename from Complete Projects/Legion/DK Bone Shield Stacks.lua rename to WeakAuras/Projects/DK Bone Shield Stacks.lua index 65e2c18..80a711d 100644 --- a/Complete Projects/Legion/DK Bone Shield Stacks.lua +++ b/WeakAuras/Projects/DK Bone Shield Stacks.lua @@ -1,26 +1,26 @@ ---COMBAT_LOG_EVENT_UNFILTERED -function(e, ...) - local se = select(2, ...) - if se == "SPELL_AURA_APPLIED" or se == "SPELL_AURA_REFRESH" or se == "SPELL_AURA_APPLIED_DOSE" or se == "SPELL_AURA_REMOVED" or se == "SPELL_AURA_REMOVED_DOSE" then - local name = select(13, ...) - local caster = select(5, ...) - if caster == UnitName("player") and name == "Bone Shield" then - aura_env.stacks = 0 - for i = 1, 40 do - local spellID = select(11, UnitBuff("player", i)) - if spellID == 195181 then - aura_env.stacks = select(4, UnitBuff("player", i)) - return true - end - end - end - end -end - ---Duration -function() - return aura_env.stacks, 10, 1 -end - ---INIT +--COMBAT_LOG_EVENT_UNFILTERED +function(e, ...) + local se = select(2, ...) + if se == "SPELL_AURA_APPLIED" or se == "SPELL_AURA_REFRESH" or se == "SPELL_AURA_APPLIED_DOSE" or se == "SPELL_AURA_REMOVED" or se == "SPELL_AURA_REMOVED_DOSE" then + local name = select(13, ...) + local caster = select(5, ...) + if caster == UnitName("player") and name == "Bone Shield" then + aura_env.stacks = 0 + for i = 1, 40 do + local spellID = select(11, UnitBuff("player", i)) + if spellID == 195181 then + aura_env.stacks = select(4, UnitBuff("player", i)) + return true + end + end + end + end +end + +--Duration +function() + return aura_env.stacks, 10, 1 +end + +--INIT aura_env.stacks = 0 \ No newline at end of file diff --git a/Complete Projects/Legion/DPS HPS.lua b/WeakAuras/Projects/DPS HPS.lua similarity index 97% rename from Complete Projects/Legion/DPS HPS.lua rename to WeakAuras/Projects/DPS HPS.lua index a50dfba..d3306f3 100644 --- a/Complete Projects/Legion/DPS HPS.lua +++ b/WeakAuras/Projects/DPS HPS.lua @@ -1,51 +1,51 @@ -COMBAT_LOG_EVENT_UNFILTERED -function(...) - local subEvent = select(3, ...) or "" - local caster = select(6, ...) or "" - local amount = select(16, ...) or 0 - local spellName = select(14, ...) or "" - if subEvent == "SWING_DAMAGE" then - amount = select(13, ...) or 0 - end - if subEvent == "SPELL_HEAL" or subEvent == "SPELL_PERIODIC_HEAL" then - overheal = select(17, ...) or 0 - amount = amount - overheal - end - if caster == UnitName("player") and amount ~= nil and (subEvent == "SPELL_HEAL" or subEvent == "SPELL_PERIODIC_HEAL") then - aura_env.healtotal = aura_env.healtotal + amount - end - if caster == UnitName("player") and amount ~= nil and (subEvent == "SPELL_DAMAGE" or subEvent == "SPELL_PERIODIC_DAMAGE" or subEvent == "SWING_DAMAGE") then - aura_env.dmgtotal = aura_env.dmgtotal + amount - end -end - -DISPLAY -function() - local output = "" - local elapsed_time = GetTime() - aura_env.starttime - aura_env.dps = math.floor(aura_env.dmgtotal / elapsed_time) - aura_env.hps = math.floor(aura_env.healtotal / elapsed_time) - if aura_env.dps > 1e3 then - output = output .. "DPS: " .. math.floor(aura_env.dps / 1e3) .. "k " - elseif - aura_env.dps > 1e6 then - output = output .. "DPS: " .. (math.floor((aura_env.dps / 1e6) / 100) * 100) .. "M " - end - if aura_env.hps > 1e3 then - output = output .. "HPS: " .. math.floor(aura_env.hps / 1e3) .. "k " - elseif - aura_env.hps > 1e6 then - output = output .. "HPS: " .. (math.floor((aura_env.hps / 1e6) / 100) * 100) .. "M " - end - if WeakAuras.IsOptionsOpen() then - return "DPS: 985k HPS: 312k" - end - return output -end - -INIT -aura_env.starttime = GetTime() -aura_env.dps = 0 -aura_env.hps = 0 -aura_env.dmgtotal = 0 -aura_env.healtotal = 0 +COMBAT_LOG_EVENT_UNFILTERED +function(...) + local subEvent = select(3, ...) or "" + local caster = select(6, ...) or "" + local amount = select(16, ...) or 0 + local spellName = select(14, ...) or "" + if subEvent == "SWING_DAMAGE" then + amount = select(13, ...) or 0 + end + if subEvent == "SPELL_HEAL" or subEvent == "SPELL_PERIODIC_HEAL" then + overheal = select(17, ...) or 0 + amount = amount - overheal + end + if caster == UnitName("player") and amount ~= nil and (subEvent == "SPELL_HEAL" or subEvent == "SPELL_PERIODIC_HEAL") then + aura_env.healtotal = aura_env.healtotal + amount + end + if caster == UnitName("player") and amount ~= nil and (subEvent == "SPELL_DAMAGE" or subEvent == "SPELL_PERIODIC_DAMAGE" or subEvent == "SWING_DAMAGE") then + aura_env.dmgtotal = aura_env.dmgtotal + amount + end +end + +DISPLAY +function() + local output = "" + local elapsed_time = GetTime() - aura_env.starttime + aura_env.dps = math.floor(aura_env.dmgtotal / elapsed_time) + aura_env.hps = math.floor(aura_env.healtotal / elapsed_time) + if aura_env.dps > 1e3 then + output = output .. "DPS: " .. math.floor(aura_env.dps / 1e3) .. "k " + elseif + aura_env.dps > 1e6 then + output = output .. "DPS: " .. (math.floor((aura_env.dps / 1e6) / 100) * 100) .. "M " + end + if aura_env.hps > 1e3 then + output = output .. "HPS: " .. math.floor(aura_env.hps / 1e3) .. "k " + elseif + aura_env.hps > 1e6 then + output = output .. "HPS: " .. (math.floor((aura_env.hps / 1e6) / 100) * 100) .. "M " + end + if WeakAuras.IsOptionsOpen() then + return "DPS: 985k HPS: 312k" + end + return output +end + +INIT +aura_env.starttime = GetTime() +aura_env.dps = 0 +aura_env.hps = 0 +aura_env.dmgtotal = 0 +aura_env.healtotal = 0 diff --git a/NewAge/DamageIntake/export b/WeakAuras/Projects/DamageIntake/export similarity index 100% rename from NewAge/DamageIntake/export rename to WeakAuras/Projects/DamageIntake/export diff --git a/NewAge/DamageIntake/init.lua b/WeakAuras/Projects/DamageIntake/init.lua similarity index 100% rename from NewAge/DamageIntake/init.lua rename to WeakAuras/Projects/DamageIntake/init.lua diff --git a/NewAge/DamageIntake/trigger.lua b/WeakAuras/Projects/DamageIntake/trigger.lua similarity index 100% rename from NewAge/DamageIntake/trigger.lua rename to WeakAuras/Projects/DamageIntake/trigger.lua diff --git a/NewAge/DamageIntake/vars.lua b/WeakAuras/Projects/DamageIntake/vars.lua similarity index 100% rename from NewAge/DamageIntake/vars.lua rename to WeakAuras/Projects/DamageIntake/vars.lua diff --git a/Complete Projects/Legion/Dangerous Spells!.lua b/WeakAuras/Projects/Dangerous Spells!.lua similarity index 97% rename from Complete Projects/Legion/Dangerous Spells!.lua rename to WeakAuras/Projects/Dangerous Spells!.lua index e292fda..32f30dd 100644 --- a/Complete Projects/Legion/Dangerous Spells!.lua +++ b/WeakAuras/Projects/Dangerous Spells!.lua @@ -1,18 +1,18 @@ -function() - local spells = {"Deceptive Strike", "Very Sinister Strike", "Raven Strike", "Coup de Grace", "Lantern of Darkness", "Power Attack", "Holy Radiance", "Thunderous Bolt"} - local output = "" - for i = 1, 40 do - local name = UnitCastingInfo("nameplate" .. i) - if name ~= nil then - for j = 1, table.getn(spells) do - if name == spells[j] then - local _, _, _, _, starTime, endTime = UnitCastingInfo("nameplate" .. i) - local castRemaining = endTime / 1000 - GetTime() - castRemaining = math.floor(castRemaining * 100) / 100 - output = output .. name .. " " .. castRemaining .. "\n" - end - end - end - end - return output -end +function() + local spells = {"Deceptive Strike", "Very Sinister Strike", "Raven Strike", "Coup de Grace", "Lantern of Darkness", "Power Attack", "Holy Radiance", "Thunderous Bolt"} + local output = "" + for i = 1, 40 do + local name = UnitCastingInfo("nameplate" .. i) + if name ~= nil then + for j = 1, table.getn(spells) do + if name == spells[j] then + local _, _, _, _, starTime, endTime = UnitCastingInfo("nameplate" .. i) + local castRemaining = endTime / 1000 - GetTime() + castRemaining = math.floor(castRemaining * 100) / 100 + output = output .. name .. " " .. castRemaining .. "\n" + end + end + end + end + return output +end diff --git a/WIP/Dargul Timer(UNTESTED).lua b/WeakAuras/Projects/Dargul Timer(UNTESTED).lua similarity index 97% rename from WIP/Dargul Timer(UNTESTED).lua rename to WeakAuras/Projects/Dargul Timer(UNTESTED).lua index b3ea64e..2fa98cf 100644 --- a/WIP/Dargul Timer(UNTESTED).lua +++ b/WeakAuras/Projects/Dargul Timer(UNTESTED).lua @@ -1,13 +1,13 @@ -function() - if UnitExists("target") and UnitName("target"):match("Dargul") then - local name,_,_,startTimeMS,endTimeMS,= UnitCastingInfo("target") - if name == "Molten Crash" then - local name,_,_,_,_,expirationTime = UnitBuff("player", "Shield of the Righteous") - expirationTime = expirationTime * 1000 - local time = GetTime() * 1000 - if endTimeMS > expirationTime then - return true - end - end - end +function() + if UnitExists("target") and UnitName("target"):match("Dargul") then + local name,_,_,startTimeMS,endTimeMS,= UnitCastingInfo("target") + if name == "Molten Crash" then + local name,_,_,_,_,expirationTime = UnitBuff("player", "Shield of the Righteous") + expirationTime = expirationTime * 1000 + local time = GetTime() * 1000 + if endTimeMS > expirationTime then + return true + end + end + end end \ No newline at end of file diff --git a/Complete Projects/Legion/DavyStone.lua b/WeakAuras/Projects/DavyStone.lua similarity index 98% rename from Complete Projects/Legion/DavyStone.lua rename to WeakAuras/Projects/DavyStone.lua index b9bd312..a581a8f 100644 --- a/Complete Projects/Legion/DavyStone.lua +++ b/WeakAuras/Projects/DavyStone.lua @@ -1,76 +1,76 @@ ---[[ -[10:59 PM] Dump: value=C_Scenario.GetCriteriaInfo(4) -[10:59 PM] [1]="Enemy Forces", -[10:59 PM] [2]=0, -[10:59 PM] [3]=false, -[10:59 PM] [4]=0, -[10:59 PM] [5]=150, -[10:59 PM] [6]=0, -[10:59 PM] [7]=0, -[10:59 PM] [8]="0%", -[10:59 PM] [9]=0, -[10:59 PM] [10]=0, -[10:59 PM] [11]=0, -[10:59 PM] [12]=false, -[10:59 PM] [13]=true -/dump UnitAffectingCombat("target") -[11:05 PM] [1]="Creature-0-5-1492-0-97043-0000007794" - -local criteriaString, _, _, quantity, totalQuantity, _, _, quantityString, _, _, _, _, isWeightedProgress = C_Scenario.GetCriteriaInfo(criteriaIndex) - -Idea is to find % for pulled mob(s) and add to current % display both -]] - ---ON SOME EVENTS -function() - --Very inefficient maybe fix later who cares - local scenarioType = select(10, C_Scenario.GetInfo()) - if scenarioType == 1 then - local numCriteria = select(3, C_Scenario.GetStepInfo()) - for i = 1, numCriteria do - local name = C_Scenario.GetCriteriaInfo(i) - if name == "Enemy Forces" then - aura_env.davystone.totalProgress = select(5, C_Scenario.GetCriteriaInfo(i)) - aura_env.davystone.currentProgress = select(8, C_Scenario.GetCriteriaInfo(i)) - aura_env.davystone.currentProgress = aura_env.davystone.currentProgress:gsub("%%", "") - aura_env.davystone.currentProgress = tonumber(aura_env.davystone.currentProgress) - aura_env.davystone.newProgress = select(8, C_Scenario.GetCriteriaInfo(i)) - aura_env.davystone.newProgress = aura_env.davystone.newProgress:gsub("%%", "") - aura_env.davystone.newProgress = tonumber(aura_env.davystone.newProgress) - end - end - for i = 1, 40 do - local unit = "nameplate" .. i - if UnitAffectingCombat(unit) then - local GUID = UnitGUID(unit) - local ID = GUID:match("%w+%-%d*%-%d*%-%d*%-%d*-(%d*)") - ID = tonumber(ID) - if aura_env.IDthing[ID] then - local progress = aura_env.IDthing[ID] - aura_env.davystone.newProgress = aura_env.davystone.newProgress + progress - end - end - end - end -end - ---DISPLAY -function() - if aura_env.davystone.currentProgress and aura_env.davystone.totalProgress and aura_env.davystone.newProgress then - return aura_env.round((aura_env.davystone.currentProgress / aura_env.davystone.totalProgress) * 100, 2) .. " " .. aura_env.round((aura_env.davystone.newProgress / aura_env.davystone.totalProgress) * 100, 2) - end -end - ---INIT -aura_env.davystone = {} -aura_env.IDthing = { - [104277] = 4, [102253] = 4, [98954] = 4, [97185] = 10, [113537] = 10, [101839] = 4, [104246] = 4, [104278] = 10, [97170] = 4, [113506] = 4, [105617] = 4, [105633] = 4, [102095] = 4, [105952] = 6, [97043] = 4, [102430] = 1, [98366] = 4, [95832] = 2, [91784] = 1, [104295] = 1, [102781] = 4, [102287] = 10, [98733] = 4, [102351] = 1, [96247] = 1, [111563] = 4, [95769] = 4, [113699] = 8, [91785] = 2, [100216] = 4, [97172] = 1, [100248] = 4, [114289] = 4, [105651] = 4, [105699] = 3, [105715] = 4, [98368] = 4, [95834] = 2, [99675] = 4, [91786] = 4, [98177] = 12, [97173] = 4, [100249] = 1, [105636] = 4, [95771] = 4, [96584] = 4, [97365] = 4, [91006] = 4, [91787] = 2, [109908] = 10, [96664] = 2, [105876] = 1, [95947] = 4, [99804] = 2, [95772] = 4, [99358] = 4, [101414] = 2, [106785] = 1, [104251] = 4, [100713] = 4, [105845] = 1, [98243] = 4, [98275] = 4, [96028] = 4, [99359] = 3, [105766] = 1, [91008] = 4, [91789] = 4, [98435] = 7, [98706] = 6, [100539] = 4, [98770] = 4, [105703] = 1, [102404] = 4, [99360] = 9, [97097] = 4, [91790] = 4, [98691] = 4, [102277] = 4, [98293] = 1, [98813] = 4, [105720] = 4, [91001] = 4, [101074] = 1, [100532] = 1, [99678] = 4, [104270] = 8, [101991] = 4, [98732] = 1, [98963] = 1, [91792] = 10, [100526] = 4, [98246] = 4, [106546] = 4, [98533] = 10, [105705] = 4, [96015] = 4, [104300] = 4, [113536] = 10, [92610] = 4, [99649] = 12, [98900] = 4, [98406] = 4, [98677] = 1, [91808] = 1, [92350] = 4, [102295] = 10, [102566] = 12, [113998] = 4, [97163] = 3, [102104] = 4, [102375] = 3, [105706] = 8, [95861] = 4, [97068] = 5, [96574] = 5, [97171] = 10, [102094] = 4, [102232] = 4, [99188] = 4, [99307] = 12, [105682] = 8, [92538] = 1, [100527] = 3, [102583] = 4, [96587] = 4, [98280] = 4, [98370] = 4, [98538] = 10, [106786] = 1, [113111] = 1, [91783] = 4, [99956] = 4, [114712] = 3, [91332] = 4, [91794] = 1, [96657] = 12, [98426] = 4, [97197] = 2, [91796] = 10, [98759] = 4, [105915] = 4, [98919] = 4, [99908] = 1, [98362] = 10, [95779] = 10, [99365] = 4, [99891] = 5, [101437] = 1, [90998] = 4, [106059] = 4, [98425] = 4, [96640] = 2, [97182] = 6, [98728] = 7, [95939] = 10, [100529] = 1, [98776] = 4, [105422] = 1, [98792] = 4, [90997] = 4, [105629] = 1, [99366] = 4, [97087] = 2, [101438] = 4, [97119] = 1, [96608] = 2, [98681] = 6, [97677] = 1, [96480] = 1, [102584] = 4, [95842] = 2, [100364] = 4, [101072] = 1, [94968] = 5, [98973] = 1, [102788] = 4, [96934] = 2, [98756] = 4, [107288] = 1, [91793] = 1, [91000] = 8, [91781] = 4, [91782] = 10, [97678] = 8, [98926] = 4, [97200] = 4, [100531] = 8, [92387] = 4, [99033] = 4, [95920] = 2, [98810] = 6, [95766] = 4, [105921] = 4, [96677] = 2, [101679] = 4, [114288] = 4, [96611] = 2, [106787] = 1 -} -aura_env.round = function(var, n) - if (n) then - var = math.floor((var * 10 ^ n) + 0.5) / (10 ^ n) - else - var = math.floor(var + 0.5) - end - return var -end +--[[ +[10:59 PM] Dump: value=C_Scenario.GetCriteriaInfo(4) +[10:59 PM] [1]="Enemy Forces", +[10:59 PM] [2]=0, +[10:59 PM] [3]=false, +[10:59 PM] [4]=0, +[10:59 PM] [5]=150, +[10:59 PM] [6]=0, +[10:59 PM] [7]=0, +[10:59 PM] [8]="0%", +[10:59 PM] [9]=0, +[10:59 PM] [10]=0, +[10:59 PM] [11]=0, +[10:59 PM] [12]=false, +[10:59 PM] [13]=true +/dump UnitAffectingCombat("target") +[11:05 PM] [1]="Creature-0-5-1492-0-97043-0000007794" + +local criteriaString, _, _, quantity, totalQuantity, _, _, quantityString, _, _, _, _, isWeightedProgress = C_Scenario.GetCriteriaInfo(criteriaIndex) + +Idea is to find % for pulled mob(s) and add to current % display both +]] + +--ON SOME EVENTS +function() + --Very inefficient maybe fix later who cares + local scenarioType = select(10, C_Scenario.GetInfo()) + if scenarioType == 1 then + local numCriteria = select(3, C_Scenario.GetStepInfo()) + for i = 1, numCriteria do + local name = C_Scenario.GetCriteriaInfo(i) + if name == "Enemy Forces" then + aura_env.davystone.totalProgress = select(5, C_Scenario.GetCriteriaInfo(i)) + aura_env.davystone.currentProgress = select(8, C_Scenario.GetCriteriaInfo(i)) + aura_env.davystone.currentProgress = aura_env.davystone.currentProgress:gsub("%%", "") + aura_env.davystone.currentProgress = tonumber(aura_env.davystone.currentProgress) + aura_env.davystone.newProgress = select(8, C_Scenario.GetCriteriaInfo(i)) + aura_env.davystone.newProgress = aura_env.davystone.newProgress:gsub("%%", "") + aura_env.davystone.newProgress = tonumber(aura_env.davystone.newProgress) + end + end + for i = 1, 40 do + local unit = "nameplate" .. i + if UnitAffectingCombat(unit) then + local GUID = UnitGUID(unit) + local ID = GUID:match("%w+%-%d*%-%d*%-%d*%-%d*-(%d*)") + ID = tonumber(ID) + if aura_env.IDthing[ID] then + local progress = aura_env.IDthing[ID] + aura_env.davystone.newProgress = aura_env.davystone.newProgress + progress + end + end + end + end +end + +--DISPLAY +function() + if aura_env.davystone.currentProgress and aura_env.davystone.totalProgress and aura_env.davystone.newProgress then + return aura_env.round((aura_env.davystone.currentProgress / aura_env.davystone.totalProgress) * 100, 2) .. " " .. aura_env.round((aura_env.davystone.newProgress / aura_env.davystone.totalProgress) * 100, 2) + end +end + +--INIT +aura_env.davystone = {} +aura_env.IDthing = { + [104277] = 4, [102253] = 4, [98954] = 4, [97185] = 10, [113537] = 10, [101839] = 4, [104246] = 4, [104278] = 10, [97170] = 4, [113506] = 4, [105617] = 4, [105633] = 4, [102095] = 4, [105952] = 6, [97043] = 4, [102430] = 1, [98366] = 4, [95832] = 2, [91784] = 1, [104295] = 1, [102781] = 4, [102287] = 10, [98733] = 4, [102351] = 1, [96247] = 1, [111563] = 4, [95769] = 4, [113699] = 8, [91785] = 2, [100216] = 4, [97172] = 1, [100248] = 4, [114289] = 4, [105651] = 4, [105699] = 3, [105715] = 4, [98368] = 4, [95834] = 2, [99675] = 4, [91786] = 4, [98177] = 12, [97173] = 4, [100249] = 1, [105636] = 4, [95771] = 4, [96584] = 4, [97365] = 4, [91006] = 4, [91787] = 2, [109908] = 10, [96664] = 2, [105876] = 1, [95947] = 4, [99804] = 2, [95772] = 4, [99358] = 4, [101414] = 2, [106785] = 1, [104251] = 4, [100713] = 4, [105845] = 1, [98243] = 4, [98275] = 4, [96028] = 4, [99359] = 3, [105766] = 1, [91008] = 4, [91789] = 4, [98435] = 7, [98706] = 6, [100539] = 4, [98770] = 4, [105703] = 1, [102404] = 4, [99360] = 9, [97097] = 4, [91790] = 4, [98691] = 4, [102277] = 4, [98293] = 1, [98813] = 4, [105720] = 4, [91001] = 4, [101074] = 1, [100532] = 1, [99678] = 4, [104270] = 8, [101991] = 4, [98732] = 1, [98963] = 1, [91792] = 10, [100526] = 4, [98246] = 4, [106546] = 4, [98533] = 10, [105705] = 4, [96015] = 4, [104300] = 4, [113536] = 10, [92610] = 4, [99649] = 12, [98900] = 4, [98406] = 4, [98677] = 1, [91808] = 1, [92350] = 4, [102295] = 10, [102566] = 12, [113998] = 4, [97163] = 3, [102104] = 4, [102375] = 3, [105706] = 8, [95861] = 4, [97068] = 5, [96574] = 5, [97171] = 10, [102094] = 4, [102232] = 4, [99188] = 4, [99307] = 12, [105682] = 8, [92538] = 1, [100527] = 3, [102583] = 4, [96587] = 4, [98280] = 4, [98370] = 4, [98538] = 10, [106786] = 1, [113111] = 1, [91783] = 4, [99956] = 4, [114712] = 3, [91332] = 4, [91794] = 1, [96657] = 12, [98426] = 4, [97197] = 2, [91796] = 10, [98759] = 4, [105915] = 4, [98919] = 4, [99908] = 1, [98362] = 10, [95779] = 10, [99365] = 4, [99891] = 5, [101437] = 1, [90998] = 4, [106059] = 4, [98425] = 4, [96640] = 2, [97182] = 6, [98728] = 7, [95939] = 10, [100529] = 1, [98776] = 4, [105422] = 1, [98792] = 4, [90997] = 4, [105629] = 1, [99366] = 4, [97087] = 2, [101438] = 4, [97119] = 1, [96608] = 2, [98681] = 6, [97677] = 1, [96480] = 1, [102584] = 4, [95842] = 2, [100364] = 4, [101072] = 1, [94968] = 5, [98973] = 1, [102788] = 4, [96934] = 2, [98756] = 4, [107288] = 1, [91793] = 1, [91000] = 8, [91781] = 4, [91782] = 10, [97678] = 8, [98926] = 4, [97200] = 4, [100531] = 8, [92387] = 4, [99033] = 4, [95920] = 2, [98810] = 6, [95766] = 4, [105921] = 4, [96677] = 2, [101679] = 4, [114288] = 4, [96611] = 2, [106787] = 1 +} +aura_env.round = function(var, n) + if (n) then + var = math.floor((var * 10 ^ n) + 0.5) / (10 ^ n) + else + var = math.floor(var + 0.5) + end + return var +end diff --git a/Complete Projects/Legion/DavyStone2.lua b/WeakAuras/Projects/DavyStone2.lua similarity index 97% rename from Complete Projects/Legion/DavyStone2.lua rename to WeakAuras/Projects/DavyStone2.lua index 59d87e4..241aaad 100644 --- a/Complete Projects/Legion/DavyStone2.lua +++ b/WeakAuras/Projects/DavyStone2.lua @@ -1,411 +1,411 @@ ---ON SOME EVENTS ---Maybe make trigger on ~~party kill?~~ threat update? ++ namepalteadd/remove - ---[[ -1) On threat update calculate new % -2) On namepalte added look for threat and calculate new % -3) Organize into table with GUIDs -4) On nameplate remove remove from table // PARTY_KILL -5) Make more table for current pull, projected pull and projected total -6) Organize mobs into groups before bosses or before other groups big ??? -]] - ---[[ -1) UNIT_THREAT_LIST_UPDATE (e, u) -Get GUID -Put into table -ggez - -2) NAME_PLATE_UNIT_ADDED NAME_PLATE_UNIT_REMOVED (e, u) -UnitDetailedThreatSituation("player", "target") empty result for no threat - -[02:49 PM] Dump: value=UnitDetailedThreatSituation("player", "target") -[02:49 PM] [1]=true, --Boolean - returns true if the unit is primary threat target of the mob (is tanking), or false otherwise -[02:49 PM] [2]=3, --Integer - returns the threat status for the unit on the mob, or nil if unit is not on mob's threat table. (3 = securely tanking, 2 = insecurely tanking, 1 = not tanking but higher threat than tank, 0 = not tanking and lower threat than tank) -[02:49 PM] [3]=100, --Number - returns the unit's threat on the mob as a percentage of the amount required to pull aggro, scaled according to the unit's range from the mob. At 100 the unit will pull aggro. Returns 100 if the unit is tanking and nil if the unit is not on the mob's threat list. -[02:49 PM] [4]=255, --Number - returns the unit's threat as a percentage of the tank's current threat. Returns nil if the unit is not on the mob's threat list. -[02:49 PM] [5]=0 --Number - returns the unit's total threat on the mob -for threat - -3) can say table 1: GUID in current pull - use 1) and 2) -table 2: GUID to be pull on mouseover - use previous work -table 3: global GUID to be pull - reset with GUID of boss or pre boss maybe? -look for PARTY_KILL se in CLEU maybe? (for progress table ?) -]] - ---[[ -Random garbage info - -[10:59 AM] Dump: value=C_Scenario.GetInfo() -[10:59 AM] [1]="Black Rook Hold", -[10:59 AM] [2]=1, -[10:59 AM] [3]=1, -[10:59 AM] [4]=3, -[10:59 AM] [5]=false, -[10:59 AM] [6]=false, -[10:59 AM] [7]=false, -[10:59 AM] [8]=0, -[10:59 AM] [9]=0, -[10:59 AM] [10]=1, -[10:59 AM] [11]="UNKNOWN" - -[11:01 AM] Dump: value=C_Scenario.GetStepInfo() -[11:01 AM] [1]="Black Rook Hold", -[11:01 AM] [2]="Deal with the restless spirits of Black Rook Hold.", -[11:01 AM] [3]=5, --Num criteria -[11:01 AM] [4]=false, -[11:01 AM] [5]=false, -[11:01 AM] [6]=false, -[11:01 AM] [7]=0, -[11:01 AM] [8]={ -[11:01 AM] }, -[11:01 AM] [10]=0 - -/run local numCriteria = select(3, C_Scenario.GetStepInfo()); for i = 1, numCriteria do print(C_Scenario.GetCriteriaInfo(i)) end -[11:02 AM] Amalgam of Souls 165 false 0 1 0 1832 0 29464 0 0 false false -[11:02 AM] Illysanna Ravencrest 165 false 0 1 0 1833 0 29465 0 0 false false -[11:02 AM] Smashspite the Hateful 165 false 0 1 0 1834 0 29466 0 0 false false -[11:02 AM] Lord Kurtalos Ravencrest 165 false 0 1 0 1835 0 29467 0 0 false false -[11:02 AM] Enemy Forces 0 false 0 360 0 0 0% 0 0 0 false true - -[11:06 AM] Dump: value=C_Scenario.GetCriteriaInfo(5) -[11:06 AM] [1]="Enemy Forces", -[11:06 AM] [2]=0, -[11:06 AM] [3]=false, -[11:06 AM] [4]=0, -[11:06 AM] [5]=360, -[11:06 AM] [6]=0, -[11:06 AM] [7]=0, -[11:06 AM] [8]="0%", -[11:06 AM] [9]=0, -[11:06 AM] [10]=0, -[11:06 AM] [11]=0, -[11:06 AM] [12]=false, -[11:06 AM] [13]=true --Weighted progress? -]] - ---[[ -So far got the mouseover counting working -Get total mob # from C_Scenario.GetCriteriaInfo(5 -Add mouseover to # -Add pulls & nameplate fuckery from above into same # -Maybe use global table for all -Should be easy -Maybe add textures and attach to namepaltes of planned units??? Pog POG -]] -function() - --Very inefficient maybe fix later who cares - local scenarioType = select(10, C_Scenario.GetInfo()) - if scenarioType == 1 then - local numCriteria = select(3, C_Scenario.GetStepInfo()) - for i = 1, numCriteria do - local name = C_Scenario.GetCriteriaInfo(i) - if name == "Enemy Forces" then - aura_env.davystone.totalProgress = select(5, C_Scenario.GetCriteriaInfo(i)) - aura_env.davystone.currentProgress = select(8, C_Scenario.GetCriteriaInfo(i)) - aura_env.davystone.currentProgress = aura_env.davystone.currentProgress:gsub("%%", "") - aura_env.davystone.currentProgress = tonumber(aura_env.davystone.currentProgress) - aura_env.davystone.newProgress = select(8, C_Scenario.GetCriteriaInfo(i)) - aura_env.davystone.newProgress = aura_env.davystone.newProgress:gsub("%%", "") - aura_env.davystone.newProgress = tonumber(aura_env.davystone.newProgress) - end - end - for i = 1, 40 do - local unit = "nameplate" .. i - if UnitAffectingCombat(unit) then - local GUID = UnitGUID(unit) - local ID = GUID:match("%w+%-%d*%-%d*%-%d*%-%d*-(%d*)") - ID = tonumber(ID) - if aura_env.IDthing[ID] then - local progress = aura_env.IDthing[ID] - aura_env.davystone.newProgress = aura_env.davystone.newProgress + progress - end - end - end - end -end - ---DISPLAY -function() - if aura_env.davystone.currentProgress and aura_env.davystone.totalProgress and aura_env.davystone.newProgress then - return aura_env.round((aura_env.davystone.currentProgress / aura_env.davystone.totalProgress) * 100, 2) .. " " .. aura_env.round((aura_env.davystone.newProgress / aura_env.davystone.totalProgress) * 100, 2) - end -end - ---INIT -local OnTooltipSetUnit = function() - print("yeet") - local name, unit = tooltip:GetUnit() - local guid = unit and UnitGUID(unit) - if guid then - local type, zero, server_id, instance_id, zone_uid, npc_id, spawn_uid = strsplit("-", guid) - npc_id = tonumber(npc_id) - print(npcID) - end -end -GameTooltip:HookScript("OnTooltipSetUnit", OnTooltipSetUnit) -aura_env.davystone = {} -aura_env.IDthing = { - [104277] = 4, [102253] = 4, [98954] = 4, [97185] = 10, [113537] = 10, [101839] = 4, [104246] = 4, [104278] = 10, [97170] = 4, [113506] = 4, [105617] = 4, [105633] = 4, [102095] = 4, [105952] = 6, [97043] = 4, [102430] = 1, [98366] = 4, [95832] = 2, [91784] = 1, [104295] = 1, [102781] = 4, [102287] = 10, [98733] = 4, [102351] = 1, [96247] = 1, [111563] = 4, [95769] = 4, [113699] = 8, [91785] = 2, [100216] = 4, [97172] = 1, [100248] = 4, [114289] = 4, [105651] = 4, [105699] = 3, [105715] = 4, [98368] = 4, [95834] = 2, [99675] = 4, [91786] = 4, [98177] = 12, [97173] = 4, [100249] = 1, [105636] = 4, [95771] = 4, [96584] = 4, [97365] = 4, [91006] = 4, [91787] = 2, [109908] = 10, [96664] = 2, [105876] = 1, [95947] = 4, [99804] = 2, [95772] = 4, [99358] = 4, [101414] = 2, [106785] = 1, [104251] = 4, [100713] = 4, [105845] = 1, [98243] = 4, [98275] = 4, [96028] = 4, [99359] = 3, [105766] = 1, [91008] = 4, [91789] = 4, [98435] = 7, [98706] = 6, [100539] = 4, [98770] = 4, [105703] = 1, [102404] = 4, [99360] = 9, [97097] = 4, [91790] = 4, [98691] = 4, [102277] = 4, [98293] = 1, [98813] = 4, [105720] = 4, [91001] = 4, [101074] = 1, [100532] = 1, [99678] = 4, [104270] = 8, [101991] = 4, [98732] = 1, [98963] = 1, [91792] = 10, [100526] = 4, [98246] = 4, [106546] = 4, [98533] = 10, [105705] = 4, [96015] = 4, [104300] = 4, [113536] = 10, [92610] = 4, [99649] = 12, [98900] = 4, [98406] = 4, [98677] = 1, [91808] = 1, [92350] = 4, [102295] = 10, [102566] = 12, [113998] = 4, [97163] = 3, [102104] = 4, [102375] = 3, [105706] = 8, [95861] = 4, [97068] = 5, [96574] = 5, [97171] = 10, [102094] = 4, [102232] = 4, [99188] = 4, [99307] = 12, [105682] = 8, [92538] = 1, [100527] = 3, [102583] = 4, [96587] = 4, [98280] = 4, [98370] = 4, [98538] = 10, [106786] = 1, [113111] = 1, [91783] = 4, [99956] = 4, [114712] = 3, [91332] = 4, [91794] = 1, [96657] = 12, [98426] = 4, [97197] = 2, [91796] = 10, [98759] = 4, [105915] = 4, [98919] = 4, [99908] = 1, [98362] = 10, [95779] = 10, [99365] = 4, [99891] = 5, [101437] = 1, [90998] = 4, [106059] = 4, [98425] = 4, [96640] = 2, [97182] = 6, [98728] = 7, [95939] = 10, [100529] = 1, [98776] = 4, [105422] = 1, [98792] = 4, [90997] = 4, [105629] = 1, [99366] = 4, [97087] = 2, [101438] = 4, [97119] = 1, [96608] = 2, [98681] = 6, [97677] = 1, [96480] = 1, [102584] = 4, [95842] = 2, [100364] = 4, [101072] = 1, [94968] = 5, [98973] = 1, [102788] = 4, [96934] = 2, [98756] = 4, [107288] = 1, [91793] = 1, [91000] = 8, [91781] = 4, [91782] = 10, [97678] = 8, [98926] = 4, [97200] = 4, [100531] = 8, [92387] = 4, [99033] = 4, [95920] = 2, [98810] = 6, [95766] = 4, [105921] = 4, [96677] = 2, [101679] = 4, [114288] = 4, [96611] = 2, [106787] = 1 -} -aura_env.round = function(var, n) - if (n) then - var = math.floor((var * 10 ^ n) + 0.5) / (10 ^ n) - else - var = math.floor(var + 0.5) - end - return var -end - ---PART OF DIFFERENT AURA ---UPDATE_MOUSEOVER_UNIT -function(e) - if not aura_env.time then - aura_env.time = debugprofilestop() - end - if not aura_env.mobs then - aura_env.mobs = {} - end - if not aura_env.mobC then - aura_env.mobC = 0 - end - local u = "mouseover" - local guid = UnitGUID(u) - local npc_id = guid:match("%w+%-%d*%-%d*%-%d*%-%d*-(%d*)") - npc_id = tonumber(npc_id) - aura_env.time = debugprofilestop() - --print("aura", guid, aura_env.mobs[guid]) - if npc_id and aura_env.IDthing[npc_id] then - if guid and not aura_env.mouseoverPull[guid] then - aura_env.mouseoverPull[guid] = aura_env.IDthing[npc_id] - aura_env.mobC = aura_env.mobC + 1 - end - end - --This works for now -end - ---EVERY FRAME -function() - if aura_env.time and aura_env.time > 0 then - --print(aura_env.mobC) - --DevTools_Dump(aura_env.mobs) - local totalMouseoverPull = 0 - for k, v in pairs(aura_env.mouseoverPull) do - totalMouseoverPull = totalMouseoverPull + v - print(totalMouseoverPull) - end - if debugprofilestop() - aura_env.time > 1500 then - aura_env.time = 0 - aura_env.mouseoverPull = {} - aura_env.mobC = 0 - print("RESET", aura_env.mobC) - DevTools_Dump(aura_env.mobs) - end - end -end - ---INIT -aura_env.davystone = {} -aura_env.currentPull = {} -aura_env.mouseoverPull = {} -aura_env.IDthing = { - [104277] = 4, - [102253] = 4, - [98954] = 4, - [97185] = 10, - [113537] = 10, - [101839] = 4, - [104246] = 4, - [104278] = 10, - [97170] = 4, - [113506] = 4, - [105617] = 4, - [105633] = 4, - [102095] = 4, - [105952] = 6, - [97043] = 4, - [102430] = 1, - [98366] = 4, - [95832] = 2, - [91784] = 1, - [104295] = 1, - [102781] = 4, - [102287] = 10, - [98733] = 4, - [102351] = 1, - [96247] = 1, - [111563] = 4, - [95769] = 4, - [113699] = 8, - [91785] = 2, - [100216] = 4, - [97172] = 1, - [100248] = 4, - [114289] = 4, - [105651] = 4, - [105699] = 3, - [105715] = 4, - [98368] = 4, - [95834] = 2, - [99675] = 4, - [91786] = 4, - [98177] = 12, - [97173] = 4, - [100249] = 1, - [105636] = 4, - [95771] = 4, - [96584] = 4, - [97365] = 4, - [91006] = 4, - [91787] = 2, - [109908] = 10, - [96664] = 2, - [105876] = 1, - [95947] = 4, - [99804] = 2, - [95772] = 4, - [99358] = 4, - [101414] = 2, - [106785] = 1, - [104251] = 4, - [100713] = 4, - [105845] = 1, - [98243] = 4, - [98275] = 4, - [96028] = 4, - [99359] = 3, - [105766] = 1, - [91008] = 4, - [91789] = 4, - [98435] = 7, - [98706] = 6, - [100539] = 4, - [98770] = 4, - [105703] = 1, - [102404] = 4, - [99360] = 9, - [97097] = 4, - [91790] = 4, - [98691] = 4, - [102277] = 4, - [98293] = 1, - [98813] = 4, - [105720] = 4, - [91001] = 4, - [101074] = 1, - [100532] = 1, - [99678] = 4, - [104270] = 8, - [101991] = 4, - [98732] = 1, - [98963] = 1, - [91792] = 10, - [100526] = 4, - [98246] = 4, - [106546] = 4, - [98533] = 10, - [105705] = 4, - [96015] = 4, - [104300] = 4, - [113536] = 10, - [92610] = 4, - [99649] = 12, - [98900] = 4, - [98406] = 4, - [98677] = 1, - [91808] = 1, - [92350] = 4, - [102295] = 10, - [102566] = 12, - [113998] = 4, - [97163] = 3, - [102104] = 4, - [102375] = 3, - [105706] = 8, - [95861] = 4, - [97068] = 5, - [96574] = 5, - [97171] = 10, - [102094] = 4, - [102232] = 4, - [99188] = 4, - [99307] = 12, - [105682] = 8, - [92538] = 1, - [100527] = 3, - [102583] = 4, - [96587] = 4, - [98280] = 4, - [98370] = 4, - [98538] = 10, - [106786] = 1, - [113111] = 1, - [91783] = 4, - [99956] = 4, - [114712] = 3, - [91332] = 4, - [91794] = 1, - [96657] = 12, - [98426] = 4, - [97197] = 2, - [91796] = 10, - [98759] = 4, - [105915] = 4, - [98919] = 4, - [99908] = 1, - [98362] = 10, - [95779] = 10, - [99365] = 4, - [99891] = 5, - [101437] = 1, - [90998] = 4, - [106059] = 4, - [98425] = 4, - [96640] = 2, - [97182] = 6, - [98728] = 7, - [95939] = 10, - [100529] = 1, - [98776] = 4, - [105422] = 1, - [98792] = 4, - [90997] = 4, - [105629] = 1, - [99366] = 4, - [97087] = 2, - [101438] = 4, - [97119] = 1, - [96608] = 2, - [98681] = 6, - [97677] = 1, - [96480] = 1, - [102584] = 4, - [95842] = 2, - [100364] = 4, - [101072] = 1, - [94968] = 5, - [98973] = 1, - [102788] = 4, - [96934] = 2, - [98756] = 4, - [107288] = 1, - [91793] = 1, - [91000] = 8, - [91781] = 4, - [91782] = 10, - [97678] = 8, - [98926] = 4, - [97200] = 4, - [100531] = 8, - [92387] = 4, - [99033] = 4, - [95920] = 2, - [98810] = 6, - [95766] = 4, - [105921] = 4, - [96677] = 2, - [101679] = 4, - [114288] = 4, - [96611] = 2, - [106787] = 1 -} +--ON SOME EVENTS +--Maybe make trigger on ~~party kill?~~ threat update? ++ namepalteadd/remove + +--[[ +1) On threat update calculate new % +2) On namepalte added look for threat and calculate new % +3) Organize into table with GUIDs +4) On nameplate remove remove from table // PARTY_KILL +5) Make more table for current pull, projected pull and projected total +6) Organize mobs into groups before bosses or before other groups big ??? +]] + +--[[ +1) UNIT_THREAT_LIST_UPDATE (e, u) +Get GUID +Put into table +ggez + +2) NAME_PLATE_UNIT_ADDED NAME_PLATE_UNIT_REMOVED (e, u) +UnitDetailedThreatSituation("player", "target") empty result for no threat + +[02:49 PM] Dump: value=UnitDetailedThreatSituation("player", "target") +[02:49 PM] [1]=true, --Boolean - returns true if the unit is primary threat target of the mob (is tanking), or false otherwise +[02:49 PM] [2]=3, --Integer - returns the threat status for the unit on the mob, or nil if unit is not on mob's threat table. (3 = securely tanking, 2 = insecurely tanking, 1 = not tanking but higher threat than tank, 0 = not tanking and lower threat than tank) +[02:49 PM] [3]=100, --Number - returns the unit's threat on the mob as a percentage of the amount required to pull aggro, scaled according to the unit's range from the mob. At 100 the unit will pull aggro. Returns 100 if the unit is tanking and nil if the unit is not on the mob's threat list. +[02:49 PM] [4]=255, --Number - returns the unit's threat as a percentage of the tank's current threat. Returns nil if the unit is not on the mob's threat list. +[02:49 PM] [5]=0 --Number - returns the unit's total threat on the mob +for threat + +3) can say table 1: GUID in current pull - use 1) and 2) +table 2: GUID to be pull on mouseover - use previous work +table 3: global GUID to be pull - reset with GUID of boss or pre boss maybe? +look for PARTY_KILL se in CLEU maybe? (for progress table ?) +]] + +--[[ +Random garbage info + +[10:59 AM] Dump: value=C_Scenario.GetInfo() +[10:59 AM] [1]="Black Rook Hold", +[10:59 AM] [2]=1, +[10:59 AM] [3]=1, +[10:59 AM] [4]=3, +[10:59 AM] [5]=false, +[10:59 AM] [6]=false, +[10:59 AM] [7]=false, +[10:59 AM] [8]=0, +[10:59 AM] [9]=0, +[10:59 AM] [10]=1, +[10:59 AM] [11]="UNKNOWN" + +[11:01 AM] Dump: value=C_Scenario.GetStepInfo() +[11:01 AM] [1]="Black Rook Hold", +[11:01 AM] [2]="Deal with the restless spirits of Black Rook Hold.", +[11:01 AM] [3]=5, --Num criteria +[11:01 AM] [4]=false, +[11:01 AM] [5]=false, +[11:01 AM] [6]=false, +[11:01 AM] [7]=0, +[11:01 AM] [8]={ +[11:01 AM] }, +[11:01 AM] [10]=0 + +/run local numCriteria = select(3, C_Scenario.GetStepInfo()); for i = 1, numCriteria do print(C_Scenario.GetCriteriaInfo(i)) end +[11:02 AM] Amalgam of Souls 165 false 0 1 0 1832 0 29464 0 0 false false +[11:02 AM] Illysanna Ravencrest 165 false 0 1 0 1833 0 29465 0 0 false false +[11:02 AM] Smashspite the Hateful 165 false 0 1 0 1834 0 29466 0 0 false false +[11:02 AM] Lord Kurtalos Ravencrest 165 false 0 1 0 1835 0 29467 0 0 false false +[11:02 AM] Enemy Forces 0 false 0 360 0 0 0% 0 0 0 false true + +[11:06 AM] Dump: value=C_Scenario.GetCriteriaInfo(5) +[11:06 AM] [1]="Enemy Forces", +[11:06 AM] [2]=0, +[11:06 AM] [3]=false, +[11:06 AM] [4]=0, +[11:06 AM] [5]=360, +[11:06 AM] [6]=0, +[11:06 AM] [7]=0, +[11:06 AM] [8]="0%", +[11:06 AM] [9]=0, +[11:06 AM] [10]=0, +[11:06 AM] [11]=0, +[11:06 AM] [12]=false, +[11:06 AM] [13]=true --Weighted progress? +]] + +--[[ +So far got the mouseover counting working +Get total mob # from C_Scenario.GetCriteriaInfo(5 +Add mouseover to # +Add pulls & nameplate fuckery from above into same # +Maybe use global table for all +Should be easy +Maybe add textures and attach to namepaltes of planned units??? Pog POG +]] +function() + --Very inefficient maybe fix later who cares + local scenarioType = select(10, C_Scenario.GetInfo()) + if scenarioType == 1 then + local numCriteria = select(3, C_Scenario.GetStepInfo()) + for i = 1, numCriteria do + local name = C_Scenario.GetCriteriaInfo(i) + if name == "Enemy Forces" then + aura_env.davystone.totalProgress = select(5, C_Scenario.GetCriteriaInfo(i)) + aura_env.davystone.currentProgress = select(8, C_Scenario.GetCriteriaInfo(i)) + aura_env.davystone.currentProgress = aura_env.davystone.currentProgress:gsub("%%", "") + aura_env.davystone.currentProgress = tonumber(aura_env.davystone.currentProgress) + aura_env.davystone.newProgress = select(8, C_Scenario.GetCriteriaInfo(i)) + aura_env.davystone.newProgress = aura_env.davystone.newProgress:gsub("%%", "") + aura_env.davystone.newProgress = tonumber(aura_env.davystone.newProgress) + end + end + for i = 1, 40 do + local unit = "nameplate" .. i + if UnitAffectingCombat(unit) then + local GUID = UnitGUID(unit) + local ID = GUID:match("%w+%-%d*%-%d*%-%d*%-%d*-(%d*)") + ID = tonumber(ID) + if aura_env.IDthing[ID] then + local progress = aura_env.IDthing[ID] + aura_env.davystone.newProgress = aura_env.davystone.newProgress + progress + end + end + end + end +end + +--DISPLAY +function() + if aura_env.davystone.currentProgress and aura_env.davystone.totalProgress and aura_env.davystone.newProgress then + return aura_env.round((aura_env.davystone.currentProgress / aura_env.davystone.totalProgress) * 100, 2) .. " " .. aura_env.round((aura_env.davystone.newProgress / aura_env.davystone.totalProgress) * 100, 2) + end +end + +--INIT +local OnTooltipSetUnit = function() + print("yeet") + local name, unit = tooltip:GetUnit() + local guid = unit and UnitGUID(unit) + if guid then + local type, zero, server_id, instance_id, zone_uid, npc_id, spawn_uid = strsplit("-", guid) + npc_id = tonumber(npc_id) + print(npcID) + end +end +GameTooltip:HookScript("OnTooltipSetUnit", OnTooltipSetUnit) +aura_env.davystone = {} +aura_env.IDthing = { + [104277] = 4, [102253] = 4, [98954] = 4, [97185] = 10, [113537] = 10, [101839] = 4, [104246] = 4, [104278] = 10, [97170] = 4, [113506] = 4, [105617] = 4, [105633] = 4, [102095] = 4, [105952] = 6, [97043] = 4, [102430] = 1, [98366] = 4, [95832] = 2, [91784] = 1, [104295] = 1, [102781] = 4, [102287] = 10, [98733] = 4, [102351] = 1, [96247] = 1, [111563] = 4, [95769] = 4, [113699] = 8, [91785] = 2, [100216] = 4, [97172] = 1, [100248] = 4, [114289] = 4, [105651] = 4, [105699] = 3, [105715] = 4, [98368] = 4, [95834] = 2, [99675] = 4, [91786] = 4, [98177] = 12, [97173] = 4, [100249] = 1, [105636] = 4, [95771] = 4, [96584] = 4, [97365] = 4, [91006] = 4, [91787] = 2, [109908] = 10, [96664] = 2, [105876] = 1, [95947] = 4, [99804] = 2, [95772] = 4, [99358] = 4, [101414] = 2, [106785] = 1, [104251] = 4, [100713] = 4, [105845] = 1, [98243] = 4, [98275] = 4, [96028] = 4, [99359] = 3, [105766] = 1, [91008] = 4, [91789] = 4, [98435] = 7, [98706] = 6, [100539] = 4, [98770] = 4, [105703] = 1, [102404] = 4, [99360] = 9, [97097] = 4, [91790] = 4, [98691] = 4, [102277] = 4, [98293] = 1, [98813] = 4, [105720] = 4, [91001] = 4, [101074] = 1, [100532] = 1, [99678] = 4, [104270] = 8, [101991] = 4, [98732] = 1, [98963] = 1, [91792] = 10, [100526] = 4, [98246] = 4, [106546] = 4, [98533] = 10, [105705] = 4, [96015] = 4, [104300] = 4, [113536] = 10, [92610] = 4, [99649] = 12, [98900] = 4, [98406] = 4, [98677] = 1, [91808] = 1, [92350] = 4, [102295] = 10, [102566] = 12, [113998] = 4, [97163] = 3, [102104] = 4, [102375] = 3, [105706] = 8, [95861] = 4, [97068] = 5, [96574] = 5, [97171] = 10, [102094] = 4, [102232] = 4, [99188] = 4, [99307] = 12, [105682] = 8, [92538] = 1, [100527] = 3, [102583] = 4, [96587] = 4, [98280] = 4, [98370] = 4, [98538] = 10, [106786] = 1, [113111] = 1, [91783] = 4, [99956] = 4, [114712] = 3, [91332] = 4, [91794] = 1, [96657] = 12, [98426] = 4, [97197] = 2, [91796] = 10, [98759] = 4, [105915] = 4, [98919] = 4, [99908] = 1, [98362] = 10, [95779] = 10, [99365] = 4, [99891] = 5, [101437] = 1, [90998] = 4, [106059] = 4, [98425] = 4, [96640] = 2, [97182] = 6, [98728] = 7, [95939] = 10, [100529] = 1, [98776] = 4, [105422] = 1, [98792] = 4, [90997] = 4, [105629] = 1, [99366] = 4, [97087] = 2, [101438] = 4, [97119] = 1, [96608] = 2, [98681] = 6, [97677] = 1, [96480] = 1, [102584] = 4, [95842] = 2, [100364] = 4, [101072] = 1, [94968] = 5, [98973] = 1, [102788] = 4, [96934] = 2, [98756] = 4, [107288] = 1, [91793] = 1, [91000] = 8, [91781] = 4, [91782] = 10, [97678] = 8, [98926] = 4, [97200] = 4, [100531] = 8, [92387] = 4, [99033] = 4, [95920] = 2, [98810] = 6, [95766] = 4, [105921] = 4, [96677] = 2, [101679] = 4, [114288] = 4, [96611] = 2, [106787] = 1 +} +aura_env.round = function(var, n) + if (n) then + var = math.floor((var * 10 ^ n) + 0.5) / (10 ^ n) + else + var = math.floor(var + 0.5) + end + return var +end + +--PART OF DIFFERENT AURA +--UPDATE_MOUSEOVER_UNIT +function(e) + if not aura_env.time then + aura_env.time = debugprofilestop() + end + if not aura_env.mobs then + aura_env.mobs = {} + end + if not aura_env.mobC then + aura_env.mobC = 0 + end + local u = "mouseover" + local guid = UnitGUID(u) + local npc_id = guid:match("%w+%-%d*%-%d*%-%d*%-%d*-(%d*)") + npc_id = tonumber(npc_id) + aura_env.time = debugprofilestop() + --print("aura", guid, aura_env.mobs[guid]) + if npc_id and aura_env.IDthing[npc_id] then + if guid and not aura_env.mouseoverPull[guid] then + aura_env.mouseoverPull[guid] = aura_env.IDthing[npc_id] + aura_env.mobC = aura_env.mobC + 1 + end + end + --This works for now +end + +--EVERY FRAME +function() + if aura_env.time and aura_env.time > 0 then + --print(aura_env.mobC) + --DevTools_Dump(aura_env.mobs) + local totalMouseoverPull = 0 + for k, v in pairs(aura_env.mouseoverPull) do + totalMouseoverPull = totalMouseoverPull + v + print(totalMouseoverPull) + end + if debugprofilestop() - aura_env.time > 1500 then + aura_env.time = 0 + aura_env.mouseoverPull = {} + aura_env.mobC = 0 + print("RESET", aura_env.mobC) + DevTools_Dump(aura_env.mobs) + end + end +end + +--INIT +aura_env.davystone = {} +aura_env.currentPull = {} +aura_env.mouseoverPull = {} +aura_env.IDthing = { + [104277] = 4, + [102253] = 4, + [98954] = 4, + [97185] = 10, + [113537] = 10, + [101839] = 4, + [104246] = 4, + [104278] = 10, + [97170] = 4, + [113506] = 4, + [105617] = 4, + [105633] = 4, + [102095] = 4, + [105952] = 6, + [97043] = 4, + [102430] = 1, + [98366] = 4, + [95832] = 2, + [91784] = 1, + [104295] = 1, + [102781] = 4, + [102287] = 10, + [98733] = 4, + [102351] = 1, + [96247] = 1, + [111563] = 4, + [95769] = 4, + [113699] = 8, + [91785] = 2, + [100216] = 4, + [97172] = 1, + [100248] = 4, + [114289] = 4, + [105651] = 4, + [105699] = 3, + [105715] = 4, + [98368] = 4, + [95834] = 2, + [99675] = 4, + [91786] = 4, + [98177] = 12, + [97173] = 4, + [100249] = 1, + [105636] = 4, + [95771] = 4, + [96584] = 4, + [97365] = 4, + [91006] = 4, + [91787] = 2, + [109908] = 10, + [96664] = 2, + [105876] = 1, + [95947] = 4, + [99804] = 2, + [95772] = 4, + [99358] = 4, + [101414] = 2, + [106785] = 1, + [104251] = 4, + [100713] = 4, + [105845] = 1, + [98243] = 4, + [98275] = 4, + [96028] = 4, + [99359] = 3, + [105766] = 1, + [91008] = 4, + [91789] = 4, + [98435] = 7, + [98706] = 6, + [100539] = 4, + [98770] = 4, + [105703] = 1, + [102404] = 4, + [99360] = 9, + [97097] = 4, + [91790] = 4, + [98691] = 4, + [102277] = 4, + [98293] = 1, + [98813] = 4, + [105720] = 4, + [91001] = 4, + [101074] = 1, + [100532] = 1, + [99678] = 4, + [104270] = 8, + [101991] = 4, + [98732] = 1, + [98963] = 1, + [91792] = 10, + [100526] = 4, + [98246] = 4, + [106546] = 4, + [98533] = 10, + [105705] = 4, + [96015] = 4, + [104300] = 4, + [113536] = 10, + [92610] = 4, + [99649] = 12, + [98900] = 4, + [98406] = 4, + [98677] = 1, + [91808] = 1, + [92350] = 4, + [102295] = 10, + [102566] = 12, + [113998] = 4, + [97163] = 3, + [102104] = 4, + [102375] = 3, + [105706] = 8, + [95861] = 4, + [97068] = 5, + [96574] = 5, + [97171] = 10, + [102094] = 4, + [102232] = 4, + [99188] = 4, + [99307] = 12, + [105682] = 8, + [92538] = 1, + [100527] = 3, + [102583] = 4, + [96587] = 4, + [98280] = 4, + [98370] = 4, + [98538] = 10, + [106786] = 1, + [113111] = 1, + [91783] = 4, + [99956] = 4, + [114712] = 3, + [91332] = 4, + [91794] = 1, + [96657] = 12, + [98426] = 4, + [97197] = 2, + [91796] = 10, + [98759] = 4, + [105915] = 4, + [98919] = 4, + [99908] = 1, + [98362] = 10, + [95779] = 10, + [99365] = 4, + [99891] = 5, + [101437] = 1, + [90998] = 4, + [106059] = 4, + [98425] = 4, + [96640] = 2, + [97182] = 6, + [98728] = 7, + [95939] = 10, + [100529] = 1, + [98776] = 4, + [105422] = 1, + [98792] = 4, + [90997] = 4, + [105629] = 1, + [99366] = 4, + [97087] = 2, + [101438] = 4, + [97119] = 1, + [96608] = 2, + [98681] = 6, + [97677] = 1, + [96480] = 1, + [102584] = 4, + [95842] = 2, + [100364] = 4, + [101072] = 1, + [94968] = 5, + [98973] = 1, + [102788] = 4, + [96934] = 2, + [98756] = 4, + [107288] = 1, + [91793] = 1, + [91000] = 8, + [91781] = 4, + [91782] = 10, + [97678] = 8, + [98926] = 4, + [97200] = 4, + [100531] = 8, + [92387] = 4, + [99033] = 4, + [95920] = 2, + [98810] = 6, + [95766] = 4, + [105921] = 4, + [96677] = 2, + [101679] = 4, + [114288] = 4, + [96611] = 2, + [106787] = 1 +} diff --git a/Complete Projects/Legion/DeathTrack.lua b/WeakAuras/Projects/DeathTrack.lua similarity index 96% rename from Complete Projects/Legion/DeathTrack.lua rename to WeakAuras/Projects/DeathTrack.lua index be688bb..027a67b 100644 --- a/Complete Projects/Legion/DeathTrack.lua +++ b/WeakAuras/Projects/DeathTrack.lua @@ -1,64 +1,64 @@ ---PLAYER_DEAD COMBAT_LOG_EVENT_UNFILTERED -function(...) - local se = select(3, ...) - if se == "SPELL_DAMAGE" or se == "SPELL_PERIODIC_DAMAGE" then - local caster = select(6, ...) - local target = select(10, ...) - local overkill = select(17, ...) - if overkill > 0 and target == UnitName("player") then - local id = #DED + 1 - local date = date() - local localtime = date:match("%d%d%/%d%d%/%d%d%s(%d%d%p%d%d%p%d%d)") - local year = date:match("%d%d%/%d%d/(%d%d)") + 2000 --01/07/(19) 14:36:42 - local month = date:match("(%d%d)") --(01)/07/19 14:36:42 - local day = date:match("%d%d%/(%d%d)") --01/(07)/19 14:36:42 - --Remove first place zeros - if day:find("0") == 1 then - day = day:gsub("0", "") - end - if month:find("0") == 1 then - month = month:gsub("0", "") - end - local localdate = day .. "." .. month .. "." .. year - local localzone = GetZoneText() - DED[id] = - { - ["Date"] = localdate, - ["Time"] = localtime, - ["Zone"] = localzone, - ["Killer"] = caster, - ["Overkill"] = overkill - } - end - end - if se == "SWING_DAMAGE" then - local caster = select(6, ...) - local target = select(10, ...) - local overkill = select(14, ...) - if overkill > 0 and target == UnitName("player") then - local id = #DED + 1 - local date = date() - local localtime = date:match("%d%d%/%d%d%/%d%d%s(%d%d%p%d%d%p%d%d)") - local year = date:match("%d%d%/%d%d/(%d%d)") + 2000 --01/07/(19) 14:36:42 - local month = date:match("(%d%d)") --(01)/07/19 14:36:42 - local day = date:match("%d%d%/(%d%d)") --01/(07)/19 14:36:42 - --Remove first place zeros - if day:find("0") == 1 then - day = day:gsub("0", "") - end - if month:find("0") == 1 then - month = month:gsub("0", "") - end - local localdate = day .. "." .. month .. "." .. year - local localzone = GetZoneText() - DED[id] = - { - ["Date"] = localdate, - ["Time"] = localtime, - ["Zone"] = localzone, - ["Killer"] = caster, - ["Overkill"] = overkill - } - end - end +--PLAYER_DEAD COMBAT_LOG_EVENT_UNFILTERED +function(...) + local se = select(3, ...) + if se == "SPELL_DAMAGE" or se == "SPELL_PERIODIC_DAMAGE" then + local caster = select(6, ...) + local target = select(10, ...) + local overkill = select(17, ...) + if overkill > 0 and target == UnitName("player") then + local id = #DED + 1 + local date = date() + local localtime = date:match("%d%d%/%d%d%/%d%d%s(%d%d%p%d%d%p%d%d)") + local year = date:match("%d%d%/%d%d/(%d%d)") + 2000 --01/07/(19) 14:36:42 + local month = date:match("(%d%d)") --(01)/07/19 14:36:42 + local day = date:match("%d%d%/(%d%d)") --01/(07)/19 14:36:42 + --Remove first place zeros + if day:find("0") == 1 then + day = day:gsub("0", "") + end + if month:find("0") == 1 then + month = month:gsub("0", "") + end + local localdate = day .. "." .. month .. "." .. year + local localzone = GetZoneText() + DED[id] = + { + ["Date"] = localdate, + ["Time"] = localtime, + ["Zone"] = localzone, + ["Killer"] = caster, + ["Overkill"] = overkill + } + end + end + if se == "SWING_DAMAGE" then + local caster = select(6, ...) + local target = select(10, ...) + local overkill = select(14, ...) + if overkill > 0 and target == UnitName("player") then + local id = #DED + 1 + local date = date() + local localtime = date:match("%d%d%/%d%d%/%d%d%s(%d%d%p%d%d%p%d%d)") + local year = date:match("%d%d%/%d%d/(%d%d)") + 2000 --01/07/(19) 14:36:42 + local month = date:match("(%d%d)") --(01)/07/19 14:36:42 + local day = date:match("%d%d%/(%d%d)") --01/(07)/19 14:36:42 + --Remove first place zeros + if day:find("0") == 1 then + day = day:gsub("0", "") + end + if month:find("0") == 1 then + month = month:gsub("0", "") + end + local localdate = day .. "." .. month .. "." .. year + local localzone = GetZoneText() + DED[id] = + { + ["Date"] = localdate, + ["Time"] = localtime, + ["Zone"] = localzone, + ["Killer"] = caster, + ["Overkill"] = overkill + } + end + end end \ No newline at end of file diff --git a/LegionWA/DebuffAlert/Event.lua b/WeakAuras/Projects/DebuffAlert/Event.lua similarity index 96% rename from LegionWA/DebuffAlert/Event.lua rename to WeakAuras/Projects/DebuffAlert/Event.lua index 73b21fb..eae0cde 100644 --- a/LegionWA/DebuffAlert/Event.lua +++ b/WeakAuras/Projects/DebuffAlert/Event.lua @@ -1,28 +1,28 @@ --- COMBAT_LOG_EVENT_UNFILTERED -function(allstates, e, ...) - local iconDisplayDuration = 0.5 - - local se = select(2, ...) - if (se ~= "SPELL_AURA_APPLIED") then return end - local target = select(9, ...) - if (target ~= UnitName("player")) then return end - local auraType = select(15, ...) - if (auraType ~= "DEBUFF") then return end - local spellId = select(12, ...) - print(select(3, GetSpellInfo(spellId))) - allstates[spellId] = { - show = true, - changed = true, - index = GetTime(), - resort = true, - - icon = select(3, GetSpellInfo(spellId)), - name = select(13, ...), - - progressType = "timed", - expirationTime = GetTime() + iconDisplayDuration, - duration = iconDisplayDuration, - autoHide = true, - } - return true +-- COMBAT_LOG_EVENT_UNFILTERED +function(allstates, e, ...) + local iconDisplayDuration = 0.5 + + local se = select(2, ...) + if (se ~= "SPELL_AURA_APPLIED") then return end + local target = select(9, ...) + if (target ~= UnitName("player")) then return end + local auraType = select(15, ...) + if (auraType ~= "DEBUFF") then return end + local spellId = select(12, ...) + print(select(3, GetSpellInfo(spellId))) + allstates[spellId] = { + show = true, + changed = true, + index = GetTime(), + resort = true, + + icon = select(3, GetSpellInfo(spellId)), + name = select(13, ...), + + progressType = "timed", + expirationTime = GetTime() + iconDisplayDuration, + duration = iconDisplayDuration, + autoHide = true, + } + return true end \ No newline at end of file diff --git a/Complete Projects/Legion/Delete Items.lua b/WeakAuras/Projects/Delete Items.lua similarity index 96% rename from Complete Projects/Legion/Delete Items.lua rename to WeakAuras/Projects/Delete Items.lua index 112ae65..6a90342 100644 --- a/Complete Projects/Legion/Delete Items.lua +++ b/WeakAuras/Projects/Delete Items.lua @@ -1,14 +1,14 @@ ---Delete Dumbass Shit -function() - local deletlist = {34984} - for i = 1, GetContainerNumSlots(0) do - local _, _, _, _, _, _, _, _, _, itemID = GetContainerItemInfo(0, i) - for k, v in ipairs(deletlist) do - if itemID == v then - PickupContainerItem(0, i) - print(itemID) - DeleteCursorItem() - end - end - end -end +--Delete Dumbass Shit +function() + local deletlist = {34984} + for i = 1, GetContainerNumSlots(0) do + local _, _, _, _, _, _, _, _, _, itemID = GetContainerItemInfo(0, i) + for k, v in ipairs(deletlist) do + if itemID == v then + PickupContainerItem(0, i) + print(itemID) + DeleteCursorItem() + end + end + end +end diff --git a/Complete Projects/Legion/DickRiderCounter.lua b/WeakAuras/Projects/DickRiderCounter.lua similarity index 96% rename from Complete Projects/Legion/DickRiderCounter.lua rename to WeakAuras/Projects/DickRiderCounter.lua index 3acc80f..e4ecc0a 100644 --- a/Complete Projects/Legion/DickRiderCounter.lua +++ b/WeakAuras/Projects/DickRiderCounter.lua @@ -1,30 +1,30 @@ -COMBAT_LOG_EVENT_UNFILTERED -function(...) - local subEvent = select(3, ...) - local ID = select(5, ...) - local source = select(6, ...) - local target = select(10, ...) - if target == UnitName("player") and (subEvent == "SWING_DAMAGE" or subEvent == "SPELL_DAMAGE") and string.match(ID, "Player") then - local targetExist = 0 - for k, v in ipairs(aura_env.dickRiders) do - if source == v then - targetExist = 1 - end - end - if targetExist == 0 then - aura_env.dickRiders[table.getn(aura_env.dickRiders) + 1] = source - end - end -end - -DISPLAY -function() - local output = table.getn(aura_env.dickRiders) .. "\n" - for k, v in ipairs(aura_env.dickRiders) do - output = output .. v .. "\n" - end - return output -end - -INIT AND SHOW -aura_env.dickRiders = {} +COMBAT_LOG_EVENT_UNFILTERED +function(...) + local subEvent = select(3, ...) + local ID = select(5, ...) + local source = select(6, ...) + local target = select(10, ...) + if target == UnitName("player") and (subEvent == "SWING_DAMAGE" or subEvent == "SPELL_DAMAGE") and string.match(ID, "Player") then + local targetExist = 0 + for k, v in ipairs(aura_env.dickRiders) do + if source == v then + targetExist = 1 + end + end + if targetExist == 0 then + aura_env.dickRiders[table.getn(aura_env.dickRiders) + 1] = source + end + end +end + +DISPLAY +function() + local output = table.getn(aura_env.dickRiders) .. "\n" + for k, v in ipairs(aura_env.dickRiders) do + output = output .. v .. "\n" + end + return output +end + +INIT AND SHOW +aura_env.dickRiders = {} diff --git a/Complete Projects/Legion/Divine Purpose Procs.lua b/WeakAuras/Projects/Divine Purpose Procs.lua similarity index 96% rename from Complete Projects/Legion/Divine Purpose Procs.lua rename to WeakAuras/Projects/Divine Purpose Procs.lua index 60dd5ca..94fd60d 100644 --- a/Complete Projects/Legion/Divine Purpose Procs.lua +++ b/WeakAuras/Projects/Divine Purpose Procs.lua @@ -1,33 +1,33 @@ -DISPLAY -function() - if aura_env.cast_spells > 0 then - local pp = aura_env.count / aura_env.cast_spells - if (2) then - pp = math.floor((pp * 10^2) + 0.5) / (10^2) - else - pp = math.floor(pp+0.5) - end - pp = pp * 100 - return "Divine " .. aura_env.count .. " " .. aura_env.cast_spells .. " " .. pp - else - return "Divine " .. aura_env.count .. " " .. aura_env.cast_spells - end -end - -COMBAT_LOG_EVENT_UNFILTERED -function(_,_,subEvent,_,_,sourceName,_,_,_,_,_,_,spellId) - if subEvent == "SPELL_CAST_SUCCESS" and sourceName == UnitName("player") then - if spellId == 85256 or spellId == 53385 then - aura_env.cast_spells = aura_env.cast_spells + 1 - end - end - if subEvent == "SPELL_AURA_APPLIED" and sourceName == UnitName("player") then - if spellId == 223819 then - aura_env.count = aura_env.count + 1 - end - end -end - -INIT -aura_env.count = 0 -aura_env.cast_spells = 0 +DISPLAY +function() + if aura_env.cast_spells > 0 then + local pp = aura_env.count / aura_env.cast_spells + if (2) then + pp = math.floor((pp * 10^2) + 0.5) / (10^2) + else + pp = math.floor(pp+0.5) + end + pp = pp * 100 + return "Divine " .. aura_env.count .. " " .. aura_env.cast_spells .. " " .. pp + else + return "Divine " .. aura_env.count .. " " .. aura_env.cast_spells + end +end + +COMBAT_LOG_EVENT_UNFILTERED +function(_,_,subEvent,_,_,sourceName,_,_,_,_,_,_,spellId) + if subEvent == "SPELL_CAST_SUCCESS" and sourceName == UnitName("player") then + if spellId == 85256 or spellId == 53385 then + aura_env.cast_spells = aura_env.cast_spells + 1 + end + end + if subEvent == "SPELL_AURA_APPLIED" and sourceName == UnitName("player") then + if spellId == 223819 then + aura_env.count = aura_env.count + 1 + end + end +end + +INIT +aura_env.count = 0 +aura_env.cast_spells = 0 diff --git a/LegionWA/DruidEnergyBar/Export b/WeakAuras/Projects/DruidEnergyBar/Export similarity index 100% rename from LegionWA/DruidEnergyBar/Export rename to WeakAuras/Projects/DruidEnergyBar/Export diff --git a/Complete Projects/Legion/Drums.lua b/WeakAuras/Projects/Drums.lua similarity index 96% rename from Complete Projects/Legion/Drums.lua rename to WeakAuras/Projects/Drums.lua index 0484057..0c89b55 100644 --- a/Complete Projects/Legion/Drums.lua +++ b/WeakAuras/Projects/Drums.lua @@ -1,28 +1,28 @@ ---DISPLAY -function() - local function round(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var - end - local leather = GetItemCount("Raw Beast Hide") - return leather .. " " .. leather / 5 .. "\n" .. aura_env.skins .. " " .. aura_env.hide .. " " .. round(aura_env.hide / aura_env.skins, 1) -end - ---CHAT_MSG_LOOT -function(...) - local msg = select(2, ...) - local what = msg:match("%[(.+)%]") - local howmuch = msg:match("x(%d*)") or 1 - if what == "Raw Beast Hide" then - aura_env.skins = aura_env.skins + 1 - aura_env.hide = aura_env.hide + howmuch - end -end - ---INIT -aura_env.skins = 0 +--DISPLAY +function() + local function round(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var + end + local leather = GetItemCount("Raw Beast Hide") + return leather .. " " .. leather / 5 .. "\n" .. aura_env.skins .. " " .. aura_env.hide .. " " .. round(aura_env.hide / aura_env.skins, 1) +end + +--CHAT_MSG_LOOT +function(...) + local msg = select(2, ...) + local what = msg:match("%[(.+)%]") + local howmuch = msg:match("x(%d*)") or 1 + if what == "Raw Beast Hide" then + aura_env.skins = aura_env.skins + 1 + aura_env.hide = aura_env.hide + howmuch + end +end + +--INIT +aura_env.skins = 0 aura_env.hide = 0 \ No newline at end of file diff --git a/FreshShit/DuelerAccepter/event.lua b/WeakAuras/Projects/DuelerAccepter/event.lua similarity index 100% rename from FreshShit/DuelerAccepter/event.lua rename to WeakAuras/Projects/DuelerAccepter/event.lua diff --git a/FreshShit/DuelerAccepter/init.lua b/WeakAuras/Projects/DuelerAccepter/init.lua similarity index 100% rename from FreshShit/DuelerAccepter/init.lua rename to WeakAuras/Projects/DuelerAccepter/init.lua diff --git a/Complete Projects/Legion/EHP.lua b/WeakAuras/Projects/EHP.lua similarity index 97% rename from Complete Projects/Legion/EHP.lua rename to WeakAuras/Projects/EHP.lua index 806004d..819193b 100644 --- a/Complete Projects/Legion/EHP.lua +++ b/WeakAuras/Projects/EHP.lua @@ -1,694 +1,694 @@ ---DISPLAY EVERY FRAME SMH -function() - --- CPU benchmarking --- - local start - local aura_env = aura_env - local Debug = aura_env.Debug - if Debug then - aura_env.count = aura_env.count or 1 - aura_env.count = (aura_env.count + 1) % 600 - start = debugprofilestop() - end - - -- Setting some aura_env to local variables to improve performance -- - local ClassID = aura_env.ClassID - local SpecID = aura_env.SpecID - local AoE = aura_env.AoE - local Mode = aura_env.Mode - local ColorFunction = aura_env.Color - local Threshold = aura_env.Threshold - local BasicReductions = aura_env.BasicReductions - - -- Armor calulation // Armor scales differently depending on the enemy level, this makes sure is stays accurate -- - local Armor = select(2, UnitArmor("player")) - Armor = 1 - C_PaperDollInfo.GetArmorEffectiveness(Armor, aura_env.TargetLevel) -- Gets the reduction percentage and makes it usable - - -- All Classes - local CurrentHealth = UnitHealth("player") - local MaxHealth = UnitHealthMax("player") - local Vers = 1 - (GetCombatRatingBonus(31) / 100) - local Avoid = 1 - local ScanTarget = false - if AoE then - Avoid = 1 - (GetAvoidance() / 100) - end - local Elusive = 1 - local StaggerP, StaggerM = 1, 1 - local Absorbs = UnitGetTotalAbsorbs("player") - local AbsorbsP, AbsorbsM = Absorbs, Absorbs - - -- Initialize some variables -- - local ClassDRP, ClassDRM = 1, 1 - local PImmunity, MImmunity = 0, 0 - - ----- General damage reduction buffs ----- - local n = 1 - local BuffID = select(10, UnitBuff("player", n)) - while BuffID do - local Reduction = 1 - local PhysicalReduction = 1 - local MagicReduction = 1 - - if BasicReductions[BuffID] then - ClassDRP = ClassDRP * BasicReductions[BuffID][1] - ClassDRM = ClassDRM * BasicReductions[BuffID][2] - end - - ---- More complex tracking ---- - - local AMS, BloodS = 0, 0 - - --- Death Knight --- - if BuffID == 48792 then - Reduction = 1 + (tonumber(select(18, UnitBuff("player", n)) or 0)) / 100 -- Icebound Fortitude // using plus since the tooltip returns a negative value - - elseif BuffID == 48707 then - AMS = (select(16, UnitBuff("player", n)) or 0) -- Anti-Magic Shell - - elseif BuffID == 77535 then - BloodS = (select(16, UnitBuff("player", n)) or 0) -- Blood Shield - - --- Demon Hunter --- - elseif BuffID == 212800 then - if IsPlayerSpell(205411) then Reduction = 0.50 -- Blur - else Reduction = 0.65 end - - elseif BuffID == 196555 then PImmunity = 1 -- Netherwalk - - --- Druid --- - elseif BuffID == 102342 then - Reduction = 1 + (tonumber(select(16, UnitBuff("player", n)) or 0)) / 100 -- Ironbark // using plus since the tooltip returns a negative value - - --- Hunter --- - elseif BuffID == 186265 then -- Aspect of the Turtle - PImmunity = 1 - MImmunity = 1 - - --- Mage --- - elseif BuffID == 45438 then -- Ice Block - PImmunity = 1 - MImmunity = 1 - - --- Monk --- - elseif BuffID == 261769 then - Reduction = 1 + (select(16, UnitBuff("player", n)) or 0) / 100 -- Inner Strength // using plus since the tooltip returns a negative value - - elseif BuffID == 115295 then - Absorbs = Absorbs - select(16, UnitBuff("player", n)) -- Guard // prevents Guard from counting as a normal absorb - - --- Paladin --- - elseif BuffID == 210320 then - Reduction = 1 + (tonumber(select(16, UnitBuff("player", n)) or 0)) / 100 -- Devotion Aura // using plus since the tooltip returns a negative value - - elseif BuffID == 1022 then PImmunity = 1 -- Blessing of Protection - elseif BuffID == 204018 then MImmunity = 1 -- Blessing of Spellwarding - - elseif BuffID == 188370 then - Reduction = 1 - (GetMasteryEffect() / 2.85) / 100 -- Consecration // May not be 100% accurate, but it's good enough for now - if IsEquippedItem(137047) then Reduction = Reduction * 0.96 end -- Consecration (Legendary Ring) - - elseif BuffID == 642 then -- Divine Shield - PImmunity = 1 - MImmunity = 1 - - --- Priest --- - elseif BuffID == 45242 then - Reduction = 1 - (select(3, UnitBuff("player", n)) or 0) * 15 / 100 -- Focused Will - - elseif BuffID == 139 then - if IsPlayerSpell(235189) and UnitBuff("player", n, nil, "player") then - Reduction = 0.90 -- Perseverance - Talent - end - - --- Rogue --- - elseif BuffID == 1966 then - if not AoE and IsPlayerSpell(79008) - then Elusive = 0.70 -- Elusiveness - else -- Feint - if AoE then Avoid = Avoid * 0.50 end - end - elseif BuffID == 31224 then MImmunity = 1 -- Cloak of Shadows - - --- Shaman --- - elseif BuffID == 260881 then - Reduction = 1 - (tonumber(select(3, UnitBuff("player", n)) or 0)) * 5 / 100 -- Ghost in the Mist - Talent - - --- Warlock --- - - --- Warrior --- - elseif BuffID == 184362 and IsPlayerSpell(208154) then -- Enrage - Reduction = 0.90 -- War Paint - Talent - - end - - AbsorbsP = Absorbs - AMS - AbsorbsM = Absorbs - BloodS - - ClassDRP = ClassDRP * Reduction * PhysicalReduction - ClassDRM = ClassDRM * Reduction * MagicReduction - n = n + 1 - BuffID = select(10, UnitBuff("player", n)) - end - - ----- Damage reductions with special calculations ----- - - --- Death Knight --- - if ClassID == 6 then - local Necropolis = 1 - if IsPlayerSpell(206967) then -- Will of the Necropolis - Talent - if CurrentHealth / MaxHealth < 0.35 then Necropolis = 0.65 - end - end - ClassDRP = ClassDRP * Necropolis - ClassDRM = ClassDRM * Necropolis - end - - --- Demon Hunter --- - if ClassID == 12 then - local HavocDemWards = 1 - local VengDemWards = 1 - if SpecID == 1 then - HavocDemWards = 0.90 -- Demonic Wards - Passive - elseif SpecID == 2 then - VengDemWards = 0.90 -- Demonic Wards - Passive - ScanTarget = true - end - - ClassDRP = ClassDRP * VengDemWards - ClassDRM = ClassDRM * VengDemWards * HavocDemWards - end - - --- Druid --- - if ClassID == 11 then - local GuardA = 1 - if IsEquippedItem(137015) and IsPlayerSpell(16931) then - GuardA = 0.895 -- Legendary chest - elseif IsPlayerSpell(16931) then - GuardA = 0.94 -- Thick Hide (Guardian Affinity) - end - if SpecID == 3 then - if IsPlayerSpell(204053) then - ScanTarget = true - end - end - - ClassDRP = ClassDRP * GuardA - ClassDRM = ClassDRM * GuardA - end - - --- Hunter --- - if ClassID == 3 then - end - - --- Mage --- - if ClassID == 8 then - end - - --- Monk --- - if ClassID == 10 then - if SpecID == 1 then - ScanTarget = true - -- Gets stagger agaist current target, if no target is found use base -- - local StaggerBase, StaggerTarget = C_PaperDollInfo.GetStaggerPercentage("player") - if not StaggerTarget then StaggerTarget = StaggerBase end - StaggerM = StaggerTarget * 0.35 - StaggerP = 1 - StaggerTarget / 100 - StaggerM = 1 - StaggerM / 100 - - -- Stagger cap -- - local Stagger = UnitStagger("player") or 0 -- Calculate MaxHealth effective reduction for Stagger - local StaggerCapP = (CurrentHealth + AbsorbsP) / (CurrentHealth + AbsorbsP + 100 * MaxHealth - Stagger * 10) - local StaggerCapM = (CurrentHealth + AbsorbsM) / (CurrentHealth + AbsorbsM + 100 * MaxHealth - Stagger * 10) - if StaggerCapP < 0.01 then StaggerCapP = 0.01 end -- Stagger caps at 99% - if StaggerCapM < 0.01 then StaggerCapM = 0.01 end - if StaggerP < StaggerCapP then StaggerP = StaggerCapP end - if StaggerM < StaggerCapM then StaggerM = StaggerCapM end - end - if SpecID == 3 then - local Karma = 0 - aura_env.GoodKarma = IsPlayerSpell(280195) -- Talent - Karma = aura_env.TouchOfKarma - Absorbs = Absorbs + Karma - AbsorbsP = AbsorbsP + Karma - AbsorbsM = AbsorbsM + Karma - end - - ClassDRP = ClassDRP * StaggerP - ClassDRM = ClassDRM * StaggerM - end - - --- Paladin --- - if ClassID == 2 then - local LastDefender = 1 - if SpecID == 2 then -- Protection - LastDefender = 1 - (1 - 0.97 ^ aura_env.NameplateCounter) - end - ClassDRP = ClassDRP * LastDefender - ClassDRM = ClassDRM * LastDefender - end - - --- Priest --- - if ClassID == 5 then - end - - --- Rogue --- - if ClassID == 4 then - end - - --- Shaman --- - if ClassID == 7 then - end - - --- Warlock --- - if ClassID == 9 then - local SoulLink = 1 - local DestructionMastery = 1 - if SpecID == 2 then -- Soul Link passive for Demonology Warlocks - if UnitExists("pet") then - SoulLink = 0.80 - end - elseif SpecID == 3 then - DestructionMastery = 1 - ((GetMasteryEffect() / 9) / 100) -- Destruction mastery effect - end - - ClassDRP = ClassDRP * SoulLink * DestructionMastery - ClassDRM = ClassDRM * SoulLink * DestructionMastery - end - - --- Warrior --- - if ClassID == 1 then - if SpecID == 3 then - ScanTarget = true - end - - ClassDRP = ClassDRP - ClassDRM = ClassDRM - end - - --- Miscellaneous --- - if aura_env.HighmountainTauren then - local Stamina = UnitStat("player", 3) - local RuggedTenacity = floor((Stamina * 0.0003 * 20) + 0.5) - Absorbs = Absorbs + RuggedTenacity - end - - --- Checking debuffs on target if needed --- - if ScanTarget then - local TD = 1 - local DebuffID = select(10, UnitDebuff("target", TD)) - while DebuffID do - local DebuffTarget = 1 - local DebuffTargetP = 1 - local DebuffTargetM = 1 - - --- Demon Hunter --- - if DebuffID == 207744 and select(3, UnitDebuff("target", TD, nil, "player")) then - DebuffTarget = 0.60 -- Fiery Brand - - elseif DebuffID == 268178 and select(3, UnitDebuff("target", TD, nil, "player")) then - DebuffTarget = 0.94 -- Void Reaver -- Talent - - --- Druid --- - elseif DebuffID == 192090 and select(3, UnitDebuff("target", TD, nil, "player")) then - DebuffTarget = 1 - 0.02 * (select(3, UnitDebuff("target", TD, nil, "player")) or 0) -- Rend and Tear - Talent - - --- Monk --- - elseif DebuffID == 123725 then - DebuffTarget = 1 + 0.01 * (select(17, UnitDebuff("target", TD, nil, "player")) or 0) -- Breath of Fire // using plus since the tooltip returns a negative value - - --- Warrior --- - elseif DebuffID == 1160 and select(7, UnitDebuff("target", TD)) == "player" then - DebuffTarget = 0.80 -- Demoralizing Shout - end - - ClassDRP = ClassDRP * DebuffTarget * DebuffTargetP - ClassDRM = ClassDRM * DebuffTarget * DebuffTargetM - TD = TD + 1 - DebuffID = select(10, UnitDebuff("target", TD)) - end - end - - -- Damage taken modifiers -- - local ReductionP = Vers * Avoid * ClassDRP * Armor * Elusive - local ReductionM = Vers * Avoid * ClassDRM * Elusive - -- CurrentHealth health and shields -- - local EHP = (CurrentHealth + AbsorbsP) / ReductionP - local EHM = (CurrentHealth + AbsorbsM) / ReductionM - - -- Export pre-avoidance EHP, EHM and immunity status as global variables -- - if aura_env.GlobalExport then - -- Calculate max effective health (no absorbs) -- - local EHPMaxHealth = (MaxHealth + AbsorbsP) / ReductionP - local EHMMaxHealth = (MaxHealth + AbsorbsM) / ReductionM - -- Export to globals -- - local Export = WA_ZELER_EH - Export.EHPMAX, Export.EHMMAX = EHPMaxHealth * Avoid * Elusive, EHMMaxHealth * Avoid * Elusive - Export.EHP, Export.EHM = EHP * Avoid * Elusive, EHM * Avoid * Elusive - - Export.REDP, Export.REDM = ReductionP / Avoid / Elusive, ReductionM / Avoid / Elusive - Export.ABS, Export.ABSP, Export.ABSM = Absorbs, AbsorbsP, AbsorbsM - Export.EHPIMMUNITY, Export.EHMIMMUNITY = PImmunity, MImmunity - Export.EHARMOR = Armor - Export.STAGGERP, Export.STAGGERM = StaggerP, StaggerM - end - - -- Formatting numbers -- - local DivideP, DivideM = 1, 1 - local ImportDecimal = aura_env.DisplayDecimals - local EHPdecimal, EHMdecimal = ImportDecimal, ImportDecimal - local letterP, letterM = "", "" - if EHP > 10 ^ 9 then - EHP = EHP / 10 ^ 9 - DivideP = 10 ^ 9 - letterP = "b" - EHPdecimal = 2 - elseif EHP > 10 ^ 8 then - EHP = EHP / 10 ^ 6 - DivideP = 10 ^ 6 - letterP = "m" - EHPdecimal = 0 - elseif EHP > 10 ^ 7 then - EHP = EHP / 10 ^ 6 - DivideP = 10 ^ 6 - letterP = "m" - elseif EHP > 10 ^ 6 then - EHP = EHP / 10 ^ 6 - DivideP = 10 ^ 6 - letterP = "m" - EHPdecimal = 2 - elseif EHP > 10 ^ 5 then - EHP = EHP / 10 ^ 3 - DivideP = 10 ^ 3 - letterP = "k" - EHPdecimal = 0 - elseif EHP > 10 ^ 4 then - EHP = EHP / 10 ^ 3 - DivideP = 10 ^ 3 - letterP = "k" - elseif EHP > 10 ^ 3 then - EHP = EHP / 10 ^ 3 - DivideP = 10 ^ 3 - letterP = "k" - EHPdecimal = 2 - elseif EHP > -1 then - EHP = EHP / 1 - DivideP = 1 - EHPdecimal = 0 - end - - if EHM > 10 ^ 9 then - EHM = EHM / 10 ^ 9 - DivideM = 10 ^ 9 - letterM = "b" - EHMdecimal = 2 - elseif EHM > 10 ^ 8 then - EHM = EHM / 10 ^ 6 - DivideM = 10 ^ 6 - letterM = "m" - EHMdecimal = 0 - elseif EHM > 10 ^ 7 then - EHM = EHM / 10 ^ 6 - DivideM = 10 ^ 6 - letterM = "m" - elseif EHM > 10 ^ 6 then - EHM = EHM / 10 ^ 6 - DivideM = 10 ^ 6 - letterM = "m" - EHMdecimal = 2 - elseif EHM > 10 ^ 5 then - EHM = EHM / 10 ^ 3 - DivideM = 10 ^ 3 - letterM = "k" - EHMdecimal = 0 - elseif EHM > 10 ^ 4 then - EHM = EHM / 10 ^ 3 - DivideM = 10 ^ 3 - letterM = "k" - elseif EHM > 10 ^ 3 then - EHM = EHM / 10 ^ 3 - DivideM = 10 ^ 3 - letterM = "k" - EHMdecimal = 2 - elseif EHM > -1 then - EHM = EHM / 1 - DivideM = 1 - EHMdecimal = 0 - end - - -- Format displayed text with appropriate colors -- - local Color = "" - if Mode ~= "magic" then - for i = 1, 6 do - if EHP >= Threshold[1][i] / DivideP then Color = ColorFunction[i] end - end - if PImmunity == 1 then Color = ColorFunction[7] end - EHP = string.format("P:|c%s%." .. EHPdecimal .. "f" .. letterP .. "|r", Color, EHP) - else EHP = "" - end - - if Mode ~= "physical" then - for i = 1, 6 do - if EHM >= Threshold[2][i] / DivideM then Color = ColorFunction[i] end - end - if MImmunity == 1 then Color = ColorFunction[7] end - EHM = string.format("M:|c%s%." .. EHMdecimal .. "f" .. letterM .. "|r", Color, EHM) - else EHM = "" - end - - local separator = "" - if Mode == "both" and aura_env.Align == "horizontal" then separator = " | " - elseif Mode == "both" and aura_env.Align == "vertical" then separator = "\n" end - - --- CPU Benchmarking --- - if Debug then - aura_env.time = (aura_env.time or 0) + debugprofilestop() - start - if aura_env.count == 0 then - print(aura_env.time) - aura_env.time = 0 - end - return "P: " .. ReductionP .. "\n" .. "M: " .. ReductionM - end - - return EHP .. separator .. EHM -end - ---CUSTOM TRIGGER -function(t) - return t[1] -end - ---TRIGGER 1 - ALIVE - ---ACTIVE_TALENT_GROUP_CHANGED -function() - aura_env.SpecID = GetSpecialization() -end - ---COMBAT_LOG_EVENT_UNFILTERED -function(event) - -- Original code from https://wago.io/B1M5OqeFb - if aura_env.ClassID == 10 and aura_env.SpecID == 3 then - local CLEU = {CombatLogGetCurrentEventInfo()} - local message = CLEU[2] - local destName = CLEU[9] - local Multiplier = 0.5 - if aura_env.GoodKarma then - Multiplier = 1 - end - if destName and UnitIsUnit("player", destName) then - if message == "SPELL_ABSORBED" then - local chk = CLEU[9] - local spellID, absorbed = 0, 0 - if type(chk) == "number" then -- Spell - spellID = CLEU[19] - absorbed = CLEU[22] - else -- Swing - spellID = CLEU[16] - absorbed = CLEU[19] - end - if spellID == 122470 then - aura_env.TouchOfKarma = math.max(aura_env.TouchOfKarma - absorbed, 0) - end - elseif message == "SPELL_AURA_APPLIED" then - local spellID = CLEU[12] - if spellID == 122470 then - aura_env.maxValue = UnitHealthMax("player") * Multiplier - aura_env.TouchOfKarma = aura_env.maxValue - end - elseif message == "SPELL_AURA_REMOVED" then - local spellID = CLEU[12] - if spellID == 122470 then - aura_env.TouchOfKarma = 0 - end - end - end - end -end - ---PLAYER_TARGET_CHANGED,ENCOUNTER_START,INSTANCE_ENCOUNTER_ENGAGE_UNIT -function() - local PlayerLevel = aura_env.PlayerLevel - local TargetLevel = PlayerLevel - if UnitExists("boss1") then - TargetLevel = UnitLevel("boss1") - elseif UnitExists("target") then - TargetLevel = UnitLevel("target") - end - if TargetLevel == -1 then -- Raid boss - TargetLevel = PlayerLevel + 3 - -- elseif TargetLevel < aura_env.PlayerLevel then - -- TargetLevel = PlayerLevel -- Prevents the armor scaling from looking too strange. Currently disabled - end - aura_env.TargetLevel = TargetLevel -end - ---PLAYER_LEVEL_UP -function(event, NewLevel) - aura_env.PlayerLevel = NewLevel -end - ---EVERY FRAME?? (For last defender - delet?) -function() - if aura_env.ClassID == 2 and aura_env.SpecID == 2 then -- Enable for Protection Paladins only - if IsPlayerSpell(203791) then -- Last Defender - talent - local now = GetTime() - if now - aura_env.NameplateCheck >= 0.1 then -- Throttle - aura_env.NameplateCheck = now - local counter = 0 - local i - for i = 1, 40 do - local unit = "nameplate" .. i - if UnitExists(unit) and not UnitIsFriend("player", unit) then - if WeakAuras.GetRange(unit) < 8 then -- 8y range check - counter = counter + 1 - end - end - end - aura_env.NameplateCounter = counter - end - else aura_env.NameplateCounter = 0 -- Reset counter if the talent is not selected - end - end -end - ---INIT-- Made by Zeler-Ravencrest EU, with great help from Stryer-Ravencrest EU -aura_env.Mode = "both" -- Choose from "physical", "magic", "both" to change the value(s) displayed -aura_env.Align = "vertical" -- Choose which alignment you want. "vertical" for vertical alignment, "horizontal" for horizontal alignment -aura_env.AoE = true -- Enable avoidance with true and disable it with false -aura_env.GlobalExport = true -- Enable export of certain variables as global variables for use in other weakauras -aura_env.Debug = false -- Enable debug with true. It will then return the damage reduction multipliers -local text = true -- Disable the 'P:' and the 'M:' with false -aura_env.DisplayDecimals = 1 -- The number of decimals displayed - -aura_env.PlayerLevel = UnitLevel("player") -aura_env.TargetLevel = aura_env.PlayerLevel -aura_env.TouchOfKarma = 0 -aura_env.GoodKarma = IsPlayerSpell(280195) -- Wind Walker Monk - Talent -aura_env.HighmountainTauren = IsPlayerSpell(255659) -- Rugged Tenacity - Passive -aura_env.NameplateCheck = 0 -- Protection Paladin - Last Defender - talent -aura_env.NameplateCounter = 0 -- Protection Paladin - Last Defender - talent - --- Color values, the accepted values are from 0 to 255 --- {red, green, blue} -aura_env.Color = { - {0, 255, 0}, -- Lowest HP - {0, 255, 0}, - {0, 255, 0}, - {0, 255, 0}, - {0, 255, 0}, - {0, 255, 0}, -- Highest HP - {0, 255, 0}, -- Immunity color -} - --- Thresholds at which the color changes (leave the first 0) -aura_env.Threshold = { - {0, 1, 2, 3, 4, 5}, -- Physical EH - {0, 1, 2, 3, 4, 5}, -- Magic EH -} - -local function RGBtoHex(rgb) - return string.format("ff%02x%02x%02x", rgb[1], rgb[2], rgb[3]) -end - -for i = 1, #aura_env.Color do - aura_env.Color[i] = RGBtoHex(aura_env.Color[i]) -end - --- Check player class and spec -aura_env.ClassID = select(3, UnitClass("player")) -aura_env.SpecID = GetSpecialization() - --- Class self-buffs: [Spell ID] = {Phys Reduction, Magic Reduction} -aura_env.BasicReductions = { - - --- Death Knight --- - [194679] = {0.70, 0.70}, -- Rune Tap - - --- Demon Hunter --- - - --- Druid --- - [158792] = {0.91, 0.91}, -- Pulverize - [22812] = {0.80, 0.80}, -- Barkskin - [61336] = {0.50, 0.50}, -- Survival Instincts - - --- Hunter --- - [186265] = {0.70, 0.70}, -- Aspect of the Turtle - [264735] = {0.80, 0.80}, -- Survival of the Fittest - - --- Mage --- - [113862] = {0.40, 0.40}, -- Greater Invisibility - [235450] = {1, 0.85}, -- Prismatic Barrier - - --- Monk --- - [120954] = {0.80, 0.80}, -- Fortifying Brew (BrM) - [243435] = {0.80, 0.80}, -- Fortifying Brew (MW) - [122278] = {0.80, 0.80}, -- Dampen Harm, assumed at minimum reduction - [122783] = {1, 0.40}, -- Diffuse Magic - [115176] = {0.40, 0.40}, -- Zen Meditation - - --- Paladin --- - [498] = {0.80, 0.80}, -- Divine Protection - [31850] = {0.80, 0.80}, -- Ardent Defender - [205191] = {0.65, 1}, -- Eye for an Eye - talent - [86659] = {0.50, 0.50}, -- Guardian of Ancient Kings - [212641] = {0.50, 0.50}, -- Guardian of Ancient Kings - Glyph of the Queen - [183436] = {0.70, 0.70}, -- Retribution - passive - [6940] = {0.70, 0.70}, -- Blessing of Sacrifice - [204335] = {0.80, 0.80}, -- Aegis of Light - talent - - --- Priest --- - [47585] = {0.40, 0.40}, -- Dispersion - [193065] = {0.90, 0.90}, -- Masochism - talent - [232698] = {0.90, 1}, -- Shadowform - [33206] = {0.60, 0.60}, -- Pain Suppression - -- [194384] = {0.97, 0.97}, -- Leniece - talent -- Currently disabled due to being unable to track if the casting priest has the talent or not - [81782] = {0.75, 0.75}, -- Power Word: Barrier - - --- Rogue --- - [45182] = {0.15, 0.15}, -- Cheating Death - Cheat Death talent - - --- Shaman --- - [108271] = {0.60, 0.60}, -- Astral Shift - [98007] = {0.90, 0.90}, -- Spirit Link Totem - - --- Warlock --- - [104773] = {0.60, 0.60}, -- Unending Resolve - - --- Warrior --- - [197690] = {0.80, 0.80}, -- Defensive Stance - [118038] = {0.70, 0.70}, -- Die by the Sword - [184364] = {0.70, 0.70}, -- Enraged Regeneration - [871] = {0.60, 0.60}, -- Shield Wall - [23920] = {1, 0.80}, -- Spell Reflection - [223658] = {0.70, 0.70}, -- Safeguard - - --- Miscellaneous --- - [241836] = {0.95, 0.95}, -- Shadow of Celumbra - [65116] = {0.90, 1}, -- Stoneform - [211080] = {0.90, 0.90}, -- Comforting light (Court of Stars) - [273809] = {1.30, 1.30} -- Idol of Rage -} - -if aura_env.GlobalExport then - WA_ZELER_EH = {} -end +--DISPLAY EVERY FRAME SMH +function() + --- CPU benchmarking --- + local start + local aura_env = aura_env + local Debug = aura_env.Debug + if Debug then + aura_env.count = aura_env.count or 1 + aura_env.count = (aura_env.count + 1) % 600 + start = debugprofilestop() + end + + -- Setting some aura_env to local variables to improve performance -- + local ClassID = aura_env.ClassID + local SpecID = aura_env.SpecID + local AoE = aura_env.AoE + local Mode = aura_env.Mode + local ColorFunction = aura_env.Color + local Threshold = aura_env.Threshold + local BasicReductions = aura_env.BasicReductions + + -- Armor calulation // Armor scales differently depending on the enemy level, this makes sure is stays accurate -- + local Armor = select(2, UnitArmor("player")) + Armor = 1 - C_PaperDollInfo.GetArmorEffectiveness(Armor, aura_env.TargetLevel) -- Gets the reduction percentage and makes it usable + + -- All Classes + local CurrentHealth = UnitHealth("player") + local MaxHealth = UnitHealthMax("player") + local Vers = 1 - (GetCombatRatingBonus(31) / 100) + local Avoid = 1 + local ScanTarget = false + if AoE then + Avoid = 1 - (GetAvoidance() / 100) + end + local Elusive = 1 + local StaggerP, StaggerM = 1, 1 + local Absorbs = UnitGetTotalAbsorbs("player") + local AbsorbsP, AbsorbsM = Absorbs, Absorbs + + -- Initialize some variables -- + local ClassDRP, ClassDRM = 1, 1 + local PImmunity, MImmunity = 0, 0 + + ----- General damage reduction buffs ----- + local n = 1 + local BuffID = select(10, UnitBuff("player", n)) + while BuffID do + local Reduction = 1 + local PhysicalReduction = 1 + local MagicReduction = 1 + + if BasicReductions[BuffID] then + ClassDRP = ClassDRP * BasicReductions[BuffID][1] + ClassDRM = ClassDRM * BasicReductions[BuffID][2] + end + + ---- More complex tracking ---- + + local AMS, BloodS = 0, 0 + + --- Death Knight --- + if BuffID == 48792 then + Reduction = 1 + (tonumber(select(18, UnitBuff("player", n)) or 0)) / 100 -- Icebound Fortitude // using plus since the tooltip returns a negative value + + elseif BuffID == 48707 then + AMS = (select(16, UnitBuff("player", n)) or 0) -- Anti-Magic Shell + + elseif BuffID == 77535 then + BloodS = (select(16, UnitBuff("player", n)) or 0) -- Blood Shield + + --- Demon Hunter --- + elseif BuffID == 212800 then + if IsPlayerSpell(205411) then Reduction = 0.50 -- Blur + else Reduction = 0.65 end + + elseif BuffID == 196555 then PImmunity = 1 -- Netherwalk + + --- Druid --- + elseif BuffID == 102342 then + Reduction = 1 + (tonumber(select(16, UnitBuff("player", n)) or 0)) / 100 -- Ironbark // using plus since the tooltip returns a negative value + + --- Hunter --- + elseif BuffID == 186265 then -- Aspect of the Turtle + PImmunity = 1 + MImmunity = 1 + + --- Mage --- + elseif BuffID == 45438 then -- Ice Block + PImmunity = 1 + MImmunity = 1 + + --- Monk --- + elseif BuffID == 261769 then + Reduction = 1 + (select(16, UnitBuff("player", n)) or 0) / 100 -- Inner Strength // using plus since the tooltip returns a negative value + + elseif BuffID == 115295 then + Absorbs = Absorbs - select(16, UnitBuff("player", n)) -- Guard // prevents Guard from counting as a normal absorb + + --- Paladin --- + elseif BuffID == 210320 then + Reduction = 1 + (tonumber(select(16, UnitBuff("player", n)) or 0)) / 100 -- Devotion Aura // using plus since the tooltip returns a negative value + + elseif BuffID == 1022 then PImmunity = 1 -- Blessing of Protection + elseif BuffID == 204018 then MImmunity = 1 -- Blessing of Spellwarding + + elseif BuffID == 188370 then + Reduction = 1 - (GetMasteryEffect() / 2.85) / 100 -- Consecration // May not be 100% accurate, but it's good enough for now + if IsEquippedItem(137047) then Reduction = Reduction * 0.96 end -- Consecration (Legendary Ring) + + elseif BuffID == 642 then -- Divine Shield + PImmunity = 1 + MImmunity = 1 + + --- Priest --- + elseif BuffID == 45242 then + Reduction = 1 - (select(3, UnitBuff("player", n)) or 0) * 15 / 100 -- Focused Will + + elseif BuffID == 139 then + if IsPlayerSpell(235189) and UnitBuff("player", n, nil, "player") then + Reduction = 0.90 -- Perseverance - Talent + end + + --- Rogue --- + elseif BuffID == 1966 then + if not AoE and IsPlayerSpell(79008) + then Elusive = 0.70 -- Elusiveness + else -- Feint + if AoE then Avoid = Avoid * 0.50 end + end + elseif BuffID == 31224 then MImmunity = 1 -- Cloak of Shadows + + --- Shaman --- + elseif BuffID == 260881 then + Reduction = 1 - (tonumber(select(3, UnitBuff("player", n)) or 0)) * 5 / 100 -- Ghost in the Mist - Talent + + --- Warlock --- + + --- Warrior --- + elseif BuffID == 184362 and IsPlayerSpell(208154) then -- Enrage + Reduction = 0.90 -- War Paint - Talent + + end + + AbsorbsP = Absorbs - AMS + AbsorbsM = Absorbs - BloodS + + ClassDRP = ClassDRP * Reduction * PhysicalReduction + ClassDRM = ClassDRM * Reduction * MagicReduction + n = n + 1 + BuffID = select(10, UnitBuff("player", n)) + end + + ----- Damage reductions with special calculations ----- + + --- Death Knight --- + if ClassID == 6 then + local Necropolis = 1 + if IsPlayerSpell(206967) then -- Will of the Necropolis - Talent + if CurrentHealth / MaxHealth < 0.35 then Necropolis = 0.65 + end + end + ClassDRP = ClassDRP * Necropolis + ClassDRM = ClassDRM * Necropolis + end + + --- Demon Hunter --- + if ClassID == 12 then + local HavocDemWards = 1 + local VengDemWards = 1 + if SpecID == 1 then + HavocDemWards = 0.90 -- Demonic Wards - Passive + elseif SpecID == 2 then + VengDemWards = 0.90 -- Demonic Wards - Passive + ScanTarget = true + end + + ClassDRP = ClassDRP * VengDemWards + ClassDRM = ClassDRM * VengDemWards * HavocDemWards + end + + --- Druid --- + if ClassID == 11 then + local GuardA = 1 + if IsEquippedItem(137015) and IsPlayerSpell(16931) then + GuardA = 0.895 -- Legendary chest + elseif IsPlayerSpell(16931) then + GuardA = 0.94 -- Thick Hide (Guardian Affinity) + end + if SpecID == 3 then + if IsPlayerSpell(204053) then + ScanTarget = true + end + end + + ClassDRP = ClassDRP * GuardA + ClassDRM = ClassDRM * GuardA + end + + --- Hunter --- + if ClassID == 3 then + end + + --- Mage --- + if ClassID == 8 then + end + + --- Monk --- + if ClassID == 10 then + if SpecID == 1 then + ScanTarget = true + -- Gets stagger agaist current target, if no target is found use base -- + local StaggerBase, StaggerTarget = C_PaperDollInfo.GetStaggerPercentage("player") + if not StaggerTarget then StaggerTarget = StaggerBase end + StaggerM = StaggerTarget * 0.35 + StaggerP = 1 - StaggerTarget / 100 + StaggerM = 1 - StaggerM / 100 + + -- Stagger cap -- + local Stagger = UnitStagger("player") or 0 -- Calculate MaxHealth effective reduction for Stagger + local StaggerCapP = (CurrentHealth + AbsorbsP) / (CurrentHealth + AbsorbsP + 100 * MaxHealth - Stagger * 10) + local StaggerCapM = (CurrentHealth + AbsorbsM) / (CurrentHealth + AbsorbsM + 100 * MaxHealth - Stagger * 10) + if StaggerCapP < 0.01 then StaggerCapP = 0.01 end -- Stagger caps at 99% + if StaggerCapM < 0.01 then StaggerCapM = 0.01 end + if StaggerP < StaggerCapP then StaggerP = StaggerCapP end + if StaggerM < StaggerCapM then StaggerM = StaggerCapM end + end + if SpecID == 3 then + local Karma = 0 + aura_env.GoodKarma = IsPlayerSpell(280195) -- Talent + Karma = aura_env.TouchOfKarma + Absorbs = Absorbs + Karma + AbsorbsP = AbsorbsP + Karma + AbsorbsM = AbsorbsM + Karma + end + + ClassDRP = ClassDRP * StaggerP + ClassDRM = ClassDRM * StaggerM + end + + --- Paladin --- + if ClassID == 2 then + local LastDefender = 1 + if SpecID == 2 then -- Protection + LastDefender = 1 - (1 - 0.97 ^ aura_env.NameplateCounter) + end + ClassDRP = ClassDRP * LastDefender + ClassDRM = ClassDRM * LastDefender + end + + --- Priest --- + if ClassID == 5 then + end + + --- Rogue --- + if ClassID == 4 then + end + + --- Shaman --- + if ClassID == 7 then + end + + --- Warlock --- + if ClassID == 9 then + local SoulLink = 1 + local DestructionMastery = 1 + if SpecID == 2 then -- Soul Link passive for Demonology Warlocks + if UnitExists("pet") then + SoulLink = 0.80 + end + elseif SpecID == 3 then + DestructionMastery = 1 - ((GetMasteryEffect() / 9) / 100) -- Destruction mastery effect + end + + ClassDRP = ClassDRP * SoulLink * DestructionMastery + ClassDRM = ClassDRM * SoulLink * DestructionMastery + end + + --- Warrior --- + if ClassID == 1 then + if SpecID == 3 then + ScanTarget = true + end + + ClassDRP = ClassDRP + ClassDRM = ClassDRM + end + + --- Miscellaneous --- + if aura_env.HighmountainTauren then + local Stamina = UnitStat("player", 3) + local RuggedTenacity = floor((Stamina * 0.0003 * 20) + 0.5) + Absorbs = Absorbs + RuggedTenacity + end + + --- Checking debuffs on target if needed --- + if ScanTarget then + local TD = 1 + local DebuffID = select(10, UnitDebuff("target", TD)) + while DebuffID do + local DebuffTarget = 1 + local DebuffTargetP = 1 + local DebuffTargetM = 1 + + --- Demon Hunter --- + if DebuffID == 207744 and select(3, UnitDebuff("target", TD, nil, "player")) then + DebuffTarget = 0.60 -- Fiery Brand + + elseif DebuffID == 268178 and select(3, UnitDebuff("target", TD, nil, "player")) then + DebuffTarget = 0.94 -- Void Reaver -- Talent + + --- Druid --- + elseif DebuffID == 192090 and select(3, UnitDebuff("target", TD, nil, "player")) then + DebuffTarget = 1 - 0.02 * (select(3, UnitDebuff("target", TD, nil, "player")) or 0) -- Rend and Tear - Talent + + --- Monk --- + elseif DebuffID == 123725 then + DebuffTarget = 1 + 0.01 * (select(17, UnitDebuff("target", TD, nil, "player")) or 0) -- Breath of Fire // using plus since the tooltip returns a negative value + + --- Warrior --- + elseif DebuffID == 1160 and select(7, UnitDebuff("target", TD)) == "player" then + DebuffTarget = 0.80 -- Demoralizing Shout + end + + ClassDRP = ClassDRP * DebuffTarget * DebuffTargetP + ClassDRM = ClassDRM * DebuffTarget * DebuffTargetM + TD = TD + 1 + DebuffID = select(10, UnitDebuff("target", TD)) + end + end + + -- Damage taken modifiers -- + local ReductionP = Vers * Avoid * ClassDRP * Armor * Elusive + local ReductionM = Vers * Avoid * ClassDRM * Elusive + -- CurrentHealth health and shields -- + local EHP = (CurrentHealth + AbsorbsP) / ReductionP + local EHM = (CurrentHealth + AbsorbsM) / ReductionM + + -- Export pre-avoidance EHP, EHM and immunity status as global variables -- + if aura_env.GlobalExport then + -- Calculate max effective health (no absorbs) -- + local EHPMaxHealth = (MaxHealth + AbsorbsP) / ReductionP + local EHMMaxHealth = (MaxHealth + AbsorbsM) / ReductionM + -- Export to globals -- + local Export = WA_ZELER_EH + Export.EHPMAX, Export.EHMMAX = EHPMaxHealth * Avoid * Elusive, EHMMaxHealth * Avoid * Elusive + Export.EHP, Export.EHM = EHP * Avoid * Elusive, EHM * Avoid * Elusive + + Export.REDP, Export.REDM = ReductionP / Avoid / Elusive, ReductionM / Avoid / Elusive + Export.ABS, Export.ABSP, Export.ABSM = Absorbs, AbsorbsP, AbsorbsM + Export.EHPIMMUNITY, Export.EHMIMMUNITY = PImmunity, MImmunity + Export.EHARMOR = Armor + Export.STAGGERP, Export.STAGGERM = StaggerP, StaggerM + end + + -- Formatting numbers -- + local DivideP, DivideM = 1, 1 + local ImportDecimal = aura_env.DisplayDecimals + local EHPdecimal, EHMdecimal = ImportDecimal, ImportDecimal + local letterP, letterM = "", "" + if EHP > 10 ^ 9 then + EHP = EHP / 10 ^ 9 + DivideP = 10 ^ 9 + letterP = "b" + EHPdecimal = 2 + elseif EHP > 10 ^ 8 then + EHP = EHP / 10 ^ 6 + DivideP = 10 ^ 6 + letterP = "m" + EHPdecimal = 0 + elseif EHP > 10 ^ 7 then + EHP = EHP / 10 ^ 6 + DivideP = 10 ^ 6 + letterP = "m" + elseif EHP > 10 ^ 6 then + EHP = EHP / 10 ^ 6 + DivideP = 10 ^ 6 + letterP = "m" + EHPdecimal = 2 + elseif EHP > 10 ^ 5 then + EHP = EHP / 10 ^ 3 + DivideP = 10 ^ 3 + letterP = "k" + EHPdecimal = 0 + elseif EHP > 10 ^ 4 then + EHP = EHP / 10 ^ 3 + DivideP = 10 ^ 3 + letterP = "k" + elseif EHP > 10 ^ 3 then + EHP = EHP / 10 ^ 3 + DivideP = 10 ^ 3 + letterP = "k" + EHPdecimal = 2 + elseif EHP > -1 then + EHP = EHP / 1 + DivideP = 1 + EHPdecimal = 0 + end + + if EHM > 10 ^ 9 then + EHM = EHM / 10 ^ 9 + DivideM = 10 ^ 9 + letterM = "b" + EHMdecimal = 2 + elseif EHM > 10 ^ 8 then + EHM = EHM / 10 ^ 6 + DivideM = 10 ^ 6 + letterM = "m" + EHMdecimal = 0 + elseif EHM > 10 ^ 7 then + EHM = EHM / 10 ^ 6 + DivideM = 10 ^ 6 + letterM = "m" + elseif EHM > 10 ^ 6 then + EHM = EHM / 10 ^ 6 + DivideM = 10 ^ 6 + letterM = "m" + EHMdecimal = 2 + elseif EHM > 10 ^ 5 then + EHM = EHM / 10 ^ 3 + DivideM = 10 ^ 3 + letterM = "k" + EHMdecimal = 0 + elseif EHM > 10 ^ 4 then + EHM = EHM / 10 ^ 3 + DivideM = 10 ^ 3 + letterM = "k" + elseif EHM > 10 ^ 3 then + EHM = EHM / 10 ^ 3 + DivideM = 10 ^ 3 + letterM = "k" + EHMdecimal = 2 + elseif EHM > -1 then + EHM = EHM / 1 + DivideM = 1 + EHMdecimal = 0 + end + + -- Format displayed text with appropriate colors -- + local Color = "" + if Mode ~= "magic" then + for i = 1, 6 do + if EHP >= Threshold[1][i] / DivideP then Color = ColorFunction[i] end + end + if PImmunity == 1 then Color = ColorFunction[7] end + EHP = string.format("P:|c%s%." .. EHPdecimal .. "f" .. letterP .. "|r", Color, EHP) + else EHP = "" + end + + if Mode ~= "physical" then + for i = 1, 6 do + if EHM >= Threshold[2][i] / DivideM then Color = ColorFunction[i] end + end + if MImmunity == 1 then Color = ColorFunction[7] end + EHM = string.format("M:|c%s%." .. EHMdecimal .. "f" .. letterM .. "|r", Color, EHM) + else EHM = "" + end + + local separator = "" + if Mode == "both" and aura_env.Align == "horizontal" then separator = " | " + elseif Mode == "both" and aura_env.Align == "vertical" then separator = "\n" end + + --- CPU Benchmarking --- + if Debug then + aura_env.time = (aura_env.time or 0) + debugprofilestop() - start + if aura_env.count == 0 then + print(aura_env.time) + aura_env.time = 0 + end + return "P: " .. ReductionP .. "\n" .. "M: " .. ReductionM + end + + return EHP .. separator .. EHM +end + +--CUSTOM TRIGGER +function(t) + return t[1] +end + +--TRIGGER 1 - ALIVE + +--ACTIVE_TALENT_GROUP_CHANGED +function() + aura_env.SpecID = GetSpecialization() +end + +--COMBAT_LOG_EVENT_UNFILTERED +function(event) + -- Original code from https://wago.io/B1M5OqeFb + if aura_env.ClassID == 10 and aura_env.SpecID == 3 then + local CLEU = {CombatLogGetCurrentEventInfo()} + local message = CLEU[2] + local destName = CLEU[9] + local Multiplier = 0.5 + if aura_env.GoodKarma then + Multiplier = 1 + end + if destName and UnitIsUnit("player", destName) then + if message == "SPELL_ABSORBED" then + local chk = CLEU[9] + local spellID, absorbed = 0, 0 + if type(chk) == "number" then -- Spell + spellID = CLEU[19] + absorbed = CLEU[22] + else -- Swing + spellID = CLEU[16] + absorbed = CLEU[19] + end + if spellID == 122470 then + aura_env.TouchOfKarma = math.max(aura_env.TouchOfKarma - absorbed, 0) + end + elseif message == "SPELL_AURA_APPLIED" then + local spellID = CLEU[12] + if spellID == 122470 then + aura_env.maxValue = UnitHealthMax("player") * Multiplier + aura_env.TouchOfKarma = aura_env.maxValue + end + elseif message == "SPELL_AURA_REMOVED" then + local spellID = CLEU[12] + if spellID == 122470 then + aura_env.TouchOfKarma = 0 + end + end + end + end +end + +--PLAYER_TARGET_CHANGED,ENCOUNTER_START,INSTANCE_ENCOUNTER_ENGAGE_UNIT +function() + local PlayerLevel = aura_env.PlayerLevel + local TargetLevel = PlayerLevel + if UnitExists("boss1") then + TargetLevel = UnitLevel("boss1") + elseif UnitExists("target") then + TargetLevel = UnitLevel("target") + end + if TargetLevel == -1 then -- Raid boss + TargetLevel = PlayerLevel + 3 + -- elseif TargetLevel < aura_env.PlayerLevel then + -- TargetLevel = PlayerLevel -- Prevents the armor scaling from looking too strange. Currently disabled + end + aura_env.TargetLevel = TargetLevel +end + +--PLAYER_LEVEL_UP +function(event, NewLevel) + aura_env.PlayerLevel = NewLevel +end + +--EVERY FRAME?? (For last defender - delet?) +function() + if aura_env.ClassID == 2 and aura_env.SpecID == 2 then -- Enable for Protection Paladins only + if IsPlayerSpell(203791) then -- Last Defender - talent + local now = GetTime() + if now - aura_env.NameplateCheck >= 0.1 then -- Throttle + aura_env.NameplateCheck = now + local counter = 0 + local i + for i = 1, 40 do + local unit = "nameplate" .. i + if UnitExists(unit) and not UnitIsFriend("player", unit) then + if WeakAuras.GetRange(unit) < 8 then -- 8y range check + counter = counter + 1 + end + end + end + aura_env.NameplateCounter = counter + end + else aura_env.NameplateCounter = 0 -- Reset counter if the talent is not selected + end + end +end + +--INIT-- Made by Zeler-Ravencrest EU, with great help from Stryer-Ravencrest EU +aura_env.Mode = "both" -- Choose from "physical", "magic", "both" to change the value(s) displayed +aura_env.Align = "vertical" -- Choose which alignment you want. "vertical" for vertical alignment, "horizontal" for horizontal alignment +aura_env.AoE = true -- Enable avoidance with true and disable it with false +aura_env.GlobalExport = true -- Enable export of certain variables as global variables for use in other weakauras +aura_env.Debug = false -- Enable debug with true. It will then return the damage reduction multipliers +local text = true -- Disable the 'P:' and the 'M:' with false +aura_env.DisplayDecimals = 1 -- The number of decimals displayed + +aura_env.PlayerLevel = UnitLevel("player") +aura_env.TargetLevel = aura_env.PlayerLevel +aura_env.TouchOfKarma = 0 +aura_env.GoodKarma = IsPlayerSpell(280195) -- Wind Walker Monk - Talent +aura_env.HighmountainTauren = IsPlayerSpell(255659) -- Rugged Tenacity - Passive +aura_env.NameplateCheck = 0 -- Protection Paladin - Last Defender - talent +aura_env.NameplateCounter = 0 -- Protection Paladin - Last Defender - talent + +-- Color values, the accepted values are from 0 to 255 +-- {red, green, blue} +aura_env.Color = { + {0, 255, 0}, -- Lowest HP + {0, 255, 0}, + {0, 255, 0}, + {0, 255, 0}, + {0, 255, 0}, + {0, 255, 0}, -- Highest HP + {0, 255, 0}, -- Immunity color +} + +-- Thresholds at which the color changes (leave the first 0) +aura_env.Threshold = { + {0, 1, 2, 3, 4, 5}, -- Physical EH + {0, 1, 2, 3, 4, 5}, -- Magic EH +} + +local function RGBtoHex(rgb) + return string.format("ff%02x%02x%02x", rgb[1], rgb[2], rgb[3]) +end + +for i = 1, #aura_env.Color do + aura_env.Color[i] = RGBtoHex(aura_env.Color[i]) +end + +-- Check player class and spec +aura_env.ClassID = select(3, UnitClass("player")) +aura_env.SpecID = GetSpecialization() + +-- Class self-buffs: [Spell ID] = {Phys Reduction, Magic Reduction} +aura_env.BasicReductions = { + + --- Death Knight --- + [194679] = {0.70, 0.70}, -- Rune Tap + + --- Demon Hunter --- + + --- Druid --- + [158792] = {0.91, 0.91}, -- Pulverize + [22812] = {0.80, 0.80}, -- Barkskin + [61336] = {0.50, 0.50}, -- Survival Instincts + + --- Hunter --- + [186265] = {0.70, 0.70}, -- Aspect of the Turtle + [264735] = {0.80, 0.80}, -- Survival of the Fittest + + --- Mage --- + [113862] = {0.40, 0.40}, -- Greater Invisibility + [235450] = {1, 0.85}, -- Prismatic Barrier + + --- Monk --- + [120954] = {0.80, 0.80}, -- Fortifying Brew (BrM) + [243435] = {0.80, 0.80}, -- Fortifying Brew (MW) + [122278] = {0.80, 0.80}, -- Dampen Harm, assumed at minimum reduction + [122783] = {1, 0.40}, -- Diffuse Magic + [115176] = {0.40, 0.40}, -- Zen Meditation + + --- Paladin --- + [498] = {0.80, 0.80}, -- Divine Protection + [31850] = {0.80, 0.80}, -- Ardent Defender + [205191] = {0.65, 1}, -- Eye for an Eye - talent + [86659] = {0.50, 0.50}, -- Guardian of Ancient Kings + [212641] = {0.50, 0.50}, -- Guardian of Ancient Kings - Glyph of the Queen + [183436] = {0.70, 0.70}, -- Retribution - passive + [6940] = {0.70, 0.70}, -- Blessing of Sacrifice + [204335] = {0.80, 0.80}, -- Aegis of Light - talent + + --- Priest --- + [47585] = {0.40, 0.40}, -- Dispersion + [193065] = {0.90, 0.90}, -- Masochism - talent + [232698] = {0.90, 1}, -- Shadowform + [33206] = {0.60, 0.60}, -- Pain Suppression + -- [194384] = {0.97, 0.97}, -- Leniece - talent -- Currently disabled due to being unable to track if the casting priest has the talent or not + [81782] = {0.75, 0.75}, -- Power Word: Barrier + + --- Rogue --- + [45182] = {0.15, 0.15}, -- Cheating Death - Cheat Death talent + + --- Shaman --- + [108271] = {0.60, 0.60}, -- Astral Shift + [98007] = {0.90, 0.90}, -- Spirit Link Totem + + --- Warlock --- + [104773] = {0.60, 0.60}, -- Unending Resolve + + --- Warrior --- + [197690] = {0.80, 0.80}, -- Defensive Stance + [118038] = {0.70, 0.70}, -- Die by the Sword + [184364] = {0.70, 0.70}, -- Enraged Regeneration + [871] = {0.60, 0.60}, -- Shield Wall + [23920] = {1, 0.80}, -- Spell Reflection + [223658] = {0.70, 0.70}, -- Safeguard + + --- Miscellaneous --- + [241836] = {0.95, 0.95}, -- Shadow of Celumbra + [65116] = {0.90, 1}, -- Stoneform + [211080] = {0.90, 0.90}, -- Comforting light (Court of Stars) + [273809] = {1.30, 1.30} -- Idol of Rage +} + +if aura_env.GlobalExport then + WA_ZELER_EH = {} +end diff --git a/Complete Projects/Legion/Easter Achiv Bullshit.lua b/WeakAuras/Projects/Easter Achiv Bullshit.lua similarity index 96% rename from Complete Projects/Legion/Easter Achiv Bullshit.lua rename to WeakAuras/Projects/Easter Achiv Bullshit.lua index 7a2f0a3..82f7c25 100644 --- a/Complete Projects/Legion/Easter Achiv Bullshit.lua +++ b/WeakAuras/Projects/Easter Achiv Bullshit.lua @@ -1,55 +1,55 @@ ---NAME_PLATE_UNIT_ADDED NAME_PLATE_UNIT_REMOVED PLAYER_TARGET_CHANGED -function(e,id) - if e == "NAME_PLATE_UNIT_ADDED" then - local race = UnitRace(id) - local sex = UnitSex(id) - if sex == 3 and aura_env.races[race] == 1 then - table.insert(aura_env.targets, UnitName(id) .. " " .. race) - end - end - if e == "NAME_PLATE_UNIT_REMOVED" then - local race = UnitRace(id) - local sex = UnitSex(id) - if sex == 3 and aura_env.races[race] == 1 then - for k,v in ipairs(aura_env.targets) do - if v:match(UnitName(id)) then - table.remove(aura_env.targets, k) - end - end - end - end - if e == "PLAYER_TARGET_CHANGED" and UnitExists("target") then - local race = UnitRace(id) - local sex = UnitSex(id) - if sex == 3 and aura_env.races[race] == 1 then - table.insert(aura_env.targets, UnitName(id) .. " " .. race) - end - end - if e == "PLAYER_TARGET_CHANGED" and not UnitExists("target") then - aura_env.targets = {} - end -end - ---DISPLAY -function() - local output = "" - for k,v in ipairs(aura_env.targets) do - output = output .. v .. "\n" - end - return output -end - ---INIT -aura_env.races = -{ - ["Gnome"] = 1, - ["Night Elf"] = 0, - ["Draenei"] = 0, - ["Orc"] = 0, - ["Undead"] = 0, - ["Dwarf"] = 1, - ["Human"] = 0, - ["Tauren"] = 0, - ["Worgen"] = 0, -} +--NAME_PLATE_UNIT_ADDED NAME_PLATE_UNIT_REMOVED PLAYER_TARGET_CHANGED +function(e,id) + if e == "NAME_PLATE_UNIT_ADDED" then + local race = UnitRace(id) + local sex = UnitSex(id) + if sex == 3 and aura_env.races[race] == 1 then + table.insert(aura_env.targets, UnitName(id) .. " " .. race) + end + end + if e == "NAME_PLATE_UNIT_REMOVED" then + local race = UnitRace(id) + local sex = UnitSex(id) + if sex == 3 and aura_env.races[race] == 1 then + for k,v in ipairs(aura_env.targets) do + if v:match(UnitName(id)) then + table.remove(aura_env.targets, k) + end + end + end + end + if e == "PLAYER_TARGET_CHANGED" and UnitExists("target") then + local race = UnitRace(id) + local sex = UnitSex(id) + if sex == 3 and aura_env.races[race] == 1 then + table.insert(aura_env.targets, UnitName(id) .. " " .. race) + end + end + if e == "PLAYER_TARGET_CHANGED" and not UnitExists("target") then + aura_env.targets = {} + end +end + +--DISPLAY +function() + local output = "" + for k,v in ipairs(aura_env.targets) do + output = output .. v .. "\n" + end + return output +end + +--INIT +aura_env.races = +{ + ["Gnome"] = 1, + ["Night Elf"] = 0, + ["Draenei"] = 0, + ["Orc"] = 0, + ["Undead"] = 0, + ["Dwarf"] = 1, + ["Human"] = 0, + ["Tauren"] = 0, + ["Worgen"] = 0, +} aura_env.targets = {} \ No newline at end of file diff --git a/Complete Projects/Legion/ElwynnForestSpam.lua b/WeakAuras/Projects/ElwynnForestSpam.lua similarity index 98% rename from Complete Projects/Legion/ElwynnForestSpam.lua rename to WeakAuras/Projects/ElwynnForestSpam.lua index 6d51ba0..2a427ac 100644 --- a/Complete Projects/Legion/ElwynnForestSpam.lua +++ b/WeakAuras/Projects/ElwynnForestSpam.lua @@ -1,116 +1,116 @@ ---ZONE_CHANGED_NEW_AREA GGEZCHATSPAM GGEZBEGIN GGEZSTOP INSPIREME ---Doesn't work :(((((( -function(e) - if e == "ZONE_CHANGED_NEW_AREA" then - local currentZone = GetRealZoneText() - if currentZone == "Elwynn Forest" then - print("GET INSPIRED") - if not aura_env.ticker then aura_env.ticker = C_Timer.NewTicker(15, function() WeakAuras.ScanEvents("GGEZCHATSPAM") end) end - else - print(":(") - if aura_env.ticker then aura_env.ticker:Cancel(); aura_env.ticker = nil end - end -elseif e == "GGEZCHATSPAM" then - local rng = math.random(1, aura_env.size) - SendChatMessage(aura_env.inspirationalQuotes[rng], "SAY") -elseif e == "GGEZBEGIN" then - local rng = math.random(1, aura_env.size) - SendChatMessage(aura_env.inspirationalQuotes[rng], "SAY") - print("GET INSPIRED") -if not aura_env.ticker then aura_env.ticker = C_Timer.NewTicker(15, function() WeakAuras.ScanEvents("GGEZCHATSPAM") end) end -elseif e == "GGEZSTOP" then -if aura_env.ticker then aura_env.ticker:Cancel(); aura_env.ticker = nil end -elseif e == "INSPIREME" then -local rng = math.random(1, aura_env.size) -SendChatMessage(aura_env.inspirationalQuotes[rng], "SAY") -end -end - ---INIT -aura_env.chatMessages = {"Ah shucks... you guys are the best!", "C’mon, Mom! One more game before you tuck me in. Oops mistell.", "For glory and honor! Huzzah comrades!", "Gee whiz! That was fun. Good playing!", "Good game! Best of luck to you all!", "Great game, everyone!", "I could really use a hug right now.", "I feel very, very small... please hold me...", "I'm trying to be a nicer person. It's hard, but I am trying guys.", "I'm wrestling with some insecurity issues in my life but thank you all for playing with me.", "It was an honor to play with you all. Thank you.", "It’s past my bedtime. Please don’t tell my mommy.", "Mommy says people my age shouldn’t suck their thumbs.", "Well played. I salute you all.", "Wishing you all the best."} - -aura_env.inspirationalQuotes = { - "Sheep love nu metal", - "Students eat what reality stars demand", - "Don't investigate bath salts", - "Push yourself against yoga", - "Artificate regulations", - "Human emotion can't always be sad", - "There is no need to ruin your marriage because of multiresistant bacteria", - "Failing at punching yourself is probably caused by retardation", - "Get erected and don't be scientific", - "Be weary of rimjobs", - "Keep dieting", - "Ignore how your joints are pulsating", - "You cannot allow RFID-chips to jeopardize your dreams", - "Don’t you get tired of sleeping?", - "Ass kissing can be a cry for help", - "Stop using a condom", - "Simply being beautiful, doesn’t mean you’re not average", - "Trust the grotesqueness of time", - "Your head is dissolving the ground", - "Keep in mind how God once said: A friend loves you", - "All you need in order to create art is gasoline and organic vegetables", - "It takes soft drugs, like marijuana to become above average within the business of caressing", - "Carry on straightening", - "Try to think about that ancient proverb: Those who can live through ignorance, can sell out the earth", - "Be the first person ever to listen to what what nobody expects you to listen to", - "Think about that ancient buddhist wisdom: Our bodily orifices end when our orgasms begin", - "Aim to straighten your belly", - "Keep your eyes shut", - "You can be the first person in the world to try to punch what others find unpunchable", - "Think about these words of wisdom: Glory holes begin when mason jars end", - "Keep in mind that you are not average", - "Notice how your nose is letting go", - "Bend your stomach inwards", - "It's your life. Cut your hair", - "I am so clever that sometimes I don’t understand a single word of what I am saying", - "The only distinction between daylight and an imaginary friend, is that an imaginary friend doesn’t cost anything", - "If one expects irony, one has to prepare for a violin", - "Back in the middle ages there was a dimwitted wanderer who was looking for some poontang, when he encountered a tired, old seer. \"Can you tell me where to find some poontang?\" he asked the seer. The seer quickly replied \"of some poontang I do not know, for I am only a seer\"", - "Think about how your head is energized by the vacuum of space", - "Don't cry over your shrinking wealth, just eat more calories", - "There are some old people who only say no to cryptocurrencies", - "Regret and call 911", - "Reveal your teeth", - "Become independent from fatties", - "Don't stop freaking out", - "Car salesmen become car salesmen because of weakness", - "You have always been a smelly wreck", - "Love milk, die young", - "Childhood is almost identical to being buried alive, you never know what you're gonna get", - "Can you imagine what would happend if the robots were allowed to wear clothes?", - "Where wisdom collapses farts are born", - "Only when you understand the beatuy of vegetables will you confront money", - "Look at the watch, prepare to die, hurt your mouth", - "Before inspiration comes the slaughter", - "Try to tell yourself that you are horrible", - "If you want to get somewhere in life you have to try to be dead", - "Spending time with your family is impossible if you don't do drugs", - "Canada. It's a hoax", - "It's up to you to remind yourself that you are undesired", - "Our large intestines end where our souls begin", - "Seek success but prepare for vegetables", - "Mass-incineration is 70 percent a cry for help", - "Face risk and drink milk", - "There is no I in \"Totalitarianism\"", - "Don't argue with success, be naked", - "If you actually need recognition be a complete imbecile", - "You are a russian bot", - "Each day is another chance to be dreadfully dysfunctional", - "Be the reason why a stranger calls the police at night", - "Hate the mountains", - "Neighbourhoods begin when we learn to moisturize love", - "Puberty can be quite similar to having brain damage", - "Uuuuuurrr Ahhhrrr Uhrrrrr Ahhhhhhrrr Aaaaaarrhg", - "The simple fact that you are dead makes you awesome", - "Get fucked", - "You are being monitored, keep yourself frightened", - "Inspiration is to re-demand ", - "Invert your stomach backwards ", - "Together we can make equality collapse under its own weight ", - "If you find it difficult to achieve the right state, consider this ancient buddhist wisdom: The UFO phenomenon is personalities", - "Isn't it beautiful to take notice of how the air you breathe is letting go of the walls around you?", -} -aura_env.size = table.getn(aura_env.inspirationalQuotes) -print(aura_env.size) +--ZONE_CHANGED_NEW_AREA GGEZCHATSPAM GGEZBEGIN GGEZSTOP INSPIREME +--Doesn't work :(((((( +function(e) + if e == "ZONE_CHANGED_NEW_AREA" then + local currentZone = GetRealZoneText() + if currentZone == "Elwynn Forest" then + print("GET INSPIRED") + if not aura_env.ticker then aura_env.ticker = C_Timer.NewTicker(15, function() WeakAuras.ScanEvents("GGEZCHATSPAM") end) end + else + print(":(") + if aura_env.ticker then aura_env.ticker:Cancel(); aura_env.ticker = nil end + end +elseif e == "GGEZCHATSPAM" then + local rng = math.random(1, aura_env.size) + SendChatMessage(aura_env.inspirationalQuotes[rng], "SAY") +elseif e == "GGEZBEGIN" then + local rng = math.random(1, aura_env.size) + SendChatMessage(aura_env.inspirationalQuotes[rng], "SAY") + print("GET INSPIRED") +if not aura_env.ticker then aura_env.ticker = C_Timer.NewTicker(15, function() WeakAuras.ScanEvents("GGEZCHATSPAM") end) end +elseif e == "GGEZSTOP" then +if aura_env.ticker then aura_env.ticker:Cancel(); aura_env.ticker = nil end +elseif e == "INSPIREME" then +local rng = math.random(1, aura_env.size) +SendChatMessage(aura_env.inspirationalQuotes[rng], "SAY") +end +end + +--INIT +aura_env.chatMessages = {"Ah shucks... you guys are the best!", "C’mon, Mom! One more game before you tuck me in. Oops mistell.", "For glory and honor! Huzzah comrades!", "Gee whiz! That was fun. Good playing!", "Good game! Best of luck to you all!", "Great game, everyone!", "I could really use a hug right now.", "I feel very, very small... please hold me...", "I'm trying to be a nicer person. It's hard, but I am trying guys.", "I'm wrestling with some insecurity issues in my life but thank you all for playing with me.", "It was an honor to play with you all. Thank you.", "It’s past my bedtime. Please don’t tell my mommy.", "Mommy says people my age shouldn’t suck their thumbs.", "Well played. I salute you all.", "Wishing you all the best."} + +aura_env.inspirationalQuotes = { + "Sheep love nu metal", + "Students eat what reality stars demand", + "Don't investigate bath salts", + "Push yourself against yoga", + "Artificate regulations", + "Human emotion can't always be sad", + "There is no need to ruin your marriage because of multiresistant bacteria", + "Failing at punching yourself is probably caused by retardation", + "Get erected and don't be scientific", + "Be weary of rimjobs", + "Keep dieting", + "Ignore how your joints are pulsating", + "You cannot allow RFID-chips to jeopardize your dreams", + "Don’t you get tired of sleeping?", + "Ass kissing can be a cry for help", + "Stop using a condom", + "Simply being beautiful, doesn’t mean you’re not average", + "Trust the grotesqueness of time", + "Your head is dissolving the ground", + "Keep in mind how God once said: A friend loves you", + "All you need in order to create art is gasoline and organic vegetables", + "It takes soft drugs, like marijuana to become above average within the business of caressing", + "Carry on straightening", + "Try to think about that ancient proverb: Those who can live through ignorance, can sell out the earth", + "Be the first person ever to listen to what what nobody expects you to listen to", + "Think about that ancient buddhist wisdom: Our bodily orifices end when our orgasms begin", + "Aim to straighten your belly", + "Keep your eyes shut", + "You can be the first person in the world to try to punch what others find unpunchable", + "Think about these words of wisdom: Glory holes begin when mason jars end", + "Keep in mind that you are not average", + "Notice how your nose is letting go", + "Bend your stomach inwards", + "It's your life. Cut your hair", + "I am so clever that sometimes I don’t understand a single word of what I am saying", + "The only distinction between daylight and an imaginary friend, is that an imaginary friend doesn’t cost anything", + "If one expects irony, one has to prepare for a violin", + "Back in the middle ages there was a dimwitted wanderer who was looking for some poontang, when he encountered a tired, old seer. \"Can you tell me where to find some poontang?\" he asked the seer. The seer quickly replied \"of some poontang I do not know, for I am only a seer\"", + "Think about how your head is energized by the vacuum of space", + "Don't cry over your shrinking wealth, just eat more calories", + "There are some old people who only say no to cryptocurrencies", + "Regret and call 911", + "Reveal your teeth", + "Become independent from fatties", + "Don't stop freaking out", + "Car salesmen become car salesmen because of weakness", + "You have always been a smelly wreck", + "Love milk, die young", + "Childhood is almost identical to being buried alive, you never know what you're gonna get", + "Can you imagine what would happend if the robots were allowed to wear clothes?", + "Where wisdom collapses farts are born", + "Only when you understand the beatuy of vegetables will you confront money", + "Look at the watch, prepare to die, hurt your mouth", + "Before inspiration comes the slaughter", + "Try to tell yourself that you are horrible", + "If you want to get somewhere in life you have to try to be dead", + "Spending time with your family is impossible if you don't do drugs", + "Canada. It's a hoax", + "It's up to you to remind yourself that you are undesired", + "Our large intestines end where our souls begin", + "Seek success but prepare for vegetables", + "Mass-incineration is 70 percent a cry for help", + "Face risk and drink milk", + "There is no I in \"Totalitarianism\"", + "Don't argue with success, be naked", + "If you actually need recognition be a complete imbecile", + "You are a russian bot", + "Each day is another chance to be dreadfully dysfunctional", + "Be the reason why a stranger calls the police at night", + "Hate the mountains", + "Neighbourhoods begin when we learn to moisturize love", + "Puberty can be quite similar to having brain damage", + "Uuuuuurrr Ahhhrrr Uhrrrrr Ahhhhhhrrr Aaaaaarrhg", + "The simple fact that you are dead makes you awesome", + "Get fucked", + "You are being monitored, keep yourself frightened", + "Inspiration is to re-demand ", + "Invert your stomach backwards ", + "Together we can make equality collapse under its own weight ", + "If you find it difficult to achieve the right state, consider this ancient buddhist wisdom: The UFO phenomenon is personalities", + "Isn't it beautiful to take notice of how the air you breathe is letting go of the walls around you?", +} +aura_env.size = table.getn(aura_env.inspirationalQuotes) +print(aura_env.size) diff --git a/Complete Projects/Legion/Emote on Friendlies.lua b/WeakAuras/Projects/Emote on Friendlies.lua similarity index 97% rename from Complete Projects/Legion/Emote on Friendlies.lua rename to WeakAuras/Projects/Emote on Friendlies.lua index 3708509..330bfed 100644 --- a/Complete Projects/Legion/Emote on Friendlies.lua +++ b/WeakAuras/Projects/Emote on Friendlies.lua @@ -1,131 +1,131 @@ -DISPLAY -function() - if aura_env.errorFlag == 0 then - if aura_env.triggerState == 1 then - local tt = math.floor((GetTime() - aura_env.startTime) * 10) - local nameplateindex = {} - local pointer = 1 - if aura_env.target == 0 then - for i = 1, 40 do - if UnitIsPlayer("nameplate" .. i) and UnitIsFriend("player", "nameplate" .. i) then - nameplateindex[pointer] = i - pointer = pointer + 1 - end - end - end - if aura_env.target == 1 then - for i = 1, 40 do - if UnitIsPlayer("nameplate" .. i) and UnitIsEnemy("player", "nameplate" .. i) then - nameplateindex[pointer] = i - pointer = pointer + 1 - end - end - end - if aura_env.target == 2 then - for i = 1, 40 do - if UnitIsPlayer("nameplate" .. i) then - nameplateindex[pointer] = i - pointer = pointer + 1 - end - end - end - if nameplateindex[1] == nil then - nameplateindex[1] = UnitName("player") - end - if tt ~= aura_env.lastTime and tt % aura_env.tickRate == 0 then - DoEmote(aura_env.emoteToken, "nameplate" .. nameplateindex[aura_env.pointer2]) - aura_env.pointer2 = aura_env.pointer2 + 1 - aura_env.lastTime = tt - end - if aura_env.pointer2 >= pointer then - aura_env.pointer2 = 1 - end - end - end -end - -CHAT_MSG_WHISPER -function(_,msg,sender) - if aura_env.errorFlag == 0 then - sender = string.match(sender, "%a+") - if aura_env.caseSensitive == 0 then - msg = msg:lower() - aura_env.triggerOn = aura_env.triggerOn:lower() - aura_env.triggerOff = aura_env.triggerOff:lower() - end - if sender == UnitName("player") and msg == aura_env.triggerOn and aura_env.triggerState == 0 then - aura_env.triggerState = 1 - print("ENABLED") - end - if sender == UnitName("player") and msg == aura_env.triggerOff and aura_env.triggerState == 1 then - aura_env.triggerState = 0 - print("DISABLED") - end - end -end - -INIT AND SHOW ---Word to turn on -aura_env.triggerOn = "on" ---Word to turn off -aura_env.triggerOff = "off" ---Case sensitive input? -aura_env.caseSensitive = 0 ---Tick interval with 10 being 1 second; must not be <1 -aura_env.tickRate = 5 ---Emote -aura_env.emoteToken = "wave" ---0 for friendlies, 1 for enemies, 2 for both -aura_env.target = 0 - ---Do NOT change anything from code below ---For info, questions, feedback or anything alike mail Pinkiepiie on Felsong -aura_env.startTime = GetTime() -aura_env.pointer2 = 1 -aura_env.lastTime = 0 -aura_env.triggerState = 0 -aura_env.errorFlag = 0 - -if aura_env.triggerOn == "" then - print("|cFFFF0000ERROR::|cFFFFFFFF triggerOn must not be empty!") - aura_env.errorFlag = 1 -end -if aura_env.triggerOff == "" then - print("|cFFFF0000ERROR::|cFFFFFFFF triggerOff must not be empty!") - aura_env.errorFlag = 1 -end -if aura_env.caseSensitive ~= 0 and aura_env.caseSensitive ~= 1 then - print("|cFFFF0000ERROR::|cFFFFFFFF caseSensitive must be 1 or 0!") - aura_env.errorFlag = 1 -end -if aura_env.target ~= 0 and aura_env.target ~= 1 and aura_env.target ~= 2 then - print("|cFFFF0000ERROR::|cFFFFFFFF target must be either 0, 1 or 2!") - aura_env.errorFlag = 1 -end -if aura_env.tickRate < 1 then - print("|cFFFF0000ERROR::|cFFFFFFFF tickRate must be > 1!") - aura_env.errorFlag = 1 -end -if aura_env.emoteToken == "" then - print("|cFFFF0000ERROR::|cFFFFFFFF emoteToken must not be empty!") - aura_env.errorFlag = 1 -end -if aura_env.errorFlag == 0 then - print("-------------------------------------------------------------") - print("Dave's emote spam bonanza extravaganza!") - print("|cFFFF7F7FNAMEPATES MUST BE ENABLED FOR THIS TO WORK!!") - print("~~only works on players~~") - print("Whisper yourself |cFF00FF00" .. aura_env.triggerOn .. "|cFFFFFFFF to unleash mayhem!") - print("To stop the spam whisper |cFFFF0000" .. aura_env.triggerOff .. "|cFFFFFFFF") - print("Current emote is |cFF7F7FFF" .. aura_env.emoteToken .. "|cFFFFFFFF") - if aura_env.target == 0 then - print("Currently spamming |cFF7FFF7Ffriendlies!|cFFFFFFFF") - end - if aura_env.target == 1 then - print("Currently spamming |cFFFF7F7Fenemies!|cFFFFFFFF") - end - if aura_env.target == 2 then - print("Currently spamming |cFF7F7FFFboth!|cFFFFFFFF") - end - print("-------------------------------------------------------------") -end +DISPLAY +function() + if aura_env.errorFlag == 0 then + if aura_env.triggerState == 1 then + local tt = math.floor((GetTime() - aura_env.startTime) * 10) + local nameplateindex = {} + local pointer = 1 + if aura_env.target == 0 then + for i = 1, 40 do + if UnitIsPlayer("nameplate" .. i) and UnitIsFriend("player", "nameplate" .. i) then + nameplateindex[pointer] = i + pointer = pointer + 1 + end + end + end + if aura_env.target == 1 then + for i = 1, 40 do + if UnitIsPlayer("nameplate" .. i) and UnitIsEnemy("player", "nameplate" .. i) then + nameplateindex[pointer] = i + pointer = pointer + 1 + end + end + end + if aura_env.target == 2 then + for i = 1, 40 do + if UnitIsPlayer("nameplate" .. i) then + nameplateindex[pointer] = i + pointer = pointer + 1 + end + end + end + if nameplateindex[1] == nil then + nameplateindex[1] = UnitName("player") + end + if tt ~= aura_env.lastTime and tt % aura_env.tickRate == 0 then + DoEmote(aura_env.emoteToken, "nameplate" .. nameplateindex[aura_env.pointer2]) + aura_env.pointer2 = aura_env.pointer2 + 1 + aura_env.lastTime = tt + end + if aura_env.pointer2 >= pointer then + aura_env.pointer2 = 1 + end + end + end +end + +CHAT_MSG_WHISPER +function(_,msg,sender) + if aura_env.errorFlag == 0 then + sender = string.match(sender, "%a+") + if aura_env.caseSensitive == 0 then + msg = msg:lower() + aura_env.triggerOn = aura_env.triggerOn:lower() + aura_env.triggerOff = aura_env.triggerOff:lower() + end + if sender == UnitName("player") and msg == aura_env.triggerOn and aura_env.triggerState == 0 then + aura_env.triggerState = 1 + print("ENABLED") + end + if sender == UnitName("player") and msg == aura_env.triggerOff and aura_env.triggerState == 1 then + aura_env.triggerState = 0 + print("DISABLED") + end + end +end + +INIT AND SHOW +--Word to turn on +aura_env.triggerOn = "on" +--Word to turn off +aura_env.triggerOff = "off" +--Case sensitive input? +aura_env.caseSensitive = 0 +--Tick interval with 10 being 1 second; must not be <1 +aura_env.tickRate = 5 +--Emote +aura_env.emoteToken = "wave" +--0 for friendlies, 1 for enemies, 2 for both +aura_env.target = 0 + +--Do NOT change anything from code below +--For info, questions, feedback or anything alike mail Pinkiepiie on Felsong +aura_env.startTime = GetTime() +aura_env.pointer2 = 1 +aura_env.lastTime = 0 +aura_env.triggerState = 0 +aura_env.errorFlag = 0 + +if aura_env.triggerOn == "" then + print("|cFFFF0000ERROR::|cFFFFFFFF triggerOn must not be empty!") + aura_env.errorFlag = 1 +end +if aura_env.triggerOff == "" then + print("|cFFFF0000ERROR::|cFFFFFFFF triggerOff must not be empty!") + aura_env.errorFlag = 1 +end +if aura_env.caseSensitive ~= 0 and aura_env.caseSensitive ~= 1 then + print("|cFFFF0000ERROR::|cFFFFFFFF caseSensitive must be 1 or 0!") + aura_env.errorFlag = 1 +end +if aura_env.target ~= 0 and aura_env.target ~= 1 and aura_env.target ~= 2 then + print("|cFFFF0000ERROR::|cFFFFFFFF target must be either 0, 1 or 2!") + aura_env.errorFlag = 1 +end +if aura_env.tickRate < 1 then + print("|cFFFF0000ERROR::|cFFFFFFFF tickRate must be > 1!") + aura_env.errorFlag = 1 +end +if aura_env.emoteToken == "" then + print("|cFFFF0000ERROR::|cFFFFFFFF emoteToken must not be empty!") + aura_env.errorFlag = 1 +end +if aura_env.errorFlag == 0 then + print("-------------------------------------------------------------") + print("Dave's emote spam bonanza extravaganza!") + print("|cFFFF7F7FNAMEPATES MUST BE ENABLED FOR THIS TO WORK!!") + print("~~only works on players~~") + print("Whisper yourself |cFF00FF00" .. aura_env.triggerOn .. "|cFFFFFFFF to unleash mayhem!") + print("To stop the spam whisper |cFFFF0000" .. aura_env.triggerOff .. "|cFFFFFFFF") + print("Current emote is |cFF7F7FFF" .. aura_env.emoteToken .. "|cFFFFFFFF") + if aura_env.target == 0 then + print("Currently spamming |cFF7FFF7Ffriendlies!|cFFFFFFFF") + end + if aura_env.target == 1 then + print("Currently spamming |cFFFF7F7Fenemies!|cFFFFFFFF") + end + if aura_env.target == 2 then + print("Currently spamming |cFF7F7FFFboth!|cFFFFFFFF") + end + print("-------------------------------------------------------------") +end diff --git a/Complete Projects/Legion/Emotebot.lua b/WeakAuras/Projects/Emotebot.lua similarity index 97% rename from Complete Projects/Legion/Emotebot.lua rename to WeakAuras/Projects/Emotebot.lua index 0a2b7d5..9a78d1b 100644 --- a/Complete Projects/Legion/Emotebot.lua +++ b/WeakAuras/Projects/Emotebot.lua @@ -1,45 +1,45 @@ -CHAT_MSG_TEXT_EMOTE -function(_, msg, sender) - local whitelist = {} - local goodbois = {"Choklata", "Iisa", "Tossmysalade", "Tossmychelka", "Rogeuw", "Melna"} - local docry = 0 - if string.match(msg, "you") or string.match(msg, "your") then - docry = 1 - for k, v in ipairs(whitelist) do - if sender == v then - docry = 0 - break - end - end - for k, v in ipairs(goodbois) do - if sender == v then - docry = 2 - break - end - end - if docry == 1 then - local rand = math.random(1, 8) - if rand == 1 then DoEmote("cry", sender) end - if rand == 2 then DoEmote("bonk", sender) end - if rand == 3 then DoEmote("pat", sender) end - if rand == 4 then DoEmote("moon", sender) end - if rand == 5 then DoEmote("agree", sender) end - if rand == 6 then DoEmote("bored", sender) end - if rand == 7 then DoEmote("giggle", sender) end - if rand == 8 then DoEmote("helpme", sender) end - end - if docry == 2 then - local rand = math.random(1, 10) - if rand == 1 then DoEmote("moan", sender) end - if rand == 2 then DoEmote("hug", sender) end - if rand == 3 then DoEmote("love", sender) end - if rand == 4 then DoEmote("cuddle", sender) end - if rand == 5 then DoEmote("drool", sender) end - if rand == 6 then DoEmote("happy", sender) end - if rand == 7 then DoEmote("flirt", sender) end - if rand == 8 then DoEmote("lick", sender) end - if rand == 9 then DoEmote("sexy", sender) end - if rand == 10 then DoEmote("smile", sender) end - end - end -end +CHAT_MSG_TEXT_EMOTE +function(_, msg, sender) + local whitelist = {} + local goodbois = {"Choklata", "Iisa", "Tossmysalade", "Tossmychelka", "Rogeuw", "Melna"} + local docry = 0 + if string.match(msg, "you") or string.match(msg, "your") then + docry = 1 + for k, v in ipairs(whitelist) do + if sender == v then + docry = 0 + break + end + end + for k, v in ipairs(goodbois) do + if sender == v then + docry = 2 + break + end + end + if docry == 1 then + local rand = math.random(1, 8) + if rand == 1 then DoEmote("cry", sender) end + if rand == 2 then DoEmote("bonk", sender) end + if rand == 3 then DoEmote("pat", sender) end + if rand == 4 then DoEmote("moon", sender) end + if rand == 5 then DoEmote("agree", sender) end + if rand == 6 then DoEmote("bored", sender) end + if rand == 7 then DoEmote("giggle", sender) end + if rand == 8 then DoEmote("helpme", sender) end + end + if docry == 2 then + local rand = math.random(1, 10) + if rand == 1 then DoEmote("moan", sender) end + if rand == 2 then DoEmote("hug", sender) end + if rand == 3 then DoEmote("love", sender) end + if rand == 4 then DoEmote("cuddle", sender) end + if rand == 5 then DoEmote("drool", sender) end + if rand == 6 then DoEmote("happy", sender) end + if rand == 7 then DoEmote("flirt", sender) end + if rand == 8 then DoEmote("lick", sender) end + if rand == 9 then DoEmote("sexy", sender) end + if rand == 10 then DoEmote("smile", sender) end + end + end +end diff --git a/NewAge/EquipmentManager/INIT.lua b/WeakAuras/Projects/EquipmentManager/INIT.lua similarity index 96% rename from NewAge/EquipmentManager/INIT.lua rename to WeakAuras/Projects/EquipmentManager/INIT.lua index 9e16570..5d3f7f8 100644 --- a/NewAge/EquipmentManager/INIT.lua +++ b/WeakAuras/Projects/EquipmentManager/INIT.lua @@ -1,102 +1,102 @@ -function() - --- @class Item - --- @field id number - --- @field name string - --- @field ilvl number - --- @field type string - - --- @field new function - Item = { - --- @param self Item - --- @return Item - new = function(self) - local obj = {} - obj.id = id or -1 - obj.name = name or "" - obj.ilvl = ilvl or -1 - obj.type = type or "" - setmetatable(obj, self) - self.__index = self - return obj - end, - } - - --- @class ItemSet - --- @field items Item[] - - --- @field new function - --- @field equip function - ItemSet = { - --- @param self ItemSet - --- @return ItemSet - new = function(self, items) - local obj = {} - obj.items = items or {} - setmetatable(obj, self) - self.__index = self - return obj - end, - - equip = function(self) - local equippedItems = getEquippedItems() - print(#equippedItems .. " items equipped") - - for itemSlot, eqItem in pairs(equippedItems) do - local item = self.items[itemSlot] - - if (eqItem.id ~= item.id and eqItem.ilvl ~= item.ilvl) then - print("Unequip " .. itemSlot) - PickupInventoryItem(itemSlot) - PutItemInBag(22) - print("Equip " .. item.id) - EquipItemByName(item.id, itemSlot) - end - end - end - } - - --- @return string - function getItemName(itemLink) - return select(1, GetItemInfo(itemLink)) - end - - --- @return number - function getItemIlvl(itemLink) - return select(4, GetItemInfo(itemLink)) - end - - --- @return string - function getItemType(itemLink) - return select(9, GetItemInfo(itemLink)) - end - - --- @return Item[] - function getEquippedItems() - --- @type Item[] - local items = {} - - for i = 1, 19 do - --- @type Item - local item = Item:new() - --- @type string - local eqItemLink = GetInventoryItemLink("player", i) - --- @type number - local eqItemId = GetInventoryItemID("player", i) - - if (eqItemLink ~= nil) then - item.name = getItemName(eqItemLink) - item.ilvl = getItemIlvl(eqItemLink) - item.type = getItemType(eqItemLink) - item.id = eqItemId - - items[i] = item - end - end - - return items - end - - --- @type ItemSet - local set = ItemSet:new(getEquippedItems()) - set:equip() -end +function() + --- @class Item + --- @field id number + --- @field name string + --- @field ilvl number + --- @field type string + + --- @field new function + Item = { + --- @param self Item + --- @return Item + new = function(self) + local obj = {} + obj.id = id or -1 + obj.name = name or "" + obj.ilvl = ilvl or -1 + obj.type = type or "" + setmetatable(obj, self) + self.__index = self + return obj + end, + } + + --- @class ItemSet + --- @field items Item[] + + --- @field new function + --- @field equip function + ItemSet = { + --- @param self ItemSet + --- @return ItemSet + new = function(self, items) + local obj = {} + obj.items = items or {} + setmetatable(obj, self) + self.__index = self + return obj + end, + + equip = function(self) + local equippedItems = getEquippedItems() + print(#equippedItems .. " items equipped") + + for itemSlot, eqItem in pairs(equippedItems) do + local item = self.items[itemSlot] + + if (eqItem.id ~= item.id and eqItem.ilvl ~= item.ilvl) then + print("Unequip " .. itemSlot) + PickupInventoryItem(itemSlot) + PutItemInBag(22) + print("Equip " .. item.id) + EquipItemByName(item.id, itemSlot) + end + end + end + } + + --- @return string + function getItemName(itemLink) + return select(1, GetItemInfo(itemLink)) + end + + --- @return number + function getItemIlvl(itemLink) + return select(4, GetItemInfo(itemLink)) + end + + --- @return string + function getItemType(itemLink) + return select(9, GetItemInfo(itemLink)) + end + + --- @return Item[] + function getEquippedItems() + --- @type Item[] + local items = {} + + for i = 1, 19 do + --- @type Item + local item = Item:new() + --- @type string + local eqItemLink = GetInventoryItemLink("player", i) + --- @type number + local eqItemId = GetInventoryItemID("player", i) + + if (eqItemLink ~= nil) then + item.name = getItemName(eqItemLink) + item.ilvl = getItemIlvl(eqItemLink) + item.type = getItemType(eqItemLink) + item.id = eqItemId + + items[i] = item + end + end + + return items + end + + --- @type ItemSet + local set = ItemSet:new(getEquippedItems()) + set:equip() +end diff --git a/Complete Projects/Legion/Fevered Carapace.lua b/WeakAuras/Projects/Fevered Carapace.lua similarity index 96% rename from Complete Projects/Legion/Fevered Carapace.lua rename to WeakAuras/Projects/Fevered Carapace.lua index e84f686..d44dd9c 100644 --- a/Complete Projects/Legion/Fevered Carapace.lua +++ b/WeakAuras/Projects/Fevered Carapace.lua @@ -1,28 +1,28 @@ ---DISPLAY -function() - return aura_env.fevered .. "/" .. aura_env.swings -end - ---COMBAT_LOG_EVENT_UNFILTERED -function(...) - local subEvent = select(3, ...) - local target = select(10, ...) - local caster = select(6, ...) - local spell = select(14, ...) - if subEvent == "SWING_DAMAGE" and target == UnitName("player") and UnitBuff("player", "Infernal Skin") then - aura_env.swings = aura_env.swings + 1 - end - if subEvent == "SPELL_DAMAGE" and caster == UnitName("player") and UnitBuff("player", "Infernal Skin") and spell == "Fevered Touch" then - aura_env.fevered = aura_env.fevered + 1 - end -end - ---PLAYER_REGEN_DISABLED -function() - aura_env.swings = 0 - aura_env.fevered = 0 -end - ---INIT -aura_env.swings = 0 -aura_env.fevered = 0 +--DISPLAY +function() + return aura_env.fevered .. "/" .. aura_env.swings +end + +--COMBAT_LOG_EVENT_UNFILTERED +function(...) + local subEvent = select(3, ...) + local target = select(10, ...) + local caster = select(6, ...) + local spell = select(14, ...) + if subEvent == "SWING_DAMAGE" and target == UnitName("player") and UnitBuff("player", "Infernal Skin") then + aura_env.swings = aura_env.swings + 1 + end + if subEvent == "SPELL_DAMAGE" and caster == UnitName("player") and UnitBuff("player", "Infernal Skin") and spell == "Fevered Touch" then + aura_env.fevered = aura_env.fevered + 1 + end +end + +--PLAYER_REGEN_DISABLED +function() + aura_env.swings = 0 + aura_env.fevered = 0 +end + +--INIT +aura_env.swings = 0 +aura_env.fevered = 0 diff --git a/Complete Projects/Legion/Fish.lua b/WeakAuras/Projects/Fish.lua similarity index 96% rename from Complete Projects/Legion/Fish.lua rename to WeakAuras/Projects/Fish.lua index 9b13a0c..407e0b6 100644 --- a/Complete Projects/Legion/Fish.lua +++ b/WeakAuras/Projects/Fish.lua @@ -1,9 +1,9 @@ ---Fishing -function() - local fish = {"Glassfin Minnow", "Pygmy Suckerfish"} - local output = "" - for k,v in ipairs(fish) do - output = output .. v .. " " .. GetItemCount(v) .. "\n" - end - return output +--Fishing +function() + local fish = {"Glassfin Minnow", "Pygmy Suckerfish"} + local output = "" + for k,v in ipairs(fish) do + output = output .. v .. " " .. GetItemCount(v) .. "\n" + end + return output end \ No newline at end of file diff --git a/Complete Projects/Legion/Focus Thing.lua b/WeakAuras/Projects/Focus Thing.lua similarity index 96% rename from Complete Projects/Legion/Focus Thing.lua rename to WeakAuras/Projects/Focus Thing.lua index 1313bb0..94b9cd7 100644 --- a/Complete Projects/Legion/Focus Thing.lua +++ b/WeakAuras/Projects/Focus Thing.lua @@ -1,30 +1,30 @@ ---EVERY FRAME -function() - local focusmax = UnitPowerMax("player") - local time = GetTime() - local star, dur = GetSpellCooldown(61304) - local regen = GetPowerRegen() - if dur > 0 and aura_env.spell == "Arcane Shot" then - aura_env.newfocus = aura_env.focus + dur * regen + 8 - end - if dur > 0 and aura_env.spell ~= "Arcane Shot" then - aura_env.newfocus = aura_env.focus + dur * regen - end - return aura_env.newfocus, focusmax, 1 -end - ---COMBAT_LOG_EVENT_UNFILTERED -function(...) - local se = select(3, ...) - if se == "SPELL_CAST_SUCCESS" then - local caster = select(6, ...) - aura_env.spell = select(14, ...) - if caster == UnitName("player") then - aura_env.focus = UnitPower("player") - end - end -end - ---INIT -aura_env.focus = 0 +--EVERY FRAME +function() + local focusmax = UnitPowerMax("player") + local time = GetTime() + local star, dur = GetSpellCooldown(61304) + local regen = GetPowerRegen() + if dur > 0 and aura_env.spell == "Arcane Shot" then + aura_env.newfocus = aura_env.focus + dur * regen + 8 + end + if dur > 0 and aura_env.spell ~= "Arcane Shot" then + aura_env.newfocus = aura_env.focus + dur * regen + end + return aura_env.newfocus, focusmax, 1 +end + +--COMBAT_LOG_EVENT_UNFILTERED +function(...) + local se = select(3, ...) + if se == "SPELL_CAST_SUCCESS" then + local caster = select(6, ...) + aura_env.spell = select(14, ...) + if caster == UnitName("player") then + aura_env.focus = UnitPower("player") + end + end +end + +--INIT +aura_env.focus = 0 aura_env.newfocus = 0 \ No newline at end of file diff --git a/FreshShit/FriendTracker/event.lua b/WeakAuras/Projects/FriendTracker/event.lua similarity index 95% rename from FreshShit/FriendTracker/event.lua rename to WeakAuras/Projects/FriendTracker/event.lua index f855bff..ca161e2 100644 --- a/FreshShit/FriendTracker/event.lua +++ b/WeakAuras/Projects/FriendTracker/event.lua @@ -1,4 +1,4 @@ --- FRIENDLIST_UPDATE -function(e) - aura_env.FileFriends() +-- FRIENDLIST_UPDATE +function(e) + aura_env.FileFriends() end \ No newline at end of file diff --git a/FreshShit/FriendTracker/event2.lua b/WeakAuras/Projects/FriendTracker/event2.lua similarity index 93% rename from FreshShit/FriendTracker/event2.lua rename to WeakAuras/Projects/FriendTracker/event2.lua index a0d1d33..57b8c28 100644 --- a/FreshShit/FriendTracker/event2.lua +++ b/WeakAuras/Projects/FriendTracker/event2.lua @@ -1,4 +1,4 @@ --- TICKER_60000 -function() - ShowFriends() +-- TICKER_60000 +function() + ShowFriends() end \ No newline at end of file diff --git a/FreshShit/FriendTracker/export b/WeakAuras/Projects/FriendTracker/export similarity index 100% rename from FreshShit/FriendTracker/export rename to WeakAuras/Projects/FriendTracker/export diff --git a/FreshShit/FriendTracker/init.lua b/WeakAuras/Projects/FriendTracker/init.lua similarity index 96% rename from FreshShit/FriendTracker/init.lua rename to WeakAuras/Projects/FriendTracker/init.lua index b5b4fe0..85e121a 100644 --- a/FreshShit/FriendTracker/init.lua +++ b/WeakAuras/Projects/FriendTracker/init.lua @@ -1,18 +1,18 @@ -if not WeakAurasSaved.Cyka then WeakAurasSaved.Cyka = {} end -if not WeakAurasSaved.Cyka.Friends then WeakAurasSaved.Cyka.Friends = {} end - -aura_env.FileFriends = function() - local info = {} - local now = date("%y-%m-%dT%H:%M:%S") - local friends = GetNumFriends() - for i = 1, friends do - local name, level, class, area, connected, status, note, noteType = GetFriendInfo(i) - table.insert(info, { - ["name"] = name, - ["connected"] = connected, - ["area"] = area, - ["status"] = status, - }) - end - WeakAurasSaved.Cyka.Friends[now] = info -end +if not WeakAurasSaved.Cyka then WeakAurasSaved.Cyka = {} end +if not WeakAurasSaved.Cyka.Friends then WeakAurasSaved.Cyka.Friends = {} end + +aura_env.FileFriends = function() + local info = {} + local now = date("%y-%m-%dT%H:%M:%S") + local friends = GetNumFriends() + for i = 1, friends do + local name, level, class, area, connected, status, note, noteType = GetFriendInfo(i) + table.insert(info, { + ["name"] = name, + ["connected"] = connected, + ["area"] = area, + ["status"] = status, + }) + end + WeakAurasSaved.Cyka.Friends[now] = info +end diff --git a/Complete Projects/Legion/Friendlist.lua b/WeakAuras/Projects/Friendlist.lua similarity index 97% rename from Complete Projects/Legion/Friendlist.lua rename to WeakAuras/Projects/Friendlist.lua index 85e724c..f561d36 100644 --- a/Complete Projects/Legion/Friendlist.lua +++ b/WeakAuras/Projects/Friendlist.lua @@ -1,29 +1,29 @@ -function() - local output = "" - local friends_on = select(2, GetNumFriends()) - local my_zone = GetMapNameByID(GetCurrentMapAreaID()) - for i = 1, friends_on do - local name, _, _, zone, _, status, note = GetFriendInfo(i) - local override_color = "" - if note ~= nil and note:match("+") and status ~= "" and status ~= "" then - override_color = "|cFFE541F4" - elseif note ~= nil and note:match("-") and status ~= "" and status ~= "" then - override_color = "|cFF42D9F4" - elseif note ~= nil and note:match(";") and status ~= "" and status ~= "" then - override_color = "|cFF2020D8" - elseif note ~= nil and note:match("_") and status ~= "" and status ~= "" then - override_color = "|cFF7E1357" - else - override_color = "" - end - local zone_color = "|cFF787878" - local status_color = "|cFF00FF00" - if zone == my_zone then zone_color = "|cFF007800" end - if status == "" then status_color = "|cFFFF0000" end - if status == "" then status_color = "|cFFF4C842" end - if name ~= nil then - output = output .. status_color .. override_color .. name .. "|cFFFFFFFF" .. " - " .. zone_color .. zone .. "\n" - end - end - return output -end +function() + local output = "" + local friends_on = select(2, GetNumFriends()) + local my_zone = GetMapNameByID(GetCurrentMapAreaID()) + for i = 1, friends_on do + local name, _, _, zone, _, status, note = GetFriendInfo(i) + local override_color = "" + if note ~= nil and note:match("+") and status ~= "" and status ~= "" then + override_color = "|cFFE541F4" + elseif note ~= nil and note:match("-") and status ~= "" and status ~= "" then + override_color = "|cFF42D9F4" + elseif note ~= nil and note:match(";") and status ~= "" and status ~= "" then + override_color = "|cFF2020D8" + elseif note ~= nil and note:match("_") and status ~= "" and status ~= "" then + override_color = "|cFF7E1357" + else + override_color = "" + end + local zone_color = "|cFF787878" + local status_color = "|cFF00FF00" + if zone == my_zone then zone_color = "|cFF007800" end + if status == "" then status_color = "|cFFFF0000" end + if status == "" then status_color = "|cFFF4C842" end + if name ~= nil then + output = output .. status_color .. override_color .. name .. "|cFFFFFFFF" .. " - " .. zone_color .. zone .. "\n" + end + end + return output +end diff --git a/Complete Projects/Legion/Full House.lua b/WeakAuras/Projects/Full House.lua similarity index 97% rename from Complete Projects/Legion/Full House.lua rename to WeakAuras/Projects/Full House.lua index a942494..3c9f2d8 100644 --- a/Complete Projects/Legion/Full House.lua +++ b/WeakAuras/Projects/Full House.lua @@ -1,10 +1,10 @@ -function() - local output = "" - for i = 1, 40 do - local name = UnitName("nameplate" .. i) - if name == "Cult Fanatic" or name == "Cult Adherent" or name == "Deformed Fanatic" or name == "Reanimated Fanatic" or name == "Reanimated Adherent" then - output = output .. name .. "\n" - end - end - return output -end +function() + local output = "" + for i = 1, 40 do + local name = UnitName("nameplate" .. i) + if name == "Cult Fanatic" or name == "Cult Adherent" or name == "Deformed Fanatic" or name == "Reanimated Fanatic" or name == "Reanimated Adherent" then + output = output .. name .. "\n" + end + end + return output +end diff --git a/Complete Projects/Legion/GMCommandsResearch(.add).lua b/WeakAuras/Projects/GMCommandsResearch(.add).lua similarity index 98% rename from Complete Projects/Legion/GMCommandsResearch(.add).lua rename to WeakAuras/Projects/GMCommandsResearch(.add).lua index 05ed463..9e94765 100644 --- a/Complete Projects/Legion/GMCommandsResearch(.add).lua +++ b/WeakAuras/Projects/GMCommandsResearch(.add).lua @@ -1,66 +1,66 @@ --- .add --- .add 136716 1 1672 42 41 40 1 --- Add chat command interaction, pass through flags and aura_env --- CHAT_MSG_LOOT -function(e, ...) - if not WeakAurasSaved.CustomTrash then WeakAurasSaved.CustomTrash = {} end - if not WeakAurasSaved.CustomTrash.ItemResearch then WeakAurasSaved.CustomTrash.ItemResearch = {} end - if not WeakAurasSaved.CustomTrash.ItemResearch.Stage then WeakAurasSaved.CustomTrash.ItemResearch.Stage = 1 end - if not WeakAurasSaved.CustomTrash.ItemResearch.ilvl then WeakAurasSaved.CustomTrash.ItemResearch.ilvl = 1672 end - local daiTooltip = function(link) - if aura_env.tooltip then - aura_env.tooltip:SetOwner(UIParent, "ANCHOR_NONE") - aura_env.tooltip:ClearLines(); - aura_env.tooltip:SetHyperlink(link) - - local itemData = {} - itemData[#itemData + 1] = "New item" - itemData[#itemData + 1] = WeakAurasSaved.CustomTrash.ItemResearch.Stage - 1 -- Add parameter info - itemData[#itemData + 1] = "Left text" - - for i = 1, aura_env.tooltip:NumLines() do - local field = "MyTooltipTextLeft" .. i - if _G[field]:GetText() then - local text = _G[field]:GetText() - itemData[#itemData + 1] = text - end - end - - itemData[#itemData + 1] = "Right text" - for i = 1, aura_env.tooltip:NumLines() do - local field = "MyTooltipTextRight" .. i - if _G[field]:GetText() then - local text = _G[field]:GetText() - itemData[#itemData + 1] = text - end - end - itemData[#itemData + 1] = "End of Item" - itemData[#itemData + 1] = "" - WeakAurasSaved.CustomTrash.ItemResearch[#WeakAurasSaved.CustomTrash.ItemResearch + 1] = itemData; - SendChatMessage(".add 152134 -1", "SAY"); - end - end - if e == "CHAT_MSG_LOOT" then - local msg = ... - local link = msg:match("\124c.+\124r") - daiTooltip(link) - end -end - ---INIT -if not WeakAurasSaved.CustomTrash then WeakAurasSaved.CustomTrash = {} end -if not WeakAurasSaved.CustomTrash.ItemResearch then WeakAurasSaved.CustomTrash.ItemResearch = {} end -if not WeakAurasSaved.CustomTrash.ItemResearch.Stage then WeakAurasSaved.CustomTrash.ItemResearch.Stage = 1 end -if not WeakAurasSaved.CustomTrash.ItemResearch.ilvl then WeakAurasSaved.CustomTrash.ItemResearch.ilvl = 1672 end - -aura_env.tooltip = CreateFrame("GameTooltip", "MyTooltip", UIParent, "GameTooltipTemplate") -local aura_env = aura_env -aura_env.daiItem = function() - print("On stage " .. WeakAurasSaved.CustomTrash.ItemResearch.Stage) - local message = ".add 152134 1 " .. WeakAurasSaved.CustomTrash.ItemResearch.ilvl .. " 42 41 40 " .. WeakAurasSaved.CustomTrash.ItemResearch.Stage - SendChatMessage(message, "PARTY") - WeakAurasSaved.CustomTrash.ItemResearch.Stage = WeakAurasSaved.CustomTrash.ItemResearch.Stage + 1 -end - -if WeakAurasSaved.CustomTrash.ItemResearch.Ticker and WeakAurasSaved.CustomTrash.ItemResearch.Ticker[0] then WeakAurasSaved.CustomTrash.ItemResearch.Ticker:Cancel(); WeakAurasSaved.CustomTrash.ItemResearch.Ticker = nil end +-- .add +-- .add 136716 1 1672 42 41 40 1 +-- Add chat command interaction, pass through flags and aura_env +-- CHAT_MSG_LOOT +function(e, ...) + if not WeakAurasSaved.CustomTrash then WeakAurasSaved.CustomTrash = {} end + if not WeakAurasSaved.CustomTrash.ItemResearch then WeakAurasSaved.CustomTrash.ItemResearch = {} end + if not WeakAurasSaved.CustomTrash.ItemResearch.Stage then WeakAurasSaved.CustomTrash.ItemResearch.Stage = 1 end + if not WeakAurasSaved.CustomTrash.ItemResearch.ilvl then WeakAurasSaved.CustomTrash.ItemResearch.ilvl = 1672 end + local daiTooltip = function(link) + if aura_env.tooltip then + aura_env.tooltip:SetOwner(UIParent, "ANCHOR_NONE") + aura_env.tooltip:ClearLines(); + aura_env.tooltip:SetHyperlink(link) + + local itemData = {} + itemData[#itemData + 1] = "New item" + itemData[#itemData + 1] = WeakAurasSaved.CustomTrash.ItemResearch.Stage - 1 -- Add parameter info + itemData[#itemData + 1] = "Left text" + + for i = 1, aura_env.tooltip:NumLines() do + local field = "MyTooltipTextLeft" .. i + if _G[field]:GetText() then + local text = _G[field]:GetText() + itemData[#itemData + 1] = text + end + end + + itemData[#itemData + 1] = "Right text" + for i = 1, aura_env.tooltip:NumLines() do + local field = "MyTooltipTextRight" .. i + if _G[field]:GetText() then + local text = _G[field]:GetText() + itemData[#itemData + 1] = text + end + end + itemData[#itemData + 1] = "End of Item" + itemData[#itemData + 1] = "" + WeakAurasSaved.CustomTrash.ItemResearch[#WeakAurasSaved.CustomTrash.ItemResearch + 1] = itemData; + SendChatMessage(".add 152134 -1", "SAY"); + end + end + if e == "CHAT_MSG_LOOT" then + local msg = ... + local link = msg:match("\124c.+\124r") + daiTooltip(link) + end +end + +--INIT +if not WeakAurasSaved.CustomTrash then WeakAurasSaved.CustomTrash = {} end +if not WeakAurasSaved.CustomTrash.ItemResearch then WeakAurasSaved.CustomTrash.ItemResearch = {} end +if not WeakAurasSaved.CustomTrash.ItemResearch.Stage then WeakAurasSaved.CustomTrash.ItemResearch.Stage = 1 end +if not WeakAurasSaved.CustomTrash.ItemResearch.ilvl then WeakAurasSaved.CustomTrash.ItemResearch.ilvl = 1672 end + +aura_env.tooltip = CreateFrame("GameTooltip", "MyTooltip", UIParent, "GameTooltipTemplate") +local aura_env = aura_env +aura_env.daiItem = function() + print("On stage " .. WeakAurasSaved.CustomTrash.ItemResearch.Stage) + local message = ".add 152134 1 " .. WeakAurasSaved.CustomTrash.ItemResearch.ilvl .. " 42 41 40 " .. WeakAurasSaved.CustomTrash.ItemResearch.Stage + SendChatMessage(message, "PARTY") + WeakAurasSaved.CustomTrash.ItemResearch.Stage = WeakAurasSaved.CustomTrash.ItemResearch.Stage + 1 +end + +if WeakAurasSaved.CustomTrash.ItemResearch.Ticker and WeakAurasSaved.CustomTrash.ItemResearch.Ticker[0] then WeakAurasSaved.CustomTrash.ItemResearch.Ticker:Cancel(); WeakAurasSaved.CustomTrash.ItemResearch.Ticker = nil end if not WeakAurasSaved.CustomTrash.ItemResearch.Ticker or WeakAurasSaved.CustomTrash.ItemResearch.Ticker[0] then WeakAurasSaved.CustomTrash.ItemResearch.Ticker = C_Timer.NewTicker(1, aura_env.daiItem) end \ No newline at end of file diff --git a/Complete Projects/Legion/GPS.lua b/WeakAuras/Projects/GPS.lua similarity index 94% rename from Complete Projects/Legion/GPS.lua rename to WeakAuras/Projects/GPS.lua index c7b395e..f6a01b5 100644 --- a/Complete Projects/Legion/GPS.lua +++ b/WeakAuras/Projects/GPS.lua @@ -1,23 +1,23 @@ -function() - --GPS - local X, Y = UnitPosition("player") - if X < aura_env.X then - print("X DECREASING") - aura_env.X = X - end - if X > aura_env.X then - print("X INCREASING") - aura_env.X = X - end - if Y < aura_env.Y then - print("Y DECREASING") - aura_env.Y = Y - end - if Y > aura_env.Y then - print("Y INCREASING") - aura_env.Y = Y - end -end - -aura_env.X = 0 -aura_env.Y = 0 +function() + --GPS + local X, Y = UnitPosition("player") + if X < aura_env.X then + print("X DECREASING") + aura_env.X = X + end + if X > aura_env.X then + print("X INCREASING") + aura_env.X = X + end + if Y < aura_env.Y then + print("Y DECREASING") + aura_env.Y = Y + end + if Y > aura_env.Y then + print("Y INCREASING") + aura_env.Y = Y + end +end + +aura_env.X = 0 +aura_env.Y = 0 diff --git a/Complete Projects/Legion/GUIDSniffer.lua b/WeakAuras/Projects/GUIDSniffer.lua similarity index 95% rename from Complete Projects/Legion/GUIDSniffer.lua rename to WeakAuras/Projects/GUIDSniffer.lua index 9bba6c2..19415c7 100644 --- a/Complete Projects/Legion/GUIDSniffer.lua +++ b/WeakAuras/Projects/GUIDSniffer.lua @@ -1,5001 +1,5001 @@ ---EVERY FRAME???????????????????????????????????? FIXXXXXXXXXX -function() - if not DaveSniffsHerbs.HerbSniffer then DaveSniffsHerbs.HerbSniffer = {} end - local function range (val, min, max, max2) - val = 1 - (((max - val) / (max - min)) * max2) - return val - end - local id = aura_env.GetClosestHerb() - if not aura_env.herbs[GetCurrentMapAreaID()]then return false end - local hX, hY = aura_env.herbs[GetCurrentMapAreaID()][id]["X"], aura_env.herbs[GetCurrentMapAreaID()][id]["Y"] - local pX = GetPlayerMapPosition("player") or 0 - local pY = select(2, GetPlayerMapPosition("player")) or 0 - pX, pY = pX * 100, pY * 100 - local X = pX - hX - local Y = pY - hY - local playerFace = GetPlayerFacing() or 0 - local playerA = math.floor(playerFace * 100) - playerA = range(playerA, 0, 630, 360) - 1 - playerA = -playerA - playerA = playerA - 90 - if playerA < 0 then playerA = playerA + 360 end - aura_env.hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) * 100 - DaveSniffsHerbs.HerbSniffer.hyp = aura_env.hyp - aura_env.angle = math.deg(math.atan2(Y, X)) - aura_env.angle = aura_env.angle - playerA - aura_env.angle = aura_env.angle - 180 - if aura_env.hyp < aura_env.wipeDistance then --When reach herb activate it's cooldown (herbcd[cd] = coords) - aura_env.herbs[GetCurrentMapAreaID()][id]["CD"] = math.floor(GetTime() + aura_env.cooldown) - DaveSniffsHerbs.HerbSniffer.CD = DaveSniffsHerbs.HerbSniffer.CD + 1 - DaveSniffsHerbs.HerbSniffer.NoCD = DaveSniffsHerbs.HerbSniffer.NoCD - 1 - aura_env.minID = - { - ["X"] = 0, - ["Y"] = 0, - ["D"] = 10000, - ["ID"] = 0 - } - end - for k, v in ipairs(aura_env.herbs[GetCurrentMapAreaID()]) do --if cooldown is up then insert back into proper array - local cd = aura_env.herbs[GetCurrentMapAreaID()][k]["CD"] - if cd > 0 then - if GetTime() > cd then - aura_env.herbs[GetCurrentMapAreaID()][k]["CD"] = 0 - DaveSniffsHerbs.HerbSniffer.NoCD = DaveSniffsHerbs.HerbSniffer.NoCD + 1 - DaveSniffsHerbs.HerbSniffer.CD = DaveSniffsHerbs.HerbSniffer.CD - 1 - end - end - end - return true -end - ---DISPLAY EVERY FRAME??????? -function() - local function round(var, n) - if (n) then - var = math.floor((var * 10 ^ n) + 0.5) / (10 ^ n) - else - var = math.floor(var + 0.5) - end - return var - end - if DaveSniffsHerbs.HerbSniffer.hyp and DaveSniffsHerbs.HerbSniffer.NoCD and DaveSniffsHerbs.HerbSniffer.CD then - return round(DaveSniffsHerbs.HerbSniffer.hyp, 0) .. "\n" .. DaveSniffsHerbs.HerbSniffer.NoCD .. "\n" .. DaveSniffsHerbs.HerbSniffer.CD - end -end - ---INIT -aura_env.herbs = { - --Azsuna / Aethril - [1015] = { - [1] = { - ["X"] = 49.5, - ["Y"] = 85.9, - ["CD"] = 0, - }, - [2] = { - ["X"] = 52.42, - ["Y"] = 83.61, - ["CD"] = 0, - }, - [3] = { - ["X"] = 52.47, - ["Y"] = 79, - ["CD"] = 0, - }, - [4] = { - ["X"] = 51.45, - ["Y"] = 75.68, - ["CD"] = 0, - }, - [5] = { - ["X"] = 47.61, - ["Y"] = 74, - ["CD"] = 0, - }, - [6] = { - ["X"] = 45.03, - ["Y"] = 71.83, - ["CD"] = 0, - }, - [7] = { - ["X"] = 41.56, - ["Y"] = 72.14, - ["CD"] = 0, - }, - [8] = { - ["X"] = 42.24, - ["Y"] = 74.27, - ["CD"] = 0, - }, - [9] = { - ["X"] = 27.62, - ["Y"] = 72.68, - ["CD"] = 0, - }, - [10] = { - ["X"] = 42.88, - ["Y"] = 79.35, - ["CD"] = 0, - }, - [11] = { - ["X"] = 44.42, - ["Y"] = 82.26, - ["CD"] = 0, - }, - [12] = { - ["X"] = 45.6, - ["Y"] = 84.9, - ["CD"] = 0, - }, - [13] = { - ["X"] = 44.21, - ["Y"] = 88.47, - ["CD"] = 0, - }, - [14] = { - ["X"] = 41.43, - ["Y"] = 9.46, - ["CD"] = 0, - }, - [15] = { - ["X"] = 40.17, - ["Y"] = 11.22, - ["CD"] = 0, - }, - [16] = { - ["X"] = 39.11, - ["Y"] = 12.41, - ["CD"] = 0, - }, - [17] = { - ["X"] = 36.33, - ["Y"] = 21.62, - ["CD"] = 0, - }, - [18] = { - ["X"] = 35.78, - ["Y"] = 25.06, - ["CD"] = 0, - }, - [19] = { - ["X"] = 35.3, - ["Y"] = 26.62, - ["CD"] = 0, - }, - [20] = { - ["X"] = 34.02, - ["Y"] = 28.32, - ["CD"] = 0, - }, - [21] = { - ["X"] = 33.17, - ["Y"] = 30.55, - ["CD"] = 0, - }, - [22] = { - ["X"] = 32.16, - ["Y"] = 32.58, - ["CD"] = 0, - }, - [23] = { - ["X"] = 33.26, - ["Y"] = 35.14, - ["CD"] = 0, - }, - [24] = { - ["X"] = 34.52, - ["Y"] = 36.25, - ["CD"] = 0, - }, - [25] = { - ["X"] = 35.33, - ["Y"] = 37.3, - ["CD"] = 0, - }, - [26] = { - ["X"] = 36.73, - ["Y"] = 37.24, - ["CD"] = 0, - }, - [27] = { - ["X"] = 37.23, - ["Y"] = 37.98, - ["CD"] = 0, - }, - [28] = { - ["X"] = 35.4, - ["Y"] = 44.54, - ["CD"] = 0, - }, - [29] = { - ["X"] = 36.43, - ["Y"] = 45.87, - ["CD"] = 0, - }, - [30] = { - ["X"] = 38.03, - ["Y"] = 60.71, - ["CD"] = 0, - }, - [31] = { - ["X"] = 39.22, - ["Y"] = 60.68, - ["CD"] = 0, - }, - [32] = { - ["X"] = 40.1, - ["Y"] = 60.09, - ["CD"] = 0, - }, - [33] = { - ["X"] = 47.77, - ["Y"] = 74.67, - ["CD"] = 0, - }, - [34] = { - ["X"] = 48.77, - ["Y"] = 75.75, - ["CD"] = 0, - }, - [35] = { - ["X"] = 50.96, - ["Y"] = 76.32, - ["CD"] = 0, - }, - [36] = { - ["X"] = 51.92, - ["Y"] = 77.35, - ["CD"] = 0, - }, - [37] = { - ["X"] = 49.35, - ["Y"] = 75.68, - ["CD"] = 0, - }, - [38] = { - ["X"] = 49.96, - ["Y"] = 73.8, - ["CD"] = 0, - }, - [39] = { - ["X"] = 50.79, - ["Y"] = 77.15, - ["CD"] = 0, - }, - [40] = { - ["X"] = 54.65, - ["Y"] = 73.03, - ["CD"] = 0, - }, - [41] = { - ["X"] = 53.66, - ["Y"] = 71.56, - ["CD"] = 0, - }, - [42] = { - ["X"] = 54.84, - ["Y"] = 68.68, - ["CD"] = 0, - }, - [43] = { - ["X"] = 54.92, - ["Y"] = 66.14, - ["CD"] = 0, - }, - [44] = { - ["X"] = 51.68, - ["Y"] = 62.8, - ["CD"] = 0, - }, - [45] = { - ["X"] = 47.83, - ["Y"] = 62.32, - ["CD"] = 0, - }, - [46] = { - ["X"] = 46.74, - ["Y"] = 57.87, - ["CD"] = 0, - }, - [47] = { - ["X"] = 45.43, - ["Y"] = 57.08, - ["CD"] = 0, - }, - [48] = { - ["X"] = 44.96, - ["Y"] = 52.3, - ["CD"] = 0, - }, - [49] = { - ["X"] = 45, - ["Y"] = 50.1, - ["CD"] = 0, - }, - [50] = { - ["X"] = 45.58, - ["Y"] = 48.48, - ["CD"] = 0, - }, - [51] = { - ["X"] = 46.03, - ["Y"] = 46.1, - ["CD"] = 0, - }, - [52] = { - ["X"] = 45.43, - ["Y"] = 42.5, - ["CD"] = 0, - }, - [53] = { - ["X"] = 44.75, - ["Y"] = 40.05, - ["CD"] = 0, - }, - [54] = { - ["X"] = 44.51, - ["Y"] = 37.29, - ["CD"] = 0, - }, - [55] = { - ["X"] = 45.59, - ["Y"] = 35.87, - ["CD"] = 0, - }, - [56] = { - ["X"] = 47.86, - ["Y"] = 34.47, - ["CD"] = 0, - }, - [57] = { - ["X"] = 49.11, - ["Y"] = 33.95, - ["CD"] = 0, - }, - [58] = { - ["X"] = 50.29, - ["Y"] = 32.1, - ["CD"] = 0, - }, - [59] = { - ["X"] = 42.81, - ["Y"] = 10.38, - ["CD"] = 0, - }, - [60] = { - ["X"] = 52.42, - ["Y"] = 83.61, - ["CD"] = 0, - }, - [61] = { - ["X"] = 49.5, - ["Y"] = 85.9, - ["CD"] = 0, - }, - [62] = { - ["X"] = 64.31, - ["Y"] = 21.59, - ["CD"] = 0, - }, - [63] = { - ["X"] = 45.71, - ["Y"] = 15.14, - ["CD"] = 0, - }, - [64] = { - ["X"] = 48.74, - ["Y"] = 10.63, - ["CD"] = 0, - }, - [65] = { - ["X"] = 45.55, - ["Y"] = 10.75, - ["CD"] = 0, - }, - [66] = { - ["X"] = 54.31, - ["Y"] = 17.67, - ["CD"] = 0, - }, - [67] = { - ["X"] = 61.29, - ["Y"] = 29.89, - ["CD"] = 0, - }, - [68] = { - ["X"] = 57.92, - ["Y"] = 33.75, - ["CD"] = 0, - }, - [69] = { - ["X"] = 45.1, - ["Y"] = 28.59, - ["CD"] = 0, - }, - [70] = { - ["X"] = 44.59, - ["Y"] = 32.83, - ["CD"] = 0, - }, - [71] = { - ["X"] = 61.83, - ["Y"] = 39.44, - ["CD"] = 0, - }, - [72] = { - ["X"] = 41.47, - ["Y"] = 33.61, - ["CD"] = 0, - }, - [73] = { - ["X"] = 40.85, - ["Y"] = 38.78, - ["CD"] = 0, - }, - [74] = { - ["X"] = 42.3, - ["Y"] = 36.7, - ["CD"] = 0, - }, - [75] = { - ["X"] = 42.36, - ["Y"] = 24.31, - ["CD"] = 0, - }, - [76] = { - ["X"] = 35.84, - ["Y"] = 15.6, - ["CD"] = 0, - }, - [77] = { - ["X"] = 39.54, - ["Y"] = 24.73, - ["CD"] = 0, - }, - [78] = { - ["X"] = 39.74, - ["Y"] = 13.5, - ["CD"] = 0, - }, - [79] = { - ["X"] = 35.42, - ["Y"] = 27.64, - ["CD"] = 0, - }, - [80] = { - ["X"] = 56.06, - ["Y"] = 19.39, - ["CD"] = 0, - }, - [81] = { - ["X"] = 63.3, - ["Y"] = 35.71, - ["CD"] = 0, - }, - [82] = { - ["X"] = 52.67, - ["Y"] = 26.74, - ["CD"] = 0, - }, - [83] = { - ["X"] = 57.2, - ["Y"] = 27.62, - ["CD"] = 0, - }, - [84] = { - ["X"] = 35.53, - ["Y"] = 22.66, - ["CD"] = 0, - }, - [85] = { - ["X"] = 38.63, - ["Y"] = 28.7, - ["CD"] = 0, - }, - [86] = { - ["X"] = 38.01, - ["Y"] = 35.61, - ["CD"] = 0, - }, - [87] = { - ["X"] = 62.66, - ["Y"] = 54.86, - ["CD"] = 0, - }, - [88] = { - ["X"] = 55.46, - ["Y"] = 72.45, - ["CD"] = 0, - }, - [89] = { - ["X"] = 57, - ["Y"] = 62.25, - ["CD"] = 0, - }, - [90] = { - ["X"] = 45.03, - ["Y"] = 71.83, - ["CD"] = 0, - }, - [91] = { - ["X"] = 47.61, - ["Y"] = 74, - ["CD"] = 0, - }, - [92] = { - ["X"] = 45.6, - ["Y"] = 84.9, - ["CD"] = 0, - }, - [93] = { - ["X"] = 44.42, - ["Y"] = 82.26, - ["CD"] = 0, - }, - [94] = { - ["X"] = 52.56, - ["Y"] = 60.68, - ["CD"] = 0, - }, - [95] = { - ["X"] = 66.67, - ["Y"] = 48.25, - ["CD"] = 0, - }, - [96] = { - ["X"] = 61.84, - ["Y"] = 55.45, - ["CD"] = 0, - }, - [97] = { - ["X"] = 42.88, - ["Y"] = 79.35, - ["CD"] = 0, - }, - [98] = { - ["X"] = 41.56, - ["Y"] = 72.14, - ["CD"] = 0, - }, - [99] = { - ["X"] = 52.47, - ["Y"] = 79, - ["CD"] = 0, - }, - [100] = { - ["X"] = 44.21, - ["Y"] = 88.47, - ["CD"] = 0, - }, - [101] = { - ["X"] = 42.24, - ["Y"] = 74.27, - ["CD"] = 0, - }, - [102] = { - ["X"] = 56.88, - ["Y"] = 61.05, - ["CD"] = 0, - }, - [103] = { - ["X"] = 56.71, - ["Y"] = 64.6, - ["CD"] = 0, - }, - [104] = { - ["X"] = 67.25, - ["Y"] = 46.04, - ["CD"] = 0, - }, - [105] = { - ["X"] = 45.05, - ["Y"] = 37.62, - ["CD"] = 0, - }, - [106] = { - ["X"] = 48.93, - ["Y"] = 43.77, - ["CD"] = 0, - }, - [107] = { - ["X"] = 61.29, - ["Y"] = 47.29, - ["CD"] = 0, - }, - [108] = { - ["X"] = 50.61, - ["Y"] = 58.06, - ["CD"] = 0, - }, - [109] = { - ["X"] = 48.12, - ["Y"] = 52.99, - ["CD"] = 0, - }, - [110] = { - ["X"] = 53.02, - ["Y"] = 12.51, - ["CD"] = 0, - }, - [111] = { - ["X"] = 51.37, - ["Y"] = 15.24, - ["CD"] = 0, - }, - [112] = { - ["X"] = 46, - ["Y"] = 61.02, - ["CD"] = 0, - }, - [113] = { - ["X"] = 67.21, - ["Y"] = 43.27, - ["CD"] = 0, - }, - [114] = { - ["X"] = 56.87, - ["Y"] = 48.7, - ["CD"] = 0, - }, - [115] = { - ["X"] = 32.97, - ["Y"] = 32.94, - ["CD"] = 0, - }, - [116] = { - ["X"] = 40.77, - ["Y"] = 60.33, - ["CD"] = 0, - }, - [117] = { - ["X"] = 46.61, - ["Y"] = 16.25, - ["CD"] = 0, - }, - [118] = { - ["X"] = 46.89, - ["Y"] = 48.44, - ["CD"] = 0, - }, - [119] = { - ["X"] = 60.73, - ["Y"] = 49.79, - ["CD"] = 0, - }, - [120] = { - ["X"] = 60.67, - ["Y"] = 23.86, - ["CD"] = 0, - }, - [121] = { - ["X"] = 59.03, - ["Y"] = 16.36, - ["CD"] = 0, - }, - [122] = { - ["X"] = 61.7, - ["Y"] = 17.64, - ["CD"] = 0, - }, - [123] = { - ["X"] = 40.78, - ["Y"] = 11.45, - ["CD"] = 0, - }, - }, - --Highmountain / Foxflower - [1024] = { - [1] = { - ["X"] = 46.64, - ["Y"] = 67.3, - ["CD"] = 0, - }, - [2] = { - ["X"] = 55.76, - ["Y"] = 65.74, - ["CD"] = 0, - }, - [3] = { - ["X"] = 52.19, - ["Y"] = 59.78, - ["CD"] = 0, - }, - [4] = { - ["X"] = 52.52, - ["Y"] = 61.45, - ["CD"] = 0, - }, - [5] = { - ["X"] = 56.69, - ["Y"] = 64.34, - ["CD"] = 0, - }, - [6] = { - ["X"] = 56.68, - ["Y"] = 65.38, - ["CD"] = 0, - }, - [7] = { - ["X"] = 56.19, - ["Y"] = 66.53, - ["CD"] = 0, - }, - [8] = { - ["X"] = 47.21, - ["Y"] = 33.87, - ["CD"] = 0, - }, - [9] = { - ["X"] = 49.54, - ["Y"] = 30.09, - ["CD"] = 0, - }, - [10] = { - ["X"] = 51.24, - ["Y"] = 28.5, - ["CD"] = 0, - }, - [11] = { - ["X"] = 57.55, - ["Y"] = 22.81, - ["CD"] = 0, - }, - [12] = { - ["X"] = 56.34, - ["Y"] = 20.86, - ["CD"] = 0, - }, - [13] = { - ["X"] = 55.97, - ["Y"] = 19.27, - ["CD"] = 0, - }, - [14] = { - ["X"] = 54.89, - ["Y"] = 16.3, - ["CD"] = 0, - }, - [15] = { - ["X"] = 53.91, - ["Y"] = 14.89, - ["CD"] = 0, - }, - [16] = { - ["X"] = 53.01, - ["Y"] = 13.32, - ["CD"] = 0, - }, - [17] = { - ["X"] = 52.11, - ["Y"] = 11.44, - ["CD"] = 0, - }, - [18] = { - ["X"] = 51.27, - ["Y"] = 10.74, - ["CD"] = 0, - }, - [19] = { - ["X"] = 50.26, - ["Y"] = 10.4, - ["CD"] = 0, - }, - [20] = { - ["X"] = 49.24, - ["Y"] = 10.45, - ["CD"] = 0, - }, - [21] = { - ["X"] = 47.77, - ["Y"] = 11.5, - ["CD"] = 0, - }, - [22] = { - ["X"] = 46.95, - ["Y"] = 10.6, - ["CD"] = 0, - }, - [23] = { - ["X"] = 46.07, - ["Y"] = 10.68, - ["CD"] = 0, - }, - [24] = { - ["X"] = 41.13, - ["Y"] = 12.7, - ["CD"] = 0, - }, - [25] = { - ["X"] = 39.77, - ["Y"] = 14.58, - ["CD"] = 0, - }, - [26] = { - ["X"] = 38.29, - ["Y"] = 19.38, - ["CD"] = 0, - }, - [27] = { - ["X"] = 36.19, - ["Y"] = 20.63, - ["CD"] = 0, - }, - [28] = { - ["X"] = 36.17, - ["Y"] = 22.01, - ["CD"] = 0, - }, - [29] = { - ["X"] = 36.39, - ["Y"] = 23.37, - ["CD"] = 0, - }, - [30] = { - ["X"] = 34.91, - ["Y"] = 24.27, - ["CD"] = 0, - }, - [31] = { - ["X"] = 34.2, - ["Y"] = 25.24, - ["CD"] = 0, - }, - [32] = { - ["X"] = 31.86, - ["Y"] = 26.16, - ["CD"] = 0, - }, - [33] = { - ["X"] = 29.8, - ["Y"] = 32.26, - ["CD"] = 0, - }, - [34] = { - ["X"] = 30.34, - ["Y"] = 34.84, - ["CD"] = 0, - }, - [35] = { - ["X"] = 31.21, - ["Y"] = 39.32, - ["CD"] = 0, - }, - [36] = { - ["X"] = 31.29, - ["Y"] = 40.69, - ["CD"] = 0, - }, - [37] = { - ["X"] = 29.99, - ["Y"] = 48.6, - ["CD"] = 0, - }, - [38] = { - ["X"] = 29.95, - ["Y"] = 50.01, - ["CD"] = 0, - }, - [39] = { - ["X"] = 28.55, - ["Y"] = 52.13, - ["CD"] = 0, - }, - [40] = { - ["X"] = 28.61, - ["Y"] = 54.13, - ["CD"] = 0, - }, - [41] = { - ["X"] = 28.71, - ["Y"] = 55.45, - ["CD"] = 0, - }, - [42] = { - ["X"] = 30.26, - ["Y"] = 58.89, - ["CD"] = 0, - }, - [43] = { - ["X"] = 31.74, - ["Y"] = 60.67, - ["CD"] = 0, - }, - [44] = { - ["X"] = 36.49, - ["Y"] = 65.21, - ["CD"] = 0, - }, - [45] = { - ["X"] = 37.61, - ["Y"] = 67.49, - ["CD"] = 0, - }, - [46] = { - ["X"] = 38.38, - ["Y"] = 69.44, - ["CD"] = 0, - }, - [47] = { - ["X"] = 38.79, - ["Y"] = 72.65, - ["CD"] = 0, - }, - [48] = { - ["X"] = 41.04, - ["Y"] = 73.11, - ["CD"] = 0, - }, - [49] = { - ["X"] = 45.93, - ["Y"] = 78.12, - ["CD"] = 0, - }, - [50] = { - ["X"] = 43, - ["Y"] = 72.74, - ["CD"] = 0, - }, - [51] = { - ["X"] = 44.04, - ["Y"] = 70.22, - ["CD"] = 0, - }, - [52] = { - ["X"] = 43.8, - ["Y"] = 68.68, - ["CD"] = 0, - }, - [53] = { - ["X"] = 57.52, - ["Y"] = 59.84, - ["CD"] = 0, - }, - [54] = { - ["X"] = 57.52, - ["Y"] = 57.7, - ["CD"] = 0, - }, - [55] = { - ["X"] = 58.07, - ["Y"] = 54.65, - ["CD"] = 0, - }, - [56] = { - ["X"] = 57.96, - ["Y"] = 53.13, - ["CD"] = 0, - }, - [57] = { - ["X"] = 57.86, - ["Y"] = 47.77, - ["CD"] = 0, - }, - [58] = { - ["X"] = 58.19, - ["Y"] = 47.05, - ["CD"] = 0, - }, - [59] = { - ["X"] = 58.61, - ["Y"] = 44.17, - ["CD"] = 0, - }, - [60] = { - ["X"] = 56.51, - ["Y"] = 44.73, - ["CD"] = 0, - }, - [61] = { - ["X"] = 54.78, - ["Y"] = 45.97, - ["CD"] = 0, - }, - [62] = { - ["X"] = 51.14, - ["Y"] = 44.1, - ["CD"] = 0, - }, - [63] = { - ["X"] = 50.07, - ["Y"] = 44.32, - ["CD"] = 0, - }, - [64] = { - ["X"] = 47.67, - ["Y"] = 45.55, - ["CD"] = 0, - }, - [65] = { - ["X"] = 46.74, - ["Y"] = 44.41, - ["CD"] = 0, - }, - [66] = { - ["X"] = 45.62, - ["Y"] = 43.41, - ["CD"] = 0, - }, - [67] = { - ["X"] = 44.37, - ["Y"] = 46.79, - ["CD"] = 0, - }, - [68] = { - ["X"] = 44.75, - ["Y"] = 50.99, - ["CD"] = 0, - }, - [69] = { - ["X"] = 43.43, - ["Y"] = 51.8, - ["CD"] = 0, - }, - [70] = { - ["X"] = 42.94, - ["Y"] = 52.84, - ["CD"] = 0, - }, - [71] = { - ["X"] = 41.36, - ["Y"] = 56.14, - ["CD"] = 0, - }, - [72] = { - ["X"] = 40.42, - ["Y"] = 59.11, - ["CD"] = 0, - }, - [73] = { - ["X"] = 40.66, - ["Y"] = 60.23, - ["CD"] = 0, - }, - [74] = { - ["X"] = 41.34, - ["Y"] = 61.28, - ["CD"] = 0, - }, - [75] = { - ["X"] = 42.63, - ["Y"] = 62.64, - ["CD"] = 0, - }, - [76] = { - ["X"] = 43.09, - ["Y"] = 63.34, - ["CD"] = 0, - }, - [77] = { - ["X"] = 42.95, - ["Y"] = 66.46, - ["CD"] = 0, - }, - [78] = { - ["X"] = 41.91, - ["Y"] = 65.48, - ["CD"] = 0, - }, - [79] = { - ["X"] = 39.84, - ["Y"] = 67.12, - ["CD"] = 0, - }, - [80] = { - ["X"] = 39.25, - ["Y"] = 66.78, - ["CD"] = 0, - }, - [81] = { - ["X"] = 37.95, - ["Y"] = 65.06, - ["CD"] = 0, - }, - [82] = { - ["X"] = 36.88, - ["Y"] = 62.21, - ["CD"] = 0, - }, - [83] = { - ["X"] = 35, - ["Y"] = 61.68, - ["CD"] = 0, - }, - [84] = { - ["X"] = 34.47, - ["Y"] = 61.63, - ["CD"] = 0, - }, - [85] = { - ["X"] = 33.04, - ["Y"] = 59.61, - ["CD"] = 0, - }, - [86] = { - ["X"] = 32.47, - ["Y"] = 58.59, - ["CD"] = 0, - }, - [87] = { - ["X"] = 33.5, - ["Y"] = 48.45, - ["CD"] = 0, - }, - [88] = { - ["X"] = 33.97, - ["Y"] = 46.69, - ["CD"] = 0, - }, - [89] = { - ["X"] = 34.71, - ["Y"] = 45.6, - ["CD"] = 0, - }, - [90] = { - ["X"] = 35.6, - ["Y"] = 44.86, - ["CD"] = 0, - }, - [91] = { - ["X"] = 35.83, - ["Y"] = 42.47, - ["CD"] = 0, - }, - [92] = { - ["X"] = 37.81, - ["Y"] = 39.75, - ["CD"] = 0, - }, - [93] = { - ["X"] = 38.19, - ["Y"] = 38.74, - ["CD"] = 0, - }, - [94] = { - ["X"] = 38.79, - ["Y"] = 38.66, - ["CD"] = 0, - }, - [95] = { - ["X"] = 39.3, - ["Y"] = 38.66, - ["CD"] = 0, - }, - [96] = { - ["X"] = 39.02, - ["Y"] = 37.93, - ["CD"] = 0, - }, - [97] = { - ["X"] = 40.35, - ["Y"] = 35.43, - ["CD"] = 0, - }, - [98] = { - ["X"] = 40.39, - ["Y"] = 33.63, - ["CD"] = 0, - }, - [99] = { - ["X"] = 49.08, - ["Y"] = 29.35, - ["CD"] = 0, - }, - [100] = { - ["X"] = 51.14, - ["Y"] = 25.3, - ["CD"] = 0, - }, - [101] = { - ["X"] = 49.93, - ["Y"] = 27.04, - ["CD"] = 0, - }, - [102] = { - ["X"] = 49.29, - ["Y"] = 25.89, - ["CD"] = 0, - }, - [103] = { - ["X"] = 50.02, - ["Y"] = 25.23, - ["CD"] = 0, - }, - [104] = { - ["X"] = 44.16, - ["Y"] = 26.34, - ["CD"] = 0, - }, - [105] = { - ["X"] = 45.33, - ["Y"] = 25.11, - ["CD"] = 0, - }, - [106] = { - ["X"] = 47.16, - ["Y"] = 24.57, - ["CD"] = 0, - }, - [107] = { - ["X"] = 48.18, - ["Y"] = 24.81, - ["CD"] = 0, - }, - [108] = { - ["X"] = 48.43, - ["Y"] = 24.91, - ["CD"] = 0, - }, - [109] = { - ["X"] = 41.96, - ["Y"] = 27.74, - ["CD"] = 0, - }, - [110] = { - ["X"] = 40.81, - ["Y"] = 28.03, - ["CD"] = 0, - }, - [111] = { - ["X"] = 49.48, - ["Y"] = 32.24, - ["CD"] = 0, - }, - [112] = { - ["X"] = 48.81, - ["Y"] = 30.9, - ["CD"] = 0, - }, - [113] = { - ["X"] = 47.43, - ["Y"] = 9.62, - ["CD"] = 0, - }, - [114] = { - ["X"] = 41.86, - ["Y"] = 29.75, - ["CD"] = 0, - }, - [115] = { - ["X"] = 41.9, - ["Y"] = 33.87, - ["CD"] = 0, - }, - [116] = { - ["X"] = 38.16, - ["Y"] = 38.67, - ["CD"] = 0, - }, - [117] = { - ["X"] = 42.37, - ["Y"] = 57.47, - ["CD"] = 0, - }, - [118] = { - ["X"] = 35.91, - ["Y"] = 64.63, - ["CD"] = 0, - }, - [119] = { - ["X"] = 34.84, - ["Y"] = 66.91, - ["CD"] = 0, - }, - [120] = { - ["X"] = 58.06, - ["Y"] = 22.18, - ["CD"] = 0, - }, - [121] = { - ["X"] = 55.33, - ["Y"] = 18.91, - ["CD"] = 0, - }, - [122] = { - ["X"] = 56.08, - ["Y"] = 16.68, - ["CD"] = 0, - }, - [123] = { - ["X"] = 53.44, - ["Y"] = 12.37, - ["CD"] = 0, - }, - [124] = { - ["X"] = 48.54, - ["Y"] = 7.84, - ["CD"] = 0, - }, - [125] = { - ["X"] = 45.82, - ["Y"] = 11.08, - ["CD"] = 0, - }, - [126] = { - ["X"] = 46.22, - ["Y"] = 10.22, - ["CD"] = 0, - }, - [127] = { - ["X"] = 43.25, - ["Y"] = 9.49, - ["CD"] = 0, - }, - [128] = { - ["X"] = 41.16, - ["Y"] = 13.96, - ["CD"] = 0, - }, - [129] = { - ["X"] = 42.56, - ["Y"] = 30.48, - ["CD"] = 0, - }, - [130] = { - ["X"] = 39.26, - ["Y"] = 50.08, - ["CD"] = 0, - }, - [131] = { - ["X"] = 35.86, - ["Y"] = 38.62, - ["CD"] = 0, - }, - [132] = { - ["X"] = 38.03, - ["Y"] = 42.82, - ["CD"] = 0, - }, - [133] = { - ["X"] = 41.33, - ["Y"] = 48.68, - ["CD"] = 0, - }, - [134] = { - ["X"] = 40.45, - ["Y"] = 50.6, - ["CD"] = 0, - }, - [135] = { - ["X"] = 47.95, - ["Y"] = 69.23, - ["CD"] = 0, - }, - [136] = { - ["X"] = 56.51, - ["Y"] = 61.71, - ["CD"] = 0, - }, - [137] = { - ["X"] = 40.18, - ["Y"] = 74.41, - ["CD"] = 0, - }, - [138] = { - ["X"] = 34.69, - ["Y"] = 74.43, - ["CD"] = 0, - }, - [139] = { - ["X"] = 33.56, - ["Y"] = 72.81, - ["CD"] = 0, - }, - [140] = { - ["X"] = 39.37, - ["Y"] = 64.28, - ["CD"] = 0, - }, - [141] = { - ["X"] = 48.31, - ["Y"] = 29.71, - ["CD"] = 0, - }, - [142] = { - ["X"] = 41.06, - ["Y"] = 51.89, - ["CD"] = 0, - }, - [143] = { - ["X"] = 47.39, - ["Y"] = 57.58, - ["CD"] = 0, - }, - [144] = { - ["X"] = 44.3, - ["Y"] = 30.89, - ["CD"] = 0, - }, - [145] = { - ["X"] = 37.26, - ["Y"] = 33.85, - ["CD"] = 0, - }, - [146] = { - ["X"] = 49.68, - ["Y"] = 28.43, - ["CD"] = 0, - }, - [147] = { - ["X"] = 46.45, - ["Y"] = 26.28, - ["CD"] = 0, - }, - [148] = { - ["X"] = 48.48, - ["Y"] = 54.81, - ["CD"] = 0, - }, - [149] = { - ["X"] = 44.43, - ["Y"] = 43.63, - ["CD"] = 0, - }, - [150] = { - ["X"] = 42.21, - ["Y"] = 54.16, - ["CD"] = 0, - }, - [151] = { - ["X"] = 52.71, - ["Y"] = 39.16, - ["CD"] = 0, - }, - [152] = { - ["X"] = 50.92, - ["Y"] = 31.71, - ["CD"] = 0, - }, - [153] = { - ["X"] = 49.73, - ["Y"] = 40.07, - ["CD"] = 0, - }, - [154] = { - ["X"] = 43.29, - ["Y"] = 33.05, - ["CD"] = 0, - }, - [155] = { - ["X"] = 42.5, - ["Y"] = 61.79, - ["CD"] = 0, - }, - [156] = { - ["X"] = 38.62, - ["Y"] = 61.09, - ["CD"] = 0, - }, - [157] = { - ["X"] = 33.34, - ["Y"] = 66.81, - ["CD"] = 0, - }, - }, - --Stormheim / Fjarnskaggl - [1017] = { - [1] = { - ["X"] = 42.73, - ["Y"] = 21.64, - ["CD"] = 0, - }, - [2] = { - ["X"] = 45.18, - ["Y"] = 20.16, - ["CD"] = 0, - }, - [3] = { - ["X"] = 46.55, - ["Y"] = 20.24, - ["CD"] = 0, - }, - [4] = { - ["X"] = 59.54, - ["Y"] = 32.57, - ["CD"] = 0, - }, - [5] = { - ["X"] = 58.44, - ["Y"] = 30.81, - ["CD"] = 0, - }, - [6] = { - ["X"] = 60.72, - ["Y"] = 27.5, - ["CD"] = 0, - }, - [7] = { - ["X"] = 62.19, - ["Y"] = 26.58, - ["CD"] = 0, - }, - [8] = { - ["X"] = 62.99, - ["Y"] = 27.45, - ["CD"] = 0, - }, - [9] = { - ["X"] = 63.12, - ["Y"] = 29.3, - ["CD"] = 0, - }, - [10] = { - ["X"] = 62.08, - ["Y"] = 31.15, - ["CD"] = 0, - }, - [11] = { - ["X"] = 61.83, - ["Y"] = 31.81, - ["CD"] = 0, - }, - [12] = { - ["X"] = 61.03, - ["Y"] = 34.71, - ["CD"] = 0, - }, - [13] = { - ["X"] = 60.61, - ["Y"] = 37.98, - ["CD"] = 0, - }, - [14] = { - ["X"] = 60.56, - ["Y"] = 39.33, - ["CD"] = 0, - }, - [15] = { - ["X"] = 63.53, - ["Y"] = 49.93, - ["CD"] = 0, - }, - [16] = { - ["X"] = 66.21, - ["Y"] = 49.69, - ["CD"] = 0, - }, - [17] = { - ["X"] = 67.69, - ["Y"] = 49.03, - ["CD"] = 0, - }, - [18] = { - ["X"] = 69.63, - ["Y"] = 46.92, - ["CD"] = 0, - }, - [19] = { - ["X"] = 70.39, - ["Y"] = 46.08, - ["CD"] = 0, - }, - [20] = { - ["X"] = 72.09, - ["Y"] = 51.14, - ["CD"] = 0, - }, - [21] = { - ["X"] = 72.56, - ["Y"] = 53.56, - ["CD"] = 0, - }, - [22] = { - ["X"] = 75.52, - ["Y"] = 54.75, - ["CD"] = 0, - }, - [23] = { - ["X"] = 76.6, - ["Y"] = 56.5, - ["CD"] = 0, - }, - [24] = { - ["X"] = 76.14, - ["Y"] = 58.07, - ["CD"] = 0, - }, - [25] = { - ["X"] = 75.03, - ["Y"] = 57.99, - ["CD"] = 0, - }, - [26] = { - ["X"] = 73.66, - ["Y"] = 57.66, - ["CD"] = 0, - }, - [27] = { - ["X"] = 70.9, - ["Y"] = 61.57, - ["CD"] = 0, - }, - [28] = { - ["X"] = 67.75, - ["Y"] = 61.48, - ["CD"] = 0, - }, - [29] = { - ["X"] = 64.9, - ["Y"] = 63.35, - ["CD"] = 0, - }, - [30] = { - ["X"] = 62.99, - ["Y"] = 63.35, - ["CD"] = 0, - }, - [31] = { - ["X"] = 63.26, - ["Y"] = 64.62, - ["CD"] = 0, - }, - [32] = { - ["X"] = 63.23, - ["Y"] = 65.19, - ["CD"] = 0, - }, - [33] = { - ["X"] = 61.63, - ["Y"] = 65.68, - ["CD"] = 0, - }, - [34] = { - ["X"] = 62.54, - ["Y"] = 66.48, - ["CD"] = 0, - }, - [35] = { - ["X"] = 59.64, - ["Y"] = 66.61, - ["CD"] = 0, - }, - [36] = { - ["X"] = 59.13, - ["Y"] = 67.89, - ["CD"] = 0, - }, - [37] = { - ["X"] = 55.69, - ["Y"] = 71.33, - ["CD"] = 0, - }, - [38] = { - ["X"] = 59.46, - ["Y"] = 75.05, - ["CD"] = 0, - }, - [39] = { - ["X"] = 61.37, - ["Y"] = 77.79, - ["CD"] = 0, - }, - [40] = { - ["X"] = 61.46, - ["Y"] = 79.28, - ["CD"] = 0, - }, - [41] = { - ["X"] = 62.37, - ["Y"] = 81.26, - ["CD"] = 0, - }, - [42] = { - ["X"] = 62.89, - ["Y"] = 86.35, - ["CD"] = 0, - }, - [43] = { - ["X"] = 62.95, - ["Y"] = 87.18, - ["CD"] = 0, - }, - [44] = { - ["X"] = 61.86, - ["Y"] = 89.33, - ["CD"] = 0, - }, - [45] = { - ["X"] = 61.06, - ["Y"] = 89.51, - ["CD"] = 0, - }, - [46] = { - ["X"] = 60.35, - ["Y"] = 89.77, - ["CD"] = 0, - }, - [47] = { - ["X"] = 60.46, - ["Y"] = 88.01, - ["CD"] = 0, - }, - [48] = { - ["X"] = 58.77, - ["Y"] = 88.12, - ["CD"] = 0, - }, - [49] = { - ["X"] = 58, - ["Y"] = 89.7, - ["CD"] = 0, - }, - [50] = { - ["X"] = 57.81, - ["Y"] = 88.34, - ["CD"] = 0, - }, - [51] = { - ["X"] = 58.15, - ["Y"] = 87.43, - ["CD"] = 0, - }, - [52] = { - ["X"] = 54.91, - ["Y"] = 87.91, - ["CD"] = 0, - }, - [53] = { - ["X"] = 54.42, - ["Y"] = 87.64, - ["CD"] = 0, - }, - [54] = { - ["X"] = 53.69, - ["Y"] = 86.99, - ["CD"] = 0, - }, - [55] = { - ["X"] = 53.69, - ["Y"] = 86.01, - ["CD"] = 0, - }, - [56] = { - ["X"] = 53.41, - ["Y"] = 84.74, - ["CD"] = 0, - }, - [57] = { - ["X"] = 52.93, - ["Y"] = 84.03, - ["CD"] = 0, - }, - [58] = { - ["X"] = 52.94, - ["Y"] = 80.51, - ["CD"] = 0, - }, - [59] = { - ["X"] = 51.8, - ["Y"] = 80.64, - ["CD"] = 0, - }, - [60] = { - ["X"] = 50.54, - ["Y"] = 76.85, - ["CD"] = 0, - }, - [61] = { - ["X"] = 50.06, - ["Y"] = 74.96, - ["CD"] = 0, - }, - [62] = { - ["X"] = 49.84, - ["Y"] = 71.6, - ["CD"] = 0, - }, - [63] = { - ["X"] = 49.18, - ["Y"] = 71.24, - ["CD"] = 0, - }, - [64] = { - ["X"] = 49.05, - ["Y"] = 72.37, - ["CD"] = 0, - }, - [65] = { - ["X"] = 48.97, - ["Y"] = 73.02, - ["CD"] = 0, - }, - [66] = { - ["X"] = 48.69, - ["Y"] = 74.08, - ["CD"] = 0, - }, - [67] = { - ["X"] = 46.55, - ["Y"] = 65.61, - ["CD"] = 0, - }, - [68] = { - ["X"] = 45.84, - ["Y"] = 65.53, - ["CD"] = 0, - }, - [69] = { - ["X"] = 45.91, - ["Y"] = 66.46, - ["CD"] = 0, - }, - [70] = { - ["X"] = 45.89, - ["Y"] = 68.5, - ["CD"] = 0, - }, - [71] = { - ["X"] = 46.49, - ["Y"] = 69.36, - ["CD"] = 0, - }, - [72] = { - ["X"] = 46.85, - ["Y"] = 70.49, - ["CD"] = 0, - }, - [73] = { - ["X"] = 48.64, - ["Y"] = 66.49, - ["CD"] = 0, - }, - [74] = { - ["X"] = 48.19, - ["Y"] = 65.73, - ["CD"] = 0, - }, - [75] = { - ["X"] = 69.05, - ["Y"] = 53, - ["CD"] = 0, - }, - [76] = { - ["X"] = 69.6, - ["Y"] = 53.04, - ["CD"] = 0, - }, - [77] = { - ["X"] = 71.2, - ["Y"] = 50.43, - ["CD"] = 0, - }, - [78] = { - ["X"] = 72.12, - ["Y"] = 48.71, - ["CD"] = 0, - }, - [79] = { - ["X"] = 71.54, - ["Y"] = 47.52, - ["CD"] = 0, - }, - [80] = { - ["X"] = 70.25, - ["Y"] = 47.85, - ["CD"] = 0, - }, - [81] = { - ["X"] = 67.53, - ["Y"] = 46.62, - ["CD"] = 0, - }, - [82] = { - ["X"] = 66.15, - ["Y"] = 46.42, - ["CD"] = 0, - }, - [83] = { - ["X"] = 65.17, - ["Y"] = 48.03, - ["CD"] = 0, - }, - [84] = { - ["X"] = 63.08, - ["Y"] = 47.87, - ["CD"] = 0, - }, - [85] = { - ["X"] = 62.37, - ["Y"] = 49.53, - ["CD"] = 0, - }, - [86] = { - ["X"] = 61.62, - ["Y"] = 50.11, - ["CD"] = 0, - }, - [87] = { - ["X"] = 61.46, - ["Y"] = 52.36, - ["CD"] = 0, - }, - [88] = { - ["X"] = 59.98, - ["Y"] = 54.34, - ["CD"] = 0, - }, - [89] = { - ["X"] = 59.21, - ["Y"] = 54.31, - ["CD"] = 0, - }, - [90] = { - ["X"] = 58.56, - ["Y"] = 53.27, - ["CD"] = 0, - }, - [91] = { - ["X"] = 57.53, - ["Y"] = 52.03, - ["CD"] = 0, - }, - [92] = { - ["X"] = 57.08, - ["Y"] = 50.3, - ["CD"] = 0, - }, - [93] = { - ["X"] = 53.84, - ["Y"] = 52.74, - ["CD"] = 0, - }, - [94] = { - ["X"] = 53.1, - ["Y"] = 52.62, - ["CD"] = 0, - }, - [95] = { - ["X"] = 51.82, - ["Y"] = 55.04, - ["CD"] = 0, - }, - [96] = { - ["X"] = 51.02, - ["Y"] = 56.85, - ["CD"] = 0, - }, - [97] = { - ["X"] = 49.4, - ["Y"] = 57.58, - ["CD"] = 0, - }, - [98] = { - ["X"] = 48.41, - ["Y"] = 56.75, - ["CD"] = 0, - }, - [99] = { - ["X"] = 46.85, - ["Y"] = 55.36, - ["CD"] = 0, - }, - [100] = { - ["X"] = 46.59, - ["Y"] = 54.11, - ["CD"] = 0, - }, - [101] = { - ["X"] = 45.57, - ["Y"] = 53.02, - ["CD"] = 0, - }, - [102] = { - ["X"] = 44.37, - ["Y"] = 52.98, - ["CD"] = 0, - }, - [103] = { - ["X"] = 44.15, - ["Y"] = 51.24, - ["CD"] = 0, - }, - [104] = { - ["X"] = 40.96, - ["Y"] = 49.38, - ["CD"] = 0, - }, - [105] = { - ["X"] = 39.14, - ["Y"] = 47.16, - ["CD"] = 0, - }, - [106] = { - ["X"] = 38.88, - ["Y"] = 44.73, - ["CD"] = 0, - }, - [107] = { - ["X"] = 38.83, - ["Y"] = 43.43, - ["CD"] = 0, - }, - [108] = { - ["X"] = 38.15, - ["Y"] = 43.33, - ["CD"] = 0, - }, - [109] = { - ["X"] = 37.77, - ["Y"] = 42.02, - ["CD"] = 0, - }, - [110] = { - ["X"] = 37.54, - ["Y"] = 40.84, - ["CD"] = 0, - }, - [111] = { - ["X"] = 35.86, - ["Y"] = 40.01, - ["CD"] = 0, - }, - [112] = { - ["X"] = 33.99, - ["Y"] = 36.77, - ["CD"] = 0, - }, - [113] = { - ["X"] = 33.07, - ["Y"] = 37, - ["CD"] = 0, - }, - [114] = { - ["X"] = 33.87, - ["Y"] = 39.85, - ["CD"] = 0, - }, - [115] = { - ["X"] = 33.03, - ["Y"] = 40.27, - ["CD"] = 0, - }, - [116] = { - ["X"] = 32.06, - ["Y"] = 40.76, - ["CD"] = 0, - }, - [117] = { - ["X"] = 33.91, - ["Y"] = 44.47, - ["CD"] = 0, - }, - [118] = { - ["X"] = 37.4, - ["Y"] = 45.88, - ["CD"] = 0, - }, - [119] = { - ["X"] = 37.28, - ["Y"] = 46.86, - ["CD"] = 0, - }, - [120] = { - ["X"] = 37.7, - ["Y"] = 48.2, - ["CD"] = 0, - }, - [121] = { - ["X"] = 38.14, - ["Y"] = 48.72, - ["CD"] = 0, - }, - [122] = { - ["X"] = 39.99, - ["Y"] = 51.1, - ["CD"] = 0, - }, - [123] = { - ["X"] = 40.14, - ["Y"] = 52.88, - ["CD"] = 0, - }, - [124] = { - ["X"] = 40.12, - ["Y"] = 54.59, - ["CD"] = 0, - }, - [125] = { - ["X"] = 40.48, - ["Y"] = 55.62, - ["CD"] = 0, - }, - [126] = { - ["X"] = 40.9, - ["Y"] = 54.97, - ["CD"] = 0, - }, - [127] = { - ["X"] = 41.83, - ["Y"] = 58.05, - ["CD"] = 0, - }, - [128] = { - ["X"] = 42.96, - ["Y"] = 58.02, - ["CD"] = 0, - }, - [129] = { - ["X"] = 43.76, - ["Y"] = 58.88, - ["CD"] = 0, - }, - [130] = { - ["X"] = 44.62, - ["Y"] = 59.61, - ["CD"] = 0, - }, - [131] = { - ["X"] = 46.7, - ["Y"] = 63.7, - ["CD"] = 0, - }, - [132] = { - ["X"] = 45.37, - ["Y"] = 38.44, - ["CD"] = 0, - }, - [133] = { - ["X"] = 45.75, - ["Y"] = 57.47, - ["CD"] = 0, - }, - [134] = { - ["X"] = 41.11, - ["Y"] = 65.23, - ["CD"] = 0, - }, - [135] = { - ["X"] = 42.3, - ["Y"] = 57.53, - ["CD"] = 0, - }, - [136] = { - ["X"] = 42.35, - ["Y"] = 61.07, - ["CD"] = 0, - }, - [137] = { - ["X"] = 41.82, - ["Y"] = 65.83, - ["CD"] = 0, - }, - [138] = { - ["X"] = 43.9, - ["Y"] = 58.83, - ["CD"] = 0, - }, - [139] = { - ["X"] = 36.28, - ["Y"] = 53.19, - ["CD"] = 0, - }, - [140] = { - ["X"] = 33.45, - ["Y"] = 57.93, - ["CD"] = 0, - }, - [141] = { - ["X"] = 31.05, - ["Y"] = 50.17, - ["CD"] = 0, - }, - [142] = { - ["X"] = 47.87, - ["Y"] = 52.01, - ["CD"] = 0, - }, - [143] = { - ["X"] = 43.23, - ["Y"] = 48.66, - ["CD"] = 0, - }, - [144] = { - ["X"] = 49.96, - ["Y"] = 50.95, - ["CD"] = 0, - }, - [145] = { - ["X"] = 48.72, - ["Y"] = 41.11, - ["CD"] = 0, - }, - [146] = { - ["X"] = 39.14, - ["Y"] = 53.61, - ["CD"] = 0, - }, - [147] = { - ["X"] = 42.68, - ["Y"] = 50.61, - ["CD"] = 0, - }, - [148] = { - ["X"] = 41.05, - ["Y"] = 54.12, - ["CD"] = 0, - }, - [149] = { - ["X"] = 47.37, - ["Y"] = 67.98, - ["CD"] = 0, - }, - [150] = { - ["X"] = 44.75, - ["Y"] = 82.18, - ["CD"] = 0, - }, - [151] = { - ["X"] = 63.56, - ["Y"] = 45.14, - ["CD"] = 0, - }, - [152] = { - ["X"] = 45.89, - ["Y"] = 46.6, - ["CD"] = 0, - }, - [153] = { - ["X"] = 46.49, - ["Y"] = 64.37, - ["CD"] = 0, - }, - [154] = { - ["X"] = 64.82, - ["Y"] = 52.7, - ["CD"] = 0, - }, - [155] = { - ["X"] = 64.17, - ["Y"] = 52.38, - ["CD"] = 0, - }, - [156] = { - ["X"] = 68.5, - ["Y"] = 57.27, - ["CD"] = 0, - }, - [157] = { - ["X"] = 67.97, - ["Y"] = 56.88, - ["CD"] = 0, - }, - [158] = { - ["X"] = 68.84, - ["Y"] = 55.8, - ["CD"] = 0, - }, - [159] = { - ["X"] = 65.9, - ["Y"] = 48.34, - ["CD"] = 0, - }, - [160] = { - ["X"] = 67.73, - ["Y"] = 41.64, - ["CD"] = 0, - }, - [161] = { - ["X"] = 74.57, - ["Y"] = 43.32, - ["CD"] = 0, - }, - [162] = { - ["X"] = 67.61, - ["Y"] = 54.47, - ["CD"] = 0, - }, - [163] = { - ["X"] = 58.75, - ["Y"] = 51.72, - ["CD"] = 0, - }, - [164] = { - ["X"] = 73.32, - ["Y"] = 59.52, - ["CD"] = 0, - }, - [165] = { - ["X"] = 63.58, - ["Y"] = 37.95, - ["CD"] = 0, - }, - [166] = { - ["X"] = 66.85, - ["Y"] = 53.77, - ["CD"] = 0, - }, - [167] = { - ["X"] = 77.33, - ["Y"] = 63.14, - ["CD"] = 0, - }, - [168] = { - ["X"] = 73.71, - ["Y"] = 59.94, - ["CD"] = 0, - }, - [169] = { - ["X"] = 76.47, - ["Y"] = 60.08, - ["CD"] = 0, - }, - [170] = { - ["X"] = 44.97, - ["Y"] = 39.08, - ["CD"] = 0, - }, - [171] = { - ["X"] = 73.25, - ["Y"] = 44.5, - ["CD"] = 0, - }, - [172] = { - ["X"] = 68.35, - ["Y"] = 58.98, - ["CD"] = 0, - }, - [173] = { - ["X"] = 71.56, - ["Y"] = 52.46, - ["CD"] = 0, - }, - [174] = { - ["X"] = 63.95, - ["Y"] = 62.4, - ["CD"] = 0, - }, - [175] = { - ["X"] = 60.12, - ["Y"] = 69.1, - ["CD"] = 0, - }, - [176] = { - ["X"] = 61.22, - ["Y"] = 64.31, - ["CD"] = 0, - }, - [177] = { - ["X"] = 55.88, - ["Y"] = 79.08, - ["CD"] = 0, - }, - [178] = { - ["X"] = 64.32, - ["Y"] = 44.07, - ["CD"] = 0, - }, - [179] = { - ["X"] = 68.89, - ["Y"] = 62.08, - ["CD"] = 0, - }, - [180] = { - ["X"] = 69.35, - ["Y"] = 60.39, - ["CD"] = 0, - }, - [181] = { - ["X"] = 65.94, - ["Y"] = 62.71, - ["CD"] = 0, - }, - [182] = { - ["X"] = 66.6, - ["Y"] = 60.36, - ["CD"] = 0, - }, - [183] = { - ["X"] = 46.02, - ["Y"] = 76.89, - ["CD"] = 0, - }, - [184] = { - ["X"] = 29.73, - ["Y"] = 55.09, - ["CD"] = 0, - }, - [185] = { - ["X"] = 48.35, - ["Y"] = 64.82, - ["CD"] = 0, - }, - }, - --Val'sharah / Dreamleaf - [1018] = { - [1] = { - ["X"] = 23.7, - ["Y"] = 73.12, - ["CD"] = 0, - }, - [2] = { - ["X"] = 22.52, - ["Y"] = 71.28, - ["CD"] = 0, - }, - [3] = { - ["X"] = 21.12, - ["Y"] = 70.47, - ["CD"] = 0, - }, - [4] = { - ["X"] = 20.56, - ["Y"] = 68.69, - ["CD"] = 0, - }, - [5] = { - ["X"] = 21.42, - ["Y"] = 67.02, - ["CD"] = 0, - }, - [6] = { - ["X"] = 23.97, - ["Y"] = 65.2, - ["CD"] = 0, - }, - [7] = { - ["X"] = 24.52, - ["Y"] = 66.6, - ["CD"] = 0, - }, - [8] = { - ["X"] = 31.99, - ["Y"] = 59.04, - ["CD"] = 0, - }, - [9] = { - ["X"] = 33.48, - ["Y"] = 60.6, - ["CD"] = 0, - }, - [10] = { - ["X"] = 35.38, - ["Y"] = 61.46, - ["CD"] = 0, - }, - [11] = { - ["X"] = 36.64, - ["Y"] = 60.88, - ["CD"] = 0, - }, - [12] = { - ["X"] = 38.63, - ["Y"] = 58.93, - ["CD"] = 0, - }, - [13] = { - ["X"] = 45.04, - ["Y"] = 58.46, - ["CD"] = 0, - }, - [14] = { - ["X"] = 46.38, - ["Y"] = 58.45, - ["CD"] = 0, - }, - [15] = { - ["X"] = 51.94, - ["Y"] = 65.28, - ["CD"] = 0, - }, - [16] = { - ["X"] = 52.39, - ["Y"] = 67.56, - ["CD"] = 0, - }, - [17] = { - ["X"] = 50.05, - ["Y"] = 71.58, - ["CD"] = 0, - }, - [18] = { - ["X"] = 49.84, - ["Y"] = 74.57, - ["CD"] = 0, - }, - [19] = { - ["X"] = 49.57, - ["Y"] = 78.07, - ["CD"] = 0, - }, - [20] = { - ["X"] = 48.9, - ["Y"] = 80.41, - ["CD"] = 0, - }, - [21] = { - ["X"] = 49.72, - ["Y"] = 81.52, - ["CD"] = 0, - }, - [22] = { - ["X"] = 49.75, - ["Y"] = 83.06, - ["CD"] = 0, - }, - [23] = { - ["X"] = 47.81, - ["Y"] = 88.73, - ["CD"] = 0, - }, - [24] = { - ["X"] = 44.54, - ["Y"] = 87.73, - ["CD"] = 0, - }, - [25] = { - ["X"] = 43.54, - ["Y"] = 84.84, - ["CD"] = 0, - }, - [26] = { - ["X"] = 42.98, - ["Y"] = 81.66, - ["CD"] = 0, - }, - [27] = { - ["X"] = 47.59, - ["Y"] = 79.41, - ["CD"] = 0, - }, - [28] = { - ["X"] = 49.11, - ["Y"] = 75.32, - ["CD"] = 0, - }, - [29] = { - ["X"] = 49.51, - ["Y"] = 74.06, - ["CD"] = 0, - }, - [30] = { - ["X"] = 51.33, - ["Y"] = 72.05, - ["CD"] = 0, - }, - [31] = { - ["X"] = 52.93, - ["Y"] = 71.06, - ["CD"] = 0, - }, - [32] = { - ["X"] = 55.42, - ["Y"] = 74.08, - ["CD"] = 0, - }, - [33] = { - ["X"] = 56.07, - ["Y"] = 74.88, - ["CD"] = 0, - }, - [34] = { - ["X"] = 56.84, - ["Y"] = 76.51, - ["CD"] = 0, - }, - [35] = { - ["X"] = 58.65, - ["Y"] = 76.39, - ["CD"] = 0, - }, - [36] = { - ["X"] = 58.57, - ["Y"] = 75.31, - ["CD"] = 0, - }, - [37] = { - ["X"] = 59.59, - ["Y"] = 74.16, - ["CD"] = 0, - }, - [38] = { - ["X"] = 60.35, - ["Y"] = 73.28, - ["CD"] = 0, - }, - [39] = { - ["X"] = 63.71, - ["Y"] = 76.36, - ["CD"] = 0, - }, - [40] = { - ["X"] = 64.29, - ["Y"] = 77.99, - ["CD"] = 0, - }, - [41] = { - ["X"] = 66.44, - ["Y"] = 80.68, - ["CD"] = 0, - }, - [42] = { - ["X"] = 65.94, - ["Y"] = 83.32, - ["CD"] = 0, - }, - [43] = { - ["X"] = 66.71, - ["Y"] = 85.68, - ["CD"] = 0, - }, - [44] = { - ["X"] = 66.43, - ["Y"] = 87.12, - ["CD"] = 0, - }, - [45] = { - ["X"] = 65.37, - ["Y"] = 88.22, - ["CD"] = 0, - }, - [46] = { - ["X"] = 64.91, - ["Y"] = 88.25, - ["CD"] = 0, - }, - [47] = { - ["X"] = 64.67, - ["Y"] = 87.32, - ["CD"] = 0, - }, - [48] = { - ["X"] = 63.61, - ["Y"] = 86.41, - ["CD"] = 0, - }, - [49] = { - ["X"] = 63.32, - ["Y"] = 84.05, - ["CD"] = 0, - }, - [50] = { - ["X"] = 61.95, - ["Y"] = 83.94, - ["CD"] = 0, - }, - [51] = { - ["X"] = 61.19, - ["Y"] = 76.71, - ["CD"] = 0, - }, - [52] = { - ["X"] = 59.54, - ["Y"] = 76.62, - ["CD"] = 0, - }, - [53] = { - ["X"] = 58.28, - ["Y"] = 75.22, - ["CD"] = 0, - }, - [54] = { - ["X"] = 68.01, - ["Y"] = 75.14, - ["CD"] = 0, - }, - [55] = { - ["X"] = 65.84, - ["Y"] = 77.38, - ["CD"] = 0, - }, - [56] = { - ["X"] = 57.15, - ["Y"] = 77.22, - ["CD"] = 0, - }, - [57] = { - ["X"] = 57.87, - ["Y"] = 71.9, - ["CD"] = 0, - }, - [58] = { - ["X"] = 59.68, - ["Y"] = 67.31, - ["CD"] = 0, - }, - [59] = { - ["X"] = 60.58, - ["Y"] = 71.85, - ["CD"] = 0, - }, - [60] = { - ["X"] = 61.97, - ["Y"] = 76.08, - ["CD"] = 0, - }, - [61] = { - ["X"] = 64.48, - ["Y"] = 67.54, - ["CD"] = 0, - }, - [62] = { - ["X"] = 51.7, - ["Y"] = 91.24, - ["CD"] = 0, - }, - [63] = { - ["X"] = 50.56, - ["Y"] = 72.37, - ["CD"] = 0, - }, - [64] = { - ["X"] = 42.67, - ["Y"] = 72.97, - ["CD"] = 0, - }, - [65] = { - ["X"] = 43.5, - ["Y"] = 76.94, - ["CD"] = 0, - }, - [66] = { - ["X"] = 45.96, - ["Y"] = 76.33, - ["CD"] = 0, - }, - [67] = { - ["X"] = 44.31, - ["Y"] = 81.03, - ["CD"] = 0, - }, - [68] = { - ["X"] = 46.76, - ["Y"] = 81.13, - ["CD"] = 0, - }, - [69] = { - ["X"] = 48.35, - ["Y"] = 78.45, - ["CD"] = 0, - }, - [70] = { - ["X"] = 45.13, - ["Y"] = 70.18, - ["CD"] = 0, - }, - [71] = { - ["X"] = 48.98, - ["Y"] = 86.21, - ["CD"] = 0, - }, - [72] = { - ["X"] = 43.79, - ["Y"] = 86.71, - ["CD"] = 0, - }, - [73] = { - ["X"] = 50.98, - ["Y"] = 82.3, - ["CD"] = 0, - }, - [74] = { - ["X"] = 51.27, - ["Y"] = 88.51, - ["CD"] = 0, - }, - [75] = { - ["X"] = 57.39, - ["Y"] = 70.12, - ["CD"] = 0, - }, - [76] = { - ["X"] = 52.47, - ["Y"] = 64.95, - ["CD"] = 0, - }, - [77] = { - ["X"] = 53.43, - ["Y"] = 51.13, - ["CD"] = 0, - }, - [78] = { - ["X"] = 60.66, - ["Y"] = 54.1, - ["CD"] = 0, - }, - [79] = { - ["X"] = 51.71, - ["Y"] = 64.2, - ["CD"] = 0, - }, - [80] = { - ["X"] = 62.26, - ["Y"] = 60.64, - ["CD"] = 0, - }, - [81] = { - ["X"] = 70.59, - ["Y"] = 51.89, - ["CD"] = 0, - }, - [82] = { - ["X"] = 66.56, - ["Y"] = 36.3, - ["CD"] = 0, - }, - [83] = { - ["X"] = 65.74, - ["Y"] = 46.08, - ["CD"] = 0, - }, - [84] = { - ["X"] = 61.47, - ["Y"] = 42.37, - ["CD"] = 0, - }, - [85] = { - ["X"] = 62.72, - ["Y"] = 33.4, - ["CD"] = 0, - }, - [86] = { - ["X"] = 45.35, - ["Y"] = 55.3, - ["CD"] = 0, - }, - [87] = { - ["X"] = 38.59, - ["Y"] = 63.67, - ["CD"] = 0, - }, - [88] = { - ["X"] = 38.92, - ["Y"] = 54.63, - ["CD"] = 0, - }, - [89] = { - ["X"] = 61.84, - ["Y"] = 85.27, - ["CD"] = 0, - }, - [90] = { - ["X"] = 60.08, - ["Y"] = 80.47, - ["CD"] = 0, - }, - [91] = { - ["X"] = 52.26, - ["Y"] = 72.07, - ["CD"] = 0, - }, - [92] = { - ["X"] = 49.99, - ["Y"] = 70.4, - ["CD"] = 0, - }, - [93] = { - ["X"] = 45.26, - ["Y"] = 67.42, - ["CD"] = 0, - }, - [94] = { - ["X"] = 42.47, - ["Y"] = 80.28, - ["CD"] = 0, - }, - [95] = { - ["X"] = 45.62, - ["Y"] = 81.42, - ["CD"] = 0, - }, - [96] = { - ["X"] = 46.8, - ["Y"] = 74.09, - ["CD"] = 0, - }, - [97] = { - ["X"] = 58.36, - ["Y"] = 92.03, - ["CD"] = 0, - }, - [98] = { - ["X"] = 55.21, - ["Y"] = 78.88, - ["CD"] = 0, - }, - [99] = { - ["X"] = 61.2, - ["Y"] = 77.36, - ["CD"] = 0, - }, - [100] = { - ["X"] = 62.36, - ["Y"] = 65.85, - ["CD"] = 0, - }, - [101] = { - ["X"] = 49.05, - ["Y"] = 65.61, - ["CD"] = 0, - }, - [102] = { - ["X"] = 56.55, - ["Y"] = 64.33, - ["CD"] = 0, - }, - [103] = { - ["X"] = 56.67, - ["Y"] = 56.33, - ["CD"] = 0, - }, - [104] = { - ["X"] = 53.25, - ["Y"] = 52.24, - ["CD"] = 0, - }, - [105] = { - ["X"] = 63.74, - ["Y"] = 50.57, - ["CD"] = 0, - }, - [106] = { - ["X"] = 67.05, - ["Y"] = 55.44, - ["CD"] = 0, - }, - [107] = { - ["X"] = 68.83, - ["Y"] = 44.28, - ["CD"] = 0, - }, - [108] = { - ["X"] = 65.9, - ["Y"] = 41.14, - ["CD"] = 0, - }, - [109] = { - ["X"] = 65.95, - ["Y"] = 37.16, - ["CD"] = 0, - }, - [110] = { - ["X"] = 60.47, - ["Y"] = 33.98, - ["CD"] = 0, - }, - [111] = { - ["X"] = 58.38, - ["Y"] = 33.52, - ["CD"] = 0, - }, - [112] = { - ["X"] = 56.33, - ["Y"] = 44.4, - ["CD"] = 0, - }, - [113] = { - ["X"] = 56.06, - ["Y"] = 82.86, - ["CD"] = 0, - }, - [114] = { - ["X"] = 55.3, - ["Y"] = 55.78, - ["CD"] = 0, - }, - [115] = { - ["X"] = 55.56, - ["Y"] = 50.91, - ["CD"] = 0, - }, - [116] = { - ["X"] = 46.27, - ["Y"] = 54.85, - ["CD"] = 0, - }, - [117] = { - ["X"] = 37.51, - ["Y"] = 56.24, - ["CD"] = 0, - }, - [118] = { - ["X"] = 38.25, - ["Y"] = 57.4, - ["CD"] = 0, - }, - [119] = { - ["X"] = 41.46, - ["Y"] = 52.33, - ["CD"] = 0, - }, - [120] = { - ["X"] = 38.87, - ["Y"] = 61.1, - ["CD"] = 0, - }, - [121] = { - ["X"] = 47.72, - ["Y"] = 54.92, - ["CD"] = 0, - }, - [122] = { - ["X"] = 50.9, - ["Y"] = 43.4, - ["CD"] = 0, - }, - [123] = { - ["X"] = 46.52, - ["Y"] = 36.21, - ["CD"] = 0, - }, - [124] = { - ["X"] = 60.77, - ["Y"] = 63.01, - ["CD"] = 0, - }, - [125] = { - ["X"] = 58.67, - ["Y"] = 70.62, - ["CD"] = 0, - }, - [126] = { - ["X"] = 65.76, - ["Y"] = 68.15, - ["CD"] = 0, - }, - [127] = { - ["X"] = 62.87, - ["Y"] = 83.35, - ["CD"] = 0, - }, - [128] = { - ["X"] = 57.4, - ["Y"] = 88.53, - ["CD"] = 0, - }, - [129] = { - ["X"] = 56.11, - ["Y"] = 85.88, - ["CD"] = 0, - }, - [130] = { - ["X"] = 54.6, - ["Y"] = 83.39, - ["CD"] = 0, - }, - [131] = { - ["X"] = 56.05, - ["Y"] = 79.19, - ["CD"] = 0, - }, - }, - --Suramar / Starlight Rose - [1033] = { - [1] = { - ["X"] = 39.81, - ["Y"] = 55.75, - ["CD"] = 0, - }, - [2] = { - ["X"] = 35.72, - ["Y"] = 44.58, - ["CD"] = 0, - }, - [3] = { - ["X"] = 42.48, - ["Y"] = 62.87, - ["CD"] = 0, - }, - [4] = { - ["X"] = 36.77, - ["Y"] = 52.88, - ["CD"] = 0, - }, - [5] = { - ["X"] = 39.05, - ["Y"] = 52.08, - ["CD"] = 0, - }, - [6] = { - ["X"] = 33.14, - ["Y"] = 42.5, - ["CD"] = 0, - }, - [7] = { - ["X"] = 28.77, - ["Y"] = 41.26, - ["CD"] = 0, - }, - [8] = { - ["X"] = 31.6, - ["Y"] = 36.23, - ["CD"] = 0, - }, - [9] = { - ["X"] = 30.9, - ["Y"] = 38.04, - ["CD"] = 0, - }, - [10] = { - ["X"] = 31.8, - ["Y"] = 38.92, - ["CD"] = 0, - }, - [11] = { - ["X"] = 34.05, - ["Y"] = 38.76, - ["CD"] = 0, - }, - [12] = { - ["X"] = 36.44, - ["Y"] = 42.6, - ["CD"] = 0, - }, - [13] = { - ["X"] = 35.2, - ["Y"] = 38.64, - ["CD"] = 0, - }, - [14] = { - ["X"] = 35.24, - ["Y"] = 43, - ["CD"] = 0, - }, - [15] = { - ["X"] = 47.15, - ["Y"] = 41.25, - ["CD"] = 0, - }, - [16] = { - ["X"] = 44.86, - ["Y"] = 35.75, - ["CD"] = 0, - }, - [17] = { - ["X"] = 44.5, - ["Y"] = 32.66, - ["CD"] = 0, - }, - [18] = { - ["X"] = 47.89, - ["Y"] = 30.93, - ["CD"] = 0, - }, - [19] = { - ["X"] = 45.14, - ["Y"] = 26.9, - ["CD"] = 0, - }, - [20] = { - ["X"] = 42.73, - ["Y"] = 27.39, - ["CD"] = 0, - }, - [21] = { - ["X"] = 40.94, - ["Y"] = 29.97, - ["CD"] = 0, - }, - [22] = { - ["X"] = 40.74, - ["Y"] = 33.28, - ["CD"] = 0, - }, - [23] = { - ["X"] = 41.44, - ["Y"] = 24.59, - ["CD"] = 0, - }, - [24] = { - ["X"] = 39.62, - ["Y"] = 26.39, - ["CD"] = 0, - }, - [25] = { - ["X"] = 38.91, - ["Y"] = 24.83, - ["CD"] = 0, - }, - [26] = { - ["X"] = 37.09, - ["Y"] = 29.05, - ["CD"] = 0, - }, - [27] = { - ["X"] = 41.13, - ["Y"] = 37.95, - ["CD"] = 0, - }, - [28] = { - ["X"] = 41.61, - ["Y"] = 40.34, - ["CD"] = 0, - }, - [29] = { - ["X"] = 44.23, - ["Y"] = 39.51, - ["CD"] = 0, - }, - [30] = { - ["X"] = 43.5, - ["Y"] = 50.87, - ["CD"] = 0, - }, - [31] = { - ["X"] = 37.4, - ["Y"] = 62.25, - ["CD"] = 0, - }, - [32] = { - ["X"] = 36.04, - ["Y"] = 87.52, - ["CD"] = 0, - }, - [33] = { - ["X"] = 35.11, - ["Y"] = 92.37, - ["CD"] = 0, - }, - [34] = { - ["X"] = 32.33, - ["Y"] = 89.97, - ["CD"] = 0, - }, - [35] = { - ["X"] = 33.84, - ["Y"] = 50.23, - ["CD"] = 0, - }, - [36] = { - ["X"] = 42.8, - ["Y"] = 73.43, - ["CD"] = 0, - }, - [37] = { - ["X"] = 38.64, - ["Y"] = 62.53, - ["CD"] = 0, - }, - [38] = { - ["X"] = 39.08, - ["Y"] = 56.5, - ["CD"] = 0, - }, - [39] = { - ["X"] = 32.43, - ["Y"] = 50.36, - ["CD"] = 0, - }, - [40] = { - ["X"] = 33.08, - ["Y"] = 49.61, - ["CD"] = 0, - }, - [41] = { - ["X"] = 35.52, - ["Y"] = 51.77, - ["CD"] = 0, - }, - [42] = { - ["X"] = 38.31, - ["Y"] = 52.42, - ["CD"] = 0, - }, - [43] = { - ["X"] = 45.6, - ["Y"] = 50.48, - ["CD"] = 0, - }, - [44] = { - ["X"] = 61.95, - ["Y"] = 44.86, - ["CD"] = 0, - }, - [45] = { - ["X"] = 63.5, - ["Y"] = 46.54, - ["CD"] = 0, - }, - [46] = { - ["X"] = 58.6, - ["Y"] = 42.56, - ["CD"] = 0, - }, - [47] = { - ["X"] = 60.02, - ["Y"] = 48.16, - ["CD"] = 0, - }, - [48] = { - ["X"] = 59.87, - ["Y"] = 45.18, - ["CD"] = 0, - }, - [49] = { - ["X"] = 62.63, - ["Y"] = 41.77, - ["CD"] = 0, - }, - [50] = { - ["X"] = 56.64, - ["Y"] = 47.66, - ["CD"] = 0, - }, - [51] = { - ["X"] = 47.39, - ["Y"] = 52.94, - ["CD"] = 0, - }, - [52] = { - ["X"] = 44.57, - ["Y"] = 49.65, - ["CD"] = 0, - }, - [53] = { - ["X"] = 42.04, - ["Y"] = 48.91, - ["CD"] = 0, - }, - [54] = { - ["X"] = 39.9, - ["Y"] = 52.72, - ["CD"] = 0, - }, - [55] = { - ["X"] = 37.97, - ["Y"] = 54.37, - ["CD"] = 0, - }, - [56] = { - ["X"] = 34.36, - ["Y"] = 51.55, - ["CD"] = 0, - }, - [57] = { - ["X"] = 33.41, - ["Y"] = 47.94, - ["CD"] = 0, - }, - [58] = { - ["X"] = 33.44, - ["Y"] = 44.86, - ["CD"] = 0, - }, - [59] = { - ["X"] = 31.25, - ["Y"] = 9.46, - ["CD"] = 0, - }, - [60] = { - ["X"] = 69.25, - ["Y"] = 61.49, - ["CD"] = 0, - }, - [61] = { - ["X"] = 58.41, - ["Y"] = 41.84, - ["CD"] = 0, - }, - [62] = { - ["X"] = 65.12, - ["Y"] = 38.6, - ["CD"] = 0, - }, - [63] = { - ["X"] = 59.11, - ["Y"] = 49.07, - ["CD"] = 0, - }, - [64] = { - ["X"] = 56.77, - ["Y"] = 45.01, - ["CD"] = 0, - }, - [65] = { - ["X"] = 56.43, - ["Y"] = 49.48, - ["CD"] = 0, - }, - [66] = { - ["X"] = 33.54, - ["Y"] = 51.74, - ["CD"] = 0, - }, - [67] = { - ["X"] = 47.33, - ["Y"] = 28.88, - ["CD"] = 0, - }, - [68] = { - ["X"] = 43.34, - ["Y"] = 24.73, - ["CD"] = 0, - }, - [69] = { - ["X"] = 42.73, - ["Y"] = 24.82, - ["CD"] = 0, - }, - [70] = { - ["X"] = 40.48, - ["Y"] = 16.13, - ["CD"] = 0, - }, - [71] = { - ["X"] = 40.25, - ["Y"] = 30.54, - ["CD"] = 0, - }, - [72] = { - ["X"] = 40.13, - ["Y"] = 34.03, - ["CD"] = 0, - }, - [73] = { - ["X"] = 40.77, - ["Y"] = 38.37, - ["CD"] = 0, - }, - [74] = { - ["X"] = 39.24, - ["Y"] = 40.02, - ["CD"] = 0, - }, - [75] = { - ["X"] = 41.77, - ["Y"] = 41.49, - ["CD"] = 0, - }, - [76] = { - ["X"] = 25.56, - ["Y"] = 34.6, - ["CD"] = 0, - }, - [77] = { - ["X"] = 20.75, - ["Y"] = 31, - ["CD"] = 0, - }, - [78] = { - ["X"] = 20.51, - ["Y"] = 32.3, - ["CD"] = 0, - }, - [79] = { - ["X"] = 18.49, - ["Y"] = 32.63, - ["CD"] = 0, - }, - [80] = { - ["X"] = 19.37, - ["Y"] = 34.52, - ["CD"] = 0, - }, - [81] = { - ["X"] = 17.33, - ["Y"] = 36.15, - ["CD"] = 0, - }, - [82] = { - ["X"] = 17.71, - ["Y"] = 39.94, - ["CD"] = 0, - }, - [83] = { - ["X"] = 16.38, - ["Y"] = 42.46, - ["CD"] = 0, - }, - [84] = { - ["X"] = 18.42, - ["Y"] = 41.87, - ["CD"] = 0, - }, - [85] = { - ["X"] = 19.6, - ["Y"] = 38.5, - ["CD"] = 0, - }, - [86] = { - ["X"] = 22.1, - ["Y"] = 36.48, - ["CD"] = 0, - }, - [87] = { - ["X"] = 27.33, - ["Y"] = 39.01, - ["CD"] = 0, - }, - [88] = { - ["X"] = 26.78, - ["Y"] = 40.82, - ["CD"] = 0, - }, - [89] = { - ["X"] = 26.56, - ["Y"] = 45.72, - ["CD"] = 0, - }, - [90] = { - ["X"] = 24.46, - ["Y"] = 48.15, - ["CD"] = 0, - }, - [91] = { - ["X"] = 32.32, - ["Y"] = 47.09, - ["CD"] = 0, - }, - [92] = { - ["X"] = 29.16, - ["Y"] = 44.53, - ["CD"] = 0, - }, - [93] = { - ["X"] = 30, - ["Y"] = 49.89, - ["CD"] = 0, - }, - [94] = { - ["X"] = 28.39, - ["Y"] = 40.18, - ["CD"] = 0, - }, - [95] = { - ["X"] = 25.95, - ["Y"] = 45.19, - ["CD"] = 0, - }, - [96] = { - ["X"] = 26.26, - ["Y"] = 39.38, - ["CD"] = 0, - }, - [97] = { - ["X"] = 25.49, - ["Y"] = 38.93, - ["CD"] = 0, - }, - [98] = { - ["X"] = 23.15, - ["Y"] = 37.72, - ["CD"] = 0, - }, - [99] = { - ["X"] = 16.41, - ["Y"] = 23.78, - ["CD"] = 0, - }, - [100] = { - ["X"] = 49, - ["Y"] = 41.35, - ["CD"] = 0, - }, - [101] = { - ["X"] = 49.79, - ["Y"] = 40.3, - ["CD"] = 0, - }, - [102] = { - ["X"] = 58.99, - ["Y"] = 42.05, - ["CD"] = 0, - }, - [103] = { - ["X"] = 60.11, - ["Y"] = 46.19, - ["CD"] = 0, - }, - [104] = { - ["X"] = 64.2, - ["Y"] = 38.74, - ["CD"] = 0, - }, - [105] = { - ["X"] = 66.39, - ["Y"] = 45.24, - ["CD"] = 0, - }, - [106] = { - ["X"] = 65.32, - ["Y"] = 46.64, - ["CD"] = 0, - }, - [107] = { - ["X"] = 64.5, - ["Y"] = 54.5, - ["CD"] = 0, - }, - [108] = { - ["X"] = 69.71, - ["Y"] = 59.98, - ["CD"] = 0, - }, - [109] = { - ["X"] = 19.07, - ["Y"] = 37.54, - ["CD"] = 0, - }, - [110] = { - ["X"] = 17.42, - ["Y"] = 32.72, - ["CD"] = 0, - }, - [111] = { - ["X"] = 17.21, - ["Y"] = 41.12, - ["CD"] = 0, - }, - [112] = { - ["X"] = 16.86, - ["Y"] = 43.6, - ["CD"] = 0, - }, - [113] = { - ["X"] = 16.26, - ["Y"] = 48.14, - ["CD"] = 0, - }, - [114] = { - ["X"] = 19.16, - ["Y"] = 48.74, - ["CD"] = 0, - }, - [115] = { - ["X"] = 22.39, - ["Y"] = 51.94, - ["CD"] = 0, - }, - [116] = { - ["X"] = 29.46, - ["Y"] = 92.26, - ["CD"] = 0, - }, - [117] = { - ["X"] = 39.03, - ["Y"] = 83.7, - ["CD"] = 0, - }, - [118] = { - ["X"] = 39.34, - ["Y"] = 86.92, - ["CD"] = 0, - }, - [119] = { - ["X"] = 36.92, - ["Y"] = 89.37, - ["CD"] = 0, - }, - [120] = { - ["X"] = 33.51, - ["Y"] = 90.03, - ["CD"] = 0, - }, - [121] = { - ["X"] = 32.72, - ["Y"] = 91.79, - ["CD"] = 0, - }, - [122] = { - ["X"] = 31.4, - ["Y"] = 53.54, - ["CD"] = 0, - }, - [123] = { - ["X"] = 41.7, - ["Y"] = 77.86, - ["CD"] = 0, - }, - [124] = { - ["X"] = 41.23, - ["Y"] = 65.76, - ["CD"] = 0, - }, - [125] = { - ["X"] = 42.32, - ["Y"] = 49.6, - ["CD"] = 0, - }, - [126] = { - ["X"] = 18.77, - ["Y"] = 21.58, - ["CD"] = 0, - }, - [127] = { - ["X"] = 31.01, - ["Y"] = 27.5, - ["CD"] = 0, - }, - [128] = { - ["X"] = 37.56, - ["Y"] = 28.08, - ["CD"] = 0, - }, - [129] = { - ["X"] = 39.7, - ["Y"] = 14.87, - ["CD"] = 0, - }, - [130] = { - ["X"] = 38.42, - ["Y"] = 14.58, - ["CD"] = 0, - }, - [131] = { - ["X"] = 30.29, - ["Y"] = 8.71, - ["CD"] = 0, - }, - [132] = { - ["X"] = 29.37, - ["Y"] = 14.46, - ["CD"] = 0, - }, - [133] = { - ["X"] = 30.56, - ["Y"] = 14.7, - ["CD"] = 0, - }, - [134] = { - ["X"] = 32.07, - ["Y"] = 17.45, - ["CD"] = 0, - }, - [135] = { - ["X"] = 32.33, - ["Y"] = 19.52, - ["CD"] = 0, - }, - [136] = { - ["X"] = 33.99, - ["Y"] = 18.93, - ["CD"] = 0, - }, - [137] = { - ["X"] = 33.25, - ["Y"] = 14.84, - ["CD"] = 0, - }, - [138] = { - ["X"] = 35, - ["Y"] = 13.71, - ["CD"] = 0, - }, - [139] = { - ["X"] = 35.59, - ["Y"] = 18.08, - ["CD"] = 0, - }, - [140] = { - ["X"] = 35.61, - ["Y"] = 21.63, - ["CD"] = 0, - }, - [141] = { - ["X"] = 38.83, - ["Y"] = 26.26, - ["CD"] = 0, - }, - [142] = { - ["X"] = 41.23, - ["Y"] = 25.46, - ["CD"] = 0, - }, - [143] = { - ["X"] = 57.44, - ["Y"] = 45.46, - ["CD"] = 0, - }, - [144] = { - ["X"] = 68.31, - ["Y"] = 58.27, - ["CD"] = 0, - }, - [145] = { - ["X"] = 63.96, - ["Y"] = 50.18, - ["CD"] = 0, - }, - [146] = { - ["X"] = 64.22, - ["Y"] = 47.41, - ["CD"] = 0, - }, - [147] = { - ["X"] = 66.89, - ["Y"] = 42.57, - ["CD"] = 0, - }, - [148] = { - ["X"] = 83.41, - ["Y"] = 58.57, - ["CD"] = 0, - }, - [149] = { - ["X"] = 70.07, - ["Y"] = 61.17, - ["CD"] = 0, - }, - [150] = { - ["X"] = 70.15, - ["Y"] = 64.11, - ["CD"] = 0, - }, - [151] = { - ["X"] = 61.37, - ["Y"] = 51.89, - ["CD"] = 0, - }, - [152] = { - ["X"] = 32.72, - ["Y"] = 43.86, - ["CD"] = 0, - }, - [153] = { - ["X"] = 26.37, - ["Y"] = 46.84, - ["CD"] = 0, - }, - [154] = { - ["X"] = 24.62, - ["Y"] = 44.43, - ["CD"] = 0, - }, - [155] = { - ["X"] = 23.77, - ["Y"] = 47.26, - ["CD"] = 0, - }, - [156] = { - ["X"] = 20.37, - ["Y"] = 45.63, - ["CD"] = 0, - }, - [157] = { - ["X"] = 20.94, - ["Y"] = 52.22, - ["CD"] = 0, - }, - [158] = { - ["X"] = 22.54, - ["Y"] = 60.01, - ["CD"] = 0, - }, - [159] = { - ["X"] = 26.15, - ["Y"] = 48.01, - ["CD"] = 0, - }, - [160] = { - ["X"] = 35.27, - ["Y"] = 49.54, - ["CD"] = 0, - }, - [161] = { - ["X"] = 56.75, - ["Y"] = 43.49, - ["CD"] = 0, - }, - [162] = { - ["X"] = 45.91, - ["Y"] = 39.37, - ["CD"] = 0, - }, - [163] = { - ["X"] = 37.77, - ["Y"] = 36.78, - ["CD"] = 0, - }, - [164] = { - ["X"] = 38.42, - ["Y"] = 40.33, - ["CD"] = 0, - }, - [165] = { - ["X"] = 36.86, - ["Y"] = 40.44, - ["CD"] = 0, - }, - [166] = { - ["X"] = 40.51, - ["Y"] = 49.16, - ["CD"] = 0, - }, - [167] = { - ["X"] = 28.02, - ["Y"] = 37.01, - ["CD"] = 0, - }, - [168] = { - ["X"] = 30.02, - ["Y"] = 29.11, - ["CD"] = 0, - }, - [169] = { - ["X"] = 25.06, - ["Y"] = 34.96, - ["CD"] = 0, - }, - [170] = { - ["X"] = 32.03, - ["Y"] = 34.06, - ["CD"] = 0, - }, - [171] = { - ["X"] = 19.5, - ["Y"] = 20.92, - ["CD"] = 0, - }, - [172] = { - ["X"] = 19.89, - ["Y"] = 22.09, - ["CD"] = 0, - }, - [173] = { - ["X"] = 17.85, - ["Y"] = 23.72, - ["CD"] = 0, - }, - [174] = { - ["X"] = 27.79, - ["Y"] = 31.22, - ["CD"] = 0, - }, - [175] = { - ["X"] = 28.22, - ["Y"] = 29.91, - ["CD"] = 0, - }, - [176] = { - ["X"] = 30.4, - ["Y"] = 30.73, - ["CD"] = 0, - }, - [177] = { - ["X"] = 30.98, - ["Y"] = 29.01, - ["CD"] = 0, - }, - [178] = { - ["X"] = 33.48, - ["Y"] = 24.88, - ["CD"] = 0, - }, - [179] = { - ["X"] = 29.81, - ["Y"] = 26.02, - ["CD"] = 0, - }, - [180] = { - ["X"] = 31.68, - ["Y"] = 23.23, - ["CD"] = 0, - }, - [181] = { - ["X"] = 29.51, - ["Y"] = 34.53, - ["CD"] = 0, - }, - [182] = { - ["X"] = 30.87, - ["Y"] = 31.18, - ["CD"] = 0, - }, - [183] = { - ["X"] = 18.62, - ["Y"] = 39.57, - ["CD"] = 0, - }, - [184] = { - ["X"] = 16.63, - ["Y"] = 40.97, - ["CD"] = 0, - }, - [185] = { - ["X"] = 65.55, - ["Y"] = 41.61, - ["CD"] = 0, - }, - [186] = { - ["X"] = 39.76, - ["Y"] = 81.81, - ["CD"] = 0, - }, - [187] = { - ["X"] = 39.61, - ["Y"] = 82.6, - ["CD"] = 0, - }, - [188] = { - ["X"] = 34.98, - ["Y"] = 60.06, - ["CD"] = 0, - }, - [189] = { - ["X"] = 28.25, - ["Y"] = 38.53, - ["CD"] = 0, - }, - [190] = { - ["X"] = 27.08, - ["Y"] = 36.05, - ["CD"] = 0, - }, - [191] = { - ["X"] = 26.86, - ["Y"] = 33.37, - ["CD"] = 0, - }, - [192] = { - ["X"] = 23.52, - ["Y"] = 29.91, - ["CD"] = 0, - }, - [193] = { - ["X"] = 22.11, - ["Y"] = 31.32, - ["CD"] = 0, - }, - [194] = { - ["X"] = 19.89, - ["Y"] = 29.56, - ["CD"] = 0, - }, - [195] = { - ["X"] = 19.46, - ["Y"] = 24.71, - ["CD"] = 0, - }, - [196] = { - ["X"] = 18.28, - ["Y"] = 23.88, - ["CD"] = 0, - }, - [197] = { - ["X"] = 18.65, - ["Y"] = 22.03, - ["CD"] = 0, - }, - [198] = { - ["X"] = 18.44, - ["Y"] = 29.37, - ["CD"] = 0, - }, - [199] = { - ["X"] = 18.8, - ["Y"] = 34.21, - ["CD"] = 0, - }, - [200] = { - ["X"] = 16.54, - ["Y"] = 36.58, - ["CD"] = 0, - }, - [201] = { - ["X"] = 15.1, - ["Y"] = 37.18, - ["CD"] = 0, - }, - [202] = { - ["X"] = 15.82, - ["Y"] = 43.16, - ["CD"] = 0, - }, - [203] = { - ["X"] = 17.16, - ["Y"] = 44.35, - ["CD"] = 0, - }, - [204] = { - ["X"] = 16.96, - ["Y"] = 46.53, - ["CD"] = 0, - }, - [205] = { - ["X"] = 16.74, - ["Y"] = 47.66, - ["CD"] = 0, - }, - [206] = { - ["X"] = 17.09, - ["Y"] = 49.29, - ["CD"] = 0, - }, - [207] = { - ["X"] = 19.91, - ["Y"] = 54.45, - ["CD"] = 0, - }, - [208] = { - ["X"] = 22.08, - ["Y"] = 56.33, - ["CD"] = 0, - }, - [209] = { - ["X"] = 25.63, - ["Y"] = 52.48, - ["CD"] = 0, - }, - [210] = { - ["X"] = 30.72, - ["Y"] = 50.96, - ["CD"] = 0, - }, - [211] = { - ["X"] = 30.33, - ["Y"] = 47.3, - ["CD"] = 0, - }, - [212] = { - ["X"] = 48.81, - ["Y"] = 47.54, - ["CD"] = 0, - }, - [213] = { - ["X"] = 56.22, - ["Y"] = 48.62, - ["CD"] = 0, - }, - [214] = { - ["X"] = 64.92, - ["Y"] = 49.18, - ["CD"] = 0, - }, - [215] = { - ["X"] = 61.44, - ["Y"] = 50.95, - ["CD"] = 0, - }, - [216] = { - ["X"] = 36.79, - ["Y"] = 54.66, - ["CD"] = 0, - }, - [217] = { - ["X"] = 35.5, - ["Y"] = 50.36, - ["CD"] = 0, - }, - [218] = { - ["X"] = 39.32, - ["Y"] = 54.43, - ["CD"] = 0, - }, - [219] = { - ["X"] = 40.41, - ["Y"] = 73, - ["CD"] = 0, - }, - [220] = { - ["X"] = 41.04, - ["Y"] = 81.46, - ["CD"] = 0, - }, - [221] = { - ["X"] = 39.95, - ["Y"] = 84.73, - ["CD"] = 0, - }, - [222] = { - ["X"] = 38.4, - ["Y"] = 85.72, - ["CD"] = 0, - }, - [223] = { - ["X"] = 36.71, - ["Y"] = 59.7, - ["CD"] = 0, - }, - [224] = { - ["X"] = 34.82, - ["Y"] = 56.58, - ["CD"] = 0, - }, - [225] = { - ["X"] = 33.71, - ["Y"] = 59.85, - ["CD"] = 0, - }, - [226] = { - ["X"] = 34.06, - ["Y"] = 55.75, - ["CD"] = 0, - }, - [227] = { - ["X"] = 34.31, - ["Y"] = 57.33, - ["CD"] = 0, - }, - [228] = { - ["X"] = 37.68, - ["Y"] = 62.77, - ["CD"] = 0, - }, - [229] = { - ["X"] = 35.41, - ["Y"] = 54.68, - ["CD"] = 0, - }, - [230] = { - ["X"] = 37.52, - ["Y"] = 59.08, - ["CD"] = 0, - }, - [231] = { - ["X"] = 43.46, - ["Y"] = 60.61, - ["CD"] = 0, - }, - [232] = { - ["X"] = 35.76, - ["Y"] = 60.63, - ["CD"] = 0, - }, - [233] = { - ["X"] = 34.78, - ["Y"] = 61.94, - ["CD"] = 0, - }, - [234] = { - ["X"] = 45.27, - ["Y"] = 56.2, - ["CD"] = 0, - }, - [235] = { - ["X"] = 34.17, - ["Y"] = 48.76, - ["CD"] = 0, - }, - [236] = { - ["X"] = 43.64, - ["Y"] = 48.63, - ["CD"] = 0, - }, - [237] = { - ["X"] = 61.44, - ["Y"] = 41.76, - ["CD"] = 0, - }, - [238] = { - ["X"] = 63.63, - ["Y"] = 45.02, - ["CD"] = 0, - }, - [239] = { - ["X"] = 65.11, - ["Y"] = 50.4, - ["CD"] = 0, - }, - [240] = { - ["X"] = 65.37, - ["Y"] = 48.57, - ["CD"] = 0, - }, - [241] = { - ["X"] = 81.14, - ["Y"] = 56.47, - ["CD"] = 0, - }, - [242] = { - ["X"] = 65.83, - ["Y"] = 55.28, - ["CD"] = 0, - }, - [243] = { - ["X"] = 66.85, - ["Y"] = 54.65, - ["CD"] = 0, - }, - [244] = { - ["X"] = 69.17, - ["Y"] = 58.17, - ["CD"] = 0, - }, - [245] = { - ["X"] = 59.14, - ["Y"] = 47.81, - ["CD"] = 0, - }, - [246] = { - ["X"] = 48.38, - ["Y"] = 49.33, - ["CD"] = 0, - }, - [247] = { - ["X"] = 39.76, - ["Y"] = 57.54, - ["CD"] = 0, - }, - [248] = { - ["X"] = 36.28, - ["Y"] = 53.87, - ["CD"] = 0, - }, - [249] = { - ["X"] = 31.05, - ["Y"] = 47.28, - ["CD"] = 0, - }, - [250] = { - ["X"] = 31.17, - ["Y"] = 38.53, - ["CD"] = 0, - }, - [251] = { - ["X"] = 31.24, - ["Y"] = 36.76, - ["CD"] = 0, - }, - [252] = { - ["X"] = 32.9, - ["Y"] = 36.99, - ["CD"] = 0, - }, - [253] = { - ["X"] = 36.43, - ["Y"] = 43.67, - ["CD"] = 0, - }, - [254] = { - ["X"] = 40.71, - ["Y"] = 41.71, - ["CD"] = 0, - }, - [255] = { - ["X"] = 47.22, - ["Y"] = 39.89, - ["CD"] = 0, - }, - [256] = { - ["X"] = 46.02, - ["Y"] = 39.82, - ["CD"] = 0, - }, - [257] = { - ["X"] = 51.52, - ["Y"] = 39.51, - ["CD"] = 0, - }, - [258] = { - ["X"] = 47.28, - ["Y"] = 31.95, - ["CD"] = 0, - }, - [259] = { - ["X"] = 46.79, - ["Y"] = 29.6, - ["CD"] = 0, - }, - [260] = { - ["X"] = 49.21, - ["Y"] = 35.3, - ["CD"] = 0, - }, - [261] = { - ["X"] = 46.79, - ["Y"] = 28.31, - ["CD"] = 0, - }, - [262] = { - ["X"] = 47.03, - ["Y"] = 32.84, - ["CD"] = 0, - }, - [263] = { - ["X"] = 44.54, - ["Y"] = 26.85, - ["CD"] = 0, - }, - [264] = { - ["X"] = 34.55, - ["Y"] = 42.86, - ["CD"] = 0, - }, - [265] = { - ["X"] = 32.17, - ["Y"] = 42.16, - ["CD"] = 0, - }, - [266] = { - ["X"] = 29.3, - ["Y"] = 38.43, - ["CD"] = 0, - }, - [267] = { - ["X"] = 28.53, - ["Y"] = 35.72, - ["CD"] = 0, - }, - [268] = { - ["X"] = 26, - ["Y"] = 36.58, - ["CD"] = 0, - }, - [269] = { - ["X"] = 22.09, - ["Y"] = 33.07, - ["CD"] = 0, - }, - [270] = { - ["X"] = 19.48, - ["Y"] = 39.91, - ["CD"] = 0, - }, - [271] = { - ["X"] = 23.65, - ["Y"] = 39.58, - ["CD"] = 0, - }, - [272] = { - ["X"] = 26.73, - ["Y"] = 70.09, - ["CD"] = 0, - }, - [273] = { - ["X"] = 26.47, - ["Y"] = 23.31, - ["CD"] = 0, - }, - [274] = { - ["X"] = 26.75, - ["Y"] = 25.15, - ["CD"] = 0, - }, - [275] = { - ["X"] = 17.62, - ["Y"] = 23.05, - ["CD"] = 0, - }, - [276] = { - ["X"] = 21.23, - ["Y"] = 20.19, - ["CD"] = 0, - }, - [277] = { - ["X"] = 18.05, - ["Y"] = 27.9, - ["CD"] = 0, - }, - [278] = { - ["X"] = 24.23, - ["Y"] = 33.84, - ["CD"] = 0, - }, - [279] = { - ["X"] = 28.11, - ["Y"] = 32.96, - ["CD"] = 0, - }, - [280] = { - ["X"] = 31.04, - ["Y"] = 32.91, - ["CD"] = 0, - }, - [281] = { - ["X"] = 31.01, - ["Y"] = 33.51, - ["CD"] = 0, - }, - [282] = { - ["X"] = 30.66, - ["Y"] = 33.03, - ["CD"] = 0, - }, - [283] = { - ["X"] = 35.73, - ["Y"] = 28.25, - ["CD"] = 0, - }, - [284] = { - ["X"] = 36.92, - ["Y"] = 25.87, - ["CD"] = 0, - }, - [285] = { - ["X"] = 37.87, - ["Y"] = 25.92, - ["CD"] = 0, - }, - [286] = { - ["X"] = 40.23, - ["Y"] = 24.81, - ["CD"] = 0, - }, - [287] = { - ["X"] = 26.06, - ["Y"] = 37.05, - ["CD"] = 0, - }, - [288] = { - ["X"] = 59.27, - ["Y"] = 46.57, - ["CD"] = 0, - }, - [289] = { - ["X"] = 60.04, - ["Y"] = 43.43, - ["CD"] = 0, - }, - [290] = { - ["X"] = 60.17, - ["Y"] = 40.92, - ["CD"] = 0, - }, - [291] = { - ["X"] = 34.94, - ["Y"] = 44.87, - ["CD"] = 0, - }, - [292] = { - ["X"] = 62.57, - ["Y"] = 50.61, - ["CD"] = 0, - }, - [293] = { - ["X"] = 64.35, - ["Y"] = 42.6, - ["CD"] = 0, - }, - [294] = { - ["X"] = 59.11, - ["Y"] = 50.7, - ["CD"] = 0, - }, - [295] = { - ["X"] = 39.97, - ["Y"] = 54.42, - ["CD"] = 0, - }, - [296] = { - ["X"] = 33.09, - ["Y"] = 46.12, - ["CD"] = 0, - }, - [297] = { - ["X"] = 33.06, - ["Y"] = 48.52, - ["CD"] = 0, - }, - [298] = { - ["X"] = 28.8, - ["Y"] = 38.56, - ["CD"] = 0, - }, - [299] = { - ["X"] = 29.06, - ["Y"] = 33.31, - ["CD"] = 0, - }, - [300] = { - ["X"] = 18.27, - ["Y"] = 40.57, - ["CD"] = 0, - }, - [301] = { - ["X"] = 22.74, - ["Y"] = 43.77, - ["CD"] = 0, - }, - [302] = { - ["X"] = 24.63, - ["Y"] = 56.49, - ["CD"] = 0, - }, - [303] = { - ["X"] = 26.8, - ["Y"] = 69.62, - ["CD"] = 0, - }, - [304] = { - ["X"] = 20.4, - ["Y"] = 43.91, - ["CD"] = 0, - }, - [305] = { - ["X"] = 22.81, - ["Y"] = 48.63, - ["CD"] = 0, - }, - [306] = { - ["X"] = 24.55, - ["Y"] = 46.05, - ["CD"] = 0, - }, - [307] = { - ["X"] = 23.59, - ["Y"] = 44.45, - ["CD"] = 0, - }, - [308] = { - ["X"] = 24.7, - ["Y"] = 46.9, - ["CD"] = 0, - }, - [309] = { - ["X"] = 25.91, - ["Y"] = 44.49, - ["CD"] = 0, - }, - [310] = { - ["X"] = 28.25, - ["Y"] = 46.15, - ["CD"] = 0, - }, - [311] = { - ["X"] = 21.38, - ["Y"] = 25.51, - ["CD"] = 0, - }, - [312] = { - ["X"] = 21.21, - ["Y"] = 30.56, - ["CD"] = 0, - }, - [313] = { - ["X"] = 18.91, - ["Y"] = 25.55, - ["CD"] = 0, - }, - [314] = { - ["X"] = 18.42, - ["Y"] = 23.05, - ["CD"] = 0, - }, - [315] = { - ["X"] = 17.12, - ["Y"] = 26.35, - ["CD"] = 0, - }, - [316] = { - ["X"] = 18.92, - ["Y"] = 22.36, - ["CD"] = 0, - }, - [317] = { - ["X"] = 17.04, - ["Y"] = 23.1, - ["CD"] = 0, - }, - [318] = { - ["X"] = 16.4, - ["Y"] = 21.91, - ["CD"] = 0, - }, - [319] = { - ["X"] = 18.47, - ["Y"] = 20.31, - ["CD"] = 0, - }, - [320] = { - ["X"] = 20.21, - ["Y"] = 21.06, - ["CD"] = 0, - }, - [321] = { - ["X"] = 20.67, - ["Y"] = 28.36, - ["CD"] = 0, - }, - [322] = { - ["X"] = 24.44, - ["Y"] = 34.21, - ["CD"] = 0, - }, - [323] = { - ["X"] = 25.18, - ["Y"] = 28.28, - ["CD"] = 0, - }, - [324] = { - ["X"] = 25.8, - ["Y"] = 25.07, - ["CD"] = 0, - }, - [325] = { - ["X"] = 27.32, - ["Y"] = 22.42, - ["CD"] = 0, - }, - [326] = { - ["X"] = 26.64, - ["Y"] = 18.05, - ["CD"] = 0, - }, - [327] = { - ["X"] = 30.89, - ["Y"] = 16.02, - ["CD"] = 0, - }, - [328] = { - ["X"] = 31.63, - ["Y"] = 16.56, - ["CD"] = 0, - }, - [329] = { - ["X"] = 33.53, - ["Y"] = 20.08, - ["CD"] = 0, - }, - [330] = { - ["X"] = 32.27, - ["Y"] = 22.89, - ["CD"] = 0, - }, - [331] = { - ["X"] = 30.12, - ["Y"] = 22.36, - ["CD"] = 0, - }, - [332] = { - ["X"] = 34.88, - ["Y"] = 19.76, - ["CD"] = 0, - }, - [333] = { - ["X"] = 35.22, - ["Y"] = 18.59, - ["CD"] = 0, - }, - [334] = { - ["X"] = 30, - ["Y"] = 13.89, - ["CD"] = 0, - }, - [335] = { - ["X"] = 35.98, - ["Y"] = 13.64, - ["CD"] = 0, - }, - [336] = { - ["X"] = 38.41, - ["Y"] = 13.36, - ["CD"] = 0, - }, - [337] = { - ["X"] = 40.2, - ["Y"] = 17.02, - ["CD"] = 0, - }, - [338] = { - ["X"] = 38.59, - ["Y"] = 25.27, - ["CD"] = 0, - }, - [339] = { - ["X"] = 37.32, - ["Y"] = 26.91, - ["CD"] = 0, - }, - [340] = { - ["X"] = 28.98, - ["Y"] = 37.05, - ["CD"] = 0, - }, - [341] = { - ["X"] = 29.18, - ["Y"] = 39.05, - ["CD"] = 0, - }, - [342] = { - ["X"] = 29.35, - ["Y"] = 41.15, - ["CD"] = 0, - }, - [343] = { - ["X"] = 45.19, - ["Y"] = 51.96, - ["CD"] = 0, - }, - [344] = { - ["X"] = 57.18, - ["Y"] = 49.94, - ["CD"] = 0, - }, - [345] = { - ["X"] = 59.66, - ["Y"] = 41.36, - ["CD"] = 0, - }, - [346] = { - ["X"] = 61.03, - ["Y"] = 43.36, - ["CD"] = 0, - }, - [347] = { - ["X"] = 49.52, - ["Y"] = 47.44, - ["CD"] = 0, - }, - [348] = { - ["X"] = 45.4, - ["Y"] = 47.92, - ["CD"] = 0, - }, - [349] = { - ["X"] = 48.52, - ["Y"] = 42.86, - ["CD"] = 0, - }, - [350] = { - ["X"] = 45.67, - ["Y"] = 33.19, - ["CD"] = 0, - }, - [351] = { - ["X"] = 50.55, - ["Y"] = 39.92, - ["CD"] = 0, - }, - [352] = { - ["X"] = 31.72, - ["Y"] = 11.15, - ["CD"] = 0, - }, - [353] = { - ["X"] = 41.5, - ["Y"] = 38.6, - ["CD"] = 0, - }, - [354] = { - ["X"] = 39.3, - ["Y"] = 53.64, - ["CD"] = 0, - }, - [355] = { - ["X"] = 57.38, - ["Y"] = 47.96, - ["CD"] = 0, - }, - [356] = { - ["X"] = 59.94, - ["Y"] = 42.44, - ["CD"] = 0, - }, - [357] = { - ["X"] = 62.25, - ["Y"] = 45.8, - ["CD"] = 0, - }, - [358] = { - ["X"] = 58.62, - ["Y"] = 49.54, - ["CD"] = 0, - }, - [359] = { - ["X"] = 66.53, - ["Y"] = 56.8, - ["CD"] = 0, - }, - [360] = { - ["X"] = 47.37, - ["Y"] = 55.17, - ["CD"] = 0, - }, - [361] = { - ["X"] = 40.54, - ["Y"] = 62.98, - ["CD"] = 0, - }, - [362] = { - ["X"] = 41.77, - ["Y"] = 73.16, - ["CD"] = 0, - }, - [363] = { - ["X"] = 36.65, - ["Y"] = 42.98, - ["CD"] = 0, - }, - [364] = { - ["X"] = 45.48, - ["Y"] = 27.74, - ["CD"] = 0, - }, - [365] = { - ["X"] = 48.54, - ["Y"] = 35.37, - ["CD"] = 0, - }, - [366] = { - ["X"] = 48.78, - ["Y"] = 42.77, - ["CD"] = 0, - }, - [367] = { - ["X"] = 65.14, - ["Y"] = 55.11, - ["CD"] = 0, - }, - [368] = { - ["X"] = 63.97, - ["Y"] = 51.76, - ["CD"] = 0, - }, - [369] = { - ["X"] = 62.78, - ["Y"] = 53.73, - ["CD"] = 0, - }, - [370] = { - ["X"] = 67.6, - ["Y"] = 58.65, - ["CD"] = 0, - }, - [371] = { - ["X"] = 70.65, - ["Y"] = 63.85, - ["CD"] = 0, - }, - [372] = { - ["X"] = 41.4, - ["Y"] = 61.02, - ["CD"] = 0, - }, - [373] = { - ["X"] = 30.71, - ["Y"] = 52.67, - ["CD"] = 0, - }, - [374] = { - ["X"] = 26.41, - ["Y"] = 53.86, - ["CD"] = 0, - }, - [375] = { - ["X"] = 23.03, - ["Y"] = 59.38, - ["CD"] = 0, - }, - [376] = { - ["X"] = 27.12, - ["Y"] = 69.02, - ["CD"] = 0, - }, - [377] = { - ["X"] = 17.88, - ["Y"] = 49.24, - ["CD"] = 0, - }, - [378] = { - ["X"] = 17.84, - ["Y"] = 47.18, - ["CD"] = 0, - }, - [379] = { - ["X"] = 18.67, - ["Y"] = 49.11, - ["CD"] = 0, - }, - [380] = { - ["X"] = 19.07, - ["Y"] = 44.96, - ["CD"] = 0, - }, - [381] = { - ["X"] = 22.96, - ["Y"] = 44.9, - ["CD"] = 0, - }, - }, -} -aura_env.cooldown = 600 -aura_env.wipeDistance = 50 -aura_env.angle = 0 -aura_env.hyp = 0 -aura_env.GetClosestHerb = function() - aura_env.minID = { - ["X"] = 0, - ["Y"] = 0, - ["D"] = 1000, - ["ID"] = 0 - } - local pX = GetPlayerMapPosition("player") or 0 - local pY = select(2, GetPlayerMapPosition("player")) or 0 - pX, pY = pX * 100, pY * 100 - if aura_env.herbs[GetCurrentMapAreaID()] then - for k, v in ipairs(aura_env.herbs[GetCurrentMapAreaID()]) do - local hX, hY, cd = aura_env.herbs[GetCurrentMapAreaID()][k]["X"], aura_env.herbs[GetCurrentMapAreaID()][k]["Y"], aura_env.herbs[GetCurrentMapAreaID()][k]["CD"] - if cd == 0 then - local X, Y = pX - hX, pY - hY - local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) - if hyp < aura_env.minID["D"] then - aura_env.minID["X"] = hX - aura_env.minID["Y"] = hY - aura_env.minID["D"] = hyp - aura_env.minID["ID"] = k - end - end - end - return aura_env.minID["ID"] - end -end -if WeakAuras.IsOptionsOpen() then DaveSniffsHerbs.HerbSniffer.CD = 0; DaveSniffsHerbs.HerbSniffer.NoCD = 200 end +--EVERY FRAME???????????????????????????????????? FIXXXXXXXXXX +function() + if not DaveSniffsHerbs.HerbSniffer then DaveSniffsHerbs.HerbSniffer = {} end + local function range (val, min, max, max2) + val = 1 - (((max - val) / (max - min)) * max2) + return val + end + local id = aura_env.GetClosestHerb() + if not aura_env.herbs[GetCurrentMapAreaID()]then return false end + local hX, hY = aura_env.herbs[GetCurrentMapAreaID()][id]["X"], aura_env.herbs[GetCurrentMapAreaID()][id]["Y"] + local pX = GetPlayerMapPosition("player") or 0 + local pY = select(2, GetPlayerMapPosition("player")) or 0 + pX, pY = pX * 100, pY * 100 + local X = pX - hX + local Y = pY - hY + local playerFace = GetPlayerFacing() or 0 + local playerA = math.floor(playerFace * 100) + playerA = range(playerA, 0, 630, 360) - 1 + playerA = -playerA + playerA = playerA - 90 + if playerA < 0 then playerA = playerA + 360 end + aura_env.hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) * 100 + DaveSniffsHerbs.HerbSniffer.hyp = aura_env.hyp + aura_env.angle = math.deg(math.atan2(Y, X)) + aura_env.angle = aura_env.angle - playerA + aura_env.angle = aura_env.angle - 180 + if aura_env.hyp < aura_env.wipeDistance then --When reach herb activate it's cooldown (herbcd[cd] = coords) + aura_env.herbs[GetCurrentMapAreaID()][id]["CD"] = math.floor(GetTime() + aura_env.cooldown) + DaveSniffsHerbs.HerbSniffer.CD = DaveSniffsHerbs.HerbSniffer.CD + 1 + DaveSniffsHerbs.HerbSniffer.NoCD = DaveSniffsHerbs.HerbSniffer.NoCD - 1 + aura_env.minID = + { + ["X"] = 0, + ["Y"] = 0, + ["D"] = 10000, + ["ID"] = 0 + } + end + for k, v in ipairs(aura_env.herbs[GetCurrentMapAreaID()]) do --if cooldown is up then insert back into proper array + local cd = aura_env.herbs[GetCurrentMapAreaID()][k]["CD"] + if cd > 0 then + if GetTime() > cd then + aura_env.herbs[GetCurrentMapAreaID()][k]["CD"] = 0 + DaveSniffsHerbs.HerbSniffer.NoCD = DaveSniffsHerbs.HerbSniffer.NoCD + 1 + DaveSniffsHerbs.HerbSniffer.CD = DaveSniffsHerbs.HerbSniffer.CD - 1 + end + end + end + return true +end + +--DISPLAY EVERY FRAME??????? +function() + local function round(var, n) + if (n) then + var = math.floor((var * 10 ^ n) + 0.5) / (10 ^ n) + else + var = math.floor(var + 0.5) + end + return var + end + if DaveSniffsHerbs.HerbSniffer.hyp and DaveSniffsHerbs.HerbSniffer.NoCD and DaveSniffsHerbs.HerbSniffer.CD then + return round(DaveSniffsHerbs.HerbSniffer.hyp, 0) .. "\n" .. DaveSniffsHerbs.HerbSniffer.NoCD .. "\n" .. DaveSniffsHerbs.HerbSniffer.CD + end +end + +--INIT +aura_env.herbs = { + --Azsuna / Aethril + [1015] = { + [1] = { + ["X"] = 49.5, + ["Y"] = 85.9, + ["CD"] = 0, + }, + [2] = { + ["X"] = 52.42, + ["Y"] = 83.61, + ["CD"] = 0, + }, + [3] = { + ["X"] = 52.47, + ["Y"] = 79, + ["CD"] = 0, + }, + [4] = { + ["X"] = 51.45, + ["Y"] = 75.68, + ["CD"] = 0, + }, + [5] = { + ["X"] = 47.61, + ["Y"] = 74, + ["CD"] = 0, + }, + [6] = { + ["X"] = 45.03, + ["Y"] = 71.83, + ["CD"] = 0, + }, + [7] = { + ["X"] = 41.56, + ["Y"] = 72.14, + ["CD"] = 0, + }, + [8] = { + ["X"] = 42.24, + ["Y"] = 74.27, + ["CD"] = 0, + }, + [9] = { + ["X"] = 27.62, + ["Y"] = 72.68, + ["CD"] = 0, + }, + [10] = { + ["X"] = 42.88, + ["Y"] = 79.35, + ["CD"] = 0, + }, + [11] = { + ["X"] = 44.42, + ["Y"] = 82.26, + ["CD"] = 0, + }, + [12] = { + ["X"] = 45.6, + ["Y"] = 84.9, + ["CD"] = 0, + }, + [13] = { + ["X"] = 44.21, + ["Y"] = 88.47, + ["CD"] = 0, + }, + [14] = { + ["X"] = 41.43, + ["Y"] = 9.46, + ["CD"] = 0, + }, + [15] = { + ["X"] = 40.17, + ["Y"] = 11.22, + ["CD"] = 0, + }, + [16] = { + ["X"] = 39.11, + ["Y"] = 12.41, + ["CD"] = 0, + }, + [17] = { + ["X"] = 36.33, + ["Y"] = 21.62, + ["CD"] = 0, + }, + [18] = { + ["X"] = 35.78, + ["Y"] = 25.06, + ["CD"] = 0, + }, + [19] = { + ["X"] = 35.3, + ["Y"] = 26.62, + ["CD"] = 0, + }, + [20] = { + ["X"] = 34.02, + ["Y"] = 28.32, + ["CD"] = 0, + }, + [21] = { + ["X"] = 33.17, + ["Y"] = 30.55, + ["CD"] = 0, + }, + [22] = { + ["X"] = 32.16, + ["Y"] = 32.58, + ["CD"] = 0, + }, + [23] = { + ["X"] = 33.26, + ["Y"] = 35.14, + ["CD"] = 0, + }, + [24] = { + ["X"] = 34.52, + ["Y"] = 36.25, + ["CD"] = 0, + }, + [25] = { + ["X"] = 35.33, + ["Y"] = 37.3, + ["CD"] = 0, + }, + [26] = { + ["X"] = 36.73, + ["Y"] = 37.24, + ["CD"] = 0, + }, + [27] = { + ["X"] = 37.23, + ["Y"] = 37.98, + ["CD"] = 0, + }, + [28] = { + ["X"] = 35.4, + ["Y"] = 44.54, + ["CD"] = 0, + }, + [29] = { + ["X"] = 36.43, + ["Y"] = 45.87, + ["CD"] = 0, + }, + [30] = { + ["X"] = 38.03, + ["Y"] = 60.71, + ["CD"] = 0, + }, + [31] = { + ["X"] = 39.22, + ["Y"] = 60.68, + ["CD"] = 0, + }, + [32] = { + ["X"] = 40.1, + ["Y"] = 60.09, + ["CD"] = 0, + }, + [33] = { + ["X"] = 47.77, + ["Y"] = 74.67, + ["CD"] = 0, + }, + [34] = { + ["X"] = 48.77, + ["Y"] = 75.75, + ["CD"] = 0, + }, + [35] = { + ["X"] = 50.96, + ["Y"] = 76.32, + ["CD"] = 0, + }, + [36] = { + ["X"] = 51.92, + ["Y"] = 77.35, + ["CD"] = 0, + }, + [37] = { + ["X"] = 49.35, + ["Y"] = 75.68, + ["CD"] = 0, + }, + [38] = { + ["X"] = 49.96, + ["Y"] = 73.8, + ["CD"] = 0, + }, + [39] = { + ["X"] = 50.79, + ["Y"] = 77.15, + ["CD"] = 0, + }, + [40] = { + ["X"] = 54.65, + ["Y"] = 73.03, + ["CD"] = 0, + }, + [41] = { + ["X"] = 53.66, + ["Y"] = 71.56, + ["CD"] = 0, + }, + [42] = { + ["X"] = 54.84, + ["Y"] = 68.68, + ["CD"] = 0, + }, + [43] = { + ["X"] = 54.92, + ["Y"] = 66.14, + ["CD"] = 0, + }, + [44] = { + ["X"] = 51.68, + ["Y"] = 62.8, + ["CD"] = 0, + }, + [45] = { + ["X"] = 47.83, + ["Y"] = 62.32, + ["CD"] = 0, + }, + [46] = { + ["X"] = 46.74, + ["Y"] = 57.87, + ["CD"] = 0, + }, + [47] = { + ["X"] = 45.43, + ["Y"] = 57.08, + ["CD"] = 0, + }, + [48] = { + ["X"] = 44.96, + ["Y"] = 52.3, + ["CD"] = 0, + }, + [49] = { + ["X"] = 45, + ["Y"] = 50.1, + ["CD"] = 0, + }, + [50] = { + ["X"] = 45.58, + ["Y"] = 48.48, + ["CD"] = 0, + }, + [51] = { + ["X"] = 46.03, + ["Y"] = 46.1, + ["CD"] = 0, + }, + [52] = { + ["X"] = 45.43, + ["Y"] = 42.5, + ["CD"] = 0, + }, + [53] = { + ["X"] = 44.75, + ["Y"] = 40.05, + ["CD"] = 0, + }, + [54] = { + ["X"] = 44.51, + ["Y"] = 37.29, + ["CD"] = 0, + }, + [55] = { + ["X"] = 45.59, + ["Y"] = 35.87, + ["CD"] = 0, + }, + [56] = { + ["X"] = 47.86, + ["Y"] = 34.47, + ["CD"] = 0, + }, + [57] = { + ["X"] = 49.11, + ["Y"] = 33.95, + ["CD"] = 0, + }, + [58] = { + ["X"] = 50.29, + ["Y"] = 32.1, + ["CD"] = 0, + }, + [59] = { + ["X"] = 42.81, + ["Y"] = 10.38, + ["CD"] = 0, + }, + [60] = { + ["X"] = 52.42, + ["Y"] = 83.61, + ["CD"] = 0, + }, + [61] = { + ["X"] = 49.5, + ["Y"] = 85.9, + ["CD"] = 0, + }, + [62] = { + ["X"] = 64.31, + ["Y"] = 21.59, + ["CD"] = 0, + }, + [63] = { + ["X"] = 45.71, + ["Y"] = 15.14, + ["CD"] = 0, + }, + [64] = { + ["X"] = 48.74, + ["Y"] = 10.63, + ["CD"] = 0, + }, + [65] = { + ["X"] = 45.55, + ["Y"] = 10.75, + ["CD"] = 0, + }, + [66] = { + ["X"] = 54.31, + ["Y"] = 17.67, + ["CD"] = 0, + }, + [67] = { + ["X"] = 61.29, + ["Y"] = 29.89, + ["CD"] = 0, + }, + [68] = { + ["X"] = 57.92, + ["Y"] = 33.75, + ["CD"] = 0, + }, + [69] = { + ["X"] = 45.1, + ["Y"] = 28.59, + ["CD"] = 0, + }, + [70] = { + ["X"] = 44.59, + ["Y"] = 32.83, + ["CD"] = 0, + }, + [71] = { + ["X"] = 61.83, + ["Y"] = 39.44, + ["CD"] = 0, + }, + [72] = { + ["X"] = 41.47, + ["Y"] = 33.61, + ["CD"] = 0, + }, + [73] = { + ["X"] = 40.85, + ["Y"] = 38.78, + ["CD"] = 0, + }, + [74] = { + ["X"] = 42.3, + ["Y"] = 36.7, + ["CD"] = 0, + }, + [75] = { + ["X"] = 42.36, + ["Y"] = 24.31, + ["CD"] = 0, + }, + [76] = { + ["X"] = 35.84, + ["Y"] = 15.6, + ["CD"] = 0, + }, + [77] = { + ["X"] = 39.54, + ["Y"] = 24.73, + ["CD"] = 0, + }, + [78] = { + ["X"] = 39.74, + ["Y"] = 13.5, + ["CD"] = 0, + }, + [79] = { + ["X"] = 35.42, + ["Y"] = 27.64, + ["CD"] = 0, + }, + [80] = { + ["X"] = 56.06, + ["Y"] = 19.39, + ["CD"] = 0, + }, + [81] = { + ["X"] = 63.3, + ["Y"] = 35.71, + ["CD"] = 0, + }, + [82] = { + ["X"] = 52.67, + ["Y"] = 26.74, + ["CD"] = 0, + }, + [83] = { + ["X"] = 57.2, + ["Y"] = 27.62, + ["CD"] = 0, + }, + [84] = { + ["X"] = 35.53, + ["Y"] = 22.66, + ["CD"] = 0, + }, + [85] = { + ["X"] = 38.63, + ["Y"] = 28.7, + ["CD"] = 0, + }, + [86] = { + ["X"] = 38.01, + ["Y"] = 35.61, + ["CD"] = 0, + }, + [87] = { + ["X"] = 62.66, + ["Y"] = 54.86, + ["CD"] = 0, + }, + [88] = { + ["X"] = 55.46, + ["Y"] = 72.45, + ["CD"] = 0, + }, + [89] = { + ["X"] = 57, + ["Y"] = 62.25, + ["CD"] = 0, + }, + [90] = { + ["X"] = 45.03, + ["Y"] = 71.83, + ["CD"] = 0, + }, + [91] = { + ["X"] = 47.61, + ["Y"] = 74, + ["CD"] = 0, + }, + [92] = { + ["X"] = 45.6, + ["Y"] = 84.9, + ["CD"] = 0, + }, + [93] = { + ["X"] = 44.42, + ["Y"] = 82.26, + ["CD"] = 0, + }, + [94] = { + ["X"] = 52.56, + ["Y"] = 60.68, + ["CD"] = 0, + }, + [95] = { + ["X"] = 66.67, + ["Y"] = 48.25, + ["CD"] = 0, + }, + [96] = { + ["X"] = 61.84, + ["Y"] = 55.45, + ["CD"] = 0, + }, + [97] = { + ["X"] = 42.88, + ["Y"] = 79.35, + ["CD"] = 0, + }, + [98] = { + ["X"] = 41.56, + ["Y"] = 72.14, + ["CD"] = 0, + }, + [99] = { + ["X"] = 52.47, + ["Y"] = 79, + ["CD"] = 0, + }, + [100] = { + ["X"] = 44.21, + ["Y"] = 88.47, + ["CD"] = 0, + }, + [101] = { + ["X"] = 42.24, + ["Y"] = 74.27, + ["CD"] = 0, + }, + [102] = { + ["X"] = 56.88, + ["Y"] = 61.05, + ["CD"] = 0, + }, + [103] = { + ["X"] = 56.71, + ["Y"] = 64.6, + ["CD"] = 0, + }, + [104] = { + ["X"] = 67.25, + ["Y"] = 46.04, + ["CD"] = 0, + }, + [105] = { + ["X"] = 45.05, + ["Y"] = 37.62, + ["CD"] = 0, + }, + [106] = { + ["X"] = 48.93, + ["Y"] = 43.77, + ["CD"] = 0, + }, + [107] = { + ["X"] = 61.29, + ["Y"] = 47.29, + ["CD"] = 0, + }, + [108] = { + ["X"] = 50.61, + ["Y"] = 58.06, + ["CD"] = 0, + }, + [109] = { + ["X"] = 48.12, + ["Y"] = 52.99, + ["CD"] = 0, + }, + [110] = { + ["X"] = 53.02, + ["Y"] = 12.51, + ["CD"] = 0, + }, + [111] = { + ["X"] = 51.37, + ["Y"] = 15.24, + ["CD"] = 0, + }, + [112] = { + ["X"] = 46, + ["Y"] = 61.02, + ["CD"] = 0, + }, + [113] = { + ["X"] = 67.21, + ["Y"] = 43.27, + ["CD"] = 0, + }, + [114] = { + ["X"] = 56.87, + ["Y"] = 48.7, + ["CD"] = 0, + }, + [115] = { + ["X"] = 32.97, + ["Y"] = 32.94, + ["CD"] = 0, + }, + [116] = { + ["X"] = 40.77, + ["Y"] = 60.33, + ["CD"] = 0, + }, + [117] = { + ["X"] = 46.61, + ["Y"] = 16.25, + ["CD"] = 0, + }, + [118] = { + ["X"] = 46.89, + ["Y"] = 48.44, + ["CD"] = 0, + }, + [119] = { + ["X"] = 60.73, + ["Y"] = 49.79, + ["CD"] = 0, + }, + [120] = { + ["X"] = 60.67, + ["Y"] = 23.86, + ["CD"] = 0, + }, + [121] = { + ["X"] = 59.03, + ["Y"] = 16.36, + ["CD"] = 0, + }, + [122] = { + ["X"] = 61.7, + ["Y"] = 17.64, + ["CD"] = 0, + }, + [123] = { + ["X"] = 40.78, + ["Y"] = 11.45, + ["CD"] = 0, + }, + }, + --Highmountain / Foxflower + [1024] = { + [1] = { + ["X"] = 46.64, + ["Y"] = 67.3, + ["CD"] = 0, + }, + [2] = { + ["X"] = 55.76, + ["Y"] = 65.74, + ["CD"] = 0, + }, + [3] = { + ["X"] = 52.19, + ["Y"] = 59.78, + ["CD"] = 0, + }, + [4] = { + ["X"] = 52.52, + ["Y"] = 61.45, + ["CD"] = 0, + }, + [5] = { + ["X"] = 56.69, + ["Y"] = 64.34, + ["CD"] = 0, + }, + [6] = { + ["X"] = 56.68, + ["Y"] = 65.38, + ["CD"] = 0, + }, + [7] = { + ["X"] = 56.19, + ["Y"] = 66.53, + ["CD"] = 0, + }, + [8] = { + ["X"] = 47.21, + ["Y"] = 33.87, + ["CD"] = 0, + }, + [9] = { + ["X"] = 49.54, + ["Y"] = 30.09, + ["CD"] = 0, + }, + [10] = { + ["X"] = 51.24, + ["Y"] = 28.5, + ["CD"] = 0, + }, + [11] = { + ["X"] = 57.55, + ["Y"] = 22.81, + ["CD"] = 0, + }, + [12] = { + ["X"] = 56.34, + ["Y"] = 20.86, + ["CD"] = 0, + }, + [13] = { + ["X"] = 55.97, + ["Y"] = 19.27, + ["CD"] = 0, + }, + [14] = { + ["X"] = 54.89, + ["Y"] = 16.3, + ["CD"] = 0, + }, + [15] = { + ["X"] = 53.91, + ["Y"] = 14.89, + ["CD"] = 0, + }, + [16] = { + ["X"] = 53.01, + ["Y"] = 13.32, + ["CD"] = 0, + }, + [17] = { + ["X"] = 52.11, + ["Y"] = 11.44, + ["CD"] = 0, + }, + [18] = { + ["X"] = 51.27, + ["Y"] = 10.74, + ["CD"] = 0, + }, + [19] = { + ["X"] = 50.26, + ["Y"] = 10.4, + ["CD"] = 0, + }, + [20] = { + ["X"] = 49.24, + ["Y"] = 10.45, + ["CD"] = 0, + }, + [21] = { + ["X"] = 47.77, + ["Y"] = 11.5, + ["CD"] = 0, + }, + [22] = { + ["X"] = 46.95, + ["Y"] = 10.6, + ["CD"] = 0, + }, + [23] = { + ["X"] = 46.07, + ["Y"] = 10.68, + ["CD"] = 0, + }, + [24] = { + ["X"] = 41.13, + ["Y"] = 12.7, + ["CD"] = 0, + }, + [25] = { + ["X"] = 39.77, + ["Y"] = 14.58, + ["CD"] = 0, + }, + [26] = { + ["X"] = 38.29, + ["Y"] = 19.38, + ["CD"] = 0, + }, + [27] = { + ["X"] = 36.19, + ["Y"] = 20.63, + ["CD"] = 0, + }, + [28] = { + ["X"] = 36.17, + ["Y"] = 22.01, + ["CD"] = 0, + }, + [29] = { + ["X"] = 36.39, + ["Y"] = 23.37, + ["CD"] = 0, + }, + [30] = { + ["X"] = 34.91, + ["Y"] = 24.27, + ["CD"] = 0, + }, + [31] = { + ["X"] = 34.2, + ["Y"] = 25.24, + ["CD"] = 0, + }, + [32] = { + ["X"] = 31.86, + ["Y"] = 26.16, + ["CD"] = 0, + }, + [33] = { + ["X"] = 29.8, + ["Y"] = 32.26, + ["CD"] = 0, + }, + [34] = { + ["X"] = 30.34, + ["Y"] = 34.84, + ["CD"] = 0, + }, + [35] = { + ["X"] = 31.21, + ["Y"] = 39.32, + ["CD"] = 0, + }, + [36] = { + ["X"] = 31.29, + ["Y"] = 40.69, + ["CD"] = 0, + }, + [37] = { + ["X"] = 29.99, + ["Y"] = 48.6, + ["CD"] = 0, + }, + [38] = { + ["X"] = 29.95, + ["Y"] = 50.01, + ["CD"] = 0, + }, + [39] = { + ["X"] = 28.55, + ["Y"] = 52.13, + ["CD"] = 0, + }, + [40] = { + ["X"] = 28.61, + ["Y"] = 54.13, + ["CD"] = 0, + }, + [41] = { + ["X"] = 28.71, + ["Y"] = 55.45, + ["CD"] = 0, + }, + [42] = { + ["X"] = 30.26, + ["Y"] = 58.89, + ["CD"] = 0, + }, + [43] = { + ["X"] = 31.74, + ["Y"] = 60.67, + ["CD"] = 0, + }, + [44] = { + ["X"] = 36.49, + ["Y"] = 65.21, + ["CD"] = 0, + }, + [45] = { + ["X"] = 37.61, + ["Y"] = 67.49, + ["CD"] = 0, + }, + [46] = { + ["X"] = 38.38, + ["Y"] = 69.44, + ["CD"] = 0, + }, + [47] = { + ["X"] = 38.79, + ["Y"] = 72.65, + ["CD"] = 0, + }, + [48] = { + ["X"] = 41.04, + ["Y"] = 73.11, + ["CD"] = 0, + }, + [49] = { + ["X"] = 45.93, + ["Y"] = 78.12, + ["CD"] = 0, + }, + [50] = { + ["X"] = 43, + ["Y"] = 72.74, + ["CD"] = 0, + }, + [51] = { + ["X"] = 44.04, + ["Y"] = 70.22, + ["CD"] = 0, + }, + [52] = { + ["X"] = 43.8, + ["Y"] = 68.68, + ["CD"] = 0, + }, + [53] = { + ["X"] = 57.52, + ["Y"] = 59.84, + ["CD"] = 0, + }, + [54] = { + ["X"] = 57.52, + ["Y"] = 57.7, + ["CD"] = 0, + }, + [55] = { + ["X"] = 58.07, + ["Y"] = 54.65, + ["CD"] = 0, + }, + [56] = { + ["X"] = 57.96, + ["Y"] = 53.13, + ["CD"] = 0, + }, + [57] = { + ["X"] = 57.86, + ["Y"] = 47.77, + ["CD"] = 0, + }, + [58] = { + ["X"] = 58.19, + ["Y"] = 47.05, + ["CD"] = 0, + }, + [59] = { + ["X"] = 58.61, + ["Y"] = 44.17, + ["CD"] = 0, + }, + [60] = { + ["X"] = 56.51, + ["Y"] = 44.73, + ["CD"] = 0, + }, + [61] = { + ["X"] = 54.78, + ["Y"] = 45.97, + ["CD"] = 0, + }, + [62] = { + ["X"] = 51.14, + ["Y"] = 44.1, + ["CD"] = 0, + }, + [63] = { + ["X"] = 50.07, + ["Y"] = 44.32, + ["CD"] = 0, + }, + [64] = { + ["X"] = 47.67, + ["Y"] = 45.55, + ["CD"] = 0, + }, + [65] = { + ["X"] = 46.74, + ["Y"] = 44.41, + ["CD"] = 0, + }, + [66] = { + ["X"] = 45.62, + ["Y"] = 43.41, + ["CD"] = 0, + }, + [67] = { + ["X"] = 44.37, + ["Y"] = 46.79, + ["CD"] = 0, + }, + [68] = { + ["X"] = 44.75, + ["Y"] = 50.99, + ["CD"] = 0, + }, + [69] = { + ["X"] = 43.43, + ["Y"] = 51.8, + ["CD"] = 0, + }, + [70] = { + ["X"] = 42.94, + ["Y"] = 52.84, + ["CD"] = 0, + }, + [71] = { + ["X"] = 41.36, + ["Y"] = 56.14, + ["CD"] = 0, + }, + [72] = { + ["X"] = 40.42, + ["Y"] = 59.11, + ["CD"] = 0, + }, + [73] = { + ["X"] = 40.66, + ["Y"] = 60.23, + ["CD"] = 0, + }, + [74] = { + ["X"] = 41.34, + ["Y"] = 61.28, + ["CD"] = 0, + }, + [75] = { + ["X"] = 42.63, + ["Y"] = 62.64, + ["CD"] = 0, + }, + [76] = { + ["X"] = 43.09, + ["Y"] = 63.34, + ["CD"] = 0, + }, + [77] = { + ["X"] = 42.95, + ["Y"] = 66.46, + ["CD"] = 0, + }, + [78] = { + ["X"] = 41.91, + ["Y"] = 65.48, + ["CD"] = 0, + }, + [79] = { + ["X"] = 39.84, + ["Y"] = 67.12, + ["CD"] = 0, + }, + [80] = { + ["X"] = 39.25, + ["Y"] = 66.78, + ["CD"] = 0, + }, + [81] = { + ["X"] = 37.95, + ["Y"] = 65.06, + ["CD"] = 0, + }, + [82] = { + ["X"] = 36.88, + ["Y"] = 62.21, + ["CD"] = 0, + }, + [83] = { + ["X"] = 35, + ["Y"] = 61.68, + ["CD"] = 0, + }, + [84] = { + ["X"] = 34.47, + ["Y"] = 61.63, + ["CD"] = 0, + }, + [85] = { + ["X"] = 33.04, + ["Y"] = 59.61, + ["CD"] = 0, + }, + [86] = { + ["X"] = 32.47, + ["Y"] = 58.59, + ["CD"] = 0, + }, + [87] = { + ["X"] = 33.5, + ["Y"] = 48.45, + ["CD"] = 0, + }, + [88] = { + ["X"] = 33.97, + ["Y"] = 46.69, + ["CD"] = 0, + }, + [89] = { + ["X"] = 34.71, + ["Y"] = 45.6, + ["CD"] = 0, + }, + [90] = { + ["X"] = 35.6, + ["Y"] = 44.86, + ["CD"] = 0, + }, + [91] = { + ["X"] = 35.83, + ["Y"] = 42.47, + ["CD"] = 0, + }, + [92] = { + ["X"] = 37.81, + ["Y"] = 39.75, + ["CD"] = 0, + }, + [93] = { + ["X"] = 38.19, + ["Y"] = 38.74, + ["CD"] = 0, + }, + [94] = { + ["X"] = 38.79, + ["Y"] = 38.66, + ["CD"] = 0, + }, + [95] = { + ["X"] = 39.3, + ["Y"] = 38.66, + ["CD"] = 0, + }, + [96] = { + ["X"] = 39.02, + ["Y"] = 37.93, + ["CD"] = 0, + }, + [97] = { + ["X"] = 40.35, + ["Y"] = 35.43, + ["CD"] = 0, + }, + [98] = { + ["X"] = 40.39, + ["Y"] = 33.63, + ["CD"] = 0, + }, + [99] = { + ["X"] = 49.08, + ["Y"] = 29.35, + ["CD"] = 0, + }, + [100] = { + ["X"] = 51.14, + ["Y"] = 25.3, + ["CD"] = 0, + }, + [101] = { + ["X"] = 49.93, + ["Y"] = 27.04, + ["CD"] = 0, + }, + [102] = { + ["X"] = 49.29, + ["Y"] = 25.89, + ["CD"] = 0, + }, + [103] = { + ["X"] = 50.02, + ["Y"] = 25.23, + ["CD"] = 0, + }, + [104] = { + ["X"] = 44.16, + ["Y"] = 26.34, + ["CD"] = 0, + }, + [105] = { + ["X"] = 45.33, + ["Y"] = 25.11, + ["CD"] = 0, + }, + [106] = { + ["X"] = 47.16, + ["Y"] = 24.57, + ["CD"] = 0, + }, + [107] = { + ["X"] = 48.18, + ["Y"] = 24.81, + ["CD"] = 0, + }, + [108] = { + ["X"] = 48.43, + ["Y"] = 24.91, + ["CD"] = 0, + }, + [109] = { + ["X"] = 41.96, + ["Y"] = 27.74, + ["CD"] = 0, + }, + [110] = { + ["X"] = 40.81, + ["Y"] = 28.03, + ["CD"] = 0, + }, + [111] = { + ["X"] = 49.48, + ["Y"] = 32.24, + ["CD"] = 0, + }, + [112] = { + ["X"] = 48.81, + ["Y"] = 30.9, + ["CD"] = 0, + }, + [113] = { + ["X"] = 47.43, + ["Y"] = 9.62, + ["CD"] = 0, + }, + [114] = { + ["X"] = 41.86, + ["Y"] = 29.75, + ["CD"] = 0, + }, + [115] = { + ["X"] = 41.9, + ["Y"] = 33.87, + ["CD"] = 0, + }, + [116] = { + ["X"] = 38.16, + ["Y"] = 38.67, + ["CD"] = 0, + }, + [117] = { + ["X"] = 42.37, + ["Y"] = 57.47, + ["CD"] = 0, + }, + [118] = { + ["X"] = 35.91, + ["Y"] = 64.63, + ["CD"] = 0, + }, + [119] = { + ["X"] = 34.84, + ["Y"] = 66.91, + ["CD"] = 0, + }, + [120] = { + ["X"] = 58.06, + ["Y"] = 22.18, + ["CD"] = 0, + }, + [121] = { + ["X"] = 55.33, + ["Y"] = 18.91, + ["CD"] = 0, + }, + [122] = { + ["X"] = 56.08, + ["Y"] = 16.68, + ["CD"] = 0, + }, + [123] = { + ["X"] = 53.44, + ["Y"] = 12.37, + ["CD"] = 0, + }, + [124] = { + ["X"] = 48.54, + ["Y"] = 7.84, + ["CD"] = 0, + }, + [125] = { + ["X"] = 45.82, + ["Y"] = 11.08, + ["CD"] = 0, + }, + [126] = { + ["X"] = 46.22, + ["Y"] = 10.22, + ["CD"] = 0, + }, + [127] = { + ["X"] = 43.25, + ["Y"] = 9.49, + ["CD"] = 0, + }, + [128] = { + ["X"] = 41.16, + ["Y"] = 13.96, + ["CD"] = 0, + }, + [129] = { + ["X"] = 42.56, + ["Y"] = 30.48, + ["CD"] = 0, + }, + [130] = { + ["X"] = 39.26, + ["Y"] = 50.08, + ["CD"] = 0, + }, + [131] = { + ["X"] = 35.86, + ["Y"] = 38.62, + ["CD"] = 0, + }, + [132] = { + ["X"] = 38.03, + ["Y"] = 42.82, + ["CD"] = 0, + }, + [133] = { + ["X"] = 41.33, + ["Y"] = 48.68, + ["CD"] = 0, + }, + [134] = { + ["X"] = 40.45, + ["Y"] = 50.6, + ["CD"] = 0, + }, + [135] = { + ["X"] = 47.95, + ["Y"] = 69.23, + ["CD"] = 0, + }, + [136] = { + ["X"] = 56.51, + ["Y"] = 61.71, + ["CD"] = 0, + }, + [137] = { + ["X"] = 40.18, + ["Y"] = 74.41, + ["CD"] = 0, + }, + [138] = { + ["X"] = 34.69, + ["Y"] = 74.43, + ["CD"] = 0, + }, + [139] = { + ["X"] = 33.56, + ["Y"] = 72.81, + ["CD"] = 0, + }, + [140] = { + ["X"] = 39.37, + ["Y"] = 64.28, + ["CD"] = 0, + }, + [141] = { + ["X"] = 48.31, + ["Y"] = 29.71, + ["CD"] = 0, + }, + [142] = { + ["X"] = 41.06, + ["Y"] = 51.89, + ["CD"] = 0, + }, + [143] = { + ["X"] = 47.39, + ["Y"] = 57.58, + ["CD"] = 0, + }, + [144] = { + ["X"] = 44.3, + ["Y"] = 30.89, + ["CD"] = 0, + }, + [145] = { + ["X"] = 37.26, + ["Y"] = 33.85, + ["CD"] = 0, + }, + [146] = { + ["X"] = 49.68, + ["Y"] = 28.43, + ["CD"] = 0, + }, + [147] = { + ["X"] = 46.45, + ["Y"] = 26.28, + ["CD"] = 0, + }, + [148] = { + ["X"] = 48.48, + ["Y"] = 54.81, + ["CD"] = 0, + }, + [149] = { + ["X"] = 44.43, + ["Y"] = 43.63, + ["CD"] = 0, + }, + [150] = { + ["X"] = 42.21, + ["Y"] = 54.16, + ["CD"] = 0, + }, + [151] = { + ["X"] = 52.71, + ["Y"] = 39.16, + ["CD"] = 0, + }, + [152] = { + ["X"] = 50.92, + ["Y"] = 31.71, + ["CD"] = 0, + }, + [153] = { + ["X"] = 49.73, + ["Y"] = 40.07, + ["CD"] = 0, + }, + [154] = { + ["X"] = 43.29, + ["Y"] = 33.05, + ["CD"] = 0, + }, + [155] = { + ["X"] = 42.5, + ["Y"] = 61.79, + ["CD"] = 0, + }, + [156] = { + ["X"] = 38.62, + ["Y"] = 61.09, + ["CD"] = 0, + }, + [157] = { + ["X"] = 33.34, + ["Y"] = 66.81, + ["CD"] = 0, + }, + }, + --Stormheim / Fjarnskaggl + [1017] = { + [1] = { + ["X"] = 42.73, + ["Y"] = 21.64, + ["CD"] = 0, + }, + [2] = { + ["X"] = 45.18, + ["Y"] = 20.16, + ["CD"] = 0, + }, + [3] = { + ["X"] = 46.55, + ["Y"] = 20.24, + ["CD"] = 0, + }, + [4] = { + ["X"] = 59.54, + ["Y"] = 32.57, + ["CD"] = 0, + }, + [5] = { + ["X"] = 58.44, + ["Y"] = 30.81, + ["CD"] = 0, + }, + [6] = { + ["X"] = 60.72, + ["Y"] = 27.5, + ["CD"] = 0, + }, + [7] = { + ["X"] = 62.19, + ["Y"] = 26.58, + ["CD"] = 0, + }, + [8] = { + ["X"] = 62.99, + ["Y"] = 27.45, + ["CD"] = 0, + }, + [9] = { + ["X"] = 63.12, + ["Y"] = 29.3, + ["CD"] = 0, + }, + [10] = { + ["X"] = 62.08, + ["Y"] = 31.15, + ["CD"] = 0, + }, + [11] = { + ["X"] = 61.83, + ["Y"] = 31.81, + ["CD"] = 0, + }, + [12] = { + ["X"] = 61.03, + ["Y"] = 34.71, + ["CD"] = 0, + }, + [13] = { + ["X"] = 60.61, + ["Y"] = 37.98, + ["CD"] = 0, + }, + [14] = { + ["X"] = 60.56, + ["Y"] = 39.33, + ["CD"] = 0, + }, + [15] = { + ["X"] = 63.53, + ["Y"] = 49.93, + ["CD"] = 0, + }, + [16] = { + ["X"] = 66.21, + ["Y"] = 49.69, + ["CD"] = 0, + }, + [17] = { + ["X"] = 67.69, + ["Y"] = 49.03, + ["CD"] = 0, + }, + [18] = { + ["X"] = 69.63, + ["Y"] = 46.92, + ["CD"] = 0, + }, + [19] = { + ["X"] = 70.39, + ["Y"] = 46.08, + ["CD"] = 0, + }, + [20] = { + ["X"] = 72.09, + ["Y"] = 51.14, + ["CD"] = 0, + }, + [21] = { + ["X"] = 72.56, + ["Y"] = 53.56, + ["CD"] = 0, + }, + [22] = { + ["X"] = 75.52, + ["Y"] = 54.75, + ["CD"] = 0, + }, + [23] = { + ["X"] = 76.6, + ["Y"] = 56.5, + ["CD"] = 0, + }, + [24] = { + ["X"] = 76.14, + ["Y"] = 58.07, + ["CD"] = 0, + }, + [25] = { + ["X"] = 75.03, + ["Y"] = 57.99, + ["CD"] = 0, + }, + [26] = { + ["X"] = 73.66, + ["Y"] = 57.66, + ["CD"] = 0, + }, + [27] = { + ["X"] = 70.9, + ["Y"] = 61.57, + ["CD"] = 0, + }, + [28] = { + ["X"] = 67.75, + ["Y"] = 61.48, + ["CD"] = 0, + }, + [29] = { + ["X"] = 64.9, + ["Y"] = 63.35, + ["CD"] = 0, + }, + [30] = { + ["X"] = 62.99, + ["Y"] = 63.35, + ["CD"] = 0, + }, + [31] = { + ["X"] = 63.26, + ["Y"] = 64.62, + ["CD"] = 0, + }, + [32] = { + ["X"] = 63.23, + ["Y"] = 65.19, + ["CD"] = 0, + }, + [33] = { + ["X"] = 61.63, + ["Y"] = 65.68, + ["CD"] = 0, + }, + [34] = { + ["X"] = 62.54, + ["Y"] = 66.48, + ["CD"] = 0, + }, + [35] = { + ["X"] = 59.64, + ["Y"] = 66.61, + ["CD"] = 0, + }, + [36] = { + ["X"] = 59.13, + ["Y"] = 67.89, + ["CD"] = 0, + }, + [37] = { + ["X"] = 55.69, + ["Y"] = 71.33, + ["CD"] = 0, + }, + [38] = { + ["X"] = 59.46, + ["Y"] = 75.05, + ["CD"] = 0, + }, + [39] = { + ["X"] = 61.37, + ["Y"] = 77.79, + ["CD"] = 0, + }, + [40] = { + ["X"] = 61.46, + ["Y"] = 79.28, + ["CD"] = 0, + }, + [41] = { + ["X"] = 62.37, + ["Y"] = 81.26, + ["CD"] = 0, + }, + [42] = { + ["X"] = 62.89, + ["Y"] = 86.35, + ["CD"] = 0, + }, + [43] = { + ["X"] = 62.95, + ["Y"] = 87.18, + ["CD"] = 0, + }, + [44] = { + ["X"] = 61.86, + ["Y"] = 89.33, + ["CD"] = 0, + }, + [45] = { + ["X"] = 61.06, + ["Y"] = 89.51, + ["CD"] = 0, + }, + [46] = { + ["X"] = 60.35, + ["Y"] = 89.77, + ["CD"] = 0, + }, + [47] = { + ["X"] = 60.46, + ["Y"] = 88.01, + ["CD"] = 0, + }, + [48] = { + ["X"] = 58.77, + ["Y"] = 88.12, + ["CD"] = 0, + }, + [49] = { + ["X"] = 58, + ["Y"] = 89.7, + ["CD"] = 0, + }, + [50] = { + ["X"] = 57.81, + ["Y"] = 88.34, + ["CD"] = 0, + }, + [51] = { + ["X"] = 58.15, + ["Y"] = 87.43, + ["CD"] = 0, + }, + [52] = { + ["X"] = 54.91, + ["Y"] = 87.91, + ["CD"] = 0, + }, + [53] = { + ["X"] = 54.42, + ["Y"] = 87.64, + ["CD"] = 0, + }, + [54] = { + ["X"] = 53.69, + ["Y"] = 86.99, + ["CD"] = 0, + }, + [55] = { + ["X"] = 53.69, + ["Y"] = 86.01, + ["CD"] = 0, + }, + [56] = { + ["X"] = 53.41, + ["Y"] = 84.74, + ["CD"] = 0, + }, + [57] = { + ["X"] = 52.93, + ["Y"] = 84.03, + ["CD"] = 0, + }, + [58] = { + ["X"] = 52.94, + ["Y"] = 80.51, + ["CD"] = 0, + }, + [59] = { + ["X"] = 51.8, + ["Y"] = 80.64, + ["CD"] = 0, + }, + [60] = { + ["X"] = 50.54, + ["Y"] = 76.85, + ["CD"] = 0, + }, + [61] = { + ["X"] = 50.06, + ["Y"] = 74.96, + ["CD"] = 0, + }, + [62] = { + ["X"] = 49.84, + ["Y"] = 71.6, + ["CD"] = 0, + }, + [63] = { + ["X"] = 49.18, + ["Y"] = 71.24, + ["CD"] = 0, + }, + [64] = { + ["X"] = 49.05, + ["Y"] = 72.37, + ["CD"] = 0, + }, + [65] = { + ["X"] = 48.97, + ["Y"] = 73.02, + ["CD"] = 0, + }, + [66] = { + ["X"] = 48.69, + ["Y"] = 74.08, + ["CD"] = 0, + }, + [67] = { + ["X"] = 46.55, + ["Y"] = 65.61, + ["CD"] = 0, + }, + [68] = { + ["X"] = 45.84, + ["Y"] = 65.53, + ["CD"] = 0, + }, + [69] = { + ["X"] = 45.91, + ["Y"] = 66.46, + ["CD"] = 0, + }, + [70] = { + ["X"] = 45.89, + ["Y"] = 68.5, + ["CD"] = 0, + }, + [71] = { + ["X"] = 46.49, + ["Y"] = 69.36, + ["CD"] = 0, + }, + [72] = { + ["X"] = 46.85, + ["Y"] = 70.49, + ["CD"] = 0, + }, + [73] = { + ["X"] = 48.64, + ["Y"] = 66.49, + ["CD"] = 0, + }, + [74] = { + ["X"] = 48.19, + ["Y"] = 65.73, + ["CD"] = 0, + }, + [75] = { + ["X"] = 69.05, + ["Y"] = 53, + ["CD"] = 0, + }, + [76] = { + ["X"] = 69.6, + ["Y"] = 53.04, + ["CD"] = 0, + }, + [77] = { + ["X"] = 71.2, + ["Y"] = 50.43, + ["CD"] = 0, + }, + [78] = { + ["X"] = 72.12, + ["Y"] = 48.71, + ["CD"] = 0, + }, + [79] = { + ["X"] = 71.54, + ["Y"] = 47.52, + ["CD"] = 0, + }, + [80] = { + ["X"] = 70.25, + ["Y"] = 47.85, + ["CD"] = 0, + }, + [81] = { + ["X"] = 67.53, + ["Y"] = 46.62, + ["CD"] = 0, + }, + [82] = { + ["X"] = 66.15, + ["Y"] = 46.42, + ["CD"] = 0, + }, + [83] = { + ["X"] = 65.17, + ["Y"] = 48.03, + ["CD"] = 0, + }, + [84] = { + ["X"] = 63.08, + ["Y"] = 47.87, + ["CD"] = 0, + }, + [85] = { + ["X"] = 62.37, + ["Y"] = 49.53, + ["CD"] = 0, + }, + [86] = { + ["X"] = 61.62, + ["Y"] = 50.11, + ["CD"] = 0, + }, + [87] = { + ["X"] = 61.46, + ["Y"] = 52.36, + ["CD"] = 0, + }, + [88] = { + ["X"] = 59.98, + ["Y"] = 54.34, + ["CD"] = 0, + }, + [89] = { + ["X"] = 59.21, + ["Y"] = 54.31, + ["CD"] = 0, + }, + [90] = { + ["X"] = 58.56, + ["Y"] = 53.27, + ["CD"] = 0, + }, + [91] = { + ["X"] = 57.53, + ["Y"] = 52.03, + ["CD"] = 0, + }, + [92] = { + ["X"] = 57.08, + ["Y"] = 50.3, + ["CD"] = 0, + }, + [93] = { + ["X"] = 53.84, + ["Y"] = 52.74, + ["CD"] = 0, + }, + [94] = { + ["X"] = 53.1, + ["Y"] = 52.62, + ["CD"] = 0, + }, + [95] = { + ["X"] = 51.82, + ["Y"] = 55.04, + ["CD"] = 0, + }, + [96] = { + ["X"] = 51.02, + ["Y"] = 56.85, + ["CD"] = 0, + }, + [97] = { + ["X"] = 49.4, + ["Y"] = 57.58, + ["CD"] = 0, + }, + [98] = { + ["X"] = 48.41, + ["Y"] = 56.75, + ["CD"] = 0, + }, + [99] = { + ["X"] = 46.85, + ["Y"] = 55.36, + ["CD"] = 0, + }, + [100] = { + ["X"] = 46.59, + ["Y"] = 54.11, + ["CD"] = 0, + }, + [101] = { + ["X"] = 45.57, + ["Y"] = 53.02, + ["CD"] = 0, + }, + [102] = { + ["X"] = 44.37, + ["Y"] = 52.98, + ["CD"] = 0, + }, + [103] = { + ["X"] = 44.15, + ["Y"] = 51.24, + ["CD"] = 0, + }, + [104] = { + ["X"] = 40.96, + ["Y"] = 49.38, + ["CD"] = 0, + }, + [105] = { + ["X"] = 39.14, + ["Y"] = 47.16, + ["CD"] = 0, + }, + [106] = { + ["X"] = 38.88, + ["Y"] = 44.73, + ["CD"] = 0, + }, + [107] = { + ["X"] = 38.83, + ["Y"] = 43.43, + ["CD"] = 0, + }, + [108] = { + ["X"] = 38.15, + ["Y"] = 43.33, + ["CD"] = 0, + }, + [109] = { + ["X"] = 37.77, + ["Y"] = 42.02, + ["CD"] = 0, + }, + [110] = { + ["X"] = 37.54, + ["Y"] = 40.84, + ["CD"] = 0, + }, + [111] = { + ["X"] = 35.86, + ["Y"] = 40.01, + ["CD"] = 0, + }, + [112] = { + ["X"] = 33.99, + ["Y"] = 36.77, + ["CD"] = 0, + }, + [113] = { + ["X"] = 33.07, + ["Y"] = 37, + ["CD"] = 0, + }, + [114] = { + ["X"] = 33.87, + ["Y"] = 39.85, + ["CD"] = 0, + }, + [115] = { + ["X"] = 33.03, + ["Y"] = 40.27, + ["CD"] = 0, + }, + [116] = { + ["X"] = 32.06, + ["Y"] = 40.76, + ["CD"] = 0, + }, + [117] = { + ["X"] = 33.91, + ["Y"] = 44.47, + ["CD"] = 0, + }, + [118] = { + ["X"] = 37.4, + ["Y"] = 45.88, + ["CD"] = 0, + }, + [119] = { + ["X"] = 37.28, + ["Y"] = 46.86, + ["CD"] = 0, + }, + [120] = { + ["X"] = 37.7, + ["Y"] = 48.2, + ["CD"] = 0, + }, + [121] = { + ["X"] = 38.14, + ["Y"] = 48.72, + ["CD"] = 0, + }, + [122] = { + ["X"] = 39.99, + ["Y"] = 51.1, + ["CD"] = 0, + }, + [123] = { + ["X"] = 40.14, + ["Y"] = 52.88, + ["CD"] = 0, + }, + [124] = { + ["X"] = 40.12, + ["Y"] = 54.59, + ["CD"] = 0, + }, + [125] = { + ["X"] = 40.48, + ["Y"] = 55.62, + ["CD"] = 0, + }, + [126] = { + ["X"] = 40.9, + ["Y"] = 54.97, + ["CD"] = 0, + }, + [127] = { + ["X"] = 41.83, + ["Y"] = 58.05, + ["CD"] = 0, + }, + [128] = { + ["X"] = 42.96, + ["Y"] = 58.02, + ["CD"] = 0, + }, + [129] = { + ["X"] = 43.76, + ["Y"] = 58.88, + ["CD"] = 0, + }, + [130] = { + ["X"] = 44.62, + ["Y"] = 59.61, + ["CD"] = 0, + }, + [131] = { + ["X"] = 46.7, + ["Y"] = 63.7, + ["CD"] = 0, + }, + [132] = { + ["X"] = 45.37, + ["Y"] = 38.44, + ["CD"] = 0, + }, + [133] = { + ["X"] = 45.75, + ["Y"] = 57.47, + ["CD"] = 0, + }, + [134] = { + ["X"] = 41.11, + ["Y"] = 65.23, + ["CD"] = 0, + }, + [135] = { + ["X"] = 42.3, + ["Y"] = 57.53, + ["CD"] = 0, + }, + [136] = { + ["X"] = 42.35, + ["Y"] = 61.07, + ["CD"] = 0, + }, + [137] = { + ["X"] = 41.82, + ["Y"] = 65.83, + ["CD"] = 0, + }, + [138] = { + ["X"] = 43.9, + ["Y"] = 58.83, + ["CD"] = 0, + }, + [139] = { + ["X"] = 36.28, + ["Y"] = 53.19, + ["CD"] = 0, + }, + [140] = { + ["X"] = 33.45, + ["Y"] = 57.93, + ["CD"] = 0, + }, + [141] = { + ["X"] = 31.05, + ["Y"] = 50.17, + ["CD"] = 0, + }, + [142] = { + ["X"] = 47.87, + ["Y"] = 52.01, + ["CD"] = 0, + }, + [143] = { + ["X"] = 43.23, + ["Y"] = 48.66, + ["CD"] = 0, + }, + [144] = { + ["X"] = 49.96, + ["Y"] = 50.95, + ["CD"] = 0, + }, + [145] = { + ["X"] = 48.72, + ["Y"] = 41.11, + ["CD"] = 0, + }, + [146] = { + ["X"] = 39.14, + ["Y"] = 53.61, + ["CD"] = 0, + }, + [147] = { + ["X"] = 42.68, + ["Y"] = 50.61, + ["CD"] = 0, + }, + [148] = { + ["X"] = 41.05, + ["Y"] = 54.12, + ["CD"] = 0, + }, + [149] = { + ["X"] = 47.37, + ["Y"] = 67.98, + ["CD"] = 0, + }, + [150] = { + ["X"] = 44.75, + ["Y"] = 82.18, + ["CD"] = 0, + }, + [151] = { + ["X"] = 63.56, + ["Y"] = 45.14, + ["CD"] = 0, + }, + [152] = { + ["X"] = 45.89, + ["Y"] = 46.6, + ["CD"] = 0, + }, + [153] = { + ["X"] = 46.49, + ["Y"] = 64.37, + ["CD"] = 0, + }, + [154] = { + ["X"] = 64.82, + ["Y"] = 52.7, + ["CD"] = 0, + }, + [155] = { + ["X"] = 64.17, + ["Y"] = 52.38, + ["CD"] = 0, + }, + [156] = { + ["X"] = 68.5, + ["Y"] = 57.27, + ["CD"] = 0, + }, + [157] = { + ["X"] = 67.97, + ["Y"] = 56.88, + ["CD"] = 0, + }, + [158] = { + ["X"] = 68.84, + ["Y"] = 55.8, + ["CD"] = 0, + }, + [159] = { + ["X"] = 65.9, + ["Y"] = 48.34, + ["CD"] = 0, + }, + [160] = { + ["X"] = 67.73, + ["Y"] = 41.64, + ["CD"] = 0, + }, + [161] = { + ["X"] = 74.57, + ["Y"] = 43.32, + ["CD"] = 0, + }, + [162] = { + ["X"] = 67.61, + ["Y"] = 54.47, + ["CD"] = 0, + }, + [163] = { + ["X"] = 58.75, + ["Y"] = 51.72, + ["CD"] = 0, + }, + [164] = { + ["X"] = 73.32, + ["Y"] = 59.52, + ["CD"] = 0, + }, + [165] = { + ["X"] = 63.58, + ["Y"] = 37.95, + ["CD"] = 0, + }, + [166] = { + ["X"] = 66.85, + ["Y"] = 53.77, + ["CD"] = 0, + }, + [167] = { + ["X"] = 77.33, + ["Y"] = 63.14, + ["CD"] = 0, + }, + [168] = { + ["X"] = 73.71, + ["Y"] = 59.94, + ["CD"] = 0, + }, + [169] = { + ["X"] = 76.47, + ["Y"] = 60.08, + ["CD"] = 0, + }, + [170] = { + ["X"] = 44.97, + ["Y"] = 39.08, + ["CD"] = 0, + }, + [171] = { + ["X"] = 73.25, + ["Y"] = 44.5, + ["CD"] = 0, + }, + [172] = { + ["X"] = 68.35, + ["Y"] = 58.98, + ["CD"] = 0, + }, + [173] = { + ["X"] = 71.56, + ["Y"] = 52.46, + ["CD"] = 0, + }, + [174] = { + ["X"] = 63.95, + ["Y"] = 62.4, + ["CD"] = 0, + }, + [175] = { + ["X"] = 60.12, + ["Y"] = 69.1, + ["CD"] = 0, + }, + [176] = { + ["X"] = 61.22, + ["Y"] = 64.31, + ["CD"] = 0, + }, + [177] = { + ["X"] = 55.88, + ["Y"] = 79.08, + ["CD"] = 0, + }, + [178] = { + ["X"] = 64.32, + ["Y"] = 44.07, + ["CD"] = 0, + }, + [179] = { + ["X"] = 68.89, + ["Y"] = 62.08, + ["CD"] = 0, + }, + [180] = { + ["X"] = 69.35, + ["Y"] = 60.39, + ["CD"] = 0, + }, + [181] = { + ["X"] = 65.94, + ["Y"] = 62.71, + ["CD"] = 0, + }, + [182] = { + ["X"] = 66.6, + ["Y"] = 60.36, + ["CD"] = 0, + }, + [183] = { + ["X"] = 46.02, + ["Y"] = 76.89, + ["CD"] = 0, + }, + [184] = { + ["X"] = 29.73, + ["Y"] = 55.09, + ["CD"] = 0, + }, + [185] = { + ["X"] = 48.35, + ["Y"] = 64.82, + ["CD"] = 0, + }, + }, + --Val'sharah / Dreamleaf + [1018] = { + [1] = { + ["X"] = 23.7, + ["Y"] = 73.12, + ["CD"] = 0, + }, + [2] = { + ["X"] = 22.52, + ["Y"] = 71.28, + ["CD"] = 0, + }, + [3] = { + ["X"] = 21.12, + ["Y"] = 70.47, + ["CD"] = 0, + }, + [4] = { + ["X"] = 20.56, + ["Y"] = 68.69, + ["CD"] = 0, + }, + [5] = { + ["X"] = 21.42, + ["Y"] = 67.02, + ["CD"] = 0, + }, + [6] = { + ["X"] = 23.97, + ["Y"] = 65.2, + ["CD"] = 0, + }, + [7] = { + ["X"] = 24.52, + ["Y"] = 66.6, + ["CD"] = 0, + }, + [8] = { + ["X"] = 31.99, + ["Y"] = 59.04, + ["CD"] = 0, + }, + [9] = { + ["X"] = 33.48, + ["Y"] = 60.6, + ["CD"] = 0, + }, + [10] = { + ["X"] = 35.38, + ["Y"] = 61.46, + ["CD"] = 0, + }, + [11] = { + ["X"] = 36.64, + ["Y"] = 60.88, + ["CD"] = 0, + }, + [12] = { + ["X"] = 38.63, + ["Y"] = 58.93, + ["CD"] = 0, + }, + [13] = { + ["X"] = 45.04, + ["Y"] = 58.46, + ["CD"] = 0, + }, + [14] = { + ["X"] = 46.38, + ["Y"] = 58.45, + ["CD"] = 0, + }, + [15] = { + ["X"] = 51.94, + ["Y"] = 65.28, + ["CD"] = 0, + }, + [16] = { + ["X"] = 52.39, + ["Y"] = 67.56, + ["CD"] = 0, + }, + [17] = { + ["X"] = 50.05, + ["Y"] = 71.58, + ["CD"] = 0, + }, + [18] = { + ["X"] = 49.84, + ["Y"] = 74.57, + ["CD"] = 0, + }, + [19] = { + ["X"] = 49.57, + ["Y"] = 78.07, + ["CD"] = 0, + }, + [20] = { + ["X"] = 48.9, + ["Y"] = 80.41, + ["CD"] = 0, + }, + [21] = { + ["X"] = 49.72, + ["Y"] = 81.52, + ["CD"] = 0, + }, + [22] = { + ["X"] = 49.75, + ["Y"] = 83.06, + ["CD"] = 0, + }, + [23] = { + ["X"] = 47.81, + ["Y"] = 88.73, + ["CD"] = 0, + }, + [24] = { + ["X"] = 44.54, + ["Y"] = 87.73, + ["CD"] = 0, + }, + [25] = { + ["X"] = 43.54, + ["Y"] = 84.84, + ["CD"] = 0, + }, + [26] = { + ["X"] = 42.98, + ["Y"] = 81.66, + ["CD"] = 0, + }, + [27] = { + ["X"] = 47.59, + ["Y"] = 79.41, + ["CD"] = 0, + }, + [28] = { + ["X"] = 49.11, + ["Y"] = 75.32, + ["CD"] = 0, + }, + [29] = { + ["X"] = 49.51, + ["Y"] = 74.06, + ["CD"] = 0, + }, + [30] = { + ["X"] = 51.33, + ["Y"] = 72.05, + ["CD"] = 0, + }, + [31] = { + ["X"] = 52.93, + ["Y"] = 71.06, + ["CD"] = 0, + }, + [32] = { + ["X"] = 55.42, + ["Y"] = 74.08, + ["CD"] = 0, + }, + [33] = { + ["X"] = 56.07, + ["Y"] = 74.88, + ["CD"] = 0, + }, + [34] = { + ["X"] = 56.84, + ["Y"] = 76.51, + ["CD"] = 0, + }, + [35] = { + ["X"] = 58.65, + ["Y"] = 76.39, + ["CD"] = 0, + }, + [36] = { + ["X"] = 58.57, + ["Y"] = 75.31, + ["CD"] = 0, + }, + [37] = { + ["X"] = 59.59, + ["Y"] = 74.16, + ["CD"] = 0, + }, + [38] = { + ["X"] = 60.35, + ["Y"] = 73.28, + ["CD"] = 0, + }, + [39] = { + ["X"] = 63.71, + ["Y"] = 76.36, + ["CD"] = 0, + }, + [40] = { + ["X"] = 64.29, + ["Y"] = 77.99, + ["CD"] = 0, + }, + [41] = { + ["X"] = 66.44, + ["Y"] = 80.68, + ["CD"] = 0, + }, + [42] = { + ["X"] = 65.94, + ["Y"] = 83.32, + ["CD"] = 0, + }, + [43] = { + ["X"] = 66.71, + ["Y"] = 85.68, + ["CD"] = 0, + }, + [44] = { + ["X"] = 66.43, + ["Y"] = 87.12, + ["CD"] = 0, + }, + [45] = { + ["X"] = 65.37, + ["Y"] = 88.22, + ["CD"] = 0, + }, + [46] = { + ["X"] = 64.91, + ["Y"] = 88.25, + ["CD"] = 0, + }, + [47] = { + ["X"] = 64.67, + ["Y"] = 87.32, + ["CD"] = 0, + }, + [48] = { + ["X"] = 63.61, + ["Y"] = 86.41, + ["CD"] = 0, + }, + [49] = { + ["X"] = 63.32, + ["Y"] = 84.05, + ["CD"] = 0, + }, + [50] = { + ["X"] = 61.95, + ["Y"] = 83.94, + ["CD"] = 0, + }, + [51] = { + ["X"] = 61.19, + ["Y"] = 76.71, + ["CD"] = 0, + }, + [52] = { + ["X"] = 59.54, + ["Y"] = 76.62, + ["CD"] = 0, + }, + [53] = { + ["X"] = 58.28, + ["Y"] = 75.22, + ["CD"] = 0, + }, + [54] = { + ["X"] = 68.01, + ["Y"] = 75.14, + ["CD"] = 0, + }, + [55] = { + ["X"] = 65.84, + ["Y"] = 77.38, + ["CD"] = 0, + }, + [56] = { + ["X"] = 57.15, + ["Y"] = 77.22, + ["CD"] = 0, + }, + [57] = { + ["X"] = 57.87, + ["Y"] = 71.9, + ["CD"] = 0, + }, + [58] = { + ["X"] = 59.68, + ["Y"] = 67.31, + ["CD"] = 0, + }, + [59] = { + ["X"] = 60.58, + ["Y"] = 71.85, + ["CD"] = 0, + }, + [60] = { + ["X"] = 61.97, + ["Y"] = 76.08, + ["CD"] = 0, + }, + [61] = { + ["X"] = 64.48, + ["Y"] = 67.54, + ["CD"] = 0, + }, + [62] = { + ["X"] = 51.7, + ["Y"] = 91.24, + ["CD"] = 0, + }, + [63] = { + ["X"] = 50.56, + ["Y"] = 72.37, + ["CD"] = 0, + }, + [64] = { + ["X"] = 42.67, + ["Y"] = 72.97, + ["CD"] = 0, + }, + [65] = { + ["X"] = 43.5, + ["Y"] = 76.94, + ["CD"] = 0, + }, + [66] = { + ["X"] = 45.96, + ["Y"] = 76.33, + ["CD"] = 0, + }, + [67] = { + ["X"] = 44.31, + ["Y"] = 81.03, + ["CD"] = 0, + }, + [68] = { + ["X"] = 46.76, + ["Y"] = 81.13, + ["CD"] = 0, + }, + [69] = { + ["X"] = 48.35, + ["Y"] = 78.45, + ["CD"] = 0, + }, + [70] = { + ["X"] = 45.13, + ["Y"] = 70.18, + ["CD"] = 0, + }, + [71] = { + ["X"] = 48.98, + ["Y"] = 86.21, + ["CD"] = 0, + }, + [72] = { + ["X"] = 43.79, + ["Y"] = 86.71, + ["CD"] = 0, + }, + [73] = { + ["X"] = 50.98, + ["Y"] = 82.3, + ["CD"] = 0, + }, + [74] = { + ["X"] = 51.27, + ["Y"] = 88.51, + ["CD"] = 0, + }, + [75] = { + ["X"] = 57.39, + ["Y"] = 70.12, + ["CD"] = 0, + }, + [76] = { + ["X"] = 52.47, + ["Y"] = 64.95, + ["CD"] = 0, + }, + [77] = { + ["X"] = 53.43, + ["Y"] = 51.13, + ["CD"] = 0, + }, + [78] = { + ["X"] = 60.66, + ["Y"] = 54.1, + ["CD"] = 0, + }, + [79] = { + ["X"] = 51.71, + ["Y"] = 64.2, + ["CD"] = 0, + }, + [80] = { + ["X"] = 62.26, + ["Y"] = 60.64, + ["CD"] = 0, + }, + [81] = { + ["X"] = 70.59, + ["Y"] = 51.89, + ["CD"] = 0, + }, + [82] = { + ["X"] = 66.56, + ["Y"] = 36.3, + ["CD"] = 0, + }, + [83] = { + ["X"] = 65.74, + ["Y"] = 46.08, + ["CD"] = 0, + }, + [84] = { + ["X"] = 61.47, + ["Y"] = 42.37, + ["CD"] = 0, + }, + [85] = { + ["X"] = 62.72, + ["Y"] = 33.4, + ["CD"] = 0, + }, + [86] = { + ["X"] = 45.35, + ["Y"] = 55.3, + ["CD"] = 0, + }, + [87] = { + ["X"] = 38.59, + ["Y"] = 63.67, + ["CD"] = 0, + }, + [88] = { + ["X"] = 38.92, + ["Y"] = 54.63, + ["CD"] = 0, + }, + [89] = { + ["X"] = 61.84, + ["Y"] = 85.27, + ["CD"] = 0, + }, + [90] = { + ["X"] = 60.08, + ["Y"] = 80.47, + ["CD"] = 0, + }, + [91] = { + ["X"] = 52.26, + ["Y"] = 72.07, + ["CD"] = 0, + }, + [92] = { + ["X"] = 49.99, + ["Y"] = 70.4, + ["CD"] = 0, + }, + [93] = { + ["X"] = 45.26, + ["Y"] = 67.42, + ["CD"] = 0, + }, + [94] = { + ["X"] = 42.47, + ["Y"] = 80.28, + ["CD"] = 0, + }, + [95] = { + ["X"] = 45.62, + ["Y"] = 81.42, + ["CD"] = 0, + }, + [96] = { + ["X"] = 46.8, + ["Y"] = 74.09, + ["CD"] = 0, + }, + [97] = { + ["X"] = 58.36, + ["Y"] = 92.03, + ["CD"] = 0, + }, + [98] = { + ["X"] = 55.21, + ["Y"] = 78.88, + ["CD"] = 0, + }, + [99] = { + ["X"] = 61.2, + ["Y"] = 77.36, + ["CD"] = 0, + }, + [100] = { + ["X"] = 62.36, + ["Y"] = 65.85, + ["CD"] = 0, + }, + [101] = { + ["X"] = 49.05, + ["Y"] = 65.61, + ["CD"] = 0, + }, + [102] = { + ["X"] = 56.55, + ["Y"] = 64.33, + ["CD"] = 0, + }, + [103] = { + ["X"] = 56.67, + ["Y"] = 56.33, + ["CD"] = 0, + }, + [104] = { + ["X"] = 53.25, + ["Y"] = 52.24, + ["CD"] = 0, + }, + [105] = { + ["X"] = 63.74, + ["Y"] = 50.57, + ["CD"] = 0, + }, + [106] = { + ["X"] = 67.05, + ["Y"] = 55.44, + ["CD"] = 0, + }, + [107] = { + ["X"] = 68.83, + ["Y"] = 44.28, + ["CD"] = 0, + }, + [108] = { + ["X"] = 65.9, + ["Y"] = 41.14, + ["CD"] = 0, + }, + [109] = { + ["X"] = 65.95, + ["Y"] = 37.16, + ["CD"] = 0, + }, + [110] = { + ["X"] = 60.47, + ["Y"] = 33.98, + ["CD"] = 0, + }, + [111] = { + ["X"] = 58.38, + ["Y"] = 33.52, + ["CD"] = 0, + }, + [112] = { + ["X"] = 56.33, + ["Y"] = 44.4, + ["CD"] = 0, + }, + [113] = { + ["X"] = 56.06, + ["Y"] = 82.86, + ["CD"] = 0, + }, + [114] = { + ["X"] = 55.3, + ["Y"] = 55.78, + ["CD"] = 0, + }, + [115] = { + ["X"] = 55.56, + ["Y"] = 50.91, + ["CD"] = 0, + }, + [116] = { + ["X"] = 46.27, + ["Y"] = 54.85, + ["CD"] = 0, + }, + [117] = { + ["X"] = 37.51, + ["Y"] = 56.24, + ["CD"] = 0, + }, + [118] = { + ["X"] = 38.25, + ["Y"] = 57.4, + ["CD"] = 0, + }, + [119] = { + ["X"] = 41.46, + ["Y"] = 52.33, + ["CD"] = 0, + }, + [120] = { + ["X"] = 38.87, + ["Y"] = 61.1, + ["CD"] = 0, + }, + [121] = { + ["X"] = 47.72, + ["Y"] = 54.92, + ["CD"] = 0, + }, + [122] = { + ["X"] = 50.9, + ["Y"] = 43.4, + ["CD"] = 0, + }, + [123] = { + ["X"] = 46.52, + ["Y"] = 36.21, + ["CD"] = 0, + }, + [124] = { + ["X"] = 60.77, + ["Y"] = 63.01, + ["CD"] = 0, + }, + [125] = { + ["X"] = 58.67, + ["Y"] = 70.62, + ["CD"] = 0, + }, + [126] = { + ["X"] = 65.76, + ["Y"] = 68.15, + ["CD"] = 0, + }, + [127] = { + ["X"] = 62.87, + ["Y"] = 83.35, + ["CD"] = 0, + }, + [128] = { + ["X"] = 57.4, + ["Y"] = 88.53, + ["CD"] = 0, + }, + [129] = { + ["X"] = 56.11, + ["Y"] = 85.88, + ["CD"] = 0, + }, + [130] = { + ["X"] = 54.6, + ["Y"] = 83.39, + ["CD"] = 0, + }, + [131] = { + ["X"] = 56.05, + ["Y"] = 79.19, + ["CD"] = 0, + }, + }, + --Suramar / Starlight Rose + [1033] = { + [1] = { + ["X"] = 39.81, + ["Y"] = 55.75, + ["CD"] = 0, + }, + [2] = { + ["X"] = 35.72, + ["Y"] = 44.58, + ["CD"] = 0, + }, + [3] = { + ["X"] = 42.48, + ["Y"] = 62.87, + ["CD"] = 0, + }, + [4] = { + ["X"] = 36.77, + ["Y"] = 52.88, + ["CD"] = 0, + }, + [5] = { + ["X"] = 39.05, + ["Y"] = 52.08, + ["CD"] = 0, + }, + [6] = { + ["X"] = 33.14, + ["Y"] = 42.5, + ["CD"] = 0, + }, + [7] = { + ["X"] = 28.77, + ["Y"] = 41.26, + ["CD"] = 0, + }, + [8] = { + ["X"] = 31.6, + ["Y"] = 36.23, + ["CD"] = 0, + }, + [9] = { + ["X"] = 30.9, + ["Y"] = 38.04, + ["CD"] = 0, + }, + [10] = { + ["X"] = 31.8, + ["Y"] = 38.92, + ["CD"] = 0, + }, + [11] = { + ["X"] = 34.05, + ["Y"] = 38.76, + ["CD"] = 0, + }, + [12] = { + ["X"] = 36.44, + ["Y"] = 42.6, + ["CD"] = 0, + }, + [13] = { + ["X"] = 35.2, + ["Y"] = 38.64, + ["CD"] = 0, + }, + [14] = { + ["X"] = 35.24, + ["Y"] = 43, + ["CD"] = 0, + }, + [15] = { + ["X"] = 47.15, + ["Y"] = 41.25, + ["CD"] = 0, + }, + [16] = { + ["X"] = 44.86, + ["Y"] = 35.75, + ["CD"] = 0, + }, + [17] = { + ["X"] = 44.5, + ["Y"] = 32.66, + ["CD"] = 0, + }, + [18] = { + ["X"] = 47.89, + ["Y"] = 30.93, + ["CD"] = 0, + }, + [19] = { + ["X"] = 45.14, + ["Y"] = 26.9, + ["CD"] = 0, + }, + [20] = { + ["X"] = 42.73, + ["Y"] = 27.39, + ["CD"] = 0, + }, + [21] = { + ["X"] = 40.94, + ["Y"] = 29.97, + ["CD"] = 0, + }, + [22] = { + ["X"] = 40.74, + ["Y"] = 33.28, + ["CD"] = 0, + }, + [23] = { + ["X"] = 41.44, + ["Y"] = 24.59, + ["CD"] = 0, + }, + [24] = { + ["X"] = 39.62, + ["Y"] = 26.39, + ["CD"] = 0, + }, + [25] = { + ["X"] = 38.91, + ["Y"] = 24.83, + ["CD"] = 0, + }, + [26] = { + ["X"] = 37.09, + ["Y"] = 29.05, + ["CD"] = 0, + }, + [27] = { + ["X"] = 41.13, + ["Y"] = 37.95, + ["CD"] = 0, + }, + [28] = { + ["X"] = 41.61, + ["Y"] = 40.34, + ["CD"] = 0, + }, + [29] = { + ["X"] = 44.23, + ["Y"] = 39.51, + ["CD"] = 0, + }, + [30] = { + ["X"] = 43.5, + ["Y"] = 50.87, + ["CD"] = 0, + }, + [31] = { + ["X"] = 37.4, + ["Y"] = 62.25, + ["CD"] = 0, + }, + [32] = { + ["X"] = 36.04, + ["Y"] = 87.52, + ["CD"] = 0, + }, + [33] = { + ["X"] = 35.11, + ["Y"] = 92.37, + ["CD"] = 0, + }, + [34] = { + ["X"] = 32.33, + ["Y"] = 89.97, + ["CD"] = 0, + }, + [35] = { + ["X"] = 33.84, + ["Y"] = 50.23, + ["CD"] = 0, + }, + [36] = { + ["X"] = 42.8, + ["Y"] = 73.43, + ["CD"] = 0, + }, + [37] = { + ["X"] = 38.64, + ["Y"] = 62.53, + ["CD"] = 0, + }, + [38] = { + ["X"] = 39.08, + ["Y"] = 56.5, + ["CD"] = 0, + }, + [39] = { + ["X"] = 32.43, + ["Y"] = 50.36, + ["CD"] = 0, + }, + [40] = { + ["X"] = 33.08, + ["Y"] = 49.61, + ["CD"] = 0, + }, + [41] = { + ["X"] = 35.52, + ["Y"] = 51.77, + ["CD"] = 0, + }, + [42] = { + ["X"] = 38.31, + ["Y"] = 52.42, + ["CD"] = 0, + }, + [43] = { + ["X"] = 45.6, + ["Y"] = 50.48, + ["CD"] = 0, + }, + [44] = { + ["X"] = 61.95, + ["Y"] = 44.86, + ["CD"] = 0, + }, + [45] = { + ["X"] = 63.5, + ["Y"] = 46.54, + ["CD"] = 0, + }, + [46] = { + ["X"] = 58.6, + ["Y"] = 42.56, + ["CD"] = 0, + }, + [47] = { + ["X"] = 60.02, + ["Y"] = 48.16, + ["CD"] = 0, + }, + [48] = { + ["X"] = 59.87, + ["Y"] = 45.18, + ["CD"] = 0, + }, + [49] = { + ["X"] = 62.63, + ["Y"] = 41.77, + ["CD"] = 0, + }, + [50] = { + ["X"] = 56.64, + ["Y"] = 47.66, + ["CD"] = 0, + }, + [51] = { + ["X"] = 47.39, + ["Y"] = 52.94, + ["CD"] = 0, + }, + [52] = { + ["X"] = 44.57, + ["Y"] = 49.65, + ["CD"] = 0, + }, + [53] = { + ["X"] = 42.04, + ["Y"] = 48.91, + ["CD"] = 0, + }, + [54] = { + ["X"] = 39.9, + ["Y"] = 52.72, + ["CD"] = 0, + }, + [55] = { + ["X"] = 37.97, + ["Y"] = 54.37, + ["CD"] = 0, + }, + [56] = { + ["X"] = 34.36, + ["Y"] = 51.55, + ["CD"] = 0, + }, + [57] = { + ["X"] = 33.41, + ["Y"] = 47.94, + ["CD"] = 0, + }, + [58] = { + ["X"] = 33.44, + ["Y"] = 44.86, + ["CD"] = 0, + }, + [59] = { + ["X"] = 31.25, + ["Y"] = 9.46, + ["CD"] = 0, + }, + [60] = { + ["X"] = 69.25, + ["Y"] = 61.49, + ["CD"] = 0, + }, + [61] = { + ["X"] = 58.41, + ["Y"] = 41.84, + ["CD"] = 0, + }, + [62] = { + ["X"] = 65.12, + ["Y"] = 38.6, + ["CD"] = 0, + }, + [63] = { + ["X"] = 59.11, + ["Y"] = 49.07, + ["CD"] = 0, + }, + [64] = { + ["X"] = 56.77, + ["Y"] = 45.01, + ["CD"] = 0, + }, + [65] = { + ["X"] = 56.43, + ["Y"] = 49.48, + ["CD"] = 0, + }, + [66] = { + ["X"] = 33.54, + ["Y"] = 51.74, + ["CD"] = 0, + }, + [67] = { + ["X"] = 47.33, + ["Y"] = 28.88, + ["CD"] = 0, + }, + [68] = { + ["X"] = 43.34, + ["Y"] = 24.73, + ["CD"] = 0, + }, + [69] = { + ["X"] = 42.73, + ["Y"] = 24.82, + ["CD"] = 0, + }, + [70] = { + ["X"] = 40.48, + ["Y"] = 16.13, + ["CD"] = 0, + }, + [71] = { + ["X"] = 40.25, + ["Y"] = 30.54, + ["CD"] = 0, + }, + [72] = { + ["X"] = 40.13, + ["Y"] = 34.03, + ["CD"] = 0, + }, + [73] = { + ["X"] = 40.77, + ["Y"] = 38.37, + ["CD"] = 0, + }, + [74] = { + ["X"] = 39.24, + ["Y"] = 40.02, + ["CD"] = 0, + }, + [75] = { + ["X"] = 41.77, + ["Y"] = 41.49, + ["CD"] = 0, + }, + [76] = { + ["X"] = 25.56, + ["Y"] = 34.6, + ["CD"] = 0, + }, + [77] = { + ["X"] = 20.75, + ["Y"] = 31, + ["CD"] = 0, + }, + [78] = { + ["X"] = 20.51, + ["Y"] = 32.3, + ["CD"] = 0, + }, + [79] = { + ["X"] = 18.49, + ["Y"] = 32.63, + ["CD"] = 0, + }, + [80] = { + ["X"] = 19.37, + ["Y"] = 34.52, + ["CD"] = 0, + }, + [81] = { + ["X"] = 17.33, + ["Y"] = 36.15, + ["CD"] = 0, + }, + [82] = { + ["X"] = 17.71, + ["Y"] = 39.94, + ["CD"] = 0, + }, + [83] = { + ["X"] = 16.38, + ["Y"] = 42.46, + ["CD"] = 0, + }, + [84] = { + ["X"] = 18.42, + ["Y"] = 41.87, + ["CD"] = 0, + }, + [85] = { + ["X"] = 19.6, + ["Y"] = 38.5, + ["CD"] = 0, + }, + [86] = { + ["X"] = 22.1, + ["Y"] = 36.48, + ["CD"] = 0, + }, + [87] = { + ["X"] = 27.33, + ["Y"] = 39.01, + ["CD"] = 0, + }, + [88] = { + ["X"] = 26.78, + ["Y"] = 40.82, + ["CD"] = 0, + }, + [89] = { + ["X"] = 26.56, + ["Y"] = 45.72, + ["CD"] = 0, + }, + [90] = { + ["X"] = 24.46, + ["Y"] = 48.15, + ["CD"] = 0, + }, + [91] = { + ["X"] = 32.32, + ["Y"] = 47.09, + ["CD"] = 0, + }, + [92] = { + ["X"] = 29.16, + ["Y"] = 44.53, + ["CD"] = 0, + }, + [93] = { + ["X"] = 30, + ["Y"] = 49.89, + ["CD"] = 0, + }, + [94] = { + ["X"] = 28.39, + ["Y"] = 40.18, + ["CD"] = 0, + }, + [95] = { + ["X"] = 25.95, + ["Y"] = 45.19, + ["CD"] = 0, + }, + [96] = { + ["X"] = 26.26, + ["Y"] = 39.38, + ["CD"] = 0, + }, + [97] = { + ["X"] = 25.49, + ["Y"] = 38.93, + ["CD"] = 0, + }, + [98] = { + ["X"] = 23.15, + ["Y"] = 37.72, + ["CD"] = 0, + }, + [99] = { + ["X"] = 16.41, + ["Y"] = 23.78, + ["CD"] = 0, + }, + [100] = { + ["X"] = 49, + ["Y"] = 41.35, + ["CD"] = 0, + }, + [101] = { + ["X"] = 49.79, + ["Y"] = 40.3, + ["CD"] = 0, + }, + [102] = { + ["X"] = 58.99, + ["Y"] = 42.05, + ["CD"] = 0, + }, + [103] = { + ["X"] = 60.11, + ["Y"] = 46.19, + ["CD"] = 0, + }, + [104] = { + ["X"] = 64.2, + ["Y"] = 38.74, + ["CD"] = 0, + }, + [105] = { + ["X"] = 66.39, + ["Y"] = 45.24, + ["CD"] = 0, + }, + [106] = { + ["X"] = 65.32, + ["Y"] = 46.64, + ["CD"] = 0, + }, + [107] = { + ["X"] = 64.5, + ["Y"] = 54.5, + ["CD"] = 0, + }, + [108] = { + ["X"] = 69.71, + ["Y"] = 59.98, + ["CD"] = 0, + }, + [109] = { + ["X"] = 19.07, + ["Y"] = 37.54, + ["CD"] = 0, + }, + [110] = { + ["X"] = 17.42, + ["Y"] = 32.72, + ["CD"] = 0, + }, + [111] = { + ["X"] = 17.21, + ["Y"] = 41.12, + ["CD"] = 0, + }, + [112] = { + ["X"] = 16.86, + ["Y"] = 43.6, + ["CD"] = 0, + }, + [113] = { + ["X"] = 16.26, + ["Y"] = 48.14, + ["CD"] = 0, + }, + [114] = { + ["X"] = 19.16, + ["Y"] = 48.74, + ["CD"] = 0, + }, + [115] = { + ["X"] = 22.39, + ["Y"] = 51.94, + ["CD"] = 0, + }, + [116] = { + ["X"] = 29.46, + ["Y"] = 92.26, + ["CD"] = 0, + }, + [117] = { + ["X"] = 39.03, + ["Y"] = 83.7, + ["CD"] = 0, + }, + [118] = { + ["X"] = 39.34, + ["Y"] = 86.92, + ["CD"] = 0, + }, + [119] = { + ["X"] = 36.92, + ["Y"] = 89.37, + ["CD"] = 0, + }, + [120] = { + ["X"] = 33.51, + ["Y"] = 90.03, + ["CD"] = 0, + }, + [121] = { + ["X"] = 32.72, + ["Y"] = 91.79, + ["CD"] = 0, + }, + [122] = { + ["X"] = 31.4, + ["Y"] = 53.54, + ["CD"] = 0, + }, + [123] = { + ["X"] = 41.7, + ["Y"] = 77.86, + ["CD"] = 0, + }, + [124] = { + ["X"] = 41.23, + ["Y"] = 65.76, + ["CD"] = 0, + }, + [125] = { + ["X"] = 42.32, + ["Y"] = 49.6, + ["CD"] = 0, + }, + [126] = { + ["X"] = 18.77, + ["Y"] = 21.58, + ["CD"] = 0, + }, + [127] = { + ["X"] = 31.01, + ["Y"] = 27.5, + ["CD"] = 0, + }, + [128] = { + ["X"] = 37.56, + ["Y"] = 28.08, + ["CD"] = 0, + }, + [129] = { + ["X"] = 39.7, + ["Y"] = 14.87, + ["CD"] = 0, + }, + [130] = { + ["X"] = 38.42, + ["Y"] = 14.58, + ["CD"] = 0, + }, + [131] = { + ["X"] = 30.29, + ["Y"] = 8.71, + ["CD"] = 0, + }, + [132] = { + ["X"] = 29.37, + ["Y"] = 14.46, + ["CD"] = 0, + }, + [133] = { + ["X"] = 30.56, + ["Y"] = 14.7, + ["CD"] = 0, + }, + [134] = { + ["X"] = 32.07, + ["Y"] = 17.45, + ["CD"] = 0, + }, + [135] = { + ["X"] = 32.33, + ["Y"] = 19.52, + ["CD"] = 0, + }, + [136] = { + ["X"] = 33.99, + ["Y"] = 18.93, + ["CD"] = 0, + }, + [137] = { + ["X"] = 33.25, + ["Y"] = 14.84, + ["CD"] = 0, + }, + [138] = { + ["X"] = 35, + ["Y"] = 13.71, + ["CD"] = 0, + }, + [139] = { + ["X"] = 35.59, + ["Y"] = 18.08, + ["CD"] = 0, + }, + [140] = { + ["X"] = 35.61, + ["Y"] = 21.63, + ["CD"] = 0, + }, + [141] = { + ["X"] = 38.83, + ["Y"] = 26.26, + ["CD"] = 0, + }, + [142] = { + ["X"] = 41.23, + ["Y"] = 25.46, + ["CD"] = 0, + }, + [143] = { + ["X"] = 57.44, + ["Y"] = 45.46, + ["CD"] = 0, + }, + [144] = { + ["X"] = 68.31, + ["Y"] = 58.27, + ["CD"] = 0, + }, + [145] = { + ["X"] = 63.96, + ["Y"] = 50.18, + ["CD"] = 0, + }, + [146] = { + ["X"] = 64.22, + ["Y"] = 47.41, + ["CD"] = 0, + }, + [147] = { + ["X"] = 66.89, + ["Y"] = 42.57, + ["CD"] = 0, + }, + [148] = { + ["X"] = 83.41, + ["Y"] = 58.57, + ["CD"] = 0, + }, + [149] = { + ["X"] = 70.07, + ["Y"] = 61.17, + ["CD"] = 0, + }, + [150] = { + ["X"] = 70.15, + ["Y"] = 64.11, + ["CD"] = 0, + }, + [151] = { + ["X"] = 61.37, + ["Y"] = 51.89, + ["CD"] = 0, + }, + [152] = { + ["X"] = 32.72, + ["Y"] = 43.86, + ["CD"] = 0, + }, + [153] = { + ["X"] = 26.37, + ["Y"] = 46.84, + ["CD"] = 0, + }, + [154] = { + ["X"] = 24.62, + ["Y"] = 44.43, + ["CD"] = 0, + }, + [155] = { + ["X"] = 23.77, + ["Y"] = 47.26, + ["CD"] = 0, + }, + [156] = { + ["X"] = 20.37, + ["Y"] = 45.63, + ["CD"] = 0, + }, + [157] = { + ["X"] = 20.94, + ["Y"] = 52.22, + ["CD"] = 0, + }, + [158] = { + ["X"] = 22.54, + ["Y"] = 60.01, + ["CD"] = 0, + }, + [159] = { + ["X"] = 26.15, + ["Y"] = 48.01, + ["CD"] = 0, + }, + [160] = { + ["X"] = 35.27, + ["Y"] = 49.54, + ["CD"] = 0, + }, + [161] = { + ["X"] = 56.75, + ["Y"] = 43.49, + ["CD"] = 0, + }, + [162] = { + ["X"] = 45.91, + ["Y"] = 39.37, + ["CD"] = 0, + }, + [163] = { + ["X"] = 37.77, + ["Y"] = 36.78, + ["CD"] = 0, + }, + [164] = { + ["X"] = 38.42, + ["Y"] = 40.33, + ["CD"] = 0, + }, + [165] = { + ["X"] = 36.86, + ["Y"] = 40.44, + ["CD"] = 0, + }, + [166] = { + ["X"] = 40.51, + ["Y"] = 49.16, + ["CD"] = 0, + }, + [167] = { + ["X"] = 28.02, + ["Y"] = 37.01, + ["CD"] = 0, + }, + [168] = { + ["X"] = 30.02, + ["Y"] = 29.11, + ["CD"] = 0, + }, + [169] = { + ["X"] = 25.06, + ["Y"] = 34.96, + ["CD"] = 0, + }, + [170] = { + ["X"] = 32.03, + ["Y"] = 34.06, + ["CD"] = 0, + }, + [171] = { + ["X"] = 19.5, + ["Y"] = 20.92, + ["CD"] = 0, + }, + [172] = { + ["X"] = 19.89, + ["Y"] = 22.09, + ["CD"] = 0, + }, + [173] = { + ["X"] = 17.85, + ["Y"] = 23.72, + ["CD"] = 0, + }, + [174] = { + ["X"] = 27.79, + ["Y"] = 31.22, + ["CD"] = 0, + }, + [175] = { + ["X"] = 28.22, + ["Y"] = 29.91, + ["CD"] = 0, + }, + [176] = { + ["X"] = 30.4, + ["Y"] = 30.73, + ["CD"] = 0, + }, + [177] = { + ["X"] = 30.98, + ["Y"] = 29.01, + ["CD"] = 0, + }, + [178] = { + ["X"] = 33.48, + ["Y"] = 24.88, + ["CD"] = 0, + }, + [179] = { + ["X"] = 29.81, + ["Y"] = 26.02, + ["CD"] = 0, + }, + [180] = { + ["X"] = 31.68, + ["Y"] = 23.23, + ["CD"] = 0, + }, + [181] = { + ["X"] = 29.51, + ["Y"] = 34.53, + ["CD"] = 0, + }, + [182] = { + ["X"] = 30.87, + ["Y"] = 31.18, + ["CD"] = 0, + }, + [183] = { + ["X"] = 18.62, + ["Y"] = 39.57, + ["CD"] = 0, + }, + [184] = { + ["X"] = 16.63, + ["Y"] = 40.97, + ["CD"] = 0, + }, + [185] = { + ["X"] = 65.55, + ["Y"] = 41.61, + ["CD"] = 0, + }, + [186] = { + ["X"] = 39.76, + ["Y"] = 81.81, + ["CD"] = 0, + }, + [187] = { + ["X"] = 39.61, + ["Y"] = 82.6, + ["CD"] = 0, + }, + [188] = { + ["X"] = 34.98, + ["Y"] = 60.06, + ["CD"] = 0, + }, + [189] = { + ["X"] = 28.25, + ["Y"] = 38.53, + ["CD"] = 0, + }, + [190] = { + ["X"] = 27.08, + ["Y"] = 36.05, + ["CD"] = 0, + }, + [191] = { + ["X"] = 26.86, + ["Y"] = 33.37, + ["CD"] = 0, + }, + [192] = { + ["X"] = 23.52, + ["Y"] = 29.91, + ["CD"] = 0, + }, + [193] = { + ["X"] = 22.11, + ["Y"] = 31.32, + ["CD"] = 0, + }, + [194] = { + ["X"] = 19.89, + ["Y"] = 29.56, + ["CD"] = 0, + }, + [195] = { + ["X"] = 19.46, + ["Y"] = 24.71, + ["CD"] = 0, + }, + [196] = { + ["X"] = 18.28, + ["Y"] = 23.88, + ["CD"] = 0, + }, + [197] = { + ["X"] = 18.65, + ["Y"] = 22.03, + ["CD"] = 0, + }, + [198] = { + ["X"] = 18.44, + ["Y"] = 29.37, + ["CD"] = 0, + }, + [199] = { + ["X"] = 18.8, + ["Y"] = 34.21, + ["CD"] = 0, + }, + [200] = { + ["X"] = 16.54, + ["Y"] = 36.58, + ["CD"] = 0, + }, + [201] = { + ["X"] = 15.1, + ["Y"] = 37.18, + ["CD"] = 0, + }, + [202] = { + ["X"] = 15.82, + ["Y"] = 43.16, + ["CD"] = 0, + }, + [203] = { + ["X"] = 17.16, + ["Y"] = 44.35, + ["CD"] = 0, + }, + [204] = { + ["X"] = 16.96, + ["Y"] = 46.53, + ["CD"] = 0, + }, + [205] = { + ["X"] = 16.74, + ["Y"] = 47.66, + ["CD"] = 0, + }, + [206] = { + ["X"] = 17.09, + ["Y"] = 49.29, + ["CD"] = 0, + }, + [207] = { + ["X"] = 19.91, + ["Y"] = 54.45, + ["CD"] = 0, + }, + [208] = { + ["X"] = 22.08, + ["Y"] = 56.33, + ["CD"] = 0, + }, + [209] = { + ["X"] = 25.63, + ["Y"] = 52.48, + ["CD"] = 0, + }, + [210] = { + ["X"] = 30.72, + ["Y"] = 50.96, + ["CD"] = 0, + }, + [211] = { + ["X"] = 30.33, + ["Y"] = 47.3, + ["CD"] = 0, + }, + [212] = { + ["X"] = 48.81, + ["Y"] = 47.54, + ["CD"] = 0, + }, + [213] = { + ["X"] = 56.22, + ["Y"] = 48.62, + ["CD"] = 0, + }, + [214] = { + ["X"] = 64.92, + ["Y"] = 49.18, + ["CD"] = 0, + }, + [215] = { + ["X"] = 61.44, + ["Y"] = 50.95, + ["CD"] = 0, + }, + [216] = { + ["X"] = 36.79, + ["Y"] = 54.66, + ["CD"] = 0, + }, + [217] = { + ["X"] = 35.5, + ["Y"] = 50.36, + ["CD"] = 0, + }, + [218] = { + ["X"] = 39.32, + ["Y"] = 54.43, + ["CD"] = 0, + }, + [219] = { + ["X"] = 40.41, + ["Y"] = 73, + ["CD"] = 0, + }, + [220] = { + ["X"] = 41.04, + ["Y"] = 81.46, + ["CD"] = 0, + }, + [221] = { + ["X"] = 39.95, + ["Y"] = 84.73, + ["CD"] = 0, + }, + [222] = { + ["X"] = 38.4, + ["Y"] = 85.72, + ["CD"] = 0, + }, + [223] = { + ["X"] = 36.71, + ["Y"] = 59.7, + ["CD"] = 0, + }, + [224] = { + ["X"] = 34.82, + ["Y"] = 56.58, + ["CD"] = 0, + }, + [225] = { + ["X"] = 33.71, + ["Y"] = 59.85, + ["CD"] = 0, + }, + [226] = { + ["X"] = 34.06, + ["Y"] = 55.75, + ["CD"] = 0, + }, + [227] = { + ["X"] = 34.31, + ["Y"] = 57.33, + ["CD"] = 0, + }, + [228] = { + ["X"] = 37.68, + ["Y"] = 62.77, + ["CD"] = 0, + }, + [229] = { + ["X"] = 35.41, + ["Y"] = 54.68, + ["CD"] = 0, + }, + [230] = { + ["X"] = 37.52, + ["Y"] = 59.08, + ["CD"] = 0, + }, + [231] = { + ["X"] = 43.46, + ["Y"] = 60.61, + ["CD"] = 0, + }, + [232] = { + ["X"] = 35.76, + ["Y"] = 60.63, + ["CD"] = 0, + }, + [233] = { + ["X"] = 34.78, + ["Y"] = 61.94, + ["CD"] = 0, + }, + [234] = { + ["X"] = 45.27, + ["Y"] = 56.2, + ["CD"] = 0, + }, + [235] = { + ["X"] = 34.17, + ["Y"] = 48.76, + ["CD"] = 0, + }, + [236] = { + ["X"] = 43.64, + ["Y"] = 48.63, + ["CD"] = 0, + }, + [237] = { + ["X"] = 61.44, + ["Y"] = 41.76, + ["CD"] = 0, + }, + [238] = { + ["X"] = 63.63, + ["Y"] = 45.02, + ["CD"] = 0, + }, + [239] = { + ["X"] = 65.11, + ["Y"] = 50.4, + ["CD"] = 0, + }, + [240] = { + ["X"] = 65.37, + ["Y"] = 48.57, + ["CD"] = 0, + }, + [241] = { + ["X"] = 81.14, + ["Y"] = 56.47, + ["CD"] = 0, + }, + [242] = { + ["X"] = 65.83, + ["Y"] = 55.28, + ["CD"] = 0, + }, + [243] = { + ["X"] = 66.85, + ["Y"] = 54.65, + ["CD"] = 0, + }, + [244] = { + ["X"] = 69.17, + ["Y"] = 58.17, + ["CD"] = 0, + }, + [245] = { + ["X"] = 59.14, + ["Y"] = 47.81, + ["CD"] = 0, + }, + [246] = { + ["X"] = 48.38, + ["Y"] = 49.33, + ["CD"] = 0, + }, + [247] = { + ["X"] = 39.76, + ["Y"] = 57.54, + ["CD"] = 0, + }, + [248] = { + ["X"] = 36.28, + ["Y"] = 53.87, + ["CD"] = 0, + }, + [249] = { + ["X"] = 31.05, + ["Y"] = 47.28, + ["CD"] = 0, + }, + [250] = { + ["X"] = 31.17, + ["Y"] = 38.53, + ["CD"] = 0, + }, + [251] = { + ["X"] = 31.24, + ["Y"] = 36.76, + ["CD"] = 0, + }, + [252] = { + ["X"] = 32.9, + ["Y"] = 36.99, + ["CD"] = 0, + }, + [253] = { + ["X"] = 36.43, + ["Y"] = 43.67, + ["CD"] = 0, + }, + [254] = { + ["X"] = 40.71, + ["Y"] = 41.71, + ["CD"] = 0, + }, + [255] = { + ["X"] = 47.22, + ["Y"] = 39.89, + ["CD"] = 0, + }, + [256] = { + ["X"] = 46.02, + ["Y"] = 39.82, + ["CD"] = 0, + }, + [257] = { + ["X"] = 51.52, + ["Y"] = 39.51, + ["CD"] = 0, + }, + [258] = { + ["X"] = 47.28, + ["Y"] = 31.95, + ["CD"] = 0, + }, + [259] = { + ["X"] = 46.79, + ["Y"] = 29.6, + ["CD"] = 0, + }, + [260] = { + ["X"] = 49.21, + ["Y"] = 35.3, + ["CD"] = 0, + }, + [261] = { + ["X"] = 46.79, + ["Y"] = 28.31, + ["CD"] = 0, + }, + [262] = { + ["X"] = 47.03, + ["Y"] = 32.84, + ["CD"] = 0, + }, + [263] = { + ["X"] = 44.54, + ["Y"] = 26.85, + ["CD"] = 0, + }, + [264] = { + ["X"] = 34.55, + ["Y"] = 42.86, + ["CD"] = 0, + }, + [265] = { + ["X"] = 32.17, + ["Y"] = 42.16, + ["CD"] = 0, + }, + [266] = { + ["X"] = 29.3, + ["Y"] = 38.43, + ["CD"] = 0, + }, + [267] = { + ["X"] = 28.53, + ["Y"] = 35.72, + ["CD"] = 0, + }, + [268] = { + ["X"] = 26, + ["Y"] = 36.58, + ["CD"] = 0, + }, + [269] = { + ["X"] = 22.09, + ["Y"] = 33.07, + ["CD"] = 0, + }, + [270] = { + ["X"] = 19.48, + ["Y"] = 39.91, + ["CD"] = 0, + }, + [271] = { + ["X"] = 23.65, + ["Y"] = 39.58, + ["CD"] = 0, + }, + [272] = { + ["X"] = 26.73, + ["Y"] = 70.09, + ["CD"] = 0, + }, + [273] = { + ["X"] = 26.47, + ["Y"] = 23.31, + ["CD"] = 0, + }, + [274] = { + ["X"] = 26.75, + ["Y"] = 25.15, + ["CD"] = 0, + }, + [275] = { + ["X"] = 17.62, + ["Y"] = 23.05, + ["CD"] = 0, + }, + [276] = { + ["X"] = 21.23, + ["Y"] = 20.19, + ["CD"] = 0, + }, + [277] = { + ["X"] = 18.05, + ["Y"] = 27.9, + ["CD"] = 0, + }, + [278] = { + ["X"] = 24.23, + ["Y"] = 33.84, + ["CD"] = 0, + }, + [279] = { + ["X"] = 28.11, + ["Y"] = 32.96, + ["CD"] = 0, + }, + [280] = { + ["X"] = 31.04, + ["Y"] = 32.91, + ["CD"] = 0, + }, + [281] = { + ["X"] = 31.01, + ["Y"] = 33.51, + ["CD"] = 0, + }, + [282] = { + ["X"] = 30.66, + ["Y"] = 33.03, + ["CD"] = 0, + }, + [283] = { + ["X"] = 35.73, + ["Y"] = 28.25, + ["CD"] = 0, + }, + [284] = { + ["X"] = 36.92, + ["Y"] = 25.87, + ["CD"] = 0, + }, + [285] = { + ["X"] = 37.87, + ["Y"] = 25.92, + ["CD"] = 0, + }, + [286] = { + ["X"] = 40.23, + ["Y"] = 24.81, + ["CD"] = 0, + }, + [287] = { + ["X"] = 26.06, + ["Y"] = 37.05, + ["CD"] = 0, + }, + [288] = { + ["X"] = 59.27, + ["Y"] = 46.57, + ["CD"] = 0, + }, + [289] = { + ["X"] = 60.04, + ["Y"] = 43.43, + ["CD"] = 0, + }, + [290] = { + ["X"] = 60.17, + ["Y"] = 40.92, + ["CD"] = 0, + }, + [291] = { + ["X"] = 34.94, + ["Y"] = 44.87, + ["CD"] = 0, + }, + [292] = { + ["X"] = 62.57, + ["Y"] = 50.61, + ["CD"] = 0, + }, + [293] = { + ["X"] = 64.35, + ["Y"] = 42.6, + ["CD"] = 0, + }, + [294] = { + ["X"] = 59.11, + ["Y"] = 50.7, + ["CD"] = 0, + }, + [295] = { + ["X"] = 39.97, + ["Y"] = 54.42, + ["CD"] = 0, + }, + [296] = { + ["X"] = 33.09, + ["Y"] = 46.12, + ["CD"] = 0, + }, + [297] = { + ["X"] = 33.06, + ["Y"] = 48.52, + ["CD"] = 0, + }, + [298] = { + ["X"] = 28.8, + ["Y"] = 38.56, + ["CD"] = 0, + }, + [299] = { + ["X"] = 29.06, + ["Y"] = 33.31, + ["CD"] = 0, + }, + [300] = { + ["X"] = 18.27, + ["Y"] = 40.57, + ["CD"] = 0, + }, + [301] = { + ["X"] = 22.74, + ["Y"] = 43.77, + ["CD"] = 0, + }, + [302] = { + ["X"] = 24.63, + ["Y"] = 56.49, + ["CD"] = 0, + }, + [303] = { + ["X"] = 26.8, + ["Y"] = 69.62, + ["CD"] = 0, + }, + [304] = { + ["X"] = 20.4, + ["Y"] = 43.91, + ["CD"] = 0, + }, + [305] = { + ["X"] = 22.81, + ["Y"] = 48.63, + ["CD"] = 0, + }, + [306] = { + ["X"] = 24.55, + ["Y"] = 46.05, + ["CD"] = 0, + }, + [307] = { + ["X"] = 23.59, + ["Y"] = 44.45, + ["CD"] = 0, + }, + [308] = { + ["X"] = 24.7, + ["Y"] = 46.9, + ["CD"] = 0, + }, + [309] = { + ["X"] = 25.91, + ["Y"] = 44.49, + ["CD"] = 0, + }, + [310] = { + ["X"] = 28.25, + ["Y"] = 46.15, + ["CD"] = 0, + }, + [311] = { + ["X"] = 21.38, + ["Y"] = 25.51, + ["CD"] = 0, + }, + [312] = { + ["X"] = 21.21, + ["Y"] = 30.56, + ["CD"] = 0, + }, + [313] = { + ["X"] = 18.91, + ["Y"] = 25.55, + ["CD"] = 0, + }, + [314] = { + ["X"] = 18.42, + ["Y"] = 23.05, + ["CD"] = 0, + }, + [315] = { + ["X"] = 17.12, + ["Y"] = 26.35, + ["CD"] = 0, + }, + [316] = { + ["X"] = 18.92, + ["Y"] = 22.36, + ["CD"] = 0, + }, + [317] = { + ["X"] = 17.04, + ["Y"] = 23.1, + ["CD"] = 0, + }, + [318] = { + ["X"] = 16.4, + ["Y"] = 21.91, + ["CD"] = 0, + }, + [319] = { + ["X"] = 18.47, + ["Y"] = 20.31, + ["CD"] = 0, + }, + [320] = { + ["X"] = 20.21, + ["Y"] = 21.06, + ["CD"] = 0, + }, + [321] = { + ["X"] = 20.67, + ["Y"] = 28.36, + ["CD"] = 0, + }, + [322] = { + ["X"] = 24.44, + ["Y"] = 34.21, + ["CD"] = 0, + }, + [323] = { + ["X"] = 25.18, + ["Y"] = 28.28, + ["CD"] = 0, + }, + [324] = { + ["X"] = 25.8, + ["Y"] = 25.07, + ["CD"] = 0, + }, + [325] = { + ["X"] = 27.32, + ["Y"] = 22.42, + ["CD"] = 0, + }, + [326] = { + ["X"] = 26.64, + ["Y"] = 18.05, + ["CD"] = 0, + }, + [327] = { + ["X"] = 30.89, + ["Y"] = 16.02, + ["CD"] = 0, + }, + [328] = { + ["X"] = 31.63, + ["Y"] = 16.56, + ["CD"] = 0, + }, + [329] = { + ["X"] = 33.53, + ["Y"] = 20.08, + ["CD"] = 0, + }, + [330] = { + ["X"] = 32.27, + ["Y"] = 22.89, + ["CD"] = 0, + }, + [331] = { + ["X"] = 30.12, + ["Y"] = 22.36, + ["CD"] = 0, + }, + [332] = { + ["X"] = 34.88, + ["Y"] = 19.76, + ["CD"] = 0, + }, + [333] = { + ["X"] = 35.22, + ["Y"] = 18.59, + ["CD"] = 0, + }, + [334] = { + ["X"] = 30, + ["Y"] = 13.89, + ["CD"] = 0, + }, + [335] = { + ["X"] = 35.98, + ["Y"] = 13.64, + ["CD"] = 0, + }, + [336] = { + ["X"] = 38.41, + ["Y"] = 13.36, + ["CD"] = 0, + }, + [337] = { + ["X"] = 40.2, + ["Y"] = 17.02, + ["CD"] = 0, + }, + [338] = { + ["X"] = 38.59, + ["Y"] = 25.27, + ["CD"] = 0, + }, + [339] = { + ["X"] = 37.32, + ["Y"] = 26.91, + ["CD"] = 0, + }, + [340] = { + ["X"] = 28.98, + ["Y"] = 37.05, + ["CD"] = 0, + }, + [341] = { + ["X"] = 29.18, + ["Y"] = 39.05, + ["CD"] = 0, + }, + [342] = { + ["X"] = 29.35, + ["Y"] = 41.15, + ["CD"] = 0, + }, + [343] = { + ["X"] = 45.19, + ["Y"] = 51.96, + ["CD"] = 0, + }, + [344] = { + ["X"] = 57.18, + ["Y"] = 49.94, + ["CD"] = 0, + }, + [345] = { + ["X"] = 59.66, + ["Y"] = 41.36, + ["CD"] = 0, + }, + [346] = { + ["X"] = 61.03, + ["Y"] = 43.36, + ["CD"] = 0, + }, + [347] = { + ["X"] = 49.52, + ["Y"] = 47.44, + ["CD"] = 0, + }, + [348] = { + ["X"] = 45.4, + ["Y"] = 47.92, + ["CD"] = 0, + }, + [349] = { + ["X"] = 48.52, + ["Y"] = 42.86, + ["CD"] = 0, + }, + [350] = { + ["X"] = 45.67, + ["Y"] = 33.19, + ["CD"] = 0, + }, + [351] = { + ["X"] = 50.55, + ["Y"] = 39.92, + ["CD"] = 0, + }, + [352] = { + ["X"] = 31.72, + ["Y"] = 11.15, + ["CD"] = 0, + }, + [353] = { + ["X"] = 41.5, + ["Y"] = 38.6, + ["CD"] = 0, + }, + [354] = { + ["X"] = 39.3, + ["Y"] = 53.64, + ["CD"] = 0, + }, + [355] = { + ["X"] = 57.38, + ["Y"] = 47.96, + ["CD"] = 0, + }, + [356] = { + ["X"] = 59.94, + ["Y"] = 42.44, + ["CD"] = 0, + }, + [357] = { + ["X"] = 62.25, + ["Y"] = 45.8, + ["CD"] = 0, + }, + [358] = { + ["X"] = 58.62, + ["Y"] = 49.54, + ["CD"] = 0, + }, + [359] = { + ["X"] = 66.53, + ["Y"] = 56.8, + ["CD"] = 0, + }, + [360] = { + ["X"] = 47.37, + ["Y"] = 55.17, + ["CD"] = 0, + }, + [361] = { + ["X"] = 40.54, + ["Y"] = 62.98, + ["CD"] = 0, + }, + [362] = { + ["X"] = 41.77, + ["Y"] = 73.16, + ["CD"] = 0, + }, + [363] = { + ["X"] = 36.65, + ["Y"] = 42.98, + ["CD"] = 0, + }, + [364] = { + ["X"] = 45.48, + ["Y"] = 27.74, + ["CD"] = 0, + }, + [365] = { + ["X"] = 48.54, + ["Y"] = 35.37, + ["CD"] = 0, + }, + [366] = { + ["X"] = 48.78, + ["Y"] = 42.77, + ["CD"] = 0, + }, + [367] = { + ["X"] = 65.14, + ["Y"] = 55.11, + ["CD"] = 0, + }, + [368] = { + ["X"] = 63.97, + ["Y"] = 51.76, + ["CD"] = 0, + }, + [369] = { + ["X"] = 62.78, + ["Y"] = 53.73, + ["CD"] = 0, + }, + [370] = { + ["X"] = 67.6, + ["Y"] = 58.65, + ["CD"] = 0, + }, + [371] = { + ["X"] = 70.65, + ["Y"] = 63.85, + ["CD"] = 0, + }, + [372] = { + ["X"] = 41.4, + ["Y"] = 61.02, + ["CD"] = 0, + }, + [373] = { + ["X"] = 30.71, + ["Y"] = 52.67, + ["CD"] = 0, + }, + [374] = { + ["X"] = 26.41, + ["Y"] = 53.86, + ["CD"] = 0, + }, + [375] = { + ["X"] = 23.03, + ["Y"] = 59.38, + ["CD"] = 0, + }, + [376] = { + ["X"] = 27.12, + ["Y"] = 69.02, + ["CD"] = 0, + }, + [377] = { + ["X"] = 17.88, + ["Y"] = 49.24, + ["CD"] = 0, + }, + [378] = { + ["X"] = 17.84, + ["Y"] = 47.18, + ["CD"] = 0, + }, + [379] = { + ["X"] = 18.67, + ["Y"] = 49.11, + ["CD"] = 0, + }, + [380] = { + ["X"] = 19.07, + ["Y"] = 44.96, + ["CD"] = 0, + }, + [381] = { + ["X"] = 22.96, + ["Y"] = 44.9, + ["CD"] = 0, + }, + }, +} +aura_env.cooldown = 600 +aura_env.wipeDistance = 50 +aura_env.angle = 0 +aura_env.hyp = 0 +aura_env.GetClosestHerb = function() + aura_env.minID = { + ["X"] = 0, + ["Y"] = 0, + ["D"] = 1000, + ["ID"] = 0 + } + local pX = GetPlayerMapPosition("player") or 0 + local pY = select(2, GetPlayerMapPosition("player")) or 0 + pX, pY = pX * 100, pY * 100 + if aura_env.herbs[GetCurrentMapAreaID()] then + for k, v in ipairs(aura_env.herbs[GetCurrentMapAreaID()]) do + local hX, hY, cd = aura_env.herbs[GetCurrentMapAreaID()][k]["X"], aura_env.herbs[GetCurrentMapAreaID()][k]["Y"], aura_env.herbs[GetCurrentMapAreaID()][k]["CD"] + if cd == 0 then + local X, Y = pX - hX, pY - hY + local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) + if hyp < aura_env.minID["D"] then + aura_env.minID["X"] = hX + aura_env.minID["Y"] = hY + aura_env.minID["D"] = hyp + aura_env.minID["ID"] = k + end + end + end + return aura_env.minID["ID"] + end +end +if WeakAuras.IsOptionsOpen() then DaveSniffsHerbs.HerbSniffer.CD = 0; DaveSniffsHerbs.HerbSniffer.NoCD = 200 end diff --git a/Complete Projects/Legion/Glowing Raid Frames.lua b/WeakAuras/Projects/Glowing Raid Frames.lua similarity index 97% rename from Complete Projects/Legion/Glowing Raid Frames.lua rename to WeakAuras/Projects/Glowing Raid Frames.lua index b733467..730990f 100644 --- a/Complete Projects/Legion/Glowing Raid Frames.lua +++ b/WeakAuras/Projects/Glowing Raid Frames.lua @@ -1,148 +1,148 @@ ---ID_UPDATED UPDATE_FRAME_GLOW -function(e, id) -if not aura_env.ticker then aura_env.ticker = C_Timer.NewTicker(0.1, function() WeakAuras.ScanEvents("UPDATE_FRAME_GLOW") end) end -if e ~= "ID_UPDATED" then - local hptable = {[1] = ["hp"] = 100000000000, ["id"] = 0, ["mhp"] = 0, ["php"] = 100} - if IsInRaid() then - for i = 1, GetNumGroupMembers() do - --if UnitHealthMax("raid" .. i) - UnitHealth("raid" .. i) > hptable.mhp then --Missing HP - if UnitHealth("raid" .. i) / UnitHealthMax("raid" .. i) < hptable.php then --% HP - if UnitHealth("raid" .. i) / UnitHealthMax("raid" .. i) < 0.5 and UnitHealth("raid" .. i) / UnitHealthMax("raid" .. i) > 0 then - hptable.hp = UnitHealth("raid" .. i) - hptable.mhp = UnitHealthMax("raid" .. i) - UnitHealth("raid" .. i) - hptable.php = UnitHealth("raid" .. i) / UnitHealthMax("raid" .. i) - hptable.id = i - hptable.name = UnitName("raid" .. i) - end - end - end - if hptable.id ~= aura_env.lastID then - WeakAuras.ScanEvents("ID_UPDATED", hptable.id) - aura_env.lastID = hptable.id - end - end -elseif e == "ID_UPDATED" then - if id ~= aura_env.glowingPlate and aura_env.glowingPlate > 0 then - ActionButton_HideOverlayGlow(aura_env.GetFrame("raid" .. aura_env.glowingPlate)) - end - if aura_env.GetFrame("raid" .. id) then - ActionButton_ShowOverlayGlow(aura_env.GetFrame("raid" .. id)) - aura_env.glowingPlate = id - end -end -end - ---INIT -if not aura_env.ticker then aura_env.ticker = C_Timer.NewTicker(0.1, function() WeakAuras.ScanEvents("UPDATE_FRAME_GLOW") end) end -aura_env.lastID = 0 -aura_env.glowingPlate = 0 - -local frame_priority = { - -- raid frames - [1] = "^Vd1", -- vuhdo - [2] = "^Healbot", -- healbot - [3] = "^GridLayout", -- grid - [4] = "^Grid2Layout", -- grid2 - [5] = "^ElvUF_RaidGroup", -- elv - [6] = "^oUF_bdGrid", -- bdgrid - [7] = "^oUF.*raid", -- generic oUF - [8] = "^LimeGroup", -- lime - [9] = "^SUFHeaderraid", -- suf - [10] = "^CompactRaid", -- blizz - -- party frames - [11] = "^SUFHeaderparty", --suf - [12] = "^ElvUF_PartyGroup", -- elv - [13] = "^oUF.*party", -- generic oUF - [14] = "^PitBull4_Groups_Party", -- pitbull4 - [15] = "^CompactParty", -- blizz - -- player frame - [16] = "^SUFUnitplayer", - [17] = "^PitBull4_Frames_Player", - [18] = "^ElvUF_Player", - [19] = "^oUF.*player", - [20] = "^PlayerFrame", -} - -WA_GetFramesCache = WA_GetFramesCache or {} -if not WA_GetFramesCacheListener then - WA_GetFramesCacheListener = CreateFrame("Frame") - local f = WA_GetFramesCacheListener - f:RegisterEvent("PLAYER_REGEN_DISABLED") - f:RegisterEvent("PLAYER_REGEN_ENABLED") - f:RegisterEvent("GROUP_ROSTER_UPDATE") - f:SetScript("OnEvent", function(self, event, ...) - WA_GetFramesCache = {} - end) -end - -local function GetFrames(target) - local function FindButtonsForUnit(frame, target) - local results = {} - if type(frame) == "table" and not frame:IsForbidden() then - local type = frame:GetObjectType() - if type == "Frame" or type == "Button" then - for _, child in ipairs({frame:GetChildren()}) do - for _, v in pairs(FindButtonsForUnit(child, target)) do - tinsert(results, v) - end - end - end - if type == "Button" then - local unit = frame:GetAttribute('unit') - if unit and frame:IsVisible() and frame:GetName() then - WA_GetFramesCache[frame] = unit - if UnitIsUnit(unit, target) then - -- print("F:", frame:GetName()) - tinsert(results, frame) - end - end - end - end - return results - end - - if not UnitExists(target) then - if type(target) == "string" and target:find("Player") then - target = select(6, GetPlayerInfoByGUID(target)) - else - return {} - end - end - - local results = {} - for frame, unit in pairs(WA_GetFramesCache) do - --print("from cache:", frame:GetName()) - if UnitIsUnit(unit, target) then - if frame:GetAttribute('unit') == unit then - tinsert(results, frame) - else - results = {} - break - end - end - end - - return #results > 0 and results or FindButtonsForUnit(UIParent, target) -end - -local isElvUI = IsAddOnLoaded("ElvUI") -local function WhyElvWhy(frame) - if isElvUI and frame and frame:GetName():find("^ElvUF_") and frame.Health then - return frame.Health - else - return frame - end -end - -function aura_env.GetFrame(target) - local frames = GetFrames(target) - if not frames then return nil end - for i = 1, #frame_priority do - for _, frame in pairs(frames) do - if (frame:GetName()):find(frame_priority[i]) then - return WhyElvWhy(frame) - end - end - end - return WhyElvWhy(frames[1]) -end +--ID_UPDATED UPDATE_FRAME_GLOW +function(e, id) +if not aura_env.ticker then aura_env.ticker = C_Timer.NewTicker(0.1, function() WeakAuras.ScanEvents("UPDATE_FRAME_GLOW") end) end +if e ~= "ID_UPDATED" then + local hptable = {[1] = ["hp"] = 100000000000, ["id"] = 0, ["mhp"] = 0, ["php"] = 100} + if IsInRaid() then + for i = 1, GetNumGroupMembers() do + --if UnitHealthMax("raid" .. i) - UnitHealth("raid" .. i) > hptable.mhp then --Missing HP + if UnitHealth("raid" .. i) / UnitHealthMax("raid" .. i) < hptable.php then --% HP + if UnitHealth("raid" .. i) / UnitHealthMax("raid" .. i) < 0.5 and UnitHealth("raid" .. i) / UnitHealthMax("raid" .. i) > 0 then + hptable.hp = UnitHealth("raid" .. i) + hptable.mhp = UnitHealthMax("raid" .. i) - UnitHealth("raid" .. i) + hptable.php = UnitHealth("raid" .. i) / UnitHealthMax("raid" .. i) + hptable.id = i + hptable.name = UnitName("raid" .. i) + end + end + end + if hptable.id ~= aura_env.lastID then + WeakAuras.ScanEvents("ID_UPDATED", hptable.id) + aura_env.lastID = hptable.id + end + end +elseif e == "ID_UPDATED" then + if id ~= aura_env.glowingPlate and aura_env.glowingPlate > 0 then + ActionButton_HideOverlayGlow(aura_env.GetFrame("raid" .. aura_env.glowingPlate)) + end + if aura_env.GetFrame("raid" .. id) then + ActionButton_ShowOverlayGlow(aura_env.GetFrame("raid" .. id)) + aura_env.glowingPlate = id + end +end +end + +--INIT +if not aura_env.ticker then aura_env.ticker = C_Timer.NewTicker(0.1, function() WeakAuras.ScanEvents("UPDATE_FRAME_GLOW") end) end +aura_env.lastID = 0 +aura_env.glowingPlate = 0 + +local frame_priority = { + -- raid frames + [1] = "^Vd1", -- vuhdo + [2] = "^Healbot", -- healbot + [3] = "^GridLayout", -- grid + [4] = "^Grid2Layout", -- grid2 + [5] = "^ElvUF_RaidGroup", -- elv + [6] = "^oUF_bdGrid", -- bdgrid + [7] = "^oUF.*raid", -- generic oUF + [8] = "^LimeGroup", -- lime + [9] = "^SUFHeaderraid", -- suf + [10] = "^CompactRaid", -- blizz + -- party frames + [11] = "^SUFHeaderparty", --suf + [12] = "^ElvUF_PartyGroup", -- elv + [13] = "^oUF.*party", -- generic oUF + [14] = "^PitBull4_Groups_Party", -- pitbull4 + [15] = "^CompactParty", -- blizz + -- player frame + [16] = "^SUFUnitplayer", + [17] = "^PitBull4_Frames_Player", + [18] = "^ElvUF_Player", + [19] = "^oUF.*player", + [20] = "^PlayerFrame", +} + +WA_GetFramesCache = WA_GetFramesCache or {} +if not WA_GetFramesCacheListener then + WA_GetFramesCacheListener = CreateFrame("Frame") + local f = WA_GetFramesCacheListener + f:RegisterEvent("PLAYER_REGEN_DISABLED") + f:RegisterEvent("PLAYER_REGEN_ENABLED") + f:RegisterEvent("GROUP_ROSTER_UPDATE") + f:SetScript("OnEvent", function(self, event, ...) + WA_GetFramesCache = {} + end) +end + +local function GetFrames(target) + local function FindButtonsForUnit(frame, target) + local results = {} + if type(frame) == "table" and not frame:IsForbidden() then + local type = frame:GetObjectType() + if type == "Frame" or type == "Button" then + for _, child in ipairs({frame:GetChildren()}) do + for _, v in pairs(FindButtonsForUnit(child, target)) do + tinsert(results, v) + end + end + end + if type == "Button" then + local unit = frame:GetAttribute('unit') + if unit and frame:IsVisible() and frame:GetName() then + WA_GetFramesCache[frame] = unit + if UnitIsUnit(unit, target) then + -- print("F:", frame:GetName()) + tinsert(results, frame) + end + end + end + end + return results + end + + if not UnitExists(target) then + if type(target) == "string" and target:find("Player") then + target = select(6, GetPlayerInfoByGUID(target)) + else + return {} + end + end + + local results = {} + for frame, unit in pairs(WA_GetFramesCache) do + --print("from cache:", frame:GetName()) + if UnitIsUnit(unit, target) then + if frame:GetAttribute('unit') == unit then + tinsert(results, frame) + else + results = {} + break + end + end + end + + return #results > 0 and results or FindButtonsForUnit(UIParent, target) +end + +local isElvUI = IsAddOnLoaded("ElvUI") +local function WhyElvWhy(frame) + if isElvUI and frame and frame:GetName():find("^ElvUF_") and frame.Health then + return frame.Health + else + return frame + end +end + +function aura_env.GetFrame(target) + local frames = GetFrames(target) + if not frames then return nil end + for i = 1, #frame_priority do + for _, frame in pairs(frames) do + if (frame:GetName()):find(frame_priority[i]) then + return WhyElvWhy(frame) + end + end + end + return WhyElvWhy(frames[1]) +end diff --git a/Complete Projects/Legion/Group Breakdown.lua b/WeakAuras/Projects/Group Breakdown.lua similarity index 97% rename from Complete Projects/Legion/Group Breakdown.lua rename to WeakAuras/Projects/Group Breakdown.lua index 08080dc..5e7aed9 100644 --- a/Complete Projects/Legion/Group Breakdown.lua +++ b/WeakAuras/Projects/Group Breakdown.lua @@ -1,76 +1,76 @@ -DISPLAY -function() - local dps = 0; local heal = 0; local tank = 0 - local dpsDead = 0; local healDead = 0; local tankDead = 0 - if IsInRaid("player") == true then - for i = 1, GetNumGroupMembers() do - if UnitGroupRolesAssigned("raid"..i) == "TANK" then - if UnitIsDeadOrGhost("raid"..i) then - tankDead = tankDead + 1 - else - tank = tank + 1 - end - end - if UnitGroupRolesAssigned("raid"..i) == "DAMAGER" then - if UnitIsDeadOrGhost("raid"..i) then - dpsDead = dpsDead + 1 - else - dps = dps + 1 - end - end - if UnitGroupRolesAssigned("raid"..i) == "HEALER" then - if UnitIsDeadOrGhost("raid"..i) then - healDead = healDead + 1 - else - heal = heal + 1 - end - end - end - else - for i = 1, GetNumGroupMembers() do - if UnitGroupRolesAssigned("party"..i) == "TANK" then - if UnitIsDeadOrGhost("party"..i) then - tankDead = tankDead + 1 - else - tank = tank + 1 - end - end - if UnitGroupRolesAssigned("party"..i) == "DAMAGER" then - if UnitIsDeadOrGhost("party"..i) then - dpsDead = dpsDead + 1 - else - dps = dps + 1 - end - end - if UnitGroupRolesAssigned("party"..i) == "HEALER" then - if UnitIsDeadOrGhost("party"..i) then - healDead = healDead + 1 - else - heal = heal + 1 - end - end - end - if UnitIsDeadOrGhost("player") then - if UnitGroupRolesAssigned("player") == "TANK" then - tankDead = tankDead + 1 - end - if UnitGroupRolesAssigned("player") == "DAMAGER" then - dpsDead = dpsDead + 1 - end - if UnitGroupRolesAssigned("player") == "HEALER" then - healDead = healDead + 1 - end - else - if UnitGroupRolesAssigned("player") == "TANK" then - tank = tank + 1 - end - if UnitGroupRolesAssigned("player") == "DAMAGER" then - dps = dps + 1 - end - if UnitGroupRolesAssigned("player") == "HEALER" then - heal = heal + 1 - end - end - end - return string.format("TANKS: %s \n HEALS: %s \n DPS: %s", tank, heal, dps) -end +DISPLAY +function() + local dps = 0; local heal = 0; local tank = 0 + local dpsDead = 0; local healDead = 0; local tankDead = 0 + if IsInRaid("player") == true then + for i = 1, GetNumGroupMembers() do + if UnitGroupRolesAssigned("raid"..i) == "TANK" then + if UnitIsDeadOrGhost("raid"..i) then + tankDead = tankDead + 1 + else + tank = tank + 1 + end + end + if UnitGroupRolesAssigned("raid"..i) == "DAMAGER" then + if UnitIsDeadOrGhost("raid"..i) then + dpsDead = dpsDead + 1 + else + dps = dps + 1 + end + end + if UnitGroupRolesAssigned("raid"..i) == "HEALER" then + if UnitIsDeadOrGhost("raid"..i) then + healDead = healDead + 1 + else + heal = heal + 1 + end + end + end + else + for i = 1, GetNumGroupMembers() do + if UnitGroupRolesAssigned("party"..i) == "TANK" then + if UnitIsDeadOrGhost("party"..i) then + tankDead = tankDead + 1 + else + tank = tank + 1 + end + end + if UnitGroupRolesAssigned("party"..i) == "DAMAGER" then + if UnitIsDeadOrGhost("party"..i) then + dpsDead = dpsDead + 1 + else + dps = dps + 1 + end + end + if UnitGroupRolesAssigned("party"..i) == "HEALER" then + if UnitIsDeadOrGhost("party"..i) then + healDead = healDead + 1 + else + heal = heal + 1 + end + end + end + if UnitIsDeadOrGhost("player") then + if UnitGroupRolesAssigned("player") == "TANK" then + tankDead = tankDead + 1 + end + if UnitGroupRolesAssigned("player") == "DAMAGER" then + dpsDead = dpsDead + 1 + end + if UnitGroupRolesAssigned("player") == "HEALER" then + healDead = healDead + 1 + end + else + if UnitGroupRolesAssigned("player") == "TANK" then + tank = tank + 1 + end + if UnitGroupRolesAssigned("player") == "DAMAGER" then + dps = dps + 1 + end + if UnitGroupRolesAssigned("player") == "HEALER" then + heal = heal + 1 + end + end + end + return string.format("TANKS: %s \n HEALS: %s \n DPS: %s", tank, heal, dps) +end diff --git a/Complete Projects/Legion/GuildRecap.lua b/WeakAuras/Projects/GuildRecap.lua similarity index 95% rename from Complete Projects/Legion/GuildRecap.lua rename to WeakAuras/Projects/GuildRecap.lua index 2a57a63..901e01a 100644 --- a/Complete Projects/Legion/GuildRecap.lua +++ b/WeakAuras/Projects/GuildRecap.lua @@ -1,39 +1,39 @@ ---GROUP_ROSTER_UPDATE -function(e) - local r = "raid" - if IsInRaid() == false then - r = "party" - end - for i = 1, GetNumGroupMembers() do - local n = r .. i - local pname = UnitName(n) - local gname = GetGuildInfo(n) - local grank = select(3, GetGuildInfo(n)) - --print(pname, gname, grank) - if not aura_env.playerList[pname] then - aura_env.playerList[pname] = { - ["guild"] = gname, - ["rank"] = grank, - } - end - end - DevTools_Dump(aura_env.playerList) - table.sort(aura_env.playerList) - DevTools_Dump(aura_env.playerList) - return true -end - ---DISPLAY -function() - local output = "" - for k,v in pairs(aura_env.playerList) do - output = k .. " " - if v.guild then - output = output .. v.guild .. " " .. v.rank .. "\n" - end - end - return output -end - ---INIT +--GROUP_ROSTER_UPDATE +function(e) + local r = "raid" + if IsInRaid() == false then + r = "party" + end + for i = 1, GetNumGroupMembers() do + local n = r .. i + local pname = UnitName(n) + local gname = GetGuildInfo(n) + local grank = select(3, GetGuildInfo(n)) + --print(pname, gname, grank) + if not aura_env.playerList[pname] then + aura_env.playerList[pname] = { + ["guild"] = gname, + ["rank"] = grank, + } + end + end + DevTools_Dump(aura_env.playerList) + table.sort(aura_env.playerList) + DevTools_Dump(aura_env.playerList) + return true +end + +--DISPLAY +function() + local output = "" + for k,v in pairs(aura_env.playerList) do + output = k .. " " + if v.guild then + output = output .. v.guild .. " " .. v.rank .. "\n" + end + end + return output +end + +--INIT aura_env.playerList = {} \ No newline at end of file diff --git a/Complete Projects/Legion/GuildWave.lua b/WeakAuras/Projects/GuildWave.lua similarity index 97% rename from Complete Projects/Legion/GuildWave.lua rename to WeakAuras/Projects/GuildWave.lua index 498a2a8..02e8878 100644 --- a/Complete Projects/Legion/GuildWave.lua +++ b/WeakAuras/Projects/GuildWave.lua @@ -1,24 +1,24 @@ ---NAME_PLATE_UNIT_ADDED GLOBAL_TICKER -function(e, u) - if e == "NAME_PLATE_UNIT_ADDED" then - local guildName, guildRankName = GetGuildInfo(u); - local uname = UnitName(u) - if uname and u and guildName and guildRankName and guildName == "Indecisive" and not aura_env.unitList[uname]then - --if guildRankName ~= "Trial" and guildName == "Indecisive" and not aura_env.unitList[u] and u then - DoEmote("PAT", u) - --DoEmote("HELLO", u) - aura_env.unitList[uname] = GetTime() + 600 - end - elseif e == "ONE_SECOND_TICK" then - for k, v in pairs(aura_env.unitList) do - if GetTime() > v then - aura_env.unitList[uname] = nil - end - end - end - --print(GetTime()) - --DevTools_Dump(aura_env.unitList) -end - ---INIT -aura_env.unitList = {} +--NAME_PLATE_UNIT_ADDED GLOBAL_TICKER +function(e, u) + if e == "NAME_PLATE_UNIT_ADDED" then + local guildName, guildRankName = GetGuildInfo(u); + local uname = UnitName(u) + if uname and u and guildName and guildRankName and guildName == "Indecisive" and not aura_env.unitList[uname]then + --if guildRankName ~= "Trial" and guildName == "Indecisive" and not aura_env.unitList[u] and u then + DoEmote("PAT", u) + --DoEmote("HELLO", u) + aura_env.unitList[uname] = GetTime() + 600 + end + elseif e == "ONE_SECOND_TICK" then + for k, v in pairs(aura_env.unitList) do + if GetTime() > v then + aura_env.unitList[uname] = nil + end + end + end + --print(GetTime()) + --DevTools_Dump(aura_env.unitList) +end + +--INIT +aura_env.unitList = {} diff --git a/Complete Projects/Legion/Hammers n Shields.lua b/WeakAuras/Projects/Hammers n Shields.lua similarity index 97% rename from Complete Projects/Legion/Hammers n Shields.lua rename to WeakAuras/Projects/Hammers n Shields.lua index cb0b2c9..9123752 100644 --- a/Complete Projects/Legion/Hammers n Shields.lua +++ b/WeakAuras/Projects/Hammers n Shields.lua @@ -1,23 +1,23 @@ ---SPELL_ACTIVATION_OVERLAY_GLOW_SHOW -function(_,ID) - if ID == 31935 then - CustomTrash.hammersnshields.shields = CustomTrash.hammersnshields.shields + 1 - end -end - ---COMBAT_LOG_EVENT_UNFILTERED -function(...) - local subevent = select(3, ...) - if subevent == "SPELL_CAST_SUCCESS" then - local caster = select(6, ...) - local spell = select(14, ...) - if caster == UnitName("player") and (spell == "Hammer of the Righteous" or spell == "Blessed Hammer") then - CustomTrash.hammersnshields.hammers = CustomTrash.hammersnshields.hammers + 1 - end - end -end - ---DISPLAY -function() - return CustomTrash.hammersnshields.shields .. " / " .. CustomTrash.hammersnshields.hammers .. " " .. CustomTrash.hammersnshields.shields / CustomTrash.hammersnshields.hammers +--SPELL_ACTIVATION_OVERLAY_GLOW_SHOW +function(_,ID) + if ID == 31935 then + CustomTrash.hammersnshields.shields = CustomTrash.hammersnshields.shields + 1 + end +end + +--COMBAT_LOG_EVENT_UNFILTERED +function(...) + local subevent = select(3, ...) + if subevent == "SPELL_CAST_SUCCESS" then + local caster = select(6, ...) + local spell = select(14, ...) + if caster == UnitName("player") and (spell == "Hammer of the Righteous" or spell == "Blessed Hammer") then + CustomTrash.hammersnshields.hammers = CustomTrash.hammersnshields.hammers + 1 + end + end +end + +--DISPLAY +function() + return CustomTrash.hammersnshields.shields .. " / " .. CustomTrash.hammersnshields.hammers .. " " .. CustomTrash.hammersnshields.shields / CustomTrash.hammersnshields.hammers end \ No newline at end of file diff --git a/Complete Projects/Legion/HealerDispels.lua b/WeakAuras/Projects/HealerDispels.lua similarity index 97% rename from Complete Projects/Legion/HealerDispels.lua rename to WeakAuras/Projects/HealerDispels.lua index 12d1090..c442b95 100644 --- a/Complete Projects/Legion/HealerDispels.lua +++ b/WeakAuras/Projects/HealerDispels.lua @@ -1,76 +1,76 @@ ---TSU ---COMBAT_LOG_EVENT_UNFILTERED GROUP_ROSTER_UPDATE -function(allstates, e, ...) - if e == "GROUP_ROSTER_UPDATE" then - for i = 1, GetNumGroupMembers() do - local u = "raid" .. i - if aura_env.healers[UnitName(u)] then aura_env.healers[UnitName(u)] = NULL end - -- if UnitGroupRolesAssigned(u) == "TANK" then - if UnitGroupRolesAssigned(u) == "HEALER" then - aura_env.healers[UnitName(u)] = true - end - for k,v in pairs(aura_env.healers) do - allstates[k] = { - show = true, - changed = true, - progressType = "static", - value = 0, - total = 100, - name = k, - class = select(3, UnitClass(k)), - } - end - end - --DevTools_Dump(allstates) - return true - elseif e == "COMBAT_LOG_EVENT_UNFILTERED" then - local se = select(2, ...) - if se == "SPELL_CAST_SUCCESS" then - local spellId = select(12, ...) - if aura_env.dispels[spellId] then - local caster = select(5, ...) - allstates[caster] = { - show = true, - changed = true, - progressType = "timed", - duration = 8, - expirationTime = GetTime() + 8, - name = caster, - class = select(3, UnitClass(caster)), - } - end - end - return true - end -end - ---ON SHOW -if aura_env.statee then - local class = aura_env.statee.class - aura_env.region.bar:SetForegroundColor(aura_env.classColor(class)) -end - ---INIT -aura_env.healers = {} -aura_env.dispels = { - [4987] = true, -- Cleanse - [88423] = true, -- Nature's Cure - [77130] = true, -- Purify Spirit - [115450] = true, -- Detox - -- [236186] = true, -- Tank dispel, testing -} -aura_env.classColor = function(class) - if class == 1 then return 0.78, 0.61, 0.43, 1 elseif - class == 2 then return 0.96, 0.55, 0.73, 1 elseif - class == 3 then return 0.67, 0.83, 0.45, 1 elseif - class == 4 then return 1, 0.96, 0.41, 1 elseif - class == 5 then return 1, 1, 1, 1 elseif - class == 6 then return 0.77, 0.12, 0.23, 1 elseif - class == 7 then return 0, 0.44, 0.87, 1 elseif - class == 8 then return 0.25, 0.78, 0.92, 1 elseif - class == 9 then return 0.53, 0.53, 0.93, 1 elseif - class == 10 then return 0, 1, 0.59, 1 elseif - class == 11 then return 1, 0.49, 0.04, 1 elseif - class == 12 then return 0.64, 0.19, 0.79, 1 else - return 1, 1, 1, 1 end +--TSU +--COMBAT_LOG_EVENT_UNFILTERED GROUP_ROSTER_UPDATE +function(allstates, e, ...) + if e == "GROUP_ROSTER_UPDATE" then + for i = 1, GetNumGroupMembers() do + local u = "raid" .. i + if aura_env.healers[UnitName(u)] then aura_env.healers[UnitName(u)] = NULL end + -- if UnitGroupRolesAssigned(u) == "TANK" then + if UnitGroupRolesAssigned(u) == "HEALER" then + aura_env.healers[UnitName(u)] = true + end + for k,v in pairs(aura_env.healers) do + allstates[k] = { + show = true, + changed = true, + progressType = "static", + value = 0, + total = 100, + name = k, + class = select(3, UnitClass(k)), + } + end + end + --DevTools_Dump(allstates) + return true + elseif e == "COMBAT_LOG_EVENT_UNFILTERED" then + local se = select(2, ...) + if se == "SPELL_CAST_SUCCESS" then + local spellId = select(12, ...) + if aura_env.dispels[spellId] then + local caster = select(5, ...) + allstates[caster] = { + show = true, + changed = true, + progressType = "timed", + duration = 8, + expirationTime = GetTime() + 8, + name = caster, + class = select(3, UnitClass(caster)), + } + end + end + return true + end +end + +--ON SHOW +if aura_env.statee then + local class = aura_env.statee.class + aura_env.region.bar:SetForegroundColor(aura_env.classColor(class)) +end + +--INIT +aura_env.healers = {} +aura_env.dispels = { + [4987] = true, -- Cleanse + [88423] = true, -- Nature's Cure + [77130] = true, -- Purify Spirit + [115450] = true, -- Detox + -- [236186] = true, -- Tank dispel, testing +} +aura_env.classColor = function(class) + if class == 1 then return 0.78, 0.61, 0.43, 1 elseif + class == 2 then return 0.96, 0.55, 0.73, 1 elseif + class == 3 then return 0.67, 0.83, 0.45, 1 elseif + class == 4 then return 1, 0.96, 0.41, 1 elseif + class == 5 then return 1, 1, 1, 1 elseif + class == 6 then return 0.77, 0.12, 0.23, 1 elseif + class == 7 then return 0, 0.44, 0.87, 1 elseif + class == 8 then return 0.25, 0.78, 0.92, 1 elseif + class == 9 then return 0.53, 0.53, 0.93, 1 elseif + class == 10 then return 0, 1, 0.59, 1 elseif + class == 11 then return 1, 0.49, 0.04, 1 elseif + class == 12 then return 0.64, 0.19, 0.79, 1 else + return 1, 1, 1, 1 end end \ No newline at end of file diff --git a/LegionWA/HealerRaidDanger/color.lua b/WeakAuras/Projects/HealerRaidDanger/color.lua similarity index 97% rename from LegionWA/HealerRaidDanger/color.lua rename to WeakAuras/Projects/HealerRaidDanger/color.lua index c39c6bf..af78f1c 100644 --- a/LegionWA/HealerRaidDanger/color.lua +++ b/WeakAuras/Projects/HealerRaidDanger/color.lua @@ -1,5 +1,5 @@ --- DevTools_Dump(aura_env.region) --- aura_env.region:SetParent(aura_env.state.frame) -aura_env.region:ClearAllPoints() -aura_env.region:SetPoint("TOPLEFT", aura_env.statee.frame.AuraWatch, "TOPLEFT", 0, 0) -aura_env.region:Show() +-- DevTools_Dump(aura_env.region) +-- aura_env.region:SetParent(aura_env.state.frame) +aura_env.region:ClearAllPoints() +aura_env.region:SetPoint("TOPLEFT", aura_env.statee.frame.AuraWatch, "TOPLEFT", 0, 0) +aura_env.region:Show() diff --git a/LegionWA/HealerRaidDanger/init.lua b/WeakAuras/Projects/HealerRaidDanger/init.lua similarity index 96% rename from LegionWA/HealerRaidDanger/init.lua rename to WeakAuras/Projects/HealerRaidDanger/init.lua index e7ae308..a10ffc6 100644 --- a/LegionWA/HealerRaidDanger/init.lua +++ b/WeakAuras/Projects/HealerRaidDanger/init.lua @@ -1,27 +1,27 @@ -local raidFrames = ElvUF_Raid -local group1, group2, group3, group4, group5, group6 = raidFrames:GetChildren() -local groups = { group1, group2, group3, group4, group5, group6 } -aura_env.players = {} -for _, group in ipairs(groups) do - local playerFrame1, playerFrame2, playerFrame3, playerFrame4, playerFrame5 = group:GetChildren() - local playerFrames = { playerFrame1, playerFrame2, playerFrame3, playerFrame4, playerFrame5 } - - for _, player in ipairs(playerFrames) do - if player.Name:IsVisible() then aura_env.players[#aura_env.players + 1] = player end - end -end - -local specs = { - -- We can't get unit spec.......... - -- Best we can do is class - -- That fucking sucks -} - -aura_env.Player = { - new = function(self, player) - setmetatable({}, self) - self.frame = nil - self.danger = 0 - return self - end, -} +local raidFrames = ElvUF_Raid +local group1, group2, group3, group4, group5, group6 = raidFrames:GetChildren() +local groups = { group1, group2, group3, group4, group5, group6 } +aura_env.players = {} +for _, group in ipairs(groups) do + local playerFrame1, playerFrame2, playerFrame3, playerFrame4, playerFrame5 = group:GetChildren() + local playerFrames = { playerFrame1, playerFrame2, playerFrame3, playerFrame4, playerFrame5 } + + for _, player in ipairs(playerFrames) do + if player.Name:IsVisible() then aura_env.players[#aura_env.players + 1] = player end + end +end + +local specs = { + -- We can't get unit spec.......... + -- Best we can do is class + -- That fucking sucks +} + +aura_env.Player = { + new = function(self, player) + setmetatable({}, self) + self.frame = nil + self.danger = 0 + return self + end, +} diff --git a/LegionWA/HealerRaidDanger/tsu.lua b/WeakAuras/Projects/HealerRaidDanger/tsu.lua similarity index 94% rename from LegionWA/HealerRaidDanger/tsu.lua rename to WeakAuras/Projects/HealerRaidDanger/tsu.lua index 0bf8dda..e41db79 100644 --- a/LegionWA/HealerRaidDanger/tsu.lua +++ b/WeakAuras/Projects/HealerRaidDanger/tsu.lua @@ -1,22 +1,22 @@ --- TSU -function(allstates, e) - if aura_env.players == nil then - aura_env.players = {} - end - - for _,player in ipairs(aura_env.players) do - allstates[player.Name:GetText()] = { - show = true, - changed = true, - name = 0.13, - frame = player, - icon = player.RaidIcon, - progressType = "static", - value = 1, - total = 1, - autoHide = true, - resort = true, - } - end - return true +-- TSU +function(allstates, e) + if aura_env.players == nil then + aura_env.players = {} + end + + for _,player in ipairs(aura_env.players) do + allstates[player.Name:GetText()] = { + show = true, + changed = true, + name = 0.13, + frame = player, + icon = player.RaidIcon, + progressType = "static", + value = 1, + total = 1, + autoHide = true, + resort = true, + } + end + return true end \ No newline at end of file diff --git a/Complete Projects/Legion/Herb Counter 2.0.lua b/WeakAuras/Projects/Herb Counter 2.0.lua similarity index 97% rename from Complete Projects/Legion/Herb Counter 2.0.lua rename to WeakAuras/Projects/Herb Counter 2.0.lua index 358aa65..31c6beb 100644 --- a/Complete Projects/Legion/Herb Counter 2.0.lua +++ b/WeakAuras/Projects/Herb Counter 2.0.lua @@ -1,34 +1,34 @@ -DISPLAY -function() - local output = "" - for k, v in pairs(aura_env.herbs) do - if k == "Starlight Rose" then - if GetItemCount(k) % 7 == 0 then - output = output .. k .. " " .. v .. " " .. GetItemCount(k) .. " " .. GetItemCount(k) / 4 .. " " .. "|cFF6CFF6C" .. math.floor(GetItemCount(k) / 7) .. "\n" - else - output = output .. k .. " " .. v .. " " .. GetItemCount(k) .. " " .. GetItemCount(k) / 4 .. " " .. "|cFFFF6C6C" .. math.floor(GetItemCount(k) / 7) .. " - " .. (math.floor(GetItemCount(k) / 7)) * 7 .. "\n" - end - elseif k == "Icecap" then - output = output .. k .. " " .. v .. " " .. GetItemCount(k) + (GetItemCount("Icecap Petal") / 10) .. "\n" - elseif k == "Mountain Silversage" then - output = output .. k .. " " .. v .. " " .. GetItemCount(k) + (GetItemCount("Mountain Silversage Stalk") / 10) .. "\n" - else - output = output .. k .. " " .. v .. " " .. GetItemCount(k) .. "\n" - end - end - return output -end - -CHAT_MSG_OPENING -function(_, msg) - local caster, event, target = msg:match("(%a+) perform ([%a*%s*]+) on ([%a*%s*%p*]+).") - if caster == "You" and event == "Herb Gathering" then - if aura_env.herbs[target] == nil then - aura_env.herbs[target] = 0 - end - aura_env.herbs[target] = aura_env.herbs[target] + 1 - end -end - -INIT -aura_env.herbs = {} +DISPLAY +function() + local output = "" + for k, v in pairs(aura_env.herbs) do + if k == "Starlight Rose" then + if GetItemCount(k) % 7 == 0 then + output = output .. k .. " " .. v .. " " .. GetItemCount(k) .. " " .. GetItemCount(k) / 4 .. " " .. "|cFF6CFF6C" .. math.floor(GetItemCount(k) / 7) .. "\n" + else + output = output .. k .. " " .. v .. " " .. GetItemCount(k) .. " " .. GetItemCount(k) / 4 .. " " .. "|cFFFF6C6C" .. math.floor(GetItemCount(k) / 7) .. " - " .. (math.floor(GetItemCount(k) / 7)) * 7 .. "\n" + end + elseif k == "Icecap" then + output = output .. k .. " " .. v .. " " .. GetItemCount(k) + (GetItemCount("Icecap Petal") / 10) .. "\n" + elseif k == "Mountain Silversage" then + output = output .. k .. " " .. v .. " " .. GetItemCount(k) + (GetItemCount("Mountain Silversage Stalk") / 10) .. "\n" + else + output = output .. k .. " " .. v .. " " .. GetItemCount(k) .. "\n" + end + end + return output +end + +CHAT_MSG_OPENING +function(_, msg) + local caster, event, target = msg:match("(%a+) perform ([%a*%s*]+) on ([%a*%s*%p*]+).") + if caster == "You" and event == "Herb Gathering" then + if aura_env.herbs[target] == nil then + aura_env.herbs[target] = 0 + end + aura_env.herbs[target] = aura_env.herbs[target] + 1 + end +end + +INIT +aura_env.herbs = {} diff --git a/Complete Projects/Legion/Herb Counter.lua b/WeakAuras/Projects/Herb Counter.lua similarity index 97% rename from Complete Projects/Legion/Herb Counter.lua rename to WeakAuras/Projects/Herb Counter.lua index 47e9c88..833c9cd 100644 --- a/Complete Projects/Legion/Herb Counter.lua +++ b/WeakAuras/Projects/Herb Counter.lua @@ -1,37 +1,37 @@ -CHAT_MSG_OPENING -function(_,msg) - local _,_,caster,event,target = string.find(msg, "(%a+)%s*perform*%s*(%a+)%s*Gathering%s*on%s*(%a*)") - local herbN = 0 - if caster == "You" and event == "Herb" then - for i = 1, 5 do - if target == aura_env.herbs[i] then - herbN = i - break - end - end - aura_env.herbCount[herbN] = aura_env.herbCount[herbN] + 1 - end -end - -DISPLAY -function() - local output = "" - for i = 1, 5 do - if aura_env.herbCount[i] > 0 then - if aura_env.herbs[i] == "Starlight" then - if GetItemCount("Starlight Rose") % 7 == 0 then - output = output .. "Starlight Rose" .. " " .. aura_env.herbCount[i] .. " " .. GetItemCount("Starlight Rose") .. " " .. GetItemCount("Starlight Rose") / 4 .. " " .. "|cFF6CFF6C" .. math.floor(GetItemCount("Starlight Rose") / 7) .. "\n" - else - output = output .. "Starlight Rose" .. " " .. aura_env.herbCount[i] .. " " .. GetItemCount("Starlight Rose") .. " " .. GetItemCount("Starlight Rose") / 4 .. " " .. "|cFFFF6C6C" .. math.floor(GetItemCount("Starlight Rose") / 7) .. " - " .. (math.floor(GetItemCount("Starlight Rose") / 7) + 1) * 7 .. "\n" - end - else - output = output .. aura_env.herbs[i] .. " " .. aura_env.herbCount[i] .. " " .. GetItemCount(aura_env.herbs[i]) .. "\n" - end - end - end - return output -end - -INIT -aura_env.herbCount = {0, 0, 0, 0, 0} +CHAT_MSG_OPENING +function(_,msg) + local _,_,caster,event,target = string.find(msg, "(%a+)%s*perform*%s*(%a+)%s*Gathering%s*on%s*(%a*)") + local herbN = 0 + if caster == "You" and event == "Herb" then + for i = 1, 5 do + if target == aura_env.herbs[i] then + herbN = i + break + end + end + aura_env.herbCount[herbN] = aura_env.herbCount[herbN] + 1 + end +end + +DISPLAY +function() + local output = "" + for i = 1, 5 do + if aura_env.herbCount[i] > 0 then + if aura_env.herbs[i] == "Starlight" then + if GetItemCount("Starlight Rose") % 7 == 0 then + output = output .. "Starlight Rose" .. " " .. aura_env.herbCount[i] .. " " .. GetItemCount("Starlight Rose") .. " " .. GetItemCount("Starlight Rose") / 4 .. " " .. "|cFF6CFF6C" .. math.floor(GetItemCount("Starlight Rose") / 7) .. "\n" + else + output = output .. "Starlight Rose" .. " " .. aura_env.herbCount[i] .. " " .. GetItemCount("Starlight Rose") .. " " .. GetItemCount("Starlight Rose") / 4 .. " " .. "|cFFFF6C6C" .. math.floor(GetItemCount("Starlight Rose") / 7) .. " - " .. (math.floor(GetItemCount("Starlight Rose") / 7) + 1) * 7 .. "\n" + end + else + output = output .. aura_env.herbs[i] .. " " .. aura_env.herbCount[i] .. " " .. GetItemCount(aura_env.herbs[i]) .. "\n" + end + end + end + return output +end + +INIT +aura_env.herbCount = {0, 0, 0, 0, 0} aura_env.herbs = {"Dreamleaf", "Aethril", "Fjarnskaggl", "Foxflower", "Starlight"} \ No newline at end of file diff --git a/Complete Projects/Legion/Herb Quota.lua b/WeakAuras/Projects/Herb Quota.lua similarity index 97% rename from Complete Projects/Legion/Herb Quota.lua rename to WeakAuras/Projects/Herb Quota.lua index e300fcd..9b12583 100644 --- a/Complete Projects/Legion/Herb Quota.lua +++ b/WeakAuras/Projects/Herb Quota.lua @@ -1,63 +1,63 @@ ---PLAYER_ENTERING_WORLD BAG_UPDATE -function() - aura_env.output = "" - local herbs = {} - local twok = 0 - for k, v in pairs(WeakAurasSaved.CustomTrash.HerbQuota) do - if UnitName("player") == "Pinkiepiie" then - WeakAurasSaved.CustomTrash.HerbQuota[k] = GetItemCount(k, 1) - else - herbs[k] = v + GetItemCount(k, 1) - end - if v >= 2400 then twok = twok + 1 end - end - local function hexgrad(val, min, max) - if val >= 2400 then return "\124cff3366ff" end - local function tohex(input) - local output = string.format("%x", input * 255) - return output - end - local function grad(c, min, max) - c = 1 - (((max - c) / (max - min)) * 1) - if c > 0.5 then - c = 1 - (2 * (c - 0.5)) - return c, 1, 0, 1 - else - c = c * 2 - return 1, c, 0, 1 - end - end - local color1, color2, color3, color4 = 0, 0, 0, 0 - color1, color2, color3, color4 = grad(val, min, max) - color1, color2, color3, color4 = tohex(color1), tohex(color2), tohex(color3), tohex(color4) - color1, color2, color3, color4 = tostring(color1), tostring(color2), tostring(color3), tostring(color4) - if string.len(color1) == 1 then color1 = "0" .. color1 end - if string.len(color2) == 1 then color2 = "0" .. color2 end - if string.len(color3) == 1 then color3 = "0" .. color3 end - if string.len(color4) == 1 then color4 = "0" .. color4 end - local color = "\124c" .. color4 .. color1 .. color2 .. color3 - return color - end - for k, v in pairs(WeakAurasSaved.CustomTrash.HerbQuota) do - if twok < 5 then - aura_env.output = aura_env.output .. hexgrad(v, 0, 2400) .. k .. " " .. v .. " / 2400" .. "\124r\n" - end - end - return true -end - ---DISPLAY -function() - return aura_env.output -end - ---INIT -aura_env.output = "" -if not WeakAurasSaved.CustomTrash.HerbQuota then WeakAurasSaved.CustomTrash.HerbQuota = {} end -WeakAurasSaved.CustomTrash.HerbQuota = { - ["Starlight Rose"] = 0, - ["Fjarnskaggl"] = 0, - ["Foxflower"] = 0, - ["Dreamleaf"] = 0, - ["Aethril"] = 0, -} +--PLAYER_ENTERING_WORLD BAG_UPDATE +function() + aura_env.output = "" + local herbs = {} + local twok = 0 + for k, v in pairs(WeakAurasSaved.CustomTrash.HerbQuota) do + if UnitName("player") == "Pinkiepiie" then + WeakAurasSaved.CustomTrash.HerbQuota[k] = GetItemCount(k, 1) + else + herbs[k] = v + GetItemCount(k, 1) + end + if v >= 2400 then twok = twok + 1 end + end + local function hexgrad(val, min, max) + if val >= 2400 then return "\124cff3366ff" end + local function tohex(input) + local output = string.format("%x", input * 255) + return output + end + local function grad(c, min, max) + c = 1 - (((max - c) / (max - min)) * 1) + if c > 0.5 then + c = 1 - (2 * (c - 0.5)) + return c, 1, 0, 1 + else + c = c * 2 + return 1, c, 0, 1 + end + end + local color1, color2, color3, color4 = 0, 0, 0, 0 + color1, color2, color3, color4 = grad(val, min, max) + color1, color2, color3, color4 = tohex(color1), tohex(color2), tohex(color3), tohex(color4) + color1, color2, color3, color4 = tostring(color1), tostring(color2), tostring(color3), tostring(color4) + if string.len(color1) == 1 then color1 = "0" .. color1 end + if string.len(color2) == 1 then color2 = "0" .. color2 end + if string.len(color3) == 1 then color3 = "0" .. color3 end + if string.len(color4) == 1 then color4 = "0" .. color4 end + local color = "\124c" .. color4 .. color1 .. color2 .. color3 + return color + end + for k, v in pairs(WeakAurasSaved.CustomTrash.HerbQuota) do + if twok < 5 then + aura_env.output = aura_env.output .. hexgrad(v, 0, 2400) .. k .. " " .. v .. " / 2400" .. "\124r\n" + end + end + return true +end + +--DISPLAY +function() + return aura_env.output +end + +--INIT +aura_env.output = "" +if not WeakAurasSaved.CustomTrash.HerbQuota then WeakAurasSaved.CustomTrash.HerbQuota = {} end +WeakAurasSaved.CustomTrash.HerbQuota = { + ["Starlight Rose"] = 0, + ["Fjarnskaggl"] = 0, + ["Foxflower"] = 0, + ["Dreamleaf"] = 0, + ["Aethril"] = 0, +} diff --git a/Complete Projects/Legion/Herb Sniffer/0.5/Direction.lua b/WeakAuras/Projects/Herb Sniffer/0.5/Direction.lua similarity index 97% rename from Complete Projects/Legion/Herb Sniffer/0.5/Direction.lua rename to WeakAuras/Projects/Herb Sniffer/0.5/Direction.lua index fb9a517..658204c 100644 --- a/Complete Projects/Legion/Herb Sniffer/0.5/Direction.lua +++ b/WeakAuras/Projects/Herb Sniffer/0.5/Direction.lua @@ -1,65 +1,65 @@ ---EVERY FRAME TRIGGER -function() - if not WeakAurasSaved.HerbSniffer then WeakAurasSaved.HerbSniffer = {} end - if not WeakAurasSaved.HerbSniffer.CD then WeakAurasSaved.HerbSniffer.CD = 0 end - if not WeakAurasSaved.HerbSniffer.NoCD then WeakAurasSaved.HerbSniffer.NoCD = #aura_env.herbs end - local function range (val, min, max, max2) - val = 1 - (((max - val) / (max - min)) * max2) - return val - end - local id = aura_env.GetClosestHerb() - local hX, hY = aura_env.herbs[id]["X"], aura_env.herbs[id]["Y"] - local pX = GetPlayerMapPosition("player") or 0 - local pY = select(2, GetPlayerMapPosition("player")) or 0 - pX, pY = pX * 100, pY * 100 - local X = pX - hX - local Y = pY - hY - local playerFace = GetPlayerFacing() or 0 - local playerA = math.floor(playerFace * 100) - playerA = range(playerA, 0, 630, 360) - 1 - playerA = - playerA - playerA = playerA - 90 - if playerA < 0 then playerA = playerA + 360 end - aura_env.hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) * 100 - WeakAurasSaved.HerbSniffer.hyp = aura_env.hyp - aura_env.angle = math.deg(math.atan2(Y, X)) - aura_env.angle = aura_env.angle - playerA - aura_env.angle = aura_env.angle - 180 - if aura_env.hyp < aura_env.wipeDistance then --When reach herb activate it's cooldown (herbcd[cd] = coords) - aura_env.herbs[id]["CD"] = math.floor(GetTime() + aura_env.cooldown) - WeakAurasSaved.HerbSniffer.CD = WeakAurasSaved.HerbSniffer.CD + 1 - WeakAurasSaved.HerbSniffer.NoCD = WeakAurasSaved.HerbSniffer.NoCD - 1 - aura_env.minID = - { - ["X"] = 0, - ["Y"] = 0, - ["D"] = 10000, - ["ID"] = 0 - } - end - for k,v in ipairs(aura_env.herbs) do --if cooldown is up then insert back into proper array - local cd = aura_env.herbs[k]["CD"] - if cd > 0 then - if GetTime() > cd then - aura_env.herbs[k]["CD"] = 0 - WeakAurasSaved.HerbSniffer.NoCD = WeakAurasSaved.HerbSniffer.NoCD + 1 - WeakAurasSaved.HerbSniffer.CD = WeakAurasSaved.HerbSniffer.CD - 1 - end - end - end - return true -end - ---RESET_COUNTER -function() - WeakAurasSaved.HerbSniffer.CD = 0 - WeakAurasSaved.HerbSniffer.NoCD = 200 -end - ---ANIMATION -function() - return - aura_env.angle -end - ---INIT +--EVERY FRAME TRIGGER +function() + if not WeakAurasSaved.HerbSniffer then WeakAurasSaved.HerbSniffer = {} end + if not WeakAurasSaved.HerbSniffer.CD then WeakAurasSaved.HerbSniffer.CD = 0 end + if not WeakAurasSaved.HerbSniffer.NoCD then WeakAurasSaved.HerbSniffer.NoCD = #aura_env.herbs end + local function range (val, min, max, max2) + val = 1 - (((max - val) / (max - min)) * max2) + return val + end + local id = aura_env.GetClosestHerb() + local hX, hY = aura_env.herbs[id]["X"], aura_env.herbs[id]["Y"] + local pX = GetPlayerMapPosition("player") or 0 + local pY = select(2, GetPlayerMapPosition("player")) or 0 + pX, pY = pX * 100, pY * 100 + local X = pX - hX + local Y = pY - hY + local playerFace = GetPlayerFacing() or 0 + local playerA = math.floor(playerFace * 100) + playerA = range(playerA, 0, 630, 360) - 1 + playerA = - playerA + playerA = playerA - 90 + if playerA < 0 then playerA = playerA + 360 end + aura_env.hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) * 100 + WeakAurasSaved.HerbSniffer.hyp = aura_env.hyp + aura_env.angle = math.deg(math.atan2(Y, X)) + aura_env.angle = aura_env.angle - playerA + aura_env.angle = aura_env.angle - 180 + if aura_env.hyp < aura_env.wipeDistance then --When reach herb activate it's cooldown (herbcd[cd] = coords) + aura_env.herbs[id]["CD"] = math.floor(GetTime() + aura_env.cooldown) + WeakAurasSaved.HerbSniffer.CD = WeakAurasSaved.HerbSniffer.CD + 1 + WeakAurasSaved.HerbSniffer.NoCD = WeakAurasSaved.HerbSniffer.NoCD - 1 + aura_env.minID = + { + ["X"] = 0, + ["Y"] = 0, + ["D"] = 10000, + ["ID"] = 0 + } + end + for k,v in ipairs(aura_env.herbs) do --if cooldown is up then insert back into proper array + local cd = aura_env.herbs[k]["CD"] + if cd > 0 then + if GetTime() > cd then + aura_env.herbs[k]["CD"] = 0 + WeakAurasSaved.HerbSniffer.NoCD = WeakAurasSaved.HerbSniffer.NoCD + 1 + WeakAurasSaved.HerbSniffer.CD = WeakAurasSaved.HerbSniffer.CD - 1 + end + end + end + return true +end + +--RESET_COUNTER +function() + WeakAurasSaved.HerbSniffer.CD = 0 + WeakAurasSaved.HerbSniffer.NoCD = 200 +end + +--ANIMATION +function() + return - aura_env.angle +end + +--INIT if WeakAuras.IsOptionsOpen() then WeakAurasSaved.HerbSniffer.CD = 0; WeakAurasSaved.HerbSniffer.NoCD = 200 end \ No newline at end of file diff --git a/Complete Projects/Legion/Herb Sniffer/0.5/Distance.lua b/WeakAuras/Projects/Herb Sniffer/0.5/Distance.lua similarity index 97% rename from Complete Projects/Legion/Herb Sniffer/0.5/Distance.lua rename to WeakAuras/Projects/Herb Sniffer/0.5/Distance.lua index bc48752..c53f968 100644 --- a/Complete Projects/Legion/Herb Sniffer/0.5/Distance.lua +++ b/WeakAuras/Projects/Herb Sniffer/0.5/Distance.lua @@ -1,14 +1,14 @@ ---DISPLAY -function() - local function round(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var - end - if WeakAurasSaved.HerbSniffer.hyp and WeakAurasSaved.HerbSniffer.NoCD and WeakAurasSaved.HerbSniffer.CD then - return round(WeakAurasSaved.HerbSniffer.hyp, 0) .. "\n" .. WeakAurasSaved.HerbSniffer.NoCD .. "\n" .. WeakAurasSaved.HerbSniffer.CD - end +--DISPLAY +function() + local function round(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var + end + if WeakAurasSaved.HerbSniffer.hyp and WeakAurasSaved.HerbSniffer.NoCD and WeakAurasSaved.HerbSniffer.CD then + return round(WeakAurasSaved.HerbSniffer.hyp, 0) .. "\n" .. WeakAurasSaved.HerbSniffer.NoCD .. "\n" .. WeakAurasSaved.HerbSniffer.CD + end end \ No newline at end of file diff --git a/Complete Projects/Legion/Herb Sniffer/0.5/Herb Arrays Legion.lua b/WeakAuras/Projects/Herb Sniffer/0.5/Herb Arrays Legion.lua similarity index 93% rename from Complete Projects/Legion/Herb Sniffer/0.5/Herb Arrays Legion.lua rename to WeakAuras/Projects/Herb Sniffer/0.5/Herb Arrays Legion.lua index a502c30..d24ae81 100644 --- a/Complete Projects/Legion/Herb Sniffer/0.5/Herb Arrays Legion.lua +++ b/WeakAuras/Projects/Herb Sniffer/0.5/Herb Arrays Legion.lua @@ -1,5493 +1,5493 @@ -aura_env.herbs = { - --Azsuna / Aethrik - [1015] = { - [1] = { - ["X"] = 52.44, - ["Y"] = 12.55, - ["CD"] = 0, - }, - [2] = { - ["X"] = 43.81, - ["Y"] = 13.48, - ["CD"] = 0, - }, - [3] = { - ["X"] = 43.5, - ["Y"] = 11.55, - ["CD"] = 0, - }, - [4] = { - ["X"] = 43.54, - ["Y"] = 10.41, - ["CD"] = 0, - }, - [5] = { - ["X"] = 44.04, - ["Y"] = 10.02, - ["CD"] = 0, - }, - [6] = { - ["X"] = 45.05, - ["Y"] = 8.91, - ["CD"] = 0, - }, - [7] = { - ["X"] = 45.31, - ["Y"] = 9.62, - ["CD"] = 0, - }, - [8] = { - ["X"] = 50.71, - ["Y"] = 12.66, - ["CD"] = 0, - }, - [9] = { - ["X"] = 51.42, - ["Y"] = 10.39, - ["CD"] = 0, - }, - [10] = { - ["X"] = 51.03, - ["Y"] = 11.49, - ["CD"] = 0, - }, - [11] = { - ["X"] = 52.24, - ["Y"] = 13.93, - ["CD"] = 0, - }, - [12] = { - ["X"] = 53.1, - ["Y"] = 13.66, - ["CD"] = 0, - }, - [13] = { - ["X"] = 54.52, - ["Y"] = 13.09, - ["CD"] = 0, - }, - [14] = { - ["X"] = 53.98, - ["Y"] = 15.09, - ["CD"] = 0, - }, - [15] = { - ["X"] = 57.19, - ["Y"] = 18.32, - ["CD"] = 0, - }, - [16] = { - ["X"] = 57.95, - ["Y"] = 19.85, - ["CD"] = 0, - }, - [17] = { - ["X"] = 61.05, - ["Y"] = 17.05, - ["CD"] = 0, - }, - [18] = { - ["X"] = 62.21, - ["Y"] = 16.11, - ["CD"] = 0, - }, - [19] = { - ["X"] = 62.26, - ["Y"] = 17.91, - ["CD"] = 0, - }, - [20] = { - ["X"] = 61.86, - ["Y"] = 18.55, - ["CD"] = 0, - }, - [21] = { - ["X"] = 59.87, - ["Y"] = 20.07, - ["CD"] = 0, - }, - [22] = { - ["X"] = 60.17, - ["Y"] = 20.82, - ["CD"] = 0, - }, - [23] = { - ["X"] = 60.31, - ["Y"] = 21.25, - ["CD"] = 0, - }, - [24] = { - ["X"] = 58.31, - ["Y"] = 24.61, - ["CD"] = 0, - }, - [25] = { - ["X"] = 58.91, - ["Y"] = 22.75, - ["CD"] = 0, - }, - [26] = { - ["X"] = 59.92, - ["Y"] = 22.74, - ["CD"] = 0, - }, - [27] = { - ["X"] = 61.61, - ["Y"] = 26.13, - ["CD"] = 0, - }, - [28] = { - ["X"] = 61.21, - ["Y"] = 27.72, - ["CD"] = 0, - }, - [29] = { - ["X"] = 61.95, - ["Y"] = 30.74, - ["CD"] = 0, - }, - [30] = { - ["X"] = 63.08, - ["Y"] = 30.76, - ["CD"] = 0, - }, - [31] = { - ["X"] = 62.57, - ["Y"] = 28.52, - ["CD"] = 0, - }, - [32] = { - ["X"] = 64.55, - ["Y"] = 27.75, - ["CD"] = 0, - }, - [33] = { - ["X"] = 65.58, - ["Y"] = 38.31, - ["CD"] = 0, - }, - [34] = { - ["X"] = 66.38, - ["Y"] = 38.49, - ["CD"] = 0, - }, - [35] = { - ["X"] = 66.44, - ["Y"] = 35.73, - ["CD"] = 0, - }, - [36] = { - ["X"] = 65.28, - ["Y"] = 35.11, - ["CD"] = 0, - }, - [37] = { - ["X"] = 64.73, - ["Y"] = 34.57, - ["CD"] = 0, - }, - [38] = { - ["X"] = 63.54, - ["Y"] = 34.19, - ["CD"] = 0, - }, - [39] = { - ["X"] = 64.81, - ["Y"] = 45.69, - ["CD"] = 0, - }, - [40] = { - ["X"] = 63.1, - ["Y"] = 46.83, - ["CD"] = 0, - }, - [41] = { - ["X"] = 59.34, - ["Y"] = 49.85, - ["CD"] = 0, - }, - [42] = { - ["X"] = 56.61, - ["Y"] = 52.15, - ["CD"] = 0, - }, - [43] = { - ["X"] = 53.11, - ["Y"] = 54.38, - ["CD"] = 0, - }, - [44] = { - ["X"] = 51.66, - ["Y"] = 55.68, - ["CD"] = 0, - }, - [45] = { - ["X"] = 50.1, - ["Y"] = 55.25, - ["CD"] = 0, - }, - [46] = { - ["X"] = 50.05, - ["Y"] = 56.35, - ["CD"] = 0, - }, - [47] = { - ["X"] = 49.08, - ["Y"] = 55.87, - ["CD"] = 0, - }, - [48] = { - ["X"] = 36.28, - ["Y"] = 21.97, - ["CD"] = 0, - }, - [49] = { - ["X"] = 36.07, - ["Y"] = 23.09, - ["CD"] = 0, - }, - [50] = { - ["X"] = 35.3, - ["Y"] = 23.32, - ["CD"] = 0, - }, - [51] = { - ["X"] = 35.24, - ["Y"] = 25.27, - ["CD"] = 0, - }, - [52] = { - ["X"] = 35.84, - ["Y"] = 26.66, - ["CD"] = 0, - }, - [53] = { - ["X"] = 35.28, - ["Y"] = 28.34, - ["CD"] = 0, - }, - [54] = { - ["X"] = 38.92, - ["Y"] = 33.69, - ["CD"] = 0, - }, - [55] = { - ["X"] = 38.76, - ["Y"] = 32.81, - ["CD"] = 0, - }, - [56] = { - ["X"] = 39.8, - ["Y"] = 32.01, - ["CD"] = 0, - }, - [57] = { - ["X"] = 38.58, - ["Y"] = 31.7, - ["CD"] = 0, - }, - [58] = { - ["X"] = 37.15, - ["Y"] = 31.49, - ["CD"] = 0, - }, - [59] = { - ["X"] = 37.81, - ["Y"] = 33.03, - ["CD"] = 0, - }, - [60] = { - ["X"] = 38.91, - ["Y"] = 33.95, - ["CD"] = 0, - }, - [61] = { - ["X"] = 46.87, - ["Y"] = 32.18, - ["CD"] = 0, - }, - [62] = { - ["X"] = 46.45, - ["Y"] = 33.24, - ["CD"] = 0, - }, - [63] = { - ["X"] = 42.85, - ["Y"] = 29.84, - ["CD"] = 0, - }, - [64] = { - ["X"] = 42.2, - ["Y"] = 30.7, - ["CD"] = 0, - }, - [65] = { - ["X"] = 41.42, - ["Y"] = 31.81, - ["CD"] = 0, - }, - [66] = { - ["X"] = 40.38, - ["Y"] = 32.88, - ["CD"] = 0, - }, - [67] = { - ["X"] = 40.63, - ["Y"] = 35.62, - ["CD"] = 0, - }, - [68] = { - ["X"] = 43.97, - ["Y"] = 31.84, - ["CD"] = 0, - }, - [69] = { - ["X"] = 45.87, - ["Y"] = 28.71, - ["CD"] = 0, - }, - [70] = { - ["X"] = 44.62, - ["Y"] = 30.16, - ["CD"] = 0, - }, - [71] = { - ["X"] = 44.16, - ["Y"] = 31.22, - ["CD"] = 0, - }, - [72] = { - ["X"] = 45.01, - ["Y"] = 33.8, - ["CD"] = 0, - }, - [73] = { - ["X"] = 44.82, - ["Y"] = 35.66, - ["CD"] = 0, - }, - [74] = { - ["X"] = 44.33, - ["Y"] = 38.18, - ["CD"] = 0, - }, - [75] = { - ["X"] = 44.13, - ["Y"] = 36.79, - ["CD"] = 0, - }, - [76] = { - ["X"] = 43.29, - ["Y"] = 36.63, - ["CD"] = 0, - }, - [77] = { - ["X"] = 58.5, - ["Y"] = 44.5, - ["CD"] = 0, - }, - [78] = { - ["X"] = 56.98, - ["Y"] = 46.04, - ["CD"] = 0, - }, - [79] = { - ["X"] = 56.87, - ["Y"] = 47.43, - ["CD"] = 0, - }, - [80] = { - ["X"] = 58.08, - ["Y"] = 48.77, - ["CD"] = 0, - }, - [81] = { - ["X"] = 58.1, - ["Y"] = 47.82, - ["CD"] = 0, - }, - [82] = { - ["X"] = 59.82, - ["Y"] = 48.78, - ["CD"] = 0, - }, - [83] = { - ["X"] = 61.93, - ["Y"] = 50.54, - ["CD"] = 0, - }, - [84] = { - ["X"] = 60.81, - ["Y"] = 49.52, - ["CD"] = 0, - }, - [85] = { - ["X"] = 60.13, - ["Y"] = 50.52, - ["CD"] = 0, - }, - [86] = { - ["X"] = 58.7, - ["Y"] = 50.72, - ["CD"] = 0, - }, - [87] = { - ["X"] = 57.92, - ["Y"] = 51.18, - ["CD"] = 0, - }, - [88] = { - ["X"] = 56.76, - ["Y"] = 51.49, - ["CD"] = 0, - }, - [89] = { - ["X"] = 57.02, - ["Y"] = 53.1, - ["CD"] = 0, - }, - [90] = { - ["X"] = 60.5, - ["Y"] = 55.71, - ["CD"] = 0, - }, - [91] = { - ["X"] = 61.23, - ["Y"] = 55.29, - ["CD"] = 0, - }, - [92] = { - ["X"] = 62.2, - ["Y"] = 54.63, - ["CD"] = 0, - }, - [93] = { - ["X"] = 62.35, - ["Y"] = 53.03, - ["CD"] = 0, - }, - [94] = { - ["X"] = 61.71, - ["Y"] = 51.69, - ["CD"] = 0, - }, - [95] = { - ["X"] = 62.88, - ["Y"] = 48.79, - ["CD"] = 0, - }, - [96] = { - ["X"] = 59.03, - ["Y"] = 16.36, - ["CD"] = 0, - }, - [97] = { - ["X"] = 56.05, - ["Y"] = 52.99, - ["CD"] = 0, - }, - [98] = { - ["X"] = 54.9, - ["Y"] = 54.78, - ["CD"] = 0, - }, - [99] = { - ["X"] = 46.89, - ["Y"] = 48.44, - ["CD"] = 0, - }, - [100] = { - ["X"] = 48.12, - ["Y"] = 52.99, - ["CD"] = 0, - }, - [101] = { - ["X"] = 50.61, - ["Y"] = 58.06, - ["CD"] = 0, - }, - [102] = { - ["X"] = 65.48, - ["Y"] = 47.52, - ["CD"] = 0, - }, - [103] = { - ["X"] = 66.67, - ["Y"] = 48.25, - ["CD"] = 0, - }, - [104] = { - ["X"] = 67.25, - ["Y"] = 46.04, - ["CD"] = 0, - }, - [105] = { - ["X"] = 67.21, - ["Y"] = 43.27, - ["CD"] = 0, - }, - [106] = { - ["X"] = 56.87, - ["Y"] = 48.7, - ["CD"] = 0, - }, - [107] = { - ["X"] = 47.7, - ["Y"] = 38.02, - ["CD"] = 0, - }, - [108] = { - ["X"] = 45.05, - ["Y"] = 37.62, - ["CD"] = 0, - }, - [109] = { - ["X"] = 48.4, - ["Y"] = 32.78, - ["CD"] = 0, - }, - [110] = { - ["X"] = 51.98, - ["Y"] = 31.45, - ["CD"] = 0, - }, - [111] = { - ["X"] = 57.2, - ["Y"] = 27.62, - ["CD"] = 0, - }, - [112] = { - ["X"] = 61.29, - ["Y"] = 29.89, - ["CD"] = 0, - }, - [113] = { - ["X"] = 64.67, - ["Y"] = 31.6, - ["CD"] = 0, - }, - [114] = { - ["X"] = 60.67, - ["Y"] = 23.86, - ["CD"] = 0, - }, - [115] = { - ["X"] = 62.79, - ["Y"] = 25.61, - ["CD"] = 0, - }, - [116] = { - ["X"] = 66.4, - ["Y"] = 36.85, - ["CD"] = 0, - }, - [117] = { - ["X"] = 63.3, - ["Y"] = 35.71, - ["CD"] = 0, - }, - [118] = { - ["X"] = 54.11, - ["Y"] = 30.37, - ["CD"] = 0, - }, - [119] = { - ["X"] = 57.92, - ["Y"] = 33.75, - ["CD"] = 0, - }, - [120] = { - ["X"] = 42.81, - ["Y"] = 10.38, - ["CD"] = 0, - }, - [121] = { - ["X"] = 48.74, - ["Y"] = 10.63, - ["CD"] = 0, - }, - [122] = { - ["X"] = 40.78, - ["Y"] = 11.45, - ["CD"] = 0, - }, - [123] = { - ["X"] = 39.74, - ["Y"] = 13.5, - ["CD"] = 0, - }, - [124] = { - ["X"] = 35.84, - ["Y"] = 15.6, - ["CD"] = 0, - }, - [125] = { - ["X"] = 35.53, - ["Y"] = 22.66, - ["CD"] = 0, - }, - [126] = { - ["X"] = 35.42, - ["Y"] = 27.64, - ["CD"] = 0, - }, - [127] = { - ["X"] = 32.97, - ["Y"] = 32.94, - ["CD"] = 0, - }, - [128] = { - ["X"] = 38.01, - ["Y"] = 35.61, - ["CD"] = 0, - }, - [129] = { - ["X"] = 52.67, - ["Y"] = 26.74, - ["CD"] = 0, - }, - [130] = { - ["X"] = 54.31, - ["Y"] = 17.67, - ["CD"] = 0, - }, - [131] = { - ["X"] = 56.06, - ["Y"] = 19.39, - ["CD"] = 0, - }, - [132] = { - ["X"] = 51.37, - ["Y"] = 15.24, - ["CD"] = 0, - }, - [133] = { - ["X"] = 45.71, - ["Y"] = 15.14, - ["CD"] = 0, - }, - [134] = { - ["X"] = 46.61, - ["Y"] = 16.25, - ["CD"] = 0, - }, - [135] = { - ["X"] = 48.01, - ["Y"] = 12.51, - ["CD"] = 0, - }, - [136] = { - ["X"] = 44.59, - ["Y"] = 32.83, - ["CD"] = 0, - }, - [137] = { - ["X"] = 41.47, - ["Y"] = 33.61, - ["CD"] = 0, - }, - [138] = { - ["X"] = 42.3, - ["Y"] = 36.7, - ["CD"] = 0, - }, - [139] = { - ["X"] = 40.85, - ["Y"] = 38.78, - ["CD"] = 0, - }, - [140] = { - ["X"] = 39.97, - ["Y"] = 53.3, - ["CD"] = 0, - }, - [141] = { - ["X"] = 48.93, - ["Y"] = 43.77, - ["CD"] = 0, - }, - [142] = { - ["X"] = 60.71, - ["Y"] = 36.87, - ["CD"] = 0, - }, - [143] = { - ["X"] = 61.83, - ["Y"] = 39.44, - ["CD"] = 0, - }, - [144] = { - ["X"] = 56.71, - ["Y"] = 64.6, - ["CD"] = 0, - }, - [145] = { - ["X"] = 57, - ["Y"] = 62.25, - ["CD"] = 0, - }, - [146] = { - ["X"] = 62.66, - ["Y"] = 54.86, - ["CD"] = 0, - }, - [147] = { - ["X"] = 61.84, - ["Y"] = 55.45, - ["CD"] = 0, - }, - [148] = { - ["X"] = 56.88, - ["Y"] = 61.05, - ["CD"] = 0, - }, - [149] = { - ["X"] = 52.56, - ["Y"] = 60.68, - ["CD"] = 0, - }, - [150] = { - ["X"] = 46, - ["Y"] = 61.02, - ["CD"] = 0, - }, - }, - --Highmountain / Foxflower - [1024] = { - [1] = { - ["X"] = 39.04, - ["Y"] = 63.21, - ["CD"] = 0, - }, - [2] = { - ["X"] = 42.24, - ["Y"] = 55.42, - ["CD"] = 0, - }, - [3] = { - ["X"] = 43.3, - ["Y"] = 58.87, - ["CD"] = 0, - }, - [4] = { - ["X"] = 40.39, - ["Y"] = 59.24, - ["CD"] = 0, - }, - [5] = { - ["X"] = 42.39, - ["Y"] = 67.1, - ["CD"] = 0, - }, - [6] = { - ["X"] = 37.19, - ["Y"] = 66.98, - ["CD"] = 0, - }, - [7] = { - ["X"] = 42.21, - ["Y"] = 65.26, - ["CD"] = 0, - }, - [8] = { - ["X"] = 42.86, - ["Y"] = 52.36, - ["CD"] = 0, - }, - [9] = { - ["X"] = 44.42, - ["Y"] = 49.56, - ["CD"] = 0, - }, - [10] = { - ["X"] = 46.31, - ["Y"] = 46.84, - ["CD"] = 0, - }, - [11] = { - ["X"] = 44.32, - ["Y"] = 44.33, - ["CD"] = 0, - }, - [12] = { - ["X"] = 47.06, - ["Y"] = 48.3, - ["CD"] = 0, - }, - [13] = { - ["X"] = 46.96, - ["Y"] = 47.09, - ["CD"] = 0, - }, - [14] = { - ["X"] = 57.3, - ["Y"] = 22.65, - ["CD"] = 0, - }, - [15] = { - ["X"] = 57.13, - ["Y"] = 20.04, - ["CD"] = 0, - }, - [16] = { - ["X"] = 56.54, - ["Y"] = 21.14, - ["CD"] = 0, - }, - [17] = { - ["X"] = 55.97, - ["Y"] = 20.78, - ["CD"] = 0, - }, - [18] = { - ["X"] = 56, - ["Y"] = 20.19, - ["CD"] = 0, - }, - [19] = { - ["X"] = 55.94, - ["Y"] = 19.48, - ["CD"] = 0, - }, - [20] = { - ["X"] = 54.72, - ["Y"] = 16.63, - ["CD"] = 0, - }, - [21] = { - ["X"] = 55.63, - ["Y"] = 17.81, - ["CD"] = 0, - }, - [22] = { - ["X"] = 55.27, - ["Y"] = 18.91, - ["CD"] = 0, - }, - [23] = { - ["X"] = 55.32, - ["Y"] = 18.59, - ["CD"] = 0, - }, - [24] = { - ["X"] = 41.11, - ["Y"] = 51.73, - ["CD"] = 0, - }, - [25] = { - ["X"] = 42.6, - ["Y"] = 48.57, - ["CD"] = 0, - }, - [26] = { - ["X"] = 43.68, - ["Y"] = 48.71, - ["CD"] = 0, - }, - [27] = { - ["X"] = 39.67, - ["Y"] = 52.78, - ["CD"] = 0, - }, - [28] = { - ["X"] = 40.85, - ["Y"] = 53.98, - ["CD"] = 0, - }, - [29] = { - ["X"] = 42.82, - ["Y"] = 52.88, - ["CD"] = 0, - }, - [30] = { - ["X"] = 41.21, - ["Y"] = 56.52, - ["CD"] = 0, - }, - [31] = { - ["X"] = 39.74, - ["Y"] = 67.27, - ["CD"] = 0, - }, - [32] = { - ["X"] = 40.77, - ["Y"] = 65.23, - ["CD"] = 0, - }, - [33] = { - ["X"] = 37.33, - ["Y"] = 63.76, - ["CD"] = 0, - }, - [34] = { - ["X"] = 37.5, - ["Y"] = 62.89, - ["CD"] = 0, - }, - [35] = { - ["X"] = 37.72, - ["Y"] = 62.08, - ["CD"] = 0, - }, - [36] = { - ["X"] = 40.68, - ["Y"] = 57.62, - ["CD"] = 0, - }, - [37] = { - ["X"] = 50.04, - ["Y"] = 9, - ["CD"] = 0, - }, - [38] = { - ["X"] = 47.51, - ["Y"] = 9.64, - ["CD"] = 0, - }, - [39] = { - ["X"] = 45.07, - ["Y"] = 8.99, - ["CD"] = 0, - }, - [40] = { - ["X"] = 42.96, - ["Y"] = 9.11, - ["CD"] = 0, - }, - [41] = { - ["X"] = 43.26, - ["Y"] = 8.47, - ["CD"] = 0, - }, - [42] = { - ["X"] = 42.69, - ["Y"] = 7.59, - ["CD"] = 0, - }, - [43] = { - ["X"] = 45.72, - ["Y"] = 9.49, - ["CD"] = 0, - }, - [44] = { - ["X"] = 46.02, - ["Y"] = 8.48, - ["CD"] = 0, - }, - [45] = { - ["X"] = 44.75, - ["Y"] = 8.04, - ["CD"] = 0, - }, - [46] = { - ["X"] = 44.62, - ["Y"] = 7.22, - ["CD"] = 0, - }, - [47] = { - ["X"] = 41.25, - ["Y"] = 13, - ["CD"] = 0, - }, - [48] = { - ["X"] = 41.24, - ["Y"] = 11.49, - ["CD"] = 0, - }, - [49] = { - ["X"] = 42.07, - ["Y"] = 11.42, - ["CD"] = 0, - }, - [50] = { - ["X"] = 44.2, - ["Y"] = 10.31, - ["CD"] = 0, - }, - [51] = { - ["X"] = 43.54, - ["Y"] = 11.57, - ["CD"] = 0, - }, - [52] = { - ["X"] = 44.12, - ["Y"] = 11.56, - ["CD"] = 0, - }, - [53] = { - ["X"] = 45.67, - ["Y"] = 12.81, - ["CD"] = 0, - }, - [54] = { - ["X"] = 45.6, - ["Y"] = 11.82, - ["CD"] = 0, - }, - [55] = { - ["X"] = 48.04, - ["Y"] = 10.68, - ["CD"] = 0, - }, - [56] = { - ["X"] = 48.1, - ["Y"] = 9.57, - ["CD"] = 0, - }, - [57] = { - ["X"] = 50.88, - ["Y"] = 11.06, - ["CD"] = 0, - }, - [58] = { - ["X"] = 50.51, - ["Y"] = 10.69, - ["CD"] = 0, - }, - [59] = { - ["X"] = 50.02, - ["Y"] = 10.43, - ["CD"] = 0, - }, - [60] = { - ["X"] = 49.54, - ["Y"] = 10.43, - ["CD"] = 0, - }, - [61] = { - ["X"] = 48.84, - ["Y"] = 10.72, - ["CD"] = 0, - }, - [62] = { - ["X"] = 48.44, - ["Y"] = 10.66, - ["CD"] = 0, - }, - [63] = { - ["X"] = 47.95, - ["Y"] = 11.28, - ["CD"] = 0, - }, - [64] = { - ["X"] = 46.49, - ["Y"] = 11.47, - ["CD"] = 0, - }, - [65] = { - ["X"] = 47.16, - ["Y"] = 11.19, - ["CD"] = 0, - }, - [66] = { - ["X"] = 56.04, - ["Y"] = 63.04, - ["CD"] = 0, - }, - [67] = { - ["X"] = 56.46, - ["Y"] = 60.72, - ["CD"] = 0, - }, - [68] = { - ["X"] = 57.51, - ["Y"] = 59.57, - ["CD"] = 0, - }, - [69] = { - ["X"] = 57.31, - ["Y"] = 58.61, - ["CD"] = 0, - }, - [70] = { - ["X"] = 56.29, - ["Y"] = 56.16, - ["CD"] = 0, - }, - [71] = { - ["X"] = 56.93, - ["Y"] = 56.51, - ["CD"] = 0, - }, - [72] = { - ["X"] = 57.33, - ["Y"] = 56.08, - ["CD"] = 0, - }, - [73] = { - ["X"] = 57.78, - ["Y"] = 56.85, - ["CD"] = 0, - }, - [74] = { - ["X"] = 57.95, - ["Y"] = 54.56, - ["CD"] = 0, - }, - [75] = { - ["X"] = 57.54, - ["Y"] = 53.68, - ["CD"] = 0, - }, - [76] = { - ["X"] = 57.15, - ["Y"] = 53.7, - ["CD"] = 0, - }, - [77] = { - ["X"] = 55.34, - ["Y"] = 53.18, - ["CD"] = 0, - }, - [78] = { - ["X"] = 55.2, - ["Y"] = 53.41, - ["CD"] = 0, - }, - [79] = { - ["X"] = 56.17, - ["Y"] = 54.2, - ["CD"] = 0, - }, - [80] = { - ["X"] = 55.99, - ["Y"] = 55.43, - ["CD"] = 0, - }, - [81] = { - ["X"] = 55.9, - ["Y"] = 56.79, - ["CD"] = 0, - }, - [82] = { - ["X"] = 57.56, - ["Y"] = 57.6, - ["CD"] = 0, - }, - [83] = { - ["X"] = 55.89, - ["Y"] = 59.48, - ["CD"] = 0, - }, - [84] = { - ["X"] = 55.11, - ["Y"] = 61.2, - ["CD"] = 0, - }, - [85] = { - ["X"] = 39, - ["Y"] = 40.8, - ["CD"] = 0, - }, - [86] = { - ["X"] = 39.15, - ["Y"] = 39.51, - ["CD"] = 0, - }, - [87] = { - ["X"] = 40.15, - ["Y"] = 36.93, - ["CD"] = 0, - }, - [88] = { - ["X"] = 40.41, - ["Y"] = 37.67, - ["CD"] = 0, - }, - [89] = { - ["X"] = 40.55, - ["Y"] = 36.19, - ["CD"] = 0, - }, - [90] = { - ["X"] = 41.38, - ["Y"] = 36.45, - ["CD"] = 0, - }, - [91] = { - ["X"] = 41.54, - ["Y"] = 35.29, - ["CD"] = 0, - }, - [92] = { - ["X"] = 41.97, - ["Y"] = 33.67, - ["CD"] = 0, - }, - [93] = { - ["X"] = 41.46, - ["Y"] = 31.24, - ["CD"] = 0, - }, - [94] = { - ["X"] = 41.4, - ["Y"] = 28.92, - ["CD"] = 0, - }, - [95] = { - ["X"] = 40.79, - ["Y"] = 29.51, - ["CD"] = 0, - }, - [96] = { - ["X"] = 42.57, - ["Y"] = 30.29, - ["CD"] = 0, - }, - [97] = { - ["X"] = 46.38, - ["Y"] = 32.35, - ["CD"] = 0, - }, - [98] = { - ["X"] = 45.3, - ["Y"] = 32.49, - ["CD"] = 0, - }, - [99] = { - ["X"] = 44.18, - ["Y"] = 33.11, - ["CD"] = 0, - }, - [100] = { - ["X"] = 44.31, - ["Y"] = 32.62, - ["CD"] = 0, - }, - [101] = { - ["X"] = 44.76, - ["Y"] = 30.4, - ["CD"] = 0, - }, - [102] = { - ["X"] = 37.07, - ["Y"] = 19.85, - ["CD"] = 0, - }, - [103] = { - ["X"] = 36.06, - ["Y"] = 20.92, - ["CD"] = 0, - }, - [104] = { - ["X"] = 32.68, - ["Y"] = 23.7, - ["CD"] = 0, - }, - [105] = { - ["X"] = 33.36, - ["Y"] = 21.36, - ["CD"] = 0, - }, - [106] = { - ["X"] = 34.62, - ["Y"] = 22.6, - ["CD"] = 0, - }, - [107] = { - ["X"] = 35.26, - ["Y"] = 23.87, - ["CD"] = 0, - }, - [108] = { - ["X"] = 36.27, - ["Y"] = 23.14, - ["CD"] = 0, - }, - [109] = { - ["X"] = 34.74, - ["Y"] = 23.43, - ["CD"] = 0, - }, - [110] = { - ["X"] = 34.05, - ["Y"] = 24.22, - ["CD"] = 0, - }, - [111] = { - ["X"] = 34.18, - ["Y"] = 27.2, - ["CD"] = 0, - }, - [112] = { - ["X"] = 34.23, - ["Y"] = 25.22, - ["CD"] = 0, - }, - [113] = { - ["X"] = 31.78, - ["Y"] = 35.09, - ["CD"] = 0, - }, - [114] = { - ["X"] = 32.12, - ["Y"] = 34.17, - ["CD"] = 0, - }, - [115] = { - ["X"] = 33.13, - ["Y"] = 33.36, - ["CD"] = 0, - }, - [116] = { - ["X"] = 32.78, - ["Y"] = 32.58, - ["CD"] = 0, - }, - [117] = { - ["X"] = 31.77, - ["Y"] = 31.79, - ["CD"] = 0, - }, - [118] = { - ["X"] = 30.37, - ["Y"] = 28.05, - ["CD"] = 0, - }, - [119] = { - ["X"] = 30.53, - ["Y"] = 29.81, - ["CD"] = 0, - }, - [120] = { - ["X"] = 30.8, - ["Y"] = 30.32, - ["CD"] = 0, - }, - [121] = { - ["X"] = 28.47, - ["Y"] = 40.12, - ["CD"] = 0, - }, - [122] = { - ["X"] = 27.69, - ["Y"] = 41.13, - ["CD"] = 0, - }, - [123] = { - ["X"] = 28.37, - ["Y"] = 41.03, - ["CD"] = 0, - }, - [124] = { - ["X"] = 28.86, - ["Y"] = 42.47, - ["CD"] = 0, - }, - [125] = { - ["X"] = 29.95, - ["Y"] = 41.71, - ["CD"] = 0, - }, - [126] = { - ["X"] = 31.73, - ["Y"] = 38.3, - ["CD"] = 0, - }, - [127] = { - ["X"] = 30.38, - ["Y"] = 39.04, - ["CD"] = 0, - }, - [128] = { - ["X"] = 31.37, - ["Y"] = 36.91, - ["CD"] = 0, - }, - [129] = { - ["X"] = 31.64, - ["Y"] = 35.8, - ["CD"] = 0, - }, - [130] = { - ["X"] = 30.36, - ["Y"] = 34.88, - ["CD"] = 0, - }, - [131] = { - ["X"] = 31.05, - ["Y"] = 33.51, - ["CD"] = 0, - }, - [132] = { - ["X"] = 30.53, - ["Y"] = 33.11, - ["CD"] = 0, - }, - [133] = { - ["X"] = 31.38, - ["Y"] = 30.83, - ["CD"] = 0, - }, - [134] = { - ["X"] = 44.68, - ["Y"] = 54.55, - ["CD"] = 0, - }, - [135] = { - ["X"] = 44.08, - ["Y"] = 54.55, - ["CD"] = 0, - }, - [136] = { - ["X"] = 43.58, - ["Y"] = 54.82, - ["CD"] = 0, - }, - [137] = { - ["X"] = 45.12, - ["Y"] = 50.11, - ["CD"] = 0, - }, - [138] = { - ["X"] = 43.58, - ["Y"] = 45.93, - ["CD"] = 0, - }, - [139] = { - ["X"] = 42.63, - ["Y"] = 45.65, - ["CD"] = 0, - }, - [140] = { - ["X"] = 42.96, - ["Y"] = 46.27, - ["CD"] = 0, - }, - [141] = { - ["X"] = 42.09, - ["Y"] = 46.82, - ["CD"] = 0, - }, - [142] = { - ["X"] = 39.3, - ["Y"] = 46.88, - ["CD"] = 0, - }, - [143] = { - ["X"] = 40.18, - ["Y"] = 47.01, - ["CD"] = 0, - }, - [144] = { - ["X"] = 40.81, - ["Y"] = 46.97, - ["CD"] = 0, - }, - [145] = { - ["X"] = 41.37, - ["Y"] = 48.56, - ["CD"] = 0, - }, - [146] = { - ["X"] = 40.45, - ["Y"] = 48.42, - ["CD"] = 0, - }, - [147] = { - ["X"] = 38.56, - ["Y"] = 50.23, - ["CD"] = 0, - }, - [148] = { - ["X"] = 38.26, - ["Y"] = 49.28, - ["CD"] = 0, - }, - [149] = { - ["X"] = 39.77, - ["Y"] = 49.03, - ["CD"] = 0, - }, - [150] = { - ["X"] = 39.89, - ["Y"] = 49.73, - ["CD"] = 0, - }, - [151] = { - ["X"] = 39.97, - ["Y"] = 50.65, - ["CD"] = 0, - }, - [152] = { - ["X"] = 40.15, - ["Y"] = 51.03, - ["CD"] = 0, - }, - [153] = { - ["X"] = 58.81, - ["Y"] = 62.31, - ["CD"] = 0, - }, - [154] = { - ["X"] = 55.76, - ["Y"] = 65.74, - ["CD"] = 0, - }, - [155] = { - ["X"] = 52.04, - ["Y"] = 58.38, - ["CD"] = 0, - }, - [156] = { - ["X"] = 50.81, - ["Y"] = 67.32, - ["CD"] = 0, - }, - [157] = { - ["X"] = 43.38, - ["Y"] = 66.19, - ["CD"] = 0, - }, - [158] = { - ["X"] = 24.98, - ["Y"] = 59.43, - ["CD"] = 0, - }, - [159] = { - ["X"] = 26.05, - ["Y"] = 63.62, - ["CD"] = 0, - }, - [160] = { - ["X"] = 28.67, - ["Y"] = 55.49, - ["CD"] = 0, - }, - [161] = { - ["X"] = 26.86, - ["Y"] = 41.18, - ["CD"] = 0, - }, - [162] = { - ["X"] = 25.89, - ["Y"] = 44.55, - ["CD"] = 0, - }, - [163] = { - ["X"] = 24.23, - ["Y"] = 43.43, - ["CD"] = 0, - }, - [164] = { - ["X"] = 26.35, - ["Y"] = 39.24, - ["CD"] = 0, - }, - [165] = { - ["X"] = 28.83, - ["Y"] = 35.34, - ["CD"] = 0, - }, - [166] = { - ["X"] = 27.93, - ["Y"] = 30.52, - ["CD"] = 0, - }, - [167] = { - ["X"] = 28.73, - ["Y"] = 28.61, - ["CD"] = 0, - }, - [168] = { - ["X"] = 31.88, - ["Y"] = 26.11, - ["CD"] = 0, - }, - [169] = { - ["X"] = 37.52, - ["Y"] = 15.31, - ["CD"] = 0, - }, - [170] = { - ["X"] = 44.79, - ["Y"] = 12.36, - ["CD"] = 0, - }, - [171] = { - ["X"] = 58.06, - ["Y"] = 22.18, - ["CD"] = 0, - }, - [172] = { - ["X"] = 57.64, - ["Y"] = 19.03, - ["CD"] = 0, - }, - [173] = { - ["X"] = 54.81, - ["Y"] = 16.28, - ["CD"] = 0, - }, - [174] = { - ["X"] = 53.1, - ["Y"] = 13.37, - ["CD"] = 0, - }, - [175] = { - ["X"] = 49.63, - ["Y"] = 13.87, - ["CD"] = 0, - }, - [176] = { - ["X"] = 49.23, - ["Y"] = 8.72, - ["CD"] = 0, - }, - [177] = { - ["X"] = 47.72, - ["Y"] = 6.15, - ["CD"] = 0, - }, - [178] = { - ["X"] = 44.93, - ["Y"] = 7.4, - ["CD"] = 0, - }, - [179] = { - ["X"] = 42.09, - ["Y"] = 27.58, - ["CD"] = 0, - }, - [180] = { - ["X"] = 46.45, - ["Y"] = 26.28, - ["CD"] = 0, - }, - [181] = { - ["X"] = 47.57, - ["Y"] = 24.96, - ["CD"] = 0, - }, - [182] = { - ["X"] = 48.31, - ["Y"] = 29.71, - ["CD"] = 0, - }, - [183] = { - ["X"] = 35.86, - ["Y"] = 38.62, - ["CD"] = 0, - }, - [184] = { - ["X"] = 40.33, - ["Y"] = 33.71, - ["CD"] = 0, - }, - [185] = { - ["X"] = 36.87, - ["Y"] = 35.15, - ["CD"] = 0, - }, - [186] = { - ["X"] = 37.26, - ["Y"] = 33.85, - ["CD"] = 0, - }, - [187] = { - ["X"] = 42.47, - ["Y"] = 51.44, - ["CD"] = 0, - }, - [188] = { - ["X"] = 42.21, - ["Y"] = 54.16, - ["CD"] = 0, - }, - [189] = { - ["X"] = 44.95, - ["Y"] = 55.74, - ["CD"] = 0, - }, - [190] = { - ["X"] = 52, - ["Y"] = 32.57, - ["CD"] = 0, - }, - [191] = { - ["X"] = 52.49, - ["Y"] = 34.19, - ["CD"] = 0, - }, - [192] = { - ["X"] = 52.71, - ["Y"] = 39.16, - ["CD"] = 0, - }, - [193] = { - ["X"] = 54.4, - ["Y"] = 50.27, - ["CD"] = 0, - }, - [194] = { - ["X"] = 49.74, - ["Y"] = 42.1, - ["CD"] = 0, - }, - [195] = { - ["X"] = 47.22, - ["Y"] = 51.9, - ["CD"] = 0, - }, - [196] = { - ["X"] = 47.87, - ["Y"] = 54.97, - ["CD"] = 0, - }, - [197] = { - ["X"] = 43.42, - ["Y"] = 72.85, - ["CD"] = 0, - }, - [198] = { - ["X"] = 48.48, - ["Y"] = 54.81, - ["CD"] = 0, - }, - [199] = { - ["X"] = 38.62, - ["Y"] = 61.09, - ["CD"] = 0, - }, - [200] = { - ["X"] = 42.5, - ["Y"] = 61.79, - ["CD"] = 0, - }, - }, - --Stormheim / Fjarnskaggl - [1017] = { - [1] = { - ["X"] = 47.24, - ["Y"] = 55.62, - ["CD"] = 0, - }, - [2] = { - ["X"] = 51.47, - ["Y"] = 55.4, - ["CD"] = 0, - }, - [3] = { - ["X"] = 49.09, - ["Y"] = 52.04, - ["CD"] = 0, - }, - [4] = { - ["X"] = 48.14, - ["Y"] = 53.66, - ["CD"] = 0, - }, - [5] = { - ["X"] = 45.46, - ["Y"] = 53.33, - ["CD"] = 0, - }, - [6] = { - ["X"] = 42.97, - ["Y"] = 59.67, - ["CD"] = 0, - }, - [7] = { - ["X"] = 42.91, - ["Y"] = 57.7, - ["CD"] = 0, - }, - [8] = { - ["X"] = 42.8, - ["Y"] = 56.74, - ["CD"] = 0, - }, - [9] = { - ["X"] = 41.94, - ["Y"] = 53.95, - ["CD"] = 0, - }, - [10] = { - ["X"] = 39.66, - ["Y"] = 53.74, - ["CD"] = 0, - }, - [11] = { - ["X"] = 40.06, - ["Y"] = 52.65, - ["CD"] = 0, - }, - [12] = { - ["X"] = 41.77, - ["Y"] = 49.95, - ["CD"] = 0, - }, - [13] = { - ["X"] = 42.6, - ["Y"] = 49.17, - ["CD"] = 0, - }, - [14] = { - ["X"] = 42.02, - ["Y"] = 50.81, - ["CD"] = 0, - }, - [15] = { - ["X"] = 42.54, - ["Y"] = 52.47, - ["CD"] = 0, - }, - [16] = { - ["X"] = 42.86, - ["Y"] = 51.62, - ["CD"] = 0, - }, - [17] = { - ["X"] = 44.56, - ["Y"] = 52.7, - ["CD"] = 0, - }, - [18] = { - ["X"] = 43.88, - ["Y"] = 52.96, - ["CD"] = 0, - }, - [19] = { - ["X"] = 43.66, - ["Y"] = 54.02, - ["CD"] = 0, - }, - [20] = { - ["X"] = 44.39, - ["Y"] = 54.51, - ["CD"] = 0, - }, - [21] = { - ["X"] = 44.57, - ["Y"] = 56.26, - ["CD"] = 0, - }, - [22] = { - ["X"] = 44.17, - ["Y"] = 58.37, - ["CD"] = 0, - }, - [23] = { - ["X"] = 46.02, - ["Y"] = 58.16, - ["CD"] = 0, - }, - [24] = { - ["X"] = 45.54, - ["Y"] = 56.28, - ["CD"] = 0, - }, - [25] = { - ["X"] = 45.64, - ["Y"] = 55.67, - ["CD"] = 0, - }, - [26] = { - ["X"] = 45.88, - ["Y"] = 54.95, - ["CD"] = 0, - }, - [27] = { - ["X"] = 75.52, - ["Y"] = 64.36, - ["CD"] = 0, - }, - [28] = { - ["X"] = 74.64, - ["Y"] = 63.4, - ["CD"] = 0, - }, - [29] = { - ["X"] = 75.47, - ["Y"] = 61.49, - ["CD"] = 0, - }, - [30] = { - ["X"] = 76.04, - ["Y"] = 62.25, - ["CD"] = 0, - }, - [31] = { - ["X"] = 76.34, - ["Y"] = 62.88, - ["CD"] = 0, - }, - [32] = { - ["X"] = 75.6, - ["Y"] = 61.16, - ["CD"] = 0, - }, - [33] = { - ["X"] = 74.48, - ["Y"] = 61.07, - ["CD"] = 0, - }, - [34] = { - ["X"] = 73.1, - ["Y"] = 61.55, - ["CD"] = 0, - }, - [35] = { - ["X"] = 71.6, - ["Y"] = 61.94, - ["CD"] = 0, - }, - [36] = { - ["X"] = 71.17, - ["Y"] = 61.79, - ["CD"] = 0, - }, - [37] = { - ["X"] = 70.7, - ["Y"] = 61.82, - ["CD"] = 0, - }, - [38] = { - ["X"] = 69.93, - ["Y"] = 60.51, - ["CD"] = 0, - }, - [39] = { - ["X"] = 68.88, - ["Y"] = 62.24, - ["CD"] = 0, - }, - [40] = { - ["X"] = 68.02, - ["Y"] = 62.34, - ["CD"] = 0, - }, - [41] = { - ["X"] = 68.38, - ["Y"] = 60.4, - ["CD"] = 0, - }, - [42] = { - ["X"] = 68.09, - ["Y"] = 58.09, - ["CD"] = 0, - }, - [43] = { - ["X"] = 68.51, - ["Y"] = 57.47, - ["CD"] = 0, - }, - [44] = { - ["X"] = 69.32, - ["Y"] = 57.12, - ["CD"] = 0, - }, - [45] = { - ["X"] = 70.52, - ["Y"] = 56.23, - ["CD"] = 0, - }, - [46] = { - ["X"] = 68.72, - ["Y"] = 55.81, - ["CD"] = 0, - }, - [47] = { - ["X"] = 68.24, - ["Y"] = 55.37, - ["CD"] = 0, - }, - [48] = { - ["X"] = 67.73, - ["Y"] = 53.38, - ["CD"] = 0, - }, - [49] = { - ["X"] = 67.47, - ["Y"] = 50.94, - ["CD"] = 0, - }, - [50] = { - ["X"] = 66.2, - ["Y"] = 50.65, - ["CD"] = 0, - }, - [51] = { - ["X"] = 66.13, - ["Y"] = 49.8, - ["CD"] = 0, - }, - [52] = { - ["X"] = 65.36, - ["Y"] = 46.62, - ["CD"] = 0, - }, - [53] = { - ["X"] = 68.76, - ["Y"] = 42.62, - ["CD"] = 0, - }, - [54] = { - ["X"] = 69.77, - ["Y"] = 41.67, - ["CD"] = 0, - }, - [55] = { - ["X"] = 70.11, - ["Y"] = 40.61, - ["CD"] = 0, - }, - [56] = { - ["X"] = 70.23, - ["Y"] = 39.9, - ["CD"] = 0, - }, - [57] = { - ["X"] = 70.45, - ["Y"] = 39.16, - ["CD"] = 0, - }, - [58] = { - ["X"] = 71.16, - ["Y"] = 38.18, - ["CD"] = 0, - }, - [59] = { - ["X"] = 70.62, - ["Y"] = 37.63, - ["CD"] = 0, - }, - [60] = { - ["X"] = 69.98, - ["Y"] = 37.93, - ["CD"] = 0, - }, - [61] = { - ["X"] = 69.85, - ["Y"] = 36.95, - ["CD"] = 0, - }, - [62] = { - ["X"] = 69.11, - ["Y"] = 37.75, - ["CD"] = 0, - }, - [63] = { - ["X"] = 68.09, - ["Y"] = 38.08, - ["CD"] = 0, - }, - [64] = { - ["X"] = 68.51, - ["Y"] = 39.26, - ["CD"] = 0, - }, - [65] = { - ["X"] = 67.77, - ["Y"] = 40.49, - ["CD"] = 0, - }, - [66] = { - ["X"] = 67.39, - ["Y"] = 41.98, - ["CD"] = 0, - }, - [67] = { - ["X"] = 66.73, - ["Y"] = 42.58, - ["CD"] = 0, - }, - [68] = { - ["X"] = 67.01, - ["Y"] = 43.27, - ["CD"] = 0, - }, - [69] = { - ["X"] = 66.64, - ["Y"] = 43.31, - ["CD"] = 0, - }, - [70] = { - ["X"] = 65.25, - ["Y"] = 48.23, - ["CD"] = 0, - }, - [71] = { - ["X"] = 64.43, - ["Y"] = 47.44, - ["CD"] = 0, - }, - [72] = { - ["X"] = 64.3, - ["Y"] = 49.23, - ["CD"] = 0, - }, - [73] = { - ["X"] = 63.4, - ["Y"] = 49.43, - ["CD"] = 0, - }, - [74] = { - ["X"] = 61.43, - ["Y"] = 49.66, - ["CD"] = 0, - }, - [75] = { - ["X"] = 62.74, - ["Y"] = 50.15, - ["CD"] = 0, - }, - [76] = { - ["X"] = 62.33, - ["Y"] = 50.62, - ["CD"] = 0, - }, - [77] = { - ["X"] = 61.77, - ["Y"] = 51.52, - ["CD"] = 0, - }, - [78] = { - ["X"] = 61.5, - ["Y"] = 53.26, - ["CD"] = 0, - }, - [79] = { - ["X"] = 61.08, - ["Y"] = 54.15, - ["CD"] = 0, - }, - [80] = { - ["X"] = 59.76, - ["Y"] = 53.98, - ["CD"] = 0, - }, - [81] = { - ["X"] = 59.06, - ["Y"] = 52.97, - ["CD"] = 0, - }, - [82] = { - ["X"] = 59.38, - ["Y"] = 51.04, - ["CD"] = 0, - }, - [83] = { - ["X"] = 59.05, - ["Y"] = 51.07, - ["CD"] = 0, - }, - [84] = { - ["X"] = 58.05, - ["Y"] = 51.4, - ["CD"] = 0, - }, - [85] = { - ["X"] = 57.23, - ["Y"] = 50.59, - ["CD"] = 0, - }, - [86] = { - ["X"] = 56.64, - ["Y"] = 50.71, - ["CD"] = 0, - }, - [87] = { - ["X"] = 53.07, - ["Y"] = 53.33, - ["CD"] = 0, - }, - [88] = { - ["X"] = 53.94, - ["Y"] = 54.38, - ["CD"] = 0, - }, - [89] = { - ["X"] = 53.44, - ["Y"] = 54.49, - ["CD"] = 0, - }, - [90] = { - ["X"] = 52.19, - ["Y"] = 56.4, - ["CD"] = 0, - }, - [91] = { - ["X"] = 51.96, - ["Y"] = 58.49, - ["CD"] = 0, - }, - [92] = { - ["X"] = 51.66, - ["Y"] = 58.85, - ["CD"] = 0, - }, - [93] = { - ["X"] = 51.36, - ["Y"] = 59.61, - ["CD"] = 0, - }, - [94] = { - ["X"] = 52, - ["Y"] = 60.49, - ["CD"] = 0, - }, - [95] = { - ["X"] = 53.76, - ["Y"] = 58.93, - ["CD"] = 0, - }, - [96] = { - ["X"] = 53.43, - ["Y"] = 58.03, - ["CD"] = 0, - }, - [97] = { - ["X"] = 52.75, - ["Y"] = 56.71, - ["CD"] = 0, - }, - [98] = { - ["X"] = 53.34, - ["Y"] = 56.63, - ["CD"] = 0, - }, - [99] = { - ["X"] = 53.46, - ["Y"] = 55.97, - ["CD"] = 0, - }, - [100] = { - ["X"] = 52.99, - ["Y"] = 55.07, - ["CD"] = 0, - }, - [101] = { - ["X"] = 52.69, - ["Y"] = 53.46, - ["CD"] = 0, - }, - [102] = { - ["X"] = 51.16, - ["Y"] = 53.73, - ["CD"] = 0, - }, - [103] = { - ["X"] = 50.62, - ["Y"] = 53.1, - ["CD"] = 0, - }, - [104] = { - ["X"] = 50.2, - ["Y"] = 52.37, - ["CD"] = 0, - }, - [105] = { - ["X"] = 50.13, - ["Y"] = 50.4, - ["CD"] = 0, - }, - [106] = { - ["X"] = 48.08, - ["Y"] = 50.93, - ["CD"] = 0, - }, - [107] = { - ["X"] = 47.68, - ["Y"] = 48.92, - ["CD"] = 0, - }, - [108] = { - ["X"] = 44.23, - ["Y"] = 45.97, - ["CD"] = 0, - }, - [109] = { - ["X"] = 45.22, - ["Y"] = 43.32, - ["CD"] = 0, - }, - [110] = { - ["X"] = 45.69, - ["Y"] = 42.54, - ["CD"] = 0, - }, - [111] = { - ["X"] = 46.28, - ["Y"] = 42.7, - ["CD"] = 0, - }, - [112] = { - ["X"] = 48.34, - ["Y"] = 39.8, - ["CD"] = 0, - }, - [113] = { - ["X"] = 49.36, - ["Y"] = 37.64, - ["CD"] = 0, - }, - [114] = { - ["X"] = 47.3, - ["Y"] = 38.94, - ["CD"] = 0, - }, - [115] = { - ["X"] = 42.38, - ["Y"] = 41.41, - ["CD"] = 0, - }, - [116] = { - ["X"] = 42.36, - ["Y"] = 39.64, - ["CD"] = 0, - }, - [117] = { - ["X"] = 42.97, - ["Y"] = 39.05, - ["CD"] = 0, - }, - [118] = { - ["X"] = 42.41, - ["Y"] = 38.26, - ["CD"] = 0, - }, - [119] = { - ["X"] = 40.83, - ["Y"] = 40.62, - ["CD"] = 0, - }, - [120] = { - ["X"] = 41.68, - ["Y"] = 40.19, - ["CD"] = 0, - }, - [121] = { - ["X"] = 61.22, - ["Y"] = 64.31, - ["CD"] = 0, - }, - [122] = { - ["X"] = 56.67, - ["Y"] = 79.09, - ["CD"] = 0, - }, - [123] = { - ["X"] = 73.25, - ["Y"] = 44.25, - ["CD"] = 0, - }, - [124] = { - ["X"] = 73.25, - ["Y"] = 44.5, - ["CD"] = 0, - }, - [125] = { - ["X"] = 69.24, - ["Y"] = 50.47, - ["CD"] = 0, - }, - [126] = { - ["X"] = 64.32, - ["Y"] = 44.07, - ["CD"] = 0, - }, - [127] = { - ["X"] = 62.95, - ["Y"] = 46.32, - ["CD"] = 0, - }, - [128] = { - ["X"] = 63.56, - ["Y"] = 45.14, - ["CD"] = 0, - }, - [129] = { - ["X"] = 68.35, - ["Y"] = 58.98, - ["CD"] = 0, - }, - [130] = { - ["X"] = 71.6, - ["Y"] = 52.25, - ["CD"] = 0, - }, - [131] = { - ["X"] = 82.09, - ["Y"] = 57.01, - ["CD"] = 0, - }, - [132] = { - ["X"] = 80.93, - ["Y"] = 56.31, - ["CD"] = 0, - }, - [133] = { - ["X"] = 79.83, - ["Y"] = 64.42, - ["CD"] = 0, - }, - [134] = { - ["X"] = 78.73, - ["Y"] = 63.87, - ["CD"] = 0, - }, - [135] = { - ["X"] = 80.89, - ["Y"] = 63.18, - ["CD"] = 0, - }, - [136] = { - ["X"] = 78.75, - ["Y"] = 58.41, - ["CD"] = 0, - }, - [137] = { - ["X"] = 77.87, - ["Y"] = 57.58, - ["CD"] = 0, - }, - [138] = { - ["X"] = 73.32, - ["Y"] = 59.52, - ["CD"] = 0, - }, - [139] = { - ["X"] = 70.2, - ["Y"] = 58.54, - ["CD"] = 0, - }, - [140] = { - ["X"] = 68.78, - ["Y"] = 54.4, - ["CD"] = 0, - }, - [141] = { - ["X"] = 67.69, - ["Y"] = 59.37, - ["CD"] = 0, - }, - [142] = { - ["X"] = 67.61, - ["Y"] = 54.47, - ["CD"] = 0, - }, - [143] = { - ["X"] = 65.94, - ["Y"] = 52.25, - ["CD"] = 0, - }, - [144] = { - ["X"] = 63.57, - ["Y"] = 55.84, - ["CD"] = 0, - }, - [145] = { - ["X"] = 68.18, - ["Y"] = 50.25, - ["CD"] = 0, - }, - [146] = { - ["X"] = 43.9, - ["Y"] = 58.83, - ["CD"] = 0, - }, - [147] = { - ["X"] = 43.27, - ["Y"] = 81.62, - ["CD"] = 0, - }, - [148] = { - ["X"] = 45.24, - ["Y"] = 75.28, - ["CD"] = 0, - }, - [149] = { - ["X"] = 43.53, - ["Y"] = 70.2, - ["CD"] = 0, - }, - [150] = { - ["X"] = 43.4, - ["Y"] = 71.29, - ["CD"] = 0, - }, - [151] = { - ["X"] = 48, - ["Y"] = 67.59, - ["CD"] = 0, - }, - [152] = { - ["X"] = 41.82, - ["Y"] = 65.83, - ["CD"] = 0, - }, - [153] = { - ["X"] = 41.11, - ["Y"] = 65.23, - ["CD"] = 0, - }, - [154] = { - ["X"] = 37.84, - ["Y"] = 64.52, - ["CD"] = 0, - }, - [155] = { - ["X"] = 41.31, - ["Y"] = 58.59, - ["CD"] = 0, - }, - [156] = { - ["X"] = 42.35, - ["Y"] = 61.07, - ["CD"] = 0, - }, - [157] = { - ["X"] = 38.37, - ["Y"] = 56.57, - ["CD"] = 0, - }, - [158] = { - ["X"] = 37.66, - ["Y"] = 55.01, - ["CD"] = 0, - }, - [159] = { - ["X"] = 44.11, - ["Y"] = 44.07, - ["CD"] = 0, - }, - [160] = { - ["X"] = 46.61, - ["Y"] = 40.23, - ["CD"] = 0, - }, - [161] = { - ["X"] = 44.65, - ["Y"] = 38.78, - ["CD"] = 0, - }, - [162] = { - ["X"] = 47.94, - ["Y"] = 35.39, - ["CD"] = 0, - }, - [163] = { - ["X"] = 43.25, - ["Y"] = 31.36, - ["CD"] = 0, - }, - [164] = { - ["X"] = 45.4, - ["Y"] = 30.26, - ["CD"] = 0, - }, - [165] = { - ["X"] = 43.1, - ["Y"] = 26.67, - ["CD"] = 0, - }, - [166] = { - ["X"] = 45.47, - ["Y"] = 25.53, - ["CD"] = 0, - }, - [167] = { - ["X"] = 50.15, - ["Y"] = 21.58, - ["CD"] = 0, - }, - [168] = { - ["X"] = 48.03, - ["Y"] = 21.48, - ["CD"] = 0, - }, - [169] = { - ["X"] = 62, - ["Y"] = 25.52, - ["CD"] = 0, - }, - [170] = { - ["X"] = 60.54, - ["Y"] = 29.82, - ["CD"] = 0, - }, - [171] = { - ["X"] = 52, - ["Y"] = 25.83, - ["CD"] = 0, - }, - [172] = { - ["X"] = 50.54, - ["Y"] = 35.56, - ["CD"] = 0, - }, - [173] = { - ["X"] = 44.97, - ["Y"] = 39.08, - ["CD"] = 0, - }, - [174] = { - ["X"] = 42.83, - ["Y"] = 42.04, - ["CD"] = 0, - }, - [175] = { - ["X"] = 43.57, - ["Y"] = 45.19, - ["CD"] = 0, - }, - [176] = { - ["X"] = 43.59, - ["Y"] = 46.2, - ["CD"] = 0, - }, - [177] = { - ["X"] = 49.47, - ["Y"] = 49.89, - ["CD"] = 0, - }, - [178] = { - ["X"] = 48.93, - ["Y"] = 49.78, - ["CD"] = 0, - }, - [179] = { - ["X"] = 43.63, - ["Y"] = 38.21, - ["CD"] = 0, - }, - [180] = { - ["X"] = 45.98, - ["Y"] = 38.79, - ["CD"] = 0, - }, - [181] = { - ["X"] = 44.19, - ["Y"] = 40.82, - ["CD"] = 0, - }, - [182] = { - ["X"] = 43.7, - ["Y"] = 42.61, - ["CD"] = 0, - }, - [183] = { - ["X"] = 44.29, - ["Y"] = 46.69, - ["CD"] = 0, - }, - [184] = { - ["X"] = 40.96, - ["Y"] = 37.98, - ["CD"] = 0, - }, - [185] = { - ["X"] = 42.18, - ["Y"] = 36.75, - ["CD"] = 0, - }, - [186] = { - ["X"] = 28.74, - ["Y"] = 46.9, - ["CD"] = 0, - }, - [187] = { - ["X"] = 29.32, - ["Y"] = 47.14, - ["CD"] = 0, - }, - [188] = { - ["X"] = 30.43, - ["Y"] = 51.49, - ["CD"] = 0, - }, - [189] = { - ["X"] = 34.47, - ["Y"] = 45.62, - ["CD"] = 0, - }, - [190] = { - ["X"] = 28.01, - ["Y"] = 41.97, - ["CD"] = 0, - }, - [191] = { - ["X"] = 33.22, - ["Y"] = 43.93, - ["CD"] = 0, - }, - [192] = { - ["X"] = 34.45, - ["Y"] = 42.11, - ["CD"] = 0, - }, - [193] = { - ["X"] = 36.37, - ["Y"] = 40.26, - ["CD"] = 0, - }, - [194] = { - ["X"] = 38.14, - ["Y"] = 23.01, - ["CD"] = 0, - }, - [195] = { - ["X"] = 43.17, - ["Y"] = 21.07, - ["CD"] = 0, - }, - [196] = { - ["X"] = 35.77, - ["Y"] = 27.54, - ["CD"] = 0, - }, - [197] = { - ["X"] = 63.95, - ["Y"] = 62.4, - ["CD"] = 0, - }, - [198] = { - ["X"] = 65.8, - ["Y"] = 58.06, - ["CD"] = 0, - }, - [199] = { - ["X"] = 59.47, - ["Y"] = 56.02, - ["CD"] = 0, - }, - [200] = { - ["X"] = 60.84, - ["Y"] = 55.71, - ["CD"] = 0, - }, - }, - --Val'sharah / Dreamleaf - [1018] = { - [1] = { - ["X"] = 61.87, - ["Y"] = 52.19, - ["CD"] = 0, - }, - [2] = { - ["X"] = 60.2, - ["Y"] = 53.05, - ["CD"] = 0, - }, - [3] = { - ["X"] = 60.65, - ["Y"] = 54.53, - ["CD"] = 0, - }, - [4] = { - ["X"] = 59.47, - ["Y"] = 55.87, - ["CD"] = 0, - }, - [5] = { - ["X"] = 56.22, - ["Y"] = 60.29, - ["CD"] = 0, - }, - [6] = { - ["X"] = 56.95, - ["Y"] = 61.33, - ["CD"] = 0, - }, - [7] = { - ["X"] = 56.52, - ["Y"] = 64.31, - ["CD"] = 0, - }, - [8] = { - ["X"] = 58.38, - ["Y"] = 65.51, - ["CD"] = 0, - }, - [9] = { - ["X"] = 56.03, - ["Y"] = 64.65, - ["CD"] = 0, - }, - [10] = { - ["X"] = 55.53, - ["Y"] = 70.26, - ["CD"] = 0, - }, - [11] = { - ["X"] = 57.79, - ["Y"] = 71.48, - ["CD"] = 0, - }, - [12] = { - ["X"] = 59.03, - ["Y"] = 69.43, - ["CD"] = 0, - }, - [13] = { - ["X"] = 57.33, - ["Y"] = 69.9, - ["CD"] = 0, - }, - [14] = { - ["X"] = 55.39, - ["Y"] = 68.84, - ["CD"] = 0, - }, - [15] = { - ["X"] = 55.08, - ["Y"] = 63.45, - ["CD"] = 0, - }, - [16] = { - ["X"] = 52.34, - ["Y"] = 61.54, - ["CD"] = 0, - }, - [17] = { - ["X"] = 51.12, - ["Y"] = 64.53, - ["CD"] = 0, - }, - [18] = { - ["X"] = 54.28, - ["Y"] = 62.65, - ["CD"] = 0, - }, - [19] = { - ["X"] = 54.32, - ["Y"] = 66.08, - ["CD"] = 0, - }, - [20] = { - ["X"] = 58.53, - ["Y"] = 61.45, - ["CD"] = 0, - }, - [21] = { - ["X"] = 58.37, - ["Y"] = 63.02, - ["CD"] = 0, - }, - [22] = { - ["X"] = 59.24, - ["Y"] = 65.05, - ["CD"] = 0, - }, - [23] = { - ["X"] = 62.31, - ["Y"] = 64.97, - ["CD"] = 0, - }, - [24] = { - ["X"] = 63.37, - ["Y"] = 67.79, - ["CD"] = 0, - }, - [25] = { - ["X"] = 64.83, - ["Y"] = 68.7, - ["CD"] = 0, - }, - [26] = { - ["X"] = 68.37, - ["Y"] = 63.92, - ["CD"] = 0, - }, - [27] = { - ["X"] = 66.9, - ["Y"] = 66.86, - ["CD"] = 0, - }, - [28] = { - ["X"] = 67.08, - ["Y"] = 68.7, - ["CD"] = 0, - }, - [29] = { - ["X"] = 66.91, - ["Y"] = 70.84, - ["CD"] = 0, - }, - [30] = { - ["X"] = 65.61, - ["Y"] = 71.3, - ["CD"] = 0, - }, - [31] = { - ["X"] = 65.43, - ["Y"] = 74.05, - ["CD"] = 0, - }, - [32] = { - ["X"] = 66.57, - ["Y"] = 73.67, - ["CD"] = 0, - }, - [33] = { - ["X"] = 68.75, - ["Y"] = 72.27, - ["CD"] = 0, - }, - [34] = { - ["X"] = 67.56, - ["Y"] = 72.17, - ["CD"] = 0, - }, - [35] = { - ["X"] = 68.81, - ["Y"] = 74.63, - ["CD"] = 0, - }, - [36] = { - ["X"] = 67.77, - ["Y"] = 75.19, - ["CD"] = 0, - }, - [37] = { - ["X"] = 67.02, - ["Y"] = 76.86, - ["CD"] = 0, - }, - [38] = { - ["X"] = 65.7, - ["Y"] = 75.96, - ["CD"] = 0, - }, - [39] = { - ["X"] = 60.05, - ["Y"] = 76.17, - ["CD"] = 0, - }, - [40] = { - ["X"] = 56.95, - ["Y"] = 76.95, - ["CD"] = 0, - }, - [41] = { - ["X"] = 57.35, - ["Y"] = 75.19, - ["CD"] = 0, - }, - [42] = { - ["X"] = 58.36, - ["Y"] = 73.27, - ["CD"] = 0, - }, - [43] = { - ["X"] = 59.08, - ["Y"] = 73.81, - ["CD"] = 0, - }, - [44] = { - ["X"] = 60.66, - ["Y"] = 75.82, - ["CD"] = 0, - }, - [45] = { - ["X"] = 61.34, - ["Y"] = 79.25, - ["CD"] = 0, - }, - [46] = { - ["X"] = 62.71, - ["Y"] = 80.38, - ["CD"] = 0, - }, - [47] = { - ["X"] = 60.26, - ["Y"] = 80.68, - ["CD"] = 0, - }, - [48] = { - ["X"] = 59.23, - ["Y"] = 82.19, - ["CD"] = 0, - }, - [49] = { - ["X"] = 62.34, - ["Y"] = 84.98, - ["CD"] = 0, - }, - [50] = { - ["X"] = 58.92, - ["Y"] = 88.3, - ["CD"] = 0, - }, - [51] = { - ["X"] = 55.85, - ["Y"] = 89.71, - ["CD"] = 0, - }, - [52] = { - ["X"] = 56.13, - ["Y"] = 87.83, - ["CD"] = 0, - }, - [53] = { - ["X"] = 54.22, - ["Y"] = 88.9, - ["CD"] = 0, - }, - [54] = { - ["X"] = 53.37, - ["Y"] = 87.68, - ["CD"] = 0, - }, - [55] = { - ["X"] = 50.61, - ["Y"] = 86.57, - ["CD"] = 0, - }, - [56] = { - ["X"] = 49.98, - ["Y"] = 83.55, - ["CD"] = 0, - }, - [57] = { - ["X"] = 49.47, - ["Y"] = 81.21, - ["CD"] = 0, - }, - [58] = { - ["X"] = 50.49, - ["Y"] = 79.7, - ["CD"] = 0, - }, - [59] = { - ["X"] = 51.4, - ["Y"] = 78.35, - ["CD"] = 0, - }, - [60] = { - ["X"] = 52.52, - ["Y"] = 75.98, - ["CD"] = 0, - }, - [61] = { - ["X"] = 48.75, - ["Y"] = 73.96, - ["CD"] = 0, - }, - [62] = { - ["X"] = 48.14, - ["Y"] = 72.49, - ["CD"] = 0, - }, - [63] = { - ["X"] = 46.98, - ["Y"] = 58.58, - ["CD"] = 0, - }, - [64] = { - ["X"] = 43.72, - ["Y"] = 57.99, - ["CD"] = 0, - }, - [65] = { - ["X"] = 46.84, - ["Y"] = 37.45, - ["CD"] = 0, - }, - [66] = { - ["X"] = 46.85, - ["Y"] = 39.36, - ["CD"] = 0, - }, - [67] = { - ["X"] = 47.84, - ["Y"] = 38.96, - ["CD"] = 0, - }, - [68] = { - ["X"] = 48.45, - ["Y"] = 40.92, - ["CD"] = 0, - }, - [69] = { - ["X"] = 50.4, - ["Y"] = 39.27, - ["CD"] = 0, - }, - [70] = { - ["X"] = 50.43, - ["Y"] = 40.57, - ["CD"] = 0, - }, - [71] = { - ["X"] = 52.45, - ["Y"] = 44.2, - ["CD"] = 0, - }, - [72] = { - ["X"] = 54.73, - ["Y"] = 47.17, - ["CD"] = 0, - }, - [73] = { - ["X"] = 56.35, - ["Y"] = 45.89, - ["CD"] = 0, - }, - [74] = { - ["X"] = 54.9, - ["Y"] = 41.74, - ["CD"] = 0, - }, - [75] = { - ["X"] = 54.87, - ["Y"] = 39.41, - ["CD"] = 0, - }, - [76] = { - ["X"] = 56.71, - ["Y"] = 40.19, - ["CD"] = 0, - }, - [77] = { - ["X"] = 57.58, - ["Y"] = 41.53, - ["CD"] = 0, - }, - [78] = { - ["X"] = 58.36, - ["Y"] = 41.66, - ["CD"] = 0, - }, - [79] = { - ["X"] = 60.05, - ["Y"] = 42.17, - ["CD"] = 0, - }, - [80] = { - ["X"] = 61.65, - ["Y"] = 43.31, - ["CD"] = 0, - }, - [81] = { - ["X"] = 60.92, - ["Y"] = 41.56, - ["CD"] = 0, - }, - [82] = { - ["X"] = 62.24, - ["Y"] = 44.16, - ["CD"] = 0, - }, - [83] = { - ["X"] = 62.18, - ["Y"] = 43.11, - ["CD"] = 0, - }, - [84] = { - ["X"] = 64.04, - ["Y"] = 40.91, - ["CD"] = 0, - }, - [85] = { - ["X"] = 62.84, - ["Y"] = 40.65, - ["CD"] = 0, - }, - [86] = { - ["X"] = 63.51, - ["Y"] = 38.93, - ["CD"] = 0, - }, - [87] = { - ["X"] = 69.12, - ["Y"] = 39.38, - ["CD"] = 0, - }, - [88] = { - ["X"] = 70.92, - ["Y"] = 38.4, - ["CD"] = 0, - }, - [89] = { - ["X"] = 71.19, - ["Y"] = 42.44, - ["CD"] = 0, - }, - [90] = { - ["X"] = 72.93, - ["Y"] = 44.69, - ["CD"] = 0, - }, - [91] = { - ["X"] = 71.57, - ["Y"] = 47.07, - ["CD"] = 0, - }, - [92] = { - ["X"] = 69.24, - ["Y"] = 45.68, - ["CD"] = 0, - }, - [93] = { - ["X"] = 69.93, - ["Y"] = 47.65, - ["CD"] = 0, - }, - [94] = { - ["X"] = 68.74, - ["Y"] = 48.58, - ["CD"] = 0, - }, - [95] = { - ["X"] = 68.01, - ["Y"] = 50.36, - ["CD"] = 0, - }, - [96] = { - ["X"] = 70.59, - ["Y"] = 51.95, - ["CD"] = 0, - }, - [97] = { - ["X"] = 70.77, - ["Y"] = 54.92, - ["CD"] = 0, - }, - [98] = { - ["X"] = 71.17, - ["Y"] = 56.39, - ["CD"] = 0, - }, - [99] = { - ["X"] = 70.27, - ["Y"] = 56.41, - ["CD"] = 0, - }, - [100] = { - ["X"] = 69.1, - ["Y"] = 55.12, - ["CD"] = 0, - }, - [101] = { - ["X"] = 65.97, - ["Y"] = 59.44, - ["CD"] = 0, - }, - [102] = { - ["X"] = 65.88, - ["Y"] = 56.5, - ["CD"] = 0, - }, - [103] = { - ["X"] = 64.45, - ["Y"] = 53.78, - ["CD"] = 0, - }, - [104] = { - ["X"] = 63.19, - ["Y"] = 56.73, - ["CD"] = 0, - }, - [105] = { - ["X"] = 64.13, - ["Y"] = 58.96, - ["CD"] = 0, - }, - [106] = { - ["X"] = 65.55, - ["Y"] = 61.24, - ["CD"] = 0, - }, - [107] = { - ["X"] = 64.01, - ["Y"] = 61.23, - ["CD"] = 0, - }, - [108] = { - ["X"] = 64.35, - ["Y"] = 75.33, - ["CD"] = 0, - }, - [109] = { - ["X"] = 64.04, - ["Y"] = 79.4, - ["CD"] = 0, - }, - [110] = { - ["X"] = 65.31, - ["Y"] = 79.67, - ["CD"] = 0, - }, - [111] = { - ["X"] = 64.07, - ["Y"] = 81.41, - ["CD"] = 0, - }, - [112] = { - ["X"] = 62.41, - ["Y"] = 82.04, - ["CD"] = 0, - }, - [113] = { - ["X"] = 61.02, - ["Y"] = 83.56, - ["CD"] = 0, - }, - [114] = { - ["X"] = 59.89, - ["Y"] = 83.19, - ["CD"] = 0, - }, - [115] = { - ["X"] = 60.72, - ["Y"] = 84.32, - ["CD"] = 0, - }, - [116] = { - ["X"] = 61.72, - ["Y"] = 84.3, - ["CD"] = 0, - }, - [117] = { - ["X"] = 59.99, - ["Y"] = 79.24, - ["CD"] = 0, - }, - [118] = { - ["X"] = 56.12, - ["Y"] = 79.23, - ["CD"] = 0, - }, - [119] = { - ["X"] = 55.7, - ["Y"] = 76.89, - ["CD"] = 0, - }, - [120] = { - ["X"] = 51.19, - ["Y"] = 72.26, - ["CD"] = 0, - }, - [121] = { - ["X"] = 53.78, - ["Y"] = 70.92, - ["CD"] = 0, - }, - [122] = { - ["X"] = 52.44, - ["Y"] = 72.53, - ["CD"] = 0, - }, - [123] = { - ["X"] = 47.63, - ["Y"] = 77.64, - ["CD"] = 0, - }, - [124] = { - ["X"] = 49.85, - ["Y"] = 74.92, - ["CD"] = 0, - }, - [125] = { - ["X"] = 49.99, - ["Y"] = 77.55, - ["CD"] = 0, - }, - [126] = { - ["X"] = 47.43, - ["Y"] = 76.36, - ["CD"] = 0, - }, - [127] = { - ["X"] = 44.57, - ["Y"] = 82.87, - ["CD"] = 0, - }, - [128] = { - ["X"] = 44.59, - ["Y"] = 86.64, - ["CD"] = 0, - }, - [129] = { - ["X"] = 45.1, - ["Y"] = 86.63, - ["CD"] = 0, - }, - [130] = { - ["X"] = 44.31, - ["Y"] = 85.05, - ["CD"] = 0, - }, - [131] = { - ["X"] = 42.91, - ["Y"] = 83.59, - ["CD"] = 0, - }, - [132] = { - ["X"] = 42.69, - ["Y"] = 81.24, - ["CD"] = 0, - }, - [133] = { - ["X"] = 42.59, - ["Y"] = 80.4, - ["CD"] = 0, - }, - [134] = { - ["X"] = 41.57, - ["Y"] = 81.13, - ["CD"] = 0, - }, - [135] = { - ["X"] = 40.88, - ["Y"] = 75.34, - ["CD"] = 0, - }, - [136] = { - ["X"] = 50.44, - ["Y"] = 53.49, - ["CD"] = 0, - }, - [137] = { - ["X"] = 53.43, - ["Y"] = 52.68, - ["CD"] = 0, - }, - [138] = { - ["X"] = 55.29, - ["Y"] = 50.86, - ["CD"] = 0, - }, - [139] = { - ["X"] = 54.1, - ["Y"] = 52.27, - ["CD"] = 0, - }, - [140] = { - ["X"] = 53.37, - ["Y"] = 51.14, - ["CD"] = 0, - }, - [141] = { - ["X"] = 53.52, - ["Y"] = 49.5, - ["CD"] = 0, - }, - [142] = { - ["X"] = 52.4, - ["Y"] = 49.71, - ["CD"] = 0, - }, - [143] = { - ["X"] = 50.9, - ["Y"] = 49.61, - ["CD"] = 0, - }, - [144] = { - ["X"] = 47.8, - ["Y"] = 52.24, - ["CD"] = 0, - }, - [145] = { - ["X"] = 47.93, - ["Y"] = 55.01, - ["CD"] = 0, - }, - [146] = { - ["X"] = 46.89, - ["Y"] = 53.79, - ["CD"] = 0, - }, - [147] = { - ["X"] = 46.22, - ["Y"] = 55.18, - ["CD"] = 0, - }, - [148] = { - ["X"] = 46.32, - ["Y"] = 56.82, - ["CD"] = 0, - }, - [149] = { - ["X"] = 40.2, - ["Y"] = 62.85, - ["CD"] = 0, - }, - [150] = { - ["X"] = 40.35, - ["Y"] = 60.93, - ["CD"] = 0, - }, - [151] = { - ["X"] = 36.08, - ["Y"] = 58.38, - ["CD"] = 0, - }, - [152] = { - ["X"] = 35.03, - ["Y"] = 60.53, - ["CD"] = 0, - }, - [153] = { - ["X"] = 35.66, - ["Y"] = 60.3, - ["CD"] = 0, - }, - [154] = { - ["X"] = 40.75, - ["Y"] = 60.72, - ["CD"] = 0, - }, - [155] = { - ["X"] = 44.99, - ["Y"] = 60.93, - ["CD"] = 0, - }, - [156] = { - ["X"] = 43.77, - ["Y"] = 60.96, - ["CD"] = 0, - }, - [157] = { - ["X"] = 43.04, - ["Y"] = 63.03, - ["CD"] = 0, - }, - [158] = { - ["X"] = 41.88, - ["Y"] = 63.67, - ["CD"] = 0, - }, - [159] = { - ["X"] = 42.45, - ["Y"] = 61.88, - ["CD"] = 0, - }, - [160] = { - ["X"] = 43.65, - ["Y"] = 60.82, - ["CD"] = 0, - }, - [161] = { - ["X"] = 58.38, - ["Y"] = 33.52, - ["CD"] = 0, - }, - [162] = { - ["X"] = 41.66, - ["Y"] = 54.31, - ["CD"] = 0, - }, - [163] = { - ["X"] = 40.52, - ["Y"] = 51.34, - ["CD"] = 0, - }, - [164] = { - ["X"] = 37.56, - ["Y"] = 54.61, - ["CD"] = 0, - }, - [165] = { - ["X"] = 49.48, - ["Y"] = 49.77, - ["CD"] = 0, - }, - [166] = { - ["X"] = 51.33, - ["Y"] = 41.98, - ["CD"] = 0, - }, - [167] = { - ["X"] = 55.3, - ["Y"] = 55.78, - ["CD"] = 0, - }, - [168] = { - ["X"] = 61.99, - ["Y"] = 30.91, - ["CD"] = 0, - }, - [169] = { - ["X"] = 57.71, - ["Y"] = 39.6, - ["CD"] = 0, - }, - [170] = { - ["X"] = 69.54, - ["Y"] = 37.38, - ["CD"] = 0, - }, - [171] = { - ["X"] = 68.35, - ["Y"] = 39.91, - ["CD"] = 0, - }, - [172] = { - ["X"] = 62.37, - ["Y"] = 48.14, - ["CD"] = 0, - }, - [173] = { - ["X"] = 65.9, - ["Y"] = 41.14, - ["CD"] = 0, - }, - [174] = { - ["X"] = 73.55, - ["Y"] = 52.84, - ["CD"] = 0, - }, - [175] = { - ["X"] = 74.57, - ["Y"] = 39.75, - ["CD"] = 0, - }, - [176] = { - ["X"] = 72.1, - ["Y"] = 49.22, - ["CD"] = 0, - }, - [177] = { - ["X"] = 69.79, - ["Y"] = 53.26, - ["CD"] = 0, - }, - [178] = { - ["X"] = 67.27, - ["Y"] = 60.55, - ["CD"] = 0, - }, - [179] = { - ["X"] = 64.16, - ["Y"] = 58.7, - ["CD"] = 0, - }, - [180] = { - ["X"] = 54.76, - ["Y"] = 57.01, - ["CD"] = 0, - }, - [181] = { - ["X"] = 57.81, - ["Y"] = 60.35, - ["CD"] = 0, - }, - [182] = { - ["X"] = 48.01, - ["Y"] = 69.08, - ["CD"] = 0, - }, - [183] = { - ["X"] = 42.49, - ["Y"] = 79.11, - ["CD"] = 0, - }, - [184] = { - ["X"] = 41.64, - ["Y"] = 69.85, - ["CD"] = 0, - }, - [185] = { - ["X"] = 45.52, - ["Y"] = 73.05, - ["CD"] = 0, - }, - [186] = { - ["X"] = 50.98, - ["Y"] = 82.3, - ["CD"] = 0, - }, - [187] = { - ["X"] = 65.76, - ["Y"] = 68.15, - ["CD"] = 0, - }, - [188] = { - ["X"] = 63.63, - ["Y"] = 64.98, - ["CD"] = 0, - }, - [189] = { - ["X"] = 57.28, - ["Y"] = 90.49, - ["CD"] = 0, - }, - [190] = { - ["X"] = 55.64, - ["Y"] = 84.34, - ["CD"] = 0, - }, - [191] = { - ["X"] = 39.95, - ["Y"] = 88.45, - ["CD"] = 0, - }, - [192] = { - ["X"] = 44.02, - ["Y"] = 82.51, - ["CD"] = 0, - }, - [193] = { - ["X"] = 47.72, - ["Y"] = 85.61, - ["CD"] = 0, - }, - [194] = { - ["X"] = 50.24, - ["Y"] = 84.23, - ["CD"] = 0, - }, - [195] = { - ["X"] = 43.02, - ["Y"] = 88.03, - ["CD"] = 0, - }, - [196] = { - ["X"] = 46.15, - ["Y"] = 83.47, - ["CD"] = 0, - }, - [197] = { - ["X"] = 55.23, - ["Y"] = 68.18, - ["CD"] = 0, - }, - [198] = { - ["X"] = 22.55, - ["Y"] = 64.61, - ["CD"] = 0, - }, - [199] = { - ["X"] = 22.95, - ["Y"] = 72.49, - ["CD"] = 0, - }, - [200] = { - ["X"] = 21.81, - ["Y"] = 69.82, - ["CD"] = 0, - }, - }, - --Suramar / Starlight Rose - [1033] = { - [1] = { - ["X"] = 52.4, - ["Y"] = 48.2, - ["CD"] = 0, - }, - [2] = { - ["X"] = 54.4, - ["Y"] = 48.23, - ["CD"] = 0, - }, - [3] = { - ["X"] = 59.18, - ["Y"] = 50.54, - ["CD"] = 0, - }, - [4] = { - ["X"] = 58.96, - ["Y"] = 46.15, - ["CD"] = 0, - }, - [5] = { - ["X"] = 54.91, - ["Y"] = 46.5, - ["CD"] = 0, - }, - [6] = { - ["X"] = 54.55, - ["Y"] = 47.26, - ["CD"] = 0, - }, - [7] = { - ["X"] = 61.05, - ["Y"] = 50.74, - ["CD"] = 0, - }, - [8] = { - ["X"] = 62.89, - ["Y"] = 52.74, - ["CD"] = 0, - }, - [9] = { - ["X"] = 63.77, - ["Y"] = 54.93, - ["CD"] = 0, - }, - [10] = { - ["X"] = 70.23, - ["Y"] = 63.85, - ["CD"] = 0, - }, - [11] = { - ["X"] = 67.49, - ["Y"] = 59.77, - ["CD"] = 0, - }, - [12] = { - ["X"] = 66.18, - ["Y"] = 57.51, - ["CD"] = 0, - }, - [13] = { - ["X"] = 64.22, - ["Y"] = 52.52, - ["CD"] = 0, - }, - [14] = { - ["X"] = 60.07, - ["Y"] = 49.38, - ["CD"] = 0, - }, - [15] = { - ["X"] = 55.96, - ["Y"] = 45.39, - ["CD"] = 0, - }, - [16] = { - ["X"] = 22.27, - ["Y"] = 58.65, - ["CD"] = 0, - }, - [17] = { - ["X"] = 22.86, - ["Y"] = 54.7, - ["CD"] = 0, - }, - [18] = { - ["X"] = 23.04, - ["Y"] = 53.17, - ["CD"] = 0, - }, - [19] = { - ["X"] = 23.12, - ["Y"] = 53.84, - ["CD"] = 0, - }, - [20] = { - ["X"] = 24.63, - ["Y"] = 51.23, - ["CD"] = 0, - }, - [21] = { - ["X"] = 27.43, - ["Y"] = 41.62, - ["CD"] = 0, - }, - [22] = { - ["X"] = 24.7, - ["Y"] = 39.47, - ["CD"] = 0, - }, - [23] = { - ["X"] = 23.73, - ["Y"] = 39.94, - ["CD"] = 0, - }, - [24] = { - ["X"] = 18.41, - ["Y"] = 47.7, - ["CD"] = 0, - }, - [25] = { - ["X"] = 19.13, - ["Y"] = 45.07, - ["CD"] = 0, - }, - [26] = { - ["X"] = 18.87, - ["Y"] = 43.64, - ["CD"] = 0, - }, - [27] = { - ["X"] = 17.04, - ["Y"] = 43.5, - ["CD"] = 0, - }, - [28] = { - ["X"] = 15.28, - ["Y"] = 42.46, - ["CD"] = 0, - }, - [29] = { - ["X"] = 15.58, - ["Y"] = 39.75, - ["CD"] = 0, - }, - [30] = { - ["X"] = 16.94, - ["Y"] = 39.28, - ["CD"] = 0, - }, - [31] = { - ["X"] = 17.3, - ["Y"] = 39.97, - ["CD"] = 0, - }, - [32] = { - ["X"] = 18.19, - ["Y"] = 40.52, - ["CD"] = 0, - }, - [33] = { - ["X"] = 19.77, - ["Y"] = 43.53, - ["CD"] = 0, - }, - [34] = { - ["X"] = 19.81, - ["Y"] = 42.84, - ["CD"] = 0, - }, - [35] = { - ["X"] = 23.16, - ["Y"] = 43.34, - ["CD"] = 0, - }, - [36] = { - ["X"] = 26.86, - ["Y"] = 40.75, - ["CD"] = 0, - }, - [37] = { - ["X"] = 27.44, - ["Y"] = 41.95, - ["CD"] = 0, - }, - [38] = { - ["X"] = 27.32, - ["Y"] = 45.11, - ["CD"] = 0, - }, - [39] = { - ["X"] = 28.79, - ["Y"] = 47.29, - ["CD"] = 0, - }, - [40] = { - ["X"] = 31.11, - ["Y"] = 47.49, - ["CD"] = 0, - }, - [41] = { - ["X"] = 31.52, - ["Y"] = 49.9, - ["CD"] = 0, - }, - [42] = { - ["X"] = 31.61, - ["Y"] = 54.38, - ["CD"] = 0, - }, - [43] = { - ["X"] = 33.61, - ["Y"] = 54.24, - ["CD"] = 0, - }, - [44] = { - ["X"] = 34.03, - ["Y"] = 53.09, - ["CD"] = 0, - }, - [45] = { - ["X"] = 37.9, - ["Y"] = 48.99, - ["CD"] = 0, - }, - [46] = { - ["X"] = 39.05, - ["Y"] = 51.47, - ["CD"] = 0, - }, - [47] = { - ["X"] = 40.39, - ["Y"] = 48.64, - ["CD"] = 0, - }, - [48] = { - ["X"] = 40.77, - ["Y"] = 48.19, - ["CD"] = 0, - }, - [49] = { - ["X"] = 44.14, - ["Y"] = 50.24, - ["CD"] = 0, - }, - [50] = { - ["X"] = 56.5, - ["Y"] = 45.1, - ["CD"] = 0, - }, - [51] = { - ["X"] = 59.76, - ["Y"] = 42.14, - ["CD"] = 0, - }, - [52] = { - ["X"] = 58.33, - ["Y"] = 41.44, - ["CD"] = 0, - }, - [53] = { - ["X"] = 58.51, - ["Y"] = 43.04, - ["CD"] = 0, - }, - [54] = { - ["X"] = 59.12, - ["Y"] = 47.83, - ["CD"] = 0, - }, - [55] = { - ["X"] = 35.44, - ["Y"] = 37.57, - ["CD"] = 0, - }, - [56] = { - ["X"] = 34.72, - ["Y"] = 37.99, - ["CD"] = 0, - }, - [57] = { - ["X"] = 33.97, - ["Y"] = 37.32, - ["CD"] = 0, - }, - [58] = { - ["X"] = 20.39, - ["Y"] = 51.41, - ["CD"] = 0, - }, - [59] = { - ["X"] = 19.48, - ["Y"] = 49.62, - ["CD"] = 0, - }, - [60] = { - ["X"] = 20.86, - ["Y"] = 49.17, - ["CD"] = 0, - }, - [61] = { - ["X"] = 21.24, - ["Y"] = 48.51, - ["CD"] = 0, - }, - [62] = { - ["X"] = 21.67, - ["Y"] = 46.84, - ["CD"] = 0, - }, - [63] = { - ["X"] = 20.77, - ["Y"] = 46.4, - ["CD"] = 0, - }, - [64] = { - ["X"] = 20.68, - ["Y"] = 45.54, - ["CD"] = 0, - }, - [65] = { - ["X"] = 23.78, - ["Y"] = 46.23, - ["CD"] = 0, - }, - [66] = { - ["X"] = 23.67, - ["Y"] = 45.78, - ["CD"] = 0, - }, - [67] = { - ["X"] = 24.7, - ["Y"] = 44.5, - ["CD"] = 0, - }, - [68] = { - ["X"] = 24.36, - ["Y"] = 42.97, - ["CD"] = 0, - }, - [69] = { - ["X"] = 25.12, - ["Y"] = 42.57, - ["CD"] = 0, - }, - [70] = { - ["X"] = 25.27, - ["Y"] = 41.14, - ["CD"] = 0, - }, - [71] = { - ["X"] = 25.49, - ["Y"] = 38.68, - ["CD"] = 0, - }, - [72] = { - ["X"] = 26.48, - ["Y"] = 37.83, - ["CD"] = 0, - }, - [73] = { - ["X"] = 28.26, - ["Y"] = 37.27, - ["CD"] = 0, - }, - [74] = { - ["X"] = 31.6, - ["Y"] = 36.18, - ["CD"] = 0, - }, - [75] = { - ["X"] = 32.77, - ["Y"] = 37.25, - ["CD"] = 0, - }, - [76] = { - ["X"] = 33.51, - ["Y"] = 35.46, - ["CD"] = 0, - }, - [77] = { - ["X"] = 32.97, - ["Y"] = 39.24, - ["CD"] = 0, - }, - [78] = { - ["X"] = 32.76, - ["Y"] = 40.68, - ["CD"] = 0, - }, - [79] = { - ["X"] = 30.18, - ["Y"] = 46.7, - ["CD"] = 0, - }, - [80] = { - ["X"] = 29.81, - ["Y"] = 47.95, - ["CD"] = 0, - }, - [81] = { - ["X"] = 27.61, - ["Y"] = 50.45, - ["CD"] = 0, - }, - [82] = { - ["X"] = 27.86, - ["Y"] = 53.57, - ["CD"] = 0, - }, - [83] = { - ["X"] = 27.06, - ["Y"] = 53.26, - ["CD"] = 0, - }, - [84] = { - ["X"] = 26.08, - ["Y"] = 53.85, - ["CD"] = 0, - }, - [85] = { - ["X"] = 25.37, - ["Y"] = 54.48, - ["CD"] = 0, - }, - [86] = { - ["X"] = 25.15, - ["Y"] = 56.59, - ["CD"] = 0, - }, - [87] = { - ["X"] = 24.5, - ["Y"] = 55.55, - ["CD"] = 0, - }, - [88] = { - ["X"] = 22.73, - ["Y"] = 55.49, - ["CD"] = 0, - }, - [89] = { - ["X"] = 21.64, - ["Y"] = 56.04, - ["CD"] = 0, - }, - [90] = { - ["X"] = 20.89, - ["Y"] = 52.45, - ["CD"] = 0, - }, - [91] = { - ["X"] = 21.6, - ["Y"] = 48.93, - ["CD"] = 0, - }, - [92] = { - ["X"] = 22.78, - ["Y"] = 47, - ["CD"] = 0, - }, - [93] = { - ["X"] = 23.67, - ["Y"] = 47.17, - ["CD"] = 0, - }, - [94] = { - ["X"] = 28.81, - ["Y"] = 49.54, - ["CD"] = 0, - }, - [95] = { - ["X"] = 27.63, - ["Y"] = 49.1, - ["CD"] = 0, - }, - [96] = { - ["X"] = 28.12, - ["Y"] = 47.43, - ["CD"] = 0, - }, - [97] = { - ["X"] = 29.6, - ["Y"] = 45.44, - ["CD"] = 0, - }, - [98] = { - ["X"] = 31.08, - ["Y"] = 44.93, - ["CD"] = 0, - }, - [99] = { - ["X"] = 32.12, - ["Y"] = 45.11, - ["CD"] = 0, - }, - [100] = { - ["X"] = 32.86, - ["Y"] = 44.32, - ["CD"] = 0, - }, - [101] = { - ["X"] = 35.29, - ["Y"] = 50.54, - ["CD"] = 0, - }, - [102] = { - ["X"] = 31.72, - ["Y"] = 11.15, - ["CD"] = 0, - }, - [103] = { - ["X"] = 35.36, - ["Y"] = 11.62, - ["CD"] = 0, - }, - [104] = { - ["X"] = 38.72, - ["Y"] = 14.9, - ["CD"] = 0, - }, - [105] = { - ["X"] = 39.7, - ["Y"] = 14.87, - ["CD"] = 0, - }, - [106] = { - ["X"] = 28.23, - ["Y"] = 19.56, - ["CD"] = 0, - }, - [107] = { - ["X"] = 24.39, - ["Y"] = 25.74, - ["CD"] = 0, - }, - [108] = { - ["X"] = 26.2, - ["Y"] = 27.16, - ["CD"] = 0, - }, - [109] = { - ["X"] = 28.07, - ["Y"] = 29.18, - ["CD"] = 0, - }, - [110] = { - ["X"] = 28.8, - ["Y"] = 38.56, - ["CD"] = 0, - }, - [111] = { - ["X"] = 30.55, - ["Y"] = 37.63, - ["CD"] = 0, - }, - [112] = { - ["X"] = 34.55, - ["Y"] = 42.86, - ["CD"] = 0, - }, - [113] = { - ["X"] = 33.84, - ["Y"] = 50.23, - ["CD"] = 0, - }, - [114] = { - ["X"] = 35.52, - ["Y"] = 51.77, - ["CD"] = 0, - }, - [115] = { - ["X"] = 35.33, - ["Y"] = 58.01, - ["CD"] = 0, - }, - [116] = { - ["X"] = 38.64, - ["Y"] = 62.53, - ["CD"] = 0, - }, - [117] = { - ["X"] = 40.41, - ["Y"] = 73, - ["CD"] = 0, - }, - [118] = { - ["X"] = 41.04, - ["Y"] = 81.46, - ["CD"] = 0, - }, - [119] = { - ["X"] = 41.17, - ["Y"] = 83.21, - ["CD"] = 0, - }, - [120] = { - ["X"] = 70.07, - ["Y"] = 61.17, - ["CD"] = 0, - }, - [121] = { - ["X"] = 69.26, - ["Y"] = 62.64, - ["CD"] = 0, - }, - [122] = { - ["X"] = 68.31, - ["Y"] = 58.27, - ["CD"] = 0, - }, - [123] = { - ["X"] = 66.58, - ["Y"] = 55.69, - ["CD"] = 0, - }, - [124] = { - ["X"] = 66.13, - ["Y"] = 53.94, - ["CD"] = 0, - }, - [125] = { - ["X"] = 65.37, - ["Y"] = 48.57, - ["CD"] = 0, - }, - [126] = { - ["X"] = 65.11, - ["Y"] = 50.4, - ["CD"] = 0, - }, - [127] = { - ["X"] = 62.57, - ["Y"] = 50.61, - ["CD"] = 0, - }, - [128] = { - ["X"] = 65.12, - ["Y"] = 38.6, - ["CD"] = 0, - }, - [129] = { - ["X"] = 62.25, - ["Y"] = 45.8, - ["CD"] = 0, - }, - [130] = { - ["X"] = 60.11, - ["Y"] = 46.19, - ["CD"] = 0, - }, - [131] = { - ["X"] = 58.62, - ["Y"] = 49.54, - ["CD"] = 0, - }, - [132] = { - ["X"] = 56.22, - ["Y"] = 48.62, - ["CD"] = 0, - }, - [133] = { - ["X"] = 47.37, - ["Y"] = 55.17, - ["CD"] = 0, - }, - [134] = { - ["X"] = 41.33, - ["Y"] = 72.02, - ["CD"] = 0, - }, - [135] = { - ["X"] = 38.71, - ["Y"] = 60.97, - ["CD"] = 0, - }, - [136] = { - ["X"] = 36.71, - ["Y"] = 59.7, - ["CD"] = 0, - }, - [137] = { - ["X"] = 39.76, - ["Y"] = 57.54, - ["CD"] = 0, - }, - [138] = { - ["X"] = 42.32, - ["Y"] = 49.6, - ["CD"] = 0, - }, - [139] = { - ["X"] = 49.52, - ["Y"] = 47.44, - ["CD"] = 0, - }, - [140] = { - ["X"] = 49.79, - ["Y"] = 40.3, - ["CD"] = 0, - }, - [141] = { - ["X"] = 48.78, - ["Y"] = 42.77, - ["CD"] = 0, - }, - [142] = { - ["X"] = 46.87, - ["Y"] = 39.44, - ["CD"] = 0, - }, - [143] = { - ["X"] = 36.65, - ["Y"] = 42.98, - ["CD"] = 0, - }, - [144] = { - ["X"] = 29.53, - ["Y"] = 46.51, - ["CD"] = 0, - }, - [145] = { - ["X"] = 28.25, - ["Y"] = 46.15, - ["CD"] = 0, - }, - [146] = { - ["X"] = 25.63, - ["Y"] = 52.48, - ["CD"] = 0, - }, - [147] = { - ["X"] = 27.12, - ["Y"] = 69.02, - ["CD"] = 0, - }, - [148] = { - ["X"] = 23.49, - ["Y"] = 61.88, - ["CD"] = 0, - }, - [149] = { - ["X"] = 26.37, - ["Y"] = 46.84, - ["CD"] = 0, - }, - [150] = { - ["X"] = 28.77, - ["Y"] = 41.26, - ["CD"] = 0, - }, - [151] = { - ["X"] = 28.94, - ["Y"] = 43.58, - ["CD"] = 0, - }, - [152] = { - ["X"] = 30.97, - ["Y"] = 39.66, - ["CD"] = 0, - }, - [153] = { - ["X"] = 34.05, - ["Y"] = 38.76, - ["CD"] = 0, - }, - [154] = { - ["X"] = 34.52, - ["Y"] = 44.14, - ["CD"] = 0, - }, - [155] = { - ["X"] = 36.22, - ["Y"] = 41.74, - ["CD"] = 0, - }, - [156] = { - ["X"] = 39.85, - ["Y"] = 39.65, - ["CD"] = 0, - }, - [157] = { - ["X"] = 47.15, - ["Y"] = 41.25, - ["CD"] = 0, - }, - [158] = { - ["X"] = 40.72, - ["Y"] = 40.06, - ["CD"] = 0, - }, - [159] = { - ["X"] = 44.52, - ["Y"] = 39.66, - ["CD"] = 0, - }, - [160] = { - ["X"] = 41.5, - ["Y"] = 38.6, - ["CD"] = 0, - }, - [161] = { - ["X"] = 44.86, - ["Y"] = 35.75, - ["CD"] = 0, - }, - [162] = { - ["X"] = 44.63, - ["Y"] = 33.2, - ["CD"] = 0, - }, - [163] = { - ["X"] = 47.33, - ["Y"] = 28.88, - ["CD"] = 0, - }, - [164] = { - ["X"] = 32.03, - ["Y"] = 34.06, - ["CD"] = 0, - }, - [165] = { - ["X"] = 27.66, - ["Y"] = 36, - ["CD"] = 0, - }, - [166] = { - ["X"] = 27.58, - ["Y"] = 44.62, - ["CD"] = 0, - }, - [167] = { - ["X"] = 25.91, - ["Y"] = 44.49, - ["CD"] = 0, - }, - [168] = { - ["X"] = 26.84, - ["Y"] = 48.81, - ["CD"] = 0, - }, - [169] = { - ["X"] = 22.94, - ["Y"] = 55.55, - ["CD"] = 0, - }, - [170] = { - ["X"] = 19.91, - ["Y"] = 54.45, - ["CD"] = 0, - }, - [171] = { - ["X"] = 21.16, - ["Y"] = 53.32, - ["CD"] = 0, - }, - [172] = { - ["X"] = 22.64, - ["Y"] = 50.19, - ["CD"] = 0, - }, - [173] = { - ["X"] = 24.23, - ["Y"] = 33.84, - ["CD"] = 0, - }, - [174] = { - ["X"] = 30.34, - ["Y"] = 33.68, - ["CD"] = 0, - }, - [175] = { - ["X"] = 30.66, - ["Y"] = 33.03, - ["CD"] = 0, - }, - [176] = { - ["X"] = 39.58, - ["Y"] = 16.08, - ["CD"] = 0, - }, - [177] = { - ["X"] = 39.3, - ["Y"] = 14.48, - ["CD"] = 0, - }, - [178] = { - ["X"] = 34.8, - ["Y"] = 10.58, - ["CD"] = 0, - }, - [179] = { - ["X"] = 30.29, - ["Y"] = 8.71, - ["CD"] = 0, - }, - [180] = { - ["X"] = 30.67, - ["Y"] = 12.65, - ["CD"] = 0, - }, - [181] = { - ["X"] = 31.53, - ["Y"] = 14.5, - ["CD"] = 0, - }, - [182] = { - ["X"] = 31.63, - ["Y"] = 16.56, - ["CD"] = 0, - }, - [183] = { - ["X"] = 33.53, - ["Y"] = 20.08, - ["CD"] = 0, - }, - [184] = { - ["X"] = 34.88, - ["Y"] = 19.76, - ["CD"] = 0, - }, - [185] = { - ["X"] = 35.59, - ["Y"] = 18.08, - ["CD"] = 0, - }, - [186] = { - ["X"] = 43.46, - ["Y"] = 27.48, - ["CD"] = 0, - }, - [187] = { - ["X"] = 42.73, - ["Y"] = 27.39, - ["CD"] = 0, - }, - [188] = { - ["X"] = 41.23, - ["Y"] = 25.46, - ["CD"] = 0, - }, - [189] = { - ["X"] = 39.47, - ["Y"] = 24.45, - ["CD"] = 0, - }, - [190] = { - ["X"] = 38.39, - ["Y"] = 26.94, - ["CD"] = 0, - }, - [191] = { - ["X"] = 37.32, - ["Y"] = 26.91, - ["CD"] = 0, - }, - [192] = { - ["X"] = 36.21, - ["Y"] = 30.36, - ["CD"] = 0, - }, - [193] = { - ["X"] = 27.01, - ["Y"] = 29.36, - ["CD"] = 0, - }, - [194] = { - ["X"] = 27.04, - ["Y"] = 31.9, - ["CD"] = 0, - }, - [195] = { - ["X"] = 17.98, - ["Y"] = 42.91, - ["CD"] = 0, - }, - [196] = { - ["X"] = 15.82, - ["Y"] = 43.16, - ["CD"] = 0, - }, - [197] = { - ["X"] = 15.74, - ["Y"] = 38.61, - ["CD"] = 0, - }, - [198] = { - ["X"] = 16.66, - ["Y"] = 36.19, - ["CD"] = 0, - }, - [199] = { - ["X"] = 21.23, - ["Y"] = 20.19, - ["CD"] = 0, - }, - [200] = { - ["X"] = 22.84, - ["Y"] = 19.42, - ["CD"] = 0, - }, - }, - --Winterspring - [281] = { - [1] = { - ["X"] = 59.16, - ["Y"] = 84.77, - ["CD"] = 0, - }, - [2] = { - ["X"] = 62.31, - ["Y"] = 83, - ["CD"] = 0, - }, - [3] = { - ["X"] = 57.11, - ["Y"] = 82.01, - ["CD"] = 0, - }, - [4] = { - ["X"] = 64.06, - ["Y"] = 78.62, - ["CD"] = 0, - }, - [5] = { - ["X"] = 61.3, - ["Y"] = 77.48, - ["CD"] = 0, - }, - [6] = { - ["X"] = 62.98, - ["Y"] = 75.01, - ["CD"] = 0, - }, - [7] = { - ["X"] = 60.57, - ["Y"] = 72.97, - ["CD"] = 0, - }, - [8] = { - ["X"] = 57.89, - ["Y"] = 76.61, - ["CD"] = 0, - }, - [9] = { - ["X"] = 58.81, - ["Y"] = 71.72, - ["CD"] = 0, - }, - [10] = { - ["X"] = 61.9, - ["Y"] = 70.8, - ["CD"] = 0, - }, - [11] = { - ["X"] = 55.55, - ["Y"] = 66.93, - ["CD"] = 0, - }, - [12] = { - ["X"] = 57.47, - ["Y"] = 67.97, - ["CD"] = 0, - }, - [13] = { - ["X"] = 64.62, - ["Y"] = 67.64, - ["CD"] = 0, - }, - [14] = { - ["X"] = 58.61, - ["Y"] = 64.35, - ["CD"] = 0, - }, - [15] = { - ["X"] = 60.58, - ["Y"] = 63.25, - ["CD"] = 0, - }, - [16] = { - ["X"] = 66.46, - ["Y"] = 63.37, - ["CD"] = 0, - }, - [17] = { - ["X"] = 54.22, - ["Y"] = 59.72, - ["CD"] = 0, - }, - [18] = { - ["X"] = 50.02, - ["Y"] = 59.7, - ["CD"] = 0, - }, - [19] = { - ["X"] = 55.15, - ["Y"] = 58.99, - ["CD"] = 0, - }, - [20] = { - ["X"] = 58.3, - ["Y"] = 57.27, - ["CD"] = 0, - }, - [21] = { - ["X"] = 66.48, - ["Y"] = 58.7, - ["CD"] = 0, - }, - [22] = { - ["X"] = 65.73, - ["Y"] = 55.86, - ["CD"] = 0, - }, - [23] = { - ["X"] = 67.08, - ["Y"] = 55.5, - ["CD"] = 0, - }, - [24] = { - ["X"] = 56.21, - ["Y"] = 54.41, - ["CD"] = 0, - }, - [25] = { - ["X"] = 63.85, - ["Y"] = 54.34, - ["CD"] = 0, - }, - [26] = { - ["X"] = 57.63, - ["Y"] = 53.91, - ["CD"] = 0, - }, - [27] = { - ["X"] = 62.95, - ["Y"] = 52.24, - ["CD"] = 0, - }, - [28] = { - ["X"] = 54.26, - ["Y"] = 51.46, - ["CD"] = 0, - }, - [29] = { - ["X"] = 53.42, - ["Y"] = 52.49, - ["CD"] = 0, - }, - [30] = { - ["X"] = 51.05, - ["Y"] = 47.74, - ["CD"] = 0, - }, - [31] = { - ["X"] = 62.14, - ["Y"] = 46, - ["CD"] = 0, - }, - [32] = { - ["X"] = 57.41, - ["Y"] = 44.12, - ["CD"] = 0, - }, - [33] = { - ["X"] = 67.38, - ["Y"] = 43.91, - ["CD"] = 0, - }, - [34] = { - ["X"] = 64.77, - ["Y"] = 44.54, - ["CD"] = 0, - }, - [35] = { - ["X"] = 63.95, - ["Y"] = 38.93, - ["CD"] = 0, - }, - [36] = { - ["X"] = 56.38, - ["Y"] = 40.05, - ["CD"] = 0, - }, - [37] = { - ["X"] = 53.33, - ["Y"] = 40.12, - ["CD"] = 0, - }, - [38] = { - ["X"] = 54.33, - ["Y"] = 39.28, - ["CD"] = 0, - }, - [39] = { - ["X"] = 58.25, - ["Y"] = 36.59, - ["CD"] = 0, - }, - [40] = { - ["X"] = 66.39, - ["Y"] = 31.62, - ["CD"] = 0, - }, - [41] = { - ["X"] = 65.34, - ["Y"] = 33.85, - ["CD"] = 0, - }, - [42] = { - ["X"] = 56.84, - ["Y"] = 35.19, - ["CD"] = 0, - }, - [43] = { - ["X"] = 53.46, - ["Y"] = 28.57, - ["CD"] = 0, - }, - [44] = { - ["X"] = 61.98, - ["Y"] = 31.58, - ["CD"] = 0, - }, - [45] = { - ["X"] = 61.24, - ["Y"] = 31.93, - ["CD"] = 0, - }, - [46] = { - ["X"] = 57.11, - ["Y"] = 33.25, - ["CD"] = 0, - }, - [47] = { - ["X"] = 47.75, - ["Y"] = 31.28, - ["CD"] = 0, - }, - [48] = { - ["X"] = 53.36, - ["Y"] = 33.23, - ["CD"] = 0, - }, - [49] = { - ["X"] = 58, - ["Y"] = 25.44, - ["CD"] = 0, - }, - [50] = { - ["X"] = 56.97, - ["Y"] = 26.83, - ["CD"] = 0, - }, - [51] = { - ["X"] = 49.79, - ["Y"] = 25.15, - ["CD"] = 0, - }, - [52] = { - ["X"] = 56.02, - ["Y"] = 22.75, - ["CD"] = 0, - }, - [53] = { - ["X"] = 46.42, - ["Y"] = 24.46, - ["CD"] = 0, - }, - [54] = { - ["X"] = 50.08, - ["Y"] = 22.67, - ["CD"] = 0, - }, - [55] = { - ["X"] = 46.7, - ["Y"] = 18.24, - ["CD"] = 0, - }, - [56] = { - ["X"] = 48.65, - ["Y"] = 17.22, - ["CD"] = 0, - }, - [57] = { - ["X"] = 49.35, - ["Y"] = 18.76, - ["CD"] = 0, - }, - [58] = { - ["X"] = 52.3, - ["Y"] = 20.68, - ["CD"] = 0, - }, - [59] = { - ["X"] = 45.21, - ["Y"] = 14.81, - ["CD"] = 0, - }, - [60] = { - ["X"] = 45.87, - ["Y"] = 20.86, - ["CD"] = 0, - }, - [61] = { - ["X"] = 47.49, - ["Y"] = 50.39, - ["CD"] = 0, - }, - [62] = { - ["X"] = 48.23, - ["Y"] = 53.43, - ["CD"] = 0, - }, - [63] = { - ["X"] = 47.36, - ["Y"] = 58.17, - ["CD"] = 0, - }, - [64] = { - ["X"] = 48.56, - ["Y"] = 57.74, - ["CD"] = 0, - }, - [65] = { - ["X"] = 45.22, - ["Y"] = 57.7, - ["CD"] = 0, - }, - [66] = { - ["X"] = 45.19, - ["Y"] = 59.5, - ["CD"] = 0, - }, - [67] = { - ["X"] = 42.43, - ["Y"] = 49.82, - ["CD"] = 0, - }, - [68] = { - ["X"] = 40.35, - ["Y"] = 49.45, - ["CD"] = 0, - }, - [69] = { - ["X"] = 40.46, - ["Y"] = 54.28, - ["CD"] = 0, - }, - [70] = { - ["X"] = 39.05, - ["Y"] = 55.74, - ["CD"] = 0, - }, - [71] = { - ["X"] = 37.6, - ["Y"] = 55.77, - ["CD"] = 0, - }, - [72] = { - ["X"] = 34.89, - ["Y"] = 57.33, - ["CD"] = 0, - }, - [73] = { - ["X"] = 34.59, - ["Y"] = 50.15, - ["CD"] = 0, - }, - [74] = { - ["X"] = 33.26, - ["Y"] = 48.43, - ["CD"] = 0, - }, - [75] = { - ["X"] = 32.77, - ["Y"] = 51.29, - ["CD"] = 0, - }, - [76] = { - ["X"] = 31.15, - ["Y"] = 57.24, - ["CD"] = 0, - }, - [77] = { - ["X"] = 30.3, - ["Y"] = 54.04, - ["CD"] = 0, - }, - [78] = { - ["X"] = 28.92, - ["Y"] = 52.76, - ["CD"] = 0, - }, - [79] = { - ["X"] = 28.32, - ["Y"] = 55.97, - ["CD"] = 0, - }, - [80] = { - ["X"] = 26.04, - ["Y"] = 49.17, - ["CD"] = 0, - }, - [81] = { - ["X"] = 24.02, - ["Y"] = 49.75, - ["CD"] = 0, - }, - [82] = { - ["X"] = 25.24, - ["Y"] = 51.71, - ["CD"] = 0, - }, - [83] = { - ["X"] = 24.44, - ["Y"] = 50.98, - ["CD"] = 0, - }, - [84] = { - ["X"] = 24.27, - ["Y"] = 56.95, - ["CD"] = 0, - }, - [85] = { - ["X"] = 66.76, - ["Y"] = 84.03, - ["CD"] = 0, - }, - [86] = { - ["X"] = 66.36, - ["Y"] = 80.75, - ["CD"] = 0, - }, - [87] = { - ["X"] = 62.24, - ["Y"] = 80.15, - ["CD"] = 0, - }, - [88] = { - ["X"] = 55.96, - ["Y"] = 78.8, - ["CD"] = 0, - }, - [89] = { - ["X"] = 56.02, - ["Y"] = 76.95, - ["CD"] = 0, - }, - [90] = { - ["X"] = 64.96, - ["Y"] = 72.59, - ["CD"] = 0, - }, - [91] = { - ["X"] = 65.44, - ["Y"] = 70.65, - ["CD"] = 0, - }, - [92] = { - ["X"] = 68.36, - ["Y"] = 69, - ["CD"] = 0, - }, - [93] = { - ["X"] = 52.57, - ["Y"] = 67.93, - ["CD"] = 0, - }, - [94] = { - ["X"] = 53.37, - ["Y"] = 66.5, - ["CD"] = 0, - }, - [95] = { - ["X"] = 61.09, - ["Y"] = 66.97, - ["CD"] = 0, - }, - [96] = { - ["X"] = 67.45, - ["Y"] = 66.84, - ["CD"] = 0, - }, - [97] = { - ["X"] = 68.19, - ["Y"] = 64.02, - ["CD"] = 0, - }, - [98] = { - ["X"] = 47.6, - ["Y"] = 63.37, - ["CD"] = 0, - }, - [99] = { - ["X"] = 67.42, - ["Y"] = 57.23, - ["CD"] = 0, - }, - [100] = { - ["X"] = 67.19, - ["Y"] = 51.85, - ["CD"] = 0, - }, - [101] = { - ["X"] = 63.49, - ["Y"] = 50.05, - ["CD"] = 0, - }, - [102] = { - ["X"] = 58.87, - ["Y"] = 45.42, - ["CD"] = 0, - }, - [103] = { - ["X"] = 53.68, - ["Y"] = 45.06, - ["CD"] = 0, - }, - [104] = { - ["X"] = 69.19, - ["Y"] = 44.89, - ["CD"] = 0, - }, - [105] = { - ["X"] = 59.6, - ["Y"] = 42, - ["CD"] = 0, - }, - [106] = { - ["X"] = 67.82, - ["Y"] = 39.48, - ["CD"] = 0, - }, - [107] = { - ["X"] = 59.84, - ["Y"] = 37.64, - ["CD"] = 0, - }, - [108] = { - ["X"] = 67.43, - ["Y"] = 35.4, - ["CD"] = 0, - }, - [109] = { - ["X"] = 66.7, - ["Y"] = 29.13, - ["CD"] = 0, - }, - [110] = { - ["X"] = 60.88, - ["Y"] = 28.01, - ["CD"] = 0, - }, - [111] = { - ["X"] = 60.16, - ["Y"] = 21.19, - ["CD"] = 0, - }, - [112] = { - ["X"] = 53.95, - ["Y"] = 19.05, - ["CD"] = 0, - }, - [113] = { - ["X"] = 52.44, - ["Y"] = 18.27, - ["CD"] = 0, - }, - [114] = { - ["X"] = 48.51, - ["Y"] = 14.34, - ["CD"] = 0, - }, - [115] = { - ["X"] = 44.13, - ["Y"] = 14.69, - ["CD"] = 0, - }, - [116] = { - ["X"] = 44.53, - ["Y"] = 21.08, - ["CD"] = 0, - }, - [117] = { - ["X"] = 45.31, - ["Y"] = 26.71, - ["CD"] = 0, - }, - [118] = { - ["X"] = 46.16, - ["Y"] = 33.23, - ["CD"] = 0, - }, - [119] = { - ["X"] = 48.2, - ["Y"] = 45.28, - ["CD"] = 0, - }, - [120] = { - ["X"] = 42.52, - ["Y"] = 56.26, - ["CD"] = 0, - }, - [121] = { - ["X"] = 42.18, - ["Y"] = 53.86, - ["CD"] = 0, - }, - [122] = { - ["X"] = 42.49, - ["Y"] = 45.67, - ["CD"] = 0, - }, - [123] = { - ["X"] = 40.75, - ["Y"] = 46.4, - ["CD"] = 0, - }, - [124] = { - ["X"] = 40.5, - ["Y"] = 58, - ["CD"] = 0, - }, - [125] = { - ["X"] = 39.56, - ["Y"] = 44.86, - ["CD"] = 0, - }, - [126] = { - ["X"] = 37.41, - ["Y"] = 47.1, - ["CD"] = 0, - }, - [127] = { - ["X"] = 37.05, - ["Y"] = 58.92, - ["CD"] = 0, - }, - [128] = { - ["X"] = 35.56, - ["Y"] = 47.08, - ["CD"] = 0, - }, - [129] = { - ["X"] = 34.11, - ["Y"] = 59.82, - ["CD"] = 0, - }, - [130] = { - ["X"] = 31.96, - ["Y"] = 59.46, - ["CD"] = 0, - }, - [131] = { - ["X"] = 31.19, - ["Y"] = 47.17, - ["CD"] = 0, - }, - [132] = { - ["X"] = 27.81, - ["Y"] = 58.83, - ["CD"] = 0, - }, - [133] = { - ["X"] = 27.7, - ["Y"] = 47.35, - ["CD"] = 0, - }, - [134] = { - ["X"] = 26.52, - ["Y"] = 47.47, - ["CD"] = 0, - }, - [135] = { - ["X"] = 24.62, - ["Y"] = 62.82, - ["CD"] = 0, - }, - [136] = { - ["X"] = 21.76, - ["Y"] = 62.47, - ["CD"] = 0, - }, - [137] = { - ["X"] = 22.41, - ["Y"] = 58.99, - ["CD"] = 0, - }, - }, -} -aura_env.cooldown = 600 -aura_env.wipeDistance = 50 -aura_env.angle = 0 -aura_env.hyp = 0 -aura_env.GetClosestHerb = function() - aura_env.minID = { - ["X"] = 0, - ["Y"] = 0, - ["D"] = 1000, - ["ID"] = 0, - } - local pX = GetPlayerMapPosition("player") or 0 - local pY = select(2, GetPlayerMapPosition("player")) or 0 - pX, pY = pX * 100, pY * 100 - if aura_env.herbs[GetCurrentMapAreaID()] then - for k, v in ipairs(aura_env.herbs[GetCurrentMapAreaID()]) do - local hX, hY, cd = - aura_env.herbs[GetCurrentMapAreaID()][k]["X"], - aura_env.herbs[GetCurrentMapAreaID()][k]["Y"], - aura_env.herbs[GetCurrentMapAreaID()][k]["CD"] - if cd == 0 then - local X, Y = pX - hX, pY - hY - local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) - if hyp < aura_env.minID["D"] then - aura_env.minID["X"] = hX - aura_env.minID["Y"] = hY - aura_env.minID["D"] = hyp - aura_env.minID["ID"] = k - end - end - end - return aura_env.minID["ID"] - end -end -if WeakAuras.IsOptionsOpen() then - WeakAurasSaved.HerbSniffer.CD = 0 - WeakAurasSaved.HerbSniffer.NoCD = 200 -end +aura_env.herbs = { + --Azsuna / Aethrik + [1015] = { + [1] = { + ["X"] = 52.44, + ["Y"] = 12.55, + ["CD"] = 0, + }, + [2] = { + ["X"] = 43.81, + ["Y"] = 13.48, + ["CD"] = 0, + }, + [3] = { + ["X"] = 43.5, + ["Y"] = 11.55, + ["CD"] = 0, + }, + [4] = { + ["X"] = 43.54, + ["Y"] = 10.41, + ["CD"] = 0, + }, + [5] = { + ["X"] = 44.04, + ["Y"] = 10.02, + ["CD"] = 0, + }, + [6] = { + ["X"] = 45.05, + ["Y"] = 8.91, + ["CD"] = 0, + }, + [7] = { + ["X"] = 45.31, + ["Y"] = 9.62, + ["CD"] = 0, + }, + [8] = { + ["X"] = 50.71, + ["Y"] = 12.66, + ["CD"] = 0, + }, + [9] = { + ["X"] = 51.42, + ["Y"] = 10.39, + ["CD"] = 0, + }, + [10] = { + ["X"] = 51.03, + ["Y"] = 11.49, + ["CD"] = 0, + }, + [11] = { + ["X"] = 52.24, + ["Y"] = 13.93, + ["CD"] = 0, + }, + [12] = { + ["X"] = 53.1, + ["Y"] = 13.66, + ["CD"] = 0, + }, + [13] = { + ["X"] = 54.52, + ["Y"] = 13.09, + ["CD"] = 0, + }, + [14] = { + ["X"] = 53.98, + ["Y"] = 15.09, + ["CD"] = 0, + }, + [15] = { + ["X"] = 57.19, + ["Y"] = 18.32, + ["CD"] = 0, + }, + [16] = { + ["X"] = 57.95, + ["Y"] = 19.85, + ["CD"] = 0, + }, + [17] = { + ["X"] = 61.05, + ["Y"] = 17.05, + ["CD"] = 0, + }, + [18] = { + ["X"] = 62.21, + ["Y"] = 16.11, + ["CD"] = 0, + }, + [19] = { + ["X"] = 62.26, + ["Y"] = 17.91, + ["CD"] = 0, + }, + [20] = { + ["X"] = 61.86, + ["Y"] = 18.55, + ["CD"] = 0, + }, + [21] = { + ["X"] = 59.87, + ["Y"] = 20.07, + ["CD"] = 0, + }, + [22] = { + ["X"] = 60.17, + ["Y"] = 20.82, + ["CD"] = 0, + }, + [23] = { + ["X"] = 60.31, + ["Y"] = 21.25, + ["CD"] = 0, + }, + [24] = { + ["X"] = 58.31, + ["Y"] = 24.61, + ["CD"] = 0, + }, + [25] = { + ["X"] = 58.91, + ["Y"] = 22.75, + ["CD"] = 0, + }, + [26] = { + ["X"] = 59.92, + ["Y"] = 22.74, + ["CD"] = 0, + }, + [27] = { + ["X"] = 61.61, + ["Y"] = 26.13, + ["CD"] = 0, + }, + [28] = { + ["X"] = 61.21, + ["Y"] = 27.72, + ["CD"] = 0, + }, + [29] = { + ["X"] = 61.95, + ["Y"] = 30.74, + ["CD"] = 0, + }, + [30] = { + ["X"] = 63.08, + ["Y"] = 30.76, + ["CD"] = 0, + }, + [31] = { + ["X"] = 62.57, + ["Y"] = 28.52, + ["CD"] = 0, + }, + [32] = { + ["X"] = 64.55, + ["Y"] = 27.75, + ["CD"] = 0, + }, + [33] = { + ["X"] = 65.58, + ["Y"] = 38.31, + ["CD"] = 0, + }, + [34] = { + ["X"] = 66.38, + ["Y"] = 38.49, + ["CD"] = 0, + }, + [35] = { + ["X"] = 66.44, + ["Y"] = 35.73, + ["CD"] = 0, + }, + [36] = { + ["X"] = 65.28, + ["Y"] = 35.11, + ["CD"] = 0, + }, + [37] = { + ["X"] = 64.73, + ["Y"] = 34.57, + ["CD"] = 0, + }, + [38] = { + ["X"] = 63.54, + ["Y"] = 34.19, + ["CD"] = 0, + }, + [39] = { + ["X"] = 64.81, + ["Y"] = 45.69, + ["CD"] = 0, + }, + [40] = { + ["X"] = 63.1, + ["Y"] = 46.83, + ["CD"] = 0, + }, + [41] = { + ["X"] = 59.34, + ["Y"] = 49.85, + ["CD"] = 0, + }, + [42] = { + ["X"] = 56.61, + ["Y"] = 52.15, + ["CD"] = 0, + }, + [43] = { + ["X"] = 53.11, + ["Y"] = 54.38, + ["CD"] = 0, + }, + [44] = { + ["X"] = 51.66, + ["Y"] = 55.68, + ["CD"] = 0, + }, + [45] = { + ["X"] = 50.1, + ["Y"] = 55.25, + ["CD"] = 0, + }, + [46] = { + ["X"] = 50.05, + ["Y"] = 56.35, + ["CD"] = 0, + }, + [47] = { + ["X"] = 49.08, + ["Y"] = 55.87, + ["CD"] = 0, + }, + [48] = { + ["X"] = 36.28, + ["Y"] = 21.97, + ["CD"] = 0, + }, + [49] = { + ["X"] = 36.07, + ["Y"] = 23.09, + ["CD"] = 0, + }, + [50] = { + ["X"] = 35.3, + ["Y"] = 23.32, + ["CD"] = 0, + }, + [51] = { + ["X"] = 35.24, + ["Y"] = 25.27, + ["CD"] = 0, + }, + [52] = { + ["X"] = 35.84, + ["Y"] = 26.66, + ["CD"] = 0, + }, + [53] = { + ["X"] = 35.28, + ["Y"] = 28.34, + ["CD"] = 0, + }, + [54] = { + ["X"] = 38.92, + ["Y"] = 33.69, + ["CD"] = 0, + }, + [55] = { + ["X"] = 38.76, + ["Y"] = 32.81, + ["CD"] = 0, + }, + [56] = { + ["X"] = 39.8, + ["Y"] = 32.01, + ["CD"] = 0, + }, + [57] = { + ["X"] = 38.58, + ["Y"] = 31.7, + ["CD"] = 0, + }, + [58] = { + ["X"] = 37.15, + ["Y"] = 31.49, + ["CD"] = 0, + }, + [59] = { + ["X"] = 37.81, + ["Y"] = 33.03, + ["CD"] = 0, + }, + [60] = { + ["X"] = 38.91, + ["Y"] = 33.95, + ["CD"] = 0, + }, + [61] = { + ["X"] = 46.87, + ["Y"] = 32.18, + ["CD"] = 0, + }, + [62] = { + ["X"] = 46.45, + ["Y"] = 33.24, + ["CD"] = 0, + }, + [63] = { + ["X"] = 42.85, + ["Y"] = 29.84, + ["CD"] = 0, + }, + [64] = { + ["X"] = 42.2, + ["Y"] = 30.7, + ["CD"] = 0, + }, + [65] = { + ["X"] = 41.42, + ["Y"] = 31.81, + ["CD"] = 0, + }, + [66] = { + ["X"] = 40.38, + ["Y"] = 32.88, + ["CD"] = 0, + }, + [67] = { + ["X"] = 40.63, + ["Y"] = 35.62, + ["CD"] = 0, + }, + [68] = { + ["X"] = 43.97, + ["Y"] = 31.84, + ["CD"] = 0, + }, + [69] = { + ["X"] = 45.87, + ["Y"] = 28.71, + ["CD"] = 0, + }, + [70] = { + ["X"] = 44.62, + ["Y"] = 30.16, + ["CD"] = 0, + }, + [71] = { + ["X"] = 44.16, + ["Y"] = 31.22, + ["CD"] = 0, + }, + [72] = { + ["X"] = 45.01, + ["Y"] = 33.8, + ["CD"] = 0, + }, + [73] = { + ["X"] = 44.82, + ["Y"] = 35.66, + ["CD"] = 0, + }, + [74] = { + ["X"] = 44.33, + ["Y"] = 38.18, + ["CD"] = 0, + }, + [75] = { + ["X"] = 44.13, + ["Y"] = 36.79, + ["CD"] = 0, + }, + [76] = { + ["X"] = 43.29, + ["Y"] = 36.63, + ["CD"] = 0, + }, + [77] = { + ["X"] = 58.5, + ["Y"] = 44.5, + ["CD"] = 0, + }, + [78] = { + ["X"] = 56.98, + ["Y"] = 46.04, + ["CD"] = 0, + }, + [79] = { + ["X"] = 56.87, + ["Y"] = 47.43, + ["CD"] = 0, + }, + [80] = { + ["X"] = 58.08, + ["Y"] = 48.77, + ["CD"] = 0, + }, + [81] = { + ["X"] = 58.1, + ["Y"] = 47.82, + ["CD"] = 0, + }, + [82] = { + ["X"] = 59.82, + ["Y"] = 48.78, + ["CD"] = 0, + }, + [83] = { + ["X"] = 61.93, + ["Y"] = 50.54, + ["CD"] = 0, + }, + [84] = { + ["X"] = 60.81, + ["Y"] = 49.52, + ["CD"] = 0, + }, + [85] = { + ["X"] = 60.13, + ["Y"] = 50.52, + ["CD"] = 0, + }, + [86] = { + ["X"] = 58.7, + ["Y"] = 50.72, + ["CD"] = 0, + }, + [87] = { + ["X"] = 57.92, + ["Y"] = 51.18, + ["CD"] = 0, + }, + [88] = { + ["X"] = 56.76, + ["Y"] = 51.49, + ["CD"] = 0, + }, + [89] = { + ["X"] = 57.02, + ["Y"] = 53.1, + ["CD"] = 0, + }, + [90] = { + ["X"] = 60.5, + ["Y"] = 55.71, + ["CD"] = 0, + }, + [91] = { + ["X"] = 61.23, + ["Y"] = 55.29, + ["CD"] = 0, + }, + [92] = { + ["X"] = 62.2, + ["Y"] = 54.63, + ["CD"] = 0, + }, + [93] = { + ["X"] = 62.35, + ["Y"] = 53.03, + ["CD"] = 0, + }, + [94] = { + ["X"] = 61.71, + ["Y"] = 51.69, + ["CD"] = 0, + }, + [95] = { + ["X"] = 62.88, + ["Y"] = 48.79, + ["CD"] = 0, + }, + [96] = { + ["X"] = 59.03, + ["Y"] = 16.36, + ["CD"] = 0, + }, + [97] = { + ["X"] = 56.05, + ["Y"] = 52.99, + ["CD"] = 0, + }, + [98] = { + ["X"] = 54.9, + ["Y"] = 54.78, + ["CD"] = 0, + }, + [99] = { + ["X"] = 46.89, + ["Y"] = 48.44, + ["CD"] = 0, + }, + [100] = { + ["X"] = 48.12, + ["Y"] = 52.99, + ["CD"] = 0, + }, + [101] = { + ["X"] = 50.61, + ["Y"] = 58.06, + ["CD"] = 0, + }, + [102] = { + ["X"] = 65.48, + ["Y"] = 47.52, + ["CD"] = 0, + }, + [103] = { + ["X"] = 66.67, + ["Y"] = 48.25, + ["CD"] = 0, + }, + [104] = { + ["X"] = 67.25, + ["Y"] = 46.04, + ["CD"] = 0, + }, + [105] = { + ["X"] = 67.21, + ["Y"] = 43.27, + ["CD"] = 0, + }, + [106] = { + ["X"] = 56.87, + ["Y"] = 48.7, + ["CD"] = 0, + }, + [107] = { + ["X"] = 47.7, + ["Y"] = 38.02, + ["CD"] = 0, + }, + [108] = { + ["X"] = 45.05, + ["Y"] = 37.62, + ["CD"] = 0, + }, + [109] = { + ["X"] = 48.4, + ["Y"] = 32.78, + ["CD"] = 0, + }, + [110] = { + ["X"] = 51.98, + ["Y"] = 31.45, + ["CD"] = 0, + }, + [111] = { + ["X"] = 57.2, + ["Y"] = 27.62, + ["CD"] = 0, + }, + [112] = { + ["X"] = 61.29, + ["Y"] = 29.89, + ["CD"] = 0, + }, + [113] = { + ["X"] = 64.67, + ["Y"] = 31.6, + ["CD"] = 0, + }, + [114] = { + ["X"] = 60.67, + ["Y"] = 23.86, + ["CD"] = 0, + }, + [115] = { + ["X"] = 62.79, + ["Y"] = 25.61, + ["CD"] = 0, + }, + [116] = { + ["X"] = 66.4, + ["Y"] = 36.85, + ["CD"] = 0, + }, + [117] = { + ["X"] = 63.3, + ["Y"] = 35.71, + ["CD"] = 0, + }, + [118] = { + ["X"] = 54.11, + ["Y"] = 30.37, + ["CD"] = 0, + }, + [119] = { + ["X"] = 57.92, + ["Y"] = 33.75, + ["CD"] = 0, + }, + [120] = { + ["X"] = 42.81, + ["Y"] = 10.38, + ["CD"] = 0, + }, + [121] = { + ["X"] = 48.74, + ["Y"] = 10.63, + ["CD"] = 0, + }, + [122] = { + ["X"] = 40.78, + ["Y"] = 11.45, + ["CD"] = 0, + }, + [123] = { + ["X"] = 39.74, + ["Y"] = 13.5, + ["CD"] = 0, + }, + [124] = { + ["X"] = 35.84, + ["Y"] = 15.6, + ["CD"] = 0, + }, + [125] = { + ["X"] = 35.53, + ["Y"] = 22.66, + ["CD"] = 0, + }, + [126] = { + ["X"] = 35.42, + ["Y"] = 27.64, + ["CD"] = 0, + }, + [127] = { + ["X"] = 32.97, + ["Y"] = 32.94, + ["CD"] = 0, + }, + [128] = { + ["X"] = 38.01, + ["Y"] = 35.61, + ["CD"] = 0, + }, + [129] = { + ["X"] = 52.67, + ["Y"] = 26.74, + ["CD"] = 0, + }, + [130] = { + ["X"] = 54.31, + ["Y"] = 17.67, + ["CD"] = 0, + }, + [131] = { + ["X"] = 56.06, + ["Y"] = 19.39, + ["CD"] = 0, + }, + [132] = { + ["X"] = 51.37, + ["Y"] = 15.24, + ["CD"] = 0, + }, + [133] = { + ["X"] = 45.71, + ["Y"] = 15.14, + ["CD"] = 0, + }, + [134] = { + ["X"] = 46.61, + ["Y"] = 16.25, + ["CD"] = 0, + }, + [135] = { + ["X"] = 48.01, + ["Y"] = 12.51, + ["CD"] = 0, + }, + [136] = { + ["X"] = 44.59, + ["Y"] = 32.83, + ["CD"] = 0, + }, + [137] = { + ["X"] = 41.47, + ["Y"] = 33.61, + ["CD"] = 0, + }, + [138] = { + ["X"] = 42.3, + ["Y"] = 36.7, + ["CD"] = 0, + }, + [139] = { + ["X"] = 40.85, + ["Y"] = 38.78, + ["CD"] = 0, + }, + [140] = { + ["X"] = 39.97, + ["Y"] = 53.3, + ["CD"] = 0, + }, + [141] = { + ["X"] = 48.93, + ["Y"] = 43.77, + ["CD"] = 0, + }, + [142] = { + ["X"] = 60.71, + ["Y"] = 36.87, + ["CD"] = 0, + }, + [143] = { + ["X"] = 61.83, + ["Y"] = 39.44, + ["CD"] = 0, + }, + [144] = { + ["X"] = 56.71, + ["Y"] = 64.6, + ["CD"] = 0, + }, + [145] = { + ["X"] = 57, + ["Y"] = 62.25, + ["CD"] = 0, + }, + [146] = { + ["X"] = 62.66, + ["Y"] = 54.86, + ["CD"] = 0, + }, + [147] = { + ["X"] = 61.84, + ["Y"] = 55.45, + ["CD"] = 0, + }, + [148] = { + ["X"] = 56.88, + ["Y"] = 61.05, + ["CD"] = 0, + }, + [149] = { + ["X"] = 52.56, + ["Y"] = 60.68, + ["CD"] = 0, + }, + [150] = { + ["X"] = 46, + ["Y"] = 61.02, + ["CD"] = 0, + }, + }, + --Highmountain / Foxflower + [1024] = { + [1] = { + ["X"] = 39.04, + ["Y"] = 63.21, + ["CD"] = 0, + }, + [2] = { + ["X"] = 42.24, + ["Y"] = 55.42, + ["CD"] = 0, + }, + [3] = { + ["X"] = 43.3, + ["Y"] = 58.87, + ["CD"] = 0, + }, + [4] = { + ["X"] = 40.39, + ["Y"] = 59.24, + ["CD"] = 0, + }, + [5] = { + ["X"] = 42.39, + ["Y"] = 67.1, + ["CD"] = 0, + }, + [6] = { + ["X"] = 37.19, + ["Y"] = 66.98, + ["CD"] = 0, + }, + [7] = { + ["X"] = 42.21, + ["Y"] = 65.26, + ["CD"] = 0, + }, + [8] = { + ["X"] = 42.86, + ["Y"] = 52.36, + ["CD"] = 0, + }, + [9] = { + ["X"] = 44.42, + ["Y"] = 49.56, + ["CD"] = 0, + }, + [10] = { + ["X"] = 46.31, + ["Y"] = 46.84, + ["CD"] = 0, + }, + [11] = { + ["X"] = 44.32, + ["Y"] = 44.33, + ["CD"] = 0, + }, + [12] = { + ["X"] = 47.06, + ["Y"] = 48.3, + ["CD"] = 0, + }, + [13] = { + ["X"] = 46.96, + ["Y"] = 47.09, + ["CD"] = 0, + }, + [14] = { + ["X"] = 57.3, + ["Y"] = 22.65, + ["CD"] = 0, + }, + [15] = { + ["X"] = 57.13, + ["Y"] = 20.04, + ["CD"] = 0, + }, + [16] = { + ["X"] = 56.54, + ["Y"] = 21.14, + ["CD"] = 0, + }, + [17] = { + ["X"] = 55.97, + ["Y"] = 20.78, + ["CD"] = 0, + }, + [18] = { + ["X"] = 56, + ["Y"] = 20.19, + ["CD"] = 0, + }, + [19] = { + ["X"] = 55.94, + ["Y"] = 19.48, + ["CD"] = 0, + }, + [20] = { + ["X"] = 54.72, + ["Y"] = 16.63, + ["CD"] = 0, + }, + [21] = { + ["X"] = 55.63, + ["Y"] = 17.81, + ["CD"] = 0, + }, + [22] = { + ["X"] = 55.27, + ["Y"] = 18.91, + ["CD"] = 0, + }, + [23] = { + ["X"] = 55.32, + ["Y"] = 18.59, + ["CD"] = 0, + }, + [24] = { + ["X"] = 41.11, + ["Y"] = 51.73, + ["CD"] = 0, + }, + [25] = { + ["X"] = 42.6, + ["Y"] = 48.57, + ["CD"] = 0, + }, + [26] = { + ["X"] = 43.68, + ["Y"] = 48.71, + ["CD"] = 0, + }, + [27] = { + ["X"] = 39.67, + ["Y"] = 52.78, + ["CD"] = 0, + }, + [28] = { + ["X"] = 40.85, + ["Y"] = 53.98, + ["CD"] = 0, + }, + [29] = { + ["X"] = 42.82, + ["Y"] = 52.88, + ["CD"] = 0, + }, + [30] = { + ["X"] = 41.21, + ["Y"] = 56.52, + ["CD"] = 0, + }, + [31] = { + ["X"] = 39.74, + ["Y"] = 67.27, + ["CD"] = 0, + }, + [32] = { + ["X"] = 40.77, + ["Y"] = 65.23, + ["CD"] = 0, + }, + [33] = { + ["X"] = 37.33, + ["Y"] = 63.76, + ["CD"] = 0, + }, + [34] = { + ["X"] = 37.5, + ["Y"] = 62.89, + ["CD"] = 0, + }, + [35] = { + ["X"] = 37.72, + ["Y"] = 62.08, + ["CD"] = 0, + }, + [36] = { + ["X"] = 40.68, + ["Y"] = 57.62, + ["CD"] = 0, + }, + [37] = { + ["X"] = 50.04, + ["Y"] = 9, + ["CD"] = 0, + }, + [38] = { + ["X"] = 47.51, + ["Y"] = 9.64, + ["CD"] = 0, + }, + [39] = { + ["X"] = 45.07, + ["Y"] = 8.99, + ["CD"] = 0, + }, + [40] = { + ["X"] = 42.96, + ["Y"] = 9.11, + ["CD"] = 0, + }, + [41] = { + ["X"] = 43.26, + ["Y"] = 8.47, + ["CD"] = 0, + }, + [42] = { + ["X"] = 42.69, + ["Y"] = 7.59, + ["CD"] = 0, + }, + [43] = { + ["X"] = 45.72, + ["Y"] = 9.49, + ["CD"] = 0, + }, + [44] = { + ["X"] = 46.02, + ["Y"] = 8.48, + ["CD"] = 0, + }, + [45] = { + ["X"] = 44.75, + ["Y"] = 8.04, + ["CD"] = 0, + }, + [46] = { + ["X"] = 44.62, + ["Y"] = 7.22, + ["CD"] = 0, + }, + [47] = { + ["X"] = 41.25, + ["Y"] = 13, + ["CD"] = 0, + }, + [48] = { + ["X"] = 41.24, + ["Y"] = 11.49, + ["CD"] = 0, + }, + [49] = { + ["X"] = 42.07, + ["Y"] = 11.42, + ["CD"] = 0, + }, + [50] = { + ["X"] = 44.2, + ["Y"] = 10.31, + ["CD"] = 0, + }, + [51] = { + ["X"] = 43.54, + ["Y"] = 11.57, + ["CD"] = 0, + }, + [52] = { + ["X"] = 44.12, + ["Y"] = 11.56, + ["CD"] = 0, + }, + [53] = { + ["X"] = 45.67, + ["Y"] = 12.81, + ["CD"] = 0, + }, + [54] = { + ["X"] = 45.6, + ["Y"] = 11.82, + ["CD"] = 0, + }, + [55] = { + ["X"] = 48.04, + ["Y"] = 10.68, + ["CD"] = 0, + }, + [56] = { + ["X"] = 48.1, + ["Y"] = 9.57, + ["CD"] = 0, + }, + [57] = { + ["X"] = 50.88, + ["Y"] = 11.06, + ["CD"] = 0, + }, + [58] = { + ["X"] = 50.51, + ["Y"] = 10.69, + ["CD"] = 0, + }, + [59] = { + ["X"] = 50.02, + ["Y"] = 10.43, + ["CD"] = 0, + }, + [60] = { + ["X"] = 49.54, + ["Y"] = 10.43, + ["CD"] = 0, + }, + [61] = { + ["X"] = 48.84, + ["Y"] = 10.72, + ["CD"] = 0, + }, + [62] = { + ["X"] = 48.44, + ["Y"] = 10.66, + ["CD"] = 0, + }, + [63] = { + ["X"] = 47.95, + ["Y"] = 11.28, + ["CD"] = 0, + }, + [64] = { + ["X"] = 46.49, + ["Y"] = 11.47, + ["CD"] = 0, + }, + [65] = { + ["X"] = 47.16, + ["Y"] = 11.19, + ["CD"] = 0, + }, + [66] = { + ["X"] = 56.04, + ["Y"] = 63.04, + ["CD"] = 0, + }, + [67] = { + ["X"] = 56.46, + ["Y"] = 60.72, + ["CD"] = 0, + }, + [68] = { + ["X"] = 57.51, + ["Y"] = 59.57, + ["CD"] = 0, + }, + [69] = { + ["X"] = 57.31, + ["Y"] = 58.61, + ["CD"] = 0, + }, + [70] = { + ["X"] = 56.29, + ["Y"] = 56.16, + ["CD"] = 0, + }, + [71] = { + ["X"] = 56.93, + ["Y"] = 56.51, + ["CD"] = 0, + }, + [72] = { + ["X"] = 57.33, + ["Y"] = 56.08, + ["CD"] = 0, + }, + [73] = { + ["X"] = 57.78, + ["Y"] = 56.85, + ["CD"] = 0, + }, + [74] = { + ["X"] = 57.95, + ["Y"] = 54.56, + ["CD"] = 0, + }, + [75] = { + ["X"] = 57.54, + ["Y"] = 53.68, + ["CD"] = 0, + }, + [76] = { + ["X"] = 57.15, + ["Y"] = 53.7, + ["CD"] = 0, + }, + [77] = { + ["X"] = 55.34, + ["Y"] = 53.18, + ["CD"] = 0, + }, + [78] = { + ["X"] = 55.2, + ["Y"] = 53.41, + ["CD"] = 0, + }, + [79] = { + ["X"] = 56.17, + ["Y"] = 54.2, + ["CD"] = 0, + }, + [80] = { + ["X"] = 55.99, + ["Y"] = 55.43, + ["CD"] = 0, + }, + [81] = { + ["X"] = 55.9, + ["Y"] = 56.79, + ["CD"] = 0, + }, + [82] = { + ["X"] = 57.56, + ["Y"] = 57.6, + ["CD"] = 0, + }, + [83] = { + ["X"] = 55.89, + ["Y"] = 59.48, + ["CD"] = 0, + }, + [84] = { + ["X"] = 55.11, + ["Y"] = 61.2, + ["CD"] = 0, + }, + [85] = { + ["X"] = 39, + ["Y"] = 40.8, + ["CD"] = 0, + }, + [86] = { + ["X"] = 39.15, + ["Y"] = 39.51, + ["CD"] = 0, + }, + [87] = { + ["X"] = 40.15, + ["Y"] = 36.93, + ["CD"] = 0, + }, + [88] = { + ["X"] = 40.41, + ["Y"] = 37.67, + ["CD"] = 0, + }, + [89] = { + ["X"] = 40.55, + ["Y"] = 36.19, + ["CD"] = 0, + }, + [90] = { + ["X"] = 41.38, + ["Y"] = 36.45, + ["CD"] = 0, + }, + [91] = { + ["X"] = 41.54, + ["Y"] = 35.29, + ["CD"] = 0, + }, + [92] = { + ["X"] = 41.97, + ["Y"] = 33.67, + ["CD"] = 0, + }, + [93] = { + ["X"] = 41.46, + ["Y"] = 31.24, + ["CD"] = 0, + }, + [94] = { + ["X"] = 41.4, + ["Y"] = 28.92, + ["CD"] = 0, + }, + [95] = { + ["X"] = 40.79, + ["Y"] = 29.51, + ["CD"] = 0, + }, + [96] = { + ["X"] = 42.57, + ["Y"] = 30.29, + ["CD"] = 0, + }, + [97] = { + ["X"] = 46.38, + ["Y"] = 32.35, + ["CD"] = 0, + }, + [98] = { + ["X"] = 45.3, + ["Y"] = 32.49, + ["CD"] = 0, + }, + [99] = { + ["X"] = 44.18, + ["Y"] = 33.11, + ["CD"] = 0, + }, + [100] = { + ["X"] = 44.31, + ["Y"] = 32.62, + ["CD"] = 0, + }, + [101] = { + ["X"] = 44.76, + ["Y"] = 30.4, + ["CD"] = 0, + }, + [102] = { + ["X"] = 37.07, + ["Y"] = 19.85, + ["CD"] = 0, + }, + [103] = { + ["X"] = 36.06, + ["Y"] = 20.92, + ["CD"] = 0, + }, + [104] = { + ["X"] = 32.68, + ["Y"] = 23.7, + ["CD"] = 0, + }, + [105] = { + ["X"] = 33.36, + ["Y"] = 21.36, + ["CD"] = 0, + }, + [106] = { + ["X"] = 34.62, + ["Y"] = 22.6, + ["CD"] = 0, + }, + [107] = { + ["X"] = 35.26, + ["Y"] = 23.87, + ["CD"] = 0, + }, + [108] = { + ["X"] = 36.27, + ["Y"] = 23.14, + ["CD"] = 0, + }, + [109] = { + ["X"] = 34.74, + ["Y"] = 23.43, + ["CD"] = 0, + }, + [110] = { + ["X"] = 34.05, + ["Y"] = 24.22, + ["CD"] = 0, + }, + [111] = { + ["X"] = 34.18, + ["Y"] = 27.2, + ["CD"] = 0, + }, + [112] = { + ["X"] = 34.23, + ["Y"] = 25.22, + ["CD"] = 0, + }, + [113] = { + ["X"] = 31.78, + ["Y"] = 35.09, + ["CD"] = 0, + }, + [114] = { + ["X"] = 32.12, + ["Y"] = 34.17, + ["CD"] = 0, + }, + [115] = { + ["X"] = 33.13, + ["Y"] = 33.36, + ["CD"] = 0, + }, + [116] = { + ["X"] = 32.78, + ["Y"] = 32.58, + ["CD"] = 0, + }, + [117] = { + ["X"] = 31.77, + ["Y"] = 31.79, + ["CD"] = 0, + }, + [118] = { + ["X"] = 30.37, + ["Y"] = 28.05, + ["CD"] = 0, + }, + [119] = { + ["X"] = 30.53, + ["Y"] = 29.81, + ["CD"] = 0, + }, + [120] = { + ["X"] = 30.8, + ["Y"] = 30.32, + ["CD"] = 0, + }, + [121] = { + ["X"] = 28.47, + ["Y"] = 40.12, + ["CD"] = 0, + }, + [122] = { + ["X"] = 27.69, + ["Y"] = 41.13, + ["CD"] = 0, + }, + [123] = { + ["X"] = 28.37, + ["Y"] = 41.03, + ["CD"] = 0, + }, + [124] = { + ["X"] = 28.86, + ["Y"] = 42.47, + ["CD"] = 0, + }, + [125] = { + ["X"] = 29.95, + ["Y"] = 41.71, + ["CD"] = 0, + }, + [126] = { + ["X"] = 31.73, + ["Y"] = 38.3, + ["CD"] = 0, + }, + [127] = { + ["X"] = 30.38, + ["Y"] = 39.04, + ["CD"] = 0, + }, + [128] = { + ["X"] = 31.37, + ["Y"] = 36.91, + ["CD"] = 0, + }, + [129] = { + ["X"] = 31.64, + ["Y"] = 35.8, + ["CD"] = 0, + }, + [130] = { + ["X"] = 30.36, + ["Y"] = 34.88, + ["CD"] = 0, + }, + [131] = { + ["X"] = 31.05, + ["Y"] = 33.51, + ["CD"] = 0, + }, + [132] = { + ["X"] = 30.53, + ["Y"] = 33.11, + ["CD"] = 0, + }, + [133] = { + ["X"] = 31.38, + ["Y"] = 30.83, + ["CD"] = 0, + }, + [134] = { + ["X"] = 44.68, + ["Y"] = 54.55, + ["CD"] = 0, + }, + [135] = { + ["X"] = 44.08, + ["Y"] = 54.55, + ["CD"] = 0, + }, + [136] = { + ["X"] = 43.58, + ["Y"] = 54.82, + ["CD"] = 0, + }, + [137] = { + ["X"] = 45.12, + ["Y"] = 50.11, + ["CD"] = 0, + }, + [138] = { + ["X"] = 43.58, + ["Y"] = 45.93, + ["CD"] = 0, + }, + [139] = { + ["X"] = 42.63, + ["Y"] = 45.65, + ["CD"] = 0, + }, + [140] = { + ["X"] = 42.96, + ["Y"] = 46.27, + ["CD"] = 0, + }, + [141] = { + ["X"] = 42.09, + ["Y"] = 46.82, + ["CD"] = 0, + }, + [142] = { + ["X"] = 39.3, + ["Y"] = 46.88, + ["CD"] = 0, + }, + [143] = { + ["X"] = 40.18, + ["Y"] = 47.01, + ["CD"] = 0, + }, + [144] = { + ["X"] = 40.81, + ["Y"] = 46.97, + ["CD"] = 0, + }, + [145] = { + ["X"] = 41.37, + ["Y"] = 48.56, + ["CD"] = 0, + }, + [146] = { + ["X"] = 40.45, + ["Y"] = 48.42, + ["CD"] = 0, + }, + [147] = { + ["X"] = 38.56, + ["Y"] = 50.23, + ["CD"] = 0, + }, + [148] = { + ["X"] = 38.26, + ["Y"] = 49.28, + ["CD"] = 0, + }, + [149] = { + ["X"] = 39.77, + ["Y"] = 49.03, + ["CD"] = 0, + }, + [150] = { + ["X"] = 39.89, + ["Y"] = 49.73, + ["CD"] = 0, + }, + [151] = { + ["X"] = 39.97, + ["Y"] = 50.65, + ["CD"] = 0, + }, + [152] = { + ["X"] = 40.15, + ["Y"] = 51.03, + ["CD"] = 0, + }, + [153] = { + ["X"] = 58.81, + ["Y"] = 62.31, + ["CD"] = 0, + }, + [154] = { + ["X"] = 55.76, + ["Y"] = 65.74, + ["CD"] = 0, + }, + [155] = { + ["X"] = 52.04, + ["Y"] = 58.38, + ["CD"] = 0, + }, + [156] = { + ["X"] = 50.81, + ["Y"] = 67.32, + ["CD"] = 0, + }, + [157] = { + ["X"] = 43.38, + ["Y"] = 66.19, + ["CD"] = 0, + }, + [158] = { + ["X"] = 24.98, + ["Y"] = 59.43, + ["CD"] = 0, + }, + [159] = { + ["X"] = 26.05, + ["Y"] = 63.62, + ["CD"] = 0, + }, + [160] = { + ["X"] = 28.67, + ["Y"] = 55.49, + ["CD"] = 0, + }, + [161] = { + ["X"] = 26.86, + ["Y"] = 41.18, + ["CD"] = 0, + }, + [162] = { + ["X"] = 25.89, + ["Y"] = 44.55, + ["CD"] = 0, + }, + [163] = { + ["X"] = 24.23, + ["Y"] = 43.43, + ["CD"] = 0, + }, + [164] = { + ["X"] = 26.35, + ["Y"] = 39.24, + ["CD"] = 0, + }, + [165] = { + ["X"] = 28.83, + ["Y"] = 35.34, + ["CD"] = 0, + }, + [166] = { + ["X"] = 27.93, + ["Y"] = 30.52, + ["CD"] = 0, + }, + [167] = { + ["X"] = 28.73, + ["Y"] = 28.61, + ["CD"] = 0, + }, + [168] = { + ["X"] = 31.88, + ["Y"] = 26.11, + ["CD"] = 0, + }, + [169] = { + ["X"] = 37.52, + ["Y"] = 15.31, + ["CD"] = 0, + }, + [170] = { + ["X"] = 44.79, + ["Y"] = 12.36, + ["CD"] = 0, + }, + [171] = { + ["X"] = 58.06, + ["Y"] = 22.18, + ["CD"] = 0, + }, + [172] = { + ["X"] = 57.64, + ["Y"] = 19.03, + ["CD"] = 0, + }, + [173] = { + ["X"] = 54.81, + ["Y"] = 16.28, + ["CD"] = 0, + }, + [174] = { + ["X"] = 53.1, + ["Y"] = 13.37, + ["CD"] = 0, + }, + [175] = { + ["X"] = 49.63, + ["Y"] = 13.87, + ["CD"] = 0, + }, + [176] = { + ["X"] = 49.23, + ["Y"] = 8.72, + ["CD"] = 0, + }, + [177] = { + ["X"] = 47.72, + ["Y"] = 6.15, + ["CD"] = 0, + }, + [178] = { + ["X"] = 44.93, + ["Y"] = 7.4, + ["CD"] = 0, + }, + [179] = { + ["X"] = 42.09, + ["Y"] = 27.58, + ["CD"] = 0, + }, + [180] = { + ["X"] = 46.45, + ["Y"] = 26.28, + ["CD"] = 0, + }, + [181] = { + ["X"] = 47.57, + ["Y"] = 24.96, + ["CD"] = 0, + }, + [182] = { + ["X"] = 48.31, + ["Y"] = 29.71, + ["CD"] = 0, + }, + [183] = { + ["X"] = 35.86, + ["Y"] = 38.62, + ["CD"] = 0, + }, + [184] = { + ["X"] = 40.33, + ["Y"] = 33.71, + ["CD"] = 0, + }, + [185] = { + ["X"] = 36.87, + ["Y"] = 35.15, + ["CD"] = 0, + }, + [186] = { + ["X"] = 37.26, + ["Y"] = 33.85, + ["CD"] = 0, + }, + [187] = { + ["X"] = 42.47, + ["Y"] = 51.44, + ["CD"] = 0, + }, + [188] = { + ["X"] = 42.21, + ["Y"] = 54.16, + ["CD"] = 0, + }, + [189] = { + ["X"] = 44.95, + ["Y"] = 55.74, + ["CD"] = 0, + }, + [190] = { + ["X"] = 52, + ["Y"] = 32.57, + ["CD"] = 0, + }, + [191] = { + ["X"] = 52.49, + ["Y"] = 34.19, + ["CD"] = 0, + }, + [192] = { + ["X"] = 52.71, + ["Y"] = 39.16, + ["CD"] = 0, + }, + [193] = { + ["X"] = 54.4, + ["Y"] = 50.27, + ["CD"] = 0, + }, + [194] = { + ["X"] = 49.74, + ["Y"] = 42.1, + ["CD"] = 0, + }, + [195] = { + ["X"] = 47.22, + ["Y"] = 51.9, + ["CD"] = 0, + }, + [196] = { + ["X"] = 47.87, + ["Y"] = 54.97, + ["CD"] = 0, + }, + [197] = { + ["X"] = 43.42, + ["Y"] = 72.85, + ["CD"] = 0, + }, + [198] = { + ["X"] = 48.48, + ["Y"] = 54.81, + ["CD"] = 0, + }, + [199] = { + ["X"] = 38.62, + ["Y"] = 61.09, + ["CD"] = 0, + }, + [200] = { + ["X"] = 42.5, + ["Y"] = 61.79, + ["CD"] = 0, + }, + }, + --Stormheim / Fjarnskaggl + [1017] = { + [1] = { + ["X"] = 47.24, + ["Y"] = 55.62, + ["CD"] = 0, + }, + [2] = { + ["X"] = 51.47, + ["Y"] = 55.4, + ["CD"] = 0, + }, + [3] = { + ["X"] = 49.09, + ["Y"] = 52.04, + ["CD"] = 0, + }, + [4] = { + ["X"] = 48.14, + ["Y"] = 53.66, + ["CD"] = 0, + }, + [5] = { + ["X"] = 45.46, + ["Y"] = 53.33, + ["CD"] = 0, + }, + [6] = { + ["X"] = 42.97, + ["Y"] = 59.67, + ["CD"] = 0, + }, + [7] = { + ["X"] = 42.91, + ["Y"] = 57.7, + ["CD"] = 0, + }, + [8] = { + ["X"] = 42.8, + ["Y"] = 56.74, + ["CD"] = 0, + }, + [9] = { + ["X"] = 41.94, + ["Y"] = 53.95, + ["CD"] = 0, + }, + [10] = { + ["X"] = 39.66, + ["Y"] = 53.74, + ["CD"] = 0, + }, + [11] = { + ["X"] = 40.06, + ["Y"] = 52.65, + ["CD"] = 0, + }, + [12] = { + ["X"] = 41.77, + ["Y"] = 49.95, + ["CD"] = 0, + }, + [13] = { + ["X"] = 42.6, + ["Y"] = 49.17, + ["CD"] = 0, + }, + [14] = { + ["X"] = 42.02, + ["Y"] = 50.81, + ["CD"] = 0, + }, + [15] = { + ["X"] = 42.54, + ["Y"] = 52.47, + ["CD"] = 0, + }, + [16] = { + ["X"] = 42.86, + ["Y"] = 51.62, + ["CD"] = 0, + }, + [17] = { + ["X"] = 44.56, + ["Y"] = 52.7, + ["CD"] = 0, + }, + [18] = { + ["X"] = 43.88, + ["Y"] = 52.96, + ["CD"] = 0, + }, + [19] = { + ["X"] = 43.66, + ["Y"] = 54.02, + ["CD"] = 0, + }, + [20] = { + ["X"] = 44.39, + ["Y"] = 54.51, + ["CD"] = 0, + }, + [21] = { + ["X"] = 44.57, + ["Y"] = 56.26, + ["CD"] = 0, + }, + [22] = { + ["X"] = 44.17, + ["Y"] = 58.37, + ["CD"] = 0, + }, + [23] = { + ["X"] = 46.02, + ["Y"] = 58.16, + ["CD"] = 0, + }, + [24] = { + ["X"] = 45.54, + ["Y"] = 56.28, + ["CD"] = 0, + }, + [25] = { + ["X"] = 45.64, + ["Y"] = 55.67, + ["CD"] = 0, + }, + [26] = { + ["X"] = 45.88, + ["Y"] = 54.95, + ["CD"] = 0, + }, + [27] = { + ["X"] = 75.52, + ["Y"] = 64.36, + ["CD"] = 0, + }, + [28] = { + ["X"] = 74.64, + ["Y"] = 63.4, + ["CD"] = 0, + }, + [29] = { + ["X"] = 75.47, + ["Y"] = 61.49, + ["CD"] = 0, + }, + [30] = { + ["X"] = 76.04, + ["Y"] = 62.25, + ["CD"] = 0, + }, + [31] = { + ["X"] = 76.34, + ["Y"] = 62.88, + ["CD"] = 0, + }, + [32] = { + ["X"] = 75.6, + ["Y"] = 61.16, + ["CD"] = 0, + }, + [33] = { + ["X"] = 74.48, + ["Y"] = 61.07, + ["CD"] = 0, + }, + [34] = { + ["X"] = 73.1, + ["Y"] = 61.55, + ["CD"] = 0, + }, + [35] = { + ["X"] = 71.6, + ["Y"] = 61.94, + ["CD"] = 0, + }, + [36] = { + ["X"] = 71.17, + ["Y"] = 61.79, + ["CD"] = 0, + }, + [37] = { + ["X"] = 70.7, + ["Y"] = 61.82, + ["CD"] = 0, + }, + [38] = { + ["X"] = 69.93, + ["Y"] = 60.51, + ["CD"] = 0, + }, + [39] = { + ["X"] = 68.88, + ["Y"] = 62.24, + ["CD"] = 0, + }, + [40] = { + ["X"] = 68.02, + ["Y"] = 62.34, + ["CD"] = 0, + }, + [41] = { + ["X"] = 68.38, + ["Y"] = 60.4, + ["CD"] = 0, + }, + [42] = { + ["X"] = 68.09, + ["Y"] = 58.09, + ["CD"] = 0, + }, + [43] = { + ["X"] = 68.51, + ["Y"] = 57.47, + ["CD"] = 0, + }, + [44] = { + ["X"] = 69.32, + ["Y"] = 57.12, + ["CD"] = 0, + }, + [45] = { + ["X"] = 70.52, + ["Y"] = 56.23, + ["CD"] = 0, + }, + [46] = { + ["X"] = 68.72, + ["Y"] = 55.81, + ["CD"] = 0, + }, + [47] = { + ["X"] = 68.24, + ["Y"] = 55.37, + ["CD"] = 0, + }, + [48] = { + ["X"] = 67.73, + ["Y"] = 53.38, + ["CD"] = 0, + }, + [49] = { + ["X"] = 67.47, + ["Y"] = 50.94, + ["CD"] = 0, + }, + [50] = { + ["X"] = 66.2, + ["Y"] = 50.65, + ["CD"] = 0, + }, + [51] = { + ["X"] = 66.13, + ["Y"] = 49.8, + ["CD"] = 0, + }, + [52] = { + ["X"] = 65.36, + ["Y"] = 46.62, + ["CD"] = 0, + }, + [53] = { + ["X"] = 68.76, + ["Y"] = 42.62, + ["CD"] = 0, + }, + [54] = { + ["X"] = 69.77, + ["Y"] = 41.67, + ["CD"] = 0, + }, + [55] = { + ["X"] = 70.11, + ["Y"] = 40.61, + ["CD"] = 0, + }, + [56] = { + ["X"] = 70.23, + ["Y"] = 39.9, + ["CD"] = 0, + }, + [57] = { + ["X"] = 70.45, + ["Y"] = 39.16, + ["CD"] = 0, + }, + [58] = { + ["X"] = 71.16, + ["Y"] = 38.18, + ["CD"] = 0, + }, + [59] = { + ["X"] = 70.62, + ["Y"] = 37.63, + ["CD"] = 0, + }, + [60] = { + ["X"] = 69.98, + ["Y"] = 37.93, + ["CD"] = 0, + }, + [61] = { + ["X"] = 69.85, + ["Y"] = 36.95, + ["CD"] = 0, + }, + [62] = { + ["X"] = 69.11, + ["Y"] = 37.75, + ["CD"] = 0, + }, + [63] = { + ["X"] = 68.09, + ["Y"] = 38.08, + ["CD"] = 0, + }, + [64] = { + ["X"] = 68.51, + ["Y"] = 39.26, + ["CD"] = 0, + }, + [65] = { + ["X"] = 67.77, + ["Y"] = 40.49, + ["CD"] = 0, + }, + [66] = { + ["X"] = 67.39, + ["Y"] = 41.98, + ["CD"] = 0, + }, + [67] = { + ["X"] = 66.73, + ["Y"] = 42.58, + ["CD"] = 0, + }, + [68] = { + ["X"] = 67.01, + ["Y"] = 43.27, + ["CD"] = 0, + }, + [69] = { + ["X"] = 66.64, + ["Y"] = 43.31, + ["CD"] = 0, + }, + [70] = { + ["X"] = 65.25, + ["Y"] = 48.23, + ["CD"] = 0, + }, + [71] = { + ["X"] = 64.43, + ["Y"] = 47.44, + ["CD"] = 0, + }, + [72] = { + ["X"] = 64.3, + ["Y"] = 49.23, + ["CD"] = 0, + }, + [73] = { + ["X"] = 63.4, + ["Y"] = 49.43, + ["CD"] = 0, + }, + [74] = { + ["X"] = 61.43, + ["Y"] = 49.66, + ["CD"] = 0, + }, + [75] = { + ["X"] = 62.74, + ["Y"] = 50.15, + ["CD"] = 0, + }, + [76] = { + ["X"] = 62.33, + ["Y"] = 50.62, + ["CD"] = 0, + }, + [77] = { + ["X"] = 61.77, + ["Y"] = 51.52, + ["CD"] = 0, + }, + [78] = { + ["X"] = 61.5, + ["Y"] = 53.26, + ["CD"] = 0, + }, + [79] = { + ["X"] = 61.08, + ["Y"] = 54.15, + ["CD"] = 0, + }, + [80] = { + ["X"] = 59.76, + ["Y"] = 53.98, + ["CD"] = 0, + }, + [81] = { + ["X"] = 59.06, + ["Y"] = 52.97, + ["CD"] = 0, + }, + [82] = { + ["X"] = 59.38, + ["Y"] = 51.04, + ["CD"] = 0, + }, + [83] = { + ["X"] = 59.05, + ["Y"] = 51.07, + ["CD"] = 0, + }, + [84] = { + ["X"] = 58.05, + ["Y"] = 51.4, + ["CD"] = 0, + }, + [85] = { + ["X"] = 57.23, + ["Y"] = 50.59, + ["CD"] = 0, + }, + [86] = { + ["X"] = 56.64, + ["Y"] = 50.71, + ["CD"] = 0, + }, + [87] = { + ["X"] = 53.07, + ["Y"] = 53.33, + ["CD"] = 0, + }, + [88] = { + ["X"] = 53.94, + ["Y"] = 54.38, + ["CD"] = 0, + }, + [89] = { + ["X"] = 53.44, + ["Y"] = 54.49, + ["CD"] = 0, + }, + [90] = { + ["X"] = 52.19, + ["Y"] = 56.4, + ["CD"] = 0, + }, + [91] = { + ["X"] = 51.96, + ["Y"] = 58.49, + ["CD"] = 0, + }, + [92] = { + ["X"] = 51.66, + ["Y"] = 58.85, + ["CD"] = 0, + }, + [93] = { + ["X"] = 51.36, + ["Y"] = 59.61, + ["CD"] = 0, + }, + [94] = { + ["X"] = 52, + ["Y"] = 60.49, + ["CD"] = 0, + }, + [95] = { + ["X"] = 53.76, + ["Y"] = 58.93, + ["CD"] = 0, + }, + [96] = { + ["X"] = 53.43, + ["Y"] = 58.03, + ["CD"] = 0, + }, + [97] = { + ["X"] = 52.75, + ["Y"] = 56.71, + ["CD"] = 0, + }, + [98] = { + ["X"] = 53.34, + ["Y"] = 56.63, + ["CD"] = 0, + }, + [99] = { + ["X"] = 53.46, + ["Y"] = 55.97, + ["CD"] = 0, + }, + [100] = { + ["X"] = 52.99, + ["Y"] = 55.07, + ["CD"] = 0, + }, + [101] = { + ["X"] = 52.69, + ["Y"] = 53.46, + ["CD"] = 0, + }, + [102] = { + ["X"] = 51.16, + ["Y"] = 53.73, + ["CD"] = 0, + }, + [103] = { + ["X"] = 50.62, + ["Y"] = 53.1, + ["CD"] = 0, + }, + [104] = { + ["X"] = 50.2, + ["Y"] = 52.37, + ["CD"] = 0, + }, + [105] = { + ["X"] = 50.13, + ["Y"] = 50.4, + ["CD"] = 0, + }, + [106] = { + ["X"] = 48.08, + ["Y"] = 50.93, + ["CD"] = 0, + }, + [107] = { + ["X"] = 47.68, + ["Y"] = 48.92, + ["CD"] = 0, + }, + [108] = { + ["X"] = 44.23, + ["Y"] = 45.97, + ["CD"] = 0, + }, + [109] = { + ["X"] = 45.22, + ["Y"] = 43.32, + ["CD"] = 0, + }, + [110] = { + ["X"] = 45.69, + ["Y"] = 42.54, + ["CD"] = 0, + }, + [111] = { + ["X"] = 46.28, + ["Y"] = 42.7, + ["CD"] = 0, + }, + [112] = { + ["X"] = 48.34, + ["Y"] = 39.8, + ["CD"] = 0, + }, + [113] = { + ["X"] = 49.36, + ["Y"] = 37.64, + ["CD"] = 0, + }, + [114] = { + ["X"] = 47.3, + ["Y"] = 38.94, + ["CD"] = 0, + }, + [115] = { + ["X"] = 42.38, + ["Y"] = 41.41, + ["CD"] = 0, + }, + [116] = { + ["X"] = 42.36, + ["Y"] = 39.64, + ["CD"] = 0, + }, + [117] = { + ["X"] = 42.97, + ["Y"] = 39.05, + ["CD"] = 0, + }, + [118] = { + ["X"] = 42.41, + ["Y"] = 38.26, + ["CD"] = 0, + }, + [119] = { + ["X"] = 40.83, + ["Y"] = 40.62, + ["CD"] = 0, + }, + [120] = { + ["X"] = 41.68, + ["Y"] = 40.19, + ["CD"] = 0, + }, + [121] = { + ["X"] = 61.22, + ["Y"] = 64.31, + ["CD"] = 0, + }, + [122] = { + ["X"] = 56.67, + ["Y"] = 79.09, + ["CD"] = 0, + }, + [123] = { + ["X"] = 73.25, + ["Y"] = 44.25, + ["CD"] = 0, + }, + [124] = { + ["X"] = 73.25, + ["Y"] = 44.5, + ["CD"] = 0, + }, + [125] = { + ["X"] = 69.24, + ["Y"] = 50.47, + ["CD"] = 0, + }, + [126] = { + ["X"] = 64.32, + ["Y"] = 44.07, + ["CD"] = 0, + }, + [127] = { + ["X"] = 62.95, + ["Y"] = 46.32, + ["CD"] = 0, + }, + [128] = { + ["X"] = 63.56, + ["Y"] = 45.14, + ["CD"] = 0, + }, + [129] = { + ["X"] = 68.35, + ["Y"] = 58.98, + ["CD"] = 0, + }, + [130] = { + ["X"] = 71.6, + ["Y"] = 52.25, + ["CD"] = 0, + }, + [131] = { + ["X"] = 82.09, + ["Y"] = 57.01, + ["CD"] = 0, + }, + [132] = { + ["X"] = 80.93, + ["Y"] = 56.31, + ["CD"] = 0, + }, + [133] = { + ["X"] = 79.83, + ["Y"] = 64.42, + ["CD"] = 0, + }, + [134] = { + ["X"] = 78.73, + ["Y"] = 63.87, + ["CD"] = 0, + }, + [135] = { + ["X"] = 80.89, + ["Y"] = 63.18, + ["CD"] = 0, + }, + [136] = { + ["X"] = 78.75, + ["Y"] = 58.41, + ["CD"] = 0, + }, + [137] = { + ["X"] = 77.87, + ["Y"] = 57.58, + ["CD"] = 0, + }, + [138] = { + ["X"] = 73.32, + ["Y"] = 59.52, + ["CD"] = 0, + }, + [139] = { + ["X"] = 70.2, + ["Y"] = 58.54, + ["CD"] = 0, + }, + [140] = { + ["X"] = 68.78, + ["Y"] = 54.4, + ["CD"] = 0, + }, + [141] = { + ["X"] = 67.69, + ["Y"] = 59.37, + ["CD"] = 0, + }, + [142] = { + ["X"] = 67.61, + ["Y"] = 54.47, + ["CD"] = 0, + }, + [143] = { + ["X"] = 65.94, + ["Y"] = 52.25, + ["CD"] = 0, + }, + [144] = { + ["X"] = 63.57, + ["Y"] = 55.84, + ["CD"] = 0, + }, + [145] = { + ["X"] = 68.18, + ["Y"] = 50.25, + ["CD"] = 0, + }, + [146] = { + ["X"] = 43.9, + ["Y"] = 58.83, + ["CD"] = 0, + }, + [147] = { + ["X"] = 43.27, + ["Y"] = 81.62, + ["CD"] = 0, + }, + [148] = { + ["X"] = 45.24, + ["Y"] = 75.28, + ["CD"] = 0, + }, + [149] = { + ["X"] = 43.53, + ["Y"] = 70.2, + ["CD"] = 0, + }, + [150] = { + ["X"] = 43.4, + ["Y"] = 71.29, + ["CD"] = 0, + }, + [151] = { + ["X"] = 48, + ["Y"] = 67.59, + ["CD"] = 0, + }, + [152] = { + ["X"] = 41.82, + ["Y"] = 65.83, + ["CD"] = 0, + }, + [153] = { + ["X"] = 41.11, + ["Y"] = 65.23, + ["CD"] = 0, + }, + [154] = { + ["X"] = 37.84, + ["Y"] = 64.52, + ["CD"] = 0, + }, + [155] = { + ["X"] = 41.31, + ["Y"] = 58.59, + ["CD"] = 0, + }, + [156] = { + ["X"] = 42.35, + ["Y"] = 61.07, + ["CD"] = 0, + }, + [157] = { + ["X"] = 38.37, + ["Y"] = 56.57, + ["CD"] = 0, + }, + [158] = { + ["X"] = 37.66, + ["Y"] = 55.01, + ["CD"] = 0, + }, + [159] = { + ["X"] = 44.11, + ["Y"] = 44.07, + ["CD"] = 0, + }, + [160] = { + ["X"] = 46.61, + ["Y"] = 40.23, + ["CD"] = 0, + }, + [161] = { + ["X"] = 44.65, + ["Y"] = 38.78, + ["CD"] = 0, + }, + [162] = { + ["X"] = 47.94, + ["Y"] = 35.39, + ["CD"] = 0, + }, + [163] = { + ["X"] = 43.25, + ["Y"] = 31.36, + ["CD"] = 0, + }, + [164] = { + ["X"] = 45.4, + ["Y"] = 30.26, + ["CD"] = 0, + }, + [165] = { + ["X"] = 43.1, + ["Y"] = 26.67, + ["CD"] = 0, + }, + [166] = { + ["X"] = 45.47, + ["Y"] = 25.53, + ["CD"] = 0, + }, + [167] = { + ["X"] = 50.15, + ["Y"] = 21.58, + ["CD"] = 0, + }, + [168] = { + ["X"] = 48.03, + ["Y"] = 21.48, + ["CD"] = 0, + }, + [169] = { + ["X"] = 62, + ["Y"] = 25.52, + ["CD"] = 0, + }, + [170] = { + ["X"] = 60.54, + ["Y"] = 29.82, + ["CD"] = 0, + }, + [171] = { + ["X"] = 52, + ["Y"] = 25.83, + ["CD"] = 0, + }, + [172] = { + ["X"] = 50.54, + ["Y"] = 35.56, + ["CD"] = 0, + }, + [173] = { + ["X"] = 44.97, + ["Y"] = 39.08, + ["CD"] = 0, + }, + [174] = { + ["X"] = 42.83, + ["Y"] = 42.04, + ["CD"] = 0, + }, + [175] = { + ["X"] = 43.57, + ["Y"] = 45.19, + ["CD"] = 0, + }, + [176] = { + ["X"] = 43.59, + ["Y"] = 46.2, + ["CD"] = 0, + }, + [177] = { + ["X"] = 49.47, + ["Y"] = 49.89, + ["CD"] = 0, + }, + [178] = { + ["X"] = 48.93, + ["Y"] = 49.78, + ["CD"] = 0, + }, + [179] = { + ["X"] = 43.63, + ["Y"] = 38.21, + ["CD"] = 0, + }, + [180] = { + ["X"] = 45.98, + ["Y"] = 38.79, + ["CD"] = 0, + }, + [181] = { + ["X"] = 44.19, + ["Y"] = 40.82, + ["CD"] = 0, + }, + [182] = { + ["X"] = 43.7, + ["Y"] = 42.61, + ["CD"] = 0, + }, + [183] = { + ["X"] = 44.29, + ["Y"] = 46.69, + ["CD"] = 0, + }, + [184] = { + ["X"] = 40.96, + ["Y"] = 37.98, + ["CD"] = 0, + }, + [185] = { + ["X"] = 42.18, + ["Y"] = 36.75, + ["CD"] = 0, + }, + [186] = { + ["X"] = 28.74, + ["Y"] = 46.9, + ["CD"] = 0, + }, + [187] = { + ["X"] = 29.32, + ["Y"] = 47.14, + ["CD"] = 0, + }, + [188] = { + ["X"] = 30.43, + ["Y"] = 51.49, + ["CD"] = 0, + }, + [189] = { + ["X"] = 34.47, + ["Y"] = 45.62, + ["CD"] = 0, + }, + [190] = { + ["X"] = 28.01, + ["Y"] = 41.97, + ["CD"] = 0, + }, + [191] = { + ["X"] = 33.22, + ["Y"] = 43.93, + ["CD"] = 0, + }, + [192] = { + ["X"] = 34.45, + ["Y"] = 42.11, + ["CD"] = 0, + }, + [193] = { + ["X"] = 36.37, + ["Y"] = 40.26, + ["CD"] = 0, + }, + [194] = { + ["X"] = 38.14, + ["Y"] = 23.01, + ["CD"] = 0, + }, + [195] = { + ["X"] = 43.17, + ["Y"] = 21.07, + ["CD"] = 0, + }, + [196] = { + ["X"] = 35.77, + ["Y"] = 27.54, + ["CD"] = 0, + }, + [197] = { + ["X"] = 63.95, + ["Y"] = 62.4, + ["CD"] = 0, + }, + [198] = { + ["X"] = 65.8, + ["Y"] = 58.06, + ["CD"] = 0, + }, + [199] = { + ["X"] = 59.47, + ["Y"] = 56.02, + ["CD"] = 0, + }, + [200] = { + ["X"] = 60.84, + ["Y"] = 55.71, + ["CD"] = 0, + }, + }, + --Val'sharah / Dreamleaf + [1018] = { + [1] = { + ["X"] = 61.87, + ["Y"] = 52.19, + ["CD"] = 0, + }, + [2] = { + ["X"] = 60.2, + ["Y"] = 53.05, + ["CD"] = 0, + }, + [3] = { + ["X"] = 60.65, + ["Y"] = 54.53, + ["CD"] = 0, + }, + [4] = { + ["X"] = 59.47, + ["Y"] = 55.87, + ["CD"] = 0, + }, + [5] = { + ["X"] = 56.22, + ["Y"] = 60.29, + ["CD"] = 0, + }, + [6] = { + ["X"] = 56.95, + ["Y"] = 61.33, + ["CD"] = 0, + }, + [7] = { + ["X"] = 56.52, + ["Y"] = 64.31, + ["CD"] = 0, + }, + [8] = { + ["X"] = 58.38, + ["Y"] = 65.51, + ["CD"] = 0, + }, + [9] = { + ["X"] = 56.03, + ["Y"] = 64.65, + ["CD"] = 0, + }, + [10] = { + ["X"] = 55.53, + ["Y"] = 70.26, + ["CD"] = 0, + }, + [11] = { + ["X"] = 57.79, + ["Y"] = 71.48, + ["CD"] = 0, + }, + [12] = { + ["X"] = 59.03, + ["Y"] = 69.43, + ["CD"] = 0, + }, + [13] = { + ["X"] = 57.33, + ["Y"] = 69.9, + ["CD"] = 0, + }, + [14] = { + ["X"] = 55.39, + ["Y"] = 68.84, + ["CD"] = 0, + }, + [15] = { + ["X"] = 55.08, + ["Y"] = 63.45, + ["CD"] = 0, + }, + [16] = { + ["X"] = 52.34, + ["Y"] = 61.54, + ["CD"] = 0, + }, + [17] = { + ["X"] = 51.12, + ["Y"] = 64.53, + ["CD"] = 0, + }, + [18] = { + ["X"] = 54.28, + ["Y"] = 62.65, + ["CD"] = 0, + }, + [19] = { + ["X"] = 54.32, + ["Y"] = 66.08, + ["CD"] = 0, + }, + [20] = { + ["X"] = 58.53, + ["Y"] = 61.45, + ["CD"] = 0, + }, + [21] = { + ["X"] = 58.37, + ["Y"] = 63.02, + ["CD"] = 0, + }, + [22] = { + ["X"] = 59.24, + ["Y"] = 65.05, + ["CD"] = 0, + }, + [23] = { + ["X"] = 62.31, + ["Y"] = 64.97, + ["CD"] = 0, + }, + [24] = { + ["X"] = 63.37, + ["Y"] = 67.79, + ["CD"] = 0, + }, + [25] = { + ["X"] = 64.83, + ["Y"] = 68.7, + ["CD"] = 0, + }, + [26] = { + ["X"] = 68.37, + ["Y"] = 63.92, + ["CD"] = 0, + }, + [27] = { + ["X"] = 66.9, + ["Y"] = 66.86, + ["CD"] = 0, + }, + [28] = { + ["X"] = 67.08, + ["Y"] = 68.7, + ["CD"] = 0, + }, + [29] = { + ["X"] = 66.91, + ["Y"] = 70.84, + ["CD"] = 0, + }, + [30] = { + ["X"] = 65.61, + ["Y"] = 71.3, + ["CD"] = 0, + }, + [31] = { + ["X"] = 65.43, + ["Y"] = 74.05, + ["CD"] = 0, + }, + [32] = { + ["X"] = 66.57, + ["Y"] = 73.67, + ["CD"] = 0, + }, + [33] = { + ["X"] = 68.75, + ["Y"] = 72.27, + ["CD"] = 0, + }, + [34] = { + ["X"] = 67.56, + ["Y"] = 72.17, + ["CD"] = 0, + }, + [35] = { + ["X"] = 68.81, + ["Y"] = 74.63, + ["CD"] = 0, + }, + [36] = { + ["X"] = 67.77, + ["Y"] = 75.19, + ["CD"] = 0, + }, + [37] = { + ["X"] = 67.02, + ["Y"] = 76.86, + ["CD"] = 0, + }, + [38] = { + ["X"] = 65.7, + ["Y"] = 75.96, + ["CD"] = 0, + }, + [39] = { + ["X"] = 60.05, + ["Y"] = 76.17, + ["CD"] = 0, + }, + [40] = { + ["X"] = 56.95, + ["Y"] = 76.95, + ["CD"] = 0, + }, + [41] = { + ["X"] = 57.35, + ["Y"] = 75.19, + ["CD"] = 0, + }, + [42] = { + ["X"] = 58.36, + ["Y"] = 73.27, + ["CD"] = 0, + }, + [43] = { + ["X"] = 59.08, + ["Y"] = 73.81, + ["CD"] = 0, + }, + [44] = { + ["X"] = 60.66, + ["Y"] = 75.82, + ["CD"] = 0, + }, + [45] = { + ["X"] = 61.34, + ["Y"] = 79.25, + ["CD"] = 0, + }, + [46] = { + ["X"] = 62.71, + ["Y"] = 80.38, + ["CD"] = 0, + }, + [47] = { + ["X"] = 60.26, + ["Y"] = 80.68, + ["CD"] = 0, + }, + [48] = { + ["X"] = 59.23, + ["Y"] = 82.19, + ["CD"] = 0, + }, + [49] = { + ["X"] = 62.34, + ["Y"] = 84.98, + ["CD"] = 0, + }, + [50] = { + ["X"] = 58.92, + ["Y"] = 88.3, + ["CD"] = 0, + }, + [51] = { + ["X"] = 55.85, + ["Y"] = 89.71, + ["CD"] = 0, + }, + [52] = { + ["X"] = 56.13, + ["Y"] = 87.83, + ["CD"] = 0, + }, + [53] = { + ["X"] = 54.22, + ["Y"] = 88.9, + ["CD"] = 0, + }, + [54] = { + ["X"] = 53.37, + ["Y"] = 87.68, + ["CD"] = 0, + }, + [55] = { + ["X"] = 50.61, + ["Y"] = 86.57, + ["CD"] = 0, + }, + [56] = { + ["X"] = 49.98, + ["Y"] = 83.55, + ["CD"] = 0, + }, + [57] = { + ["X"] = 49.47, + ["Y"] = 81.21, + ["CD"] = 0, + }, + [58] = { + ["X"] = 50.49, + ["Y"] = 79.7, + ["CD"] = 0, + }, + [59] = { + ["X"] = 51.4, + ["Y"] = 78.35, + ["CD"] = 0, + }, + [60] = { + ["X"] = 52.52, + ["Y"] = 75.98, + ["CD"] = 0, + }, + [61] = { + ["X"] = 48.75, + ["Y"] = 73.96, + ["CD"] = 0, + }, + [62] = { + ["X"] = 48.14, + ["Y"] = 72.49, + ["CD"] = 0, + }, + [63] = { + ["X"] = 46.98, + ["Y"] = 58.58, + ["CD"] = 0, + }, + [64] = { + ["X"] = 43.72, + ["Y"] = 57.99, + ["CD"] = 0, + }, + [65] = { + ["X"] = 46.84, + ["Y"] = 37.45, + ["CD"] = 0, + }, + [66] = { + ["X"] = 46.85, + ["Y"] = 39.36, + ["CD"] = 0, + }, + [67] = { + ["X"] = 47.84, + ["Y"] = 38.96, + ["CD"] = 0, + }, + [68] = { + ["X"] = 48.45, + ["Y"] = 40.92, + ["CD"] = 0, + }, + [69] = { + ["X"] = 50.4, + ["Y"] = 39.27, + ["CD"] = 0, + }, + [70] = { + ["X"] = 50.43, + ["Y"] = 40.57, + ["CD"] = 0, + }, + [71] = { + ["X"] = 52.45, + ["Y"] = 44.2, + ["CD"] = 0, + }, + [72] = { + ["X"] = 54.73, + ["Y"] = 47.17, + ["CD"] = 0, + }, + [73] = { + ["X"] = 56.35, + ["Y"] = 45.89, + ["CD"] = 0, + }, + [74] = { + ["X"] = 54.9, + ["Y"] = 41.74, + ["CD"] = 0, + }, + [75] = { + ["X"] = 54.87, + ["Y"] = 39.41, + ["CD"] = 0, + }, + [76] = { + ["X"] = 56.71, + ["Y"] = 40.19, + ["CD"] = 0, + }, + [77] = { + ["X"] = 57.58, + ["Y"] = 41.53, + ["CD"] = 0, + }, + [78] = { + ["X"] = 58.36, + ["Y"] = 41.66, + ["CD"] = 0, + }, + [79] = { + ["X"] = 60.05, + ["Y"] = 42.17, + ["CD"] = 0, + }, + [80] = { + ["X"] = 61.65, + ["Y"] = 43.31, + ["CD"] = 0, + }, + [81] = { + ["X"] = 60.92, + ["Y"] = 41.56, + ["CD"] = 0, + }, + [82] = { + ["X"] = 62.24, + ["Y"] = 44.16, + ["CD"] = 0, + }, + [83] = { + ["X"] = 62.18, + ["Y"] = 43.11, + ["CD"] = 0, + }, + [84] = { + ["X"] = 64.04, + ["Y"] = 40.91, + ["CD"] = 0, + }, + [85] = { + ["X"] = 62.84, + ["Y"] = 40.65, + ["CD"] = 0, + }, + [86] = { + ["X"] = 63.51, + ["Y"] = 38.93, + ["CD"] = 0, + }, + [87] = { + ["X"] = 69.12, + ["Y"] = 39.38, + ["CD"] = 0, + }, + [88] = { + ["X"] = 70.92, + ["Y"] = 38.4, + ["CD"] = 0, + }, + [89] = { + ["X"] = 71.19, + ["Y"] = 42.44, + ["CD"] = 0, + }, + [90] = { + ["X"] = 72.93, + ["Y"] = 44.69, + ["CD"] = 0, + }, + [91] = { + ["X"] = 71.57, + ["Y"] = 47.07, + ["CD"] = 0, + }, + [92] = { + ["X"] = 69.24, + ["Y"] = 45.68, + ["CD"] = 0, + }, + [93] = { + ["X"] = 69.93, + ["Y"] = 47.65, + ["CD"] = 0, + }, + [94] = { + ["X"] = 68.74, + ["Y"] = 48.58, + ["CD"] = 0, + }, + [95] = { + ["X"] = 68.01, + ["Y"] = 50.36, + ["CD"] = 0, + }, + [96] = { + ["X"] = 70.59, + ["Y"] = 51.95, + ["CD"] = 0, + }, + [97] = { + ["X"] = 70.77, + ["Y"] = 54.92, + ["CD"] = 0, + }, + [98] = { + ["X"] = 71.17, + ["Y"] = 56.39, + ["CD"] = 0, + }, + [99] = { + ["X"] = 70.27, + ["Y"] = 56.41, + ["CD"] = 0, + }, + [100] = { + ["X"] = 69.1, + ["Y"] = 55.12, + ["CD"] = 0, + }, + [101] = { + ["X"] = 65.97, + ["Y"] = 59.44, + ["CD"] = 0, + }, + [102] = { + ["X"] = 65.88, + ["Y"] = 56.5, + ["CD"] = 0, + }, + [103] = { + ["X"] = 64.45, + ["Y"] = 53.78, + ["CD"] = 0, + }, + [104] = { + ["X"] = 63.19, + ["Y"] = 56.73, + ["CD"] = 0, + }, + [105] = { + ["X"] = 64.13, + ["Y"] = 58.96, + ["CD"] = 0, + }, + [106] = { + ["X"] = 65.55, + ["Y"] = 61.24, + ["CD"] = 0, + }, + [107] = { + ["X"] = 64.01, + ["Y"] = 61.23, + ["CD"] = 0, + }, + [108] = { + ["X"] = 64.35, + ["Y"] = 75.33, + ["CD"] = 0, + }, + [109] = { + ["X"] = 64.04, + ["Y"] = 79.4, + ["CD"] = 0, + }, + [110] = { + ["X"] = 65.31, + ["Y"] = 79.67, + ["CD"] = 0, + }, + [111] = { + ["X"] = 64.07, + ["Y"] = 81.41, + ["CD"] = 0, + }, + [112] = { + ["X"] = 62.41, + ["Y"] = 82.04, + ["CD"] = 0, + }, + [113] = { + ["X"] = 61.02, + ["Y"] = 83.56, + ["CD"] = 0, + }, + [114] = { + ["X"] = 59.89, + ["Y"] = 83.19, + ["CD"] = 0, + }, + [115] = { + ["X"] = 60.72, + ["Y"] = 84.32, + ["CD"] = 0, + }, + [116] = { + ["X"] = 61.72, + ["Y"] = 84.3, + ["CD"] = 0, + }, + [117] = { + ["X"] = 59.99, + ["Y"] = 79.24, + ["CD"] = 0, + }, + [118] = { + ["X"] = 56.12, + ["Y"] = 79.23, + ["CD"] = 0, + }, + [119] = { + ["X"] = 55.7, + ["Y"] = 76.89, + ["CD"] = 0, + }, + [120] = { + ["X"] = 51.19, + ["Y"] = 72.26, + ["CD"] = 0, + }, + [121] = { + ["X"] = 53.78, + ["Y"] = 70.92, + ["CD"] = 0, + }, + [122] = { + ["X"] = 52.44, + ["Y"] = 72.53, + ["CD"] = 0, + }, + [123] = { + ["X"] = 47.63, + ["Y"] = 77.64, + ["CD"] = 0, + }, + [124] = { + ["X"] = 49.85, + ["Y"] = 74.92, + ["CD"] = 0, + }, + [125] = { + ["X"] = 49.99, + ["Y"] = 77.55, + ["CD"] = 0, + }, + [126] = { + ["X"] = 47.43, + ["Y"] = 76.36, + ["CD"] = 0, + }, + [127] = { + ["X"] = 44.57, + ["Y"] = 82.87, + ["CD"] = 0, + }, + [128] = { + ["X"] = 44.59, + ["Y"] = 86.64, + ["CD"] = 0, + }, + [129] = { + ["X"] = 45.1, + ["Y"] = 86.63, + ["CD"] = 0, + }, + [130] = { + ["X"] = 44.31, + ["Y"] = 85.05, + ["CD"] = 0, + }, + [131] = { + ["X"] = 42.91, + ["Y"] = 83.59, + ["CD"] = 0, + }, + [132] = { + ["X"] = 42.69, + ["Y"] = 81.24, + ["CD"] = 0, + }, + [133] = { + ["X"] = 42.59, + ["Y"] = 80.4, + ["CD"] = 0, + }, + [134] = { + ["X"] = 41.57, + ["Y"] = 81.13, + ["CD"] = 0, + }, + [135] = { + ["X"] = 40.88, + ["Y"] = 75.34, + ["CD"] = 0, + }, + [136] = { + ["X"] = 50.44, + ["Y"] = 53.49, + ["CD"] = 0, + }, + [137] = { + ["X"] = 53.43, + ["Y"] = 52.68, + ["CD"] = 0, + }, + [138] = { + ["X"] = 55.29, + ["Y"] = 50.86, + ["CD"] = 0, + }, + [139] = { + ["X"] = 54.1, + ["Y"] = 52.27, + ["CD"] = 0, + }, + [140] = { + ["X"] = 53.37, + ["Y"] = 51.14, + ["CD"] = 0, + }, + [141] = { + ["X"] = 53.52, + ["Y"] = 49.5, + ["CD"] = 0, + }, + [142] = { + ["X"] = 52.4, + ["Y"] = 49.71, + ["CD"] = 0, + }, + [143] = { + ["X"] = 50.9, + ["Y"] = 49.61, + ["CD"] = 0, + }, + [144] = { + ["X"] = 47.8, + ["Y"] = 52.24, + ["CD"] = 0, + }, + [145] = { + ["X"] = 47.93, + ["Y"] = 55.01, + ["CD"] = 0, + }, + [146] = { + ["X"] = 46.89, + ["Y"] = 53.79, + ["CD"] = 0, + }, + [147] = { + ["X"] = 46.22, + ["Y"] = 55.18, + ["CD"] = 0, + }, + [148] = { + ["X"] = 46.32, + ["Y"] = 56.82, + ["CD"] = 0, + }, + [149] = { + ["X"] = 40.2, + ["Y"] = 62.85, + ["CD"] = 0, + }, + [150] = { + ["X"] = 40.35, + ["Y"] = 60.93, + ["CD"] = 0, + }, + [151] = { + ["X"] = 36.08, + ["Y"] = 58.38, + ["CD"] = 0, + }, + [152] = { + ["X"] = 35.03, + ["Y"] = 60.53, + ["CD"] = 0, + }, + [153] = { + ["X"] = 35.66, + ["Y"] = 60.3, + ["CD"] = 0, + }, + [154] = { + ["X"] = 40.75, + ["Y"] = 60.72, + ["CD"] = 0, + }, + [155] = { + ["X"] = 44.99, + ["Y"] = 60.93, + ["CD"] = 0, + }, + [156] = { + ["X"] = 43.77, + ["Y"] = 60.96, + ["CD"] = 0, + }, + [157] = { + ["X"] = 43.04, + ["Y"] = 63.03, + ["CD"] = 0, + }, + [158] = { + ["X"] = 41.88, + ["Y"] = 63.67, + ["CD"] = 0, + }, + [159] = { + ["X"] = 42.45, + ["Y"] = 61.88, + ["CD"] = 0, + }, + [160] = { + ["X"] = 43.65, + ["Y"] = 60.82, + ["CD"] = 0, + }, + [161] = { + ["X"] = 58.38, + ["Y"] = 33.52, + ["CD"] = 0, + }, + [162] = { + ["X"] = 41.66, + ["Y"] = 54.31, + ["CD"] = 0, + }, + [163] = { + ["X"] = 40.52, + ["Y"] = 51.34, + ["CD"] = 0, + }, + [164] = { + ["X"] = 37.56, + ["Y"] = 54.61, + ["CD"] = 0, + }, + [165] = { + ["X"] = 49.48, + ["Y"] = 49.77, + ["CD"] = 0, + }, + [166] = { + ["X"] = 51.33, + ["Y"] = 41.98, + ["CD"] = 0, + }, + [167] = { + ["X"] = 55.3, + ["Y"] = 55.78, + ["CD"] = 0, + }, + [168] = { + ["X"] = 61.99, + ["Y"] = 30.91, + ["CD"] = 0, + }, + [169] = { + ["X"] = 57.71, + ["Y"] = 39.6, + ["CD"] = 0, + }, + [170] = { + ["X"] = 69.54, + ["Y"] = 37.38, + ["CD"] = 0, + }, + [171] = { + ["X"] = 68.35, + ["Y"] = 39.91, + ["CD"] = 0, + }, + [172] = { + ["X"] = 62.37, + ["Y"] = 48.14, + ["CD"] = 0, + }, + [173] = { + ["X"] = 65.9, + ["Y"] = 41.14, + ["CD"] = 0, + }, + [174] = { + ["X"] = 73.55, + ["Y"] = 52.84, + ["CD"] = 0, + }, + [175] = { + ["X"] = 74.57, + ["Y"] = 39.75, + ["CD"] = 0, + }, + [176] = { + ["X"] = 72.1, + ["Y"] = 49.22, + ["CD"] = 0, + }, + [177] = { + ["X"] = 69.79, + ["Y"] = 53.26, + ["CD"] = 0, + }, + [178] = { + ["X"] = 67.27, + ["Y"] = 60.55, + ["CD"] = 0, + }, + [179] = { + ["X"] = 64.16, + ["Y"] = 58.7, + ["CD"] = 0, + }, + [180] = { + ["X"] = 54.76, + ["Y"] = 57.01, + ["CD"] = 0, + }, + [181] = { + ["X"] = 57.81, + ["Y"] = 60.35, + ["CD"] = 0, + }, + [182] = { + ["X"] = 48.01, + ["Y"] = 69.08, + ["CD"] = 0, + }, + [183] = { + ["X"] = 42.49, + ["Y"] = 79.11, + ["CD"] = 0, + }, + [184] = { + ["X"] = 41.64, + ["Y"] = 69.85, + ["CD"] = 0, + }, + [185] = { + ["X"] = 45.52, + ["Y"] = 73.05, + ["CD"] = 0, + }, + [186] = { + ["X"] = 50.98, + ["Y"] = 82.3, + ["CD"] = 0, + }, + [187] = { + ["X"] = 65.76, + ["Y"] = 68.15, + ["CD"] = 0, + }, + [188] = { + ["X"] = 63.63, + ["Y"] = 64.98, + ["CD"] = 0, + }, + [189] = { + ["X"] = 57.28, + ["Y"] = 90.49, + ["CD"] = 0, + }, + [190] = { + ["X"] = 55.64, + ["Y"] = 84.34, + ["CD"] = 0, + }, + [191] = { + ["X"] = 39.95, + ["Y"] = 88.45, + ["CD"] = 0, + }, + [192] = { + ["X"] = 44.02, + ["Y"] = 82.51, + ["CD"] = 0, + }, + [193] = { + ["X"] = 47.72, + ["Y"] = 85.61, + ["CD"] = 0, + }, + [194] = { + ["X"] = 50.24, + ["Y"] = 84.23, + ["CD"] = 0, + }, + [195] = { + ["X"] = 43.02, + ["Y"] = 88.03, + ["CD"] = 0, + }, + [196] = { + ["X"] = 46.15, + ["Y"] = 83.47, + ["CD"] = 0, + }, + [197] = { + ["X"] = 55.23, + ["Y"] = 68.18, + ["CD"] = 0, + }, + [198] = { + ["X"] = 22.55, + ["Y"] = 64.61, + ["CD"] = 0, + }, + [199] = { + ["X"] = 22.95, + ["Y"] = 72.49, + ["CD"] = 0, + }, + [200] = { + ["X"] = 21.81, + ["Y"] = 69.82, + ["CD"] = 0, + }, + }, + --Suramar / Starlight Rose + [1033] = { + [1] = { + ["X"] = 52.4, + ["Y"] = 48.2, + ["CD"] = 0, + }, + [2] = { + ["X"] = 54.4, + ["Y"] = 48.23, + ["CD"] = 0, + }, + [3] = { + ["X"] = 59.18, + ["Y"] = 50.54, + ["CD"] = 0, + }, + [4] = { + ["X"] = 58.96, + ["Y"] = 46.15, + ["CD"] = 0, + }, + [5] = { + ["X"] = 54.91, + ["Y"] = 46.5, + ["CD"] = 0, + }, + [6] = { + ["X"] = 54.55, + ["Y"] = 47.26, + ["CD"] = 0, + }, + [7] = { + ["X"] = 61.05, + ["Y"] = 50.74, + ["CD"] = 0, + }, + [8] = { + ["X"] = 62.89, + ["Y"] = 52.74, + ["CD"] = 0, + }, + [9] = { + ["X"] = 63.77, + ["Y"] = 54.93, + ["CD"] = 0, + }, + [10] = { + ["X"] = 70.23, + ["Y"] = 63.85, + ["CD"] = 0, + }, + [11] = { + ["X"] = 67.49, + ["Y"] = 59.77, + ["CD"] = 0, + }, + [12] = { + ["X"] = 66.18, + ["Y"] = 57.51, + ["CD"] = 0, + }, + [13] = { + ["X"] = 64.22, + ["Y"] = 52.52, + ["CD"] = 0, + }, + [14] = { + ["X"] = 60.07, + ["Y"] = 49.38, + ["CD"] = 0, + }, + [15] = { + ["X"] = 55.96, + ["Y"] = 45.39, + ["CD"] = 0, + }, + [16] = { + ["X"] = 22.27, + ["Y"] = 58.65, + ["CD"] = 0, + }, + [17] = { + ["X"] = 22.86, + ["Y"] = 54.7, + ["CD"] = 0, + }, + [18] = { + ["X"] = 23.04, + ["Y"] = 53.17, + ["CD"] = 0, + }, + [19] = { + ["X"] = 23.12, + ["Y"] = 53.84, + ["CD"] = 0, + }, + [20] = { + ["X"] = 24.63, + ["Y"] = 51.23, + ["CD"] = 0, + }, + [21] = { + ["X"] = 27.43, + ["Y"] = 41.62, + ["CD"] = 0, + }, + [22] = { + ["X"] = 24.7, + ["Y"] = 39.47, + ["CD"] = 0, + }, + [23] = { + ["X"] = 23.73, + ["Y"] = 39.94, + ["CD"] = 0, + }, + [24] = { + ["X"] = 18.41, + ["Y"] = 47.7, + ["CD"] = 0, + }, + [25] = { + ["X"] = 19.13, + ["Y"] = 45.07, + ["CD"] = 0, + }, + [26] = { + ["X"] = 18.87, + ["Y"] = 43.64, + ["CD"] = 0, + }, + [27] = { + ["X"] = 17.04, + ["Y"] = 43.5, + ["CD"] = 0, + }, + [28] = { + ["X"] = 15.28, + ["Y"] = 42.46, + ["CD"] = 0, + }, + [29] = { + ["X"] = 15.58, + ["Y"] = 39.75, + ["CD"] = 0, + }, + [30] = { + ["X"] = 16.94, + ["Y"] = 39.28, + ["CD"] = 0, + }, + [31] = { + ["X"] = 17.3, + ["Y"] = 39.97, + ["CD"] = 0, + }, + [32] = { + ["X"] = 18.19, + ["Y"] = 40.52, + ["CD"] = 0, + }, + [33] = { + ["X"] = 19.77, + ["Y"] = 43.53, + ["CD"] = 0, + }, + [34] = { + ["X"] = 19.81, + ["Y"] = 42.84, + ["CD"] = 0, + }, + [35] = { + ["X"] = 23.16, + ["Y"] = 43.34, + ["CD"] = 0, + }, + [36] = { + ["X"] = 26.86, + ["Y"] = 40.75, + ["CD"] = 0, + }, + [37] = { + ["X"] = 27.44, + ["Y"] = 41.95, + ["CD"] = 0, + }, + [38] = { + ["X"] = 27.32, + ["Y"] = 45.11, + ["CD"] = 0, + }, + [39] = { + ["X"] = 28.79, + ["Y"] = 47.29, + ["CD"] = 0, + }, + [40] = { + ["X"] = 31.11, + ["Y"] = 47.49, + ["CD"] = 0, + }, + [41] = { + ["X"] = 31.52, + ["Y"] = 49.9, + ["CD"] = 0, + }, + [42] = { + ["X"] = 31.61, + ["Y"] = 54.38, + ["CD"] = 0, + }, + [43] = { + ["X"] = 33.61, + ["Y"] = 54.24, + ["CD"] = 0, + }, + [44] = { + ["X"] = 34.03, + ["Y"] = 53.09, + ["CD"] = 0, + }, + [45] = { + ["X"] = 37.9, + ["Y"] = 48.99, + ["CD"] = 0, + }, + [46] = { + ["X"] = 39.05, + ["Y"] = 51.47, + ["CD"] = 0, + }, + [47] = { + ["X"] = 40.39, + ["Y"] = 48.64, + ["CD"] = 0, + }, + [48] = { + ["X"] = 40.77, + ["Y"] = 48.19, + ["CD"] = 0, + }, + [49] = { + ["X"] = 44.14, + ["Y"] = 50.24, + ["CD"] = 0, + }, + [50] = { + ["X"] = 56.5, + ["Y"] = 45.1, + ["CD"] = 0, + }, + [51] = { + ["X"] = 59.76, + ["Y"] = 42.14, + ["CD"] = 0, + }, + [52] = { + ["X"] = 58.33, + ["Y"] = 41.44, + ["CD"] = 0, + }, + [53] = { + ["X"] = 58.51, + ["Y"] = 43.04, + ["CD"] = 0, + }, + [54] = { + ["X"] = 59.12, + ["Y"] = 47.83, + ["CD"] = 0, + }, + [55] = { + ["X"] = 35.44, + ["Y"] = 37.57, + ["CD"] = 0, + }, + [56] = { + ["X"] = 34.72, + ["Y"] = 37.99, + ["CD"] = 0, + }, + [57] = { + ["X"] = 33.97, + ["Y"] = 37.32, + ["CD"] = 0, + }, + [58] = { + ["X"] = 20.39, + ["Y"] = 51.41, + ["CD"] = 0, + }, + [59] = { + ["X"] = 19.48, + ["Y"] = 49.62, + ["CD"] = 0, + }, + [60] = { + ["X"] = 20.86, + ["Y"] = 49.17, + ["CD"] = 0, + }, + [61] = { + ["X"] = 21.24, + ["Y"] = 48.51, + ["CD"] = 0, + }, + [62] = { + ["X"] = 21.67, + ["Y"] = 46.84, + ["CD"] = 0, + }, + [63] = { + ["X"] = 20.77, + ["Y"] = 46.4, + ["CD"] = 0, + }, + [64] = { + ["X"] = 20.68, + ["Y"] = 45.54, + ["CD"] = 0, + }, + [65] = { + ["X"] = 23.78, + ["Y"] = 46.23, + ["CD"] = 0, + }, + [66] = { + ["X"] = 23.67, + ["Y"] = 45.78, + ["CD"] = 0, + }, + [67] = { + ["X"] = 24.7, + ["Y"] = 44.5, + ["CD"] = 0, + }, + [68] = { + ["X"] = 24.36, + ["Y"] = 42.97, + ["CD"] = 0, + }, + [69] = { + ["X"] = 25.12, + ["Y"] = 42.57, + ["CD"] = 0, + }, + [70] = { + ["X"] = 25.27, + ["Y"] = 41.14, + ["CD"] = 0, + }, + [71] = { + ["X"] = 25.49, + ["Y"] = 38.68, + ["CD"] = 0, + }, + [72] = { + ["X"] = 26.48, + ["Y"] = 37.83, + ["CD"] = 0, + }, + [73] = { + ["X"] = 28.26, + ["Y"] = 37.27, + ["CD"] = 0, + }, + [74] = { + ["X"] = 31.6, + ["Y"] = 36.18, + ["CD"] = 0, + }, + [75] = { + ["X"] = 32.77, + ["Y"] = 37.25, + ["CD"] = 0, + }, + [76] = { + ["X"] = 33.51, + ["Y"] = 35.46, + ["CD"] = 0, + }, + [77] = { + ["X"] = 32.97, + ["Y"] = 39.24, + ["CD"] = 0, + }, + [78] = { + ["X"] = 32.76, + ["Y"] = 40.68, + ["CD"] = 0, + }, + [79] = { + ["X"] = 30.18, + ["Y"] = 46.7, + ["CD"] = 0, + }, + [80] = { + ["X"] = 29.81, + ["Y"] = 47.95, + ["CD"] = 0, + }, + [81] = { + ["X"] = 27.61, + ["Y"] = 50.45, + ["CD"] = 0, + }, + [82] = { + ["X"] = 27.86, + ["Y"] = 53.57, + ["CD"] = 0, + }, + [83] = { + ["X"] = 27.06, + ["Y"] = 53.26, + ["CD"] = 0, + }, + [84] = { + ["X"] = 26.08, + ["Y"] = 53.85, + ["CD"] = 0, + }, + [85] = { + ["X"] = 25.37, + ["Y"] = 54.48, + ["CD"] = 0, + }, + [86] = { + ["X"] = 25.15, + ["Y"] = 56.59, + ["CD"] = 0, + }, + [87] = { + ["X"] = 24.5, + ["Y"] = 55.55, + ["CD"] = 0, + }, + [88] = { + ["X"] = 22.73, + ["Y"] = 55.49, + ["CD"] = 0, + }, + [89] = { + ["X"] = 21.64, + ["Y"] = 56.04, + ["CD"] = 0, + }, + [90] = { + ["X"] = 20.89, + ["Y"] = 52.45, + ["CD"] = 0, + }, + [91] = { + ["X"] = 21.6, + ["Y"] = 48.93, + ["CD"] = 0, + }, + [92] = { + ["X"] = 22.78, + ["Y"] = 47, + ["CD"] = 0, + }, + [93] = { + ["X"] = 23.67, + ["Y"] = 47.17, + ["CD"] = 0, + }, + [94] = { + ["X"] = 28.81, + ["Y"] = 49.54, + ["CD"] = 0, + }, + [95] = { + ["X"] = 27.63, + ["Y"] = 49.1, + ["CD"] = 0, + }, + [96] = { + ["X"] = 28.12, + ["Y"] = 47.43, + ["CD"] = 0, + }, + [97] = { + ["X"] = 29.6, + ["Y"] = 45.44, + ["CD"] = 0, + }, + [98] = { + ["X"] = 31.08, + ["Y"] = 44.93, + ["CD"] = 0, + }, + [99] = { + ["X"] = 32.12, + ["Y"] = 45.11, + ["CD"] = 0, + }, + [100] = { + ["X"] = 32.86, + ["Y"] = 44.32, + ["CD"] = 0, + }, + [101] = { + ["X"] = 35.29, + ["Y"] = 50.54, + ["CD"] = 0, + }, + [102] = { + ["X"] = 31.72, + ["Y"] = 11.15, + ["CD"] = 0, + }, + [103] = { + ["X"] = 35.36, + ["Y"] = 11.62, + ["CD"] = 0, + }, + [104] = { + ["X"] = 38.72, + ["Y"] = 14.9, + ["CD"] = 0, + }, + [105] = { + ["X"] = 39.7, + ["Y"] = 14.87, + ["CD"] = 0, + }, + [106] = { + ["X"] = 28.23, + ["Y"] = 19.56, + ["CD"] = 0, + }, + [107] = { + ["X"] = 24.39, + ["Y"] = 25.74, + ["CD"] = 0, + }, + [108] = { + ["X"] = 26.2, + ["Y"] = 27.16, + ["CD"] = 0, + }, + [109] = { + ["X"] = 28.07, + ["Y"] = 29.18, + ["CD"] = 0, + }, + [110] = { + ["X"] = 28.8, + ["Y"] = 38.56, + ["CD"] = 0, + }, + [111] = { + ["X"] = 30.55, + ["Y"] = 37.63, + ["CD"] = 0, + }, + [112] = { + ["X"] = 34.55, + ["Y"] = 42.86, + ["CD"] = 0, + }, + [113] = { + ["X"] = 33.84, + ["Y"] = 50.23, + ["CD"] = 0, + }, + [114] = { + ["X"] = 35.52, + ["Y"] = 51.77, + ["CD"] = 0, + }, + [115] = { + ["X"] = 35.33, + ["Y"] = 58.01, + ["CD"] = 0, + }, + [116] = { + ["X"] = 38.64, + ["Y"] = 62.53, + ["CD"] = 0, + }, + [117] = { + ["X"] = 40.41, + ["Y"] = 73, + ["CD"] = 0, + }, + [118] = { + ["X"] = 41.04, + ["Y"] = 81.46, + ["CD"] = 0, + }, + [119] = { + ["X"] = 41.17, + ["Y"] = 83.21, + ["CD"] = 0, + }, + [120] = { + ["X"] = 70.07, + ["Y"] = 61.17, + ["CD"] = 0, + }, + [121] = { + ["X"] = 69.26, + ["Y"] = 62.64, + ["CD"] = 0, + }, + [122] = { + ["X"] = 68.31, + ["Y"] = 58.27, + ["CD"] = 0, + }, + [123] = { + ["X"] = 66.58, + ["Y"] = 55.69, + ["CD"] = 0, + }, + [124] = { + ["X"] = 66.13, + ["Y"] = 53.94, + ["CD"] = 0, + }, + [125] = { + ["X"] = 65.37, + ["Y"] = 48.57, + ["CD"] = 0, + }, + [126] = { + ["X"] = 65.11, + ["Y"] = 50.4, + ["CD"] = 0, + }, + [127] = { + ["X"] = 62.57, + ["Y"] = 50.61, + ["CD"] = 0, + }, + [128] = { + ["X"] = 65.12, + ["Y"] = 38.6, + ["CD"] = 0, + }, + [129] = { + ["X"] = 62.25, + ["Y"] = 45.8, + ["CD"] = 0, + }, + [130] = { + ["X"] = 60.11, + ["Y"] = 46.19, + ["CD"] = 0, + }, + [131] = { + ["X"] = 58.62, + ["Y"] = 49.54, + ["CD"] = 0, + }, + [132] = { + ["X"] = 56.22, + ["Y"] = 48.62, + ["CD"] = 0, + }, + [133] = { + ["X"] = 47.37, + ["Y"] = 55.17, + ["CD"] = 0, + }, + [134] = { + ["X"] = 41.33, + ["Y"] = 72.02, + ["CD"] = 0, + }, + [135] = { + ["X"] = 38.71, + ["Y"] = 60.97, + ["CD"] = 0, + }, + [136] = { + ["X"] = 36.71, + ["Y"] = 59.7, + ["CD"] = 0, + }, + [137] = { + ["X"] = 39.76, + ["Y"] = 57.54, + ["CD"] = 0, + }, + [138] = { + ["X"] = 42.32, + ["Y"] = 49.6, + ["CD"] = 0, + }, + [139] = { + ["X"] = 49.52, + ["Y"] = 47.44, + ["CD"] = 0, + }, + [140] = { + ["X"] = 49.79, + ["Y"] = 40.3, + ["CD"] = 0, + }, + [141] = { + ["X"] = 48.78, + ["Y"] = 42.77, + ["CD"] = 0, + }, + [142] = { + ["X"] = 46.87, + ["Y"] = 39.44, + ["CD"] = 0, + }, + [143] = { + ["X"] = 36.65, + ["Y"] = 42.98, + ["CD"] = 0, + }, + [144] = { + ["X"] = 29.53, + ["Y"] = 46.51, + ["CD"] = 0, + }, + [145] = { + ["X"] = 28.25, + ["Y"] = 46.15, + ["CD"] = 0, + }, + [146] = { + ["X"] = 25.63, + ["Y"] = 52.48, + ["CD"] = 0, + }, + [147] = { + ["X"] = 27.12, + ["Y"] = 69.02, + ["CD"] = 0, + }, + [148] = { + ["X"] = 23.49, + ["Y"] = 61.88, + ["CD"] = 0, + }, + [149] = { + ["X"] = 26.37, + ["Y"] = 46.84, + ["CD"] = 0, + }, + [150] = { + ["X"] = 28.77, + ["Y"] = 41.26, + ["CD"] = 0, + }, + [151] = { + ["X"] = 28.94, + ["Y"] = 43.58, + ["CD"] = 0, + }, + [152] = { + ["X"] = 30.97, + ["Y"] = 39.66, + ["CD"] = 0, + }, + [153] = { + ["X"] = 34.05, + ["Y"] = 38.76, + ["CD"] = 0, + }, + [154] = { + ["X"] = 34.52, + ["Y"] = 44.14, + ["CD"] = 0, + }, + [155] = { + ["X"] = 36.22, + ["Y"] = 41.74, + ["CD"] = 0, + }, + [156] = { + ["X"] = 39.85, + ["Y"] = 39.65, + ["CD"] = 0, + }, + [157] = { + ["X"] = 47.15, + ["Y"] = 41.25, + ["CD"] = 0, + }, + [158] = { + ["X"] = 40.72, + ["Y"] = 40.06, + ["CD"] = 0, + }, + [159] = { + ["X"] = 44.52, + ["Y"] = 39.66, + ["CD"] = 0, + }, + [160] = { + ["X"] = 41.5, + ["Y"] = 38.6, + ["CD"] = 0, + }, + [161] = { + ["X"] = 44.86, + ["Y"] = 35.75, + ["CD"] = 0, + }, + [162] = { + ["X"] = 44.63, + ["Y"] = 33.2, + ["CD"] = 0, + }, + [163] = { + ["X"] = 47.33, + ["Y"] = 28.88, + ["CD"] = 0, + }, + [164] = { + ["X"] = 32.03, + ["Y"] = 34.06, + ["CD"] = 0, + }, + [165] = { + ["X"] = 27.66, + ["Y"] = 36, + ["CD"] = 0, + }, + [166] = { + ["X"] = 27.58, + ["Y"] = 44.62, + ["CD"] = 0, + }, + [167] = { + ["X"] = 25.91, + ["Y"] = 44.49, + ["CD"] = 0, + }, + [168] = { + ["X"] = 26.84, + ["Y"] = 48.81, + ["CD"] = 0, + }, + [169] = { + ["X"] = 22.94, + ["Y"] = 55.55, + ["CD"] = 0, + }, + [170] = { + ["X"] = 19.91, + ["Y"] = 54.45, + ["CD"] = 0, + }, + [171] = { + ["X"] = 21.16, + ["Y"] = 53.32, + ["CD"] = 0, + }, + [172] = { + ["X"] = 22.64, + ["Y"] = 50.19, + ["CD"] = 0, + }, + [173] = { + ["X"] = 24.23, + ["Y"] = 33.84, + ["CD"] = 0, + }, + [174] = { + ["X"] = 30.34, + ["Y"] = 33.68, + ["CD"] = 0, + }, + [175] = { + ["X"] = 30.66, + ["Y"] = 33.03, + ["CD"] = 0, + }, + [176] = { + ["X"] = 39.58, + ["Y"] = 16.08, + ["CD"] = 0, + }, + [177] = { + ["X"] = 39.3, + ["Y"] = 14.48, + ["CD"] = 0, + }, + [178] = { + ["X"] = 34.8, + ["Y"] = 10.58, + ["CD"] = 0, + }, + [179] = { + ["X"] = 30.29, + ["Y"] = 8.71, + ["CD"] = 0, + }, + [180] = { + ["X"] = 30.67, + ["Y"] = 12.65, + ["CD"] = 0, + }, + [181] = { + ["X"] = 31.53, + ["Y"] = 14.5, + ["CD"] = 0, + }, + [182] = { + ["X"] = 31.63, + ["Y"] = 16.56, + ["CD"] = 0, + }, + [183] = { + ["X"] = 33.53, + ["Y"] = 20.08, + ["CD"] = 0, + }, + [184] = { + ["X"] = 34.88, + ["Y"] = 19.76, + ["CD"] = 0, + }, + [185] = { + ["X"] = 35.59, + ["Y"] = 18.08, + ["CD"] = 0, + }, + [186] = { + ["X"] = 43.46, + ["Y"] = 27.48, + ["CD"] = 0, + }, + [187] = { + ["X"] = 42.73, + ["Y"] = 27.39, + ["CD"] = 0, + }, + [188] = { + ["X"] = 41.23, + ["Y"] = 25.46, + ["CD"] = 0, + }, + [189] = { + ["X"] = 39.47, + ["Y"] = 24.45, + ["CD"] = 0, + }, + [190] = { + ["X"] = 38.39, + ["Y"] = 26.94, + ["CD"] = 0, + }, + [191] = { + ["X"] = 37.32, + ["Y"] = 26.91, + ["CD"] = 0, + }, + [192] = { + ["X"] = 36.21, + ["Y"] = 30.36, + ["CD"] = 0, + }, + [193] = { + ["X"] = 27.01, + ["Y"] = 29.36, + ["CD"] = 0, + }, + [194] = { + ["X"] = 27.04, + ["Y"] = 31.9, + ["CD"] = 0, + }, + [195] = { + ["X"] = 17.98, + ["Y"] = 42.91, + ["CD"] = 0, + }, + [196] = { + ["X"] = 15.82, + ["Y"] = 43.16, + ["CD"] = 0, + }, + [197] = { + ["X"] = 15.74, + ["Y"] = 38.61, + ["CD"] = 0, + }, + [198] = { + ["X"] = 16.66, + ["Y"] = 36.19, + ["CD"] = 0, + }, + [199] = { + ["X"] = 21.23, + ["Y"] = 20.19, + ["CD"] = 0, + }, + [200] = { + ["X"] = 22.84, + ["Y"] = 19.42, + ["CD"] = 0, + }, + }, + --Winterspring + [281] = { + [1] = { + ["X"] = 59.16, + ["Y"] = 84.77, + ["CD"] = 0, + }, + [2] = { + ["X"] = 62.31, + ["Y"] = 83, + ["CD"] = 0, + }, + [3] = { + ["X"] = 57.11, + ["Y"] = 82.01, + ["CD"] = 0, + }, + [4] = { + ["X"] = 64.06, + ["Y"] = 78.62, + ["CD"] = 0, + }, + [5] = { + ["X"] = 61.3, + ["Y"] = 77.48, + ["CD"] = 0, + }, + [6] = { + ["X"] = 62.98, + ["Y"] = 75.01, + ["CD"] = 0, + }, + [7] = { + ["X"] = 60.57, + ["Y"] = 72.97, + ["CD"] = 0, + }, + [8] = { + ["X"] = 57.89, + ["Y"] = 76.61, + ["CD"] = 0, + }, + [9] = { + ["X"] = 58.81, + ["Y"] = 71.72, + ["CD"] = 0, + }, + [10] = { + ["X"] = 61.9, + ["Y"] = 70.8, + ["CD"] = 0, + }, + [11] = { + ["X"] = 55.55, + ["Y"] = 66.93, + ["CD"] = 0, + }, + [12] = { + ["X"] = 57.47, + ["Y"] = 67.97, + ["CD"] = 0, + }, + [13] = { + ["X"] = 64.62, + ["Y"] = 67.64, + ["CD"] = 0, + }, + [14] = { + ["X"] = 58.61, + ["Y"] = 64.35, + ["CD"] = 0, + }, + [15] = { + ["X"] = 60.58, + ["Y"] = 63.25, + ["CD"] = 0, + }, + [16] = { + ["X"] = 66.46, + ["Y"] = 63.37, + ["CD"] = 0, + }, + [17] = { + ["X"] = 54.22, + ["Y"] = 59.72, + ["CD"] = 0, + }, + [18] = { + ["X"] = 50.02, + ["Y"] = 59.7, + ["CD"] = 0, + }, + [19] = { + ["X"] = 55.15, + ["Y"] = 58.99, + ["CD"] = 0, + }, + [20] = { + ["X"] = 58.3, + ["Y"] = 57.27, + ["CD"] = 0, + }, + [21] = { + ["X"] = 66.48, + ["Y"] = 58.7, + ["CD"] = 0, + }, + [22] = { + ["X"] = 65.73, + ["Y"] = 55.86, + ["CD"] = 0, + }, + [23] = { + ["X"] = 67.08, + ["Y"] = 55.5, + ["CD"] = 0, + }, + [24] = { + ["X"] = 56.21, + ["Y"] = 54.41, + ["CD"] = 0, + }, + [25] = { + ["X"] = 63.85, + ["Y"] = 54.34, + ["CD"] = 0, + }, + [26] = { + ["X"] = 57.63, + ["Y"] = 53.91, + ["CD"] = 0, + }, + [27] = { + ["X"] = 62.95, + ["Y"] = 52.24, + ["CD"] = 0, + }, + [28] = { + ["X"] = 54.26, + ["Y"] = 51.46, + ["CD"] = 0, + }, + [29] = { + ["X"] = 53.42, + ["Y"] = 52.49, + ["CD"] = 0, + }, + [30] = { + ["X"] = 51.05, + ["Y"] = 47.74, + ["CD"] = 0, + }, + [31] = { + ["X"] = 62.14, + ["Y"] = 46, + ["CD"] = 0, + }, + [32] = { + ["X"] = 57.41, + ["Y"] = 44.12, + ["CD"] = 0, + }, + [33] = { + ["X"] = 67.38, + ["Y"] = 43.91, + ["CD"] = 0, + }, + [34] = { + ["X"] = 64.77, + ["Y"] = 44.54, + ["CD"] = 0, + }, + [35] = { + ["X"] = 63.95, + ["Y"] = 38.93, + ["CD"] = 0, + }, + [36] = { + ["X"] = 56.38, + ["Y"] = 40.05, + ["CD"] = 0, + }, + [37] = { + ["X"] = 53.33, + ["Y"] = 40.12, + ["CD"] = 0, + }, + [38] = { + ["X"] = 54.33, + ["Y"] = 39.28, + ["CD"] = 0, + }, + [39] = { + ["X"] = 58.25, + ["Y"] = 36.59, + ["CD"] = 0, + }, + [40] = { + ["X"] = 66.39, + ["Y"] = 31.62, + ["CD"] = 0, + }, + [41] = { + ["X"] = 65.34, + ["Y"] = 33.85, + ["CD"] = 0, + }, + [42] = { + ["X"] = 56.84, + ["Y"] = 35.19, + ["CD"] = 0, + }, + [43] = { + ["X"] = 53.46, + ["Y"] = 28.57, + ["CD"] = 0, + }, + [44] = { + ["X"] = 61.98, + ["Y"] = 31.58, + ["CD"] = 0, + }, + [45] = { + ["X"] = 61.24, + ["Y"] = 31.93, + ["CD"] = 0, + }, + [46] = { + ["X"] = 57.11, + ["Y"] = 33.25, + ["CD"] = 0, + }, + [47] = { + ["X"] = 47.75, + ["Y"] = 31.28, + ["CD"] = 0, + }, + [48] = { + ["X"] = 53.36, + ["Y"] = 33.23, + ["CD"] = 0, + }, + [49] = { + ["X"] = 58, + ["Y"] = 25.44, + ["CD"] = 0, + }, + [50] = { + ["X"] = 56.97, + ["Y"] = 26.83, + ["CD"] = 0, + }, + [51] = { + ["X"] = 49.79, + ["Y"] = 25.15, + ["CD"] = 0, + }, + [52] = { + ["X"] = 56.02, + ["Y"] = 22.75, + ["CD"] = 0, + }, + [53] = { + ["X"] = 46.42, + ["Y"] = 24.46, + ["CD"] = 0, + }, + [54] = { + ["X"] = 50.08, + ["Y"] = 22.67, + ["CD"] = 0, + }, + [55] = { + ["X"] = 46.7, + ["Y"] = 18.24, + ["CD"] = 0, + }, + [56] = { + ["X"] = 48.65, + ["Y"] = 17.22, + ["CD"] = 0, + }, + [57] = { + ["X"] = 49.35, + ["Y"] = 18.76, + ["CD"] = 0, + }, + [58] = { + ["X"] = 52.3, + ["Y"] = 20.68, + ["CD"] = 0, + }, + [59] = { + ["X"] = 45.21, + ["Y"] = 14.81, + ["CD"] = 0, + }, + [60] = { + ["X"] = 45.87, + ["Y"] = 20.86, + ["CD"] = 0, + }, + [61] = { + ["X"] = 47.49, + ["Y"] = 50.39, + ["CD"] = 0, + }, + [62] = { + ["X"] = 48.23, + ["Y"] = 53.43, + ["CD"] = 0, + }, + [63] = { + ["X"] = 47.36, + ["Y"] = 58.17, + ["CD"] = 0, + }, + [64] = { + ["X"] = 48.56, + ["Y"] = 57.74, + ["CD"] = 0, + }, + [65] = { + ["X"] = 45.22, + ["Y"] = 57.7, + ["CD"] = 0, + }, + [66] = { + ["X"] = 45.19, + ["Y"] = 59.5, + ["CD"] = 0, + }, + [67] = { + ["X"] = 42.43, + ["Y"] = 49.82, + ["CD"] = 0, + }, + [68] = { + ["X"] = 40.35, + ["Y"] = 49.45, + ["CD"] = 0, + }, + [69] = { + ["X"] = 40.46, + ["Y"] = 54.28, + ["CD"] = 0, + }, + [70] = { + ["X"] = 39.05, + ["Y"] = 55.74, + ["CD"] = 0, + }, + [71] = { + ["X"] = 37.6, + ["Y"] = 55.77, + ["CD"] = 0, + }, + [72] = { + ["X"] = 34.89, + ["Y"] = 57.33, + ["CD"] = 0, + }, + [73] = { + ["X"] = 34.59, + ["Y"] = 50.15, + ["CD"] = 0, + }, + [74] = { + ["X"] = 33.26, + ["Y"] = 48.43, + ["CD"] = 0, + }, + [75] = { + ["X"] = 32.77, + ["Y"] = 51.29, + ["CD"] = 0, + }, + [76] = { + ["X"] = 31.15, + ["Y"] = 57.24, + ["CD"] = 0, + }, + [77] = { + ["X"] = 30.3, + ["Y"] = 54.04, + ["CD"] = 0, + }, + [78] = { + ["X"] = 28.92, + ["Y"] = 52.76, + ["CD"] = 0, + }, + [79] = { + ["X"] = 28.32, + ["Y"] = 55.97, + ["CD"] = 0, + }, + [80] = { + ["X"] = 26.04, + ["Y"] = 49.17, + ["CD"] = 0, + }, + [81] = { + ["X"] = 24.02, + ["Y"] = 49.75, + ["CD"] = 0, + }, + [82] = { + ["X"] = 25.24, + ["Y"] = 51.71, + ["CD"] = 0, + }, + [83] = { + ["X"] = 24.44, + ["Y"] = 50.98, + ["CD"] = 0, + }, + [84] = { + ["X"] = 24.27, + ["Y"] = 56.95, + ["CD"] = 0, + }, + [85] = { + ["X"] = 66.76, + ["Y"] = 84.03, + ["CD"] = 0, + }, + [86] = { + ["X"] = 66.36, + ["Y"] = 80.75, + ["CD"] = 0, + }, + [87] = { + ["X"] = 62.24, + ["Y"] = 80.15, + ["CD"] = 0, + }, + [88] = { + ["X"] = 55.96, + ["Y"] = 78.8, + ["CD"] = 0, + }, + [89] = { + ["X"] = 56.02, + ["Y"] = 76.95, + ["CD"] = 0, + }, + [90] = { + ["X"] = 64.96, + ["Y"] = 72.59, + ["CD"] = 0, + }, + [91] = { + ["X"] = 65.44, + ["Y"] = 70.65, + ["CD"] = 0, + }, + [92] = { + ["X"] = 68.36, + ["Y"] = 69, + ["CD"] = 0, + }, + [93] = { + ["X"] = 52.57, + ["Y"] = 67.93, + ["CD"] = 0, + }, + [94] = { + ["X"] = 53.37, + ["Y"] = 66.5, + ["CD"] = 0, + }, + [95] = { + ["X"] = 61.09, + ["Y"] = 66.97, + ["CD"] = 0, + }, + [96] = { + ["X"] = 67.45, + ["Y"] = 66.84, + ["CD"] = 0, + }, + [97] = { + ["X"] = 68.19, + ["Y"] = 64.02, + ["CD"] = 0, + }, + [98] = { + ["X"] = 47.6, + ["Y"] = 63.37, + ["CD"] = 0, + }, + [99] = { + ["X"] = 67.42, + ["Y"] = 57.23, + ["CD"] = 0, + }, + [100] = { + ["X"] = 67.19, + ["Y"] = 51.85, + ["CD"] = 0, + }, + [101] = { + ["X"] = 63.49, + ["Y"] = 50.05, + ["CD"] = 0, + }, + [102] = { + ["X"] = 58.87, + ["Y"] = 45.42, + ["CD"] = 0, + }, + [103] = { + ["X"] = 53.68, + ["Y"] = 45.06, + ["CD"] = 0, + }, + [104] = { + ["X"] = 69.19, + ["Y"] = 44.89, + ["CD"] = 0, + }, + [105] = { + ["X"] = 59.6, + ["Y"] = 42, + ["CD"] = 0, + }, + [106] = { + ["X"] = 67.82, + ["Y"] = 39.48, + ["CD"] = 0, + }, + [107] = { + ["X"] = 59.84, + ["Y"] = 37.64, + ["CD"] = 0, + }, + [108] = { + ["X"] = 67.43, + ["Y"] = 35.4, + ["CD"] = 0, + }, + [109] = { + ["X"] = 66.7, + ["Y"] = 29.13, + ["CD"] = 0, + }, + [110] = { + ["X"] = 60.88, + ["Y"] = 28.01, + ["CD"] = 0, + }, + [111] = { + ["X"] = 60.16, + ["Y"] = 21.19, + ["CD"] = 0, + }, + [112] = { + ["X"] = 53.95, + ["Y"] = 19.05, + ["CD"] = 0, + }, + [113] = { + ["X"] = 52.44, + ["Y"] = 18.27, + ["CD"] = 0, + }, + [114] = { + ["X"] = 48.51, + ["Y"] = 14.34, + ["CD"] = 0, + }, + [115] = { + ["X"] = 44.13, + ["Y"] = 14.69, + ["CD"] = 0, + }, + [116] = { + ["X"] = 44.53, + ["Y"] = 21.08, + ["CD"] = 0, + }, + [117] = { + ["X"] = 45.31, + ["Y"] = 26.71, + ["CD"] = 0, + }, + [118] = { + ["X"] = 46.16, + ["Y"] = 33.23, + ["CD"] = 0, + }, + [119] = { + ["X"] = 48.2, + ["Y"] = 45.28, + ["CD"] = 0, + }, + [120] = { + ["X"] = 42.52, + ["Y"] = 56.26, + ["CD"] = 0, + }, + [121] = { + ["X"] = 42.18, + ["Y"] = 53.86, + ["CD"] = 0, + }, + [122] = { + ["X"] = 42.49, + ["Y"] = 45.67, + ["CD"] = 0, + }, + [123] = { + ["X"] = 40.75, + ["Y"] = 46.4, + ["CD"] = 0, + }, + [124] = { + ["X"] = 40.5, + ["Y"] = 58, + ["CD"] = 0, + }, + [125] = { + ["X"] = 39.56, + ["Y"] = 44.86, + ["CD"] = 0, + }, + [126] = { + ["X"] = 37.41, + ["Y"] = 47.1, + ["CD"] = 0, + }, + [127] = { + ["X"] = 37.05, + ["Y"] = 58.92, + ["CD"] = 0, + }, + [128] = { + ["X"] = 35.56, + ["Y"] = 47.08, + ["CD"] = 0, + }, + [129] = { + ["X"] = 34.11, + ["Y"] = 59.82, + ["CD"] = 0, + }, + [130] = { + ["X"] = 31.96, + ["Y"] = 59.46, + ["CD"] = 0, + }, + [131] = { + ["X"] = 31.19, + ["Y"] = 47.17, + ["CD"] = 0, + }, + [132] = { + ["X"] = 27.81, + ["Y"] = 58.83, + ["CD"] = 0, + }, + [133] = { + ["X"] = 27.7, + ["Y"] = 47.35, + ["CD"] = 0, + }, + [134] = { + ["X"] = 26.52, + ["Y"] = 47.47, + ["CD"] = 0, + }, + [135] = { + ["X"] = 24.62, + ["Y"] = 62.82, + ["CD"] = 0, + }, + [136] = { + ["X"] = 21.76, + ["Y"] = 62.47, + ["CD"] = 0, + }, + [137] = { + ["X"] = 22.41, + ["Y"] = 58.99, + ["CD"] = 0, + }, + }, +} +aura_env.cooldown = 600 +aura_env.wipeDistance = 50 +aura_env.angle = 0 +aura_env.hyp = 0 +aura_env.GetClosestHerb = function() + aura_env.minID = { + ["X"] = 0, + ["Y"] = 0, + ["D"] = 1000, + ["ID"] = 0, + } + local pX = GetPlayerMapPosition("player") or 0 + local pY = select(2, GetPlayerMapPosition("player")) or 0 + pX, pY = pX * 100, pY * 100 + if aura_env.herbs[GetCurrentMapAreaID()] then + for k, v in ipairs(aura_env.herbs[GetCurrentMapAreaID()]) do + local hX, hY, cd = + aura_env.herbs[GetCurrentMapAreaID()][k]["X"], + aura_env.herbs[GetCurrentMapAreaID()][k]["Y"], + aura_env.herbs[GetCurrentMapAreaID()][k]["CD"] + if cd == 0 then + local X, Y = pX - hX, pY - hY + local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) + if hyp < aura_env.minID["D"] then + aura_env.minID["X"] = hX + aura_env.minID["Y"] = hY + aura_env.minID["D"] = hyp + aura_env.minID["ID"] = k + end + end + end + return aura_env.minID["ID"] + end +end +if WeakAuras.IsOptionsOpen() then + WeakAurasSaved.HerbSniffer.CD = 0 + WeakAurasSaved.HerbSniffer.NoCD = 200 +end diff --git a/Complete Projects/Legion/Herb Sniffer/2.0/Direction.lua b/WeakAuras/Projects/Herb Sniffer/2.0/Direction.lua similarity index 94% rename from Complete Projects/Legion/Herb Sniffer/2.0/Direction.lua rename to WeakAuras/Projects/Herb Sniffer/2.0/Direction.lua index 1cb791b..cc9a8d7 100644 --- a/Complete Projects/Legion/Herb Sniffer/2.0/Direction.lua +++ b/WeakAuras/Projects/Herb Sniffer/2.0/Direction.lua @@ -1,1337 +1,1337 @@ ---[[ -Plan is -1) Divide map into sectors by 10 or 20 ++ -2) Give sight of neraby sectors ++ -3) Evaluate each sector by # herb -4) Generate path by looking 2 or 3 steps ahead -5) Convert to vectors for distance (i + j) -6) Rework entire distance and angle calculation -7) Rework CD resets by using timers instead of current method (first verify if timers are efficient) - -Point to master array within sector arrays by herb ID (1 to 200) for cd instead of sector arrays - -HerbSniffer = {"hyp" = 0, "CD" = 0, "NoCD" = 200} -]] - ---EVERY FRAME TRIGGER -function() - local function range (val, min, max, max2) - val = 1 - (((max - val) / (max - min)) * max2) - return val - end - local playerX = GetPlayerMapPosition("player") or 0 - local playerY = select(2, GetPlayerMapPosition("player")) or 0 - playerX, playerY = playerX * 100, playerY * 100 - local playerSector = ceil(playerX / aura_env.gridSize) + (floor(playerY / aura_env.gridSize) * (100 / aura_env.gridSize)) - - local visibleSectors = {} - print("Grid count", ((100 / aura_env.gridSize) ^ 2)) - print("Player is at sector", playerSector) - print("") - --Can see current sector - visibleSectors[#visibleSectors + 1] = playerSector - --If the player has a sector to the right of them it is also visible - if playerSector % 10 > 0 then - visibleSectors[#visibleSectors + 1] = playerSector + 1 - print("Right sector visible", visibleSectors[#visibleSectors]) - end - --If the player has a sector to the left of them it is also visible - if (playerSector - 1) % 10 > 0 then - visibleSectors[#visibleSectors + 1] = playerSector - 1 - print("Left sector visible", visibleSectors[#visibleSectors]) - end - --If the player has a sector above them - if (playerSector - (100 / aura_env.gridSize)) > (100 / aura_env.gridSize) then - visibleSectors[#visibleSectors + 1] = playerSector - (100 / aura_env.gridSize) - print("Above sector visible", visibleSectors[#visibleSectors]) - end - --If the player has a sector below them - if (playerSector + (100 / aura_env.gridSize)) < ((100 / aura_env.gridSize) ^ 2) - (100 - aura_env.gridSize) then - visibleSectors[#visibleSectors + 1] = playerSector + (100 / aura_env.gridSize) - print("Below sector visible", visibleSectors[#visibleSectors]) - end - --for k,v in pairs(visibleSectors) do - -- print(k,v) - -- -- for k2,v2 in ipairs(aura_env.zonedHerbs[v]) do - -- -- --print(k2,v2.X, v2.Y) - -- -- end - --end - - print("") - - local playerFace = GetPlayerFacing() or 0 - --print(playerFace) - local playerAngle = math.floor(playerFace * 100) - playerAngle = range(playerAngle, 0, 630, 360) - 1 - playerAngle = - playerAngle - playerAngle = playerAngle - 90 - while playerAngle < 0 do playerAngle = playerAngle + 360 end - --print(playerAngle) - return true -end - ---RESET_COUNTER -function() - WeakAurasSaved.HerbSniffer.CD = 0 - WeakAurasSaved.HerbSniffer.NoCD = 200 -end - ---ANIMATION -function() - return - aura_env.angle -end - ---INIT -aura_env.herbs = -{ - [1] = - { - ["X"] = 52.4, - ["Y"] = 48.2, - ["CD"] = 0 - }, - [2] = - { - ["X"] = 54.4, - ["Y"] = 48.23, - ["CD"] = 0 - }, - [3] = - { - ["X"] = 59.18, - ["Y"] = 50.54, - ["CD"] = 0 - }, - [4] = - { - ["X"] = 58.96, - ["Y"] = 46.15, - ["CD"] = 0 - }, - [5] = - { - ["X"] = 54.91, - ["Y"] = 46.5, - ["CD"] = 0 - }, - [6] = - { - ["X"] = 54.55, - ["Y"] = 47.26, - ["CD"] = 0 - }, - [7] = - { - ["X"] = 61.05, - ["Y"] = 50.74, - ["CD"] = 0 - }, - [8] = - { - ["X"] = 62.89, - ["Y"] = 52.74, - ["CD"] = 0 - }, - [9] = - { - ["X"] = 63.77, - ["Y"] = 54.93, - ["CD"] = 0 - }, - [10] = - { - ["X"] = 70.23, - ["Y"] = 63.85, - ["CD"] = 0 - }, - [11] = - { - ["X"] = 67.49, - ["Y"] = 59.77, - ["CD"] = 0 - }, - [12] = - { - ["X"] = 66.18, - ["Y"] = 57.51, - ["CD"] = 0 - }, - [13] = - { - ["X"] = 64.22, - ["Y"] = 52.52, - ["CD"] = 0 - }, - [14] = - { - ["X"] = 60.07, - ["Y"] = 49.38, - ["CD"] = 0 - }, - [15] = - { - ["X"] = 55.96, - ["Y"] = 45.39, - ["CD"] = 0 - }, - [16] = - { - ["X"] = 22.27, - ["Y"] = 58.65, - ["CD"] = 0 - }, - [17] = - { - ["X"] = 22.86, - ["Y"] = 54.7, - ["CD"] = 0 - }, - [18] = - { - ["X"] = 23.04, - ["Y"] = 53.17, - ["CD"] = 0 - }, - [19] = - { - ["X"] = 23.12, - ["Y"] = 53.84, - ["CD"] = 0 - }, - [20] = - { - ["X"] = 24.63, - ["Y"] = 51.23, - ["CD"] = 0 - }, - [21] = - { - ["X"] = 27.43, - ["Y"] = 41.62, - ["CD"] = 0 - }, - [22] = - { - ["X"] = 24.7, - ["Y"] = 39.47, - ["CD"] = 0 - }, - [23] = - { - ["X"] = 23.73, - ["Y"] = 39.94, - ["CD"] = 0 - }, - [24] = - { - ["X"] = 18.41, - ["Y"] = 47.7, - ["CD"] = 0 - }, - [25] = - { - ["X"] = 19.13, - ["Y"] = 45.07, - ["CD"] = 0 - }, - [26] = - { - ["X"] = 18.87, - ["Y"] = 43.64, - ["CD"] = 0 - }, - [27] = - { - ["X"] = 17.04, - ["Y"] = 43.5, - ["CD"] = 0 - }, - [28] = - { - ["X"] = 15.28, - ["Y"] = 42.46, - ["CD"] = 0 - }, - [29] = - { - ["X"] = 15.58, - ["Y"] = 39.75, - ["CD"] = 0 - }, - [30] = - { - ["X"] = 16.94, - ["Y"] = 39.28, - ["CD"] = 0 - }, - [31] = - { - ["X"] = 17.3, - ["Y"] = 39.97, - ["CD"] = 0 - }, - [32] = - { - ["X"] = 18.19, - ["Y"] = 40.52, - ["CD"] = 0 - }, - [33] = - { - ["X"] = 19.77, - ["Y"] = 43.53, - ["CD"] = 0 - }, - [34] = - { - ["X"] = 19.81, - ["Y"] = 42.84, - ["CD"] = 0 - }, - [35] = - { - ["X"] = 23.16, - ["Y"] = 43.34, - ["CD"] = 0 - }, - [36] = - { - ["X"] = 26.86, - ["Y"] = 40.75, - ["CD"] = 0 - }, - [37] = - { - ["X"] = 27.44, - ["Y"] = 41.95, - ["CD"] = 0 - }, - [38] = - { - ["X"] = 27.32, - ["Y"] = 45.11, - ["CD"] = 0 - }, - [39] = - { - ["X"] = 28.79, - ["Y"] = 47.29, - ["CD"] = 0 - }, - [40] = - { - ["X"] = 31.11, - ["Y"] = 47.49, - ["CD"] = 0 - }, - [41] = - { - ["X"] = 31.52, - ["Y"] = 49.9, - ["CD"] = 0 - }, - [42] = - { - ["X"] = 31.61, - ["Y"] = 54.38, - ["CD"] = 0 - }, - [43] = - { - ["X"] = 33.61, - ["Y"] = 54.24, - ["CD"] = 0 - }, - [44] = - { - ["X"] = 34.03, - ["Y"] = 53.09, - ["CD"] = 0 - }, - [45] = - { - ["X"] = 37.9, - ["Y"] = 48.99, - ["CD"] = 0 - }, - [46] = - { - ["X"] = 39.05, - ["Y"] = 51.47, - ["CD"] = 0 - }, - [47] = - { - ["X"] = 40.39, - ["Y"] = 48.64, - ["CD"] = 0 - }, - [48] = - { - ["X"] = 40.77, - ["Y"] = 48.19, - ["CD"] = 0 - }, - [49] = - { - ["X"] = 44.14, - ["Y"] = 50.24, - ["CD"] = 0 - }, - [50] = - { - ["X"] = 56.5, - ["Y"] = 45.1, - ["CD"] = 0 - }, - [51] = - { - ["X"] = 59.76, - ["Y"] = 42.14, - ["CD"] = 0 - }, - [52] = - { - ["X"] = 58.33, - ["Y"] = 41.44, - ["CD"] = 0 - }, - [53] = - { - ["X"] = 58.51, - ["Y"] = 43.04, - ["CD"] = 0 - }, - [54] = - { - ["X"] = 59.12, - ["Y"] = 47.83, - ["CD"] = 0 - }, - [55] = - { - ["X"] = 35.44, - ["Y"] = 37.57, - ["CD"] = 0 - }, - [56] = - { - ["X"] = 34.72, - ["Y"] = 37.99, - ["CD"] = 0 - }, - [57] = - { - ["X"] = 33.97, - ["Y"] = 37.32, - ["CD"] = 0 - }, - [58] = - { - ["X"] = 20.39, - ["Y"] = 51.41, - ["CD"] = 0 - }, - [59] = - { - ["X"] = 19.48, - ["Y"] = 49.62, - ["CD"] = 0 - }, - [60] = - { - ["X"] = 20.86, - ["Y"] = 49.17, - ["CD"] = 0 - }, - [61] = - { - ["X"] = 21.24, - ["Y"] = 48.51, - ["CD"] = 0 - }, - [62] = - { - ["X"] = 21.67, - ["Y"] = 46.84, - ["CD"] = 0 - }, - [63] = - { - ["X"] = 20.77, - ["Y"] = 46.4, - ["CD"] = 0 - }, - [64] = - { - ["X"] = 20.68, - ["Y"] = 45.54, - ["CD"] = 0 - }, - [65] = - { - ["X"] = 23.78, - ["Y"] = 46.23, - ["CD"] = 0 - }, - [66] = - { - ["X"] = 23.67, - ["Y"] = 45.78, - ["CD"] = 0 - }, - [67] = - { - ["X"] = 24.7, - ["Y"] = 44.5, - ["CD"] = 0 - }, - [68] = - { - ["X"] = 24.36, - ["Y"] = 42.97, - ["CD"] = 0 - }, - [69] = - { - ["X"] = 25.12, - ["Y"] = 42.57, - ["CD"] = 0 - }, - [70] = - { - ["X"] = 25.27, - ["Y"] = 41.14, - ["CD"] = 0 - }, - [71] = - { - ["X"] = 25.49, - ["Y"] = 38.68, - ["CD"] = 0 - }, - [72] = - { - ["X"] = 26.48, - ["Y"] = 37.83, - ["CD"] = 0 - }, - [73] = - { - ["X"] = 28.26, - ["Y"] = 37.27, - ["CD"] = 0 - }, - [74] = - { - ["X"] = 31.6, - ["Y"] = 36.18, - ["CD"] = 0 - }, - [75] = - { - ["X"] = 32.77, - ["Y"] = 37.25, - ["CD"] = 0 - }, - [76] = - { - ["X"] = 33.51, - ["Y"] = 35.46, - ["CD"] = 0 - }, - [77] = - { - ["X"] = 32.97, - ["Y"] = 39.24, - ["CD"] = 0 - }, - [78] = - { - ["X"] = 32.76, - ["Y"] = 40.68, - ["CD"] = 0 - }, - [79] = - { - ["X"] = 30.18, - ["Y"] = 46.7, - ["CD"] = 0 - }, - [80] = - { - ["X"] = 29.81, - ["Y"] = 47.95, - ["CD"] = 0 - }, - [81] = - { - ["X"] = 27.61, - ["Y"] = 50.45, - ["CD"] = 0 - }, - [82] = - { - ["X"] = 27.86, - ["Y"] = 53.57, - ["CD"] = 0 - }, - [83] = - { - ["X"] = 27.06, - ["Y"] = 53.26, - ["CD"] = 0 - }, - [84] = - { - ["X"] = 26.08, - ["Y"] = 53.85, - ["CD"] = 0 - }, - [85] = - { - ["X"] = 25.37, - ["Y"] = 54.48, - ["CD"] = 0 - }, - [86] = - { - ["X"] = 25.15, - ["Y"] = 56.59, - ["CD"] = 0 - }, - [87] = - { - ["X"] = 24.5, - ["Y"] = 55.55, - ["CD"] = 0 - }, - [88] = - { - ["X"] = 22.73, - ["Y"] = 55.49, - ["CD"] = 0 - }, - [89] = - { - ["X"] = 21.64, - ["Y"] = 56.04, - ["CD"] = 0 - }, - [90] = - { - ["X"] = 20.89, - ["Y"] = 52.45, - ["CD"] = 0 - }, - [91] = - { - ["X"] = 21.6, - ["Y"] = 48.93, - ["CD"] = 0 - }, - [92] = - { - ["X"] = 22.78, - ["Y"] = 47, - ["CD"] = 0 - }, - [93] = - { - ["X"] = 23.67, - ["Y"] = 47.17, - ["CD"] = 0 - }, - [94] = - { - ["X"] = 28.81, - ["Y"] = 49.54, - ["CD"] = 0 - }, - [95] = - { - ["X"] = 27.63, - ["Y"] = 49.1, - ["CD"] = 0 - }, - [96] = - { - ["X"] = 28.12, - ["Y"] = 47.43, - ["CD"] = 0 - }, - [97] = - { - ["X"] = 29.6, - ["Y"] = 45.44, - ["CD"] = 0 - }, - [98] = - { - ["X"] = 31.08, - ["Y"] = 44.93, - ["CD"] = 0 - }, - [99] = - { - ["X"] = 32.12, - ["Y"] = 45.11, - ["CD"] = 0 - }, - [100] = - { - ["X"] = 32.86, - ["Y"] = 44.32, - ["CD"] = 0 - }, - [101] = - { - ["X"] = 35.29, - ["Y"] = 50.54, - ["CD"] = 0 - }, - [102] = - { - ["X"] = 31.72, - ["Y"] = 11.15, - ["CD"] = 0 - }, - [103] = - { - ["X"] = 35.36, - ["Y"] = 11.62, - ["CD"] = 0 - }, - [104] = - { - ["X"] = 38.72, - ["Y"] = 14.9, - ["CD"] = 0 - }, - [105] = - { - ["X"] = 39.7, - ["Y"] = 14.87, - ["CD"] = 0 - }, - [106] = - { - ["X"] = 28.23, - ["Y"] = 19.56, - ["CD"] = 0 - }, - [107] = - { - ["X"] = 24.39, - ["Y"] = 25.74, - ["CD"] = 0 - }, - [108] = - { - ["X"] = 26.2, - ["Y"] = 27.16, - ["CD"] = 0 - }, - [109] = - { - ["X"] = 28.07, - ["Y"] = 29.18, - ["CD"] = 0 - }, - [110] = - { - ["X"] = 28.8, - ["Y"] = 38.56, - ["CD"] = 0 - }, - [111] = - { - ["X"] = 30.55, - ["Y"] = 37.63, - ["CD"] = 0 - }, - [112] = - { - ["X"] = 34.55, - ["Y"] = 42.86, - ["CD"] = 0 - }, - [113] = - { - ["X"] = 33.84, - ["Y"] = 50.23, - ["CD"] = 0 - }, - [114] = - { - ["X"] = 35.52, - ["Y"] = 51.77, - ["CD"] = 0 - }, - [115] = - { - ["X"] = 35.33, - ["Y"] = 58.01, - ["CD"] = 0 - }, - [116] = - { - ["X"] = 38.64, - ["Y"] = 62.53, - ["CD"] = 0 - }, - [117] = - { - ["X"] = 40.41, - ["Y"] = 73, - ["CD"] = 0 - }, - [118] = - { - ["X"] = 41.04, - ["Y"] = 81.46, - ["CD"] = 0 - }, - [119] = - { - ["X"] = 41.17, - ["Y"] = 83.21, - ["CD"] = 0 - }, - [120] = - { - ["X"] = 70.07, - ["Y"] = 61.17, - ["CD"] = 0 - }, - [121] = - { - ["X"] = 69.26, - ["Y"] = 62.64, - ["CD"] = 0 - }, - [122] = - { - ["X"] = 68.31, - ["Y"] = 58.27, - ["CD"] = 0 - }, - [123] = - { - ["X"] = 66.58, - ["Y"] = 55.69, - ["CD"] = 0 - }, - [124] = - { - ["X"] = 66.13, - ["Y"] = 53.94, - ["CD"] = 0 - }, - [125] = - { - ["X"] = 65.37, - ["Y"] = 48.57, - ["CD"] = 0 - }, - [126] = - { - ["X"] = 65.11, - ["Y"] = 50.4, - ["CD"] = 0 - }, - [127] = - { - ["X"] = 62.57, - ["Y"] = 50.61, - ["CD"] = 0 - }, - [128] = - { - ["X"] = 65.12, - ["Y"] = 38.6, - ["CD"] = 0 - }, - [129] = - { - ["X"] = 62.25, - ["Y"] = 45.8, - ["CD"] = 0 - }, - [130] = - { - ["X"] = 60.11, - ["Y"] = 46.19, - ["CD"] = 0 - }, - [131] = - { - ["X"] = 58.62, - ["Y"] = 49.54, - ["CD"] = 0 - }, - [132] = - { - ["X"] = 56.22, - ["Y"] = 48.62, - ["CD"] = 0 - }, - [133] = - { - ["X"] = 47.37, - ["Y"] = 55.17, - ["CD"] = 0 - }, - [134] = - { - ["X"] = 41.33, - ["Y"] = 72.02, - ["CD"] = 0 - }, - [135] = - { - ["X"] = 38.71, - ["Y"] = 60.97, - ["CD"] = 0 - }, - [136] = - { - ["X"] = 36.71, - ["Y"] = 59.7, - ["CD"] = 0 - }, - [137] = - { - ["X"] = 39.76, - ["Y"] = 57.54, - ["CD"] = 0 - }, - [138] = - { - ["X"] = 42.32, - ["Y"] = 49.6, - ["CD"] = 0 - }, - [139] = - { - ["X"] = 49.52, - ["Y"] = 47.44, - ["CD"] = 0 - }, - [140] = - { - ["X"] = 49.79, - ["Y"] = 40.3, - ["CD"] = 0 - }, - [141] = - { - ["X"] = 48.78, - ["Y"] = 42.77, - ["CD"] = 0 - }, - [142] = - { - ["X"] = 46.87, - ["Y"] = 39.44, - ["CD"] = 0 - }, - [143] = - { - ["X"] = 36.65, - ["Y"] = 42.98, - ["CD"] = 0 - }, - [144] = - { - ["X"] = 29.53, - ["Y"] = 46.51, - ["CD"] = 0 - }, - [145] = - { - ["X"] = 28.25, - ["Y"] = 46.15, - ["CD"] = 0 - }, - [146] = - { - ["X"] = 25.63, - ["Y"] = 52.48, - ["CD"] = 0 - }, - [147] = - { - ["X"] = 27.12, - ["Y"] = 69.02, - ["CD"] = 0 - }, - [148] = - { - ["X"] = 23.49, - ["Y"] = 61.88, - ["CD"] = 0 - }, - [149] = - { - ["X"] = 26.37, - ["Y"] = 46.84, - ["CD"] = 0 - }, - [150] = - { - ["X"] = 28.77, - ["Y"] = 41.26, - ["CD"] = 0 - }, - [151] = - { - ["X"] = 28.94, - ["Y"] = 43.58, - ["CD"] = 0 - }, - [152] = - { - ["X"] = 30.97, - ["Y"] = 39.66, - ["CD"] = 0 - }, - [153] = - { - ["X"] = 34.05, - ["Y"] = 38.76, - ["CD"] = 0 - }, - [154] = - { - ["X"] = 34.52, - ["Y"] = 44.14, - ["CD"] = 0 - }, - [155] = - { - ["X"] = 36.22, - ["Y"] = 41.74, - ["CD"] = 0 - }, - [156] = - { - ["X"] = 39.85, - ["Y"] = 39.65, - ["CD"] = 0 - }, - [157] = - { - ["X"] = 47.15, - ["Y"] = 41.25, - ["CD"] = 0 - }, - [158] = - { - ["X"] = 40.72, - ["Y"] = 40.06, - ["CD"] = 0 - }, - [159] = - { - ["X"] = 44.52, - ["Y"] = 39.66, - ["CD"] = 0 - }, - [160] = - { - ["X"] = 41.5, - ["Y"] = 38.6, - ["CD"] = 0 - }, - [161] = - { - ["X"] = 44.86, - ["Y"] = 35.75, - ["CD"] = 0 - }, - [162] = - { - ["X"] = 44.63, - ["Y"] = 33.2, - ["CD"] = 0 - }, - [163] = - { - ["X"] = 47.33, - ["Y"] = 28.88, - ["CD"] = 0 - }, - [164] = - { - ["X"] = 32.03, - ["Y"] = 34.06, - ["CD"] = 0 - }, - [165] = - { - ["X"] = 27.66, - ["Y"] = 36, - ["CD"] = 0 - }, - [166] = - { - ["X"] = 27.58, - ["Y"] = 44.62, - ["CD"] = 0 - }, - [167] = - { - ["X"] = 25.91, - ["Y"] = 44.49, - ["CD"] = 0 - }, - [168] = - { - ["X"] = 26.84, - ["Y"] = 48.81, - ["CD"] = 0 - }, - [169] = - { - ["X"] = 22.94, - ["Y"] = 55.55, - ["CD"] = 0 - }, - [170] = - { - ["X"] = 19.91, - ["Y"] = 54.45, - ["CD"] = 0 - }, - [171] = - { - ["X"] = 21.16, - ["Y"] = 53.32, - ["CD"] = 0 - }, - [172] = - { - ["X"] = 22.64, - ["Y"] = 50.19, - ["CD"] = 0 - }, - [173] = - { - ["X"] = 24.23, - ["Y"] = 33.84, - ["CD"] = 0 - }, - [174] = - { - ["X"] = 30.34, - ["Y"] = 33.68, - ["CD"] = 0 - }, - [175] = - { - ["X"] = 30.66, - ["Y"] = 33.03, - ["CD"] = 0 - }, - [176] = - { - ["X"] = 39.58, - ["Y"] = 16.08, - ["CD"] = 0 - }, - [177] = - { - ["X"] = 39.3, - ["Y"] = 14.48, - ["CD"] = 0 - }, - [178] = - { - ["X"] = 34.8, - ["Y"] = 10.58, - ["CD"] = 0 - }, - [179] = - { - ["X"] = 30.29, - ["Y"] = 8.71, - ["CD"] = 0 - }, - [180] = - { - ["X"] = 30.67, - ["Y"] = 12.65, - ["CD"] = 0 - }, - [181] = - { - ["X"] = 31.53, - ["Y"] = 14.5, - ["CD"] = 0 - }, - [182] = - { - ["X"] = 31.63, - ["Y"] = 16.56, - ["CD"] = 0 - }, - [183] = - { - ["X"] = 33.53, - ["Y"] = 20.08, - ["CD"] = 0 - }, - [184] = - { - ["X"] = 34.88, - ["Y"] = 19.76, - ["CD"] = 0 - }, - [185] = - { - ["X"] = 35.59, - ["Y"] = 18.08, - ["CD"] = 0 - }, - [186] = - { - ["X"] = 43.46, - ["Y"] = 27.48, - ["CD"] = 0 - }, - [187] = - { - ["X"] = 42.73, - ["Y"] = 27.39, - ["CD"] = 0 - }, - [188] = - { - ["X"] = 41.23, - ["Y"] = 25.46, - ["CD"] = 0 - }, - [189] = - { - ["X"] = 39.47, - ["Y"] = 24.45, - ["CD"] = 0 - }, - [190] = - { - ["X"] = 38.39, - ["Y"] = 26.94, - ["CD"] = 0 - }, - [191] = - { - ["X"] = 37.32, - ["Y"] = 26.91, - ["CD"] = 0 - }, - [192] = - { - ["X"] = 36.21, - ["Y"] = 30.36, - ["CD"] = 0 - }, - [193] = - { - ["X"] = 27.01, - ["Y"] = 29.36, - ["CD"] = 0 - }, - [194] = - { - ["X"] = 27.04, - ["Y"] = 31.9, - ["CD"] = 0 - }, - [195] = - { - ["X"] = 17.98, - ["Y"] = 42.91, - ["CD"] = 0 - }, - [196] = - { - ["X"] = 15.82, - ["Y"] = 43.16, - ["CD"] = 0 - }, - [197] = - { - ["X"] = 15.74, - ["Y"] = 38.61, - ["CD"] = 0 - }, - [198] = - { - ["X"] = 16.66, - ["Y"] = 36.19, - ["CD"] = 0 - }, - [199] = - { - ["X"] = 21.23, - ["Y"] = 20.19, - ["CD"] = 0 - }, - [200] = - { - ["X"] = 22.84, - ["Y"] = 19.42, - ["CD"] = 0 - } -} - -local function printTable(table) - for k,v in pairs(table) do - print(k,v) - if type(v) == "table" then print(k, "is a table"); printTable(v) end - end -end - ---Array.Sector.Global coords -aura_env.zonedHerbs = {} -aura_env.gridSize = 5 - -for k,v in ipairs(aura_env.herbs) do - local herbSector = ceil(v.X / aura_env.gridSize) + (floor(v.Y / aura_env.gridSize) * (100 / aura_env.gridSize)) - if not aura_env.zonedHerbs[herbSector] then aura_env.zonedHerbs[herbSector] = {} end - aura_env.zonedHerbs[herbSector][#aura_env.zonedHerbs[herbSector] + 1] = k -end ---zonedHerbs[sectors][herbs].coords ---printTable(aura_env.zonedHerbs) - -aura_env.cooldown = 600 -aura_env.wipeDistance = 50 -aura_env.angle = 0 -aura_env.hyp = 0 -aura_env.GetClosestHerb = function() - aura_env.minID = - { - ["X"] = 0, - ["Y"] = 0, - ["D"] = 1000, - ["ID"] = 0 - } - local pX = GetPlayerMapPosition("player") or 0 - local pY = select(2, GetPlayerMapPosition("player")) or 0 - pX, pY = pX * 100, pY * 100 - for k,v in ipairs(aura_env.herbs) do - local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] - if cd == 0 then - local X, Y = pX - hX, pY - hY - local hyp = math.sqrt((math.abs(X^2)) + (math.abs(Y^2))) - if hyp < aura_env.minID["D"] then - aura_env.minID["X"] = hX - aura_env.minID["Y"] = hY - aura_env.minID["D"] = hyp - aura_env.minID["ID"] = k - end - end - end - return aura_env.minID["ID"] +--[[ +Plan is +1) Divide map into sectors by 10 or 20 ++ +2) Give sight of neraby sectors ++ +3) Evaluate each sector by # herb +4) Generate path by looking 2 or 3 steps ahead +5) Convert to vectors for distance (i + j) +6) Rework entire distance and angle calculation +7) Rework CD resets by using timers instead of current method (first verify if timers are efficient) + +Point to master array within sector arrays by herb ID (1 to 200) for cd instead of sector arrays + +HerbSniffer = {"hyp" = 0, "CD" = 0, "NoCD" = 200} +]] + +--EVERY FRAME TRIGGER +function() + local function range (val, min, max, max2) + val = 1 - (((max - val) / (max - min)) * max2) + return val + end + local playerX = GetPlayerMapPosition("player") or 0 + local playerY = select(2, GetPlayerMapPosition("player")) or 0 + playerX, playerY = playerX * 100, playerY * 100 + local playerSector = ceil(playerX / aura_env.gridSize) + (floor(playerY / aura_env.gridSize) * (100 / aura_env.gridSize)) + + local visibleSectors = {} + print("Grid count", ((100 / aura_env.gridSize) ^ 2)) + print("Player is at sector", playerSector) + print("") + --Can see current sector + visibleSectors[#visibleSectors + 1] = playerSector + --If the player has a sector to the right of them it is also visible + if playerSector % 10 > 0 then + visibleSectors[#visibleSectors + 1] = playerSector + 1 + print("Right sector visible", visibleSectors[#visibleSectors]) + end + --If the player has a sector to the left of them it is also visible + if (playerSector - 1) % 10 > 0 then + visibleSectors[#visibleSectors + 1] = playerSector - 1 + print("Left sector visible", visibleSectors[#visibleSectors]) + end + --If the player has a sector above them + if (playerSector - (100 / aura_env.gridSize)) > (100 / aura_env.gridSize) then + visibleSectors[#visibleSectors + 1] = playerSector - (100 / aura_env.gridSize) + print("Above sector visible", visibleSectors[#visibleSectors]) + end + --If the player has a sector below them + if (playerSector + (100 / aura_env.gridSize)) < ((100 / aura_env.gridSize) ^ 2) - (100 - aura_env.gridSize) then + visibleSectors[#visibleSectors + 1] = playerSector + (100 / aura_env.gridSize) + print("Below sector visible", visibleSectors[#visibleSectors]) + end + --for k,v in pairs(visibleSectors) do + -- print(k,v) + -- -- for k2,v2 in ipairs(aura_env.zonedHerbs[v]) do + -- -- --print(k2,v2.X, v2.Y) + -- -- end + --end + + print("") + + local playerFace = GetPlayerFacing() or 0 + --print(playerFace) + local playerAngle = math.floor(playerFace * 100) + playerAngle = range(playerAngle, 0, 630, 360) - 1 + playerAngle = - playerAngle + playerAngle = playerAngle - 90 + while playerAngle < 0 do playerAngle = playerAngle + 360 end + --print(playerAngle) + return true +end + +--RESET_COUNTER +function() + WeakAurasSaved.HerbSniffer.CD = 0 + WeakAurasSaved.HerbSniffer.NoCD = 200 +end + +--ANIMATION +function() + return - aura_env.angle +end + +--INIT +aura_env.herbs = +{ + [1] = + { + ["X"] = 52.4, + ["Y"] = 48.2, + ["CD"] = 0 + }, + [2] = + { + ["X"] = 54.4, + ["Y"] = 48.23, + ["CD"] = 0 + }, + [3] = + { + ["X"] = 59.18, + ["Y"] = 50.54, + ["CD"] = 0 + }, + [4] = + { + ["X"] = 58.96, + ["Y"] = 46.15, + ["CD"] = 0 + }, + [5] = + { + ["X"] = 54.91, + ["Y"] = 46.5, + ["CD"] = 0 + }, + [6] = + { + ["X"] = 54.55, + ["Y"] = 47.26, + ["CD"] = 0 + }, + [7] = + { + ["X"] = 61.05, + ["Y"] = 50.74, + ["CD"] = 0 + }, + [8] = + { + ["X"] = 62.89, + ["Y"] = 52.74, + ["CD"] = 0 + }, + [9] = + { + ["X"] = 63.77, + ["Y"] = 54.93, + ["CD"] = 0 + }, + [10] = + { + ["X"] = 70.23, + ["Y"] = 63.85, + ["CD"] = 0 + }, + [11] = + { + ["X"] = 67.49, + ["Y"] = 59.77, + ["CD"] = 0 + }, + [12] = + { + ["X"] = 66.18, + ["Y"] = 57.51, + ["CD"] = 0 + }, + [13] = + { + ["X"] = 64.22, + ["Y"] = 52.52, + ["CD"] = 0 + }, + [14] = + { + ["X"] = 60.07, + ["Y"] = 49.38, + ["CD"] = 0 + }, + [15] = + { + ["X"] = 55.96, + ["Y"] = 45.39, + ["CD"] = 0 + }, + [16] = + { + ["X"] = 22.27, + ["Y"] = 58.65, + ["CD"] = 0 + }, + [17] = + { + ["X"] = 22.86, + ["Y"] = 54.7, + ["CD"] = 0 + }, + [18] = + { + ["X"] = 23.04, + ["Y"] = 53.17, + ["CD"] = 0 + }, + [19] = + { + ["X"] = 23.12, + ["Y"] = 53.84, + ["CD"] = 0 + }, + [20] = + { + ["X"] = 24.63, + ["Y"] = 51.23, + ["CD"] = 0 + }, + [21] = + { + ["X"] = 27.43, + ["Y"] = 41.62, + ["CD"] = 0 + }, + [22] = + { + ["X"] = 24.7, + ["Y"] = 39.47, + ["CD"] = 0 + }, + [23] = + { + ["X"] = 23.73, + ["Y"] = 39.94, + ["CD"] = 0 + }, + [24] = + { + ["X"] = 18.41, + ["Y"] = 47.7, + ["CD"] = 0 + }, + [25] = + { + ["X"] = 19.13, + ["Y"] = 45.07, + ["CD"] = 0 + }, + [26] = + { + ["X"] = 18.87, + ["Y"] = 43.64, + ["CD"] = 0 + }, + [27] = + { + ["X"] = 17.04, + ["Y"] = 43.5, + ["CD"] = 0 + }, + [28] = + { + ["X"] = 15.28, + ["Y"] = 42.46, + ["CD"] = 0 + }, + [29] = + { + ["X"] = 15.58, + ["Y"] = 39.75, + ["CD"] = 0 + }, + [30] = + { + ["X"] = 16.94, + ["Y"] = 39.28, + ["CD"] = 0 + }, + [31] = + { + ["X"] = 17.3, + ["Y"] = 39.97, + ["CD"] = 0 + }, + [32] = + { + ["X"] = 18.19, + ["Y"] = 40.52, + ["CD"] = 0 + }, + [33] = + { + ["X"] = 19.77, + ["Y"] = 43.53, + ["CD"] = 0 + }, + [34] = + { + ["X"] = 19.81, + ["Y"] = 42.84, + ["CD"] = 0 + }, + [35] = + { + ["X"] = 23.16, + ["Y"] = 43.34, + ["CD"] = 0 + }, + [36] = + { + ["X"] = 26.86, + ["Y"] = 40.75, + ["CD"] = 0 + }, + [37] = + { + ["X"] = 27.44, + ["Y"] = 41.95, + ["CD"] = 0 + }, + [38] = + { + ["X"] = 27.32, + ["Y"] = 45.11, + ["CD"] = 0 + }, + [39] = + { + ["X"] = 28.79, + ["Y"] = 47.29, + ["CD"] = 0 + }, + [40] = + { + ["X"] = 31.11, + ["Y"] = 47.49, + ["CD"] = 0 + }, + [41] = + { + ["X"] = 31.52, + ["Y"] = 49.9, + ["CD"] = 0 + }, + [42] = + { + ["X"] = 31.61, + ["Y"] = 54.38, + ["CD"] = 0 + }, + [43] = + { + ["X"] = 33.61, + ["Y"] = 54.24, + ["CD"] = 0 + }, + [44] = + { + ["X"] = 34.03, + ["Y"] = 53.09, + ["CD"] = 0 + }, + [45] = + { + ["X"] = 37.9, + ["Y"] = 48.99, + ["CD"] = 0 + }, + [46] = + { + ["X"] = 39.05, + ["Y"] = 51.47, + ["CD"] = 0 + }, + [47] = + { + ["X"] = 40.39, + ["Y"] = 48.64, + ["CD"] = 0 + }, + [48] = + { + ["X"] = 40.77, + ["Y"] = 48.19, + ["CD"] = 0 + }, + [49] = + { + ["X"] = 44.14, + ["Y"] = 50.24, + ["CD"] = 0 + }, + [50] = + { + ["X"] = 56.5, + ["Y"] = 45.1, + ["CD"] = 0 + }, + [51] = + { + ["X"] = 59.76, + ["Y"] = 42.14, + ["CD"] = 0 + }, + [52] = + { + ["X"] = 58.33, + ["Y"] = 41.44, + ["CD"] = 0 + }, + [53] = + { + ["X"] = 58.51, + ["Y"] = 43.04, + ["CD"] = 0 + }, + [54] = + { + ["X"] = 59.12, + ["Y"] = 47.83, + ["CD"] = 0 + }, + [55] = + { + ["X"] = 35.44, + ["Y"] = 37.57, + ["CD"] = 0 + }, + [56] = + { + ["X"] = 34.72, + ["Y"] = 37.99, + ["CD"] = 0 + }, + [57] = + { + ["X"] = 33.97, + ["Y"] = 37.32, + ["CD"] = 0 + }, + [58] = + { + ["X"] = 20.39, + ["Y"] = 51.41, + ["CD"] = 0 + }, + [59] = + { + ["X"] = 19.48, + ["Y"] = 49.62, + ["CD"] = 0 + }, + [60] = + { + ["X"] = 20.86, + ["Y"] = 49.17, + ["CD"] = 0 + }, + [61] = + { + ["X"] = 21.24, + ["Y"] = 48.51, + ["CD"] = 0 + }, + [62] = + { + ["X"] = 21.67, + ["Y"] = 46.84, + ["CD"] = 0 + }, + [63] = + { + ["X"] = 20.77, + ["Y"] = 46.4, + ["CD"] = 0 + }, + [64] = + { + ["X"] = 20.68, + ["Y"] = 45.54, + ["CD"] = 0 + }, + [65] = + { + ["X"] = 23.78, + ["Y"] = 46.23, + ["CD"] = 0 + }, + [66] = + { + ["X"] = 23.67, + ["Y"] = 45.78, + ["CD"] = 0 + }, + [67] = + { + ["X"] = 24.7, + ["Y"] = 44.5, + ["CD"] = 0 + }, + [68] = + { + ["X"] = 24.36, + ["Y"] = 42.97, + ["CD"] = 0 + }, + [69] = + { + ["X"] = 25.12, + ["Y"] = 42.57, + ["CD"] = 0 + }, + [70] = + { + ["X"] = 25.27, + ["Y"] = 41.14, + ["CD"] = 0 + }, + [71] = + { + ["X"] = 25.49, + ["Y"] = 38.68, + ["CD"] = 0 + }, + [72] = + { + ["X"] = 26.48, + ["Y"] = 37.83, + ["CD"] = 0 + }, + [73] = + { + ["X"] = 28.26, + ["Y"] = 37.27, + ["CD"] = 0 + }, + [74] = + { + ["X"] = 31.6, + ["Y"] = 36.18, + ["CD"] = 0 + }, + [75] = + { + ["X"] = 32.77, + ["Y"] = 37.25, + ["CD"] = 0 + }, + [76] = + { + ["X"] = 33.51, + ["Y"] = 35.46, + ["CD"] = 0 + }, + [77] = + { + ["X"] = 32.97, + ["Y"] = 39.24, + ["CD"] = 0 + }, + [78] = + { + ["X"] = 32.76, + ["Y"] = 40.68, + ["CD"] = 0 + }, + [79] = + { + ["X"] = 30.18, + ["Y"] = 46.7, + ["CD"] = 0 + }, + [80] = + { + ["X"] = 29.81, + ["Y"] = 47.95, + ["CD"] = 0 + }, + [81] = + { + ["X"] = 27.61, + ["Y"] = 50.45, + ["CD"] = 0 + }, + [82] = + { + ["X"] = 27.86, + ["Y"] = 53.57, + ["CD"] = 0 + }, + [83] = + { + ["X"] = 27.06, + ["Y"] = 53.26, + ["CD"] = 0 + }, + [84] = + { + ["X"] = 26.08, + ["Y"] = 53.85, + ["CD"] = 0 + }, + [85] = + { + ["X"] = 25.37, + ["Y"] = 54.48, + ["CD"] = 0 + }, + [86] = + { + ["X"] = 25.15, + ["Y"] = 56.59, + ["CD"] = 0 + }, + [87] = + { + ["X"] = 24.5, + ["Y"] = 55.55, + ["CD"] = 0 + }, + [88] = + { + ["X"] = 22.73, + ["Y"] = 55.49, + ["CD"] = 0 + }, + [89] = + { + ["X"] = 21.64, + ["Y"] = 56.04, + ["CD"] = 0 + }, + [90] = + { + ["X"] = 20.89, + ["Y"] = 52.45, + ["CD"] = 0 + }, + [91] = + { + ["X"] = 21.6, + ["Y"] = 48.93, + ["CD"] = 0 + }, + [92] = + { + ["X"] = 22.78, + ["Y"] = 47, + ["CD"] = 0 + }, + [93] = + { + ["X"] = 23.67, + ["Y"] = 47.17, + ["CD"] = 0 + }, + [94] = + { + ["X"] = 28.81, + ["Y"] = 49.54, + ["CD"] = 0 + }, + [95] = + { + ["X"] = 27.63, + ["Y"] = 49.1, + ["CD"] = 0 + }, + [96] = + { + ["X"] = 28.12, + ["Y"] = 47.43, + ["CD"] = 0 + }, + [97] = + { + ["X"] = 29.6, + ["Y"] = 45.44, + ["CD"] = 0 + }, + [98] = + { + ["X"] = 31.08, + ["Y"] = 44.93, + ["CD"] = 0 + }, + [99] = + { + ["X"] = 32.12, + ["Y"] = 45.11, + ["CD"] = 0 + }, + [100] = + { + ["X"] = 32.86, + ["Y"] = 44.32, + ["CD"] = 0 + }, + [101] = + { + ["X"] = 35.29, + ["Y"] = 50.54, + ["CD"] = 0 + }, + [102] = + { + ["X"] = 31.72, + ["Y"] = 11.15, + ["CD"] = 0 + }, + [103] = + { + ["X"] = 35.36, + ["Y"] = 11.62, + ["CD"] = 0 + }, + [104] = + { + ["X"] = 38.72, + ["Y"] = 14.9, + ["CD"] = 0 + }, + [105] = + { + ["X"] = 39.7, + ["Y"] = 14.87, + ["CD"] = 0 + }, + [106] = + { + ["X"] = 28.23, + ["Y"] = 19.56, + ["CD"] = 0 + }, + [107] = + { + ["X"] = 24.39, + ["Y"] = 25.74, + ["CD"] = 0 + }, + [108] = + { + ["X"] = 26.2, + ["Y"] = 27.16, + ["CD"] = 0 + }, + [109] = + { + ["X"] = 28.07, + ["Y"] = 29.18, + ["CD"] = 0 + }, + [110] = + { + ["X"] = 28.8, + ["Y"] = 38.56, + ["CD"] = 0 + }, + [111] = + { + ["X"] = 30.55, + ["Y"] = 37.63, + ["CD"] = 0 + }, + [112] = + { + ["X"] = 34.55, + ["Y"] = 42.86, + ["CD"] = 0 + }, + [113] = + { + ["X"] = 33.84, + ["Y"] = 50.23, + ["CD"] = 0 + }, + [114] = + { + ["X"] = 35.52, + ["Y"] = 51.77, + ["CD"] = 0 + }, + [115] = + { + ["X"] = 35.33, + ["Y"] = 58.01, + ["CD"] = 0 + }, + [116] = + { + ["X"] = 38.64, + ["Y"] = 62.53, + ["CD"] = 0 + }, + [117] = + { + ["X"] = 40.41, + ["Y"] = 73, + ["CD"] = 0 + }, + [118] = + { + ["X"] = 41.04, + ["Y"] = 81.46, + ["CD"] = 0 + }, + [119] = + { + ["X"] = 41.17, + ["Y"] = 83.21, + ["CD"] = 0 + }, + [120] = + { + ["X"] = 70.07, + ["Y"] = 61.17, + ["CD"] = 0 + }, + [121] = + { + ["X"] = 69.26, + ["Y"] = 62.64, + ["CD"] = 0 + }, + [122] = + { + ["X"] = 68.31, + ["Y"] = 58.27, + ["CD"] = 0 + }, + [123] = + { + ["X"] = 66.58, + ["Y"] = 55.69, + ["CD"] = 0 + }, + [124] = + { + ["X"] = 66.13, + ["Y"] = 53.94, + ["CD"] = 0 + }, + [125] = + { + ["X"] = 65.37, + ["Y"] = 48.57, + ["CD"] = 0 + }, + [126] = + { + ["X"] = 65.11, + ["Y"] = 50.4, + ["CD"] = 0 + }, + [127] = + { + ["X"] = 62.57, + ["Y"] = 50.61, + ["CD"] = 0 + }, + [128] = + { + ["X"] = 65.12, + ["Y"] = 38.6, + ["CD"] = 0 + }, + [129] = + { + ["X"] = 62.25, + ["Y"] = 45.8, + ["CD"] = 0 + }, + [130] = + { + ["X"] = 60.11, + ["Y"] = 46.19, + ["CD"] = 0 + }, + [131] = + { + ["X"] = 58.62, + ["Y"] = 49.54, + ["CD"] = 0 + }, + [132] = + { + ["X"] = 56.22, + ["Y"] = 48.62, + ["CD"] = 0 + }, + [133] = + { + ["X"] = 47.37, + ["Y"] = 55.17, + ["CD"] = 0 + }, + [134] = + { + ["X"] = 41.33, + ["Y"] = 72.02, + ["CD"] = 0 + }, + [135] = + { + ["X"] = 38.71, + ["Y"] = 60.97, + ["CD"] = 0 + }, + [136] = + { + ["X"] = 36.71, + ["Y"] = 59.7, + ["CD"] = 0 + }, + [137] = + { + ["X"] = 39.76, + ["Y"] = 57.54, + ["CD"] = 0 + }, + [138] = + { + ["X"] = 42.32, + ["Y"] = 49.6, + ["CD"] = 0 + }, + [139] = + { + ["X"] = 49.52, + ["Y"] = 47.44, + ["CD"] = 0 + }, + [140] = + { + ["X"] = 49.79, + ["Y"] = 40.3, + ["CD"] = 0 + }, + [141] = + { + ["X"] = 48.78, + ["Y"] = 42.77, + ["CD"] = 0 + }, + [142] = + { + ["X"] = 46.87, + ["Y"] = 39.44, + ["CD"] = 0 + }, + [143] = + { + ["X"] = 36.65, + ["Y"] = 42.98, + ["CD"] = 0 + }, + [144] = + { + ["X"] = 29.53, + ["Y"] = 46.51, + ["CD"] = 0 + }, + [145] = + { + ["X"] = 28.25, + ["Y"] = 46.15, + ["CD"] = 0 + }, + [146] = + { + ["X"] = 25.63, + ["Y"] = 52.48, + ["CD"] = 0 + }, + [147] = + { + ["X"] = 27.12, + ["Y"] = 69.02, + ["CD"] = 0 + }, + [148] = + { + ["X"] = 23.49, + ["Y"] = 61.88, + ["CD"] = 0 + }, + [149] = + { + ["X"] = 26.37, + ["Y"] = 46.84, + ["CD"] = 0 + }, + [150] = + { + ["X"] = 28.77, + ["Y"] = 41.26, + ["CD"] = 0 + }, + [151] = + { + ["X"] = 28.94, + ["Y"] = 43.58, + ["CD"] = 0 + }, + [152] = + { + ["X"] = 30.97, + ["Y"] = 39.66, + ["CD"] = 0 + }, + [153] = + { + ["X"] = 34.05, + ["Y"] = 38.76, + ["CD"] = 0 + }, + [154] = + { + ["X"] = 34.52, + ["Y"] = 44.14, + ["CD"] = 0 + }, + [155] = + { + ["X"] = 36.22, + ["Y"] = 41.74, + ["CD"] = 0 + }, + [156] = + { + ["X"] = 39.85, + ["Y"] = 39.65, + ["CD"] = 0 + }, + [157] = + { + ["X"] = 47.15, + ["Y"] = 41.25, + ["CD"] = 0 + }, + [158] = + { + ["X"] = 40.72, + ["Y"] = 40.06, + ["CD"] = 0 + }, + [159] = + { + ["X"] = 44.52, + ["Y"] = 39.66, + ["CD"] = 0 + }, + [160] = + { + ["X"] = 41.5, + ["Y"] = 38.6, + ["CD"] = 0 + }, + [161] = + { + ["X"] = 44.86, + ["Y"] = 35.75, + ["CD"] = 0 + }, + [162] = + { + ["X"] = 44.63, + ["Y"] = 33.2, + ["CD"] = 0 + }, + [163] = + { + ["X"] = 47.33, + ["Y"] = 28.88, + ["CD"] = 0 + }, + [164] = + { + ["X"] = 32.03, + ["Y"] = 34.06, + ["CD"] = 0 + }, + [165] = + { + ["X"] = 27.66, + ["Y"] = 36, + ["CD"] = 0 + }, + [166] = + { + ["X"] = 27.58, + ["Y"] = 44.62, + ["CD"] = 0 + }, + [167] = + { + ["X"] = 25.91, + ["Y"] = 44.49, + ["CD"] = 0 + }, + [168] = + { + ["X"] = 26.84, + ["Y"] = 48.81, + ["CD"] = 0 + }, + [169] = + { + ["X"] = 22.94, + ["Y"] = 55.55, + ["CD"] = 0 + }, + [170] = + { + ["X"] = 19.91, + ["Y"] = 54.45, + ["CD"] = 0 + }, + [171] = + { + ["X"] = 21.16, + ["Y"] = 53.32, + ["CD"] = 0 + }, + [172] = + { + ["X"] = 22.64, + ["Y"] = 50.19, + ["CD"] = 0 + }, + [173] = + { + ["X"] = 24.23, + ["Y"] = 33.84, + ["CD"] = 0 + }, + [174] = + { + ["X"] = 30.34, + ["Y"] = 33.68, + ["CD"] = 0 + }, + [175] = + { + ["X"] = 30.66, + ["Y"] = 33.03, + ["CD"] = 0 + }, + [176] = + { + ["X"] = 39.58, + ["Y"] = 16.08, + ["CD"] = 0 + }, + [177] = + { + ["X"] = 39.3, + ["Y"] = 14.48, + ["CD"] = 0 + }, + [178] = + { + ["X"] = 34.8, + ["Y"] = 10.58, + ["CD"] = 0 + }, + [179] = + { + ["X"] = 30.29, + ["Y"] = 8.71, + ["CD"] = 0 + }, + [180] = + { + ["X"] = 30.67, + ["Y"] = 12.65, + ["CD"] = 0 + }, + [181] = + { + ["X"] = 31.53, + ["Y"] = 14.5, + ["CD"] = 0 + }, + [182] = + { + ["X"] = 31.63, + ["Y"] = 16.56, + ["CD"] = 0 + }, + [183] = + { + ["X"] = 33.53, + ["Y"] = 20.08, + ["CD"] = 0 + }, + [184] = + { + ["X"] = 34.88, + ["Y"] = 19.76, + ["CD"] = 0 + }, + [185] = + { + ["X"] = 35.59, + ["Y"] = 18.08, + ["CD"] = 0 + }, + [186] = + { + ["X"] = 43.46, + ["Y"] = 27.48, + ["CD"] = 0 + }, + [187] = + { + ["X"] = 42.73, + ["Y"] = 27.39, + ["CD"] = 0 + }, + [188] = + { + ["X"] = 41.23, + ["Y"] = 25.46, + ["CD"] = 0 + }, + [189] = + { + ["X"] = 39.47, + ["Y"] = 24.45, + ["CD"] = 0 + }, + [190] = + { + ["X"] = 38.39, + ["Y"] = 26.94, + ["CD"] = 0 + }, + [191] = + { + ["X"] = 37.32, + ["Y"] = 26.91, + ["CD"] = 0 + }, + [192] = + { + ["X"] = 36.21, + ["Y"] = 30.36, + ["CD"] = 0 + }, + [193] = + { + ["X"] = 27.01, + ["Y"] = 29.36, + ["CD"] = 0 + }, + [194] = + { + ["X"] = 27.04, + ["Y"] = 31.9, + ["CD"] = 0 + }, + [195] = + { + ["X"] = 17.98, + ["Y"] = 42.91, + ["CD"] = 0 + }, + [196] = + { + ["X"] = 15.82, + ["Y"] = 43.16, + ["CD"] = 0 + }, + [197] = + { + ["X"] = 15.74, + ["Y"] = 38.61, + ["CD"] = 0 + }, + [198] = + { + ["X"] = 16.66, + ["Y"] = 36.19, + ["CD"] = 0 + }, + [199] = + { + ["X"] = 21.23, + ["Y"] = 20.19, + ["CD"] = 0 + }, + [200] = + { + ["X"] = 22.84, + ["Y"] = 19.42, + ["CD"] = 0 + } +} + +local function printTable(table) + for k,v in pairs(table) do + print(k,v) + if type(v) == "table" then print(k, "is a table"); printTable(v) end + end +end + +--Array.Sector.Global coords +aura_env.zonedHerbs = {} +aura_env.gridSize = 5 + +for k,v in ipairs(aura_env.herbs) do + local herbSector = ceil(v.X / aura_env.gridSize) + (floor(v.Y / aura_env.gridSize) * (100 / aura_env.gridSize)) + if not aura_env.zonedHerbs[herbSector] then aura_env.zonedHerbs[herbSector] = {} end + aura_env.zonedHerbs[herbSector][#aura_env.zonedHerbs[herbSector] + 1] = k +end +--zonedHerbs[sectors][herbs].coords +--printTable(aura_env.zonedHerbs) + +aura_env.cooldown = 600 +aura_env.wipeDistance = 50 +aura_env.angle = 0 +aura_env.hyp = 0 +aura_env.GetClosestHerb = function() + aura_env.minID = + { + ["X"] = 0, + ["Y"] = 0, + ["D"] = 1000, + ["ID"] = 0 + } + local pX = GetPlayerMapPosition("player") or 0 + local pY = select(2, GetPlayerMapPosition("player")) or 0 + pX, pY = pX * 100, pY * 100 + for k,v in ipairs(aura_env.herbs) do + local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] + if cd == 0 then + local X, Y = pX - hX, pY - hY + local hyp = math.sqrt((math.abs(X^2)) + (math.abs(Y^2))) + if hyp < aura_env.minID["D"] then + aura_env.minID["X"] = hX + aura_env.minID["Y"] = hY + aura_env.minID["D"] = hyp + aura_env.minID["ID"] = k + end + end + end + return aura_env.minID["ID"] end \ No newline at end of file diff --git a/Complete Projects/Legion/Herb Sniffer/Direction.lua b/WeakAuras/Projects/Herb Sniffer/Direction.lua similarity index 97% rename from Complete Projects/Legion/Herb Sniffer/Direction.lua rename to WeakAuras/Projects/Herb Sniffer/Direction.lua index a28e7d6..42b3647 100644 --- a/Complete Projects/Legion/Herb Sniffer/Direction.lua +++ b/WeakAuras/Projects/Herb Sniffer/Direction.lua @@ -1,67 +1,67 @@ ---EVERY FRAME TRIGGER -function() - if not WeakAurasSaved.HerbSniffer then WeakAurasSaved.HerbSniffer = {} end - local function range (val, min, max, max2) - val = 1 - (((max - val) / (max - min)) * max2) - return val - end - local id = aura_env.GetClosestHerb() - if id > -1 then - if not aura_env.herbs then return false end - local hX, hY = aura_env.herbs[id].X, aura_env.herbs[id].Y - local pX = GetPlayerMapPosition("player") or 0 - local pY = select(2, GetPlayerMapPosition("player")) or 0 - pX, pY = pX * 100, pY * 100 - local X = pX - hX - local Y = pY - hY - local playerFace = GetPlayerFacing() or 0 - local playerA = math.floor(playerFace * 100) - playerA = range(playerA, 0, 630, 360) - 1 - playerA = -playerA - playerA = playerA - 90 - if playerA < 0 then playerA = playerA + 360 end - aura_env.hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) * 100 - WeakAurasSaved.HerbSniffer.hyp = aura_env.hyp - aura_env.angle = math.deg(math.atan2(Y, X)) - aura_env.angle = aura_env.angle - playerA - aura_env.angle = aura_env.angle - 180 - if aura_env.hyp < aura_env.wipeDistance then --When reach herb activate it's cooldown (herbcd[cd] = coords) - aura_env.herbs[id].CD = math.floor(GetTime() + aura_env.cooldown) - WeakAurasSaved.HerbSniffer.CD = WeakAurasSaved.HerbSniffer.CD + 1 - WeakAurasSaved.HerbSniffer.NoCD = WeakAurasSaved.HerbSniffer.NoCD - 1 - aura_env.minID = { - ["X"] = 0, - ["Y"] = 0, - ["D"] = 10000, - ["ID"] = -1 - } - end - for k, v in ipairs(aura_env.herbs) do --if cooldown is up then insert back into proper array - local cd = aura_env.herbs[k].CD - if cd > 0 then - if GetTime() > cd then - aura_env.herbs[k].CD = 0 - WeakAurasSaved.HerbSniffer.NoCD = WeakAurasSaved.HerbSniffer.NoCD + 1 - WeakAurasSaved.HerbSniffer.CD = WeakAurasSaved.HerbSniffer.CD - 1 - end - end - end - else - return false - end - return true -end - ---RESET_COUNTER -function() - WeakAurasSaved.HerbSniffer.CD = 0 - WeakAurasSaved.HerbSniffer.NoCD = #aura_env.herbs -end - ---ANIMATION -function() - return - aura_env.angle -end - ---INIT -if WeakAuras.IsOptionsOpen() then WeakAurasSaved.HerbSniffer.CD = 0; WeakAurasSaved.HerbSniffer.NoCD = #aura_env.herbs end +--EVERY FRAME TRIGGER +function() + if not WeakAurasSaved.HerbSniffer then WeakAurasSaved.HerbSniffer = {} end + local function range (val, min, max, max2) + val = 1 - (((max - val) / (max - min)) * max2) + return val + end + local id = aura_env.GetClosestHerb() + if id > -1 then + if not aura_env.herbs then return false end + local hX, hY = aura_env.herbs[id].X, aura_env.herbs[id].Y + local pX = GetPlayerMapPosition("player") or 0 + local pY = select(2, GetPlayerMapPosition("player")) or 0 + pX, pY = pX * 100, pY * 100 + local X = pX - hX + local Y = pY - hY + local playerFace = GetPlayerFacing() or 0 + local playerA = math.floor(playerFace * 100) + playerA = range(playerA, 0, 630, 360) - 1 + playerA = -playerA + playerA = playerA - 90 + if playerA < 0 then playerA = playerA + 360 end + aura_env.hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) * 100 + WeakAurasSaved.HerbSniffer.hyp = aura_env.hyp + aura_env.angle = math.deg(math.atan2(Y, X)) + aura_env.angle = aura_env.angle - playerA + aura_env.angle = aura_env.angle - 180 + if aura_env.hyp < aura_env.wipeDistance then --When reach herb activate it's cooldown (herbcd[cd] = coords) + aura_env.herbs[id].CD = math.floor(GetTime() + aura_env.cooldown) + WeakAurasSaved.HerbSniffer.CD = WeakAurasSaved.HerbSniffer.CD + 1 + WeakAurasSaved.HerbSniffer.NoCD = WeakAurasSaved.HerbSniffer.NoCD - 1 + aura_env.minID = { + ["X"] = 0, + ["Y"] = 0, + ["D"] = 10000, + ["ID"] = -1 + } + end + for k, v in ipairs(aura_env.herbs) do --if cooldown is up then insert back into proper array + local cd = aura_env.herbs[k].CD + if cd > 0 then + if GetTime() > cd then + aura_env.herbs[k].CD = 0 + WeakAurasSaved.HerbSniffer.NoCD = WeakAurasSaved.HerbSniffer.NoCD + 1 + WeakAurasSaved.HerbSniffer.CD = WeakAurasSaved.HerbSniffer.CD - 1 + end + end + end + else + return false + end + return true +end + +--RESET_COUNTER +function() + WeakAurasSaved.HerbSniffer.CD = 0 + WeakAurasSaved.HerbSniffer.NoCD = #aura_env.herbs +end + +--ANIMATION +function() + return - aura_env.angle +end + +--INIT +if WeakAuras.IsOptionsOpen() then WeakAurasSaved.HerbSniffer.CD = 0; WeakAurasSaved.HerbSniffer.NoCD = #aura_env.herbs end diff --git a/Complete Projects/Legion/Herb Sniffer/Distance.lua b/WeakAuras/Projects/Herb Sniffer/Distance.lua similarity index 97% rename from Complete Projects/Legion/Herb Sniffer/Distance.lua rename to WeakAuras/Projects/Herb Sniffer/Distance.lua index 3b1f90b..12dfc26 100644 --- a/Complete Projects/Legion/Herb Sniffer/Distance.lua +++ b/WeakAuras/Projects/Herb Sniffer/Distance.lua @@ -1,14 +1,14 @@ ---DISPLAY -function() - local function round(var, n) - if (n) then - var = math.floor((var * 10 ^ n) + 0.5) / (10 ^ n) - else - var = math.floor(var + 0.5) - end - return var - end - if WeakAurasSaved.HerbSniffer.hyp and WeakAurasSaved.HerbSniffer.NoCD and WeakAurasSaved.HerbSniffer.CD then - return round(WeakAurasSaved.HerbSniffer.hyp, 0) .. "\n" .. WeakAurasSaved.HerbSniffer.NoCD .. "\n" .. WeakAurasSaved.HerbSniffer.CD - end -end +--DISPLAY +function() + local function round(var, n) + if (n) then + var = math.floor((var * 10 ^ n) + 0.5) / (10 ^ n) + else + var = math.floor(var + 0.5) + end + return var + end + if WeakAurasSaved.HerbSniffer.hyp and WeakAurasSaved.HerbSniffer.NoCD and WeakAurasSaved.HerbSniffer.CD then + return round(WeakAurasSaved.HerbSniffer.hyp, 0) .. "\n" .. WeakAurasSaved.HerbSniffer.NoCD .. "\n" .. WeakAurasSaved.HerbSniffer.CD + end +end diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays Legion.lua b/WeakAuras/Projects/Herb Sniffer/Herb Arrays Legion.lua similarity index 94% rename from Complete Projects/Legion/Herb Sniffer/Herb Arrays Legion.lua rename to WeakAuras/Projects/Herb Sniffer/Herb Arrays Legion.lua index de0d2bf..9f30715 100644 --- a/Complete Projects/Legion/Herb Sniffer/Herb Arrays Legion.lua +++ b/WeakAuras/Projects/Herb Sniffer/Herb Arrays Legion.lua @@ -1,85 +1,85 @@ -aura_env.herbs = { - [1] = { - ["X"] = 49.38, - ["Y"] = 77.73, - ["CD"] = 0, - }, - [2] = { - ["X"] = 48.13, - ["Y"] = 85.04, - ["CD"] = 0, - }, - [3] = { - ["X"] = 47.99, - ["Y"] = 73.48, - ["CD"] = 0, - }, - [4] = { - ["X"] = 55.28, - ["Y"] = 61.71, - ["CD"] = 0, - }, - [5] = { - ["X"] = 58.67, - ["Y"] = 59.56, - ["CD"] = 0, - }, - [6] = { - ["X"] = 57.57, - ["Y"] = 57.4, - ["CD"] = 0, - }, - [7] = { - ["X"] = 57.13, - ["Y"] = 60.08, - ["CD"] = 0, - }, - [8] = { - ["X"] = 55.73, - ["Y"] = 51.76, - ["CD"] = 0, - }, - [9] = { - ["X"] = 56.14, - ["Y"] = 51.59, - ["CD"] = 0, - }, - [10] = { - ["X"] = 41.07, - ["Y"] = 73.8, - ["CD"] = 0, - }, -} -aura_env.cooldown = 600 -aura_env.wipeDistance = 50 -aura_env.angle = 0 -aura_env.hyp = 0 -aura_env.GetClosestHerb = function() - aura_env.minID = { - ["X"] = 0, - ["Y"] = 0, - ["D"] = 1000, - ["ID"] = -1, - } - local pX = GetPlayerMapPosition("player") or 0 - local pY = select(2, GetPlayerMapPosition("player")) or 0 - pX, pY = pX * 100, pY * 100 - for k, v in ipairs(aura_env.herbs) do - local hX, hY, cd = aura_env.herbs[k].X, aura_env.herbs[k].Y, aura_env.herbs[k].CD - if cd == 0 then - local X, Y = pX - hX, pY - hY - local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) - if hyp < aura_env.minID.D then - aura_env.minID.X = hX - aura_env.minID.Y = hY - aura_env.minID.D = hyp - aura_env.minID.ID = k - end - end - end - return aura_env.minID.ID -end -if WeakAuras.IsOptionsOpen() then - WeakAurasSaved.HerbSniffer.CD = 0 - WeakAurasSaved.HerbSniffer.NoCD = #aura_env.herbs -end +aura_env.herbs = { + [1] = { + ["X"] = 49.38, + ["Y"] = 77.73, + ["CD"] = 0, + }, + [2] = { + ["X"] = 48.13, + ["Y"] = 85.04, + ["CD"] = 0, + }, + [3] = { + ["X"] = 47.99, + ["Y"] = 73.48, + ["CD"] = 0, + }, + [4] = { + ["X"] = 55.28, + ["Y"] = 61.71, + ["CD"] = 0, + }, + [5] = { + ["X"] = 58.67, + ["Y"] = 59.56, + ["CD"] = 0, + }, + [6] = { + ["X"] = 57.57, + ["Y"] = 57.4, + ["CD"] = 0, + }, + [7] = { + ["X"] = 57.13, + ["Y"] = 60.08, + ["CD"] = 0, + }, + [8] = { + ["X"] = 55.73, + ["Y"] = 51.76, + ["CD"] = 0, + }, + [9] = { + ["X"] = 56.14, + ["Y"] = 51.59, + ["CD"] = 0, + }, + [10] = { + ["X"] = 41.07, + ["Y"] = 73.8, + ["CD"] = 0, + }, +} +aura_env.cooldown = 600 +aura_env.wipeDistance = 50 +aura_env.angle = 0 +aura_env.hyp = 0 +aura_env.GetClosestHerb = function() + aura_env.minID = { + ["X"] = 0, + ["Y"] = 0, + ["D"] = 1000, + ["ID"] = -1, + } + local pX = GetPlayerMapPosition("player") or 0 + local pY = select(2, GetPlayerMapPosition("player")) or 0 + pX, pY = pX * 100, pY * 100 + for k, v in ipairs(aura_env.herbs) do + local hX, hY, cd = aura_env.herbs[k].X, aura_env.herbs[k].Y, aura_env.herbs[k].CD + if cd == 0 then + local X, Y = pX - hX, pY - hY + local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) + if hyp < aura_env.minID.D then + aura_env.minID.X = hX + aura_env.minID.Y = hY + aura_env.minID.D = hyp + aura_env.minID.ID = k + end + end + end + return aura_env.minID.ID +end +if WeakAuras.IsOptionsOpen() then + WeakAurasSaved.HerbSniffer.CD = 0 + WeakAurasSaved.HerbSniffer.NoCD = #aura_env.herbs +end diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/All Ores.lua b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/All Ores.lua similarity index 92% rename from Complete Projects/Legion/Herb Sniffer/Herb Arrays/All Ores.lua rename to WeakAuras/Projects/Herb Sniffer/Herb Arrays/All Ores.lua index b4b1ada..4d38753 100644 --- a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/All Ores.lua +++ b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/All Ores.lua @@ -1,2191 +1,2191 @@ -aura_env.herbs = { - [1] = { - ["X"] = 67.25, - ["Y"] = 73.74, - ["CD"] = 0, - }, - [2] = { - ["X"] = 68.53, - ["Y"] = 73.25, - ["CD"] = 0, - }, - [3] = { - ["X"] = 69.34, - ["Y"] = 73.84, - ["CD"] = 0, - }, - [4] = { - ["X"] = 62.86, - ["Y"] = 51.94, - ["CD"] = 0, - }, - [5] = { - ["X"] = 63.66, - ["Y"] = 50.43, - ["CD"] = 0, - }, - [6] = { - ["X"] = 65.41, - ["Y"] = 50.69, - ["CD"] = 0, - }, - [7] = { - ["X"] = 64.95, - ["Y"] = 51.87, - ["CD"] = 0, - }, - [8] = { - ["X"] = 64.6, - ["Y"] = 54.88, - ["CD"] = 0, - }, - [9] = { - ["X"] = 52.44, - ["Y"] = 43.72, - ["CD"] = 0, - }, - [10] = { - ["X"] = 51.89, - ["Y"] = 42.38, - ["CD"] = 0, - }, - [11] = { - ["X"] = 50.37, - ["Y"] = 42.54, - ["CD"] = 0, - }, - [12] = { - ["X"] = 49.81, - ["Y"] = 41.96, - ["CD"] = 0, - }, - [13] = { - ["X"] = 49.12, - ["Y"] = 40.6, - ["CD"] = 0, - }, - [14] = { - ["X"] = 48.34, - ["Y"] = 39.21, - ["CD"] = 0, - }, - [15] = { - ["X"] = 48.02, - ["Y"] = 36.6, - ["CD"] = 0, - }, - [16] = { - ["X"] = 46.86, - ["Y"] = 36.72, - ["CD"] = 0, - }, - [17] = { - ["X"] = 46.75, - ["Y"] = 34.53, - ["CD"] = 0, - }, - [18] = { - ["X"] = 25.94, - ["Y"] = 28.99, - ["CD"] = 0, - }, - [19] = { - ["X"] = 29.48, - ["Y"] = 25.3, - ["CD"] = 0, - }, - [20] = { - ["X"] = 28.4, - ["Y"] = 25.56, - ["CD"] = 0, - }, - [21] = { - ["X"] = 28.51, - ["Y"] = 23.82, - ["CD"] = 0, - }, - [22] = { - ["X"] = 29.61, - ["Y"] = 22.79, - ["CD"] = 0, - }, - [23] = { - ["X"] = 29.75, - ["Y"] = 21.84, - ["CD"] = 0, - }, - [24] = { - ["X"] = 26.43, - ["Y"] = 10.9, - ["CD"] = 0, - }, - [25] = { - ["X"] = 25.97, - ["Y"] = 12.48, - ["CD"] = 0, - }, - [26] = { - ["X"] = 25.9, - ["Y"] = 15.81, - ["CD"] = 0, - }, - [27] = { - ["X"] = 25.73, - ["Y"] = 16.64, - ["CD"] = 0, - }, - [28] = { - ["X"] = 25.45, - ["Y"] = 17.29, - ["CD"] = 0, - }, - [29] = { - ["X"] = 25.4, - ["Y"] = 18.4, - ["CD"] = 0, - }, - [30] = { - ["X"] = 25.26, - ["Y"] = 19.79, - ["CD"] = 0, - }, - [31] = { - ["X"] = 26.03, - ["Y"] = 24.44, - ["CD"] = 0, - }, - [32] = { - ["X"] = 26.04, - ["Y"] = 23.22, - ["CD"] = 0, - }, - [33] = { - ["X"] = 24.19, - ["Y"] = 23.27, - ["CD"] = 0, - }, - [34] = { - ["X"] = 24.28, - ["Y"] = 24.89, - ["CD"] = 0, - }, - [35] = { - ["X"] = 24.47, - ["Y"] = 25.24, - ["CD"] = 0, - }, - [36] = { - ["X"] = 24.46, - ["Y"] = 26.17, - ["CD"] = 0, - }, - [37] = { - ["X"] = 24.98, - ["Y"] = 27.02, - ["CD"] = 0, - }, - [38] = { - ["X"] = 24.82, - ["Y"] = 27.95, - ["CD"] = 0, - }, - [39] = { - ["X"] = 24.87, - ["Y"] = 29.34, - ["CD"] = 0, - }, - [40] = { - ["X"] = 24.49, - ["Y"] = 30.19, - ["CD"] = 0, - }, - [41] = { - ["X"] = 23.53, - ["Y"] = 30.88, - ["CD"] = 0, - }, - [42] = { - ["X"] = 23.17, - ["Y"] = 31.72, - ["CD"] = 0, - }, - [43] = { - ["X"] = 22.88, - ["Y"] = 32.62, - ["CD"] = 0, - }, - [44] = { - ["X"] = 21.65, - ["Y"] = 33.2, - ["CD"] = 0, - }, - [45] = { - ["X"] = 19.95, - ["Y"] = 33.28, - ["CD"] = 0, - }, - [46] = { - ["X"] = 21.16, - ["Y"] = 34.77, - ["CD"] = 0, - }, - [47] = { - ["X"] = 22.35, - ["Y"] = 34.03, - ["CD"] = 0, - }, - [48] = { - ["X"] = 31.87, - ["Y"] = 52.38, - ["CD"] = 0, - }, - [49] = { - ["X"] = 30.31, - ["Y"] = 53, - ["CD"] = 0, - }, - [50] = { - ["X"] = 28.27, - ["Y"] = 53.65, - ["CD"] = 0, - }, - [51] = { - ["X"] = 27.54, - ["Y"] = 53.51, - ["CD"] = 0, - }, - [52] = { - ["X"] = 27.6, - ["Y"] = 52.81, - ["CD"] = 0, - }, - [53] = { - ["X"] = 26.91, - ["Y"] = 53.27, - ["CD"] = 0, - }, - [54] = { - ["X"] = 25.45, - ["Y"] = 54.29, - ["CD"] = 0, - }, - [55] = { - ["X"] = 25.36, - ["Y"] = 53.45, - ["CD"] = 0, - }, - [56] = { - ["X"] = 22.29, - ["Y"] = 54.37, - ["CD"] = 0, - }, - [57] = { - ["X"] = 23.11, - ["Y"] = 55.13, - ["CD"] = 0, - }, - [58] = { - ["X"] = 24.34, - ["Y"] = 55.09, - ["CD"] = 0, - }, - [59] = { - ["X"] = 24.03, - ["Y"] = 55.88, - ["CD"] = 0, - }, - [60] = { - ["X"] = 24.95, - ["Y"] = 59.85, - ["CD"] = 0, - }, - [61] = { - ["X"] = 24.84, - ["Y"] = 61.41, - ["CD"] = 0, - }, - [62] = { - ["X"] = 34.59, - ["Y"] = 69.79, - ["CD"] = 0, - }, - [63] = { - ["X"] = 33.59, - ["Y"] = 68.41, - ["CD"] = 0, - }, - [64] = { - ["X"] = 31.96, - ["Y"] = 69.06, - ["CD"] = 0, - }, - [65] = { - ["X"] = 29.87, - ["Y"] = 65.93, - ["CD"] = 0, - }, - [66] = { - ["X"] = 30.95, - ["Y"] = 64.82, - ["CD"] = 0, - }, - [67] = { - ["X"] = 32.43, - ["Y"] = 62.85, - ["CD"] = 0, - }, - [68] = { - ["X"] = 32.7, - ["Y"] = 61.83, - ["CD"] = 0, - }, - [69] = { - ["X"] = 33.05, - ["Y"] = 57.88, - ["CD"] = 0, - }, - [70] = { - ["X"] = 32.43, - ["Y"] = 56.41, - ["CD"] = 0, - }, - [71] = { - ["X"] = 33.85, - ["Y"] = 54.08, - ["CD"] = 0, - }, - [72] = { - ["X"] = 32.68, - ["Y"] = 51.4, - ["CD"] = 0, - }, - [73] = { - ["X"] = 33.07, - ["Y"] = 48.65, - ["CD"] = 0, - }, - [74] = { - ["X"] = 34.22, - ["Y"] = 47.52, - ["CD"] = 0, - }, - [75] = { - ["X"] = 35.38, - ["Y"] = 49.24, - ["CD"] = 0, - }, - [76] = { - ["X"] = 36.3, - ["Y"] = 49.81, - ["CD"] = 0, - }, - [77] = { - ["X"] = 37.23, - ["Y"] = 53.49, - ["CD"] = 0, - }, - [78] = { - ["X"] = 37.55, - ["Y"] = 54.77, - ["CD"] = 0, - }, - [79] = { - ["X"] = 37.48, - ["Y"] = 55.75, - ["CD"] = 0, - }, - [80] = { - ["X"] = 39.14, - ["Y"] = 59.76, - ["CD"] = 0, - }, - [81] = { - ["X"] = 39.01, - ["Y"] = 58.93, - ["CD"] = 0, - }, - [82] = { - ["X"] = 38.69, - ["Y"] = 58.31, - ["CD"] = 0, - }, - [83] = { - ["X"] = 38.55, - ["Y"] = 57.23, - ["CD"] = 0, - }, - [84] = { - ["X"] = 36.59, - ["Y"] = 56.72, - ["CD"] = 0, - }, - [85] = { - ["X"] = 34.3, - ["Y"] = 55.25, - ["CD"] = 0, - }, - [86] = { - ["X"] = 26.1, - ["Y"] = 14.77, - ["CD"] = 0, - }, - [87] = { - ["X"] = 45.95, - ["Y"] = 29.55, - ["CD"] = 0, - }, - [88] = { - ["X"] = 29.47, - ["Y"] = 31.25, - ["CD"] = 0, - }, - [89] = { - ["X"] = 28.15, - ["Y"] = 37.03, - ["CD"] = 0, - }, - [90] = { - ["X"] = 26.89, - ["Y"] = 35.94, - ["CD"] = 0, - }, - [91] = { - ["X"] = 26.1, - ["Y"] = 38.55, - ["CD"] = 0, - }, - [92] = { - ["X"] = 24.92, - ["Y"] = 42.79, - ["CD"] = 0, - }, - [93] = { - ["X"] = 24.22, - ["Y"] = 45.41, - ["CD"] = 0, - }, - [94] = { - ["X"] = 23.88, - ["Y"] = 48.95, - ["CD"] = 0, - }, - [95] = { - ["X"] = 25.79, - ["Y"] = 49.81, - ["CD"] = 0, - }, - [96] = { - ["X"] = 26.82, - ["Y"] = 46.94, - ["CD"] = 0, - }, - [97] = { - ["X"] = 31.6, - ["Y"] = 49.24, - ["CD"] = 0, - }, - [98] = { - ["X"] = 33.02, - ["Y"] = 46.44, - ["CD"] = 0, - }, - [99] = { - ["X"] = 28.44, - ["Y"] = 43.1, - ["CD"] = 0, - }, - [100] = { - ["X"] = 23.55, - ["Y"] = 48.35, - ["CD"] = 0, - }, - [101] = { - ["X"] = 20.43, - ["Y"] = 52.82, - ["CD"] = 0, - }, - [102] = { - ["X"] = 25.81, - ["Y"] = 52.62, - ["CD"] = 0, - }, - [103] = { - ["X"] = 26.13, - ["Y"] = 55.42, - ["CD"] = 0, - }, - [104] = { - ["X"] = 26.22, - ["Y"] = 53.16, - ["CD"] = 0, - }, - [105] = { - ["X"] = 24.67, - ["Y"] = 51.58, - ["CD"] = 0, - }, - [106] = { - ["X"] = 24.61, - ["Y"] = 47.73, - ["CD"] = 0, - }, - [107] = { - ["X"] = 26.03, - ["Y"] = 47.65, - ["CD"] = 0, - }, - [108] = { - ["X"] = 27.94, - ["Y"] = 47.19, - ["CD"] = 0, - }, - [109] = { - ["X"] = 27.39, - ["Y"] = 44.65, - ["CD"] = 0, - }, - [110] = { - ["X"] = 32.73, - ["Y"] = 43.41, - ["CD"] = 0, - }, - [111] = { - ["X"] = 31.98, - ["Y"] = 47.64, - ["CD"] = 0, - }, - [112] = { - ["X"] = 32.51, - ["Y"] = 38.82, - ["CD"] = 0, - }, - [113] = { - ["X"] = 31.03, - ["Y"] = 38.81, - ["CD"] = 0, - }, - [114] = { - ["X"] = 30.59, - ["Y"] = 39.67, - ["CD"] = 0, - }, - [115] = { - ["X"] = 30.03, - ["Y"] = 40.09, - ["CD"] = 0, - }, - [116] = { - ["X"] = 29.63, - ["Y"] = 41.35, - ["CD"] = 0, - }, - [117] = { - ["X"] = 28.81, - ["Y"] = 43.12, - ["CD"] = 0, - }, - [118] = { - ["X"] = 30.08, - ["Y"] = 45.64, - ["CD"] = 0, - }, - [119] = { - ["X"] = 30.28, - ["Y"] = 48.27, - ["CD"] = 0, - }, - [120] = { - ["X"] = 29.93, - ["Y"] = 47.4, - ["CD"] = 0, - }, - [121] = { - ["X"] = 28.94, - ["Y"] = 47.14, - ["CD"] = 0, - }, - [122] = { - ["X"] = 27.59, - ["Y"] = 45.29, - ["CD"] = 0, - }, - [123] = { - ["X"] = 30.01, - ["Y"] = 44.34, - ["CD"] = 0, - }, - [124] = { - ["X"] = 32.22, - ["Y"] = 39.24, - ["CD"] = 0, - }, - [125] = { - ["X"] = 31.38, - ["Y"] = 38.07, - ["CD"] = 0, - }, - [126] = { - ["X"] = 32.23, - ["Y"] = 36.98, - ["CD"] = 0, - }, - [127] = { - ["X"] = 31.55, - ["Y"] = 31.57, - ["CD"] = 0, - }, - [128] = { - ["X"] = 30.92, - ["Y"] = 34.67, - ["CD"] = 0, - }, - [129] = { - ["X"] = 47.19, - ["Y"] = 39.83, - ["CD"] = 0, - }, - [130] = { - ["X"] = 50.82, - ["Y"] = 40.62, - ["CD"] = 0, - }, - [131] = { - ["X"] = 48.38, - ["Y"] = 34.1, - ["CD"] = 0, - }, - [132] = { - ["X"] = 45.59, - ["Y"] = 31.09, - ["CD"] = 0, - }, - [133] = { - ["X"] = 43.61, - ["Y"] = 35.49, - ["CD"] = 0, - }, - [134] = { - ["X"] = 35.64, - ["Y"] = 41.64, - ["CD"] = 0, - }, - [135] = { - ["X"] = 34.44, - ["Y"] = 43, - ["CD"] = 0, - }, - [136] = { - ["X"] = 47.66, - ["Y"] = 49.41, - ["CD"] = 0, - }, - [137] = { - ["X"] = 48.82, - ["Y"] = 47.86, - ["CD"] = 0, - }, - [138] = { - ["X"] = 44.12, - ["Y"] = 47.05, - ["CD"] = 0, - }, - [139] = { - ["X"] = 43.09, - ["Y"] = 48.75, - ["CD"] = 0, - }, - [140] = { - ["X"] = 40.23, - ["Y"] = 47.62, - ["CD"] = 0, - }, - [141] = { - ["X"] = 37.28, - ["Y"] = 50.18, - ["CD"] = 0, - }, - [142] = { - ["X"] = 36.33, - ["Y"] = 56.29, - ["CD"] = 0, - }, - [143] = { - ["X"] = 38.4, - ["Y"] = 56.36, - ["CD"] = 0, - }, - [144] = { - ["X"] = 40.05, - ["Y"] = 56.12, - ["CD"] = 0, - }, - [145] = { - ["X"] = 39.51, - ["Y"] = 57.12, - ["CD"] = 0, - }, - [146] = { - ["X"] = 39.43, - ["Y"] = 54.75, - ["CD"] = 0, - }, - [147] = { - ["X"] = 38.8, - ["Y"] = 51.65, - ["CD"] = 0, - }, - [148] = { - ["X"] = 38.74, - ["Y"] = 53.13, - ["CD"] = 0, - }, - [149] = { - ["X"] = 38.11, - ["Y"] = 53.06, - ["CD"] = 0, - }, - [150] = { - ["X"] = 36.71, - ["Y"] = 53.46, - ["CD"] = 0, - }, - [151] = { - ["X"] = 36.17, - ["Y"] = 53.81, - ["CD"] = 0, - }, - [152] = { - ["X"] = 34.25, - ["Y"] = 55.15, - ["CD"] = 0, - }, - [153] = { - ["X"] = 35.35, - ["Y"] = 54.5, - ["CD"] = 0, - }, - [154] = { - ["X"] = 35.27, - ["Y"] = 52.65, - ["CD"] = 0, - }, - [155] = { - ["X"] = 32.47, - ["Y"] = 45.01, - ["CD"] = 0, - }, - [156] = { - ["X"] = 34.72, - ["Y"] = 47.72, - ["CD"] = 0, - }, - [157] = { - ["X"] = 36.55, - ["Y"] = 51.57, - ["CD"] = 0, - }, - [158] = { - ["X"] = 70.42, - ["Y"] = 64.46, - ["CD"] = 0, - }, - [159] = { - ["X"] = 64.84, - ["Y"] = 55.38, - ["CD"] = 0, - }, - [160] = { - ["X"] = 44.86, - ["Y"] = 48.82, - ["CD"] = 0, - }, - [161] = { - ["X"] = 29.45, - ["Y"] = 77.91, - ["CD"] = 0, - }, - [162] = { - ["X"] = 29.8, - ["Y"] = 70.65, - ["CD"] = 0, - }, - [163] = { - ["X"] = 44.01, - ["Y"] = 41.2, - ["CD"] = 0, - }, - [164] = { - ["X"] = 41.54, - ["Y"] = 40.12, - ["CD"] = 0, - }, - [165] = { - ["X"] = 20.2, - ["Y"] = 53.96, - ["CD"] = 0, - }, - [166] = { - ["X"] = 31.44, - ["Y"] = 29.22, - ["CD"] = 0, - }, - [167] = { - ["X"] = 15.67, - ["Y"] = 37.13, - ["CD"] = 0, - }, - [168] = { - ["X"] = 20.97, - ["Y"] = 15.47, - ["CD"] = 0, - }, - [169] = { - ["X"] = 27.52, - ["Y"] = 9.17, - ["CD"] = 0, - }, - [170] = { - ["X"] = 25.93, - ["Y"] = 25.58, - ["CD"] = 0, - }, - [171] = { - ["X"] = 34.07, - ["Y"] = 50.83, - ["CD"] = 0, - }, - [172] = { - ["X"] = 37.23, - ["Y"] = 54.85, - ["CD"] = 0, - }, - [173] = { - ["X"] = 34.77, - ["Y"] = 58.4, - ["CD"] = 0, - }, - [174] = { - ["X"] = 39.56, - ["Y"] = 79.48, - ["CD"] = 0, - }, - [175] = { - ["X"] = 66.46, - ["Y"] = 57.51, - ["CD"] = 0, - }, - [176] = { - ["X"] = 66.74, - ["Y"] = 66.02, - ["CD"] = 0, - }, - [177] = { - ["X"] = 71.94, - ["Y"] = 68.81, - ["CD"] = 0, - }, - [178] = { - ["X"] = 69.51, - ["Y"] = 67.83, - ["CD"] = 0, - }, - [179] = { - ["X"] = 69.31, - ["Y"] = 50.72, - ["CD"] = 0, - }, - [180] = { - ["X"] = 63.31, - ["Y"] = 53.33, - ["CD"] = 0, - }, - [181] = { - ["X"] = 63.96, - ["Y"] = 50.46, - ["CD"] = 0, - }, - [182] = { - ["X"] = 65.37, - ["Y"] = 43.82, - ["CD"] = 0, - }, - [183] = { - ["X"] = 63.15, - ["Y"] = 35.17, - ["CD"] = 0, - }, - [184] = { - ["X"] = 60.59, - ["Y"] = 44.44, - ["CD"] = 0, - }, - [185] = { - ["X"] = 35.55, - ["Y"] = 61.86, - ["CD"] = 0, - }, - [186] = { - ["X"] = 40.1, - ["Y"] = 53.5, - ["CD"] = 0, - }, - [187] = { - ["X"] = 47.46, - ["Y"] = 47.36, - ["CD"] = 0, - }, - [188] = { - ["X"] = 49.48, - ["Y"] = 39.04, - ["CD"] = 0, - }, - [189] = { - ["X"] = 35.79, - ["Y"] = 42.74, - ["CD"] = 0, - }, - [190] = { - ["X"] = 33.35, - ["Y"] = 45.99, - ["CD"] = 0, - }, - [191] = { - ["X"] = 30.25, - ["Y"] = 43.1, - ["CD"] = 0, - }, - [192] = { - ["X"] = 28.76, - ["Y"] = 48.41, - ["CD"] = 0, - }, - [193] = { - ["X"] = 30.18, - ["Y"] = 65.31, - ["CD"] = 0, - }, - [194] = { - ["X"] = 32.64, - ["Y"] = 74.92, - ["CD"] = 0, - }, - [195] = { - ["X"] = 35.41, - ["Y"] = 80.33, - ["CD"] = 0, - }, - [196] = { - ["X"] = 32.08, - ["Y"] = 81.08, - ["CD"] = 0, - }, - [197] = { - ["X"] = 30.03, - ["Y"] = 82.65, - ["CD"] = 0, - }, - [198] = { - ["X"] = 27.52, - ["Y"] = 67.32, - ["CD"] = 0, - }, - [199] = { - ["X"] = 26.24, - ["Y"] = 69.06, - ["CD"] = 0, - }, - [200] = { - ["X"] = 24.97, - ["Y"] = 61.8, - ["CD"] = 0, - }, - [201] = { - ["X"] = 25.91, - ["Y"] = 58.23, - ["CD"] = 0, - }, - [202] = { - ["X"] = 34.69, - ["Y"] = 39.51, - ["CD"] = 0, - }, - [203] = { - ["X"] = 37.45, - ["Y"] = 38.69, - ["CD"] = 0, - }, - [204] = { - ["X"] = 45.96, - ["Y"] = 36.33, - ["CD"] = 0, - }, - [205] = { - ["X"] = 46.54, - ["Y"] = 33.81, - ["CD"] = 0, - }, - [206] = { - ["X"] = 37.6, - ["Y"] = 31.35, - ["CD"] = 0, - }, - [207] = { - ["X"] = 24.73, - ["Y"] = 54.01, - ["CD"] = 0, - }, - [208] = { - ["X"] = 21.68, - ["Y"] = 47.55, - ["CD"] = 0, - }, - [209] = { - ["X"] = 23.58, - ["Y"] = 50.81, - ["CD"] = 0, - }, - [210] = { - ["X"] = 25.01, - ["Y"] = 35.96, - ["CD"] = 0, - }, - [211] = { - ["X"] = 25.25, - ["Y"] = 37.61, - ["CD"] = 0, - }, - [212] = { - ["X"] = 41.53, - ["Y"] = 17.47, - ["CD"] = 0, - }, - [213] = { - ["X"] = 27.84, - ["Y"] = 15.94, - ["CD"] = 0, - }, - [214] = { - ["X"] = 44.1, - ["Y"] = 24.69, - ["CD"] = 0, - }, - [215] = { - ["X"] = 41.45, - ["Y"] = 24.26, - ["CD"] = 0, - }, - [216] = { - ["X"] = 40.28, - ["Y"] = 27.75, - ["CD"] = 0, - }, - [217] = { - ["X"] = 37.57, - ["Y"] = 27.05, - ["CD"] = 0, - }, - [218] = { - ["X"] = 33.71, - ["Y"] = 31.04, - ["CD"] = 0, - }, - [219] = { - ["X"] = 28.85, - ["Y"] = 29.61, - ["CD"] = 0, - }, - [220] = { - ["X"] = 27.2, - ["Y"] = 29.85, - ["CD"] = 0, - }, - [221] = { - ["X"] = 23.31, - ["Y"] = 34.44, - ["CD"] = 0, - }, - [222] = { - ["X"] = 15.86, - ["Y"] = 43.89, - ["CD"] = 0, - }, - [223] = { - ["X"] = 16.17, - ["Y"] = 39.56, - ["CD"] = 0, - }, - [224] = { - ["X"] = 16.88, - ["Y"] = 28.87, - ["CD"] = 0, - }, - [225] = { - ["X"] = 19.56, - ["Y"] = 18.08, - ["CD"] = 0, - }, - [226] = { - ["X"] = 19.99, - ["Y"] = 18.12, - ["CD"] = 0, - }, - [227] = { - ["X"] = 49.54, - ["Y"] = 43.54, - ["CD"] = 0, - }, - [228] = { - ["X"] = 55.47, - ["Y"] = 40.72, - ["CD"] = 0, - }, - [229] = { - ["X"] = 57.64, - ["Y"] = 37.85, - ["CD"] = 0, - }, - [230] = { - ["X"] = 62.48, - ["Y"] = 57.85, - ["CD"] = 0, - }, - [231] = { - ["X"] = 63.78, - ["Y"] = 60.52, - ["CD"] = 0, - }, - [232] = { - ["X"] = 50.61, - ["Y"] = 60.74, - ["CD"] = 0, - }, - [233] = { - ["X"] = 42.63, - ["Y"] = 34.55, - ["CD"] = 0, - }, - [234] = { - ["X"] = 43.99, - ["Y"] = 33.06, - ["CD"] = 0, - }, - [235] = { - ["X"] = 43.05, - ["Y"] = 31.79, - ["CD"] = 0, - }, - [236] = { - ["X"] = 43.99, - ["Y"] = 31.16, - ["CD"] = 0, - }, - [237] = { - ["X"] = 26.64, - ["Y"] = 23.15, - ["CD"] = 0, - }, - [238] = { - ["X"] = 28.32, - ["Y"] = 23.6, - ["CD"] = 0, - }, - [239] = { - ["X"] = 28.88, - ["Y"] = 24.6, - ["CD"] = 0, - }, - [240] = { - ["X"] = 33.61, - ["Y"] = 36.03, - ["CD"] = 0, - }, - [241] = { - ["X"] = 30.99, - ["Y"] = 39.39, - ["CD"] = 0, - }, - [242] = { - ["X"] = 26.18, - ["Y"] = 43.14, - ["CD"] = 0, - }, - [243] = { - ["X"] = 22.71, - ["Y"] = 45.34, - ["CD"] = 0, - }, - [244] = { - ["X"] = 22.81, - ["Y"] = 49.38, - ["CD"] = 0, - }, - [245] = { - ["X"] = 21.55, - ["Y"] = 50.1, - ["CD"] = 0, - }, - [246] = { - ["X"] = 22.18, - ["Y"] = 52.8, - ["CD"] = 0, - }, - [247] = { - ["X"] = 21.47, - ["Y"] = 56.31, - ["CD"] = 0, - }, - [248] = { - ["X"] = 20.22, - ["Y"] = 60.26, - ["CD"] = 0, - }, - [249] = { - ["X"] = 24.53, - ["Y"] = 60.54, - ["CD"] = 0, - }, - [250] = { - ["X"] = 24.59, - ["Y"] = 62.52, - ["CD"] = 0, - }, - [251] = { - ["X"] = 26.87, - ["Y"] = 72.95, - ["CD"] = 0, - }, - [252] = { - ["X"] = 27.78, - ["Y"] = 72.71, - ["CD"] = 0, - }, - [253] = { - ["X"] = 29.27, - ["Y"] = 71.58, - ["CD"] = 0, - }, - [254] = { - ["X"] = 30.54, - ["Y"] = 76.06, - ["CD"] = 0, - }, - [255] = { - ["X"] = 32.41, - ["Y"] = 79.52, - ["CD"] = 0, - }, - [256] = { - ["X"] = 32.6, - ["Y"] = 74.97, - ["CD"] = 0, - }, - [257] = { - ["X"] = 33.1, - ["Y"] = 72.68, - ["CD"] = 0, - }, - [258] = { - ["X"] = 34.44, - ["Y"] = 74.65, - ["CD"] = 0, - }, - [259] = { - ["X"] = 34.74, - ["Y"] = 82.73, - ["CD"] = 0, - }, - [260] = { - ["X"] = 29.22, - ["Y"] = 78.87, - ["CD"] = 0, - }, - [261] = { - ["X"] = 31.67, - ["Y"] = 84.04, - ["CD"] = 0, - }, - [262] = { - ["X"] = 33.47, - ["Y"] = 80.66, - ["CD"] = 0, - }, - [263] = { - ["X"] = 36.84, - ["Y"] = 81.04, - ["CD"] = 0, - }, - [264] = { - ["X"] = 33.58, - ["Y"] = 79.03, - ["CD"] = 0, - }, - [265] = { - ["X"] = 31.74, - ["Y"] = 76.73, - ["CD"] = 0, - }, - [266] = { - ["X"] = 31.59, - ["Y"] = 80.8, - ["CD"] = 0, - }, - [267] = { - ["X"] = 29.41, - ["Y"] = 84.91, - ["CD"] = 0, - }, - [268] = { - ["X"] = 30.69, - ["Y"] = 79.72, - ["CD"] = 0, - }, - [269] = { - ["X"] = 31.6, - ["Y"] = 78.17, - ["CD"] = 0, - }, - [270] = { - ["X"] = 33.91, - ["Y"] = 77.78, - ["CD"] = 0, - }, - [271] = { - ["X"] = 25.75, - ["Y"] = 60.01, - ["CD"] = 0, - }, - [272] = { - ["X"] = 25.14, - ["Y"] = 63.26, - ["CD"] = 0, - }, - [273] = { - ["X"] = 30.02, - ["Y"] = 68.21, - ["CD"] = 0, - }, - [274] = { - ["X"] = 32.72, - ["Y"] = 69.46, - ["CD"] = 0, - }, - [275] = { - ["X"] = 27.93, - ["Y"] = 55.27, - ["CD"] = 0, - }, - [276] = { - ["X"] = 28.97, - ["Y"] = 53.34, - ["CD"] = 0, - }, - [277] = { - ["X"] = 30.03, - ["Y"] = 54.69, - ["CD"] = 0, - }, - [278] = { - ["X"] = 34.28, - ["Y"] = 22.25, - ["CD"] = 0, - }, - [279] = { - ["X"] = 36.44, - ["Y"] = 21.81, - ["CD"] = 0, - }, - [280] = { - ["X"] = 36.55, - ["Y"] = 17.27, - ["CD"] = 0, - }, - [281] = { - ["X"] = 34.94, - ["Y"] = 18.5, - ["CD"] = 0, - }, - [282] = { - ["X"] = 33.19, - ["Y"] = 20.08, - ["CD"] = 0, - }, - [283] = { - ["X"] = 32.41, - ["Y"] = 22.05, - ["CD"] = 0, - }, - [284] = { - ["X"] = 31.76, - ["Y"] = 21.01, - ["CD"] = 0, - }, - [285] = { - ["X"] = 30.89, - ["Y"] = 19.81, - ["CD"] = 0, - }, - [286] = { - ["X"] = 29.46, - ["Y"] = 17.67, - ["CD"] = 0, - }, - [287] = { - ["X"] = 27.11, - ["Y"] = 15.7, - ["CD"] = 0, - }, - [288] = { - ["X"] = 26.68, - ["Y"] = 19.69, - ["CD"] = 0, - }, - [289] = { - ["X"] = 28.25, - ["Y"] = 17.56, - ["CD"] = 0, - }, - [290] = { - ["X"] = 30.34, - ["Y"] = 18.98, - ["CD"] = 0, - }, - [291] = { - ["X"] = 31.53, - ["Y"] = 16.08, - ["CD"] = 0, - }, - [292] = { - ["X"] = 31.54, - ["Y"] = 19.45, - ["CD"] = 0, - }, - [293] = { - ["X"] = 32.72, - ["Y"] = 25.06, - ["CD"] = 0, - }, - [294] = { - ["X"] = 34.2, - ["Y"] = 24.4, - ["CD"] = 0, - }, - [295] = { - ["X"] = 34.04, - ["Y"] = 27.23, - ["CD"] = 0, - }, - [296] = { - ["X"] = 32.99, - ["Y"] = 38.64, - ["CD"] = 0, - }, - [297] = { - ["X"] = 31.15, - ["Y"] = 38.61, - ["CD"] = 0, - }, - [298] = { - ["X"] = 32.04, - ["Y"] = 39.74, - ["CD"] = 0, - }, - [299] = { - ["X"] = 32.65, - ["Y"] = 41.89, - ["CD"] = 0, - }, - [300] = { - ["X"] = 33.1, - ["Y"] = 42.99, - ["CD"] = 0, - }, - [301] = { - ["X"] = 36.86, - ["Y"] = 46.71, - ["CD"] = 0, - }, - [302] = { - ["X"] = 37.81, - ["Y"] = 49.74, - ["CD"] = 0, - }, - [303] = { - ["X"] = 42.95, - ["Y"] = 52.52, - ["CD"] = 0, - }, - [304] = { - ["X"] = 42.35, - ["Y"] = 48.81, - ["CD"] = 0, - }, - [305] = { - ["X"] = 69.72, - ["Y"] = 64.19, - ["CD"] = 0, - }, - [306] = { - ["X"] = 68.37, - ["Y"] = 61.74, - ["CD"] = 0, - }, - [307] = { - ["X"] = 69.51, - ["Y"] = 65.5, - ["CD"] = 0, - }, - [308] = { - ["X"] = 70.29, - ["Y"] = 64.48, - ["CD"] = 0, - }, - [309] = { - ["X"] = 69.13, - ["Y"] = 64.23, - ["CD"] = 0, - }, - [310] = { - ["X"] = 69.15, - ["Y"] = 60.1, - ["CD"] = 0, - }, - [311] = { - ["X"] = 67.97, - ["Y"] = 58.14, - ["CD"] = 0, - }, - [312] = { - ["X"] = 67.14, - ["Y"] = 53.01, - ["CD"] = 0, - }, - [313] = { - ["X"] = 73.12, - ["Y"] = 48.65, - ["CD"] = 0, - }, - [314] = { - ["X"] = 73.12, - ["Y"] = 47.89, - ["CD"] = 0, - }, - [315] = { - ["X"] = 72.19, - ["Y"] = 46.38, - ["CD"] = 0, - }, - [316] = { - ["X"] = 70.51, - ["Y"] = 46.32, - ["CD"] = 0, - }, - [317] = { - ["X"] = 68.65, - ["Y"] = 46.67, - ["CD"] = 0, - }, - [318] = { - ["X"] = 68.55, - ["Y"] = 51.82, - ["CD"] = 0, - }, - [319] = { - ["X"] = 64.71, - ["Y"] = 51.86, - ["CD"] = 0, - }, - [320] = { - ["X"] = 63.71, - ["Y"] = 48.77, - ["CD"] = 0, - }, - [321] = { - ["X"] = 63.62, - ["Y"] = 47.68, - ["CD"] = 0, - }, - [322] = { - ["X"] = 64.8, - ["Y"] = 46.7, - ["CD"] = 0, - }, - [323] = { - ["X"] = 66.58, - ["Y"] = 45.28, - ["CD"] = 0, - }, - [324] = { - ["X"] = 63.34, - ["Y"] = 33.87, - ["CD"] = 0, - }, - [325] = { - ["X"] = 63.01, - ["Y"] = 34.84, - ["CD"] = 0, - }, - [326] = { - ["X"] = 61.77, - ["Y"] = 39.07, - ["CD"] = 0, - }, - [327] = { - ["X"] = 59.21, - ["Y"] = 41.44, - ["CD"] = 0, - }, - [328] = { - ["X"] = 56.78, - ["Y"] = 42.66, - ["CD"] = 0, - }, - [329] = { - ["X"] = 55.53, - ["Y"] = 47.09, - ["CD"] = 0, - }, - [330] = { - ["X"] = 59.44, - ["Y"] = 47.15, - ["CD"] = 0, - }, - [331] = { - ["X"] = 61.51, - ["Y"] = 51.48, - ["CD"] = 0, - }, - [332] = { - ["X"] = 63.82, - ["Y"] = 52.27, - ["CD"] = 0, - }, - [333] = { - ["X"] = 62, - ["Y"] = 52.91, - ["CD"] = 0, - }, - [334] = { - ["X"] = 61.35, - ["Y"] = 50.51, - ["CD"] = 0, - }, - [335] = { - ["X"] = 61.74, - ["Y"] = 48.03, - ["CD"] = 0, - }, - [336] = { - ["X"] = 58.77, - ["Y"] = 43.45, - ["CD"] = 0, - }, - [337] = { - ["X"] = 58.41, - ["Y"] = 45.39, - ["CD"] = 0, - }, - [338] = { - ["X"] = 54.5, - ["Y"] = 46.97, - ["CD"] = 0, - }, - [339] = { - ["X"] = 55.89, - ["Y"] = 45.23, - ["CD"] = 0, - }, - [340] = { - ["X"] = 56.05, - ["Y"] = 41.79, - ["CD"] = 0, - }, - [341] = { - ["X"] = 57.41, - ["Y"] = 42.15, - ["CD"] = 0, - }, - [342] = { - ["X"] = 57.21, - ["Y"] = 44.41, - ["CD"] = 0, - }, - [343] = { - ["X"] = 57.77, - ["Y"] = 45.14, - ["CD"] = 0, - }, - [344] = { - ["X"] = 59.3, - ["Y"] = 40.64, - ["CD"] = 0, - }, - [345] = { - ["X"] = 60.35, - ["Y"] = 40.73, - ["CD"] = 0, - }, - [346] = { - ["X"] = 61.12, - ["Y"] = 41.76, - ["CD"] = 0, - }, - [347] = { - ["X"] = 31.67, - ["Y"] = 27.07, - ["CD"] = 0, - }, - [348] = { - ["X"] = 30.98, - ["Y"] = 24.72, - ["CD"] = 0, - }, - [349] = { - ["X"] = 29.82, - ["Y"] = 26.4, - ["CD"] = 0, - }, - [350] = { - ["X"] = 27.29, - ["Y"] = 25.93, - ["CD"] = 0, - }, - [351] = { - ["X"] = 26.05, - ["Y"] = 27.85, - ["CD"] = 0, - }, - [352] = { - ["X"] = 26.76, - ["Y"] = 29.56, - ["CD"] = 0, - }, - [353] = { - ["X"] = 28.39, - ["Y"] = 30.88, - ["CD"] = 0, - }, - [354] = { - ["X"] = 28.45, - ["Y"] = 31.37, - ["CD"] = 0, - }, - [355] = { - ["X"] = 29.25, - ["Y"] = 32.11, - ["CD"] = 0, - }, - [356] = { - ["X"] = 29.96, - ["Y"] = 30.84, - ["CD"] = 0, - }, - [357] = { - ["X"] = 32.9, - ["Y"] = 32.82, - ["CD"] = 0, - }, - [358] = { - ["X"] = 31.92, - ["Y"] = 31.74, - ["CD"] = 0, - }, - [359] = { - ["X"] = 30.75, - ["Y"] = 37.27, - ["CD"] = 0, - }, - [360] = { - ["X"] = 31.63, - ["Y"] = 37.6, - ["CD"] = 0, - }, - [361] = { - ["X"] = 27.94, - ["Y"] = 37.72, - ["CD"] = 0, - }, - [362] = { - ["X"] = 28.17, - ["Y"] = 38.49, - ["CD"] = 0, - }, - [363] = { - ["X"] = 26.32, - ["Y"] = 40.44, - ["CD"] = 0, - }, - [364] = { - ["X"] = 24.49, - ["Y"] = 41.81, - ["CD"] = 0, - }, - [365] = { - ["X"] = 18.08, - ["Y"] = 46.61, - ["CD"] = 0, - }, - [366] = { - ["X"] = 17.59, - ["Y"] = 45.09, - ["CD"] = 0, - }, - [367] = { - ["X"] = 18.4, - ["Y"] = 41, - ["CD"] = 0, - }, - [368] = { - ["X"] = 17.48, - ["Y"] = 39.95, - ["CD"] = 0, - }, - [369] = { - ["X"] = 18.65, - ["Y"] = 41.96, - ["CD"] = 0, - }, - [370] = { - ["X"] = 20.95, - ["Y"] = 43.91, - ["CD"] = 0, - }, - [371] = { - ["X"] = 22.97, - ["Y"] = 47.92, - ["CD"] = 0, - }, - [372] = { - ["X"] = 19.09, - ["Y"] = 49.69, - ["CD"] = 0, - }, - [373] = { - ["X"] = 22.03, - ["Y"] = 56.43, - ["CD"] = 0, - }, - [374] = { - ["X"] = 22.31, - ["Y"] = 58.92, - ["CD"] = 0, - }, - [375] = { - ["X"] = 25.31, - ["Y"] = 68.09, - ["CD"] = 0, - }, - [376] = { - ["X"] = 21.62, - ["Y"] = 61.23, - ["CD"] = 0, - }, - [377] = { - ["X"] = 21.35, - ["Y"] = 59.29, - ["CD"] = 0, - }, - [378] = { - ["X"] = 19.87, - ["Y"] = 59.06, - ["CD"] = 0, - }, - [379] = { - ["X"] = 19.27, - ["Y"] = 58.37, - ["CD"] = 0, - }, - [380] = { - ["X"] = 18.91, - ["Y"] = 56.02, - ["CD"] = 0, - }, - [381] = { - ["X"] = 20.58, - ["Y"] = 52.54, - ["CD"] = 0, - }, - [382] = { - ["X"] = 20.05, - ["Y"] = 50.86, - ["CD"] = 0, - }, - [383] = { - ["X"] = 22.43, - ["Y"] = 54.14, - ["CD"] = 0, - }, - [384] = { - ["X"] = 23.28, - ["Y"] = 54.2, - ["CD"] = 0, - }, - [385] = { - ["X"] = 26.01, - ["Y"] = 50.3, - ["CD"] = 0, - }, - [386] = { - ["X"] = 27.47, - ["Y"] = 49.06, - ["CD"] = 0, - }, - [387] = { - ["X"] = 28.48, - ["Y"] = 47.38, - ["CD"] = 0, - }, - [388] = { - ["X"] = 27.49, - ["Y"] = 43.9, - ["CD"] = 0, - }, - [389] = { - ["X"] = 27.59, - ["Y"] = 41.63, - ["CD"] = 0, - }, - [390] = { - ["X"] = 29.31, - ["Y"] = 38.42, - ["CD"] = 0, - }, - [391] = { - ["X"] = 37.52, - ["Y"] = 25.52, - ["CD"] = 0, - }, - [392] = { - ["X"] = 35.96, - ["Y"] = 27.82, - ["CD"] = 0, - }, - [393] = { - ["X"] = 34.07, - ["Y"] = 31.49, - ["CD"] = 0, - }, - [394] = { - ["X"] = 35.03, - ["Y"] = 31.58, - ["CD"] = 0, - }, - [395] = { - ["X"] = 34.02, - ["Y"] = 33.22, - ["CD"] = 0, - }, - [396] = { - ["X"] = 33.82, - ["Y"] = 34.84, - ["CD"] = 0, - }, - [397] = { - ["X"] = 34.21, - ["Y"] = 37.6, - ["CD"] = 0, - }, - [398] = { - ["X"] = 47.11, - ["Y"] = 38.8, - ["CD"] = 0, - }, - [399] = { - ["X"] = 44.32, - ["Y"] = 40.46, - ["CD"] = 0, - }, - [400] = { - ["X"] = 42.59, - ["Y"] = 42.28, - ["CD"] = 0, - }, - [401] = { - ["X"] = 42.94, - ["Y"] = 42.27, - ["CD"] = 0, - }, - [402] = { - ["X"] = 45.1, - ["Y"] = 42.16, - ["CD"] = 0, - }, - [403] = { - ["X"] = 46.25, - ["Y"] = 43.49, - ["CD"] = 0, - }, - [404] = { - ["X"] = 45.88, - ["Y"] = 45.2, - ["CD"] = 0, - }, - [405] = { - ["X"] = 45.17, - ["Y"] = 46.78, - ["CD"] = 0, - }, - [406] = { - ["X"] = 43.62, - ["Y"] = 46.21, - ["CD"] = 0, - }, - [407] = { - ["X"] = 43.43, - ["Y"] = 47.27, - ["CD"] = 0, - }, - [408] = { - ["X"] = 43, - ["Y"] = 47.82, - ["CD"] = 0, - }, - [409] = { - ["X"] = 41.94, - ["Y"] = 46.63, - ["CD"] = 0, - }, - [410] = { - ["X"] = 40.91, - ["Y"] = 47.21, - ["CD"] = 0, - }, - [411] = { - ["X"] = 39.44, - ["Y"] = 47.72, - ["CD"] = 0, - }, - [412] = { - ["X"] = 36.48, - ["Y"] = 48.68, - ["CD"] = 0, - }, - [413] = { - ["X"] = 35.38, - ["Y"] = 46.59, - ["CD"] = 0, - }, - [414] = { - ["X"] = 35.17, - ["Y"] = 45.4, - ["CD"] = 0, - }, - [415] = { - ["X"] = 39.19, - ["Y"] = 38.05, - ["CD"] = 0, - }, - [416] = { - ["X"] = 41.12, - ["Y"] = 37.99, - ["CD"] = 0, - }, - [417] = { - ["X"] = 40.16, - ["Y"] = 36.83, - ["CD"] = 0, - }, - [418] = { - ["X"] = 39.98, - ["Y"] = 39.7, - ["CD"] = 0, - }, - [419] = { - ["X"] = 38.39, - ["Y"] = 40.1, - ["CD"] = 0, - }, - [420] = { - ["X"] = 37.24, - ["Y"] = 41.92, - ["CD"] = 0, - }, - [421] = { - ["X"] = 36.93, - ["Y"] = 43.94, - ["CD"] = 0, - }, - [422] = { - ["X"] = 36.15, - ["Y"] = 43.84, - ["CD"] = 0, - }, - [423] = { - ["X"] = 36.94, - ["Y"] = 44.84, - ["CD"] = 0, - }, - [424] = { - ["X"] = 38.61, - ["Y"] = 47.11, - ["CD"] = 0, - }, - [425] = { - ["X"] = 37.74, - ["Y"] = 48.57, - ["CD"] = 0, - }, - [426] = { - ["X"] = 38.21, - ["Y"] = 51.02, - ["CD"] = 0, - }, - [427] = { - ["X"] = 37.57, - ["Y"] = 51.13, - ["CD"] = 0, - }, - [428] = { - ["X"] = 34.62, - ["Y"] = 56.53, - ["CD"] = 0, - }, - [429] = { - ["X"] = 33.91, - ["Y"] = 54.15, - ["CD"] = 0, - }, - [430] = { - ["X"] = 35.96, - ["Y"] = 51.61, - ["CD"] = 0, - }, - [431] = { - ["X"] = 35.55, - ["Y"] = 61.86, - ["CD"] = 0, - }, - [432] = { - ["X"] = 68.25, - ["Y"] = 61.21, - ["CD"] = 0, - }, -} -aura_env.cooldown = 600 -aura_env.wipeDistance = 50 -aura_env.angle = 0 -aura_env.hyp = 0 -aura_env.GetClosestHerb = function() - aura_env.minID = { - ["X"] = 0, - ["Y"] = 0, - ["D"] = 1000, - ["ID"] = 0, - } - local pX = GetPlayerMapPosition("player") or 0 - local pY = select(2, GetPlayerMapPosition("player")) or 0 - pX, pY = pX * 100, pY * 100 - for k, v in ipairs(aura_env.herbs) do - local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] - if cd == 0 then - local X, Y = pX - hX, pY - hY - local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) - if hyp < aura_env.minID["D"] then - aura_env.minID["X"] = hX - aura_env.minID["Y"] = hY - aura_env.minID["D"] = hyp - aura_env.minID["ID"] = k - end - end - end - return aura_env.minID["ID"] -end +aura_env.herbs = { + [1] = { + ["X"] = 67.25, + ["Y"] = 73.74, + ["CD"] = 0, + }, + [2] = { + ["X"] = 68.53, + ["Y"] = 73.25, + ["CD"] = 0, + }, + [3] = { + ["X"] = 69.34, + ["Y"] = 73.84, + ["CD"] = 0, + }, + [4] = { + ["X"] = 62.86, + ["Y"] = 51.94, + ["CD"] = 0, + }, + [5] = { + ["X"] = 63.66, + ["Y"] = 50.43, + ["CD"] = 0, + }, + [6] = { + ["X"] = 65.41, + ["Y"] = 50.69, + ["CD"] = 0, + }, + [7] = { + ["X"] = 64.95, + ["Y"] = 51.87, + ["CD"] = 0, + }, + [8] = { + ["X"] = 64.6, + ["Y"] = 54.88, + ["CD"] = 0, + }, + [9] = { + ["X"] = 52.44, + ["Y"] = 43.72, + ["CD"] = 0, + }, + [10] = { + ["X"] = 51.89, + ["Y"] = 42.38, + ["CD"] = 0, + }, + [11] = { + ["X"] = 50.37, + ["Y"] = 42.54, + ["CD"] = 0, + }, + [12] = { + ["X"] = 49.81, + ["Y"] = 41.96, + ["CD"] = 0, + }, + [13] = { + ["X"] = 49.12, + ["Y"] = 40.6, + ["CD"] = 0, + }, + [14] = { + ["X"] = 48.34, + ["Y"] = 39.21, + ["CD"] = 0, + }, + [15] = { + ["X"] = 48.02, + ["Y"] = 36.6, + ["CD"] = 0, + }, + [16] = { + ["X"] = 46.86, + ["Y"] = 36.72, + ["CD"] = 0, + }, + [17] = { + ["X"] = 46.75, + ["Y"] = 34.53, + ["CD"] = 0, + }, + [18] = { + ["X"] = 25.94, + ["Y"] = 28.99, + ["CD"] = 0, + }, + [19] = { + ["X"] = 29.48, + ["Y"] = 25.3, + ["CD"] = 0, + }, + [20] = { + ["X"] = 28.4, + ["Y"] = 25.56, + ["CD"] = 0, + }, + [21] = { + ["X"] = 28.51, + ["Y"] = 23.82, + ["CD"] = 0, + }, + [22] = { + ["X"] = 29.61, + ["Y"] = 22.79, + ["CD"] = 0, + }, + [23] = { + ["X"] = 29.75, + ["Y"] = 21.84, + ["CD"] = 0, + }, + [24] = { + ["X"] = 26.43, + ["Y"] = 10.9, + ["CD"] = 0, + }, + [25] = { + ["X"] = 25.97, + ["Y"] = 12.48, + ["CD"] = 0, + }, + [26] = { + ["X"] = 25.9, + ["Y"] = 15.81, + ["CD"] = 0, + }, + [27] = { + ["X"] = 25.73, + ["Y"] = 16.64, + ["CD"] = 0, + }, + [28] = { + ["X"] = 25.45, + ["Y"] = 17.29, + ["CD"] = 0, + }, + [29] = { + ["X"] = 25.4, + ["Y"] = 18.4, + ["CD"] = 0, + }, + [30] = { + ["X"] = 25.26, + ["Y"] = 19.79, + ["CD"] = 0, + }, + [31] = { + ["X"] = 26.03, + ["Y"] = 24.44, + ["CD"] = 0, + }, + [32] = { + ["X"] = 26.04, + ["Y"] = 23.22, + ["CD"] = 0, + }, + [33] = { + ["X"] = 24.19, + ["Y"] = 23.27, + ["CD"] = 0, + }, + [34] = { + ["X"] = 24.28, + ["Y"] = 24.89, + ["CD"] = 0, + }, + [35] = { + ["X"] = 24.47, + ["Y"] = 25.24, + ["CD"] = 0, + }, + [36] = { + ["X"] = 24.46, + ["Y"] = 26.17, + ["CD"] = 0, + }, + [37] = { + ["X"] = 24.98, + ["Y"] = 27.02, + ["CD"] = 0, + }, + [38] = { + ["X"] = 24.82, + ["Y"] = 27.95, + ["CD"] = 0, + }, + [39] = { + ["X"] = 24.87, + ["Y"] = 29.34, + ["CD"] = 0, + }, + [40] = { + ["X"] = 24.49, + ["Y"] = 30.19, + ["CD"] = 0, + }, + [41] = { + ["X"] = 23.53, + ["Y"] = 30.88, + ["CD"] = 0, + }, + [42] = { + ["X"] = 23.17, + ["Y"] = 31.72, + ["CD"] = 0, + }, + [43] = { + ["X"] = 22.88, + ["Y"] = 32.62, + ["CD"] = 0, + }, + [44] = { + ["X"] = 21.65, + ["Y"] = 33.2, + ["CD"] = 0, + }, + [45] = { + ["X"] = 19.95, + ["Y"] = 33.28, + ["CD"] = 0, + }, + [46] = { + ["X"] = 21.16, + ["Y"] = 34.77, + ["CD"] = 0, + }, + [47] = { + ["X"] = 22.35, + ["Y"] = 34.03, + ["CD"] = 0, + }, + [48] = { + ["X"] = 31.87, + ["Y"] = 52.38, + ["CD"] = 0, + }, + [49] = { + ["X"] = 30.31, + ["Y"] = 53, + ["CD"] = 0, + }, + [50] = { + ["X"] = 28.27, + ["Y"] = 53.65, + ["CD"] = 0, + }, + [51] = { + ["X"] = 27.54, + ["Y"] = 53.51, + ["CD"] = 0, + }, + [52] = { + ["X"] = 27.6, + ["Y"] = 52.81, + ["CD"] = 0, + }, + [53] = { + ["X"] = 26.91, + ["Y"] = 53.27, + ["CD"] = 0, + }, + [54] = { + ["X"] = 25.45, + ["Y"] = 54.29, + ["CD"] = 0, + }, + [55] = { + ["X"] = 25.36, + ["Y"] = 53.45, + ["CD"] = 0, + }, + [56] = { + ["X"] = 22.29, + ["Y"] = 54.37, + ["CD"] = 0, + }, + [57] = { + ["X"] = 23.11, + ["Y"] = 55.13, + ["CD"] = 0, + }, + [58] = { + ["X"] = 24.34, + ["Y"] = 55.09, + ["CD"] = 0, + }, + [59] = { + ["X"] = 24.03, + ["Y"] = 55.88, + ["CD"] = 0, + }, + [60] = { + ["X"] = 24.95, + ["Y"] = 59.85, + ["CD"] = 0, + }, + [61] = { + ["X"] = 24.84, + ["Y"] = 61.41, + ["CD"] = 0, + }, + [62] = { + ["X"] = 34.59, + ["Y"] = 69.79, + ["CD"] = 0, + }, + [63] = { + ["X"] = 33.59, + ["Y"] = 68.41, + ["CD"] = 0, + }, + [64] = { + ["X"] = 31.96, + ["Y"] = 69.06, + ["CD"] = 0, + }, + [65] = { + ["X"] = 29.87, + ["Y"] = 65.93, + ["CD"] = 0, + }, + [66] = { + ["X"] = 30.95, + ["Y"] = 64.82, + ["CD"] = 0, + }, + [67] = { + ["X"] = 32.43, + ["Y"] = 62.85, + ["CD"] = 0, + }, + [68] = { + ["X"] = 32.7, + ["Y"] = 61.83, + ["CD"] = 0, + }, + [69] = { + ["X"] = 33.05, + ["Y"] = 57.88, + ["CD"] = 0, + }, + [70] = { + ["X"] = 32.43, + ["Y"] = 56.41, + ["CD"] = 0, + }, + [71] = { + ["X"] = 33.85, + ["Y"] = 54.08, + ["CD"] = 0, + }, + [72] = { + ["X"] = 32.68, + ["Y"] = 51.4, + ["CD"] = 0, + }, + [73] = { + ["X"] = 33.07, + ["Y"] = 48.65, + ["CD"] = 0, + }, + [74] = { + ["X"] = 34.22, + ["Y"] = 47.52, + ["CD"] = 0, + }, + [75] = { + ["X"] = 35.38, + ["Y"] = 49.24, + ["CD"] = 0, + }, + [76] = { + ["X"] = 36.3, + ["Y"] = 49.81, + ["CD"] = 0, + }, + [77] = { + ["X"] = 37.23, + ["Y"] = 53.49, + ["CD"] = 0, + }, + [78] = { + ["X"] = 37.55, + ["Y"] = 54.77, + ["CD"] = 0, + }, + [79] = { + ["X"] = 37.48, + ["Y"] = 55.75, + ["CD"] = 0, + }, + [80] = { + ["X"] = 39.14, + ["Y"] = 59.76, + ["CD"] = 0, + }, + [81] = { + ["X"] = 39.01, + ["Y"] = 58.93, + ["CD"] = 0, + }, + [82] = { + ["X"] = 38.69, + ["Y"] = 58.31, + ["CD"] = 0, + }, + [83] = { + ["X"] = 38.55, + ["Y"] = 57.23, + ["CD"] = 0, + }, + [84] = { + ["X"] = 36.59, + ["Y"] = 56.72, + ["CD"] = 0, + }, + [85] = { + ["X"] = 34.3, + ["Y"] = 55.25, + ["CD"] = 0, + }, + [86] = { + ["X"] = 26.1, + ["Y"] = 14.77, + ["CD"] = 0, + }, + [87] = { + ["X"] = 45.95, + ["Y"] = 29.55, + ["CD"] = 0, + }, + [88] = { + ["X"] = 29.47, + ["Y"] = 31.25, + ["CD"] = 0, + }, + [89] = { + ["X"] = 28.15, + ["Y"] = 37.03, + ["CD"] = 0, + }, + [90] = { + ["X"] = 26.89, + ["Y"] = 35.94, + ["CD"] = 0, + }, + [91] = { + ["X"] = 26.1, + ["Y"] = 38.55, + ["CD"] = 0, + }, + [92] = { + ["X"] = 24.92, + ["Y"] = 42.79, + ["CD"] = 0, + }, + [93] = { + ["X"] = 24.22, + ["Y"] = 45.41, + ["CD"] = 0, + }, + [94] = { + ["X"] = 23.88, + ["Y"] = 48.95, + ["CD"] = 0, + }, + [95] = { + ["X"] = 25.79, + ["Y"] = 49.81, + ["CD"] = 0, + }, + [96] = { + ["X"] = 26.82, + ["Y"] = 46.94, + ["CD"] = 0, + }, + [97] = { + ["X"] = 31.6, + ["Y"] = 49.24, + ["CD"] = 0, + }, + [98] = { + ["X"] = 33.02, + ["Y"] = 46.44, + ["CD"] = 0, + }, + [99] = { + ["X"] = 28.44, + ["Y"] = 43.1, + ["CD"] = 0, + }, + [100] = { + ["X"] = 23.55, + ["Y"] = 48.35, + ["CD"] = 0, + }, + [101] = { + ["X"] = 20.43, + ["Y"] = 52.82, + ["CD"] = 0, + }, + [102] = { + ["X"] = 25.81, + ["Y"] = 52.62, + ["CD"] = 0, + }, + [103] = { + ["X"] = 26.13, + ["Y"] = 55.42, + ["CD"] = 0, + }, + [104] = { + ["X"] = 26.22, + ["Y"] = 53.16, + ["CD"] = 0, + }, + [105] = { + ["X"] = 24.67, + ["Y"] = 51.58, + ["CD"] = 0, + }, + [106] = { + ["X"] = 24.61, + ["Y"] = 47.73, + ["CD"] = 0, + }, + [107] = { + ["X"] = 26.03, + ["Y"] = 47.65, + ["CD"] = 0, + }, + [108] = { + ["X"] = 27.94, + ["Y"] = 47.19, + ["CD"] = 0, + }, + [109] = { + ["X"] = 27.39, + ["Y"] = 44.65, + ["CD"] = 0, + }, + [110] = { + ["X"] = 32.73, + ["Y"] = 43.41, + ["CD"] = 0, + }, + [111] = { + ["X"] = 31.98, + ["Y"] = 47.64, + ["CD"] = 0, + }, + [112] = { + ["X"] = 32.51, + ["Y"] = 38.82, + ["CD"] = 0, + }, + [113] = { + ["X"] = 31.03, + ["Y"] = 38.81, + ["CD"] = 0, + }, + [114] = { + ["X"] = 30.59, + ["Y"] = 39.67, + ["CD"] = 0, + }, + [115] = { + ["X"] = 30.03, + ["Y"] = 40.09, + ["CD"] = 0, + }, + [116] = { + ["X"] = 29.63, + ["Y"] = 41.35, + ["CD"] = 0, + }, + [117] = { + ["X"] = 28.81, + ["Y"] = 43.12, + ["CD"] = 0, + }, + [118] = { + ["X"] = 30.08, + ["Y"] = 45.64, + ["CD"] = 0, + }, + [119] = { + ["X"] = 30.28, + ["Y"] = 48.27, + ["CD"] = 0, + }, + [120] = { + ["X"] = 29.93, + ["Y"] = 47.4, + ["CD"] = 0, + }, + [121] = { + ["X"] = 28.94, + ["Y"] = 47.14, + ["CD"] = 0, + }, + [122] = { + ["X"] = 27.59, + ["Y"] = 45.29, + ["CD"] = 0, + }, + [123] = { + ["X"] = 30.01, + ["Y"] = 44.34, + ["CD"] = 0, + }, + [124] = { + ["X"] = 32.22, + ["Y"] = 39.24, + ["CD"] = 0, + }, + [125] = { + ["X"] = 31.38, + ["Y"] = 38.07, + ["CD"] = 0, + }, + [126] = { + ["X"] = 32.23, + ["Y"] = 36.98, + ["CD"] = 0, + }, + [127] = { + ["X"] = 31.55, + ["Y"] = 31.57, + ["CD"] = 0, + }, + [128] = { + ["X"] = 30.92, + ["Y"] = 34.67, + ["CD"] = 0, + }, + [129] = { + ["X"] = 47.19, + ["Y"] = 39.83, + ["CD"] = 0, + }, + [130] = { + ["X"] = 50.82, + ["Y"] = 40.62, + ["CD"] = 0, + }, + [131] = { + ["X"] = 48.38, + ["Y"] = 34.1, + ["CD"] = 0, + }, + [132] = { + ["X"] = 45.59, + ["Y"] = 31.09, + ["CD"] = 0, + }, + [133] = { + ["X"] = 43.61, + ["Y"] = 35.49, + ["CD"] = 0, + }, + [134] = { + ["X"] = 35.64, + ["Y"] = 41.64, + ["CD"] = 0, + }, + [135] = { + ["X"] = 34.44, + ["Y"] = 43, + ["CD"] = 0, + }, + [136] = { + ["X"] = 47.66, + ["Y"] = 49.41, + ["CD"] = 0, + }, + [137] = { + ["X"] = 48.82, + ["Y"] = 47.86, + ["CD"] = 0, + }, + [138] = { + ["X"] = 44.12, + ["Y"] = 47.05, + ["CD"] = 0, + }, + [139] = { + ["X"] = 43.09, + ["Y"] = 48.75, + ["CD"] = 0, + }, + [140] = { + ["X"] = 40.23, + ["Y"] = 47.62, + ["CD"] = 0, + }, + [141] = { + ["X"] = 37.28, + ["Y"] = 50.18, + ["CD"] = 0, + }, + [142] = { + ["X"] = 36.33, + ["Y"] = 56.29, + ["CD"] = 0, + }, + [143] = { + ["X"] = 38.4, + ["Y"] = 56.36, + ["CD"] = 0, + }, + [144] = { + ["X"] = 40.05, + ["Y"] = 56.12, + ["CD"] = 0, + }, + [145] = { + ["X"] = 39.51, + ["Y"] = 57.12, + ["CD"] = 0, + }, + [146] = { + ["X"] = 39.43, + ["Y"] = 54.75, + ["CD"] = 0, + }, + [147] = { + ["X"] = 38.8, + ["Y"] = 51.65, + ["CD"] = 0, + }, + [148] = { + ["X"] = 38.74, + ["Y"] = 53.13, + ["CD"] = 0, + }, + [149] = { + ["X"] = 38.11, + ["Y"] = 53.06, + ["CD"] = 0, + }, + [150] = { + ["X"] = 36.71, + ["Y"] = 53.46, + ["CD"] = 0, + }, + [151] = { + ["X"] = 36.17, + ["Y"] = 53.81, + ["CD"] = 0, + }, + [152] = { + ["X"] = 34.25, + ["Y"] = 55.15, + ["CD"] = 0, + }, + [153] = { + ["X"] = 35.35, + ["Y"] = 54.5, + ["CD"] = 0, + }, + [154] = { + ["X"] = 35.27, + ["Y"] = 52.65, + ["CD"] = 0, + }, + [155] = { + ["X"] = 32.47, + ["Y"] = 45.01, + ["CD"] = 0, + }, + [156] = { + ["X"] = 34.72, + ["Y"] = 47.72, + ["CD"] = 0, + }, + [157] = { + ["X"] = 36.55, + ["Y"] = 51.57, + ["CD"] = 0, + }, + [158] = { + ["X"] = 70.42, + ["Y"] = 64.46, + ["CD"] = 0, + }, + [159] = { + ["X"] = 64.84, + ["Y"] = 55.38, + ["CD"] = 0, + }, + [160] = { + ["X"] = 44.86, + ["Y"] = 48.82, + ["CD"] = 0, + }, + [161] = { + ["X"] = 29.45, + ["Y"] = 77.91, + ["CD"] = 0, + }, + [162] = { + ["X"] = 29.8, + ["Y"] = 70.65, + ["CD"] = 0, + }, + [163] = { + ["X"] = 44.01, + ["Y"] = 41.2, + ["CD"] = 0, + }, + [164] = { + ["X"] = 41.54, + ["Y"] = 40.12, + ["CD"] = 0, + }, + [165] = { + ["X"] = 20.2, + ["Y"] = 53.96, + ["CD"] = 0, + }, + [166] = { + ["X"] = 31.44, + ["Y"] = 29.22, + ["CD"] = 0, + }, + [167] = { + ["X"] = 15.67, + ["Y"] = 37.13, + ["CD"] = 0, + }, + [168] = { + ["X"] = 20.97, + ["Y"] = 15.47, + ["CD"] = 0, + }, + [169] = { + ["X"] = 27.52, + ["Y"] = 9.17, + ["CD"] = 0, + }, + [170] = { + ["X"] = 25.93, + ["Y"] = 25.58, + ["CD"] = 0, + }, + [171] = { + ["X"] = 34.07, + ["Y"] = 50.83, + ["CD"] = 0, + }, + [172] = { + ["X"] = 37.23, + ["Y"] = 54.85, + ["CD"] = 0, + }, + [173] = { + ["X"] = 34.77, + ["Y"] = 58.4, + ["CD"] = 0, + }, + [174] = { + ["X"] = 39.56, + ["Y"] = 79.48, + ["CD"] = 0, + }, + [175] = { + ["X"] = 66.46, + ["Y"] = 57.51, + ["CD"] = 0, + }, + [176] = { + ["X"] = 66.74, + ["Y"] = 66.02, + ["CD"] = 0, + }, + [177] = { + ["X"] = 71.94, + ["Y"] = 68.81, + ["CD"] = 0, + }, + [178] = { + ["X"] = 69.51, + ["Y"] = 67.83, + ["CD"] = 0, + }, + [179] = { + ["X"] = 69.31, + ["Y"] = 50.72, + ["CD"] = 0, + }, + [180] = { + ["X"] = 63.31, + ["Y"] = 53.33, + ["CD"] = 0, + }, + [181] = { + ["X"] = 63.96, + ["Y"] = 50.46, + ["CD"] = 0, + }, + [182] = { + ["X"] = 65.37, + ["Y"] = 43.82, + ["CD"] = 0, + }, + [183] = { + ["X"] = 63.15, + ["Y"] = 35.17, + ["CD"] = 0, + }, + [184] = { + ["X"] = 60.59, + ["Y"] = 44.44, + ["CD"] = 0, + }, + [185] = { + ["X"] = 35.55, + ["Y"] = 61.86, + ["CD"] = 0, + }, + [186] = { + ["X"] = 40.1, + ["Y"] = 53.5, + ["CD"] = 0, + }, + [187] = { + ["X"] = 47.46, + ["Y"] = 47.36, + ["CD"] = 0, + }, + [188] = { + ["X"] = 49.48, + ["Y"] = 39.04, + ["CD"] = 0, + }, + [189] = { + ["X"] = 35.79, + ["Y"] = 42.74, + ["CD"] = 0, + }, + [190] = { + ["X"] = 33.35, + ["Y"] = 45.99, + ["CD"] = 0, + }, + [191] = { + ["X"] = 30.25, + ["Y"] = 43.1, + ["CD"] = 0, + }, + [192] = { + ["X"] = 28.76, + ["Y"] = 48.41, + ["CD"] = 0, + }, + [193] = { + ["X"] = 30.18, + ["Y"] = 65.31, + ["CD"] = 0, + }, + [194] = { + ["X"] = 32.64, + ["Y"] = 74.92, + ["CD"] = 0, + }, + [195] = { + ["X"] = 35.41, + ["Y"] = 80.33, + ["CD"] = 0, + }, + [196] = { + ["X"] = 32.08, + ["Y"] = 81.08, + ["CD"] = 0, + }, + [197] = { + ["X"] = 30.03, + ["Y"] = 82.65, + ["CD"] = 0, + }, + [198] = { + ["X"] = 27.52, + ["Y"] = 67.32, + ["CD"] = 0, + }, + [199] = { + ["X"] = 26.24, + ["Y"] = 69.06, + ["CD"] = 0, + }, + [200] = { + ["X"] = 24.97, + ["Y"] = 61.8, + ["CD"] = 0, + }, + [201] = { + ["X"] = 25.91, + ["Y"] = 58.23, + ["CD"] = 0, + }, + [202] = { + ["X"] = 34.69, + ["Y"] = 39.51, + ["CD"] = 0, + }, + [203] = { + ["X"] = 37.45, + ["Y"] = 38.69, + ["CD"] = 0, + }, + [204] = { + ["X"] = 45.96, + ["Y"] = 36.33, + ["CD"] = 0, + }, + [205] = { + ["X"] = 46.54, + ["Y"] = 33.81, + ["CD"] = 0, + }, + [206] = { + ["X"] = 37.6, + ["Y"] = 31.35, + ["CD"] = 0, + }, + [207] = { + ["X"] = 24.73, + ["Y"] = 54.01, + ["CD"] = 0, + }, + [208] = { + ["X"] = 21.68, + ["Y"] = 47.55, + ["CD"] = 0, + }, + [209] = { + ["X"] = 23.58, + ["Y"] = 50.81, + ["CD"] = 0, + }, + [210] = { + ["X"] = 25.01, + ["Y"] = 35.96, + ["CD"] = 0, + }, + [211] = { + ["X"] = 25.25, + ["Y"] = 37.61, + ["CD"] = 0, + }, + [212] = { + ["X"] = 41.53, + ["Y"] = 17.47, + ["CD"] = 0, + }, + [213] = { + ["X"] = 27.84, + ["Y"] = 15.94, + ["CD"] = 0, + }, + [214] = { + ["X"] = 44.1, + ["Y"] = 24.69, + ["CD"] = 0, + }, + [215] = { + ["X"] = 41.45, + ["Y"] = 24.26, + ["CD"] = 0, + }, + [216] = { + ["X"] = 40.28, + ["Y"] = 27.75, + ["CD"] = 0, + }, + [217] = { + ["X"] = 37.57, + ["Y"] = 27.05, + ["CD"] = 0, + }, + [218] = { + ["X"] = 33.71, + ["Y"] = 31.04, + ["CD"] = 0, + }, + [219] = { + ["X"] = 28.85, + ["Y"] = 29.61, + ["CD"] = 0, + }, + [220] = { + ["X"] = 27.2, + ["Y"] = 29.85, + ["CD"] = 0, + }, + [221] = { + ["X"] = 23.31, + ["Y"] = 34.44, + ["CD"] = 0, + }, + [222] = { + ["X"] = 15.86, + ["Y"] = 43.89, + ["CD"] = 0, + }, + [223] = { + ["X"] = 16.17, + ["Y"] = 39.56, + ["CD"] = 0, + }, + [224] = { + ["X"] = 16.88, + ["Y"] = 28.87, + ["CD"] = 0, + }, + [225] = { + ["X"] = 19.56, + ["Y"] = 18.08, + ["CD"] = 0, + }, + [226] = { + ["X"] = 19.99, + ["Y"] = 18.12, + ["CD"] = 0, + }, + [227] = { + ["X"] = 49.54, + ["Y"] = 43.54, + ["CD"] = 0, + }, + [228] = { + ["X"] = 55.47, + ["Y"] = 40.72, + ["CD"] = 0, + }, + [229] = { + ["X"] = 57.64, + ["Y"] = 37.85, + ["CD"] = 0, + }, + [230] = { + ["X"] = 62.48, + ["Y"] = 57.85, + ["CD"] = 0, + }, + [231] = { + ["X"] = 63.78, + ["Y"] = 60.52, + ["CD"] = 0, + }, + [232] = { + ["X"] = 50.61, + ["Y"] = 60.74, + ["CD"] = 0, + }, + [233] = { + ["X"] = 42.63, + ["Y"] = 34.55, + ["CD"] = 0, + }, + [234] = { + ["X"] = 43.99, + ["Y"] = 33.06, + ["CD"] = 0, + }, + [235] = { + ["X"] = 43.05, + ["Y"] = 31.79, + ["CD"] = 0, + }, + [236] = { + ["X"] = 43.99, + ["Y"] = 31.16, + ["CD"] = 0, + }, + [237] = { + ["X"] = 26.64, + ["Y"] = 23.15, + ["CD"] = 0, + }, + [238] = { + ["X"] = 28.32, + ["Y"] = 23.6, + ["CD"] = 0, + }, + [239] = { + ["X"] = 28.88, + ["Y"] = 24.6, + ["CD"] = 0, + }, + [240] = { + ["X"] = 33.61, + ["Y"] = 36.03, + ["CD"] = 0, + }, + [241] = { + ["X"] = 30.99, + ["Y"] = 39.39, + ["CD"] = 0, + }, + [242] = { + ["X"] = 26.18, + ["Y"] = 43.14, + ["CD"] = 0, + }, + [243] = { + ["X"] = 22.71, + ["Y"] = 45.34, + ["CD"] = 0, + }, + [244] = { + ["X"] = 22.81, + ["Y"] = 49.38, + ["CD"] = 0, + }, + [245] = { + ["X"] = 21.55, + ["Y"] = 50.1, + ["CD"] = 0, + }, + [246] = { + ["X"] = 22.18, + ["Y"] = 52.8, + ["CD"] = 0, + }, + [247] = { + ["X"] = 21.47, + ["Y"] = 56.31, + ["CD"] = 0, + }, + [248] = { + ["X"] = 20.22, + ["Y"] = 60.26, + ["CD"] = 0, + }, + [249] = { + ["X"] = 24.53, + ["Y"] = 60.54, + ["CD"] = 0, + }, + [250] = { + ["X"] = 24.59, + ["Y"] = 62.52, + ["CD"] = 0, + }, + [251] = { + ["X"] = 26.87, + ["Y"] = 72.95, + ["CD"] = 0, + }, + [252] = { + ["X"] = 27.78, + ["Y"] = 72.71, + ["CD"] = 0, + }, + [253] = { + ["X"] = 29.27, + ["Y"] = 71.58, + ["CD"] = 0, + }, + [254] = { + ["X"] = 30.54, + ["Y"] = 76.06, + ["CD"] = 0, + }, + [255] = { + ["X"] = 32.41, + ["Y"] = 79.52, + ["CD"] = 0, + }, + [256] = { + ["X"] = 32.6, + ["Y"] = 74.97, + ["CD"] = 0, + }, + [257] = { + ["X"] = 33.1, + ["Y"] = 72.68, + ["CD"] = 0, + }, + [258] = { + ["X"] = 34.44, + ["Y"] = 74.65, + ["CD"] = 0, + }, + [259] = { + ["X"] = 34.74, + ["Y"] = 82.73, + ["CD"] = 0, + }, + [260] = { + ["X"] = 29.22, + ["Y"] = 78.87, + ["CD"] = 0, + }, + [261] = { + ["X"] = 31.67, + ["Y"] = 84.04, + ["CD"] = 0, + }, + [262] = { + ["X"] = 33.47, + ["Y"] = 80.66, + ["CD"] = 0, + }, + [263] = { + ["X"] = 36.84, + ["Y"] = 81.04, + ["CD"] = 0, + }, + [264] = { + ["X"] = 33.58, + ["Y"] = 79.03, + ["CD"] = 0, + }, + [265] = { + ["X"] = 31.74, + ["Y"] = 76.73, + ["CD"] = 0, + }, + [266] = { + ["X"] = 31.59, + ["Y"] = 80.8, + ["CD"] = 0, + }, + [267] = { + ["X"] = 29.41, + ["Y"] = 84.91, + ["CD"] = 0, + }, + [268] = { + ["X"] = 30.69, + ["Y"] = 79.72, + ["CD"] = 0, + }, + [269] = { + ["X"] = 31.6, + ["Y"] = 78.17, + ["CD"] = 0, + }, + [270] = { + ["X"] = 33.91, + ["Y"] = 77.78, + ["CD"] = 0, + }, + [271] = { + ["X"] = 25.75, + ["Y"] = 60.01, + ["CD"] = 0, + }, + [272] = { + ["X"] = 25.14, + ["Y"] = 63.26, + ["CD"] = 0, + }, + [273] = { + ["X"] = 30.02, + ["Y"] = 68.21, + ["CD"] = 0, + }, + [274] = { + ["X"] = 32.72, + ["Y"] = 69.46, + ["CD"] = 0, + }, + [275] = { + ["X"] = 27.93, + ["Y"] = 55.27, + ["CD"] = 0, + }, + [276] = { + ["X"] = 28.97, + ["Y"] = 53.34, + ["CD"] = 0, + }, + [277] = { + ["X"] = 30.03, + ["Y"] = 54.69, + ["CD"] = 0, + }, + [278] = { + ["X"] = 34.28, + ["Y"] = 22.25, + ["CD"] = 0, + }, + [279] = { + ["X"] = 36.44, + ["Y"] = 21.81, + ["CD"] = 0, + }, + [280] = { + ["X"] = 36.55, + ["Y"] = 17.27, + ["CD"] = 0, + }, + [281] = { + ["X"] = 34.94, + ["Y"] = 18.5, + ["CD"] = 0, + }, + [282] = { + ["X"] = 33.19, + ["Y"] = 20.08, + ["CD"] = 0, + }, + [283] = { + ["X"] = 32.41, + ["Y"] = 22.05, + ["CD"] = 0, + }, + [284] = { + ["X"] = 31.76, + ["Y"] = 21.01, + ["CD"] = 0, + }, + [285] = { + ["X"] = 30.89, + ["Y"] = 19.81, + ["CD"] = 0, + }, + [286] = { + ["X"] = 29.46, + ["Y"] = 17.67, + ["CD"] = 0, + }, + [287] = { + ["X"] = 27.11, + ["Y"] = 15.7, + ["CD"] = 0, + }, + [288] = { + ["X"] = 26.68, + ["Y"] = 19.69, + ["CD"] = 0, + }, + [289] = { + ["X"] = 28.25, + ["Y"] = 17.56, + ["CD"] = 0, + }, + [290] = { + ["X"] = 30.34, + ["Y"] = 18.98, + ["CD"] = 0, + }, + [291] = { + ["X"] = 31.53, + ["Y"] = 16.08, + ["CD"] = 0, + }, + [292] = { + ["X"] = 31.54, + ["Y"] = 19.45, + ["CD"] = 0, + }, + [293] = { + ["X"] = 32.72, + ["Y"] = 25.06, + ["CD"] = 0, + }, + [294] = { + ["X"] = 34.2, + ["Y"] = 24.4, + ["CD"] = 0, + }, + [295] = { + ["X"] = 34.04, + ["Y"] = 27.23, + ["CD"] = 0, + }, + [296] = { + ["X"] = 32.99, + ["Y"] = 38.64, + ["CD"] = 0, + }, + [297] = { + ["X"] = 31.15, + ["Y"] = 38.61, + ["CD"] = 0, + }, + [298] = { + ["X"] = 32.04, + ["Y"] = 39.74, + ["CD"] = 0, + }, + [299] = { + ["X"] = 32.65, + ["Y"] = 41.89, + ["CD"] = 0, + }, + [300] = { + ["X"] = 33.1, + ["Y"] = 42.99, + ["CD"] = 0, + }, + [301] = { + ["X"] = 36.86, + ["Y"] = 46.71, + ["CD"] = 0, + }, + [302] = { + ["X"] = 37.81, + ["Y"] = 49.74, + ["CD"] = 0, + }, + [303] = { + ["X"] = 42.95, + ["Y"] = 52.52, + ["CD"] = 0, + }, + [304] = { + ["X"] = 42.35, + ["Y"] = 48.81, + ["CD"] = 0, + }, + [305] = { + ["X"] = 69.72, + ["Y"] = 64.19, + ["CD"] = 0, + }, + [306] = { + ["X"] = 68.37, + ["Y"] = 61.74, + ["CD"] = 0, + }, + [307] = { + ["X"] = 69.51, + ["Y"] = 65.5, + ["CD"] = 0, + }, + [308] = { + ["X"] = 70.29, + ["Y"] = 64.48, + ["CD"] = 0, + }, + [309] = { + ["X"] = 69.13, + ["Y"] = 64.23, + ["CD"] = 0, + }, + [310] = { + ["X"] = 69.15, + ["Y"] = 60.1, + ["CD"] = 0, + }, + [311] = { + ["X"] = 67.97, + ["Y"] = 58.14, + ["CD"] = 0, + }, + [312] = { + ["X"] = 67.14, + ["Y"] = 53.01, + ["CD"] = 0, + }, + [313] = { + ["X"] = 73.12, + ["Y"] = 48.65, + ["CD"] = 0, + }, + [314] = { + ["X"] = 73.12, + ["Y"] = 47.89, + ["CD"] = 0, + }, + [315] = { + ["X"] = 72.19, + ["Y"] = 46.38, + ["CD"] = 0, + }, + [316] = { + ["X"] = 70.51, + ["Y"] = 46.32, + ["CD"] = 0, + }, + [317] = { + ["X"] = 68.65, + ["Y"] = 46.67, + ["CD"] = 0, + }, + [318] = { + ["X"] = 68.55, + ["Y"] = 51.82, + ["CD"] = 0, + }, + [319] = { + ["X"] = 64.71, + ["Y"] = 51.86, + ["CD"] = 0, + }, + [320] = { + ["X"] = 63.71, + ["Y"] = 48.77, + ["CD"] = 0, + }, + [321] = { + ["X"] = 63.62, + ["Y"] = 47.68, + ["CD"] = 0, + }, + [322] = { + ["X"] = 64.8, + ["Y"] = 46.7, + ["CD"] = 0, + }, + [323] = { + ["X"] = 66.58, + ["Y"] = 45.28, + ["CD"] = 0, + }, + [324] = { + ["X"] = 63.34, + ["Y"] = 33.87, + ["CD"] = 0, + }, + [325] = { + ["X"] = 63.01, + ["Y"] = 34.84, + ["CD"] = 0, + }, + [326] = { + ["X"] = 61.77, + ["Y"] = 39.07, + ["CD"] = 0, + }, + [327] = { + ["X"] = 59.21, + ["Y"] = 41.44, + ["CD"] = 0, + }, + [328] = { + ["X"] = 56.78, + ["Y"] = 42.66, + ["CD"] = 0, + }, + [329] = { + ["X"] = 55.53, + ["Y"] = 47.09, + ["CD"] = 0, + }, + [330] = { + ["X"] = 59.44, + ["Y"] = 47.15, + ["CD"] = 0, + }, + [331] = { + ["X"] = 61.51, + ["Y"] = 51.48, + ["CD"] = 0, + }, + [332] = { + ["X"] = 63.82, + ["Y"] = 52.27, + ["CD"] = 0, + }, + [333] = { + ["X"] = 62, + ["Y"] = 52.91, + ["CD"] = 0, + }, + [334] = { + ["X"] = 61.35, + ["Y"] = 50.51, + ["CD"] = 0, + }, + [335] = { + ["X"] = 61.74, + ["Y"] = 48.03, + ["CD"] = 0, + }, + [336] = { + ["X"] = 58.77, + ["Y"] = 43.45, + ["CD"] = 0, + }, + [337] = { + ["X"] = 58.41, + ["Y"] = 45.39, + ["CD"] = 0, + }, + [338] = { + ["X"] = 54.5, + ["Y"] = 46.97, + ["CD"] = 0, + }, + [339] = { + ["X"] = 55.89, + ["Y"] = 45.23, + ["CD"] = 0, + }, + [340] = { + ["X"] = 56.05, + ["Y"] = 41.79, + ["CD"] = 0, + }, + [341] = { + ["X"] = 57.41, + ["Y"] = 42.15, + ["CD"] = 0, + }, + [342] = { + ["X"] = 57.21, + ["Y"] = 44.41, + ["CD"] = 0, + }, + [343] = { + ["X"] = 57.77, + ["Y"] = 45.14, + ["CD"] = 0, + }, + [344] = { + ["X"] = 59.3, + ["Y"] = 40.64, + ["CD"] = 0, + }, + [345] = { + ["X"] = 60.35, + ["Y"] = 40.73, + ["CD"] = 0, + }, + [346] = { + ["X"] = 61.12, + ["Y"] = 41.76, + ["CD"] = 0, + }, + [347] = { + ["X"] = 31.67, + ["Y"] = 27.07, + ["CD"] = 0, + }, + [348] = { + ["X"] = 30.98, + ["Y"] = 24.72, + ["CD"] = 0, + }, + [349] = { + ["X"] = 29.82, + ["Y"] = 26.4, + ["CD"] = 0, + }, + [350] = { + ["X"] = 27.29, + ["Y"] = 25.93, + ["CD"] = 0, + }, + [351] = { + ["X"] = 26.05, + ["Y"] = 27.85, + ["CD"] = 0, + }, + [352] = { + ["X"] = 26.76, + ["Y"] = 29.56, + ["CD"] = 0, + }, + [353] = { + ["X"] = 28.39, + ["Y"] = 30.88, + ["CD"] = 0, + }, + [354] = { + ["X"] = 28.45, + ["Y"] = 31.37, + ["CD"] = 0, + }, + [355] = { + ["X"] = 29.25, + ["Y"] = 32.11, + ["CD"] = 0, + }, + [356] = { + ["X"] = 29.96, + ["Y"] = 30.84, + ["CD"] = 0, + }, + [357] = { + ["X"] = 32.9, + ["Y"] = 32.82, + ["CD"] = 0, + }, + [358] = { + ["X"] = 31.92, + ["Y"] = 31.74, + ["CD"] = 0, + }, + [359] = { + ["X"] = 30.75, + ["Y"] = 37.27, + ["CD"] = 0, + }, + [360] = { + ["X"] = 31.63, + ["Y"] = 37.6, + ["CD"] = 0, + }, + [361] = { + ["X"] = 27.94, + ["Y"] = 37.72, + ["CD"] = 0, + }, + [362] = { + ["X"] = 28.17, + ["Y"] = 38.49, + ["CD"] = 0, + }, + [363] = { + ["X"] = 26.32, + ["Y"] = 40.44, + ["CD"] = 0, + }, + [364] = { + ["X"] = 24.49, + ["Y"] = 41.81, + ["CD"] = 0, + }, + [365] = { + ["X"] = 18.08, + ["Y"] = 46.61, + ["CD"] = 0, + }, + [366] = { + ["X"] = 17.59, + ["Y"] = 45.09, + ["CD"] = 0, + }, + [367] = { + ["X"] = 18.4, + ["Y"] = 41, + ["CD"] = 0, + }, + [368] = { + ["X"] = 17.48, + ["Y"] = 39.95, + ["CD"] = 0, + }, + [369] = { + ["X"] = 18.65, + ["Y"] = 41.96, + ["CD"] = 0, + }, + [370] = { + ["X"] = 20.95, + ["Y"] = 43.91, + ["CD"] = 0, + }, + [371] = { + ["X"] = 22.97, + ["Y"] = 47.92, + ["CD"] = 0, + }, + [372] = { + ["X"] = 19.09, + ["Y"] = 49.69, + ["CD"] = 0, + }, + [373] = { + ["X"] = 22.03, + ["Y"] = 56.43, + ["CD"] = 0, + }, + [374] = { + ["X"] = 22.31, + ["Y"] = 58.92, + ["CD"] = 0, + }, + [375] = { + ["X"] = 25.31, + ["Y"] = 68.09, + ["CD"] = 0, + }, + [376] = { + ["X"] = 21.62, + ["Y"] = 61.23, + ["CD"] = 0, + }, + [377] = { + ["X"] = 21.35, + ["Y"] = 59.29, + ["CD"] = 0, + }, + [378] = { + ["X"] = 19.87, + ["Y"] = 59.06, + ["CD"] = 0, + }, + [379] = { + ["X"] = 19.27, + ["Y"] = 58.37, + ["CD"] = 0, + }, + [380] = { + ["X"] = 18.91, + ["Y"] = 56.02, + ["CD"] = 0, + }, + [381] = { + ["X"] = 20.58, + ["Y"] = 52.54, + ["CD"] = 0, + }, + [382] = { + ["X"] = 20.05, + ["Y"] = 50.86, + ["CD"] = 0, + }, + [383] = { + ["X"] = 22.43, + ["Y"] = 54.14, + ["CD"] = 0, + }, + [384] = { + ["X"] = 23.28, + ["Y"] = 54.2, + ["CD"] = 0, + }, + [385] = { + ["X"] = 26.01, + ["Y"] = 50.3, + ["CD"] = 0, + }, + [386] = { + ["X"] = 27.47, + ["Y"] = 49.06, + ["CD"] = 0, + }, + [387] = { + ["X"] = 28.48, + ["Y"] = 47.38, + ["CD"] = 0, + }, + [388] = { + ["X"] = 27.49, + ["Y"] = 43.9, + ["CD"] = 0, + }, + [389] = { + ["X"] = 27.59, + ["Y"] = 41.63, + ["CD"] = 0, + }, + [390] = { + ["X"] = 29.31, + ["Y"] = 38.42, + ["CD"] = 0, + }, + [391] = { + ["X"] = 37.52, + ["Y"] = 25.52, + ["CD"] = 0, + }, + [392] = { + ["X"] = 35.96, + ["Y"] = 27.82, + ["CD"] = 0, + }, + [393] = { + ["X"] = 34.07, + ["Y"] = 31.49, + ["CD"] = 0, + }, + [394] = { + ["X"] = 35.03, + ["Y"] = 31.58, + ["CD"] = 0, + }, + [395] = { + ["X"] = 34.02, + ["Y"] = 33.22, + ["CD"] = 0, + }, + [396] = { + ["X"] = 33.82, + ["Y"] = 34.84, + ["CD"] = 0, + }, + [397] = { + ["X"] = 34.21, + ["Y"] = 37.6, + ["CD"] = 0, + }, + [398] = { + ["X"] = 47.11, + ["Y"] = 38.8, + ["CD"] = 0, + }, + [399] = { + ["X"] = 44.32, + ["Y"] = 40.46, + ["CD"] = 0, + }, + [400] = { + ["X"] = 42.59, + ["Y"] = 42.28, + ["CD"] = 0, + }, + [401] = { + ["X"] = 42.94, + ["Y"] = 42.27, + ["CD"] = 0, + }, + [402] = { + ["X"] = 45.1, + ["Y"] = 42.16, + ["CD"] = 0, + }, + [403] = { + ["X"] = 46.25, + ["Y"] = 43.49, + ["CD"] = 0, + }, + [404] = { + ["X"] = 45.88, + ["Y"] = 45.2, + ["CD"] = 0, + }, + [405] = { + ["X"] = 45.17, + ["Y"] = 46.78, + ["CD"] = 0, + }, + [406] = { + ["X"] = 43.62, + ["Y"] = 46.21, + ["CD"] = 0, + }, + [407] = { + ["X"] = 43.43, + ["Y"] = 47.27, + ["CD"] = 0, + }, + [408] = { + ["X"] = 43, + ["Y"] = 47.82, + ["CD"] = 0, + }, + [409] = { + ["X"] = 41.94, + ["Y"] = 46.63, + ["CD"] = 0, + }, + [410] = { + ["X"] = 40.91, + ["Y"] = 47.21, + ["CD"] = 0, + }, + [411] = { + ["X"] = 39.44, + ["Y"] = 47.72, + ["CD"] = 0, + }, + [412] = { + ["X"] = 36.48, + ["Y"] = 48.68, + ["CD"] = 0, + }, + [413] = { + ["X"] = 35.38, + ["Y"] = 46.59, + ["CD"] = 0, + }, + [414] = { + ["X"] = 35.17, + ["Y"] = 45.4, + ["CD"] = 0, + }, + [415] = { + ["X"] = 39.19, + ["Y"] = 38.05, + ["CD"] = 0, + }, + [416] = { + ["X"] = 41.12, + ["Y"] = 37.99, + ["CD"] = 0, + }, + [417] = { + ["X"] = 40.16, + ["Y"] = 36.83, + ["CD"] = 0, + }, + [418] = { + ["X"] = 39.98, + ["Y"] = 39.7, + ["CD"] = 0, + }, + [419] = { + ["X"] = 38.39, + ["Y"] = 40.1, + ["CD"] = 0, + }, + [420] = { + ["X"] = 37.24, + ["Y"] = 41.92, + ["CD"] = 0, + }, + [421] = { + ["X"] = 36.93, + ["Y"] = 43.94, + ["CD"] = 0, + }, + [422] = { + ["X"] = 36.15, + ["Y"] = 43.84, + ["CD"] = 0, + }, + [423] = { + ["X"] = 36.94, + ["Y"] = 44.84, + ["CD"] = 0, + }, + [424] = { + ["X"] = 38.61, + ["Y"] = 47.11, + ["CD"] = 0, + }, + [425] = { + ["X"] = 37.74, + ["Y"] = 48.57, + ["CD"] = 0, + }, + [426] = { + ["X"] = 38.21, + ["Y"] = 51.02, + ["CD"] = 0, + }, + [427] = { + ["X"] = 37.57, + ["Y"] = 51.13, + ["CD"] = 0, + }, + [428] = { + ["X"] = 34.62, + ["Y"] = 56.53, + ["CD"] = 0, + }, + [429] = { + ["X"] = 33.91, + ["Y"] = 54.15, + ["CD"] = 0, + }, + [430] = { + ["X"] = 35.96, + ["Y"] = 51.61, + ["CD"] = 0, + }, + [431] = { + ["X"] = 35.55, + ["Y"] = 61.86, + ["CD"] = 0, + }, + [432] = { + ["X"] = 68.25, + ["Y"] = 61.21, + ["CD"] = 0, + }, +} +aura_env.cooldown = 600 +aura_env.wipeDistance = 50 +aura_env.angle = 0 +aura_env.hyp = 0 +aura_env.GetClosestHerb = function() + aura_env.minID = { + ["X"] = 0, + ["Y"] = 0, + ["D"] = 1000, + ["ID"] = 0, + } + local pX = GetPlayerMapPosition("player") or 0 + local pY = select(2, GetPlayerMapPosition("player")) or 0 + pX, pY = pX * 100, pY * 100 + for k, v in ipairs(aura_env.herbs) do + local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] + if cd == 0 then + local X, Y = pX - hX, pY - hY + local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) + if hyp < aura_env.minID["D"] then + aura_env.minID["X"] = hX + aura_env.minID["Y"] = hY + aura_env.minID["D"] = hyp + aura_env.minID["ID"] = k + end + end + end + return aura_env.minID["ID"] +end diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/ArgusWeed.lua b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/ArgusWeed.lua similarity index 92% rename from Complete Projects/Legion/Herb Sniffer/Herb Arrays/ArgusWeed.lua rename to WeakAuras/Projects/Herb Sniffer/Herb Arrays/ArgusWeed.lua index cb1a4db..1a952d2 100644 --- a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/ArgusWeed.lua +++ b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/ArgusWeed.lua @@ -1,77 +1,77 @@ -aura_env.herbs = { - [1] = { - ["X"] = 58.54, - ["Y"] = 51.33, - ["CD"] = 0, - }, - [2] = { - ["X"] = 55.51, - ["Y"] = 55.97, - ["CD"] = 0, - }, - [3] = { - ["X"] = 49.55, - ["Y"] = 58.43, - ["CD"] = 0, - }, - [4] = { - ["X"] = 55.87, - ["Y"] = 79, - ["CD"] = 0, - }, - [5] = { - ["X"] = 56.32, - ["Y"] = 77.94, - ["CD"] = 0, - }, - [6] = { - ["X"] = 57.65, - ["Y"] = 72.89, - ["CD"] = 0, - }, - [7] = { - ["X"] = 52.06, - ["Y"] = 22.41, - ["CD"] = 0, - }, - [8] = { - ["X"] = 49.8, - ["Y"] = 14.15, - ["CD"] = 0, - }, - [9] = { - ["X"] = 42.4, - ["Y"] = 71.35, - ["CD"] = 0, - }, - [10] = { - ["X"] = 66.74, - ["Y"] = 37.04, - ["CD"] = 0, - }, - [11] = { - ["X"] = 71.61, - ["Y"] = 34.02, - ["CD"] = 0, - }, - [12] = { - ["X"] = 43.66, - ["Y"] = 42.8, - ["CD"] = 0, - }, - [13] = { - ["X"] = 51.79, - ["Y"] = 70.39, - ["CD"] = 0, - }, - [14] = { - ["X"] = 45.17, - ["Y"] = 53.13, - ["CD"] = 0, - }, - [15] = { - ["X"] = 71.88, - ["Y"] = 27.85, - ["CD"] = 0, - }, -} +aura_env.herbs = { + [1] = { + ["X"] = 58.54, + ["Y"] = 51.33, + ["CD"] = 0, + }, + [2] = { + ["X"] = 55.51, + ["Y"] = 55.97, + ["CD"] = 0, + }, + [3] = { + ["X"] = 49.55, + ["Y"] = 58.43, + ["CD"] = 0, + }, + [4] = { + ["X"] = 55.87, + ["Y"] = 79, + ["CD"] = 0, + }, + [5] = { + ["X"] = 56.32, + ["Y"] = 77.94, + ["CD"] = 0, + }, + [6] = { + ["X"] = 57.65, + ["Y"] = 72.89, + ["CD"] = 0, + }, + [7] = { + ["X"] = 52.06, + ["Y"] = 22.41, + ["CD"] = 0, + }, + [8] = { + ["X"] = 49.8, + ["Y"] = 14.15, + ["CD"] = 0, + }, + [9] = { + ["X"] = 42.4, + ["Y"] = 71.35, + ["CD"] = 0, + }, + [10] = { + ["X"] = 66.74, + ["Y"] = 37.04, + ["CD"] = 0, + }, + [11] = { + ["X"] = 71.61, + ["Y"] = 34.02, + ["CD"] = 0, + }, + [12] = { + ["X"] = 43.66, + ["Y"] = 42.8, + ["CD"] = 0, + }, + [13] = { + ["X"] = 51.79, + ["Y"] = 70.39, + ["CD"] = 0, + }, + [14] = { + ["X"] = 45.17, + ["Y"] = 53.13, + ["CD"] = 0, + }, + [15] = { + ["X"] = 71.88, + ["Y"] = 27.85, + ["CD"] = 0, + }, +} diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Aethril.lua b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Herbalism/Aethril.lua similarity index 92% rename from Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Aethril.lua rename to WeakAuras/Projects/Herb Sniffer/Herb Arrays/Herbalism/Aethril.lua index 953739c..583ec66 100644 --- a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Aethril.lua +++ b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Herbalism/Aethril.lua @@ -1,781 +1,781 @@ -aura_env.herbs = { - [1] = { - ["X"] = 52.44, - ["Y"] = 12.55, - ["CD"] = 0, - }, - [2] = { - ["X"] = 43.81, - ["Y"] = 13.48, - ["CD"] = 0, - }, - [3] = { - ["X"] = 43.5, - ["Y"] = 11.55, - ["CD"] = 0, - }, - [4] = { - ["X"] = 43.54, - ["Y"] = 10.41, - ["CD"] = 0, - }, - [5] = { - ["X"] = 44.04, - ["Y"] = 10.02, - ["CD"] = 0, - }, - [6] = { - ["X"] = 45.05, - ["Y"] = 8.91, - ["CD"] = 0, - }, - [7] = { - ["X"] = 45.31, - ["Y"] = 9.62, - ["CD"] = 0, - }, - [8] = { - ["X"] = 50.71, - ["Y"] = 12.66, - ["CD"] = 0, - }, - [9] = { - ["X"] = 51.42, - ["Y"] = 10.39, - ["CD"] = 0, - }, - [10] = { - ["X"] = 51.03, - ["Y"] = 11.49, - ["CD"] = 0, - }, - [11] = { - ["X"] = 52.24, - ["Y"] = 13.93, - ["CD"] = 0, - }, - [12] = { - ["X"] = 53.1, - ["Y"] = 13.66, - ["CD"] = 0, - }, - [13] = { - ["X"] = 54.52, - ["Y"] = 13.09, - ["CD"] = 0, - }, - [14] = { - ["X"] = 53.98, - ["Y"] = 15.09, - ["CD"] = 0, - }, - [15] = { - ["X"] = 57.19, - ["Y"] = 18.32, - ["CD"] = 0, - }, - [16] = { - ["X"] = 57.95, - ["Y"] = 19.85, - ["CD"] = 0, - }, - [17] = { - ["X"] = 61.05, - ["Y"] = 17.05, - ["CD"] = 0, - }, - [18] = { - ["X"] = 62.21, - ["Y"] = 16.11, - ["CD"] = 0, - }, - [19] = { - ["X"] = 62.26, - ["Y"] = 17.91, - ["CD"] = 0, - }, - [20] = { - ["X"] = 61.86, - ["Y"] = 18.55, - ["CD"] = 0, - }, - [21] = { - ["X"] = 59.87, - ["Y"] = 20.07, - ["CD"] = 0, - }, - [22] = { - ["X"] = 60.17, - ["Y"] = 20.82, - ["CD"] = 0, - }, - [23] = { - ["X"] = 60.31, - ["Y"] = 21.25, - ["CD"] = 0, - }, - [24] = { - ["X"] = 58.31, - ["Y"] = 24.61, - ["CD"] = 0, - }, - [25] = { - ["X"] = 58.91, - ["Y"] = 22.75, - ["CD"] = 0, - }, - [26] = { - ["X"] = 59.92, - ["Y"] = 22.74, - ["CD"] = 0, - }, - [27] = { - ["X"] = 61.61, - ["Y"] = 26.13, - ["CD"] = 0, - }, - [28] = { - ["X"] = 61.21, - ["Y"] = 27.72, - ["CD"] = 0, - }, - [29] = { - ["X"] = 61.95, - ["Y"] = 30.74, - ["CD"] = 0, - }, - [30] = { - ["X"] = 63.08, - ["Y"] = 30.76, - ["CD"] = 0, - }, - [31] = { - ["X"] = 62.57, - ["Y"] = 28.52, - ["CD"] = 0, - }, - [32] = { - ["X"] = 64.55, - ["Y"] = 27.75, - ["CD"] = 0, - }, - [33] = { - ["X"] = 65.58, - ["Y"] = 38.31, - ["CD"] = 0, - }, - [34] = { - ["X"] = 66.38, - ["Y"] = 38.49, - ["CD"] = 0, - }, - [35] = { - ["X"] = 66.44, - ["Y"] = 35.73, - ["CD"] = 0, - }, - [36] = { - ["X"] = 65.28, - ["Y"] = 35.11, - ["CD"] = 0, - }, - [37] = { - ["X"] = 64.73, - ["Y"] = 34.57, - ["CD"] = 0, - }, - [38] = { - ["X"] = 63.54, - ["Y"] = 34.19, - ["CD"] = 0, - }, - [39] = { - ["X"] = 64.81, - ["Y"] = 45.69, - ["CD"] = 0, - }, - [40] = { - ["X"] = 63.1, - ["Y"] = 46.83, - ["CD"] = 0, - }, - [41] = { - ["X"] = 59.34, - ["Y"] = 49.85, - ["CD"] = 0, - }, - [42] = { - ["X"] = 56.61, - ["Y"] = 52.15, - ["CD"] = 0, - }, - [43] = { - ["X"] = 53.11, - ["Y"] = 54.38, - ["CD"] = 0, - }, - [44] = { - ["X"] = 51.66, - ["Y"] = 55.68, - ["CD"] = 0, - }, - [45] = { - ["X"] = 50.1, - ["Y"] = 55.25, - ["CD"] = 0, - }, - [46] = { - ["X"] = 50.05, - ["Y"] = 56.35, - ["CD"] = 0, - }, - [47] = { - ["X"] = 49.08, - ["Y"] = 55.87, - ["CD"] = 0, - }, - [48] = { - ["X"] = 36.28, - ["Y"] = 21.97, - ["CD"] = 0, - }, - [49] = { - ["X"] = 36.07, - ["Y"] = 23.09, - ["CD"] = 0, - }, - [50] = { - ["X"] = 35.3, - ["Y"] = 23.32, - ["CD"] = 0, - }, - [51] = { - ["X"] = 35.24, - ["Y"] = 25.27, - ["CD"] = 0, - }, - [52] = { - ["X"] = 35.84, - ["Y"] = 26.66, - ["CD"] = 0, - }, - [53] = { - ["X"] = 35.28, - ["Y"] = 28.34, - ["CD"] = 0, - }, - [54] = { - ["X"] = 38.92, - ["Y"] = 33.69, - ["CD"] = 0, - }, - [55] = { - ["X"] = 38.76, - ["Y"] = 32.81, - ["CD"] = 0, - }, - [56] = { - ["X"] = 39.8, - ["Y"] = 32.01, - ["CD"] = 0, - }, - [57] = { - ["X"] = 38.58, - ["Y"] = 31.7, - ["CD"] = 0, - }, - [58] = { - ["X"] = 37.15, - ["Y"] = 31.49, - ["CD"] = 0, - }, - [59] = { - ["X"] = 37.81, - ["Y"] = 33.03, - ["CD"] = 0, - }, - [60] = { - ["X"] = 38.91, - ["Y"] = 33.95, - ["CD"] = 0, - }, - [61] = { - ["X"] = 46.87, - ["Y"] = 32.18, - ["CD"] = 0, - }, - [62] = { - ["X"] = 46.45, - ["Y"] = 33.24, - ["CD"] = 0, - }, - [63] = { - ["X"] = 42.85, - ["Y"] = 29.84, - ["CD"] = 0, - }, - [64] = { - ["X"] = 42.2, - ["Y"] = 30.7, - ["CD"] = 0, - }, - [65] = { - ["X"] = 41.42, - ["Y"] = 31.81, - ["CD"] = 0, - }, - [66] = { - ["X"] = 40.38, - ["Y"] = 32.88, - ["CD"] = 0, - }, - [67] = { - ["X"] = 40.63, - ["Y"] = 35.62, - ["CD"] = 0, - }, - [68] = { - ["X"] = 43.97, - ["Y"] = 31.84, - ["CD"] = 0, - }, - [69] = { - ["X"] = 45.87, - ["Y"] = 28.71, - ["CD"] = 0, - }, - [70] = { - ["X"] = 44.62, - ["Y"] = 30.16, - ["CD"] = 0, - }, - [71] = { - ["X"] = 44.16, - ["Y"] = 31.22, - ["CD"] = 0, - }, - [72] = { - ["X"] = 45.01, - ["Y"] = 33.8, - ["CD"] = 0, - }, - [73] = { - ["X"] = 44.82, - ["Y"] = 35.66, - ["CD"] = 0, - }, - [74] = { - ["X"] = 44.33, - ["Y"] = 38.18, - ["CD"] = 0, - }, - [75] = { - ["X"] = 44.13, - ["Y"] = 36.79, - ["CD"] = 0, - }, - [76] = { - ["X"] = 43.29, - ["Y"] = 36.63, - ["CD"] = 0, - }, - [77] = { - ["X"] = 58.5, - ["Y"] = 44.5, - ["CD"] = 0, - }, - [78] = { - ["X"] = 56.98, - ["Y"] = 46.04, - ["CD"] = 0, - }, - [79] = { - ["X"] = 56.87, - ["Y"] = 47.43, - ["CD"] = 0, - }, - [80] = { - ["X"] = 58.08, - ["Y"] = 48.77, - ["CD"] = 0, - }, - [81] = { - ["X"] = 58.1, - ["Y"] = 47.82, - ["CD"] = 0, - }, - [82] = { - ["X"] = 59.82, - ["Y"] = 48.78, - ["CD"] = 0, - }, - [83] = { - ["X"] = 61.93, - ["Y"] = 50.54, - ["CD"] = 0, - }, - [84] = { - ["X"] = 60.81, - ["Y"] = 49.52, - ["CD"] = 0, - }, - [85] = { - ["X"] = 60.13, - ["Y"] = 50.52, - ["CD"] = 0, - }, - [86] = { - ["X"] = 58.7, - ["Y"] = 50.72, - ["CD"] = 0, - }, - [87] = { - ["X"] = 57.92, - ["Y"] = 51.18, - ["CD"] = 0, - }, - [88] = { - ["X"] = 56.76, - ["Y"] = 51.49, - ["CD"] = 0, - }, - [89] = { - ["X"] = 57.02, - ["Y"] = 53.1, - ["CD"] = 0, - }, - [90] = { - ["X"] = 60.5, - ["Y"] = 55.71, - ["CD"] = 0, - }, - [91] = { - ["X"] = 61.23, - ["Y"] = 55.29, - ["CD"] = 0, - }, - [92] = { - ["X"] = 62.2, - ["Y"] = 54.63, - ["CD"] = 0, - }, - [93] = { - ["X"] = 62.35, - ["Y"] = 53.03, - ["CD"] = 0, - }, - [94] = { - ["X"] = 61.71, - ["Y"] = 51.69, - ["CD"] = 0, - }, - [95] = { - ["X"] = 62.88, - ["Y"] = 48.79, - ["CD"] = 0, - }, - [96] = { - ["X"] = 59.03, - ["Y"] = 16.36, - ["CD"] = 0, - }, - [97] = { - ["X"] = 56.05, - ["Y"] = 52.99, - ["CD"] = 0, - }, - [98] = { - ["X"] = 54.9, - ["Y"] = 54.78, - ["CD"] = 0, - }, - [99] = { - ["X"] = 46.89, - ["Y"] = 48.44, - ["CD"] = 0, - }, - [100] = { - ["X"] = 48.12, - ["Y"] = 52.99, - ["CD"] = 0, - }, - [101] = { - ["X"] = 50.61, - ["Y"] = 58.06, - ["CD"] = 0, - }, - [102] = { - ["X"] = 65.48, - ["Y"] = 47.52, - ["CD"] = 0, - }, - [103] = { - ["X"] = 66.67, - ["Y"] = 48.25, - ["CD"] = 0, - }, - [104] = { - ["X"] = 67.25, - ["Y"] = 46.04, - ["CD"] = 0, - }, - [105] = { - ["X"] = 67.21, - ["Y"] = 43.27, - ["CD"] = 0, - }, - [106] = { - ["X"] = 56.87, - ["Y"] = 48.7, - ["CD"] = 0, - }, - [107] = { - ["X"] = 47.7, - ["Y"] = 38.02, - ["CD"] = 0, - }, - [108] = { - ["X"] = 45.05, - ["Y"] = 37.62, - ["CD"] = 0, - }, - [109] = { - ["X"] = 48.4, - ["Y"] = 32.78, - ["CD"] = 0, - }, - [110] = { - ["X"] = 51.98, - ["Y"] = 31.45, - ["CD"] = 0, - }, - [111] = { - ["X"] = 57.2, - ["Y"] = 27.62, - ["CD"] = 0, - }, - [112] = { - ["X"] = 61.29, - ["Y"] = 29.89, - ["CD"] = 0, - }, - [113] = { - ["X"] = 64.67, - ["Y"] = 31.6, - ["CD"] = 0, - }, - [114] = { - ["X"] = 60.67, - ["Y"] = 23.86, - ["CD"] = 0, - }, - [115] = { - ["X"] = 62.79, - ["Y"] = 25.61, - ["CD"] = 0, - }, - [116] = { - ["X"] = 66.4, - ["Y"] = 36.85, - ["CD"] = 0, - }, - [117] = { - ["X"] = 63.3, - ["Y"] = 35.71, - ["CD"] = 0, - }, - [118] = { - ["X"] = 54.11, - ["Y"] = 30.37, - ["CD"] = 0, - }, - [119] = { - ["X"] = 57.92, - ["Y"] = 33.75, - ["CD"] = 0, - }, - [120] = { - ["X"] = 42.81, - ["Y"] = 10.38, - ["CD"] = 0, - }, - [121] = { - ["X"] = 48.74, - ["Y"] = 10.63, - ["CD"] = 0, - }, - [122] = { - ["X"] = 40.78, - ["Y"] = 11.45, - ["CD"] = 0, - }, - [123] = { - ["X"] = 39.74, - ["Y"] = 13.5, - ["CD"] = 0, - }, - [124] = { - ["X"] = 35.84, - ["Y"] = 15.6, - ["CD"] = 0, - }, - [125] = { - ["X"] = 35.53, - ["Y"] = 22.66, - ["CD"] = 0, - }, - [126] = { - ["X"] = 35.42, - ["Y"] = 27.64, - ["CD"] = 0, - }, - [127] = { - ["X"] = 32.97, - ["Y"] = 32.94, - ["CD"] = 0, - }, - [128] = { - ["X"] = 38.01, - ["Y"] = 35.61, - ["CD"] = 0, - }, - [129] = { - ["X"] = 52.67, - ["Y"] = 26.74, - ["CD"] = 0, - }, - [130] = { - ["X"] = 54.31, - ["Y"] = 17.67, - ["CD"] = 0, - }, - [131] = { - ["X"] = 56.06, - ["Y"] = 19.39, - ["CD"] = 0, - }, - [132] = { - ["X"] = 51.37, - ["Y"] = 15.24, - ["CD"] = 0, - }, - [133] = { - ["X"] = 45.71, - ["Y"] = 15.14, - ["CD"] = 0, - }, - [134] = { - ["X"] = 46.61, - ["Y"] = 16.25, - ["CD"] = 0, - }, - [135] = { - ["X"] = 48.01, - ["Y"] = 12.51, - ["CD"] = 0, - }, - [136] = { - ["X"] = 44.59, - ["Y"] = 32.83, - ["CD"] = 0, - }, - [137] = { - ["X"] = 41.47, - ["Y"] = 33.61, - ["CD"] = 0, - }, - [138] = { - ["X"] = 42.3, - ["Y"] = 36.7, - ["CD"] = 0, - }, - [139] = { - ["X"] = 40.85, - ["Y"] = 38.78, - ["CD"] = 0, - }, - [140] = { - ["X"] = 39.97, - ["Y"] = 53.3, - ["CD"] = 0, - }, - [141] = { - ["X"] = 48.93, - ["Y"] = 43.77, - ["CD"] = 0, - }, - [142] = { - ["X"] = 60.71, - ["Y"] = 36.87, - ["CD"] = 0, - }, - [143] = { - ["X"] = 61.83, - ["Y"] = 39.44, - ["CD"] = 0, - }, - [144] = { - ["X"] = 56.71, - ["Y"] = 64.6, - ["CD"] = 0, - }, - [145] = { - ["X"] = 57, - ["Y"] = 62.25, - ["CD"] = 0, - }, - [146] = { - ["X"] = 62.66, - ["Y"] = 54.86, - ["CD"] = 0, - }, - [147] = { - ["X"] = 61.84, - ["Y"] = 55.45, - ["CD"] = 0, - }, - [148] = { - ["X"] = 56.88, - ["Y"] = 61.05, - ["CD"] = 0, - }, - [149] = { - ["X"] = 52.56, - ["Y"] = 60.68, - ["CD"] = 0, - }, - [150] = { - ["X"] = 46, - ["Y"] = 61.02, - ["CD"] = 0, - }, -} -aura_env.cooldown = 600 -aura_env.wipeDistance = 50 -aura_env.angle = 0 -aura_env.hyp = 0 -aura_env.GetClosestHerb = function() - aura_env.minID = { - ["X"] = 0, - ["Y"] = 0, - ["D"] = 1000, - ["ID"] = 0, - } - local pX = GetPlayerMapPosition("player") or 0 - local pY = select(2, GetPlayerMapPosition("player")) or 0 - pX, pY = pX * 100, pY * 100 - for k, v in ipairs(aura_env.herbs) do - local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] - if cd == 0 then - local X, Y = pX - hX, pY - hY - local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) - if hyp < aura_env.minID["D"] then - aura_env.minID["X"] = hX - aura_env.minID["Y"] = hY - aura_env.minID["D"] = hyp - aura_env.minID["ID"] = k - end - end - end - return aura_env.minID["ID"] -end +aura_env.herbs = { + [1] = { + ["X"] = 52.44, + ["Y"] = 12.55, + ["CD"] = 0, + }, + [2] = { + ["X"] = 43.81, + ["Y"] = 13.48, + ["CD"] = 0, + }, + [3] = { + ["X"] = 43.5, + ["Y"] = 11.55, + ["CD"] = 0, + }, + [4] = { + ["X"] = 43.54, + ["Y"] = 10.41, + ["CD"] = 0, + }, + [5] = { + ["X"] = 44.04, + ["Y"] = 10.02, + ["CD"] = 0, + }, + [6] = { + ["X"] = 45.05, + ["Y"] = 8.91, + ["CD"] = 0, + }, + [7] = { + ["X"] = 45.31, + ["Y"] = 9.62, + ["CD"] = 0, + }, + [8] = { + ["X"] = 50.71, + ["Y"] = 12.66, + ["CD"] = 0, + }, + [9] = { + ["X"] = 51.42, + ["Y"] = 10.39, + ["CD"] = 0, + }, + [10] = { + ["X"] = 51.03, + ["Y"] = 11.49, + ["CD"] = 0, + }, + [11] = { + ["X"] = 52.24, + ["Y"] = 13.93, + ["CD"] = 0, + }, + [12] = { + ["X"] = 53.1, + ["Y"] = 13.66, + ["CD"] = 0, + }, + [13] = { + ["X"] = 54.52, + ["Y"] = 13.09, + ["CD"] = 0, + }, + [14] = { + ["X"] = 53.98, + ["Y"] = 15.09, + ["CD"] = 0, + }, + [15] = { + ["X"] = 57.19, + ["Y"] = 18.32, + ["CD"] = 0, + }, + [16] = { + ["X"] = 57.95, + ["Y"] = 19.85, + ["CD"] = 0, + }, + [17] = { + ["X"] = 61.05, + ["Y"] = 17.05, + ["CD"] = 0, + }, + [18] = { + ["X"] = 62.21, + ["Y"] = 16.11, + ["CD"] = 0, + }, + [19] = { + ["X"] = 62.26, + ["Y"] = 17.91, + ["CD"] = 0, + }, + [20] = { + ["X"] = 61.86, + ["Y"] = 18.55, + ["CD"] = 0, + }, + [21] = { + ["X"] = 59.87, + ["Y"] = 20.07, + ["CD"] = 0, + }, + [22] = { + ["X"] = 60.17, + ["Y"] = 20.82, + ["CD"] = 0, + }, + [23] = { + ["X"] = 60.31, + ["Y"] = 21.25, + ["CD"] = 0, + }, + [24] = { + ["X"] = 58.31, + ["Y"] = 24.61, + ["CD"] = 0, + }, + [25] = { + ["X"] = 58.91, + ["Y"] = 22.75, + ["CD"] = 0, + }, + [26] = { + ["X"] = 59.92, + ["Y"] = 22.74, + ["CD"] = 0, + }, + [27] = { + ["X"] = 61.61, + ["Y"] = 26.13, + ["CD"] = 0, + }, + [28] = { + ["X"] = 61.21, + ["Y"] = 27.72, + ["CD"] = 0, + }, + [29] = { + ["X"] = 61.95, + ["Y"] = 30.74, + ["CD"] = 0, + }, + [30] = { + ["X"] = 63.08, + ["Y"] = 30.76, + ["CD"] = 0, + }, + [31] = { + ["X"] = 62.57, + ["Y"] = 28.52, + ["CD"] = 0, + }, + [32] = { + ["X"] = 64.55, + ["Y"] = 27.75, + ["CD"] = 0, + }, + [33] = { + ["X"] = 65.58, + ["Y"] = 38.31, + ["CD"] = 0, + }, + [34] = { + ["X"] = 66.38, + ["Y"] = 38.49, + ["CD"] = 0, + }, + [35] = { + ["X"] = 66.44, + ["Y"] = 35.73, + ["CD"] = 0, + }, + [36] = { + ["X"] = 65.28, + ["Y"] = 35.11, + ["CD"] = 0, + }, + [37] = { + ["X"] = 64.73, + ["Y"] = 34.57, + ["CD"] = 0, + }, + [38] = { + ["X"] = 63.54, + ["Y"] = 34.19, + ["CD"] = 0, + }, + [39] = { + ["X"] = 64.81, + ["Y"] = 45.69, + ["CD"] = 0, + }, + [40] = { + ["X"] = 63.1, + ["Y"] = 46.83, + ["CD"] = 0, + }, + [41] = { + ["X"] = 59.34, + ["Y"] = 49.85, + ["CD"] = 0, + }, + [42] = { + ["X"] = 56.61, + ["Y"] = 52.15, + ["CD"] = 0, + }, + [43] = { + ["X"] = 53.11, + ["Y"] = 54.38, + ["CD"] = 0, + }, + [44] = { + ["X"] = 51.66, + ["Y"] = 55.68, + ["CD"] = 0, + }, + [45] = { + ["X"] = 50.1, + ["Y"] = 55.25, + ["CD"] = 0, + }, + [46] = { + ["X"] = 50.05, + ["Y"] = 56.35, + ["CD"] = 0, + }, + [47] = { + ["X"] = 49.08, + ["Y"] = 55.87, + ["CD"] = 0, + }, + [48] = { + ["X"] = 36.28, + ["Y"] = 21.97, + ["CD"] = 0, + }, + [49] = { + ["X"] = 36.07, + ["Y"] = 23.09, + ["CD"] = 0, + }, + [50] = { + ["X"] = 35.3, + ["Y"] = 23.32, + ["CD"] = 0, + }, + [51] = { + ["X"] = 35.24, + ["Y"] = 25.27, + ["CD"] = 0, + }, + [52] = { + ["X"] = 35.84, + ["Y"] = 26.66, + ["CD"] = 0, + }, + [53] = { + ["X"] = 35.28, + ["Y"] = 28.34, + ["CD"] = 0, + }, + [54] = { + ["X"] = 38.92, + ["Y"] = 33.69, + ["CD"] = 0, + }, + [55] = { + ["X"] = 38.76, + ["Y"] = 32.81, + ["CD"] = 0, + }, + [56] = { + ["X"] = 39.8, + ["Y"] = 32.01, + ["CD"] = 0, + }, + [57] = { + ["X"] = 38.58, + ["Y"] = 31.7, + ["CD"] = 0, + }, + [58] = { + ["X"] = 37.15, + ["Y"] = 31.49, + ["CD"] = 0, + }, + [59] = { + ["X"] = 37.81, + ["Y"] = 33.03, + ["CD"] = 0, + }, + [60] = { + ["X"] = 38.91, + ["Y"] = 33.95, + ["CD"] = 0, + }, + [61] = { + ["X"] = 46.87, + ["Y"] = 32.18, + ["CD"] = 0, + }, + [62] = { + ["X"] = 46.45, + ["Y"] = 33.24, + ["CD"] = 0, + }, + [63] = { + ["X"] = 42.85, + ["Y"] = 29.84, + ["CD"] = 0, + }, + [64] = { + ["X"] = 42.2, + ["Y"] = 30.7, + ["CD"] = 0, + }, + [65] = { + ["X"] = 41.42, + ["Y"] = 31.81, + ["CD"] = 0, + }, + [66] = { + ["X"] = 40.38, + ["Y"] = 32.88, + ["CD"] = 0, + }, + [67] = { + ["X"] = 40.63, + ["Y"] = 35.62, + ["CD"] = 0, + }, + [68] = { + ["X"] = 43.97, + ["Y"] = 31.84, + ["CD"] = 0, + }, + [69] = { + ["X"] = 45.87, + ["Y"] = 28.71, + ["CD"] = 0, + }, + [70] = { + ["X"] = 44.62, + ["Y"] = 30.16, + ["CD"] = 0, + }, + [71] = { + ["X"] = 44.16, + ["Y"] = 31.22, + ["CD"] = 0, + }, + [72] = { + ["X"] = 45.01, + ["Y"] = 33.8, + ["CD"] = 0, + }, + [73] = { + ["X"] = 44.82, + ["Y"] = 35.66, + ["CD"] = 0, + }, + [74] = { + ["X"] = 44.33, + ["Y"] = 38.18, + ["CD"] = 0, + }, + [75] = { + ["X"] = 44.13, + ["Y"] = 36.79, + ["CD"] = 0, + }, + [76] = { + ["X"] = 43.29, + ["Y"] = 36.63, + ["CD"] = 0, + }, + [77] = { + ["X"] = 58.5, + ["Y"] = 44.5, + ["CD"] = 0, + }, + [78] = { + ["X"] = 56.98, + ["Y"] = 46.04, + ["CD"] = 0, + }, + [79] = { + ["X"] = 56.87, + ["Y"] = 47.43, + ["CD"] = 0, + }, + [80] = { + ["X"] = 58.08, + ["Y"] = 48.77, + ["CD"] = 0, + }, + [81] = { + ["X"] = 58.1, + ["Y"] = 47.82, + ["CD"] = 0, + }, + [82] = { + ["X"] = 59.82, + ["Y"] = 48.78, + ["CD"] = 0, + }, + [83] = { + ["X"] = 61.93, + ["Y"] = 50.54, + ["CD"] = 0, + }, + [84] = { + ["X"] = 60.81, + ["Y"] = 49.52, + ["CD"] = 0, + }, + [85] = { + ["X"] = 60.13, + ["Y"] = 50.52, + ["CD"] = 0, + }, + [86] = { + ["X"] = 58.7, + ["Y"] = 50.72, + ["CD"] = 0, + }, + [87] = { + ["X"] = 57.92, + ["Y"] = 51.18, + ["CD"] = 0, + }, + [88] = { + ["X"] = 56.76, + ["Y"] = 51.49, + ["CD"] = 0, + }, + [89] = { + ["X"] = 57.02, + ["Y"] = 53.1, + ["CD"] = 0, + }, + [90] = { + ["X"] = 60.5, + ["Y"] = 55.71, + ["CD"] = 0, + }, + [91] = { + ["X"] = 61.23, + ["Y"] = 55.29, + ["CD"] = 0, + }, + [92] = { + ["X"] = 62.2, + ["Y"] = 54.63, + ["CD"] = 0, + }, + [93] = { + ["X"] = 62.35, + ["Y"] = 53.03, + ["CD"] = 0, + }, + [94] = { + ["X"] = 61.71, + ["Y"] = 51.69, + ["CD"] = 0, + }, + [95] = { + ["X"] = 62.88, + ["Y"] = 48.79, + ["CD"] = 0, + }, + [96] = { + ["X"] = 59.03, + ["Y"] = 16.36, + ["CD"] = 0, + }, + [97] = { + ["X"] = 56.05, + ["Y"] = 52.99, + ["CD"] = 0, + }, + [98] = { + ["X"] = 54.9, + ["Y"] = 54.78, + ["CD"] = 0, + }, + [99] = { + ["X"] = 46.89, + ["Y"] = 48.44, + ["CD"] = 0, + }, + [100] = { + ["X"] = 48.12, + ["Y"] = 52.99, + ["CD"] = 0, + }, + [101] = { + ["X"] = 50.61, + ["Y"] = 58.06, + ["CD"] = 0, + }, + [102] = { + ["X"] = 65.48, + ["Y"] = 47.52, + ["CD"] = 0, + }, + [103] = { + ["X"] = 66.67, + ["Y"] = 48.25, + ["CD"] = 0, + }, + [104] = { + ["X"] = 67.25, + ["Y"] = 46.04, + ["CD"] = 0, + }, + [105] = { + ["X"] = 67.21, + ["Y"] = 43.27, + ["CD"] = 0, + }, + [106] = { + ["X"] = 56.87, + ["Y"] = 48.7, + ["CD"] = 0, + }, + [107] = { + ["X"] = 47.7, + ["Y"] = 38.02, + ["CD"] = 0, + }, + [108] = { + ["X"] = 45.05, + ["Y"] = 37.62, + ["CD"] = 0, + }, + [109] = { + ["X"] = 48.4, + ["Y"] = 32.78, + ["CD"] = 0, + }, + [110] = { + ["X"] = 51.98, + ["Y"] = 31.45, + ["CD"] = 0, + }, + [111] = { + ["X"] = 57.2, + ["Y"] = 27.62, + ["CD"] = 0, + }, + [112] = { + ["X"] = 61.29, + ["Y"] = 29.89, + ["CD"] = 0, + }, + [113] = { + ["X"] = 64.67, + ["Y"] = 31.6, + ["CD"] = 0, + }, + [114] = { + ["X"] = 60.67, + ["Y"] = 23.86, + ["CD"] = 0, + }, + [115] = { + ["X"] = 62.79, + ["Y"] = 25.61, + ["CD"] = 0, + }, + [116] = { + ["X"] = 66.4, + ["Y"] = 36.85, + ["CD"] = 0, + }, + [117] = { + ["X"] = 63.3, + ["Y"] = 35.71, + ["CD"] = 0, + }, + [118] = { + ["X"] = 54.11, + ["Y"] = 30.37, + ["CD"] = 0, + }, + [119] = { + ["X"] = 57.92, + ["Y"] = 33.75, + ["CD"] = 0, + }, + [120] = { + ["X"] = 42.81, + ["Y"] = 10.38, + ["CD"] = 0, + }, + [121] = { + ["X"] = 48.74, + ["Y"] = 10.63, + ["CD"] = 0, + }, + [122] = { + ["X"] = 40.78, + ["Y"] = 11.45, + ["CD"] = 0, + }, + [123] = { + ["X"] = 39.74, + ["Y"] = 13.5, + ["CD"] = 0, + }, + [124] = { + ["X"] = 35.84, + ["Y"] = 15.6, + ["CD"] = 0, + }, + [125] = { + ["X"] = 35.53, + ["Y"] = 22.66, + ["CD"] = 0, + }, + [126] = { + ["X"] = 35.42, + ["Y"] = 27.64, + ["CD"] = 0, + }, + [127] = { + ["X"] = 32.97, + ["Y"] = 32.94, + ["CD"] = 0, + }, + [128] = { + ["X"] = 38.01, + ["Y"] = 35.61, + ["CD"] = 0, + }, + [129] = { + ["X"] = 52.67, + ["Y"] = 26.74, + ["CD"] = 0, + }, + [130] = { + ["X"] = 54.31, + ["Y"] = 17.67, + ["CD"] = 0, + }, + [131] = { + ["X"] = 56.06, + ["Y"] = 19.39, + ["CD"] = 0, + }, + [132] = { + ["X"] = 51.37, + ["Y"] = 15.24, + ["CD"] = 0, + }, + [133] = { + ["X"] = 45.71, + ["Y"] = 15.14, + ["CD"] = 0, + }, + [134] = { + ["X"] = 46.61, + ["Y"] = 16.25, + ["CD"] = 0, + }, + [135] = { + ["X"] = 48.01, + ["Y"] = 12.51, + ["CD"] = 0, + }, + [136] = { + ["X"] = 44.59, + ["Y"] = 32.83, + ["CD"] = 0, + }, + [137] = { + ["X"] = 41.47, + ["Y"] = 33.61, + ["CD"] = 0, + }, + [138] = { + ["X"] = 42.3, + ["Y"] = 36.7, + ["CD"] = 0, + }, + [139] = { + ["X"] = 40.85, + ["Y"] = 38.78, + ["CD"] = 0, + }, + [140] = { + ["X"] = 39.97, + ["Y"] = 53.3, + ["CD"] = 0, + }, + [141] = { + ["X"] = 48.93, + ["Y"] = 43.77, + ["CD"] = 0, + }, + [142] = { + ["X"] = 60.71, + ["Y"] = 36.87, + ["CD"] = 0, + }, + [143] = { + ["X"] = 61.83, + ["Y"] = 39.44, + ["CD"] = 0, + }, + [144] = { + ["X"] = 56.71, + ["Y"] = 64.6, + ["CD"] = 0, + }, + [145] = { + ["X"] = 57, + ["Y"] = 62.25, + ["CD"] = 0, + }, + [146] = { + ["X"] = 62.66, + ["Y"] = 54.86, + ["CD"] = 0, + }, + [147] = { + ["X"] = 61.84, + ["Y"] = 55.45, + ["CD"] = 0, + }, + [148] = { + ["X"] = 56.88, + ["Y"] = 61.05, + ["CD"] = 0, + }, + [149] = { + ["X"] = 52.56, + ["Y"] = 60.68, + ["CD"] = 0, + }, + [150] = { + ["X"] = 46, + ["Y"] = 61.02, + ["CD"] = 0, + }, +} +aura_env.cooldown = 600 +aura_env.wipeDistance = 50 +aura_env.angle = 0 +aura_env.hyp = 0 +aura_env.GetClosestHerb = function() + aura_env.minID = { + ["X"] = 0, + ["Y"] = 0, + ["D"] = 1000, + ["ID"] = 0, + } + local pX = GetPlayerMapPosition("player") or 0 + local pY = select(2, GetPlayerMapPosition("player")) or 0 + pX, pY = pX * 100, pY * 100 + for k, v in ipairs(aura_env.herbs) do + local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] + if cd == 0 then + local X, Y = pX - hX, pY - hY + local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) + if hyp < aura_env.minID["D"] then + aura_env.minID["X"] = hX + aura_env.minID["Y"] = hY + aura_env.minID["D"] = hyp + aura_env.minID["ID"] = k + end + end + end + return aura_env.minID["ID"] +end diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Azshara's Veil.lua b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Herbalism/Azshara's Veil.lua similarity index 93% rename from Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Azshara's Veil.lua rename to WeakAuras/Projects/Herb Sniffer/Herb Arrays/Herbalism/Azshara's Veil.lua index 2d3435a..9c809c9 100644 --- a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Azshara's Veil.lua +++ b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Herbalism/Azshara's Veil.lua @@ -1,436 +1,436 @@ -aura_env.herbs = { - [1] = { - ["X"] = 39.26, - ["Y"] = 49.83, - ["CD"] = 0, - }, - [2] = { - ["X"] = 37.03, - ["Y"] = 50.59, - ["CD"] = 0, - }, - [3] = { - ["X"] = 28.08, - ["Y"] = 56.13, - ["CD"] = 0, - }, - [4] = { - ["X"] = 29.49, - ["Y"] = 55.41, - ["CD"] = 0, - }, - [5] = { - ["X"] = 30.68, - ["Y"] = 54.32, - ["CD"] = 0, - }, - [6] = { - ["X"] = 35.43, - ["Y"] = 50.28, - ["CD"] = 0, - }, - [7] = { - ["X"] = 36.67, - ["Y"] = 48.79, - ["CD"] = 0, - }, - [8] = { - ["X"] = 38.25, - ["Y"] = 48.17, - ["CD"] = 0, - }, - [9] = { - ["X"] = 46.08, - ["Y"] = 23.02, - ["CD"] = 0, - }, - [10] = { - ["X"] = 45.35, - ["Y"] = 21.67, - ["CD"] = 0, - }, - [11] = { - ["X"] = 44.45, - ["Y"] = 20.35, - ["CD"] = 0, - }, - [12] = { - ["X"] = 45.48, - ["Y"] = 19.74, - ["CD"] = 0, - }, - [13] = { - ["X"] = 46.97, - ["Y"] = 18.39, - ["CD"] = 0, - }, - [14] = { - ["X"] = 47.91, - ["Y"] = 17.92, - ["CD"] = 0, - }, - [15] = { - ["X"] = 49.28, - ["Y"] = 19.47, - ["CD"] = 0, - }, - [16] = { - ["X"] = 50.02, - ["Y"] = 21.88, - ["CD"] = 0, - }, - [17] = { - ["X"] = 50.97, - ["Y"] = 23.78, - ["CD"] = 0, - }, - [18] = { - ["X"] = 57.33, - ["Y"] = 24.33, - ["CD"] = 0, - }, - [19] = { - ["X"] = 52.96, - ["Y"] = 28.43, - ["CD"] = 0, - }, - [20] = { - ["X"] = 53.04, - ["Y"] = 26.47, - ["CD"] = 0, - }, - [21] = { - ["X"] = 54.27, - ["Y"] = 25.68, - ["CD"] = 0, - }, - [22] = { - ["X"] = 55.57, - ["Y"] = 26, - ["CD"] = 0, - }, - [23] = { - ["X"] = 54.52, - ["Y"] = 26.35, - ["CD"] = 0, - }, - [24] = { - ["X"] = 53.71, - ["Y"] = 27.51, - ["CD"] = 0, - }, - [25] = { - ["X"] = 53.92, - ["Y"] = 30.54, - ["CD"] = 0, - }, - [26] = { - ["X"] = 53.84, - ["Y"] = 31.85, - ["CD"] = 0, - }, - [27] = { - ["X"] = 53.49, - ["Y"] = 33.43, - ["CD"] = 0, - }, - [28] = { - ["X"] = 54.42, - ["Y"] = 34.99, - ["CD"] = 0, - }, - [29] = { - ["X"] = 54.65, - ["Y"] = 37.19, - ["CD"] = 0, - }, - [30] = { - ["X"] = 54.78, - ["Y"] = 38.61, - ["CD"] = 0, - }, - [31] = { - ["X"] = 58.46, - ["Y"] = 42.74, - ["CD"] = 0, - }, - [32] = { - ["X"] = 59.89, - ["Y"] = 42.95, - ["CD"] = 0, - }, - [33] = { - ["X"] = 61.04, - ["Y"] = 43.6, - ["CD"] = 0, - }, - [34] = { - ["X"] = 62.82, - ["Y"] = 44.77, - ["CD"] = 0, - }, - [35] = { - ["X"] = 64.28, - ["Y"] = 47.39, - ["CD"] = 0, - }, - [36] = { - ["X"] = 65.46, - ["Y"] = 50.29, - ["CD"] = 0, - }, - [37] = { - ["X"] = 66.36, - ["Y"] = 51.96, - ["CD"] = 0, - }, - [38] = { - ["X"] = 67.58, - ["Y"] = 55.86, - ["CD"] = 0, - }, - [39] = { - ["X"] = 67.69, - ["Y"] = 57.08, - ["CD"] = 0, - }, - [40] = { - ["X"] = 66.7, - ["Y"] = 59.1, - ["CD"] = 0, - }, - [41] = { - ["X"] = 66.09, - ["Y"] = 61.15, - ["CD"] = 0, - }, - [42] = { - ["X"] = 65.52, - ["Y"] = 62.29, - ["CD"] = 0, - }, - [43] = { - ["X"] = 65.16, - ["Y"] = 62.99, - ["CD"] = 0, - }, - [44] = { - ["X"] = 45.97, - ["Y"] = 13.34, - ["CD"] = 0, - }, - [45] = { - ["X"] = 40.08, - ["Y"] = 15.91, - ["CD"] = 0, - }, - [46] = { - ["X"] = 41.09, - ["Y"] = 18.18, - ["CD"] = 0, - }, - [47] = { - ["X"] = 43.27, - ["Y"] = 19.12, - ["CD"] = 0, - }, - [48] = { - ["X"] = 44.76, - ["Y"] = 16.28, - ["CD"] = 0, - }, - [49] = { - ["X"] = 47.09, - ["Y"] = 16.2, - ["CD"] = 0, - }, - [50] = { - ["X"] = 49.71, - ["Y"] = 18, - ["CD"] = 0, - }, - [51] = { - ["X"] = 52.2, - ["Y"] = 18.56, - ["CD"] = 0, - }, - [52] = { - ["X"] = 51.68, - ["Y"] = 21.51, - ["CD"] = 0, - }, - [53] = { - ["X"] = 55.89, - ["Y"] = 40.14, - ["CD"] = 0, - }, - [54] = { - ["X"] = 57.1, - ["Y"] = 41.6, - ["CD"] = 0, - }, - [55] = { - ["X"] = 57.64, - ["Y"] = 41.94, - ["CD"] = 0, - }, - [56] = { - ["X"] = 67.58, - ["Y"] = 52.38, - ["CD"] = 0, - }, - [57] = { - ["X"] = 66.9, - ["Y"] = 54.24, - ["CD"] = 0, - }, - [58] = { - ["X"] = 66.73, - ["Y"] = 56.48, - ["CD"] = 0, - }, - [59] = { - ["X"] = 59.94, - ["Y"] = 67.07, - ["CD"] = 0, - }, - [60] = { - ["X"] = 58.56, - ["Y"] = 67.12, - ["CD"] = 0, - }, - [61] = { - ["X"] = 57.31, - ["Y"] = 67.5, - ["CD"] = 0, - }, - [62] = { - ["X"] = 49.51, - ["Y"] = 58.28, - ["CD"] = 0, - }, - [63] = { - ["X"] = 49.02, - ["Y"] = 57.03, - ["CD"] = 0, - }, - [64] = { - ["X"] = 48.15, - ["Y"] = 55.84, - ["CD"] = 0, - }, - [65] = { - ["X"] = 41.46, - ["Y"] = 49.57, - ["CD"] = 0, - }, - [66] = { - ["X"] = 40, - ["Y"] = 48.65, - ["CD"] = 0, - }, - [67] = { - ["X"] = 38.79, - ["Y"] = 48.34, - ["CD"] = 0, - }, - [68] = { - ["X"] = 34.57, - ["Y"] = 51.11, - ["CD"] = 0, - }, - [69] = { - ["X"] = 33.22, - ["Y"] = 52.3, - ["CD"] = 0, - }, - [70] = { - ["X"] = 31.83, - ["Y"] = 53.23, - ["CD"] = 0, - }, - [71] = { - ["X"] = 31.47, - ["Y"] = 53.57, - ["CD"] = 0, - }, - [72] = { - ["X"] = 53.43, - ["Y"] = 18.24, - ["CD"] = 0, - }, - [73] = { - ["X"] = 50.1, - ["Y"] = 11.22, - ["CD"] = 0, - }, - [74] = { - ["X"] = 51.42, - ["Y"] = 23.49, - ["CD"] = 0, - }, - [75] = { - ["X"] = 44.44, - ["Y"] = 13.95, - ["CD"] = 0, - }, - [76] = { - ["X"] = 43.51, - ["Y"] = 17.14, - ["CD"] = 0, - }, - [77] = { - ["X"] = 41.16, - ["Y"] = 49.52, - ["CD"] = 0, - }, - [78] = { - ["X"] = 46.7, - ["Y"] = 53.95, - ["CD"] = 0, - }, - [79] = { - ["X"] = 58.72, - ["Y"] = 67.38, - ["CD"] = 0, - }, - [80] = { - ["X"] = 56.91, - ["Y"] = 41.1, - ["CD"] = 0, - }, - [81] = { - ["X"] = 68.57, - ["Y"] = 51.75, - ["CD"] = 0, - }, -} -aura_env.cooldown = 600 -aura_env.wipeDistance = 50 -aura_env.angle = 0 -aura_env.hyp = 0 -aura_env.GetClosestHerb = function() - aura_env.minID = { - ["X"] = 0, - ["Y"] = 0, - ["D"] = 1000, - ["ID"] = 0, - } - local pX = GetPlayerMapPosition("player") or 0 - local pY = select(2, GetPlayerMapPosition("player")) or 0 - pX, pY = pX * 100, pY * 100 - for k, v in ipairs(aura_env.herbs) do - local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] - if cd == 0 then - local X, Y = pX - hX, pY - hY - local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) - if hyp < aura_env.minID["D"] then - aura_env.minID["X"] = hX - aura_env.minID["Y"] = hY - aura_env.minID["D"] = hyp - aura_env.minID["ID"] = k - end - end - end - return aura_env.minID["ID"] -end +aura_env.herbs = { + [1] = { + ["X"] = 39.26, + ["Y"] = 49.83, + ["CD"] = 0, + }, + [2] = { + ["X"] = 37.03, + ["Y"] = 50.59, + ["CD"] = 0, + }, + [3] = { + ["X"] = 28.08, + ["Y"] = 56.13, + ["CD"] = 0, + }, + [4] = { + ["X"] = 29.49, + ["Y"] = 55.41, + ["CD"] = 0, + }, + [5] = { + ["X"] = 30.68, + ["Y"] = 54.32, + ["CD"] = 0, + }, + [6] = { + ["X"] = 35.43, + ["Y"] = 50.28, + ["CD"] = 0, + }, + [7] = { + ["X"] = 36.67, + ["Y"] = 48.79, + ["CD"] = 0, + }, + [8] = { + ["X"] = 38.25, + ["Y"] = 48.17, + ["CD"] = 0, + }, + [9] = { + ["X"] = 46.08, + ["Y"] = 23.02, + ["CD"] = 0, + }, + [10] = { + ["X"] = 45.35, + ["Y"] = 21.67, + ["CD"] = 0, + }, + [11] = { + ["X"] = 44.45, + ["Y"] = 20.35, + ["CD"] = 0, + }, + [12] = { + ["X"] = 45.48, + ["Y"] = 19.74, + ["CD"] = 0, + }, + [13] = { + ["X"] = 46.97, + ["Y"] = 18.39, + ["CD"] = 0, + }, + [14] = { + ["X"] = 47.91, + ["Y"] = 17.92, + ["CD"] = 0, + }, + [15] = { + ["X"] = 49.28, + ["Y"] = 19.47, + ["CD"] = 0, + }, + [16] = { + ["X"] = 50.02, + ["Y"] = 21.88, + ["CD"] = 0, + }, + [17] = { + ["X"] = 50.97, + ["Y"] = 23.78, + ["CD"] = 0, + }, + [18] = { + ["X"] = 57.33, + ["Y"] = 24.33, + ["CD"] = 0, + }, + [19] = { + ["X"] = 52.96, + ["Y"] = 28.43, + ["CD"] = 0, + }, + [20] = { + ["X"] = 53.04, + ["Y"] = 26.47, + ["CD"] = 0, + }, + [21] = { + ["X"] = 54.27, + ["Y"] = 25.68, + ["CD"] = 0, + }, + [22] = { + ["X"] = 55.57, + ["Y"] = 26, + ["CD"] = 0, + }, + [23] = { + ["X"] = 54.52, + ["Y"] = 26.35, + ["CD"] = 0, + }, + [24] = { + ["X"] = 53.71, + ["Y"] = 27.51, + ["CD"] = 0, + }, + [25] = { + ["X"] = 53.92, + ["Y"] = 30.54, + ["CD"] = 0, + }, + [26] = { + ["X"] = 53.84, + ["Y"] = 31.85, + ["CD"] = 0, + }, + [27] = { + ["X"] = 53.49, + ["Y"] = 33.43, + ["CD"] = 0, + }, + [28] = { + ["X"] = 54.42, + ["Y"] = 34.99, + ["CD"] = 0, + }, + [29] = { + ["X"] = 54.65, + ["Y"] = 37.19, + ["CD"] = 0, + }, + [30] = { + ["X"] = 54.78, + ["Y"] = 38.61, + ["CD"] = 0, + }, + [31] = { + ["X"] = 58.46, + ["Y"] = 42.74, + ["CD"] = 0, + }, + [32] = { + ["X"] = 59.89, + ["Y"] = 42.95, + ["CD"] = 0, + }, + [33] = { + ["X"] = 61.04, + ["Y"] = 43.6, + ["CD"] = 0, + }, + [34] = { + ["X"] = 62.82, + ["Y"] = 44.77, + ["CD"] = 0, + }, + [35] = { + ["X"] = 64.28, + ["Y"] = 47.39, + ["CD"] = 0, + }, + [36] = { + ["X"] = 65.46, + ["Y"] = 50.29, + ["CD"] = 0, + }, + [37] = { + ["X"] = 66.36, + ["Y"] = 51.96, + ["CD"] = 0, + }, + [38] = { + ["X"] = 67.58, + ["Y"] = 55.86, + ["CD"] = 0, + }, + [39] = { + ["X"] = 67.69, + ["Y"] = 57.08, + ["CD"] = 0, + }, + [40] = { + ["X"] = 66.7, + ["Y"] = 59.1, + ["CD"] = 0, + }, + [41] = { + ["X"] = 66.09, + ["Y"] = 61.15, + ["CD"] = 0, + }, + [42] = { + ["X"] = 65.52, + ["Y"] = 62.29, + ["CD"] = 0, + }, + [43] = { + ["X"] = 65.16, + ["Y"] = 62.99, + ["CD"] = 0, + }, + [44] = { + ["X"] = 45.97, + ["Y"] = 13.34, + ["CD"] = 0, + }, + [45] = { + ["X"] = 40.08, + ["Y"] = 15.91, + ["CD"] = 0, + }, + [46] = { + ["X"] = 41.09, + ["Y"] = 18.18, + ["CD"] = 0, + }, + [47] = { + ["X"] = 43.27, + ["Y"] = 19.12, + ["CD"] = 0, + }, + [48] = { + ["X"] = 44.76, + ["Y"] = 16.28, + ["CD"] = 0, + }, + [49] = { + ["X"] = 47.09, + ["Y"] = 16.2, + ["CD"] = 0, + }, + [50] = { + ["X"] = 49.71, + ["Y"] = 18, + ["CD"] = 0, + }, + [51] = { + ["X"] = 52.2, + ["Y"] = 18.56, + ["CD"] = 0, + }, + [52] = { + ["X"] = 51.68, + ["Y"] = 21.51, + ["CD"] = 0, + }, + [53] = { + ["X"] = 55.89, + ["Y"] = 40.14, + ["CD"] = 0, + }, + [54] = { + ["X"] = 57.1, + ["Y"] = 41.6, + ["CD"] = 0, + }, + [55] = { + ["X"] = 57.64, + ["Y"] = 41.94, + ["CD"] = 0, + }, + [56] = { + ["X"] = 67.58, + ["Y"] = 52.38, + ["CD"] = 0, + }, + [57] = { + ["X"] = 66.9, + ["Y"] = 54.24, + ["CD"] = 0, + }, + [58] = { + ["X"] = 66.73, + ["Y"] = 56.48, + ["CD"] = 0, + }, + [59] = { + ["X"] = 59.94, + ["Y"] = 67.07, + ["CD"] = 0, + }, + [60] = { + ["X"] = 58.56, + ["Y"] = 67.12, + ["CD"] = 0, + }, + [61] = { + ["X"] = 57.31, + ["Y"] = 67.5, + ["CD"] = 0, + }, + [62] = { + ["X"] = 49.51, + ["Y"] = 58.28, + ["CD"] = 0, + }, + [63] = { + ["X"] = 49.02, + ["Y"] = 57.03, + ["CD"] = 0, + }, + [64] = { + ["X"] = 48.15, + ["Y"] = 55.84, + ["CD"] = 0, + }, + [65] = { + ["X"] = 41.46, + ["Y"] = 49.57, + ["CD"] = 0, + }, + [66] = { + ["X"] = 40, + ["Y"] = 48.65, + ["CD"] = 0, + }, + [67] = { + ["X"] = 38.79, + ["Y"] = 48.34, + ["CD"] = 0, + }, + [68] = { + ["X"] = 34.57, + ["Y"] = 51.11, + ["CD"] = 0, + }, + [69] = { + ["X"] = 33.22, + ["Y"] = 52.3, + ["CD"] = 0, + }, + [70] = { + ["X"] = 31.83, + ["Y"] = 53.23, + ["CD"] = 0, + }, + [71] = { + ["X"] = 31.47, + ["Y"] = 53.57, + ["CD"] = 0, + }, + [72] = { + ["X"] = 53.43, + ["Y"] = 18.24, + ["CD"] = 0, + }, + [73] = { + ["X"] = 50.1, + ["Y"] = 11.22, + ["CD"] = 0, + }, + [74] = { + ["X"] = 51.42, + ["Y"] = 23.49, + ["CD"] = 0, + }, + [75] = { + ["X"] = 44.44, + ["Y"] = 13.95, + ["CD"] = 0, + }, + [76] = { + ["X"] = 43.51, + ["Y"] = 17.14, + ["CD"] = 0, + }, + [77] = { + ["X"] = 41.16, + ["Y"] = 49.52, + ["CD"] = 0, + }, + [78] = { + ["X"] = 46.7, + ["Y"] = 53.95, + ["CD"] = 0, + }, + [79] = { + ["X"] = 58.72, + ["Y"] = 67.38, + ["CD"] = 0, + }, + [80] = { + ["X"] = 56.91, + ["Y"] = 41.1, + ["CD"] = 0, + }, + [81] = { + ["X"] = 68.57, + ["Y"] = 51.75, + ["CD"] = 0, + }, +} +aura_env.cooldown = 600 +aura_env.wipeDistance = 50 +aura_env.angle = 0 +aura_env.hyp = 0 +aura_env.GetClosestHerb = function() + aura_env.minID = { + ["X"] = 0, + ["Y"] = 0, + ["D"] = 1000, + ["ID"] = 0, + } + local pX = GetPlayerMapPosition("player") or 0 + local pY = select(2, GetPlayerMapPosition("player")) or 0 + pX, pY = pX * 100, pY * 100 + for k, v in ipairs(aura_env.herbs) do + local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] + if cd == 0 then + local X, Y = pX - hX, pY - hY + local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) + if hyp < aura_env.minID["D"] then + aura_env.minID["X"] = hX + aura_env.minID["Y"] = hY + aura_env.minID["D"] = hyp + aura_env.minID["ID"] = k + end + end + end + return aura_env.minID["ID"] +end diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Cinderbloom.lua b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Herbalism/Cinderbloom.lua similarity index 93% rename from Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Cinderbloom.lua rename to WeakAuras/Projects/Herb Sniffer/Herb Arrays/Herbalism/Cinderbloom.lua index ec5e76e..1849dde 100644 --- a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Cinderbloom.lua +++ b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Herbalism/Cinderbloom.lua @@ -1,381 +1,381 @@ -aura_env.herbs = { - [1] = { - ["X"] = 55.83, - ["Y"] = 70.82, - ["CD"] = 0, - }, - [2] = { - ["X"] = 54.79, - ["Y"] = 69.62, - ["CD"] = 0, - }, - [3] = { - ["X"] = 54.46, - ["Y"] = 68.85, - ["CD"] = 0, - }, - [4] = { - ["X"] = 54.06, - ["Y"] = 67.47, - ["CD"] = 0, - }, - [5] = { - ["X"] = 53.67, - ["Y"] = 65.79, - ["CD"] = 0, - }, - [6] = { - ["X"] = 54.4, - ["Y"] = 64.58, - ["CD"] = 0, - }, - [7] = { - ["X"] = 55.43, - ["Y"] = 63.88, - ["CD"] = 0, - }, - [8] = { - ["X"] = 56.1, - ["Y"] = 64.35, - ["CD"] = 0, - }, - [9] = { - ["X"] = 56.57, - ["Y"] = 65.06, - ["CD"] = 0, - }, - [10] = { - ["X"] = 57.3, - ["Y"] = 65.21, - ["CD"] = 0, - }, - [11] = { - ["X"] = 58.88, - ["Y"] = 64.48, - ["CD"] = 0, - }, - [12] = { - ["X"] = 60.57, - ["Y"] = 63.9, - ["CD"] = 0, - }, - [13] = { - ["X"] = 61.47, - ["Y"] = 63.7, - ["CD"] = 0, - }, - [14] = { - ["X"] = 62.21, - ["Y"] = 63.3, - ["CD"] = 0, - }, - [15] = { - ["X"] = 63.2, - ["Y"] = 63.12, - ["CD"] = 0, - }, - [16] = { - ["X"] = 64.17, - ["Y"] = 62.56, - ["CD"] = 0, - }, - [17] = { - ["X"] = 65.08, - ["Y"] = 61.77, - ["CD"] = 0, - }, - [18] = { - ["X"] = 65.39, - ["Y"] = 60.16, - ["CD"] = 0, - }, - [19] = { - ["X"] = 65.57, - ["Y"] = 57.98, - ["CD"] = 0, - }, - [20] = { - ["X"] = 65.53, - ["Y"] = 55.56, - ["CD"] = 0, - }, - [21] = { - ["X"] = 64.44, - ["Y"] = 52.37, - ["CD"] = 0, - }, - [22] = { - ["X"] = 63.86, - ["Y"] = 50.96, - ["CD"] = 0, - }, - [23] = { - ["X"] = 63.14, - ["Y"] = 49.74, - ["CD"] = 0, - }, - [24] = { - ["X"] = 58.31, - ["Y"] = 47.48, - ["CD"] = 0, - }, - [25] = { - ["X"] = 56.2, - ["Y"] = 46.51, - ["CD"] = 0, - }, - [26] = { - ["X"] = 55.45, - ["Y"] = 47.13, - ["CD"] = 0, - }, - [27] = { - ["X"] = 55.15, - ["Y"] = 48.26, - ["CD"] = 0, - }, - [28] = { - ["X"] = 54.81, - ["Y"] = 49.21, - ["CD"] = 0, - }, - [29] = { - ["X"] = 55.15, - ["Y"] = 49.72, - ["CD"] = 0, - }, - [30] = { - ["X"] = 56.01, - ["Y"] = 50.37, - ["CD"] = 0, - }, - [31] = { - ["X"] = 56.01, - ["Y"] = 50.37, - ["CD"] = 0, - }, - [32] = { - ["X"] = 56.01, - ["Y"] = 50.37, - ["CD"] = 0, - }, - [33] = { - ["X"] = 57.26, - ["Y"] = 51.69, - ["CD"] = 0, - }, - [34] = { - ["X"] = 57.23, - ["Y"] = 53.17, - ["CD"] = 0, - }, - [35] = { - ["X"] = 57.06, - ["Y"] = 53.85, - ["CD"] = 0, - }, - [36] = { - ["X"] = 57.09, - ["Y"] = 54.24, - ["CD"] = 0, - }, - [37] = { - ["X"] = 56.75, - ["Y"] = 54.17, - ["CD"] = 0, - }, - [38] = { - ["X"] = 56.22, - ["Y"] = 53.84, - ["CD"] = 0, - }, - [39] = { - ["X"] = 55.69, - ["Y"] = 53.19, - ["CD"] = 0, - }, - [40] = { - ["X"] = 55.34, - ["Y"] = 53.27, - ["CD"] = 0, - }, - [41] = { - ["X"] = 54.31, - ["Y"] = 53.97, - ["CD"] = 0, - }, - [42] = { - ["X"] = 54.17, - ["Y"] = 53.51, - ["CD"] = 0, - }, - [43] = { - ["X"] = 53.38, - ["Y"] = 53.84, - ["CD"] = 0, - }, - [44] = { - ["X"] = 52.77, - ["Y"] = 53.98, - ["CD"] = 0, - }, - [45] = { - ["X"] = 51.93, - ["Y"] = 53.19, - ["CD"] = 0, - }, - [46] = { - ["X"] = 51.84, - ["Y"] = 52.64, - ["CD"] = 0, - }, - [47] = { - ["X"] = 52.12, - ["Y"] = 51.32, - ["CD"] = 0, - }, - [48] = { - ["X"] = 52.44, - ["Y"] = 49.9, - ["CD"] = 0, - }, - [49] = { - ["X"] = 52.48, - ["Y"] = 48.98, - ["CD"] = 0, - }, - [50] = { - ["X"] = 52.39, - ["Y"] = 48.33, - ["CD"] = 0, - }, - [51] = { - ["X"] = 52.08, - ["Y"] = 47.18, - ["CD"] = 0, - }, - [52] = { - ["X"] = 51.87, - ["Y"] = 46.8, - ["CD"] = 0, - }, - [53] = { - ["X"] = 50.91, - ["Y"] = 47.03, - ["CD"] = 0, - }, - [54] = { - ["X"] = 50.39, - ["Y"] = 46.97, - ["CD"] = 0, - }, - [55] = { - ["X"] = 50, - ["Y"] = 46.65, - ["CD"] = 0, - }, - [56] = { - ["X"] = 49.86, - ["Y"] = 46.22, - ["CD"] = 0, - }, - [57] = { - ["X"] = 49.44, - ["Y"] = 46.49, - ["CD"] = 0, - }, - [58] = { - ["X"] = 48.98, - ["Y"] = 46.35, - ["CD"] = 0, - }, - [59] = { - ["X"] = 48.4, - ["Y"] = 45.7, - ["CD"] = 0, - }, - [60] = { - ["X"] = 47.67, - ["Y"] = 45.04, - ["CD"] = 0, - }, - [61] = { - ["X"] = 47.06, - ["Y"] = 44.67, - ["CD"] = 0, - }, - [62] = { - ["X"] = 46.5, - ["Y"] = 43.44, - ["CD"] = 0, - }, - [63] = { - ["X"] = 32.58, - ["Y"] = 38.7, - ["CD"] = 0, - }, - [64] = { - ["X"] = 34.29, - ["Y"] = 39.32, - ["CD"] = 0, - }, - [65] = { - ["X"] = 36.08, - ["Y"] = 39.31, - ["CD"] = 0, - }, - [66] = { - ["X"] = 36.91, - ["Y"] = 41.58, - ["CD"] = 0, - }, - [67] = { - ["X"] = 38.79, - ["Y"] = 40.82, - ["CD"] = 0, - }, - [68] = { - ["X"] = 39.68, - ["Y"] = 40.87, - ["CD"] = 0, - }, - [69] = { - ["X"] = 41.32, - ["Y"] = 41.66, - ["CD"] = 0, - }, - [70] = { - ["X"] = 42.81, - ["Y"] = 43.91, - ["CD"] = 0, - }, -} -aura_env.cooldown = 600 -aura_env.wipeDistance = 50 -aura_env.angle = 0 -aura_env.hyp = 0 -aura_env.GetClosestHerb = function() - aura_env.minID = { - ["X"] = 0, - ["Y"] = 0, - ["D"] = 1000, - ["ID"] = 0, - } - local pX = GetPlayerMapPosition("player") or 0 - local pY = select(2, GetPlayerMapPosition("player")) or 0 - pX, pY = pX * 100, pY * 100 - for k, v in ipairs(aura_env.herbs) do - local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] - if cd == 0 then - local X, Y = pX - hX, pY - hY - local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) - if hyp < aura_env.minID["D"] then - aura_env.minID["X"] = hX - aura_env.minID["Y"] = hY - aura_env.minID["D"] = hyp - aura_env.minID["ID"] = k - end - end - end - return aura_env.minID["ID"] -end +aura_env.herbs = { + [1] = { + ["X"] = 55.83, + ["Y"] = 70.82, + ["CD"] = 0, + }, + [2] = { + ["X"] = 54.79, + ["Y"] = 69.62, + ["CD"] = 0, + }, + [3] = { + ["X"] = 54.46, + ["Y"] = 68.85, + ["CD"] = 0, + }, + [4] = { + ["X"] = 54.06, + ["Y"] = 67.47, + ["CD"] = 0, + }, + [5] = { + ["X"] = 53.67, + ["Y"] = 65.79, + ["CD"] = 0, + }, + [6] = { + ["X"] = 54.4, + ["Y"] = 64.58, + ["CD"] = 0, + }, + [7] = { + ["X"] = 55.43, + ["Y"] = 63.88, + ["CD"] = 0, + }, + [8] = { + ["X"] = 56.1, + ["Y"] = 64.35, + ["CD"] = 0, + }, + [9] = { + ["X"] = 56.57, + ["Y"] = 65.06, + ["CD"] = 0, + }, + [10] = { + ["X"] = 57.3, + ["Y"] = 65.21, + ["CD"] = 0, + }, + [11] = { + ["X"] = 58.88, + ["Y"] = 64.48, + ["CD"] = 0, + }, + [12] = { + ["X"] = 60.57, + ["Y"] = 63.9, + ["CD"] = 0, + }, + [13] = { + ["X"] = 61.47, + ["Y"] = 63.7, + ["CD"] = 0, + }, + [14] = { + ["X"] = 62.21, + ["Y"] = 63.3, + ["CD"] = 0, + }, + [15] = { + ["X"] = 63.2, + ["Y"] = 63.12, + ["CD"] = 0, + }, + [16] = { + ["X"] = 64.17, + ["Y"] = 62.56, + ["CD"] = 0, + }, + [17] = { + ["X"] = 65.08, + ["Y"] = 61.77, + ["CD"] = 0, + }, + [18] = { + ["X"] = 65.39, + ["Y"] = 60.16, + ["CD"] = 0, + }, + [19] = { + ["X"] = 65.57, + ["Y"] = 57.98, + ["CD"] = 0, + }, + [20] = { + ["X"] = 65.53, + ["Y"] = 55.56, + ["CD"] = 0, + }, + [21] = { + ["X"] = 64.44, + ["Y"] = 52.37, + ["CD"] = 0, + }, + [22] = { + ["X"] = 63.86, + ["Y"] = 50.96, + ["CD"] = 0, + }, + [23] = { + ["X"] = 63.14, + ["Y"] = 49.74, + ["CD"] = 0, + }, + [24] = { + ["X"] = 58.31, + ["Y"] = 47.48, + ["CD"] = 0, + }, + [25] = { + ["X"] = 56.2, + ["Y"] = 46.51, + ["CD"] = 0, + }, + [26] = { + ["X"] = 55.45, + ["Y"] = 47.13, + ["CD"] = 0, + }, + [27] = { + ["X"] = 55.15, + ["Y"] = 48.26, + ["CD"] = 0, + }, + [28] = { + ["X"] = 54.81, + ["Y"] = 49.21, + ["CD"] = 0, + }, + [29] = { + ["X"] = 55.15, + ["Y"] = 49.72, + ["CD"] = 0, + }, + [30] = { + ["X"] = 56.01, + ["Y"] = 50.37, + ["CD"] = 0, + }, + [31] = { + ["X"] = 56.01, + ["Y"] = 50.37, + ["CD"] = 0, + }, + [32] = { + ["X"] = 56.01, + ["Y"] = 50.37, + ["CD"] = 0, + }, + [33] = { + ["X"] = 57.26, + ["Y"] = 51.69, + ["CD"] = 0, + }, + [34] = { + ["X"] = 57.23, + ["Y"] = 53.17, + ["CD"] = 0, + }, + [35] = { + ["X"] = 57.06, + ["Y"] = 53.85, + ["CD"] = 0, + }, + [36] = { + ["X"] = 57.09, + ["Y"] = 54.24, + ["CD"] = 0, + }, + [37] = { + ["X"] = 56.75, + ["Y"] = 54.17, + ["CD"] = 0, + }, + [38] = { + ["X"] = 56.22, + ["Y"] = 53.84, + ["CD"] = 0, + }, + [39] = { + ["X"] = 55.69, + ["Y"] = 53.19, + ["CD"] = 0, + }, + [40] = { + ["X"] = 55.34, + ["Y"] = 53.27, + ["CD"] = 0, + }, + [41] = { + ["X"] = 54.31, + ["Y"] = 53.97, + ["CD"] = 0, + }, + [42] = { + ["X"] = 54.17, + ["Y"] = 53.51, + ["CD"] = 0, + }, + [43] = { + ["X"] = 53.38, + ["Y"] = 53.84, + ["CD"] = 0, + }, + [44] = { + ["X"] = 52.77, + ["Y"] = 53.98, + ["CD"] = 0, + }, + [45] = { + ["X"] = 51.93, + ["Y"] = 53.19, + ["CD"] = 0, + }, + [46] = { + ["X"] = 51.84, + ["Y"] = 52.64, + ["CD"] = 0, + }, + [47] = { + ["X"] = 52.12, + ["Y"] = 51.32, + ["CD"] = 0, + }, + [48] = { + ["X"] = 52.44, + ["Y"] = 49.9, + ["CD"] = 0, + }, + [49] = { + ["X"] = 52.48, + ["Y"] = 48.98, + ["CD"] = 0, + }, + [50] = { + ["X"] = 52.39, + ["Y"] = 48.33, + ["CD"] = 0, + }, + [51] = { + ["X"] = 52.08, + ["Y"] = 47.18, + ["CD"] = 0, + }, + [52] = { + ["X"] = 51.87, + ["Y"] = 46.8, + ["CD"] = 0, + }, + [53] = { + ["X"] = 50.91, + ["Y"] = 47.03, + ["CD"] = 0, + }, + [54] = { + ["X"] = 50.39, + ["Y"] = 46.97, + ["CD"] = 0, + }, + [55] = { + ["X"] = 50, + ["Y"] = 46.65, + ["CD"] = 0, + }, + [56] = { + ["X"] = 49.86, + ["Y"] = 46.22, + ["CD"] = 0, + }, + [57] = { + ["X"] = 49.44, + ["Y"] = 46.49, + ["CD"] = 0, + }, + [58] = { + ["X"] = 48.98, + ["Y"] = 46.35, + ["CD"] = 0, + }, + [59] = { + ["X"] = 48.4, + ["Y"] = 45.7, + ["CD"] = 0, + }, + [60] = { + ["X"] = 47.67, + ["Y"] = 45.04, + ["CD"] = 0, + }, + [61] = { + ["X"] = 47.06, + ["Y"] = 44.67, + ["CD"] = 0, + }, + [62] = { + ["X"] = 46.5, + ["Y"] = 43.44, + ["CD"] = 0, + }, + [63] = { + ["X"] = 32.58, + ["Y"] = 38.7, + ["CD"] = 0, + }, + [64] = { + ["X"] = 34.29, + ["Y"] = 39.32, + ["CD"] = 0, + }, + [65] = { + ["X"] = 36.08, + ["Y"] = 39.31, + ["CD"] = 0, + }, + [66] = { + ["X"] = 36.91, + ["Y"] = 41.58, + ["CD"] = 0, + }, + [67] = { + ["X"] = 38.79, + ["Y"] = 40.82, + ["CD"] = 0, + }, + [68] = { + ["X"] = 39.68, + ["Y"] = 40.87, + ["CD"] = 0, + }, + [69] = { + ["X"] = 41.32, + ["Y"] = 41.66, + ["CD"] = 0, + }, + [70] = { + ["X"] = 42.81, + ["Y"] = 43.91, + ["CD"] = 0, + }, +} +aura_env.cooldown = 600 +aura_env.wipeDistance = 50 +aura_env.angle = 0 +aura_env.hyp = 0 +aura_env.GetClosestHerb = function() + aura_env.minID = { + ["X"] = 0, + ["Y"] = 0, + ["D"] = 1000, + ["ID"] = 0, + } + local pX = GetPlayerMapPosition("player") or 0 + local pY = select(2, GetPlayerMapPosition("player")) or 0 + pX, pY = pX * 100, pY * 100 + for k, v in ipairs(aura_env.herbs) do + local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] + if cd == 0 then + local X, Y = pX - hX, pY - hY + local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) + if hyp < aura_env.minID["D"] then + aura_env.minID["X"] = hX + aura_env.minID["Y"] = hY + aura_env.minID["D"] = hyp + aura_env.minID["ID"] = k + end + end + end + return aura_env.minID["ID"] +end diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Dreamleaf.lua b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Herbalism/Dreamleaf.lua similarity index 92% rename from Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Dreamleaf.lua rename to WeakAuras/Projects/Herb Sniffer/Herb Arrays/Herbalism/Dreamleaf.lua index 83ba647..4c85e88 100644 --- a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Dreamleaf.lua +++ b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Herbalism/Dreamleaf.lua @@ -1,1031 +1,1031 @@ -aura_env.herbs = { - [1] = { - ["X"] = 61.87, - ["Y"] = 52.19, - ["CD"] = 0, - }, - [2] = { - ["X"] = 60.2, - ["Y"] = 53.05, - ["CD"] = 0, - }, - [3] = { - ["X"] = 60.65, - ["Y"] = 54.53, - ["CD"] = 0, - }, - [4] = { - ["X"] = 59.47, - ["Y"] = 55.87, - ["CD"] = 0, - }, - [5] = { - ["X"] = 56.22, - ["Y"] = 60.29, - ["CD"] = 0, - }, - [6] = { - ["X"] = 56.95, - ["Y"] = 61.33, - ["CD"] = 0, - }, - [7] = { - ["X"] = 56.52, - ["Y"] = 64.31, - ["CD"] = 0, - }, - [8] = { - ["X"] = 58.38, - ["Y"] = 65.51, - ["CD"] = 0, - }, - [9] = { - ["X"] = 56.03, - ["Y"] = 64.65, - ["CD"] = 0, - }, - [10] = { - ["X"] = 55.53, - ["Y"] = 70.26, - ["CD"] = 0, - }, - [11] = { - ["X"] = 57.79, - ["Y"] = 71.48, - ["CD"] = 0, - }, - [12] = { - ["X"] = 59.03, - ["Y"] = 69.43, - ["CD"] = 0, - }, - [13] = { - ["X"] = 57.33, - ["Y"] = 69.9, - ["CD"] = 0, - }, - [14] = { - ["X"] = 55.39, - ["Y"] = 68.84, - ["CD"] = 0, - }, - [15] = { - ["X"] = 55.08, - ["Y"] = 63.45, - ["CD"] = 0, - }, - [16] = { - ["X"] = 52.34, - ["Y"] = 61.54, - ["CD"] = 0, - }, - [17] = { - ["X"] = 51.12, - ["Y"] = 64.53, - ["CD"] = 0, - }, - [18] = { - ["X"] = 54.28, - ["Y"] = 62.65, - ["CD"] = 0, - }, - [19] = { - ["X"] = 54.32, - ["Y"] = 66.08, - ["CD"] = 0, - }, - [20] = { - ["X"] = 58.53, - ["Y"] = 61.45, - ["CD"] = 0, - }, - [21] = { - ["X"] = 58.37, - ["Y"] = 63.02, - ["CD"] = 0, - }, - [22] = { - ["X"] = 59.24, - ["Y"] = 65.05, - ["CD"] = 0, - }, - [23] = { - ["X"] = 62.31, - ["Y"] = 64.97, - ["CD"] = 0, - }, - [24] = { - ["X"] = 63.37, - ["Y"] = 67.79, - ["CD"] = 0, - }, - [25] = { - ["X"] = 64.83, - ["Y"] = 68.7, - ["CD"] = 0, - }, - [26] = { - ["X"] = 68.37, - ["Y"] = 63.92, - ["CD"] = 0, - }, - [27] = { - ["X"] = 66.9, - ["Y"] = 66.86, - ["CD"] = 0, - }, - [28] = { - ["X"] = 67.08, - ["Y"] = 68.7, - ["CD"] = 0, - }, - [29] = { - ["X"] = 66.91, - ["Y"] = 70.84, - ["CD"] = 0, - }, - [30] = { - ["X"] = 65.61, - ["Y"] = 71.3, - ["CD"] = 0, - }, - [31] = { - ["X"] = 65.43, - ["Y"] = 74.05, - ["CD"] = 0, - }, - [32] = { - ["X"] = 66.57, - ["Y"] = 73.67, - ["CD"] = 0, - }, - [33] = { - ["X"] = 68.75, - ["Y"] = 72.27, - ["CD"] = 0, - }, - [34] = { - ["X"] = 67.56, - ["Y"] = 72.17, - ["CD"] = 0, - }, - [35] = { - ["X"] = 68.81, - ["Y"] = 74.63, - ["CD"] = 0, - }, - [36] = { - ["X"] = 67.77, - ["Y"] = 75.19, - ["CD"] = 0, - }, - [37] = { - ["X"] = 67.02, - ["Y"] = 76.86, - ["CD"] = 0, - }, - [38] = { - ["X"] = 65.7, - ["Y"] = 75.96, - ["CD"] = 0, - }, - [39] = { - ["X"] = 60.05, - ["Y"] = 76.17, - ["CD"] = 0, - }, - [40] = { - ["X"] = 56.95, - ["Y"] = 76.95, - ["CD"] = 0, - }, - [41] = { - ["X"] = 57.35, - ["Y"] = 75.19, - ["CD"] = 0, - }, - [42] = { - ["X"] = 58.36, - ["Y"] = 73.27, - ["CD"] = 0, - }, - [43] = { - ["X"] = 59.08, - ["Y"] = 73.81, - ["CD"] = 0, - }, - [44] = { - ["X"] = 60.66, - ["Y"] = 75.82, - ["CD"] = 0, - }, - [45] = { - ["X"] = 61.34, - ["Y"] = 79.25, - ["CD"] = 0, - }, - [46] = { - ["X"] = 62.71, - ["Y"] = 80.38, - ["CD"] = 0, - }, - [47] = { - ["X"] = 60.26, - ["Y"] = 80.68, - ["CD"] = 0, - }, - [48] = { - ["X"] = 59.23, - ["Y"] = 82.19, - ["CD"] = 0, - }, - [49] = { - ["X"] = 62.34, - ["Y"] = 84.98, - ["CD"] = 0, - }, - [50] = { - ["X"] = 58.92, - ["Y"] = 88.3, - ["CD"] = 0, - }, - [51] = { - ["X"] = 55.85, - ["Y"] = 89.71, - ["CD"] = 0, - }, - [52] = { - ["X"] = 56.13, - ["Y"] = 87.83, - ["CD"] = 0, - }, - [53] = { - ["X"] = 54.22, - ["Y"] = 88.9, - ["CD"] = 0, - }, - [54] = { - ["X"] = 53.37, - ["Y"] = 87.68, - ["CD"] = 0, - }, - [55] = { - ["X"] = 50.61, - ["Y"] = 86.57, - ["CD"] = 0, - }, - [56] = { - ["X"] = 49.98, - ["Y"] = 83.55, - ["CD"] = 0, - }, - [57] = { - ["X"] = 49.47, - ["Y"] = 81.21, - ["CD"] = 0, - }, - [58] = { - ["X"] = 50.49, - ["Y"] = 79.7, - ["CD"] = 0, - }, - [59] = { - ["X"] = 51.4, - ["Y"] = 78.35, - ["CD"] = 0, - }, - [60] = { - ["X"] = 52.52, - ["Y"] = 75.98, - ["CD"] = 0, - }, - [61] = { - ["X"] = 48.75, - ["Y"] = 73.96, - ["CD"] = 0, - }, - [62] = { - ["X"] = 48.14, - ["Y"] = 72.49, - ["CD"] = 0, - }, - [63] = { - ["X"] = 46.98, - ["Y"] = 58.58, - ["CD"] = 0, - }, - [64] = { - ["X"] = 43.72, - ["Y"] = 57.99, - ["CD"] = 0, - }, - [65] = { - ["X"] = 46.84, - ["Y"] = 37.45, - ["CD"] = 0, - }, - [66] = { - ["X"] = 46.85, - ["Y"] = 39.36, - ["CD"] = 0, - }, - [67] = { - ["X"] = 47.84, - ["Y"] = 38.96, - ["CD"] = 0, - }, - [68] = { - ["X"] = 48.45, - ["Y"] = 40.92, - ["CD"] = 0, - }, - [69] = { - ["X"] = 50.4, - ["Y"] = 39.27, - ["CD"] = 0, - }, - [70] = { - ["X"] = 50.43, - ["Y"] = 40.57, - ["CD"] = 0, - }, - [71] = { - ["X"] = 52.45, - ["Y"] = 44.2, - ["CD"] = 0, - }, - [72] = { - ["X"] = 54.73, - ["Y"] = 47.17, - ["CD"] = 0, - }, - [73] = { - ["X"] = 56.35, - ["Y"] = 45.89, - ["CD"] = 0, - }, - [74] = { - ["X"] = 54.9, - ["Y"] = 41.74, - ["CD"] = 0, - }, - [75] = { - ["X"] = 54.87, - ["Y"] = 39.41, - ["CD"] = 0, - }, - [76] = { - ["X"] = 56.71, - ["Y"] = 40.19, - ["CD"] = 0, - }, - [77] = { - ["X"] = 57.58, - ["Y"] = 41.53, - ["CD"] = 0, - }, - [78] = { - ["X"] = 58.36, - ["Y"] = 41.66, - ["CD"] = 0, - }, - [79] = { - ["X"] = 60.05, - ["Y"] = 42.17, - ["CD"] = 0, - }, - [80] = { - ["X"] = 61.65, - ["Y"] = 43.31, - ["CD"] = 0, - }, - [81] = { - ["X"] = 60.92, - ["Y"] = 41.56, - ["CD"] = 0, - }, - [82] = { - ["X"] = 62.24, - ["Y"] = 44.16, - ["CD"] = 0, - }, - [83] = { - ["X"] = 62.18, - ["Y"] = 43.11, - ["CD"] = 0, - }, - [84] = { - ["X"] = 64.04, - ["Y"] = 40.91, - ["CD"] = 0, - }, - [85] = { - ["X"] = 62.84, - ["Y"] = 40.65, - ["CD"] = 0, - }, - [86] = { - ["X"] = 63.51, - ["Y"] = 38.93, - ["CD"] = 0, - }, - [87] = { - ["X"] = 69.12, - ["Y"] = 39.38, - ["CD"] = 0, - }, - [88] = { - ["X"] = 70.92, - ["Y"] = 38.4, - ["CD"] = 0, - }, - [89] = { - ["X"] = 71.19, - ["Y"] = 42.44, - ["CD"] = 0, - }, - [90] = { - ["X"] = 72.93, - ["Y"] = 44.69, - ["CD"] = 0, - }, - [91] = { - ["X"] = 71.57, - ["Y"] = 47.07, - ["CD"] = 0, - }, - [92] = { - ["X"] = 69.24, - ["Y"] = 45.68, - ["CD"] = 0, - }, - [93] = { - ["X"] = 69.93, - ["Y"] = 47.65, - ["CD"] = 0, - }, - [94] = { - ["X"] = 68.74, - ["Y"] = 48.58, - ["CD"] = 0, - }, - [95] = { - ["X"] = 68.01, - ["Y"] = 50.36, - ["CD"] = 0, - }, - [96] = { - ["X"] = 70.59, - ["Y"] = 51.95, - ["CD"] = 0, - }, - [97] = { - ["X"] = 70.77, - ["Y"] = 54.92, - ["CD"] = 0, - }, - [98] = { - ["X"] = 71.17, - ["Y"] = 56.39, - ["CD"] = 0, - }, - [99] = { - ["X"] = 70.27, - ["Y"] = 56.41, - ["CD"] = 0, - }, - [100] = { - ["X"] = 69.1, - ["Y"] = 55.12, - ["CD"] = 0, - }, - [101] = { - ["X"] = 65.97, - ["Y"] = 59.44, - ["CD"] = 0, - }, - [102] = { - ["X"] = 65.88, - ["Y"] = 56.5, - ["CD"] = 0, - }, - [103] = { - ["X"] = 64.45, - ["Y"] = 53.78, - ["CD"] = 0, - }, - [104] = { - ["X"] = 63.19, - ["Y"] = 56.73, - ["CD"] = 0, - }, - [105] = { - ["X"] = 64.13, - ["Y"] = 58.96, - ["CD"] = 0, - }, - [106] = { - ["X"] = 65.55, - ["Y"] = 61.24, - ["CD"] = 0, - }, - [107] = { - ["X"] = 64.01, - ["Y"] = 61.23, - ["CD"] = 0, - }, - [108] = { - ["X"] = 64.35, - ["Y"] = 75.33, - ["CD"] = 0, - }, - [109] = { - ["X"] = 64.04, - ["Y"] = 79.4, - ["CD"] = 0, - }, - [110] = { - ["X"] = 65.31, - ["Y"] = 79.67, - ["CD"] = 0, - }, - [111] = { - ["X"] = 64.07, - ["Y"] = 81.41, - ["CD"] = 0, - }, - [112] = { - ["X"] = 62.41, - ["Y"] = 82.04, - ["CD"] = 0, - }, - [113] = { - ["X"] = 61.02, - ["Y"] = 83.56, - ["CD"] = 0, - }, - [114] = { - ["X"] = 59.89, - ["Y"] = 83.19, - ["CD"] = 0, - }, - [115] = { - ["X"] = 60.72, - ["Y"] = 84.32, - ["CD"] = 0, - }, - [116] = { - ["X"] = 61.72, - ["Y"] = 84.3, - ["CD"] = 0, - }, - [117] = { - ["X"] = 59.99, - ["Y"] = 79.24, - ["CD"] = 0, - }, - [118] = { - ["X"] = 56.12, - ["Y"] = 79.23, - ["CD"] = 0, - }, - [119] = { - ["X"] = 55.7, - ["Y"] = 76.89, - ["CD"] = 0, - }, - [120] = { - ["X"] = 51.19, - ["Y"] = 72.26, - ["CD"] = 0, - }, - [121] = { - ["X"] = 53.78, - ["Y"] = 70.92, - ["CD"] = 0, - }, - [122] = { - ["X"] = 52.44, - ["Y"] = 72.53, - ["CD"] = 0, - }, - [123] = { - ["X"] = 47.63, - ["Y"] = 77.64, - ["CD"] = 0, - }, - [124] = { - ["X"] = 49.85, - ["Y"] = 74.92, - ["CD"] = 0, - }, - [125] = { - ["X"] = 49.99, - ["Y"] = 77.55, - ["CD"] = 0, - }, - [126] = { - ["X"] = 47.43, - ["Y"] = 76.36, - ["CD"] = 0, - }, - [127] = { - ["X"] = 44.57, - ["Y"] = 82.87, - ["CD"] = 0, - }, - [128] = { - ["X"] = 44.59, - ["Y"] = 86.64, - ["CD"] = 0, - }, - [129] = { - ["X"] = 45.1, - ["Y"] = 86.63, - ["CD"] = 0, - }, - [130] = { - ["X"] = 44.31, - ["Y"] = 85.05, - ["CD"] = 0, - }, - [131] = { - ["X"] = 42.91, - ["Y"] = 83.59, - ["CD"] = 0, - }, - [132] = { - ["X"] = 42.69, - ["Y"] = 81.24, - ["CD"] = 0, - }, - [133] = { - ["X"] = 42.59, - ["Y"] = 80.4, - ["CD"] = 0, - }, - [134] = { - ["X"] = 41.57, - ["Y"] = 81.13, - ["CD"] = 0, - }, - [135] = { - ["X"] = 40.88, - ["Y"] = 75.34, - ["CD"] = 0, - }, - [136] = { - ["X"] = 50.44, - ["Y"] = 53.49, - ["CD"] = 0, - }, - [137] = { - ["X"] = 53.43, - ["Y"] = 52.68, - ["CD"] = 0, - }, - [138] = { - ["X"] = 55.29, - ["Y"] = 50.86, - ["CD"] = 0, - }, - [139] = { - ["X"] = 54.1, - ["Y"] = 52.27, - ["CD"] = 0, - }, - [140] = { - ["X"] = 53.37, - ["Y"] = 51.14, - ["CD"] = 0, - }, - [141] = { - ["X"] = 53.52, - ["Y"] = 49.5, - ["CD"] = 0, - }, - [142] = { - ["X"] = 52.4, - ["Y"] = 49.71, - ["CD"] = 0, - }, - [143] = { - ["X"] = 50.9, - ["Y"] = 49.61, - ["CD"] = 0, - }, - [144] = { - ["X"] = 47.8, - ["Y"] = 52.24, - ["CD"] = 0, - }, - [145] = { - ["X"] = 47.93, - ["Y"] = 55.01, - ["CD"] = 0, - }, - [146] = { - ["X"] = 46.89, - ["Y"] = 53.79, - ["CD"] = 0, - }, - [147] = { - ["X"] = 46.22, - ["Y"] = 55.18, - ["CD"] = 0, - }, - [148] = { - ["X"] = 46.32, - ["Y"] = 56.82, - ["CD"] = 0, - }, - [149] = { - ["X"] = 40.2, - ["Y"] = 62.85, - ["CD"] = 0, - }, - [150] = { - ["X"] = 40.35, - ["Y"] = 60.93, - ["CD"] = 0, - }, - [151] = { - ["X"] = 36.08, - ["Y"] = 58.38, - ["CD"] = 0, - }, - [152] = { - ["X"] = 35.03, - ["Y"] = 60.53, - ["CD"] = 0, - }, - [153] = { - ["X"] = 35.66, - ["Y"] = 60.3, - ["CD"] = 0, - }, - [154] = { - ["X"] = 40.75, - ["Y"] = 60.72, - ["CD"] = 0, - }, - [155] = { - ["X"] = 44.99, - ["Y"] = 60.93, - ["CD"] = 0, - }, - [156] = { - ["X"] = 43.77, - ["Y"] = 60.96, - ["CD"] = 0, - }, - [157] = { - ["X"] = 43.04, - ["Y"] = 63.03, - ["CD"] = 0, - }, - [158] = { - ["X"] = 41.88, - ["Y"] = 63.67, - ["CD"] = 0, - }, - [159] = { - ["X"] = 42.45, - ["Y"] = 61.88, - ["CD"] = 0, - }, - [160] = { - ["X"] = 43.65, - ["Y"] = 60.82, - ["CD"] = 0, - }, - [161] = { - ["X"] = 58.38, - ["Y"] = 33.52, - ["CD"] = 0, - }, - [162] = { - ["X"] = 41.66, - ["Y"] = 54.31, - ["CD"] = 0, - }, - [163] = { - ["X"] = 40.52, - ["Y"] = 51.34, - ["CD"] = 0, - }, - [164] = { - ["X"] = 37.56, - ["Y"] = 54.61, - ["CD"] = 0, - }, - [165] = { - ["X"] = 49.48, - ["Y"] = 49.77, - ["CD"] = 0, - }, - [166] = { - ["X"] = 51.33, - ["Y"] = 41.98, - ["CD"] = 0, - }, - [167] = { - ["X"] = 55.3, - ["Y"] = 55.78, - ["CD"] = 0, - }, - [168] = { - ["X"] = 61.99, - ["Y"] = 30.91, - ["CD"] = 0, - }, - [169] = { - ["X"] = 57.71, - ["Y"] = 39.6, - ["CD"] = 0, - }, - [170] = { - ["X"] = 69.54, - ["Y"] = 37.38, - ["CD"] = 0, - }, - [171] = { - ["X"] = 68.35, - ["Y"] = 39.91, - ["CD"] = 0, - }, - [172] = { - ["X"] = 62.37, - ["Y"] = 48.14, - ["CD"] = 0, - }, - [173] = { - ["X"] = 65.9, - ["Y"] = 41.14, - ["CD"] = 0, - }, - [174] = { - ["X"] = 73.55, - ["Y"] = 52.84, - ["CD"] = 0, - }, - [175] = { - ["X"] = 74.57, - ["Y"] = 39.75, - ["CD"] = 0, - }, - [176] = { - ["X"] = 72.1, - ["Y"] = 49.22, - ["CD"] = 0, - }, - [177] = { - ["X"] = 69.79, - ["Y"] = 53.26, - ["CD"] = 0, - }, - [178] = { - ["X"] = 67.27, - ["Y"] = 60.55, - ["CD"] = 0, - }, - [179] = { - ["X"] = 64.16, - ["Y"] = 58.7, - ["CD"] = 0, - }, - [180] = { - ["X"] = 54.76, - ["Y"] = 57.01, - ["CD"] = 0, - }, - [181] = { - ["X"] = 57.81, - ["Y"] = 60.35, - ["CD"] = 0, - }, - [182] = { - ["X"] = 48.01, - ["Y"] = 69.08, - ["CD"] = 0, - }, - [183] = { - ["X"] = 42.49, - ["Y"] = 79.11, - ["CD"] = 0, - }, - [184] = { - ["X"] = 41.64, - ["Y"] = 69.85, - ["CD"] = 0, - }, - [185] = { - ["X"] = 45.52, - ["Y"] = 73.05, - ["CD"] = 0, - }, - [186] = { - ["X"] = 50.98, - ["Y"] = 82.3, - ["CD"] = 0, - }, - [187] = { - ["X"] = 65.76, - ["Y"] = 68.15, - ["CD"] = 0, - }, - [188] = { - ["X"] = 63.63, - ["Y"] = 64.98, - ["CD"] = 0, - }, - [189] = { - ["X"] = 57.28, - ["Y"] = 90.49, - ["CD"] = 0, - }, - [190] = { - ["X"] = 55.64, - ["Y"] = 84.34, - ["CD"] = 0, - }, - [191] = { - ["X"] = 39.95, - ["Y"] = 88.45, - ["CD"] = 0, - }, - [192] = { - ["X"] = 44.02, - ["Y"] = 82.51, - ["CD"] = 0, - }, - [193] = { - ["X"] = 47.72, - ["Y"] = 85.61, - ["CD"] = 0, - }, - [194] = { - ["X"] = 50.24, - ["Y"] = 84.23, - ["CD"] = 0, - }, - [195] = { - ["X"] = 43.02, - ["Y"] = 88.03, - ["CD"] = 0, - }, - [196] = { - ["X"] = 46.15, - ["Y"] = 83.47, - ["CD"] = 0, - }, - [197] = { - ["X"] = 55.23, - ["Y"] = 68.18, - ["CD"] = 0, - }, - [198] = { - ["X"] = 22.55, - ["Y"] = 64.61, - ["CD"] = 0, - }, - [199] = { - ["X"] = 22.95, - ["Y"] = 72.49, - ["CD"] = 0, - }, - [200] = { - ["X"] = 21.81, - ["Y"] = 69.82, - ["CD"] = 0, - }, -} -aura_env.cooldown = 600 -aura_env.wipeDistance = 50 -aura_env.angle = 0 -aura_env.hyp = 0 -aura_env.GetClosestHerb = function() - aura_env.minID = { - ["X"] = 0, - ["Y"] = 0, - ["D"] = 1000, - ["ID"] = 0, - } - local pX = GetPlayerMapPosition("player") or 0 - local pY = select(2, GetPlayerMapPosition("player")) or 0 - pX, pY = pX * 100, pY * 100 - for k, v in ipairs(aura_env.herbs) do - local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] - if cd == 0 then - local X, Y = pX - hX, pY - hY - local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) - if hyp < aura_env.minID["D"] then - aura_env.minID["X"] = hX - aura_env.minID["Y"] = hY - aura_env.minID["D"] = hyp - aura_env.minID["ID"] = k - end - end - end - return aura_env.minID["ID"] -end +aura_env.herbs = { + [1] = { + ["X"] = 61.87, + ["Y"] = 52.19, + ["CD"] = 0, + }, + [2] = { + ["X"] = 60.2, + ["Y"] = 53.05, + ["CD"] = 0, + }, + [3] = { + ["X"] = 60.65, + ["Y"] = 54.53, + ["CD"] = 0, + }, + [4] = { + ["X"] = 59.47, + ["Y"] = 55.87, + ["CD"] = 0, + }, + [5] = { + ["X"] = 56.22, + ["Y"] = 60.29, + ["CD"] = 0, + }, + [6] = { + ["X"] = 56.95, + ["Y"] = 61.33, + ["CD"] = 0, + }, + [7] = { + ["X"] = 56.52, + ["Y"] = 64.31, + ["CD"] = 0, + }, + [8] = { + ["X"] = 58.38, + ["Y"] = 65.51, + ["CD"] = 0, + }, + [9] = { + ["X"] = 56.03, + ["Y"] = 64.65, + ["CD"] = 0, + }, + [10] = { + ["X"] = 55.53, + ["Y"] = 70.26, + ["CD"] = 0, + }, + [11] = { + ["X"] = 57.79, + ["Y"] = 71.48, + ["CD"] = 0, + }, + [12] = { + ["X"] = 59.03, + ["Y"] = 69.43, + ["CD"] = 0, + }, + [13] = { + ["X"] = 57.33, + ["Y"] = 69.9, + ["CD"] = 0, + }, + [14] = { + ["X"] = 55.39, + ["Y"] = 68.84, + ["CD"] = 0, + }, + [15] = { + ["X"] = 55.08, + ["Y"] = 63.45, + ["CD"] = 0, + }, + [16] = { + ["X"] = 52.34, + ["Y"] = 61.54, + ["CD"] = 0, + }, + [17] = { + ["X"] = 51.12, + ["Y"] = 64.53, + ["CD"] = 0, + }, + [18] = { + ["X"] = 54.28, + ["Y"] = 62.65, + ["CD"] = 0, + }, + [19] = { + ["X"] = 54.32, + ["Y"] = 66.08, + ["CD"] = 0, + }, + [20] = { + ["X"] = 58.53, + ["Y"] = 61.45, + ["CD"] = 0, + }, + [21] = { + ["X"] = 58.37, + ["Y"] = 63.02, + ["CD"] = 0, + }, + [22] = { + ["X"] = 59.24, + ["Y"] = 65.05, + ["CD"] = 0, + }, + [23] = { + ["X"] = 62.31, + ["Y"] = 64.97, + ["CD"] = 0, + }, + [24] = { + ["X"] = 63.37, + ["Y"] = 67.79, + ["CD"] = 0, + }, + [25] = { + ["X"] = 64.83, + ["Y"] = 68.7, + ["CD"] = 0, + }, + [26] = { + ["X"] = 68.37, + ["Y"] = 63.92, + ["CD"] = 0, + }, + [27] = { + ["X"] = 66.9, + ["Y"] = 66.86, + ["CD"] = 0, + }, + [28] = { + ["X"] = 67.08, + ["Y"] = 68.7, + ["CD"] = 0, + }, + [29] = { + ["X"] = 66.91, + ["Y"] = 70.84, + ["CD"] = 0, + }, + [30] = { + ["X"] = 65.61, + ["Y"] = 71.3, + ["CD"] = 0, + }, + [31] = { + ["X"] = 65.43, + ["Y"] = 74.05, + ["CD"] = 0, + }, + [32] = { + ["X"] = 66.57, + ["Y"] = 73.67, + ["CD"] = 0, + }, + [33] = { + ["X"] = 68.75, + ["Y"] = 72.27, + ["CD"] = 0, + }, + [34] = { + ["X"] = 67.56, + ["Y"] = 72.17, + ["CD"] = 0, + }, + [35] = { + ["X"] = 68.81, + ["Y"] = 74.63, + ["CD"] = 0, + }, + [36] = { + ["X"] = 67.77, + ["Y"] = 75.19, + ["CD"] = 0, + }, + [37] = { + ["X"] = 67.02, + ["Y"] = 76.86, + ["CD"] = 0, + }, + [38] = { + ["X"] = 65.7, + ["Y"] = 75.96, + ["CD"] = 0, + }, + [39] = { + ["X"] = 60.05, + ["Y"] = 76.17, + ["CD"] = 0, + }, + [40] = { + ["X"] = 56.95, + ["Y"] = 76.95, + ["CD"] = 0, + }, + [41] = { + ["X"] = 57.35, + ["Y"] = 75.19, + ["CD"] = 0, + }, + [42] = { + ["X"] = 58.36, + ["Y"] = 73.27, + ["CD"] = 0, + }, + [43] = { + ["X"] = 59.08, + ["Y"] = 73.81, + ["CD"] = 0, + }, + [44] = { + ["X"] = 60.66, + ["Y"] = 75.82, + ["CD"] = 0, + }, + [45] = { + ["X"] = 61.34, + ["Y"] = 79.25, + ["CD"] = 0, + }, + [46] = { + ["X"] = 62.71, + ["Y"] = 80.38, + ["CD"] = 0, + }, + [47] = { + ["X"] = 60.26, + ["Y"] = 80.68, + ["CD"] = 0, + }, + [48] = { + ["X"] = 59.23, + ["Y"] = 82.19, + ["CD"] = 0, + }, + [49] = { + ["X"] = 62.34, + ["Y"] = 84.98, + ["CD"] = 0, + }, + [50] = { + ["X"] = 58.92, + ["Y"] = 88.3, + ["CD"] = 0, + }, + [51] = { + ["X"] = 55.85, + ["Y"] = 89.71, + ["CD"] = 0, + }, + [52] = { + ["X"] = 56.13, + ["Y"] = 87.83, + ["CD"] = 0, + }, + [53] = { + ["X"] = 54.22, + ["Y"] = 88.9, + ["CD"] = 0, + }, + [54] = { + ["X"] = 53.37, + ["Y"] = 87.68, + ["CD"] = 0, + }, + [55] = { + ["X"] = 50.61, + ["Y"] = 86.57, + ["CD"] = 0, + }, + [56] = { + ["X"] = 49.98, + ["Y"] = 83.55, + ["CD"] = 0, + }, + [57] = { + ["X"] = 49.47, + ["Y"] = 81.21, + ["CD"] = 0, + }, + [58] = { + ["X"] = 50.49, + ["Y"] = 79.7, + ["CD"] = 0, + }, + [59] = { + ["X"] = 51.4, + ["Y"] = 78.35, + ["CD"] = 0, + }, + [60] = { + ["X"] = 52.52, + ["Y"] = 75.98, + ["CD"] = 0, + }, + [61] = { + ["X"] = 48.75, + ["Y"] = 73.96, + ["CD"] = 0, + }, + [62] = { + ["X"] = 48.14, + ["Y"] = 72.49, + ["CD"] = 0, + }, + [63] = { + ["X"] = 46.98, + ["Y"] = 58.58, + ["CD"] = 0, + }, + [64] = { + ["X"] = 43.72, + ["Y"] = 57.99, + ["CD"] = 0, + }, + [65] = { + ["X"] = 46.84, + ["Y"] = 37.45, + ["CD"] = 0, + }, + [66] = { + ["X"] = 46.85, + ["Y"] = 39.36, + ["CD"] = 0, + }, + [67] = { + ["X"] = 47.84, + ["Y"] = 38.96, + ["CD"] = 0, + }, + [68] = { + ["X"] = 48.45, + ["Y"] = 40.92, + ["CD"] = 0, + }, + [69] = { + ["X"] = 50.4, + ["Y"] = 39.27, + ["CD"] = 0, + }, + [70] = { + ["X"] = 50.43, + ["Y"] = 40.57, + ["CD"] = 0, + }, + [71] = { + ["X"] = 52.45, + ["Y"] = 44.2, + ["CD"] = 0, + }, + [72] = { + ["X"] = 54.73, + ["Y"] = 47.17, + ["CD"] = 0, + }, + [73] = { + ["X"] = 56.35, + ["Y"] = 45.89, + ["CD"] = 0, + }, + [74] = { + ["X"] = 54.9, + ["Y"] = 41.74, + ["CD"] = 0, + }, + [75] = { + ["X"] = 54.87, + ["Y"] = 39.41, + ["CD"] = 0, + }, + [76] = { + ["X"] = 56.71, + ["Y"] = 40.19, + ["CD"] = 0, + }, + [77] = { + ["X"] = 57.58, + ["Y"] = 41.53, + ["CD"] = 0, + }, + [78] = { + ["X"] = 58.36, + ["Y"] = 41.66, + ["CD"] = 0, + }, + [79] = { + ["X"] = 60.05, + ["Y"] = 42.17, + ["CD"] = 0, + }, + [80] = { + ["X"] = 61.65, + ["Y"] = 43.31, + ["CD"] = 0, + }, + [81] = { + ["X"] = 60.92, + ["Y"] = 41.56, + ["CD"] = 0, + }, + [82] = { + ["X"] = 62.24, + ["Y"] = 44.16, + ["CD"] = 0, + }, + [83] = { + ["X"] = 62.18, + ["Y"] = 43.11, + ["CD"] = 0, + }, + [84] = { + ["X"] = 64.04, + ["Y"] = 40.91, + ["CD"] = 0, + }, + [85] = { + ["X"] = 62.84, + ["Y"] = 40.65, + ["CD"] = 0, + }, + [86] = { + ["X"] = 63.51, + ["Y"] = 38.93, + ["CD"] = 0, + }, + [87] = { + ["X"] = 69.12, + ["Y"] = 39.38, + ["CD"] = 0, + }, + [88] = { + ["X"] = 70.92, + ["Y"] = 38.4, + ["CD"] = 0, + }, + [89] = { + ["X"] = 71.19, + ["Y"] = 42.44, + ["CD"] = 0, + }, + [90] = { + ["X"] = 72.93, + ["Y"] = 44.69, + ["CD"] = 0, + }, + [91] = { + ["X"] = 71.57, + ["Y"] = 47.07, + ["CD"] = 0, + }, + [92] = { + ["X"] = 69.24, + ["Y"] = 45.68, + ["CD"] = 0, + }, + [93] = { + ["X"] = 69.93, + ["Y"] = 47.65, + ["CD"] = 0, + }, + [94] = { + ["X"] = 68.74, + ["Y"] = 48.58, + ["CD"] = 0, + }, + [95] = { + ["X"] = 68.01, + ["Y"] = 50.36, + ["CD"] = 0, + }, + [96] = { + ["X"] = 70.59, + ["Y"] = 51.95, + ["CD"] = 0, + }, + [97] = { + ["X"] = 70.77, + ["Y"] = 54.92, + ["CD"] = 0, + }, + [98] = { + ["X"] = 71.17, + ["Y"] = 56.39, + ["CD"] = 0, + }, + [99] = { + ["X"] = 70.27, + ["Y"] = 56.41, + ["CD"] = 0, + }, + [100] = { + ["X"] = 69.1, + ["Y"] = 55.12, + ["CD"] = 0, + }, + [101] = { + ["X"] = 65.97, + ["Y"] = 59.44, + ["CD"] = 0, + }, + [102] = { + ["X"] = 65.88, + ["Y"] = 56.5, + ["CD"] = 0, + }, + [103] = { + ["X"] = 64.45, + ["Y"] = 53.78, + ["CD"] = 0, + }, + [104] = { + ["X"] = 63.19, + ["Y"] = 56.73, + ["CD"] = 0, + }, + [105] = { + ["X"] = 64.13, + ["Y"] = 58.96, + ["CD"] = 0, + }, + [106] = { + ["X"] = 65.55, + ["Y"] = 61.24, + ["CD"] = 0, + }, + [107] = { + ["X"] = 64.01, + ["Y"] = 61.23, + ["CD"] = 0, + }, + [108] = { + ["X"] = 64.35, + ["Y"] = 75.33, + ["CD"] = 0, + }, + [109] = { + ["X"] = 64.04, + ["Y"] = 79.4, + ["CD"] = 0, + }, + [110] = { + ["X"] = 65.31, + ["Y"] = 79.67, + ["CD"] = 0, + }, + [111] = { + ["X"] = 64.07, + ["Y"] = 81.41, + ["CD"] = 0, + }, + [112] = { + ["X"] = 62.41, + ["Y"] = 82.04, + ["CD"] = 0, + }, + [113] = { + ["X"] = 61.02, + ["Y"] = 83.56, + ["CD"] = 0, + }, + [114] = { + ["X"] = 59.89, + ["Y"] = 83.19, + ["CD"] = 0, + }, + [115] = { + ["X"] = 60.72, + ["Y"] = 84.32, + ["CD"] = 0, + }, + [116] = { + ["X"] = 61.72, + ["Y"] = 84.3, + ["CD"] = 0, + }, + [117] = { + ["X"] = 59.99, + ["Y"] = 79.24, + ["CD"] = 0, + }, + [118] = { + ["X"] = 56.12, + ["Y"] = 79.23, + ["CD"] = 0, + }, + [119] = { + ["X"] = 55.7, + ["Y"] = 76.89, + ["CD"] = 0, + }, + [120] = { + ["X"] = 51.19, + ["Y"] = 72.26, + ["CD"] = 0, + }, + [121] = { + ["X"] = 53.78, + ["Y"] = 70.92, + ["CD"] = 0, + }, + [122] = { + ["X"] = 52.44, + ["Y"] = 72.53, + ["CD"] = 0, + }, + [123] = { + ["X"] = 47.63, + ["Y"] = 77.64, + ["CD"] = 0, + }, + [124] = { + ["X"] = 49.85, + ["Y"] = 74.92, + ["CD"] = 0, + }, + [125] = { + ["X"] = 49.99, + ["Y"] = 77.55, + ["CD"] = 0, + }, + [126] = { + ["X"] = 47.43, + ["Y"] = 76.36, + ["CD"] = 0, + }, + [127] = { + ["X"] = 44.57, + ["Y"] = 82.87, + ["CD"] = 0, + }, + [128] = { + ["X"] = 44.59, + ["Y"] = 86.64, + ["CD"] = 0, + }, + [129] = { + ["X"] = 45.1, + ["Y"] = 86.63, + ["CD"] = 0, + }, + [130] = { + ["X"] = 44.31, + ["Y"] = 85.05, + ["CD"] = 0, + }, + [131] = { + ["X"] = 42.91, + ["Y"] = 83.59, + ["CD"] = 0, + }, + [132] = { + ["X"] = 42.69, + ["Y"] = 81.24, + ["CD"] = 0, + }, + [133] = { + ["X"] = 42.59, + ["Y"] = 80.4, + ["CD"] = 0, + }, + [134] = { + ["X"] = 41.57, + ["Y"] = 81.13, + ["CD"] = 0, + }, + [135] = { + ["X"] = 40.88, + ["Y"] = 75.34, + ["CD"] = 0, + }, + [136] = { + ["X"] = 50.44, + ["Y"] = 53.49, + ["CD"] = 0, + }, + [137] = { + ["X"] = 53.43, + ["Y"] = 52.68, + ["CD"] = 0, + }, + [138] = { + ["X"] = 55.29, + ["Y"] = 50.86, + ["CD"] = 0, + }, + [139] = { + ["X"] = 54.1, + ["Y"] = 52.27, + ["CD"] = 0, + }, + [140] = { + ["X"] = 53.37, + ["Y"] = 51.14, + ["CD"] = 0, + }, + [141] = { + ["X"] = 53.52, + ["Y"] = 49.5, + ["CD"] = 0, + }, + [142] = { + ["X"] = 52.4, + ["Y"] = 49.71, + ["CD"] = 0, + }, + [143] = { + ["X"] = 50.9, + ["Y"] = 49.61, + ["CD"] = 0, + }, + [144] = { + ["X"] = 47.8, + ["Y"] = 52.24, + ["CD"] = 0, + }, + [145] = { + ["X"] = 47.93, + ["Y"] = 55.01, + ["CD"] = 0, + }, + [146] = { + ["X"] = 46.89, + ["Y"] = 53.79, + ["CD"] = 0, + }, + [147] = { + ["X"] = 46.22, + ["Y"] = 55.18, + ["CD"] = 0, + }, + [148] = { + ["X"] = 46.32, + ["Y"] = 56.82, + ["CD"] = 0, + }, + [149] = { + ["X"] = 40.2, + ["Y"] = 62.85, + ["CD"] = 0, + }, + [150] = { + ["X"] = 40.35, + ["Y"] = 60.93, + ["CD"] = 0, + }, + [151] = { + ["X"] = 36.08, + ["Y"] = 58.38, + ["CD"] = 0, + }, + [152] = { + ["X"] = 35.03, + ["Y"] = 60.53, + ["CD"] = 0, + }, + [153] = { + ["X"] = 35.66, + ["Y"] = 60.3, + ["CD"] = 0, + }, + [154] = { + ["X"] = 40.75, + ["Y"] = 60.72, + ["CD"] = 0, + }, + [155] = { + ["X"] = 44.99, + ["Y"] = 60.93, + ["CD"] = 0, + }, + [156] = { + ["X"] = 43.77, + ["Y"] = 60.96, + ["CD"] = 0, + }, + [157] = { + ["X"] = 43.04, + ["Y"] = 63.03, + ["CD"] = 0, + }, + [158] = { + ["X"] = 41.88, + ["Y"] = 63.67, + ["CD"] = 0, + }, + [159] = { + ["X"] = 42.45, + ["Y"] = 61.88, + ["CD"] = 0, + }, + [160] = { + ["X"] = 43.65, + ["Y"] = 60.82, + ["CD"] = 0, + }, + [161] = { + ["X"] = 58.38, + ["Y"] = 33.52, + ["CD"] = 0, + }, + [162] = { + ["X"] = 41.66, + ["Y"] = 54.31, + ["CD"] = 0, + }, + [163] = { + ["X"] = 40.52, + ["Y"] = 51.34, + ["CD"] = 0, + }, + [164] = { + ["X"] = 37.56, + ["Y"] = 54.61, + ["CD"] = 0, + }, + [165] = { + ["X"] = 49.48, + ["Y"] = 49.77, + ["CD"] = 0, + }, + [166] = { + ["X"] = 51.33, + ["Y"] = 41.98, + ["CD"] = 0, + }, + [167] = { + ["X"] = 55.3, + ["Y"] = 55.78, + ["CD"] = 0, + }, + [168] = { + ["X"] = 61.99, + ["Y"] = 30.91, + ["CD"] = 0, + }, + [169] = { + ["X"] = 57.71, + ["Y"] = 39.6, + ["CD"] = 0, + }, + [170] = { + ["X"] = 69.54, + ["Y"] = 37.38, + ["CD"] = 0, + }, + [171] = { + ["X"] = 68.35, + ["Y"] = 39.91, + ["CD"] = 0, + }, + [172] = { + ["X"] = 62.37, + ["Y"] = 48.14, + ["CD"] = 0, + }, + [173] = { + ["X"] = 65.9, + ["Y"] = 41.14, + ["CD"] = 0, + }, + [174] = { + ["X"] = 73.55, + ["Y"] = 52.84, + ["CD"] = 0, + }, + [175] = { + ["X"] = 74.57, + ["Y"] = 39.75, + ["CD"] = 0, + }, + [176] = { + ["X"] = 72.1, + ["Y"] = 49.22, + ["CD"] = 0, + }, + [177] = { + ["X"] = 69.79, + ["Y"] = 53.26, + ["CD"] = 0, + }, + [178] = { + ["X"] = 67.27, + ["Y"] = 60.55, + ["CD"] = 0, + }, + [179] = { + ["X"] = 64.16, + ["Y"] = 58.7, + ["CD"] = 0, + }, + [180] = { + ["X"] = 54.76, + ["Y"] = 57.01, + ["CD"] = 0, + }, + [181] = { + ["X"] = 57.81, + ["Y"] = 60.35, + ["CD"] = 0, + }, + [182] = { + ["X"] = 48.01, + ["Y"] = 69.08, + ["CD"] = 0, + }, + [183] = { + ["X"] = 42.49, + ["Y"] = 79.11, + ["CD"] = 0, + }, + [184] = { + ["X"] = 41.64, + ["Y"] = 69.85, + ["CD"] = 0, + }, + [185] = { + ["X"] = 45.52, + ["Y"] = 73.05, + ["CD"] = 0, + }, + [186] = { + ["X"] = 50.98, + ["Y"] = 82.3, + ["CD"] = 0, + }, + [187] = { + ["X"] = 65.76, + ["Y"] = 68.15, + ["CD"] = 0, + }, + [188] = { + ["X"] = 63.63, + ["Y"] = 64.98, + ["CD"] = 0, + }, + [189] = { + ["X"] = 57.28, + ["Y"] = 90.49, + ["CD"] = 0, + }, + [190] = { + ["X"] = 55.64, + ["Y"] = 84.34, + ["CD"] = 0, + }, + [191] = { + ["X"] = 39.95, + ["Y"] = 88.45, + ["CD"] = 0, + }, + [192] = { + ["X"] = 44.02, + ["Y"] = 82.51, + ["CD"] = 0, + }, + [193] = { + ["X"] = 47.72, + ["Y"] = 85.61, + ["CD"] = 0, + }, + [194] = { + ["X"] = 50.24, + ["Y"] = 84.23, + ["CD"] = 0, + }, + [195] = { + ["X"] = 43.02, + ["Y"] = 88.03, + ["CD"] = 0, + }, + [196] = { + ["X"] = 46.15, + ["Y"] = 83.47, + ["CD"] = 0, + }, + [197] = { + ["X"] = 55.23, + ["Y"] = 68.18, + ["CD"] = 0, + }, + [198] = { + ["X"] = 22.55, + ["Y"] = 64.61, + ["CD"] = 0, + }, + [199] = { + ["X"] = 22.95, + ["Y"] = 72.49, + ["CD"] = 0, + }, + [200] = { + ["X"] = 21.81, + ["Y"] = 69.82, + ["CD"] = 0, + }, +} +aura_env.cooldown = 600 +aura_env.wipeDistance = 50 +aura_env.angle = 0 +aura_env.hyp = 0 +aura_env.GetClosestHerb = function() + aura_env.minID = { + ["X"] = 0, + ["Y"] = 0, + ["D"] = 1000, + ["ID"] = 0, + } + local pX = GetPlayerMapPosition("player") or 0 + local pY = select(2, GetPlayerMapPosition("player")) or 0 + pX, pY = pX * 100, pY * 100 + for k, v in ipairs(aura_env.herbs) do + local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] + if cd == 0 then + local X, Y = pX - hX, pY - hY + local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) + if hyp < aura_env.minID["D"] then + aura_env.minID["X"] = hX + aura_env.minID["Y"] = hY + aura_env.minID["D"] = hyp + aura_env.minID["ID"] = k + end + end + end + return aura_env.minID["ID"] +end diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Fel Herbs.lua b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Herbalism/Fel Herbs.lua similarity index 93% rename from Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Fel Herbs.lua rename to WeakAuras/Projects/Herb Sniffer/Herb Arrays/Herbalism/Fel Herbs.lua index 90842b4..914e5f0 100644 --- a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Fel Herbs.lua +++ b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Herbalism/Fel Herbs.lua @@ -1,271 +1,271 @@ -aura_env.herbs = { - [1] = { - ["X"] = 43.7, - ["Y"] = 47.52, - ["CD"] = 0, - }, - [2] = { - ["X"] = 55.11, - ["Y"] = 53.52, - ["CD"] = 0, - }, - [3] = { - ["X"] = 67.75, - ["Y"] = 35.39, - ["CD"] = 0, - }, - [4] = { - ["X"] = 46.51, - ["Y"] = 31.41, - ["CD"] = 0, - }, - [5] = { - ["X"] = 46.21, - ["Y"] = 39.28, - ["CD"] = 0, - }, - [6] = { - ["X"] = 41.5, - ["Y"] = 42.11, - ["CD"] = 0, - }, - [7] = { - ["X"] = 50.73, - ["Y"] = 36.37, - ["CD"] = 0, - }, - [8] = { - ["X"] = 52, - ["Y"] = 38.74, - ["CD"] = 0, - }, - [9] = { - ["X"] = 51.73, - ["Y"] = 44.44, - ["CD"] = 0, - }, - [10] = { - ["X"] = 48.85, - ["Y"] = 43.36, - ["CD"] = 0, - }, - [11] = { - ["X"] = 43.36, - ["Y"] = 27.42, - ["CD"] = 0, - }, - [12] = { - ["X"] = 38.9, - ["Y"] = 37.15, - ["CD"] = 0, - }, - [13] = { - ["X"] = 39.14, - ["Y"] = 48.19, - ["CD"] = 0, - }, - [14] = { - ["X"] = 45.77, - ["Y"] = 43.29, - ["CD"] = 0, - }, - [15] = { - ["X"] = 42.81, - ["Y"] = 39.12, - ["CD"] = 0, - }, - [16] = { - ["X"] = 44.9, - ["Y"] = 33.39, - ["CD"] = 0, - }, - [17] = { - ["X"] = 51.19, - ["Y"] = 34.46, - ["CD"] = 0, - }, - [18] = { - ["X"] = 54.96, - ["Y"] = 29.9, - ["CD"] = 0, - }, - [19] = { - ["X"] = 53.75, - ["Y"] = 55.53, - ["CD"] = 0, - }, - [20] = { - ["X"] = 58.01, - ["Y"] = 52.44, - ["CD"] = 0, - }, - [21] = { - ["X"] = 73.65, - ["Y"] = 35.59, - ["CD"] = 0, - }, - [22] = { - ["X"] = 68.83, - ["Y"] = 38.1, - ["CD"] = 0, - }, - [23] = { - ["X"] = 64.86, - ["Y"] = 31.35, - ["CD"] = 0, - }, - [24] = { - ["X"] = 55.37, - ["Y"] = 46.09, - ["CD"] = 0, - }, - [25] = { - ["X"] = 51.96, - ["Y"] = 54.69, - ["CD"] = 0, - }, - [26] = { - ["X"] = 52.07, - ["Y"] = 48.12, - ["CD"] = 0, - }, - [27] = { - ["X"] = 39.85, - ["Y"] = 43.02, - ["CD"] = 0, - }, - [28] = { - ["X"] = 45.11, - ["Y"] = 31.92, - ["CD"] = 0, - }, - [29] = { - ["X"] = 58.81, - ["Y"] = 42.23, - ["CD"] = 0, - }, - [30] = { - ["X"] = 56.87, - ["Y"] = 35.36, - ["CD"] = 0, - }, - [31] = { - ["X"] = 80.46, - ["Y"] = 42.58, - ["CD"] = 0, - }, - [32] = { - ["X"] = 73.35, - ["Y"] = 40.36, - ["CD"] = 0, - }, - [33] = { - ["X"] = 65.26, - ["Y"] = 49, - ["CD"] = 0, - }, - [34] = { - ["X"] = 38.29, - ["Y"] = 21.84, - ["CD"] = 0, - }, - [35] = { - ["X"] = 64.95, - ["Y"] = 44.66, - ["CD"] = 0, - }, - [36] = { - ["X"] = 48.04, - ["Y"] = 40.24, - ["CD"] = 0, - }, - [37] = { - ["X"] = 47.18, - ["Y"] = 41.63, - ["CD"] = 0, - }, - [38] = { - ["X"] = 30.84, - ["Y"] = 32.27, - ["CD"] = 0, - }, - [39] = { - ["X"] = 43.7, - ["Y"] = 47.52, - ["CD"] = 0, - }, - [40] = { - ["X"] = 44.9, - ["Y"] = 33.39, - ["CD"] = 0, - }, - [41] = { - ["X"] = 49.05, - ["Y"] = 39.41, - ["CD"] = 0, - }, - [42] = { - ["X"] = 44.09, - ["Y"] = 53.11, - ["CD"] = 0, - }, - [43] = { - ["X"] = 39.14, - ["Y"] = 32.32, - ["CD"] = 0, - }, - [44] = { - ["X"] = 61.13, - ["Y"] = 44.07, - ["CD"] = 0, - }, - [45] = { - ["X"] = 60.53, - ["Y"] = 46.91, - ["CD"] = 0, - }, - [46] = { - ["X"] = 52.47, - ["Y"] = 52.01, - ["CD"] = 0, - }, - [47] = { - ["X"] = 68.45, - ["Y"] = 27.27, - ["CD"] = 0, - }, - [48] = { - ["X"] = 68.14, - ["Y"] = 32.64, - ["CD"] = 0, - }, -} -aura_env.cooldown = 600 -aura_env.wipeDistance = 50 -aura_env.angle = 0 -aura_env.hyp = 0 -aura_env.GetClosestHerb = function() - aura_env.minID = { - ["X"] = 0, - ["Y"] = 0, - ["D"] = 1000, - ["ID"] = 0, - } - local pX = GetPlayerMapPosition("player") or 0 - local pY = select(2, GetPlayerMapPosition("player")) or 0 - pX, pY = pX * 100, pY * 100 - for k, v in ipairs(aura_env.herbs) do - local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] - if cd == 0 then - local X, Y = pX - hX, pY - hY - local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) - if hyp < aura_env.minID["D"] then - aura_env.minID["X"] = hX - aura_env.minID["Y"] = hY - aura_env.minID["D"] = hyp - aura_env.minID["ID"] = k - end - end - end - return aura_env.minID["ID"] -end +aura_env.herbs = { + [1] = { + ["X"] = 43.7, + ["Y"] = 47.52, + ["CD"] = 0, + }, + [2] = { + ["X"] = 55.11, + ["Y"] = 53.52, + ["CD"] = 0, + }, + [3] = { + ["X"] = 67.75, + ["Y"] = 35.39, + ["CD"] = 0, + }, + [4] = { + ["X"] = 46.51, + ["Y"] = 31.41, + ["CD"] = 0, + }, + [5] = { + ["X"] = 46.21, + ["Y"] = 39.28, + ["CD"] = 0, + }, + [6] = { + ["X"] = 41.5, + ["Y"] = 42.11, + ["CD"] = 0, + }, + [7] = { + ["X"] = 50.73, + ["Y"] = 36.37, + ["CD"] = 0, + }, + [8] = { + ["X"] = 52, + ["Y"] = 38.74, + ["CD"] = 0, + }, + [9] = { + ["X"] = 51.73, + ["Y"] = 44.44, + ["CD"] = 0, + }, + [10] = { + ["X"] = 48.85, + ["Y"] = 43.36, + ["CD"] = 0, + }, + [11] = { + ["X"] = 43.36, + ["Y"] = 27.42, + ["CD"] = 0, + }, + [12] = { + ["X"] = 38.9, + ["Y"] = 37.15, + ["CD"] = 0, + }, + [13] = { + ["X"] = 39.14, + ["Y"] = 48.19, + ["CD"] = 0, + }, + [14] = { + ["X"] = 45.77, + ["Y"] = 43.29, + ["CD"] = 0, + }, + [15] = { + ["X"] = 42.81, + ["Y"] = 39.12, + ["CD"] = 0, + }, + [16] = { + ["X"] = 44.9, + ["Y"] = 33.39, + ["CD"] = 0, + }, + [17] = { + ["X"] = 51.19, + ["Y"] = 34.46, + ["CD"] = 0, + }, + [18] = { + ["X"] = 54.96, + ["Y"] = 29.9, + ["CD"] = 0, + }, + [19] = { + ["X"] = 53.75, + ["Y"] = 55.53, + ["CD"] = 0, + }, + [20] = { + ["X"] = 58.01, + ["Y"] = 52.44, + ["CD"] = 0, + }, + [21] = { + ["X"] = 73.65, + ["Y"] = 35.59, + ["CD"] = 0, + }, + [22] = { + ["X"] = 68.83, + ["Y"] = 38.1, + ["CD"] = 0, + }, + [23] = { + ["X"] = 64.86, + ["Y"] = 31.35, + ["CD"] = 0, + }, + [24] = { + ["X"] = 55.37, + ["Y"] = 46.09, + ["CD"] = 0, + }, + [25] = { + ["X"] = 51.96, + ["Y"] = 54.69, + ["CD"] = 0, + }, + [26] = { + ["X"] = 52.07, + ["Y"] = 48.12, + ["CD"] = 0, + }, + [27] = { + ["X"] = 39.85, + ["Y"] = 43.02, + ["CD"] = 0, + }, + [28] = { + ["X"] = 45.11, + ["Y"] = 31.92, + ["CD"] = 0, + }, + [29] = { + ["X"] = 58.81, + ["Y"] = 42.23, + ["CD"] = 0, + }, + [30] = { + ["X"] = 56.87, + ["Y"] = 35.36, + ["CD"] = 0, + }, + [31] = { + ["X"] = 80.46, + ["Y"] = 42.58, + ["CD"] = 0, + }, + [32] = { + ["X"] = 73.35, + ["Y"] = 40.36, + ["CD"] = 0, + }, + [33] = { + ["X"] = 65.26, + ["Y"] = 49, + ["CD"] = 0, + }, + [34] = { + ["X"] = 38.29, + ["Y"] = 21.84, + ["CD"] = 0, + }, + [35] = { + ["X"] = 64.95, + ["Y"] = 44.66, + ["CD"] = 0, + }, + [36] = { + ["X"] = 48.04, + ["Y"] = 40.24, + ["CD"] = 0, + }, + [37] = { + ["X"] = 47.18, + ["Y"] = 41.63, + ["CD"] = 0, + }, + [38] = { + ["X"] = 30.84, + ["Y"] = 32.27, + ["CD"] = 0, + }, + [39] = { + ["X"] = 43.7, + ["Y"] = 47.52, + ["CD"] = 0, + }, + [40] = { + ["X"] = 44.9, + ["Y"] = 33.39, + ["CD"] = 0, + }, + [41] = { + ["X"] = 49.05, + ["Y"] = 39.41, + ["CD"] = 0, + }, + [42] = { + ["X"] = 44.09, + ["Y"] = 53.11, + ["CD"] = 0, + }, + [43] = { + ["X"] = 39.14, + ["Y"] = 32.32, + ["CD"] = 0, + }, + [44] = { + ["X"] = 61.13, + ["Y"] = 44.07, + ["CD"] = 0, + }, + [45] = { + ["X"] = 60.53, + ["Y"] = 46.91, + ["CD"] = 0, + }, + [46] = { + ["X"] = 52.47, + ["Y"] = 52.01, + ["CD"] = 0, + }, + [47] = { + ["X"] = 68.45, + ["Y"] = 27.27, + ["CD"] = 0, + }, + [48] = { + ["X"] = 68.14, + ["Y"] = 32.64, + ["CD"] = 0, + }, +} +aura_env.cooldown = 600 +aura_env.wipeDistance = 50 +aura_env.angle = 0 +aura_env.hyp = 0 +aura_env.GetClosestHerb = function() + aura_env.minID = { + ["X"] = 0, + ["Y"] = 0, + ["D"] = 1000, + ["ID"] = 0, + } + local pX = GetPlayerMapPosition("player") or 0 + local pY = select(2, GetPlayerMapPosition("player")) or 0 + pX, pY = pX * 100, pY * 100 + for k, v in ipairs(aura_env.herbs) do + local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] + if cd == 0 then + local X, Y = pX - hX, pY - hY + local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) + if hyp < aura_env.minID["D"] then + aura_env.minID["X"] = hX + aura_env.minID["Y"] = hY + aura_env.minID["D"] = hyp + aura_env.minID["ID"] = k + end + end + end + return aura_env.minID["ID"] +end diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Fjarnskaggl.lua b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Herbalism/Fjarnskaggl.lua similarity index 92% rename from Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Fjarnskaggl.lua rename to WeakAuras/Projects/Herb Sniffer/Herb Arrays/Herbalism/Fjarnskaggl.lua index d975c2f..1a16348 100644 --- a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Fjarnskaggl.lua +++ b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Herbalism/Fjarnskaggl.lua @@ -1,1031 +1,1031 @@ -aura_env.herbs = { - [1] = { - ["X"] = 47.24, - ["Y"] = 55.62, - ["CD"] = 0, - }, - [2] = { - ["X"] = 51.47, - ["Y"] = 55.4, - ["CD"] = 0, - }, - [3] = { - ["X"] = 49.09, - ["Y"] = 52.04, - ["CD"] = 0, - }, - [4] = { - ["X"] = 48.14, - ["Y"] = 53.66, - ["CD"] = 0, - }, - [5] = { - ["X"] = 45.46, - ["Y"] = 53.33, - ["CD"] = 0, - }, - [6] = { - ["X"] = 42.97, - ["Y"] = 59.67, - ["CD"] = 0, - }, - [7] = { - ["X"] = 42.91, - ["Y"] = 57.7, - ["CD"] = 0, - }, - [8] = { - ["X"] = 42.8, - ["Y"] = 56.74, - ["CD"] = 0, - }, - [9] = { - ["X"] = 41.94, - ["Y"] = 53.95, - ["CD"] = 0, - }, - [10] = { - ["X"] = 39.66, - ["Y"] = 53.74, - ["CD"] = 0, - }, - [11] = { - ["X"] = 40.06, - ["Y"] = 52.65, - ["CD"] = 0, - }, - [12] = { - ["X"] = 41.77, - ["Y"] = 49.95, - ["CD"] = 0, - }, - [13] = { - ["X"] = 42.6, - ["Y"] = 49.17, - ["CD"] = 0, - }, - [14] = { - ["X"] = 42.02, - ["Y"] = 50.81, - ["CD"] = 0, - }, - [15] = { - ["X"] = 42.54, - ["Y"] = 52.47, - ["CD"] = 0, - }, - [16] = { - ["X"] = 42.86, - ["Y"] = 51.62, - ["CD"] = 0, - }, - [17] = { - ["X"] = 44.56, - ["Y"] = 52.7, - ["CD"] = 0, - }, - [18] = { - ["X"] = 43.88, - ["Y"] = 52.96, - ["CD"] = 0, - }, - [19] = { - ["X"] = 43.66, - ["Y"] = 54.02, - ["CD"] = 0, - }, - [20] = { - ["X"] = 44.39, - ["Y"] = 54.51, - ["CD"] = 0, - }, - [21] = { - ["X"] = 44.57, - ["Y"] = 56.26, - ["CD"] = 0, - }, - [22] = { - ["X"] = 44.17, - ["Y"] = 58.37, - ["CD"] = 0, - }, - [23] = { - ["X"] = 46.02, - ["Y"] = 58.16, - ["CD"] = 0, - }, - [24] = { - ["X"] = 45.54, - ["Y"] = 56.28, - ["CD"] = 0, - }, - [25] = { - ["X"] = 45.64, - ["Y"] = 55.67, - ["CD"] = 0, - }, - [26] = { - ["X"] = 45.88, - ["Y"] = 54.95, - ["CD"] = 0, - }, - [27] = { - ["X"] = 75.52, - ["Y"] = 64.36, - ["CD"] = 0, - }, - [28] = { - ["X"] = 74.64, - ["Y"] = 63.4, - ["CD"] = 0, - }, - [29] = { - ["X"] = 75.47, - ["Y"] = 61.49, - ["CD"] = 0, - }, - [30] = { - ["X"] = 76.04, - ["Y"] = 62.25, - ["CD"] = 0, - }, - [31] = { - ["X"] = 76.34, - ["Y"] = 62.88, - ["CD"] = 0, - }, - [32] = { - ["X"] = 75.6, - ["Y"] = 61.16, - ["CD"] = 0, - }, - [33] = { - ["X"] = 74.48, - ["Y"] = 61.07, - ["CD"] = 0, - }, - [34] = { - ["X"] = 73.1, - ["Y"] = 61.55, - ["CD"] = 0, - }, - [35] = { - ["X"] = 71.6, - ["Y"] = 61.94, - ["CD"] = 0, - }, - [36] = { - ["X"] = 71.17, - ["Y"] = 61.79, - ["CD"] = 0, - }, - [37] = { - ["X"] = 70.7, - ["Y"] = 61.82, - ["CD"] = 0, - }, - [38] = { - ["X"] = 69.93, - ["Y"] = 60.51, - ["CD"] = 0, - }, - [39] = { - ["X"] = 68.88, - ["Y"] = 62.24, - ["CD"] = 0, - }, - [40] = { - ["X"] = 68.02, - ["Y"] = 62.34, - ["CD"] = 0, - }, - [41] = { - ["X"] = 68.38, - ["Y"] = 60.4, - ["CD"] = 0, - }, - [42] = { - ["X"] = 68.09, - ["Y"] = 58.09, - ["CD"] = 0, - }, - [43] = { - ["X"] = 68.51, - ["Y"] = 57.47, - ["CD"] = 0, - }, - [44] = { - ["X"] = 69.32, - ["Y"] = 57.12, - ["CD"] = 0, - }, - [45] = { - ["X"] = 70.52, - ["Y"] = 56.23, - ["CD"] = 0, - }, - [46] = { - ["X"] = 68.72, - ["Y"] = 55.81, - ["CD"] = 0, - }, - [47] = { - ["X"] = 68.24, - ["Y"] = 55.37, - ["CD"] = 0, - }, - [48] = { - ["X"] = 67.73, - ["Y"] = 53.38, - ["CD"] = 0, - }, - [49] = { - ["X"] = 67.47, - ["Y"] = 50.94, - ["CD"] = 0, - }, - [50] = { - ["X"] = 66.2, - ["Y"] = 50.65, - ["CD"] = 0, - }, - [51] = { - ["X"] = 66.13, - ["Y"] = 49.8, - ["CD"] = 0, - }, - [52] = { - ["X"] = 65.36, - ["Y"] = 46.62, - ["CD"] = 0, - }, - [53] = { - ["X"] = 68.76, - ["Y"] = 42.62, - ["CD"] = 0, - }, - [54] = { - ["X"] = 69.77, - ["Y"] = 41.67, - ["CD"] = 0, - }, - [55] = { - ["X"] = 70.11, - ["Y"] = 40.61, - ["CD"] = 0, - }, - [56] = { - ["X"] = 70.23, - ["Y"] = 39.9, - ["CD"] = 0, - }, - [57] = { - ["X"] = 70.45, - ["Y"] = 39.16, - ["CD"] = 0, - }, - [58] = { - ["X"] = 71.16, - ["Y"] = 38.18, - ["CD"] = 0, - }, - [59] = { - ["X"] = 70.62, - ["Y"] = 37.63, - ["CD"] = 0, - }, - [60] = { - ["X"] = 69.98, - ["Y"] = 37.93, - ["CD"] = 0, - }, - [61] = { - ["X"] = 69.85, - ["Y"] = 36.95, - ["CD"] = 0, - }, - [62] = { - ["X"] = 69.11, - ["Y"] = 37.75, - ["CD"] = 0, - }, - [63] = { - ["X"] = 68.09, - ["Y"] = 38.08, - ["CD"] = 0, - }, - [64] = { - ["X"] = 68.51, - ["Y"] = 39.26, - ["CD"] = 0, - }, - [65] = { - ["X"] = 67.77, - ["Y"] = 40.49, - ["CD"] = 0, - }, - [66] = { - ["X"] = 67.39, - ["Y"] = 41.98, - ["CD"] = 0, - }, - [67] = { - ["X"] = 66.73, - ["Y"] = 42.58, - ["CD"] = 0, - }, - [68] = { - ["X"] = 67.01, - ["Y"] = 43.27, - ["CD"] = 0, - }, - [69] = { - ["X"] = 66.64, - ["Y"] = 43.31, - ["CD"] = 0, - }, - [70] = { - ["X"] = 65.25, - ["Y"] = 48.23, - ["CD"] = 0, - }, - [71] = { - ["X"] = 64.43, - ["Y"] = 47.44, - ["CD"] = 0, - }, - [72] = { - ["X"] = 64.3, - ["Y"] = 49.23, - ["CD"] = 0, - }, - [73] = { - ["X"] = 63.4, - ["Y"] = 49.43, - ["CD"] = 0, - }, - [74] = { - ["X"] = 61.43, - ["Y"] = 49.66, - ["CD"] = 0, - }, - [75] = { - ["X"] = 62.74, - ["Y"] = 50.15, - ["CD"] = 0, - }, - [76] = { - ["X"] = 62.33, - ["Y"] = 50.62, - ["CD"] = 0, - }, - [77] = { - ["X"] = 61.77, - ["Y"] = 51.52, - ["CD"] = 0, - }, - [78] = { - ["X"] = 61.5, - ["Y"] = 53.26, - ["CD"] = 0, - }, - [79] = { - ["X"] = 61.08, - ["Y"] = 54.15, - ["CD"] = 0, - }, - [80] = { - ["X"] = 59.76, - ["Y"] = 53.98, - ["CD"] = 0, - }, - [81] = { - ["X"] = 59.06, - ["Y"] = 52.97, - ["CD"] = 0, - }, - [82] = { - ["X"] = 59.38, - ["Y"] = 51.04, - ["CD"] = 0, - }, - [83] = { - ["X"] = 59.05, - ["Y"] = 51.07, - ["CD"] = 0, - }, - [84] = { - ["X"] = 58.05, - ["Y"] = 51.4, - ["CD"] = 0, - }, - [85] = { - ["X"] = 57.23, - ["Y"] = 50.59, - ["CD"] = 0, - }, - [86] = { - ["X"] = 56.64, - ["Y"] = 50.71, - ["CD"] = 0, - }, - [87] = { - ["X"] = 53.07, - ["Y"] = 53.33, - ["CD"] = 0, - }, - [88] = { - ["X"] = 53.94, - ["Y"] = 54.38, - ["CD"] = 0, - }, - [89] = { - ["X"] = 53.44, - ["Y"] = 54.49, - ["CD"] = 0, - }, - [90] = { - ["X"] = 52.19, - ["Y"] = 56.4, - ["CD"] = 0, - }, - [91] = { - ["X"] = 51.96, - ["Y"] = 58.49, - ["CD"] = 0, - }, - [92] = { - ["X"] = 51.66, - ["Y"] = 58.85, - ["CD"] = 0, - }, - [93] = { - ["X"] = 51.36, - ["Y"] = 59.61, - ["CD"] = 0, - }, - [94] = { - ["X"] = 52, - ["Y"] = 60.49, - ["CD"] = 0, - }, - [95] = { - ["X"] = 53.76, - ["Y"] = 58.93, - ["CD"] = 0, - }, - [96] = { - ["X"] = 53.43, - ["Y"] = 58.03, - ["CD"] = 0, - }, - [97] = { - ["X"] = 52.75, - ["Y"] = 56.71, - ["CD"] = 0, - }, - [98] = { - ["X"] = 53.34, - ["Y"] = 56.63, - ["CD"] = 0, - }, - [99] = { - ["X"] = 53.46, - ["Y"] = 55.97, - ["CD"] = 0, - }, - [100] = { - ["X"] = 52.99, - ["Y"] = 55.07, - ["CD"] = 0, - }, - [101] = { - ["X"] = 52.69, - ["Y"] = 53.46, - ["CD"] = 0, - }, - [102] = { - ["X"] = 51.16, - ["Y"] = 53.73, - ["CD"] = 0, - }, - [103] = { - ["X"] = 50.62, - ["Y"] = 53.1, - ["CD"] = 0, - }, - [104] = { - ["X"] = 50.2, - ["Y"] = 52.37, - ["CD"] = 0, - }, - [105] = { - ["X"] = 50.13, - ["Y"] = 50.4, - ["CD"] = 0, - }, - [106] = { - ["X"] = 48.08, - ["Y"] = 50.93, - ["CD"] = 0, - }, - [107] = { - ["X"] = 47.68, - ["Y"] = 48.92, - ["CD"] = 0, - }, - [108] = { - ["X"] = 44.23, - ["Y"] = 45.97, - ["CD"] = 0, - }, - [109] = { - ["X"] = 45.22, - ["Y"] = 43.32, - ["CD"] = 0, - }, - [110] = { - ["X"] = 45.69, - ["Y"] = 42.54, - ["CD"] = 0, - }, - [111] = { - ["X"] = 46.28, - ["Y"] = 42.7, - ["CD"] = 0, - }, - [112] = { - ["X"] = 48.34, - ["Y"] = 39.8, - ["CD"] = 0, - }, - [113] = { - ["X"] = 49.36, - ["Y"] = 37.64, - ["CD"] = 0, - }, - [114] = { - ["X"] = 47.3, - ["Y"] = 38.94, - ["CD"] = 0, - }, - [115] = { - ["X"] = 42.38, - ["Y"] = 41.41, - ["CD"] = 0, - }, - [116] = { - ["X"] = 42.36, - ["Y"] = 39.64, - ["CD"] = 0, - }, - [117] = { - ["X"] = 42.97, - ["Y"] = 39.05, - ["CD"] = 0, - }, - [118] = { - ["X"] = 42.41, - ["Y"] = 38.26, - ["CD"] = 0, - }, - [119] = { - ["X"] = 40.83, - ["Y"] = 40.62, - ["CD"] = 0, - }, - [120] = { - ["X"] = 41.68, - ["Y"] = 40.19, - ["CD"] = 0, - }, - [121] = { - ["X"] = 61.22, - ["Y"] = 64.31, - ["CD"] = 0, - }, - [122] = { - ["X"] = 56.67, - ["Y"] = 79.09, - ["CD"] = 0, - }, - [123] = { - ["X"] = 73.25, - ["Y"] = 44.25, - ["CD"] = 0, - }, - [124] = { - ["X"] = 73.25, - ["Y"] = 44.5, - ["CD"] = 0, - }, - [125] = { - ["X"] = 69.24, - ["Y"] = 50.47, - ["CD"] = 0, - }, - [126] = { - ["X"] = 64.32, - ["Y"] = 44.07, - ["CD"] = 0, - }, - [127] = { - ["X"] = 62.95, - ["Y"] = 46.32, - ["CD"] = 0, - }, - [128] = { - ["X"] = 63.56, - ["Y"] = 45.14, - ["CD"] = 0, - }, - [129] = { - ["X"] = 68.35, - ["Y"] = 58.98, - ["CD"] = 0, - }, - [130] = { - ["X"] = 71.6, - ["Y"] = 52.25, - ["CD"] = 0, - }, - [131] = { - ["X"] = 82.09, - ["Y"] = 57.01, - ["CD"] = 0, - }, - [132] = { - ["X"] = 80.93, - ["Y"] = 56.31, - ["CD"] = 0, - }, - [133] = { - ["X"] = 79.83, - ["Y"] = 64.42, - ["CD"] = 0, - }, - [134] = { - ["X"] = 78.73, - ["Y"] = 63.87, - ["CD"] = 0, - }, - [135] = { - ["X"] = 80.89, - ["Y"] = 63.18, - ["CD"] = 0, - }, - [136] = { - ["X"] = 78.75, - ["Y"] = 58.41, - ["CD"] = 0, - }, - [137] = { - ["X"] = 77.87, - ["Y"] = 57.58, - ["CD"] = 0, - }, - [138] = { - ["X"] = 73.32, - ["Y"] = 59.52, - ["CD"] = 0, - }, - [139] = { - ["X"] = 70.2, - ["Y"] = 58.54, - ["CD"] = 0, - }, - [140] = { - ["X"] = 68.78, - ["Y"] = 54.4, - ["CD"] = 0, - }, - [141] = { - ["X"] = 67.69, - ["Y"] = 59.37, - ["CD"] = 0, - }, - [142] = { - ["X"] = 67.61, - ["Y"] = 54.47, - ["CD"] = 0, - }, - [143] = { - ["X"] = 65.94, - ["Y"] = 52.25, - ["CD"] = 0, - }, - [144] = { - ["X"] = 63.57, - ["Y"] = 55.84, - ["CD"] = 0, - }, - [145] = { - ["X"] = 68.18, - ["Y"] = 50.25, - ["CD"] = 0, - }, - [146] = { - ["X"] = 43.9, - ["Y"] = 58.83, - ["CD"] = 0, - }, - [147] = { - ["X"] = 43.27, - ["Y"] = 81.62, - ["CD"] = 0, - }, - [148] = { - ["X"] = 45.24, - ["Y"] = 75.28, - ["CD"] = 0, - }, - [149] = { - ["X"] = 43.53, - ["Y"] = 70.2, - ["CD"] = 0, - }, - [150] = { - ["X"] = 43.4, - ["Y"] = 71.29, - ["CD"] = 0, - }, - [151] = { - ["X"] = 48, - ["Y"] = 67.59, - ["CD"] = 0, - }, - [152] = { - ["X"] = 41.82, - ["Y"] = 65.83, - ["CD"] = 0, - }, - [153] = { - ["X"] = 41.11, - ["Y"] = 65.23, - ["CD"] = 0, - }, - [154] = { - ["X"] = 37.84, - ["Y"] = 64.52, - ["CD"] = 0, - }, - [155] = { - ["X"] = 41.31, - ["Y"] = 58.59, - ["CD"] = 0, - }, - [156] = { - ["X"] = 42.35, - ["Y"] = 61.07, - ["CD"] = 0, - }, - [157] = { - ["X"] = 38.37, - ["Y"] = 56.57, - ["CD"] = 0, - }, - [158] = { - ["X"] = 37.66, - ["Y"] = 55.01, - ["CD"] = 0, - }, - [159] = { - ["X"] = 44.11, - ["Y"] = 44.07, - ["CD"] = 0, - }, - [160] = { - ["X"] = 46.61, - ["Y"] = 40.23, - ["CD"] = 0, - }, - [161] = { - ["X"] = 44.65, - ["Y"] = 38.78, - ["CD"] = 0, - }, - [162] = { - ["X"] = 47.94, - ["Y"] = 35.39, - ["CD"] = 0, - }, - [163] = { - ["X"] = 43.25, - ["Y"] = 31.36, - ["CD"] = 0, - }, - [164] = { - ["X"] = 45.4, - ["Y"] = 30.26, - ["CD"] = 0, - }, - [165] = { - ["X"] = 43.1, - ["Y"] = 26.67, - ["CD"] = 0, - }, - [166] = { - ["X"] = 45.47, - ["Y"] = 25.53, - ["CD"] = 0, - }, - [167] = { - ["X"] = 50.15, - ["Y"] = 21.58, - ["CD"] = 0, - }, - [168] = { - ["X"] = 48.03, - ["Y"] = 21.48, - ["CD"] = 0, - }, - [169] = { - ["X"] = 62, - ["Y"] = 25.52, - ["CD"] = 0, - }, - [170] = { - ["X"] = 60.54, - ["Y"] = 29.82, - ["CD"] = 0, - }, - [171] = { - ["X"] = 52, - ["Y"] = 25.83, - ["CD"] = 0, - }, - [172] = { - ["X"] = 50.54, - ["Y"] = 35.56, - ["CD"] = 0, - }, - [173] = { - ["X"] = 44.97, - ["Y"] = 39.08, - ["CD"] = 0, - }, - [174] = { - ["X"] = 42.83, - ["Y"] = 42.04, - ["CD"] = 0, - }, - [175] = { - ["X"] = 43.57, - ["Y"] = 45.19, - ["CD"] = 0, - }, - [176] = { - ["X"] = 43.59, - ["Y"] = 46.2, - ["CD"] = 0, - }, - [177] = { - ["X"] = 49.47, - ["Y"] = 49.89, - ["CD"] = 0, - }, - [178] = { - ["X"] = 48.93, - ["Y"] = 49.78, - ["CD"] = 0, - }, - [179] = { - ["X"] = 43.63, - ["Y"] = 38.21, - ["CD"] = 0, - }, - [180] = { - ["X"] = 45.98, - ["Y"] = 38.79, - ["CD"] = 0, - }, - [181] = { - ["X"] = 44.19, - ["Y"] = 40.82, - ["CD"] = 0, - }, - [182] = { - ["X"] = 43.7, - ["Y"] = 42.61, - ["CD"] = 0, - }, - [183] = { - ["X"] = 44.29, - ["Y"] = 46.69, - ["CD"] = 0, - }, - [184] = { - ["X"] = 40.96, - ["Y"] = 37.98, - ["CD"] = 0, - }, - [185] = { - ["X"] = 42.18, - ["Y"] = 36.75, - ["CD"] = 0, - }, - [186] = { - ["X"] = 28.74, - ["Y"] = 46.9, - ["CD"] = 0, - }, - [187] = { - ["X"] = 29.32, - ["Y"] = 47.14, - ["CD"] = 0, - }, - [188] = { - ["X"] = 30.43, - ["Y"] = 51.49, - ["CD"] = 0, - }, - [189] = { - ["X"] = 34.47, - ["Y"] = 45.62, - ["CD"] = 0, - }, - [190] = { - ["X"] = 28.01, - ["Y"] = 41.97, - ["CD"] = 0, - }, - [191] = { - ["X"] = 33.22, - ["Y"] = 43.93, - ["CD"] = 0, - }, - [192] = { - ["X"] = 34.45, - ["Y"] = 42.11, - ["CD"] = 0, - }, - [193] = { - ["X"] = 36.37, - ["Y"] = 40.26, - ["CD"] = 0, - }, - [194] = { - ["X"] = 38.14, - ["Y"] = 23.01, - ["CD"] = 0, - }, - [195] = { - ["X"] = 43.17, - ["Y"] = 21.07, - ["CD"] = 0, - }, - [196] = { - ["X"] = 35.77, - ["Y"] = 27.54, - ["CD"] = 0, - }, - [197] = { - ["X"] = 63.95, - ["Y"] = 62.4, - ["CD"] = 0, - }, - [198] = { - ["X"] = 65.8, - ["Y"] = 58.06, - ["CD"] = 0, - }, - [199] = { - ["X"] = 59.47, - ["Y"] = 56.02, - ["CD"] = 0, - }, - [200] = { - ["X"] = 60.84, - ["Y"] = 55.71, - ["CD"] = 0, - }, -} -aura_env.cooldown = 600 -aura_env.wipeDistance = 50 -aura_env.angle = 0 -aura_env.hyp = 0 -aura_env.GetClosestHerb = function() - aura_env.minID = { - ["X"] = 0, - ["Y"] = 0, - ["D"] = 1000, - ["ID"] = 0, - } - local pX = GetPlayerMapPosition("player") or 0 - local pY = select(2, GetPlayerMapPosition("player")) or 0 - pX, pY = pX * 100, pY * 100 - for k, v in ipairs(aura_env.herbs) do - local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] - if cd == 0 then - local X, Y = pX - hX, pY - hY - local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) - if hyp < aura_env.minID["D"] then - aura_env.minID["X"] = hX - aura_env.minID["Y"] = hY - aura_env.minID["D"] = hyp - aura_env.minID["ID"] = k - end - end - end - return aura_env.minID["ID"] -end +aura_env.herbs = { + [1] = { + ["X"] = 47.24, + ["Y"] = 55.62, + ["CD"] = 0, + }, + [2] = { + ["X"] = 51.47, + ["Y"] = 55.4, + ["CD"] = 0, + }, + [3] = { + ["X"] = 49.09, + ["Y"] = 52.04, + ["CD"] = 0, + }, + [4] = { + ["X"] = 48.14, + ["Y"] = 53.66, + ["CD"] = 0, + }, + [5] = { + ["X"] = 45.46, + ["Y"] = 53.33, + ["CD"] = 0, + }, + [6] = { + ["X"] = 42.97, + ["Y"] = 59.67, + ["CD"] = 0, + }, + [7] = { + ["X"] = 42.91, + ["Y"] = 57.7, + ["CD"] = 0, + }, + [8] = { + ["X"] = 42.8, + ["Y"] = 56.74, + ["CD"] = 0, + }, + [9] = { + ["X"] = 41.94, + ["Y"] = 53.95, + ["CD"] = 0, + }, + [10] = { + ["X"] = 39.66, + ["Y"] = 53.74, + ["CD"] = 0, + }, + [11] = { + ["X"] = 40.06, + ["Y"] = 52.65, + ["CD"] = 0, + }, + [12] = { + ["X"] = 41.77, + ["Y"] = 49.95, + ["CD"] = 0, + }, + [13] = { + ["X"] = 42.6, + ["Y"] = 49.17, + ["CD"] = 0, + }, + [14] = { + ["X"] = 42.02, + ["Y"] = 50.81, + ["CD"] = 0, + }, + [15] = { + ["X"] = 42.54, + ["Y"] = 52.47, + ["CD"] = 0, + }, + [16] = { + ["X"] = 42.86, + ["Y"] = 51.62, + ["CD"] = 0, + }, + [17] = { + ["X"] = 44.56, + ["Y"] = 52.7, + ["CD"] = 0, + }, + [18] = { + ["X"] = 43.88, + ["Y"] = 52.96, + ["CD"] = 0, + }, + [19] = { + ["X"] = 43.66, + ["Y"] = 54.02, + ["CD"] = 0, + }, + [20] = { + ["X"] = 44.39, + ["Y"] = 54.51, + ["CD"] = 0, + }, + [21] = { + ["X"] = 44.57, + ["Y"] = 56.26, + ["CD"] = 0, + }, + [22] = { + ["X"] = 44.17, + ["Y"] = 58.37, + ["CD"] = 0, + }, + [23] = { + ["X"] = 46.02, + ["Y"] = 58.16, + ["CD"] = 0, + }, + [24] = { + ["X"] = 45.54, + ["Y"] = 56.28, + ["CD"] = 0, + }, + [25] = { + ["X"] = 45.64, + ["Y"] = 55.67, + ["CD"] = 0, + }, + [26] = { + ["X"] = 45.88, + ["Y"] = 54.95, + ["CD"] = 0, + }, + [27] = { + ["X"] = 75.52, + ["Y"] = 64.36, + ["CD"] = 0, + }, + [28] = { + ["X"] = 74.64, + ["Y"] = 63.4, + ["CD"] = 0, + }, + [29] = { + ["X"] = 75.47, + ["Y"] = 61.49, + ["CD"] = 0, + }, + [30] = { + ["X"] = 76.04, + ["Y"] = 62.25, + ["CD"] = 0, + }, + [31] = { + ["X"] = 76.34, + ["Y"] = 62.88, + ["CD"] = 0, + }, + [32] = { + ["X"] = 75.6, + ["Y"] = 61.16, + ["CD"] = 0, + }, + [33] = { + ["X"] = 74.48, + ["Y"] = 61.07, + ["CD"] = 0, + }, + [34] = { + ["X"] = 73.1, + ["Y"] = 61.55, + ["CD"] = 0, + }, + [35] = { + ["X"] = 71.6, + ["Y"] = 61.94, + ["CD"] = 0, + }, + [36] = { + ["X"] = 71.17, + ["Y"] = 61.79, + ["CD"] = 0, + }, + [37] = { + ["X"] = 70.7, + ["Y"] = 61.82, + ["CD"] = 0, + }, + [38] = { + ["X"] = 69.93, + ["Y"] = 60.51, + ["CD"] = 0, + }, + [39] = { + ["X"] = 68.88, + ["Y"] = 62.24, + ["CD"] = 0, + }, + [40] = { + ["X"] = 68.02, + ["Y"] = 62.34, + ["CD"] = 0, + }, + [41] = { + ["X"] = 68.38, + ["Y"] = 60.4, + ["CD"] = 0, + }, + [42] = { + ["X"] = 68.09, + ["Y"] = 58.09, + ["CD"] = 0, + }, + [43] = { + ["X"] = 68.51, + ["Y"] = 57.47, + ["CD"] = 0, + }, + [44] = { + ["X"] = 69.32, + ["Y"] = 57.12, + ["CD"] = 0, + }, + [45] = { + ["X"] = 70.52, + ["Y"] = 56.23, + ["CD"] = 0, + }, + [46] = { + ["X"] = 68.72, + ["Y"] = 55.81, + ["CD"] = 0, + }, + [47] = { + ["X"] = 68.24, + ["Y"] = 55.37, + ["CD"] = 0, + }, + [48] = { + ["X"] = 67.73, + ["Y"] = 53.38, + ["CD"] = 0, + }, + [49] = { + ["X"] = 67.47, + ["Y"] = 50.94, + ["CD"] = 0, + }, + [50] = { + ["X"] = 66.2, + ["Y"] = 50.65, + ["CD"] = 0, + }, + [51] = { + ["X"] = 66.13, + ["Y"] = 49.8, + ["CD"] = 0, + }, + [52] = { + ["X"] = 65.36, + ["Y"] = 46.62, + ["CD"] = 0, + }, + [53] = { + ["X"] = 68.76, + ["Y"] = 42.62, + ["CD"] = 0, + }, + [54] = { + ["X"] = 69.77, + ["Y"] = 41.67, + ["CD"] = 0, + }, + [55] = { + ["X"] = 70.11, + ["Y"] = 40.61, + ["CD"] = 0, + }, + [56] = { + ["X"] = 70.23, + ["Y"] = 39.9, + ["CD"] = 0, + }, + [57] = { + ["X"] = 70.45, + ["Y"] = 39.16, + ["CD"] = 0, + }, + [58] = { + ["X"] = 71.16, + ["Y"] = 38.18, + ["CD"] = 0, + }, + [59] = { + ["X"] = 70.62, + ["Y"] = 37.63, + ["CD"] = 0, + }, + [60] = { + ["X"] = 69.98, + ["Y"] = 37.93, + ["CD"] = 0, + }, + [61] = { + ["X"] = 69.85, + ["Y"] = 36.95, + ["CD"] = 0, + }, + [62] = { + ["X"] = 69.11, + ["Y"] = 37.75, + ["CD"] = 0, + }, + [63] = { + ["X"] = 68.09, + ["Y"] = 38.08, + ["CD"] = 0, + }, + [64] = { + ["X"] = 68.51, + ["Y"] = 39.26, + ["CD"] = 0, + }, + [65] = { + ["X"] = 67.77, + ["Y"] = 40.49, + ["CD"] = 0, + }, + [66] = { + ["X"] = 67.39, + ["Y"] = 41.98, + ["CD"] = 0, + }, + [67] = { + ["X"] = 66.73, + ["Y"] = 42.58, + ["CD"] = 0, + }, + [68] = { + ["X"] = 67.01, + ["Y"] = 43.27, + ["CD"] = 0, + }, + [69] = { + ["X"] = 66.64, + ["Y"] = 43.31, + ["CD"] = 0, + }, + [70] = { + ["X"] = 65.25, + ["Y"] = 48.23, + ["CD"] = 0, + }, + [71] = { + ["X"] = 64.43, + ["Y"] = 47.44, + ["CD"] = 0, + }, + [72] = { + ["X"] = 64.3, + ["Y"] = 49.23, + ["CD"] = 0, + }, + [73] = { + ["X"] = 63.4, + ["Y"] = 49.43, + ["CD"] = 0, + }, + [74] = { + ["X"] = 61.43, + ["Y"] = 49.66, + ["CD"] = 0, + }, + [75] = { + ["X"] = 62.74, + ["Y"] = 50.15, + ["CD"] = 0, + }, + [76] = { + ["X"] = 62.33, + ["Y"] = 50.62, + ["CD"] = 0, + }, + [77] = { + ["X"] = 61.77, + ["Y"] = 51.52, + ["CD"] = 0, + }, + [78] = { + ["X"] = 61.5, + ["Y"] = 53.26, + ["CD"] = 0, + }, + [79] = { + ["X"] = 61.08, + ["Y"] = 54.15, + ["CD"] = 0, + }, + [80] = { + ["X"] = 59.76, + ["Y"] = 53.98, + ["CD"] = 0, + }, + [81] = { + ["X"] = 59.06, + ["Y"] = 52.97, + ["CD"] = 0, + }, + [82] = { + ["X"] = 59.38, + ["Y"] = 51.04, + ["CD"] = 0, + }, + [83] = { + ["X"] = 59.05, + ["Y"] = 51.07, + ["CD"] = 0, + }, + [84] = { + ["X"] = 58.05, + ["Y"] = 51.4, + ["CD"] = 0, + }, + [85] = { + ["X"] = 57.23, + ["Y"] = 50.59, + ["CD"] = 0, + }, + [86] = { + ["X"] = 56.64, + ["Y"] = 50.71, + ["CD"] = 0, + }, + [87] = { + ["X"] = 53.07, + ["Y"] = 53.33, + ["CD"] = 0, + }, + [88] = { + ["X"] = 53.94, + ["Y"] = 54.38, + ["CD"] = 0, + }, + [89] = { + ["X"] = 53.44, + ["Y"] = 54.49, + ["CD"] = 0, + }, + [90] = { + ["X"] = 52.19, + ["Y"] = 56.4, + ["CD"] = 0, + }, + [91] = { + ["X"] = 51.96, + ["Y"] = 58.49, + ["CD"] = 0, + }, + [92] = { + ["X"] = 51.66, + ["Y"] = 58.85, + ["CD"] = 0, + }, + [93] = { + ["X"] = 51.36, + ["Y"] = 59.61, + ["CD"] = 0, + }, + [94] = { + ["X"] = 52, + ["Y"] = 60.49, + ["CD"] = 0, + }, + [95] = { + ["X"] = 53.76, + ["Y"] = 58.93, + ["CD"] = 0, + }, + [96] = { + ["X"] = 53.43, + ["Y"] = 58.03, + ["CD"] = 0, + }, + [97] = { + ["X"] = 52.75, + ["Y"] = 56.71, + ["CD"] = 0, + }, + [98] = { + ["X"] = 53.34, + ["Y"] = 56.63, + ["CD"] = 0, + }, + [99] = { + ["X"] = 53.46, + ["Y"] = 55.97, + ["CD"] = 0, + }, + [100] = { + ["X"] = 52.99, + ["Y"] = 55.07, + ["CD"] = 0, + }, + [101] = { + ["X"] = 52.69, + ["Y"] = 53.46, + ["CD"] = 0, + }, + [102] = { + ["X"] = 51.16, + ["Y"] = 53.73, + ["CD"] = 0, + }, + [103] = { + ["X"] = 50.62, + ["Y"] = 53.1, + ["CD"] = 0, + }, + [104] = { + ["X"] = 50.2, + ["Y"] = 52.37, + ["CD"] = 0, + }, + [105] = { + ["X"] = 50.13, + ["Y"] = 50.4, + ["CD"] = 0, + }, + [106] = { + ["X"] = 48.08, + ["Y"] = 50.93, + ["CD"] = 0, + }, + [107] = { + ["X"] = 47.68, + ["Y"] = 48.92, + ["CD"] = 0, + }, + [108] = { + ["X"] = 44.23, + ["Y"] = 45.97, + ["CD"] = 0, + }, + [109] = { + ["X"] = 45.22, + ["Y"] = 43.32, + ["CD"] = 0, + }, + [110] = { + ["X"] = 45.69, + ["Y"] = 42.54, + ["CD"] = 0, + }, + [111] = { + ["X"] = 46.28, + ["Y"] = 42.7, + ["CD"] = 0, + }, + [112] = { + ["X"] = 48.34, + ["Y"] = 39.8, + ["CD"] = 0, + }, + [113] = { + ["X"] = 49.36, + ["Y"] = 37.64, + ["CD"] = 0, + }, + [114] = { + ["X"] = 47.3, + ["Y"] = 38.94, + ["CD"] = 0, + }, + [115] = { + ["X"] = 42.38, + ["Y"] = 41.41, + ["CD"] = 0, + }, + [116] = { + ["X"] = 42.36, + ["Y"] = 39.64, + ["CD"] = 0, + }, + [117] = { + ["X"] = 42.97, + ["Y"] = 39.05, + ["CD"] = 0, + }, + [118] = { + ["X"] = 42.41, + ["Y"] = 38.26, + ["CD"] = 0, + }, + [119] = { + ["X"] = 40.83, + ["Y"] = 40.62, + ["CD"] = 0, + }, + [120] = { + ["X"] = 41.68, + ["Y"] = 40.19, + ["CD"] = 0, + }, + [121] = { + ["X"] = 61.22, + ["Y"] = 64.31, + ["CD"] = 0, + }, + [122] = { + ["X"] = 56.67, + ["Y"] = 79.09, + ["CD"] = 0, + }, + [123] = { + ["X"] = 73.25, + ["Y"] = 44.25, + ["CD"] = 0, + }, + [124] = { + ["X"] = 73.25, + ["Y"] = 44.5, + ["CD"] = 0, + }, + [125] = { + ["X"] = 69.24, + ["Y"] = 50.47, + ["CD"] = 0, + }, + [126] = { + ["X"] = 64.32, + ["Y"] = 44.07, + ["CD"] = 0, + }, + [127] = { + ["X"] = 62.95, + ["Y"] = 46.32, + ["CD"] = 0, + }, + [128] = { + ["X"] = 63.56, + ["Y"] = 45.14, + ["CD"] = 0, + }, + [129] = { + ["X"] = 68.35, + ["Y"] = 58.98, + ["CD"] = 0, + }, + [130] = { + ["X"] = 71.6, + ["Y"] = 52.25, + ["CD"] = 0, + }, + [131] = { + ["X"] = 82.09, + ["Y"] = 57.01, + ["CD"] = 0, + }, + [132] = { + ["X"] = 80.93, + ["Y"] = 56.31, + ["CD"] = 0, + }, + [133] = { + ["X"] = 79.83, + ["Y"] = 64.42, + ["CD"] = 0, + }, + [134] = { + ["X"] = 78.73, + ["Y"] = 63.87, + ["CD"] = 0, + }, + [135] = { + ["X"] = 80.89, + ["Y"] = 63.18, + ["CD"] = 0, + }, + [136] = { + ["X"] = 78.75, + ["Y"] = 58.41, + ["CD"] = 0, + }, + [137] = { + ["X"] = 77.87, + ["Y"] = 57.58, + ["CD"] = 0, + }, + [138] = { + ["X"] = 73.32, + ["Y"] = 59.52, + ["CD"] = 0, + }, + [139] = { + ["X"] = 70.2, + ["Y"] = 58.54, + ["CD"] = 0, + }, + [140] = { + ["X"] = 68.78, + ["Y"] = 54.4, + ["CD"] = 0, + }, + [141] = { + ["X"] = 67.69, + ["Y"] = 59.37, + ["CD"] = 0, + }, + [142] = { + ["X"] = 67.61, + ["Y"] = 54.47, + ["CD"] = 0, + }, + [143] = { + ["X"] = 65.94, + ["Y"] = 52.25, + ["CD"] = 0, + }, + [144] = { + ["X"] = 63.57, + ["Y"] = 55.84, + ["CD"] = 0, + }, + [145] = { + ["X"] = 68.18, + ["Y"] = 50.25, + ["CD"] = 0, + }, + [146] = { + ["X"] = 43.9, + ["Y"] = 58.83, + ["CD"] = 0, + }, + [147] = { + ["X"] = 43.27, + ["Y"] = 81.62, + ["CD"] = 0, + }, + [148] = { + ["X"] = 45.24, + ["Y"] = 75.28, + ["CD"] = 0, + }, + [149] = { + ["X"] = 43.53, + ["Y"] = 70.2, + ["CD"] = 0, + }, + [150] = { + ["X"] = 43.4, + ["Y"] = 71.29, + ["CD"] = 0, + }, + [151] = { + ["X"] = 48, + ["Y"] = 67.59, + ["CD"] = 0, + }, + [152] = { + ["X"] = 41.82, + ["Y"] = 65.83, + ["CD"] = 0, + }, + [153] = { + ["X"] = 41.11, + ["Y"] = 65.23, + ["CD"] = 0, + }, + [154] = { + ["X"] = 37.84, + ["Y"] = 64.52, + ["CD"] = 0, + }, + [155] = { + ["X"] = 41.31, + ["Y"] = 58.59, + ["CD"] = 0, + }, + [156] = { + ["X"] = 42.35, + ["Y"] = 61.07, + ["CD"] = 0, + }, + [157] = { + ["X"] = 38.37, + ["Y"] = 56.57, + ["CD"] = 0, + }, + [158] = { + ["X"] = 37.66, + ["Y"] = 55.01, + ["CD"] = 0, + }, + [159] = { + ["X"] = 44.11, + ["Y"] = 44.07, + ["CD"] = 0, + }, + [160] = { + ["X"] = 46.61, + ["Y"] = 40.23, + ["CD"] = 0, + }, + [161] = { + ["X"] = 44.65, + ["Y"] = 38.78, + ["CD"] = 0, + }, + [162] = { + ["X"] = 47.94, + ["Y"] = 35.39, + ["CD"] = 0, + }, + [163] = { + ["X"] = 43.25, + ["Y"] = 31.36, + ["CD"] = 0, + }, + [164] = { + ["X"] = 45.4, + ["Y"] = 30.26, + ["CD"] = 0, + }, + [165] = { + ["X"] = 43.1, + ["Y"] = 26.67, + ["CD"] = 0, + }, + [166] = { + ["X"] = 45.47, + ["Y"] = 25.53, + ["CD"] = 0, + }, + [167] = { + ["X"] = 50.15, + ["Y"] = 21.58, + ["CD"] = 0, + }, + [168] = { + ["X"] = 48.03, + ["Y"] = 21.48, + ["CD"] = 0, + }, + [169] = { + ["X"] = 62, + ["Y"] = 25.52, + ["CD"] = 0, + }, + [170] = { + ["X"] = 60.54, + ["Y"] = 29.82, + ["CD"] = 0, + }, + [171] = { + ["X"] = 52, + ["Y"] = 25.83, + ["CD"] = 0, + }, + [172] = { + ["X"] = 50.54, + ["Y"] = 35.56, + ["CD"] = 0, + }, + [173] = { + ["X"] = 44.97, + ["Y"] = 39.08, + ["CD"] = 0, + }, + [174] = { + ["X"] = 42.83, + ["Y"] = 42.04, + ["CD"] = 0, + }, + [175] = { + ["X"] = 43.57, + ["Y"] = 45.19, + ["CD"] = 0, + }, + [176] = { + ["X"] = 43.59, + ["Y"] = 46.2, + ["CD"] = 0, + }, + [177] = { + ["X"] = 49.47, + ["Y"] = 49.89, + ["CD"] = 0, + }, + [178] = { + ["X"] = 48.93, + ["Y"] = 49.78, + ["CD"] = 0, + }, + [179] = { + ["X"] = 43.63, + ["Y"] = 38.21, + ["CD"] = 0, + }, + [180] = { + ["X"] = 45.98, + ["Y"] = 38.79, + ["CD"] = 0, + }, + [181] = { + ["X"] = 44.19, + ["Y"] = 40.82, + ["CD"] = 0, + }, + [182] = { + ["X"] = 43.7, + ["Y"] = 42.61, + ["CD"] = 0, + }, + [183] = { + ["X"] = 44.29, + ["Y"] = 46.69, + ["CD"] = 0, + }, + [184] = { + ["X"] = 40.96, + ["Y"] = 37.98, + ["CD"] = 0, + }, + [185] = { + ["X"] = 42.18, + ["Y"] = 36.75, + ["CD"] = 0, + }, + [186] = { + ["X"] = 28.74, + ["Y"] = 46.9, + ["CD"] = 0, + }, + [187] = { + ["X"] = 29.32, + ["Y"] = 47.14, + ["CD"] = 0, + }, + [188] = { + ["X"] = 30.43, + ["Y"] = 51.49, + ["CD"] = 0, + }, + [189] = { + ["X"] = 34.47, + ["Y"] = 45.62, + ["CD"] = 0, + }, + [190] = { + ["X"] = 28.01, + ["Y"] = 41.97, + ["CD"] = 0, + }, + [191] = { + ["X"] = 33.22, + ["Y"] = 43.93, + ["CD"] = 0, + }, + [192] = { + ["X"] = 34.45, + ["Y"] = 42.11, + ["CD"] = 0, + }, + [193] = { + ["X"] = 36.37, + ["Y"] = 40.26, + ["CD"] = 0, + }, + [194] = { + ["X"] = 38.14, + ["Y"] = 23.01, + ["CD"] = 0, + }, + [195] = { + ["X"] = 43.17, + ["Y"] = 21.07, + ["CD"] = 0, + }, + [196] = { + ["X"] = 35.77, + ["Y"] = 27.54, + ["CD"] = 0, + }, + [197] = { + ["X"] = 63.95, + ["Y"] = 62.4, + ["CD"] = 0, + }, + [198] = { + ["X"] = 65.8, + ["Y"] = 58.06, + ["CD"] = 0, + }, + [199] = { + ["X"] = 59.47, + ["Y"] = 56.02, + ["CD"] = 0, + }, + [200] = { + ["X"] = 60.84, + ["Y"] = 55.71, + ["CD"] = 0, + }, +} +aura_env.cooldown = 600 +aura_env.wipeDistance = 50 +aura_env.angle = 0 +aura_env.hyp = 0 +aura_env.GetClosestHerb = function() + aura_env.minID = { + ["X"] = 0, + ["Y"] = 0, + ["D"] = 1000, + ["ID"] = 0, + } + local pX = GetPlayerMapPosition("player") or 0 + local pY = select(2, GetPlayerMapPosition("player")) or 0 + pX, pY = pX * 100, pY * 100 + for k, v in ipairs(aura_env.herbs) do + local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] + if cd == 0 then + local X, Y = pX - hX, pY - hY + local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) + if hyp < aura_env.minID["D"] then + aura_env.minID["X"] = hX + aura_env.minID["Y"] = hY + aura_env.minID["D"] = hyp + aura_env.minID["ID"] = k + end + end + end + return aura_env.minID["ID"] +end diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Foxflower.lua b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Herbalism/Foxflower.lua similarity index 92% rename from Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Foxflower.lua rename to WeakAuras/Projects/Herb Sniffer/Herb Arrays/Herbalism/Foxflower.lua index e53e481..b8f7577 100644 --- a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Foxflower.lua +++ b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Herbalism/Foxflower.lua @@ -1,1032 +1,1032 @@ -aura_env.herbs = { - [1] = { - ["X"] = 39.04, - ["Y"] = 63.21, - ["CD"] = 0, - }, - [2] = { - ["X"] = 42.24, - ["Y"] = 55.42, - ["CD"] = 0, - }, - [3] = { - ["X"] = 43.3, - ["Y"] = 58.87, - ["CD"] = 0, - }, - [4] = { - ["X"] = 40.39, - ["Y"] = 59.24, - ["CD"] = 0, - }, - [5] = { - ["X"] = 42.39, - ["Y"] = 67.1, - ["CD"] = 0, - }, - [6] = { - ["X"] = 37.19, - ["Y"] = 66.98, - ["CD"] = 0, - }, - [7] = { - ["X"] = 42.21, - ["Y"] = 65.26, - ["CD"] = 0, - }, - [8] = { - ["X"] = 42.86, - ["Y"] = 52.36, - ["CD"] = 0, - }, - [9] = { - ["X"] = 44.42, - ["Y"] = 49.56, - ["CD"] = 0, - }, - [10] = { - ["X"] = 46.31, - ["Y"] = 46.84, - ["CD"] = 0, - }, - [11] = { - ["X"] = 44.32, - ["Y"] = 44.33, - ["CD"] = 0, - }, - [12] = { - ["X"] = 47.06, - ["Y"] = 48.3, - ["CD"] = 0, - }, - [13] = { - ["X"] = 46.96, - ["Y"] = 47.09, - ["CD"] = 0, - }, - [14] = { - ["X"] = 57.3, - ["Y"] = 22.65, - ["CD"] = 0, - }, - [15] = { - ["X"] = 57.13, - ["Y"] = 20.04, - ["CD"] = 0, - }, - [16] = { - ["X"] = 56.54, - ["Y"] = 21.14, - ["CD"] = 0, - }, - [17] = { - ["X"] = 55.97, - ["Y"] = 20.78, - ["CD"] = 0, - }, - [18] = { - ["X"] = 56, - ["Y"] = 20.19, - ["CD"] = 0, - }, - [19] = { - ["X"] = 55.94, - ["Y"] = 19.48, - ["CD"] = 0, - }, - [20] = { - ["X"] = 54.72, - ["Y"] = 16.63, - ["CD"] = 0, - }, - [21] = { - ["X"] = 55.63, - ["Y"] = 17.81, - ["CD"] = 0, - }, - [22] = { - ["X"] = 55.27, - ["Y"] = 18.91, - ["CD"] = 0, - }, - [23] = { - ["X"] = 55.32, - ["Y"] = 18.59, - ["CD"] = 0, - }, - [24] = { - ["X"] = 41.11, - ["Y"] = 51.73, - ["CD"] = 0, - }, - [25] = { - ["X"] = 42.6, - ["Y"] = 48.57, - ["CD"] = 0, - }, - [26] = { - ["X"] = 43.68, - ["Y"] = 48.71, - ["CD"] = 0, - }, - [27] = { - ["X"] = 39.67, - ["Y"] = 52.78, - ["CD"] = 0, - }, - [28] = { - ["X"] = 40.85, - ["Y"] = 53.98, - ["CD"] = 0, - }, - [29] = { - ["X"] = 42.82, - ["Y"] = 52.88, - ["CD"] = 0, - }, - [30] = { - ["X"] = 41.21, - ["Y"] = 56.52, - ["CD"] = 0, - }, - [31] = { - ["X"] = 39.74, - ["Y"] = 67.27, - ["CD"] = 0, - }, - [32] = { - ["X"] = 40.77, - ["Y"] = 65.23, - ["CD"] = 0, - }, - [33] = { - ["X"] = 37.33, - ["Y"] = 63.76, - ["CD"] = 0, - }, - [34] = { - ["X"] = 37.5, - ["Y"] = 62.89, - ["CD"] = 0, - }, - [35] = { - ["X"] = 37.72, - ["Y"] = 62.08, - ["CD"] = 0, - }, - [36] = { - ["X"] = 40.68, - ["Y"] = 57.62, - ["CD"] = 0, - }, - [37] = { - ["X"] = 50.04, - ["Y"] = 9, - ["CD"] = 0, - }, - [38] = { - ["X"] = 47.51, - ["Y"] = 9.64, - ["CD"] = 0, - }, - [39] = { - ["X"] = 45.07, - ["Y"] = 8.99, - ["CD"] = 0, - }, - [40] = { - ["X"] = 42.96, - ["Y"] = 9.11, - ["CD"] = 0, - }, - [41] = { - ["X"] = 43.26, - ["Y"] = 8.47, - ["CD"] = 0, - }, - [42] = { - ["X"] = 42.69, - ["Y"] = 7.59, - ["CD"] = 0, - }, - [43] = { - ["X"] = 45.72, - ["Y"] = 9.49, - ["CD"] = 0, - }, - [44] = { - ["X"] = 46.02, - ["Y"] = 8.48, - ["CD"] = 0, - }, - [45] = { - ["X"] = 44.75, - ["Y"] = 8.04, - ["CD"] = 0, - }, - [46] = { - ["X"] = 44.62, - ["Y"] = 7.22, - ["CD"] = 0, - }, - [47] = { - ["X"] = 41.25, - ["Y"] = 13, - ["CD"] = 0, - }, - [48] = { - ["X"] = 41.24, - ["Y"] = 11.49, - ["CD"] = 0, - }, - [49] = { - ["X"] = 42.07, - ["Y"] = 11.42, - ["CD"] = 0, - }, - [50] = { - ["X"] = 44.2, - ["Y"] = 10.31, - ["CD"] = 0, - }, - [51] = { - ["X"] = 43.54, - ["Y"] = 11.57, - ["CD"] = 0, - }, - [52] = { - ["X"] = 44.12, - ["Y"] = 11.56, - ["CD"] = 0, - }, - [53] = { - ["X"] = 45.67, - ["Y"] = 12.81, - ["CD"] = 0, - }, - [54] = { - ["X"] = 45.6, - ["Y"] = 11.82, - ["CD"] = 0, - }, - [55] = { - ["X"] = 48.04, - ["Y"] = 10.68, - ["CD"] = 0, - }, - [56] = { - ["X"] = 48.1, - ["Y"] = 9.57, - ["CD"] = 0, - }, - [57] = { - ["X"] = 50.88, - ["Y"] = 11.06, - ["CD"] = 0, - }, - [58] = { - ["X"] = 50.51, - ["Y"] = 10.69, - ["CD"] = 0, - }, - [59] = { - ["X"] = 50.02, - ["Y"] = 10.43, - ["CD"] = 0, - }, - [60] = { - ["X"] = 49.54, - ["Y"] = 10.43, - ["CD"] = 0, - }, - [61] = { - ["X"] = 48.84, - ["Y"] = 10.72, - ["CD"] = 0, - }, - [62] = { - ["X"] = 48.44, - ["Y"] = 10.66, - ["CD"] = 0, - }, - [63] = { - ["X"] = 47.95, - ["Y"] = 11.28, - ["CD"] = 0, - }, - [64] = { - ["X"] = 46.49, - ["Y"] = 11.47, - ["CD"] = 0, - }, - [65] = { - ["X"] = 47.16, - ["Y"] = 11.19, - ["CD"] = 0, - }, - [66] = { - ["X"] = 56.04, - ["Y"] = 63.04, - ["CD"] = 0, - }, - [67] = { - ["X"] = 56.46, - ["Y"] = 60.72, - ["CD"] = 0, - }, - [68] = { - ["X"] = 57.51, - ["Y"] = 59.57, - ["CD"] = 0, - }, - [69] = { - ["X"] = 57.31, - ["Y"] = 58.61, - ["CD"] = 0, - }, - [70] = { - ["X"] = 56.29, - ["Y"] = 56.16, - ["CD"] = 0, - }, - [71] = { - ["X"] = 56.93, - ["Y"] = 56.51, - ["CD"] = 0, - }, - [72] = { - ["X"] = 57.33, - ["Y"] = 56.08, - ["CD"] = 0, - }, - [73] = { - ["X"] = 57.78, - ["Y"] = 56.85, - ["CD"] = 0, - }, - [74] = { - ["X"] = 57.95, - ["Y"] = 54.56, - ["CD"] = 0, - }, - [75] = { - ["X"] = 57.54, - ["Y"] = 53.68, - ["CD"] = 0, - }, - [76] = { - ["X"] = 57.15, - ["Y"] = 53.7, - ["CD"] = 0, - }, - [77] = { - ["X"] = 55.34, - ["Y"] = 53.18, - ["CD"] = 0, - }, - [78] = { - ["X"] = 55.2, - ["Y"] = 53.41, - ["CD"] = 0, - }, - [79] = { - ["X"] = 56.17, - ["Y"] = 54.2, - ["CD"] = 0, - }, - [80] = { - ["X"] = 55.99, - ["Y"] = 55.43, - ["CD"] = 0, - }, - [81] = { - ["X"] = 55.9, - ["Y"] = 56.79, - ["CD"] = 0, - }, - [82] = { - ["X"] = 57.56, - ["Y"] = 57.6, - ["CD"] = 0, - }, - [83] = { - ["X"] = 55.89, - ["Y"] = 59.48, - ["CD"] = 0, - }, - [84] = { - ["X"] = 55.11, - ["Y"] = 61.2, - ["CD"] = 0, - }, - [85] = { - ["X"] = 39, - ["Y"] = 40.8, - ["CD"] = 0, - }, - [86] = { - ["X"] = 39.15, - ["Y"] = 39.51, - ["CD"] = 0, - }, - [87] = { - ["X"] = 40.15, - ["Y"] = 36.93, - ["CD"] = 0, - }, - [88] = { - ["X"] = 40.41, - ["Y"] = 37.67, - ["CD"] = 0, - }, - [89] = { - ["X"] = 40.55, - ["Y"] = 36.19, - ["CD"] = 0, - }, - [90] = { - ["X"] = 41.38, - ["Y"] = 36.45, - ["CD"] = 0, - }, - [91] = { - ["X"] = 41.54, - ["Y"] = 35.29, - ["CD"] = 0, - }, - [92] = { - ["X"] = 41.97, - ["Y"] = 33.67, - ["CD"] = 0, - }, - [93] = { - ["X"] = 41.46, - ["Y"] = 31.24, - ["CD"] = 0, - }, - [94] = { - ["X"] = 41.4, - ["Y"] = 28.92, - ["CD"] = 0, - }, - [95] = { - ["X"] = 40.79, - ["Y"] = 29.51, - ["CD"] = 0, - }, - [96] = { - ["X"] = 42.57, - ["Y"] = 30.29, - ["CD"] = 0, - }, - [97] = { - ["X"] = 46.38, - ["Y"] = 32.35, - ["CD"] = 0, - }, - [98] = { - ["X"] = 45.3, - ["Y"] = 32.49, - ["CD"] = 0, - }, - [99] = { - ["X"] = 44.18, - ["Y"] = 33.11, - ["CD"] = 0, - }, - [100] = { - ["X"] = 44.31, - ["Y"] = 32.62, - ["CD"] = 0, - }, - [101] = { - ["X"] = 44.76, - ["Y"] = 30.4, - ["CD"] = 0, - }, - [102] = { - ["X"] = 37.07, - ["Y"] = 19.85, - ["CD"] = 0, - }, - [103] = { - ["X"] = 36.06, - ["Y"] = 20.92, - ["CD"] = 0, - }, - [104] = { - ["X"] = 32.68, - ["Y"] = 23.7, - ["CD"] = 0, - }, - [105] = { - ["X"] = 33.36, - ["Y"] = 21.36, - ["CD"] = 0, - }, - [106] = { - ["X"] = 34.62, - ["Y"] = 22.6, - ["CD"] = 0, - }, - [107] = { - ["X"] = 35.26, - ["Y"] = 23.87, - ["CD"] = 0, - }, - [108] = { - ["X"] = 36.27, - ["Y"] = 23.14, - ["CD"] = 0, - }, - [109] = { - ["X"] = 34.74, - ["Y"] = 23.43, - ["CD"] = 0, - }, - [110] = { - ["X"] = 34.05, - ["Y"] = 24.22, - ["CD"] = 0, - }, - [111] = { - ["X"] = 34.18, - ["Y"] = 27.2, - ["CD"] = 0, - }, - [112] = { - ["X"] = 34.23, - ["Y"] = 25.22, - ["CD"] = 0, - }, - [113] = { - ["X"] = 31.78, - ["Y"] = 35.09, - ["CD"] = 0, - }, - [114] = { - ["X"] = 32.12, - ["Y"] = 34.17, - ["CD"] = 0, - }, - [115] = { - ["X"] = 33.13, - ["Y"] = 33.36, - ["CD"] = 0, - }, - [116] = { - ["X"] = 32.78, - ["Y"] = 32.58, - ["CD"] = 0, - }, - [117] = { - ["X"] = 31.77, - ["Y"] = 31.79, - ["CD"] = 0, - }, - [118] = { - ["X"] = 30.37, - ["Y"] = 28.05, - ["CD"] = 0, - }, - [119] = { - ["X"] = 30.53, - ["Y"] = 29.81, - ["CD"] = 0, - }, - [120] = { - ["X"] = 30.8, - ["Y"] = 30.32, - ["CD"] = 0, - }, - [121] = { - ["X"] = 28.47, - ["Y"] = 40.12, - ["CD"] = 0, - }, - [122] = { - ["X"] = 27.69, - ["Y"] = 41.13, - ["CD"] = 0, - }, - [123] = { - ["X"] = 28.37, - ["Y"] = 41.03, - ["CD"] = 0, - }, - [124] = { - ["X"] = 28.86, - ["Y"] = 42.47, - ["CD"] = 0, - }, - [125] = { - ["X"] = 29.95, - ["Y"] = 41.71, - ["CD"] = 0, - }, - [126] = { - ["X"] = 31.73, - ["Y"] = 38.3, - ["CD"] = 0, - }, - [127] = { - ["X"] = 30.38, - ["Y"] = 39.04, - ["CD"] = 0, - }, - [128] = { - ["X"] = 31.37, - ["Y"] = 36.91, - ["CD"] = 0, - }, - [129] = { - ["X"] = 31.64, - ["Y"] = 35.8, - ["CD"] = 0, - }, - [130] = { - ["X"] = 30.36, - ["Y"] = 34.88, - ["CD"] = 0, - }, - [131] = { - ["X"] = 31.05, - ["Y"] = 33.51, - ["CD"] = 0, - }, - [132] = { - ["X"] = 30.53, - ["Y"] = 33.11, - ["CD"] = 0, - }, - [133] = { - ["X"] = 31.38, - ["Y"] = 30.83, - ["CD"] = 0, - }, - [134] = { - ["X"] = 44.68, - ["Y"] = 54.55, - ["CD"] = 0, - }, - [135] = { - ["X"] = 44.08, - ["Y"] = 54.55, - ["CD"] = 0, - }, - [136] = { - ["X"] = 43.58, - ["Y"] = 54.82, - ["CD"] = 0, - }, - [137] = { - ["X"] = 45.12, - ["Y"] = 50.11, - ["CD"] = 0, - }, - [138] = { - ["X"] = 43.58, - ["Y"] = 45.93, - ["CD"] = 0, - }, - [139] = { - ["X"] = 42.63, - ["Y"] = 45.65, - ["CD"] = 0, - }, - [140] = { - ["X"] = 42.96, - ["Y"] = 46.27, - ["CD"] = 0, - }, - [141] = { - ["X"] = 42.09, - ["Y"] = 46.82, - ["CD"] = 0, - }, - [142] = { - ["X"] = 39.3, - ["Y"] = 46.88, - ["CD"] = 0, - }, - [143] = { - ["X"] = 40.18, - ["Y"] = 47.01, - ["CD"] = 0, - }, - [144] = { - ["X"] = 40.81, - ["Y"] = 46.97, - ["CD"] = 0, - }, - [145] = { - ["X"] = 41.37, - ["Y"] = 48.56, - ["CD"] = 0, - }, - [146] = { - ["X"] = 40.45, - ["Y"] = 48.42, - ["CD"] = 0, - }, - [147] = { - ["X"] = 38.56, - ["Y"] = 50.23, - ["CD"] = 0, - }, - [148] = { - ["X"] = 38.26, - ["Y"] = 49.28, - ["CD"] = 0, - }, - [149] = { - ["X"] = 39.77, - ["Y"] = 49.03, - ["CD"] = 0, - }, - [150] = { - ["X"] = 39.89, - ["Y"] = 49.73, - ["CD"] = 0, - }, - [151] = { - ["X"] = 39.97, - ["Y"] = 50.65, - ["CD"] = 0, - }, - [152] = { - ["X"] = 40.15, - ["Y"] = 51.03, - ["CD"] = 0, - }, - [153] = { - ["X"] = 58.81, - ["Y"] = 62.31, - ["CD"] = 0, - }, - [154] = { - ["X"] = 55.76, - ["Y"] = 65.74, - ["CD"] = 0, - }, - [155] = { - ["X"] = 52.04, - ["Y"] = 58.38, - ["CD"] = 0, - }, - [156] = { - ["X"] = 50.81, - ["Y"] = 67.32, - ["CD"] = 0, - }, - [157] = { - ["X"] = 43.38, - ["Y"] = 66.19, - ["CD"] = 0, - }, - [158] = { - ["X"] = 24.98, - ["Y"] = 59.43, - ["CD"] = 0, - }, - [159] = { - ["X"] = 26.05, - ["Y"] = 63.62, - ["CD"] = 0, - }, - [160] = { - ["X"] = 28.67, - ["Y"] = 55.49, - ["CD"] = 0, - }, - [161] = { - ["X"] = 26.86, - ["Y"] = 41.18, - ["CD"] = 0, - }, - [162] = { - ["X"] = 25.89, - ["Y"] = 44.55, - ["CD"] = 0, - }, - [163] = { - ["X"] = 24.23, - ["Y"] = 43.43, - ["CD"] = 0, - }, - [164] = { - ["X"] = 26.35, - ["Y"] = 39.24, - ["CD"] = 0, - }, - [165] = { - ["X"] = 28.83, - ["Y"] = 35.34, - ["CD"] = 0, - }, - [166] = { - ["X"] = 27.93, - ["Y"] = 30.52, - ["CD"] = 0, - }, - [167] = { - ["X"] = 28.73, - ["Y"] = 28.61, - ["CD"] = 0, - }, - [168] = { - ["X"] = 31.88, - ["Y"] = 26.11, - ["CD"] = 0, - }, - [169] = { - ["X"] = 37.52, - ["Y"] = 15.31, - ["CD"] = 0, - }, - [170] = { - ["X"] = 44.79, - ["Y"] = 12.36, - ["CD"] = 0, - }, - [171] = { - ["X"] = 58.06, - ["Y"] = 22.18, - ["CD"] = 0, - }, - [172] = { - ["X"] = 57.64, - ["Y"] = 19.03, - ["CD"] = 0, - }, - [173] = { - ["X"] = 54.81, - ["Y"] = 16.28, - ["CD"] = 0, - }, - [174] = { - ["X"] = 53.1, - ["Y"] = 13.37, - ["CD"] = 0, - }, - [175] = { - ["X"] = 49.63, - ["Y"] = 13.87, - ["CD"] = 0, - }, - [176] = { - ["X"] = 49.23, - ["Y"] = 8.72, - ["CD"] = 0, - }, - [177] = { - ["X"] = 47.72, - ["Y"] = 6.15, - ["CD"] = 0, - }, - [178] = { - ["X"] = 44.93, - ["Y"] = 7.4, - ["CD"] = 0, - }, - [179] = { - ["X"] = 42.09, - ["Y"] = 27.58, - ["CD"] = 0, - }, - [180] = { - ["X"] = 46.45, - ["Y"] = 26.28, - ["CD"] = 0, - }, - [181] = { - ["X"] = 47.57, - ["Y"] = 24.96, - ["CD"] = 0, - }, - [182] = { - ["X"] = 48.31, - ["Y"] = 29.71, - ["CD"] = 0, - }, - [183] = { - ["X"] = 35.86, - ["Y"] = 38.62, - ["CD"] = 0, - }, - [184] = { - ["X"] = 40.33, - ["Y"] = 33.71, - ["CD"] = 0, - }, - [185] = { - ["X"] = 36.87, - ["Y"] = 35.15, - ["CD"] = 0, - }, - [186] = { - ["X"] = 37.26, - ["Y"] = 33.85, - ["CD"] = 0, - }, - [187] = { - ["X"] = 42.47, - ["Y"] = 51.44, - ["CD"] = 0, - }, - [188] = { - ["X"] = 42.21, - ["Y"] = 54.16, - ["CD"] = 0, - }, - [189] = { - ["X"] = 44.95, - ["Y"] = 55.74, - ["CD"] = 0, - }, - [190] = { - ["X"] = 52, - ["Y"] = 32.57, - ["CD"] = 0, - }, - [191] = { - ["X"] = 52.49, - ["Y"] = 34.19, - ["CD"] = 0, - }, - [192] = { - ["X"] = 52.71, - ["Y"] = 39.16, - ["CD"] = 0, - }, - [193] = { - ["X"] = 54.4, - ["Y"] = 50.27, - ["CD"] = 0, - }, - [194] = { - ["X"] = 49.74, - ["Y"] = 42.1, - ["CD"] = 0, - }, - [195] = { - ["X"] = 47.22, - ["Y"] = 51.9, - ["CD"] = 0, - }, - [196] = { - ["X"] = 47.87, - ["Y"] = 54.97, - ["CD"] = 0, - }, - [197] = { - ["X"] = 43.42, - ["Y"] = 72.85, - ["CD"] = 0, - }, - [198] = { - ["X"] = 48.48, - ["Y"] = 54.81, - ["CD"] = 0, - }, - [199] = { - ["X"] = 38.62, - ["Y"] = 61.09, - ["CD"] = 0, - }, - [200] = { - ["X"] = 42.5, - ["Y"] = 61.79, - ["CD"] = 0, - }, -} -aura_env.cooldown = 600 -aura_env.wipeDistance = 50 -aura_env.angle = 0 -aura_env.hyp = 0 -aura_env.GetClosestHerb = function() - aura_env.minID = { - ["X"] = 0, - ["Y"] = 0, - ["D"] = 1000, - ["ID"] = 0, - } - if GetCurrentMapAreaID() ~= 1024 then SetMapByID(1024) end - local pX = GetPlayerMapPosition("player") or 0 - local pY = select(2, GetPlayerMapPosition("player")) or 0 - pX, pY = pX * 100, pY * 100 - for k, v in ipairs(aura_env.herbs) do - local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] - if cd == 0 then - local X, Y = pX - hX, pY - hY - local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) - if hyp < aura_env.minID["D"] then - aura_env.minID["X"] = hX - aura_env.minID["Y"] = hY - aura_env.minID["D"] = hyp - aura_env.minID["ID"] = k - end - end - end - return aura_env.minID["ID"] -end +aura_env.herbs = { + [1] = { + ["X"] = 39.04, + ["Y"] = 63.21, + ["CD"] = 0, + }, + [2] = { + ["X"] = 42.24, + ["Y"] = 55.42, + ["CD"] = 0, + }, + [3] = { + ["X"] = 43.3, + ["Y"] = 58.87, + ["CD"] = 0, + }, + [4] = { + ["X"] = 40.39, + ["Y"] = 59.24, + ["CD"] = 0, + }, + [5] = { + ["X"] = 42.39, + ["Y"] = 67.1, + ["CD"] = 0, + }, + [6] = { + ["X"] = 37.19, + ["Y"] = 66.98, + ["CD"] = 0, + }, + [7] = { + ["X"] = 42.21, + ["Y"] = 65.26, + ["CD"] = 0, + }, + [8] = { + ["X"] = 42.86, + ["Y"] = 52.36, + ["CD"] = 0, + }, + [9] = { + ["X"] = 44.42, + ["Y"] = 49.56, + ["CD"] = 0, + }, + [10] = { + ["X"] = 46.31, + ["Y"] = 46.84, + ["CD"] = 0, + }, + [11] = { + ["X"] = 44.32, + ["Y"] = 44.33, + ["CD"] = 0, + }, + [12] = { + ["X"] = 47.06, + ["Y"] = 48.3, + ["CD"] = 0, + }, + [13] = { + ["X"] = 46.96, + ["Y"] = 47.09, + ["CD"] = 0, + }, + [14] = { + ["X"] = 57.3, + ["Y"] = 22.65, + ["CD"] = 0, + }, + [15] = { + ["X"] = 57.13, + ["Y"] = 20.04, + ["CD"] = 0, + }, + [16] = { + ["X"] = 56.54, + ["Y"] = 21.14, + ["CD"] = 0, + }, + [17] = { + ["X"] = 55.97, + ["Y"] = 20.78, + ["CD"] = 0, + }, + [18] = { + ["X"] = 56, + ["Y"] = 20.19, + ["CD"] = 0, + }, + [19] = { + ["X"] = 55.94, + ["Y"] = 19.48, + ["CD"] = 0, + }, + [20] = { + ["X"] = 54.72, + ["Y"] = 16.63, + ["CD"] = 0, + }, + [21] = { + ["X"] = 55.63, + ["Y"] = 17.81, + ["CD"] = 0, + }, + [22] = { + ["X"] = 55.27, + ["Y"] = 18.91, + ["CD"] = 0, + }, + [23] = { + ["X"] = 55.32, + ["Y"] = 18.59, + ["CD"] = 0, + }, + [24] = { + ["X"] = 41.11, + ["Y"] = 51.73, + ["CD"] = 0, + }, + [25] = { + ["X"] = 42.6, + ["Y"] = 48.57, + ["CD"] = 0, + }, + [26] = { + ["X"] = 43.68, + ["Y"] = 48.71, + ["CD"] = 0, + }, + [27] = { + ["X"] = 39.67, + ["Y"] = 52.78, + ["CD"] = 0, + }, + [28] = { + ["X"] = 40.85, + ["Y"] = 53.98, + ["CD"] = 0, + }, + [29] = { + ["X"] = 42.82, + ["Y"] = 52.88, + ["CD"] = 0, + }, + [30] = { + ["X"] = 41.21, + ["Y"] = 56.52, + ["CD"] = 0, + }, + [31] = { + ["X"] = 39.74, + ["Y"] = 67.27, + ["CD"] = 0, + }, + [32] = { + ["X"] = 40.77, + ["Y"] = 65.23, + ["CD"] = 0, + }, + [33] = { + ["X"] = 37.33, + ["Y"] = 63.76, + ["CD"] = 0, + }, + [34] = { + ["X"] = 37.5, + ["Y"] = 62.89, + ["CD"] = 0, + }, + [35] = { + ["X"] = 37.72, + ["Y"] = 62.08, + ["CD"] = 0, + }, + [36] = { + ["X"] = 40.68, + ["Y"] = 57.62, + ["CD"] = 0, + }, + [37] = { + ["X"] = 50.04, + ["Y"] = 9, + ["CD"] = 0, + }, + [38] = { + ["X"] = 47.51, + ["Y"] = 9.64, + ["CD"] = 0, + }, + [39] = { + ["X"] = 45.07, + ["Y"] = 8.99, + ["CD"] = 0, + }, + [40] = { + ["X"] = 42.96, + ["Y"] = 9.11, + ["CD"] = 0, + }, + [41] = { + ["X"] = 43.26, + ["Y"] = 8.47, + ["CD"] = 0, + }, + [42] = { + ["X"] = 42.69, + ["Y"] = 7.59, + ["CD"] = 0, + }, + [43] = { + ["X"] = 45.72, + ["Y"] = 9.49, + ["CD"] = 0, + }, + [44] = { + ["X"] = 46.02, + ["Y"] = 8.48, + ["CD"] = 0, + }, + [45] = { + ["X"] = 44.75, + ["Y"] = 8.04, + ["CD"] = 0, + }, + [46] = { + ["X"] = 44.62, + ["Y"] = 7.22, + ["CD"] = 0, + }, + [47] = { + ["X"] = 41.25, + ["Y"] = 13, + ["CD"] = 0, + }, + [48] = { + ["X"] = 41.24, + ["Y"] = 11.49, + ["CD"] = 0, + }, + [49] = { + ["X"] = 42.07, + ["Y"] = 11.42, + ["CD"] = 0, + }, + [50] = { + ["X"] = 44.2, + ["Y"] = 10.31, + ["CD"] = 0, + }, + [51] = { + ["X"] = 43.54, + ["Y"] = 11.57, + ["CD"] = 0, + }, + [52] = { + ["X"] = 44.12, + ["Y"] = 11.56, + ["CD"] = 0, + }, + [53] = { + ["X"] = 45.67, + ["Y"] = 12.81, + ["CD"] = 0, + }, + [54] = { + ["X"] = 45.6, + ["Y"] = 11.82, + ["CD"] = 0, + }, + [55] = { + ["X"] = 48.04, + ["Y"] = 10.68, + ["CD"] = 0, + }, + [56] = { + ["X"] = 48.1, + ["Y"] = 9.57, + ["CD"] = 0, + }, + [57] = { + ["X"] = 50.88, + ["Y"] = 11.06, + ["CD"] = 0, + }, + [58] = { + ["X"] = 50.51, + ["Y"] = 10.69, + ["CD"] = 0, + }, + [59] = { + ["X"] = 50.02, + ["Y"] = 10.43, + ["CD"] = 0, + }, + [60] = { + ["X"] = 49.54, + ["Y"] = 10.43, + ["CD"] = 0, + }, + [61] = { + ["X"] = 48.84, + ["Y"] = 10.72, + ["CD"] = 0, + }, + [62] = { + ["X"] = 48.44, + ["Y"] = 10.66, + ["CD"] = 0, + }, + [63] = { + ["X"] = 47.95, + ["Y"] = 11.28, + ["CD"] = 0, + }, + [64] = { + ["X"] = 46.49, + ["Y"] = 11.47, + ["CD"] = 0, + }, + [65] = { + ["X"] = 47.16, + ["Y"] = 11.19, + ["CD"] = 0, + }, + [66] = { + ["X"] = 56.04, + ["Y"] = 63.04, + ["CD"] = 0, + }, + [67] = { + ["X"] = 56.46, + ["Y"] = 60.72, + ["CD"] = 0, + }, + [68] = { + ["X"] = 57.51, + ["Y"] = 59.57, + ["CD"] = 0, + }, + [69] = { + ["X"] = 57.31, + ["Y"] = 58.61, + ["CD"] = 0, + }, + [70] = { + ["X"] = 56.29, + ["Y"] = 56.16, + ["CD"] = 0, + }, + [71] = { + ["X"] = 56.93, + ["Y"] = 56.51, + ["CD"] = 0, + }, + [72] = { + ["X"] = 57.33, + ["Y"] = 56.08, + ["CD"] = 0, + }, + [73] = { + ["X"] = 57.78, + ["Y"] = 56.85, + ["CD"] = 0, + }, + [74] = { + ["X"] = 57.95, + ["Y"] = 54.56, + ["CD"] = 0, + }, + [75] = { + ["X"] = 57.54, + ["Y"] = 53.68, + ["CD"] = 0, + }, + [76] = { + ["X"] = 57.15, + ["Y"] = 53.7, + ["CD"] = 0, + }, + [77] = { + ["X"] = 55.34, + ["Y"] = 53.18, + ["CD"] = 0, + }, + [78] = { + ["X"] = 55.2, + ["Y"] = 53.41, + ["CD"] = 0, + }, + [79] = { + ["X"] = 56.17, + ["Y"] = 54.2, + ["CD"] = 0, + }, + [80] = { + ["X"] = 55.99, + ["Y"] = 55.43, + ["CD"] = 0, + }, + [81] = { + ["X"] = 55.9, + ["Y"] = 56.79, + ["CD"] = 0, + }, + [82] = { + ["X"] = 57.56, + ["Y"] = 57.6, + ["CD"] = 0, + }, + [83] = { + ["X"] = 55.89, + ["Y"] = 59.48, + ["CD"] = 0, + }, + [84] = { + ["X"] = 55.11, + ["Y"] = 61.2, + ["CD"] = 0, + }, + [85] = { + ["X"] = 39, + ["Y"] = 40.8, + ["CD"] = 0, + }, + [86] = { + ["X"] = 39.15, + ["Y"] = 39.51, + ["CD"] = 0, + }, + [87] = { + ["X"] = 40.15, + ["Y"] = 36.93, + ["CD"] = 0, + }, + [88] = { + ["X"] = 40.41, + ["Y"] = 37.67, + ["CD"] = 0, + }, + [89] = { + ["X"] = 40.55, + ["Y"] = 36.19, + ["CD"] = 0, + }, + [90] = { + ["X"] = 41.38, + ["Y"] = 36.45, + ["CD"] = 0, + }, + [91] = { + ["X"] = 41.54, + ["Y"] = 35.29, + ["CD"] = 0, + }, + [92] = { + ["X"] = 41.97, + ["Y"] = 33.67, + ["CD"] = 0, + }, + [93] = { + ["X"] = 41.46, + ["Y"] = 31.24, + ["CD"] = 0, + }, + [94] = { + ["X"] = 41.4, + ["Y"] = 28.92, + ["CD"] = 0, + }, + [95] = { + ["X"] = 40.79, + ["Y"] = 29.51, + ["CD"] = 0, + }, + [96] = { + ["X"] = 42.57, + ["Y"] = 30.29, + ["CD"] = 0, + }, + [97] = { + ["X"] = 46.38, + ["Y"] = 32.35, + ["CD"] = 0, + }, + [98] = { + ["X"] = 45.3, + ["Y"] = 32.49, + ["CD"] = 0, + }, + [99] = { + ["X"] = 44.18, + ["Y"] = 33.11, + ["CD"] = 0, + }, + [100] = { + ["X"] = 44.31, + ["Y"] = 32.62, + ["CD"] = 0, + }, + [101] = { + ["X"] = 44.76, + ["Y"] = 30.4, + ["CD"] = 0, + }, + [102] = { + ["X"] = 37.07, + ["Y"] = 19.85, + ["CD"] = 0, + }, + [103] = { + ["X"] = 36.06, + ["Y"] = 20.92, + ["CD"] = 0, + }, + [104] = { + ["X"] = 32.68, + ["Y"] = 23.7, + ["CD"] = 0, + }, + [105] = { + ["X"] = 33.36, + ["Y"] = 21.36, + ["CD"] = 0, + }, + [106] = { + ["X"] = 34.62, + ["Y"] = 22.6, + ["CD"] = 0, + }, + [107] = { + ["X"] = 35.26, + ["Y"] = 23.87, + ["CD"] = 0, + }, + [108] = { + ["X"] = 36.27, + ["Y"] = 23.14, + ["CD"] = 0, + }, + [109] = { + ["X"] = 34.74, + ["Y"] = 23.43, + ["CD"] = 0, + }, + [110] = { + ["X"] = 34.05, + ["Y"] = 24.22, + ["CD"] = 0, + }, + [111] = { + ["X"] = 34.18, + ["Y"] = 27.2, + ["CD"] = 0, + }, + [112] = { + ["X"] = 34.23, + ["Y"] = 25.22, + ["CD"] = 0, + }, + [113] = { + ["X"] = 31.78, + ["Y"] = 35.09, + ["CD"] = 0, + }, + [114] = { + ["X"] = 32.12, + ["Y"] = 34.17, + ["CD"] = 0, + }, + [115] = { + ["X"] = 33.13, + ["Y"] = 33.36, + ["CD"] = 0, + }, + [116] = { + ["X"] = 32.78, + ["Y"] = 32.58, + ["CD"] = 0, + }, + [117] = { + ["X"] = 31.77, + ["Y"] = 31.79, + ["CD"] = 0, + }, + [118] = { + ["X"] = 30.37, + ["Y"] = 28.05, + ["CD"] = 0, + }, + [119] = { + ["X"] = 30.53, + ["Y"] = 29.81, + ["CD"] = 0, + }, + [120] = { + ["X"] = 30.8, + ["Y"] = 30.32, + ["CD"] = 0, + }, + [121] = { + ["X"] = 28.47, + ["Y"] = 40.12, + ["CD"] = 0, + }, + [122] = { + ["X"] = 27.69, + ["Y"] = 41.13, + ["CD"] = 0, + }, + [123] = { + ["X"] = 28.37, + ["Y"] = 41.03, + ["CD"] = 0, + }, + [124] = { + ["X"] = 28.86, + ["Y"] = 42.47, + ["CD"] = 0, + }, + [125] = { + ["X"] = 29.95, + ["Y"] = 41.71, + ["CD"] = 0, + }, + [126] = { + ["X"] = 31.73, + ["Y"] = 38.3, + ["CD"] = 0, + }, + [127] = { + ["X"] = 30.38, + ["Y"] = 39.04, + ["CD"] = 0, + }, + [128] = { + ["X"] = 31.37, + ["Y"] = 36.91, + ["CD"] = 0, + }, + [129] = { + ["X"] = 31.64, + ["Y"] = 35.8, + ["CD"] = 0, + }, + [130] = { + ["X"] = 30.36, + ["Y"] = 34.88, + ["CD"] = 0, + }, + [131] = { + ["X"] = 31.05, + ["Y"] = 33.51, + ["CD"] = 0, + }, + [132] = { + ["X"] = 30.53, + ["Y"] = 33.11, + ["CD"] = 0, + }, + [133] = { + ["X"] = 31.38, + ["Y"] = 30.83, + ["CD"] = 0, + }, + [134] = { + ["X"] = 44.68, + ["Y"] = 54.55, + ["CD"] = 0, + }, + [135] = { + ["X"] = 44.08, + ["Y"] = 54.55, + ["CD"] = 0, + }, + [136] = { + ["X"] = 43.58, + ["Y"] = 54.82, + ["CD"] = 0, + }, + [137] = { + ["X"] = 45.12, + ["Y"] = 50.11, + ["CD"] = 0, + }, + [138] = { + ["X"] = 43.58, + ["Y"] = 45.93, + ["CD"] = 0, + }, + [139] = { + ["X"] = 42.63, + ["Y"] = 45.65, + ["CD"] = 0, + }, + [140] = { + ["X"] = 42.96, + ["Y"] = 46.27, + ["CD"] = 0, + }, + [141] = { + ["X"] = 42.09, + ["Y"] = 46.82, + ["CD"] = 0, + }, + [142] = { + ["X"] = 39.3, + ["Y"] = 46.88, + ["CD"] = 0, + }, + [143] = { + ["X"] = 40.18, + ["Y"] = 47.01, + ["CD"] = 0, + }, + [144] = { + ["X"] = 40.81, + ["Y"] = 46.97, + ["CD"] = 0, + }, + [145] = { + ["X"] = 41.37, + ["Y"] = 48.56, + ["CD"] = 0, + }, + [146] = { + ["X"] = 40.45, + ["Y"] = 48.42, + ["CD"] = 0, + }, + [147] = { + ["X"] = 38.56, + ["Y"] = 50.23, + ["CD"] = 0, + }, + [148] = { + ["X"] = 38.26, + ["Y"] = 49.28, + ["CD"] = 0, + }, + [149] = { + ["X"] = 39.77, + ["Y"] = 49.03, + ["CD"] = 0, + }, + [150] = { + ["X"] = 39.89, + ["Y"] = 49.73, + ["CD"] = 0, + }, + [151] = { + ["X"] = 39.97, + ["Y"] = 50.65, + ["CD"] = 0, + }, + [152] = { + ["X"] = 40.15, + ["Y"] = 51.03, + ["CD"] = 0, + }, + [153] = { + ["X"] = 58.81, + ["Y"] = 62.31, + ["CD"] = 0, + }, + [154] = { + ["X"] = 55.76, + ["Y"] = 65.74, + ["CD"] = 0, + }, + [155] = { + ["X"] = 52.04, + ["Y"] = 58.38, + ["CD"] = 0, + }, + [156] = { + ["X"] = 50.81, + ["Y"] = 67.32, + ["CD"] = 0, + }, + [157] = { + ["X"] = 43.38, + ["Y"] = 66.19, + ["CD"] = 0, + }, + [158] = { + ["X"] = 24.98, + ["Y"] = 59.43, + ["CD"] = 0, + }, + [159] = { + ["X"] = 26.05, + ["Y"] = 63.62, + ["CD"] = 0, + }, + [160] = { + ["X"] = 28.67, + ["Y"] = 55.49, + ["CD"] = 0, + }, + [161] = { + ["X"] = 26.86, + ["Y"] = 41.18, + ["CD"] = 0, + }, + [162] = { + ["X"] = 25.89, + ["Y"] = 44.55, + ["CD"] = 0, + }, + [163] = { + ["X"] = 24.23, + ["Y"] = 43.43, + ["CD"] = 0, + }, + [164] = { + ["X"] = 26.35, + ["Y"] = 39.24, + ["CD"] = 0, + }, + [165] = { + ["X"] = 28.83, + ["Y"] = 35.34, + ["CD"] = 0, + }, + [166] = { + ["X"] = 27.93, + ["Y"] = 30.52, + ["CD"] = 0, + }, + [167] = { + ["X"] = 28.73, + ["Y"] = 28.61, + ["CD"] = 0, + }, + [168] = { + ["X"] = 31.88, + ["Y"] = 26.11, + ["CD"] = 0, + }, + [169] = { + ["X"] = 37.52, + ["Y"] = 15.31, + ["CD"] = 0, + }, + [170] = { + ["X"] = 44.79, + ["Y"] = 12.36, + ["CD"] = 0, + }, + [171] = { + ["X"] = 58.06, + ["Y"] = 22.18, + ["CD"] = 0, + }, + [172] = { + ["X"] = 57.64, + ["Y"] = 19.03, + ["CD"] = 0, + }, + [173] = { + ["X"] = 54.81, + ["Y"] = 16.28, + ["CD"] = 0, + }, + [174] = { + ["X"] = 53.1, + ["Y"] = 13.37, + ["CD"] = 0, + }, + [175] = { + ["X"] = 49.63, + ["Y"] = 13.87, + ["CD"] = 0, + }, + [176] = { + ["X"] = 49.23, + ["Y"] = 8.72, + ["CD"] = 0, + }, + [177] = { + ["X"] = 47.72, + ["Y"] = 6.15, + ["CD"] = 0, + }, + [178] = { + ["X"] = 44.93, + ["Y"] = 7.4, + ["CD"] = 0, + }, + [179] = { + ["X"] = 42.09, + ["Y"] = 27.58, + ["CD"] = 0, + }, + [180] = { + ["X"] = 46.45, + ["Y"] = 26.28, + ["CD"] = 0, + }, + [181] = { + ["X"] = 47.57, + ["Y"] = 24.96, + ["CD"] = 0, + }, + [182] = { + ["X"] = 48.31, + ["Y"] = 29.71, + ["CD"] = 0, + }, + [183] = { + ["X"] = 35.86, + ["Y"] = 38.62, + ["CD"] = 0, + }, + [184] = { + ["X"] = 40.33, + ["Y"] = 33.71, + ["CD"] = 0, + }, + [185] = { + ["X"] = 36.87, + ["Y"] = 35.15, + ["CD"] = 0, + }, + [186] = { + ["X"] = 37.26, + ["Y"] = 33.85, + ["CD"] = 0, + }, + [187] = { + ["X"] = 42.47, + ["Y"] = 51.44, + ["CD"] = 0, + }, + [188] = { + ["X"] = 42.21, + ["Y"] = 54.16, + ["CD"] = 0, + }, + [189] = { + ["X"] = 44.95, + ["Y"] = 55.74, + ["CD"] = 0, + }, + [190] = { + ["X"] = 52, + ["Y"] = 32.57, + ["CD"] = 0, + }, + [191] = { + ["X"] = 52.49, + ["Y"] = 34.19, + ["CD"] = 0, + }, + [192] = { + ["X"] = 52.71, + ["Y"] = 39.16, + ["CD"] = 0, + }, + [193] = { + ["X"] = 54.4, + ["Y"] = 50.27, + ["CD"] = 0, + }, + [194] = { + ["X"] = 49.74, + ["Y"] = 42.1, + ["CD"] = 0, + }, + [195] = { + ["X"] = 47.22, + ["Y"] = 51.9, + ["CD"] = 0, + }, + [196] = { + ["X"] = 47.87, + ["Y"] = 54.97, + ["CD"] = 0, + }, + [197] = { + ["X"] = 43.42, + ["Y"] = 72.85, + ["CD"] = 0, + }, + [198] = { + ["X"] = 48.48, + ["Y"] = 54.81, + ["CD"] = 0, + }, + [199] = { + ["X"] = 38.62, + ["Y"] = 61.09, + ["CD"] = 0, + }, + [200] = { + ["X"] = 42.5, + ["Y"] = 61.79, + ["CD"] = 0, + }, +} +aura_env.cooldown = 600 +aura_env.wipeDistance = 50 +aura_env.angle = 0 +aura_env.hyp = 0 +aura_env.GetClosestHerb = function() + aura_env.minID = { + ["X"] = 0, + ["Y"] = 0, + ["D"] = 1000, + ["ID"] = 0, + } + if GetCurrentMapAreaID() ~= 1024 then SetMapByID(1024) end + local pX = GetPlayerMapPosition("player") or 0 + local pY = select(2, GetPlayerMapPosition("player")) or 0 + pX, pY = pX * 100, pY * 100 + for k, v in ipairs(aura_env.herbs) do + local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] + if cd == 0 then + local X, Y = pX - hX, pY - hY + local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) + if hyp < aura_env.minID["D"] then + aura_env.minID["X"] = hX + aura_env.minID["Y"] = hY + aura_env.minID["D"] = hyp + aura_env.minID["ID"] = k + end + end + end + return aura_env.minID["ID"] +end diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Icecap And Silversage.lua b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Herbalism/Icecap And Silversage.lua similarity index 92% rename from Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Icecap And Silversage.lua rename to WeakAuras/Projects/Herb Sniffer/Herb Arrays/Herbalism/Icecap And Silversage.lua index 0fc25b6..e71e630 100644 --- a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Icecap And Silversage.lua +++ b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Herbalism/Icecap And Silversage.lua @@ -1,716 +1,716 @@ -aura_env.herbs = { - [1] = { - ["X"] = 59.16, - ["Y"] = 84.77, - ["CD"] = 0, - }, - [2] = { - ["X"] = 62.31, - ["Y"] = 83, - ["CD"] = 0, - }, - [3] = { - ["X"] = 57.11, - ["Y"] = 82.01, - ["CD"] = 0, - }, - [4] = { - ["X"] = 64.06, - ["Y"] = 78.62, - ["CD"] = 0, - }, - [5] = { - ["X"] = 61.3, - ["Y"] = 77.48, - ["CD"] = 0, - }, - [6] = { - ["X"] = 62.98, - ["Y"] = 75.01, - ["CD"] = 0, - }, - [7] = { - ["X"] = 60.57, - ["Y"] = 72.97, - ["CD"] = 0, - }, - [8] = { - ["X"] = 57.89, - ["Y"] = 76.61, - ["CD"] = 0, - }, - [9] = { - ["X"] = 58.81, - ["Y"] = 71.72, - ["CD"] = 0, - }, - [10] = { - ["X"] = 61.9, - ["Y"] = 70.8, - ["CD"] = 0, - }, - [11] = { - ["X"] = 55.55, - ["Y"] = 66.93, - ["CD"] = 0, - }, - [12] = { - ["X"] = 57.47, - ["Y"] = 67.97, - ["CD"] = 0, - }, - [13] = { - ["X"] = 64.62, - ["Y"] = 67.64, - ["CD"] = 0, - }, - [14] = { - ["X"] = 58.61, - ["Y"] = 64.35, - ["CD"] = 0, - }, - [15] = { - ["X"] = 60.58, - ["Y"] = 63.25, - ["CD"] = 0, - }, - [16] = { - ["X"] = 66.46, - ["Y"] = 63.37, - ["CD"] = 0, - }, - [17] = { - ["X"] = 54.22, - ["Y"] = 59.72, - ["CD"] = 0, - }, - [18] = { - ["X"] = 50.02, - ["Y"] = 59.7, - ["CD"] = 0, - }, - [19] = { - ["X"] = 55.15, - ["Y"] = 58.99, - ["CD"] = 0, - }, - [20] = { - ["X"] = 58.3, - ["Y"] = 57.27, - ["CD"] = 0, - }, - [21] = { - ["X"] = 66.48, - ["Y"] = 58.7, - ["CD"] = 0, - }, - [22] = { - ["X"] = 65.73, - ["Y"] = 55.86, - ["CD"] = 0, - }, - [23] = { - ["X"] = 67.08, - ["Y"] = 55.5, - ["CD"] = 0, - }, - [24] = { - ["X"] = 56.21, - ["Y"] = 54.41, - ["CD"] = 0, - }, - [25] = { - ["X"] = 63.85, - ["Y"] = 54.34, - ["CD"] = 0, - }, - [26] = { - ["X"] = 57.63, - ["Y"] = 53.91, - ["CD"] = 0, - }, - [27] = { - ["X"] = 62.95, - ["Y"] = 52.24, - ["CD"] = 0, - }, - [28] = { - ["X"] = 54.26, - ["Y"] = 51.46, - ["CD"] = 0, - }, - [29] = { - ["X"] = 53.42, - ["Y"] = 52.49, - ["CD"] = 0, - }, - [30] = { - ["X"] = 51.05, - ["Y"] = 47.74, - ["CD"] = 0, - }, - [31] = { - ["X"] = 62.14, - ["Y"] = 46, - ["CD"] = 0, - }, - [32] = { - ["X"] = 57.41, - ["Y"] = 44.12, - ["CD"] = 0, - }, - [33] = { - ["X"] = 67.38, - ["Y"] = 43.91, - ["CD"] = 0, - }, - [34] = { - ["X"] = 64.77, - ["Y"] = 44.54, - ["CD"] = 0, - }, - [35] = { - ["X"] = 63.95, - ["Y"] = 38.93, - ["CD"] = 0, - }, - [36] = { - ["X"] = 56.38, - ["Y"] = 40.05, - ["CD"] = 0, - }, - [37] = { - ["X"] = 53.33, - ["Y"] = 40.12, - ["CD"] = 0, - }, - [38] = { - ["X"] = 54.33, - ["Y"] = 39.28, - ["CD"] = 0, - }, - [39] = { - ["X"] = 58.25, - ["Y"] = 36.59, - ["CD"] = 0, - }, - [40] = { - ["X"] = 66.39, - ["Y"] = 31.62, - ["CD"] = 0, - }, - [41] = { - ["X"] = 65.34, - ["Y"] = 33.85, - ["CD"] = 0, - }, - [42] = { - ["X"] = 56.84, - ["Y"] = 35.19, - ["CD"] = 0, - }, - [43] = { - ["X"] = 53.46, - ["Y"] = 28.57, - ["CD"] = 0, - }, - [44] = { - ["X"] = 61.98, - ["Y"] = 31.58, - ["CD"] = 0, - }, - [45] = { - ["X"] = 61.24, - ["Y"] = 31.93, - ["CD"] = 0, - }, - [46] = { - ["X"] = 57.11, - ["Y"] = 33.25, - ["CD"] = 0, - }, - [47] = { - ["X"] = 47.75, - ["Y"] = 31.28, - ["CD"] = 0, - }, - [48] = { - ["X"] = 53.36, - ["Y"] = 33.23, - ["CD"] = 0, - }, - [49] = { - ["X"] = 58, - ["Y"] = 25.44, - ["CD"] = 0, - }, - [50] = { - ["X"] = 56.97, - ["Y"] = 26.83, - ["CD"] = 0, - }, - [51] = { - ["X"] = 49.79, - ["Y"] = 25.15, - ["CD"] = 0, - }, - [52] = { - ["X"] = 56.02, - ["Y"] = 22.75, - ["CD"] = 0, - }, - [53] = { - ["X"] = 46.42, - ["Y"] = 24.46, - ["CD"] = 0, - }, - [54] = { - ["X"] = 50.08, - ["Y"] = 22.67, - ["CD"] = 0, - }, - [55] = { - ["X"] = 46.7, - ["Y"] = 18.24, - ["CD"] = 0, - }, - [56] = { - ["X"] = 48.65, - ["Y"] = 17.22, - ["CD"] = 0, - }, - [57] = { - ["X"] = 49.35, - ["Y"] = 18.76, - ["CD"] = 0, - }, - [58] = { - ["X"] = 52.3, - ["Y"] = 20.68, - ["CD"] = 0, - }, - [59] = { - ["X"] = 45.21, - ["Y"] = 14.81, - ["CD"] = 0, - }, - [60] = { - ["X"] = 45.87, - ["Y"] = 20.86, - ["CD"] = 0, - }, - [61] = { - ["X"] = 47.49, - ["Y"] = 50.39, - ["CD"] = 0, - }, - [62] = { - ["X"] = 48.23, - ["Y"] = 53.43, - ["CD"] = 0, - }, - [63] = { - ["X"] = 47.36, - ["Y"] = 58.17, - ["CD"] = 0, - }, - [64] = { - ["X"] = 48.56, - ["Y"] = 57.74, - ["CD"] = 0, - }, - [65] = { - ["X"] = 45.22, - ["Y"] = 57.7, - ["CD"] = 0, - }, - [66] = { - ["X"] = 45.19, - ["Y"] = 59.5, - ["CD"] = 0, - }, - [67] = { - ["X"] = 42.43, - ["Y"] = 49.82, - ["CD"] = 0, - }, - [68] = { - ["X"] = 40.35, - ["Y"] = 49.45, - ["CD"] = 0, - }, - [69] = { - ["X"] = 40.46, - ["Y"] = 54.28, - ["CD"] = 0, - }, - [70] = { - ["X"] = 39.05, - ["Y"] = 55.74, - ["CD"] = 0, - }, - [71] = { - ["X"] = 37.6, - ["Y"] = 55.77, - ["CD"] = 0, - }, - [72] = { - ["X"] = 34.89, - ["Y"] = 57.33, - ["CD"] = 0, - }, - [73] = { - ["X"] = 34.59, - ["Y"] = 50.15, - ["CD"] = 0, - }, - [74] = { - ["X"] = 33.26, - ["Y"] = 48.43, - ["CD"] = 0, - }, - [75] = { - ["X"] = 32.77, - ["Y"] = 51.29, - ["CD"] = 0, - }, - [76] = { - ["X"] = 31.15, - ["Y"] = 57.24, - ["CD"] = 0, - }, - [77] = { - ["X"] = 30.3, - ["Y"] = 54.04, - ["CD"] = 0, - }, - [78] = { - ["X"] = 28.92, - ["Y"] = 52.76, - ["CD"] = 0, - }, - [79] = { - ["X"] = 28.32, - ["Y"] = 55.97, - ["CD"] = 0, - }, - [80] = { - ["X"] = 26.04, - ["Y"] = 49.17, - ["CD"] = 0, - }, - [81] = { - ["X"] = 24.02, - ["Y"] = 49.75, - ["CD"] = 0, - }, - [82] = { - ["X"] = 25.24, - ["Y"] = 51.71, - ["CD"] = 0, - }, - [83] = { - ["X"] = 24.44, - ["Y"] = 50.98, - ["CD"] = 0, - }, - [84] = { - ["X"] = 24.27, - ["Y"] = 56.95, - ["CD"] = 0, - }, - [85] = { - ["X"] = 66.76, - ["Y"] = 84.03, - ["CD"] = 0, - }, - [86] = { - ["X"] = 66.36, - ["Y"] = 80.75, - ["CD"] = 0, - }, - [87] = { - ["X"] = 62.24, - ["Y"] = 80.15, - ["CD"] = 0, - }, - [88] = { - ["X"] = 55.96, - ["Y"] = 78.8, - ["CD"] = 0, - }, - [89] = { - ["X"] = 56.02, - ["Y"] = 76.95, - ["CD"] = 0, - }, - [90] = { - ["X"] = 64.96, - ["Y"] = 72.59, - ["CD"] = 0, - }, - [91] = { - ["X"] = 65.44, - ["Y"] = 70.65, - ["CD"] = 0, - }, - [92] = { - ["X"] = 68.36, - ["Y"] = 69, - ["CD"] = 0, - }, - [93] = { - ["X"] = 52.57, - ["Y"] = 67.93, - ["CD"] = 0, - }, - [94] = { - ["X"] = 53.37, - ["Y"] = 66.5, - ["CD"] = 0, - }, - [95] = { - ["X"] = 61.09, - ["Y"] = 66.97, - ["CD"] = 0, - }, - [96] = { - ["X"] = 67.45, - ["Y"] = 66.84, - ["CD"] = 0, - }, - [97] = { - ["X"] = 68.19, - ["Y"] = 64.02, - ["CD"] = 0, - }, - [98] = { - ["X"] = 47.6, - ["Y"] = 63.37, - ["CD"] = 0, - }, - [99] = { - ["X"] = 67.42, - ["Y"] = 57.23, - ["CD"] = 0, - }, - [100] = { - ["X"] = 67.19, - ["Y"] = 51.85, - ["CD"] = 0, - }, - [101] = { - ["X"] = 63.49, - ["Y"] = 50.05, - ["CD"] = 0, - }, - [102] = { - ["X"] = 58.87, - ["Y"] = 45.42, - ["CD"] = 0, - }, - [103] = { - ["X"] = 53.68, - ["Y"] = 45.06, - ["CD"] = 0, - }, - [104] = { - ["X"] = 69.19, - ["Y"] = 44.89, - ["CD"] = 0, - }, - [105] = { - ["X"] = 59.6, - ["Y"] = 42, - ["CD"] = 0, - }, - [106] = { - ["X"] = 67.82, - ["Y"] = 39.48, - ["CD"] = 0, - }, - [107] = { - ["X"] = 59.84, - ["Y"] = 37.64, - ["CD"] = 0, - }, - [108] = { - ["X"] = 67.43, - ["Y"] = 35.4, - ["CD"] = 0, - }, - [109] = { - ["X"] = 66.7, - ["Y"] = 29.13, - ["CD"] = 0, - }, - [110] = { - ["X"] = 60.88, - ["Y"] = 28.01, - ["CD"] = 0, - }, - [111] = { - ["X"] = 60.16, - ["Y"] = 21.19, - ["CD"] = 0, - }, - [112] = { - ["X"] = 53.95, - ["Y"] = 19.05, - ["CD"] = 0, - }, - [113] = { - ["X"] = 52.44, - ["Y"] = 18.27, - ["CD"] = 0, - }, - [114] = { - ["X"] = 48.51, - ["Y"] = 14.34, - ["CD"] = 0, - }, - [115] = { - ["X"] = 44.13, - ["Y"] = 14.69, - ["CD"] = 0, - }, - [116] = { - ["X"] = 44.53, - ["Y"] = 21.08, - ["CD"] = 0, - }, - [117] = { - ["X"] = 45.31, - ["Y"] = 26.71, - ["CD"] = 0, - }, - [118] = { - ["X"] = 46.16, - ["Y"] = 33.23, - ["CD"] = 0, - }, - [119] = { - ["X"] = 48.2, - ["Y"] = 45.28, - ["CD"] = 0, - }, - [120] = { - ["X"] = 42.52, - ["Y"] = 56.26, - ["CD"] = 0, - }, - [121] = { - ["X"] = 42.18, - ["Y"] = 53.86, - ["CD"] = 0, - }, - [122] = { - ["X"] = 42.49, - ["Y"] = 45.67, - ["CD"] = 0, - }, - [123] = { - ["X"] = 40.75, - ["Y"] = 46.4, - ["CD"] = 0, - }, - [124] = { - ["X"] = 40.5, - ["Y"] = 58, - ["CD"] = 0, - }, - [125] = { - ["X"] = 39.56, - ["Y"] = 44.86, - ["CD"] = 0, - }, - [126] = { - ["X"] = 37.41, - ["Y"] = 47.1, - ["CD"] = 0, - }, - [127] = { - ["X"] = 37.05, - ["Y"] = 58.92, - ["CD"] = 0, - }, - [128] = { - ["X"] = 35.56, - ["Y"] = 47.08, - ["CD"] = 0, - }, - [129] = { - ["X"] = 34.11, - ["Y"] = 59.82, - ["CD"] = 0, - }, - [130] = { - ["X"] = 31.96, - ["Y"] = 59.46, - ["CD"] = 0, - }, - [131] = { - ["X"] = 31.19, - ["Y"] = 47.17, - ["CD"] = 0, - }, - [132] = { - ["X"] = 27.81, - ["Y"] = 58.83, - ["CD"] = 0, - }, - [133] = { - ["X"] = 27.7, - ["Y"] = 47.35, - ["CD"] = 0, - }, - [134] = { - ["X"] = 26.52, - ["Y"] = 47.47, - ["CD"] = 0, - }, - [135] = { - ["X"] = 24.62, - ["Y"] = 62.82, - ["CD"] = 0, - }, - [136] = { - ["X"] = 21.76, - ["Y"] = 62.47, - ["CD"] = 0, - }, - [137] = { - ["X"] = 22.41, - ["Y"] = 58.99, - ["CD"] = 0, - }, -} -aura_env.cooldown = 600 -aura_env.wipeDistance = 50 -aura_env.angle = 0 -aura_env.hyp = 0 -aura_env.GetClosestHerb = function() - aura_env.minID = { - ["X"] = 0, - ["Y"] = 0, - ["D"] = 1000, - ["ID"] = 0, - } - local pX = GetPlayerMapPosition("player") or 0 - local pY = select(2, GetPlayerMapPosition("player")) or 0 - pX, pY = pX * 100, pY * 100 - for k, v in ipairs(aura_env.herbs) do - local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] - if cd == 0 then - local X, Y = pX - hX, pY - hY - local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) - if hyp < aura_env.minID["D"] then - aura_env.minID["X"] = hX - aura_env.minID["Y"] = hY - aura_env.minID["D"] = hyp - aura_env.minID["ID"] = k - end - end - end - return aura_env.minID["ID"] -end +aura_env.herbs = { + [1] = { + ["X"] = 59.16, + ["Y"] = 84.77, + ["CD"] = 0, + }, + [2] = { + ["X"] = 62.31, + ["Y"] = 83, + ["CD"] = 0, + }, + [3] = { + ["X"] = 57.11, + ["Y"] = 82.01, + ["CD"] = 0, + }, + [4] = { + ["X"] = 64.06, + ["Y"] = 78.62, + ["CD"] = 0, + }, + [5] = { + ["X"] = 61.3, + ["Y"] = 77.48, + ["CD"] = 0, + }, + [6] = { + ["X"] = 62.98, + ["Y"] = 75.01, + ["CD"] = 0, + }, + [7] = { + ["X"] = 60.57, + ["Y"] = 72.97, + ["CD"] = 0, + }, + [8] = { + ["X"] = 57.89, + ["Y"] = 76.61, + ["CD"] = 0, + }, + [9] = { + ["X"] = 58.81, + ["Y"] = 71.72, + ["CD"] = 0, + }, + [10] = { + ["X"] = 61.9, + ["Y"] = 70.8, + ["CD"] = 0, + }, + [11] = { + ["X"] = 55.55, + ["Y"] = 66.93, + ["CD"] = 0, + }, + [12] = { + ["X"] = 57.47, + ["Y"] = 67.97, + ["CD"] = 0, + }, + [13] = { + ["X"] = 64.62, + ["Y"] = 67.64, + ["CD"] = 0, + }, + [14] = { + ["X"] = 58.61, + ["Y"] = 64.35, + ["CD"] = 0, + }, + [15] = { + ["X"] = 60.58, + ["Y"] = 63.25, + ["CD"] = 0, + }, + [16] = { + ["X"] = 66.46, + ["Y"] = 63.37, + ["CD"] = 0, + }, + [17] = { + ["X"] = 54.22, + ["Y"] = 59.72, + ["CD"] = 0, + }, + [18] = { + ["X"] = 50.02, + ["Y"] = 59.7, + ["CD"] = 0, + }, + [19] = { + ["X"] = 55.15, + ["Y"] = 58.99, + ["CD"] = 0, + }, + [20] = { + ["X"] = 58.3, + ["Y"] = 57.27, + ["CD"] = 0, + }, + [21] = { + ["X"] = 66.48, + ["Y"] = 58.7, + ["CD"] = 0, + }, + [22] = { + ["X"] = 65.73, + ["Y"] = 55.86, + ["CD"] = 0, + }, + [23] = { + ["X"] = 67.08, + ["Y"] = 55.5, + ["CD"] = 0, + }, + [24] = { + ["X"] = 56.21, + ["Y"] = 54.41, + ["CD"] = 0, + }, + [25] = { + ["X"] = 63.85, + ["Y"] = 54.34, + ["CD"] = 0, + }, + [26] = { + ["X"] = 57.63, + ["Y"] = 53.91, + ["CD"] = 0, + }, + [27] = { + ["X"] = 62.95, + ["Y"] = 52.24, + ["CD"] = 0, + }, + [28] = { + ["X"] = 54.26, + ["Y"] = 51.46, + ["CD"] = 0, + }, + [29] = { + ["X"] = 53.42, + ["Y"] = 52.49, + ["CD"] = 0, + }, + [30] = { + ["X"] = 51.05, + ["Y"] = 47.74, + ["CD"] = 0, + }, + [31] = { + ["X"] = 62.14, + ["Y"] = 46, + ["CD"] = 0, + }, + [32] = { + ["X"] = 57.41, + ["Y"] = 44.12, + ["CD"] = 0, + }, + [33] = { + ["X"] = 67.38, + ["Y"] = 43.91, + ["CD"] = 0, + }, + [34] = { + ["X"] = 64.77, + ["Y"] = 44.54, + ["CD"] = 0, + }, + [35] = { + ["X"] = 63.95, + ["Y"] = 38.93, + ["CD"] = 0, + }, + [36] = { + ["X"] = 56.38, + ["Y"] = 40.05, + ["CD"] = 0, + }, + [37] = { + ["X"] = 53.33, + ["Y"] = 40.12, + ["CD"] = 0, + }, + [38] = { + ["X"] = 54.33, + ["Y"] = 39.28, + ["CD"] = 0, + }, + [39] = { + ["X"] = 58.25, + ["Y"] = 36.59, + ["CD"] = 0, + }, + [40] = { + ["X"] = 66.39, + ["Y"] = 31.62, + ["CD"] = 0, + }, + [41] = { + ["X"] = 65.34, + ["Y"] = 33.85, + ["CD"] = 0, + }, + [42] = { + ["X"] = 56.84, + ["Y"] = 35.19, + ["CD"] = 0, + }, + [43] = { + ["X"] = 53.46, + ["Y"] = 28.57, + ["CD"] = 0, + }, + [44] = { + ["X"] = 61.98, + ["Y"] = 31.58, + ["CD"] = 0, + }, + [45] = { + ["X"] = 61.24, + ["Y"] = 31.93, + ["CD"] = 0, + }, + [46] = { + ["X"] = 57.11, + ["Y"] = 33.25, + ["CD"] = 0, + }, + [47] = { + ["X"] = 47.75, + ["Y"] = 31.28, + ["CD"] = 0, + }, + [48] = { + ["X"] = 53.36, + ["Y"] = 33.23, + ["CD"] = 0, + }, + [49] = { + ["X"] = 58, + ["Y"] = 25.44, + ["CD"] = 0, + }, + [50] = { + ["X"] = 56.97, + ["Y"] = 26.83, + ["CD"] = 0, + }, + [51] = { + ["X"] = 49.79, + ["Y"] = 25.15, + ["CD"] = 0, + }, + [52] = { + ["X"] = 56.02, + ["Y"] = 22.75, + ["CD"] = 0, + }, + [53] = { + ["X"] = 46.42, + ["Y"] = 24.46, + ["CD"] = 0, + }, + [54] = { + ["X"] = 50.08, + ["Y"] = 22.67, + ["CD"] = 0, + }, + [55] = { + ["X"] = 46.7, + ["Y"] = 18.24, + ["CD"] = 0, + }, + [56] = { + ["X"] = 48.65, + ["Y"] = 17.22, + ["CD"] = 0, + }, + [57] = { + ["X"] = 49.35, + ["Y"] = 18.76, + ["CD"] = 0, + }, + [58] = { + ["X"] = 52.3, + ["Y"] = 20.68, + ["CD"] = 0, + }, + [59] = { + ["X"] = 45.21, + ["Y"] = 14.81, + ["CD"] = 0, + }, + [60] = { + ["X"] = 45.87, + ["Y"] = 20.86, + ["CD"] = 0, + }, + [61] = { + ["X"] = 47.49, + ["Y"] = 50.39, + ["CD"] = 0, + }, + [62] = { + ["X"] = 48.23, + ["Y"] = 53.43, + ["CD"] = 0, + }, + [63] = { + ["X"] = 47.36, + ["Y"] = 58.17, + ["CD"] = 0, + }, + [64] = { + ["X"] = 48.56, + ["Y"] = 57.74, + ["CD"] = 0, + }, + [65] = { + ["X"] = 45.22, + ["Y"] = 57.7, + ["CD"] = 0, + }, + [66] = { + ["X"] = 45.19, + ["Y"] = 59.5, + ["CD"] = 0, + }, + [67] = { + ["X"] = 42.43, + ["Y"] = 49.82, + ["CD"] = 0, + }, + [68] = { + ["X"] = 40.35, + ["Y"] = 49.45, + ["CD"] = 0, + }, + [69] = { + ["X"] = 40.46, + ["Y"] = 54.28, + ["CD"] = 0, + }, + [70] = { + ["X"] = 39.05, + ["Y"] = 55.74, + ["CD"] = 0, + }, + [71] = { + ["X"] = 37.6, + ["Y"] = 55.77, + ["CD"] = 0, + }, + [72] = { + ["X"] = 34.89, + ["Y"] = 57.33, + ["CD"] = 0, + }, + [73] = { + ["X"] = 34.59, + ["Y"] = 50.15, + ["CD"] = 0, + }, + [74] = { + ["X"] = 33.26, + ["Y"] = 48.43, + ["CD"] = 0, + }, + [75] = { + ["X"] = 32.77, + ["Y"] = 51.29, + ["CD"] = 0, + }, + [76] = { + ["X"] = 31.15, + ["Y"] = 57.24, + ["CD"] = 0, + }, + [77] = { + ["X"] = 30.3, + ["Y"] = 54.04, + ["CD"] = 0, + }, + [78] = { + ["X"] = 28.92, + ["Y"] = 52.76, + ["CD"] = 0, + }, + [79] = { + ["X"] = 28.32, + ["Y"] = 55.97, + ["CD"] = 0, + }, + [80] = { + ["X"] = 26.04, + ["Y"] = 49.17, + ["CD"] = 0, + }, + [81] = { + ["X"] = 24.02, + ["Y"] = 49.75, + ["CD"] = 0, + }, + [82] = { + ["X"] = 25.24, + ["Y"] = 51.71, + ["CD"] = 0, + }, + [83] = { + ["X"] = 24.44, + ["Y"] = 50.98, + ["CD"] = 0, + }, + [84] = { + ["X"] = 24.27, + ["Y"] = 56.95, + ["CD"] = 0, + }, + [85] = { + ["X"] = 66.76, + ["Y"] = 84.03, + ["CD"] = 0, + }, + [86] = { + ["X"] = 66.36, + ["Y"] = 80.75, + ["CD"] = 0, + }, + [87] = { + ["X"] = 62.24, + ["Y"] = 80.15, + ["CD"] = 0, + }, + [88] = { + ["X"] = 55.96, + ["Y"] = 78.8, + ["CD"] = 0, + }, + [89] = { + ["X"] = 56.02, + ["Y"] = 76.95, + ["CD"] = 0, + }, + [90] = { + ["X"] = 64.96, + ["Y"] = 72.59, + ["CD"] = 0, + }, + [91] = { + ["X"] = 65.44, + ["Y"] = 70.65, + ["CD"] = 0, + }, + [92] = { + ["X"] = 68.36, + ["Y"] = 69, + ["CD"] = 0, + }, + [93] = { + ["X"] = 52.57, + ["Y"] = 67.93, + ["CD"] = 0, + }, + [94] = { + ["X"] = 53.37, + ["Y"] = 66.5, + ["CD"] = 0, + }, + [95] = { + ["X"] = 61.09, + ["Y"] = 66.97, + ["CD"] = 0, + }, + [96] = { + ["X"] = 67.45, + ["Y"] = 66.84, + ["CD"] = 0, + }, + [97] = { + ["X"] = 68.19, + ["Y"] = 64.02, + ["CD"] = 0, + }, + [98] = { + ["X"] = 47.6, + ["Y"] = 63.37, + ["CD"] = 0, + }, + [99] = { + ["X"] = 67.42, + ["Y"] = 57.23, + ["CD"] = 0, + }, + [100] = { + ["X"] = 67.19, + ["Y"] = 51.85, + ["CD"] = 0, + }, + [101] = { + ["X"] = 63.49, + ["Y"] = 50.05, + ["CD"] = 0, + }, + [102] = { + ["X"] = 58.87, + ["Y"] = 45.42, + ["CD"] = 0, + }, + [103] = { + ["X"] = 53.68, + ["Y"] = 45.06, + ["CD"] = 0, + }, + [104] = { + ["X"] = 69.19, + ["Y"] = 44.89, + ["CD"] = 0, + }, + [105] = { + ["X"] = 59.6, + ["Y"] = 42, + ["CD"] = 0, + }, + [106] = { + ["X"] = 67.82, + ["Y"] = 39.48, + ["CD"] = 0, + }, + [107] = { + ["X"] = 59.84, + ["Y"] = 37.64, + ["CD"] = 0, + }, + [108] = { + ["X"] = 67.43, + ["Y"] = 35.4, + ["CD"] = 0, + }, + [109] = { + ["X"] = 66.7, + ["Y"] = 29.13, + ["CD"] = 0, + }, + [110] = { + ["X"] = 60.88, + ["Y"] = 28.01, + ["CD"] = 0, + }, + [111] = { + ["X"] = 60.16, + ["Y"] = 21.19, + ["CD"] = 0, + }, + [112] = { + ["X"] = 53.95, + ["Y"] = 19.05, + ["CD"] = 0, + }, + [113] = { + ["X"] = 52.44, + ["Y"] = 18.27, + ["CD"] = 0, + }, + [114] = { + ["X"] = 48.51, + ["Y"] = 14.34, + ["CD"] = 0, + }, + [115] = { + ["X"] = 44.13, + ["Y"] = 14.69, + ["CD"] = 0, + }, + [116] = { + ["X"] = 44.53, + ["Y"] = 21.08, + ["CD"] = 0, + }, + [117] = { + ["X"] = 45.31, + ["Y"] = 26.71, + ["CD"] = 0, + }, + [118] = { + ["X"] = 46.16, + ["Y"] = 33.23, + ["CD"] = 0, + }, + [119] = { + ["X"] = 48.2, + ["Y"] = 45.28, + ["CD"] = 0, + }, + [120] = { + ["X"] = 42.52, + ["Y"] = 56.26, + ["CD"] = 0, + }, + [121] = { + ["X"] = 42.18, + ["Y"] = 53.86, + ["CD"] = 0, + }, + [122] = { + ["X"] = 42.49, + ["Y"] = 45.67, + ["CD"] = 0, + }, + [123] = { + ["X"] = 40.75, + ["Y"] = 46.4, + ["CD"] = 0, + }, + [124] = { + ["X"] = 40.5, + ["Y"] = 58, + ["CD"] = 0, + }, + [125] = { + ["X"] = 39.56, + ["Y"] = 44.86, + ["CD"] = 0, + }, + [126] = { + ["X"] = 37.41, + ["Y"] = 47.1, + ["CD"] = 0, + }, + [127] = { + ["X"] = 37.05, + ["Y"] = 58.92, + ["CD"] = 0, + }, + [128] = { + ["X"] = 35.56, + ["Y"] = 47.08, + ["CD"] = 0, + }, + [129] = { + ["X"] = 34.11, + ["Y"] = 59.82, + ["CD"] = 0, + }, + [130] = { + ["X"] = 31.96, + ["Y"] = 59.46, + ["CD"] = 0, + }, + [131] = { + ["X"] = 31.19, + ["Y"] = 47.17, + ["CD"] = 0, + }, + [132] = { + ["X"] = 27.81, + ["Y"] = 58.83, + ["CD"] = 0, + }, + [133] = { + ["X"] = 27.7, + ["Y"] = 47.35, + ["CD"] = 0, + }, + [134] = { + ["X"] = 26.52, + ["Y"] = 47.47, + ["CD"] = 0, + }, + [135] = { + ["X"] = 24.62, + ["Y"] = 62.82, + ["CD"] = 0, + }, + [136] = { + ["X"] = 21.76, + ["Y"] = 62.47, + ["CD"] = 0, + }, + [137] = { + ["X"] = 22.41, + ["Y"] = 58.99, + ["CD"] = 0, + }, +} +aura_env.cooldown = 600 +aura_env.wipeDistance = 50 +aura_env.angle = 0 +aura_env.hyp = 0 +aura_env.GetClosestHerb = function() + aura_env.minID = { + ["X"] = 0, + ["Y"] = 0, + ["D"] = 1000, + ["ID"] = 0, + } + local pX = GetPlayerMapPosition("player") or 0 + local pY = select(2, GetPlayerMapPosition("player")) or 0 + pX, pY = pX * 100, pY * 100 + for k, v in ipairs(aura_env.herbs) do + local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] + if cd == 0 then + local X, Y = pX - hX, pY - hY + local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) + if hyp < aura_env.minID["D"] then + aura_env.minID["X"] = hX + aura_env.minID["Y"] = hY + aura_env.minID["D"] = hyp + aura_env.minID["ID"] = k + end + end + end + return aura_env.minID["ID"] +end diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Icecap.lua b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Herbalism/Icecap.lua similarity index 92% rename from Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Icecap.lua rename to WeakAuras/Projects/Herb Sniffer/Herb Arrays/Herbalism/Icecap.lua index 11c4def..1972f37 100644 --- a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Icecap.lua +++ b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Herbalism/Icecap.lua @@ -1,451 +1,451 @@ -aura_env.herbs = { - [1] = { - ["X"] = 59.16, - ["Y"] = 84.77, - ["CD"] = 0, - }, - [2] = { - ["X"] = 62.31, - ["Y"] = 83, - ["CD"] = 0, - }, - [3] = { - ["X"] = 57.11, - ["Y"] = 82.01, - ["CD"] = 0, - }, - [4] = { - ["X"] = 64.06, - ["Y"] = 78.62, - ["CD"] = 0, - }, - [5] = { - ["X"] = 61.3, - ["Y"] = 77.48, - ["CD"] = 0, - }, - [6] = { - ["X"] = 62.98, - ["Y"] = 75.01, - ["CD"] = 0, - }, - [7] = { - ["X"] = 60.57, - ["Y"] = 72.97, - ["CD"] = 0, - }, - [8] = { - ["X"] = 57.89, - ["Y"] = 76.61, - ["CD"] = 0, - }, - [9] = { - ["X"] = 58.81, - ["Y"] = 71.72, - ["CD"] = 0, - }, - [10] = { - ["X"] = 61.9, - ["Y"] = 70.8, - ["CD"] = 0, - }, - [11] = { - ["X"] = 55.55, - ["Y"] = 66.93, - ["CD"] = 0, - }, - [12] = { - ["X"] = 57.47, - ["Y"] = 67.97, - ["CD"] = 0, - }, - [13] = { - ["X"] = 64.62, - ["Y"] = 67.64, - ["CD"] = 0, - }, - [14] = { - ["X"] = 58.61, - ["Y"] = 64.35, - ["CD"] = 0, - }, - [15] = { - ["X"] = 60.58, - ["Y"] = 63.25, - ["CD"] = 0, - }, - [16] = { - ["X"] = 66.46, - ["Y"] = 63.37, - ["CD"] = 0, - }, - [17] = { - ["X"] = 54.22, - ["Y"] = 59.72, - ["CD"] = 0, - }, - [18] = { - ["X"] = 50.02, - ["Y"] = 59.7, - ["CD"] = 0, - }, - [19] = { - ["X"] = 55.15, - ["Y"] = 58.99, - ["CD"] = 0, - }, - [20] = { - ["X"] = 58.3, - ["Y"] = 57.27, - ["CD"] = 0, - }, - [21] = { - ["X"] = 66.48, - ["Y"] = 58.7, - ["CD"] = 0, - }, - [22] = { - ["X"] = 65.73, - ["Y"] = 55.86, - ["CD"] = 0, - }, - [23] = { - ["X"] = 67.08, - ["Y"] = 55.5, - ["CD"] = 0, - }, - [24] = { - ["X"] = 56.21, - ["Y"] = 54.41, - ["CD"] = 0, - }, - [25] = { - ["X"] = 63.85, - ["Y"] = 54.34, - ["CD"] = 0, - }, - [26] = { - ["X"] = 57.63, - ["Y"] = 53.91, - ["CD"] = 0, - }, - [27] = { - ["X"] = 62.95, - ["Y"] = 52.24, - ["CD"] = 0, - }, - [28] = { - ["X"] = 54.26, - ["Y"] = 51.46, - ["CD"] = 0, - }, - [29] = { - ["X"] = 53.42, - ["Y"] = 52.49, - ["CD"] = 0, - }, - [30] = { - ["X"] = 51.05, - ["Y"] = 47.74, - ["CD"] = 0, - }, - [31] = { - ["X"] = 62.14, - ["Y"] = 46, - ["CD"] = 0, - }, - [32] = { - ["X"] = 57.41, - ["Y"] = 44.12, - ["CD"] = 0, - }, - [33] = { - ["X"] = 67.38, - ["Y"] = 43.91, - ["CD"] = 0, - }, - [34] = { - ["X"] = 64.77, - ["Y"] = 44.54, - ["CD"] = 0, - }, - [35] = { - ["X"] = 63.95, - ["Y"] = 38.93, - ["CD"] = 0, - }, - [36] = { - ["X"] = 56.38, - ["Y"] = 40.05, - ["CD"] = 0, - }, - [37] = { - ["X"] = 53.33, - ["Y"] = 40.12, - ["CD"] = 0, - }, - [38] = { - ["X"] = 54.33, - ["Y"] = 39.28, - ["CD"] = 0, - }, - [39] = { - ["X"] = 58.25, - ["Y"] = 36.59, - ["CD"] = 0, - }, - [40] = { - ["X"] = 66.39, - ["Y"] = 31.62, - ["CD"] = 0, - }, - [41] = { - ["X"] = 65.34, - ["Y"] = 33.85, - ["CD"] = 0, - }, - [42] = { - ["X"] = 56.84, - ["Y"] = 35.19, - ["CD"] = 0, - }, - [43] = { - ["X"] = 53.46, - ["Y"] = 28.57, - ["CD"] = 0, - }, - [44] = { - ["X"] = 61.98, - ["Y"] = 31.58, - ["CD"] = 0, - }, - [45] = { - ["X"] = 61.24, - ["Y"] = 31.93, - ["CD"] = 0, - }, - [46] = { - ["X"] = 57.11, - ["Y"] = 33.25, - ["CD"] = 0, - }, - [47] = { - ["X"] = 47.75, - ["Y"] = 31.28, - ["CD"] = 0, - }, - [48] = { - ["X"] = 53.36, - ["Y"] = 33.23, - ["CD"] = 0, - }, - [49] = { - ["X"] = 58, - ["Y"] = 25.44, - ["CD"] = 0, - }, - [50] = { - ["X"] = 56.97, - ["Y"] = 26.83, - ["CD"] = 0, - }, - [51] = { - ["X"] = 49.79, - ["Y"] = 25.15, - ["CD"] = 0, - }, - [52] = { - ["X"] = 56.02, - ["Y"] = 22.75, - ["CD"] = 0, - }, - [53] = { - ["X"] = 46.42, - ["Y"] = 24.46, - ["CD"] = 0, - }, - [54] = { - ["X"] = 50.08, - ["Y"] = 22.67, - ["CD"] = 0, - }, - [55] = { - ["X"] = 46.7, - ["Y"] = 18.24, - ["CD"] = 0, - }, - [56] = { - ["X"] = 48.65, - ["Y"] = 17.22, - ["CD"] = 0, - }, - [57] = { - ["X"] = 49.35, - ["Y"] = 18.76, - ["CD"] = 0, - }, - [58] = { - ["X"] = 52.3, - ["Y"] = 20.68, - ["CD"] = 0, - }, - [59] = { - ["X"] = 45.21, - ["Y"] = 14.81, - ["CD"] = 0, - }, - [60] = { - ["X"] = 45.87, - ["Y"] = 20.86, - ["CD"] = 0, - }, - [61] = { - ["X"] = 47.49, - ["Y"] = 50.39, - ["CD"] = 0, - }, - [62] = { - ["X"] = 48.23, - ["Y"] = 53.43, - ["CD"] = 0, - }, - [63] = { - ["X"] = 47.36, - ["Y"] = 58.17, - ["CD"] = 0, - }, - [64] = { - ["X"] = 48.56, - ["Y"] = 57.74, - ["CD"] = 0, - }, - [65] = { - ["X"] = 45.22, - ["Y"] = 57.7, - ["CD"] = 0, - }, - [66] = { - ["X"] = 45.19, - ["Y"] = 59.5, - ["CD"] = 0, - }, - [67] = { - ["X"] = 42.43, - ["Y"] = 49.82, - ["CD"] = 0, - }, - [68] = { - ["X"] = 40.35, - ["Y"] = 49.45, - ["CD"] = 0, - }, - [69] = { - ["X"] = 40.46, - ["Y"] = 54.28, - ["CD"] = 0, - }, - [70] = { - ["X"] = 39.05, - ["Y"] = 55.74, - ["CD"] = 0, - }, - [71] = { - ["X"] = 37.6, - ["Y"] = 55.77, - ["CD"] = 0, - }, - [72] = { - ["X"] = 34.89, - ["Y"] = 57.33, - ["CD"] = 0, - }, - [73] = { - ["X"] = 34.59, - ["Y"] = 50.15, - ["CD"] = 0, - }, - [74] = { - ["X"] = 33.26, - ["Y"] = 48.43, - ["CD"] = 0, - }, - [75] = { - ["X"] = 32.77, - ["Y"] = 51.29, - ["CD"] = 0, - }, - [76] = { - ["X"] = 31.15, - ["Y"] = 57.24, - ["CD"] = 0, - }, - [77] = { - ["X"] = 30.3, - ["Y"] = 54.04, - ["CD"] = 0, - }, - [78] = { - ["X"] = 28.92, - ["Y"] = 52.76, - ["CD"] = 0, - }, - [79] = { - ["X"] = 28.32, - ["Y"] = 55.97, - ["CD"] = 0, - }, - [80] = { - ["X"] = 26.04, - ["Y"] = 49.17, - ["CD"] = 0, - }, - [81] = { - ["X"] = 24.02, - ["Y"] = 49.75, - ["CD"] = 0, - }, - [82] = { - ["X"] = 25.24, - ["Y"] = 51.71, - ["CD"] = 0, - }, - [83] = { - ["X"] = 24.44, - ["Y"] = 50.98, - ["CD"] = 0, - }, - [84] = { - ["X"] = 24.27, - ["Y"] = 56.95, - ["CD"] = 0, - }, -} -aura_env.cooldown = 600 -aura_env.wipeDistance = 50 -aura_env.angle = 0 -aura_env.hyp = 0 -aura_env.GetClosestHerb = function() - aura_env.minID = { - ["X"] = 0, - ["Y"] = 0, - ["D"] = 1000, - ["ID"] = 0, - } - local pX = GetPlayerMapPosition("player") or 0 - local pY = select(2, GetPlayerMapPosition("player")) or 0 - pX, pY = pX * 100, pY * 100 - for k, v in ipairs(aura_env.herbs) do - local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] - if cd == 0 then - local X, Y = pX - hX, pY - hY - local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) - if hyp < aura_env.minID["D"] then - aura_env.minID["X"] = hX - aura_env.minID["Y"] = hY - aura_env.minID["D"] = hyp - aura_env.minID["ID"] = k - end - end - end - return aura_env.minID["ID"] -end +aura_env.herbs = { + [1] = { + ["X"] = 59.16, + ["Y"] = 84.77, + ["CD"] = 0, + }, + [2] = { + ["X"] = 62.31, + ["Y"] = 83, + ["CD"] = 0, + }, + [3] = { + ["X"] = 57.11, + ["Y"] = 82.01, + ["CD"] = 0, + }, + [4] = { + ["X"] = 64.06, + ["Y"] = 78.62, + ["CD"] = 0, + }, + [5] = { + ["X"] = 61.3, + ["Y"] = 77.48, + ["CD"] = 0, + }, + [6] = { + ["X"] = 62.98, + ["Y"] = 75.01, + ["CD"] = 0, + }, + [7] = { + ["X"] = 60.57, + ["Y"] = 72.97, + ["CD"] = 0, + }, + [8] = { + ["X"] = 57.89, + ["Y"] = 76.61, + ["CD"] = 0, + }, + [9] = { + ["X"] = 58.81, + ["Y"] = 71.72, + ["CD"] = 0, + }, + [10] = { + ["X"] = 61.9, + ["Y"] = 70.8, + ["CD"] = 0, + }, + [11] = { + ["X"] = 55.55, + ["Y"] = 66.93, + ["CD"] = 0, + }, + [12] = { + ["X"] = 57.47, + ["Y"] = 67.97, + ["CD"] = 0, + }, + [13] = { + ["X"] = 64.62, + ["Y"] = 67.64, + ["CD"] = 0, + }, + [14] = { + ["X"] = 58.61, + ["Y"] = 64.35, + ["CD"] = 0, + }, + [15] = { + ["X"] = 60.58, + ["Y"] = 63.25, + ["CD"] = 0, + }, + [16] = { + ["X"] = 66.46, + ["Y"] = 63.37, + ["CD"] = 0, + }, + [17] = { + ["X"] = 54.22, + ["Y"] = 59.72, + ["CD"] = 0, + }, + [18] = { + ["X"] = 50.02, + ["Y"] = 59.7, + ["CD"] = 0, + }, + [19] = { + ["X"] = 55.15, + ["Y"] = 58.99, + ["CD"] = 0, + }, + [20] = { + ["X"] = 58.3, + ["Y"] = 57.27, + ["CD"] = 0, + }, + [21] = { + ["X"] = 66.48, + ["Y"] = 58.7, + ["CD"] = 0, + }, + [22] = { + ["X"] = 65.73, + ["Y"] = 55.86, + ["CD"] = 0, + }, + [23] = { + ["X"] = 67.08, + ["Y"] = 55.5, + ["CD"] = 0, + }, + [24] = { + ["X"] = 56.21, + ["Y"] = 54.41, + ["CD"] = 0, + }, + [25] = { + ["X"] = 63.85, + ["Y"] = 54.34, + ["CD"] = 0, + }, + [26] = { + ["X"] = 57.63, + ["Y"] = 53.91, + ["CD"] = 0, + }, + [27] = { + ["X"] = 62.95, + ["Y"] = 52.24, + ["CD"] = 0, + }, + [28] = { + ["X"] = 54.26, + ["Y"] = 51.46, + ["CD"] = 0, + }, + [29] = { + ["X"] = 53.42, + ["Y"] = 52.49, + ["CD"] = 0, + }, + [30] = { + ["X"] = 51.05, + ["Y"] = 47.74, + ["CD"] = 0, + }, + [31] = { + ["X"] = 62.14, + ["Y"] = 46, + ["CD"] = 0, + }, + [32] = { + ["X"] = 57.41, + ["Y"] = 44.12, + ["CD"] = 0, + }, + [33] = { + ["X"] = 67.38, + ["Y"] = 43.91, + ["CD"] = 0, + }, + [34] = { + ["X"] = 64.77, + ["Y"] = 44.54, + ["CD"] = 0, + }, + [35] = { + ["X"] = 63.95, + ["Y"] = 38.93, + ["CD"] = 0, + }, + [36] = { + ["X"] = 56.38, + ["Y"] = 40.05, + ["CD"] = 0, + }, + [37] = { + ["X"] = 53.33, + ["Y"] = 40.12, + ["CD"] = 0, + }, + [38] = { + ["X"] = 54.33, + ["Y"] = 39.28, + ["CD"] = 0, + }, + [39] = { + ["X"] = 58.25, + ["Y"] = 36.59, + ["CD"] = 0, + }, + [40] = { + ["X"] = 66.39, + ["Y"] = 31.62, + ["CD"] = 0, + }, + [41] = { + ["X"] = 65.34, + ["Y"] = 33.85, + ["CD"] = 0, + }, + [42] = { + ["X"] = 56.84, + ["Y"] = 35.19, + ["CD"] = 0, + }, + [43] = { + ["X"] = 53.46, + ["Y"] = 28.57, + ["CD"] = 0, + }, + [44] = { + ["X"] = 61.98, + ["Y"] = 31.58, + ["CD"] = 0, + }, + [45] = { + ["X"] = 61.24, + ["Y"] = 31.93, + ["CD"] = 0, + }, + [46] = { + ["X"] = 57.11, + ["Y"] = 33.25, + ["CD"] = 0, + }, + [47] = { + ["X"] = 47.75, + ["Y"] = 31.28, + ["CD"] = 0, + }, + [48] = { + ["X"] = 53.36, + ["Y"] = 33.23, + ["CD"] = 0, + }, + [49] = { + ["X"] = 58, + ["Y"] = 25.44, + ["CD"] = 0, + }, + [50] = { + ["X"] = 56.97, + ["Y"] = 26.83, + ["CD"] = 0, + }, + [51] = { + ["X"] = 49.79, + ["Y"] = 25.15, + ["CD"] = 0, + }, + [52] = { + ["X"] = 56.02, + ["Y"] = 22.75, + ["CD"] = 0, + }, + [53] = { + ["X"] = 46.42, + ["Y"] = 24.46, + ["CD"] = 0, + }, + [54] = { + ["X"] = 50.08, + ["Y"] = 22.67, + ["CD"] = 0, + }, + [55] = { + ["X"] = 46.7, + ["Y"] = 18.24, + ["CD"] = 0, + }, + [56] = { + ["X"] = 48.65, + ["Y"] = 17.22, + ["CD"] = 0, + }, + [57] = { + ["X"] = 49.35, + ["Y"] = 18.76, + ["CD"] = 0, + }, + [58] = { + ["X"] = 52.3, + ["Y"] = 20.68, + ["CD"] = 0, + }, + [59] = { + ["X"] = 45.21, + ["Y"] = 14.81, + ["CD"] = 0, + }, + [60] = { + ["X"] = 45.87, + ["Y"] = 20.86, + ["CD"] = 0, + }, + [61] = { + ["X"] = 47.49, + ["Y"] = 50.39, + ["CD"] = 0, + }, + [62] = { + ["X"] = 48.23, + ["Y"] = 53.43, + ["CD"] = 0, + }, + [63] = { + ["X"] = 47.36, + ["Y"] = 58.17, + ["CD"] = 0, + }, + [64] = { + ["X"] = 48.56, + ["Y"] = 57.74, + ["CD"] = 0, + }, + [65] = { + ["X"] = 45.22, + ["Y"] = 57.7, + ["CD"] = 0, + }, + [66] = { + ["X"] = 45.19, + ["Y"] = 59.5, + ["CD"] = 0, + }, + [67] = { + ["X"] = 42.43, + ["Y"] = 49.82, + ["CD"] = 0, + }, + [68] = { + ["X"] = 40.35, + ["Y"] = 49.45, + ["CD"] = 0, + }, + [69] = { + ["X"] = 40.46, + ["Y"] = 54.28, + ["CD"] = 0, + }, + [70] = { + ["X"] = 39.05, + ["Y"] = 55.74, + ["CD"] = 0, + }, + [71] = { + ["X"] = 37.6, + ["Y"] = 55.77, + ["CD"] = 0, + }, + [72] = { + ["X"] = 34.89, + ["Y"] = 57.33, + ["CD"] = 0, + }, + [73] = { + ["X"] = 34.59, + ["Y"] = 50.15, + ["CD"] = 0, + }, + [74] = { + ["X"] = 33.26, + ["Y"] = 48.43, + ["CD"] = 0, + }, + [75] = { + ["X"] = 32.77, + ["Y"] = 51.29, + ["CD"] = 0, + }, + [76] = { + ["X"] = 31.15, + ["Y"] = 57.24, + ["CD"] = 0, + }, + [77] = { + ["X"] = 30.3, + ["Y"] = 54.04, + ["CD"] = 0, + }, + [78] = { + ["X"] = 28.92, + ["Y"] = 52.76, + ["CD"] = 0, + }, + [79] = { + ["X"] = 28.32, + ["Y"] = 55.97, + ["CD"] = 0, + }, + [80] = { + ["X"] = 26.04, + ["Y"] = 49.17, + ["CD"] = 0, + }, + [81] = { + ["X"] = 24.02, + ["Y"] = 49.75, + ["CD"] = 0, + }, + [82] = { + ["X"] = 25.24, + ["Y"] = 51.71, + ["CD"] = 0, + }, + [83] = { + ["X"] = 24.44, + ["Y"] = 50.98, + ["CD"] = 0, + }, + [84] = { + ["X"] = 24.27, + ["Y"] = 56.95, + ["CD"] = 0, + }, +} +aura_env.cooldown = 600 +aura_env.wipeDistance = 50 +aura_env.angle = 0 +aura_env.hyp = 0 +aura_env.GetClosestHerb = function() + aura_env.minID = { + ["X"] = 0, + ["Y"] = 0, + ["D"] = 1000, + ["ID"] = 0, + } + local pX = GetPlayerMapPosition("player") or 0 + local pY = select(2, GetPlayerMapPosition("player")) or 0 + pX, pY = pX * 100, pY * 100 + for k, v in ipairs(aura_env.herbs) do + local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] + if cd == 0 then + local X, Y = pX - hX, pY - hY + local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) + if hyp < aura_env.minID["D"] then + aura_env.minID["X"] = hX + aura_env.minID["Y"] = hY + aura_env.minID["D"] = hyp + aura_env.minID["ID"] = k + end + end + end + return aura_env.minID["ID"] +end diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Roses.lua b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Herbalism/Roses.lua similarity index 92% rename from Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Roses.lua rename to WeakAuras/Projects/Herb Sniffer/Herb Arrays/Herbalism/Roses.lua index 89cad8f..f7b29d0 100644 --- a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Roses.lua +++ b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Herbalism/Roses.lua @@ -1,1031 +1,1031 @@ -aura_env.herbs = { - [1] = { - ["X"] = 52.4, - ["Y"] = 48.2, - ["CD"] = 0, - }, - [2] = { - ["X"] = 54.4, - ["Y"] = 48.23, - ["CD"] = 0, - }, - [3] = { - ["X"] = 59.18, - ["Y"] = 50.54, - ["CD"] = 0, - }, - [4] = { - ["X"] = 58.96, - ["Y"] = 46.15, - ["CD"] = 0, - }, - [5] = { - ["X"] = 54.91, - ["Y"] = 46.5, - ["CD"] = 0, - }, - [6] = { - ["X"] = 54.55, - ["Y"] = 47.26, - ["CD"] = 0, - }, - [7] = { - ["X"] = 61.05, - ["Y"] = 50.74, - ["CD"] = 0, - }, - [8] = { - ["X"] = 62.89, - ["Y"] = 52.74, - ["CD"] = 0, - }, - [9] = { - ["X"] = 63.77, - ["Y"] = 54.93, - ["CD"] = 0, - }, - [10] = { - ["X"] = 70.23, - ["Y"] = 63.85, - ["CD"] = 0, - }, - [11] = { - ["X"] = 67.49, - ["Y"] = 59.77, - ["CD"] = 0, - }, - [12] = { - ["X"] = 66.18, - ["Y"] = 57.51, - ["CD"] = 0, - }, - [13] = { - ["X"] = 64.22, - ["Y"] = 52.52, - ["CD"] = 0, - }, - [14] = { - ["X"] = 60.07, - ["Y"] = 49.38, - ["CD"] = 0, - }, - [15] = { - ["X"] = 55.96, - ["Y"] = 45.39, - ["CD"] = 0, - }, - [16] = { - ["X"] = 22.27, - ["Y"] = 58.65, - ["CD"] = 0, - }, - [17] = { - ["X"] = 22.86, - ["Y"] = 54.7, - ["CD"] = 0, - }, - [18] = { - ["X"] = 23.04, - ["Y"] = 53.17, - ["CD"] = 0, - }, - [19] = { - ["X"] = 23.12, - ["Y"] = 53.84, - ["CD"] = 0, - }, - [20] = { - ["X"] = 24.63, - ["Y"] = 51.23, - ["CD"] = 0, - }, - [21] = { - ["X"] = 27.43, - ["Y"] = 41.62, - ["CD"] = 0, - }, - [22] = { - ["X"] = 24.7, - ["Y"] = 39.47, - ["CD"] = 0, - }, - [23] = { - ["X"] = 23.73, - ["Y"] = 39.94, - ["CD"] = 0, - }, - [24] = { - ["X"] = 18.41, - ["Y"] = 47.7, - ["CD"] = 0, - }, - [25] = { - ["X"] = 19.13, - ["Y"] = 45.07, - ["CD"] = 0, - }, - [26] = { - ["X"] = 18.87, - ["Y"] = 43.64, - ["CD"] = 0, - }, - [27] = { - ["X"] = 17.04, - ["Y"] = 43.5, - ["CD"] = 0, - }, - [28] = { - ["X"] = 15.28, - ["Y"] = 42.46, - ["CD"] = 0, - }, - [29] = { - ["X"] = 15.58, - ["Y"] = 39.75, - ["CD"] = 0, - }, - [30] = { - ["X"] = 16.94, - ["Y"] = 39.28, - ["CD"] = 0, - }, - [31] = { - ["X"] = 17.3, - ["Y"] = 39.97, - ["CD"] = 0, - }, - [32] = { - ["X"] = 18.19, - ["Y"] = 40.52, - ["CD"] = 0, - }, - [33] = { - ["X"] = 19.77, - ["Y"] = 43.53, - ["CD"] = 0, - }, - [34] = { - ["X"] = 19.81, - ["Y"] = 42.84, - ["CD"] = 0, - }, - [35] = { - ["X"] = 23.16, - ["Y"] = 43.34, - ["CD"] = 0, - }, - [36] = { - ["X"] = 26.86, - ["Y"] = 40.75, - ["CD"] = 0, - }, - [37] = { - ["X"] = 27.44, - ["Y"] = 41.95, - ["CD"] = 0, - }, - [38] = { - ["X"] = 27.32, - ["Y"] = 45.11, - ["CD"] = 0, - }, - [39] = { - ["X"] = 28.79, - ["Y"] = 47.29, - ["CD"] = 0, - }, - [40] = { - ["X"] = 31.11, - ["Y"] = 47.49, - ["CD"] = 0, - }, - [41] = { - ["X"] = 31.52, - ["Y"] = 49.9, - ["CD"] = 0, - }, - [42] = { - ["X"] = 31.61, - ["Y"] = 54.38, - ["CD"] = 0, - }, - [43] = { - ["X"] = 33.61, - ["Y"] = 54.24, - ["CD"] = 0, - }, - [44] = { - ["X"] = 34.03, - ["Y"] = 53.09, - ["CD"] = 0, - }, - [45] = { - ["X"] = 37.9, - ["Y"] = 48.99, - ["CD"] = 0, - }, - [46] = { - ["X"] = 39.05, - ["Y"] = 51.47, - ["CD"] = 0, - }, - [47] = { - ["X"] = 40.39, - ["Y"] = 48.64, - ["CD"] = 0, - }, - [48] = { - ["X"] = 40.77, - ["Y"] = 48.19, - ["CD"] = 0, - }, - [49] = { - ["X"] = 44.14, - ["Y"] = 50.24, - ["CD"] = 0, - }, - [50] = { - ["X"] = 56.5, - ["Y"] = 45.1, - ["CD"] = 0, - }, - [51] = { - ["X"] = 59.76, - ["Y"] = 42.14, - ["CD"] = 0, - }, - [52] = { - ["X"] = 58.33, - ["Y"] = 41.44, - ["CD"] = 0, - }, - [53] = { - ["X"] = 58.51, - ["Y"] = 43.04, - ["CD"] = 0, - }, - [54] = { - ["X"] = 59.12, - ["Y"] = 47.83, - ["CD"] = 0, - }, - [55] = { - ["X"] = 35.44, - ["Y"] = 37.57, - ["CD"] = 0, - }, - [56] = { - ["X"] = 34.72, - ["Y"] = 37.99, - ["CD"] = 0, - }, - [57] = { - ["X"] = 33.97, - ["Y"] = 37.32, - ["CD"] = 0, - }, - [58] = { - ["X"] = 20.39, - ["Y"] = 51.41, - ["CD"] = 0, - }, - [59] = { - ["X"] = 19.48, - ["Y"] = 49.62, - ["CD"] = 0, - }, - [60] = { - ["X"] = 20.86, - ["Y"] = 49.17, - ["CD"] = 0, - }, - [61] = { - ["X"] = 21.24, - ["Y"] = 48.51, - ["CD"] = 0, - }, - [62] = { - ["X"] = 21.67, - ["Y"] = 46.84, - ["CD"] = 0, - }, - [63] = { - ["X"] = 20.77, - ["Y"] = 46.4, - ["CD"] = 0, - }, - [64] = { - ["X"] = 20.68, - ["Y"] = 45.54, - ["CD"] = 0, - }, - [65] = { - ["X"] = 23.78, - ["Y"] = 46.23, - ["CD"] = 0, - }, - [66] = { - ["X"] = 23.67, - ["Y"] = 45.78, - ["CD"] = 0, - }, - [67] = { - ["X"] = 24.7, - ["Y"] = 44.5, - ["CD"] = 0, - }, - [68] = { - ["X"] = 24.36, - ["Y"] = 42.97, - ["CD"] = 0, - }, - [69] = { - ["X"] = 25.12, - ["Y"] = 42.57, - ["CD"] = 0, - }, - [70] = { - ["X"] = 25.27, - ["Y"] = 41.14, - ["CD"] = 0, - }, - [71] = { - ["X"] = 25.49, - ["Y"] = 38.68, - ["CD"] = 0, - }, - [72] = { - ["X"] = 26.48, - ["Y"] = 37.83, - ["CD"] = 0, - }, - [73] = { - ["X"] = 28.26, - ["Y"] = 37.27, - ["CD"] = 0, - }, - [74] = { - ["X"] = 31.6, - ["Y"] = 36.18, - ["CD"] = 0, - }, - [75] = { - ["X"] = 32.77, - ["Y"] = 37.25, - ["CD"] = 0, - }, - [76] = { - ["X"] = 33.51, - ["Y"] = 35.46, - ["CD"] = 0, - }, - [77] = { - ["X"] = 32.97, - ["Y"] = 39.24, - ["CD"] = 0, - }, - [78] = { - ["X"] = 32.76, - ["Y"] = 40.68, - ["CD"] = 0, - }, - [79] = { - ["X"] = 30.18, - ["Y"] = 46.7, - ["CD"] = 0, - }, - [80] = { - ["X"] = 29.81, - ["Y"] = 47.95, - ["CD"] = 0, - }, - [81] = { - ["X"] = 27.61, - ["Y"] = 50.45, - ["CD"] = 0, - }, - [82] = { - ["X"] = 27.86, - ["Y"] = 53.57, - ["CD"] = 0, - }, - [83] = { - ["X"] = 27.06, - ["Y"] = 53.26, - ["CD"] = 0, - }, - [84] = { - ["X"] = 26.08, - ["Y"] = 53.85, - ["CD"] = 0, - }, - [85] = { - ["X"] = 25.37, - ["Y"] = 54.48, - ["CD"] = 0, - }, - [86] = { - ["X"] = 25.15, - ["Y"] = 56.59, - ["CD"] = 0, - }, - [87] = { - ["X"] = 24.5, - ["Y"] = 55.55, - ["CD"] = 0, - }, - [88] = { - ["X"] = 22.73, - ["Y"] = 55.49, - ["CD"] = 0, - }, - [89] = { - ["X"] = 21.64, - ["Y"] = 56.04, - ["CD"] = 0, - }, - [90] = { - ["X"] = 20.89, - ["Y"] = 52.45, - ["CD"] = 0, - }, - [91] = { - ["X"] = 21.6, - ["Y"] = 48.93, - ["CD"] = 0, - }, - [92] = { - ["X"] = 22.78, - ["Y"] = 47, - ["CD"] = 0, - }, - [93] = { - ["X"] = 23.67, - ["Y"] = 47.17, - ["CD"] = 0, - }, - [94] = { - ["X"] = 28.81, - ["Y"] = 49.54, - ["CD"] = 0, - }, - [95] = { - ["X"] = 27.63, - ["Y"] = 49.1, - ["CD"] = 0, - }, - [96] = { - ["X"] = 28.12, - ["Y"] = 47.43, - ["CD"] = 0, - }, - [97] = { - ["X"] = 29.6, - ["Y"] = 45.44, - ["CD"] = 0, - }, - [98] = { - ["X"] = 31.08, - ["Y"] = 44.93, - ["CD"] = 0, - }, - [99] = { - ["X"] = 32.12, - ["Y"] = 45.11, - ["CD"] = 0, - }, - [100] = { - ["X"] = 32.86, - ["Y"] = 44.32, - ["CD"] = 0, - }, - [101] = { - ["X"] = 35.29, - ["Y"] = 50.54, - ["CD"] = 0, - }, - [102] = { - ["X"] = 31.72, - ["Y"] = 11.15, - ["CD"] = 0, - }, - [103] = { - ["X"] = 35.36, - ["Y"] = 11.62, - ["CD"] = 0, - }, - [104] = { - ["X"] = 38.72, - ["Y"] = 14.9, - ["CD"] = 0, - }, - [105] = { - ["X"] = 39.7, - ["Y"] = 14.87, - ["CD"] = 0, - }, - [106] = { - ["X"] = 28.23, - ["Y"] = 19.56, - ["CD"] = 0, - }, - [107] = { - ["X"] = 24.39, - ["Y"] = 25.74, - ["CD"] = 0, - }, - [108] = { - ["X"] = 26.2, - ["Y"] = 27.16, - ["CD"] = 0, - }, - [109] = { - ["X"] = 28.07, - ["Y"] = 29.18, - ["CD"] = 0, - }, - [110] = { - ["X"] = 28.8, - ["Y"] = 38.56, - ["CD"] = 0, - }, - [111] = { - ["X"] = 30.55, - ["Y"] = 37.63, - ["CD"] = 0, - }, - [112] = { - ["X"] = 34.55, - ["Y"] = 42.86, - ["CD"] = 0, - }, - [113] = { - ["X"] = 33.84, - ["Y"] = 50.23, - ["CD"] = 0, - }, - [114] = { - ["X"] = 35.52, - ["Y"] = 51.77, - ["CD"] = 0, - }, - [115] = { - ["X"] = 35.33, - ["Y"] = 58.01, - ["CD"] = 0, - }, - [116] = { - ["X"] = 38.64, - ["Y"] = 62.53, - ["CD"] = 0, - }, - [117] = { - ["X"] = 40.41, - ["Y"] = 73, - ["CD"] = 0, - }, - [118] = { - ["X"] = 41.04, - ["Y"] = 81.46, - ["CD"] = 0, - }, - [119] = { - ["X"] = 41.17, - ["Y"] = 83.21, - ["CD"] = 0, - }, - [120] = { - ["X"] = 70.07, - ["Y"] = 61.17, - ["CD"] = 0, - }, - [121] = { - ["X"] = 69.26, - ["Y"] = 62.64, - ["CD"] = 0, - }, - [122] = { - ["X"] = 68.31, - ["Y"] = 58.27, - ["CD"] = 0, - }, - [123] = { - ["X"] = 66.58, - ["Y"] = 55.69, - ["CD"] = 0, - }, - [124] = { - ["X"] = 66.13, - ["Y"] = 53.94, - ["CD"] = 0, - }, - [125] = { - ["X"] = 65.37, - ["Y"] = 48.57, - ["CD"] = 0, - }, - [126] = { - ["X"] = 65.11, - ["Y"] = 50.4, - ["CD"] = 0, - }, - [127] = { - ["X"] = 62.57, - ["Y"] = 50.61, - ["CD"] = 0, - }, - [128] = { - ["X"] = 65.12, - ["Y"] = 38.6, - ["CD"] = 0, - }, - [129] = { - ["X"] = 62.25, - ["Y"] = 45.8, - ["CD"] = 0, - }, - [130] = { - ["X"] = 60.11, - ["Y"] = 46.19, - ["CD"] = 0, - }, - [131] = { - ["X"] = 58.62, - ["Y"] = 49.54, - ["CD"] = 0, - }, - [132] = { - ["X"] = 56.22, - ["Y"] = 48.62, - ["CD"] = 0, - }, - [133] = { - ["X"] = 47.37, - ["Y"] = 55.17, - ["CD"] = 0, - }, - [134] = { - ["X"] = 41.33, - ["Y"] = 72.02, - ["CD"] = 0, - }, - [135] = { - ["X"] = 38.71, - ["Y"] = 60.97, - ["CD"] = 0, - }, - [136] = { - ["X"] = 36.71, - ["Y"] = 59.7, - ["CD"] = 0, - }, - [137] = { - ["X"] = 39.76, - ["Y"] = 57.54, - ["CD"] = 0, - }, - [138] = { - ["X"] = 42.32, - ["Y"] = 49.6, - ["CD"] = 0, - }, - [139] = { - ["X"] = 49.52, - ["Y"] = 47.44, - ["CD"] = 0, - }, - [140] = { - ["X"] = 49.79, - ["Y"] = 40.3, - ["CD"] = 0, - }, - [141] = { - ["X"] = 48.78, - ["Y"] = 42.77, - ["CD"] = 0, - }, - [142] = { - ["X"] = 46.87, - ["Y"] = 39.44, - ["CD"] = 0, - }, - [143] = { - ["X"] = 36.65, - ["Y"] = 42.98, - ["CD"] = 0, - }, - [144] = { - ["X"] = 29.53, - ["Y"] = 46.51, - ["CD"] = 0, - }, - [145] = { - ["X"] = 28.25, - ["Y"] = 46.15, - ["CD"] = 0, - }, - [146] = { - ["X"] = 25.63, - ["Y"] = 52.48, - ["CD"] = 0, - }, - [147] = { - ["X"] = 27.12, - ["Y"] = 69.02, - ["CD"] = 0, - }, - [148] = { - ["X"] = 23.49, - ["Y"] = 61.88, - ["CD"] = 0, - }, - [149] = { - ["X"] = 26.37, - ["Y"] = 46.84, - ["CD"] = 0, - }, - [150] = { - ["X"] = 28.77, - ["Y"] = 41.26, - ["CD"] = 0, - }, - [151] = { - ["X"] = 28.94, - ["Y"] = 43.58, - ["CD"] = 0, - }, - [152] = { - ["X"] = 30.97, - ["Y"] = 39.66, - ["CD"] = 0, - }, - [153] = { - ["X"] = 34.05, - ["Y"] = 38.76, - ["CD"] = 0, - }, - [154] = { - ["X"] = 34.52, - ["Y"] = 44.14, - ["CD"] = 0, - }, - [155] = { - ["X"] = 36.22, - ["Y"] = 41.74, - ["CD"] = 0, - }, - [156] = { - ["X"] = 39.85, - ["Y"] = 39.65, - ["CD"] = 0, - }, - [157] = { - ["X"] = 47.15, - ["Y"] = 41.25, - ["CD"] = 0, - }, - [158] = { - ["X"] = 40.72, - ["Y"] = 40.06, - ["CD"] = 0, - }, - [159] = { - ["X"] = 44.52, - ["Y"] = 39.66, - ["CD"] = 0, - }, - [160] = { - ["X"] = 41.5, - ["Y"] = 38.6, - ["CD"] = 0, - }, - [161] = { - ["X"] = 44.86, - ["Y"] = 35.75, - ["CD"] = 0, - }, - [162] = { - ["X"] = 44.63, - ["Y"] = 33.2, - ["CD"] = 0, - }, - [163] = { - ["X"] = 47.33, - ["Y"] = 28.88, - ["CD"] = 0, - }, - [164] = { - ["X"] = 32.03, - ["Y"] = 34.06, - ["CD"] = 0, - }, - [165] = { - ["X"] = 27.66, - ["Y"] = 36, - ["CD"] = 0, - }, - [166] = { - ["X"] = 27.58, - ["Y"] = 44.62, - ["CD"] = 0, - }, - [167] = { - ["X"] = 25.91, - ["Y"] = 44.49, - ["CD"] = 0, - }, - [168] = { - ["X"] = 26.84, - ["Y"] = 48.81, - ["CD"] = 0, - }, - [169] = { - ["X"] = 22.94, - ["Y"] = 55.55, - ["CD"] = 0, - }, - [170] = { - ["X"] = 19.91, - ["Y"] = 54.45, - ["CD"] = 0, - }, - [171] = { - ["X"] = 21.16, - ["Y"] = 53.32, - ["CD"] = 0, - }, - [172] = { - ["X"] = 22.64, - ["Y"] = 50.19, - ["CD"] = 0, - }, - [173] = { - ["X"] = 24.23, - ["Y"] = 33.84, - ["CD"] = 0, - }, - [174] = { - ["X"] = 30.34, - ["Y"] = 33.68, - ["CD"] = 0, - }, - [175] = { - ["X"] = 30.66, - ["Y"] = 33.03, - ["CD"] = 0, - }, - [176] = { - ["X"] = 39.58, - ["Y"] = 16.08, - ["CD"] = 0, - }, - [177] = { - ["X"] = 39.3, - ["Y"] = 14.48, - ["CD"] = 0, - }, - [178] = { - ["X"] = 34.8, - ["Y"] = 10.58, - ["CD"] = 0, - }, - [179] = { - ["X"] = 30.29, - ["Y"] = 8.71, - ["CD"] = 0, - }, - [180] = { - ["X"] = 30.67, - ["Y"] = 12.65, - ["CD"] = 0, - }, - [181] = { - ["X"] = 31.53, - ["Y"] = 14.5, - ["CD"] = 0, - }, - [182] = { - ["X"] = 31.63, - ["Y"] = 16.56, - ["CD"] = 0, - }, - [183] = { - ["X"] = 33.53, - ["Y"] = 20.08, - ["CD"] = 0, - }, - [184] = { - ["X"] = 34.88, - ["Y"] = 19.76, - ["CD"] = 0, - }, - [185] = { - ["X"] = 35.59, - ["Y"] = 18.08, - ["CD"] = 0, - }, - [186] = { - ["X"] = 43.46, - ["Y"] = 27.48, - ["CD"] = 0, - }, - [187] = { - ["X"] = 42.73, - ["Y"] = 27.39, - ["CD"] = 0, - }, - [188] = { - ["X"] = 41.23, - ["Y"] = 25.46, - ["CD"] = 0, - }, - [189] = { - ["X"] = 39.47, - ["Y"] = 24.45, - ["CD"] = 0, - }, - [190] = { - ["X"] = 38.39, - ["Y"] = 26.94, - ["CD"] = 0, - }, - [191] = { - ["X"] = 37.32, - ["Y"] = 26.91, - ["CD"] = 0, - }, - [192] = { - ["X"] = 36.21, - ["Y"] = 30.36, - ["CD"] = 0, - }, - [193] = { - ["X"] = 27.01, - ["Y"] = 29.36, - ["CD"] = 0, - }, - [194] = { - ["X"] = 27.04, - ["Y"] = 31.9, - ["CD"] = 0, - }, - [195] = { - ["X"] = 17.98, - ["Y"] = 42.91, - ["CD"] = 0, - }, - [196] = { - ["X"] = 15.82, - ["Y"] = 43.16, - ["CD"] = 0, - }, - [197] = { - ["X"] = 15.74, - ["Y"] = 38.61, - ["CD"] = 0, - }, - [198] = { - ["X"] = 16.66, - ["Y"] = 36.19, - ["CD"] = 0, - }, - [199] = { - ["X"] = 21.23, - ["Y"] = 20.19, - ["CD"] = 0, - }, - [200] = { - ["X"] = 22.84, - ["Y"] = 19.42, - ["CD"] = 0, - }, -} -aura_env.cooldown = 600 -aura_env.wipeDistance = 50 -aura_env.angle = 0 -aura_env.hyp = 0 -aura_env.GetClosestHerb = function() - aura_env.minID = { - ["X"] = 0, - ["Y"] = 0, - ["D"] = 1000, - ["ID"] = 0, - } - local pX = GetPlayerMapPosition("player") or 0 - local pY = select(2, GetPlayerMapPosition("player")) or 0 - pX, pY = pX * 100, pY * 100 - for k, v in ipairs(aura_env.herbs) do - local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] - if cd == 0 then - local X, Y = pX - hX, pY - hY - local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) - if hyp < aura_env.minID["D"] then - aura_env.minID["X"] = hX - aura_env.minID["Y"] = hY - aura_env.minID["D"] = hyp - aura_env.minID["ID"] = k - end - end - end - return aura_env.minID["ID"] -end +aura_env.herbs = { + [1] = { + ["X"] = 52.4, + ["Y"] = 48.2, + ["CD"] = 0, + }, + [2] = { + ["X"] = 54.4, + ["Y"] = 48.23, + ["CD"] = 0, + }, + [3] = { + ["X"] = 59.18, + ["Y"] = 50.54, + ["CD"] = 0, + }, + [4] = { + ["X"] = 58.96, + ["Y"] = 46.15, + ["CD"] = 0, + }, + [5] = { + ["X"] = 54.91, + ["Y"] = 46.5, + ["CD"] = 0, + }, + [6] = { + ["X"] = 54.55, + ["Y"] = 47.26, + ["CD"] = 0, + }, + [7] = { + ["X"] = 61.05, + ["Y"] = 50.74, + ["CD"] = 0, + }, + [8] = { + ["X"] = 62.89, + ["Y"] = 52.74, + ["CD"] = 0, + }, + [9] = { + ["X"] = 63.77, + ["Y"] = 54.93, + ["CD"] = 0, + }, + [10] = { + ["X"] = 70.23, + ["Y"] = 63.85, + ["CD"] = 0, + }, + [11] = { + ["X"] = 67.49, + ["Y"] = 59.77, + ["CD"] = 0, + }, + [12] = { + ["X"] = 66.18, + ["Y"] = 57.51, + ["CD"] = 0, + }, + [13] = { + ["X"] = 64.22, + ["Y"] = 52.52, + ["CD"] = 0, + }, + [14] = { + ["X"] = 60.07, + ["Y"] = 49.38, + ["CD"] = 0, + }, + [15] = { + ["X"] = 55.96, + ["Y"] = 45.39, + ["CD"] = 0, + }, + [16] = { + ["X"] = 22.27, + ["Y"] = 58.65, + ["CD"] = 0, + }, + [17] = { + ["X"] = 22.86, + ["Y"] = 54.7, + ["CD"] = 0, + }, + [18] = { + ["X"] = 23.04, + ["Y"] = 53.17, + ["CD"] = 0, + }, + [19] = { + ["X"] = 23.12, + ["Y"] = 53.84, + ["CD"] = 0, + }, + [20] = { + ["X"] = 24.63, + ["Y"] = 51.23, + ["CD"] = 0, + }, + [21] = { + ["X"] = 27.43, + ["Y"] = 41.62, + ["CD"] = 0, + }, + [22] = { + ["X"] = 24.7, + ["Y"] = 39.47, + ["CD"] = 0, + }, + [23] = { + ["X"] = 23.73, + ["Y"] = 39.94, + ["CD"] = 0, + }, + [24] = { + ["X"] = 18.41, + ["Y"] = 47.7, + ["CD"] = 0, + }, + [25] = { + ["X"] = 19.13, + ["Y"] = 45.07, + ["CD"] = 0, + }, + [26] = { + ["X"] = 18.87, + ["Y"] = 43.64, + ["CD"] = 0, + }, + [27] = { + ["X"] = 17.04, + ["Y"] = 43.5, + ["CD"] = 0, + }, + [28] = { + ["X"] = 15.28, + ["Y"] = 42.46, + ["CD"] = 0, + }, + [29] = { + ["X"] = 15.58, + ["Y"] = 39.75, + ["CD"] = 0, + }, + [30] = { + ["X"] = 16.94, + ["Y"] = 39.28, + ["CD"] = 0, + }, + [31] = { + ["X"] = 17.3, + ["Y"] = 39.97, + ["CD"] = 0, + }, + [32] = { + ["X"] = 18.19, + ["Y"] = 40.52, + ["CD"] = 0, + }, + [33] = { + ["X"] = 19.77, + ["Y"] = 43.53, + ["CD"] = 0, + }, + [34] = { + ["X"] = 19.81, + ["Y"] = 42.84, + ["CD"] = 0, + }, + [35] = { + ["X"] = 23.16, + ["Y"] = 43.34, + ["CD"] = 0, + }, + [36] = { + ["X"] = 26.86, + ["Y"] = 40.75, + ["CD"] = 0, + }, + [37] = { + ["X"] = 27.44, + ["Y"] = 41.95, + ["CD"] = 0, + }, + [38] = { + ["X"] = 27.32, + ["Y"] = 45.11, + ["CD"] = 0, + }, + [39] = { + ["X"] = 28.79, + ["Y"] = 47.29, + ["CD"] = 0, + }, + [40] = { + ["X"] = 31.11, + ["Y"] = 47.49, + ["CD"] = 0, + }, + [41] = { + ["X"] = 31.52, + ["Y"] = 49.9, + ["CD"] = 0, + }, + [42] = { + ["X"] = 31.61, + ["Y"] = 54.38, + ["CD"] = 0, + }, + [43] = { + ["X"] = 33.61, + ["Y"] = 54.24, + ["CD"] = 0, + }, + [44] = { + ["X"] = 34.03, + ["Y"] = 53.09, + ["CD"] = 0, + }, + [45] = { + ["X"] = 37.9, + ["Y"] = 48.99, + ["CD"] = 0, + }, + [46] = { + ["X"] = 39.05, + ["Y"] = 51.47, + ["CD"] = 0, + }, + [47] = { + ["X"] = 40.39, + ["Y"] = 48.64, + ["CD"] = 0, + }, + [48] = { + ["X"] = 40.77, + ["Y"] = 48.19, + ["CD"] = 0, + }, + [49] = { + ["X"] = 44.14, + ["Y"] = 50.24, + ["CD"] = 0, + }, + [50] = { + ["X"] = 56.5, + ["Y"] = 45.1, + ["CD"] = 0, + }, + [51] = { + ["X"] = 59.76, + ["Y"] = 42.14, + ["CD"] = 0, + }, + [52] = { + ["X"] = 58.33, + ["Y"] = 41.44, + ["CD"] = 0, + }, + [53] = { + ["X"] = 58.51, + ["Y"] = 43.04, + ["CD"] = 0, + }, + [54] = { + ["X"] = 59.12, + ["Y"] = 47.83, + ["CD"] = 0, + }, + [55] = { + ["X"] = 35.44, + ["Y"] = 37.57, + ["CD"] = 0, + }, + [56] = { + ["X"] = 34.72, + ["Y"] = 37.99, + ["CD"] = 0, + }, + [57] = { + ["X"] = 33.97, + ["Y"] = 37.32, + ["CD"] = 0, + }, + [58] = { + ["X"] = 20.39, + ["Y"] = 51.41, + ["CD"] = 0, + }, + [59] = { + ["X"] = 19.48, + ["Y"] = 49.62, + ["CD"] = 0, + }, + [60] = { + ["X"] = 20.86, + ["Y"] = 49.17, + ["CD"] = 0, + }, + [61] = { + ["X"] = 21.24, + ["Y"] = 48.51, + ["CD"] = 0, + }, + [62] = { + ["X"] = 21.67, + ["Y"] = 46.84, + ["CD"] = 0, + }, + [63] = { + ["X"] = 20.77, + ["Y"] = 46.4, + ["CD"] = 0, + }, + [64] = { + ["X"] = 20.68, + ["Y"] = 45.54, + ["CD"] = 0, + }, + [65] = { + ["X"] = 23.78, + ["Y"] = 46.23, + ["CD"] = 0, + }, + [66] = { + ["X"] = 23.67, + ["Y"] = 45.78, + ["CD"] = 0, + }, + [67] = { + ["X"] = 24.7, + ["Y"] = 44.5, + ["CD"] = 0, + }, + [68] = { + ["X"] = 24.36, + ["Y"] = 42.97, + ["CD"] = 0, + }, + [69] = { + ["X"] = 25.12, + ["Y"] = 42.57, + ["CD"] = 0, + }, + [70] = { + ["X"] = 25.27, + ["Y"] = 41.14, + ["CD"] = 0, + }, + [71] = { + ["X"] = 25.49, + ["Y"] = 38.68, + ["CD"] = 0, + }, + [72] = { + ["X"] = 26.48, + ["Y"] = 37.83, + ["CD"] = 0, + }, + [73] = { + ["X"] = 28.26, + ["Y"] = 37.27, + ["CD"] = 0, + }, + [74] = { + ["X"] = 31.6, + ["Y"] = 36.18, + ["CD"] = 0, + }, + [75] = { + ["X"] = 32.77, + ["Y"] = 37.25, + ["CD"] = 0, + }, + [76] = { + ["X"] = 33.51, + ["Y"] = 35.46, + ["CD"] = 0, + }, + [77] = { + ["X"] = 32.97, + ["Y"] = 39.24, + ["CD"] = 0, + }, + [78] = { + ["X"] = 32.76, + ["Y"] = 40.68, + ["CD"] = 0, + }, + [79] = { + ["X"] = 30.18, + ["Y"] = 46.7, + ["CD"] = 0, + }, + [80] = { + ["X"] = 29.81, + ["Y"] = 47.95, + ["CD"] = 0, + }, + [81] = { + ["X"] = 27.61, + ["Y"] = 50.45, + ["CD"] = 0, + }, + [82] = { + ["X"] = 27.86, + ["Y"] = 53.57, + ["CD"] = 0, + }, + [83] = { + ["X"] = 27.06, + ["Y"] = 53.26, + ["CD"] = 0, + }, + [84] = { + ["X"] = 26.08, + ["Y"] = 53.85, + ["CD"] = 0, + }, + [85] = { + ["X"] = 25.37, + ["Y"] = 54.48, + ["CD"] = 0, + }, + [86] = { + ["X"] = 25.15, + ["Y"] = 56.59, + ["CD"] = 0, + }, + [87] = { + ["X"] = 24.5, + ["Y"] = 55.55, + ["CD"] = 0, + }, + [88] = { + ["X"] = 22.73, + ["Y"] = 55.49, + ["CD"] = 0, + }, + [89] = { + ["X"] = 21.64, + ["Y"] = 56.04, + ["CD"] = 0, + }, + [90] = { + ["X"] = 20.89, + ["Y"] = 52.45, + ["CD"] = 0, + }, + [91] = { + ["X"] = 21.6, + ["Y"] = 48.93, + ["CD"] = 0, + }, + [92] = { + ["X"] = 22.78, + ["Y"] = 47, + ["CD"] = 0, + }, + [93] = { + ["X"] = 23.67, + ["Y"] = 47.17, + ["CD"] = 0, + }, + [94] = { + ["X"] = 28.81, + ["Y"] = 49.54, + ["CD"] = 0, + }, + [95] = { + ["X"] = 27.63, + ["Y"] = 49.1, + ["CD"] = 0, + }, + [96] = { + ["X"] = 28.12, + ["Y"] = 47.43, + ["CD"] = 0, + }, + [97] = { + ["X"] = 29.6, + ["Y"] = 45.44, + ["CD"] = 0, + }, + [98] = { + ["X"] = 31.08, + ["Y"] = 44.93, + ["CD"] = 0, + }, + [99] = { + ["X"] = 32.12, + ["Y"] = 45.11, + ["CD"] = 0, + }, + [100] = { + ["X"] = 32.86, + ["Y"] = 44.32, + ["CD"] = 0, + }, + [101] = { + ["X"] = 35.29, + ["Y"] = 50.54, + ["CD"] = 0, + }, + [102] = { + ["X"] = 31.72, + ["Y"] = 11.15, + ["CD"] = 0, + }, + [103] = { + ["X"] = 35.36, + ["Y"] = 11.62, + ["CD"] = 0, + }, + [104] = { + ["X"] = 38.72, + ["Y"] = 14.9, + ["CD"] = 0, + }, + [105] = { + ["X"] = 39.7, + ["Y"] = 14.87, + ["CD"] = 0, + }, + [106] = { + ["X"] = 28.23, + ["Y"] = 19.56, + ["CD"] = 0, + }, + [107] = { + ["X"] = 24.39, + ["Y"] = 25.74, + ["CD"] = 0, + }, + [108] = { + ["X"] = 26.2, + ["Y"] = 27.16, + ["CD"] = 0, + }, + [109] = { + ["X"] = 28.07, + ["Y"] = 29.18, + ["CD"] = 0, + }, + [110] = { + ["X"] = 28.8, + ["Y"] = 38.56, + ["CD"] = 0, + }, + [111] = { + ["X"] = 30.55, + ["Y"] = 37.63, + ["CD"] = 0, + }, + [112] = { + ["X"] = 34.55, + ["Y"] = 42.86, + ["CD"] = 0, + }, + [113] = { + ["X"] = 33.84, + ["Y"] = 50.23, + ["CD"] = 0, + }, + [114] = { + ["X"] = 35.52, + ["Y"] = 51.77, + ["CD"] = 0, + }, + [115] = { + ["X"] = 35.33, + ["Y"] = 58.01, + ["CD"] = 0, + }, + [116] = { + ["X"] = 38.64, + ["Y"] = 62.53, + ["CD"] = 0, + }, + [117] = { + ["X"] = 40.41, + ["Y"] = 73, + ["CD"] = 0, + }, + [118] = { + ["X"] = 41.04, + ["Y"] = 81.46, + ["CD"] = 0, + }, + [119] = { + ["X"] = 41.17, + ["Y"] = 83.21, + ["CD"] = 0, + }, + [120] = { + ["X"] = 70.07, + ["Y"] = 61.17, + ["CD"] = 0, + }, + [121] = { + ["X"] = 69.26, + ["Y"] = 62.64, + ["CD"] = 0, + }, + [122] = { + ["X"] = 68.31, + ["Y"] = 58.27, + ["CD"] = 0, + }, + [123] = { + ["X"] = 66.58, + ["Y"] = 55.69, + ["CD"] = 0, + }, + [124] = { + ["X"] = 66.13, + ["Y"] = 53.94, + ["CD"] = 0, + }, + [125] = { + ["X"] = 65.37, + ["Y"] = 48.57, + ["CD"] = 0, + }, + [126] = { + ["X"] = 65.11, + ["Y"] = 50.4, + ["CD"] = 0, + }, + [127] = { + ["X"] = 62.57, + ["Y"] = 50.61, + ["CD"] = 0, + }, + [128] = { + ["X"] = 65.12, + ["Y"] = 38.6, + ["CD"] = 0, + }, + [129] = { + ["X"] = 62.25, + ["Y"] = 45.8, + ["CD"] = 0, + }, + [130] = { + ["X"] = 60.11, + ["Y"] = 46.19, + ["CD"] = 0, + }, + [131] = { + ["X"] = 58.62, + ["Y"] = 49.54, + ["CD"] = 0, + }, + [132] = { + ["X"] = 56.22, + ["Y"] = 48.62, + ["CD"] = 0, + }, + [133] = { + ["X"] = 47.37, + ["Y"] = 55.17, + ["CD"] = 0, + }, + [134] = { + ["X"] = 41.33, + ["Y"] = 72.02, + ["CD"] = 0, + }, + [135] = { + ["X"] = 38.71, + ["Y"] = 60.97, + ["CD"] = 0, + }, + [136] = { + ["X"] = 36.71, + ["Y"] = 59.7, + ["CD"] = 0, + }, + [137] = { + ["X"] = 39.76, + ["Y"] = 57.54, + ["CD"] = 0, + }, + [138] = { + ["X"] = 42.32, + ["Y"] = 49.6, + ["CD"] = 0, + }, + [139] = { + ["X"] = 49.52, + ["Y"] = 47.44, + ["CD"] = 0, + }, + [140] = { + ["X"] = 49.79, + ["Y"] = 40.3, + ["CD"] = 0, + }, + [141] = { + ["X"] = 48.78, + ["Y"] = 42.77, + ["CD"] = 0, + }, + [142] = { + ["X"] = 46.87, + ["Y"] = 39.44, + ["CD"] = 0, + }, + [143] = { + ["X"] = 36.65, + ["Y"] = 42.98, + ["CD"] = 0, + }, + [144] = { + ["X"] = 29.53, + ["Y"] = 46.51, + ["CD"] = 0, + }, + [145] = { + ["X"] = 28.25, + ["Y"] = 46.15, + ["CD"] = 0, + }, + [146] = { + ["X"] = 25.63, + ["Y"] = 52.48, + ["CD"] = 0, + }, + [147] = { + ["X"] = 27.12, + ["Y"] = 69.02, + ["CD"] = 0, + }, + [148] = { + ["X"] = 23.49, + ["Y"] = 61.88, + ["CD"] = 0, + }, + [149] = { + ["X"] = 26.37, + ["Y"] = 46.84, + ["CD"] = 0, + }, + [150] = { + ["X"] = 28.77, + ["Y"] = 41.26, + ["CD"] = 0, + }, + [151] = { + ["X"] = 28.94, + ["Y"] = 43.58, + ["CD"] = 0, + }, + [152] = { + ["X"] = 30.97, + ["Y"] = 39.66, + ["CD"] = 0, + }, + [153] = { + ["X"] = 34.05, + ["Y"] = 38.76, + ["CD"] = 0, + }, + [154] = { + ["X"] = 34.52, + ["Y"] = 44.14, + ["CD"] = 0, + }, + [155] = { + ["X"] = 36.22, + ["Y"] = 41.74, + ["CD"] = 0, + }, + [156] = { + ["X"] = 39.85, + ["Y"] = 39.65, + ["CD"] = 0, + }, + [157] = { + ["X"] = 47.15, + ["Y"] = 41.25, + ["CD"] = 0, + }, + [158] = { + ["X"] = 40.72, + ["Y"] = 40.06, + ["CD"] = 0, + }, + [159] = { + ["X"] = 44.52, + ["Y"] = 39.66, + ["CD"] = 0, + }, + [160] = { + ["X"] = 41.5, + ["Y"] = 38.6, + ["CD"] = 0, + }, + [161] = { + ["X"] = 44.86, + ["Y"] = 35.75, + ["CD"] = 0, + }, + [162] = { + ["X"] = 44.63, + ["Y"] = 33.2, + ["CD"] = 0, + }, + [163] = { + ["X"] = 47.33, + ["Y"] = 28.88, + ["CD"] = 0, + }, + [164] = { + ["X"] = 32.03, + ["Y"] = 34.06, + ["CD"] = 0, + }, + [165] = { + ["X"] = 27.66, + ["Y"] = 36, + ["CD"] = 0, + }, + [166] = { + ["X"] = 27.58, + ["Y"] = 44.62, + ["CD"] = 0, + }, + [167] = { + ["X"] = 25.91, + ["Y"] = 44.49, + ["CD"] = 0, + }, + [168] = { + ["X"] = 26.84, + ["Y"] = 48.81, + ["CD"] = 0, + }, + [169] = { + ["X"] = 22.94, + ["Y"] = 55.55, + ["CD"] = 0, + }, + [170] = { + ["X"] = 19.91, + ["Y"] = 54.45, + ["CD"] = 0, + }, + [171] = { + ["X"] = 21.16, + ["Y"] = 53.32, + ["CD"] = 0, + }, + [172] = { + ["X"] = 22.64, + ["Y"] = 50.19, + ["CD"] = 0, + }, + [173] = { + ["X"] = 24.23, + ["Y"] = 33.84, + ["CD"] = 0, + }, + [174] = { + ["X"] = 30.34, + ["Y"] = 33.68, + ["CD"] = 0, + }, + [175] = { + ["X"] = 30.66, + ["Y"] = 33.03, + ["CD"] = 0, + }, + [176] = { + ["X"] = 39.58, + ["Y"] = 16.08, + ["CD"] = 0, + }, + [177] = { + ["X"] = 39.3, + ["Y"] = 14.48, + ["CD"] = 0, + }, + [178] = { + ["X"] = 34.8, + ["Y"] = 10.58, + ["CD"] = 0, + }, + [179] = { + ["X"] = 30.29, + ["Y"] = 8.71, + ["CD"] = 0, + }, + [180] = { + ["X"] = 30.67, + ["Y"] = 12.65, + ["CD"] = 0, + }, + [181] = { + ["X"] = 31.53, + ["Y"] = 14.5, + ["CD"] = 0, + }, + [182] = { + ["X"] = 31.63, + ["Y"] = 16.56, + ["CD"] = 0, + }, + [183] = { + ["X"] = 33.53, + ["Y"] = 20.08, + ["CD"] = 0, + }, + [184] = { + ["X"] = 34.88, + ["Y"] = 19.76, + ["CD"] = 0, + }, + [185] = { + ["X"] = 35.59, + ["Y"] = 18.08, + ["CD"] = 0, + }, + [186] = { + ["X"] = 43.46, + ["Y"] = 27.48, + ["CD"] = 0, + }, + [187] = { + ["X"] = 42.73, + ["Y"] = 27.39, + ["CD"] = 0, + }, + [188] = { + ["X"] = 41.23, + ["Y"] = 25.46, + ["CD"] = 0, + }, + [189] = { + ["X"] = 39.47, + ["Y"] = 24.45, + ["CD"] = 0, + }, + [190] = { + ["X"] = 38.39, + ["Y"] = 26.94, + ["CD"] = 0, + }, + [191] = { + ["X"] = 37.32, + ["Y"] = 26.91, + ["CD"] = 0, + }, + [192] = { + ["X"] = 36.21, + ["Y"] = 30.36, + ["CD"] = 0, + }, + [193] = { + ["X"] = 27.01, + ["Y"] = 29.36, + ["CD"] = 0, + }, + [194] = { + ["X"] = 27.04, + ["Y"] = 31.9, + ["CD"] = 0, + }, + [195] = { + ["X"] = 17.98, + ["Y"] = 42.91, + ["CD"] = 0, + }, + [196] = { + ["X"] = 15.82, + ["Y"] = 43.16, + ["CD"] = 0, + }, + [197] = { + ["X"] = 15.74, + ["Y"] = 38.61, + ["CD"] = 0, + }, + [198] = { + ["X"] = 16.66, + ["Y"] = 36.19, + ["CD"] = 0, + }, + [199] = { + ["X"] = 21.23, + ["Y"] = 20.19, + ["CD"] = 0, + }, + [200] = { + ["X"] = 22.84, + ["Y"] = 19.42, + ["CD"] = 0, + }, +} +aura_env.cooldown = 600 +aura_env.wipeDistance = 50 +aura_env.angle = 0 +aura_env.hyp = 0 +aura_env.GetClosestHerb = function() + aura_env.minID = { + ["X"] = 0, + ["Y"] = 0, + ["D"] = 1000, + ["ID"] = 0, + } + local pX = GetPlayerMapPosition("player") or 0 + local pY = select(2, GetPlayerMapPosition("player")) or 0 + pX, pY = pX * 100, pY * 100 + for k, v in ipairs(aura_env.herbs) do + local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] + if cd == 0 then + local X, Y = pX - hX, pY - hY + local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) + if hyp < aura_env.minID["D"] then + aura_env.minID["X"] = hX + aura_env.minID["Y"] = hY + aura_env.minID["D"] = hyp + aura_env.minID["ID"] = k + end + end + end + return aura_env.minID["ID"] +end diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Silversage.lua b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Herbalism/Silversage.lua similarity index 93% rename from Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Silversage.lua rename to WeakAuras/Projects/Herb Sniffer/Herb Arrays/Herbalism/Silversage.lua index 94f76fe..cc57da2 100644 --- a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Silversage.lua +++ b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Herbalism/Silversage.lua @@ -1,296 +1,296 @@ -aura_env.herbs = { - [1] = { - ["X"] = 66.76, - ["Y"] = 84.03, - ["CD"] = 0, - }, - [2] = { - ["X"] = 66.36, - ["Y"] = 80.75, - ["CD"] = 0, - }, - [3] = { - ["X"] = 62.24, - ["Y"] = 80.15, - ["CD"] = 0, - }, - [4] = { - ["X"] = 55.96, - ["Y"] = 78.8, - ["CD"] = 0, - }, - [5] = { - ["X"] = 56.02, - ["Y"] = 76.95, - ["CD"] = 0, - }, - [6] = { - ["X"] = 64.96, - ["Y"] = 72.59, - ["CD"] = 0, - }, - [7] = { - ["X"] = 65.44, - ["Y"] = 70.65, - ["CD"] = 0, - }, - [8] = { - ["X"] = 68.36, - ["Y"] = 69, - ["CD"] = 0, - }, - [9] = { - ["X"] = 52.57, - ["Y"] = 67.93, - ["CD"] = 0, - }, - [10] = { - ["X"] = 53.37, - ["Y"] = 66.5, - ["CD"] = 0, - }, - [11] = { - ["X"] = 61.09, - ["Y"] = 66.97, - ["CD"] = 0, - }, - [12] = { - ["X"] = 67.45, - ["Y"] = 66.84, - ["CD"] = 0, - }, - [13] = { - ["X"] = 68.19, - ["Y"] = 64.02, - ["CD"] = 0, - }, - [14] = { - ["X"] = 47.6, - ["Y"] = 63.37, - ["CD"] = 0, - }, - [15] = { - ["X"] = 67.42, - ["Y"] = 57.23, - ["CD"] = 0, - }, - [16] = { - ["X"] = 67.19, - ["Y"] = 51.85, - ["CD"] = 0, - }, - [17] = { - ["X"] = 63.49, - ["Y"] = 50.05, - ["CD"] = 0, - }, - [18] = { - ["X"] = 58.87, - ["Y"] = 45.42, - ["CD"] = 0, - }, - [19] = { - ["X"] = 53.68, - ["Y"] = 45.06, - ["CD"] = 0, - }, - [20] = { - ["X"] = 69.19, - ["Y"] = 44.89, - ["CD"] = 0, - }, - [21] = { - ["X"] = 59.6, - ["Y"] = 42, - ["CD"] = 0, - }, - [22] = { - ["X"] = 67.82, - ["Y"] = 39.48, - ["CD"] = 0, - }, - [23] = { - ["X"] = 59.84, - ["Y"] = 37.64, - ["CD"] = 0, - }, - [24] = { - ["X"] = 67.43, - ["Y"] = 35.4, - ["CD"] = 0, - }, - [25] = { - ["X"] = 66.7, - ["Y"] = 29.13, - ["CD"] = 0, - }, - [26] = { - ["X"] = 60.88, - ["Y"] = 28.01, - ["CD"] = 0, - }, - [27] = { - ["X"] = 60.16, - ["Y"] = 21.19, - ["CD"] = 0, - }, - [28] = { - ["X"] = 53.95, - ["Y"] = 19.05, - ["CD"] = 0, - }, - [29] = { - ["X"] = 52.44, - ["Y"] = 18.27, - ["CD"] = 0, - }, - [30] = { - ["X"] = 48.51, - ["Y"] = 14.34, - ["CD"] = 0, - }, - [31] = { - ["X"] = 44.13, - ["Y"] = 14.69, - ["CD"] = 0, - }, - [32] = { - ["X"] = 44.53, - ["Y"] = 21.08, - ["CD"] = 0, - }, - [33] = { - ["X"] = 45.31, - ["Y"] = 26.71, - ["CD"] = 0, - }, - [34] = { - ["X"] = 46.16, - ["Y"] = 33.23, - ["CD"] = 0, - }, - [35] = { - ["X"] = 48.2, - ["Y"] = 45.28, - ["CD"] = 0, - }, - [36] = { - ["X"] = 42.52, - ["Y"] = 56.26, - ["CD"] = 0, - }, - [37] = { - ["X"] = 42.18, - ["Y"] = 53.86, - ["CD"] = 0, - }, - [38] = { - ["X"] = 42.49, - ["Y"] = 45.67, - ["CD"] = 0, - }, - [39] = { - ["X"] = 40.75, - ["Y"] = 46.4, - ["CD"] = 0, - }, - [40] = { - ["X"] = 40.5, - ["Y"] = 58, - ["CD"] = 0, - }, - [41] = { - ["X"] = 39.56, - ["Y"] = 44.86, - ["CD"] = 0, - }, - [42] = { - ["X"] = 37.41, - ["Y"] = 47.1, - ["CD"] = 0, - }, - [43] = { - ["X"] = 37.05, - ["Y"] = 58.92, - ["CD"] = 0, - }, - [44] = { - ["X"] = 35.56, - ["Y"] = 47.08, - ["CD"] = 0, - }, - [45] = { - ["X"] = 34.11, - ["Y"] = 59.82, - ["CD"] = 0, - }, - [46] = { - ["X"] = 31.96, - ["Y"] = 59.46, - ["CD"] = 0, - }, - [47] = { - ["X"] = 31.19, - ["Y"] = 47.17, - ["CD"] = 0, - }, - [48] = { - ["X"] = 27.81, - ["Y"] = 58.83, - ["CD"] = 0, - }, - [49] = { - ["X"] = 27.7, - ["Y"] = 47.35, - ["CD"] = 0, - }, - [50] = { - ["X"] = 26.52, - ["Y"] = 47.47, - ["CD"] = 0, - }, - [51] = { - ["X"] = 24.62, - ["Y"] = 62.82, - ["CD"] = 0, - }, - [52] = { - ["X"] = 21.76, - ["Y"] = 62.47, - ["CD"] = 0, - }, - [53] = { - ["X"] = 22.41, - ["Y"] = 58.99, - ["CD"] = 0, - }, -} -aura_env.cooldown = 600 -aura_env.wipeDistance = 50 -aura_env.angle = 0 -aura_env.hyp = 0 -aura_env.GetClosestHerb = function() - aura_env.minID = { - ["X"] = 0, - ["Y"] = 0, - ["D"] = 1000, - ["ID"] = 0, - } - local pX = GetPlayerMapPosition("player") or 0 - local pY = select(2, GetPlayerMapPosition("player")) or 0 - pX, pY = pX * 100, pY * 100 - for k, v in ipairs(aura_env.herbs) do - local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] - if cd == 0 then - local X, Y = pX - hX, pY - hY - local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) - if hyp < aura_env.minID["D"] then - aura_env.minID["X"] = hX - aura_env.minID["Y"] = hY - aura_env.minID["D"] = hyp - aura_env.minID["ID"] = k - end - end - end - return aura_env.minID["ID"] -end +aura_env.herbs = { + [1] = { + ["X"] = 66.76, + ["Y"] = 84.03, + ["CD"] = 0, + }, + [2] = { + ["X"] = 66.36, + ["Y"] = 80.75, + ["CD"] = 0, + }, + [3] = { + ["X"] = 62.24, + ["Y"] = 80.15, + ["CD"] = 0, + }, + [4] = { + ["X"] = 55.96, + ["Y"] = 78.8, + ["CD"] = 0, + }, + [5] = { + ["X"] = 56.02, + ["Y"] = 76.95, + ["CD"] = 0, + }, + [6] = { + ["X"] = 64.96, + ["Y"] = 72.59, + ["CD"] = 0, + }, + [7] = { + ["X"] = 65.44, + ["Y"] = 70.65, + ["CD"] = 0, + }, + [8] = { + ["X"] = 68.36, + ["Y"] = 69, + ["CD"] = 0, + }, + [9] = { + ["X"] = 52.57, + ["Y"] = 67.93, + ["CD"] = 0, + }, + [10] = { + ["X"] = 53.37, + ["Y"] = 66.5, + ["CD"] = 0, + }, + [11] = { + ["X"] = 61.09, + ["Y"] = 66.97, + ["CD"] = 0, + }, + [12] = { + ["X"] = 67.45, + ["Y"] = 66.84, + ["CD"] = 0, + }, + [13] = { + ["X"] = 68.19, + ["Y"] = 64.02, + ["CD"] = 0, + }, + [14] = { + ["X"] = 47.6, + ["Y"] = 63.37, + ["CD"] = 0, + }, + [15] = { + ["X"] = 67.42, + ["Y"] = 57.23, + ["CD"] = 0, + }, + [16] = { + ["X"] = 67.19, + ["Y"] = 51.85, + ["CD"] = 0, + }, + [17] = { + ["X"] = 63.49, + ["Y"] = 50.05, + ["CD"] = 0, + }, + [18] = { + ["X"] = 58.87, + ["Y"] = 45.42, + ["CD"] = 0, + }, + [19] = { + ["X"] = 53.68, + ["Y"] = 45.06, + ["CD"] = 0, + }, + [20] = { + ["X"] = 69.19, + ["Y"] = 44.89, + ["CD"] = 0, + }, + [21] = { + ["X"] = 59.6, + ["Y"] = 42, + ["CD"] = 0, + }, + [22] = { + ["X"] = 67.82, + ["Y"] = 39.48, + ["CD"] = 0, + }, + [23] = { + ["X"] = 59.84, + ["Y"] = 37.64, + ["CD"] = 0, + }, + [24] = { + ["X"] = 67.43, + ["Y"] = 35.4, + ["CD"] = 0, + }, + [25] = { + ["X"] = 66.7, + ["Y"] = 29.13, + ["CD"] = 0, + }, + [26] = { + ["X"] = 60.88, + ["Y"] = 28.01, + ["CD"] = 0, + }, + [27] = { + ["X"] = 60.16, + ["Y"] = 21.19, + ["CD"] = 0, + }, + [28] = { + ["X"] = 53.95, + ["Y"] = 19.05, + ["CD"] = 0, + }, + [29] = { + ["X"] = 52.44, + ["Y"] = 18.27, + ["CD"] = 0, + }, + [30] = { + ["X"] = 48.51, + ["Y"] = 14.34, + ["CD"] = 0, + }, + [31] = { + ["X"] = 44.13, + ["Y"] = 14.69, + ["CD"] = 0, + }, + [32] = { + ["X"] = 44.53, + ["Y"] = 21.08, + ["CD"] = 0, + }, + [33] = { + ["X"] = 45.31, + ["Y"] = 26.71, + ["CD"] = 0, + }, + [34] = { + ["X"] = 46.16, + ["Y"] = 33.23, + ["CD"] = 0, + }, + [35] = { + ["X"] = 48.2, + ["Y"] = 45.28, + ["CD"] = 0, + }, + [36] = { + ["X"] = 42.52, + ["Y"] = 56.26, + ["CD"] = 0, + }, + [37] = { + ["X"] = 42.18, + ["Y"] = 53.86, + ["CD"] = 0, + }, + [38] = { + ["X"] = 42.49, + ["Y"] = 45.67, + ["CD"] = 0, + }, + [39] = { + ["X"] = 40.75, + ["Y"] = 46.4, + ["CD"] = 0, + }, + [40] = { + ["X"] = 40.5, + ["Y"] = 58, + ["CD"] = 0, + }, + [41] = { + ["X"] = 39.56, + ["Y"] = 44.86, + ["CD"] = 0, + }, + [42] = { + ["X"] = 37.41, + ["Y"] = 47.1, + ["CD"] = 0, + }, + [43] = { + ["X"] = 37.05, + ["Y"] = 58.92, + ["CD"] = 0, + }, + [44] = { + ["X"] = 35.56, + ["Y"] = 47.08, + ["CD"] = 0, + }, + [45] = { + ["X"] = 34.11, + ["Y"] = 59.82, + ["CD"] = 0, + }, + [46] = { + ["X"] = 31.96, + ["Y"] = 59.46, + ["CD"] = 0, + }, + [47] = { + ["X"] = 31.19, + ["Y"] = 47.17, + ["CD"] = 0, + }, + [48] = { + ["X"] = 27.81, + ["Y"] = 58.83, + ["CD"] = 0, + }, + [49] = { + ["X"] = 27.7, + ["Y"] = 47.35, + ["CD"] = 0, + }, + [50] = { + ["X"] = 26.52, + ["Y"] = 47.47, + ["CD"] = 0, + }, + [51] = { + ["X"] = 24.62, + ["Y"] = 62.82, + ["CD"] = 0, + }, + [52] = { + ["X"] = 21.76, + ["Y"] = 62.47, + ["CD"] = 0, + }, + [53] = { + ["X"] = 22.41, + ["Y"] = 58.99, + ["CD"] = 0, + }, +} +aura_env.cooldown = 600 +aura_env.wipeDistance = 50 +aura_env.angle = 0 +aura_env.hyp = 0 +aura_env.GetClosestHerb = function() + aura_env.minID = { + ["X"] = 0, + ["Y"] = 0, + ["D"] = 1000, + ["ID"] = 0, + } + local pX = GetPlayerMapPosition("player") or 0 + local pY = select(2, GetPlayerMapPosition("player")) or 0 + pX, pY = pX * 100, pY * 100 + for k, v in ipairs(aura_env.herbs) do + local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] + if cd == 0 then + local X, Y = pX - hX, pY - hY + local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) + if hyp < aura_env.minID["D"] then + aura_env.minID["X"] = hX + aura_env.minID["Y"] = hY + aura_env.minID["D"] = hyp + aura_env.minID["ID"] = k + end + end + end + return aura_env.minID["ID"] +end diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Cobalt - Dragonblight.lua b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Mining/Cobalt - Dragonblight.lua similarity index 93% rename from Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Cobalt - Dragonblight.lua rename to WeakAuras/Projects/Herb Sniffer/Herb Arrays/Mining/Cobalt - Dragonblight.lua index d62887b..9c75d85 100644 --- a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Cobalt - Dragonblight.lua +++ b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Mining/Cobalt - Dragonblight.lua @@ -1,276 +1,276 @@ -aura_env.herbs = { - [1] = { - ["X"] = 88.46, - ["Y"] = 17.99, - ["CD"] = 0, - }, - [2] = { - ["X"] = 87.27, - ["Y"] = 17.3, - ["CD"] = 0, - }, - [3] = { - ["X"] = 86.48, - ["Y"] = 17.2, - ["CD"] = 0, - }, - [4] = { - ["X"] = 85.78, - ["Y"] = 17.6, - ["CD"] = 0, - }, - [5] = { - ["X"] = 85, - ["Y"] = 18.05, - ["CD"] = 0, - }, - [6] = { - ["X"] = 84.03, - ["Y"] = 19.24, - ["CD"] = 0, - }, - [7] = { - ["X"] = 83.28, - ["Y"] = 20.08, - ["CD"] = 0, - }, - [8] = { - ["X"] = 82.62, - ["Y"] = 20.74, - ["CD"] = 0, - }, - [9] = { - ["X"] = 81.96, - ["Y"] = 22.01, - ["CD"] = 0, - }, - [10] = { - ["X"] = 81.22, - ["Y"] = 22.72, - ["CD"] = 0, - }, - [11] = { - ["X"] = 80.32, - ["Y"] = 25.03, - ["CD"] = 0, - }, - [12] = { - ["X"] = 80.19, - ["Y"] = 25.92, - ["CD"] = 0, - }, - [13] = { - ["X"] = 78.88, - ["Y"] = 27.21, - ["CD"] = 0, - }, - [14] = { - ["X"] = 77.91, - ["Y"] = 27.41, - ["CD"] = 0, - }, - [15] = { - ["X"] = 76.98, - ["Y"] = 28.38, - ["CD"] = 0, - }, - [16] = { - ["X"] = 75.11, - ["Y"] = 32.51, - ["CD"] = 0, - }, - [17] = { - ["X"] = 74.55, - ["Y"] = 33.31, - ["CD"] = 0, - }, - [18] = { - ["X"] = 73.58, - ["Y"] = 32.76, - ["CD"] = 0, - }, - [19] = { - ["X"] = 73.64, - ["Y"] = 31.74, - ["CD"] = 0, - }, - [20] = { - ["X"] = 73.51, - ["Y"] = 30.48, - ["CD"] = 0, - }, - [21] = { - ["X"] = 72.86, - ["Y"] = 29.99, - ["CD"] = 0, - }, - [22] = { - ["X"] = 72.18, - ["Y"] = 28.74, - ["CD"] = 0, - }, - [23] = { - ["X"] = 72.13, - ["Y"] = 26.96, - ["CD"] = 0, - }, - [24] = { - ["X"] = 71.46, - ["Y"] = 26.17, - ["CD"] = 0, - }, - [25] = { - ["X"] = 70.67, - ["Y"] = 26.16, - ["CD"] = 0, - }, - [26] = { - ["X"] = 90.04, - ["Y"] = 50.75, - ["CD"] = 0, - }, - [27] = { - ["X"] = 90.84, - ["Y"] = 50.84, - ["CD"] = 0, - }, - [28] = { - ["X"] = 88.81, - ["Y"] = 61.52, - ["CD"] = 0, - }, - [29] = { - ["X"] = 78.92, - ["Y"] = 61.4, - ["CD"] = 0, - }, - [30] = { - ["X"] = 82.26, - ["Y"] = 59.77, - ["CD"] = 0, - }, - [31] = { - ["X"] = 85.43, - ["Y"] = 57.03, - ["CD"] = 0, - }, - [32] = { - ["X"] = 74.46, - ["Y"] = 28.13, - ["CD"] = 0, - }, - [33] = { - ["X"] = 69.36, - ["Y"] = 25.49, - ["CD"] = 0, - }, - [34] = { - ["X"] = 73.21, - ["Y"] = 26.13, - ["CD"] = 0, - }, - [35] = { - ["X"] = 56.52, - ["Y"] = 35.9, - ["CD"] = 0, - }, - [36] = { - ["X"] = 57.94, - ["Y"] = 33.32, - ["CD"] = 0, - }, - [37] = { - ["X"] = 55.19, - ["Y"] = 32.83, - ["CD"] = 0, - }, - [38] = { - ["X"] = 54.89, - ["Y"] = 37.13, - ["CD"] = 0, - }, - [39] = { - ["X"] = 51.74, - ["Y"] = 38.92, - ["CD"] = 0, - }, - [40] = { - ["X"] = 52.5, - ["Y"] = 38.18, - ["CD"] = 0, - }, - [41] = { - ["X"] = 49.22, - ["Y"] = 43.37, - ["CD"] = 0, - }, - [42] = { - ["X"] = 49.78, - ["Y"] = 50.78, - ["CD"] = 0, - }, - [43] = { - ["X"] = 45.13, - ["Y"] = 52.25, - ["CD"] = 0, - }, - [44] = { - ["X"] = 45.02, - ["Y"] = 47.11, - ["CD"] = 0, - }, - [45] = { - ["X"] = 31.45, - ["Y"] = 55.09, - ["CD"] = 0, - }, - [46] = { - ["X"] = 30.49, - ["Y"] = 60.35, - ["CD"] = 0, - }, - [47] = { - ["X"] = 26.19, - ["Y"] = 62.12, - ["CD"] = 0, - }, - [48] = { - ["X"] = 19.5, - ["Y"] = 61.05, - ["CD"] = 0, - }, - [49] = { - ["X"] = 21.36, - ["Y"] = 56.44, - ["CD"] = 0, - }, -} -aura_env.cooldown = 600 -aura_env.wipeDistance = 15 -aura_env.angle = 0 -aura_env.hyp = 0 -aura_env.GetClosestHerb = function() - aura_env.minID = { - ["X"] = 0, - ["Y"] = 0, - ["D"] = 1000, - ["ID"] = 0, - } - local pX = GetPlayerMapPosition("player") or 0 - local pY = select(2, GetPlayerMapPosition("player")) or 0 - pX, pY = pX * 100, pY * 100 - for k, v in ipairs(aura_env.herbs) do - local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] - if cd == 0 then - local X, Y = pX - hX, pY - hY - local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) - if hyp < aura_env.minID["D"] then - aura_env.minID["X"] = hX - aura_env.minID["Y"] = hY - aura_env.minID["D"] = hyp - aura_env.minID["ID"] = k - end - end - end - return aura_env.minID["ID"] -end +aura_env.herbs = { + [1] = { + ["X"] = 88.46, + ["Y"] = 17.99, + ["CD"] = 0, + }, + [2] = { + ["X"] = 87.27, + ["Y"] = 17.3, + ["CD"] = 0, + }, + [3] = { + ["X"] = 86.48, + ["Y"] = 17.2, + ["CD"] = 0, + }, + [4] = { + ["X"] = 85.78, + ["Y"] = 17.6, + ["CD"] = 0, + }, + [5] = { + ["X"] = 85, + ["Y"] = 18.05, + ["CD"] = 0, + }, + [6] = { + ["X"] = 84.03, + ["Y"] = 19.24, + ["CD"] = 0, + }, + [7] = { + ["X"] = 83.28, + ["Y"] = 20.08, + ["CD"] = 0, + }, + [8] = { + ["X"] = 82.62, + ["Y"] = 20.74, + ["CD"] = 0, + }, + [9] = { + ["X"] = 81.96, + ["Y"] = 22.01, + ["CD"] = 0, + }, + [10] = { + ["X"] = 81.22, + ["Y"] = 22.72, + ["CD"] = 0, + }, + [11] = { + ["X"] = 80.32, + ["Y"] = 25.03, + ["CD"] = 0, + }, + [12] = { + ["X"] = 80.19, + ["Y"] = 25.92, + ["CD"] = 0, + }, + [13] = { + ["X"] = 78.88, + ["Y"] = 27.21, + ["CD"] = 0, + }, + [14] = { + ["X"] = 77.91, + ["Y"] = 27.41, + ["CD"] = 0, + }, + [15] = { + ["X"] = 76.98, + ["Y"] = 28.38, + ["CD"] = 0, + }, + [16] = { + ["X"] = 75.11, + ["Y"] = 32.51, + ["CD"] = 0, + }, + [17] = { + ["X"] = 74.55, + ["Y"] = 33.31, + ["CD"] = 0, + }, + [18] = { + ["X"] = 73.58, + ["Y"] = 32.76, + ["CD"] = 0, + }, + [19] = { + ["X"] = 73.64, + ["Y"] = 31.74, + ["CD"] = 0, + }, + [20] = { + ["X"] = 73.51, + ["Y"] = 30.48, + ["CD"] = 0, + }, + [21] = { + ["X"] = 72.86, + ["Y"] = 29.99, + ["CD"] = 0, + }, + [22] = { + ["X"] = 72.18, + ["Y"] = 28.74, + ["CD"] = 0, + }, + [23] = { + ["X"] = 72.13, + ["Y"] = 26.96, + ["CD"] = 0, + }, + [24] = { + ["X"] = 71.46, + ["Y"] = 26.17, + ["CD"] = 0, + }, + [25] = { + ["X"] = 70.67, + ["Y"] = 26.16, + ["CD"] = 0, + }, + [26] = { + ["X"] = 90.04, + ["Y"] = 50.75, + ["CD"] = 0, + }, + [27] = { + ["X"] = 90.84, + ["Y"] = 50.84, + ["CD"] = 0, + }, + [28] = { + ["X"] = 88.81, + ["Y"] = 61.52, + ["CD"] = 0, + }, + [29] = { + ["X"] = 78.92, + ["Y"] = 61.4, + ["CD"] = 0, + }, + [30] = { + ["X"] = 82.26, + ["Y"] = 59.77, + ["CD"] = 0, + }, + [31] = { + ["X"] = 85.43, + ["Y"] = 57.03, + ["CD"] = 0, + }, + [32] = { + ["X"] = 74.46, + ["Y"] = 28.13, + ["CD"] = 0, + }, + [33] = { + ["X"] = 69.36, + ["Y"] = 25.49, + ["CD"] = 0, + }, + [34] = { + ["X"] = 73.21, + ["Y"] = 26.13, + ["CD"] = 0, + }, + [35] = { + ["X"] = 56.52, + ["Y"] = 35.9, + ["CD"] = 0, + }, + [36] = { + ["X"] = 57.94, + ["Y"] = 33.32, + ["CD"] = 0, + }, + [37] = { + ["X"] = 55.19, + ["Y"] = 32.83, + ["CD"] = 0, + }, + [38] = { + ["X"] = 54.89, + ["Y"] = 37.13, + ["CD"] = 0, + }, + [39] = { + ["X"] = 51.74, + ["Y"] = 38.92, + ["CD"] = 0, + }, + [40] = { + ["X"] = 52.5, + ["Y"] = 38.18, + ["CD"] = 0, + }, + [41] = { + ["X"] = 49.22, + ["Y"] = 43.37, + ["CD"] = 0, + }, + [42] = { + ["X"] = 49.78, + ["Y"] = 50.78, + ["CD"] = 0, + }, + [43] = { + ["X"] = 45.13, + ["Y"] = 52.25, + ["CD"] = 0, + }, + [44] = { + ["X"] = 45.02, + ["Y"] = 47.11, + ["CD"] = 0, + }, + [45] = { + ["X"] = 31.45, + ["Y"] = 55.09, + ["CD"] = 0, + }, + [46] = { + ["X"] = 30.49, + ["Y"] = 60.35, + ["CD"] = 0, + }, + [47] = { + ["X"] = 26.19, + ["Y"] = 62.12, + ["CD"] = 0, + }, + [48] = { + ["X"] = 19.5, + ["Y"] = 61.05, + ["CD"] = 0, + }, + [49] = { + ["X"] = 21.36, + ["Y"] = 56.44, + ["CD"] = 0, + }, +} +aura_env.cooldown = 600 +aura_env.wipeDistance = 15 +aura_env.angle = 0 +aura_env.hyp = 0 +aura_env.GetClosestHerb = function() + aura_env.minID = { + ["X"] = 0, + ["Y"] = 0, + ["D"] = 1000, + ["ID"] = 0, + } + local pX = GetPlayerMapPosition("player") or 0 + local pY = select(2, GetPlayerMapPosition("player")) or 0 + pX, pY = pX * 100, pY * 100 + for k, v in ipairs(aura_env.herbs) do + local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] + if cd == 0 then + local X, Y = pX - hX, pY - hY + local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) + if hyp < aura_env.minID["D"] then + aura_env.minID["X"] = hX + aura_env.minID["Y"] = hY + aura_env.minID["D"] = hyp + aura_env.minID["ID"] = k + end + end + end + return aura_env.minID["ID"] +end diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Cobalt - Howling Fjord.lua b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Mining/Cobalt - Howling Fjord.lua similarity index 92% rename from Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Cobalt - Howling Fjord.lua rename to WeakAuras/Projects/Herb Sniffer/Herb Arrays/Mining/Cobalt - Howling Fjord.lua index 1857e07..7828b3c 100644 --- a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Cobalt - Howling Fjord.lua +++ b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Mining/Cobalt - Howling Fjord.lua @@ -1,526 +1,526 @@ -aura_env.herbs = { - [1] = { - ["X"] = 27.74, - ["Y"] = 4.93, - ["CD"] = 0, - }, - [2] = { - ["X"] = 29.58, - ["Y"] = 6.12, - ["CD"] = 0, - }, - [3] = { - ["X"] = 38.4, - ["Y"] = 7.32, - ["CD"] = 0, - }, - [4] = { - ["X"] = 69.23, - ["Y"] = 9.55, - ["CD"] = 0, - }, - [5] = { - ["X"] = 28.91, - ["Y"] = 10.34, - ["CD"] = 0, - }, - [6] = { - ["X"] = 44.79, - ["Y"] = 10.41, - ["CD"] = 0, - }, - [7] = { - ["X"] = 37.41, - ["Y"] = 11.88, - ["CD"] = 0, - }, - [8] = { - ["X"] = 72.67, - ["Y"] = 12.41, - ["CD"] = 0, - }, - [9] = { - ["X"] = 41.67, - ["Y"] = 13.07, - ["CD"] = 0, - }, - [10] = { - ["X"] = 26.58, - ["Y"] = 13.11, - ["CD"] = 0, - }, - [11] = { - ["X"] = 28.54, - ["Y"] = 13.24, - ["CD"] = 0, - }, - [12] = { - ["X"] = 45.56, - ["Y"] = 13.29, - ["CD"] = 0, - }, - [13] = { - ["X"] = 22.63, - ["Y"] = 13.55, - ["CD"] = 0, - }, - [14] = { - ["X"] = 53.24, - ["Y"] = 13.86, - ["CD"] = 0, - }, - [15] = { - ["X"] = 51.44, - ["Y"] = 14.17, - ["CD"] = 0, - }, - [16] = { - ["X"] = 38.37, - ["Y"] = 14.38, - ["CD"] = 0, - }, - [17] = { - ["X"] = 55.34, - ["Y"] = 14.84, - ["CD"] = 0, - }, - [18] = { - ["X"] = 26.76, - ["Y"] = 15.08, - ["CD"] = 0, - }, - [19] = { - ["X"] = 41.32, - ["Y"] = 15.19, - ["CD"] = 0, - }, - [20] = { - ["X"] = 66.81, - ["Y"] = 15.81, - ["CD"] = 0, - }, - [21] = { - ["X"] = 27.83, - ["Y"] = 15.83, - ["CD"] = 0, - }, - [22] = { - ["X"] = 23.6, - ["Y"] = 16.11, - ["CD"] = 0, - }, - [23] = { - ["X"] = 23.6, - ["Y"] = 17.59, - ["CD"] = 0, - }, - [24] = { - ["X"] = 38.18, - ["Y"] = 18.83, - ["CD"] = 0, - }, - [25] = { - ["X"] = 73.67, - ["Y"] = 19.46, - ["CD"] = 0, - }, - [26] = { - ["X"] = 22.28, - ["Y"] = 20.14, - ["CD"] = 0, - }, - [27] = { - ["X"] = 25.66, - ["Y"] = 20.87, - ["CD"] = 0, - }, - [28] = { - ["X"] = 27.86, - ["Y"] = 22.53, - ["CD"] = 0, - }, - [29] = { - ["X"] = 18.83, - ["Y"] = 22.91, - ["CD"] = 0, - }, - [30] = { - ["X"] = 20.68, - ["Y"] = 22.93, - ["CD"] = 0, - }, - [31] = { - ["X"] = 63.97, - ["Y"] = 23.14, - ["CD"] = 0, - }, - [32] = { - ["X"] = 62.08, - ["Y"] = 24.13, - ["CD"] = 0, - }, - [33] = { - ["X"] = 70.37, - ["Y"] = 24.32, - ["CD"] = 0, - }, - [34] = { - ["X"] = 59.66, - ["Y"] = 26.14, - ["CD"] = 0, - }, - [35] = { - ["X"] = 72.01, - ["Y"] = 26.52, - ["CD"] = 0, - }, - [36] = { - ["X"] = 22.03, - ["Y"] = 27.14, - ["CD"] = 0, - }, - [37] = { - ["X"] = 68.73, - ["Y"] = 28.05, - ["CD"] = 0, - }, - [38] = { - ["X"] = 26.28, - ["Y"] = 28.6, - ["CD"] = 0, - }, - [39] = { - ["X"] = 37.73, - ["Y"] = 30.5, - ["CD"] = 0, - }, - [40] = { - ["X"] = 50.71, - ["Y"] = 30.77, - ["CD"] = 0, - }, - [41] = { - ["X"] = 26.52, - ["Y"] = 31.07, - ["CD"] = 0, - }, - [42] = { - ["X"] = 41.83, - ["Y"] = 31.77, - ["CD"] = 0, - }, - [43] = { - ["X"] = 39.88, - ["Y"] = 32.15, - ["CD"] = 0, - }, - [44] = { - ["X"] = 70.79, - ["Y"] = 32.33, - ["CD"] = 0, - }, - [45] = { - ["X"] = 80.51, - ["Y"] = 32.74, - ["CD"] = 0, - }, - [46] = { - ["X"] = 49.3, - ["Y"] = 34.1, - ["CD"] = 0, - }, - [47] = { - ["X"] = 57.14, - ["Y"] = 34.51, - ["CD"] = 0, - }, - [48] = { - ["X"] = 52.74, - ["Y"] = 35.35, - ["CD"] = 0, - }, - [49] = { - ["X"] = 76.74, - ["Y"] = 35.56, - ["CD"] = 0, - }, - [50] = { - ["X"] = 80.67, - ["Y"] = 36.13, - ["CD"] = 0, - }, - [51] = { - ["X"] = 54.29, - ["Y"] = 36.3, - ["CD"] = 0, - }, - [52] = { - ["X"] = 63.46, - ["Y"] = 37.24, - ["CD"] = 0, - }, - [53] = { - ["X"] = 48.37, - ["Y"] = 37.64, - ["CD"] = 0, - }, - [54] = { - ["X"] = 59.6, - ["Y"] = 37.65, - ["CD"] = 0, - }, - [55] = { - ["X"] = 62.06, - ["Y"] = 39.08, - ["CD"] = 0, - }, - [56] = { - ["X"] = 63.16, - ["Y"] = 41.04, - ["CD"] = 0, - }, - [57] = { - ["X"] = 73.26, - ["Y"] = 44.09, - ["CD"] = 0, - }, - [58] = { - ["X"] = 78.92, - ["Y"] = 46.11, - ["CD"] = 0, - }, - [59] = { - ["X"] = 77.01, - ["Y"] = 46.13, - ["CD"] = 0, - }, - [60] = { - ["X"] = 33.74, - ["Y"] = 49.57, - ["CD"] = 0, - }, - [61] = { - ["X"] = 45.59, - ["Y"] = 51.47, - ["CD"] = 0, - }, - [62] = { - ["X"] = 47.86, - ["Y"] = 52.09, - ["CD"] = 0, - }, - [63] = { - ["X"] = 62.04, - ["Y"] = 52.55, - ["CD"] = 0, - }, - [64] = { - ["X"] = 34.18, - ["Y"] = 52.57, - ["CD"] = 0, - }, - [65] = { - ["X"] = 65.4, - ["Y"] = 52.87, - ["CD"] = 0, - }, - [66] = { - ["X"] = 27.04, - ["Y"] = 54.05, - ["CD"] = 0, - }, - [67] = { - ["X"] = 36.31, - ["Y"] = 54.73, - ["CD"] = 0, - }, - [68] = { - ["X"] = 51.98, - ["Y"] = 55.1, - ["CD"] = 0, - }, - [69] = { - ["X"] = 48.12, - ["Y"] = 55.31, - ["CD"] = 0, - }, - [70] = { - ["X"] = 37.92, - ["Y"] = 55.59, - ["CD"] = 0, - }, - [71] = { - ["X"] = 74.95, - ["Y"] = 56.13, - ["CD"] = 0, - }, - [72] = { - ["X"] = 30.04, - ["Y"] = 56.53, - ["CD"] = 0, - }, - [73] = { - ["X"] = 61.99, - ["Y"] = 56.71, - ["CD"] = 0, - }, - [74] = { - ["X"] = 69.7, - ["Y"] = 57.75, - ["CD"] = 0, - }, - [75] = { - ["X"] = 54.79, - ["Y"] = 57.83, - ["CD"] = 0, - }, - [76] = { - ["X"] = 67.24, - ["Y"] = 59.12, - ["CD"] = 0, - }, - [77] = { - ["X"] = 76.05, - ["Y"] = 59.6, - ["CD"] = 0, - }, - [78] = { - ["X"] = 72.36, - ["Y"] = 60.75, - ["CD"] = 0, - }, - [79] = { - ["X"] = 62.74, - ["Y"] = 61.55, - ["CD"] = 0, - }, - [80] = { - ["X"] = 62.03, - ["Y"] = 62.69, - ["CD"] = 0, - }, - [81] = { - ["X"] = 66.82, - ["Y"] = 63.01, - ["CD"] = 0, - }, - [82] = { - ["X"] = 45.11, - ["Y"] = 63.88, - ["CD"] = 0, - }, - [83] = { - ["X"] = 65.65, - ["Y"] = 64.91, - ["CD"] = 0, - }, - [84] = { - ["X"] = 56.75, - ["Y"] = 65.1, - ["CD"] = 0, - }, - [85] = { - ["X"] = 47.18, - ["Y"] = 66.8, - ["CD"] = 0, - }, - [86] = { - ["X"] = 31.26, - ["Y"] = 69.12, - ["CD"] = 0, - }, - [87] = { - ["X"] = 71.62, - ["Y"] = 69.16, - ["CD"] = 0, - }, - [88] = { - ["X"] = 73.1, - ["Y"] = 69.47, - ["CD"] = 0, - }, - [89] = { - ["X"] = 73.3, - ["Y"] = 69.58, - ["CD"] = 0, - }, - [90] = { - ["X"] = 74.88, - ["Y"] = 69.89, - ["CD"] = 0, - }, - [91] = { - ["X"] = 45.79, - ["Y"] = 71.62, - ["CD"] = 0, - }, - [92] = { - ["X"] = 52, - ["Y"] = 71.8, - ["CD"] = 0, - }, - [93] = { - ["X"] = 68.34, - ["Y"] = 72.44, - ["CD"] = 0, - }, - [94] = { - ["X"] = 71.3, - ["Y"] = 73.69, - ["CD"] = 0, - }, - [95] = { - ["X"] = 33.94, - ["Y"] = 74.21, - ["CD"] = 0, - }, - [96] = { - ["X"] = 58.95, - ["Y"] = 75.18, - ["CD"] = 0, - }, - [97] = { - ["X"] = 33.51, - ["Y"] = 76.63, - ["CD"] = 0, - }, - [98] = { - ["X"] = 36.2, - ["Y"] = 77.89, - ["CD"] = 0, - }, - [99] = { - ["X"] = 59.41, - ["Y"] = 80.88, - ["CD"] = 0, - }, -} -aura_env.cooldown = 600 -aura_env.wipeDistance = 15 -aura_env.angle = 0 -aura_env.hyp = 0 -aura_env.GetClosestHerb = function() - aura_env.minID = { - ["X"] = 0, - ["Y"] = 0, - ["D"] = 1000, - ["ID"] = 0, - } - local pX = GetPlayerMapPosition("player") or 0 - local pY = select(2, GetPlayerMapPosition("player")) or 0 - pX, pY = pX * 100, pY * 100 - for k, v in ipairs(aura_env.herbs) do - local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] - if cd == 0 then - local X, Y = pX - hX, pY - hY - local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) - if hyp < aura_env.minID["D"] then - aura_env.minID["X"] = hX - aura_env.minID["Y"] = hY - aura_env.minID["D"] = hyp - aura_env.minID["ID"] = k - end - end - end - return aura_env.minID["ID"] -end +aura_env.herbs = { + [1] = { + ["X"] = 27.74, + ["Y"] = 4.93, + ["CD"] = 0, + }, + [2] = { + ["X"] = 29.58, + ["Y"] = 6.12, + ["CD"] = 0, + }, + [3] = { + ["X"] = 38.4, + ["Y"] = 7.32, + ["CD"] = 0, + }, + [4] = { + ["X"] = 69.23, + ["Y"] = 9.55, + ["CD"] = 0, + }, + [5] = { + ["X"] = 28.91, + ["Y"] = 10.34, + ["CD"] = 0, + }, + [6] = { + ["X"] = 44.79, + ["Y"] = 10.41, + ["CD"] = 0, + }, + [7] = { + ["X"] = 37.41, + ["Y"] = 11.88, + ["CD"] = 0, + }, + [8] = { + ["X"] = 72.67, + ["Y"] = 12.41, + ["CD"] = 0, + }, + [9] = { + ["X"] = 41.67, + ["Y"] = 13.07, + ["CD"] = 0, + }, + [10] = { + ["X"] = 26.58, + ["Y"] = 13.11, + ["CD"] = 0, + }, + [11] = { + ["X"] = 28.54, + ["Y"] = 13.24, + ["CD"] = 0, + }, + [12] = { + ["X"] = 45.56, + ["Y"] = 13.29, + ["CD"] = 0, + }, + [13] = { + ["X"] = 22.63, + ["Y"] = 13.55, + ["CD"] = 0, + }, + [14] = { + ["X"] = 53.24, + ["Y"] = 13.86, + ["CD"] = 0, + }, + [15] = { + ["X"] = 51.44, + ["Y"] = 14.17, + ["CD"] = 0, + }, + [16] = { + ["X"] = 38.37, + ["Y"] = 14.38, + ["CD"] = 0, + }, + [17] = { + ["X"] = 55.34, + ["Y"] = 14.84, + ["CD"] = 0, + }, + [18] = { + ["X"] = 26.76, + ["Y"] = 15.08, + ["CD"] = 0, + }, + [19] = { + ["X"] = 41.32, + ["Y"] = 15.19, + ["CD"] = 0, + }, + [20] = { + ["X"] = 66.81, + ["Y"] = 15.81, + ["CD"] = 0, + }, + [21] = { + ["X"] = 27.83, + ["Y"] = 15.83, + ["CD"] = 0, + }, + [22] = { + ["X"] = 23.6, + ["Y"] = 16.11, + ["CD"] = 0, + }, + [23] = { + ["X"] = 23.6, + ["Y"] = 17.59, + ["CD"] = 0, + }, + [24] = { + ["X"] = 38.18, + ["Y"] = 18.83, + ["CD"] = 0, + }, + [25] = { + ["X"] = 73.67, + ["Y"] = 19.46, + ["CD"] = 0, + }, + [26] = { + ["X"] = 22.28, + ["Y"] = 20.14, + ["CD"] = 0, + }, + [27] = { + ["X"] = 25.66, + ["Y"] = 20.87, + ["CD"] = 0, + }, + [28] = { + ["X"] = 27.86, + ["Y"] = 22.53, + ["CD"] = 0, + }, + [29] = { + ["X"] = 18.83, + ["Y"] = 22.91, + ["CD"] = 0, + }, + [30] = { + ["X"] = 20.68, + ["Y"] = 22.93, + ["CD"] = 0, + }, + [31] = { + ["X"] = 63.97, + ["Y"] = 23.14, + ["CD"] = 0, + }, + [32] = { + ["X"] = 62.08, + ["Y"] = 24.13, + ["CD"] = 0, + }, + [33] = { + ["X"] = 70.37, + ["Y"] = 24.32, + ["CD"] = 0, + }, + [34] = { + ["X"] = 59.66, + ["Y"] = 26.14, + ["CD"] = 0, + }, + [35] = { + ["X"] = 72.01, + ["Y"] = 26.52, + ["CD"] = 0, + }, + [36] = { + ["X"] = 22.03, + ["Y"] = 27.14, + ["CD"] = 0, + }, + [37] = { + ["X"] = 68.73, + ["Y"] = 28.05, + ["CD"] = 0, + }, + [38] = { + ["X"] = 26.28, + ["Y"] = 28.6, + ["CD"] = 0, + }, + [39] = { + ["X"] = 37.73, + ["Y"] = 30.5, + ["CD"] = 0, + }, + [40] = { + ["X"] = 50.71, + ["Y"] = 30.77, + ["CD"] = 0, + }, + [41] = { + ["X"] = 26.52, + ["Y"] = 31.07, + ["CD"] = 0, + }, + [42] = { + ["X"] = 41.83, + ["Y"] = 31.77, + ["CD"] = 0, + }, + [43] = { + ["X"] = 39.88, + ["Y"] = 32.15, + ["CD"] = 0, + }, + [44] = { + ["X"] = 70.79, + ["Y"] = 32.33, + ["CD"] = 0, + }, + [45] = { + ["X"] = 80.51, + ["Y"] = 32.74, + ["CD"] = 0, + }, + [46] = { + ["X"] = 49.3, + ["Y"] = 34.1, + ["CD"] = 0, + }, + [47] = { + ["X"] = 57.14, + ["Y"] = 34.51, + ["CD"] = 0, + }, + [48] = { + ["X"] = 52.74, + ["Y"] = 35.35, + ["CD"] = 0, + }, + [49] = { + ["X"] = 76.74, + ["Y"] = 35.56, + ["CD"] = 0, + }, + [50] = { + ["X"] = 80.67, + ["Y"] = 36.13, + ["CD"] = 0, + }, + [51] = { + ["X"] = 54.29, + ["Y"] = 36.3, + ["CD"] = 0, + }, + [52] = { + ["X"] = 63.46, + ["Y"] = 37.24, + ["CD"] = 0, + }, + [53] = { + ["X"] = 48.37, + ["Y"] = 37.64, + ["CD"] = 0, + }, + [54] = { + ["X"] = 59.6, + ["Y"] = 37.65, + ["CD"] = 0, + }, + [55] = { + ["X"] = 62.06, + ["Y"] = 39.08, + ["CD"] = 0, + }, + [56] = { + ["X"] = 63.16, + ["Y"] = 41.04, + ["CD"] = 0, + }, + [57] = { + ["X"] = 73.26, + ["Y"] = 44.09, + ["CD"] = 0, + }, + [58] = { + ["X"] = 78.92, + ["Y"] = 46.11, + ["CD"] = 0, + }, + [59] = { + ["X"] = 77.01, + ["Y"] = 46.13, + ["CD"] = 0, + }, + [60] = { + ["X"] = 33.74, + ["Y"] = 49.57, + ["CD"] = 0, + }, + [61] = { + ["X"] = 45.59, + ["Y"] = 51.47, + ["CD"] = 0, + }, + [62] = { + ["X"] = 47.86, + ["Y"] = 52.09, + ["CD"] = 0, + }, + [63] = { + ["X"] = 62.04, + ["Y"] = 52.55, + ["CD"] = 0, + }, + [64] = { + ["X"] = 34.18, + ["Y"] = 52.57, + ["CD"] = 0, + }, + [65] = { + ["X"] = 65.4, + ["Y"] = 52.87, + ["CD"] = 0, + }, + [66] = { + ["X"] = 27.04, + ["Y"] = 54.05, + ["CD"] = 0, + }, + [67] = { + ["X"] = 36.31, + ["Y"] = 54.73, + ["CD"] = 0, + }, + [68] = { + ["X"] = 51.98, + ["Y"] = 55.1, + ["CD"] = 0, + }, + [69] = { + ["X"] = 48.12, + ["Y"] = 55.31, + ["CD"] = 0, + }, + [70] = { + ["X"] = 37.92, + ["Y"] = 55.59, + ["CD"] = 0, + }, + [71] = { + ["X"] = 74.95, + ["Y"] = 56.13, + ["CD"] = 0, + }, + [72] = { + ["X"] = 30.04, + ["Y"] = 56.53, + ["CD"] = 0, + }, + [73] = { + ["X"] = 61.99, + ["Y"] = 56.71, + ["CD"] = 0, + }, + [74] = { + ["X"] = 69.7, + ["Y"] = 57.75, + ["CD"] = 0, + }, + [75] = { + ["X"] = 54.79, + ["Y"] = 57.83, + ["CD"] = 0, + }, + [76] = { + ["X"] = 67.24, + ["Y"] = 59.12, + ["CD"] = 0, + }, + [77] = { + ["X"] = 76.05, + ["Y"] = 59.6, + ["CD"] = 0, + }, + [78] = { + ["X"] = 72.36, + ["Y"] = 60.75, + ["CD"] = 0, + }, + [79] = { + ["X"] = 62.74, + ["Y"] = 61.55, + ["CD"] = 0, + }, + [80] = { + ["X"] = 62.03, + ["Y"] = 62.69, + ["CD"] = 0, + }, + [81] = { + ["X"] = 66.82, + ["Y"] = 63.01, + ["CD"] = 0, + }, + [82] = { + ["X"] = 45.11, + ["Y"] = 63.88, + ["CD"] = 0, + }, + [83] = { + ["X"] = 65.65, + ["Y"] = 64.91, + ["CD"] = 0, + }, + [84] = { + ["X"] = 56.75, + ["Y"] = 65.1, + ["CD"] = 0, + }, + [85] = { + ["X"] = 47.18, + ["Y"] = 66.8, + ["CD"] = 0, + }, + [86] = { + ["X"] = 31.26, + ["Y"] = 69.12, + ["CD"] = 0, + }, + [87] = { + ["X"] = 71.62, + ["Y"] = 69.16, + ["CD"] = 0, + }, + [88] = { + ["X"] = 73.1, + ["Y"] = 69.47, + ["CD"] = 0, + }, + [89] = { + ["X"] = 73.3, + ["Y"] = 69.58, + ["CD"] = 0, + }, + [90] = { + ["X"] = 74.88, + ["Y"] = 69.89, + ["CD"] = 0, + }, + [91] = { + ["X"] = 45.79, + ["Y"] = 71.62, + ["CD"] = 0, + }, + [92] = { + ["X"] = 52, + ["Y"] = 71.8, + ["CD"] = 0, + }, + [93] = { + ["X"] = 68.34, + ["Y"] = 72.44, + ["CD"] = 0, + }, + [94] = { + ["X"] = 71.3, + ["Y"] = 73.69, + ["CD"] = 0, + }, + [95] = { + ["X"] = 33.94, + ["Y"] = 74.21, + ["CD"] = 0, + }, + [96] = { + ["X"] = 58.95, + ["Y"] = 75.18, + ["CD"] = 0, + }, + [97] = { + ["X"] = 33.51, + ["Y"] = 76.63, + ["CD"] = 0, + }, + [98] = { + ["X"] = 36.2, + ["Y"] = 77.89, + ["CD"] = 0, + }, + [99] = { + ["X"] = 59.41, + ["Y"] = 80.88, + ["CD"] = 0, + }, +} +aura_env.cooldown = 600 +aura_env.wipeDistance = 15 +aura_env.angle = 0 +aura_env.hyp = 0 +aura_env.GetClosestHerb = function() + aura_env.minID = { + ["X"] = 0, + ["Y"] = 0, + ["D"] = 1000, + ["ID"] = 0, + } + local pX = GetPlayerMapPosition("player") or 0 + local pY = select(2, GetPlayerMapPosition("player")) or 0 + pX, pY = pX * 100, pY * 100 + for k, v in ipairs(aura_env.herbs) do + local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] + if cd == 0 then + local X, Y = pX - hX, pY - hY + local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) + if hyp < aura_env.minID["D"] then + aura_env.minID["X"] = hX + aura_env.minID["Y"] = hY + aura_env.minID["D"] = hyp + aura_env.minID["ID"] = k + end + end + end + return aura_env.minID["ID"] +end diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Cobalt - Rich - Zul'Drak.lua b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Mining/Cobalt - Rich - Zul'Drak.lua similarity index 93% rename from Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Cobalt - Rich - Zul'Drak.lua rename to WeakAuras/Projects/Herb Sniffer/Herb Arrays/Mining/Cobalt - Rich - Zul'Drak.lua index 40e5556..0b84717 100644 --- a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Cobalt - Rich - Zul'Drak.lua +++ b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Mining/Cobalt - Rich - Zul'Drak.lua @@ -1,186 +1,186 @@ -aura_env.herbs = { - [1] = { - ["X"] = 62.63, - ["Y"] = 80.15, - ["CD"] = 0, - }, - [2] = { - ["X"] = 61.03, - ["Y"] = 83.67, - ["CD"] = 0, - }, - [3] = { - ["X"] = 60.11, - ["Y"] = 80.98, - ["CD"] = 0, - }, - [4] = { - ["X"] = 59.29, - ["Y"] = 77.46, - ["CD"] = 0, - }, - [5] = { - ["X"] = 56.55, - ["Y"] = 77.25, - ["CD"] = 0, - }, - [6] = { - ["X"] = 56.87, - ["Y"] = 75.77, - ["CD"] = 0, - }, - [7] = { - ["X"] = 51.04, - ["Y"] = 72.92, - ["CD"] = 0, - }, - [8] = { - ["X"] = 45.02, - ["Y"] = 70.03, - ["CD"] = 0, - }, - [9] = { - ["X"] = 72.27, - ["Y"] = 20.18, - ["CD"] = 0, - }, - [10] = { - ["X"] = 75.45, - ["Y"] = 17.55, - ["CD"] = 0, - }, - [11] = { - ["X"] = 76.63, - ["Y"] = 19.67, - ["CD"] = 0, - }, - [12] = { - ["X"] = 75.67, - ["Y"] = 21.71, - ["CD"] = 0, - }, - [13] = { - ["X"] = 73.78, - ["Y"] = 24.85, - ["CD"] = 0, - }, - [14] = { - ["X"] = 70.92, - ["Y"] = 34.01, - ["CD"] = 0, - }, - [15] = { - ["X"] = 65.32, - ["Y"] = 47.25, - ["CD"] = 0, - }, - [16] = { - ["X"] = 69.86, - ["Y"] = 52.11, - ["CD"] = 0, - }, - [17] = { - ["X"] = 74.82, - ["Y"] = 57.8, - ["CD"] = 0, - }, - [18] = { - ["X"] = 73.72, - ["Y"] = 55.53, - ["CD"] = 0, - }, - [19] = { - ["X"] = 75.55, - ["Y"] = 56.07, - ["CD"] = 0, - }, - [20] = { - ["X"] = 78.32, - ["Y"] = 59.4, - ["CD"] = 0, - }, - [21] = { - ["X"] = 77.23, - ["Y"] = 61.88, - ["CD"] = 0, - }, - [22] = { - ["X"] = 75.08, - ["Y"] = 61.89, - ["CD"] = 0, - }, - [23] = { - ["X"] = 72.99, - ["Y"] = 62.81, - ["CD"] = 0, - }, - [24] = { - ["X"] = 71.3, - ["Y"] = 63.82, - ["CD"] = 0, - }, - [25] = { - ["X"] = 68.84, - ["Y"] = 59.76, - ["CD"] = 0, - }, - [26] = { - ["X"] = 68.09, - ["Y"] = 59.63, - ["CD"] = 0, - }, - [27] = { - ["X"] = 67.89, - ["Y"] = 59.57, - ["CD"] = 0, - }, - [28] = { - ["X"] = 42.19, - ["Y"] = 84.08, - ["CD"] = 0, - }, - [29] = { - ["X"] = 34.22, - ["Y"] = 48.33, - ["CD"] = 0, - }, - [30] = { - ["X"] = 34.19, - ["Y"] = 42.54, - ["CD"] = 0, - }, - [31] = { - ["X"] = 19.86, - ["Y"] = 48.49, - ["CD"] = 0, - }, -} -aura_env.cooldown = 600 -aura_env.wipeDistance = 15 -aura_env.angle = 0 -aura_env.hyp = 0 -aura_env.GetClosestHerb = function() - aura_env.minID = { - ["X"] = 0, - ["Y"] = 0, - ["D"] = 1000, - ["ID"] = 0, - } - local pX = GetPlayerMapPosition("player") or 0 - local pY = select(2, GetPlayerMapPosition("player")) or 0 - pX, pY = pX * 100, pY * 100 - for k, v in ipairs(aura_env.herbs) do - local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] - if cd == 0 then - local X, Y = pX - hX, pY - hY - local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) - if hyp < aura_env.minID["D"] then - aura_env.minID["X"] = hX - aura_env.minID["Y"] = hY - aura_env.minID["D"] = hyp - aura_env.minID["ID"] = k - end - end - end - return aura_env.minID["ID"] -end +aura_env.herbs = { + [1] = { + ["X"] = 62.63, + ["Y"] = 80.15, + ["CD"] = 0, + }, + [2] = { + ["X"] = 61.03, + ["Y"] = 83.67, + ["CD"] = 0, + }, + [3] = { + ["X"] = 60.11, + ["Y"] = 80.98, + ["CD"] = 0, + }, + [4] = { + ["X"] = 59.29, + ["Y"] = 77.46, + ["CD"] = 0, + }, + [5] = { + ["X"] = 56.55, + ["Y"] = 77.25, + ["CD"] = 0, + }, + [6] = { + ["X"] = 56.87, + ["Y"] = 75.77, + ["CD"] = 0, + }, + [7] = { + ["X"] = 51.04, + ["Y"] = 72.92, + ["CD"] = 0, + }, + [8] = { + ["X"] = 45.02, + ["Y"] = 70.03, + ["CD"] = 0, + }, + [9] = { + ["X"] = 72.27, + ["Y"] = 20.18, + ["CD"] = 0, + }, + [10] = { + ["X"] = 75.45, + ["Y"] = 17.55, + ["CD"] = 0, + }, + [11] = { + ["X"] = 76.63, + ["Y"] = 19.67, + ["CD"] = 0, + }, + [12] = { + ["X"] = 75.67, + ["Y"] = 21.71, + ["CD"] = 0, + }, + [13] = { + ["X"] = 73.78, + ["Y"] = 24.85, + ["CD"] = 0, + }, + [14] = { + ["X"] = 70.92, + ["Y"] = 34.01, + ["CD"] = 0, + }, + [15] = { + ["X"] = 65.32, + ["Y"] = 47.25, + ["CD"] = 0, + }, + [16] = { + ["X"] = 69.86, + ["Y"] = 52.11, + ["CD"] = 0, + }, + [17] = { + ["X"] = 74.82, + ["Y"] = 57.8, + ["CD"] = 0, + }, + [18] = { + ["X"] = 73.72, + ["Y"] = 55.53, + ["CD"] = 0, + }, + [19] = { + ["X"] = 75.55, + ["Y"] = 56.07, + ["CD"] = 0, + }, + [20] = { + ["X"] = 78.32, + ["Y"] = 59.4, + ["CD"] = 0, + }, + [21] = { + ["X"] = 77.23, + ["Y"] = 61.88, + ["CD"] = 0, + }, + [22] = { + ["X"] = 75.08, + ["Y"] = 61.89, + ["CD"] = 0, + }, + [23] = { + ["X"] = 72.99, + ["Y"] = 62.81, + ["CD"] = 0, + }, + [24] = { + ["X"] = 71.3, + ["Y"] = 63.82, + ["CD"] = 0, + }, + [25] = { + ["X"] = 68.84, + ["Y"] = 59.76, + ["CD"] = 0, + }, + [26] = { + ["X"] = 68.09, + ["Y"] = 59.63, + ["CD"] = 0, + }, + [27] = { + ["X"] = 67.89, + ["Y"] = 59.57, + ["CD"] = 0, + }, + [28] = { + ["X"] = 42.19, + ["Y"] = 84.08, + ["CD"] = 0, + }, + [29] = { + ["X"] = 34.22, + ["Y"] = 48.33, + ["CD"] = 0, + }, + [30] = { + ["X"] = 34.19, + ["Y"] = 42.54, + ["CD"] = 0, + }, + [31] = { + ["X"] = 19.86, + ["Y"] = 48.49, + ["CD"] = 0, + }, +} +aura_env.cooldown = 600 +aura_env.wipeDistance = 15 +aura_env.angle = 0 +aura_env.hyp = 0 +aura_env.GetClosestHerb = function() + aura_env.minID = { + ["X"] = 0, + ["Y"] = 0, + ["D"] = 1000, + ["ID"] = 0, + } + local pX = GetPlayerMapPosition("player") or 0 + local pY = select(2, GetPlayerMapPosition("player")) or 0 + pX, pY = pX * 100, pY * 100 + for k, v in ipairs(aura_env.herbs) do + local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] + if cd == 0 then + local X, Y = pX - hX, pY - hY + local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) + if hyp < aura_env.minID["D"] then + aura_env.minID["X"] = hX + aura_env.minID["Y"] = hY + aura_env.minID["D"] = hyp + aura_env.minID["ID"] = k + end + end + end + return aura_env.minID["ID"] +end diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Cobalt - Zul'Drak.lua b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Mining/Cobalt - Zul'Drak.lua similarity index 93% rename from Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Cobalt - Zul'Drak.lua rename to WeakAuras/Projects/Herb Sniffer/Herb Arrays/Mining/Cobalt - Zul'Drak.lua index 3ed6c3b..49b8843 100644 --- a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Cobalt - Zul'Drak.lua +++ b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Mining/Cobalt - Zul'Drak.lua @@ -1,431 +1,431 @@ -aura_env.herbs = { - [1] = { - ["X"] = 14.35, - ["Y"] = 76.35, - ["CD"] = 0, - }, - [2] = { - ["X"] = 25.28, - ["Y"] = 79.69, - ["CD"] = 0, - }, - [3] = { - ["X"] = 28.67, - ["Y"] = 77.03, - ["CD"] = 0, - }, - [4] = { - ["X"] = 31.66, - ["Y"] = 55.57, - ["CD"] = 0, - }, - [5] = { - ["X"] = 33.42, - ["Y"] = 64.79, - ["CD"] = 0, - }, - [6] = { - ["X"] = 41.99, - ["Y"] = 64.58, - ["CD"] = 0, - }, - [7] = { - ["X"] = 48.03, - ["Y"] = 62.96, - ["CD"] = 0, - }, - [8] = { - ["X"] = 58.05, - ["Y"] = 68.72, - ["CD"] = 0, - }, - [9] = { - ["X"] = 60.82, - ["Y"] = 59.27, - ["CD"] = 0, - }, - [10] = { - ["X"] = 69.4, - ["Y"] = 18.06, - ["CD"] = 0, - }, - [11] = { - ["X"] = 64.09, - ["Y"] = 33.24, - ["CD"] = 0, - }, - [12] = { - ["X"] = 25.89, - ["Y"] = 52.4, - ["CD"] = 0, - }, - [13] = { - ["X"] = 12.88, - ["Y"] = 53.56, - ["CD"] = 0, - }, - [14] = { - ["X"] = 11.28, - ["Y"] = 76.14, - ["CD"] = 0, - }, - [15] = { - ["X"] = 16.6, - ["Y"] = 76.51, - ["CD"] = 0, - }, - [16] = { - ["X"] = 33.37, - ["Y"] = 67.96, - ["CD"] = 0, - }, - [17] = { - ["X"] = 36.36, - ["Y"] = 76.93, - ["CD"] = 0, - }, - [18] = { - ["X"] = 30.05, - ["Y"] = 26.97, - ["CD"] = 0, - }, - [19] = { - ["X"] = 31.46, - ["Y"] = 25.61, - ["CD"] = 0, - }, - [20] = { - ["X"] = 29.86, - ["Y"] = 26.25, - ["CD"] = 0, - }, - [21] = { - ["X"] = 32.14, - ["Y"] = 25.25, - ["CD"] = 0, - }, - [22] = { - ["X"] = 30.97, - ["Y"] = 60.08, - ["CD"] = 0, - }, - [23] = { - ["X"] = 32.46, - ["Y"] = 62.51, - ["CD"] = 0, - }, - [24] = { - ["X"] = 71.46, - ["Y"] = 26.17, - ["CD"] = 0, - }, - [25] = { - ["X"] = 70.67, - ["Y"] = 26.16, - ["CD"] = 0, - }, - [26] = { - ["X"] = 90.04, - ["Y"] = 50.75, - ["CD"] = 0, - }, - [27] = { - ["X"] = 90.84, - ["Y"] = 50.84, - ["CD"] = 0, - }, - [28] = { - ["X"] = 88.81, - ["Y"] = 61.52, - ["CD"] = 0, - }, - [29] = { - ["X"] = 78.92, - ["Y"] = 61.4, - ["CD"] = 0, - }, - [30] = { - ["X"] = 82.26, - ["Y"] = 59.77, - ["CD"] = 0, - }, - [31] = { - ["X"] = 85.43, - ["Y"] = 57.03, - ["CD"] = 0, - }, - [32] = { - ["X"] = 74.46, - ["Y"] = 28.13, - ["CD"] = 0, - }, - [33] = { - ["X"] = 69.36, - ["Y"] = 25.49, - ["CD"] = 0, - }, - [34] = { - ["X"] = 73.21, - ["Y"] = 26.13, - ["CD"] = 0, - }, - [35] = { - ["X"] = 56.52, - ["Y"] = 35.9, - ["CD"] = 0, - }, - [36] = { - ["X"] = 57.94, - ["Y"] = 33.32, - ["CD"] = 0, - }, - [37] = { - ["X"] = 55.19, - ["Y"] = 32.83, - ["CD"] = 0, - }, - [38] = { - ["X"] = 54.89, - ["Y"] = 37.13, - ["CD"] = 0, - }, - [39] = { - ["X"] = 51.74, - ["Y"] = 38.92, - ["CD"] = 0, - }, - [40] = { - ["X"] = 52.5, - ["Y"] = 38.18, - ["CD"] = 0, - }, - [41] = { - ["X"] = 49.22, - ["Y"] = 43.37, - ["CD"] = 0, - }, - [42] = { - ["X"] = 49.78, - ["Y"] = 50.78, - ["CD"] = 0, - }, - [43] = { - ["X"] = 45.13, - ["Y"] = 52.25, - ["CD"] = 0, - }, - [44] = { - ["X"] = 45.02, - ["Y"] = 47.11, - ["CD"] = 0, - }, - [45] = { - ["X"] = 31.45, - ["Y"] = 55.09, - ["CD"] = 0, - }, - [46] = { - ["X"] = 30.49, - ["Y"] = 60.35, - ["CD"] = 0, - }, - [47] = { - ["X"] = 26.19, - ["Y"] = 62.12, - ["CD"] = 0, - }, - [48] = { - ["X"] = 19.5, - ["Y"] = 61.05, - ["CD"] = 0, - }, - [49] = { - ["X"] = 21.36, - ["Y"] = 56.44, - ["CD"] = 0, - }, - [50] = { - ["X"] = 62.63, - ["Y"] = 80.15, - ["CD"] = 0, - }, - [51] = { - ["X"] = 61.03, - ["Y"] = 83.67, - ["CD"] = 0, - }, - [52] = { - ["X"] = 60.11, - ["Y"] = 80.98, - ["CD"] = 0, - }, - [53] = { - ["X"] = 59.29, - ["Y"] = 77.46, - ["CD"] = 0, - }, - [54] = { - ["X"] = 56.55, - ["Y"] = 77.25, - ["CD"] = 0, - }, - [55] = { - ["X"] = 56.87, - ["Y"] = 75.77, - ["CD"] = 0, - }, - [56] = { - ["X"] = 51.04, - ["Y"] = 72.92, - ["CD"] = 0, - }, - [57] = { - ["X"] = 45.02, - ["Y"] = 70.03, - ["CD"] = 0, - }, - [58] = { - ["X"] = 72.27, - ["Y"] = 20.18, - ["CD"] = 0, - }, - [59] = { - ["X"] = 75.45, - ["Y"] = 17.55, - ["CD"] = 0, - }, - [60] = { - ["X"] = 76.63, - ["Y"] = 19.67, - ["CD"] = 0, - }, - [61] = { - ["X"] = 75.67, - ["Y"] = 21.71, - ["CD"] = 0, - }, - [62] = { - ["X"] = 73.78, - ["Y"] = 24.85, - ["CD"] = 0, - }, - [63] = { - ["X"] = 70.92, - ["Y"] = 34.01, - ["CD"] = 0, - }, - [64] = { - ["X"] = 65.32, - ["Y"] = 47.25, - ["CD"] = 0, - }, - [65] = { - ["X"] = 69.86, - ["Y"] = 52.11, - ["CD"] = 0, - }, - [66] = { - ["X"] = 74.82, - ["Y"] = 57.8, - ["CD"] = 0, - }, - [67] = { - ["X"] = 73.72, - ["Y"] = 55.53, - ["CD"] = 0, - }, - [68] = { - ["X"] = 75.55, - ["Y"] = 56.07, - ["CD"] = 0, - }, - [69] = { - ["X"] = 78.32, - ["Y"] = 59.4, - ["CD"] = 0, - }, - [70] = { - ["X"] = 77.23, - ["Y"] = 61.88, - ["CD"] = 0, - }, - [71] = { - ["X"] = 75.08, - ["Y"] = 61.89, - ["CD"] = 0, - }, - [72] = { - ["X"] = 72.99, - ["Y"] = 62.81, - ["CD"] = 0, - }, - [73] = { - ["X"] = 71.3, - ["Y"] = 63.82, - ["CD"] = 0, - }, - [74] = { - ["X"] = 68.84, - ["Y"] = 59.76, - ["CD"] = 0, - }, - [75] = { - ["X"] = 68.09, - ["Y"] = 59.63, - ["CD"] = 0, - }, - [76] = { - ["X"] = 67.89, - ["Y"] = 59.57, - ["CD"] = 0, - }, - [77] = { - ["X"] = 42.19, - ["Y"] = 84.08, - ["CD"] = 0, - }, - [78] = { - ["X"] = 34.22, - ["Y"] = 48.33, - ["CD"] = 0, - }, - [79] = { - ["X"] = 34.19, - ["Y"] = 42.54, - ["CD"] = 0, - }, - [80] = { - ["X"] = 19.86, - ["Y"] = 48.49, - ["CD"] = 0, - }, -} -aura_env.cooldown = 600 -aura_env.wipeDistance = 15 -aura_env.angle = 0 -aura_env.hyp = 0 -aura_env.GetClosestHerb = function() - aura_env.minID = { - ["X"] = 0, - ["Y"] = 0, - ["D"] = 1000, - ["ID"] = 0, - } - local pX = GetPlayerMapPosition("player") or 0 - local pY = select(2, GetPlayerMapPosition("player")) or 0 - pX, pY = pX * 100, pY * 100 - for k, v in ipairs(aura_env.herbs) do - local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] - if cd == 0 then - local X, Y = pX - hX, pY - hY - local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) - if hyp < aura_env.minID["D"] then - aura_env.minID["X"] = hX - aura_env.minID["Y"] = hY - aura_env.minID["D"] = hyp - aura_env.minID["ID"] = k - end - end - end - return aura_env.minID["ID"] -end +aura_env.herbs = { + [1] = { + ["X"] = 14.35, + ["Y"] = 76.35, + ["CD"] = 0, + }, + [2] = { + ["X"] = 25.28, + ["Y"] = 79.69, + ["CD"] = 0, + }, + [3] = { + ["X"] = 28.67, + ["Y"] = 77.03, + ["CD"] = 0, + }, + [4] = { + ["X"] = 31.66, + ["Y"] = 55.57, + ["CD"] = 0, + }, + [5] = { + ["X"] = 33.42, + ["Y"] = 64.79, + ["CD"] = 0, + }, + [6] = { + ["X"] = 41.99, + ["Y"] = 64.58, + ["CD"] = 0, + }, + [7] = { + ["X"] = 48.03, + ["Y"] = 62.96, + ["CD"] = 0, + }, + [8] = { + ["X"] = 58.05, + ["Y"] = 68.72, + ["CD"] = 0, + }, + [9] = { + ["X"] = 60.82, + ["Y"] = 59.27, + ["CD"] = 0, + }, + [10] = { + ["X"] = 69.4, + ["Y"] = 18.06, + ["CD"] = 0, + }, + [11] = { + ["X"] = 64.09, + ["Y"] = 33.24, + ["CD"] = 0, + }, + [12] = { + ["X"] = 25.89, + ["Y"] = 52.4, + ["CD"] = 0, + }, + [13] = { + ["X"] = 12.88, + ["Y"] = 53.56, + ["CD"] = 0, + }, + [14] = { + ["X"] = 11.28, + ["Y"] = 76.14, + ["CD"] = 0, + }, + [15] = { + ["X"] = 16.6, + ["Y"] = 76.51, + ["CD"] = 0, + }, + [16] = { + ["X"] = 33.37, + ["Y"] = 67.96, + ["CD"] = 0, + }, + [17] = { + ["X"] = 36.36, + ["Y"] = 76.93, + ["CD"] = 0, + }, + [18] = { + ["X"] = 30.05, + ["Y"] = 26.97, + ["CD"] = 0, + }, + [19] = { + ["X"] = 31.46, + ["Y"] = 25.61, + ["CD"] = 0, + }, + [20] = { + ["X"] = 29.86, + ["Y"] = 26.25, + ["CD"] = 0, + }, + [21] = { + ["X"] = 32.14, + ["Y"] = 25.25, + ["CD"] = 0, + }, + [22] = { + ["X"] = 30.97, + ["Y"] = 60.08, + ["CD"] = 0, + }, + [23] = { + ["X"] = 32.46, + ["Y"] = 62.51, + ["CD"] = 0, + }, + [24] = { + ["X"] = 71.46, + ["Y"] = 26.17, + ["CD"] = 0, + }, + [25] = { + ["X"] = 70.67, + ["Y"] = 26.16, + ["CD"] = 0, + }, + [26] = { + ["X"] = 90.04, + ["Y"] = 50.75, + ["CD"] = 0, + }, + [27] = { + ["X"] = 90.84, + ["Y"] = 50.84, + ["CD"] = 0, + }, + [28] = { + ["X"] = 88.81, + ["Y"] = 61.52, + ["CD"] = 0, + }, + [29] = { + ["X"] = 78.92, + ["Y"] = 61.4, + ["CD"] = 0, + }, + [30] = { + ["X"] = 82.26, + ["Y"] = 59.77, + ["CD"] = 0, + }, + [31] = { + ["X"] = 85.43, + ["Y"] = 57.03, + ["CD"] = 0, + }, + [32] = { + ["X"] = 74.46, + ["Y"] = 28.13, + ["CD"] = 0, + }, + [33] = { + ["X"] = 69.36, + ["Y"] = 25.49, + ["CD"] = 0, + }, + [34] = { + ["X"] = 73.21, + ["Y"] = 26.13, + ["CD"] = 0, + }, + [35] = { + ["X"] = 56.52, + ["Y"] = 35.9, + ["CD"] = 0, + }, + [36] = { + ["X"] = 57.94, + ["Y"] = 33.32, + ["CD"] = 0, + }, + [37] = { + ["X"] = 55.19, + ["Y"] = 32.83, + ["CD"] = 0, + }, + [38] = { + ["X"] = 54.89, + ["Y"] = 37.13, + ["CD"] = 0, + }, + [39] = { + ["X"] = 51.74, + ["Y"] = 38.92, + ["CD"] = 0, + }, + [40] = { + ["X"] = 52.5, + ["Y"] = 38.18, + ["CD"] = 0, + }, + [41] = { + ["X"] = 49.22, + ["Y"] = 43.37, + ["CD"] = 0, + }, + [42] = { + ["X"] = 49.78, + ["Y"] = 50.78, + ["CD"] = 0, + }, + [43] = { + ["X"] = 45.13, + ["Y"] = 52.25, + ["CD"] = 0, + }, + [44] = { + ["X"] = 45.02, + ["Y"] = 47.11, + ["CD"] = 0, + }, + [45] = { + ["X"] = 31.45, + ["Y"] = 55.09, + ["CD"] = 0, + }, + [46] = { + ["X"] = 30.49, + ["Y"] = 60.35, + ["CD"] = 0, + }, + [47] = { + ["X"] = 26.19, + ["Y"] = 62.12, + ["CD"] = 0, + }, + [48] = { + ["X"] = 19.5, + ["Y"] = 61.05, + ["CD"] = 0, + }, + [49] = { + ["X"] = 21.36, + ["Y"] = 56.44, + ["CD"] = 0, + }, + [50] = { + ["X"] = 62.63, + ["Y"] = 80.15, + ["CD"] = 0, + }, + [51] = { + ["X"] = 61.03, + ["Y"] = 83.67, + ["CD"] = 0, + }, + [52] = { + ["X"] = 60.11, + ["Y"] = 80.98, + ["CD"] = 0, + }, + [53] = { + ["X"] = 59.29, + ["Y"] = 77.46, + ["CD"] = 0, + }, + [54] = { + ["X"] = 56.55, + ["Y"] = 77.25, + ["CD"] = 0, + }, + [55] = { + ["X"] = 56.87, + ["Y"] = 75.77, + ["CD"] = 0, + }, + [56] = { + ["X"] = 51.04, + ["Y"] = 72.92, + ["CD"] = 0, + }, + [57] = { + ["X"] = 45.02, + ["Y"] = 70.03, + ["CD"] = 0, + }, + [58] = { + ["X"] = 72.27, + ["Y"] = 20.18, + ["CD"] = 0, + }, + [59] = { + ["X"] = 75.45, + ["Y"] = 17.55, + ["CD"] = 0, + }, + [60] = { + ["X"] = 76.63, + ["Y"] = 19.67, + ["CD"] = 0, + }, + [61] = { + ["X"] = 75.67, + ["Y"] = 21.71, + ["CD"] = 0, + }, + [62] = { + ["X"] = 73.78, + ["Y"] = 24.85, + ["CD"] = 0, + }, + [63] = { + ["X"] = 70.92, + ["Y"] = 34.01, + ["CD"] = 0, + }, + [64] = { + ["X"] = 65.32, + ["Y"] = 47.25, + ["CD"] = 0, + }, + [65] = { + ["X"] = 69.86, + ["Y"] = 52.11, + ["CD"] = 0, + }, + [66] = { + ["X"] = 74.82, + ["Y"] = 57.8, + ["CD"] = 0, + }, + [67] = { + ["X"] = 73.72, + ["Y"] = 55.53, + ["CD"] = 0, + }, + [68] = { + ["X"] = 75.55, + ["Y"] = 56.07, + ["CD"] = 0, + }, + [69] = { + ["X"] = 78.32, + ["Y"] = 59.4, + ["CD"] = 0, + }, + [70] = { + ["X"] = 77.23, + ["Y"] = 61.88, + ["CD"] = 0, + }, + [71] = { + ["X"] = 75.08, + ["Y"] = 61.89, + ["CD"] = 0, + }, + [72] = { + ["X"] = 72.99, + ["Y"] = 62.81, + ["CD"] = 0, + }, + [73] = { + ["X"] = 71.3, + ["Y"] = 63.82, + ["CD"] = 0, + }, + [74] = { + ["X"] = 68.84, + ["Y"] = 59.76, + ["CD"] = 0, + }, + [75] = { + ["X"] = 68.09, + ["Y"] = 59.63, + ["CD"] = 0, + }, + [76] = { + ["X"] = 67.89, + ["Y"] = 59.57, + ["CD"] = 0, + }, + [77] = { + ["X"] = 42.19, + ["Y"] = 84.08, + ["CD"] = 0, + }, + [78] = { + ["X"] = 34.22, + ["Y"] = 48.33, + ["CD"] = 0, + }, + [79] = { + ["X"] = 34.19, + ["Y"] = 42.54, + ["CD"] = 0, + }, + [80] = { + ["X"] = 19.86, + ["Y"] = 48.49, + ["CD"] = 0, + }, +} +aura_env.cooldown = 600 +aura_env.wipeDistance = 15 +aura_env.angle = 0 +aura_env.hyp = 0 +aura_env.GetClosestHerb = function() + aura_env.minID = { + ["X"] = 0, + ["Y"] = 0, + ["D"] = 1000, + ["ID"] = 0, + } + local pX = GetPlayerMapPosition("player") or 0 + local pY = select(2, GetPlayerMapPosition("player")) or 0 + pX, pY = pX * 100, pY * 100 + for k, v in ipairs(aura_env.herbs) do + local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] + if cd == 0 then + local X, Y = pX - hX, pY - hY + local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) + if hyp < aura_env.minID["D"] then + aura_env.minID["X"] = hX + aura_env.minID["Y"] = hY + aura_env.minID["D"] = hyp + aura_env.minID["ID"] = k + end + end + end + return aura_env.minID["ID"] +end diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate Seam(Highmountain).lua b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate Seam(Highmountain).lua similarity index 92% rename from Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate Seam(Highmountain).lua rename to WeakAuras/Projects/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate Seam(Highmountain).lua index f82599a..99ced5f 100644 --- a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate Seam(Highmountain).lua +++ b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate Seam(Highmountain).lua @@ -1,466 +1,466 @@ -aura_env.herbs = { - [1] = { - ["X"] = 50.79, - ["Y"] = 52.35, - ["CD"] = 0, - }, - [2] = { - ["X"] = 52.7, - ["Y"] = 53.22, - ["CD"] = 0, - }, - [3] = { - ["X"] = 53.94, - ["Y"] = 53.78, - ["CD"] = 0, - }, - [4] = { - ["X"] = 53.24, - ["Y"] = 55.02, - ["CD"] = 0, - }, - [5] = { - ["X"] = 52.65, - ["Y"] = 55.24, - ["CD"] = 0, - }, - [6] = { - ["X"] = 51.67, - ["Y"] = 54.04, - ["CD"] = 0, - }, - [7] = { - ["X"] = 51.15, - ["Y"] = 52.08, - ["CD"] = 0, - }, - [8] = { - ["X"] = 49.47, - ["Y"] = 53.86, - ["CD"] = 0, - }, - [9] = { - ["X"] = 44.63, - ["Y"] = 60.71, - ["CD"] = 0, - }, - [10] = { - ["X"] = 44.89, - ["Y"] = 67.28, - ["CD"] = 0, - }, - [11] = { - ["X"] = 44.44, - ["Y"] = 67.36, - ["CD"] = 0, - }, - [12] = { - ["X"] = 44.34, - ["Y"] = 68.45, - ["CD"] = 0, - }, - [13] = { - ["X"] = 44.14, - ["Y"] = 69.89, - ["CD"] = 0, - }, - [14] = { - ["X"] = 44.17, - ["Y"] = 71.32, - ["CD"] = 0, - }, - [15] = { - ["X"] = 47.78, - ["Y"] = 68.45, - ["CD"] = 0, - }, - [16] = { - ["X"] = 46.65, - ["Y"] = 68.58, - ["CD"] = 0, - }, - [17] = { - ["X"] = 48.76, - ["Y"] = 73.26, - ["CD"] = 0, - }, - [18] = { - ["X"] = 48.01, - ["Y"] = 72.75, - ["CD"] = 0, - }, - [19] = { - ["X"] = 49.41, - ["Y"] = 72.56, - ["CD"] = 0, - }, - [20] = { - ["X"] = 48.95, - ["Y"] = 70.6, - ["CD"] = 0, - }, - [21] = { - ["X"] = 47.55, - ["Y"] = 70.14, - ["CD"] = 0, - }, - [22] = { - ["X"] = 44.82, - ["Y"] = 75.25, - ["CD"] = 0, - }, - [23] = { - ["X"] = 45.77, - ["Y"] = 77.89, - ["CD"] = 0, - }, - [24] = { - ["X"] = 44.83, - ["Y"] = 76, - ["CD"] = 0, - }, - [25] = { - ["X"] = 43.85, - ["Y"] = 75.69, - ["CD"] = 0, - }, - [26] = { - ["X"] = 43.04, - ["Y"] = 75.56, - ["CD"] = 0, - }, - [27] = { - ["X"] = 44.83, - ["Y"] = 75.18, - ["CD"] = 0, - }, - [28] = { - ["X"] = 43.97, - ["Y"] = 74.02, - ["CD"] = 0, - }, - [29] = { - ["X"] = 43.68, - ["Y"] = 73.14, - ["CD"] = 0, - }, - [30] = { - ["X"] = 43.75, - ["Y"] = 54.52, - ["CD"] = 0, - }, - [31] = { - ["X"] = 45.46, - ["Y"] = 53.73, - ["CD"] = 0, - }, - [32] = { - ["X"] = 45.89, - ["Y"] = 42.83, - ["CD"] = 0, - }, - [33] = { - ["X"] = 45.45, - ["Y"] = 42.34, - ["CD"] = 0, - }, - [34] = { - ["X"] = 45.1, - ["Y"] = 42.78, - ["CD"] = 0, - }, - [35] = { - ["X"] = 45.03, - ["Y"] = 43.2, - ["CD"] = 0, - }, - [36] = { - ["X"] = 45.68, - ["Y"] = 43.92, - ["CD"] = 0, - }, - [37] = { - ["X"] = 47.01, - ["Y"] = 44.4, - ["CD"] = 0, - }, - [38] = { - ["X"] = 47.62, - ["Y"] = 45.31, - ["CD"] = 0, - }, - [39] = { - ["X"] = 44.35, - ["Y"] = 50.32, - ["CD"] = 0, - }, - [40] = { - ["X"] = 43.54, - ["Y"] = 47.68, - ["CD"] = 0, - }, - [41] = { - ["X"] = 43.35, - ["Y"] = 47.13, - ["CD"] = 0, - }, - [42] = { - ["X"] = 40.68, - ["Y"] = 34.69, - ["CD"] = 0, - }, - [43] = { - ["X"] = 41.47, - ["Y"] = 36.3, - ["CD"] = 0, - }, - [44] = { - ["X"] = 42.18, - ["Y"] = 36.37, - ["CD"] = 0, - }, - [45] = { - ["X"] = 42.68, - ["Y"] = 35.45, - ["CD"] = 0, - }, - [46] = { - ["X"] = 42.41, - ["Y"] = 34.31, - ["CD"] = 0, - }, - [47] = { - ["X"] = 43.14, - ["Y"] = 34.43, - ["CD"] = 0, - }, - [48] = { - ["X"] = 42.81, - ["Y"] = 32.83, - ["CD"] = 0, - }, - [49] = { - ["X"] = 43.7, - ["Y"] = 33.32, - ["CD"] = 0, - }, - [50] = { - ["X"] = 44.13, - ["Y"] = 30.6, - ["CD"] = 0, - }, - [51] = { - ["X"] = 44.71, - ["Y"] = 29.48, - ["CD"] = 0, - }, - [52] = { - ["X"] = 43.81, - ["Y"] = 27.15, - ["CD"] = 0, - }, - [53] = { - ["X"] = 43.3, - ["Y"] = 25.86, - ["CD"] = 0, - }, - [54] = { - ["X"] = 41.18, - ["Y"] = 25.89, - ["CD"] = 0, - }, - [55] = { - ["X"] = 41.63, - ["Y"] = 24.99, - ["CD"] = 0, - }, - [56] = { - ["X"] = 43.99, - ["Y"] = 24.13, - ["CD"] = 0, - }, - [57] = { - ["X"] = 45, - ["Y"] = 24.59, - ["CD"] = 0, - }, - [58] = { - ["X"] = 51.32, - ["Y"] = 25.48, - ["CD"] = 0, - }, - [59] = { - ["X"] = 50.95, - ["Y"] = 26.35, - ["CD"] = 0, - }, - [60] = { - ["X"] = 49.69, - ["Y"] = 27.85, - ["CD"] = 0, - }, - [61] = { - ["X"] = 49.88, - ["Y"] = 28.33, - ["CD"] = 0, - }, - [62] = { - ["X"] = 49.1, - ["Y"] = 29.38, - ["CD"] = 0, - }, - [63] = { - ["X"] = 47.93, - ["Y"] = 29.24, - ["CD"] = 0, - }, - [64] = { - ["X"] = 47.05, - ["Y"] = 30.01, - ["CD"] = 0, - }, - [65] = { - ["X"] = 46.76, - ["Y"] = 32.28, - ["CD"] = 0, - }, - [66] = { - ["X"] = 51.53, - ["Y"] = 37.03, - ["CD"] = 0, - }, - [67] = { - ["X"] = 52.24, - ["Y"] = 39.43, - ["CD"] = 0, - }, - [68] = { - ["X"] = 51.9, - ["Y"] = 38.07, - ["CD"] = 0, - }, - [69] = { - ["X"] = 50.52, - ["Y"] = 38.82, - ["CD"] = 0, - }, - [70] = { - ["X"] = 49.72, - ["Y"] = 39.5, - ["CD"] = 0, - }, - [71] = { - ["X"] = 47.85, - ["Y"] = 68.43, - ["CD"] = 0, - }, - [72] = { - ["X"] = 32.68, - ["Y"] = 51.4, - ["CD"] = 0, - }, - [73] = { - ["X"] = 33.07, - ["Y"] = 48.65, - ["CD"] = 0, - }, - [74] = { - ["X"] = 34.22, - ["Y"] = 47.52, - ["CD"] = 0, - }, - [75] = { - ["X"] = 35.38, - ["Y"] = 49.24, - ["CD"] = 0, - }, - [76] = { - ["X"] = 36.3, - ["Y"] = 49.81, - ["CD"] = 0, - }, - [77] = { - ["X"] = 37.23, - ["Y"] = 53.49, - ["CD"] = 0, - }, - [78] = { - ["X"] = 37.55, - ["Y"] = 54.77, - ["CD"] = 0, - }, - [79] = { - ["X"] = 37.48, - ["Y"] = 55.75, - ["CD"] = 0, - }, - [80] = { - ["X"] = 39.14, - ["Y"] = 59.76, - ["CD"] = 0, - }, - [81] = { - ["X"] = 39.01, - ["Y"] = 58.93, - ["CD"] = 0, - }, - [82] = { - ["X"] = 38.69, - ["Y"] = 58.31, - ["CD"] = 0, - }, - [83] = { - ["X"] = 38.55, - ["Y"] = 57.23, - ["CD"] = 0, - }, - [84] = { - ["X"] = 36.59, - ["Y"] = 56.72, - ["CD"] = 0, - }, - [85] = { - ["X"] = 34.3, - ["Y"] = 55.25, - ["CD"] = 0, - }, - [86] = { - ["X"] = 26.1, - ["Y"] = 14.77, - ["CD"] = 0, - }, - [87] = { - ["X"] = 45.95, - ["Y"] = 29.55, - ["CD"] = 0, - }, -} -aura_env.cooldown = 600 -aura_env.wipeDistance = 20 -aura_env.angle = 0 -aura_env.hyp = 0 -aura_env.GetClosestHerb = function() - aura_env.minID = { - ["X"] = 0, - ["Y"] = 0, - ["D"] = 1000, - ["ID"] = 0, - } - local pX = GetPlayerMapPosition("player") or 0 - local pY = select(2, GetPlayerMapPosition("player")) or 0 - pX, pY = pX * 100, pY * 100 - for k, v in ipairs(aura_env.herbs) do - local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] - if cd == 0 then - local X, Y = pX - hX, pY - hY - local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) - if hyp < aura_env.minID["D"] then - aura_env.minID["X"] = hX - aura_env.minID["Y"] = hY - aura_env.minID["D"] = hyp - aura_env.minID["ID"] = k - end - end - end - return aura_env.minID["ID"] -end +aura_env.herbs = { + [1] = { + ["X"] = 50.79, + ["Y"] = 52.35, + ["CD"] = 0, + }, + [2] = { + ["X"] = 52.7, + ["Y"] = 53.22, + ["CD"] = 0, + }, + [3] = { + ["X"] = 53.94, + ["Y"] = 53.78, + ["CD"] = 0, + }, + [4] = { + ["X"] = 53.24, + ["Y"] = 55.02, + ["CD"] = 0, + }, + [5] = { + ["X"] = 52.65, + ["Y"] = 55.24, + ["CD"] = 0, + }, + [6] = { + ["X"] = 51.67, + ["Y"] = 54.04, + ["CD"] = 0, + }, + [7] = { + ["X"] = 51.15, + ["Y"] = 52.08, + ["CD"] = 0, + }, + [8] = { + ["X"] = 49.47, + ["Y"] = 53.86, + ["CD"] = 0, + }, + [9] = { + ["X"] = 44.63, + ["Y"] = 60.71, + ["CD"] = 0, + }, + [10] = { + ["X"] = 44.89, + ["Y"] = 67.28, + ["CD"] = 0, + }, + [11] = { + ["X"] = 44.44, + ["Y"] = 67.36, + ["CD"] = 0, + }, + [12] = { + ["X"] = 44.34, + ["Y"] = 68.45, + ["CD"] = 0, + }, + [13] = { + ["X"] = 44.14, + ["Y"] = 69.89, + ["CD"] = 0, + }, + [14] = { + ["X"] = 44.17, + ["Y"] = 71.32, + ["CD"] = 0, + }, + [15] = { + ["X"] = 47.78, + ["Y"] = 68.45, + ["CD"] = 0, + }, + [16] = { + ["X"] = 46.65, + ["Y"] = 68.58, + ["CD"] = 0, + }, + [17] = { + ["X"] = 48.76, + ["Y"] = 73.26, + ["CD"] = 0, + }, + [18] = { + ["X"] = 48.01, + ["Y"] = 72.75, + ["CD"] = 0, + }, + [19] = { + ["X"] = 49.41, + ["Y"] = 72.56, + ["CD"] = 0, + }, + [20] = { + ["X"] = 48.95, + ["Y"] = 70.6, + ["CD"] = 0, + }, + [21] = { + ["X"] = 47.55, + ["Y"] = 70.14, + ["CD"] = 0, + }, + [22] = { + ["X"] = 44.82, + ["Y"] = 75.25, + ["CD"] = 0, + }, + [23] = { + ["X"] = 45.77, + ["Y"] = 77.89, + ["CD"] = 0, + }, + [24] = { + ["X"] = 44.83, + ["Y"] = 76, + ["CD"] = 0, + }, + [25] = { + ["X"] = 43.85, + ["Y"] = 75.69, + ["CD"] = 0, + }, + [26] = { + ["X"] = 43.04, + ["Y"] = 75.56, + ["CD"] = 0, + }, + [27] = { + ["X"] = 44.83, + ["Y"] = 75.18, + ["CD"] = 0, + }, + [28] = { + ["X"] = 43.97, + ["Y"] = 74.02, + ["CD"] = 0, + }, + [29] = { + ["X"] = 43.68, + ["Y"] = 73.14, + ["CD"] = 0, + }, + [30] = { + ["X"] = 43.75, + ["Y"] = 54.52, + ["CD"] = 0, + }, + [31] = { + ["X"] = 45.46, + ["Y"] = 53.73, + ["CD"] = 0, + }, + [32] = { + ["X"] = 45.89, + ["Y"] = 42.83, + ["CD"] = 0, + }, + [33] = { + ["X"] = 45.45, + ["Y"] = 42.34, + ["CD"] = 0, + }, + [34] = { + ["X"] = 45.1, + ["Y"] = 42.78, + ["CD"] = 0, + }, + [35] = { + ["X"] = 45.03, + ["Y"] = 43.2, + ["CD"] = 0, + }, + [36] = { + ["X"] = 45.68, + ["Y"] = 43.92, + ["CD"] = 0, + }, + [37] = { + ["X"] = 47.01, + ["Y"] = 44.4, + ["CD"] = 0, + }, + [38] = { + ["X"] = 47.62, + ["Y"] = 45.31, + ["CD"] = 0, + }, + [39] = { + ["X"] = 44.35, + ["Y"] = 50.32, + ["CD"] = 0, + }, + [40] = { + ["X"] = 43.54, + ["Y"] = 47.68, + ["CD"] = 0, + }, + [41] = { + ["X"] = 43.35, + ["Y"] = 47.13, + ["CD"] = 0, + }, + [42] = { + ["X"] = 40.68, + ["Y"] = 34.69, + ["CD"] = 0, + }, + [43] = { + ["X"] = 41.47, + ["Y"] = 36.3, + ["CD"] = 0, + }, + [44] = { + ["X"] = 42.18, + ["Y"] = 36.37, + ["CD"] = 0, + }, + [45] = { + ["X"] = 42.68, + ["Y"] = 35.45, + ["CD"] = 0, + }, + [46] = { + ["X"] = 42.41, + ["Y"] = 34.31, + ["CD"] = 0, + }, + [47] = { + ["X"] = 43.14, + ["Y"] = 34.43, + ["CD"] = 0, + }, + [48] = { + ["X"] = 42.81, + ["Y"] = 32.83, + ["CD"] = 0, + }, + [49] = { + ["X"] = 43.7, + ["Y"] = 33.32, + ["CD"] = 0, + }, + [50] = { + ["X"] = 44.13, + ["Y"] = 30.6, + ["CD"] = 0, + }, + [51] = { + ["X"] = 44.71, + ["Y"] = 29.48, + ["CD"] = 0, + }, + [52] = { + ["X"] = 43.81, + ["Y"] = 27.15, + ["CD"] = 0, + }, + [53] = { + ["X"] = 43.3, + ["Y"] = 25.86, + ["CD"] = 0, + }, + [54] = { + ["X"] = 41.18, + ["Y"] = 25.89, + ["CD"] = 0, + }, + [55] = { + ["X"] = 41.63, + ["Y"] = 24.99, + ["CD"] = 0, + }, + [56] = { + ["X"] = 43.99, + ["Y"] = 24.13, + ["CD"] = 0, + }, + [57] = { + ["X"] = 45, + ["Y"] = 24.59, + ["CD"] = 0, + }, + [58] = { + ["X"] = 51.32, + ["Y"] = 25.48, + ["CD"] = 0, + }, + [59] = { + ["X"] = 50.95, + ["Y"] = 26.35, + ["CD"] = 0, + }, + [60] = { + ["X"] = 49.69, + ["Y"] = 27.85, + ["CD"] = 0, + }, + [61] = { + ["X"] = 49.88, + ["Y"] = 28.33, + ["CD"] = 0, + }, + [62] = { + ["X"] = 49.1, + ["Y"] = 29.38, + ["CD"] = 0, + }, + [63] = { + ["X"] = 47.93, + ["Y"] = 29.24, + ["CD"] = 0, + }, + [64] = { + ["X"] = 47.05, + ["Y"] = 30.01, + ["CD"] = 0, + }, + [65] = { + ["X"] = 46.76, + ["Y"] = 32.28, + ["CD"] = 0, + }, + [66] = { + ["X"] = 51.53, + ["Y"] = 37.03, + ["CD"] = 0, + }, + [67] = { + ["X"] = 52.24, + ["Y"] = 39.43, + ["CD"] = 0, + }, + [68] = { + ["X"] = 51.9, + ["Y"] = 38.07, + ["CD"] = 0, + }, + [69] = { + ["X"] = 50.52, + ["Y"] = 38.82, + ["CD"] = 0, + }, + [70] = { + ["X"] = 49.72, + ["Y"] = 39.5, + ["CD"] = 0, + }, + [71] = { + ["X"] = 47.85, + ["Y"] = 68.43, + ["CD"] = 0, + }, + [72] = { + ["X"] = 32.68, + ["Y"] = 51.4, + ["CD"] = 0, + }, + [73] = { + ["X"] = 33.07, + ["Y"] = 48.65, + ["CD"] = 0, + }, + [74] = { + ["X"] = 34.22, + ["Y"] = 47.52, + ["CD"] = 0, + }, + [75] = { + ["X"] = 35.38, + ["Y"] = 49.24, + ["CD"] = 0, + }, + [76] = { + ["X"] = 36.3, + ["Y"] = 49.81, + ["CD"] = 0, + }, + [77] = { + ["X"] = 37.23, + ["Y"] = 53.49, + ["CD"] = 0, + }, + [78] = { + ["X"] = 37.55, + ["Y"] = 54.77, + ["CD"] = 0, + }, + [79] = { + ["X"] = 37.48, + ["Y"] = 55.75, + ["CD"] = 0, + }, + [80] = { + ["X"] = 39.14, + ["Y"] = 59.76, + ["CD"] = 0, + }, + [81] = { + ["X"] = 39.01, + ["Y"] = 58.93, + ["CD"] = 0, + }, + [82] = { + ["X"] = 38.69, + ["Y"] = 58.31, + ["CD"] = 0, + }, + [83] = { + ["X"] = 38.55, + ["Y"] = 57.23, + ["CD"] = 0, + }, + [84] = { + ["X"] = 36.59, + ["Y"] = 56.72, + ["CD"] = 0, + }, + [85] = { + ["X"] = 34.3, + ["Y"] = 55.25, + ["CD"] = 0, + }, + [86] = { + ["X"] = 26.1, + ["Y"] = 14.77, + ["CD"] = 0, + }, + [87] = { + ["X"] = 45.95, + ["Y"] = 29.55, + ["CD"] = 0, + }, +} +aura_env.cooldown = 600 +aura_env.wipeDistance = 20 +aura_env.angle = 0 +aura_env.hyp = 0 +aura_env.GetClosestHerb = function() + aura_env.minID = { + ["X"] = 0, + ["Y"] = 0, + ["D"] = 1000, + ["ID"] = 0, + } + local pX = GetPlayerMapPosition("player") or 0 + local pY = select(2, GetPlayerMapPosition("player")) or 0 + pX, pY = pX * 100, pY * 100 + for k, v in ipairs(aura_env.herbs) do + local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] + if cd == 0 then + local X, Y = pX - hX, pY - hY + local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) + if hyp < aura_env.minID["D"] then + aura_env.minID["X"] = hX + aura_env.minID["Y"] = hY + aura_env.minID["D"] = hyp + aura_env.minID["ID"] = k + end + end + end + return aura_env.minID["ID"] +end diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate Seam(Suramar).lua b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate Seam(Suramar).lua similarity index 92% rename from Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate Seam(Suramar).lua rename to WeakAuras/Projects/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate Seam(Suramar).lua index e8b855c..618eacb 100644 --- a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate Seam(Suramar).lua +++ b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate Seam(Suramar).lua @@ -1,466 +1,466 @@ -aura_env.herbs = { - [1] = { - ["X"] = 67.25, - ["Y"] = 73.74, - ["CD"] = 0, - }, - [2] = { - ["X"] = 68.53, - ["Y"] = 73.25, - ["CD"] = 0, - }, - [3] = { - ["X"] = 69.34, - ["Y"] = 73.84, - ["CD"] = 0, - }, - [4] = { - ["X"] = 62.86, - ["Y"] = 51.94, - ["CD"] = 0, - }, - [5] = { - ["X"] = 63.66, - ["Y"] = 50.43, - ["CD"] = 0, - }, - [6] = { - ["X"] = 65.41, - ["Y"] = 50.69, - ["CD"] = 0, - }, - [7] = { - ["X"] = 64.95, - ["Y"] = 51.87, - ["CD"] = 0, - }, - [8] = { - ["X"] = 64.6, - ["Y"] = 54.88, - ["CD"] = 0, - }, - [9] = { - ["X"] = 52.44, - ["Y"] = 43.72, - ["CD"] = 0, - }, - [10] = { - ["X"] = 51.89, - ["Y"] = 42.38, - ["CD"] = 0, - }, - [11] = { - ["X"] = 50.37, - ["Y"] = 42.54, - ["CD"] = 0, - }, - [12] = { - ["X"] = 49.81, - ["Y"] = 41.96, - ["CD"] = 0, - }, - [13] = { - ["X"] = 49.12, - ["Y"] = 40.6, - ["CD"] = 0, - }, - [14] = { - ["X"] = 48.34, - ["Y"] = 39.21, - ["CD"] = 0, - }, - [15] = { - ["X"] = 48.02, - ["Y"] = 36.6, - ["CD"] = 0, - }, - [16] = { - ["X"] = 46.86, - ["Y"] = 36.72, - ["CD"] = 0, - }, - [17] = { - ["X"] = 46.75, - ["Y"] = 34.53, - ["CD"] = 0, - }, - [18] = { - ["X"] = 25.94, - ["Y"] = 28.99, - ["CD"] = 0, - }, - [19] = { - ["X"] = 29.48, - ["Y"] = 25.3, - ["CD"] = 0, - }, - [20] = { - ["X"] = 28.4, - ["Y"] = 25.56, - ["CD"] = 0, - }, - [21] = { - ["X"] = 28.51, - ["Y"] = 23.82, - ["CD"] = 0, - }, - [22] = { - ["X"] = 29.61, - ["Y"] = 22.79, - ["CD"] = 0, - }, - [23] = { - ["X"] = 29.75, - ["Y"] = 21.84, - ["CD"] = 0, - }, - [24] = { - ["X"] = 26.43, - ["Y"] = 10.9, - ["CD"] = 0, - }, - [25] = { - ["X"] = 25.97, - ["Y"] = 12.48, - ["CD"] = 0, - }, - [26] = { - ["X"] = 25.9, - ["Y"] = 15.81, - ["CD"] = 0, - }, - [27] = { - ["X"] = 25.73, - ["Y"] = 16.64, - ["CD"] = 0, - }, - [28] = { - ["X"] = 25.45, - ["Y"] = 17.29, - ["CD"] = 0, - }, - [29] = { - ["X"] = 25.4, - ["Y"] = 18.4, - ["CD"] = 0, - }, - [30] = { - ["X"] = 25.26, - ["Y"] = 19.79, - ["CD"] = 0, - }, - [31] = { - ["X"] = 26.03, - ["Y"] = 24.44, - ["CD"] = 0, - }, - [32] = { - ["X"] = 26.04, - ["Y"] = 23.22, - ["CD"] = 0, - }, - [33] = { - ["X"] = 24.19, - ["Y"] = 23.27, - ["CD"] = 0, - }, - [34] = { - ["X"] = 24.28, - ["Y"] = 24.89, - ["CD"] = 0, - }, - [35] = { - ["X"] = 24.47, - ["Y"] = 25.24, - ["CD"] = 0, - }, - [36] = { - ["X"] = 24.46, - ["Y"] = 26.17, - ["CD"] = 0, - }, - [37] = { - ["X"] = 24.98, - ["Y"] = 27.02, - ["CD"] = 0, - }, - [38] = { - ["X"] = 24.82, - ["Y"] = 27.95, - ["CD"] = 0, - }, - [39] = { - ["X"] = 24.87, - ["Y"] = 29.34, - ["CD"] = 0, - }, - [40] = { - ["X"] = 24.49, - ["Y"] = 30.19, - ["CD"] = 0, - }, - [41] = { - ["X"] = 23.53, - ["Y"] = 30.88, - ["CD"] = 0, - }, - [42] = { - ["X"] = 23.17, - ["Y"] = 31.72, - ["CD"] = 0, - }, - [43] = { - ["X"] = 22.88, - ["Y"] = 32.62, - ["CD"] = 0, - }, - [44] = { - ["X"] = 21.65, - ["Y"] = 33.2, - ["CD"] = 0, - }, - [45] = { - ["X"] = 19.95, - ["Y"] = 33.28, - ["CD"] = 0, - }, - [46] = { - ["X"] = 21.16, - ["Y"] = 34.77, - ["CD"] = 0, - }, - [47] = { - ["X"] = 22.35, - ["Y"] = 34.03, - ["CD"] = 0, - }, - [48] = { - ["X"] = 31.87, - ["Y"] = 52.38, - ["CD"] = 0, - }, - [49] = { - ["X"] = 30.31, - ["Y"] = 53, - ["CD"] = 0, - }, - [50] = { - ["X"] = 28.27, - ["Y"] = 53.65, - ["CD"] = 0, - }, - [51] = { - ["X"] = 27.54, - ["Y"] = 53.51, - ["CD"] = 0, - }, - [52] = { - ["X"] = 27.6, - ["Y"] = 52.81, - ["CD"] = 0, - }, - [53] = { - ["X"] = 26.91, - ["Y"] = 53.27, - ["CD"] = 0, - }, - [54] = { - ["X"] = 25.45, - ["Y"] = 54.29, - ["CD"] = 0, - }, - [55] = { - ["X"] = 25.36, - ["Y"] = 53.45, - ["CD"] = 0, - }, - [56] = { - ["X"] = 22.29, - ["Y"] = 54.37, - ["CD"] = 0, - }, - [57] = { - ["X"] = 23.11, - ["Y"] = 55.13, - ["CD"] = 0, - }, - [58] = { - ["X"] = 24.34, - ["Y"] = 55.09, - ["CD"] = 0, - }, - [59] = { - ["X"] = 24.03, - ["Y"] = 55.88, - ["CD"] = 0, - }, - [60] = { - ["X"] = 24.95, - ["Y"] = 59.85, - ["CD"] = 0, - }, - [61] = { - ["X"] = 24.84, - ["Y"] = 61.41, - ["CD"] = 0, - }, - [62] = { - ["X"] = 34.59, - ["Y"] = 69.79, - ["CD"] = 0, - }, - [63] = { - ["X"] = 33.59, - ["Y"] = 68.41, - ["CD"] = 0, - }, - [64] = { - ["X"] = 31.96, - ["Y"] = 69.06, - ["CD"] = 0, - }, - [65] = { - ["X"] = 29.87, - ["Y"] = 65.93, - ["CD"] = 0, - }, - [66] = { - ["X"] = 30.95, - ["Y"] = 64.82, - ["CD"] = 0, - }, - [67] = { - ["X"] = 32.43, - ["Y"] = 62.85, - ["CD"] = 0, - }, - [68] = { - ["X"] = 32.7, - ["Y"] = 61.83, - ["CD"] = 0, - }, - [69] = { - ["X"] = 33.05, - ["Y"] = 57.88, - ["CD"] = 0, - }, - [70] = { - ["X"] = 32.43, - ["Y"] = 56.41, - ["CD"] = 0, - }, - [71] = { - ["X"] = 33.85, - ["Y"] = 54.08, - ["CD"] = 0, - }, - [72] = { - ["X"] = 32.68, - ["Y"] = 51.4, - ["CD"] = 0, - }, - [73] = { - ["X"] = 33.07, - ["Y"] = 48.65, - ["CD"] = 0, - }, - [74] = { - ["X"] = 34.22, - ["Y"] = 47.52, - ["CD"] = 0, - }, - [75] = { - ["X"] = 35.38, - ["Y"] = 49.24, - ["CD"] = 0, - }, - [76] = { - ["X"] = 36.3, - ["Y"] = 49.81, - ["CD"] = 0, - }, - [77] = { - ["X"] = 37.23, - ["Y"] = 53.49, - ["CD"] = 0, - }, - [78] = { - ["X"] = 37.55, - ["Y"] = 54.77, - ["CD"] = 0, - }, - [79] = { - ["X"] = 37.48, - ["Y"] = 55.75, - ["CD"] = 0, - }, - [80] = { - ["X"] = 39.14, - ["Y"] = 59.76, - ["CD"] = 0, - }, - [81] = { - ["X"] = 39.01, - ["Y"] = 58.93, - ["CD"] = 0, - }, - [82] = { - ["X"] = 38.69, - ["Y"] = 58.31, - ["CD"] = 0, - }, - [83] = { - ["X"] = 38.55, - ["Y"] = 57.23, - ["CD"] = 0, - }, - [84] = { - ["X"] = 36.59, - ["Y"] = 56.72, - ["CD"] = 0, - }, - [85] = { - ["X"] = 34.3, - ["Y"] = 55.25, - ["CD"] = 0, - }, - [86] = { - ["X"] = 26.1, - ["Y"] = 14.77, - ["CD"] = 0, - }, - [87] = { - ["X"] = 45.95, - ["Y"] = 29.55, - ["CD"] = 0, - }, -} -aura_env.cooldown = 600 -aura_env.wipeDistance = 20 -aura_env.angle = 0 -aura_env.hyp = 0 -aura_env.GetClosestHerb = function() - aura_env.minID = { - ["X"] = 0, - ["Y"] = 0, - ["D"] = 1000, - ["ID"] = 0, - } - local pX = GetPlayerMapPosition("player") or 0 - local pY = select(2, GetPlayerMapPosition("player")) or 0 - pX, pY = pX * 100, pY * 100 - for k, v in ipairs(aura_env.herbs) do - local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] - if cd == 0 then - local X, Y = pX - hX, pY - hY - local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) - if hyp < aura_env.minID["D"] then - aura_env.minID["X"] = hX - aura_env.minID["Y"] = hY - aura_env.minID["D"] = hyp - aura_env.minID["ID"] = k - end - end - end - return aura_env.minID["ID"] -end +aura_env.herbs = { + [1] = { + ["X"] = 67.25, + ["Y"] = 73.74, + ["CD"] = 0, + }, + [2] = { + ["X"] = 68.53, + ["Y"] = 73.25, + ["CD"] = 0, + }, + [3] = { + ["X"] = 69.34, + ["Y"] = 73.84, + ["CD"] = 0, + }, + [4] = { + ["X"] = 62.86, + ["Y"] = 51.94, + ["CD"] = 0, + }, + [5] = { + ["X"] = 63.66, + ["Y"] = 50.43, + ["CD"] = 0, + }, + [6] = { + ["X"] = 65.41, + ["Y"] = 50.69, + ["CD"] = 0, + }, + [7] = { + ["X"] = 64.95, + ["Y"] = 51.87, + ["CD"] = 0, + }, + [8] = { + ["X"] = 64.6, + ["Y"] = 54.88, + ["CD"] = 0, + }, + [9] = { + ["X"] = 52.44, + ["Y"] = 43.72, + ["CD"] = 0, + }, + [10] = { + ["X"] = 51.89, + ["Y"] = 42.38, + ["CD"] = 0, + }, + [11] = { + ["X"] = 50.37, + ["Y"] = 42.54, + ["CD"] = 0, + }, + [12] = { + ["X"] = 49.81, + ["Y"] = 41.96, + ["CD"] = 0, + }, + [13] = { + ["X"] = 49.12, + ["Y"] = 40.6, + ["CD"] = 0, + }, + [14] = { + ["X"] = 48.34, + ["Y"] = 39.21, + ["CD"] = 0, + }, + [15] = { + ["X"] = 48.02, + ["Y"] = 36.6, + ["CD"] = 0, + }, + [16] = { + ["X"] = 46.86, + ["Y"] = 36.72, + ["CD"] = 0, + }, + [17] = { + ["X"] = 46.75, + ["Y"] = 34.53, + ["CD"] = 0, + }, + [18] = { + ["X"] = 25.94, + ["Y"] = 28.99, + ["CD"] = 0, + }, + [19] = { + ["X"] = 29.48, + ["Y"] = 25.3, + ["CD"] = 0, + }, + [20] = { + ["X"] = 28.4, + ["Y"] = 25.56, + ["CD"] = 0, + }, + [21] = { + ["X"] = 28.51, + ["Y"] = 23.82, + ["CD"] = 0, + }, + [22] = { + ["X"] = 29.61, + ["Y"] = 22.79, + ["CD"] = 0, + }, + [23] = { + ["X"] = 29.75, + ["Y"] = 21.84, + ["CD"] = 0, + }, + [24] = { + ["X"] = 26.43, + ["Y"] = 10.9, + ["CD"] = 0, + }, + [25] = { + ["X"] = 25.97, + ["Y"] = 12.48, + ["CD"] = 0, + }, + [26] = { + ["X"] = 25.9, + ["Y"] = 15.81, + ["CD"] = 0, + }, + [27] = { + ["X"] = 25.73, + ["Y"] = 16.64, + ["CD"] = 0, + }, + [28] = { + ["X"] = 25.45, + ["Y"] = 17.29, + ["CD"] = 0, + }, + [29] = { + ["X"] = 25.4, + ["Y"] = 18.4, + ["CD"] = 0, + }, + [30] = { + ["X"] = 25.26, + ["Y"] = 19.79, + ["CD"] = 0, + }, + [31] = { + ["X"] = 26.03, + ["Y"] = 24.44, + ["CD"] = 0, + }, + [32] = { + ["X"] = 26.04, + ["Y"] = 23.22, + ["CD"] = 0, + }, + [33] = { + ["X"] = 24.19, + ["Y"] = 23.27, + ["CD"] = 0, + }, + [34] = { + ["X"] = 24.28, + ["Y"] = 24.89, + ["CD"] = 0, + }, + [35] = { + ["X"] = 24.47, + ["Y"] = 25.24, + ["CD"] = 0, + }, + [36] = { + ["X"] = 24.46, + ["Y"] = 26.17, + ["CD"] = 0, + }, + [37] = { + ["X"] = 24.98, + ["Y"] = 27.02, + ["CD"] = 0, + }, + [38] = { + ["X"] = 24.82, + ["Y"] = 27.95, + ["CD"] = 0, + }, + [39] = { + ["X"] = 24.87, + ["Y"] = 29.34, + ["CD"] = 0, + }, + [40] = { + ["X"] = 24.49, + ["Y"] = 30.19, + ["CD"] = 0, + }, + [41] = { + ["X"] = 23.53, + ["Y"] = 30.88, + ["CD"] = 0, + }, + [42] = { + ["X"] = 23.17, + ["Y"] = 31.72, + ["CD"] = 0, + }, + [43] = { + ["X"] = 22.88, + ["Y"] = 32.62, + ["CD"] = 0, + }, + [44] = { + ["X"] = 21.65, + ["Y"] = 33.2, + ["CD"] = 0, + }, + [45] = { + ["X"] = 19.95, + ["Y"] = 33.28, + ["CD"] = 0, + }, + [46] = { + ["X"] = 21.16, + ["Y"] = 34.77, + ["CD"] = 0, + }, + [47] = { + ["X"] = 22.35, + ["Y"] = 34.03, + ["CD"] = 0, + }, + [48] = { + ["X"] = 31.87, + ["Y"] = 52.38, + ["CD"] = 0, + }, + [49] = { + ["X"] = 30.31, + ["Y"] = 53, + ["CD"] = 0, + }, + [50] = { + ["X"] = 28.27, + ["Y"] = 53.65, + ["CD"] = 0, + }, + [51] = { + ["X"] = 27.54, + ["Y"] = 53.51, + ["CD"] = 0, + }, + [52] = { + ["X"] = 27.6, + ["Y"] = 52.81, + ["CD"] = 0, + }, + [53] = { + ["X"] = 26.91, + ["Y"] = 53.27, + ["CD"] = 0, + }, + [54] = { + ["X"] = 25.45, + ["Y"] = 54.29, + ["CD"] = 0, + }, + [55] = { + ["X"] = 25.36, + ["Y"] = 53.45, + ["CD"] = 0, + }, + [56] = { + ["X"] = 22.29, + ["Y"] = 54.37, + ["CD"] = 0, + }, + [57] = { + ["X"] = 23.11, + ["Y"] = 55.13, + ["CD"] = 0, + }, + [58] = { + ["X"] = 24.34, + ["Y"] = 55.09, + ["CD"] = 0, + }, + [59] = { + ["X"] = 24.03, + ["Y"] = 55.88, + ["CD"] = 0, + }, + [60] = { + ["X"] = 24.95, + ["Y"] = 59.85, + ["CD"] = 0, + }, + [61] = { + ["X"] = 24.84, + ["Y"] = 61.41, + ["CD"] = 0, + }, + [62] = { + ["X"] = 34.59, + ["Y"] = 69.79, + ["CD"] = 0, + }, + [63] = { + ["X"] = 33.59, + ["Y"] = 68.41, + ["CD"] = 0, + }, + [64] = { + ["X"] = 31.96, + ["Y"] = 69.06, + ["CD"] = 0, + }, + [65] = { + ["X"] = 29.87, + ["Y"] = 65.93, + ["CD"] = 0, + }, + [66] = { + ["X"] = 30.95, + ["Y"] = 64.82, + ["CD"] = 0, + }, + [67] = { + ["X"] = 32.43, + ["Y"] = 62.85, + ["CD"] = 0, + }, + [68] = { + ["X"] = 32.7, + ["Y"] = 61.83, + ["CD"] = 0, + }, + [69] = { + ["X"] = 33.05, + ["Y"] = 57.88, + ["CD"] = 0, + }, + [70] = { + ["X"] = 32.43, + ["Y"] = 56.41, + ["CD"] = 0, + }, + [71] = { + ["X"] = 33.85, + ["Y"] = 54.08, + ["CD"] = 0, + }, + [72] = { + ["X"] = 32.68, + ["Y"] = 51.4, + ["CD"] = 0, + }, + [73] = { + ["X"] = 33.07, + ["Y"] = 48.65, + ["CD"] = 0, + }, + [74] = { + ["X"] = 34.22, + ["Y"] = 47.52, + ["CD"] = 0, + }, + [75] = { + ["X"] = 35.38, + ["Y"] = 49.24, + ["CD"] = 0, + }, + [76] = { + ["X"] = 36.3, + ["Y"] = 49.81, + ["CD"] = 0, + }, + [77] = { + ["X"] = 37.23, + ["Y"] = 53.49, + ["CD"] = 0, + }, + [78] = { + ["X"] = 37.55, + ["Y"] = 54.77, + ["CD"] = 0, + }, + [79] = { + ["X"] = 37.48, + ["Y"] = 55.75, + ["CD"] = 0, + }, + [80] = { + ["X"] = 39.14, + ["Y"] = 59.76, + ["CD"] = 0, + }, + [81] = { + ["X"] = 39.01, + ["Y"] = 58.93, + ["CD"] = 0, + }, + [82] = { + ["X"] = 38.69, + ["Y"] = 58.31, + ["CD"] = 0, + }, + [83] = { + ["X"] = 38.55, + ["Y"] = 57.23, + ["CD"] = 0, + }, + [84] = { + ["X"] = 36.59, + ["Y"] = 56.72, + ["CD"] = 0, + }, + [85] = { + ["X"] = 34.3, + ["Y"] = 55.25, + ["CD"] = 0, + }, + [86] = { + ["X"] = 26.1, + ["Y"] = 14.77, + ["CD"] = 0, + }, + [87] = { + ["X"] = 45.95, + ["Y"] = 29.55, + ["CD"] = 0, + }, +} +aura_env.cooldown = 600 +aura_env.wipeDistance = 20 +aura_env.angle = 0 +aura_env.hyp = 0 +aura_env.GetClosestHerb = function() + aura_env.minID = { + ["X"] = 0, + ["Y"] = 0, + ["D"] = 1000, + ["ID"] = 0, + } + local pX = GetPlayerMapPosition("player") or 0 + local pY = select(2, GetPlayerMapPosition("player")) or 0 + pX, pY = pX * 100, pY * 100 + for k, v in ipairs(aura_env.herbs) do + local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] + if cd == 0 then + local X, Y = pX - hX, pY - hY + local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) + if hyp < aura_env.minID["D"] then + aura_env.minID["X"] = hX + aura_env.minID["Y"] = hY + aura_env.minID["D"] = hyp + aura_env.minID["ID"] = k + end + end + end + return aura_env.minID["ID"] +end diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate Total.lua b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate Total.lua similarity index 92% rename from Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate Total.lua rename to WeakAuras/Projects/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate Total.lua index 83187c4..906c845 100644 --- a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate Total.lua +++ b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate Total.lua @@ -1,866 +1,866 @@ -aura_env.herbs = { - [1] = { - ["X"] = 67.25, - ["Y"] = 73.74, - ["CD"] = 0, - }, - [2] = { - ["X"] = 68.53, - ["Y"] = 73.25, - ["CD"] = 0, - }, - [3] = { - ["X"] = 69.34, - ["Y"] = 73.84, - ["CD"] = 0, - }, - [4] = { - ["X"] = 62.86, - ["Y"] = 51.94, - ["CD"] = 0, - }, - [5] = { - ["X"] = 63.66, - ["Y"] = 50.43, - ["CD"] = 0, - }, - [6] = { - ["X"] = 65.41, - ["Y"] = 50.69, - ["CD"] = 0, - }, - [7] = { - ["X"] = 64.95, - ["Y"] = 51.87, - ["CD"] = 0, - }, - [8] = { - ["X"] = 64.6, - ["Y"] = 54.88, - ["CD"] = 0, - }, - [9] = { - ["X"] = 52.44, - ["Y"] = 43.72, - ["CD"] = 0, - }, - [10] = { - ["X"] = 51.89, - ["Y"] = 42.38, - ["CD"] = 0, - }, - [11] = { - ["X"] = 50.37, - ["Y"] = 42.54, - ["CD"] = 0, - }, - [12] = { - ["X"] = 49.81, - ["Y"] = 41.96, - ["CD"] = 0, - }, - [13] = { - ["X"] = 49.12, - ["Y"] = 40.6, - ["CD"] = 0, - }, - [14] = { - ["X"] = 48.34, - ["Y"] = 39.21, - ["CD"] = 0, - }, - [15] = { - ["X"] = 48.02, - ["Y"] = 36.6, - ["CD"] = 0, - }, - [16] = { - ["X"] = 46.86, - ["Y"] = 36.72, - ["CD"] = 0, - }, - [17] = { - ["X"] = 46.75, - ["Y"] = 34.53, - ["CD"] = 0, - }, - [18] = { - ["X"] = 25.94, - ["Y"] = 28.99, - ["CD"] = 0, - }, - [19] = { - ["X"] = 29.48, - ["Y"] = 25.3, - ["CD"] = 0, - }, - [20] = { - ["X"] = 28.4, - ["Y"] = 25.56, - ["CD"] = 0, - }, - [21] = { - ["X"] = 28.51, - ["Y"] = 23.82, - ["CD"] = 0, - }, - [22] = { - ["X"] = 29.61, - ["Y"] = 22.79, - ["CD"] = 0, - }, - [23] = { - ["X"] = 29.75, - ["Y"] = 21.84, - ["CD"] = 0, - }, - [24] = { - ["X"] = 26.43, - ["Y"] = 10.9, - ["CD"] = 0, - }, - [25] = { - ["X"] = 25.97, - ["Y"] = 12.48, - ["CD"] = 0, - }, - [26] = { - ["X"] = 25.9, - ["Y"] = 15.81, - ["CD"] = 0, - }, - [27] = { - ["X"] = 25.73, - ["Y"] = 16.64, - ["CD"] = 0, - }, - [28] = { - ["X"] = 25.45, - ["Y"] = 17.29, - ["CD"] = 0, - }, - [29] = { - ["X"] = 25.4, - ["Y"] = 18.4, - ["CD"] = 0, - }, - [30] = { - ["X"] = 25.26, - ["Y"] = 19.79, - ["CD"] = 0, - }, - [31] = { - ["X"] = 26.03, - ["Y"] = 24.44, - ["CD"] = 0, - }, - [32] = { - ["X"] = 26.04, - ["Y"] = 23.22, - ["CD"] = 0, - }, - [33] = { - ["X"] = 24.19, - ["Y"] = 23.27, - ["CD"] = 0, - }, - [34] = { - ["X"] = 24.28, - ["Y"] = 24.89, - ["CD"] = 0, - }, - [35] = { - ["X"] = 24.47, - ["Y"] = 25.24, - ["CD"] = 0, - }, - [36] = { - ["X"] = 24.46, - ["Y"] = 26.17, - ["CD"] = 0, - }, - [37] = { - ["X"] = 24.98, - ["Y"] = 27.02, - ["CD"] = 0, - }, - [38] = { - ["X"] = 24.82, - ["Y"] = 27.95, - ["CD"] = 0, - }, - [39] = { - ["X"] = 24.87, - ["Y"] = 29.34, - ["CD"] = 0, - }, - [40] = { - ["X"] = 24.49, - ["Y"] = 30.19, - ["CD"] = 0, - }, - [41] = { - ["X"] = 23.53, - ["Y"] = 30.88, - ["CD"] = 0, - }, - [42] = { - ["X"] = 23.17, - ["Y"] = 31.72, - ["CD"] = 0, - }, - [43] = { - ["X"] = 22.88, - ["Y"] = 32.62, - ["CD"] = 0, - }, - [44] = { - ["X"] = 21.65, - ["Y"] = 33.2, - ["CD"] = 0, - }, - [45] = { - ["X"] = 19.95, - ["Y"] = 33.28, - ["CD"] = 0, - }, - [46] = { - ["X"] = 21.16, - ["Y"] = 34.77, - ["CD"] = 0, - }, - [47] = { - ["X"] = 22.35, - ["Y"] = 34.03, - ["CD"] = 0, - }, - [48] = { - ["X"] = 31.87, - ["Y"] = 52.38, - ["CD"] = 0, - }, - [49] = { - ["X"] = 30.31, - ["Y"] = 53, - ["CD"] = 0, - }, - [50] = { - ["X"] = 28.27, - ["Y"] = 53.65, - ["CD"] = 0, - }, - [51] = { - ["X"] = 27.54, - ["Y"] = 53.51, - ["CD"] = 0, - }, - [52] = { - ["X"] = 27.6, - ["Y"] = 52.81, - ["CD"] = 0, - }, - [53] = { - ["X"] = 26.91, - ["Y"] = 53.27, - ["CD"] = 0, - }, - [54] = { - ["X"] = 25.45, - ["Y"] = 54.29, - ["CD"] = 0, - }, - [55] = { - ["X"] = 25.36, - ["Y"] = 53.45, - ["CD"] = 0, - }, - [56] = { - ["X"] = 22.29, - ["Y"] = 54.37, - ["CD"] = 0, - }, - [57] = { - ["X"] = 23.11, - ["Y"] = 55.13, - ["CD"] = 0, - }, - [58] = { - ["X"] = 24.34, - ["Y"] = 55.09, - ["CD"] = 0, - }, - [59] = { - ["X"] = 24.03, - ["Y"] = 55.88, - ["CD"] = 0, - }, - [60] = { - ["X"] = 24.95, - ["Y"] = 59.85, - ["CD"] = 0, - }, - [61] = { - ["X"] = 24.84, - ["Y"] = 61.41, - ["CD"] = 0, - }, - [62] = { - ["X"] = 34.59, - ["Y"] = 69.79, - ["CD"] = 0, - }, - [63] = { - ["X"] = 33.59, - ["Y"] = 68.41, - ["CD"] = 0, - }, - [64] = { - ["X"] = 31.96, - ["Y"] = 69.06, - ["CD"] = 0, - }, - [65] = { - ["X"] = 29.87, - ["Y"] = 65.93, - ["CD"] = 0, - }, - [66] = { - ["X"] = 30.95, - ["Y"] = 64.82, - ["CD"] = 0, - }, - [67] = { - ["X"] = 32.43, - ["Y"] = 62.85, - ["CD"] = 0, - }, - [68] = { - ["X"] = 32.7, - ["Y"] = 61.83, - ["CD"] = 0, - }, - [69] = { - ["X"] = 33.05, - ["Y"] = 57.88, - ["CD"] = 0, - }, - [70] = { - ["X"] = 32.43, - ["Y"] = 56.41, - ["CD"] = 0, - }, - [71] = { - ["X"] = 33.85, - ["Y"] = 54.08, - ["CD"] = 0, - }, - [72] = { - ["X"] = 32.68, - ["Y"] = 51.4, - ["CD"] = 0, - }, - [73] = { - ["X"] = 33.07, - ["Y"] = 48.65, - ["CD"] = 0, - }, - [74] = { - ["X"] = 34.22, - ["Y"] = 47.52, - ["CD"] = 0, - }, - [75] = { - ["X"] = 35.38, - ["Y"] = 49.24, - ["CD"] = 0, - }, - [76] = { - ["X"] = 36.3, - ["Y"] = 49.81, - ["CD"] = 0, - }, - [77] = { - ["X"] = 37.23, - ["Y"] = 53.49, - ["CD"] = 0, - }, - [78] = { - ["X"] = 37.55, - ["Y"] = 54.77, - ["CD"] = 0, - }, - [79] = { - ["X"] = 37.48, - ["Y"] = 55.75, - ["CD"] = 0, - }, - [80] = { - ["X"] = 39.14, - ["Y"] = 59.76, - ["CD"] = 0, - }, - [81] = { - ["X"] = 39.01, - ["Y"] = 58.93, - ["CD"] = 0, - }, - [82] = { - ["X"] = 38.69, - ["Y"] = 58.31, - ["CD"] = 0, - }, - [83] = { - ["X"] = 38.55, - ["Y"] = 57.23, - ["CD"] = 0, - }, - [84] = { - ["X"] = 36.59, - ["Y"] = 56.72, - ["CD"] = 0, - }, - [85] = { - ["X"] = 34.3, - ["Y"] = 55.25, - ["CD"] = 0, - }, - [86] = { - ["X"] = 26.1, - ["Y"] = 14.77, - ["CD"] = 0, - }, - [87] = { - ["X"] = 45.95, - ["Y"] = 29.55, - ["CD"] = 0, - }, - [88] = { - ["X"] = 29.47, - ["Y"] = 31.25, - ["CD"] = 0, - }, - [89] = { - ["X"] = 28.15, - ["Y"] = 37.03, - ["CD"] = 0, - }, - [90] = { - ["X"] = 26.89, - ["Y"] = 35.94, - ["CD"] = 0, - }, - [91] = { - ["X"] = 26.1, - ["Y"] = 38.55, - ["CD"] = 0, - }, - [92] = { - ["X"] = 24.92, - ["Y"] = 42.79, - ["CD"] = 0, - }, - [93] = { - ["X"] = 24.22, - ["Y"] = 45.41, - ["CD"] = 0, - }, - [94] = { - ["X"] = 23.88, - ["Y"] = 48.95, - ["CD"] = 0, - }, - [95] = { - ["X"] = 25.79, - ["Y"] = 49.81, - ["CD"] = 0, - }, - [96] = { - ["X"] = 26.82, - ["Y"] = 46.94, - ["CD"] = 0, - }, - [97] = { - ["X"] = 31.6, - ["Y"] = 49.24, - ["CD"] = 0, - }, - [98] = { - ["X"] = 33.02, - ["Y"] = 46.44, - ["CD"] = 0, - }, - [99] = { - ["X"] = 28.44, - ["Y"] = 43.1, - ["CD"] = 0, - }, - [100] = { - ["X"] = 23.55, - ["Y"] = 48.35, - ["CD"] = 0, - }, - [101] = { - ["X"] = 20.43, - ["Y"] = 52.82, - ["CD"] = 0, - }, - [102] = { - ["X"] = 25.81, - ["Y"] = 52.62, - ["CD"] = 0, - }, - [103] = { - ["X"] = 26.13, - ["Y"] = 55.42, - ["CD"] = 0, - }, - [104] = { - ["X"] = 26.22, - ["Y"] = 53.16, - ["CD"] = 0, - }, - [105] = { - ["X"] = 24.67, - ["Y"] = 51.58, - ["CD"] = 0, - }, - [106] = { - ["X"] = 24.61, - ["Y"] = 47.73, - ["CD"] = 0, - }, - [107] = { - ["X"] = 26.03, - ["Y"] = 47.65, - ["CD"] = 0, - }, - [108] = { - ["X"] = 27.94, - ["Y"] = 47.19, - ["CD"] = 0, - }, - [109] = { - ["X"] = 27.39, - ["Y"] = 44.65, - ["CD"] = 0, - }, - [110] = { - ["X"] = 32.73, - ["Y"] = 43.41, - ["CD"] = 0, - }, - [111] = { - ["X"] = 31.98, - ["Y"] = 47.64, - ["CD"] = 0, - }, - [112] = { - ["X"] = 32.51, - ["Y"] = 38.82, - ["CD"] = 0, - }, - [113] = { - ["X"] = 31.03, - ["Y"] = 38.81, - ["CD"] = 0, - }, - [114] = { - ["X"] = 30.59, - ["Y"] = 39.67, - ["CD"] = 0, - }, - [115] = { - ["X"] = 30.03, - ["Y"] = 40.09, - ["CD"] = 0, - }, - [116] = { - ["X"] = 29.63, - ["Y"] = 41.35, - ["CD"] = 0, - }, - [117] = { - ["X"] = 28.81, - ["Y"] = 43.12, - ["CD"] = 0, - }, - [118] = { - ["X"] = 30.08, - ["Y"] = 45.64, - ["CD"] = 0, - }, - [119] = { - ["X"] = 30.28, - ["Y"] = 48.27, - ["CD"] = 0, - }, - [120] = { - ["X"] = 29.93, - ["Y"] = 47.4, - ["CD"] = 0, - }, - [121] = { - ["X"] = 28.94, - ["Y"] = 47.14, - ["CD"] = 0, - }, - [122] = { - ["X"] = 27.59, - ["Y"] = 45.29, - ["CD"] = 0, - }, - [123] = { - ["X"] = 30.01, - ["Y"] = 44.34, - ["CD"] = 0, - }, - [124] = { - ["X"] = 32.22, - ["Y"] = 39.24, - ["CD"] = 0, - }, - [125] = { - ["X"] = 31.38, - ["Y"] = 38.07, - ["CD"] = 0, - }, - [126] = { - ["X"] = 32.23, - ["Y"] = 36.98, - ["CD"] = 0, - }, - [127] = { - ["X"] = 31.55, - ["Y"] = 31.57, - ["CD"] = 0, - }, - [128] = { - ["X"] = 30.92, - ["Y"] = 34.67, - ["CD"] = 0, - }, - [129] = { - ["X"] = 47.19, - ["Y"] = 39.83, - ["CD"] = 0, - }, - [130] = { - ["X"] = 50.82, - ["Y"] = 40.62, - ["CD"] = 0, - }, - [131] = { - ["X"] = 48.38, - ["Y"] = 34.1, - ["CD"] = 0, - }, - [132] = { - ["X"] = 45.59, - ["Y"] = 31.09, - ["CD"] = 0, - }, - [133] = { - ["X"] = 43.61, - ["Y"] = 35.49, - ["CD"] = 0, - }, - [134] = { - ["X"] = 35.64, - ["Y"] = 41.64, - ["CD"] = 0, - }, - [135] = { - ["X"] = 34.44, - ["Y"] = 43, - ["CD"] = 0, - }, - [136] = { - ["X"] = 47.66, - ["Y"] = 49.41, - ["CD"] = 0, - }, - [137] = { - ["X"] = 48.82, - ["Y"] = 47.86, - ["CD"] = 0, - }, - [138] = { - ["X"] = 44.12, - ["Y"] = 47.05, - ["CD"] = 0, - }, - [139] = { - ["X"] = 43.09, - ["Y"] = 48.75, - ["CD"] = 0, - }, - [140] = { - ["X"] = 40.23, - ["Y"] = 47.62, - ["CD"] = 0, - }, - [141] = { - ["X"] = 37.28, - ["Y"] = 50.18, - ["CD"] = 0, - }, - [142] = { - ["X"] = 36.33, - ["Y"] = 56.29, - ["CD"] = 0, - }, - [143] = { - ["X"] = 38.4, - ["Y"] = 56.36, - ["CD"] = 0, - }, - [144] = { - ["X"] = 40.05, - ["Y"] = 56.12, - ["CD"] = 0, - }, - [145] = { - ["X"] = 39.51, - ["Y"] = 57.12, - ["CD"] = 0, - }, - [146] = { - ["X"] = 39.43, - ["Y"] = 54.75, - ["CD"] = 0, - }, - [147] = { - ["X"] = 38.8, - ["Y"] = 51.65, - ["CD"] = 0, - }, - [148] = { - ["X"] = 38.74, - ["Y"] = 53.13, - ["CD"] = 0, - }, - [149] = { - ["X"] = 38.11, - ["Y"] = 53.06, - ["CD"] = 0, - }, - [150] = { - ["X"] = 36.71, - ["Y"] = 53.46, - ["CD"] = 0, - }, - [151] = { - ["X"] = 36.17, - ["Y"] = 53.81, - ["CD"] = 0, - }, - [152] = { - ["X"] = 34.25, - ["Y"] = 55.15, - ["CD"] = 0, - }, - [153] = { - ["X"] = 35.35, - ["Y"] = 54.5, - ["CD"] = 0, - }, - [154] = { - ["X"] = 35.27, - ["Y"] = 52.65, - ["CD"] = 0, - }, - [155] = { - ["X"] = 32.47, - ["Y"] = 45.01, - ["CD"] = 0, - }, - [156] = { - ["X"] = 34.72, - ["Y"] = 47.72, - ["CD"] = 0, - }, - [157] = { - ["X"] = 36.55, - ["Y"] = 51.57, - ["CD"] = 0, - }, - [158] = { - ["X"] = 70.42, - ["Y"] = 64.46, - ["CD"] = 0, - }, - [159] = { - ["X"] = 64.84, - ["Y"] = 55.38, - ["CD"] = 0, - }, - [160] = { - ["X"] = 44.86, - ["Y"] = 48.82, - ["CD"] = 0, - }, - [161] = { - ["X"] = 29.45, - ["Y"] = 77.91, - ["CD"] = 0, - }, - [162] = { - ["X"] = 29.8, - ["Y"] = 70.65, - ["CD"] = 0, - }, - [163] = { - ["X"] = 44.01, - ["Y"] = 41.2, - ["CD"] = 0, - }, - [164] = { - ["X"] = 41.54, - ["Y"] = 40.12, - ["CD"] = 0, - }, - [165] = { - ["X"] = 20.2, - ["Y"] = 53.96, - ["CD"] = 0, - }, - [166] = { - ["X"] = 31.44, - ["Y"] = 29.22, - ["CD"] = 0, - }, - [167] = { - ["X"] = 15.67, - ["Y"] = 37.13, - ["CD"] = 0, - }, -} -aura_env.cooldown = 600 -aura_env.wipeDistance = 50 -aura_env.angle = 0 -aura_env.hyp = 0 -aura_env.GetClosestHerb = function() - aura_env.minID = { - ["X"] = 0, - ["Y"] = 0, - ["D"] = 1000, - ["ID"] = 0, - } - local pX = GetPlayerMapPosition("player") or 0 - local pY = select(2, GetPlayerMapPosition("player")) or 0 - pX, pY = pX * 100, pY * 100 - for k, v in ipairs(aura_env.herbs) do - local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] - if cd == 0 then - local X, Y = pX - hX, pY - hY - local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) - if hyp < aura_env.minID["D"] then - aura_env.minID["X"] = hX - aura_env.minID["Y"] = hY - aura_env.minID["D"] = hyp - aura_env.minID["ID"] = k - end - end - end - return aura_env.minID["ID"] -end +aura_env.herbs = { + [1] = { + ["X"] = 67.25, + ["Y"] = 73.74, + ["CD"] = 0, + }, + [2] = { + ["X"] = 68.53, + ["Y"] = 73.25, + ["CD"] = 0, + }, + [3] = { + ["X"] = 69.34, + ["Y"] = 73.84, + ["CD"] = 0, + }, + [4] = { + ["X"] = 62.86, + ["Y"] = 51.94, + ["CD"] = 0, + }, + [5] = { + ["X"] = 63.66, + ["Y"] = 50.43, + ["CD"] = 0, + }, + [6] = { + ["X"] = 65.41, + ["Y"] = 50.69, + ["CD"] = 0, + }, + [7] = { + ["X"] = 64.95, + ["Y"] = 51.87, + ["CD"] = 0, + }, + [8] = { + ["X"] = 64.6, + ["Y"] = 54.88, + ["CD"] = 0, + }, + [9] = { + ["X"] = 52.44, + ["Y"] = 43.72, + ["CD"] = 0, + }, + [10] = { + ["X"] = 51.89, + ["Y"] = 42.38, + ["CD"] = 0, + }, + [11] = { + ["X"] = 50.37, + ["Y"] = 42.54, + ["CD"] = 0, + }, + [12] = { + ["X"] = 49.81, + ["Y"] = 41.96, + ["CD"] = 0, + }, + [13] = { + ["X"] = 49.12, + ["Y"] = 40.6, + ["CD"] = 0, + }, + [14] = { + ["X"] = 48.34, + ["Y"] = 39.21, + ["CD"] = 0, + }, + [15] = { + ["X"] = 48.02, + ["Y"] = 36.6, + ["CD"] = 0, + }, + [16] = { + ["X"] = 46.86, + ["Y"] = 36.72, + ["CD"] = 0, + }, + [17] = { + ["X"] = 46.75, + ["Y"] = 34.53, + ["CD"] = 0, + }, + [18] = { + ["X"] = 25.94, + ["Y"] = 28.99, + ["CD"] = 0, + }, + [19] = { + ["X"] = 29.48, + ["Y"] = 25.3, + ["CD"] = 0, + }, + [20] = { + ["X"] = 28.4, + ["Y"] = 25.56, + ["CD"] = 0, + }, + [21] = { + ["X"] = 28.51, + ["Y"] = 23.82, + ["CD"] = 0, + }, + [22] = { + ["X"] = 29.61, + ["Y"] = 22.79, + ["CD"] = 0, + }, + [23] = { + ["X"] = 29.75, + ["Y"] = 21.84, + ["CD"] = 0, + }, + [24] = { + ["X"] = 26.43, + ["Y"] = 10.9, + ["CD"] = 0, + }, + [25] = { + ["X"] = 25.97, + ["Y"] = 12.48, + ["CD"] = 0, + }, + [26] = { + ["X"] = 25.9, + ["Y"] = 15.81, + ["CD"] = 0, + }, + [27] = { + ["X"] = 25.73, + ["Y"] = 16.64, + ["CD"] = 0, + }, + [28] = { + ["X"] = 25.45, + ["Y"] = 17.29, + ["CD"] = 0, + }, + [29] = { + ["X"] = 25.4, + ["Y"] = 18.4, + ["CD"] = 0, + }, + [30] = { + ["X"] = 25.26, + ["Y"] = 19.79, + ["CD"] = 0, + }, + [31] = { + ["X"] = 26.03, + ["Y"] = 24.44, + ["CD"] = 0, + }, + [32] = { + ["X"] = 26.04, + ["Y"] = 23.22, + ["CD"] = 0, + }, + [33] = { + ["X"] = 24.19, + ["Y"] = 23.27, + ["CD"] = 0, + }, + [34] = { + ["X"] = 24.28, + ["Y"] = 24.89, + ["CD"] = 0, + }, + [35] = { + ["X"] = 24.47, + ["Y"] = 25.24, + ["CD"] = 0, + }, + [36] = { + ["X"] = 24.46, + ["Y"] = 26.17, + ["CD"] = 0, + }, + [37] = { + ["X"] = 24.98, + ["Y"] = 27.02, + ["CD"] = 0, + }, + [38] = { + ["X"] = 24.82, + ["Y"] = 27.95, + ["CD"] = 0, + }, + [39] = { + ["X"] = 24.87, + ["Y"] = 29.34, + ["CD"] = 0, + }, + [40] = { + ["X"] = 24.49, + ["Y"] = 30.19, + ["CD"] = 0, + }, + [41] = { + ["X"] = 23.53, + ["Y"] = 30.88, + ["CD"] = 0, + }, + [42] = { + ["X"] = 23.17, + ["Y"] = 31.72, + ["CD"] = 0, + }, + [43] = { + ["X"] = 22.88, + ["Y"] = 32.62, + ["CD"] = 0, + }, + [44] = { + ["X"] = 21.65, + ["Y"] = 33.2, + ["CD"] = 0, + }, + [45] = { + ["X"] = 19.95, + ["Y"] = 33.28, + ["CD"] = 0, + }, + [46] = { + ["X"] = 21.16, + ["Y"] = 34.77, + ["CD"] = 0, + }, + [47] = { + ["X"] = 22.35, + ["Y"] = 34.03, + ["CD"] = 0, + }, + [48] = { + ["X"] = 31.87, + ["Y"] = 52.38, + ["CD"] = 0, + }, + [49] = { + ["X"] = 30.31, + ["Y"] = 53, + ["CD"] = 0, + }, + [50] = { + ["X"] = 28.27, + ["Y"] = 53.65, + ["CD"] = 0, + }, + [51] = { + ["X"] = 27.54, + ["Y"] = 53.51, + ["CD"] = 0, + }, + [52] = { + ["X"] = 27.6, + ["Y"] = 52.81, + ["CD"] = 0, + }, + [53] = { + ["X"] = 26.91, + ["Y"] = 53.27, + ["CD"] = 0, + }, + [54] = { + ["X"] = 25.45, + ["Y"] = 54.29, + ["CD"] = 0, + }, + [55] = { + ["X"] = 25.36, + ["Y"] = 53.45, + ["CD"] = 0, + }, + [56] = { + ["X"] = 22.29, + ["Y"] = 54.37, + ["CD"] = 0, + }, + [57] = { + ["X"] = 23.11, + ["Y"] = 55.13, + ["CD"] = 0, + }, + [58] = { + ["X"] = 24.34, + ["Y"] = 55.09, + ["CD"] = 0, + }, + [59] = { + ["X"] = 24.03, + ["Y"] = 55.88, + ["CD"] = 0, + }, + [60] = { + ["X"] = 24.95, + ["Y"] = 59.85, + ["CD"] = 0, + }, + [61] = { + ["X"] = 24.84, + ["Y"] = 61.41, + ["CD"] = 0, + }, + [62] = { + ["X"] = 34.59, + ["Y"] = 69.79, + ["CD"] = 0, + }, + [63] = { + ["X"] = 33.59, + ["Y"] = 68.41, + ["CD"] = 0, + }, + [64] = { + ["X"] = 31.96, + ["Y"] = 69.06, + ["CD"] = 0, + }, + [65] = { + ["X"] = 29.87, + ["Y"] = 65.93, + ["CD"] = 0, + }, + [66] = { + ["X"] = 30.95, + ["Y"] = 64.82, + ["CD"] = 0, + }, + [67] = { + ["X"] = 32.43, + ["Y"] = 62.85, + ["CD"] = 0, + }, + [68] = { + ["X"] = 32.7, + ["Y"] = 61.83, + ["CD"] = 0, + }, + [69] = { + ["X"] = 33.05, + ["Y"] = 57.88, + ["CD"] = 0, + }, + [70] = { + ["X"] = 32.43, + ["Y"] = 56.41, + ["CD"] = 0, + }, + [71] = { + ["X"] = 33.85, + ["Y"] = 54.08, + ["CD"] = 0, + }, + [72] = { + ["X"] = 32.68, + ["Y"] = 51.4, + ["CD"] = 0, + }, + [73] = { + ["X"] = 33.07, + ["Y"] = 48.65, + ["CD"] = 0, + }, + [74] = { + ["X"] = 34.22, + ["Y"] = 47.52, + ["CD"] = 0, + }, + [75] = { + ["X"] = 35.38, + ["Y"] = 49.24, + ["CD"] = 0, + }, + [76] = { + ["X"] = 36.3, + ["Y"] = 49.81, + ["CD"] = 0, + }, + [77] = { + ["X"] = 37.23, + ["Y"] = 53.49, + ["CD"] = 0, + }, + [78] = { + ["X"] = 37.55, + ["Y"] = 54.77, + ["CD"] = 0, + }, + [79] = { + ["X"] = 37.48, + ["Y"] = 55.75, + ["CD"] = 0, + }, + [80] = { + ["X"] = 39.14, + ["Y"] = 59.76, + ["CD"] = 0, + }, + [81] = { + ["X"] = 39.01, + ["Y"] = 58.93, + ["CD"] = 0, + }, + [82] = { + ["X"] = 38.69, + ["Y"] = 58.31, + ["CD"] = 0, + }, + [83] = { + ["X"] = 38.55, + ["Y"] = 57.23, + ["CD"] = 0, + }, + [84] = { + ["X"] = 36.59, + ["Y"] = 56.72, + ["CD"] = 0, + }, + [85] = { + ["X"] = 34.3, + ["Y"] = 55.25, + ["CD"] = 0, + }, + [86] = { + ["X"] = 26.1, + ["Y"] = 14.77, + ["CD"] = 0, + }, + [87] = { + ["X"] = 45.95, + ["Y"] = 29.55, + ["CD"] = 0, + }, + [88] = { + ["X"] = 29.47, + ["Y"] = 31.25, + ["CD"] = 0, + }, + [89] = { + ["X"] = 28.15, + ["Y"] = 37.03, + ["CD"] = 0, + }, + [90] = { + ["X"] = 26.89, + ["Y"] = 35.94, + ["CD"] = 0, + }, + [91] = { + ["X"] = 26.1, + ["Y"] = 38.55, + ["CD"] = 0, + }, + [92] = { + ["X"] = 24.92, + ["Y"] = 42.79, + ["CD"] = 0, + }, + [93] = { + ["X"] = 24.22, + ["Y"] = 45.41, + ["CD"] = 0, + }, + [94] = { + ["X"] = 23.88, + ["Y"] = 48.95, + ["CD"] = 0, + }, + [95] = { + ["X"] = 25.79, + ["Y"] = 49.81, + ["CD"] = 0, + }, + [96] = { + ["X"] = 26.82, + ["Y"] = 46.94, + ["CD"] = 0, + }, + [97] = { + ["X"] = 31.6, + ["Y"] = 49.24, + ["CD"] = 0, + }, + [98] = { + ["X"] = 33.02, + ["Y"] = 46.44, + ["CD"] = 0, + }, + [99] = { + ["X"] = 28.44, + ["Y"] = 43.1, + ["CD"] = 0, + }, + [100] = { + ["X"] = 23.55, + ["Y"] = 48.35, + ["CD"] = 0, + }, + [101] = { + ["X"] = 20.43, + ["Y"] = 52.82, + ["CD"] = 0, + }, + [102] = { + ["X"] = 25.81, + ["Y"] = 52.62, + ["CD"] = 0, + }, + [103] = { + ["X"] = 26.13, + ["Y"] = 55.42, + ["CD"] = 0, + }, + [104] = { + ["X"] = 26.22, + ["Y"] = 53.16, + ["CD"] = 0, + }, + [105] = { + ["X"] = 24.67, + ["Y"] = 51.58, + ["CD"] = 0, + }, + [106] = { + ["X"] = 24.61, + ["Y"] = 47.73, + ["CD"] = 0, + }, + [107] = { + ["X"] = 26.03, + ["Y"] = 47.65, + ["CD"] = 0, + }, + [108] = { + ["X"] = 27.94, + ["Y"] = 47.19, + ["CD"] = 0, + }, + [109] = { + ["X"] = 27.39, + ["Y"] = 44.65, + ["CD"] = 0, + }, + [110] = { + ["X"] = 32.73, + ["Y"] = 43.41, + ["CD"] = 0, + }, + [111] = { + ["X"] = 31.98, + ["Y"] = 47.64, + ["CD"] = 0, + }, + [112] = { + ["X"] = 32.51, + ["Y"] = 38.82, + ["CD"] = 0, + }, + [113] = { + ["X"] = 31.03, + ["Y"] = 38.81, + ["CD"] = 0, + }, + [114] = { + ["X"] = 30.59, + ["Y"] = 39.67, + ["CD"] = 0, + }, + [115] = { + ["X"] = 30.03, + ["Y"] = 40.09, + ["CD"] = 0, + }, + [116] = { + ["X"] = 29.63, + ["Y"] = 41.35, + ["CD"] = 0, + }, + [117] = { + ["X"] = 28.81, + ["Y"] = 43.12, + ["CD"] = 0, + }, + [118] = { + ["X"] = 30.08, + ["Y"] = 45.64, + ["CD"] = 0, + }, + [119] = { + ["X"] = 30.28, + ["Y"] = 48.27, + ["CD"] = 0, + }, + [120] = { + ["X"] = 29.93, + ["Y"] = 47.4, + ["CD"] = 0, + }, + [121] = { + ["X"] = 28.94, + ["Y"] = 47.14, + ["CD"] = 0, + }, + [122] = { + ["X"] = 27.59, + ["Y"] = 45.29, + ["CD"] = 0, + }, + [123] = { + ["X"] = 30.01, + ["Y"] = 44.34, + ["CD"] = 0, + }, + [124] = { + ["X"] = 32.22, + ["Y"] = 39.24, + ["CD"] = 0, + }, + [125] = { + ["X"] = 31.38, + ["Y"] = 38.07, + ["CD"] = 0, + }, + [126] = { + ["X"] = 32.23, + ["Y"] = 36.98, + ["CD"] = 0, + }, + [127] = { + ["X"] = 31.55, + ["Y"] = 31.57, + ["CD"] = 0, + }, + [128] = { + ["X"] = 30.92, + ["Y"] = 34.67, + ["CD"] = 0, + }, + [129] = { + ["X"] = 47.19, + ["Y"] = 39.83, + ["CD"] = 0, + }, + [130] = { + ["X"] = 50.82, + ["Y"] = 40.62, + ["CD"] = 0, + }, + [131] = { + ["X"] = 48.38, + ["Y"] = 34.1, + ["CD"] = 0, + }, + [132] = { + ["X"] = 45.59, + ["Y"] = 31.09, + ["CD"] = 0, + }, + [133] = { + ["X"] = 43.61, + ["Y"] = 35.49, + ["CD"] = 0, + }, + [134] = { + ["X"] = 35.64, + ["Y"] = 41.64, + ["CD"] = 0, + }, + [135] = { + ["X"] = 34.44, + ["Y"] = 43, + ["CD"] = 0, + }, + [136] = { + ["X"] = 47.66, + ["Y"] = 49.41, + ["CD"] = 0, + }, + [137] = { + ["X"] = 48.82, + ["Y"] = 47.86, + ["CD"] = 0, + }, + [138] = { + ["X"] = 44.12, + ["Y"] = 47.05, + ["CD"] = 0, + }, + [139] = { + ["X"] = 43.09, + ["Y"] = 48.75, + ["CD"] = 0, + }, + [140] = { + ["X"] = 40.23, + ["Y"] = 47.62, + ["CD"] = 0, + }, + [141] = { + ["X"] = 37.28, + ["Y"] = 50.18, + ["CD"] = 0, + }, + [142] = { + ["X"] = 36.33, + ["Y"] = 56.29, + ["CD"] = 0, + }, + [143] = { + ["X"] = 38.4, + ["Y"] = 56.36, + ["CD"] = 0, + }, + [144] = { + ["X"] = 40.05, + ["Y"] = 56.12, + ["CD"] = 0, + }, + [145] = { + ["X"] = 39.51, + ["Y"] = 57.12, + ["CD"] = 0, + }, + [146] = { + ["X"] = 39.43, + ["Y"] = 54.75, + ["CD"] = 0, + }, + [147] = { + ["X"] = 38.8, + ["Y"] = 51.65, + ["CD"] = 0, + }, + [148] = { + ["X"] = 38.74, + ["Y"] = 53.13, + ["CD"] = 0, + }, + [149] = { + ["X"] = 38.11, + ["Y"] = 53.06, + ["CD"] = 0, + }, + [150] = { + ["X"] = 36.71, + ["Y"] = 53.46, + ["CD"] = 0, + }, + [151] = { + ["X"] = 36.17, + ["Y"] = 53.81, + ["CD"] = 0, + }, + [152] = { + ["X"] = 34.25, + ["Y"] = 55.15, + ["CD"] = 0, + }, + [153] = { + ["X"] = 35.35, + ["Y"] = 54.5, + ["CD"] = 0, + }, + [154] = { + ["X"] = 35.27, + ["Y"] = 52.65, + ["CD"] = 0, + }, + [155] = { + ["X"] = 32.47, + ["Y"] = 45.01, + ["CD"] = 0, + }, + [156] = { + ["X"] = 34.72, + ["Y"] = 47.72, + ["CD"] = 0, + }, + [157] = { + ["X"] = 36.55, + ["Y"] = 51.57, + ["CD"] = 0, + }, + [158] = { + ["X"] = 70.42, + ["Y"] = 64.46, + ["CD"] = 0, + }, + [159] = { + ["X"] = 64.84, + ["Y"] = 55.38, + ["CD"] = 0, + }, + [160] = { + ["X"] = 44.86, + ["Y"] = 48.82, + ["CD"] = 0, + }, + [161] = { + ["X"] = 29.45, + ["Y"] = 77.91, + ["CD"] = 0, + }, + [162] = { + ["X"] = 29.8, + ["Y"] = 70.65, + ["CD"] = 0, + }, + [163] = { + ["X"] = 44.01, + ["Y"] = 41.2, + ["CD"] = 0, + }, + [164] = { + ["X"] = 41.54, + ["Y"] = 40.12, + ["CD"] = 0, + }, + [165] = { + ["X"] = 20.2, + ["Y"] = 53.96, + ["CD"] = 0, + }, + [166] = { + ["X"] = 31.44, + ["Y"] = 29.22, + ["CD"] = 0, + }, + [167] = { + ["X"] = 15.67, + ["Y"] = 37.13, + ["CD"] = 0, + }, +} +aura_env.cooldown = 600 +aura_env.wipeDistance = 50 +aura_env.angle = 0 +aura_env.hyp = 0 +aura_env.GetClosestHerb = function() + aura_env.minID = { + ["X"] = 0, + ["Y"] = 0, + ["D"] = 1000, + ["ID"] = 0, + } + local pX = GetPlayerMapPosition("player") or 0 + local pY = select(2, GetPlayerMapPosition("player")) or 0 + pX, pY = pX * 100, pY * 100 + for k, v in ipairs(aura_env.herbs) do + local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] + if cd == 0 then + local X, Y = pX - hX, pY - hY + local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) + if hyp < aura_env.minID["D"] then + aura_env.minID["X"] = hX + aura_env.minID["Y"] = hY + aura_env.minID["D"] = hyp + aura_env.minID["ID"] = k + end + end + end + return aura_env.minID["ID"] +end diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate.lua b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate.lua similarity index 93% rename from Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate.lua rename to WeakAuras/Projects/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate.lua index 31fa760..4f4fc28 100644 --- a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate.lua +++ b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate.lua @@ -1,431 +1,431 @@ -aura_env.herbs = { - [1] = { - ["X"] = 29.47, - ["Y"] = 31.25, - ["CD"] = 0, - }, - [2] = { - ["X"] = 28.15, - ["Y"] = 37.03, - ["CD"] = 0, - }, - [3] = { - ["X"] = 26.89, - ["Y"] = 35.94, - ["CD"] = 0, - }, - [4] = { - ["X"] = 26.1, - ["Y"] = 38.55, - ["CD"] = 0, - }, - [5] = { - ["X"] = 24.92, - ["Y"] = 42.79, - ["CD"] = 0, - }, - [6] = { - ["X"] = 24.22, - ["Y"] = 45.41, - ["CD"] = 0, - }, - [7] = { - ["X"] = 23.88, - ["Y"] = 48.95, - ["CD"] = 0, - }, - [8] = { - ["X"] = 25.79, - ["Y"] = 49.81, - ["CD"] = 0, - }, - [9] = { - ["X"] = 26.82, - ["Y"] = 46.94, - ["CD"] = 0, - }, - [10] = { - ["X"] = 31.6, - ["Y"] = 49.24, - ["CD"] = 0, - }, - [11] = { - ["X"] = 33.02, - ["Y"] = 46.44, - ["CD"] = 0, - }, - [12] = { - ["X"] = 28.44, - ["Y"] = 43.1, - ["CD"] = 0, - }, - [13] = { - ["X"] = 23.55, - ["Y"] = 48.35, - ["CD"] = 0, - }, - [14] = { - ["X"] = 20.43, - ["Y"] = 52.82, - ["CD"] = 0, - }, - [15] = { - ["X"] = 25.81, - ["Y"] = 52.62, - ["CD"] = 0, - }, - [16] = { - ["X"] = 26.13, - ["Y"] = 55.42, - ["CD"] = 0, - }, - [17] = { - ["X"] = 26.22, - ["Y"] = 53.16, - ["CD"] = 0, - }, - [18] = { - ["X"] = 24.67, - ["Y"] = 51.58, - ["CD"] = 0, - }, - [19] = { - ["X"] = 24.61, - ["Y"] = 47.73, - ["CD"] = 0, - }, - [20] = { - ["X"] = 26.03, - ["Y"] = 47.65, - ["CD"] = 0, - }, - [21] = { - ["X"] = 27.94, - ["Y"] = 47.19, - ["CD"] = 0, - }, - [22] = { - ["X"] = 27.39, - ["Y"] = 44.65, - ["CD"] = 0, - }, - [23] = { - ["X"] = 32.73, - ["Y"] = 43.41, - ["CD"] = 0, - }, - [24] = { - ["X"] = 31.98, - ["Y"] = 47.64, - ["CD"] = 0, - }, - [25] = { - ["X"] = 32.51, - ["Y"] = 38.82, - ["CD"] = 0, - }, - [26] = { - ["X"] = 31.03, - ["Y"] = 38.81, - ["CD"] = 0, - }, - [27] = { - ["X"] = 30.59, - ["Y"] = 39.67, - ["CD"] = 0, - }, - [28] = { - ["X"] = 30.03, - ["Y"] = 40.09, - ["CD"] = 0, - }, - [29] = { - ["X"] = 29.63, - ["Y"] = 41.35, - ["CD"] = 0, - }, - [30] = { - ["X"] = 28.81, - ["Y"] = 43.12, - ["CD"] = 0, - }, - [31] = { - ["X"] = 30.08, - ["Y"] = 45.64, - ["CD"] = 0, - }, - [32] = { - ["X"] = 30.28, - ["Y"] = 48.27, - ["CD"] = 0, - }, - [33] = { - ["X"] = 29.93, - ["Y"] = 47.4, - ["CD"] = 0, - }, - [34] = { - ["X"] = 28.94, - ["Y"] = 47.14, - ["CD"] = 0, - }, - [35] = { - ["X"] = 27.59, - ["Y"] = 45.29, - ["CD"] = 0, - }, - [36] = { - ["X"] = 30.01, - ["Y"] = 44.34, - ["CD"] = 0, - }, - [37] = { - ["X"] = 32.22, - ["Y"] = 39.24, - ["CD"] = 0, - }, - [38] = { - ["X"] = 31.38, - ["Y"] = 38.07, - ["CD"] = 0, - }, - [39] = { - ["X"] = 32.23, - ["Y"] = 36.98, - ["CD"] = 0, - }, - [40] = { - ["X"] = 31.55, - ["Y"] = 31.57, - ["CD"] = 0, - }, - [41] = { - ["X"] = 30.92, - ["Y"] = 34.67, - ["CD"] = 0, - }, - [42] = { - ["X"] = 47.19, - ["Y"] = 39.83, - ["CD"] = 0, - }, - [43] = { - ["X"] = 50.82, - ["Y"] = 40.62, - ["CD"] = 0, - }, - [44] = { - ["X"] = 48.38, - ["Y"] = 34.1, - ["CD"] = 0, - }, - [45] = { - ["X"] = 45.59, - ["Y"] = 31.09, - ["CD"] = 0, - }, - [46] = { - ["X"] = 43.61, - ["Y"] = 35.49, - ["CD"] = 0, - }, - [47] = { - ["X"] = 35.64, - ["Y"] = 41.64, - ["CD"] = 0, - }, - [48] = { - ["X"] = 34.44, - ["Y"] = 43, - ["CD"] = 0, - }, - [49] = { - ["X"] = 47.66, - ["Y"] = 49.41, - ["CD"] = 0, - }, - [50] = { - ["X"] = 48.82, - ["Y"] = 47.86, - ["CD"] = 0, - }, - [51] = { - ["X"] = 44.12, - ["Y"] = 47.05, - ["CD"] = 0, - }, - [52] = { - ["X"] = 43.09, - ["Y"] = 48.75, - ["CD"] = 0, - }, - [53] = { - ["X"] = 40.23, - ["Y"] = 47.62, - ["CD"] = 0, - }, - [54] = { - ["X"] = 37.28, - ["Y"] = 50.18, - ["CD"] = 0, - }, - [55] = { - ["X"] = 36.33, - ["Y"] = 56.29, - ["CD"] = 0, - }, - [56] = { - ["X"] = 38.4, - ["Y"] = 56.36, - ["CD"] = 0, - }, - [57] = { - ["X"] = 40.05, - ["Y"] = 56.12, - ["CD"] = 0, - }, - [58] = { - ["X"] = 39.51, - ["Y"] = 57.12, - ["CD"] = 0, - }, - [59] = { - ["X"] = 39.43, - ["Y"] = 54.75, - ["CD"] = 0, - }, - [60] = { - ["X"] = 38.8, - ["Y"] = 51.65, - ["CD"] = 0, - }, - [61] = { - ["X"] = 38.74, - ["Y"] = 53.13, - ["CD"] = 0, - }, - [62] = { - ["X"] = 38.11, - ["Y"] = 53.06, - ["CD"] = 0, - }, - [63] = { - ["X"] = 36.71, - ["Y"] = 53.46, - ["CD"] = 0, - }, - [64] = { - ["X"] = 36.17, - ["Y"] = 53.81, - ["CD"] = 0, - }, - [65] = { - ["X"] = 34.25, - ["Y"] = 55.15, - ["CD"] = 0, - }, - [66] = { - ["X"] = 35.35, - ["Y"] = 54.5, - ["CD"] = 0, - }, - [67] = { - ["X"] = 35.27, - ["Y"] = 52.65, - ["CD"] = 0, - }, - [68] = { - ["X"] = 32.47, - ["Y"] = 45.01, - ["CD"] = 0, - }, - [69] = { - ["X"] = 34.72, - ["Y"] = 47.72, - ["CD"] = 0, - }, - [70] = { - ["X"] = 36.55, - ["Y"] = 51.57, - ["CD"] = 0, - }, - [71] = { - ["X"] = 70.42, - ["Y"] = 64.46, - ["CD"] = 0, - }, - [72] = { - ["X"] = 64.84, - ["Y"] = 55.38, - ["CD"] = 0, - }, - [73] = { - ["X"] = 44.86, - ["Y"] = 48.82, - ["CD"] = 0, - }, - [74] = { - ["X"] = 29.45, - ["Y"] = 77.91, - ["CD"] = 0, - }, - [75] = { - ["X"] = 29.8, - ["Y"] = 70.65, - ["CD"] = 0, - }, - [76] = { - ["X"] = 44.01, - ["Y"] = 41.2, - ["CD"] = 0, - }, - [77] = { - ["X"] = 41.54, - ["Y"] = 40.12, - ["CD"] = 0, - }, - [78] = { - ["X"] = 20.2, - ["Y"] = 53.96, - ["CD"] = 0, - }, - [79] = { - ["X"] = 31.44, - ["Y"] = 29.22, - ["CD"] = 0, - }, - [80] = { - ["X"] = 15.67, - ["Y"] = 37.13, - ["CD"] = 0, - }, -} -aura_env.cooldown = 600 -aura_env.wipeDistance = 50 -aura_env.angle = 0 -aura_env.hyp = 0 -aura_env.GetClosestHerb = function() - aura_env.minID = { - ["X"] = 0, - ["Y"] = 0, - ["D"] = 1000, - ["ID"] = 0, - } - local pX = GetPlayerMapPosition("player") or 0 - local pY = select(2, GetPlayerMapPosition("player")) or 0 - pX, pY = pX * 100, pY * 100 - for k, v in ipairs(aura_env.herbs) do - local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] - if cd == 0 then - local X, Y = pX - hX, pY - hY - local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) - if hyp < aura_env.minID["D"] then - aura_env.minID["X"] = hX - aura_env.minID["Y"] = hY - aura_env.minID["D"] = hyp - aura_env.minID["ID"] = k - end - end - end - return aura_env.minID["ID"] -end +aura_env.herbs = { + [1] = { + ["X"] = 29.47, + ["Y"] = 31.25, + ["CD"] = 0, + }, + [2] = { + ["X"] = 28.15, + ["Y"] = 37.03, + ["CD"] = 0, + }, + [3] = { + ["X"] = 26.89, + ["Y"] = 35.94, + ["CD"] = 0, + }, + [4] = { + ["X"] = 26.1, + ["Y"] = 38.55, + ["CD"] = 0, + }, + [5] = { + ["X"] = 24.92, + ["Y"] = 42.79, + ["CD"] = 0, + }, + [6] = { + ["X"] = 24.22, + ["Y"] = 45.41, + ["CD"] = 0, + }, + [7] = { + ["X"] = 23.88, + ["Y"] = 48.95, + ["CD"] = 0, + }, + [8] = { + ["X"] = 25.79, + ["Y"] = 49.81, + ["CD"] = 0, + }, + [9] = { + ["X"] = 26.82, + ["Y"] = 46.94, + ["CD"] = 0, + }, + [10] = { + ["X"] = 31.6, + ["Y"] = 49.24, + ["CD"] = 0, + }, + [11] = { + ["X"] = 33.02, + ["Y"] = 46.44, + ["CD"] = 0, + }, + [12] = { + ["X"] = 28.44, + ["Y"] = 43.1, + ["CD"] = 0, + }, + [13] = { + ["X"] = 23.55, + ["Y"] = 48.35, + ["CD"] = 0, + }, + [14] = { + ["X"] = 20.43, + ["Y"] = 52.82, + ["CD"] = 0, + }, + [15] = { + ["X"] = 25.81, + ["Y"] = 52.62, + ["CD"] = 0, + }, + [16] = { + ["X"] = 26.13, + ["Y"] = 55.42, + ["CD"] = 0, + }, + [17] = { + ["X"] = 26.22, + ["Y"] = 53.16, + ["CD"] = 0, + }, + [18] = { + ["X"] = 24.67, + ["Y"] = 51.58, + ["CD"] = 0, + }, + [19] = { + ["X"] = 24.61, + ["Y"] = 47.73, + ["CD"] = 0, + }, + [20] = { + ["X"] = 26.03, + ["Y"] = 47.65, + ["CD"] = 0, + }, + [21] = { + ["X"] = 27.94, + ["Y"] = 47.19, + ["CD"] = 0, + }, + [22] = { + ["X"] = 27.39, + ["Y"] = 44.65, + ["CD"] = 0, + }, + [23] = { + ["X"] = 32.73, + ["Y"] = 43.41, + ["CD"] = 0, + }, + [24] = { + ["X"] = 31.98, + ["Y"] = 47.64, + ["CD"] = 0, + }, + [25] = { + ["X"] = 32.51, + ["Y"] = 38.82, + ["CD"] = 0, + }, + [26] = { + ["X"] = 31.03, + ["Y"] = 38.81, + ["CD"] = 0, + }, + [27] = { + ["X"] = 30.59, + ["Y"] = 39.67, + ["CD"] = 0, + }, + [28] = { + ["X"] = 30.03, + ["Y"] = 40.09, + ["CD"] = 0, + }, + [29] = { + ["X"] = 29.63, + ["Y"] = 41.35, + ["CD"] = 0, + }, + [30] = { + ["X"] = 28.81, + ["Y"] = 43.12, + ["CD"] = 0, + }, + [31] = { + ["X"] = 30.08, + ["Y"] = 45.64, + ["CD"] = 0, + }, + [32] = { + ["X"] = 30.28, + ["Y"] = 48.27, + ["CD"] = 0, + }, + [33] = { + ["X"] = 29.93, + ["Y"] = 47.4, + ["CD"] = 0, + }, + [34] = { + ["X"] = 28.94, + ["Y"] = 47.14, + ["CD"] = 0, + }, + [35] = { + ["X"] = 27.59, + ["Y"] = 45.29, + ["CD"] = 0, + }, + [36] = { + ["X"] = 30.01, + ["Y"] = 44.34, + ["CD"] = 0, + }, + [37] = { + ["X"] = 32.22, + ["Y"] = 39.24, + ["CD"] = 0, + }, + [38] = { + ["X"] = 31.38, + ["Y"] = 38.07, + ["CD"] = 0, + }, + [39] = { + ["X"] = 32.23, + ["Y"] = 36.98, + ["CD"] = 0, + }, + [40] = { + ["X"] = 31.55, + ["Y"] = 31.57, + ["CD"] = 0, + }, + [41] = { + ["X"] = 30.92, + ["Y"] = 34.67, + ["CD"] = 0, + }, + [42] = { + ["X"] = 47.19, + ["Y"] = 39.83, + ["CD"] = 0, + }, + [43] = { + ["X"] = 50.82, + ["Y"] = 40.62, + ["CD"] = 0, + }, + [44] = { + ["X"] = 48.38, + ["Y"] = 34.1, + ["CD"] = 0, + }, + [45] = { + ["X"] = 45.59, + ["Y"] = 31.09, + ["CD"] = 0, + }, + [46] = { + ["X"] = 43.61, + ["Y"] = 35.49, + ["CD"] = 0, + }, + [47] = { + ["X"] = 35.64, + ["Y"] = 41.64, + ["CD"] = 0, + }, + [48] = { + ["X"] = 34.44, + ["Y"] = 43, + ["CD"] = 0, + }, + [49] = { + ["X"] = 47.66, + ["Y"] = 49.41, + ["CD"] = 0, + }, + [50] = { + ["X"] = 48.82, + ["Y"] = 47.86, + ["CD"] = 0, + }, + [51] = { + ["X"] = 44.12, + ["Y"] = 47.05, + ["CD"] = 0, + }, + [52] = { + ["X"] = 43.09, + ["Y"] = 48.75, + ["CD"] = 0, + }, + [53] = { + ["X"] = 40.23, + ["Y"] = 47.62, + ["CD"] = 0, + }, + [54] = { + ["X"] = 37.28, + ["Y"] = 50.18, + ["CD"] = 0, + }, + [55] = { + ["X"] = 36.33, + ["Y"] = 56.29, + ["CD"] = 0, + }, + [56] = { + ["X"] = 38.4, + ["Y"] = 56.36, + ["CD"] = 0, + }, + [57] = { + ["X"] = 40.05, + ["Y"] = 56.12, + ["CD"] = 0, + }, + [58] = { + ["X"] = 39.51, + ["Y"] = 57.12, + ["CD"] = 0, + }, + [59] = { + ["X"] = 39.43, + ["Y"] = 54.75, + ["CD"] = 0, + }, + [60] = { + ["X"] = 38.8, + ["Y"] = 51.65, + ["CD"] = 0, + }, + [61] = { + ["X"] = 38.74, + ["Y"] = 53.13, + ["CD"] = 0, + }, + [62] = { + ["X"] = 38.11, + ["Y"] = 53.06, + ["CD"] = 0, + }, + [63] = { + ["X"] = 36.71, + ["Y"] = 53.46, + ["CD"] = 0, + }, + [64] = { + ["X"] = 36.17, + ["Y"] = 53.81, + ["CD"] = 0, + }, + [65] = { + ["X"] = 34.25, + ["Y"] = 55.15, + ["CD"] = 0, + }, + [66] = { + ["X"] = 35.35, + ["Y"] = 54.5, + ["CD"] = 0, + }, + [67] = { + ["X"] = 35.27, + ["Y"] = 52.65, + ["CD"] = 0, + }, + [68] = { + ["X"] = 32.47, + ["Y"] = 45.01, + ["CD"] = 0, + }, + [69] = { + ["X"] = 34.72, + ["Y"] = 47.72, + ["CD"] = 0, + }, + [70] = { + ["X"] = 36.55, + ["Y"] = 51.57, + ["CD"] = 0, + }, + [71] = { + ["X"] = 70.42, + ["Y"] = 64.46, + ["CD"] = 0, + }, + [72] = { + ["X"] = 64.84, + ["Y"] = 55.38, + ["CD"] = 0, + }, + [73] = { + ["X"] = 44.86, + ["Y"] = 48.82, + ["CD"] = 0, + }, + [74] = { + ["X"] = 29.45, + ["Y"] = 77.91, + ["CD"] = 0, + }, + [75] = { + ["X"] = 29.8, + ["Y"] = 70.65, + ["CD"] = 0, + }, + [76] = { + ["X"] = 44.01, + ["Y"] = 41.2, + ["CD"] = 0, + }, + [77] = { + ["X"] = 41.54, + ["Y"] = 40.12, + ["CD"] = 0, + }, + [78] = { + ["X"] = 20.2, + ["Y"] = 53.96, + ["CD"] = 0, + }, + [79] = { + ["X"] = 31.44, + ["Y"] = 29.22, + ["CD"] = 0, + }, + [80] = { + ["X"] = 15.67, + ["Y"] = 37.13, + ["CD"] = 0, + }, +} +aura_env.cooldown = 600 +aura_env.wipeDistance = 50 +aura_env.angle = 0 +aura_env.hyp = 0 +aura_env.GetClosestHerb = function() + aura_env.minID = { + ["X"] = 0, + ["Y"] = 0, + ["D"] = 1000, + ["ID"] = 0, + } + local pX = GetPlayerMapPosition("player") or 0 + local pY = select(2, GetPlayerMapPosition("player")) or 0 + pX, pY = pX * 100, pY * 100 + for k, v in ipairs(aura_env.herbs) do + local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] + if cd == 0 then + local X, Y = pX - hX, pY - hY + local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) + if hyp < aura_env.minID["D"] then + aura_env.minID["X"] = hX + aura_env.minID["Y"] = hY + aura_env.minID["D"] = hyp + aura_env.minID["ID"] = k + end + end + end + return aura_env.minID["ID"] +end diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Leystone/Leystone Deposit.lua b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Mining/Leystone/Leystone Deposit.lua similarity index 93% rename from Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Leystone/Leystone Deposit.lua rename to WeakAuras/Projects/Herb Sniffer/Herb Arrays/Mining/Leystone/Leystone Deposit.lua index 43a021b..19e12d1 100644 --- a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Leystone/Leystone Deposit.lua +++ b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Mining/Leystone/Leystone Deposit.lua @@ -1,356 +1,356 @@ -aura_env.herbs = { - [1] = { - ["X"] = 20.97, - ["Y"] = 15.47, - ["CD"] = 0, - }, - [2] = { - ["X"] = 27.52, - ["Y"] = 9.17, - ["CD"] = 0, - }, - [3] = { - ["X"] = 25.93, - ["Y"] = 25.58, - ["CD"] = 0, - }, - [4] = { - ["X"] = 34.07, - ["Y"] = 50.83, - ["CD"] = 0, - }, - [5] = { - ["X"] = 37.23, - ["Y"] = 54.85, - ["CD"] = 0, - }, - [6] = { - ["X"] = 34.77, - ["Y"] = 58.4, - ["CD"] = 0, - }, - [7] = { - ["X"] = 39.56, - ["Y"] = 79.48, - ["CD"] = 0, - }, - [8] = { - ["X"] = 66.46, - ["Y"] = 57.51, - ["CD"] = 0, - }, - [9] = { - ["X"] = 66.74, - ["Y"] = 66.02, - ["CD"] = 0, - }, - [10] = { - ["X"] = 71.94, - ["Y"] = 68.81, - ["CD"] = 0, - }, - [11] = { - ["X"] = 69.51, - ["Y"] = 67.83, - ["CD"] = 0, - }, - [12] = { - ["X"] = 69.31, - ["Y"] = 50.72, - ["CD"] = 0, - }, - [13] = { - ["X"] = 63.31, - ["Y"] = 53.33, - ["CD"] = 0, - }, - [14] = { - ["X"] = 63.96, - ["Y"] = 50.46, - ["CD"] = 0, - }, - [15] = { - ["X"] = 65.37, - ["Y"] = 43.82, - ["CD"] = 0, - }, - [16] = { - ["X"] = 63.15, - ["Y"] = 35.17, - ["CD"] = 0, - }, - [17] = { - ["X"] = 60.59, - ["Y"] = 44.44, - ["CD"] = 0, - }, - [18] = { - ["X"] = 35.55, - ["Y"] = 61.86, - ["CD"] = 0, - }, - [19] = { - ["X"] = 40.1, - ["Y"] = 53.5, - ["CD"] = 0, - }, - [20] = { - ["X"] = 47.46, - ["Y"] = 47.36, - ["CD"] = 0, - }, - [21] = { - ["X"] = 49.48, - ["Y"] = 39.04, - ["CD"] = 0, - }, - [22] = { - ["X"] = 35.79, - ["Y"] = 42.74, - ["CD"] = 0, - }, - [23] = { - ["X"] = 33.35, - ["Y"] = 45.99, - ["CD"] = 0, - }, - [24] = { - ["X"] = 30.25, - ["Y"] = 43.1, - ["CD"] = 0, - }, - [25] = { - ["X"] = 28.76, - ["Y"] = 48.41, - ["CD"] = 0, - }, - [26] = { - ["X"] = 30.18, - ["Y"] = 65.31, - ["CD"] = 0, - }, - [27] = { - ["X"] = 32.64, - ["Y"] = 74.92, - ["CD"] = 0, - }, - [28] = { - ["X"] = 35.41, - ["Y"] = 80.33, - ["CD"] = 0, - }, - [29] = { - ["X"] = 32.08, - ["Y"] = 81.08, - ["CD"] = 0, - }, - [30] = { - ["X"] = 30.03, - ["Y"] = 82.65, - ["CD"] = 0, - }, - [31] = { - ["X"] = 27.52, - ["Y"] = 67.32, - ["CD"] = 0, - }, - [32] = { - ["X"] = 26.24, - ["Y"] = 69.06, - ["CD"] = 0, - }, - [33] = { - ["X"] = 24.97, - ["Y"] = 61.8, - ["CD"] = 0, - }, - [34] = { - ["X"] = 25.91, - ["Y"] = 58.23, - ["CD"] = 0, - }, - [35] = { - ["X"] = 34.69, - ["Y"] = 39.51, - ["CD"] = 0, - }, - [36] = { - ["X"] = 37.45, - ["Y"] = 38.69, - ["CD"] = 0, - }, - [37] = { - ["X"] = 45.96, - ["Y"] = 36.33, - ["CD"] = 0, - }, - [38] = { - ["X"] = 46.54, - ["Y"] = 33.81, - ["CD"] = 0, - }, - [39] = { - ["X"] = 37.6, - ["Y"] = 31.35, - ["CD"] = 0, - }, - [40] = { - ["X"] = 24.73, - ["Y"] = 54.01, - ["CD"] = 0, - }, - [41] = { - ["X"] = 21.68, - ["Y"] = 47.55, - ["CD"] = 0, - }, - [42] = { - ["X"] = 23.58, - ["Y"] = 50.81, - ["CD"] = 0, - }, - [43] = { - ["X"] = 25.01, - ["Y"] = 35.96, - ["CD"] = 0, - }, - [44] = { - ["X"] = 25.25, - ["Y"] = 37.61, - ["CD"] = 0, - }, - [45] = { - ["X"] = 41.53, - ["Y"] = 17.47, - ["CD"] = 0, - }, - [46] = { - ["X"] = 27.84, - ["Y"] = 15.94, - ["CD"] = 0, - }, - [47] = { - ["X"] = 44.1, - ["Y"] = 24.69, - ["CD"] = 0, - }, - [48] = { - ["X"] = 41.45, - ["Y"] = 24.26, - ["CD"] = 0, - }, - [49] = { - ["X"] = 40.28, - ["Y"] = 27.75, - ["CD"] = 0, - }, - [50] = { - ["X"] = 37.57, - ["Y"] = 27.05, - ["CD"] = 0, - }, - [51] = { - ["X"] = 33.71, - ["Y"] = 31.04, - ["CD"] = 0, - }, - [52] = { - ["X"] = 28.85, - ["Y"] = 29.61, - ["CD"] = 0, - }, - [53] = { - ["X"] = 27.2, - ["Y"] = 29.85, - ["CD"] = 0, - }, - [54] = { - ["X"] = 23.31, - ["Y"] = 34.44, - ["CD"] = 0, - }, - [55] = { - ["X"] = 15.86, - ["Y"] = 43.89, - ["CD"] = 0, - }, - [56] = { - ["X"] = 16.17, - ["Y"] = 39.56, - ["CD"] = 0, - }, - [57] = { - ["X"] = 16.88, - ["Y"] = 28.87, - ["CD"] = 0, - }, - [58] = { - ["X"] = 19.56, - ["Y"] = 18.08, - ["CD"] = 0, - }, - [59] = { - ["X"] = 19.99, - ["Y"] = 18.12, - ["CD"] = 0, - }, - [60] = { - ["X"] = 49.54, - ["Y"] = 43.54, - ["CD"] = 0, - }, - [61] = { - ["X"] = 55.47, - ["Y"] = 40.72, - ["CD"] = 0, - }, - [62] = { - ["X"] = 57.64, - ["Y"] = 37.85, - ["CD"] = 0, - }, - [63] = { - ["X"] = 62.48, - ["Y"] = 57.85, - ["CD"] = 0, - }, - [64] = { - ["X"] = 63.78, - ["Y"] = 60.52, - ["CD"] = 0, - }, - [65] = { - ["X"] = 50.61, - ["Y"] = 60.74, - ["CD"] = 0, - }, -} -aura_env.cooldown = 600 -aura_env.wipeDistance = 50 -aura_env.angle = 0 -aura_env.hyp = 0 -aura_env.GetClosestHerb = function() - aura_env.minID = { - ["X"] = 0, - ["Y"] = 0, - ["D"] = 1000, - ["ID"] = 0, - } - local pX = GetPlayerMapPosition("player") or 0 - local pY = select(2, GetPlayerMapPosition("player")) or 0 - pX, pY = pX * 100, pY * 100 - for k, v in ipairs(aura_env.herbs) do - local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] - if cd == 0 then - local X, Y = pX - hX, pY - hY - local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) - if hyp < aura_env.minID["D"] then - aura_env.minID["X"] = hX - aura_env.minID["Y"] = hY - aura_env.minID["D"] = hyp - aura_env.minID["ID"] = k - end - end - end - return aura_env.minID["ID"] -end +aura_env.herbs = { + [1] = { + ["X"] = 20.97, + ["Y"] = 15.47, + ["CD"] = 0, + }, + [2] = { + ["X"] = 27.52, + ["Y"] = 9.17, + ["CD"] = 0, + }, + [3] = { + ["X"] = 25.93, + ["Y"] = 25.58, + ["CD"] = 0, + }, + [4] = { + ["X"] = 34.07, + ["Y"] = 50.83, + ["CD"] = 0, + }, + [5] = { + ["X"] = 37.23, + ["Y"] = 54.85, + ["CD"] = 0, + }, + [6] = { + ["X"] = 34.77, + ["Y"] = 58.4, + ["CD"] = 0, + }, + [7] = { + ["X"] = 39.56, + ["Y"] = 79.48, + ["CD"] = 0, + }, + [8] = { + ["X"] = 66.46, + ["Y"] = 57.51, + ["CD"] = 0, + }, + [9] = { + ["X"] = 66.74, + ["Y"] = 66.02, + ["CD"] = 0, + }, + [10] = { + ["X"] = 71.94, + ["Y"] = 68.81, + ["CD"] = 0, + }, + [11] = { + ["X"] = 69.51, + ["Y"] = 67.83, + ["CD"] = 0, + }, + [12] = { + ["X"] = 69.31, + ["Y"] = 50.72, + ["CD"] = 0, + }, + [13] = { + ["X"] = 63.31, + ["Y"] = 53.33, + ["CD"] = 0, + }, + [14] = { + ["X"] = 63.96, + ["Y"] = 50.46, + ["CD"] = 0, + }, + [15] = { + ["X"] = 65.37, + ["Y"] = 43.82, + ["CD"] = 0, + }, + [16] = { + ["X"] = 63.15, + ["Y"] = 35.17, + ["CD"] = 0, + }, + [17] = { + ["X"] = 60.59, + ["Y"] = 44.44, + ["CD"] = 0, + }, + [18] = { + ["X"] = 35.55, + ["Y"] = 61.86, + ["CD"] = 0, + }, + [19] = { + ["X"] = 40.1, + ["Y"] = 53.5, + ["CD"] = 0, + }, + [20] = { + ["X"] = 47.46, + ["Y"] = 47.36, + ["CD"] = 0, + }, + [21] = { + ["X"] = 49.48, + ["Y"] = 39.04, + ["CD"] = 0, + }, + [22] = { + ["X"] = 35.79, + ["Y"] = 42.74, + ["CD"] = 0, + }, + [23] = { + ["X"] = 33.35, + ["Y"] = 45.99, + ["CD"] = 0, + }, + [24] = { + ["X"] = 30.25, + ["Y"] = 43.1, + ["CD"] = 0, + }, + [25] = { + ["X"] = 28.76, + ["Y"] = 48.41, + ["CD"] = 0, + }, + [26] = { + ["X"] = 30.18, + ["Y"] = 65.31, + ["CD"] = 0, + }, + [27] = { + ["X"] = 32.64, + ["Y"] = 74.92, + ["CD"] = 0, + }, + [28] = { + ["X"] = 35.41, + ["Y"] = 80.33, + ["CD"] = 0, + }, + [29] = { + ["X"] = 32.08, + ["Y"] = 81.08, + ["CD"] = 0, + }, + [30] = { + ["X"] = 30.03, + ["Y"] = 82.65, + ["CD"] = 0, + }, + [31] = { + ["X"] = 27.52, + ["Y"] = 67.32, + ["CD"] = 0, + }, + [32] = { + ["X"] = 26.24, + ["Y"] = 69.06, + ["CD"] = 0, + }, + [33] = { + ["X"] = 24.97, + ["Y"] = 61.8, + ["CD"] = 0, + }, + [34] = { + ["X"] = 25.91, + ["Y"] = 58.23, + ["CD"] = 0, + }, + [35] = { + ["X"] = 34.69, + ["Y"] = 39.51, + ["CD"] = 0, + }, + [36] = { + ["X"] = 37.45, + ["Y"] = 38.69, + ["CD"] = 0, + }, + [37] = { + ["X"] = 45.96, + ["Y"] = 36.33, + ["CD"] = 0, + }, + [38] = { + ["X"] = 46.54, + ["Y"] = 33.81, + ["CD"] = 0, + }, + [39] = { + ["X"] = 37.6, + ["Y"] = 31.35, + ["CD"] = 0, + }, + [40] = { + ["X"] = 24.73, + ["Y"] = 54.01, + ["CD"] = 0, + }, + [41] = { + ["X"] = 21.68, + ["Y"] = 47.55, + ["CD"] = 0, + }, + [42] = { + ["X"] = 23.58, + ["Y"] = 50.81, + ["CD"] = 0, + }, + [43] = { + ["X"] = 25.01, + ["Y"] = 35.96, + ["CD"] = 0, + }, + [44] = { + ["X"] = 25.25, + ["Y"] = 37.61, + ["CD"] = 0, + }, + [45] = { + ["X"] = 41.53, + ["Y"] = 17.47, + ["CD"] = 0, + }, + [46] = { + ["X"] = 27.84, + ["Y"] = 15.94, + ["CD"] = 0, + }, + [47] = { + ["X"] = 44.1, + ["Y"] = 24.69, + ["CD"] = 0, + }, + [48] = { + ["X"] = 41.45, + ["Y"] = 24.26, + ["CD"] = 0, + }, + [49] = { + ["X"] = 40.28, + ["Y"] = 27.75, + ["CD"] = 0, + }, + [50] = { + ["X"] = 37.57, + ["Y"] = 27.05, + ["CD"] = 0, + }, + [51] = { + ["X"] = 33.71, + ["Y"] = 31.04, + ["CD"] = 0, + }, + [52] = { + ["X"] = 28.85, + ["Y"] = 29.61, + ["CD"] = 0, + }, + [53] = { + ["X"] = 27.2, + ["Y"] = 29.85, + ["CD"] = 0, + }, + [54] = { + ["X"] = 23.31, + ["Y"] = 34.44, + ["CD"] = 0, + }, + [55] = { + ["X"] = 15.86, + ["Y"] = 43.89, + ["CD"] = 0, + }, + [56] = { + ["X"] = 16.17, + ["Y"] = 39.56, + ["CD"] = 0, + }, + [57] = { + ["X"] = 16.88, + ["Y"] = 28.87, + ["CD"] = 0, + }, + [58] = { + ["X"] = 19.56, + ["Y"] = 18.08, + ["CD"] = 0, + }, + [59] = { + ["X"] = 19.99, + ["Y"] = 18.12, + ["CD"] = 0, + }, + [60] = { + ["X"] = 49.54, + ["Y"] = 43.54, + ["CD"] = 0, + }, + [61] = { + ["X"] = 55.47, + ["Y"] = 40.72, + ["CD"] = 0, + }, + [62] = { + ["X"] = 57.64, + ["Y"] = 37.85, + ["CD"] = 0, + }, + [63] = { + ["X"] = 62.48, + ["Y"] = 57.85, + ["CD"] = 0, + }, + [64] = { + ["X"] = 63.78, + ["Y"] = 60.52, + ["CD"] = 0, + }, + [65] = { + ["X"] = 50.61, + ["Y"] = 60.74, + ["CD"] = 0, + }, +} +aura_env.cooldown = 600 +aura_env.wipeDistance = 50 +aura_env.angle = 0 +aura_env.hyp = 0 +aura_env.GetClosestHerb = function() + aura_env.minID = { + ["X"] = 0, + ["Y"] = 0, + ["D"] = 1000, + ["ID"] = 0, + } + local pX = GetPlayerMapPosition("player") or 0 + local pY = select(2, GetPlayerMapPosition("player")) or 0 + pX, pY = pX * 100, pY * 100 + for k, v in ipairs(aura_env.herbs) do + local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] + if cd == 0 then + local X, Y = pX - hX, pY - hY + local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) + if hyp < aura_env.minID["D"] then + aura_env.minID["X"] = hX + aura_env.minID["Y"] = hY + aura_env.minID["D"] = hyp + aura_env.minID["ID"] = k + end + end + end + return aura_env.minID["ID"] +end diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Leystone/Leystone Total.lua b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Mining/Leystone/Leystone Total.lua similarity index 92% rename from Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Leystone/Leystone Total.lua rename to WeakAuras/Projects/Herb Sniffer/Herb Arrays/Mining/Leystone/Leystone Total.lua index f7e6d9f..d256d39 100644 --- a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Leystone/Leystone Total.lua +++ b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Mining/Leystone/Leystone Total.lua @@ -1,1556 +1,1556 @@ -aura_env.herbs = { - [1] = { - ["X"] = 37.14, - ["Y"] = 49.13, - ["CD"] = 0, - }, - [2] = { - ["X"] = 31.9, - ["Y"] = 36.27, - ["CD"] = 0, - }, - [3] = { - ["X"] = 34.15, - ["Y"] = 45.08, - ["CD"] = 0, - }, - [4] = { - ["X"] = 45.44, - ["Y"] = 34.31, - ["CD"] = 0, - }, - [5] = { - ["X"] = 43.48, - ["Y"] = 31.09, - ["CD"] = 0, - }, - [6] = { - ["X"] = 44.1, - ["Y"] = 24.69, - ["CD"] = 0, - }, - [7] = { - ["X"] = 40.26, - ["Y"] = 29.89, - ["CD"] = 0, - }, - [8] = { - ["X"] = 40.45, - ["Y"] = 26.25, - ["CD"] = 0, - }, - [9] = { - ["X"] = 36.3, - ["Y"] = 27.92, - ["CD"] = 0, - }, - [10] = { - ["X"] = 41.13, - ["Y"] = 31.66, - ["CD"] = 0, - }, - [11] = { - ["X"] = 40.79, - ["Y"] = 36, - ["CD"] = 0, - }, - [12] = { - ["X"] = 44.01, - ["Y"] = 41.2, - ["CD"] = 0, - }, - [13] = { - ["X"] = 38.64, - ["Y"] = 58.61, - ["CD"] = 0, - }, - [14] = { - ["X"] = 38.06, - ["Y"] = 56.83, - ["CD"] = 0, - }, - [15] = { - ["X"] = 39.04, - ["Y"] = 55.73, - ["CD"] = 0, - }, - [16] = { - ["X"] = 34.07, - ["Y"] = 50.83, - ["CD"] = 0, - }, - [17] = { - ["X"] = 63.96, - ["Y"] = 50.46, - ["CD"] = 0, - }, - [18] = { - ["X"] = 60.59, - ["Y"] = 44.44, - ["CD"] = 0, - }, - [19] = { - ["X"] = 44.86, - ["Y"] = 48.82, - ["CD"] = 0, - }, - [20] = { - ["X"] = 38.89, - ["Y"] = 47.82, - ["CD"] = 0, - }, - [21] = { - ["X"] = 68.45, - ["Y"] = 67.5, - ["CD"] = 0, - }, - [22] = { - ["X"] = 71.37, - ["Y"] = 69.19, - ["CD"] = 0, - }, - [23] = { - ["X"] = 72.78, - ["Y"] = 65.81, - ["CD"] = 0, - }, - [24] = { - ["X"] = 69, - ["Y"] = 55.52, - ["CD"] = 0, - }, - [25] = { - ["X"] = 68.67, - ["Y"] = 52.66, - ["CD"] = 0, - }, - [26] = { - ["X"] = 64.54, - ["Y"] = 38.15, - ["CD"] = 0, - }, - [27] = { - ["X"] = 56.03, - ["Y"] = 46.18, - ["CD"] = 0, - }, - [28] = { - ["X"] = 36.55, - ["Y"] = 51.57, - ["CD"] = 0, - }, - [29] = { - ["X"] = 43.65, - ["Y"] = 26.35, - ["CD"] = 0, - }, - [30] = { - ["X"] = 41.53, - ["Y"] = 17.47, - ["CD"] = 0, - }, - [31] = { - ["X"] = 40.28, - ["Y"] = 27.75, - ["CD"] = 0, - }, - [32] = { - ["X"] = 39.09, - ["Y"] = 38.11, - ["CD"] = 0, - }, - [33] = { - ["X"] = 18.39, - ["Y"] = 33.86, - ["CD"] = 0, - }, - [34] = { - ["X"] = 16.18, - ["Y"] = 36.6, - ["CD"] = 0, - }, - [35] = { - ["X"] = 16.78, - ["Y"] = 40.28, - ["CD"] = 0, - }, - [36] = { - ["X"] = 18.85, - ["Y"] = 42.87, - ["CD"] = 0, - }, - [37] = { - ["X"] = 19.91, - ["Y"] = 41.1, - ["CD"] = 0, - }, - [38] = { - ["X"] = 20.94, - ["Y"] = 36.01, - ["CD"] = 0, - }, - [39] = { - ["X"] = 21.66, - ["Y"] = 33.11, - ["CD"] = 0, - }, - [40] = { - ["X"] = 23.31, - ["Y"] = 34.44, - ["CD"] = 0, - }, - [41] = { - ["X"] = 24.34, - ["Y"] = 34.59, - ["CD"] = 0, - }, - [42] = { - ["X"] = 26.1, - ["Y"] = 37.2, - ["CD"] = 0, - }, - [43] = { - ["X"] = 24.3, - ["Y"] = 41.52, - ["CD"] = 0, - }, - [44] = { - ["X"] = 24.37, - ["Y"] = 49.28, - ["CD"] = 0, - }, - [45] = { - ["X"] = 21.68, - ["Y"] = 47.55, - ["CD"] = 0, - }, - [46] = { - ["X"] = 24.41, - ["Y"] = 38.39, - ["CD"] = 0, - }, - [47] = { - ["X"] = 83.22, - ["Y"] = 68.46, - ["CD"] = 0, - }, - [48] = { - ["X"] = 83.67, - ["Y"] = 68.15, - ["CD"] = 0, - }, - [49] = { - ["X"] = 86.25, - ["Y"] = 60.45, - ["CD"] = 0, - }, - [50] = { - ["X"] = 83.58, - ["Y"] = 55.1, - ["CD"] = 0, - }, - [51] = { - ["X"] = 51.41, - ["Y"] = 40.54, - ["CD"] = 0, - }, - [52] = { - ["X"] = 61.4, - ["Y"] = 44.7, - ["CD"] = 0, - }, - [53] = { - ["X"] = 64.56, - ["Y"] = 36.03, - ["CD"] = 0, - }, - [54] = { - ["X"] = 71.76, - ["Y"] = 46.45, - ["CD"] = 0, - }, - [55] = { - ["X"] = 69.32, - ["Y"] = 52.34, - ["CD"] = 0, - }, - [56] = { - ["X"] = 62.9, - ["Y"] = 53.79, - ["CD"] = 0, - }, - [57] = { - ["X"] = 64.84, - ["Y"] = 55.38, - ["CD"] = 0, - }, - [58] = { - ["X"] = 68.08, - ["Y"] = 59.34, - ["CD"] = 0, - }, - [59] = { - ["X"] = 74.01, - ["Y"] = 66.75, - ["CD"] = 0, - }, - [60] = { - ["X"] = 69.82, - ["Y"] = 71.33, - ["CD"] = 0, - }, - [61] = { - ["X"] = 20.47, - ["Y"] = 42.43, - ["CD"] = 0, - }, - [62] = { - ["X"] = 20.16, - ["Y"] = 54.01, - ["CD"] = 0, - }, - [63] = { - ["X"] = 32.08, - ["Y"] = 91.43, - ["CD"] = 0, - }, - [64] = { - ["X"] = 29.65, - ["Y"] = 85.18, - ["CD"] = 0, - }, - [65] = { - ["X"] = 32.85, - ["Y"] = 80.52, - ["CD"] = 0, - }, - [66] = { - ["X"] = 33.88, - ["Y"] = 70.43, - ["CD"] = 0, - }, - [67] = { - ["X"] = 29.16, - ["Y"] = 72.54, - ["CD"] = 0, - }, - [68] = { - ["X"] = 31.51, - ["Y"] = 64.57, - ["CD"] = 0, - }, - [69] = { - ["X"] = 29.82, - ["Y"] = 61.9, - ["CD"] = 0, - }, - [70] = { - ["X"] = 25.5, - ["Y"] = 60.09, - ["CD"] = 0, - }, - [71] = { - ["X"] = 25.74, - ["Y"] = 56.11, - ["CD"] = 0, - }, - [72] = { - ["X"] = 22.37, - ["Y"] = 64.38, - ["CD"] = 0, - }, - [73] = { - ["X"] = 21.06, - ["Y"] = 60.1, - ["CD"] = 0, - }, - [74] = { - ["X"] = 24.73, - ["Y"] = 54.01, - ["CD"] = 0, - }, - [75] = { - ["X"] = 29.03, - ["Y"] = 53.49, - ["CD"] = 0, - }, - [76] = { - ["X"] = 30.74, - ["Y"] = 55.76, - ["CD"] = 0, - }, - [77] = { - ["X"] = 34.72, - ["Y"] = 47.72, - ["CD"] = 0, - }, - [78] = { - ["X"] = 21.1, - ["Y"] = 63.87, - ["CD"] = 0, - }, - [79] = { - ["X"] = 20.39, - ["Y"] = 36.64, - ["CD"] = 0, - }, - [80] = { - ["X"] = 23.69, - ["Y"] = 38.3, - ["CD"] = 0, - }, - [81] = { - ["X"] = 15.95, - ["Y"] = 37.5, - ["CD"] = 0, - }, - [82] = { - ["X"] = 18.94, - ["Y"] = 32.37, - ["CD"] = 0, - }, - [83] = { - ["X"] = 20.5, - ["Y"] = 16.44, - ["CD"] = 0, - }, - [84] = { - ["X"] = 23.5, - ["Y"] = 15.71, - ["CD"] = 0, - }, - [85] = { - ["X"] = 26.93, - ["Y"] = 25.97, - ["CD"] = 0, - }, - [86] = { - ["X"] = 30.68, - ["Y"] = 26.77, - ["CD"] = 0, - }, - [87] = { - ["X"] = 27.52, - ["Y"] = 9.17, - ["CD"] = 0, - }, - [88] = { - ["X"] = 27.84, - ["Y"] = 15.94, - ["CD"] = 0, - }, - [89] = { - ["X"] = 35.65, - ["Y"] = 15.53, - ["CD"] = 0, - }, - [90] = { - ["X"] = 39.68, - ["Y"] = 26.62, - ["CD"] = 0, - }, - [91] = { - ["X"] = 44.32, - ["Y"] = 26.72, - ["CD"] = 0, - }, - [92] = { - ["X"] = 47.84, - ["Y"] = 33.66, - ["CD"] = 0, - }, - [93] = { - ["X"] = 45.96, - ["Y"] = 36.33, - ["CD"] = 0, - }, - [94] = { - ["X"] = 49.84, - ["Y"] = 41.71, - ["CD"] = 0, - }, - [95] = { - ["X"] = 59.39, - ["Y"] = 40.58, - ["CD"] = 0, - }, - [96] = { - ["X"] = 77.48, - ["Y"] = 50.54, - ["CD"] = 0, - }, - [97] = { - ["X"] = 73.17, - ["Y"] = 62.35, - ["CD"] = 0, - }, - [98] = { - ["X"] = 82.88, - ["Y"] = 70.91, - ["CD"] = 0, - }, - [99] = { - ["X"] = 68.25, - ["Y"] = 61.21, - ["CD"] = 0, - }, - [100] = { - ["X"] = 62.18, - ["Y"] = 52.65, - ["CD"] = 0, - }, - [101] = { - ["X"] = 48.69, - ["Y"] = 47.83, - ["CD"] = 0, - }, - [102] = { - ["X"] = 24.53, - ["Y"] = 37.78, - ["CD"] = 0, - }, - [103] = { - ["X"] = 19.65, - ["Y"] = 47.77, - ["CD"] = 0, - }, - [104] = { - ["X"] = 18.49, - ["Y"] = 45.55, - ["CD"] = 0, - }, - [105] = { - ["X"] = 20.68, - ["Y"] = 44.68, - ["CD"] = 0, - }, - [106] = { - ["X"] = 19.49, - ["Y"] = 52.02, - ["CD"] = 0, - }, - [107] = { - ["X"] = 19.7, - ["Y"] = 58.21, - ["CD"] = 0, - }, - [108] = { - ["X"] = 24.22, - ["Y"] = 53.2, - ["CD"] = 0, - }, - [109] = { - ["X"] = 28.18, - ["Y"] = 47.69, - ["CD"] = 0, - }, - [110] = { - ["X"] = 39.27, - ["Y"] = 59.32, - ["CD"] = 0, - }, - [111] = { - ["X"] = 56.48, - ["Y"] = 41.59, - ["CD"] = 0, - }, - [112] = { - ["X"] = 48.13, - ["Y"] = 46.16, - ["CD"] = 0, - }, - [113] = { - ["X"] = 54.39, - ["Y"] = 47.68, - ["CD"] = 0, - }, - [114] = { - ["X"] = 35.05, - ["Y"] = 48.64, - ["CD"] = 0, - }, - [115] = { - ["X"] = 39.5, - ["Y"] = 33.82, - ["CD"] = 0, - }, - [116] = { - ["X"] = 38.81, - ["Y"] = 40.55, - ["CD"] = 0, - }, - [117] = { - ["X"] = 42.89, - ["Y"] = 42.23, - ["CD"] = 0, - }, - [118] = { - ["X"] = 37.23, - ["Y"] = 54.85, - ["CD"] = 0, - }, - [119] = { - ["X"] = 31.41, - ["Y"] = 49.38, - ["CD"] = 0, - }, - [120] = { - ["X"] = 22.49, - ["Y"] = 32.72, - ["CD"] = 0, - }, - [121] = { - ["X"] = 29.51, - ["Y"] = 30.95, - ["CD"] = 0, - }, - [122] = { - ["X"] = 18.84, - ["Y"] = 20.09, - ["CD"] = 0, - }, - [123] = { - ["X"] = 20.25, - ["Y"] = 19.61, - ["CD"] = 0, - }, - [124] = { - ["X"] = 30.95, - ["Y"] = 24.64, - ["CD"] = 0, - }, - [125] = { - ["X"] = 32.82, - ["Y"] = 23.71, - ["CD"] = 0, - }, - [126] = { - ["X"] = 22.62, - ["Y"] = 34.77, - ["CD"] = 0, - }, - [127] = { - ["X"] = 18.07, - ["Y"] = 44.18, - ["CD"] = 0, - }, - [128] = { - ["X"] = 45.77, - ["Y"] = 48.17, - ["CD"] = 0, - }, - [129] = { - ["X"] = 64.31, - ["Y"] = 45.08, - ["CD"] = 0, - }, - [130] = { - ["X"] = 40.17, - ["Y"] = 80.26, - ["CD"] = 0, - }, - [131] = { - ["X"] = 39.96, - ["Y"] = 85.87, - ["CD"] = 0, - }, - [132] = { - ["X"] = 37.11, - ["Y"] = 56.73, - ["CD"] = 0, - }, - [133] = { - ["X"] = 15.9, - ["Y"] = 23.89, - ["CD"] = 0, - }, - [134] = { - ["X"] = 17.71, - ["Y"] = 29.63, - ["CD"] = 0, - }, - [135] = { - ["X"] = 17.15, - ["Y"] = 32.49, - ["CD"] = 0, - }, - [136] = { - ["X"] = 16.04, - ["Y"] = 38.11, - ["CD"] = 0, - }, - [137] = { - ["X"] = 15.86, - ["Y"] = 43.89, - ["CD"] = 0, - }, - [138] = { - ["X"] = 19.44, - ["Y"] = 54.05, - ["CD"] = 0, - }, - [139] = { - ["X"] = 20.11, - ["Y"] = 59.42, - ["CD"] = 0, - }, - [140] = { - ["X"] = 29.69, - ["Y"] = 52.54, - ["CD"] = 0, - }, - [141] = { - ["X"] = 35.03, - ["Y"] = 49.63, - ["CD"] = 0, - }, - [142] = { - ["X"] = 39.56, - ["Y"] = 79.48, - ["CD"] = 0, - }, - [143] = { - ["X"] = 37.08, - ["Y"] = 55.71, - ["CD"] = 0, - }, - [144] = { - ["X"] = 35.94, - ["Y"] = 61.69, - ["CD"] = 0, - }, - [145] = { - ["X"] = 39.48, - ["Y"] = 54.31, - ["CD"] = 0, - }, - [146] = { - ["X"] = 35.36, - ["Y"] = 64.78, - ["CD"] = 0, - }, - [147] = { - ["X"] = 36.15, - ["Y"] = 53.17, - ["CD"] = 0, - }, - [148] = { - ["X"] = 34.77, - ["Y"] = 58.4, - ["CD"] = 0, - }, - [149] = { - ["X"] = 55.37, - ["Y"] = 47.1, - ["CD"] = 0, - }, - [150] = { - ["X"] = 65.94, - ["Y"] = 44.49, - ["CD"] = 0, - }, - [151] = { - ["X"] = 64.11, - ["Y"] = 48.12, - ["CD"] = 0, - }, - [152] = { - ["X"] = 69.31, - ["Y"] = 50.72, - ["CD"] = 0, - }, - [153] = { - ["X"] = 71.5, - ["Y"] = 47.68, - ["CD"] = 0, - }, - [154] = { - ["X"] = 71.16, - ["Y"] = 53.76, - ["CD"] = 0, - }, - [155] = { - ["X"] = 82.35, - ["Y"] = 61.92, - ["CD"] = 0, - }, - [156] = { - ["X"] = 69.83, - ["Y"] = 56.77, - ["CD"] = 0, - }, - [157] = { - ["X"] = 65.37, - ["Y"] = 53.31, - ["CD"] = 0, - }, - [158] = { - ["X"] = 67.47, - ["Y"] = 56.97, - ["CD"] = 0, - }, - [159] = { - ["X"] = 69.22, - ["Y"] = 60.75, - ["CD"] = 0, - }, - [160] = { - ["X"] = 71.06, - ["Y"] = 63.75, - ["CD"] = 0, - }, - [161] = { - ["X"] = 67.54, - ["Y"] = 65.61, - ["CD"] = 0, - }, - [162] = { - ["X"] = 36.42, - ["Y"] = 50.76, - ["CD"] = 0, - }, - [163] = { - ["X"] = 40.25, - ["Y"] = 55.26, - ["CD"] = 0, - }, - [164] = { - ["X"] = 38.11, - ["Y"] = 49.95, - ["CD"] = 0, - }, - [165] = { - ["X"] = 38.88, - ["Y"] = 59.22, - ["CD"] = 0, - }, - [166] = { - ["X"] = 32.61, - ["Y"] = 50.54, - ["CD"] = 0, - }, - [167] = { - ["X"] = 40.85, - ["Y"] = 41.79, - ["CD"] = 0, - }, - [168] = { - ["X"] = 47.83, - ["Y"] = 43.4, - ["CD"] = 0, - }, - [169] = { - ["X"] = 46.68, - ["Y"] = 36.54, - ["CD"] = 0, - }, - [170] = { - ["X"] = 47.01, - ["Y"] = 34.18, - ["CD"] = 0, - }, - [171] = { - ["X"] = 49.86, - ["Y"] = 30.62, - ["CD"] = 0, - }, - [172] = { - ["X"] = 52.29, - ["Y"] = 31.86, - ["CD"] = 0, - }, - [173] = { - ["X"] = 52.33, - ["Y"] = 31.71, - ["CD"] = 0, - }, - [174] = { - ["X"] = 44.76, - ["Y"] = 23.99, - ["CD"] = 0, - }, - [175] = { - ["X"] = 38.29, - ["Y"] = 47.08, - ["CD"] = 0, - }, - [176] = { - ["X"] = 34.22, - ["Y"] = 43.33, - ["CD"] = 0, - }, - [177] = { - ["X"] = 33.4, - ["Y"] = 82.6, - ["CD"] = 0, - }, - [178] = { - ["X"] = 33.6, - ["Y"] = 78.87, - ["CD"] = 0, - }, - [179] = { - ["X"] = 28.59, - ["Y"] = 58.98, - ["CD"] = 0, - }, - [180] = { - ["X"] = 25.83, - ["Y"] = 62.95, - ["CD"] = 0, - }, - [181] = { - ["X"] = 23.24, - ["Y"] = 65.23, - ["CD"] = 0, - }, - [182] = { - ["X"] = 26.47, - ["Y"] = 27.13, - ["CD"] = 0, - }, - [183] = { - ["X"] = 23.85, - ["Y"] = 26.83, - ["CD"] = 0, - }, - [184] = { - ["X"] = 28.57, - ["Y"] = 20.59, - ["CD"] = 0, - }, - [185] = { - ["X"] = 22.34, - ["Y"] = 24.28, - ["CD"] = 0, - }, - [186] = { - ["X"] = 18.53, - ["Y"] = 19.76, - ["CD"] = 0, - }, - [187] = { - ["X"] = 21.01, - ["Y"] = 19.95, - ["CD"] = 0, - }, - [188] = { - ["X"] = 22.81, - ["Y"] = 31.33, - ["CD"] = 0, - }, - [189] = { - ["X"] = 35.35, - ["Y"] = 30.57, - ["CD"] = 0, - }, - [190] = { - ["X"] = 37.71, - ["Y"] = 29.33, - ["CD"] = 0, - }, - [191] = { - ["X"] = 61.86, - ["Y"] = 43.15, - ["CD"] = 0, - }, - [192] = { - ["X"] = 64.98, - ["Y"] = 61.25, - ["CD"] = 0, - }, - [193] = { - ["X"] = 63.31, - ["Y"] = 53.33, - ["CD"] = 0, - }, - [194] = { - ["X"] = 64.97, - ["Y"] = 46.49, - ["CD"] = 0, - }, - [195] = { - ["X"] = 24.21, - ["Y"] = 39.75, - ["CD"] = 0, - }, - [196] = { - ["X"] = 29.8, - ["Y"] = 70.65, - ["CD"] = 0, - }, - [197] = { - ["X"] = 31.03, - ["Y"] = 63.89, - ["CD"] = 0, - }, - [198] = { - ["X"] = 26.49, - ["Y"] = 61.9, - ["CD"] = 0, - }, - [199] = { - ["X"] = 25.91, - ["Y"] = 58.23, - ["CD"] = 0, - }, - [200] = { - ["X"] = 26.96, - ["Y"] = 57.49, - ["CD"] = 0, - }, - [201] = { - ["X"] = 30.02, - ["Y"] = 79.88, - ["CD"] = 0, - }, - [202] = { - ["X"] = 32.64, - ["Y"] = 74.92, - ["CD"] = 0, - }, - [203] = { - ["X"] = 27.82, - ["Y"] = 81.19, - ["CD"] = 0, - }, - [204] = { - ["X"] = 30.97, - ["Y"] = 71.46, - ["CD"] = 0, - }, - [205] = { - ["X"] = 31.95, - ["Y"] = 65.81, - ["CD"] = 0, - }, - [206] = { - ["X"] = 29.98, - ["Y"] = 59.94, - ["CD"] = 0, - }, - [207] = { - ["X"] = 27.95, - ["Y"] = 65.06, - ["CD"] = 0, - }, - [208] = { - ["X"] = 30.76, - ["Y"] = 67.04, - ["CD"] = 0, - }, - [209] = { - ["X"] = 29.52, - ["Y"] = 80.42, - ["CD"] = 0, - }, - [210] = { - ["X"] = 32.39, - ["Y"] = 80.05, - ["CD"] = 0, - }, - [211] = { - ["X"] = 34.55, - ["Y"] = 47.69, - ["CD"] = 0, - }, - [212] = { - ["X"] = 37.76, - ["Y"] = 48.59, - ["CD"] = 0, - }, - [213] = { - ["X"] = 22.32, - ["Y"] = 40.27, - ["CD"] = 0, - }, - [214] = { - ["X"] = 20.51, - ["Y"] = 41.42, - ["CD"] = 0, - }, - [215] = { - ["X"] = 18.9, - ["Y"] = 41.86, - ["CD"] = 0, - }, - [216] = { - ["X"] = 21.55, - ["Y"] = 45.65, - ["CD"] = 0, - }, - [217] = { - ["X"] = 21.86, - ["Y"] = 44.84, - ["CD"] = 0, - }, - [218] = { - ["X"] = 33.38, - ["Y"] = 39.67, - ["CD"] = 0, - }, - [219] = { - ["X"] = 19.91, - ["Y"] = 20.35, - ["CD"] = 0, - }, - [220] = { - ["X"] = 34.34, - ["Y"] = 20.87, - ["CD"] = 0, - }, - [221] = { - ["X"] = 33.52, - ["Y"] = 24.37, - ["CD"] = 0, - }, - [222] = { - ["X"] = 28.32, - ["Y"] = 14.3, - ["CD"] = 0, - }, - [223] = { - ["X"] = 33.53, - ["Y"] = 50.99, - ["CD"] = 0, - }, - [224] = { - ["X"] = 32.31, - ["Y"] = 48.2, - ["CD"] = 0, - }, - [225] = { - ["X"] = 41.94, - ["Y"] = 18.89, - ["CD"] = 0, - }, - [226] = { - ["X"] = 36.5, - ["Y"] = 25.72, - ["CD"] = 0, - }, - [227] = { - ["X"] = 25.01, - ["Y"] = 35.96, - ["CD"] = 0, - }, - [228] = { - ["X"] = 33.53, - ["Y"] = 44.13, - ["CD"] = 0, - }, - [229] = { - ["X"] = 33.96, - ["Y"] = 47.92, - ["CD"] = 0, - }, - [230] = { - ["X"] = 46.05, - ["Y"] = 49.39, - ["CD"] = 0, - }, - [231] = { - ["X"] = 47.52, - ["Y"] = 48.56, - ["CD"] = 0, - }, - [232] = { - ["X"] = 56.74, - ["Y"] = 46.21, - ["CD"] = 0, - }, - [233] = { - ["X"] = 61.18, - ["Y"] = 43.25, - ["CD"] = 0, - }, - [234] = { - ["X"] = 44.06, - ["Y"] = 41.95, - ["CD"] = 0, - }, - [235] = { - ["X"] = 35.22, - ["Y"] = 51.04, - ["CD"] = 0, - }, - [236] = { - ["X"] = 43.2, - ["Y"] = 40.81, - ["CD"] = 0, - }, - [237] = { - ["X"] = 42.26, - ["Y"] = 32.86, - ["CD"] = 0, - }, - [238] = { - ["X"] = 36.88, - ["Y"] = 52.87, - ["CD"] = 0, - }, - [239] = { - ["X"] = 40.1, - ["Y"] = 53.5, - ["CD"] = 0, - }, - [240] = { - ["X"] = 63.85, - ["Y"] = 43.39, - ["CD"] = 0, - }, - [241] = { - ["X"] = 64.08, - ["Y"] = 61.32, - ["CD"] = 0, - }, - [242] = { - ["X"] = 65.67, - ["Y"] = 56.11, - ["CD"] = 0, - }, - [243] = { - ["X"] = 46.08, - ["Y"] = 34.3, - ["CD"] = 0, - }, - [244] = { - ["X"] = 46.79, - ["Y"] = 32.81, - ["CD"] = 0, - }, - [245] = { - ["X"] = 50.39, - ["Y"] = 40.72, - ["CD"] = 0, - }, - [246] = { - ["X"] = 70.84, - ["Y"] = 60.17, - ["CD"] = 0, - }, - [247] = { - ["X"] = 69.51, - ["Y"] = 67.83, - ["CD"] = 0, - }, - [248] = { - ["X"] = 69.36, - ["Y"] = 69.51, - ["CD"] = 0, - }, - [249] = { - ["X"] = 67.23, - ["Y"] = 66.87, - ["CD"] = 0, - }, - [250] = { - ["X"] = 74.66, - ["Y"] = 68.83, - ["CD"] = 0, - }, - [251] = { - ["X"] = 70.56, - ["Y"] = 71.34, - ["CD"] = 0, - }, - [252] = { - ["X"] = 24.79, - ["Y"] = 57.99, - ["CD"] = 0, - }, - [253] = { - ["X"] = 23.91, - ["Y"] = 67.46, - ["CD"] = 0, - }, - [254] = { - ["X"] = 27.52, - ["Y"] = 67.32, - ["CD"] = 0, - }, - [255] = { - ["X"] = 27.77, - ["Y"] = 73.57, - ["CD"] = 0, - }, - [256] = { - ["X"] = 32.17, - ["Y"] = 77.78, - ["CD"] = 0, - }, - [257] = { - ["X"] = 19.31, - ["Y"] = 46.46, - ["CD"] = 0, - }, - [258] = { - ["X"] = 17.28, - ["Y"] = 45.92, - ["CD"] = 0, - }, - [259] = { - ["X"] = 21.39, - ["Y"] = 43.53, - ["CD"] = 0, - }, - [260] = { - ["X"] = 34.14, - ["Y"] = 45.78, - ["CD"] = 0, - }, - [261] = { - ["X"] = 46.06, - ["Y"] = 26.26, - ["CD"] = 0, - }, - [262] = { - ["X"] = 33.9, - ["Y"] = 41.67, - ["CD"] = 0, - }, - [263] = { - ["X"] = 69.33, - ["Y"] = 71.36, - ["CD"] = 0, - }, - [264] = { - ["X"] = 70.11, - ["Y"] = 68.95, - ["CD"] = 0, - }, - [265] = { - ["X"] = 45.95, - ["Y"] = 29.55, - ["CD"] = 0, - }, - [266] = { - ["X"] = 71.31, - ["Y"] = 71.78, - ["CD"] = 0, - }, - [267] = { - ["X"] = 24.46, - ["Y"] = 54.16, - ["CD"] = 0, - }, - [268] = { - ["X"] = 30.88, - ["Y"] = 54.62, - ["CD"] = 0, - }, - [269] = { - ["X"] = 19.96, - ["Y"] = 16, - ["CD"] = 0, - }, - [270] = { - ["X"] = 72.22, - ["Y"] = 69.78, - ["CD"] = 0, - }, - [271] = { - ["X"] = 62.56, - ["Y"] = 52.21, - ["CD"] = 0, - }, - [272] = { - ["X"] = 24.32, - ["Y"] = 52.38, - ["CD"] = 0, - }, - [273] = { - ["X"] = 37.31, - ["Y"] = 35.96, - ["CD"] = 0, - }, - [274] = { - ["X"] = 43.49, - ["Y"] = 31.39, - ["CD"] = 0, - }, - [275] = { - ["X"] = 32.66, - ["Y"] = 25.11, - ["CD"] = 0, - }, - [276] = { - ["X"] = 51.53, - ["Y"] = 32.25, - ["CD"] = 0, - }, - [277] = { - ["X"] = 52.83, - ["Y"] = 31.34, - ["CD"] = 0, - }, - [278] = { - ["X"] = 44.45, - ["Y"] = 31.35, - ["CD"] = 0, - }, - [279] = { - ["X"] = 23.79, - ["Y"] = 30.99, - ["CD"] = 0, - }, - [280] = { - ["X"] = 63.19, - ["Y"] = 52.61, - ["CD"] = 0, - }, - [281] = { - ["X"] = 32.7, - ["Y"] = 24.23, - ["CD"] = 0, - }, - [282] = { - ["X"] = 36.74, - ["Y"] = 50.84, - ["CD"] = 0, - }, - [283] = { - ["X"] = 62.48, - ["Y"] = 53.74, - ["CD"] = 0, - }, - [284] = { - ["X"] = 69.88, - ["Y"] = 66.33, - ["CD"] = 0, - }, - [285] = { - ["X"] = 30.67, - ["Y"] = 55.81, - ["CD"] = 0, - }, - [286] = { - ["X"] = 25.26, - ["Y"] = 53.34, - ["CD"] = 0, - }, - [287] = { - ["X"] = 46.54, - ["Y"] = 33.81, - ["CD"] = 0, - }, - [288] = { - ["X"] = 38.55, - ["Y"] = 27.71, - ["CD"] = 0, - }, - [289] = { - ["X"] = 18.49, - ["Y"] = 45.55, - ["CD"] = 0, - }, - [290] = { - ["X"] = 71.94, - ["Y"] = 68.81, - ["CD"] = 0, - }, - [291] = { - ["X"] = 71.92, - ["Y"] = 63.63, - ["CD"] = 0, - }, - [292] = { - ["X"] = 29.79, - ["Y"] = 44.61, - ["CD"] = 0, - }, - [293] = { - ["X"] = 30.02, - ["Y"] = 29.48, - ["CD"] = 0, - }, - [294] = { - ["X"] = 31.59, - ["Y"] = 48.32, - ["CD"] = 0, - }, - [295] = { - ["X"] = 37.14, - ["Y"] = 49.13, - ["CD"] = 0, - }, - [296] = { - ["X"] = 33.63, - ["Y"] = 57.28, - ["CD"] = 0, - }, - [297] = { - ["X"] = 36.3, - ["Y"] = 27.92, - ["CD"] = 0, - }, - [298] = { - ["X"] = 18.9, - ["Y"] = 41.86, - ["CD"] = 0, - }, - [299] = { - ["X"] = 32.85, - ["Y"] = 80.52, - ["CD"] = 0, - }, - [300] = { - ["X"] = 25.64, - ["Y"] = 24.21, - ["CD"] = 0, - }, - [301] = { - ["X"] = 62.91, - ["Y"] = 45.74, - ["CD"] = 0, - }, - [302] = { - ["X"] = 38.29, - ["Y"] = 47.08, - ["CD"] = 0, - }, - [303] = { - ["X"] = 65.94, - ["Y"] = 44.49, - ["CD"] = 0, - }, - [304] = { - ["X"] = 63.96, - ["Y"] = 50.46, - ["CD"] = 0, - }, - [305] = { - ["X"] = 30.36, - ["Y"] = 55.61, - ["CD"] = 0, - }, -} -aura_env.cooldown = 600 -aura_env.wipeDistance = 15 -aura_env.angle = 0 -aura_env.hyp = 0 -aura_env.GetClosestHerb = function() - aura_env.minID = { - ["X"] = 0, - ["Y"] = 0, - ["D"] = 1000, - ["ID"] = 0, - } - local pX = GetPlayerMapPosition("player") or 0 - local pY = select(2, GetPlayerMapPosition("player")) or 0 - pX, pY = pX * 100, pY * 100 - for k, v in ipairs(aura_env.herbs) do - local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] - if cd == 0 then - local X, Y = pX - hX, pY - hY - local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) - if hyp < aura_env.minID["D"] then - aura_env.minID["X"] = hX - aura_env.minID["Y"] = hY - aura_env.minID["D"] = hyp - aura_env.minID["ID"] = k - end - end - end - return aura_env.minID["ID"] -end +aura_env.herbs = { + [1] = { + ["X"] = 37.14, + ["Y"] = 49.13, + ["CD"] = 0, + }, + [2] = { + ["X"] = 31.9, + ["Y"] = 36.27, + ["CD"] = 0, + }, + [3] = { + ["X"] = 34.15, + ["Y"] = 45.08, + ["CD"] = 0, + }, + [4] = { + ["X"] = 45.44, + ["Y"] = 34.31, + ["CD"] = 0, + }, + [5] = { + ["X"] = 43.48, + ["Y"] = 31.09, + ["CD"] = 0, + }, + [6] = { + ["X"] = 44.1, + ["Y"] = 24.69, + ["CD"] = 0, + }, + [7] = { + ["X"] = 40.26, + ["Y"] = 29.89, + ["CD"] = 0, + }, + [8] = { + ["X"] = 40.45, + ["Y"] = 26.25, + ["CD"] = 0, + }, + [9] = { + ["X"] = 36.3, + ["Y"] = 27.92, + ["CD"] = 0, + }, + [10] = { + ["X"] = 41.13, + ["Y"] = 31.66, + ["CD"] = 0, + }, + [11] = { + ["X"] = 40.79, + ["Y"] = 36, + ["CD"] = 0, + }, + [12] = { + ["X"] = 44.01, + ["Y"] = 41.2, + ["CD"] = 0, + }, + [13] = { + ["X"] = 38.64, + ["Y"] = 58.61, + ["CD"] = 0, + }, + [14] = { + ["X"] = 38.06, + ["Y"] = 56.83, + ["CD"] = 0, + }, + [15] = { + ["X"] = 39.04, + ["Y"] = 55.73, + ["CD"] = 0, + }, + [16] = { + ["X"] = 34.07, + ["Y"] = 50.83, + ["CD"] = 0, + }, + [17] = { + ["X"] = 63.96, + ["Y"] = 50.46, + ["CD"] = 0, + }, + [18] = { + ["X"] = 60.59, + ["Y"] = 44.44, + ["CD"] = 0, + }, + [19] = { + ["X"] = 44.86, + ["Y"] = 48.82, + ["CD"] = 0, + }, + [20] = { + ["X"] = 38.89, + ["Y"] = 47.82, + ["CD"] = 0, + }, + [21] = { + ["X"] = 68.45, + ["Y"] = 67.5, + ["CD"] = 0, + }, + [22] = { + ["X"] = 71.37, + ["Y"] = 69.19, + ["CD"] = 0, + }, + [23] = { + ["X"] = 72.78, + ["Y"] = 65.81, + ["CD"] = 0, + }, + [24] = { + ["X"] = 69, + ["Y"] = 55.52, + ["CD"] = 0, + }, + [25] = { + ["X"] = 68.67, + ["Y"] = 52.66, + ["CD"] = 0, + }, + [26] = { + ["X"] = 64.54, + ["Y"] = 38.15, + ["CD"] = 0, + }, + [27] = { + ["X"] = 56.03, + ["Y"] = 46.18, + ["CD"] = 0, + }, + [28] = { + ["X"] = 36.55, + ["Y"] = 51.57, + ["CD"] = 0, + }, + [29] = { + ["X"] = 43.65, + ["Y"] = 26.35, + ["CD"] = 0, + }, + [30] = { + ["X"] = 41.53, + ["Y"] = 17.47, + ["CD"] = 0, + }, + [31] = { + ["X"] = 40.28, + ["Y"] = 27.75, + ["CD"] = 0, + }, + [32] = { + ["X"] = 39.09, + ["Y"] = 38.11, + ["CD"] = 0, + }, + [33] = { + ["X"] = 18.39, + ["Y"] = 33.86, + ["CD"] = 0, + }, + [34] = { + ["X"] = 16.18, + ["Y"] = 36.6, + ["CD"] = 0, + }, + [35] = { + ["X"] = 16.78, + ["Y"] = 40.28, + ["CD"] = 0, + }, + [36] = { + ["X"] = 18.85, + ["Y"] = 42.87, + ["CD"] = 0, + }, + [37] = { + ["X"] = 19.91, + ["Y"] = 41.1, + ["CD"] = 0, + }, + [38] = { + ["X"] = 20.94, + ["Y"] = 36.01, + ["CD"] = 0, + }, + [39] = { + ["X"] = 21.66, + ["Y"] = 33.11, + ["CD"] = 0, + }, + [40] = { + ["X"] = 23.31, + ["Y"] = 34.44, + ["CD"] = 0, + }, + [41] = { + ["X"] = 24.34, + ["Y"] = 34.59, + ["CD"] = 0, + }, + [42] = { + ["X"] = 26.1, + ["Y"] = 37.2, + ["CD"] = 0, + }, + [43] = { + ["X"] = 24.3, + ["Y"] = 41.52, + ["CD"] = 0, + }, + [44] = { + ["X"] = 24.37, + ["Y"] = 49.28, + ["CD"] = 0, + }, + [45] = { + ["X"] = 21.68, + ["Y"] = 47.55, + ["CD"] = 0, + }, + [46] = { + ["X"] = 24.41, + ["Y"] = 38.39, + ["CD"] = 0, + }, + [47] = { + ["X"] = 83.22, + ["Y"] = 68.46, + ["CD"] = 0, + }, + [48] = { + ["X"] = 83.67, + ["Y"] = 68.15, + ["CD"] = 0, + }, + [49] = { + ["X"] = 86.25, + ["Y"] = 60.45, + ["CD"] = 0, + }, + [50] = { + ["X"] = 83.58, + ["Y"] = 55.1, + ["CD"] = 0, + }, + [51] = { + ["X"] = 51.41, + ["Y"] = 40.54, + ["CD"] = 0, + }, + [52] = { + ["X"] = 61.4, + ["Y"] = 44.7, + ["CD"] = 0, + }, + [53] = { + ["X"] = 64.56, + ["Y"] = 36.03, + ["CD"] = 0, + }, + [54] = { + ["X"] = 71.76, + ["Y"] = 46.45, + ["CD"] = 0, + }, + [55] = { + ["X"] = 69.32, + ["Y"] = 52.34, + ["CD"] = 0, + }, + [56] = { + ["X"] = 62.9, + ["Y"] = 53.79, + ["CD"] = 0, + }, + [57] = { + ["X"] = 64.84, + ["Y"] = 55.38, + ["CD"] = 0, + }, + [58] = { + ["X"] = 68.08, + ["Y"] = 59.34, + ["CD"] = 0, + }, + [59] = { + ["X"] = 74.01, + ["Y"] = 66.75, + ["CD"] = 0, + }, + [60] = { + ["X"] = 69.82, + ["Y"] = 71.33, + ["CD"] = 0, + }, + [61] = { + ["X"] = 20.47, + ["Y"] = 42.43, + ["CD"] = 0, + }, + [62] = { + ["X"] = 20.16, + ["Y"] = 54.01, + ["CD"] = 0, + }, + [63] = { + ["X"] = 32.08, + ["Y"] = 91.43, + ["CD"] = 0, + }, + [64] = { + ["X"] = 29.65, + ["Y"] = 85.18, + ["CD"] = 0, + }, + [65] = { + ["X"] = 32.85, + ["Y"] = 80.52, + ["CD"] = 0, + }, + [66] = { + ["X"] = 33.88, + ["Y"] = 70.43, + ["CD"] = 0, + }, + [67] = { + ["X"] = 29.16, + ["Y"] = 72.54, + ["CD"] = 0, + }, + [68] = { + ["X"] = 31.51, + ["Y"] = 64.57, + ["CD"] = 0, + }, + [69] = { + ["X"] = 29.82, + ["Y"] = 61.9, + ["CD"] = 0, + }, + [70] = { + ["X"] = 25.5, + ["Y"] = 60.09, + ["CD"] = 0, + }, + [71] = { + ["X"] = 25.74, + ["Y"] = 56.11, + ["CD"] = 0, + }, + [72] = { + ["X"] = 22.37, + ["Y"] = 64.38, + ["CD"] = 0, + }, + [73] = { + ["X"] = 21.06, + ["Y"] = 60.1, + ["CD"] = 0, + }, + [74] = { + ["X"] = 24.73, + ["Y"] = 54.01, + ["CD"] = 0, + }, + [75] = { + ["X"] = 29.03, + ["Y"] = 53.49, + ["CD"] = 0, + }, + [76] = { + ["X"] = 30.74, + ["Y"] = 55.76, + ["CD"] = 0, + }, + [77] = { + ["X"] = 34.72, + ["Y"] = 47.72, + ["CD"] = 0, + }, + [78] = { + ["X"] = 21.1, + ["Y"] = 63.87, + ["CD"] = 0, + }, + [79] = { + ["X"] = 20.39, + ["Y"] = 36.64, + ["CD"] = 0, + }, + [80] = { + ["X"] = 23.69, + ["Y"] = 38.3, + ["CD"] = 0, + }, + [81] = { + ["X"] = 15.95, + ["Y"] = 37.5, + ["CD"] = 0, + }, + [82] = { + ["X"] = 18.94, + ["Y"] = 32.37, + ["CD"] = 0, + }, + [83] = { + ["X"] = 20.5, + ["Y"] = 16.44, + ["CD"] = 0, + }, + [84] = { + ["X"] = 23.5, + ["Y"] = 15.71, + ["CD"] = 0, + }, + [85] = { + ["X"] = 26.93, + ["Y"] = 25.97, + ["CD"] = 0, + }, + [86] = { + ["X"] = 30.68, + ["Y"] = 26.77, + ["CD"] = 0, + }, + [87] = { + ["X"] = 27.52, + ["Y"] = 9.17, + ["CD"] = 0, + }, + [88] = { + ["X"] = 27.84, + ["Y"] = 15.94, + ["CD"] = 0, + }, + [89] = { + ["X"] = 35.65, + ["Y"] = 15.53, + ["CD"] = 0, + }, + [90] = { + ["X"] = 39.68, + ["Y"] = 26.62, + ["CD"] = 0, + }, + [91] = { + ["X"] = 44.32, + ["Y"] = 26.72, + ["CD"] = 0, + }, + [92] = { + ["X"] = 47.84, + ["Y"] = 33.66, + ["CD"] = 0, + }, + [93] = { + ["X"] = 45.96, + ["Y"] = 36.33, + ["CD"] = 0, + }, + [94] = { + ["X"] = 49.84, + ["Y"] = 41.71, + ["CD"] = 0, + }, + [95] = { + ["X"] = 59.39, + ["Y"] = 40.58, + ["CD"] = 0, + }, + [96] = { + ["X"] = 77.48, + ["Y"] = 50.54, + ["CD"] = 0, + }, + [97] = { + ["X"] = 73.17, + ["Y"] = 62.35, + ["CD"] = 0, + }, + [98] = { + ["X"] = 82.88, + ["Y"] = 70.91, + ["CD"] = 0, + }, + [99] = { + ["X"] = 68.25, + ["Y"] = 61.21, + ["CD"] = 0, + }, + [100] = { + ["X"] = 62.18, + ["Y"] = 52.65, + ["CD"] = 0, + }, + [101] = { + ["X"] = 48.69, + ["Y"] = 47.83, + ["CD"] = 0, + }, + [102] = { + ["X"] = 24.53, + ["Y"] = 37.78, + ["CD"] = 0, + }, + [103] = { + ["X"] = 19.65, + ["Y"] = 47.77, + ["CD"] = 0, + }, + [104] = { + ["X"] = 18.49, + ["Y"] = 45.55, + ["CD"] = 0, + }, + [105] = { + ["X"] = 20.68, + ["Y"] = 44.68, + ["CD"] = 0, + }, + [106] = { + ["X"] = 19.49, + ["Y"] = 52.02, + ["CD"] = 0, + }, + [107] = { + ["X"] = 19.7, + ["Y"] = 58.21, + ["CD"] = 0, + }, + [108] = { + ["X"] = 24.22, + ["Y"] = 53.2, + ["CD"] = 0, + }, + [109] = { + ["X"] = 28.18, + ["Y"] = 47.69, + ["CD"] = 0, + }, + [110] = { + ["X"] = 39.27, + ["Y"] = 59.32, + ["CD"] = 0, + }, + [111] = { + ["X"] = 56.48, + ["Y"] = 41.59, + ["CD"] = 0, + }, + [112] = { + ["X"] = 48.13, + ["Y"] = 46.16, + ["CD"] = 0, + }, + [113] = { + ["X"] = 54.39, + ["Y"] = 47.68, + ["CD"] = 0, + }, + [114] = { + ["X"] = 35.05, + ["Y"] = 48.64, + ["CD"] = 0, + }, + [115] = { + ["X"] = 39.5, + ["Y"] = 33.82, + ["CD"] = 0, + }, + [116] = { + ["X"] = 38.81, + ["Y"] = 40.55, + ["CD"] = 0, + }, + [117] = { + ["X"] = 42.89, + ["Y"] = 42.23, + ["CD"] = 0, + }, + [118] = { + ["X"] = 37.23, + ["Y"] = 54.85, + ["CD"] = 0, + }, + [119] = { + ["X"] = 31.41, + ["Y"] = 49.38, + ["CD"] = 0, + }, + [120] = { + ["X"] = 22.49, + ["Y"] = 32.72, + ["CD"] = 0, + }, + [121] = { + ["X"] = 29.51, + ["Y"] = 30.95, + ["CD"] = 0, + }, + [122] = { + ["X"] = 18.84, + ["Y"] = 20.09, + ["CD"] = 0, + }, + [123] = { + ["X"] = 20.25, + ["Y"] = 19.61, + ["CD"] = 0, + }, + [124] = { + ["X"] = 30.95, + ["Y"] = 24.64, + ["CD"] = 0, + }, + [125] = { + ["X"] = 32.82, + ["Y"] = 23.71, + ["CD"] = 0, + }, + [126] = { + ["X"] = 22.62, + ["Y"] = 34.77, + ["CD"] = 0, + }, + [127] = { + ["X"] = 18.07, + ["Y"] = 44.18, + ["CD"] = 0, + }, + [128] = { + ["X"] = 45.77, + ["Y"] = 48.17, + ["CD"] = 0, + }, + [129] = { + ["X"] = 64.31, + ["Y"] = 45.08, + ["CD"] = 0, + }, + [130] = { + ["X"] = 40.17, + ["Y"] = 80.26, + ["CD"] = 0, + }, + [131] = { + ["X"] = 39.96, + ["Y"] = 85.87, + ["CD"] = 0, + }, + [132] = { + ["X"] = 37.11, + ["Y"] = 56.73, + ["CD"] = 0, + }, + [133] = { + ["X"] = 15.9, + ["Y"] = 23.89, + ["CD"] = 0, + }, + [134] = { + ["X"] = 17.71, + ["Y"] = 29.63, + ["CD"] = 0, + }, + [135] = { + ["X"] = 17.15, + ["Y"] = 32.49, + ["CD"] = 0, + }, + [136] = { + ["X"] = 16.04, + ["Y"] = 38.11, + ["CD"] = 0, + }, + [137] = { + ["X"] = 15.86, + ["Y"] = 43.89, + ["CD"] = 0, + }, + [138] = { + ["X"] = 19.44, + ["Y"] = 54.05, + ["CD"] = 0, + }, + [139] = { + ["X"] = 20.11, + ["Y"] = 59.42, + ["CD"] = 0, + }, + [140] = { + ["X"] = 29.69, + ["Y"] = 52.54, + ["CD"] = 0, + }, + [141] = { + ["X"] = 35.03, + ["Y"] = 49.63, + ["CD"] = 0, + }, + [142] = { + ["X"] = 39.56, + ["Y"] = 79.48, + ["CD"] = 0, + }, + [143] = { + ["X"] = 37.08, + ["Y"] = 55.71, + ["CD"] = 0, + }, + [144] = { + ["X"] = 35.94, + ["Y"] = 61.69, + ["CD"] = 0, + }, + [145] = { + ["X"] = 39.48, + ["Y"] = 54.31, + ["CD"] = 0, + }, + [146] = { + ["X"] = 35.36, + ["Y"] = 64.78, + ["CD"] = 0, + }, + [147] = { + ["X"] = 36.15, + ["Y"] = 53.17, + ["CD"] = 0, + }, + [148] = { + ["X"] = 34.77, + ["Y"] = 58.4, + ["CD"] = 0, + }, + [149] = { + ["X"] = 55.37, + ["Y"] = 47.1, + ["CD"] = 0, + }, + [150] = { + ["X"] = 65.94, + ["Y"] = 44.49, + ["CD"] = 0, + }, + [151] = { + ["X"] = 64.11, + ["Y"] = 48.12, + ["CD"] = 0, + }, + [152] = { + ["X"] = 69.31, + ["Y"] = 50.72, + ["CD"] = 0, + }, + [153] = { + ["X"] = 71.5, + ["Y"] = 47.68, + ["CD"] = 0, + }, + [154] = { + ["X"] = 71.16, + ["Y"] = 53.76, + ["CD"] = 0, + }, + [155] = { + ["X"] = 82.35, + ["Y"] = 61.92, + ["CD"] = 0, + }, + [156] = { + ["X"] = 69.83, + ["Y"] = 56.77, + ["CD"] = 0, + }, + [157] = { + ["X"] = 65.37, + ["Y"] = 53.31, + ["CD"] = 0, + }, + [158] = { + ["X"] = 67.47, + ["Y"] = 56.97, + ["CD"] = 0, + }, + [159] = { + ["X"] = 69.22, + ["Y"] = 60.75, + ["CD"] = 0, + }, + [160] = { + ["X"] = 71.06, + ["Y"] = 63.75, + ["CD"] = 0, + }, + [161] = { + ["X"] = 67.54, + ["Y"] = 65.61, + ["CD"] = 0, + }, + [162] = { + ["X"] = 36.42, + ["Y"] = 50.76, + ["CD"] = 0, + }, + [163] = { + ["X"] = 40.25, + ["Y"] = 55.26, + ["CD"] = 0, + }, + [164] = { + ["X"] = 38.11, + ["Y"] = 49.95, + ["CD"] = 0, + }, + [165] = { + ["X"] = 38.88, + ["Y"] = 59.22, + ["CD"] = 0, + }, + [166] = { + ["X"] = 32.61, + ["Y"] = 50.54, + ["CD"] = 0, + }, + [167] = { + ["X"] = 40.85, + ["Y"] = 41.79, + ["CD"] = 0, + }, + [168] = { + ["X"] = 47.83, + ["Y"] = 43.4, + ["CD"] = 0, + }, + [169] = { + ["X"] = 46.68, + ["Y"] = 36.54, + ["CD"] = 0, + }, + [170] = { + ["X"] = 47.01, + ["Y"] = 34.18, + ["CD"] = 0, + }, + [171] = { + ["X"] = 49.86, + ["Y"] = 30.62, + ["CD"] = 0, + }, + [172] = { + ["X"] = 52.29, + ["Y"] = 31.86, + ["CD"] = 0, + }, + [173] = { + ["X"] = 52.33, + ["Y"] = 31.71, + ["CD"] = 0, + }, + [174] = { + ["X"] = 44.76, + ["Y"] = 23.99, + ["CD"] = 0, + }, + [175] = { + ["X"] = 38.29, + ["Y"] = 47.08, + ["CD"] = 0, + }, + [176] = { + ["X"] = 34.22, + ["Y"] = 43.33, + ["CD"] = 0, + }, + [177] = { + ["X"] = 33.4, + ["Y"] = 82.6, + ["CD"] = 0, + }, + [178] = { + ["X"] = 33.6, + ["Y"] = 78.87, + ["CD"] = 0, + }, + [179] = { + ["X"] = 28.59, + ["Y"] = 58.98, + ["CD"] = 0, + }, + [180] = { + ["X"] = 25.83, + ["Y"] = 62.95, + ["CD"] = 0, + }, + [181] = { + ["X"] = 23.24, + ["Y"] = 65.23, + ["CD"] = 0, + }, + [182] = { + ["X"] = 26.47, + ["Y"] = 27.13, + ["CD"] = 0, + }, + [183] = { + ["X"] = 23.85, + ["Y"] = 26.83, + ["CD"] = 0, + }, + [184] = { + ["X"] = 28.57, + ["Y"] = 20.59, + ["CD"] = 0, + }, + [185] = { + ["X"] = 22.34, + ["Y"] = 24.28, + ["CD"] = 0, + }, + [186] = { + ["X"] = 18.53, + ["Y"] = 19.76, + ["CD"] = 0, + }, + [187] = { + ["X"] = 21.01, + ["Y"] = 19.95, + ["CD"] = 0, + }, + [188] = { + ["X"] = 22.81, + ["Y"] = 31.33, + ["CD"] = 0, + }, + [189] = { + ["X"] = 35.35, + ["Y"] = 30.57, + ["CD"] = 0, + }, + [190] = { + ["X"] = 37.71, + ["Y"] = 29.33, + ["CD"] = 0, + }, + [191] = { + ["X"] = 61.86, + ["Y"] = 43.15, + ["CD"] = 0, + }, + [192] = { + ["X"] = 64.98, + ["Y"] = 61.25, + ["CD"] = 0, + }, + [193] = { + ["X"] = 63.31, + ["Y"] = 53.33, + ["CD"] = 0, + }, + [194] = { + ["X"] = 64.97, + ["Y"] = 46.49, + ["CD"] = 0, + }, + [195] = { + ["X"] = 24.21, + ["Y"] = 39.75, + ["CD"] = 0, + }, + [196] = { + ["X"] = 29.8, + ["Y"] = 70.65, + ["CD"] = 0, + }, + [197] = { + ["X"] = 31.03, + ["Y"] = 63.89, + ["CD"] = 0, + }, + [198] = { + ["X"] = 26.49, + ["Y"] = 61.9, + ["CD"] = 0, + }, + [199] = { + ["X"] = 25.91, + ["Y"] = 58.23, + ["CD"] = 0, + }, + [200] = { + ["X"] = 26.96, + ["Y"] = 57.49, + ["CD"] = 0, + }, + [201] = { + ["X"] = 30.02, + ["Y"] = 79.88, + ["CD"] = 0, + }, + [202] = { + ["X"] = 32.64, + ["Y"] = 74.92, + ["CD"] = 0, + }, + [203] = { + ["X"] = 27.82, + ["Y"] = 81.19, + ["CD"] = 0, + }, + [204] = { + ["X"] = 30.97, + ["Y"] = 71.46, + ["CD"] = 0, + }, + [205] = { + ["X"] = 31.95, + ["Y"] = 65.81, + ["CD"] = 0, + }, + [206] = { + ["X"] = 29.98, + ["Y"] = 59.94, + ["CD"] = 0, + }, + [207] = { + ["X"] = 27.95, + ["Y"] = 65.06, + ["CD"] = 0, + }, + [208] = { + ["X"] = 30.76, + ["Y"] = 67.04, + ["CD"] = 0, + }, + [209] = { + ["X"] = 29.52, + ["Y"] = 80.42, + ["CD"] = 0, + }, + [210] = { + ["X"] = 32.39, + ["Y"] = 80.05, + ["CD"] = 0, + }, + [211] = { + ["X"] = 34.55, + ["Y"] = 47.69, + ["CD"] = 0, + }, + [212] = { + ["X"] = 37.76, + ["Y"] = 48.59, + ["CD"] = 0, + }, + [213] = { + ["X"] = 22.32, + ["Y"] = 40.27, + ["CD"] = 0, + }, + [214] = { + ["X"] = 20.51, + ["Y"] = 41.42, + ["CD"] = 0, + }, + [215] = { + ["X"] = 18.9, + ["Y"] = 41.86, + ["CD"] = 0, + }, + [216] = { + ["X"] = 21.55, + ["Y"] = 45.65, + ["CD"] = 0, + }, + [217] = { + ["X"] = 21.86, + ["Y"] = 44.84, + ["CD"] = 0, + }, + [218] = { + ["X"] = 33.38, + ["Y"] = 39.67, + ["CD"] = 0, + }, + [219] = { + ["X"] = 19.91, + ["Y"] = 20.35, + ["CD"] = 0, + }, + [220] = { + ["X"] = 34.34, + ["Y"] = 20.87, + ["CD"] = 0, + }, + [221] = { + ["X"] = 33.52, + ["Y"] = 24.37, + ["CD"] = 0, + }, + [222] = { + ["X"] = 28.32, + ["Y"] = 14.3, + ["CD"] = 0, + }, + [223] = { + ["X"] = 33.53, + ["Y"] = 50.99, + ["CD"] = 0, + }, + [224] = { + ["X"] = 32.31, + ["Y"] = 48.2, + ["CD"] = 0, + }, + [225] = { + ["X"] = 41.94, + ["Y"] = 18.89, + ["CD"] = 0, + }, + [226] = { + ["X"] = 36.5, + ["Y"] = 25.72, + ["CD"] = 0, + }, + [227] = { + ["X"] = 25.01, + ["Y"] = 35.96, + ["CD"] = 0, + }, + [228] = { + ["X"] = 33.53, + ["Y"] = 44.13, + ["CD"] = 0, + }, + [229] = { + ["X"] = 33.96, + ["Y"] = 47.92, + ["CD"] = 0, + }, + [230] = { + ["X"] = 46.05, + ["Y"] = 49.39, + ["CD"] = 0, + }, + [231] = { + ["X"] = 47.52, + ["Y"] = 48.56, + ["CD"] = 0, + }, + [232] = { + ["X"] = 56.74, + ["Y"] = 46.21, + ["CD"] = 0, + }, + [233] = { + ["X"] = 61.18, + ["Y"] = 43.25, + ["CD"] = 0, + }, + [234] = { + ["X"] = 44.06, + ["Y"] = 41.95, + ["CD"] = 0, + }, + [235] = { + ["X"] = 35.22, + ["Y"] = 51.04, + ["CD"] = 0, + }, + [236] = { + ["X"] = 43.2, + ["Y"] = 40.81, + ["CD"] = 0, + }, + [237] = { + ["X"] = 42.26, + ["Y"] = 32.86, + ["CD"] = 0, + }, + [238] = { + ["X"] = 36.88, + ["Y"] = 52.87, + ["CD"] = 0, + }, + [239] = { + ["X"] = 40.1, + ["Y"] = 53.5, + ["CD"] = 0, + }, + [240] = { + ["X"] = 63.85, + ["Y"] = 43.39, + ["CD"] = 0, + }, + [241] = { + ["X"] = 64.08, + ["Y"] = 61.32, + ["CD"] = 0, + }, + [242] = { + ["X"] = 65.67, + ["Y"] = 56.11, + ["CD"] = 0, + }, + [243] = { + ["X"] = 46.08, + ["Y"] = 34.3, + ["CD"] = 0, + }, + [244] = { + ["X"] = 46.79, + ["Y"] = 32.81, + ["CD"] = 0, + }, + [245] = { + ["X"] = 50.39, + ["Y"] = 40.72, + ["CD"] = 0, + }, + [246] = { + ["X"] = 70.84, + ["Y"] = 60.17, + ["CD"] = 0, + }, + [247] = { + ["X"] = 69.51, + ["Y"] = 67.83, + ["CD"] = 0, + }, + [248] = { + ["X"] = 69.36, + ["Y"] = 69.51, + ["CD"] = 0, + }, + [249] = { + ["X"] = 67.23, + ["Y"] = 66.87, + ["CD"] = 0, + }, + [250] = { + ["X"] = 74.66, + ["Y"] = 68.83, + ["CD"] = 0, + }, + [251] = { + ["X"] = 70.56, + ["Y"] = 71.34, + ["CD"] = 0, + }, + [252] = { + ["X"] = 24.79, + ["Y"] = 57.99, + ["CD"] = 0, + }, + [253] = { + ["X"] = 23.91, + ["Y"] = 67.46, + ["CD"] = 0, + }, + [254] = { + ["X"] = 27.52, + ["Y"] = 67.32, + ["CD"] = 0, + }, + [255] = { + ["X"] = 27.77, + ["Y"] = 73.57, + ["CD"] = 0, + }, + [256] = { + ["X"] = 32.17, + ["Y"] = 77.78, + ["CD"] = 0, + }, + [257] = { + ["X"] = 19.31, + ["Y"] = 46.46, + ["CD"] = 0, + }, + [258] = { + ["X"] = 17.28, + ["Y"] = 45.92, + ["CD"] = 0, + }, + [259] = { + ["X"] = 21.39, + ["Y"] = 43.53, + ["CD"] = 0, + }, + [260] = { + ["X"] = 34.14, + ["Y"] = 45.78, + ["CD"] = 0, + }, + [261] = { + ["X"] = 46.06, + ["Y"] = 26.26, + ["CD"] = 0, + }, + [262] = { + ["X"] = 33.9, + ["Y"] = 41.67, + ["CD"] = 0, + }, + [263] = { + ["X"] = 69.33, + ["Y"] = 71.36, + ["CD"] = 0, + }, + [264] = { + ["X"] = 70.11, + ["Y"] = 68.95, + ["CD"] = 0, + }, + [265] = { + ["X"] = 45.95, + ["Y"] = 29.55, + ["CD"] = 0, + }, + [266] = { + ["X"] = 71.31, + ["Y"] = 71.78, + ["CD"] = 0, + }, + [267] = { + ["X"] = 24.46, + ["Y"] = 54.16, + ["CD"] = 0, + }, + [268] = { + ["X"] = 30.88, + ["Y"] = 54.62, + ["CD"] = 0, + }, + [269] = { + ["X"] = 19.96, + ["Y"] = 16, + ["CD"] = 0, + }, + [270] = { + ["X"] = 72.22, + ["Y"] = 69.78, + ["CD"] = 0, + }, + [271] = { + ["X"] = 62.56, + ["Y"] = 52.21, + ["CD"] = 0, + }, + [272] = { + ["X"] = 24.32, + ["Y"] = 52.38, + ["CD"] = 0, + }, + [273] = { + ["X"] = 37.31, + ["Y"] = 35.96, + ["CD"] = 0, + }, + [274] = { + ["X"] = 43.49, + ["Y"] = 31.39, + ["CD"] = 0, + }, + [275] = { + ["X"] = 32.66, + ["Y"] = 25.11, + ["CD"] = 0, + }, + [276] = { + ["X"] = 51.53, + ["Y"] = 32.25, + ["CD"] = 0, + }, + [277] = { + ["X"] = 52.83, + ["Y"] = 31.34, + ["CD"] = 0, + }, + [278] = { + ["X"] = 44.45, + ["Y"] = 31.35, + ["CD"] = 0, + }, + [279] = { + ["X"] = 23.79, + ["Y"] = 30.99, + ["CD"] = 0, + }, + [280] = { + ["X"] = 63.19, + ["Y"] = 52.61, + ["CD"] = 0, + }, + [281] = { + ["X"] = 32.7, + ["Y"] = 24.23, + ["CD"] = 0, + }, + [282] = { + ["X"] = 36.74, + ["Y"] = 50.84, + ["CD"] = 0, + }, + [283] = { + ["X"] = 62.48, + ["Y"] = 53.74, + ["CD"] = 0, + }, + [284] = { + ["X"] = 69.88, + ["Y"] = 66.33, + ["CD"] = 0, + }, + [285] = { + ["X"] = 30.67, + ["Y"] = 55.81, + ["CD"] = 0, + }, + [286] = { + ["X"] = 25.26, + ["Y"] = 53.34, + ["CD"] = 0, + }, + [287] = { + ["X"] = 46.54, + ["Y"] = 33.81, + ["CD"] = 0, + }, + [288] = { + ["X"] = 38.55, + ["Y"] = 27.71, + ["CD"] = 0, + }, + [289] = { + ["X"] = 18.49, + ["Y"] = 45.55, + ["CD"] = 0, + }, + [290] = { + ["X"] = 71.94, + ["Y"] = 68.81, + ["CD"] = 0, + }, + [291] = { + ["X"] = 71.92, + ["Y"] = 63.63, + ["CD"] = 0, + }, + [292] = { + ["X"] = 29.79, + ["Y"] = 44.61, + ["CD"] = 0, + }, + [293] = { + ["X"] = 30.02, + ["Y"] = 29.48, + ["CD"] = 0, + }, + [294] = { + ["X"] = 31.59, + ["Y"] = 48.32, + ["CD"] = 0, + }, + [295] = { + ["X"] = 37.14, + ["Y"] = 49.13, + ["CD"] = 0, + }, + [296] = { + ["X"] = 33.63, + ["Y"] = 57.28, + ["CD"] = 0, + }, + [297] = { + ["X"] = 36.3, + ["Y"] = 27.92, + ["CD"] = 0, + }, + [298] = { + ["X"] = 18.9, + ["Y"] = 41.86, + ["CD"] = 0, + }, + [299] = { + ["X"] = 32.85, + ["Y"] = 80.52, + ["CD"] = 0, + }, + [300] = { + ["X"] = 25.64, + ["Y"] = 24.21, + ["CD"] = 0, + }, + [301] = { + ["X"] = 62.91, + ["Y"] = 45.74, + ["CD"] = 0, + }, + [302] = { + ["X"] = 38.29, + ["Y"] = 47.08, + ["CD"] = 0, + }, + [303] = { + ["X"] = 65.94, + ["Y"] = 44.49, + ["CD"] = 0, + }, + [304] = { + ["X"] = 63.96, + ["Y"] = 50.46, + ["CD"] = 0, + }, + [305] = { + ["X"] = 30.36, + ["Y"] = 55.61, + ["CD"] = 0, + }, +} +aura_env.cooldown = 600 +aura_env.wipeDistance = 15 +aura_env.angle = 0 +aura_env.hyp = 0 +aura_env.GetClosestHerb = function() + aura_env.minID = { + ["X"] = 0, + ["Y"] = 0, + ["D"] = 1000, + ["ID"] = 0, + } + local pX = GetPlayerMapPosition("player") or 0 + local pY = select(2, GetPlayerMapPosition("player")) or 0 + pX, pY = pX * 100, pY * 100 + for k, v in ipairs(aura_env.herbs) do + local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] + if cd == 0 then + local X, Y = pX - hX, pY - hY + local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) + if hyp < aura_env.minID["D"] then + aura_env.minID["X"] = hX + aura_env.minID["Y"] = hY + aura_env.minID["D"] = hyp + aura_env.minID["ID"] = k + end + end + end + return aura_env.minID["ID"] +end diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Leystone/Rich Leystone Deposit.lua b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Mining/Leystone/Rich Leystone Deposit.lua similarity index 92% rename from Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Leystone/Rich Leystone Deposit.lua rename to WeakAuras/Projects/Herb Sniffer/Herb Arrays/Mining/Leystone/Rich Leystone Deposit.lua index c461e10..cce2a59 100644 --- a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Leystone/Rich Leystone Deposit.lua +++ b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Mining/Leystone/Rich Leystone Deposit.lua @@ -1,1031 +1,1031 @@ -aura_env.herbs = { - [1] = { - ["X"] = 42.63, - ["Y"] = 34.55, - ["CD"] = 0, - }, - [2] = { - ["X"] = 43.99, - ["Y"] = 33.06, - ["CD"] = 0, - }, - [3] = { - ["X"] = 43.05, - ["Y"] = 31.79, - ["CD"] = 0, - }, - [4] = { - ["X"] = 43.99, - ["Y"] = 31.16, - ["CD"] = 0, - }, - [5] = { - ["X"] = 26.64, - ["Y"] = 23.15, - ["CD"] = 0, - }, - [6] = { - ["X"] = 28.32, - ["Y"] = 23.6, - ["CD"] = 0, - }, - [7] = { - ["X"] = 28.88, - ["Y"] = 24.6, - ["CD"] = 0, - }, - [8] = { - ["X"] = 33.61, - ["Y"] = 36.03, - ["CD"] = 0, - }, - [9] = { - ["X"] = 30.99, - ["Y"] = 39.39, - ["CD"] = 0, - }, - [10] = { - ["X"] = 26.18, - ["Y"] = 43.14, - ["CD"] = 0, - }, - [11] = { - ["X"] = 22.71, - ["Y"] = 45.34, - ["CD"] = 0, - }, - [12] = { - ["X"] = 22.81, - ["Y"] = 49.38, - ["CD"] = 0, - }, - [13] = { - ["X"] = 21.55, - ["Y"] = 50.1, - ["CD"] = 0, - }, - [14] = { - ["X"] = 22.18, - ["Y"] = 52.8, - ["CD"] = 0, - }, - [15] = { - ["X"] = 21.47, - ["Y"] = 56.31, - ["CD"] = 0, - }, - [16] = { - ["X"] = 20.22, - ["Y"] = 60.26, - ["CD"] = 0, - }, - [17] = { - ["X"] = 24.53, - ["Y"] = 60.54, - ["CD"] = 0, - }, - [18] = { - ["X"] = 24.59, - ["Y"] = 62.52, - ["CD"] = 0, - }, - [19] = { - ["X"] = 26.87, - ["Y"] = 72.95, - ["CD"] = 0, - }, - [20] = { - ["X"] = 27.78, - ["Y"] = 72.71, - ["CD"] = 0, - }, - [21] = { - ["X"] = 29.27, - ["Y"] = 71.58, - ["CD"] = 0, - }, - [22] = { - ["X"] = 30.54, - ["Y"] = 76.06, - ["CD"] = 0, - }, - [23] = { - ["X"] = 32.41, - ["Y"] = 79.52, - ["CD"] = 0, - }, - [24] = { - ["X"] = 32.6, - ["Y"] = 74.97, - ["CD"] = 0, - }, - [25] = { - ["X"] = 33.1, - ["Y"] = 72.68, - ["CD"] = 0, - }, - [26] = { - ["X"] = 34.44, - ["Y"] = 74.65, - ["CD"] = 0, - }, - [27] = { - ["X"] = 34.74, - ["Y"] = 82.73, - ["CD"] = 0, - }, - [28] = { - ["X"] = 29.22, - ["Y"] = 78.87, - ["CD"] = 0, - }, - [29] = { - ["X"] = 31.67, - ["Y"] = 84.04, - ["CD"] = 0, - }, - [30] = { - ["X"] = 33.47, - ["Y"] = 80.66, - ["CD"] = 0, - }, - [31] = { - ["X"] = 36.84, - ["Y"] = 81.04, - ["CD"] = 0, - }, - [32] = { - ["X"] = 33.58, - ["Y"] = 79.03, - ["CD"] = 0, - }, - [33] = { - ["X"] = 31.74, - ["Y"] = 76.73, - ["CD"] = 0, - }, - [34] = { - ["X"] = 31.59, - ["Y"] = 80.8, - ["CD"] = 0, - }, - [35] = { - ["X"] = 29.41, - ["Y"] = 84.91, - ["CD"] = 0, - }, - [36] = { - ["X"] = 30.69, - ["Y"] = 79.72, - ["CD"] = 0, - }, - [37] = { - ["X"] = 31.6, - ["Y"] = 78.17, - ["CD"] = 0, - }, - [38] = { - ["X"] = 33.91, - ["Y"] = 77.78, - ["CD"] = 0, - }, - [39] = { - ["X"] = 25.75, - ["Y"] = 60.01, - ["CD"] = 0, - }, - [40] = { - ["X"] = 25.14, - ["Y"] = 63.26, - ["CD"] = 0, - }, - [41] = { - ["X"] = 30.02, - ["Y"] = 68.21, - ["CD"] = 0, - }, - [42] = { - ["X"] = 32.72, - ["Y"] = 69.46, - ["CD"] = 0, - }, - [43] = { - ["X"] = 27.93, - ["Y"] = 55.27, - ["CD"] = 0, - }, - [44] = { - ["X"] = 28.97, - ["Y"] = 53.34, - ["CD"] = 0, - }, - [45] = { - ["X"] = 30.03, - ["Y"] = 54.69, - ["CD"] = 0, - }, - [46] = { - ["X"] = 34.28, - ["Y"] = 22.25, - ["CD"] = 0, - }, - [47] = { - ["X"] = 36.44, - ["Y"] = 21.81, - ["CD"] = 0, - }, - [48] = { - ["X"] = 36.55, - ["Y"] = 17.27, - ["CD"] = 0, - }, - [49] = { - ["X"] = 34.94, - ["Y"] = 18.5, - ["CD"] = 0, - }, - [50] = { - ["X"] = 33.19, - ["Y"] = 20.08, - ["CD"] = 0, - }, - [51] = { - ["X"] = 32.41, - ["Y"] = 22.05, - ["CD"] = 0, - }, - [52] = { - ["X"] = 31.76, - ["Y"] = 21.01, - ["CD"] = 0, - }, - [53] = { - ["X"] = 30.89, - ["Y"] = 19.81, - ["CD"] = 0, - }, - [54] = { - ["X"] = 29.46, - ["Y"] = 17.67, - ["CD"] = 0, - }, - [55] = { - ["X"] = 27.11, - ["Y"] = 15.7, - ["CD"] = 0, - }, - [56] = { - ["X"] = 26.68, - ["Y"] = 19.69, - ["CD"] = 0, - }, - [57] = { - ["X"] = 28.25, - ["Y"] = 17.56, - ["CD"] = 0, - }, - [58] = { - ["X"] = 30.34, - ["Y"] = 18.98, - ["CD"] = 0, - }, - [59] = { - ["X"] = 31.53, - ["Y"] = 16.08, - ["CD"] = 0, - }, - [60] = { - ["X"] = 31.54, - ["Y"] = 19.45, - ["CD"] = 0, - }, - [61] = { - ["X"] = 32.72, - ["Y"] = 25.06, - ["CD"] = 0, - }, - [62] = { - ["X"] = 34.2, - ["Y"] = 24.4, - ["CD"] = 0, - }, - [63] = { - ["X"] = 34.04, - ["Y"] = 27.23, - ["CD"] = 0, - }, - [64] = { - ["X"] = 32.99, - ["Y"] = 38.64, - ["CD"] = 0, - }, - [65] = { - ["X"] = 31.15, - ["Y"] = 38.61, - ["CD"] = 0, - }, - [66] = { - ["X"] = 32.04, - ["Y"] = 39.74, - ["CD"] = 0, - }, - [67] = { - ["X"] = 32.65, - ["Y"] = 41.89, - ["CD"] = 0, - }, - [68] = { - ["X"] = 33.1, - ["Y"] = 42.99, - ["CD"] = 0, - }, - [69] = { - ["X"] = 36.86, - ["Y"] = 46.71, - ["CD"] = 0, - }, - [70] = { - ["X"] = 37.81, - ["Y"] = 49.74, - ["CD"] = 0, - }, - [71] = { - ["X"] = 42.95, - ["Y"] = 52.52, - ["CD"] = 0, - }, - [72] = { - ["X"] = 42.35, - ["Y"] = 48.81, - ["CD"] = 0, - }, - [73] = { - ["X"] = 69.72, - ["Y"] = 64.19, - ["CD"] = 0, - }, - [74] = { - ["X"] = 68.37, - ["Y"] = 61.74, - ["CD"] = 0, - }, - [75] = { - ["X"] = 69.51, - ["Y"] = 65.5, - ["CD"] = 0, - }, - [76] = { - ["X"] = 70.29, - ["Y"] = 64.48, - ["CD"] = 0, - }, - [77] = { - ["X"] = 69.13, - ["Y"] = 64.23, - ["CD"] = 0, - }, - [78] = { - ["X"] = 69.15, - ["Y"] = 60.1, - ["CD"] = 0, - }, - [79] = { - ["X"] = 67.97, - ["Y"] = 58.14, - ["CD"] = 0, - }, - [80] = { - ["X"] = 67.14, - ["Y"] = 53.01, - ["CD"] = 0, - }, - [81] = { - ["X"] = 73.12, - ["Y"] = 48.65, - ["CD"] = 0, - }, - [82] = { - ["X"] = 73.12, - ["Y"] = 47.89, - ["CD"] = 0, - }, - [83] = { - ["X"] = 72.19, - ["Y"] = 46.38, - ["CD"] = 0, - }, - [84] = { - ["X"] = 70.51, - ["Y"] = 46.32, - ["CD"] = 0, - }, - [85] = { - ["X"] = 68.65, - ["Y"] = 46.67, - ["CD"] = 0, - }, - [86] = { - ["X"] = 68.55, - ["Y"] = 51.82, - ["CD"] = 0, - }, - [87] = { - ["X"] = 64.71, - ["Y"] = 51.86, - ["CD"] = 0, - }, - [88] = { - ["X"] = 63.71, - ["Y"] = 48.77, - ["CD"] = 0, - }, - [89] = { - ["X"] = 63.62, - ["Y"] = 47.68, - ["CD"] = 0, - }, - [90] = { - ["X"] = 64.8, - ["Y"] = 46.7, - ["CD"] = 0, - }, - [91] = { - ["X"] = 66.58, - ["Y"] = 45.28, - ["CD"] = 0, - }, - [92] = { - ["X"] = 63.34, - ["Y"] = 33.87, - ["CD"] = 0, - }, - [93] = { - ["X"] = 63.01, - ["Y"] = 34.84, - ["CD"] = 0, - }, - [94] = { - ["X"] = 61.77, - ["Y"] = 39.07, - ["CD"] = 0, - }, - [95] = { - ["X"] = 59.21, - ["Y"] = 41.44, - ["CD"] = 0, - }, - [96] = { - ["X"] = 56.78, - ["Y"] = 42.66, - ["CD"] = 0, - }, - [97] = { - ["X"] = 55.53, - ["Y"] = 47.09, - ["CD"] = 0, - }, - [98] = { - ["X"] = 59.44, - ["Y"] = 47.15, - ["CD"] = 0, - }, - [99] = { - ["X"] = 61.51, - ["Y"] = 51.48, - ["CD"] = 0, - }, - [100] = { - ["X"] = 63.82, - ["Y"] = 52.27, - ["CD"] = 0, - }, - [101] = { - ["X"] = 62, - ["Y"] = 52.91, - ["CD"] = 0, - }, - [102] = { - ["X"] = 61.35, - ["Y"] = 50.51, - ["CD"] = 0, - }, - [103] = { - ["X"] = 61.74, - ["Y"] = 48.03, - ["CD"] = 0, - }, - [104] = { - ["X"] = 58.77, - ["Y"] = 43.45, - ["CD"] = 0, - }, - [105] = { - ["X"] = 58.41, - ["Y"] = 45.39, - ["CD"] = 0, - }, - [106] = { - ["X"] = 54.5, - ["Y"] = 46.97, - ["CD"] = 0, - }, - [107] = { - ["X"] = 55.89, - ["Y"] = 45.23, - ["CD"] = 0, - }, - [108] = { - ["X"] = 56.05, - ["Y"] = 41.79, - ["CD"] = 0, - }, - [109] = { - ["X"] = 57.41, - ["Y"] = 42.15, - ["CD"] = 0, - }, - [110] = { - ["X"] = 57.21, - ["Y"] = 44.41, - ["CD"] = 0, - }, - [111] = { - ["X"] = 57.77, - ["Y"] = 45.14, - ["CD"] = 0, - }, - [112] = { - ["X"] = 59.3, - ["Y"] = 40.64, - ["CD"] = 0, - }, - [113] = { - ["X"] = 60.35, - ["Y"] = 40.73, - ["CD"] = 0, - }, - [114] = { - ["X"] = 61.12, - ["Y"] = 41.76, - ["CD"] = 0, - }, - [115] = { - ["X"] = 31.67, - ["Y"] = 27.07, - ["CD"] = 0, - }, - [116] = { - ["X"] = 30.98, - ["Y"] = 24.72, - ["CD"] = 0, - }, - [117] = { - ["X"] = 29.82, - ["Y"] = 26.4, - ["CD"] = 0, - }, - [118] = { - ["X"] = 27.29, - ["Y"] = 25.93, - ["CD"] = 0, - }, - [119] = { - ["X"] = 26.05, - ["Y"] = 27.85, - ["CD"] = 0, - }, - [120] = { - ["X"] = 26.76, - ["Y"] = 29.56, - ["CD"] = 0, - }, - [121] = { - ["X"] = 28.39, - ["Y"] = 30.88, - ["CD"] = 0, - }, - [122] = { - ["X"] = 28.45, - ["Y"] = 31.37, - ["CD"] = 0, - }, - [123] = { - ["X"] = 29.25, - ["Y"] = 32.11, - ["CD"] = 0, - }, - [124] = { - ["X"] = 29.96, - ["Y"] = 30.84, - ["CD"] = 0, - }, - [125] = { - ["X"] = 32.9, - ["Y"] = 32.82, - ["CD"] = 0, - }, - [126] = { - ["X"] = 31.92, - ["Y"] = 31.74, - ["CD"] = 0, - }, - [127] = { - ["X"] = 30.75, - ["Y"] = 37.27, - ["CD"] = 0, - }, - [128] = { - ["X"] = 31.63, - ["Y"] = 37.6, - ["CD"] = 0, - }, - [129] = { - ["X"] = 27.94, - ["Y"] = 37.72, - ["CD"] = 0, - }, - [130] = { - ["X"] = 28.17, - ["Y"] = 38.49, - ["CD"] = 0, - }, - [131] = { - ["X"] = 26.32, - ["Y"] = 40.44, - ["CD"] = 0, - }, - [132] = { - ["X"] = 24.49, - ["Y"] = 41.81, - ["CD"] = 0, - }, - [133] = { - ["X"] = 18.08, - ["Y"] = 46.61, - ["CD"] = 0, - }, - [134] = { - ["X"] = 17.59, - ["Y"] = 45.09, - ["CD"] = 0, - }, - [135] = { - ["X"] = 18.4, - ["Y"] = 41, - ["CD"] = 0, - }, - [136] = { - ["X"] = 17.48, - ["Y"] = 39.95, - ["CD"] = 0, - }, - [137] = { - ["X"] = 18.65, - ["Y"] = 41.96, - ["CD"] = 0, - }, - [138] = { - ["X"] = 20.95, - ["Y"] = 43.91, - ["CD"] = 0, - }, - [139] = { - ["X"] = 22.97, - ["Y"] = 47.92, - ["CD"] = 0, - }, - [140] = { - ["X"] = 19.09, - ["Y"] = 49.69, - ["CD"] = 0, - }, - [141] = { - ["X"] = 22.03, - ["Y"] = 56.43, - ["CD"] = 0, - }, - [142] = { - ["X"] = 22.31, - ["Y"] = 58.92, - ["CD"] = 0, - }, - [143] = { - ["X"] = 25.31, - ["Y"] = 68.09, - ["CD"] = 0, - }, - [144] = { - ["X"] = 21.62, - ["Y"] = 61.23, - ["CD"] = 0, - }, - [145] = { - ["X"] = 21.35, - ["Y"] = 59.29, - ["CD"] = 0, - }, - [146] = { - ["X"] = 19.87, - ["Y"] = 59.06, - ["CD"] = 0, - }, - [147] = { - ["X"] = 19.27, - ["Y"] = 58.37, - ["CD"] = 0, - }, - [148] = { - ["X"] = 18.91, - ["Y"] = 56.02, - ["CD"] = 0, - }, - [149] = { - ["X"] = 20.58, - ["Y"] = 52.54, - ["CD"] = 0, - }, - [150] = { - ["X"] = 20.05, - ["Y"] = 50.86, - ["CD"] = 0, - }, - [151] = { - ["X"] = 22.43, - ["Y"] = 54.14, - ["CD"] = 0, - }, - [152] = { - ["X"] = 23.28, - ["Y"] = 54.2, - ["CD"] = 0, - }, - [153] = { - ["X"] = 26.01, - ["Y"] = 50.3, - ["CD"] = 0, - }, - [154] = { - ["X"] = 27.47, - ["Y"] = 49.06, - ["CD"] = 0, - }, - [155] = { - ["X"] = 28.48, - ["Y"] = 47.38, - ["CD"] = 0, - }, - [156] = { - ["X"] = 27.49, - ["Y"] = 43.9, - ["CD"] = 0, - }, - [157] = { - ["X"] = 27.59, - ["Y"] = 41.63, - ["CD"] = 0, - }, - [158] = { - ["X"] = 29.31, - ["Y"] = 38.42, - ["CD"] = 0, - }, - [159] = { - ["X"] = 37.52, - ["Y"] = 25.52, - ["CD"] = 0, - }, - [160] = { - ["X"] = 35.96, - ["Y"] = 27.82, - ["CD"] = 0, - }, - [161] = { - ["X"] = 34.07, - ["Y"] = 31.49, - ["CD"] = 0, - }, - [162] = { - ["X"] = 35.03, - ["Y"] = 31.58, - ["CD"] = 0, - }, - [163] = { - ["X"] = 34.02, - ["Y"] = 33.22, - ["CD"] = 0, - }, - [164] = { - ["X"] = 33.82, - ["Y"] = 34.84, - ["CD"] = 0, - }, - [165] = { - ["X"] = 34.21, - ["Y"] = 37.6, - ["CD"] = 0, - }, - [166] = { - ["X"] = 47.11, - ["Y"] = 38.8, - ["CD"] = 0, - }, - [167] = { - ["X"] = 44.32, - ["Y"] = 40.46, - ["CD"] = 0, - }, - [168] = { - ["X"] = 42.59, - ["Y"] = 42.28, - ["CD"] = 0, - }, - [169] = { - ["X"] = 42.94, - ["Y"] = 42.27, - ["CD"] = 0, - }, - [170] = { - ["X"] = 45.1, - ["Y"] = 42.16, - ["CD"] = 0, - }, - [171] = { - ["X"] = 46.25, - ["Y"] = 43.49, - ["CD"] = 0, - }, - [172] = { - ["X"] = 45.88, - ["Y"] = 45.2, - ["CD"] = 0, - }, - [173] = { - ["X"] = 45.17, - ["Y"] = 46.78, - ["CD"] = 0, - }, - [174] = { - ["X"] = 43.62, - ["Y"] = 46.21, - ["CD"] = 0, - }, - [175] = { - ["X"] = 43.43, - ["Y"] = 47.27, - ["CD"] = 0, - }, - [176] = { - ["X"] = 43, - ["Y"] = 47.82, - ["CD"] = 0, - }, - [177] = { - ["X"] = 41.94, - ["Y"] = 46.63, - ["CD"] = 0, - }, - [178] = { - ["X"] = 40.91, - ["Y"] = 47.21, - ["CD"] = 0, - }, - [179] = { - ["X"] = 39.44, - ["Y"] = 47.72, - ["CD"] = 0, - }, - [180] = { - ["X"] = 36.48, - ["Y"] = 48.68, - ["CD"] = 0, - }, - [181] = { - ["X"] = 35.38, - ["Y"] = 46.59, - ["CD"] = 0, - }, - [182] = { - ["X"] = 35.17, - ["Y"] = 45.4, - ["CD"] = 0, - }, - [183] = { - ["X"] = 39.19, - ["Y"] = 38.05, - ["CD"] = 0, - }, - [184] = { - ["X"] = 41.12, - ["Y"] = 37.99, - ["CD"] = 0, - }, - [185] = { - ["X"] = 40.16, - ["Y"] = 36.83, - ["CD"] = 0, - }, - [186] = { - ["X"] = 39.98, - ["Y"] = 39.7, - ["CD"] = 0, - }, - [187] = { - ["X"] = 38.39, - ["Y"] = 40.1, - ["CD"] = 0, - }, - [188] = { - ["X"] = 37.24, - ["Y"] = 41.92, - ["CD"] = 0, - }, - [189] = { - ["X"] = 36.93, - ["Y"] = 43.94, - ["CD"] = 0, - }, - [190] = { - ["X"] = 36.15, - ["Y"] = 43.84, - ["CD"] = 0, - }, - [191] = { - ["X"] = 36.94, - ["Y"] = 44.84, - ["CD"] = 0, - }, - [192] = { - ["X"] = 38.61, - ["Y"] = 47.11, - ["CD"] = 0, - }, - [193] = { - ["X"] = 37.74, - ["Y"] = 48.57, - ["CD"] = 0, - }, - [194] = { - ["X"] = 38.21, - ["Y"] = 51.02, - ["CD"] = 0, - }, - [195] = { - ["X"] = 37.57, - ["Y"] = 51.13, - ["CD"] = 0, - }, - [196] = { - ["X"] = 34.62, - ["Y"] = 56.53, - ["CD"] = 0, - }, - [197] = { - ["X"] = 33.91, - ["Y"] = 54.15, - ["CD"] = 0, - }, - [198] = { - ["X"] = 35.96, - ["Y"] = 51.61, - ["CD"] = 0, - }, - [199] = { - ["X"] = 35.55, - ["Y"] = 61.86, - ["CD"] = 0, - }, - [200] = { - ["X"] = 68.25, - ["Y"] = 61.21, - ["CD"] = 0, - }, -} -aura_env.cooldown = 600 -aura_env.wipeDistance = 15 -aura_env.angle = 0 -aura_env.hyp = 0 -aura_env.GetClosestHerb = function() - aura_env.minID = { - ["X"] = 0, - ["Y"] = 0, - ["D"] = 1000, - ["ID"] = 0, - } - local pX = GetPlayerMapPosition("player") or 0 - local pY = select(2, GetPlayerMapPosition("player")) or 0 - pX, pY = pX * 100, pY * 100 - for k, v in ipairs(aura_env.herbs) do - local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] - if cd == 0 then - local X, Y = pX - hX, pY - hY - local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) - if hyp < aura_env.minID["D"] then - aura_env.minID["X"] = hX - aura_env.minID["Y"] = hY - aura_env.minID["D"] = hyp - aura_env.minID["ID"] = k - end - end - end - return aura_env.minID["ID"] -end +aura_env.herbs = { + [1] = { + ["X"] = 42.63, + ["Y"] = 34.55, + ["CD"] = 0, + }, + [2] = { + ["X"] = 43.99, + ["Y"] = 33.06, + ["CD"] = 0, + }, + [3] = { + ["X"] = 43.05, + ["Y"] = 31.79, + ["CD"] = 0, + }, + [4] = { + ["X"] = 43.99, + ["Y"] = 31.16, + ["CD"] = 0, + }, + [5] = { + ["X"] = 26.64, + ["Y"] = 23.15, + ["CD"] = 0, + }, + [6] = { + ["X"] = 28.32, + ["Y"] = 23.6, + ["CD"] = 0, + }, + [7] = { + ["X"] = 28.88, + ["Y"] = 24.6, + ["CD"] = 0, + }, + [8] = { + ["X"] = 33.61, + ["Y"] = 36.03, + ["CD"] = 0, + }, + [9] = { + ["X"] = 30.99, + ["Y"] = 39.39, + ["CD"] = 0, + }, + [10] = { + ["X"] = 26.18, + ["Y"] = 43.14, + ["CD"] = 0, + }, + [11] = { + ["X"] = 22.71, + ["Y"] = 45.34, + ["CD"] = 0, + }, + [12] = { + ["X"] = 22.81, + ["Y"] = 49.38, + ["CD"] = 0, + }, + [13] = { + ["X"] = 21.55, + ["Y"] = 50.1, + ["CD"] = 0, + }, + [14] = { + ["X"] = 22.18, + ["Y"] = 52.8, + ["CD"] = 0, + }, + [15] = { + ["X"] = 21.47, + ["Y"] = 56.31, + ["CD"] = 0, + }, + [16] = { + ["X"] = 20.22, + ["Y"] = 60.26, + ["CD"] = 0, + }, + [17] = { + ["X"] = 24.53, + ["Y"] = 60.54, + ["CD"] = 0, + }, + [18] = { + ["X"] = 24.59, + ["Y"] = 62.52, + ["CD"] = 0, + }, + [19] = { + ["X"] = 26.87, + ["Y"] = 72.95, + ["CD"] = 0, + }, + [20] = { + ["X"] = 27.78, + ["Y"] = 72.71, + ["CD"] = 0, + }, + [21] = { + ["X"] = 29.27, + ["Y"] = 71.58, + ["CD"] = 0, + }, + [22] = { + ["X"] = 30.54, + ["Y"] = 76.06, + ["CD"] = 0, + }, + [23] = { + ["X"] = 32.41, + ["Y"] = 79.52, + ["CD"] = 0, + }, + [24] = { + ["X"] = 32.6, + ["Y"] = 74.97, + ["CD"] = 0, + }, + [25] = { + ["X"] = 33.1, + ["Y"] = 72.68, + ["CD"] = 0, + }, + [26] = { + ["X"] = 34.44, + ["Y"] = 74.65, + ["CD"] = 0, + }, + [27] = { + ["X"] = 34.74, + ["Y"] = 82.73, + ["CD"] = 0, + }, + [28] = { + ["X"] = 29.22, + ["Y"] = 78.87, + ["CD"] = 0, + }, + [29] = { + ["X"] = 31.67, + ["Y"] = 84.04, + ["CD"] = 0, + }, + [30] = { + ["X"] = 33.47, + ["Y"] = 80.66, + ["CD"] = 0, + }, + [31] = { + ["X"] = 36.84, + ["Y"] = 81.04, + ["CD"] = 0, + }, + [32] = { + ["X"] = 33.58, + ["Y"] = 79.03, + ["CD"] = 0, + }, + [33] = { + ["X"] = 31.74, + ["Y"] = 76.73, + ["CD"] = 0, + }, + [34] = { + ["X"] = 31.59, + ["Y"] = 80.8, + ["CD"] = 0, + }, + [35] = { + ["X"] = 29.41, + ["Y"] = 84.91, + ["CD"] = 0, + }, + [36] = { + ["X"] = 30.69, + ["Y"] = 79.72, + ["CD"] = 0, + }, + [37] = { + ["X"] = 31.6, + ["Y"] = 78.17, + ["CD"] = 0, + }, + [38] = { + ["X"] = 33.91, + ["Y"] = 77.78, + ["CD"] = 0, + }, + [39] = { + ["X"] = 25.75, + ["Y"] = 60.01, + ["CD"] = 0, + }, + [40] = { + ["X"] = 25.14, + ["Y"] = 63.26, + ["CD"] = 0, + }, + [41] = { + ["X"] = 30.02, + ["Y"] = 68.21, + ["CD"] = 0, + }, + [42] = { + ["X"] = 32.72, + ["Y"] = 69.46, + ["CD"] = 0, + }, + [43] = { + ["X"] = 27.93, + ["Y"] = 55.27, + ["CD"] = 0, + }, + [44] = { + ["X"] = 28.97, + ["Y"] = 53.34, + ["CD"] = 0, + }, + [45] = { + ["X"] = 30.03, + ["Y"] = 54.69, + ["CD"] = 0, + }, + [46] = { + ["X"] = 34.28, + ["Y"] = 22.25, + ["CD"] = 0, + }, + [47] = { + ["X"] = 36.44, + ["Y"] = 21.81, + ["CD"] = 0, + }, + [48] = { + ["X"] = 36.55, + ["Y"] = 17.27, + ["CD"] = 0, + }, + [49] = { + ["X"] = 34.94, + ["Y"] = 18.5, + ["CD"] = 0, + }, + [50] = { + ["X"] = 33.19, + ["Y"] = 20.08, + ["CD"] = 0, + }, + [51] = { + ["X"] = 32.41, + ["Y"] = 22.05, + ["CD"] = 0, + }, + [52] = { + ["X"] = 31.76, + ["Y"] = 21.01, + ["CD"] = 0, + }, + [53] = { + ["X"] = 30.89, + ["Y"] = 19.81, + ["CD"] = 0, + }, + [54] = { + ["X"] = 29.46, + ["Y"] = 17.67, + ["CD"] = 0, + }, + [55] = { + ["X"] = 27.11, + ["Y"] = 15.7, + ["CD"] = 0, + }, + [56] = { + ["X"] = 26.68, + ["Y"] = 19.69, + ["CD"] = 0, + }, + [57] = { + ["X"] = 28.25, + ["Y"] = 17.56, + ["CD"] = 0, + }, + [58] = { + ["X"] = 30.34, + ["Y"] = 18.98, + ["CD"] = 0, + }, + [59] = { + ["X"] = 31.53, + ["Y"] = 16.08, + ["CD"] = 0, + }, + [60] = { + ["X"] = 31.54, + ["Y"] = 19.45, + ["CD"] = 0, + }, + [61] = { + ["X"] = 32.72, + ["Y"] = 25.06, + ["CD"] = 0, + }, + [62] = { + ["X"] = 34.2, + ["Y"] = 24.4, + ["CD"] = 0, + }, + [63] = { + ["X"] = 34.04, + ["Y"] = 27.23, + ["CD"] = 0, + }, + [64] = { + ["X"] = 32.99, + ["Y"] = 38.64, + ["CD"] = 0, + }, + [65] = { + ["X"] = 31.15, + ["Y"] = 38.61, + ["CD"] = 0, + }, + [66] = { + ["X"] = 32.04, + ["Y"] = 39.74, + ["CD"] = 0, + }, + [67] = { + ["X"] = 32.65, + ["Y"] = 41.89, + ["CD"] = 0, + }, + [68] = { + ["X"] = 33.1, + ["Y"] = 42.99, + ["CD"] = 0, + }, + [69] = { + ["X"] = 36.86, + ["Y"] = 46.71, + ["CD"] = 0, + }, + [70] = { + ["X"] = 37.81, + ["Y"] = 49.74, + ["CD"] = 0, + }, + [71] = { + ["X"] = 42.95, + ["Y"] = 52.52, + ["CD"] = 0, + }, + [72] = { + ["X"] = 42.35, + ["Y"] = 48.81, + ["CD"] = 0, + }, + [73] = { + ["X"] = 69.72, + ["Y"] = 64.19, + ["CD"] = 0, + }, + [74] = { + ["X"] = 68.37, + ["Y"] = 61.74, + ["CD"] = 0, + }, + [75] = { + ["X"] = 69.51, + ["Y"] = 65.5, + ["CD"] = 0, + }, + [76] = { + ["X"] = 70.29, + ["Y"] = 64.48, + ["CD"] = 0, + }, + [77] = { + ["X"] = 69.13, + ["Y"] = 64.23, + ["CD"] = 0, + }, + [78] = { + ["X"] = 69.15, + ["Y"] = 60.1, + ["CD"] = 0, + }, + [79] = { + ["X"] = 67.97, + ["Y"] = 58.14, + ["CD"] = 0, + }, + [80] = { + ["X"] = 67.14, + ["Y"] = 53.01, + ["CD"] = 0, + }, + [81] = { + ["X"] = 73.12, + ["Y"] = 48.65, + ["CD"] = 0, + }, + [82] = { + ["X"] = 73.12, + ["Y"] = 47.89, + ["CD"] = 0, + }, + [83] = { + ["X"] = 72.19, + ["Y"] = 46.38, + ["CD"] = 0, + }, + [84] = { + ["X"] = 70.51, + ["Y"] = 46.32, + ["CD"] = 0, + }, + [85] = { + ["X"] = 68.65, + ["Y"] = 46.67, + ["CD"] = 0, + }, + [86] = { + ["X"] = 68.55, + ["Y"] = 51.82, + ["CD"] = 0, + }, + [87] = { + ["X"] = 64.71, + ["Y"] = 51.86, + ["CD"] = 0, + }, + [88] = { + ["X"] = 63.71, + ["Y"] = 48.77, + ["CD"] = 0, + }, + [89] = { + ["X"] = 63.62, + ["Y"] = 47.68, + ["CD"] = 0, + }, + [90] = { + ["X"] = 64.8, + ["Y"] = 46.7, + ["CD"] = 0, + }, + [91] = { + ["X"] = 66.58, + ["Y"] = 45.28, + ["CD"] = 0, + }, + [92] = { + ["X"] = 63.34, + ["Y"] = 33.87, + ["CD"] = 0, + }, + [93] = { + ["X"] = 63.01, + ["Y"] = 34.84, + ["CD"] = 0, + }, + [94] = { + ["X"] = 61.77, + ["Y"] = 39.07, + ["CD"] = 0, + }, + [95] = { + ["X"] = 59.21, + ["Y"] = 41.44, + ["CD"] = 0, + }, + [96] = { + ["X"] = 56.78, + ["Y"] = 42.66, + ["CD"] = 0, + }, + [97] = { + ["X"] = 55.53, + ["Y"] = 47.09, + ["CD"] = 0, + }, + [98] = { + ["X"] = 59.44, + ["Y"] = 47.15, + ["CD"] = 0, + }, + [99] = { + ["X"] = 61.51, + ["Y"] = 51.48, + ["CD"] = 0, + }, + [100] = { + ["X"] = 63.82, + ["Y"] = 52.27, + ["CD"] = 0, + }, + [101] = { + ["X"] = 62, + ["Y"] = 52.91, + ["CD"] = 0, + }, + [102] = { + ["X"] = 61.35, + ["Y"] = 50.51, + ["CD"] = 0, + }, + [103] = { + ["X"] = 61.74, + ["Y"] = 48.03, + ["CD"] = 0, + }, + [104] = { + ["X"] = 58.77, + ["Y"] = 43.45, + ["CD"] = 0, + }, + [105] = { + ["X"] = 58.41, + ["Y"] = 45.39, + ["CD"] = 0, + }, + [106] = { + ["X"] = 54.5, + ["Y"] = 46.97, + ["CD"] = 0, + }, + [107] = { + ["X"] = 55.89, + ["Y"] = 45.23, + ["CD"] = 0, + }, + [108] = { + ["X"] = 56.05, + ["Y"] = 41.79, + ["CD"] = 0, + }, + [109] = { + ["X"] = 57.41, + ["Y"] = 42.15, + ["CD"] = 0, + }, + [110] = { + ["X"] = 57.21, + ["Y"] = 44.41, + ["CD"] = 0, + }, + [111] = { + ["X"] = 57.77, + ["Y"] = 45.14, + ["CD"] = 0, + }, + [112] = { + ["X"] = 59.3, + ["Y"] = 40.64, + ["CD"] = 0, + }, + [113] = { + ["X"] = 60.35, + ["Y"] = 40.73, + ["CD"] = 0, + }, + [114] = { + ["X"] = 61.12, + ["Y"] = 41.76, + ["CD"] = 0, + }, + [115] = { + ["X"] = 31.67, + ["Y"] = 27.07, + ["CD"] = 0, + }, + [116] = { + ["X"] = 30.98, + ["Y"] = 24.72, + ["CD"] = 0, + }, + [117] = { + ["X"] = 29.82, + ["Y"] = 26.4, + ["CD"] = 0, + }, + [118] = { + ["X"] = 27.29, + ["Y"] = 25.93, + ["CD"] = 0, + }, + [119] = { + ["X"] = 26.05, + ["Y"] = 27.85, + ["CD"] = 0, + }, + [120] = { + ["X"] = 26.76, + ["Y"] = 29.56, + ["CD"] = 0, + }, + [121] = { + ["X"] = 28.39, + ["Y"] = 30.88, + ["CD"] = 0, + }, + [122] = { + ["X"] = 28.45, + ["Y"] = 31.37, + ["CD"] = 0, + }, + [123] = { + ["X"] = 29.25, + ["Y"] = 32.11, + ["CD"] = 0, + }, + [124] = { + ["X"] = 29.96, + ["Y"] = 30.84, + ["CD"] = 0, + }, + [125] = { + ["X"] = 32.9, + ["Y"] = 32.82, + ["CD"] = 0, + }, + [126] = { + ["X"] = 31.92, + ["Y"] = 31.74, + ["CD"] = 0, + }, + [127] = { + ["X"] = 30.75, + ["Y"] = 37.27, + ["CD"] = 0, + }, + [128] = { + ["X"] = 31.63, + ["Y"] = 37.6, + ["CD"] = 0, + }, + [129] = { + ["X"] = 27.94, + ["Y"] = 37.72, + ["CD"] = 0, + }, + [130] = { + ["X"] = 28.17, + ["Y"] = 38.49, + ["CD"] = 0, + }, + [131] = { + ["X"] = 26.32, + ["Y"] = 40.44, + ["CD"] = 0, + }, + [132] = { + ["X"] = 24.49, + ["Y"] = 41.81, + ["CD"] = 0, + }, + [133] = { + ["X"] = 18.08, + ["Y"] = 46.61, + ["CD"] = 0, + }, + [134] = { + ["X"] = 17.59, + ["Y"] = 45.09, + ["CD"] = 0, + }, + [135] = { + ["X"] = 18.4, + ["Y"] = 41, + ["CD"] = 0, + }, + [136] = { + ["X"] = 17.48, + ["Y"] = 39.95, + ["CD"] = 0, + }, + [137] = { + ["X"] = 18.65, + ["Y"] = 41.96, + ["CD"] = 0, + }, + [138] = { + ["X"] = 20.95, + ["Y"] = 43.91, + ["CD"] = 0, + }, + [139] = { + ["X"] = 22.97, + ["Y"] = 47.92, + ["CD"] = 0, + }, + [140] = { + ["X"] = 19.09, + ["Y"] = 49.69, + ["CD"] = 0, + }, + [141] = { + ["X"] = 22.03, + ["Y"] = 56.43, + ["CD"] = 0, + }, + [142] = { + ["X"] = 22.31, + ["Y"] = 58.92, + ["CD"] = 0, + }, + [143] = { + ["X"] = 25.31, + ["Y"] = 68.09, + ["CD"] = 0, + }, + [144] = { + ["X"] = 21.62, + ["Y"] = 61.23, + ["CD"] = 0, + }, + [145] = { + ["X"] = 21.35, + ["Y"] = 59.29, + ["CD"] = 0, + }, + [146] = { + ["X"] = 19.87, + ["Y"] = 59.06, + ["CD"] = 0, + }, + [147] = { + ["X"] = 19.27, + ["Y"] = 58.37, + ["CD"] = 0, + }, + [148] = { + ["X"] = 18.91, + ["Y"] = 56.02, + ["CD"] = 0, + }, + [149] = { + ["X"] = 20.58, + ["Y"] = 52.54, + ["CD"] = 0, + }, + [150] = { + ["X"] = 20.05, + ["Y"] = 50.86, + ["CD"] = 0, + }, + [151] = { + ["X"] = 22.43, + ["Y"] = 54.14, + ["CD"] = 0, + }, + [152] = { + ["X"] = 23.28, + ["Y"] = 54.2, + ["CD"] = 0, + }, + [153] = { + ["X"] = 26.01, + ["Y"] = 50.3, + ["CD"] = 0, + }, + [154] = { + ["X"] = 27.47, + ["Y"] = 49.06, + ["CD"] = 0, + }, + [155] = { + ["X"] = 28.48, + ["Y"] = 47.38, + ["CD"] = 0, + }, + [156] = { + ["X"] = 27.49, + ["Y"] = 43.9, + ["CD"] = 0, + }, + [157] = { + ["X"] = 27.59, + ["Y"] = 41.63, + ["CD"] = 0, + }, + [158] = { + ["X"] = 29.31, + ["Y"] = 38.42, + ["CD"] = 0, + }, + [159] = { + ["X"] = 37.52, + ["Y"] = 25.52, + ["CD"] = 0, + }, + [160] = { + ["X"] = 35.96, + ["Y"] = 27.82, + ["CD"] = 0, + }, + [161] = { + ["X"] = 34.07, + ["Y"] = 31.49, + ["CD"] = 0, + }, + [162] = { + ["X"] = 35.03, + ["Y"] = 31.58, + ["CD"] = 0, + }, + [163] = { + ["X"] = 34.02, + ["Y"] = 33.22, + ["CD"] = 0, + }, + [164] = { + ["X"] = 33.82, + ["Y"] = 34.84, + ["CD"] = 0, + }, + [165] = { + ["X"] = 34.21, + ["Y"] = 37.6, + ["CD"] = 0, + }, + [166] = { + ["X"] = 47.11, + ["Y"] = 38.8, + ["CD"] = 0, + }, + [167] = { + ["X"] = 44.32, + ["Y"] = 40.46, + ["CD"] = 0, + }, + [168] = { + ["X"] = 42.59, + ["Y"] = 42.28, + ["CD"] = 0, + }, + [169] = { + ["X"] = 42.94, + ["Y"] = 42.27, + ["CD"] = 0, + }, + [170] = { + ["X"] = 45.1, + ["Y"] = 42.16, + ["CD"] = 0, + }, + [171] = { + ["X"] = 46.25, + ["Y"] = 43.49, + ["CD"] = 0, + }, + [172] = { + ["X"] = 45.88, + ["Y"] = 45.2, + ["CD"] = 0, + }, + [173] = { + ["X"] = 45.17, + ["Y"] = 46.78, + ["CD"] = 0, + }, + [174] = { + ["X"] = 43.62, + ["Y"] = 46.21, + ["CD"] = 0, + }, + [175] = { + ["X"] = 43.43, + ["Y"] = 47.27, + ["CD"] = 0, + }, + [176] = { + ["X"] = 43, + ["Y"] = 47.82, + ["CD"] = 0, + }, + [177] = { + ["X"] = 41.94, + ["Y"] = 46.63, + ["CD"] = 0, + }, + [178] = { + ["X"] = 40.91, + ["Y"] = 47.21, + ["CD"] = 0, + }, + [179] = { + ["X"] = 39.44, + ["Y"] = 47.72, + ["CD"] = 0, + }, + [180] = { + ["X"] = 36.48, + ["Y"] = 48.68, + ["CD"] = 0, + }, + [181] = { + ["X"] = 35.38, + ["Y"] = 46.59, + ["CD"] = 0, + }, + [182] = { + ["X"] = 35.17, + ["Y"] = 45.4, + ["CD"] = 0, + }, + [183] = { + ["X"] = 39.19, + ["Y"] = 38.05, + ["CD"] = 0, + }, + [184] = { + ["X"] = 41.12, + ["Y"] = 37.99, + ["CD"] = 0, + }, + [185] = { + ["X"] = 40.16, + ["Y"] = 36.83, + ["CD"] = 0, + }, + [186] = { + ["X"] = 39.98, + ["Y"] = 39.7, + ["CD"] = 0, + }, + [187] = { + ["X"] = 38.39, + ["Y"] = 40.1, + ["CD"] = 0, + }, + [188] = { + ["X"] = 37.24, + ["Y"] = 41.92, + ["CD"] = 0, + }, + [189] = { + ["X"] = 36.93, + ["Y"] = 43.94, + ["CD"] = 0, + }, + [190] = { + ["X"] = 36.15, + ["Y"] = 43.84, + ["CD"] = 0, + }, + [191] = { + ["X"] = 36.94, + ["Y"] = 44.84, + ["CD"] = 0, + }, + [192] = { + ["X"] = 38.61, + ["Y"] = 47.11, + ["CD"] = 0, + }, + [193] = { + ["X"] = 37.74, + ["Y"] = 48.57, + ["CD"] = 0, + }, + [194] = { + ["X"] = 38.21, + ["Y"] = 51.02, + ["CD"] = 0, + }, + [195] = { + ["X"] = 37.57, + ["Y"] = 51.13, + ["CD"] = 0, + }, + [196] = { + ["X"] = 34.62, + ["Y"] = 56.53, + ["CD"] = 0, + }, + [197] = { + ["X"] = 33.91, + ["Y"] = 54.15, + ["CD"] = 0, + }, + [198] = { + ["X"] = 35.96, + ["Y"] = 51.61, + ["CD"] = 0, + }, + [199] = { + ["X"] = 35.55, + ["Y"] = 61.86, + ["CD"] = 0, + }, + [200] = { + ["X"] = 68.25, + ["Y"] = 61.21, + ["CD"] = 0, + }, +} +aura_env.cooldown = 600 +aura_env.wipeDistance = 15 +aura_env.angle = 0 +aura_env.hyp = 0 +aura_env.GetClosestHerb = function() + aura_env.minID = { + ["X"] = 0, + ["Y"] = 0, + ["D"] = 1000, + ["ID"] = 0, + } + local pX = GetPlayerMapPosition("player") or 0 + local pY = select(2, GetPlayerMapPosition("player")) or 0 + pX, pY = pX * 100, pY * 100 + for k, v in ipairs(aura_env.herbs) do + local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] + if cd == 0 then + local X, Y = pX - hX, pY - hY + local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) + if hyp < aura_env.minID["D"] then + aura_env.minID["X"] = hX + aura_env.minID["Y"] = hY + aura_env.minID["D"] = hyp + aura_env.minID["ID"] = k + end + end + end + return aura_env.minID["ID"] +end diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Titanium.lua b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Mining/Titanium.lua similarity index 93% rename from Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Titanium.lua rename to WeakAuras/Projects/Herb Sniffer/Herb Arrays/Mining/Titanium.lua index e3831f2..80d9235 100644 --- a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Titanium.lua +++ b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Mining/Titanium.lua @@ -1,381 +1,381 @@ -aura_env.herbs = { - [1] = { - ["X"] = 64.49, - ["Y"] = 56.55, - ["CD"] = 0, - }, - [2] = { - ["X"] = 63.79, - ["Y"] = 54.73, - ["CD"] = 0, - }, - [3] = { - ["X"] = 61.99, - ["Y"] = 53.82, - ["CD"] = 0, - }, - [4] = { - ["X"] = 61.48, - ["Y"] = 49.4, - ["CD"] = 0, - }, - [5] = { - ["X"] = 61.46, - ["Y"] = 47.17, - ["CD"] = 0, - }, - [6] = { - ["X"] = 59.23, - ["Y"] = 46.84, - ["CD"] = 0, - }, - [7] = { - ["X"] = 56.86, - ["Y"] = 45.6, - ["CD"] = 0, - }, - [8] = { - ["X"] = 55.78, - ["Y"] = 44.91, - ["CD"] = 0, - }, - [9] = { - ["X"] = 55.06, - ["Y"] = 34.48, - ["CD"] = 0, - }, - [10] = { - ["X"] = 56.92, - ["Y"] = 34.22, - ["CD"] = 0, - }, - [11] = { - ["X"] = 59, - ["Y"] = 34.83, - ["CD"] = 0, - }, - [12] = { - ["X"] = 60.2, - ["Y"] = 36.57, - ["CD"] = 0, - }, - [13] = { - ["X"] = 61.85, - ["Y"] = 36.99, - ["CD"] = 0, - }, - [14] = { - ["X"] = 64.38, - ["Y"] = 35.48, - ["CD"] = 0, - }, - [15] = { - ["X"] = 66.81, - ["Y"] = 36.14, - ["CD"] = 0, - }, - [16] = { - ["X"] = 67.47, - ["Y"] = 35.67, - ["CD"] = 0, - }, - [17] = { - ["X"] = 69.55, - ["Y"] = 37.38, - ["CD"] = 0, - }, - [18] = { - ["X"] = 69.25, - ["Y"] = 37.57, - ["CD"] = 0, - }, - [19] = { - ["X"] = 68.77, - ["Y"] = 39.03, - ["CD"] = 0, - }, - [20] = { - ["X"] = 70.23, - ["Y"] = 39.53, - ["CD"] = 0, - }, - [21] = { - ["X"] = 72.53, - ["Y"] = 40.98, - ["CD"] = 0, - }, - [22] = { - ["X"] = 77.18, - ["Y"] = 44.12, - ["CD"] = 0, - }, - [23] = { - ["X"] = 77.7, - ["Y"] = 50.51, - ["CD"] = 0, - }, - [24] = { - ["X"] = 77.21, - ["Y"] = 49.87, - ["CD"] = 0, - }, - [25] = { - ["X"] = 77.8, - ["Y"] = 48.72, - ["CD"] = 0, - }, - [26] = { - ["X"] = 77.04, - ["Y"] = 47.98, - ["CD"] = 0, - }, - [27] = { - ["X"] = 74.84, - ["Y"] = 48.86, - ["CD"] = 0, - }, - [28] = { - ["X"] = 74.71, - ["Y"] = 49.87, - ["CD"] = 0, - }, - [29] = { - ["X"] = 77.44, - ["Y"] = 51.67, - ["CD"] = 0, - }, - [30] = { - ["X"] = 78.28, - ["Y"] = 52.79, - ["CD"] = 0, - }, - [31] = { - ["X"] = 76.61, - ["Y"] = 56.1, - ["CD"] = 0, - }, - [32] = { - ["X"] = 78.15, - ["Y"] = 58.13, - ["CD"] = 0, - }, - [33] = { - ["X"] = 77.88, - ["Y"] = 59.33, - ["CD"] = 0, - }, - [34] = { - ["X"] = 78.99, - ["Y"] = 59.38, - ["CD"] = 0, - }, - [35] = { - ["X"] = 78.7, - ["Y"] = 61.8, - ["CD"] = 0, - }, - [36] = { - ["X"] = 80.81, - ["Y"] = 62.57, - ["CD"] = 0, - }, - [37] = { - ["X"] = 80.67, - ["Y"] = 63.24, - ["CD"] = 0, - }, - [38] = { - ["X"] = 81.77, - ["Y"] = 64.74, - ["CD"] = 0, - }, - [39] = { - ["X"] = 81.61, - ["Y"] = 67.37, - ["CD"] = 0, - }, - [40] = { - ["X"] = 80.59, - ["Y"] = 69.27, - ["CD"] = 0, - }, - [41] = { - ["X"] = 54.85, - ["Y"] = 78.82, - ["CD"] = 0, - }, - [42] = { - ["X"] = 54.64, - ["Y"] = 77.06, - ["CD"] = 0, - }, - [43] = { - ["X"] = 54.11, - ["Y"] = 76.34, - ["CD"] = 0, - }, - [44] = { - ["X"] = 52.14, - ["Y"] = 71.88, - ["CD"] = 0, - }, - [45] = { - ["X"] = 49.89, - ["Y"] = 61.13, - ["CD"] = 0, - }, - [46] = { - ["X"] = 49.47, - ["Y"] = 56.45, - ["CD"] = 0, - }, - [47] = { - ["X"] = 49.33, - ["Y"] = 52.48, - ["CD"] = 0, - }, - [48] = { - ["X"] = 49.79, - ["Y"] = 47.5, - ["CD"] = 0, - }, - [49] = { - ["X"] = 78.74, - ["Y"] = 32.35, - ["CD"] = 0, - }, - [50] = { - ["X"] = 76.86, - ["Y"] = 33.06, - ["CD"] = 0, - }, - [51] = { - ["X"] = 74.67, - ["Y"] = 37.87, - ["CD"] = 0, - }, - [52] = { - ["X"] = 74.93, - ["Y"] = 41.16, - ["CD"] = 0, - }, - [53] = { - ["X"] = 70.73, - ["Y"] = 43.54, - ["CD"] = 0, - }, - [54] = { - ["X"] = 70.35, - ["Y"] = 45.76, - ["CD"] = 0, - }, - [55] = { - ["X"] = 37.66, - ["Y"] = 22.47, - ["CD"] = 0, - }, - [56] = { - ["X"] = 36.85, - ["Y"] = 26.28, - ["CD"] = 0, - }, - [57] = { - ["X"] = 33.63, - ["Y"] = 29.7, - ["CD"] = 0, - }, - [58] = { - ["X"] = 31.25, - ["Y"] = 33.5, - ["CD"] = 0, - }, - [59] = { - ["X"] = 29, - ["Y"] = 41.91, - ["CD"] = 0, - }, - [60] = { - ["X"] = 27.51, - ["Y"] = 43.03, - ["CD"] = 0, - }, - [61] = { - ["X"] = 29.19, - ["Y"] = 44.39, - ["CD"] = 0, - }, - [62] = { - ["X"] = 30.22, - ["Y"] = 46.68, - ["CD"] = 0, - }, - [63] = { - ["X"] = 30.56, - ["Y"] = 60.35, - ["CD"] = 0, - }, - [64] = { - ["X"] = 31.8, - ["Y"] = 62.23, - ["CD"] = 0, - }, - [65] = { - ["X"] = 32.24, - ["Y"] = 64.21, - ["CD"] = 0, - }, - [66] = { - ["X"] = 33, - ["Y"] = 66.87, - ["CD"] = 0, - }, - [67] = { - ["X"] = 35.52, - ["Y"] = 69.32, - ["CD"] = 0, - }, - [68] = { - ["X"] = 33.51, - ["Y"] = 70.23, - ["CD"] = 0, - }, - [69] = { - ["X"] = 32.51, - ["Y"] = 67.22, - ["CD"] = 0, - }, - [70] = { - ["X"] = 30.69, - ["Y"] = 67.28, - ["CD"] = 0, - }, -} -aura_env.cooldown = 600 -aura_env.wipeDistance = 50 -aura_env.angle = 0 -aura_env.hyp = 0 -aura_env.GetClosestHerb = function() - aura_env.minID = { - ["X"] = 0, - ["Y"] = 0, - ["D"] = 1000, - ["ID"] = 0, - } - local pX = GetPlayerMapPosition("player") or 0 - local pY = select(2, GetPlayerMapPosition("player")) or 0 - pX, pY = pX * 100, pY * 100 - for k, v in ipairs(aura_env.herbs) do - local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] - if cd == 0 then - local X, Y = pX - hX, pY - hY - local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) - if hyp < aura_env.minID["D"] then - aura_env.minID["X"] = hX - aura_env.minID["Y"] = hY - aura_env.minID["D"] = hyp - aura_env.minID["ID"] = k - end - end - end - return aura_env.minID["ID"] -end +aura_env.herbs = { + [1] = { + ["X"] = 64.49, + ["Y"] = 56.55, + ["CD"] = 0, + }, + [2] = { + ["X"] = 63.79, + ["Y"] = 54.73, + ["CD"] = 0, + }, + [3] = { + ["X"] = 61.99, + ["Y"] = 53.82, + ["CD"] = 0, + }, + [4] = { + ["X"] = 61.48, + ["Y"] = 49.4, + ["CD"] = 0, + }, + [5] = { + ["X"] = 61.46, + ["Y"] = 47.17, + ["CD"] = 0, + }, + [6] = { + ["X"] = 59.23, + ["Y"] = 46.84, + ["CD"] = 0, + }, + [7] = { + ["X"] = 56.86, + ["Y"] = 45.6, + ["CD"] = 0, + }, + [8] = { + ["X"] = 55.78, + ["Y"] = 44.91, + ["CD"] = 0, + }, + [9] = { + ["X"] = 55.06, + ["Y"] = 34.48, + ["CD"] = 0, + }, + [10] = { + ["X"] = 56.92, + ["Y"] = 34.22, + ["CD"] = 0, + }, + [11] = { + ["X"] = 59, + ["Y"] = 34.83, + ["CD"] = 0, + }, + [12] = { + ["X"] = 60.2, + ["Y"] = 36.57, + ["CD"] = 0, + }, + [13] = { + ["X"] = 61.85, + ["Y"] = 36.99, + ["CD"] = 0, + }, + [14] = { + ["X"] = 64.38, + ["Y"] = 35.48, + ["CD"] = 0, + }, + [15] = { + ["X"] = 66.81, + ["Y"] = 36.14, + ["CD"] = 0, + }, + [16] = { + ["X"] = 67.47, + ["Y"] = 35.67, + ["CD"] = 0, + }, + [17] = { + ["X"] = 69.55, + ["Y"] = 37.38, + ["CD"] = 0, + }, + [18] = { + ["X"] = 69.25, + ["Y"] = 37.57, + ["CD"] = 0, + }, + [19] = { + ["X"] = 68.77, + ["Y"] = 39.03, + ["CD"] = 0, + }, + [20] = { + ["X"] = 70.23, + ["Y"] = 39.53, + ["CD"] = 0, + }, + [21] = { + ["X"] = 72.53, + ["Y"] = 40.98, + ["CD"] = 0, + }, + [22] = { + ["X"] = 77.18, + ["Y"] = 44.12, + ["CD"] = 0, + }, + [23] = { + ["X"] = 77.7, + ["Y"] = 50.51, + ["CD"] = 0, + }, + [24] = { + ["X"] = 77.21, + ["Y"] = 49.87, + ["CD"] = 0, + }, + [25] = { + ["X"] = 77.8, + ["Y"] = 48.72, + ["CD"] = 0, + }, + [26] = { + ["X"] = 77.04, + ["Y"] = 47.98, + ["CD"] = 0, + }, + [27] = { + ["X"] = 74.84, + ["Y"] = 48.86, + ["CD"] = 0, + }, + [28] = { + ["X"] = 74.71, + ["Y"] = 49.87, + ["CD"] = 0, + }, + [29] = { + ["X"] = 77.44, + ["Y"] = 51.67, + ["CD"] = 0, + }, + [30] = { + ["X"] = 78.28, + ["Y"] = 52.79, + ["CD"] = 0, + }, + [31] = { + ["X"] = 76.61, + ["Y"] = 56.1, + ["CD"] = 0, + }, + [32] = { + ["X"] = 78.15, + ["Y"] = 58.13, + ["CD"] = 0, + }, + [33] = { + ["X"] = 77.88, + ["Y"] = 59.33, + ["CD"] = 0, + }, + [34] = { + ["X"] = 78.99, + ["Y"] = 59.38, + ["CD"] = 0, + }, + [35] = { + ["X"] = 78.7, + ["Y"] = 61.8, + ["CD"] = 0, + }, + [36] = { + ["X"] = 80.81, + ["Y"] = 62.57, + ["CD"] = 0, + }, + [37] = { + ["X"] = 80.67, + ["Y"] = 63.24, + ["CD"] = 0, + }, + [38] = { + ["X"] = 81.77, + ["Y"] = 64.74, + ["CD"] = 0, + }, + [39] = { + ["X"] = 81.61, + ["Y"] = 67.37, + ["CD"] = 0, + }, + [40] = { + ["X"] = 80.59, + ["Y"] = 69.27, + ["CD"] = 0, + }, + [41] = { + ["X"] = 54.85, + ["Y"] = 78.82, + ["CD"] = 0, + }, + [42] = { + ["X"] = 54.64, + ["Y"] = 77.06, + ["CD"] = 0, + }, + [43] = { + ["X"] = 54.11, + ["Y"] = 76.34, + ["CD"] = 0, + }, + [44] = { + ["X"] = 52.14, + ["Y"] = 71.88, + ["CD"] = 0, + }, + [45] = { + ["X"] = 49.89, + ["Y"] = 61.13, + ["CD"] = 0, + }, + [46] = { + ["X"] = 49.47, + ["Y"] = 56.45, + ["CD"] = 0, + }, + [47] = { + ["X"] = 49.33, + ["Y"] = 52.48, + ["CD"] = 0, + }, + [48] = { + ["X"] = 49.79, + ["Y"] = 47.5, + ["CD"] = 0, + }, + [49] = { + ["X"] = 78.74, + ["Y"] = 32.35, + ["CD"] = 0, + }, + [50] = { + ["X"] = 76.86, + ["Y"] = 33.06, + ["CD"] = 0, + }, + [51] = { + ["X"] = 74.67, + ["Y"] = 37.87, + ["CD"] = 0, + }, + [52] = { + ["X"] = 74.93, + ["Y"] = 41.16, + ["CD"] = 0, + }, + [53] = { + ["X"] = 70.73, + ["Y"] = 43.54, + ["CD"] = 0, + }, + [54] = { + ["X"] = 70.35, + ["Y"] = 45.76, + ["CD"] = 0, + }, + [55] = { + ["X"] = 37.66, + ["Y"] = 22.47, + ["CD"] = 0, + }, + [56] = { + ["X"] = 36.85, + ["Y"] = 26.28, + ["CD"] = 0, + }, + [57] = { + ["X"] = 33.63, + ["Y"] = 29.7, + ["CD"] = 0, + }, + [58] = { + ["X"] = 31.25, + ["Y"] = 33.5, + ["CD"] = 0, + }, + [59] = { + ["X"] = 29, + ["Y"] = 41.91, + ["CD"] = 0, + }, + [60] = { + ["X"] = 27.51, + ["Y"] = 43.03, + ["CD"] = 0, + }, + [61] = { + ["X"] = 29.19, + ["Y"] = 44.39, + ["CD"] = 0, + }, + [62] = { + ["X"] = 30.22, + ["Y"] = 46.68, + ["CD"] = 0, + }, + [63] = { + ["X"] = 30.56, + ["Y"] = 60.35, + ["CD"] = 0, + }, + [64] = { + ["X"] = 31.8, + ["Y"] = 62.23, + ["CD"] = 0, + }, + [65] = { + ["X"] = 32.24, + ["Y"] = 64.21, + ["CD"] = 0, + }, + [66] = { + ["X"] = 33, + ["Y"] = 66.87, + ["CD"] = 0, + }, + [67] = { + ["X"] = 35.52, + ["Y"] = 69.32, + ["CD"] = 0, + }, + [68] = { + ["X"] = 33.51, + ["Y"] = 70.23, + ["CD"] = 0, + }, + [69] = { + ["X"] = 32.51, + ["Y"] = 67.22, + ["CD"] = 0, + }, + [70] = { + ["X"] = 30.69, + ["Y"] = 67.28, + ["CD"] = 0, + }, +} +aura_env.cooldown = 600 +aura_env.wipeDistance = 50 +aura_env.angle = 0 +aura_env.hyp = 0 +aura_env.GetClosestHerb = function() + aura_env.minID = { + ["X"] = 0, + ["Y"] = 0, + ["D"] = 1000, + ["ID"] = 0, + } + local pX = GetPlayerMapPosition("player") or 0 + local pY = select(2, GetPlayerMapPosition("player")) or 0 + pX, pY = pX * 100, pY * 100 + for k, v in ipairs(aura_env.herbs) do + local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] + if cd == 0 then + local X, Y = pX - hX, pY - hY + local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) + if hyp < aura_env.minID["D"] then + aura_env.minID["X"] = hX + aura_env.minID["Y"] = hY + aura_env.minID["D"] = hyp + aura_env.minID["ID"] = k + end + end + end + return aura_env.minID["ID"] +end diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Misc/Anna dogs.lua b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Misc/Anna dogs.lua similarity index 93% rename from Complete Projects/Legion/Herb Sniffer/Herb Arrays/Misc/Anna dogs.lua rename to WeakAuras/Projects/Herb Sniffer/Herb Arrays/Misc/Anna dogs.lua index d0d025f..042e4aa 100644 --- a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Misc/Anna dogs.lua +++ b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Misc/Anna dogs.lua @@ -1,366 +1,366 @@ -aura_env.herbs = { - [1] = { - ["X"] = 55.21, - ["Y"] = 29.38, - ["CD"] = 0, - }, - [2] = { - ["X"] = 56.38, - ["Y"] = 30.8, - ["CD"] = 0, - }, - [3] = { - ["X"] = 54.25, - ["Y"] = 31.3, - ["CD"] = 0, - }, - [4] = { - ["X"] = 56.5, - ["Y"] = 32.12, - ["CD"] = 0, - }, - [5] = { - ["X"] = 58.44, - ["Y"] = 35.06, - ["CD"] = 0, - }, - [6] = { - ["X"] = 53.05, - ["Y"] = 37.22, - ["CD"] = 0, - }, - [7] = { - ["X"] = 52.92, - ["Y"] = 37.71, - ["CD"] = 0, - }, - [8] = { - ["X"] = 56.85, - ["Y"] = 37.89, - ["CD"] = 0, - }, - [9] = { - ["X"] = 59.32, - ["Y"] = 39.96, - ["CD"] = 0, - }, - [10] = { - ["X"] = 60.24, - ["Y"] = 43.26, - ["CD"] = 0, - }, - [11] = { - ["X"] = 62.38, - ["Y"] = 44.15, - ["CD"] = 0, - }, - [12] = { - ["X"] = 60.31, - ["Y"] = 44.75, - ["CD"] = 0, - }, - [13] = { - ["X"] = 62.63, - ["Y"] = 45, - ["CD"] = 0, - }, - [14] = { - ["X"] = 58.79, - ["Y"] = 66.11, - ["CD"] = 0, - }, - [15] = { - ["X"] = 58.07, - ["Y"] = 67.24, - ["CD"] = 0, - }, - [16] = { - ["X"] = 58.8, - ["Y"] = 68.04, - ["CD"] = 0, - }, - [17] = { - ["X"] = 56.18, - ["Y"] = 68.4, - ["CD"] = 0, - }, - [18] = { - ["X"] = 56.89, - ["Y"] = 68.83, - ["CD"] = 0, - }, - [19] = { - ["X"] = 55.99, - ["Y"] = 68.92, - ["CD"] = 0, - }, - [20] = { - ["X"] = 54.79, - ["Y"] = 69.16, - ["CD"] = 0, - }, - [21] = { - ["X"] = 78.12, - ["Y"] = 69.46, - ["CD"] = 0, - }, - [22] = { - ["X"] = 55.23, - ["Y"] = 69.82, - ["CD"] = 0, - }, - [23] = { - ["X"] = 56.47, - ["Y"] = 69.86, - ["CD"] = 0, - }, - [24] = { - ["X"] = 78.49, - ["Y"] = 70, - ["CD"] = 0, - }, - [25] = { - ["X"] = 57.49, - ["Y"] = 70.1, - ["CD"] = 0, - }, - [26] = { - ["X"] = 62.05, - ["Y"] = 70.16, - ["CD"] = 0, - }, - [27] = { - ["X"] = 53.23, - ["Y"] = 70.74, - ["CD"] = 0, - }, - [28] = { - ["X"] = 55.72, - ["Y"] = 70.85, - ["CD"] = 0, - }, - [29] = { - ["X"] = 60.45, - ["Y"] = 70.99, - ["CD"] = 0, - }, - [30] = { - ["X"] = 78.71, - ["Y"] = 71.05, - ["CD"] = 0, - }, - [31] = { - ["X"] = 59.93, - ["Y"] = 71.54, - ["CD"] = 0, - }, - [32] = { - ["X"] = 60.96, - ["Y"] = 71.64, - ["CD"] = 0, - }, - [33] = { - ["X"] = 78.05, - ["Y"] = 71.69, - ["CD"] = 0, - }, - [34] = { - ["X"] = 53.97, - ["Y"] = 71.7, - ["CD"] = 0, - }, - [35] = { - ["X"] = 58.78, - ["Y"] = 71.92, - ["CD"] = 0, - }, - [36] = { - ["X"] = 59.19, - ["Y"] = 72.7, - ["CD"] = 0, - }, - [37] = { - ["X"] = 57.1, - ["Y"] = 72.76, - ["CD"] = 0, - }, - [38] = { - ["X"] = 63.61, - ["Y"] = 73.32, - ["CD"] = 0, - }, - [39] = { - ["X"] = 57.6, - ["Y"] = 73.39, - ["CD"] = 0, - }, - [40] = { - ["X"] = 55.82, - ["Y"] = 73.97, - ["CD"] = 0, - }, - [41] = { - ["X"] = 56.83, - ["Y"] = 74.09, - ["CD"] = 0, - }, - [42] = { - ["X"] = 59.48, - ["Y"] = 75.05, - ["CD"] = 0, - }, - [43] = { - ["X"] = 57.28, - ["Y"] = 75.33, - ["CD"] = 0, - }, - [44] = { - ["X"] = 56.2, - ["Y"] = 75.37, - ["CD"] = 0, - }, - [45] = { - ["X"] = 65.04, - ["Y"] = 75.73, - ["CD"] = 0, - }, - [46] = { - ["X"] = 57.1, - ["Y"] = 75.83, - ["CD"] = 0, - }, - [47] = { - ["X"] = 64.03, - ["Y"] = 76.03, - ["CD"] = 0, - }, - [48] = { - ["X"] = 65.94, - ["Y"] = 76.67, - ["CD"] = 0, - }, - [49] = { - ["X"] = 60.04, - ["Y"] = 76.75, - ["CD"] = 0, - }, - [50] = { - ["X"] = 51.69, - ["Y"] = 77.08, - ["CD"] = 0, - }, - [51] = { - ["X"] = 66.38, - ["Y"] = 77.13, - ["CD"] = 0, - }, - [52] = { - ["X"] = 61.34, - ["Y"] = 77.69, - ["CD"] = 0, - }, - [53] = { - ["X"] = 56.96, - ["Y"] = 77.71, - ["CD"] = 0, - }, - [54] = { - ["X"] = 63.81, - ["Y"] = 77.73, - ["CD"] = 0, - }, - [55] = { - ["X"] = 65.79, - ["Y"] = 77.78, - ["CD"] = 0, - }, - [56] = { - ["X"] = 66.91, - ["Y"] = 78.43, - ["CD"] = 0, - }, - [57] = { - ["X"] = 64.63, - ["Y"] = 79.29, - ["CD"] = 0, - }, - [58] = { - ["X"] = 63.47, - ["Y"] = 79.63, - ["CD"] = 0, - }, - [59] = { - ["X"] = 61.37, - ["Y"] = 79.81, - ["CD"] = 0, - }, - [60] = { - ["X"] = 60.47, - ["Y"] = 80.35, - ["CD"] = 0, - }, - [61] = { - ["X"] = 62.7, - ["Y"] = 80.54, - ["CD"] = 0, - }, - [62] = { - ["X"] = 70.7, - ["Y"] = 80.98, - ["CD"] = 0, - }, - [63] = { - ["X"] = 60.52, - ["Y"] = 81.06, - ["CD"] = 0, - }, - [64] = { - ["X"] = 72.19, - ["Y"] = 82.3, - ["CD"] = 0, - }, - [65] = { - ["X"] = 71.35, - ["Y"] = 82.53, - ["CD"] = 0, - }, - [66] = { - ["X"] = 67.39, - ["Y"] = 83.15, - ["CD"] = 0, - }, - [67] = { - ["X"] = 71.42, - ["Y"] = 84.27, - ["CD"] = 0, - }, -} -aura_env.cooldown = 92 -aura_env.wipeDistance = 15 -aura_env.angle = 0 -aura_env.hyp = 0 -aura_env.GetClosestHerb = function() - aura_env.minID = { - ["X"] = 0, - ["Y"] = 0, - ["D"] = 1000, - ["ID"] = 0, - } - local pX = GetPlayerMapPosition("player") or 0 - local pY = select(2, GetPlayerMapPosition("player")) or 0 - pX, pY = pX * 100, pY * 100 - for k, v in ipairs(aura_env.herbs) do - local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] - if cd == 0 then - local X, Y = pX - hX, pY - hY - local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) - if hyp < aura_env.minID["D"] then - aura_env.minID["X"] = hX - aura_env.minID["Y"] = hY - aura_env.minID["D"] = hyp - aura_env.minID["ID"] = k - end - end - end - return aura_env.minID["ID"] -end +aura_env.herbs = { + [1] = { + ["X"] = 55.21, + ["Y"] = 29.38, + ["CD"] = 0, + }, + [2] = { + ["X"] = 56.38, + ["Y"] = 30.8, + ["CD"] = 0, + }, + [3] = { + ["X"] = 54.25, + ["Y"] = 31.3, + ["CD"] = 0, + }, + [4] = { + ["X"] = 56.5, + ["Y"] = 32.12, + ["CD"] = 0, + }, + [5] = { + ["X"] = 58.44, + ["Y"] = 35.06, + ["CD"] = 0, + }, + [6] = { + ["X"] = 53.05, + ["Y"] = 37.22, + ["CD"] = 0, + }, + [7] = { + ["X"] = 52.92, + ["Y"] = 37.71, + ["CD"] = 0, + }, + [8] = { + ["X"] = 56.85, + ["Y"] = 37.89, + ["CD"] = 0, + }, + [9] = { + ["X"] = 59.32, + ["Y"] = 39.96, + ["CD"] = 0, + }, + [10] = { + ["X"] = 60.24, + ["Y"] = 43.26, + ["CD"] = 0, + }, + [11] = { + ["X"] = 62.38, + ["Y"] = 44.15, + ["CD"] = 0, + }, + [12] = { + ["X"] = 60.31, + ["Y"] = 44.75, + ["CD"] = 0, + }, + [13] = { + ["X"] = 62.63, + ["Y"] = 45, + ["CD"] = 0, + }, + [14] = { + ["X"] = 58.79, + ["Y"] = 66.11, + ["CD"] = 0, + }, + [15] = { + ["X"] = 58.07, + ["Y"] = 67.24, + ["CD"] = 0, + }, + [16] = { + ["X"] = 58.8, + ["Y"] = 68.04, + ["CD"] = 0, + }, + [17] = { + ["X"] = 56.18, + ["Y"] = 68.4, + ["CD"] = 0, + }, + [18] = { + ["X"] = 56.89, + ["Y"] = 68.83, + ["CD"] = 0, + }, + [19] = { + ["X"] = 55.99, + ["Y"] = 68.92, + ["CD"] = 0, + }, + [20] = { + ["X"] = 54.79, + ["Y"] = 69.16, + ["CD"] = 0, + }, + [21] = { + ["X"] = 78.12, + ["Y"] = 69.46, + ["CD"] = 0, + }, + [22] = { + ["X"] = 55.23, + ["Y"] = 69.82, + ["CD"] = 0, + }, + [23] = { + ["X"] = 56.47, + ["Y"] = 69.86, + ["CD"] = 0, + }, + [24] = { + ["X"] = 78.49, + ["Y"] = 70, + ["CD"] = 0, + }, + [25] = { + ["X"] = 57.49, + ["Y"] = 70.1, + ["CD"] = 0, + }, + [26] = { + ["X"] = 62.05, + ["Y"] = 70.16, + ["CD"] = 0, + }, + [27] = { + ["X"] = 53.23, + ["Y"] = 70.74, + ["CD"] = 0, + }, + [28] = { + ["X"] = 55.72, + ["Y"] = 70.85, + ["CD"] = 0, + }, + [29] = { + ["X"] = 60.45, + ["Y"] = 70.99, + ["CD"] = 0, + }, + [30] = { + ["X"] = 78.71, + ["Y"] = 71.05, + ["CD"] = 0, + }, + [31] = { + ["X"] = 59.93, + ["Y"] = 71.54, + ["CD"] = 0, + }, + [32] = { + ["X"] = 60.96, + ["Y"] = 71.64, + ["CD"] = 0, + }, + [33] = { + ["X"] = 78.05, + ["Y"] = 71.69, + ["CD"] = 0, + }, + [34] = { + ["X"] = 53.97, + ["Y"] = 71.7, + ["CD"] = 0, + }, + [35] = { + ["X"] = 58.78, + ["Y"] = 71.92, + ["CD"] = 0, + }, + [36] = { + ["X"] = 59.19, + ["Y"] = 72.7, + ["CD"] = 0, + }, + [37] = { + ["X"] = 57.1, + ["Y"] = 72.76, + ["CD"] = 0, + }, + [38] = { + ["X"] = 63.61, + ["Y"] = 73.32, + ["CD"] = 0, + }, + [39] = { + ["X"] = 57.6, + ["Y"] = 73.39, + ["CD"] = 0, + }, + [40] = { + ["X"] = 55.82, + ["Y"] = 73.97, + ["CD"] = 0, + }, + [41] = { + ["X"] = 56.83, + ["Y"] = 74.09, + ["CD"] = 0, + }, + [42] = { + ["X"] = 59.48, + ["Y"] = 75.05, + ["CD"] = 0, + }, + [43] = { + ["X"] = 57.28, + ["Y"] = 75.33, + ["CD"] = 0, + }, + [44] = { + ["X"] = 56.2, + ["Y"] = 75.37, + ["CD"] = 0, + }, + [45] = { + ["X"] = 65.04, + ["Y"] = 75.73, + ["CD"] = 0, + }, + [46] = { + ["X"] = 57.1, + ["Y"] = 75.83, + ["CD"] = 0, + }, + [47] = { + ["X"] = 64.03, + ["Y"] = 76.03, + ["CD"] = 0, + }, + [48] = { + ["X"] = 65.94, + ["Y"] = 76.67, + ["CD"] = 0, + }, + [49] = { + ["X"] = 60.04, + ["Y"] = 76.75, + ["CD"] = 0, + }, + [50] = { + ["X"] = 51.69, + ["Y"] = 77.08, + ["CD"] = 0, + }, + [51] = { + ["X"] = 66.38, + ["Y"] = 77.13, + ["CD"] = 0, + }, + [52] = { + ["X"] = 61.34, + ["Y"] = 77.69, + ["CD"] = 0, + }, + [53] = { + ["X"] = 56.96, + ["Y"] = 77.71, + ["CD"] = 0, + }, + [54] = { + ["X"] = 63.81, + ["Y"] = 77.73, + ["CD"] = 0, + }, + [55] = { + ["X"] = 65.79, + ["Y"] = 77.78, + ["CD"] = 0, + }, + [56] = { + ["X"] = 66.91, + ["Y"] = 78.43, + ["CD"] = 0, + }, + [57] = { + ["X"] = 64.63, + ["Y"] = 79.29, + ["CD"] = 0, + }, + [58] = { + ["X"] = 63.47, + ["Y"] = 79.63, + ["CD"] = 0, + }, + [59] = { + ["X"] = 61.37, + ["Y"] = 79.81, + ["CD"] = 0, + }, + [60] = { + ["X"] = 60.47, + ["Y"] = 80.35, + ["CD"] = 0, + }, + [61] = { + ["X"] = 62.7, + ["Y"] = 80.54, + ["CD"] = 0, + }, + [62] = { + ["X"] = 70.7, + ["Y"] = 80.98, + ["CD"] = 0, + }, + [63] = { + ["X"] = 60.52, + ["Y"] = 81.06, + ["CD"] = 0, + }, + [64] = { + ["X"] = 72.19, + ["Y"] = 82.3, + ["CD"] = 0, + }, + [65] = { + ["X"] = 71.35, + ["Y"] = 82.53, + ["CD"] = 0, + }, + [66] = { + ["X"] = 67.39, + ["Y"] = 83.15, + ["CD"] = 0, + }, + [67] = { + ["X"] = 71.42, + ["Y"] = 84.27, + ["CD"] = 0, + }, +} +aura_env.cooldown = 92 +aura_env.wipeDistance = 15 +aura_env.angle = 0 +aura_env.hyp = 0 +aura_env.GetClosestHerb = function() + aura_env.minID = { + ["X"] = 0, + ["Y"] = 0, + ["D"] = 1000, + ["ID"] = 0, + } + local pX = GetPlayerMapPosition("player") or 0 + local pY = select(2, GetPlayerMapPosition("player")) or 0 + pX, pY = pX * 100, pY * 100 + for k, v in ipairs(aura_env.herbs) do + local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] + if cd == 0 then + local X, Y = pX - hX, pY - hY + local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) + if hyp < aura_env.minID["D"] then + aura_env.minID["X"] = hX + aura_env.minID["Y"] = hY + aura_env.minID["D"] = hyp + aura_env.minID["ID"] = k + end + end + end + return aura_env.minID["ID"] +end diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Noblegarden/Durotar.lua b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Noblegarden/Durotar.lua similarity index 93% rename from Complete Projects/Legion/Herb Sniffer/Herb Arrays/Noblegarden/Durotar.lua rename to WeakAuras/Projects/Herb Sniffer/Herb Arrays/Noblegarden/Durotar.lua index 3c88128..7660d1b 100644 --- a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Noblegarden/Durotar.lua +++ b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Noblegarden/Durotar.lua @@ -1,131 +1,131 @@ -aura_env.herbs = { - [1] = { - ["X"] = 51.58, - ["Y"] = 43.53, - ["CD"] = 0, - }, - [2] = { - ["X"] = 51.71, - ["Y"] = 43.97, - ["CD"] = 0, - }, - [3] = { - ["X"] = 52.19, - ["Y"] = 43.75, - ["CD"] = 0, - }, - [4] = { - ["X"] = 53.1, - ["Y"] = 43.07, - ["CD"] = 0, - }, - [5] = { - ["X"] = 53.56, - ["Y"] = 43.28, - ["CD"] = 0, - }, - [6] = { - ["X"] = 54.06, - ["Y"] = 43.34, - ["CD"] = 0, - }, - [7] = { - ["X"] = 54.63, - ["Y"] = 43.33, - ["CD"] = 0, - }, - [8] = { - ["X"] = 54.84, - ["Y"] = 42.4, - ["CD"] = 0, - }, - [9] = { - ["X"] = 54.89, - ["Y"] = 41.74, - ["CD"] = 0, - }, - [10] = { - ["X"] = 54.53, - ["Y"] = 41.47, - ["CD"] = 0, - }, - [11] = { - ["X"] = 54.27, - ["Y"] = 41.65, - ["CD"] = 0, - }, - [12] = { - ["X"] = 53.86, - ["Y"] = 41.66, - ["CD"] = 0, - }, - [13] = { - ["X"] = 53.74, - ["Y"] = 40.67, - ["CD"] = 0, - }, - [14] = { - ["X"] = 52.95, - ["Y"] = 40.72, - ["CD"] = 0, - }, - [15] = { - ["X"] = 52.78, - ["Y"] = 40.24, - ["CD"] = 0, - }, - [16] = { - ["X"] = 47.99, - ["Y"] = 45.57, - ["CD"] = 0, - }, - [17] = { - ["X"] = 47.57, - ["Y"] = 45.29, - ["CD"] = 0, - }, - [18] = { - ["X"] = 47.57, - ["Y"] = 45.38, - ["CD"] = 0, - }, - [19] = { - ["X"] = 48.18, - ["Y"] = 46.31, - ["CD"] = 0, - }, - [20] = { - ["X"] = 47.05, - ["Y"] = 46.63, - ["CD"] = 0, - }, -} -aura_env.cooldown = 120 -aura_env.wipeDistance = 15 -aura_env.angle = 0 -aura_env.hyp = 0 -aura_env.GetClosestHerb = function() - aura_env.minID = { - ["X"] = 0, - ["Y"] = 0, - ["D"] = 1000, - ["ID"] = 0, - } - local pX = GetPlayerMapPosition("player") or 0 - local pY = select(2, GetPlayerMapPosition("player")) or 0 - pX, pY = pX * 100, pY * 100 - for k, v in ipairs(aura_env.herbs) do - local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] - if cd == 0 then - local X, Y = pX - hX, pY - hY - local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) - if hyp < aura_env.minID["D"] then - aura_env.minID["X"] = hX - aura_env.minID["Y"] = hY - aura_env.minID["D"] = hyp - aura_env.minID["ID"] = k - end - end - end - return aura_env.minID["ID"] -end +aura_env.herbs = { + [1] = { + ["X"] = 51.58, + ["Y"] = 43.53, + ["CD"] = 0, + }, + [2] = { + ["X"] = 51.71, + ["Y"] = 43.97, + ["CD"] = 0, + }, + [3] = { + ["X"] = 52.19, + ["Y"] = 43.75, + ["CD"] = 0, + }, + [4] = { + ["X"] = 53.1, + ["Y"] = 43.07, + ["CD"] = 0, + }, + [5] = { + ["X"] = 53.56, + ["Y"] = 43.28, + ["CD"] = 0, + }, + [6] = { + ["X"] = 54.06, + ["Y"] = 43.34, + ["CD"] = 0, + }, + [7] = { + ["X"] = 54.63, + ["Y"] = 43.33, + ["CD"] = 0, + }, + [8] = { + ["X"] = 54.84, + ["Y"] = 42.4, + ["CD"] = 0, + }, + [9] = { + ["X"] = 54.89, + ["Y"] = 41.74, + ["CD"] = 0, + }, + [10] = { + ["X"] = 54.53, + ["Y"] = 41.47, + ["CD"] = 0, + }, + [11] = { + ["X"] = 54.27, + ["Y"] = 41.65, + ["CD"] = 0, + }, + [12] = { + ["X"] = 53.86, + ["Y"] = 41.66, + ["CD"] = 0, + }, + [13] = { + ["X"] = 53.74, + ["Y"] = 40.67, + ["CD"] = 0, + }, + [14] = { + ["X"] = 52.95, + ["Y"] = 40.72, + ["CD"] = 0, + }, + [15] = { + ["X"] = 52.78, + ["Y"] = 40.24, + ["CD"] = 0, + }, + [16] = { + ["X"] = 47.99, + ["Y"] = 45.57, + ["CD"] = 0, + }, + [17] = { + ["X"] = 47.57, + ["Y"] = 45.29, + ["CD"] = 0, + }, + [18] = { + ["X"] = 47.57, + ["Y"] = 45.38, + ["CD"] = 0, + }, + [19] = { + ["X"] = 48.18, + ["Y"] = 46.31, + ["CD"] = 0, + }, + [20] = { + ["X"] = 47.05, + ["Y"] = 46.63, + ["CD"] = 0, + }, +} +aura_env.cooldown = 120 +aura_env.wipeDistance = 15 +aura_env.angle = 0 +aura_env.hyp = 0 +aura_env.GetClosestHerb = function() + aura_env.minID = { + ["X"] = 0, + ["Y"] = 0, + ["D"] = 1000, + ["ID"] = 0, + } + local pX = GetPlayerMapPosition("player") or 0 + local pY = select(2, GetPlayerMapPosition("player")) or 0 + pX, pY = pX * 100, pY * 100 + for k, v in ipairs(aura_env.herbs) do + local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] + if cd == 0 then + local X, Y = pX - hX, pY - hY + local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) + if hyp < aura_env.minID["D"] then + aura_env.minID["X"] = hX + aura_env.minID["Y"] = hY + aura_env.minID["D"] = hyp + aura_env.minID["ID"] = k + end + end + end + return aura_env.minID["ID"] +end diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Noblegarden/Eversong Woods.lua b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Noblegarden/Eversong Woods.lua similarity index 93% rename from Complete Projects/Legion/Herb Sniffer/Herb Arrays/Noblegarden/Eversong Woods.lua rename to WeakAuras/Projects/Herb Sniffer/Herb Arrays/Noblegarden/Eversong Woods.lua index 733f916..2d97cc0 100644 --- a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Noblegarden/Eversong Woods.lua +++ b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Noblegarden/Eversong Woods.lua @@ -1,131 +1,131 @@ -aura_env.herbs = { - [1] = { - ["X"] = 47.45, - ["Y"] = 45.25, - ["CD"] = 0, - }, - [2] = { - ["X"] = 47.1, - ["Y"] = 45.39, - ["CD"] = 0, - }, - [3] = { - ["X"] = 46.85, - ["Y"] = 45.64, - ["CD"] = 0, - }, - [4] = { - ["X"] = 47.26, - ["Y"] = 46.21, - ["CD"] = 0, - }, - [5] = { - ["X"] = 46.37, - ["Y"] = 46.44, - ["CD"] = 0, - }, - [6] = { - ["X"] = 46.23, - ["Y"] = 47.2, - ["CD"] = 0, - }, - [7] = { - ["X"] = 46.35, - ["Y"] = 48, - ["CD"] = 0, - }, - [8] = { - ["X"] = 46.92, - ["Y"] = 48.29, - ["CD"] = 0, - }, - [9] = { - ["X"] = 47.02, - ["Y"] = 47.71, - ["CD"] = 0, - }, - [10] = { - ["X"] = 47.28, - ["Y"] = 47.65, - ["CD"] = 0, - }, - [11] = { - ["X"] = 47.45, - ["Y"] = 47.47, - ["CD"] = 0, - }, - [12] = { - ["X"] = 47.55, - ["Y"] = 47.42, - ["CD"] = 0, - }, - [13] = { - ["X"] = 47.84, - ["Y"] = 46.89, - ["CD"] = 0, - }, - [14] = { - ["X"] = 48.13, - ["Y"] = 46.47, - ["CD"] = 0, - }, - [15] = { - ["X"] = 48.24, - ["Y"] = 45.63, - ["CD"] = 0, - }, - [16] = { - ["X"] = 47.99, - ["Y"] = 45.57, - ["CD"] = 0, - }, - [17] = { - ["X"] = 47.57, - ["Y"] = 45.29, - ["CD"] = 0, - }, - [18] = { - ["X"] = 47.57, - ["Y"] = 45.38, - ["CD"] = 0, - }, - [19] = { - ["X"] = 48.18, - ["Y"] = 46.31, - ["CD"] = 0, - }, - [20] = { - ["X"] = 47.05, - ["Y"] = 46.63, - ["CD"] = 0, - }, -} -aura_env.cooldown = 120 -aura_env.wipeDistance = 15 -aura_env.angle = 0 -aura_env.hyp = 0 -aura_env.GetClosestHerb = function() - aura_env.minID = { - ["X"] = 0, - ["Y"] = 0, - ["D"] = 1000, - ["ID"] = 0, - } - local pX = GetPlayerMapPosition("player") or 0 - local pY = select(2, GetPlayerMapPosition("player")) or 0 - pX, pY = pX * 100, pY * 100 - for k, v in ipairs(aura_env.herbs) do - local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] - if cd == 0 then - local X, Y = pX - hX, pY - hY - local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) - if hyp < aura_env.minID["D"] then - aura_env.minID["X"] = hX - aura_env.minID["Y"] = hY - aura_env.minID["D"] = hyp - aura_env.minID["ID"] = k - end - end - end - return aura_env.minID["ID"] -end +aura_env.herbs = { + [1] = { + ["X"] = 47.45, + ["Y"] = 45.25, + ["CD"] = 0, + }, + [2] = { + ["X"] = 47.1, + ["Y"] = 45.39, + ["CD"] = 0, + }, + [3] = { + ["X"] = 46.85, + ["Y"] = 45.64, + ["CD"] = 0, + }, + [4] = { + ["X"] = 47.26, + ["Y"] = 46.21, + ["CD"] = 0, + }, + [5] = { + ["X"] = 46.37, + ["Y"] = 46.44, + ["CD"] = 0, + }, + [6] = { + ["X"] = 46.23, + ["Y"] = 47.2, + ["CD"] = 0, + }, + [7] = { + ["X"] = 46.35, + ["Y"] = 48, + ["CD"] = 0, + }, + [8] = { + ["X"] = 46.92, + ["Y"] = 48.29, + ["CD"] = 0, + }, + [9] = { + ["X"] = 47.02, + ["Y"] = 47.71, + ["CD"] = 0, + }, + [10] = { + ["X"] = 47.28, + ["Y"] = 47.65, + ["CD"] = 0, + }, + [11] = { + ["X"] = 47.45, + ["Y"] = 47.47, + ["CD"] = 0, + }, + [12] = { + ["X"] = 47.55, + ["Y"] = 47.42, + ["CD"] = 0, + }, + [13] = { + ["X"] = 47.84, + ["Y"] = 46.89, + ["CD"] = 0, + }, + [14] = { + ["X"] = 48.13, + ["Y"] = 46.47, + ["CD"] = 0, + }, + [15] = { + ["X"] = 48.24, + ["Y"] = 45.63, + ["CD"] = 0, + }, + [16] = { + ["X"] = 47.99, + ["Y"] = 45.57, + ["CD"] = 0, + }, + [17] = { + ["X"] = 47.57, + ["Y"] = 45.29, + ["CD"] = 0, + }, + [18] = { + ["X"] = 47.57, + ["Y"] = 45.38, + ["CD"] = 0, + }, + [19] = { + ["X"] = 48.18, + ["Y"] = 46.31, + ["CD"] = 0, + }, + [20] = { + ["X"] = 47.05, + ["Y"] = 46.63, + ["CD"] = 0, + }, +} +aura_env.cooldown = 120 +aura_env.wipeDistance = 15 +aura_env.angle = 0 +aura_env.hyp = 0 +aura_env.GetClosestHerb = function() + aura_env.minID = { + ["X"] = 0, + ["Y"] = 0, + ["D"] = 1000, + ["ID"] = 0, + } + local pX = GetPlayerMapPosition("player") or 0 + local pY = select(2, GetPlayerMapPosition("player")) or 0 + pX, pY = pX * 100, pY * 100 + for k, v in ipairs(aura_env.herbs) do + local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] + if cd == 0 then + local X, Y = pX - hX, pY - hY + local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) + if hyp < aura_env.minID["D"] then + aura_env.minID["X"] = hX + aura_env.minID["Y"] = hY + aura_env.minID["D"] = hyp + aura_env.minID["ID"] = k + end + end + end + return aura_env.minID["ID"] +end diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Noblegarden/Mulgore.lua b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Noblegarden/Mulgore.lua similarity index 93% rename from Complete Projects/Legion/Herb Sniffer/Herb Arrays/Noblegarden/Mulgore.lua rename to WeakAuras/Projects/Herb Sniffer/Herb Arrays/Noblegarden/Mulgore.lua index 34afcf8..1f12505 100644 --- a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Noblegarden/Mulgore.lua +++ b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Noblegarden/Mulgore.lua @@ -1,131 +1,131 @@ -aura_env.herbs = { - [1] = { - ["X"] = 47.58, - ["Y"] = 61.98, - ["CD"] = 0, - }, - [2] = { - ["X"] = 47.75, - ["Y"] = 61.61, - ["CD"] = 0, - }, - [3] = { - ["X"] = 49.39, - ["Y"] = 61.5, - ["CD"] = 0, - }, - [4] = { - ["X"] = 48.9, - ["Y"] = 60.63, - ["CD"] = 0, - }, - [5] = { - ["X"] = 49.1, - ["Y"] = 59.96, - ["CD"] = 0, - }, - [6] = { - ["X"] = 49.51, - ["Y"] = 60.13, - ["CD"] = 0, - }, - [7] = { - ["X"] = 49.15, - ["Y"] = 58.8, - ["CD"] = 0, - }, - [8] = { - ["X"] = 49.67, - ["Y"] = 58.14, - ["CD"] = 0, - }, - [9] = { - ["X"] = 48.5, - ["Y"] = 58.18, - ["CD"] = 0, - }, - [10] = { - ["X"] = 48.18, - ["Y"] = 58.23, - ["CD"] = 0, - }, - [11] = { - ["X"] = 48.13, - ["Y"] = 58.66, - ["CD"] = 0, - }, - [12] = { - ["X"] = 47.72, - ["Y"] = 58.57, - ["CD"] = 0, - }, - [13] = { - ["X"] = 47.55, - ["Y"] = 59.51, - ["CD"] = 0, - }, - [14] = { - ["X"] = 47.97, - ["Y"] = 60.7, - ["CD"] = 0, - }, - [15] = { - ["X"] = 47.95, - ["Y"] = 60.92, - ["CD"] = 0, - }, - [16] = { - ["X"] = 47.99, - ["Y"] = 45.57, - ["CD"] = 0, - }, - [17] = { - ["X"] = 47.57, - ["Y"] = 45.29, - ["CD"] = 0, - }, - [18] = { - ["X"] = 47.57, - ["Y"] = 45.38, - ["CD"] = 0, - }, - [19] = { - ["X"] = 48.18, - ["Y"] = 46.31, - ["CD"] = 0, - }, - [20] = { - ["X"] = 47.05, - ["Y"] = 46.63, - ["CD"] = 0, - }, -} -aura_env.cooldown = 120 -aura_env.wipeDistance = 15 -aura_env.angle = 0 -aura_env.hyp = 0 -aura_env.GetClosestHerb = function() - aura_env.minID = { - ["X"] = 0, - ["Y"] = 0, - ["D"] = 1000, - ["ID"] = 0, - } - local pX = GetPlayerMapPosition("player") or 0 - local pY = select(2, GetPlayerMapPosition("player")) or 0 - pX, pY = pX * 100, pY * 100 - for k, v in ipairs(aura_env.herbs) do - local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] - if cd == 0 then - local X, Y = pX - hX, pY - hY - local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) - if hyp < aura_env.minID["D"] then - aura_env.minID["X"] = hX - aura_env.minID["Y"] = hY - aura_env.minID["D"] = hyp - aura_env.minID["ID"] = k - end - end - end - return aura_env.minID["ID"] -end +aura_env.herbs = { + [1] = { + ["X"] = 47.58, + ["Y"] = 61.98, + ["CD"] = 0, + }, + [2] = { + ["X"] = 47.75, + ["Y"] = 61.61, + ["CD"] = 0, + }, + [3] = { + ["X"] = 49.39, + ["Y"] = 61.5, + ["CD"] = 0, + }, + [4] = { + ["X"] = 48.9, + ["Y"] = 60.63, + ["CD"] = 0, + }, + [5] = { + ["X"] = 49.1, + ["Y"] = 59.96, + ["CD"] = 0, + }, + [6] = { + ["X"] = 49.51, + ["Y"] = 60.13, + ["CD"] = 0, + }, + [7] = { + ["X"] = 49.15, + ["Y"] = 58.8, + ["CD"] = 0, + }, + [8] = { + ["X"] = 49.67, + ["Y"] = 58.14, + ["CD"] = 0, + }, + [9] = { + ["X"] = 48.5, + ["Y"] = 58.18, + ["CD"] = 0, + }, + [10] = { + ["X"] = 48.18, + ["Y"] = 58.23, + ["CD"] = 0, + }, + [11] = { + ["X"] = 48.13, + ["Y"] = 58.66, + ["CD"] = 0, + }, + [12] = { + ["X"] = 47.72, + ["Y"] = 58.57, + ["CD"] = 0, + }, + [13] = { + ["X"] = 47.55, + ["Y"] = 59.51, + ["CD"] = 0, + }, + [14] = { + ["X"] = 47.97, + ["Y"] = 60.7, + ["CD"] = 0, + }, + [15] = { + ["X"] = 47.95, + ["Y"] = 60.92, + ["CD"] = 0, + }, + [16] = { + ["X"] = 47.99, + ["Y"] = 45.57, + ["CD"] = 0, + }, + [17] = { + ["X"] = 47.57, + ["Y"] = 45.29, + ["CD"] = 0, + }, + [18] = { + ["X"] = 47.57, + ["Y"] = 45.38, + ["CD"] = 0, + }, + [19] = { + ["X"] = 48.18, + ["Y"] = 46.31, + ["CD"] = 0, + }, + [20] = { + ["X"] = 47.05, + ["Y"] = 46.63, + ["CD"] = 0, + }, +} +aura_env.cooldown = 120 +aura_env.wipeDistance = 15 +aura_env.angle = 0 +aura_env.hyp = 0 +aura_env.GetClosestHerb = function() + aura_env.minID = { + ["X"] = 0, + ["Y"] = 0, + ["D"] = 1000, + ["ID"] = 0, + } + local pX = GetPlayerMapPosition("player") or 0 + local pY = select(2, GetPlayerMapPosition("player")) or 0 + pX, pY = pX * 100, pY * 100 + for k, v in ipairs(aura_env.herbs) do + local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] + if cd == 0 then + local X, Y = pX - hX, pY - hY + local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) + if hyp < aura_env.minID["D"] then + aura_env.minID["X"] = hX + aura_env.minID["Y"] = hY + aura_env.minID["D"] = hyp + aura_env.minID["ID"] = k + end + end + end + return aura_env.minID["ID"] +end diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Noblegarden/Tirisfal Glades.lua b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Noblegarden/Tirisfal Glades.lua similarity index 93% rename from Complete Projects/Legion/Herb Sniffer/Herb Arrays/Noblegarden/Tirisfal Glades.lua rename to WeakAuras/Projects/Herb Sniffer/Herb Arrays/Noblegarden/Tirisfal Glades.lua index 14d4eee..a81b4ec 100644 --- a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Noblegarden/Tirisfal Glades.lua +++ b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Noblegarden/Tirisfal Glades.lua @@ -1,131 +1,131 @@ -aura_env.herbs = { - [1] = { - ["X"] = 62.88, - ["Y"] = 54.49, - ["CD"] = 0, - }, - [2] = { - ["X"] = 62.75, - ["Y"] = 54, - ["CD"] = 0, - }, - [3] = { - ["X"] = 62.88, - ["Y"] = 53.13, - ["CD"] = 0, - }, - [4] = { - ["X"] = 62.88, - ["Y"] = 51.82, - ["CD"] = 0, - }, - [5] = { - ["X"] = 62.78, - ["Y"] = 51.54, - ["CD"] = 0, - }, - [6] = { - ["X"] = 62.44, - ["Y"] = 50.9, - ["CD"] = 0, - }, - [7] = { - ["X"] = 61.85, - ["Y"] = 50.94, - ["CD"] = 0, - }, - [8] = { - ["X"] = 61.45, - ["Y"] = 51.58, - ["CD"] = 0, - }, - [9] = { - ["X"] = 61.14, - ["Y"] = 51.67, - ["CD"] = 0, - }, - [10] = { - ["X"] = 61.08, - ["Y"] = 52.31, - ["CD"] = 0, - }, - [11] = { - ["X"] = 60.35, - ["Y"] = 51.69, - ["CD"] = 0, - }, - [12] = { - ["X"] = 60.05, - ["Y"] = 51.23, - ["CD"] = 0, - }, - [13] = { - ["X"] = 60.05, - ["Y"] = 52.29, - ["CD"] = 0, - }, - [14] = { - ["X"] = 59.53, - ["Y"] = 52.96, - ["CD"] = 0, - }, - [15] = { - ["X"] = 59.53, - ["Y"] = 53.51, - ["CD"] = 0, - }, - [16] = { - ["X"] = 47.99, - ["Y"] = 45.57, - ["CD"] = 0, - }, - [17] = { - ["X"] = 47.57, - ["Y"] = 45.29, - ["CD"] = 0, - }, - [18] = { - ["X"] = 47.57, - ["Y"] = 45.38, - ["CD"] = 0, - }, - [19] = { - ["X"] = 48.18, - ["Y"] = 46.31, - ["CD"] = 0, - }, - [20] = { - ["X"] = 47.05, - ["Y"] = 46.63, - ["CD"] = 0, - }, -} -aura_env.cooldown = 120 -aura_env.wipeDistance = 15 -aura_env.angle = 0 -aura_env.hyp = 0 -aura_env.GetClosestHerb = function() - aura_env.minID = { - ["X"] = 0, - ["Y"] = 0, - ["D"] = 1000, - ["ID"] = 0, - } - local pX = GetPlayerMapPosition("player") or 0 - local pY = select(2, GetPlayerMapPosition("player")) or 0 - pX, pY = pX * 100, pY * 100 - for k, v in ipairs(aura_env.herbs) do - local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] - if cd == 0 then - local X, Y = pX - hX, pY - hY - local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) - if hyp < aura_env.minID["D"] then - aura_env.minID["X"] = hX - aura_env.minID["Y"] = hY - aura_env.minID["D"] = hyp - aura_env.minID["ID"] = k - end - end - end - return aura_env.minID["ID"] -end +aura_env.herbs = { + [1] = { + ["X"] = 62.88, + ["Y"] = 54.49, + ["CD"] = 0, + }, + [2] = { + ["X"] = 62.75, + ["Y"] = 54, + ["CD"] = 0, + }, + [3] = { + ["X"] = 62.88, + ["Y"] = 53.13, + ["CD"] = 0, + }, + [4] = { + ["X"] = 62.88, + ["Y"] = 51.82, + ["CD"] = 0, + }, + [5] = { + ["X"] = 62.78, + ["Y"] = 51.54, + ["CD"] = 0, + }, + [6] = { + ["X"] = 62.44, + ["Y"] = 50.9, + ["CD"] = 0, + }, + [7] = { + ["X"] = 61.85, + ["Y"] = 50.94, + ["CD"] = 0, + }, + [8] = { + ["X"] = 61.45, + ["Y"] = 51.58, + ["CD"] = 0, + }, + [9] = { + ["X"] = 61.14, + ["Y"] = 51.67, + ["CD"] = 0, + }, + [10] = { + ["X"] = 61.08, + ["Y"] = 52.31, + ["CD"] = 0, + }, + [11] = { + ["X"] = 60.35, + ["Y"] = 51.69, + ["CD"] = 0, + }, + [12] = { + ["X"] = 60.05, + ["Y"] = 51.23, + ["CD"] = 0, + }, + [13] = { + ["X"] = 60.05, + ["Y"] = 52.29, + ["CD"] = 0, + }, + [14] = { + ["X"] = 59.53, + ["Y"] = 52.96, + ["CD"] = 0, + }, + [15] = { + ["X"] = 59.53, + ["Y"] = 53.51, + ["CD"] = 0, + }, + [16] = { + ["X"] = 47.99, + ["Y"] = 45.57, + ["CD"] = 0, + }, + [17] = { + ["X"] = 47.57, + ["Y"] = 45.29, + ["CD"] = 0, + }, + [18] = { + ["X"] = 47.57, + ["Y"] = 45.38, + ["CD"] = 0, + }, + [19] = { + ["X"] = 48.18, + ["Y"] = 46.31, + ["CD"] = 0, + }, + [20] = { + ["X"] = 47.05, + ["Y"] = 46.63, + ["CD"] = 0, + }, +} +aura_env.cooldown = 120 +aura_env.wipeDistance = 15 +aura_env.angle = 0 +aura_env.hyp = 0 +aura_env.GetClosestHerb = function() + aura_env.minID = { + ["X"] = 0, + ["Y"] = 0, + ["D"] = 1000, + ["ID"] = 0, + } + local pX = GetPlayerMapPosition("player") or 0 + local pY = select(2, GetPlayerMapPosition("player")) or 0 + pX, pY = pX * 100, pY * 100 + for k, v in ipairs(aura_env.herbs) do + local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] + if cd == 0 then + local X, Y = pX - hX, pY - hY + local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) + if hyp < aura_env.minID["D"] then + aura_env.minID["X"] = hX + aura_env.minID["Y"] = hY + aura_env.minID["D"] = hyp + aura_env.minID["ID"] = k + end + end + end + return aura_env.minID["ID"] +end diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Noblegarden/Waypoints b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Noblegarden/Waypoints similarity index 96% rename from Complete Projects/Legion/Herb Sniffer/Herb Arrays/Noblegarden/Waypoints rename to WeakAuras/Projects/Herb Sniffer/Herb Arrays/Noblegarden/Waypoints index dcd873e..08ddbf7 100644 --- a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Noblegarden/Waypoints +++ b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Noblegarden/Waypoints @@ -1,167 +1,167 @@ -/way Eversong Woods 47.45 45.25 -/way Eversong Woods 47.1 45.39 -/way Eversong Woods 46.85 45.64 -/way Eversong Woods 47.26 46.21 -/way Eversong Woods 46.37 46.44 -/way Eversong Woods 46.23 47.2 -/way Eversong Woods 46.35 48 -/way Eversong Woods 46.92 48.29 -/way Eversong Woods 47.02 47.71 -/way Eversong Woods 47.28 47.65 -/way Eversong Woods 47.45 47.47 -/way Eversong Woods 47.55 47.42 -/way Eversong Woods 47.84 46.89 -/way Eversong Woods 48.13 46.47 -/way Eversong Woods 48.24 45.63 -/way Eversong Woods 47.99 45.57 -/way Eversong Woods 47.57 45.29 -/way Eversong Woods 47.57 45.38 -/way Eversong Woods 48.18 46.31 -/way Eversong Woods 47.05 46.63 - -/way Mulgore 47.58 61.98 -/way Mulgore 47.75 61.61 -/way Mulgore 49.39 61.5 -/way Mulgore 48.9 60.63 -/way Mulgore 49.1 59.96 -/way Mulgore 49.51 60.13 -/way Mulgore 49.15 58.8 -/way Mulgore 49.67 58.14 -/way Mulgore 48.5 58.18 -/way Mulgore 48.18 58.23 -/way Mulgore 48.13 58.66 -/way Mulgore 47.72 58.57 -/way Mulgore 47.55 59.51 -/way Mulgore 47.97 60.7 -/way Mulgore 47.95 60.92 -/way Mulgore 47.99 45.57 -/way Mulgore 47.57 45.29 -/way Mulgore 47.57 45.38 -/way Mulgore 48.18 46.31 -/way Mulgore 47.05 46.63 - -/way Durotar 51.58 43.53 -/way Durotar 51.71 43.97 -/way Durotar 52.19 43.75 -/way Durotar 53.1 43.07 -/way Durotar 53.56 43.28 -/way Durotar 54.06 43.34 -/way Durotar 54.63 43.33 -/way Durotar 54.84 42.4 -/way Durotar 54.89 41.74 -/way Durotar 54.53 41.47 -/way Durotar 54.27 41.65 -/way Durotar 53.86 41.66 -/way Durotar 53.74 40.67 -/way Durotar 52.95 40.72 -/way Durotar 52.78 40.24 -/way Durotar 47.99 45.57 -/way Durotar 47.57 45.29 -/way Durotar 47.57 45.38 -/way Durotar 48.18 46.31 -/way Durotar 47.05 46.63 - -/way Tirisfal Glades 62.88 54.49 -/way Tirisfal Glades 62.75 54 -/way Tirisfal Glades 62.88 53.13 -/way Tirisfal Glades 62.88 51.82 -/way Tirisfal Glades 62.78 51.54 -/way Tirisfal Glades 62.44 50.9 -/way Tirisfal Glades 61.85 50.94 -/way Tirisfal Glades 61.45 51.58 -/way Tirisfal Glades 61.14 51.67 -/way Tirisfal Glades 61.08 52.31 -/way Tirisfal Glades 60.35 51.69 -/way Tirisfal Glades 60.05 51.23 -/way Tirisfal Glades 60.05 52.29 -/way Tirisfal Glades 59.53 52.96 -/way Tirisfal Glades 59.53 53.51 -/way Tirisfal Glades 47.99 45.57 -/way Tirisfal Glades 47.57 45.29 -/way Tirisfal Glades 47.57 45.38 -/way Tirisfal Glades 48.18 46.31 -/way Tirisfal Glades 47.05 46.63 - -/way Teldrassil 56.36 51.89 -/way Teldrassil 56.3 52.47 -/way Teldrassil 56.15 52.66 -/way Teldrassil 55.77 52.93 -/way Teldrassil 55.59 52.59 -/way Teldrassil 55.34 52.53 -/way Teldrassil 55.22 52.12 -/way Teldrassil 55.36 51.37 -/way Teldrassil 55.14 51.69 -/way Teldrassil 54.87 49.49 -/way Teldrassil 55.15 49.23 -/way Teldrassil 55.61 49.51 -/way Teldrassil 55.77 49.77 -/way Teldrassil 55.7 50.34 -/way Teldrassil 55.31 50.68 -/way Teldrassil 47.99 45.57 -/way Teldrassil 47.57 45.29 -/way Teldrassil 47.57 45.38 -/way Teldrassil 48.18 46.31 -/way Teldrassil 47.05 46.63 - -/way Azuremyst Isle 50 50.24 -/way Azuremyst Isle 48.98 50.97 -/way Azuremyst Isle 49.26 50.68 -/way Azuremyst Isle 50.18 52.1 -/way Azuremyst Isle 49.8 52.07 -/way Azuremyst Isle 49.26 52.84 -/way Azuremyst Isle 48.83 52.7 -/way Azuremyst Isle 48.39 52.23 -/way Azuremyst Isle 47.8 51.37 -/way Azuremyst Isle 48.02 50.57 -/way Azuremyst Isle 48.6 50.24 -/way Azuremyst Isle 49.41 49.05 -/way Azuremyst Isle 49.77 49.6 -/way Azuremyst Isle 50.16 50.91 -/way Azuremyst Isle 49.28 51.31 -/way Azuremyst Isle 47.99 45.57 -/way Azuremyst Isle 47.57 45.29 -/way Azuremyst Isle 47.57 45.38 -/way Azuremyst Isle 48.18 46.31 -/way Azuremyst Isle 47.05 46.63 - -/way Dun Morogh 53.18 51.5 -/way Dun Morogh 52.71 51.12 -/way Dun Morogh 53.14 53.76 -/way Dun Morogh 53.33 54.06 -/way Dun Morogh 53.78 53.14 -/way Dun Morogh 54.41 53.24 -/way Dun Morogh 54.1 52.4 -/way Dun Morogh 54.56 51.32 -/way Dun Morogh 54.55 52.1 -/way Dun Morogh 53.14 51.99 -/way Dun Morogh 53.97 51.94 -/way Dun Morogh 53.94 50.74 -/way Dun Morogh 53.95 50.29 -/way Dun Morogh 54.11 50.07 -/way Dun Morogh 54.47 49.32 -/way Dun Morogh 47.99 45.57 -/way Dun Morogh 47.57 45.29 -/way Dun Morogh 47.57 45.38 -/way Dun Morogh 48.18 46.31 -/way Dun Morogh 47.05 46.63 - -/way Elwynn Forest 40.72 65.51 -/way Elwynn Forest 40.78 64.88 -/way Elwynn Forest 40.88 64.47 -/way Elwynn Forest 41.23 64.63 -/way Elwynn Forest 42.6 63.71 -/way Elwynn Forest 42.8 63.79 -/way Elwynn Forest 43.74 64.78 -/way Elwynn Forest 43.74 65.38 -/way Elwynn Forest 44.1 65.46 -/way Elwynn Forest 44.55 65.71 -/way Elwynn Forest 44.52 66.37 -/way Elwynn Forest 43.9 66.74 -/way Elwynn Forest 43.17 66.67 -/way Elwynn Forest 42.96 66.44 -/way Elwynn Forest 54.47 49.32 -/way Elwynn Forest 47.99 45.57 -/way Elwynn Forest 47.57 45.29 -/way Elwynn Forest 47.57 45.38 -/way Elwynn Forest 48.18 46.31 +/way Eversong Woods 47.45 45.25 +/way Eversong Woods 47.1 45.39 +/way Eversong Woods 46.85 45.64 +/way Eversong Woods 47.26 46.21 +/way Eversong Woods 46.37 46.44 +/way Eversong Woods 46.23 47.2 +/way Eversong Woods 46.35 48 +/way Eversong Woods 46.92 48.29 +/way Eversong Woods 47.02 47.71 +/way Eversong Woods 47.28 47.65 +/way Eversong Woods 47.45 47.47 +/way Eversong Woods 47.55 47.42 +/way Eversong Woods 47.84 46.89 +/way Eversong Woods 48.13 46.47 +/way Eversong Woods 48.24 45.63 +/way Eversong Woods 47.99 45.57 +/way Eversong Woods 47.57 45.29 +/way Eversong Woods 47.57 45.38 +/way Eversong Woods 48.18 46.31 +/way Eversong Woods 47.05 46.63 + +/way Mulgore 47.58 61.98 +/way Mulgore 47.75 61.61 +/way Mulgore 49.39 61.5 +/way Mulgore 48.9 60.63 +/way Mulgore 49.1 59.96 +/way Mulgore 49.51 60.13 +/way Mulgore 49.15 58.8 +/way Mulgore 49.67 58.14 +/way Mulgore 48.5 58.18 +/way Mulgore 48.18 58.23 +/way Mulgore 48.13 58.66 +/way Mulgore 47.72 58.57 +/way Mulgore 47.55 59.51 +/way Mulgore 47.97 60.7 +/way Mulgore 47.95 60.92 +/way Mulgore 47.99 45.57 +/way Mulgore 47.57 45.29 +/way Mulgore 47.57 45.38 +/way Mulgore 48.18 46.31 +/way Mulgore 47.05 46.63 + +/way Durotar 51.58 43.53 +/way Durotar 51.71 43.97 +/way Durotar 52.19 43.75 +/way Durotar 53.1 43.07 +/way Durotar 53.56 43.28 +/way Durotar 54.06 43.34 +/way Durotar 54.63 43.33 +/way Durotar 54.84 42.4 +/way Durotar 54.89 41.74 +/way Durotar 54.53 41.47 +/way Durotar 54.27 41.65 +/way Durotar 53.86 41.66 +/way Durotar 53.74 40.67 +/way Durotar 52.95 40.72 +/way Durotar 52.78 40.24 +/way Durotar 47.99 45.57 +/way Durotar 47.57 45.29 +/way Durotar 47.57 45.38 +/way Durotar 48.18 46.31 +/way Durotar 47.05 46.63 + +/way Tirisfal Glades 62.88 54.49 +/way Tirisfal Glades 62.75 54 +/way Tirisfal Glades 62.88 53.13 +/way Tirisfal Glades 62.88 51.82 +/way Tirisfal Glades 62.78 51.54 +/way Tirisfal Glades 62.44 50.9 +/way Tirisfal Glades 61.85 50.94 +/way Tirisfal Glades 61.45 51.58 +/way Tirisfal Glades 61.14 51.67 +/way Tirisfal Glades 61.08 52.31 +/way Tirisfal Glades 60.35 51.69 +/way Tirisfal Glades 60.05 51.23 +/way Tirisfal Glades 60.05 52.29 +/way Tirisfal Glades 59.53 52.96 +/way Tirisfal Glades 59.53 53.51 +/way Tirisfal Glades 47.99 45.57 +/way Tirisfal Glades 47.57 45.29 +/way Tirisfal Glades 47.57 45.38 +/way Tirisfal Glades 48.18 46.31 +/way Tirisfal Glades 47.05 46.63 + +/way Teldrassil 56.36 51.89 +/way Teldrassil 56.3 52.47 +/way Teldrassil 56.15 52.66 +/way Teldrassil 55.77 52.93 +/way Teldrassil 55.59 52.59 +/way Teldrassil 55.34 52.53 +/way Teldrassil 55.22 52.12 +/way Teldrassil 55.36 51.37 +/way Teldrassil 55.14 51.69 +/way Teldrassil 54.87 49.49 +/way Teldrassil 55.15 49.23 +/way Teldrassil 55.61 49.51 +/way Teldrassil 55.77 49.77 +/way Teldrassil 55.7 50.34 +/way Teldrassil 55.31 50.68 +/way Teldrassil 47.99 45.57 +/way Teldrassil 47.57 45.29 +/way Teldrassil 47.57 45.38 +/way Teldrassil 48.18 46.31 +/way Teldrassil 47.05 46.63 + +/way Azuremyst Isle 50 50.24 +/way Azuremyst Isle 48.98 50.97 +/way Azuremyst Isle 49.26 50.68 +/way Azuremyst Isle 50.18 52.1 +/way Azuremyst Isle 49.8 52.07 +/way Azuremyst Isle 49.26 52.84 +/way Azuremyst Isle 48.83 52.7 +/way Azuremyst Isle 48.39 52.23 +/way Azuremyst Isle 47.8 51.37 +/way Azuremyst Isle 48.02 50.57 +/way Azuremyst Isle 48.6 50.24 +/way Azuremyst Isle 49.41 49.05 +/way Azuremyst Isle 49.77 49.6 +/way Azuremyst Isle 50.16 50.91 +/way Azuremyst Isle 49.28 51.31 +/way Azuremyst Isle 47.99 45.57 +/way Azuremyst Isle 47.57 45.29 +/way Azuremyst Isle 47.57 45.38 +/way Azuremyst Isle 48.18 46.31 +/way Azuremyst Isle 47.05 46.63 + +/way Dun Morogh 53.18 51.5 +/way Dun Morogh 52.71 51.12 +/way Dun Morogh 53.14 53.76 +/way Dun Morogh 53.33 54.06 +/way Dun Morogh 53.78 53.14 +/way Dun Morogh 54.41 53.24 +/way Dun Morogh 54.1 52.4 +/way Dun Morogh 54.56 51.32 +/way Dun Morogh 54.55 52.1 +/way Dun Morogh 53.14 51.99 +/way Dun Morogh 53.97 51.94 +/way Dun Morogh 53.94 50.74 +/way Dun Morogh 53.95 50.29 +/way Dun Morogh 54.11 50.07 +/way Dun Morogh 54.47 49.32 +/way Dun Morogh 47.99 45.57 +/way Dun Morogh 47.57 45.29 +/way Dun Morogh 47.57 45.38 +/way Dun Morogh 48.18 46.31 +/way Dun Morogh 47.05 46.63 + +/way Elwynn Forest 40.72 65.51 +/way Elwynn Forest 40.78 64.88 +/way Elwynn Forest 40.88 64.47 +/way Elwynn Forest 41.23 64.63 +/way Elwynn Forest 42.6 63.71 +/way Elwynn Forest 42.8 63.79 +/way Elwynn Forest 43.74 64.78 +/way Elwynn Forest 43.74 65.38 +/way Elwynn Forest 44.1 65.46 +/way Elwynn Forest 44.55 65.71 +/way Elwynn Forest 44.52 66.37 +/way Elwynn Forest 43.9 66.74 +/way Elwynn Forest 43.17 66.67 +/way Elwynn Forest 42.96 66.44 +/way Elwynn Forest 54.47 49.32 +/way Elwynn Forest 47.99 45.57 +/way Elwynn Forest 47.57 45.29 +/way Elwynn Forest 47.57 45.38 +/way Elwynn Forest 48.18 46.31 /way Elwynn Forest 47.05 46.63 \ No newline at end of file diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Skinning/Some apes.lua b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Skinning/Some apes.lua similarity index 93% rename from Complete Projects/Legion/Herb Sniffer/Herb Arrays/Skinning/Some apes.lua rename to WeakAuras/Projects/Herb Sniffer/Herb Arrays/Skinning/Some apes.lua index 2e27ed7..37fba8d 100644 --- a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Skinning/Some apes.lua +++ b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Skinning/Some apes.lua @@ -1,236 +1,236 @@ -aura_env.herbs = { - [1] = { - ["X"] = 57.62, - ["Y"] = 72.45, - ["CD"] = 0, - }, - [2] = { - ["X"] = 57.57, - ["Y"] = 72.49, - ["CD"] = 0, - }, - [3] = { - ["X"] = 60.72, - ["Y"] = 70.21, - ["CD"] = 0, - }, - [4] = { - ["X"] = 57.63, - ["Y"] = 72.53, - ["CD"] = 0, - }, - [5] = { - ["X"] = 57.74, - ["Y"] = 72.2, - ["CD"] = 0, - }, - [6] = { - ["X"] = 60.67, - ["Y"] = 70.3, - ["CD"] = 0, - }, - [7] = { - ["X"] = 57.84, - ["Y"] = 72.45, - ["CD"] = 0, - }, - [8] = { - ["X"] = 60.66, - ["Y"] = 70.92, - ["CD"] = 0, - }, - [9] = { - ["X"] = 60.71, - ["Y"] = 70.26, - ["CD"] = 0, - }, - [10] = { - ["X"] = 60.67, - ["Y"] = 70.19, - ["CD"] = 0, - }, - [11] = { - ["X"] = 60.71, - ["Y"] = 70.31, - ["CD"] = 0, - }, - [12] = { - ["X"] = 60.64, - ["Y"] = 70.15, - ["CD"] = 0, - }, - [13] = { - ["X"] = 60.73, - ["Y"] = 70.37, - ["CD"] = 0, - }, - [14] = { - ["X"] = 60.14, - ["Y"] = 70.54, - ["CD"] = 0, - }, - [15] = { - ["X"] = 71.7, - ["Y"] = 70.48, - ["CD"] = 0, - }, - [16] = { - ["X"] = 72.11, - ["Y"] = 71.16, - ["CD"] = 0, - }, - [17] = { - ["X"] = 71.94, - ["Y"] = 70.56, - ["CD"] = 0, - }, - [18] = { - ["X"] = 72.01, - ["Y"] = 70.35, - ["CD"] = 0, - }, - [19] = { - ["X"] = 66.58, - ["Y"] = 69.36, - ["CD"] = 0, - }, - [20] = { - ["X"] = 72.16, - ["Y"] = 70.51, - ["CD"] = 0, - }, - [21] = { - ["X"] = 66.99, - ["Y"] = 68.62, - ["CD"] = 0, - }, - [22] = { - ["X"] = 65.63, - ["Y"] = 69.87, - ["CD"] = 0, - }, - [23] = { - ["X"] = 57.32, - ["Y"] = 76.15, - ["CD"] = 0, - }, - [24] = { - ["X"] = 65.54, - ["Y"] = 69.99, - ["CD"] = 0, - }, - [25] = { - ["X"] = 65.66, - ["Y"] = 69.51, - ["CD"] = 0, - }, - [26] = { - ["X"] = 57.68, - ["Y"] = 72.53, - ["CD"] = 0, - }, - [27] = { - ["X"] = 56.46, - ["Y"] = 73.39, - ["CD"] = 0, - }, - [28] = { - ["X"] = 64.03, - ["Y"] = 73.84, - ["CD"] = 0, - }, - [29] = { - ["X"] = 71.66, - ["Y"] = 70.86, - ["CD"] = 0, - }, - [30] = { - ["X"] = 56.82, - ["Y"] = 75.45, - ["CD"] = 0, - }, - [31] = { - ["X"] = 56.21, - ["Y"] = 76.01, - ["CD"] = 0, - }, - [32] = { - ["X"] = 48.26, - ["Y"] = 79.27, - ["CD"] = 0, - }, - [33] = { - ["X"] = 55.4, - ["Y"] = 73.17, - ["CD"] = 0, - }, - [34] = { - ["X"] = 56.71, - ["Y"] = 78.07, - ["CD"] = 0, - }, - [35] = { - ["X"] = 56.45, - ["Y"] = 76.92, - ["CD"] = 0, - }, - [36] = { - ["X"] = 50.67, - ["Y"] = 80.17, - ["CD"] = 0, - }, - [37] = { - ["X"] = 55.33, - ["Y"] = 76.05, - ["CD"] = 0, - }, - [38] = { - ["X"] = 49.13, - ["Y"] = 78.84, - ["CD"] = 0, - }, - [39] = { - ["X"] = 50.61, - ["Y"] = 78.54, - ["CD"] = 0, - }, - [40] = { - ["X"] = 46.32, - ["Y"] = 78.96, - ["CD"] = 0, - }, - [41] = { - ["X"] = 47.29, - ["Y"] = 79.19, - ["CD"] = 0, - }, -} -aura_env.cooldown = 91 -aura_env.wipeDistance = 15 -aura_env.angle = 0 -aura_env.hyp = 0 -aura_env.GetClosestHerb = function() - aura_env.minID = { - ["X"] = 0, - ["Y"] = 0, - ["D"] = 1000, - ["ID"] = 0, - } - local pX = GetPlayerMapPosition("player") or 0 - local pY = select(2, GetPlayerMapPosition("player")) or 0 - pX, pY = pX * 100, pY * 100 - for k, v in ipairs(aura_env.herbs) do - local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] - if cd == 0 then - local X, Y = pX - hX, pY - hY - local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) - if hyp < aura_env.minID["D"] then - aura_env.minID["X"] = hX - aura_env.minID["Y"] = hY - aura_env.minID["D"] = hyp - aura_env.minID["ID"] = k - end - end - end - return aura_env.minID["ID"] -end +aura_env.herbs = { + [1] = { + ["X"] = 57.62, + ["Y"] = 72.45, + ["CD"] = 0, + }, + [2] = { + ["X"] = 57.57, + ["Y"] = 72.49, + ["CD"] = 0, + }, + [3] = { + ["X"] = 60.72, + ["Y"] = 70.21, + ["CD"] = 0, + }, + [4] = { + ["X"] = 57.63, + ["Y"] = 72.53, + ["CD"] = 0, + }, + [5] = { + ["X"] = 57.74, + ["Y"] = 72.2, + ["CD"] = 0, + }, + [6] = { + ["X"] = 60.67, + ["Y"] = 70.3, + ["CD"] = 0, + }, + [7] = { + ["X"] = 57.84, + ["Y"] = 72.45, + ["CD"] = 0, + }, + [8] = { + ["X"] = 60.66, + ["Y"] = 70.92, + ["CD"] = 0, + }, + [9] = { + ["X"] = 60.71, + ["Y"] = 70.26, + ["CD"] = 0, + }, + [10] = { + ["X"] = 60.67, + ["Y"] = 70.19, + ["CD"] = 0, + }, + [11] = { + ["X"] = 60.71, + ["Y"] = 70.31, + ["CD"] = 0, + }, + [12] = { + ["X"] = 60.64, + ["Y"] = 70.15, + ["CD"] = 0, + }, + [13] = { + ["X"] = 60.73, + ["Y"] = 70.37, + ["CD"] = 0, + }, + [14] = { + ["X"] = 60.14, + ["Y"] = 70.54, + ["CD"] = 0, + }, + [15] = { + ["X"] = 71.7, + ["Y"] = 70.48, + ["CD"] = 0, + }, + [16] = { + ["X"] = 72.11, + ["Y"] = 71.16, + ["CD"] = 0, + }, + [17] = { + ["X"] = 71.94, + ["Y"] = 70.56, + ["CD"] = 0, + }, + [18] = { + ["X"] = 72.01, + ["Y"] = 70.35, + ["CD"] = 0, + }, + [19] = { + ["X"] = 66.58, + ["Y"] = 69.36, + ["CD"] = 0, + }, + [20] = { + ["X"] = 72.16, + ["Y"] = 70.51, + ["CD"] = 0, + }, + [21] = { + ["X"] = 66.99, + ["Y"] = 68.62, + ["CD"] = 0, + }, + [22] = { + ["X"] = 65.63, + ["Y"] = 69.87, + ["CD"] = 0, + }, + [23] = { + ["X"] = 57.32, + ["Y"] = 76.15, + ["CD"] = 0, + }, + [24] = { + ["X"] = 65.54, + ["Y"] = 69.99, + ["CD"] = 0, + }, + [25] = { + ["X"] = 65.66, + ["Y"] = 69.51, + ["CD"] = 0, + }, + [26] = { + ["X"] = 57.68, + ["Y"] = 72.53, + ["CD"] = 0, + }, + [27] = { + ["X"] = 56.46, + ["Y"] = 73.39, + ["CD"] = 0, + }, + [28] = { + ["X"] = 64.03, + ["Y"] = 73.84, + ["CD"] = 0, + }, + [29] = { + ["X"] = 71.66, + ["Y"] = 70.86, + ["CD"] = 0, + }, + [30] = { + ["X"] = 56.82, + ["Y"] = 75.45, + ["CD"] = 0, + }, + [31] = { + ["X"] = 56.21, + ["Y"] = 76.01, + ["CD"] = 0, + }, + [32] = { + ["X"] = 48.26, + ["Y"] = 79.27, + ["CD"] = 0, + }, + [33] = { + ["X"] = 55.4, + ["Y"] = 73.17, + ["CD"] = 0, + }, + [34] = { + ["X"] = 56.71, + ["Y"] = 78.07, + ["CD"] = 0, + }, + [35] = { + ["X"] = 56.45, + ["Y"] = 76.92, + ["CD"] = 0, + }, + [36] = { + ["X"] = 50.67, + ["Y"] = 80.17, + ["CD"] = 0, + }, + [37] = { + ["X"] = 55.33, + ["Y"] = 76.05, + ["CD"] = 0, + }, + [38] = { + ["X"] = 49.13, + ["Y"] = 78.84, + ["CD"] = 0, + }, + [39] = { + ["X"] = 50.61, + ["Y"] = 78.54, + ["CD"] = 0, + }, + [40] = { + ["X"] = 46.32, + ["Y"] = 78.96, + ["CD"] = 0, + }, + [41] = { + ["X"] = 47.29, + ["Y"] = 79.19, + ["CD"] = 0, + }, +} +aura_env.cooldown = 91 +aura_env.wipeDistance = 15 +aura_env.angle = 0 +aura_env.hyp = 0 +aura_env.GetClosestHerb = function() + aura_env.minID = { + ["X"] = 0, + ["Y"] = 0, + ["D"] = 1000, + ["ID"] = 0, + } + local pX = GetPlayerMapPosition("player") or 0 + local pY = select(2, GetPlayerMapPosition("player")) or 0 + pX, pY = pX * 100, pY * 100 + for k, v in ipairs(aura_env.herbs) do + local hX, hY, cd = aura_env.herbs[k]["X"], aura_env.herbs[k]["Y"], aura_env.herbs[k]["CD"] + if cd == 0 then + local X, Y = pX - hX, pY - hY + local hyp = math.sqrt((math.abs(X ^ 2)) + (math.abs(Y ^ 2))) + if hyp < aura_env.minID["D"] then + aura_env.minID["X"] = hX + aura_env.minID["Y"] = hY + aura_env.minID["D"] = hyp + aura_env.minID["ID"] = k + end + end + end + return aura_env.minID["ID"] +end diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Thing b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Thing similarity index 97% rename from Complete Projects/Legion/Herb Sniffer/Herb Arrays/Thing rename to WeakAuras/Projects/Herb Sniffer/Herb Arrays/Thing index f554ef9..76e86cf 100644 --- a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Thing +++ b/WeakAuras/Projects/Herb Sniffer/Herb Arrays/Thing @@ -1,5 +1,5 @@ -left: (\d+\.?\d*)%; top: (\d+\.?\d*) - -/way [a-z ]+(\d+\.?\d*) (\d+\.?\d*) -left: (\d+\.?\d*)%; top: (\d+\.?\d*) +left: (\d+\.?\d*)%; top: (\d+\.?\d*) + +/way [a-z ]+(\d+\.?\d*) (\d+\.?\d*) +left: (\d+\.?\d*)%; top: (\d+\.?\d*) \[\] = \n\{\n\[\"X\"\] = $1,\n\[\"Y\"\] = $2,\n\[\"CD\"\] = 0\n\}, \ No newline at end of file diff --git a/Complete Projects/Legion/Highfathers.lua b/WeakAuras/Projects/Highfathers.lua similarity index 96% rename from Complete Projects/Legion/Highfathers.lua rename to WeakAuras/Projects/Highfathers.lua index 7c364d6..fc867a7 100644 --- a/Complete Projects/Legion/Highfathers.lua +++ b/WeakAuras/Projects/Highfathers.lua @@ -1,39 +1,39 @@ ---COMBAT_LOG_EVENT_UNFILTERED -function(e, ...) - local se = select(2, ...) - if se == "SPELL_AURA_APPLIED" or se == "SPELL_AURA_APPLIED_DOSE" then - local source = select(5, ...) - if source == UnitName("player") then - local spell = select(13, ...) - local target = select(9, ...) - if spell == "Highfather's Timekeeping" then - if not aura_env.targets[target] then - aura_env.targets[target] = 1 - else - aura_env.targets[target] = aura_env.targets[target] + 1 - end - return true - end - end - elseif se == "SPELL_AURA_REMOVED" then - local source = select(5, ...) - local target = select(9, ...) - local spell = select(13, ...) - if source == UnitName("player") and spell == "Highfather's Timekeeping" and aura_env.targets[target] then - aura_env.targets[target] = nil - return true - end - end -end - ---DISPLAY -function() - local output = "" - for k,v in pairs(aura_env.targets) do - output = output .. k .. " " .. v .. "\n" - end - return output -end - ---INIT +--COMBAT_LOG_EVENT_UNFILTERED +function(e, ...) + local se = select(2, ...) + if se == "SPELL_AURA_APPLIED" or se == "SPELL_AURA_APPLIED_DOSE" then + local source = select(5, ...) + if source == UnitName("player") then + local spell = select(13, ...) + local target = select(9, ...) + if spell == "Highfather's Timekeeping" then + if not aura_env.targets[target] then + aura_env.targets[target] = 1 + else + aura_env.targets[target] = aura_env.targets[target] + 1 + end + return true + end + end + elseif se == "SPELL_AURA_REMOVED" then + local source = select(5, ...) + local target = select(9, ...) + local spell = select(13, ...) + if source == UnitName("player") and spell == "Highfather's Timekeeping" and aura_env.targets[target] then + aura_env.targets[target] = nil + return true + end + end +end + +--DISPLAY +function() + local output = "" + for k,v in pairs(aura_env.targets) do + output = output .. k .. " " .. v .. "\n" + end + return output +end + +--INIT aura_env.targets = {} \ No newline at end of file diff --git a/Complete Projects/Legion/HoTP heal bars/1.0/HP1.lua b/WeakAuras/Projects/HoTP heal bars/1.0/HP1.lua similarity index 97% rename from Complete Projects/Legion/HoTP heal bars/1.0/HP1.lua rename to WeakAuras/Projects/HoTP heal bars/1.0/HP1.lua index 19f855a..866c6be 100644 --- a/Complete Projects/Legion/HoTP heal bars/1.0/HP1.lua +++ b/WeakAuras/Projects/HoTP heal bars/1.0/HP1.lua @@ -1,48 +1,48 @@ -DISPLAY -function() - return ("%.0fk / %.0fk"):format(UnitHealth("player") / 1000, UnitHealthMax("player") / 1000); -end - -TRIGGER -function() - return true -end - -DURATION -function() - curHealth = floor((UnitHealth("player")/UnitHealthMax("player"))*100); - return curHealth,100,true; -end - -NAME -function() - local p = math.max(0, UnitHealth("player")) / math.max(1, UnitHealthMax("player")) * 100; - local missing_health = UnitHealthMax("player") - UnitHealth("player") - local b = UnitBuff("player", "Consecration") - local b2 = UnitBuff("player", "Avenging Wrath") - local b3 = UnitBuff("player", "Chain of Thrayn") - local b4 = UnitBuff("player", "Ilterendi, Crown Jewel of Silvermoon") - local versa = GetCombatRatingBonus(CR_VERSATILITY_DAMAGE_DONE) - local hotp_base_heal = 0.3 + (0.36 * 0.3) - local healing_multiplier = 1 + (versa / 100) - if b == "Consecration" then - hotp_base_heal = hotp_base_heal + (0.3 * 0.3) - end - if b3 == "Chain of Thrayn" then - healing_multiplier = healing_multiplier + 0.5 - end - if b2 == "Avenging Wrath" then - healing_multiplier = healing_multiplier + 0.35 - end - if b4 == "Ilterendi, Crown Jewel of Silvermoon" then - healing_multiplier = healing_multiplier + 0.2 - end - local absolute_healing_only_hotp = missing_health * hotp_base_heal - if healing_multiplier > 2 then healing_multiplier = 2 end - local final_heal_absolute = absolute_healing_only_hotp * healing_multiplier - local final_heal_relative = math.floor((final_heal_absolute / UnitHealthMax("player"))*100) - local heal_percentage = math.floor((final_heal_absolute / missing_health) * 100) - --print(heal_percentage) - local new = p + final_heal_relative - return string.format("%.f", p) .. " " .. string.format("%.f", new) .. " " .. string.format("+%.f", final_heal_relative) +DISPLAY +function() + return ("%.0fk / %.0fk"):format(UnitHealth("player") / 1000, UnitHealthMax("player") / 1000); +end + +TRIGGER +function() + return true +end + +DURATION +function() + curHealth = floor((UnitHealth("player")/UnitHealthMax("player"))*100); + return curHealth,100,true; +end + +NAME +function() + local p = math.max(0, UnitHealth("player")) / math.max(1, UnitHealthMax("player")) * 100; + local missing_health = UnitHealthMax("player") - UnitHealth("player") + local b = UnitBuff("player", "Consecration") + local b2 = UnitBuff("player", "Avenging Wrath") + local b3 = UnitBuff("player", "Chain of Thrayn") + local b4 = UnitBuff("player", "Ilterendi, Crown Jewel of Silvermoon") + local versa = GetCombatRatingBonus(CR_VERSATILITY_DAMAGE_DONE) + local hotp_base_heal = 0.3 + (0.36 * 0.3) + local healing_multiplier = 1 + (versa / 100) + if b == "Consecration" then + hotp_base_heal = hotp_base_heal + (0.3 * 0.3) + end + if b3 == "Chain of Thrayn" then + healing_multiplier = healing_multiplier + 0.5 + end + if b2 == "Avenging Wrath" then + healing_multiplier = healing_multiplier + 0.35 + end + if b4 == "Ilterendi, Crown Jewel of Silvermoon" then + healing_multiplier = healing_multiplier + 0.2 + end + local absolute_healing_only_hotp = missing_health * hotp_base_heal + if healing_multiplier > 2 then healing_multiplier = 2 end + local final_heal_absolute = absolute_healing_only_hotp * healing_multiplier + local final_heal_relative = math.floor((final_heal_absolute / UnitHealthMax("player"))*100) + local heal_percentage = math.floor((final_heal_absolute / missing_health) * 100) + --print(heal_percentage) + local new = p + final_heal_relative + return string.format("%.f", p) .. " " .. string.format("%.f", new) .. " " .. string.format("+%.f", final_heal_relative) end \ No newline at end of file diff --git a/Complete Projects/Legion/HoTP heal bars/1.0/HP2.lua b/WeakAuras/Projects/HoTP heal bars/1.0/HP2.lua similarity index 97% rename from Complete Projects/Legion/HoTP heal bars/1.0/HP2.lua rename to WeakAuras/Projects/HoTP heal bars/1.0/HP2.lua index 02a95a2..7ff926f 100644 --- a/Complete Projects/Legion/HoTP heal bars/1.0/HP2.lua +++ b/WeakAuras/Projects/HoTP heal bars/1.0/HP2.lua @@ -1,76 +1,76 @@ -DISPLAY -function() - return ("%.0fk / %.0fk"):format(UnitHealth("player") / 1000, UnitHealthMax("player") / 1000); -end - -TRIGGER -function() - return true -end - -DURATION -function() - local p = math.max(0, UnitHealth("player")) / math.max(1, UnitHealthMax("player")) * 100; - local missing_health = UnitHealthMax("player") - UnitHealth("player") - local b = UnitBuff("player", "Consecration") - local b2 = UnitBuff("player", "Avenging Wrath") - local b3 = UnitBuff("player", "Chain of Thrayn") - local b4 = UnitBuff("player", "Ilterendi, Crown Jewel of Silvermoon") - local versa = GetCombatRatingBonus(CR_VERSATILITY_DAMAGE_DONE) - local hotp_base_heal = 0.3 + (0.42 * 0.3) - local healing_multiplier = 1 + (versa / 100) - if b == "Consecration" then - hotp_base_heal = hotp_base_heal + (0.3 * 0.3) - end - if b3 == "Chain of Thrayn" then - healing_multiplier = healing_multiplier + 0.5 - end - if b2 == "Avenging Wrath" then - healing_multiplier = healing_multiplier + 0.35 - end - if b4 == "Ilterendi, Crown Jewel of Silvermoon" then - healing_multiplier = healing_multiplier + 0.2 - end - local absolute_healing_only_hotp = missing_health * hotp_base_heal - if healing_multiplier > 2 then healing_multiplier = 2 end - local final_heal_absolute = absolute_healing_only_hotp * healing_multiplier - local final_heal_relative = math.floor((final_heal_absolute / UnitHealthMax("player"))*100) - local heal_percentage = math.floor((final_heal_absolute / missing_health) * 100) - --print(heal_percentage) - local new = p + final_heal_relative - return new,100,true; -end - -NAME -function() - local p = math.max(0, UnitHealth("player")) / math.max(1, UnitHealthMax("player")) * 100; - local missing_health = UnitHealthMax("player") - UnitHealth("player") - local b = UnitBuff("player", "Consecration") - local b2 = UnitBuff("player", "Avenging Wrath") - local b3 = UnitBuff("player", "Chain of Thrayn") - local b4 = UnitBuff("player", "Ilterendi, Crown Jewel of Silvermoon") - local versa = GetCombatRatingBonus(CR_VERSATILITY_DAMAGE_DONE) - local hotp_base_heal = 0.3 + (0.36 * 0.3) - local healing_multiplier = 1 + (versa / 100) - if b == "Consecration" then - hotp_base_heal = hotp_base_heal + (0.3 * 0.3) - end - if b3 == "Chain of Thrayn" then - healing_multiplier = healing_multiplier + 0.5 - end - if b2 == "Avenging Wrath" then - healing_multiplier = healing_multiplier + 0.35 - end - if b4 == "Ilterendi, Crown Jewel of Silvermoon" then - healing_multiplier = healing_multiplier + 0.2 - end - local absolute_healing_only_hotp = missing_health * hotp_base_heal - if healing_multiplier > 2 then healing_multiplier = 2 end - local final_heal_absolute = absolute_healing_only_hotp * healing_multiplier - local final_heal_relative = math.floor((final_heal_absolute / UnitHealthMax("player"))*100) - local heal_percentage = math.floor((final_heal_absolute / missing_health) * 100) - --print(heal_percentage) - local new = p + final_heal_relative - return string.format("%.f", p) .. " " .. string.format("%.f", new) .. " " .. string.format("+%.f", final_heal_relative) -end - +DISPLAY +function() + return ("%.0fk / %.0fk"):format(UnitHealth("player") / 1000, UnitHealthMax("player") / 1000); +end + +TRIGGER +function() + return true +end + +DURATION +function() + local p = math.max(0, UnitHealth("player")) / math.max(1, UnitHealthMax("player")) * 100; + local missing_health = UnitHealthMax("player") - UnitHealth("player") + local b = UnitBuff("player", "Consecration") + local b2 = UnitBuff("player", "Avenging Wrath") + local b3 = UnitBuff("player", "Chain of Thrayn") + local b4 = UnitBuff("player", "Ilterendi, Crown Jewel of Silvermoon") + local versa = GetCombatRatingBonus(CR_VERSATILITY_DAMAGE_DONE) + local hotp_base_heal = 0.3 + (0.42 * 0.3) + local healing_multiplier = 1 + (versa / 100) + if b == "Consecration" then + hotp_base_heal = hotp_base_heal + (0.3 * 0.3) + end + if b3 == "Chain of Thrayn" then + healing_multiplier = healing_multiplier + 0.5 + end + if b2 == "Avenging Wrath" then + healing_multiplier = healing_multiplier + 0.35 + end + if b4 == "Ilterendi, Crown Jewel of Silvermoon" then + healing_multiplier = healing_multiplier + 0.2 + end + local absolute_healing_only_hotp = missing_health * hotp_base_heal + if healing_multiplier > 2 then healing_multiplier = 2 end + local final_heal_absolute = absolute_healing_only_hotp * healing_multiplier + local final_heal_relative = math.floor((final_heal_absolute / UnitHealthMax("player"))*100) + local heal_percentage = math.floor((final_heal_absolute / missing_health) * 100) + --print(heal_percentage) + local new = p + final_heal_relative + return new,100,true; +end + +NAME +function() + local p = math.max(0, UnitHealth("player")) / math.max(1, UnitHealthMax("player")) * 100; + local missing_health = UnitHealthMax("player") - UnitHealth("player") + local b = UnitBuff("player", "Consecration") + local b2 = UnitBuff("player", "Avenging Wrath") + local b3 = UnitBuff("player", "Chain of Thrayn") + local b4 = UnitBuff("player", "Ilterendi, Crown Jewel of Silvermoon") + local versa = GetCombatRatingBonus(CR_VERSATILITY_DAMAGE_DONE) + local hotp_base_heal = 0.3 + (0.36 * 0.3) + local healing_multiplier = 1 + (versa / 100) + if b == "Consecration" then + hotp_base_heal = hotp_base_heal + (0.3 * 0.3) + end + if b3 == "Chain of Thrayn" then + healing_multiplier = healing_multiplier + 0.5 + end + if b2 == "Avenging Wrath" then + healing_multiplier = healing_multiplier + 0.35 + end + if b4 == "Ilterendi, Crown Jewel of Silvermoon" then + healing_multiplier = healing_multiplier + 0.2 + end + local absolute_healing_only_hotp = missing_health * hotp_base_heal + if healing_multiplier > 2 then healing_multiplier = 2 end + local final_heal_absolute = absolute_healing_only_hotp * healing_multiplier + local final_heal_relative = math.floor((final_heal_absolute / UnitHealthMax("player"))*100) + local heal_percentage = math.floor((final_heal_absolute / missing_health) * 100) + --print(heal_percentage) + local new = p + final_heal_relative + return string.format("%.f", p) .. " " .. string.format("%.f", new) .. " " .. string.format("+%.f", final_heal_relative) +end + diff --git a/Complete Projects/Legion/HoTP heal bars/2.0/HP1 2.0.lua b/WeakAuras/Projects/HoTP heal bars/2.0/HP1 2.0.lua similarity index 97% rename from Complete Projects/Legion/HoTP heal bars/2.0/HP1 2.0.lua rename to WeakAuras/Projects/HoTP heal bars/2.0/HP1 2.0.lua index 4d35769..440b102 100644 --- a/Complete Projects/Legion/HoTP heal bars/2.0/HP1 2.0.lua +++ b/WeakAuras/Projects/HoTP heal bars/2.0/HP1 2.0.lua @@ -1,79 +1,79 @@ ---HoTP 2.0 -TRIGGER -function() - return true -end - -ICON --Trigger for scripts -function() - aura_env.percentageHealth = aura_env.round((UnitHealth("player") / UnitHealthMax("player")) * 100, 0) - aura_env.currentHealth = UnitHealth("player") - aura_env.maxHealth = UnitHealthMax("player") - aura_env.missingHealthPercentage = aura_env.round(((UnitHealthMax("player") - UnitHealth("player")) / UnitHealthMax("player")) * 100, 2) - aura_env.missingHealth = UnitHealthMax("player") - UnitHealth("player") - local healingMultiplier = 1. - local versa = GetCombatRatingBonus(CR_VERSATILITY_DAMAGE_DONE) - healingMultiplier = healingMultiplier + (healingMultiplier * (aura_env.traitLevel * aura_env.traitEffectiveness)) + (healingMultiplier * (versa / 100)) - for k,v in pairs(aura_env.buffs) do - if UnitBuff("player", k) ~= nil then - healingMultiplier = healingMultiplier + (healingMultiplier * v) - end - end - local talent = select(10, GetTalentInfoByID(22430)) - if talent == true then - healingMultiplier = healingMultiplier + (healingMultiplier * 0.3) - end - aura_env.hotpRelativeHeal = 0.3 * healingMultiplier --How much % hotp heals disregarding missing health - aura_env.hotpAbsoluteRelativeHeal = aura_env.hotpRelativeHeal * aura_env.missingHealthPercentage --How much % hp hotp will heal regarding missing health - aura_env.hotpAbsoluteHeal = aura_env.round(aura_env.hotpRelativeHeal * aura_env.missingHealth, 0) - aura_env.newApsoluteHealth = aura_env.round(aura_env.currentHealth + aura_env.hotpAbsoluteHeal, 0) - aura_env.newRelativeHealth = aura_env.round(aura_env.percentageHealth + aura_env.hotpAbsoluteRelativeHeal, 0) - --print(healingMultiplier,aura_env.hotpRelativeHeal,aura_env.hotpAbsoluteRelativeHeal,aura_env.hotpAbsoluteHeal,aura_env.newApsoluteHealth,aura_env.newRelativeHealth) --DEBUG - --print(aura_env.hotpAbsoluteRelativeHeal, aura_env.newRelativeHealth, aura_env.percentageHealth) --DEBUG - --print(aura_env.hotpAbsoluteHeal, aura_env.newApsoluteHealth, aura_env.currentHealth) --DEBUG - --print(aura_env.round(aura_env.hotpRelativeHeal * 100, 0)) --% of health hotp heals -end - -DURATION -function() - return aura_env.percentageHealth, 100, 1 -end - -NAME -function() - return aura_env.percentageHealth .. " " .. aura_env.newRelativeHealth .. " +" .. aura_env.round(aura_env.hotpAbsoluteRelativeHeal, 0) -end - -DISPLAY -function() - return ("%.0fk / %.0fk"):format(UnitHealth("player") / 1000, UnitHealthMax("player") / 1000); -end - -INIT -aura_env.traitLevel = 7 -aura_env.traitEffectiveness = 0.06 -aura_env.buffs = -{ - ["Consecration"] = 0.3, - ["Avenging Wrath"] = 0.35, - ["Chains of Thrayn"] = 0.5, - ["Ilterendi, Crown Jewel of Silvermoon"] = 0.15 -} -aura_env.round = function(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var -end -aura_env.percentageHealth = 0 -aura_env.currentHealth = 0 -aura_env.maxHealth = 0 -aura_env.hotpRelativeHeal = 0 -aura_env.hotpAbsoluteRelativeHeal = 0 -aura_env.hotpAbsoluteHeal = 0 -aura_env.newApsoluteHealth = 0 -aura_env.newRelativeHealth = 0 -aura_env.missingHealth = 0 +--HoTP 2.0 +TRIGGER +function() + return true +end + +ICON --Trigger for scripts +function() + aura_env.percentageHealth = aura_env.round((UnitHealth("player") / UnitHealthMax("player")) * 100, 0) + aura_env.currentHealth = UnitHealth("player") + aura_env.maxHealth = UnitHealthMax("player") + aura_env.missingHealthPercentage = aura_env.round(((UnitHealthMax("player") - UnitHealth("player")) / UnitHealthMax("player")) * 100, 2) + aura_env.missingHealth = UnitHealthMax("player") - UnitHealth("player") + local healingMultiplier = 1. + local versa = GetCombatRatingBonus(CR_VERSATILITY_DAMAGE_DONE) + healingMultiplier = healingMultiplier + (healingMultiplier * (aura_env.traitLevel * aura_env.traitEffectiveness)) + (healingMultiplier * (versa / 100)) + for k,v in pairs(aura_env.buffs) do + if UnitBuff("player", k) ~= nil then + healingMultiplier = healingMultiplier + (healingMultiplier * v) + end + end + local talent = select(10, GetTalentInfoByID(22430)) + if talent == true then + healingMultiplier = healingMultiplier + (healingMultiplier * 0.3) + end + aura_env.hotpRelativeHeal = 0.3 * healingMultiplier --How much % hotp heals disregarding missing health + aura_env.hotpAbsoluteRelativeHeal = aura_env.hotpRelativeHeal * aura_env.missingHealthPercentage --How much % hp hotp will heal regarding missing health + aura_env.hotpAbsoluteHeal = aura_env.round(aura_env.hotpRelativeHeal * aura_env.missingHealth, 0) + aura_env.newApsoluteHealth = aura_env.round(aura_env.currentHealth + aura_env.hotpAbsoluteHeal, 0) + aura_env.newRelativeHealth = aura_env.round(aura_env.percentageHealth + aura_env.hotpAbsoluteRelativeHeal, 0) + --print(healingMultiplier,aura_env.hotpRelativeHeal,aura_env.hotpAbsoluteRelativeHeal,aura_env.hotpAbsoluteHeal,aura_env.newApsoluteHealth,aura_env.newRelativeHealth) --DEBUG + --print(aura_env.hotpAbsoluteRelativeHeal, aura_env.newRelativeHealth, aura_env.percentageHealth) --DEBUG + --print(aura_env.hotpAbsoluteHeal, aura_env.newApsoluteHealth, aura_env.currentHealth) --DEBUG + --print(aura_env.round(aura_env.hotpRelativeHeal * 100, 0)) --% of health hotp heals +end + +DURATION +function() + return aura_env.percentageHealth, 100, 1 +end + +NAME +function() + return aura_env.percentageHealth .. " " .. aura_env.newRelativeHealth .. " +" .. aura_env.round(aura_env.hotpAbsoluteRelativeHeal, 0) +end + +DISPLAY +function() + return ("%.0fk / %.0fk"):format(UnitHealth("player") / 1000, UnitHealthMax("player") / 1000); +end + +INIT +aura_env.traitLevel = 7 +aura_env.traitEffectiveness = 0.06 +aura_env.buffs = +{ + ["Consecration"] = 0.3, + ["Avenging Wrath"] = 0.35, + ["Chains of Thrayn"] = 0.5, + ["Ilterendi, Crown Jewel of Silvermoon"] = 0.15 +} +aura_env.round = function(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var +end +aura_env.percentageHealth = 0 +aura_env.currentHealth = 0 +aura_env.maxHealth = 0 +aura_env.hotpRelativeHeal = 0 +aura_env.hotpAbsoluteRelativeHeal = 0 +aura_env.hotpAbsoluteHeal = 0 +aura_env.newApsoluteHealth = 0 +aura_env.newRelativeHealth = 0 +aura_env.missingHealth = 0 aura_env.missingHealthPercentage = 0 \ No newline at end of file diff --git a/Complete Projects/Legion/HoTP heal bars/2.0/HP2 2.0.lua b/WeakAuras/Projects/HoTP heal bars/2.0/HP2 2.0.lua similarity index 97% rename from Complete Projects/Legion/HoTP heal bars/2.0/HP2 2.0.lua rename to WeakAuras/Projects/HoTP heal bars/2.0/HP2 2.0.lua index 79c095d..5177d74 100644 --- a/Complete Projects/Legion/HoTP heal bars/2.0/HP2 2.0.lua +++ b/WeakAuras/Projects/HoTP heal bars/2.0/HP2 2.0.lua @@ -1,69 +1,69 @@ ---HoTP 2.0 -TRIGGER -function() - return true -end - -ICON --Trigger for scripts -function() - aura_env.percentageHealth = aura_env.round((UnitHealth("player") / UnitHealthMax("player")) * 100, 0) - aura_env.currentHealth = UnitHealth("player") - aura_env.maxHealth = UnitHealthMax("player") - aura_env.missingHealthPercentage = aura_env.round(((UnitHealthMax("player") - UnitHealth("player")) / UnitHealthMax("player")) * 100, 2) - aura_env.missingHealth = UnitHealthMax("player") - UnitHealth("player") - local healingMultiplier = 1. - local versa = GetCombatRatingBonus(CR_VERSATILITY_DAMAGE_DONE) - healingMultiplier = healingMultiplier + (healingMultiplier * (aura_env.traitLevel * aura_env.traitEffectiveness)) + (healingMultiplier * (versa / 100)) - for k,v in pairs(aura_env.buffs) do - if UnitBuff("player", k) ~= nil then - healingMultiplier = healingMultiplier + (healingMultiplier * v) - end - end - local talent = select(10, GetTalentInfoByID(22430)) - if talent == true then - healingMultiplier = healingMultiplier + (healingMultiplier * 0.3) - end - aura_env.hotpRelativeHeal = 0.3 * healingMultiplier --How much % hotp heals disregarding missing health - aura_env.hotpAbsoluteRelativeHeal = aura_env.hotpRelativeHeal * aura_env.missingHealthPercentage --How much % hp hotp will heal regarding missing health - aura_env.hotpAbsoluteHeal = aura_env.round(aura_env.hotpRelativeHeal * aura_env.missingHealth, 0) - aura_env.newApsoluteHealth = aura_env.round(aura_env.currentHealth + aura_env.hotpAbsoluteHeal, 0) - aura_env.newRelativeHealth = aura_env.round(aura_env.percentageHealth + aura_env.hotpAbsoluteRelativeHeal, 0) - --print(healingMultiplier,aura_env.hotpRelativeHeal,aura_env.hotpAbsoluteRelativeHeal,aura_env.hotpAbsoluteHeal,aura_env.newApsoluteHealth,aura_env.newRelativeHealth) --DEBUG - --print(aura_env.hotpAbsoluteRelativeHeal, aura_env.newRelativeHealth, aura_env.percentageHealth) --DEBUG - --print(aura_env.hotpAbsoluteHeal, aura_env.newApsoluteHealth, aura_env.currentHealth) --DEBUG - --print(aura_env.round(aura_env.hotpRelativeHeal * 100, 0)) --% of health hotp heals -end - -DURATION -function() - return aura_env.newRelativeHealth, 100, 1 -end - -INIT -aura_env.traitLevel = 7 -aura_env.traitEffectiveness = 0.06 -aura_env.buffs = -{ - ["Consecration"] = 0.3, - ["Avenging Wrath"] = 0.35, - ["Chains of Thrayn"] = 0.5, - ["Ilterendi, Crown Jewel of Silvermoon"] = 0.15 -} -aura_env.round = function(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var -end -aura_env.percentageHealth = 0 -aura_env.currentHealth = 0 -aura_env.maxHealth = 0 -aura_env.hotpRelativeHeal = 0 -aura_env.hotpAbsoluteRelativeHeal = 0 -aura_env.hotpAbsoluteHeal = 0 -aura_env.newApsoluteHealth = 0 -aura_env.newRelativeHealth = 0 -aura_env.missingHealth = 0 +--HoTP 2.0 +TRIGGER +function() + return true +end + +ICON --Trigger for scripts +function() + aura_env.percentageHealth = aura_env.round((UnitHealth("player") / UnitHealthMax("player")) * 100, 0) + aura_env.currentHealth = UnitHealth("player") + aura_env.maxHealth = UnitHealthMax("player") + aura_env.missingHealthPercentage = aura_env.round(((UnitHealthMax("player") - UnitHealth("player")) / UnitHealthMax("player")) * 100, 2) + aura_env.missingHealth = UnitHealthMax("player") - UnitHealth("player") + local healingMultiplier = 1. + local versa = GetCombatRatingBonus(CR_VERSATILITY_DAMAGE_DONE) + healingMultiplier = healingMultiplier + (healingMultiplier * (aura_env.traitLevel * aura_env.traitEffectiveness)) + (healingMultiplier * (versa / 100)) + for k,v in pairs(aura_env.buffs) do + if UnitBuff("player", k) ~= nil then + healingMultiplier = healingMultiplier + (healingMultiplier * v) + end + end + local talent = select(10, GetTalentInfoByID(22430)) + if talent == true then + healingMultiplier = healingMultiplier + (healingMultiplier * 0.3) + end + aura_env.hotpRelativeHeal = 0.3 * healingMultiplier --How much % hotp heals disregarding missing health + aura_env.hotpAbsoluteRelativeHeal = aura_env.hotpRelativeHeal * aura_env.missingHealthPercentage --How much % hp hotp will heal regarding missing health + aura_env.hotpAbsoluteHeal = aura_env.round(aura_env.hotpRelativeHeal * aura_env.missingHealth, 0) + aura_env.newApsoluteHealth = aura_env.round(aura_env.currentHealth + aura_env.hotpAbsoluteHeal, 0) + aura_env.newRelativeHealth = aura_env.round(aura_env.percentageHealth + aura_env.hotpAbsoluteRelativeHeal, 0) + --print(healingMultiplier,aura_env.hotpRelativeHeal,aura_env.hotpAbsoluteRelativeHeal,aura_env.hotpAbsoluteHeal,aura_env.newApsoluteHealth,aura_env.newRelativeHealth) --DEBUG + --print(aura_env.hotpAbsoluteRelativeHeal, aura_env.newRelativeHealth, aura_env.percentageHealth) --DEBUG + --print(aura_env.hotpAbsoluteHeal, aura_env.newApsoluteHealth, aura_env.currentHealth) --DEBUG + --print(aura_env.round(aura_env.hotpRelativeHeal * 100, 0)) --% of health hotp heals +end + +DURATION +function() + return aura_env.newRelativeHealth, 100, 1 +end + +INIT +aura_env.traitLevel = 7 +aura_env.traitEffectiveness = 0.06 +aura_env.buffs = +{ + ["Consecration"] = 0.3, + ["Avenging Wrath"] = 0.35, + ["Chains of Thrayn"] = 0.5, + ["Ilterendi, Crown Jewel of Silvermoon"] = 0.15 +} +aura_env.round = function(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var +end +aura_env.percentageHealth = 0 +aura_env.currentHealth = 0 +aura_env.maxHealth = 0 +aura_env.hotpRelativeHeal = 0 +aura_env.hotpAbsoluteRelativeHeal = 0 +aura_env.hotpAbsoluteHeal = 0 +aura_env.newApsoluteHealth = 0 +aura_env.newRelativeHealth = 0 +aura_env.missingHealth = 0 aura_env.missingHealthPercentage = 0 \ No newline at end of file diff --git a/Complete Projects/Legion/HoTP heal bars/3.0/AAAAAA.txt b/WeakAuras/Projects/HoTP heal bars/3.0/AAAAAA.txt similarity index 99% rename from Complete Projects/Legion/HoTP heal bars/3.0/AAAAAA.txt rename to WeakAuras/Projects/HoTP heal bars/3.0/AAAAAA.txt index 600a980..ee929c1 100644 --- a/Complete Projects/Legion/HoTP heal bars/3.0/AAAAAA.txt +++ b/WeakAuras/Projects/HoTP heal bars/3.0/AAAAAA.txt @@ -1,4 +1,4 @@ - - - dufqZbGifYLiqYNuufnkcQtrjSkfkLxrGWSaIBHGAxcv)srvyyiQJbults1ZqetdbUgqABeKVHq14auohcfRdHsVJarL5rGOCpHu7tHsCquWcvuEOqPjQqXfrrTrjfFurvAKiKtkKSsu6LkQkzMskDteKDcv)erAOOqlLa1tLAQq5Qcf2kbs9vavJvHs1zjqu1BbKMRcv3fqSxv)vrgmOdJ0IPKEmLAYe6YK2Ss6ZsYOvIttXQvuv8AuKzRu3wb7gv)wWWb44kuslhYZjA6uDDj2Uq8DfvgpbCEkrRxOO3ROQuZxrv19jqK9l6d(yVPh7(B576XjioyI)E4T4BXJ9gPvMahZsa67kuOa4n12nrumKPQsrekiQhN8BvaauUOk(zVTK01vP6hNWGjG8BQOOXnboDp5itvLIKh7(BPUxzmy4(7zKIHrkHQL5AWEBeFZik4jeaDttO1YElxmEcJkHspS13uU9savdIoOywcqF3mxlZXIvJGzGqm)MxgWqMQkfjpo437av8yVD6w5E9J9EOSDZXUF)Tt3k3p27HY2nh7(932BQuES3sdVARVzKHAzymrHF)DrQt2BQu(2rf9nIARh79qz7MJD)(BuyRh79qz7MJD)(7vQTBc8J9EOSDZXUF)nGiaC6w5(XEpu2U5y3V)w0SUASlB3YJ9EOSDZXUF)(932h74Gp2BxfWRztRKVjngy1gfoZVfG01vP6hNWaR(BljDDvQ(Xjmj1FBLAZufku4IXg2b0Xoo4Jd(41po4JtYXbFCcEnGsCHiqiWKfcmOeaMSqad0Vsyqf6(71a3RztRKVjngy1gfoZVL6ELXGH7VXiLX3wPOyd7a6yhV(XjhN41bdQqatO6eNaqjtma74K8AagjKiezItGqKjGeGrCItaX)kHbf07VbGcvivkzeP2gPjWpobV3bQ4XExK6ea1TsDFR367IuN4AefDRVT3uP8yVLgE1wFZid1YWyIc)(7IuNS3uP8ZEJO26XEpu2U5y3V)Ui1jja1(ZE70TY96h79qz7MJD)(BNUvUFS3dLTBo297VlsDkIUyS36T(wcqTp2BPHxT1Jx)(BrZ6QXUSDlp27HY2nh7(93aIaWPBL7h79qz7MJD)(7vQTBc8J9EOSDZXUF)DrQt2HbRu)ZEJcB9yVhkB3CS73FxK6eNoO3693YHqWxyefQqQu(zVrALjWXSeG(MwquRu0BPtTzsERVnCJpzhgaSvxfpo43UkGxq6BbDzzmHes4eY4MA4je4lgxF7QaEnbU)EmbKrYiJVJzimCCYXj5TeafX0N92ndkQMa3FZGyeL7fK(wcGIyk2WoGo2XbFCYhV(XjFCsoo57VfnY5tHB7Mi6Bk3Y32fPhgWub83RfUTBcCHNazceawKSjmHjmHM1eciHuUycbKWC(JoHKtiLlMqajmN)ObNqFr5jePEbXtiGeQCXKnHjmHjePEbXt48CEMSkxmzt2Knzt2Knzt23uB3erXqMQkfrOGOECcdM8BxfWBtm1JdM4VTd7a6y3F7itvLIo27IuNgOU9Ikk4cxV13fPozVqrvQ8ZExK6eshOgUHxDRVTlspm8ETWTDtGlSfjBctyctis9cINqhv0Kv5IjBYMSjBYMSjBYMSjBYMSjBYMSjBY(2Ui9WW0IruFBxKEy4T9IAZ07carQRVTxOOkv(g8BnIYD57yjLqZyaBQwsN3jMf0mJJnfd8AIQwmMfmZJ5T9cfvPYPaafr9a69yj63ULa032fPhgEx4AeL7VPfp8Ui1j5syos5F2B7I0ddJPGOUjWFVw42UjWf2IKnHjmHjChSP7eAVqrvQeKjqKof5Giwqjm6eoVQ3a09o2fkQsLcdkjcrMSfjBctyctOznH2luuLktOGmWj0xuEcrQxq8ekwqGiDkYfeIfucvUyYMWeMWeAwtO9cfvPYeowIoHGtOVO8eIuVG4jKmiGbXrfnHkxmztyctycrQxq8ecgeWG4OIMSkxmzt2Knzt2Knzt2Knzt2Knzt2Knzt2KnzFBxKEyyYTeG(w6uViFJu6UbO7noDqF3lgDlMWWAc9fnHc2uT4AOiFxK6KeGU340b9ZExK6uHB8p7TCjmhP83YLWCmSNJAP8TeGU340b94GsIqKjF)TeafXeHmiuaDRVTgqIkI01vP6hNG3fUJmvvk6yVLlH5iL)wUeMJH9CulLVTlspm8ETWTDtGlSfjBctyctis9cINWv6wQjRYft2Knzt2K9TeGU340b94GsIqKjF)THB8jPtrUkECWVxut1I)AagbeqqDqfcyGjoOGRtajG)kHjGyE7MbfvZMwjFtisXjnwIemPeI55hJOOID(I0yGvBu4m)MxgWqMQkfjpo43sauetZ2kxKqbr99SAzgFmVTsTzsefaeByhqh74Gpo5Jx)4KpojhN8Xj44GV)2yh436BrJeWMAjMkGxRU6VtOGY(9CgrF54aJ8BRbKOIInSdOJDCWhN8XRFCYhNKJt(4eCCW3FBnGevuuCP6hh8BRbKOI(S3wdirfXSyL(E22eZysrIjm2fQNWzfRw36BQOOXnboDp5itvLIKh7(BRbKOIAtm1Jx)TXoWNKgr9DTmxd2BjakIjIut1IF861FBnGev0mQntIOaG3DyBeF7MbfDRVLaOiMaUr0xoE93gX3DWfCcJDHIQ0ec(9kIoOTJOo94K8MA7MaxES3gUXp2BXWKDr6HHp7TDr6HH3axPmXqbrLXrALjWLaLwq0jLhjUreiXrALjWJBLIIVwrST6yQaEbPcpkkUROvQTo(4ZkUh4YXhh4effgZaBSdSrwKSaxPmXqbrLXrALjWLaLwq0jLhjUreiXrALjWJBLIIBTIyB1Xub8csfEuuCxrRuBD8XNvCpWLJpoWjkkmMb2yhyJSizPfeDs5rIVg4oi0cIoP8iXxdCFsAIPccTGOtkps81a3Nw30kzcJoHaxPmXqbrLXrALjWLaLwq0jLhjUreiXrALjWJ7QaoXoVQxtG7cBrYcCLYedfevghPvMaxcuAbrNuEK4grGehPvMapURc4eBREnbUlmTGOtkps81a3bHwq0jLhj(AG7tstmvqgrAmWQnkCMhzrYcCLYedfevghPvMaxcuAbrNuEK4grGehPvMapURc4eBREVqfdZr66QuDHRdscjmylUF)THhrrs9ZElbqrmHPc4fK(okUROvQToodIIKYLJdCLYedfevooHurdDCmvaVGu549yTqr6eWxmUE)41p2BjakIjGBe9LJx)TLKUUkv)4eMK6VTgqIkk2WoGo2XbFCYhV(XjFCsoo5JtWXbF)TXoWV13RbUxZMwjFtAmWQnkCMFl19kJbd3FJrkJVTsrXg2b0Xoo4xdWecyetDIbyGjtaOeNeHec8xjmOKC86VgHeImO1joXqaOKqaXfI41j4RegusoojVgcaLyatmKbfuY1jaSqedWa)vcdkb3FdafQqQuYisTnstGFCcEVduXJ9Ui1jaQBL6(wV13fPoX1ik6wFBVPs5XEln8QT(MrgQLHXef(93fPozVPs5N9gf26XEpu2U5y3V)Ui1jja1(ZE70TY96h79qz7MJD)(BNUvUFS3dLTBo297VlsDkIUyS36T(wcqTp2BPHxT1Jx)(7IuN40b9wFdicaNUvUFS3dLTBo297VxP2UjWp27HY2nh7(93fPozhgSs9p7nIARh79qz7MJD)(BrZ6QXUSDlp27HY2nh7(97VLdHGVWikuHuP8ZEJ0ktGJzja9nTGOwPO3sNAZK8wFB4gFYomayRUkECWVDvaVG03c6YYycjKWjKXn1WtiWxmU(2vb8AcC)9yciJKrgFlbqrmHPc4fK(okUROvQToodIIKYLJdCLYedfevooHurdDCmvaVGu549yTqr6eWxmU(wcGIy6ZE7MbfvtG7VzqmIY9csFBnGevuuCP6hh8BrJC(u42UjI(MYT8TDr6Hbmva)9AHB7Max4jqMabGfjBctyctOznHasiLlMqajmN)Oti5es5IjeqcZ5pAWj0xuEcrQxq8eciHkxmztyctycrQxq8eopNNjRYft2Knzt2Knzt2K9n12nrumKPQsrekiQhNWGj)w0ibSPwIPc41QR(7ekOSF7itvLIo27IuNgOU9Ikk4cxV13fPozVqrvQ8ZEBVqrvQ8n43AeL7Y3XskHMXa2uTKoVtmlOzghBkg41evTymlyMhZB7I0ddtlgr9TDr6HH3YLWCKYFlxcZXWEoQLY3fPoH0bQHB4v36B7I0ddVxlCB3e4cBrYMWeMWeIuVG4j0rfnzvUyYMSjBYMSjBYMSjBYMSjBYMSjBYMSVTxOOkvofaOiQhqVhlr)2TeG(2Ui9WW7cxJOC)nT4H3fPojxcZrk)ZEBxKEyymfe1nb(71c32nbUWwKSjmHjmH7GnDNq7fkQsLGmbI0PiheXckHrNW5v9gGU3XUqrvQuyqjriYKTiztyctycnRj0EHIQuzcJoAWj0xuEcrQxq8ekwqGiDkYfeIfucvUyYMWeMWeAwtO9cfvPYeowIoH1tOVO8eIuVG4jKmiGbXrfnHkxmztyctycrQxq8ecgeWG4OIMSkxmzt2Knzt2Knzt2Knzt2Knzt2Knzt2KnzFBxKEyyYTeG(w6uViFJu6UbO7noDqF3lgDlMWWAc9fnHc2uT4AOiFxK6KeGU340b9ZExK6uHB8p7T9IAZ07carQRVLa09gNoOhhuseIm57VP2UjWLh7THB8J9wmmzxKEy4ZEBxKEy4nWvktmuquzCKwzcCjqPfeDs5rIBebsCKwzc84wPO4RveBRoMkGxqQWJII7kALARJp(SI7bUC8XborrHXmWg7aBKfjlWvktmuquzCKwzcCjqPfeDs5rIBebsCKwzc84wPO4wRi2wDmvaVGuHhff3v0k1whF8zf3dC54JdCIIcJzGn2b2ilswAbrNuEK4RbUdcTGOtkps81a3NKMyQGqli6KYJeFnW9P1nTsMWOtiWvktmuquzCKwzcCjqPfeDs5rIBebsCKwzc84UkGtSZR61e4UWwKSaxPmXqbrLXrALjWLaLwq0jLhjUreiXrALjWJ7QaoX2QxtG7ctli6KYJeFnWDqOfeDs5rIVg4(K0etfKrKgdSAJcN5rwKSaxPmXqbrLXrALjWLaLwq0jLhjUreiXrALjWJ7QaoX2Q3luXWCKUUkvx46GKqcd2I73FB4gFs6uKRIhh8B3mOOB9TBguunBAL8nHifN0yjsWKsiMNFmIIk25lsJbwTrHZ8BjakIPzBLlsOGO(EwTmJpM3wP2mjIcaInSdOJDCWhN8XRFCYhNKJt(4eCCW3FB4ruKu)S3Xmegoo54K8EoJOVCCGr(T1asurF2BRbKOIywSsFpBBIzmPiXeg7c1t4SIvRB9T1asurKUUkv)4e82AajQO2et941FBeF3bxWjm2fkQsty93g7aFsAe131YCnyVDvaVnXupoyI)wcGIyIi1uT4hVE93UkGxZMwjFtAmWQnkCMFBnGev0mQntIOaG3DyBeFtffnUjWP7jhzQQuK8y3FBLAZufku4IXg2b0Xoo4Jd(41po4JtYXbFCcEnGsCHiqiWKfcmOeaMSqad0Vsyqf6(7veDqBhrD6Xj5nVmGHmvvksECWVlChzQQu0XElxcZrk)TCjmhd75OwkFBxKEy49AHB7Maxyls2eMWeMqK6fepHR0TutwLlMSjBYMSj7BjaDVXPd6XbLeHit((BjakIPyd7a6yhh8XjF86hN8Xj54KVF)4KCS3saueta3i6lhV(BbiDDvQ(Xbw93ws66Qu9JtysQ)2AajQOyd7a6yhh8XjF86hN8Xj54Kpobhh893g7a)wFVg4EnBAL8nPXaR2OWz(Tu3RmgmC)ngPm(2kffByhqh74GFnatiGrm1jgGbMmbGsCsesiWFLWGsYXR)AesiYGwN4edbGscbexiIxNGVsyqj54K8AiauIbmXqguqjxNaWcrmad8xjmOeC)nauOcPsjJi12inb(Xj49oqfp27IuNaOUvQ7B9wFxK6exJOOB9T9MkLh7T0WR26BgzOwggtu43FxK6K9MkLF2Be1wp27HY2nh7(93fPojbO2F2BNUvUx)yVhkB3CS73F70TY9J9EOSDZXUF)DrQtr0fJ9wV13saQ9XEln8QTE863FlAwxn2LTB5XEpu2U5y3V)gqeaoDRC)yVhkB3CS73FVsTDtGFS3dLTBo297VlsDYomyL6F2BuyRh79qz7MJD)(7IuN40b9wV)woec(cJOqfsLYp7nsRmboMLa030cIALIElDQntYB9THB8j7WaGT6Q4Xb)2vb8csFlOllJjKqcNqg3udpHaFX46BxfWRjW93JjGmsgz8DmdHHJtoojVDZGIQjW93migr5EbPVTgqIkkkUu9Jd(TOroFkCB3erFt5w(2Ui9WaMkG)ETWTDtGl8eitGaWIKnHjmHj0SMqajKYftiGeMZF0jKCcPCXeciH58hn4e6lkpHi1liEcbKqLlMSjmHjmHi1liEcNNZZKv5IjBYMSjBYMSjBY(MA7MikgYuvPicfe1JtyWKFlAKa2ulXub8A1v)Dcfu2VDKPQsrh7DrQtdu3ErffCHR367IuNSxOOkv(zVlsDcPdud3WRU132fPhgEVw42UjWf2IKnHjmHjePEbXtOJkAYQCXKnzt2Knzt2Knzt2Knzt2Knzt2KnzFlbO7noDqpoOKiezYVTxuBMExaisD9TBja9TDr6HH3AeL7Y3XskHMXa2uTKoVtmlOzghBkg41evTymlyMhZB7fkQsLtbakI6b07Xs0VTxOOkv(g87cxJOC)nT4H3fPojxcZrk)ZEBxKEyymfe1nb(71c32nbUWwKSjmHjmH7GnDNq7fkQsLGmbI0PiheXckHrNW5v9gGU3XUqrvQuyqjriYKTiztyctycnRj0EHIQuzcJo6ewpH(IYtis9cINqXccePtrUGqSGsOYft2eMWeMqZAcTxOOkvMWOJoHKKqFr5jePEbXtizqadIJkAcvUyYMWeMWeIuVG4jemiGbXrfnzvUyYMSjBYMSjBYMSjBYMSjBYMSjBYMSjBY(2Ui9WWKBja9T0PEr(gP0Ddq3BC6G(Uxm6wmHH1e6lAcfSPAX1qr(Ui1jjaDVXPd6N9Ui1Pc34F2B5syos5VLlH5yyph1s5B7I0ddtlgr9TDr6HH7VDvaVnXupoyI)2Wn(K0Pixfpo43Uzqr36B3mOOA20k5BcrkoPXsKGjLqmp)yefvSZxKgdSAJcN53sauetZ2kxKqbr99SAzgFmVTsTzsefaeByhqh74Gpo5Jx)4KpojhN8Xj44GV)2WJOiP(zVTgqIkI01vP6hNG3Zze9LJdmYVTgqIk6ZEBnGeveZIv67zBtmJjfjMWyxOEcNvSADRVLaOiMInSdOJDCWhN8XRFCYhNKJt((BRbKOIAtm1Jx)nvu04MaNUNCKPQsrYJD)TXoWNKgr9DTmxd2BQTBcC5XEB4g)yVfdt2fPhg(S32fPhgEdCLYedfevghPvMaxcuAbrNuEK4grGehPvMapUvkk(AfX2QJPc4fKk8OO4UIwP264JpR4EGlhFCGtuuymdSXoWgzrYcCLYedfevghPvMaxcuAbrNuEK4grGehPvMapUvkkU1kITvhtfWliv4rrXDfTsT1XhFwX9axo(4aNOOWygyJDGnYIKLwq0jLhj(AG7Gqli6KYJeFnW9jPjMki0cIoP8iXxdCFADtRKjm6ecCLYedfevghPvMaxcuAbrNuEK4grGehPvMapURc4e78QEnbUlSfjlWvktmuquzCKwzcCjqPfeDs5rIBebsCKwzc84UkGtST61e4UW0cIoP8iXxdCheAbrNuEK4RbUpjnXubzePXaR2OWzEKfjlWvktmuquzCKwzcCjqPfeDs5rIBebsCKwzc84UkGtST69cvmmhPRRs1fUoijKWGT4(93sauetePMQf)41R)2vb8A20k5BsJbwTrHZ8BRbKOIMrTzsefa8UdBJ4BJ47o4coHXUqrvAcj5TvQntvOqHlgByhqh74Gpo4Jx)4Gpojhh8Xj41akXfIaHatwiWGsayYcbmq)kHbvO7Vxr0bTDe1PhNK38YagYuvPi5Xb)UWDKPQsrh7TCjmhP83YLWCmSNJAP8TDr6HH3RfUTBcCHTiztyctycrQxq8eUs3snzvUyYMSjBYMSVLa09gNoOhhuseIm57VLaOiMWub8csFhf3v0k1whNbrrs5YXbUszIHcIkhNqQOHooMkGxqQC8ESwOiDc4lgxVFCco2BjakIjGBe9LJx)TaKUUkv)4eV(BljDDvQ(Xbd6BRbKOIInSdOJDCWhN8XRFCYhNKJt(4eCCW3FBSd8B99AG71SPvY3KgdSAJcN53fPIfcB3a4wFl19kJbd3Fl4OMxIWEBLIInSdOJDCWVgGraXjojcrazYeqGq1bdwOVsyqb941FnGckWitmKaMeY1jgsioOGs8Vsyqj54K8AaMqaJyQtmadmzcaL4KiKqG)kHbLK7VbGcvivkzeP2gPjWpobV3bQ4XExK6ea1TsDFR367IuN4Aef9zVT3uP8yVLgE1wFZid1YWyIc)(7IuNS3uP8ZEJO26XEpu2U5y3V)Ui1jja1(ZE70TY96h79qz7MJD)(BNUvUFS3dLTBo297VlsDkIUyS36T(wcqTp2BPHxT1Jx)(7IuN40b9wFdicaNUvUFS3dLTBo297VxP2UjWp27HY2nh7(93fPozhgSs9p7nkS1J9EOSDZXUF)TOzD1yx2ULh79qz7MJD)(93YHqWxyefQqQu(zVrALjWXSeG(MwquRu0BPtTzsERVnCJpzhgaSvxfpo43UkGxq6BbDzzmHes4eY4MA4je4lgxFhZqy44KJtYB3mOOAcC)ndIruUxq6BjakIPyd7a6yhh8XjF86hN8Xj54KV)w0iNpfUTBIOVP79B7I0ddyQa(71c32nbUWtGmbcals2eMWeMqZAcbKqkxmHasyo)rNqYjKYftiGeMZF0GtOVO8eIuVG4jeqcvUyYMWeMWeIuVG4jCEoptwLlMSjBYMSjBYMSj7BQTBIOyitvLIiuqupoHbt(TRc4TjM6Xbl0BhzQQu0XElAqQTBc831sAJ9Ui1PbQBVOIcUW1B9DrQtuRYaYkHcI6N9Ui1j7fkQsLF2BnIYD57yjLqZyaBQwsN3jMf0mJJnfd8AIQwmMfmZJ5TDr6HHPfJO(2Ui9WWB5syos5VLlH5iLhBiSfdZXFxK6KObP2UjW)S3fPoH0bQHB4v36B7I0ddVxlCB3e4cBrYMWeMWeIuVG4j0rfnzvUyYMSjBYMSjBYMSjBYMSjBYMSjBYMSVTlspmm5wcqFlDQxKVTxOOkvofaOiQhqVhlr)2EHIQu5BWVrkD3a09gNoOVjIYftyynH(IMqgrbxT9a6DrQtYLWCKY)S3sa6EJth0JxhmjcbA93AeL7VJne2IH54jKruOcPszcfUbO7TfVlCnIY930IhEBxKEyymfe1nb(71c32nbUWwKSjmHjmH7GnDNq7fkQsLGmbI0PiheXckHrNW5v9gGU3XUqrvQu46GjriqRBrYMWeMWeAwtO9cfvPYegD0GtOVO8eIuVG4juSGar6uKlielOeQCXKnHjmHj0SMq7fkQsLjCSeDcRNqFr5jePEbXtizqadIJkAcvUyYMWeMWeIuVG4jemiGbXrfnzvUyYMSjBYMSjBYMSjBYMSjBYMSjBYMSjBY(Ui1jjaDVXPd6N9Ui1Pc34F2B7f1MP3faIuxF7wcqFBxKEy4(BxfWV13wP2mvHcfUySHDaDSJd(4GpE9Jd(4KCCWhNGxdOexicecmzHadkbGjleWa9ReguHU)2oSdOJD)TBgu0T(2ndkQMnTs(MqKItASejysjeZZpgrrf78fPXaR2OWz(THhrrs9ZElbqrmnBRCrcfe13ZQLz8X82k1MjruaqSHDaDSJd(4KpE9Jt(4KCCYhNGJd((BjakIjmvaVG03rXDfTsT1XzquKuUCCGRuMyOGOYXjKkAOJJPc4fKkhVhRfksNa(IX13Zze9LJtCYVP2UjWLh7THB8J9wmmzxKEy4ZEBxKEy4nWvktmuquzCKwzcCjqPfeDs5rIBebsCKwzc84wPO4RveBRoMkGxqQWJII7kALARJp(SI7bUC8XborrHXmWg7aBKfjlWvktmuquzCKwzcCjqPfeDs5rIBebsCKwzc84wPO4wRi2wDmvaVGuHhff3v0k1whF8zf3dC54JdCIIcJzGn2b2ilswAbrNuEK4RbUdcTGOtkps81a3NKMyQGqli6KYJeFnW9P1nTsMWOtiWvktmuquzCKwzcCjqPfeDs5rIBebsCKwzc84UkGtSZR61e4UWwKSaxPmXqbrLXrALjWLaLwq0jLhjUreiXrALjWJ7QaoX2QxtG7ctli6KYJeFnWDqOfeDs5rIVg4(K0etfKrKgdSAJcN5rwKSaxPmXqbrLXrALjWLaLwq0jLhjUreiXrALjWJ7QaoX2Q3luXWCKUUkvx46GKqcd2I73Fx4oYuvPOJ9wUeMJu(B5syos5XgcBXWC83IgKA7Ma)DTK2yVTlspm8ETWTDtGlSfjBctyctis9cINWv6wQjRYft2Knzt2K9TeGU340b941btIqGw)(BRbKOI(S3wdirfXSyL(E22eZysrIjm2fQNWzfRw36BJ4BIcoJjm2fkQsty93wdirf1MyQhV(BJDGpjnI67AzUgS3sauetePMQf)4Gf6TRc41SPvY3KgdSAJcN53wdirfnJAZKika4Dh2gX3wdirfffxQ(Xb)MkkACtGt3toYuvPi5Xoo4J92rMQkfDS3ULa03sN6f57cxJOC)nT4H3YIvnIYDgr6QrG3nJmxBTVlsDY46aoDq)S3AeL7VJY1HeY8yTyaaqfFxK6uHB8p7TSyvJOCVlRRgbEpfldn2uJXGGXEBCDaNoOhhmbeuN4G(UWn(BaBQLk6TDr6HHPfJO(2ndQ493fUJmvvk6yVnUoGth0JdMacQtCqVF)(7veDqBhrD6Xj5nVmGHmvvksE86VnCJpjDkYvXJd(T1asurKUUkv)4e8w0ibSPwIPc41QR(7ekOSVFCqp2BxfWRztRKVjngy1gfoZVTK01vP6hhmOVTgqIkk2WoGo2XbFCYhV(XjFCsoo5JtWXbF)TXoWV13RbUxZMwjFtAmWQnkCMFBLIInSdOJDCWVgGraXjojcrazYeqGq1bdwOVsyqb941FnGckWitmKaMeY1jgsioOGs8Vsyqj54K8AaMqaJyQtmadmzcaL4KiKqG)kHbLK7VbGcvivkzeP2gPjWpobV3bQ4XExK6ea1TsDFR367IuN4Aef9zVT3uP8yVLgE1wFZid1YWyIc)(7IuNS3uP8ZEJO26XEpu2U5y3V)Ui1jja1(ZE70TY96h79qz7MJD)(BNUvUFS3dLTBo297VlsDkIUyS36T(wcqTp2BPHxT1Jx)(BrZ6QXUSDlp27HY2nh7(93aIaWPBL7h79qz7MJD)(7vQTBc8J9EOSDZXUF)DrQt2HbRu)ZEJcB9yVhkB3CS73FxK6eNoO3693YHqWxyefQqQu(zVrALjWXSeG(MwquRu0BPtTzsERVnCJpzhgaSvxfpo43UkGxq6BbDzzmHes4eY4MA4je4lgxF7QaEnbU)EmbKrYiJVTgqIkI01vP6hNG3Uzqr1e4(BgeJOCVG03wdirfffxQ(Xb)w0iNpfUTBIOVP79B7I0ddyQa(71c32nbUWtGmbcals2eMWeMqZAcbKqkxmHasyo)rNqYjKYftiGeMZF0GtOVO8eIuVG4jeqcvUyYMWeMWeIuVG4jCEoptwLlMSjBYMSjBYMSj7BQTBIOyitvLIiuqupoHbt(TRc4TjM6XbtWBhzQQu0XExK60a1Txurbx46T(Ui1j7fkQsLF27IuNq6a1Wn8QB9TDr6HH3RfUTBcCHTiztyctycrQxq8e6OIMSkxmzt2Knzt2Knzt2Knzt2Knzt2Knzt23sa6EJth0JdkjcrM8B7f1MP3faIuxFBVqrvQ8n43AeL7Y3XskHMXa2uTKoVtmlOzghBkg41evTymlyMhZB7fkQsLtbakI6b07Xs0VDlbOVTlspm82Ui9WWKBja9T0PEr(Ui1j5syos5F2B7I0ddJPGOUjWFVw42UjWf2IKnHjmHjChSP7eAVqrvQeKjqKof5Giwqjm6eoVQ3a09o2fkQsLcxhmjcbADls2eMWeMqZAcTxOOkvMqbzGtOVO8eIuVG4juSGar6uKlielOeQCXKnHjmHj0SMq7fkQsLjCSeDcbNqFr5jePEbXtizqadIJkAcvUyYMWeMWeIuVG4jemiGbXrfnztyctyctwLlMSjBYMSjBYMSjBYMSjBYMSjBYMSjBYMSjBYMSjBYMSjBYMSjBYMSVlCnIY930IhEJu6UbO7noDqF3lgDlMWWAc9fnHc2uT4AOiFxK6KeGU340b9ZExK6uHB8p7TCjmhP83YLWCmSNJAP8TDr6HHPfJO(2Ui9WW93saueteYGqb0T(wcGIyctfWli9DuCxrRuBDCgefjLlhh4kLjgkiQCCcPIg64yQaEbPYX7XAHI0jGVyC9n12nbU8yVnCJFS3IHj7I0ddF2B7I0ddVbUszIHcIkJJ0ktGlbkTGOtkpsCJiqIJ0ktGh3kffFTIyB1Xub8csfEuuCxrRuBD8XNvCpWLJpoWjkkmMb2yhyJSizbUszIHcIkJJ0ktGlbkTGOtkpsCJiqIJ0ktGh3kff3AfX2QJPc4fKk8OO4UIwP264JpR4EGlhFCGtuuymdSXoWgzrYsli6KYJeFnWDqOfeDs5rIVg4(K0etfeAbrNuEK4RbUpTUPvYegDcbUszIHcIkJJ0ktGlbkTGOtkpsCJiqIJ0ktGh3vbCIDEvVMa3f2IKf4kLjgkiQmosRmbUeO0cIoP8iXnIajosRmbECxfWj2w9AcCxyAbrNuEK4RbUdcTGOtkps81a3NKMyQGmI0yGvBu4mpYIKf4kLjgkiQmosRmbUeO0cIoP8iXnIajosRmbECxfWj2w9EHkgMJ01vP6cxhKesyWwC)(7f1uT4VgGrabeuN4eakjeuh06Gke5VsyciM3Uzqr1SPvY3eIuCsJLibtkHyE(XikQyNVingy1gfoZVJzimCCYXj5TeafX0STYfjuquFpRwMXhZBEzadzQQuK841FpNr0xooyci)2k1MPkuOWfJnSdOJDCWhh8XRFCWhNKJd(4e8AaL4crGqGjleyqjamzHagOFLWGk093wdirf9zVTgqIkIzXk99STjMXKIetySlupHZkwTU13IgjGn1smvaVwD1FNqbL9BRbKOIAtm1Jx)nvu04MaNUNCKPQsrYJDCWh7TJmvvk6yVDlbOVLo1lY3YIvnIY9USUAe49uSm0ytngdcg7DHRruU)Mw8W7IuNm8iksQF27IuNmUoGth0p7DHB83a2ulv0B7I0ddtULa03sN6f5BJRd40b94GjGG6eh03AeL7VJY1HeY8yTyaaqfFBVO2m9UaqK667IuNkCJ)zVLfRAeL7mI0vJaVBgzU2AFBxKEyyAXiQVDZGkE)DH7itvLIo2BJRd40b94GjGG6eh073V)2yh4tsJO(UwMRb7TeafXeWnI(YXR)wcGIyIi1uT4hVE93wdirfnJAZKika4Dh2gX3gX3efCgtySluuLMqWVTsTzsefaeByhqh74Gpo5Jx)4KpojhN8Xj44GV)Efrh02ruNECsE7MbfDRVlChzQQu0XElxcZrk)TCjmhd75OwkFBxKEy49AHB7Maxyls2eMWeMqK6fepHR0TutwLlMSjBYMSj7BjaDVXPd6XbLeHit((BdpIIK6N92Wn(K0Pixfpo43sauetXg2b0Xoo4Jt(41po5JtYXjF)(Xf6yVLaOiMaUr0xoE93cq66Qu9JtyIx)TLKUUkv)4Gb9TvQntvOqHlgByhqh74Gpo4Jx)4Gpojhh8Xj41akXfIaHatwiWGsayYcbmq)kHbvO7VxdCVMnTs(M0yGvBu4m)wQ7vgdgU)UwMRb7Tvkk2WoGo2Xb)AagbeN4KiebKjtabcvhmyH(kHbf0Jx)1akOaJmXqcysixNyiH4GckX)kHbLKJtYRbycbmIPoXamWKjauItIqcb(RegusU)gakuHuPKrKABKMa)4e8EhOIh7DrQtau3k19TERVlsDIRru0N92EtLYJ9wA4vB9nJmuldJjk87VlsDYEtLYp7nkS1J9EOSDZXUF)DrQtsaQ9N92PBL71p27HY2nh7(93oDRC)yVhkB3CS73FxK6ueDXyV1B9TeGAFS3sdVARhV(93fPoXPd6T(ELA7Ma)yVhkB3CS73FdicaNUvUFS3dLTBo297VlsDYomyL6F2Be1wp27HY2nh7(93IM1vJDz7wES3dLTBo2973FlhcbFHruOcPs5N9gPvMahZsa6BAbrTsrVLo1Mj5T(2Wn(KDyaWwDv84GF7QaEbPVf0LLXesiHtiJBQHNqGVyC9DmdHHJtoojVDZGIQjW93migr5EbPVLaOiMInSdOJDCWhN8XRFCYhNKJt((BrJC(u42UjI(MU3VTlspmGPc4VxlCB3e4cpbYeiaSiztyctycnRjeqcPCXeciH58hDcjNqkxmHasyo)rdoH(IYtis9cINqaju5IjBctyctis9cINW558mzvUyYMSjBYMSjBYMSVP2UjIIHmvvkIqbr94egm53IgjGn1smvaVwD1FNqbL9BhzQQu0XExK60a1Txurbx46T(Ui1j7fkQsLF2B3sa6B7I0ddVTlspm8ETWTDtGlSfjBctyctis9cINqhv0Kv5IjBYMSjBYMSjBYMSjBYMSjBYMSjBY(wcq3BC6GECqjriYKFlxcZrk)TCjmhd75OwkFBVqrvQ8n43AeL7Y3XskHMXa2uTKoVtmlOzghBkg41evTymlyMhZB7fkQsLtbakI6b07Xs0VlsDcPdud3WRU132fPhgMClbOVLo1lY3fPojxcZrk)ZEJu6UbO7noDqF3lgDlMWWAc9fnHc2uT4AOiFx4AeL7VPfp82Ui9WWykiQBc83RfUTBcCHTiztyctyc3bB6oH2luuLkbzcePtroiIfucJoHZR6naDVJDHIQuPW1btIqGw3IKnHjmHj0SMq7fkQsLjuqg4e6lkpHi1liEcfliqKof5ccXckHkxmztyctycnRj0EHIQuzchlrNqWj0xuEcrQxq8esgeWG4OIMqLlMSjmHjmHi1liEcbdcyqCurtwLlMSjBYMSjBYMSjBYMSjBYMSjBYMSjBYMSVlsDscq3BC6G(zVlsDQWn(N92ErTz6DbGi1132fPhgMwmI6B7I0dd3F7Qa(T(wcGIyIqgekGU13sauetyQaEbPVJI7kALARJZGOiPC54axPmXqbrLJtiv0qhhtfWlivoEpwluKob8fJRVTgqIkI01vP6hNG3wdirfffxQ(Xb)2ndk6wF7MbfvZMwjFtisXjnwIemPeI55hJOOID(I0yGvBu4m)wcGIyA2w5IekiQVNvlZ4J5THhrrs9ZEBnGev0mQntIOaG3DyBeFpNr0xooXj)2AajQOyd7a6yhh8XjF86hN8Xj54Kpobhh893wdirf9zVTgqIkIzXk99STjMXKIetySlupHZkwTU13uB3e4YJ92Wn(XElgMSlspm8zVTlspm8g4kLjgkiQmosRmbUeO0cIoP8iXnIajosRmbECRuu81kITvhtfWliv4rrXDfTsT1XhFwX9axo(4aNOOWygyJDGnYIKf4kLjgkiQmosRmbUeO0cIoP8iXnIajosRmbECRuuCRveBRoMkGxqQWJII7kALARJp(SI7bUC8XborrHXmWg7aBKfjlTGOtkps81a3bHwq0jLhj(AG7tstmvqOfeDs5rIVg4(06Mwjty0je4kLjgkiQmosRmbUeO0cIoP8iXnIajosRmbECxfWj25v9AcCxylswGRuMyOGOY4iTYe4sGsli6KYJe3icK4iTYe4XDvaNyB1RjWDHPfeDs5rIVg4oi0cIoP8iXxdCFsAIPcYisJbwTrHZ8ilswGRuMyOGOY4iTYe4sGsli6KYJe3icK4iTYe4XDvaNyB17fQyyosxxLQlCDqsiHbBX97VTgqIkQnXupE93urrJBcC6EYrMQkfjp2XbFS3oYuvPOJ9246aoDqpoyciOoXb9DHRruU)Mw8W7c34VbSPwQO3AeL7VJY1HeY8yTyaaqfFllw1ik3zePRgbE3mYCT1(wwSQruU3L1vJaVNILHgBQXyqWyVDlbOVLo1lY3fPov4g)ZExK6KX1bC6G(z3Fx4oYuvPOJ9246aoDqpoyciOoXb9(97Vn2b(K0iQVRL5AWElbqrmrKAQw8JdwO3UkGxZMwjFtAmWQnkCMFBeFtuWzmHXUqrvAcbhh03wP2mjIcaInSdOJDCWhN8XRFCYhNKJt(4eCCW3FVIOdA7iQtpojVn2b(T(UWDKPQsrh7TCjmhP83YLWCmSNJAP8TDr6HH3RfUTBcCHTiztyctycrQxq8eUs3snzvUyYMSjBYMSVLa09gNoOhhuseIm57V5LbmKPQsrYJx)THB8jPtrUkECWVDvaVnXupoyHUFCIFS3RbU3MyQhhmWElaPRRs1poHbl0Bk3EjGQbrh0Aq0b9nWvktmuqujXsuWzmHXUqrvActi44G(UWDKPQsrh7TeGU340b941btIqGw)(BKwzcCmlbOVDva)TOroFkCB3erFt373uB3erXqMQkfrOGOECcdM8Bd34t2HbaB1vXJd(nvu04MaNUNCKPQsrYJDCWh7TJmvvk6yVnUoGth0JdMacQtCqFllw1ik37Y6QrG3tXYqJn1ymiyS3fPozCDaNoOF2BnIY93r56qczESwmaaOIVLfRAeL7mI0vJaVBgzU2AFxK6uHB8p7TBja9T0PEr(UW1ik3FtlE4DHB83a2ulv093fUJmvvk6yVnUoGth0JdMacQtCqVF)(BJ47ydHTyyoEcd8eUeCajeCcjCcx09qcR)2rMQkfDS3fPozVqrvQ8ZElbO7noDqpEDWKieO1FBVqrvQCkaqrupGEli7TBja9T0PEr(2Ui9WW0IruF7Mbv8DHRruU)Mw8W7IuNKlH5iL)zVlsDQWn(N9wJOC)DSHWwmmhpHmIcvivktOWnaDVT4nsP7gGU340b9nruUycdRj0x0eYik4QThqVlsDscq3BC6G(zVTxOOkv(g8B5syos5VLlH5iLhBiSfdZXV)MYTxcOAq0bfZsa67M5AzowSAemdeI53Ri6G2oI60JtW75mI(YRHaHiGasiHaIriGvNG6GjUqFLWeq83aqHkKkLmIuBJ0e4hh871a3FpMaYizKX38YagYuvPi5XR)Ernvl(RbuYcjeOGswiqjausirisQ)vctaWEVduXJ92EtLYJ9wA4vB9nJmuldJjk87VlsDcG6wPUV1B9DrQtCnII(S3oDRC)yVhkB3CS73FxK6ueDXyV1B9TeGAFS3sdVARhV(93IM1vJDz7wES3dLTBo297VrHTES3dLTBo297VlsDYEtLYp7nIARh79qz7MJD)(Bara40TY9J9EOSDZXUF)9k12nb(XEpu2U5y3V)Ui1jja1(ZExK6KDyWk1)S3oDRCV(XEpu2U5y3VF)TLKUUkv)4cD)4a7yVxdCVnXupoyG9wasxxLQFCqf6nLBVeq1GOdAni6G(g4kLjgkiQKyjk4mMWyxOOknHjS(BljDDvQ(Xf6nsRmboMLa03UkG)w0iNpfUTBIOVP79BQTBIOyitvLIiuqupoHbt(THB8j7WaGT6Q4Xb)2rMQkfDS3fPozVqrvQ8ZEx4AeL7VPfp8wcq3BC6GE86GjriqR)2EHIQu5uaGIOEa9ESe9B3sa6BPt9I8DrQtYLWCKY)S3fPov4g)ZERruU)o2qylgMJNqgrHkKkLju4gGU3w8gP0Ddq3BC6G(MikxmHH1e6lAczefC12dO3fPojbO7noDq)S32luuLkFd(TCjmhP83YLWCKYJne2IH543FBeFhBiSfdZXtyGNWLGdiH1tiHt4IUhsy93urrJBcC6EYrMQkfjp2XbFS3oYuvPOJ92TeG(w6uViFx4AeL7VPfp8UWn(BaBQLk6Tgr5(7OCDiHmpwlgaauX3YIvnIYDgr6QrG3nJmxBTVLfRAeL7DzD1iW7PyzOXMAmgem2BJRd40b94GjGG6eh03fPov4g)ZExK6KX1bC6G(z3Fx4oYuvPOJ9246aoDqpoyciOoXb9(97VPC7LaQgeDqXSeG(UzUwMJfRgbZaHy(9kIoOTJOo94e8EoJOV8AiqiciGesiGyecy1jOoyIl0xjmbe)nauOcPsjJi12inb(Xb)EnW93JjGmsgz8nVmGHmvvksE86Vxut1I)AaLSqcbkOKfcucaLeseIK6FLWeaS37av8yVT3uP8yVLgE1wFZid1YWyIc)(BNUvUx)yVhkB3CS73FxK6exJOOp7Tt3k3p27HY2nh7(93fPofrxm2B9wFlbO2h7T0WR26XRF)DrQt2BQu(zVrHTES3dLTBo297VfnRRg7Y2T8yVhkB3CS73FJO26XEpu2U5y3V)gqeaoDRC)yVhkB3CS73FVsTDtGFS3dLTBo297VlsDscqT)S3fPozhgSs9p7DrQtau3k19TER3Fx4oYuvPOJ9wcq3BC6GE86GjriqRF)(XjMJ92vb8A20k5BsJbwTrHZ8BljDDvQ(Xjm46VTgqIkk2WoGo2XbFCYhV(XjFCsoo5JtWXbF)n12nbU8yVnCJFS3IHj7I0ddF2B7I0ddVtwAbrNuEK4OqHlMWOt4AHB7Max4iueijKBrYMWeMWeAwtOWClsOVO8KnHjmHjmHjmHjmcfLWOt4a1xIVUdbKWchHIs4ylHGjNcsClsOGiHKJdQfjCEKqHbtofK4wKSjmHjmH6wQjBctyctyctyctyekkHrNWbQVeFDhciHJqrccYXb1IKnHjmHju5IjBctyctis9cINWiuuYQCXKLOagJjm6eMSZ3jBctyctiqhnRSUkhbKegDct2eMWeMW57KnHjmHjmHjmHjeOJInWLQnI6MaFeqsy0jKCCsajztyctyctyctycb6igIO8kdVkHahr9LrajHrNqYXjbuqs2eMWeMWeMWeMqGok2fQHltyynHyliQL8rajHrNqYXbfKKnHjmHjmHjmHjeOJIA7ks5IgqsySOWC8eYQZP7egwtyB2ru0qiWhbKegDcjhhmOGKWeMWeMSjmHjmHcsGKSjmHjmHaDKJOgVwnIUhbKegDcjoijBctyctiqh5iQXzEDvTDteLRs5iGKWOti54KfcKKnHjmHjeOJaOiBL70kLiLU9LrajHrNqYGKSjmHjmHaDKDbHuUtKs3(YiGKWOtizqs2eMWeMqGoAj4aeSUPUjIsKs3JascJoHKbjztyctycb6OLGdGbRYWU4QG1n1nruIu6Eeqsy0jKmijBctyctiqhTeCamyvg2fxjsP7rajHrNqYGKSjmHjmHaDexNJbaYWU4krkD7lJascJoHKbjztyctycb6iUoNG1n1nruIu62xgbKegDcjdsYMWeMWec0rdgP0WRisPBFzeqsy0jKmijBctyctiqhnyKsdVIiLU9fgvKTYDALocijm6esgKKvq6(93RbUxZMwjFtAmWQnkCMFBLIInSdOJD86VgqRtmaJeqRdk56ehyady1j(xjmOeCCsEnGwNyagjGwhuY1joWagWQt8Vsyqj4(7DGkES3oDRCV(XEpu2U5y3V)Ui1jUgrr36BNUvUFS3dLTBo297VLau7J9wA4vB941V)Ui1j7nvk)S3IM1vJDz7wES3dLTBo297VruB9yVhkB3CS73FJcB9yVhkB3CS73FVsTDtGFS3dLTBo297VT3uP8yVLgE1wFZid1YWyIc)(Bara40TY9J9EOSDZXUF)DrQtsaQ9ND)TCie8fgrHkKkLF2BKwzcCmlbOVPfe1kf9w6uBMK36BjakIPXOsQxqux)S3gUXNSdda2QRIhh8BxfWli9TGUSmMqcjCczCtn8ec8fJRVDvaVMa3FpMaYizKX3sauetF2B3mOOAcC)9yciJKrgFBnGevuuCP6hh8BRbKOIMrTzsefa8UdBJ4BrJC(u42UjI(MYT8TDr6Hbmva)9AHB7Maxyls2eMWeMqK6fepHcpsqfN8ktjCEKqbvCYRmnYcIDnGgOUWXGBCIu62xeEeGn1sfnYIeopsiyYKjdscJb34eP0TVqiQacpcWMAPIgzrcNhjemzYKTqqUKv5Ijmzt23uB3erXqMQkfrOGOECYVfnsaBQLyQaET6Q)wqz)2rMQkfDS32fPhgIYoWFNSRfUTBcCHTiztyctycjkGXiqhbqr2k3PvkrkD7lJascJoH0cIoP8iXrHcxuyHJb34eP0TVi8iaBQLkAKfjCEKWyWnorkD7leIkGWJaSPwQOrwyrchBjemzYGKqYwKSjmHjmHefWyeOJSliKYDIu62xgbKegDcJb34eP0TVi8iaBQLkAKfjBctyctirbmgb6ObJuA4veP0TVWOISvUtR0rajHrNqAbrNuEK4OqHlkSWchdUXjsPBFHqubeEeGn1sfnYIes4egdUXjsPBFr4ra2ulv0ilSiHZJegdUXjsPBFHqubeEeGn1sfnYcls4ylHGjtgKew3IKnHjmHjKOagJaD0Grkn8kIu62xgbKegDcJb34eP0TVqiQacpcWMAPIgzrcjCcJb34eP0TVi8iaBQLkAKfjBctyct4oyt3jCrPBdVIqLTBaSnkkHrNqWXt2eMWeMWDWMUtyefjPjm6eoVQhByWk1fm1n8QzbErkCScEsqZSGBgWIQ2OWeKFAmmqigMxMNgdP4mBrYMWeMWeUO0THxrOY2na2gfLWOt4Is3gEfHkB3ayBuucfeju4fLUn8kcv2UbW2OOeo2sOWefWyeOJCe141Qr09iGKWXwcjkGXiqh5iQXzEDvTDteLRs5iGyHfjuqKqHxu62WRiuz7gaBJIs4ylHchrrsAcNhjemzYwyrYMWeMWeUgqjKjqIKqdpHaOgKuyIcymc0rZkRRYraXIekgs2eMWeMWeMWeMqZAcJb34ZkRRcpcWMAPIgbsczYIeMZF0jKB2j0xuEYMWeMWeMWeMWeMWeMWeUO0THxrOY2na2gfLWOt4Is3gEfHkB3ayBuucfeju4fLUn8kcv2UbW2OOeo2syels2eMWeMWeMWeMqLlMSjmHjmHkxmztyctyc3bB6oHoDRCpHrNqPUvBxyWKbjHZR6y0TY9O4RHzwg1yeUEDciHSfwKSjmHjmHM1e60TY9egD0j0rfnH(IYt2eMWeMWeMWeMWfLUn8kcv2UbW2OOegDcxu62WRiuz7gaBJIsOGiHcVO0THxrOY2na2gfLWXwcjhNels2eMWeMqLlMSjmHjmHefWyeOJwcoabRBQBIOeP09iGKWOti54KKWXwcxu62WRiuz7gaBJIsiHjmrH5s4qXEjHcQeUeCajCrPBzcfnsKwrrIgEvchmsPHxLWfLU9LKnHjmHjKOagJaD0sWbWGvzyxCvW6M6MikrkDpcijm6esuaJrGoAj4aeSUPUjIsKs3JaschBjKOagJaD0Grkn8kIu62xyur2k3Pv6iGKqctyIcZLWHI9scfujCbqcxcoGeoNzVt4Is3jePvuKOHxLWbJuA4vjCrPBFjztyctycjkGXiqhTeCamyvg2fxjsP7rajHrNqAbrNuEK4OqHlkmrbmgb6OLGdqW6M6MikrkDpcijCSLqIcymc0rdgP0WRisPBFzeqajHKTiztyctycjkGXiqhX15yaGmSlUsKs3(YiGKWOtiTGOtkpsCuOWffMOagJaDKDbHuUtKs3(YiGKqbrcjkGXiqhTeCamyvg2fxjsP7rabKes2IKnHjmHjKOagJaDexNtW6M6MikrkD7lJascJoH0cIoP8iXrHcxuyIcymc0rauKTYDALsKs3(YiGKqbrcjkGXiqhTeCamyvg2fxfSUPUjIsKs3JacijKSfjRYfFBxKEyyAXiQVDZGk(2TeG(2Ui9WWB7I0ddTtTzs((TDr6HHXuqu3e4Vt21c32nbUWwKSjmHjmHi1liEcjkGXiqhbqr2k3PvkrkD7lJacijemzYGKqWjRYfFBxKEyaNoOVt21c32nbUWwKSjmHjmHi1liEcjkGXiqhbqr2k3PvkrkD7lJascJhpHJs4OegpEcjkGXiqhX15eSUPUjIsKs3(YiGKW4Xt4OekigLW4XtiTGOtkpsCuOWffMOagJaD0sWbWGvzyxCvW6M6MikrkDpciGKqYwKSkx8Tgr5U8DmWJcBIiMzOwmIsymWJcBIHyiygEBxKEy49AHB7Maxyls2eMWeMqK6fepHoQOjRYft2Knzt232lQntV1ik3FBxKEyyYTeG(w6uViV)wcGIyctfWli9DuCxrRuBDCgefjLlhh4kLjgkiQCCcPIg64yQaEbPYX7XAHI0jGVyC9T1asurKUUkv)4e82vb82et94Gf6THB8jPtrUkECWVDZGIQztRKVjngy1gfoZV5LbmKPQsrYJx)TvQntIOaGyd7a6yhh8XjF86hN8Xj54Kpobhh893g7a)wFBLAZufku4IXg2b0XoobhN893wdirfXSyL(E22eZysrIjm2fQNWzfRw36BQOOXnboDp5itvLIKh74Gp2BhzQQu0XE7wcqFlDQxKVlsDIUNJAP0rf9ZEx4AeL7VPfp8wJOC)DSbUOXnbU8DrQtfUX)S3YIvnIYDgr6QrG3nJmxBTVLfRAeL7DzD1iW7PyzOXMAmgem27c34VbSPwQO7VlChzQQu0XUF)(BRbKOIAtm1Jx)TOrcytTetfWfSPAXFlO4VLaOiMInSdOJDCWhN8XRFCYhNKJt(4eCCY3FlbqrmrKAQw8Jtc43gX3eXi43UzqrTjM6Xbl0BjakIjGBe9LJx)9kIoOTJOo94e8EoJOVC86eqW7f1uT4hNeYVTd7a6y3VFCWKp2BjakIjGBe9LJx)TLKUUkv)4egC93wdirffByhqh74Gpo5Jx)4KpojhN8Xj44GV)2yh43671a3RztRKVjngy1gfoZVTsrXg2b0Xoo4Jt(41po47V3bQ4XE70TY96h79qz7MJD)(7IuN4AefDRVD6w5(XEpu2U5y3V)2EtLYJ9wA4vB9nJmuldJjk87VLau7J9wA4vB941V)Ui1j7nvk)S3OWwp27HY2nh7(93IM1vJDz7wES3dLTBo297VxP2UjWp27HY2nh7(93iQTES3dLTBo297VbebGt3k3p27HY2nh7(93fPojbO2F293YHqWxyefQqQu(zVrALjWXSeG(MwquRu0BPtTzsERVnCJpzhgaSvxfpo43UkGxq6BbDzzmHes4eY4MA4je4lgxF7QaEnbU)gNHcIkNWuLplSfFlbqrmHPc4fK(okUROvQToodIIKYLJdCLYedfevooHurdDCmvaVGu549yTqr6eWxmU(wcGIy6ZE7MbfvtG7VXzOGOYjmv5ZcBX3wdirfffxQ(Xb)2Ui9WaMkG)ETWTDtGlSfjBctyctis9cINqHhjOItELPeopsOGko5vMgzbXUgqdux4yWnorkD7lcpcWMAPIgzrcNhjemzYKbjHXGBCIu62xievaHhbytTurJSiHZJecMmzYwiixYQCXeMSj7BQTBIOyitvLIiuqupo53oYuvPOJ92TeG(2Ui9WWB7I0ddtULa03sN6f5B7I0ddVxlCB3e4cBrYMWeMWeIuVG4j0rfnzvU4B7I0ddJPGOUjWFNSRfUTBcCHTiztyctycrQxq8esuaJrGoIRZjyDtDteLiLU9LrabKecMmzqsi4Kv5IVTlspmGth03V1ik3LVJbEuyteXmd1Ir0B7I0ddrzh4Vt2K9T9IAZ0BnIY932fPhgMwmI6B3mOI3F7Qa(T(2vb82et94Gf6TeafXuSHDaDSJd(4KpE9Jt(4KCCY3FB4gFs6uKRIhh87f1uT4hNeYVDZGIQztRKVjngy1gfoZVTgqIkI01vP6hNG3uB3e4YJ92Wn(XElgMSlspm8zVTlspm8ozPfeDs5rIJcfUycJoHRfUTBcCHJqrGKqUfjBctyctOznHcZTiH(IYt2eMWeMWeMWeMWiuucJoHduFj(6oeqclCekkHJTecMCkiXTiHcIesooOwKW5rcfgm5uqIBrYMWeMWeQBPMSjmHjmHjmHjmHrOOegDchO(s81DiGeocfjiihhuls2eMWeMqLlMSjmHjmHi1liEcJqrjRYftwIcymMWOtyYoFNSjmHjmHaD0SY6QCeqsy0jmztyctycNVt2eMWeMWeMWeMqGok2axQ2iQBc8rajHrNqYXjbKKnHjmHjmHjmHjeOJyiIYRm8QecCe1xgbKegDcjhNeqbjztyctyctyctycb6OyxOgUmHH1eITGOwYhbKegDcjhhuqs2eMWeMWeMWeMqGokQTRiLlAajHXIcZXtiRoNUtyynHTzhrrdHaFeqsy0jKCCWGcsctyctyYMWeMWekibsYMWeMWec0roIA8A1i6Eeqsy0jK4GKSjmHjmHaDKJOgN51v12nruUkLJascJoHKJtwiqs2eMWeMqGocGISvUtRuIu62xgbKegDcjdsYMWeMWec0r2fes5orkD7lJascJoHKbjztyctycb6OLGdqW6M6MikrkDpcijm6esgKKnHjmHjeOJwcoagSkd7IRcw3u3erjsP7rajHrNqYGKSjmHjmHaD0sWbWGvzyxCLiLUhbKegDcjdsYMWeMWec0rCDogaid7IReP0TVmcijm6esgKKnHjmHjeOJ46Ccw3u3erjsPBFzeqsy0jKmijBctyctiqhnyKsdVIiLU9LrajHrNqYGKSjmHjmHaD0Grkn8kIu62xyur2k3Pv6iGKWOtizqswbP73FpNr0xoEDci4T1asurF2BRbKOIywSsFpBBIzmPiXeg7c1t4SIvRB9T1asurTjM6Xb)2i(MigR)2ndkQnXupoyHElbqrmrKAQw8JxV(BRbKOIMrTzsefa8UdBJ4BrJeWMAjMkGlyt1I)wqXF7QaEnBAL8nPXaR2OWz(nvu04MaNUNCKPQsrYJD)TOroFkCB3erFt5w(Efrh02ruNECsE7MbfDRVTsTzsefaeByhqh74Gpo5Jx)4KpojhN8Xj44GV)MxgWqMQkfjpo47hhm4J9EnW92et941j)w0ibSPwIPc4Vfu2j7B7I0ddyQa(71c32nbUWwKSjmHjmHi1liEchO(s81DiGeMOagJt0HqH7jCEKqWKtbjsSiHXJNWrmnkzvU4BljDDvQ(Xbd6BrJC(u42UjI(MYT8n12nrumKPQsrekiQhN8B7I0ddyQaEmaisD9Tgr5(Bd34t2HbaB1vXJd(n12nbU8yVLof5h7TyyYUi9WWN92Ui9WWBIcymorhcfUNWOti5KLOagJtdubsy0jKCYsuaJXjp40DcJoHKV)2Wn(XElgMSlspm8zVTlspm8MOagJtEWP7egDcjNSefWyCIoekCpHrNqYjlrbmgNgOcKWOti573Fl19kJbd3FhlZ4yml43oYuvPOJ92TeG(2Ui9WWBnIYD57yjLqZyaBQwsN3jMf0mJJnfd8AIQwmMfmZJ59AzVL2u(N92Ui9WWKBja9Tgr5(B7I0ddVxlCB3e4cpbscNajHYIvMJOChKeobscNajHYqbzRGKWjqs4eijCcKeobscNajHtGKWjqsOeGU340bfKeobscPdHc3bjHtGKWjls2eMWeMqZAcJb34rjJb34cldfKTMWakHJgbschbytTurJSiHuUycLa09gNoOjm6Ot4iIOCXegwtOVOjKruWvBpGgLqkxmHYIvMJOCpHrhDch1mYCT1oreZmu7Oe6lkpztyctyctyctycjkGX4eDiu4EcJoH0HqH7jBctyctOYftwLl(2Ui9WW0IruF7Mbv8(BJ4BIcymMWfLUFpNr0xEncrCqbLacigIHSqetDWeq86FLWGc(9AG7VhtazKmY4BEzadzQQuK841FtffnUjWP7jhzQQuK8yhh8XE7itvLIo2B3sa6BPt9I8DrQtlkD7lF27fLU9LPaafr9a69y5Tgr5(BIu62xEllw1ik3zePRgbE3mYCT1(ErPBF5n53fUXFdytTurVLfRAeL7DzD1iW7PyzOXMAmgem27IuNkCJ)zVlCnIY930IhU)UWDKPQsrh7(97Vxut1I)AavO6edOKjGeHeImOGjPoW(kHjG4V3bQ4XE70TY96h79qz7MJD)(7IuN4AefDRVD6w5(XEpu2U5y3V)2EtLYJ9wA4vB9nJmuldJjk87VLau7J9wA4vB941V)ELA7Ma)yVhkB3CS73FxK6K9MkLF2Be1wp27HY2nh7(93aIaWPBL7h79qz7MJD)(7IuNKau7p7nkS1J9EOSDZXUF)DrQt2HbRu)ZElAwxn2LTB5XEpu2U5y3VF)nsRmboMLa03UkGF)(7ihhmb1bF)ha - + + + dufqZbGifYLiqYNuufnkcQtrjSkfkLxrGWSaIBHGAxcv)srvyyiQJbults1ZqetdbUgqABeKVHq14auohcfRdHsVJarL5rGOCpHu7tHsCquWcvuEOqPjQqXfrrTrjfFurvAKiKtkKSsu6LkQkzMskDteKDcv)erAOOqlLa1tLAQq5Qcf2kbs9vavJvHs1zjqu1BbKMRcv3fqSxv)vrgmOdJ0IPKEmLAYe6YK2Ss6ZsYOvIttXQvuv8AuKzRu3wb7gv)wWWb44kuslhYZjA6uDDj2Uq8DfvgpbCEkrRxOO3ROQuZxrv19jqK9l6d(yVPh7(B576XjioyI)E4T4BXJ9gPvMahZsa67kuOa4n12nrumKPQsrekiQhN8BvaauUOk(zVTK01vP6hNWGjG8BQOOXnboDp5itvLIKh7(BPUxzmy4(7zKIHrkHQL5AWEBeFZik4jeaDttO1YElxmEcJkHspS13uU9savdIoOywcqF3mxlZXIvJGzGqm)MxgWqMQkfjpo437av8yVD6w5E9J9EOSDZXUF)Tt3k3p27HY2nh7(932BQuES3sdVARVzKHAzymrHF)DrQt2BQu(2rf9nIARh79qz7MJD)(BuyRh79qz7MJD)(7vQTBc8J9EOSDZXUF)nGiaC6w5(XEpu2U5y3V)w0SUASlB3YJ9EOSDZXUF)(932h74Gp2BxfWRztRKVjngy1gfoZVfG01vP6hNWaR(BljDDvQ(Xjmj1FBLAZufku4IXg2b0Xoo4Jd(41po4JtYXbFCcEnGsCHiqiWKfcmOeaMSqad0Vsyqf6(71a3RztRKVjngy1gfoZVL6ELXGH7VXiLX3wPOyd7a6yhV(XjhN41bdQqatO6eNaqjtma74K8AagjKiezItGqKjGeGrCItaX)kHbf07VbGcvivkzeP2gPjWpobV3bQ4XExK6ea1TsDFR367IuN4AefDRVT3uP8yVLgE1wFZid1YWyIc)(7IuNS3uP8ZEJO26XEpu2U5y3V)Ui1jja1(ZE70TY96h79qz7MJD)(BNUvUFS3dLTBo297VlsDkIUyS36T(wcqTp2BPHxT1Jx)(BrZ6QXUSDlp27HY2nh7(93aIaWPBL7h79qz7MJD)(7vQTBc8J9EOSDZXUF)DrQt2HbRu)ZEJcB9yVhkB3CS73FxK6eNoO3693YHqWxyefQqQu(zVrALjWXSeG(MwquRu0BPtTzsERVnCJpzhgaSvxfpo43UkGxq6BbDzzmHes4eY4MA4je4lgxF7QaEnbU)EmbKrYiJVJzimCCYXj5TeafX0N92ndkQMa3FZGyeL7fK(wcGIyk2WoGo2XbFCYhV(XjFCsoo57VfnY5tHB7Mi6Bk3Y32fPhgWub83RfUTBcCHNazceawKSjmHjmHM1eciHuUycbKWC(JoHKtiLlMqajmN)ObNqFr5jePEbXtiGeQCXKnHjmHjePEbXt48CEMSkxmzt2Knzt2Knzt23uB3erXqMQkfrOGOECcdM8BxfWBtm1JdM4VTd7a6y3F7itvLIo27IuNgOU9Ikk4cxV13fPozVqrvQ8ZExK6eshOgUHxDRVTlspm8ETWTDtGlSfjBctyctis9cINqhv0Kv5IjBYMSjBYMSjBYMSjBYMSjBYMSjBY(2Ui9WW0IruFBxKEy4T9IAZ07carQRVTxOOkv(g8BnIYD57yjLqZyaBQwsN3jMf0mJJnfd8AIQwmMfmZJ5T9cfvPYPaafr9a69yj63ULa032fPhgEx4AeL7VPfp8Ui1j5syos5F2B7I0ddJPGOUjWFVw42UjWf2IKnHjmHjChSP7eAVqrvQeKjqKof5Giwqjm6eoVQ3a09o2fkQsLcdkjcrMSfjBctyctOznH2luuLktOGmWj0xuEcrQxq8ekwqGiDkYfeIfucvUyYMWeMWeAwtO9cfvPYeowIoHGtOVO8eIuVG4jKmiGbXrfnHkxmztyctycrQxq8ecgeWG4OIMSkxmzt2Knzt2Knzt2Knzt2Knzt2Knzt2KnzFBxKEyyYTeG(w6uViFJu6UbO7noDqF3lgDlMWWAc9fnHc2uT4AOiFxK6KeGU340b9ZExK6uHB8p7TCjmhP83YLWCmSNJAP8TeGU340b94GsIqKjF)TeafXeHmiuaDRVTgqIkI01vP6hNG3fUJmvvk6yVLlH5iL)wUeMJH9CulLVTlspm8ETWTDtGlSfjBctyctis9cINWv6wQjRYft2Knzt2K9TeGU340b94GsIqKjF)THB8jPtrUkECWVxut1I)AagbeqqDqfcyGjoOGRtajG)kHjGyE7MbfvZMwjFtisXjnwIemPeI55hJOOID(I0yGvBu4m)MxgWqMQkfjpo43sauetZ2kxKqbr99SAzgFmVTsTzsefaeByhqh74Gpo5Jx)4KpojhN8Xj44GV)2yh436BrJeWMAjMkGxRU6VtOGY(9CgrF54aJ8BRbKOIInSdOJDCWhN8XRFCYhNKJt(4eCCW3FBnGevuuCP6hh8BRbKOI(S3wdirfXSyL(E22eZysrIjm2fQNWzfRw36BQOOXnboDp5itvLIKh7(BRbKOIAtm1Jx)TXoWNKgr9DTmxd2BjakIjIut1IF861FBnGev0mQntIOaG3DyBeF7MbfDRVLaOiMaUr0xoE93gX3DWfCcJDHIQ0ec(9kIoOTJOo94K8MA7MaxES3gUXp2BXWKDr6HHp7TDr6HH3axPmXqbrLXrALjWLaLwq0jLhjUreiXrALjWJBLIIVwrST6yQaEbPcpkkUROvQTo(4ZkUh4YXhh4effgZaBSdSrwKSaxPmXqbrLXrALjWLaLwq0jLhjUreiXrALjWJBLIIBTIyB1Xub8csfEuuCxrRuBD8XNvCpWLJpoWjkkmMb2yhyJSizPfeDs5rIVg4oi0cIoP8iXxdCFsAIPccTGOtkps81a3Nw30kzcJoHaxPmXqbrLXrALjWLaLwq0jLhjUreiXrALjWJ7QaoXoVQxtG7cBrYcCLYedfevghPvMaxcuAbrNuEK4grGehPvMapURc4eBREnbUlmTGOtkps81a3bHwq0jLhj(AG7tstmvqgrAmWQnkCMhzrYcCLYedfevghPvMaxcuAbrNuEK4grGehPvMapURc4eBREVqfdZr66QuDHRdscjmylUF)THhrrs9ZElbqrmHPc4fK(okUROvQToodIIKYLJdCLYedfevooHurdDCmvaVGu549yTqr6eWxmUE)41p2BjakIjGBe9LJx)TLKUUkv)4eMK6VTgqIkk2WoGo2XbFCYhV(XjFCsoo5JtWXbF)TXoWV13RbUxZMwjFtAmWQnkCMFl19kJbd3FJrkJVTsrXg2b0Xoo4xdWecyetDIbyGjtaOeNeHec8xjmOKC86VgHeImO1joXqaOKqaXfI41j4RegusoojVgcaLyatmKbfuY1jaSqedWa)vcdkb3FdafQqQuYisTnstGFCcEVduXJ9Ui1jaQBL6(wV13fPoX1ik6wFBVPs5XEln8QT(MrgQLHXef(93fPozVPs5N9gf26XEpu2U5y3V)Ui1jja1(ZE70TY96h79qz7MJD)(BNUvUFS3dLTBo297VlsDkIUyS36T(wcqTp2BPHxT1Jx)(7IuN40b9wFdicaNUvUFS3dLTBo297VxP2UjWp27HY2nh7(93fPozhgSs9p7nIARh79qz7MJD)(BrZ6QXUSDlp27HY2nh7(97VLdHGVWikuHuP8ZEJ0ktGJzja9nTGOwPO3sNAZK8wFB4gFYomayRUkECWVDvaVG03c6YYycjKWjKXn1WtiWxmU(2vb8AcC)9yciJKrgFlbqrmHPc4fK(okUROvQToodIIKYLJdCLYedfevooHurdDCmvaVGu549yTqr6eWxmU(wcGIy6ZE7MbfvtG7VzqmIY9csFBnGevuuCP6hh8BrJC(u42UjI(MYT8TDr6Hbmva)9AHB7Max4jqMabGfjBctyctOznHasiLlMqajmN)Oti5es5IjeqcZ5pAWj0xuEcrQxq8eciHkxmztyctycrQxq8eopNNjRYft2Knzt2Knzt2K9n12nrumKPQsrekiQhNWGj)w0ibSPwIPc41QR(7ekOSF7itvLIo27IuNgOU9Ikk4cxV13fPozVqrvQ8ZEBVqrvQ8n43AeL7Y3XskHMXa2uTKoVtmlOzghBkg41evTymlyMhZB7I0ddtlgr9TDr6HH3YLWCKYFlxcZXWEoQLY3fPoH0bQHB4v36B7I0ddVxlCB3e4cBrYMWeMWeIuVG4j0rfnzvUyYMSjBYMSjBYMSjBYMSjBYMSjBYMSVTxOOkvofaOiQhqVhlr)2TeG(2Ui9WW7cxJOC)nT4H3fPojxcZrk)ZEBxKEyymfe1nb(71c32nbUWwKSjmHjmH7GnDNq7fkQsLGmbI0PiheXckHrNW5v9gGU3XUqrvQuyqjriYKTiztyctycnRj0EHIQuzcJoAWj0xuEcrQxq8ekwqGiDkYfeIfucvUyYMWeMWeAwtO9cfvPYeowIoH1tOVO8eIuVG4jKmiGbXrfnHkxmztyctycrQxq8ecgeWG4OIMSkxmzt2Knzt2Knzt2Knzt2Knzt2Knzt2KnzFBxKEyyYTeG(w6uViFJu6UbO7noDqF3lgDlMWWAc9fnHc2uT4AOiFxK6KeGU340b9ZExK6uHB8p7T9IAZ07carQRVLa09gNoOhhuseIm57VP2UjWLh7THB8J9wmmzxKEy4ZEBxKEy4nWvktmuquzCKwzcCjqPfeDs5rIBebsCKwzc84wPO4RveBRoMkGxqQWJII7kALARJp(SI7bUC8XborrHXmWg7aBKfjlWvktmuquzCKwzcCjqPfeDs5rIBebsCKwzc84wPO4wRi2wDmvaVGuHhff3v0k1whF8zf3dC54JdCIIcJzGn2b2ilswAbrNuEK4RbUdcTGOtkps81a3NKMyQGqli6KYJeFnW9P1nTsMWOtiWvktmuquzCKwzcCjqPfeDs5rIBebsCKwzc84UkGtSZR61e4UWwKSaxPmXqbrLXrALjWLaLwq0jLhjUreiXrALjWJ7QaoX2QxtG7ctli6KYJeFnWDqOfeDs5rIVg4(K0etfKrKgdSAJcN5rwKSaxPmXqbrLXrALjWLaLwq0jLhjUreiXrALjWJ7QaoX2Q3luXWCKUUkvx46GKqcd2I73FB4gFs6uKRIhh8B3mOOB9TBguunBAL8nHifN0yjsWKsiMNFmIIk25lsJbwTrHZ8BjakIPzBLlsOGO(EwTmJpM3wP2mjIcaInSdOJDCWhN8XRFCYhNKJt(4eCCW3FB4ruKu)S3Xmegoo54K8EoJOVCCGr(T1asurF2BRbKOIywSsFpBBIzmPiXeg7c1t4SIvRB9T1asurKUUkv)4e82AajQO2et941FBeF3bxWjm2fkQsty93g7aFsAe131YCnyVDvaVnXupoyI)wcGIyIi1uT4hVE93UkGxZMwjFtAmWQnkCMFBnGev0mQntIOaG3DyBeFtffnUjWP7jhzQQuK8y3FBLAZufku4IXg2b0Xoo4Jd(41po4JtYXbFCcEnGsCHiqiWKfcmOeaMSqad0Vsyqf6(7veDqBhrD6Xj5nVmGHmvvksECWVlChzQQu0XElxcZrk)TCjmhd75OwkFBxKEy49AHB7Maxyls2eMWeMqK6fepHR0TutwLlMSjBYMSj7BjaDVXPd6XbLeHit((BjakIPyd7a6yhh8XjF86hN8Xj54KVF)4KCS3saueta3i6lhV(BbiDDvQ(Xbw93ws66Qu9JtysQ)2AajQOyd7a6yhh8XjF86hN8Xj54Kpobhh893g7a)wFVg4EnBAL8nPXaR2OWz(Tu3RmgmC)ngPm(2kffByhqh74GFnatiGrm1jgGbMmbGsCsesiWFLWGsYXR)AesiYGwN4edbGscbexiIxNGVsyqj54K8AiauIbmXqguqjxNaWcrmad8xjmOeC)nauOcPsjJi12inb(Xj49oqfp27IuNaOUvQ7B9wFxK6exJOOB9T9MkLh7T0WR26BgzOwggtu43FxK6K9MkLF2Be1wp27HY2nh7(93fPojbO2F2BNUvUx)yVhkB3CS73F70TY9J9EOSDZXUF)DrQtr0fJ9wV13saQ9XEln8QTE863FlAwxn2LTB5XEpu2U5y3V)gqeaoDRC)yVhkB3CS73FVsTDtGFS3dLTBo297VlsDYomyL6F2BuyRh79qz7MJD)(7IuN40b9wV)woec(cJOqfsLYp7nsRmboMLa030cIALIElDQntYB9THB8j7WaGT6Q4Xb)2vb8csFlOllJjKqcNqg3udpHaFX46BxfWRjW93JjGmsgz8DmdHHJtoojVDZGIQjW93migr5EbPVTgqIkkkUu9Jd(TOroFkCB3erFt5w(2Ui9WaMkG)ETWTDtGl8eitGaWIKnHjmHj0SMqajKYftiGeMZF0jKCcPCXeciH58hn4e6lkpHi1liEcbKqLlMSjmHjmHi1liEcNNZZKv5IjBYMSjBYMSjBY(MA7MikgYuvPicfe1JtyWKFlAKa2ulXub8A1v)Dcfu2VDKPQsrh7DrQtdu3ErffCHR367IuNSxOOkv(zVlsDcPdud3WRU132fPhgEVw42UjWf2IKnHjmHjePEbXtOJkAYQCXKnzt2Knzt2Knzt2Knzt2Knzt2KnzFlbO7noDqpoOKiezYVTxuBMExaisD9TBja9TDr6HH3AeL7Y3XskHMXa2uTKoVtmlOzghBkg41evTymlyMhZB7fkQsLtbakI6b07Xs0VTxOOkv(g87cxJOC)nT4H3fPojxcZrk)ZEBxKEyymfe1nb(71c32nbUWwKSjmHjmH7GnDNq7fkQsLGmbI0PiheXckHrNW5v9gGU3XUqrvQuyqjriYKTiztyctycnRj0EHIQuzcJo6ewpH(IYtis9cINqXccePtrUGqSGsOYft2eMWeMqZAcTxOOkvMWOJoHKKqFr5jePEbXtizqadIJkAcvUyYMWeMWeIuVG4jemiGbXrfnzvUyYMSjBYMSjBYMSjBYMSjBYMSjBYMSjBY(2Ui9WWKBja9T0PEr(gP0Ddq3BC6G(Uxm6wmHH1e6lAcfSPAX1qr(Ui1jjaDVXPd6N9Ui1Pc34F2B5syos5VLlH5yyph1s5B7I0ddtlgr9TDr6HH7VDvaVnXupoyI)2Wn(K0Pixfpo43Uzqr36B3mOOA20k5BcrkoPXsKGjLqmp)yefvSZxKgdSAJcN53sauetZ2kxKqbr99SAzgFmVTsTzsefaeByhqh74Gpo5Jx)4KpojhN8Xj44GV)2WJOiP(zVTgqIkI01vP6hNG3Zze9LJdmYVTgqIk6ZEBnGeveZIv67zBtmJjfjMWyxOEcNvSADRVLaOiMInSdOJDCWhN8XRFCYhNKJt((BRbKOIAtm1Jx)nvu04MaNUNCKPQsrYJD)TXoWNKgr9DTmxd2BQTBcC5XEB4g)yVfdt2fPhg(S32fPhgEdCLYedfevghPvMaxcuAbrNuEK4grGehPvMapUvkk(AfX2QJPc4fKk8OO4UIwP264JpR4EGlhFCGtuuymdSXoWgzrYcCLYedfevghPvMaxcuAbrNuEK4grGehPvMapUvkkU1kITvhtfWliv4rrXDfTsT1XhFwX9axo(4aNOOWygyJDGnYIKLwq0jLhj(AG7Gqli6KYJeFnW9jPjMki0cIoP8iXxdCFADtRKjm6ecCLYedfevghPvMaxcuAbrNuEK4grGehPvMapURc4e78QEnbUlSfjlWvktmuquzCKwzcCjqPfeDs5rIBebsCKwzc84UkGtST61e4UW0cIoP8iXxdCheAbrNuEK4RbUpjnXubzePXaR2OWzEKfjlWvktmuquzCKwzcCjqPfeDs5rIBebsCKwzc84UkGtST69cvmmhPRRs1fUoijKWGT4(93sauetePMQf)41R)2vb8A20k5BsJbwTrHZ8BRbKOIMrTzsefa8UdBJ4BJ47o4coHXUqrvAcj5TvQntvOqHlgByhqh74Gpo4Jx)4Gpojhh8Xj41akXfIaHatwiWGsayYcbmq)kHbvO7Vxr0bTDe1PhNK38YagYuvPi5Xb)UWDKPQsrh7TCjmhP83YLWCmSNJAP8TDr6HH3RfUTBcCHTiztyctycrQxq8eUs3snzvUyYMSjBYMSVLa09gNoOhhuseIm57VLaOiMWub8csFhf3v0k1whNbrrs5YXbUszIHcIkhNqQOHooMkGxqQC8ESwOiDc4lgxVFCco2BjakIjGBe9LJx)TaKUUkv)4eV(BljDDvQ(Xbd6BRbKOIInSdOJDCWhN8XRFCYhNKJt(4eCCW3FBSd8B99AG71SPvY3KgdSAJcN53fPIfcB3a4wFl19kJbd3Fl4OMxIWEBLIInSdOJDCWVgGraXjojcrazYeqGq1bdwOVsyqb941FnGckWitmKaMeY1jgsioOGs8Vsyqj54K8AaMqaJyQtmadmzcaL4KiKqG)kHbLK7VbGcvivkzeP2gPjWpobV3bQ4XExK6ea1TsDFR367IuN4Aef9zVT3uP8yVLgE1wFZid1YWyIc)(7IuNS3uP8ZEJO26XEpu2U5y3V)Ui1jja1(ZE70TY96h79qz7MJD)(BNUvUFS3dLTBo297VlsDkIUyS36T(wcqTp2BPHxT1Jx)(7IuN40b9wFdicaNUvUFS3dLTBo297VxP2UjWp27HY2nh7(93fPozhgSs9p7nkS1J9EOSDZXUF)TOzD1yx2ULh79qz7MJD)(93YHqWxyefQqQu(zVrALjWXSeG(MwquRu0BPtTzsERVnCJpzhgaSvxfpo43UkGxq6BbDzzmHes4eY4MA4je4lgxFhZqy44KJtYB3mOOAcC)ndIruUxq6BjakIPyd7a6yhh8XjF86hN8Xj54KV)w0iNpfUTBIOVP79B7I0ddyQa(71c32nbUWtGmbcals2eMWeMqZAcbKqkxmHasyo)rNqYjKYftiGeMZF0GtOVO8eIuVG4jeqcvUyYMWeMWeIuVG4jCEoptwLlMSjBYMSjBYMSj7BQTBIOyitvLIiuqupoHbt(TRc4TjM6Xbl0BhzQQu0XElAqQTBc831sAJ9Ui1PbQBVOIcUW1B9DrQtuRYaYkHcI6N9Ui1j7fkQsLF2BnIYD57yjLqZyaBQwsN3jMf0mJJnfd8AIQwmMfmZJ5TDr6HHPfJO(2Ui9WWB5syos5VLlH5iLhBiSfdZXFxK6KObP2UjW)S3fPoH0bQHB4v36B7I0ddVxlCB3e4cBrYMWeMWeIuVG4j0rfnzvUyYMSjBYMSjBYMSjBYMSjBYMSjBYMSVTlspmm5wcqFlDQxKVTxOOkvofaOiQhqVhlr)2EHIQu5BWVrkD3a09gNoOVjIYftyynH(IMqgrbxT9a6DrQtYLWCKY)S3sa6EJth0JxhmjcbA93AeL7VJne2IH54jKruOcPszcfUbO7TfVlCnIY930IhEBxKEyymfe1nb(71c32nbUWwKSjmHjmH7GnDNq7fkQsLGmbI0PiheXckHrNW5v9gGU3XUqrvQu46GjriqRBrYMWeMWeAwtO9cfvPYegD0GtOVO8eIuVG4juSGar6uKlielOeQCXKnHjmHj0SMq7fkQsLjCSeDcRNqFr5jePEbXtizqadIJkAcvUyYMWeMWeIuVG4jemiGbXrfnzvUyYMSjBYMSjBYMSjBYMSjBYMSjBYMSjBY(Ui1jjaDVXPd6N9Ui1Pc34F2B7f1MP3faIuxF7wcqFBxKEy4(BxfWV13wP2mvHcfUySHDaDSJd(4GpE9Jd(4KCCWhNGxdOexicecmzHadkbGjleWa9ReguHU)2oSdOJD)TBgu0T(2ndkQMnTs(MqKItASejysjeZZpgrrf78fPXaR2OWz(THhrrs9ZElbqrmnBRCrcfe13ZQLz8X82k1MjruaqSHDaDSJd(4KpE9Jt(4KCCYhNGJd((BjakIjmvaVG03rXDfTsT1XzquKuUCCGRuMyOGOYXjKkAOJJPc4fKkhVhRfksNa(IX13Zze9LJtCYVP2UjWLh7THB8J9wmmzxKEy4ZEBxKEy4nWvktmuquzCKwzcCjqPfeDs5rIBebsCKwzc84wPO4RveBRoMkGxqQWJII7kALARJp(SI7bUC8XborrHXmWg7aBKfjlWvktmuquzCKwzcCjqPfeDs5rIBebsCKwzc84wPO4wRi2wDmvaVGuHhff3v0k1whF8zf3dC54JdCIIcJzGn2b2ilswAbrNuEK4RbUdcTGOtkps81a3NKMyQGqli6KYJeFnW9P1nTsMWOtiWvktmuquzCKwzcCjqPfeDs5rIBebsCKwzc84UkGtSZR61e4UWwKSaxPmXqbrLXrALjWLaLwq0jLhjUreiXrALjWJ7QaoX2QxtG7ctli6KYJeFnWDqOfeDs5rIVg4(K0etfKrKgdSAJcN5rwKSaxPmXqbrLXrALjWLaLwq0jLhjUreiXrALjWJ7QaoX2Q3luXWCKUUkvx46GKqcd2I73Fx4oYuvPOJ9wUeMJu(B5syos5XgcBXWC83IgKA7Ma)DTK2yVTlspm8ETWTDtGlSfjBctyctis9cINWv6wQjRYft2Knzt2K9TeGU340b941btIqGw)(BRbKOI(S3wdirfXSyL(E22eZysrIjm2fQNWzfRw36BJ4BIcoJjm2fkQsty93wdirf1MyQhV(BJDGpjnI67AzUgS3sauetePMQf)4Gf6TRc41SPvY3KgdSAJcN53wdirfnJAZKika4Dh2gX3wdirfffxQ(Xb)MkkACtGt3toYuvPi5Xoo4J92rMQkfDS3ULa03sN6f57cxJOC)nT4H3YIvnIYDgr6QrG3nJmxBTVlsDY46aoDq)S3AeL7VJY1HeY8yTyaaqfFxK6uHB8p7TSyvJOCVlRRgbEpfldn2uJXGGXEBCDaNoOhhmbeuN4G(UWn(BaBQLk6TDr6HHPfJO(2ndQ493fUJmvvk6yVnUoGth0JdMacQtCqVF)(7veDqBhrD6Xj5nVmGHmvvksE86VnCJpjDkYvXJd(T1asurKUUkv)4e8w0ibSPwIPc41QR(7ekOSVFCqp2BxfWRztRKVjngy1gfoZVTK01vP6hhmOVTgqIkk2WoGo2XbFCYhV(XjFCsoo5JtWXbF)TXoWV13RbUxZMwjFtAmWQnkCMFBLIInSdOJDCWVgGraXjojcrazYeqGq1bdwOVsyqb941FnGckWitmKaMeY1jgsioOGs8Vsyqj54K8AaMqaJyQtmadmzcaL4KiKqG)kHbLK7VbGcvivkzeP2gPjWpobV3bQ4XExK6ea1TsDFR367IuN4Aef9zVT3uP8yVLgE1wFZid1YWyIc)(7IuNS3uP8ZEJO26XEpu2U5y3V)Ui1jja1(ZE70TY96h79qz7MJD)(BNUvUFS3dLTBo297VlsDkIUyS36T(wcqTp2BPHxT1Jx)(BrZ6QXUSDlp27HY2nh7(93aIaWPBL7h79qz7MJD)(7vQTBc8J9EOSDZXUF)DrQt2HbRu)ZEJcB9yVhkB3CS73FxK6eNoO3693YHqWxyefQqQu(zVrALjWXSeG(MwquRu0BPtTzsERVnCJpzhgaSvxfpo43UkGxq6BbDzzmHes4eY4MA4je4lgxF7QaEnbU)EmbKrYiJVTgqIkI01vP6hNG3Uzqr1e4(BgeJOCVG03wdirfffxQ(Xb)w0iNpfUTBIOVP79B7I0ddyQa(71c32nbUWtGmbcals2eMWeMqZAcbKqkxmHasyo)rNqYjKYftiGeMZF0GtOVO8eIuVG4jeqcvUyYMWeMWeIuVG4jCEoptwLlMSjBYMSjBYMSj7BQTBIOyitvLIiuqupoHbt(TRc4TjM6XbtWBhzQQu0XExK60a1Txurbx46T(Ui1j7fkQsLF27IuNq6a1Wn8QB9TDr6HH3RfUTBcCHTiztyctycrQxq8e6OIMSkxmzt2Knzt2Knzt2Knzt2Knzt2Knzt23sa6EJth0JdkjcrM8B7f1MP3faIuxFBVqrvQ8n43AeL7Y3XskHMXa2uTKoVtmlOzghBkg41evTymlyMhZB7fkQsLtbakI6b07Xs0VDlbOVTlspm82Ui9WWKBja9T0PEr(Ui1j5syos5F2B7I0ddJPGOUjWFVw42UjWf2IKnHjmHjChSP7eAVqrvQeKjqKof5Giwqjm6eoVQ3a09o2fkQsLcxhmjcbADls2eMWeMqZAcTxOOkvMqbzGtOVO8eIuVG4juSGar6uKlielOeQCXKnHjmHj0SMq7fkQsLjCSeDcbNqFr5jePEbXtizqadIJkAcvUyYMWeMWeIuVG4jemiGbXrfnztyctyctwLlMSjBYMSjBYMSjBYMSjBYMSjBYMSjBYMSjBYMSjBYMSjBYMSjBYMSVlCnIY930IhEJu6UbO7noDqF3lgDlMWWAc9fnHc2uT4AOiFxK6KeGU340b9ZExK6uHB8p7TCjmhP83YLWCmSNJAP8TDr6HHPfJO(2Ui9WW93saueteYGqb0T(wcGIyctfWli9DuCxrRuBDCgefjLlhh4kLjgkiQCCcPIg64yQaEbPYX7XAHI0jGVyC9n12nbU8yVnCJFS3IHj7I0ddF2B7I0ddVbUszIHcIkJJ0ktGlbkTGOtkpsCJiqIJ0ktGh3kffFTIyB1Xub8csfEuuCxrRuBD8XNvCpWLJpoWjkkmMb2yhyJSizbUszIHcIkJJ0ktGlbkTGOtkpsCJiqIJ0ktGh3kff3AfX2QJPc4fKk8OO4UIwP264JpR4EGlhFCGtuuymdSXoWgzrYsli6KYJeFnWDqOfeDs5rIVg4(K0etfeAbrNuEK4RbUpTUPvYegDcbUszIHcIkJJ0ktGlbkTGOtkpsCJiqIJ0ktGh3vbCIDEvVMa3f2IKf4kLjgkiQmosRmbUeO0cIoP8iXnIajosRmbECxfWj2w9AcCxyAbrNuEK4RbUdcTGOtkps81a3NKMyQGmI0yGvBu4mpYIKf4kLjgkiQmosRmbUeO0cIoP8iXnIajosRmbECxfWj2w9EHkgMJ01vP6cxhKesyWwC)(7f1uT4VgGrabeuN4eakjeuh06Gke5VsyciM3Uzqr1SPvY3eIuCsJLibtkHyE(XikQyNVingy1gfoZVJzimCCYXj5TeafX0STYfjuquFpRwMXhZBEzadzQQuK841FpNr0xooyci)2k1MPkuOWfJnSdOJDCWhh8XRFCWhNKJd(4e8AaL4crGqGjleyqjamzHagOFLWGk093wdirf9zVTgqIkIzXk99STjMXKIetySlupHZkwTU13IgjGn1smvaVwD1FNqbL9BRbKOIAtm1Jx)nvu04MaNUNCKPQsrYJDCWh7TJmvvk6yVDlbOVLo1lY3YIvnIY9USUAe49uSm0ytngdcg7DHRruU)Mw8W7IuNm8iksQF27IuNmUoGth0p7DHB83a2ulv0B7I0ddtULa03sN6f5BJRd40b94GjGG6eh03AeL7VJY1HeY8yTyaaqfFBVO2m9UaqK667IuNkCJ)zVLfRAeL7mI0vJaVBgzU2AFBxKEyyAXiQVDZGkE)DH7itvLIo2BJRd40b94GjGG6eh073V)2yh4tsJO(UwMRb7TeafXeWnI(YXR)wcGIyIi1uT4hVE93wdirfnJAZKika4Dh2gX3gX3efCgtySluuLMqWVTsTzsefaeByhqh74Gpo5Jx)4KpojhN8Xj44GV)Efrh02ruNECsE7MbfDRVlChzQQu0XElxcZrk)TCjmhd75OwkFBxKEy49AHB7Maxyls2eMWeMqK6fepHR0TutwLlMSjBYMSj7BjaDVXPd6XbLeHit((BdpIIK6N92Wn(K0Pixfpo43sauetXg2b0Xoo4Jt(41po5JtYXjF)(Xf6yVLaOiMaUr0xoE93cq66Qu9JtyIx)TLKUUkv)4Gb9TvQntvOqHlgByhqh74Gpo4Jx)4Gpojhh8Xj41akXfIaHatwiWGsayYcbmq)kHbvO7VxdCVMnTs(M0yGvBu4m)wQ7vgdgU)UwMRb7Tvkk2WoGo2Xb)AagbeN4KiebKjtabcvhmyH(kHbf0Jx)1akOaJmXqcysixNyiH4GckX)kHbLKJtYRbycbmIPoXamWKjauItIqcb(RegusU)gakuHuPKrKABKMa)4e8EhOIh7DrQtau3k19TERVlsDIRru0N92EtLYJ9wA4vB9nJmuldJjk87VlsDYEtLYp7nkS1J9EOSDZXUF)DrQtsaQ9N92PBL71p27HY2nh7(93oDRC)yVhkB3CS73FxK6ueDXyV1B9TeGAFS3sdVARhV(93fPoXPd6T(ELA7Ma)yVhkB3CS73FdicaNUvUFS3dLTBo297VlsDYomyL6F2Be1wp27HY2nh7(93IM1vJDz7wES3dLTBo2973FlhcbFHruOcPs5N9gPvMahZsa6BAbrTsrVLo1Mj5T(2Wn(KDyaWwDv84GF7QaEbPVf0LLXesiHtiJBQHNqGVyC9DmdHHJtoojVDZGIQjW93migr5EbPVLaOiMInSdOJDCWhN8XRFCYhNKJt((BrJC(u42UjI(MU3VTlspmGPc4VxlCB3e4cpbYeiaSiztyctycnRjeqcPCXeciH58hDcjNqkxmHasyo)rdoH(IYtis9cINqaju5IjBctyctis9cINW558mzvUyYMSjBYMSjBYMSVP2UjIIHmvvkIqbr94egm53IgjGn1smvaVwD1FNqbL9BhzQQu0XExK60a1Txurbx46T(Ui1j7fkQsLF2B3sa6B7I0ddVTlspm8ETWTDtGlSfjBctyctis9cINqhv0Kv5IjBYMSjBYMSjBYMSjBYMSjBYMSjBY(wcq3BC6GECqjriYKFlxcZrk)TCjmhd75OwkFBVqrvQ8n43AeL7Y3XskHMXa2uTKoVtmlOzghBkg41evTymlyMhZB7fkQsLtbakI6b07Xs0VlsDcPdud3WRU132fPhgMClbOVLo1lY3fPojxcZrk)ZEJu6UbO7noDqF3lgDlMWWAc9fnHc2uT4AOiFx4AeL7VPfp82Ui9WWykiQBc83RfUTBcCHTiztyctyc3bB6oH2luuLkbzcePtroiIfucJoHZR6naDVJDHIQuPW1btIqGw3IKnHjmHj0SMq7fkQsLjuqg4e6lkpHi1liEcfliqKof5ccXckHkxmztyctycnRj0EHIQuzchlrNqWj0xuEcrQxq8esgeWG4OIMqLlMSjmHjmHi1liEcbdcyqCurtwLlMSjBYMSjBYMSjBYMSjBYMSjBYMSjBYMSVlsDscq3BC6G(zVlsDQWn(N92ErTz6DbGi1132fPhgMwmI6B7I0dd3F7Qa(T(wcGIyIqgekGU13sauetyQaEbPVJI7kALARJZGOiPC54axPmXqbrLJtiv0qhhtfWlivoEpwluKob8fJRVTgqIkI01vP6hNG3wdirfffxQ(Xb)2ndk6wF7MbfvZMwjFtisXjnwIemPeI55hJOOID(I0yGvBu4m)wcGIyA2w5IekiQVNvlZ4J5THhrrs9ZEBnGev0mQntIOaG3DyBeFpNr0xooXj)2AajQOyd7a6yhh8XjF86hN8Xj54Kpobhh893wdirf9zVTgqIkIzXk99STjMXKIetySlupHZkwTU13uB3e4YJ92Wn(XElgMSlspm8zVTlspm8g4kLjgkiQmosRmbUeO0cIoP8iXnIajosRmbECRuu81kITvhtfWliv4rrXDfTsT1XhFwX9axo(4aNOOWygyJDGnYIKf4kLjgkiQmosRmbUeO0cIoP8iXnIajosRmbECRuuCRveBRoMkGxqQWJII7kALARJp(SI7bUC8XborrHXmWg7aBKfjlTGOtkps81a3bHwq0jLhj(AG7tstmvqOfeDs5rIVg4(06Mwjty0je4kLjgkiQmosRmbUeO0cIoP8iXnIajosRmbECxfWj25v9AcCxylswGRuMyOGOY4iTYe4sGsli6KYJe3icK4iTYe4XDvaNyB1RjWDHPfeDs5rIVg4oi0cIoP8iXxdCFsAIPcYisJbwTrHZ8ilswGRuMyOGOY4iTYe4sGsli6KYJe3icK4iTYe4XDvaNyB17fQyyosxxLQlCDqsiHbBX97VTgqIkQnXupE93urrJBcC6EYrMQkfjp2XbFS3oYuvPOJ9246aoDqpoyciOoXb9DHRruU)Mw8W7c34VbSPwQO3AeL7VJY1HeY8yTyaaqfFllw1ik3zePRgbE3mYCT1(wwSQruU3L1vJaVNILHgBQXyqWyVDlbOVLo1lY3fPov4g)ZExK6KX1bC6G(z3Fx4oYuvPOJ9246aoDqpoyciOoXb9(97Vn2b(K0iQVRL5AWElbqrmrKAQw8JdwO3UkGxZMwjFtAmWQnkCMFBeFtuWzmHXUqrvAcbhh03wP2mjIcaInSdOJDCWhN8XRFCYhNKJt(4eCCW3FVIOdA7iQtpojVn2b(T(UWDKPQsrh7TCjmhP83YLWCmSNJAP8TDr6HH3RfUTBcCHTiztyctycrQxq8eUs3snzvUyYMSjBYMSVLa09gNoOhhuseIm57V5LbmKPQsrYJx)THB8jPtrUkECWVDvaVnXupoyHUFCIFS3RbU3MyQhhmWElaPRRs1poHbl0Bk3EjGQbrh0Aq0b9nWvktmuqujXsuWzmHXUqrvActi44G(UWDKPQsrh7TeGU340b941btIqGw)(BKwzcCmlbOVDva)TOroFkCB3erFt373uB3erXqMQkfrOGOECcdM8Bd34t2HbaB1vXJd(nvu04MaNUNCKPQsrYJDCWh7TJmvvk6yVnUoGth0JdMacQtCqFllw1ik37Y6QrG3tXYqJn1ymiyS3fPozCDaNoOF2BnIY93r56qczESwmaaOIVLfRAeL7mI0vJaVBgzU2AFxK6uHB8p7TBja9T0PEr(UW1ik3FtlE4DHB83a2ulv093fUJmvvk6yVnUoGth0JdMacQtCqVF)(BJ47ydHTyyoEcd8eUeCajeCcjCcx09qcR)2rMQkfDS3fPozVqrvQ8ZElbO7noDqpEDWKieO1FBVqrvQCkaqrupGEli7TBja9T0PEr(2Ui9WW0IruF7Mbv8DHRruU)Mw8W7IuNKlH5iL)zVlsDQWn(N9wJOC)DSHWwmmhpHmIcvivktOWnaDVT4nsP7gGU340b9nruUycdRj0x0eYik4QThqVlsDscq3BC6G(zVTxOOkv(g8B5syos5VLlH5iLhBiSfdZXV)MYTxcOAq0bfZsa67M5AzowSAemdeI53Ri6G2oI60JtW75mI(YRHaHiGasiHaIriGvNG6GjUqFLWeq83aqHkKkLmIuBJ0e4hh871a3FpMaYizKX38YagYuvPi5XR)Ernvl(RbuYcjeOGswiqjausirisQ)vctaWEVduXJ92EtLYJ9wA4vB9nJmuldJjk87VlsDcG6wPUV1B9DrQtCnII(S3oDRC)yVhkB3CS73FxK6ueDXyV1B9TeGAFS3sdVARhV(93IM1vJDz7wES3dLTBo297VrHTES3dLTBo297VlsDYEtLYp7nIARh79qz7MJD)(Bara40TY9J9EOSDZXUF)9k12nb(XEpu2U5y3V)Ui1jja1(ZExK6KDyWk1)S3oDRCV(XEpu2U5y3VF)TLKUUkv)4cD)4a7yVxdCVnXupoyG9wasxxLQFCqf6nLBVeq1GOdAni6G(g4kLjgkiQKyjk4mMWyxOOknHjS(BljDDvQ(Xf6nsRmboMLa03UkG)w0iNpfUTBIOVP79BQTBIOyitvLIiuqupoHbt(THB8j7WaGT6Q4Xb)2rMQkfDS3fPozVqrvQ8ZEx4AeL7VPfp8wcq3BC6GE86GjriqR)2EHIQu5uaGIOEa9ESe9B3sa6BPt9I8DrQtYLWCKY)S3fPov4g)ZERruU)o2qylgMJNqgrHkKkLju4gGU3w8gP0Ddq3BC6G(MikxmHH1e6lAczefC12dO3fPojbO7noDq)S32luuLkFd(TCjmhP83YLWCKYJne2IH543FBeFhBiSfdZXtyGNWLGdiH1tiHt4IUhsy93urrJBcC6EYrMQkfjp2XbFS3oYuvPOJ92TeG(w6uViFx4AeL7VPfp8UWn(BaBQLk6Tgr5(7OCDiHmpwlgaauX3YIvnIYDgr6QrG3nJmxBTVLfRAeL7DzD1iW7PyzOXMAmgem2BJRd40b94GjGG6eh03fPov4g)ZExK6KX1bC6G(z3Fx4oYuvPOJ9246aoDqpoyciOoXb9(97VPC7LaQgeDqXSeG(UzUwMJfRgbZaHy(9kIoOTJOo94e8EoJOV8AiqiciGesiGyecy1jOoyIl0xjmbe)nauOcPsjJi12inb(Xb)EnW93JjGmsgz8nVmGHmvvksE86Vxut1I)AaLSqcbkOKfcucaLeseIK6FLWeaS37av8yVT3uP8yVLgE1wFZid1YWyIc)(BNUvUx)yVhkB3CS73FxK6exJOOp7Tt3k3p27HY2nh7(93fPofrxm2B9wFlbO2h7T0WR26XRF)DrQt2BQu(zVrHTES3dLTBo297VfnRRg7Y2T8yVhkB3CS73FJO26XEpu2U5y3V)gqeaoDRC)yVhkB3CS73FVsTDtGFS3dLTBo297VlsDscqT)S3fPozhgSs9p7DrQtau3k19TER3Fx4oYuvPOJ9wcq3BC6GE86GjriqRF)(XjMJ92vb8A20k5BsJbwTrHZ8BljDDvQ(Xjm46VTgqIkk2WoGo2XbFCYhV(XjFCsoo5JtWXbF)n12nbU8yVnCJFS3IHj7I0ddF2B7I0ddVtwAbrNuEK4OqHlMWOt4AHB7Max4iueijKBrYMWeMWeAwtOWClsOVO8KnHjmHjmHjmHjmcfLWOt4a1xIVUdbKWchHIs4ylHGjNcsClsOGiHKJdQfjCEKqHbtofK4wKSjmHjmH6wQjBctyctyctyctyekkHrNWbQVeFDhciHJqrccYXb1IKnHjmHju5IjBctyctis9cINWiuuYQCXKLOagJjm6eMSZ3jBctyctiqhnRSUkhbKegDct2eMWeMW57KnHjmHjmHjmHjeOJInWLQnI6MaFeqsy0jKCCsajztyctyctyctycb6igIO8kdVkHahr9LrajHrNqYXjbuqs2eMWeMWeMWeMqGok2fQHltyynHyliQL8rajHrNqYXbfKKnHjmHjmHjmHjeOJIA7ks5IgqsySOWC8eYQZP7egwtyB2ru0qiWhbKegDcjhhmOGKWeMWeMSjmHjmHcsGKSjmHjmHaDKJOgVwnIUhbKegDcjoijBctyctiqh5iQXzEDvTDteLRs5iGKWOti54KfcKKnHjmHjeOJaOiBL70kLiLU9LrajHrNqYGKSjmHjmHaDKDbHuUtKs3(YiGKWOtizqs2eMWeMqGoAj4aeSUPUjIsKs3JascJoHKbjztyctycb6OLGdGbRYWU4QG1n1nruIu6Eeqsy0jKmijBctyctiqhTeCamyvg2fxjsP7rajHrNqYGKSjmHjmHaDexNJbaYWU4krkD7lJascJoHKbjztyctycb6iUoNG1n1nruIu62xgbKegDcjdsYMWeMWec0rdgP0WRisPBFzeqsy0jKmijBctyctiqhnyKsdVIiLU9fgvKTYDALocijm6esgKKvq6(93RbUxZMwjFtAmWQnkCMFBLIInSdOJD86VgqRtmaJeqRdk56ehyady1j(xjmOeCCsEnGwNyagjGwhuY1joWagWQt8Vsyqj4(7DGkES3oDRCV(XEpu2U5y3V)Ui1jUgrr36BNUvUFS3dLTBo297VLau7J9wA4vB941V)Ui1j7nvk)S3IM1vJDz7wES3dLTBo297VruB9yVhkB3CS73FJcB9yVhkB3CS73FVsTDtGFS3dLTBo297VT3uP8yVLgE1wFZid1YWyIc)(Bara40TY9J9EOSDZXUF)DrQtsaQ9ND)TCie8fgrHkKkLF2BKwzcCmlbOVPfe1kf9w6uBMK36BjakIPXOsQxqux)S3gUXNSdda2QRIhh8BxfWli9TGUSmMqcjCczCtn8ec8fJRVDvaVMa3FpMaYizKX3sauetF2B3mOOAcC)9yciJKrgFBnGevuuCP6hh8BRbKOIMrTzsefa8UdBJ4BrJC(u42UjI(MYT8TDr6Hbmva)9AHB7Maxyls2eMWeMqK6fepHcpsqfN8ktjCEKqbvCYRmnYcIDnGgOUWXGBCIu62xeEeGn1sfnYIeopsiyYKjdscJb34eP0TVqiQacpcWMAPIgzrcNhjemzYKTqqUKv5Ijmzt23uB3erXqMQkfrOGOECYVfnsaBQLyQaET6Q)wqz)2rMQkfDS32fPhgIYoWFNSRfUTBcCHTiztyctycjkGXiqhbqr2k3PvkrkD7lJascJoH0cIoP8iXrHcxuyHJb34eP0TVi8iaBQLkAKfjCEKWyWnorkD7leIkGWJaSPwQOrwyrchBjemzYGKqYwKSjmHjmHefWyeOJSliKYDIu62xgbKegDcJb34eP0TVi8iaBQLkAKfjBctyctirbmgb6ObJuA4veP0TVWOISvUtR0rajHrNqAbrNuEK4OqHlkSWchdUXjsPBFHqubeEeGn1sfnYIes4egdUXjsPBFr4ra2ulv0ilSiHZJegdUXjsPBFHqubeEeGn1sfnYcls4ylHGjtgKew3IKnHjmHjKOagJaD0Grkn8kIu62xgbKegDcJb34eP0TVqiQacpcWMAPIgzrcjCcJb34eP0TVi8iaBQLkAKfjBctyct4oyt3jCrPBdVIqLTBaSnkkHrNqWXt2eMWeMWDWMUtyefjPjm6eoVQhByWk1fm1n8QzbErkCScEsqZSGBgWIQ2OWeKFAmmqigMxMNgdP4mBrYMWeMWeUO0THxrOY2na2gfLWOt4Is3gEfHkB3ayBuucfeju4fLUn8kcv2UbW2OOeo2sOWefWyeOJCe141Qr09iGKWXwcjkGXiqh5iQXzEDvTDteLRs5iGyHfjuqKqHxu62WRiuz7gaBJIs4ylHchrrsAcNhjemzYwyrYMWeMWeUgqjKjqIKqdpHaOgKuyIcymc0rZkRRYraXIekgs2eMWeMWeMWeMqZAcJb34ZkRRcpcWMAPIgbsczYIeMZF0jKB2j0xuEYMWeMWeMWeMWeMWeMWeUO0THxrOY2na2gfLWOt4Is3gEfHkB3ayBuucfeju4fLUn8kcv2UbW2OOeo2syels2eMWeMWeMWeMqLlMSjmHjmHkxmztyctyc3bB6oHoDRCpHrNqPUvBxyWKbjHZR6y0TY9O4RHzwg1yeUEDciHSfwKSjmHjmHM1e60TY9egD0j0rfnH(IYt2eMWeMWeMWeMWfLUn8kcv2UbW2OOegDcxu62WRiuz7gaBJIsOGiHcVO0THxrOY2na2gfLWXwcjhNels2eMWeMqLlMSjmHjmHefWyeOJwcoabRBQBIOeP09iGKWOti54KKWXwcxu62WRiuz7gaBJIsiHjmrH5s4qXEjHcQeUeCajCrPBzcfnsKwrrIgEvchmsPHxLWfLU9LKnHjmHjKOagJaD0sWbWGvzyxCvW6M6MikrkDpcijm6esuaJrGoAj4aeSUPUjIsKs3JaschBjKOagJaD0Grkn8kIu62xyur2k3Pv6iGKqctyIcZLWHI9scfujCbqcxcoGeoNzVt4Is3jePvuKOHxLWbJuA4vjCrPBFjztyctycjkGXiqhTeCamyvg2fxjsP7rajHrNqAbrNuEK4OqHlkmrbmgb6OLGdqW6M6MikrkDpcijCSLqIcymc0rdgP0WRisPBFzeqajHKTiztyctycjkGXiqhX15yaGmSlUsKs3(YiGKWOtiTGOtkpsCuOWffMOagJaDKDbHuUtKs3(YiGKqbrcjkGXiqhTeCamyvg2fxjsP7rabKes2IKnHjmHjKOagJaDexNtW6M6MikrkD7lJascJoH0cIoP8iXrHcxuyIcymc0rauKTYDALsKs3(YiGKqbrcjkGXiqhTeCamyvg2fxfSUPUjIsKs3JacijKSfjRYfFBxKEyyAXiQVDZGk(2TeG(2Ui9WWB7I0ddTtTzs((TDr6HHXuqu3e4Vt21c32nbUWwKSjmHjmHi1liEcjkGXiqhbqr2k3PvkrkD7lJacijemzYGKqWjRYfFBxKEyaNoOVt21c32nbUWwKSjmHjmHi1liEcjkGXiqhbqr2k3PvkrkD7lJascJhpHJs4OegpEcjkGXiqhX15eSUPUjIsKs3(YiGKW4Xt4OekigLW4XtiTGOtkpsCuOWffMOagJaD0sWbWGvzyxCvW6M6MikrkDpciGKqYwKSkx8Tgr5U8DmWJcBIiMzOwmIsymWJcBIHyiygEBxKEy49AHB7Maxyls2eMWeMqK6fepHoQOjRYft2Knzt232lQntV1ik3FBxKEyyYTeG(w6uViV)wcGIyctfWli9DuCxrRuBDCgefjLlhh4kLjgkiQCCcPIg64yQaEbPYX7XAHI0jGVyC9T1asurKUUkv)4e82vb82et94Gf6THB8jPtrUkECWVDZGIQztRKVjngy1gfoZV5LbmKPQsrYJx)TvQntIOaGyd7a6yhh8XjF86hN8Xj54Kpobhh893g7a)wFBLAZufku4IXg2b0XoobhN893wdirfXSyL(E22eZysrIjm2fQNWzfRw36BQOOXnboDp5itvLIKh74Gp2BhzQQu0XE7wcqFlDQxKVlsDIUNJAP0rf9ZEx4AeL7VPfp8wJOC)DSbUOXnbU8DrQtfUX)S3YIvnIYDgr6QrG3nJmxBTVLfRAeL7DzD1iW7PyzOXMAmgem27c34VbSPwQO7VlChzQQu0XUF)(BRbKOIAtm1Jx)TOrcytTetfWfSPAXFlO4VLaOiMInSdOJDCWhN8XRFCYhNKJt(4eCCY3FlbqrmrKAQw8Jtc43gX3eXi43UzqrTjM6Xbl0BjakIjGBe9LJx)9kIoOTJOo94e8EoJOVC86eqW7f1uT4hNeYVTd7a6y3VFCWKp2BjakIjGBe9LJx)TLKUUkv)4egC93wdirffByhqh74Gpo5Jx)4KpojhN8Xj44GV)2yh43671a3RztRKVjngy1gfoZVTsrXg2b0Xoo4Jt(41po47V3bQ4XE70TY96h79qz7MJD)(7IuN4AefDRVD6w5(XEpu2U5y3V)2EtLYJ9wA4vB9nJmuldJjk87VLau7J9wA4vB941V)Ui1j7nvk)S3OWwp27HY2nh7(93IM1vJDz7wES3dLTBo297VxP2UjWp27HY2nh7(93iQTES3dLTBo297VbebGt3k3p27HY2nh7(93fPojbO2F293YHqWxyefQqQu(zVrALjWXSeG(MwquRu0BPtTzsERVnCJpzhgaSvxfpo43UkGxq6BbDzzmHes4eY4MA4je4lgxF7QaEnbU)gNHcIkNWuLplSfFlbqrmHPc4fK(okUROvQToodIIKYLJdCLYedfevooHurdDCmvaVGu549yTqr6eWxmU(wcGIy6ZE7MbfvtG7VXzOGOYjmv5ZcBX3wdirfffxQ(Xb)2Ui9WaMkG)ETWTDtGlSfjBctyctis9cINqHhjOItELPeopsOGko5vMgzbXUgqdux4yWnorkD7lcpcWMAPIgzrcNhjemzYKbjHXGBCIu62xievaHhbytTurJSiHZJecMmzYwiixYQCXeMSj7BQTBIOyitvLIiuqupo53oYuvPOJ92TeG(2Ui9WWB7I0ddtULa03sN6f5B7I0ddVxlCB3e4cBrYMWeMWeIuVG4j0rfnzvU4B7I0ddJPGOUjWFNSRfUTBcCHTiztyctycrQxq8esuaJrGoIRZjyDtDteLiLU9LrabKecMmzqsi4Kv5IVTlspmGth03V1ik3LVJbEuyteXmd1Ir0B7I0ddrzh4Vt2K9T9IAZ0BnIY932fPhgMwmI6B3mOI3F7Qa(T(2vb82et94Gf6TeafXuSHDaDSJd(4KpE9Jt(4KCCY3FB4gFs6uKRIhh87f1uT4hNeYVDZGIQztRKVjngy1gfoZVTgqIkI01vP6hNG3uB3e4YJ92Wn(XElgMSlspm8zVTlspm8ozPfeDs5rIJcfUycJoHRfUTBcCHJqrGKqUfjBctyctOznHcZTiH(IYt2eMWeMWeMWeMWiuucJoHduFj(6oeqclCekkHJTecMCkiXTiHcIesooOwKW5rcfgm5uqIBrYMWeMWeQBPMSjmHjmHjmHjmHrOOegDchO(s81DiGeocfjiihhuls2eMWeMqLlMSjmHjmHi1liEcJqrjRYftwIcymMWOtyYoFNSjmHjmHaD0SY6QCeqsy0jmztyctycNVt2eMWeMWeMWeMqGok2axQ2iQBc8rajHrNqYXjbKKnHjmHjmHjmHjeOJyiIYRm8QecCe1xgbKegDcjhNeqbjztyctyctyctycb6OyxOgUmHH1eITGOwYhbKegDcjhhuqs2eMWeMWeMWeMqGokQTRiLlAajHXIcZXtiRoNUtyynHTzhrrdHaFeqsy0jKCCWGcsctyctyYMWeMWekibsYMWeMWec0roIA8A1i6Eeqsy0jK4GKSjmHjmHaDKJOgN51v12nruUkLJascJoHKJtwiqs2eMWeMqGocGISvUtRuIu62xgbKegDcjdsYMWeMWec0r2fes5orkD7lJascJoHKbjztyctycb6OLGdqW6M6MikrkDpcijm6esgKKnHjmHjeOJwcoagSkd7IRcw3u3erjsP7rajHrNqYGKSjmHjmHaD0sWbWGvzyxCLiLUhbKegDcjdsYMWeMWec0rCDogaid7IReP0TVmcijm6esgKKnHjmHjeOJ46Ccw3u3erjsPBFzeqsy0jKmijBctyctiqhnyKsdVIiLU9LrajHrNqYGKSjmHjmHaD0Grkn8kIu62xyur2k3Pv6iGKWOtizqswbP73FpNr0xoEDci4T1asurF2BRbKOIywSsFpBBIzmPiXeg7c1t4SIvRB9T1asurTjM6Xb)2i(MigR)2ndkQnXupoyHElbqrmrKAQw8JxV(BRbKOIMrTzsefa8UdBJ4BrJeWMAjMkGlyt1I)wqXF7QaEnBAL8nPXaR2OWz(nvu04MaNUNCKPQsrYJD)TOroFkCB3erFt5w(Efrh02ruNECsE7MbfDRVTsTzsefaeByhqh74Gpo5Jx)4KpojhN8Xj44GV)MxgWqMQkfjpo47hhm4J9EnW92et941j)w0ibSPwIPc4Vfu2j7B7I0ddyQa(71c32nbUWwKSjmHjmHi1liEchO(s81DiGeMOagJt0HqH7jCEKqWKtbjsSiHXJNWrmnkzvU4BljDDvQ(Xbd6BrJC(u42UjI(MYT8n12nrumKPQsrekiQhN8B7I0ddyQaEmaisD9Tgr5(Bd34t2HbaB1vXJd(n12nbU8yVLof5h7TyyYUi9WWN92Ui9WWBIcymorhcfUNWOti5KLOagJtdubsy0jKCYsuaJXjp40DcJoHKV)2Wn(XElgMSlspm8zVTlspm8MOagJtEWP7egDcjNSefWyCIoekCpHrNqYjlrbmgNgOcKWOti573Fl19kJbd3FhlZ4yml43oYuvPOJ92TeG(2Ui9WWBnIYD57yjLqZyaBQwsN3jMf0mJJnfd8AIQwmMfmZJ59AzVL2u(N92Ui9WWKBja9Tgr5(B7I0ddVxlCB3e4cpbscNajHYIvMJOChKeobscNajHYqbzRGKWjqs4eijCcKeobscNajHtGKWjqsOeGU340bfKeobscPdHc3bjHtGKWjls2eMWeMqZAcJb34rjJb34cldfKTMWakHJgbschbytTurJSiHuUycLa09gNoOjm6Ot4iIOCXegwtOVOjKruWvBpGgLqkxmHYIvMJOCpHrhDch1mYCT1oreZmu7Oe6lkpztyctyctyctycjkGX4eDiu4EcJoH0HqH7jBctyctOYftwLl(2Ui9WW0IruF7Mbv8(BJ4BIcymMWfLUFpNr0xEncrCqbLacigIHSqetDWeq86FLWGc(9AG7VhtazKmY4BEzadzQQuK841FtffnUjWP7jhzQQuK8yhh8XE7itvLIo2B3sa6BPt9I8DrQtlkD7lF27fLU9LPaafr9a69y5Tgr5(BIu62xEllw1ik3zePRgbE3mYCT1(ErPBF5n53fUXFdytTurVLfRAeL7DzD1iW7PyzOXMAmgem27IuNkCJ)zVlCnIY930IhU)UWDKPQsrh7(97Vxut1I)AavO6edOKjGeHeImOGjPoW(kHjG4V3bQ4XE70TY96h79qz7MJD)(7IuN4AefDRVD6w5(XEpu2U5y3V)2EtLYJ9wA4vB9nJmuldJjk87VLau7J9wA4vB941V)ELA7Ma)yVhkB3CS73FxK6K9MkLF2Be1wp27HY2nh7(93aIaWPBL7h79qz7MJD)(7IuNKau7p7nkS1J9EOSDZXUF)DrQt2HbRu)ZElAwxn2LTB5XEpu2U5y3VF)nsRmboMLa03UkGF)(7ihhmb1bF)ha + diff --git a/Complete Projects/Legion/HoTP heal bars/3.0/HP1 3.0.lua b/WeakAuras/Projects/HoTP heal bars/3.0/HP1 3.0.lua similarity index 97% rename from Complete Projects/Legion/HoTP heal bars/3.0/HP1 3.0.lua rename to WeakAuras/Projects/HoTP heal bars/3.0/HP1 3.0.lua index 9409ff1..042ea64 100644 --- a/Complete Projects/Legion/HoTP heal bars/3.0/HP1 3.0.lua +++ b/WeakAuras/Projects/HoTP heal bars/3.0/HP1 3.0.lua @@ -1,77 +1,77 @@ ---WeakAurasSaved.HoTP 3.0 ---TRIGGER -function() - return true -end - ---ICON --Trigger for scripts -function() - WeakAurasSaved.HoTP.percentageHealth = aura_env.round((UnitHealth("player") / UnitHealthMax("player")) * 100, 0) - WeakAurasSaved.HoTP.currentHealth = UnitHealth("player") - WeakAurasSaved.HoTP.missingHealthPercentage = aura_env.round(((UnitHealthMax("player") - UnitHealth("player")) / UnitHealthMax("player")) * 100, 2) - WeakAurasSaved.HoTP.missingHealth = UnitHealthMax("player") - UnitHealth("player") - local healingMultiplier = 1. - local versa = GetCombatRatingBonus(CR_VERSATILITY_DAMAGE_DONE) - healingMultiplier = healingMultiplier + (healingMultiplier * (WeakAurasSaved.HoTP.traitLevel * WeakAurasSaved.HoTP.traitEffectiveness)) - healingMultiplier = healingMultiplier + (healingMultiplier * (versa / 100)) - for k, v in pairs(WeakAurasSaved.HoTP.Buffs) do - if UnitBuff("player", k) ~= nil then - healingMultiplier = healingMultiplier + (healingMultiplier * v) - end - end - local talent = select(10, GetTalentInfoByID(22430)) - if talent == true then - healingMultiplier = healingMultiplier + (healingMultiplier * 0.3) - end - WeakAurasSaved.HoTP.hotpRelativeHeal = 0.3 * healingMultiplier --How much % hotp heals disregarding missing health - WeakAurasSaved.HoTP.hotpAbsoluteRelativeHeal = WeakAurasSaved.HoTP.hotpRelativeHeal * WeakAurasSaved.HoTP.missingHealthPercentage --How much % hp hotp will heal regarding missing health - WeakAurasSaved.HoTP.hotpAbsoluteHeal = aura_env.round(WeakAurasSaved.HoTP.hotpRelativeHeal * WeakAurasSaved.HoTP.missingHealth, 0) - WeakAurasSaved.HoTP.newApsoluteHealth = aura_env.round(WeakAurasSaved.HoTP.currentHealth + WeakAurasSaved.HoTP.hotpAbsoluteHeal, 0) - WeakAurasSaved.HoTP.newRelativeHealth = aura_env.round(WeakAurasSaved.HoTP.percentageHealth + WeakAurasSaved.HoTP.hotpAbsoluteRelativeHeal, 0) -end - ---DURATION -function() - return WeakAurasSaved.HoTP.percentageHealth, 100, 1 -end - ---NAME -function() - return WeakAurasSaved.HoTP.percentageHealth .. " " .. WeakAurasSaved.HoTP.newRelativeHealth .. " +" .. aura_env.round(WeakAurasSaved.HoTP.hotpAbsoluteRelativeHeal, 0) -end - ---DISPLAY -function() - return ("%.0fk / %.0fk"):format(UnitHealth("player") / 1000, UnitHealthMax("player") / 1000); -end - ---INIT -aura_env.round = function(var, n) - if (n) then - var = math.floor((var * 10 ^ n) + 0.5) / (10 ^ n) - else - var = math.floor(var + 0.5) - end - return var -end -WeakAurasSaved.HoTP = -{ - ["Buffs"] = - { - ["Consecration"] = 0.3, - ["Avenging Wrath"] = 0.35, - ["Chains of Thrayn"] = 0.5, - ["Ilterendi, Crown Jewel of Silvermoon"] = 0.15, - }, - ["traitLevel"] = 7, - ["traitEffectiveness"] = 0.06, - ["percentageHealth"] = 0, - ["currentHealth"] = 0, - ["hotpRelativeHeal"] = 0, - ["hotpAbsoluteRelativeHeal"] = 0, - ["hotpAbsoluteHeal"] = 0, - ["newApsoluteHealth"] = 0, - ["newRelativeHealth"] = 0, - ["missingHealth"] = 0, - ["missingHealthPercentage"] = 0, -} +--WeakAurasSaved.HoTP 3.0 +--TRIGGER +function() + return true +end + +--ICON --Trigger for scripts +function() + WeakAurasSaved.HoTP.percentageHealth = aura_env.round((UnitHealth("player") / UnitHealthMax("player")) * 100, 0) + WeakAurasSaved.HoTP.currentHealth = UnitHealth("player") + WeakAurasSaved.HoTP.missingHealthPercentage = aura_env.round(((UnitHealthMax("player") - UnitHealth("player")) / UnitHealthMax("player")) * 100, 2) + WeakAurasSaved.HoTP.missingHealth = UnitHealthMax("player") - UnitHealth("player") + local healingMultiplier = 1. + local versa = GetCombatRatingBonus(CR_VERSATILITY_DAMAGE_DONE) + healingMultiplier = healingMultiplier + (healingMultiplier * (WeakAurasSaved.HoTP.traitLevel * WeakAurasSaved.HoTP.traitEffectiveness)) + healingMultiplier = healingMultiplier + (healingMultiplier * (versa / 100)) + for k, v in pairs(WeakAurasSaved.HoTP.Buffs) do + if UnitBuff("player", k) ~= nil then + healingMultiplier = healingMultiplier + (healingMultiplier * v) + end + end + local talent = select(10, GetTalentInfoByID(22430)) + if talent == true then + healingMultiplier = healingMultiplier + (healingMultiplier * 0.3) + end + WeakAurasSaved.HoTP.hotpRelativeHeal = 0.3 * healingMultiplier --How much % hotp heals disregarding missing health + WeakAurasSaved.HoTP.hotpAbsoluteRelativeHeal = WeakAurasSaved.HoTP.hotpRelativeHeal * WeakAurasSaved.HoTP.missingHealthPercentage --How much % hp hotp will heal regarding missing health + WeakAurasSaved.HoTP.hotpAbsoluteHeal = aura_env.round(WeakAurasSaved.HoTP.hotpRelativeHeal * WeakAurasSaved.HoTP.missingHealth, 0) + WeakAurasSaved.HoTP.newApsoluteHealth = aura_env.round(WeakAurasSaved.HoTP.currentHealth + WeakAurasSaved.HoTP.hotpAbsoluteHeal, 0) + WeakAurasSaved.HoTP.newRelativeHealth = aura_env.round(WeakAurasSaved.HoTP.percentageHealth + WeakAurasSaved.HoTP.hotpAbsoluteRelativeHeal, 0) +end + +--DURATION +function() + return WeakAurasSaved.HoTP.percentageHealth, 100, 1 +end + +--NAME +function() + return WeakAurasSaved.HoTP.percentageHealth .. " " .. WeakAurasSaved.HoTP.newRelativeHealth .. " +" .. aura_env.round(WeakAurasSaved.HoTP.hotpAbsoluteRelativeHeal, 0) +end + +--DISPLAY +function() + return ("%.0fk / %.0fk"):format(UnitHealth("player") / 1000, UnitHealthMax("player") / 1000); +end + +--INIT +aura_env.round = function(var, n) + if (n) then + var = math.floor((var * 10 ^ n) + 0.5) / (10 ^ n) + else + var = math.floor(var + 0.5) + end + return var +end +WeakAurasSaved.HoTP = +{ + ["Buffs"] = + { + ["Consecration"] = 0.3, + ["Avenging Wrath"] = 0.35, + ["Chains of Thrayn"] = 0.5, + ["Ilterendi, Crown Jewel of Silvermoon"] = 0.15, + }, + ["traitLevel"] = 7, + ["traitEffectiveness"] = 0.06, + ["percentageHealth"] = 0, + ["currentHealth"] = 0, + ["hotpRelativeHeal"] = 0, + ["hotpAbsoluteRelativeHeal"] = 0, + ["hotpAbsoluteHeal"] = 0, + ["newApsoluteHealth"] = 0, + ["newRelativeHealth"] = 0, + ["missingHealth"] = 0, + ["missingHealthPercentage"] = 0, +} diff --git a/Complete Projects/Legion/HoTP heal bars/3.0/HP2 3.0.lua b/WeakAuras/Projects/HoTP heal bars/3.0/HP2 3.0.lua similarity index 93% rename from Complete Projects/Legion/HoTP heal bars/3.0/HP2 3.0.lua rename to WeakAuras/Projects/HoTP heal bars/3.0/HP2 3.0.lua index 34dbeb0..6c1b4de 100644 --- a/Complete Projects/Legion/HoTP heal bars/3.0/HP2 3.0.lua +++ b/WeakAuras/Projects/HoTP heal bars/3.0/HP2 3.0.lua @@ -1,10 +1,10 @@ ---HoTP 3.0 ---TRIGGER -function() - return true -end - ---DURATION -function() - return WeakAurasSaved.HoTP.newRelativeHealth, 100, 1 -end +--HoTP 3.0 +--TRIGGER +function() + return true +end + +--DURATION +function() + return WeakAurasSaved.HoTP.newRelativeHealth, 100, 1 +end diff --git a/Complete Projects/Legion/Holy Shield.lua b/WeakAuras/Projects/Holy Shield.lua similarity index 97% rename from Complete Projects/Legion/Holy Shield.lua rename to WeakAuras/Projects/Holy Shield.lua index 5ba2f92..822b0de 100644 --- a/Complete Projects/Legion/Holy Shield.lua +++ b/WeakAuras/Projects/Holy Shield.lua @@ -1,76 +1,76 @@ ---COMBAT_LOG_EVENT_UNFILTERED PLAYER_REGEN_DISABLED -function(...) - local event = select(1, ...) - if event == "COMBAT_LOG_EVENT_UNFILTERED" then - local e = select(3, ...) - if e == "SWING_DAMAGE" then - local target = select(10, ...) - if target == UnitName("player") then - local bloq = select(17, ...) - if bloq ~= nil then - local dmg = select(13, ...) - local totaldmg = dmg + bloq - local perbloq = aura_env.round((bloq / totaldmg) * 100, 2) - --print(dmg, totaldmg, perbloq, bloq) - aura_env.pbloq = (aura_env.pbloq + perbloq) / 2 - aura_env.totalbloq = aura_env.totalbloq + bloq - end - end - end - if e == "SPELL_DAMAGE" or e == "SPELL_PERIODIC_DAMAGE" then - local target = select(10, ...) - if target == UnitName("player") then - local bloq = select(21, ...) - if bloq ~= nil then - local dmg = select(16, ...) - local totaldmg = dmg + bloq - local perbloq = aura_env.round((bloq / totaldmg) * 100, 2) - --print(dmg, totaldmg, perbloq, bloq) - aura_env.pbloq = (aura_env.pbloq + perbloq) / 2 - aura_env.totalbloq = aura_env.totalbloq + bloq - end - end - end - end - if event == "PLAYER_REGEN_DISABLED" then - aura_env.totalbloq = 0 - end -end - ---DISPLAY -function() - return aura_env.shorten(aura_env.totalbloq) .. "\n" .. aura_env.round(aura_env.pbloq, 2) .. "%\n" .. aura_env.round(aura_env.sbloq, 2) .. "%" -end - ---INIT -aura_env.totalbloq = 0 -aura_env.pbloq = 40 -aura_env.sbloq = 40 -aura_env.shorten = function(val) - local function round(var, n) - if (n) then - var = math.floor((var * 10 ^ n) + 0.5) / (10 ^ n) - else - var = math.floor(var + 0.5) - end - return var - end - local n = 2 - if val < 1e3 then - return round(val, n) - elseif val > 1e3 and val < 1e6 then - return round(val / 1e3, n) .. "k" - elseif val > 1e6 and val < 1e9 then - return round(val / 1e6, n) .. "M" - elseif val > 1e9 then - return round(val / 1e9, n) .. "G" - end -end -aura_env.round = function(var, n) - if (n) then - var = math.floor((var * 10 ^ n) + 0.5) / (10 ^ n) - else - var = math.floor(var + 0.5) - end - return var -end +--COMBAT_LOG_EVENT_UNFILTERED PLAYER_REGEN_DISABLED +function(...) + local event = select(1, ...) + if event == "COMBAT_LOG_EVENT_UNFILTERED" then + local e = select(3, ...) + if e == "SWING_DAMAGE" then + local target = select(10, ...) + if target == UnitName("player") then + local bloq = select(17, ...) + if bloq ~= nil then + local dmg = select(13, ...) + local totaldmg = dmg + bloq + local perbloq = aura_env.round((bloq / totaldmg) * 100, 2) + --print(dmg, totaldmg, perbloq, bloq) + aura_env.pbloq = (aura_env.pbloq + perbloq) / 2 + aura_env.totalbloq = aura_env.totalbloq + bloq + end + end + end + if e == "SPELL_DAMAGE" or e == "SPELL_PERIODIC_DAMAGE" then + local target = select(10, ...) + if target == UnitName("player") then + local bloq = select(21, ...) + if bloq ~= nil then + local dmg = select(16, ...) + local totaldmg = dmg + bloq + local perbloq = aura_env.round((bloq / totaldmg) * 100, 2) + --print(dmg, totaldmg, perbloq, bloq) + aura_env.pbloq = (aura_env.pbloq + perbloq) / 2 + aura_env.totalbloq = aura_env.totalbloq + bloq + end + end + end + end + if event == "PLAYER_REGEN_DISABLED" then + aura_env.totalbloq = 0 + end +end + +--DISPLAY +function() + return aura_env.shorten(aura_env.totalbloq) .. "\n" .. aura_env.round(aura_env.pbloq, 2) .. "%\n" .. aura_env.round(aura_env.sbloq, 2) .. "%" +end + +--INIT +aura_env.totalbloq = 0 +aura_env.pbloq = 40 +aura_env.sbloq = 40 +aura_env.shorten = function(val) + local function round(var, n) + if (n) then + var = math.floor((var * 10 ^ n) + 0.5) / (10 ^ n) + else + var = math.floor(var + 0.5) + end + return var + end + local n = 2 + if val < 1e3 then + return round(val, n) + elseif val > 1e3 and val < 1e6 then + return round(val / 1e3, n) .. "k" + elseif val > 1e6 and val < 1e9 then + return round(val / 1e6, n) .. "M" + elseif val > 1e9 then + return round(val / 1e9, n) .. "G" + end +end +aura_env.round = function(var, n) + if (n) then + var = math.floor((var * 10 ^ n) + 0.5) / (10 ^ n) + else + var = math.floor(var + 0.5) + end + return var +end diff --git a/Complete Projects/Legion/HowDead.lua b/WeakAuras/Projects/HowDead.lua similarity index 95% rename from Complete Projects/Legion/HowDead.lua rename to WeakAuras/Projects/HowDead.lua index 15a5fa5..7bb72fd 100644 --- a/Complete Projects/Legion/HowDead.lua +++ b/WeakAuras/Projects/HowDead.lua @@ -1,71 +1,71 @@ ---COMBAT_LOG_EVENT_UNFILTERED UNIT_AURA UNIT_HEALTH -function(e, ...) - if e == "UNIT_AURA" then - - end - --for i = 1, 40 do - --local x = select(i, ...) - --if x then - --print(i, x) - --end - --end -end - ---INIT -aura_env.bossList = { - --BRH - ["The Amalgam of Souls"] = true, - ["Illysanna Ravencrest"] = true, - ["Smashpite the Hateful"] = true, - ["Lord Kul'talos Ravencrest"] = true, - - --CoS - ["Patrol Captain Gerdo"] = true, - ["Talixae Flamewreath"] = true, - ["Advisor Melandrus"] = true, - - --DHT - ["Archdruid Gleidalis"] = true, - ["Oakheart"] = true, - ["Dresaron"] = true, - ["Shade of Xavius"] = true, - - --EoA - ["Warlord Parjesh"] = true, - ["Lady Hatecoil"] = true, - ["King Deepbeard"] = true, - ["Serpentrix"] = true, - ["Wrath of Azshara"] = true, - - --HoV - ["Hymdall"] = true, - ["Hyrja"] = true, - ["Fenryr"] = true, - ["God-King Skovald"] = true, - ["Odyn"] = true, - - --MoS - ["Ymiron, the Fallen King"] = true, - ["Harbaron"] = true, - ["Helya"] = true, - - --NL - ["Rokmora"] = true, - ["Ularogg Cragshaper"] = true, - ["Naraxas"] = true, - ["Dargul the Underking"] = true, - - --Arc - ["Ivanyr"] = true, - ["Corstilax"] = true, - ["General Xakal"] = true, - ["Nal'tira"] = true, - ["Advisor Vandros"] = true, - - --VoTW - ["Tirathon Saltheril"] = true, - ["Inquisitor Tormentorum"] = true, - ["Ash'golm"] = true, - ["Glazer"] = true, - ["Cordana Felsong"] = true, -} +--COMBAT_LOG_EVENT_UNFILTERED UNIT_AURA UNIT_HEALTH +function(e, ...) + if e == "UNIT_AURA" then + + end + --for i = 1, 40 do + --local x = select(i, ...) + --if x then + --print(i, x) + --end + --end +end + +--INIT +aura_env.bossList = { + --BRH + ["The Amalgam of Souls"] = true, + ["Illysanna Ravencrest"] = true, + ["Smashpite the Hateful"] = true, + ["Lord Kul'talos Ravencrest"] = true, + + --CoS + ["Patrol Captain Gerdo"] = true, + ["Talixae Flamewreath"] = true, + ["Advisor Melandrus"] = true, + + --DHT + ["Archdruid Gleidalis"] = true, + ["Oakheart"] = true, + ["Dresaron"] = true, + ["Shade of Xavius"] = true, + + --EoA + ["Warlord Parjesh"] = true, + ["Lady Hatecoil"] = true, + ["King Deepbeard"] = true, + ["Serpentrix"] = true, + ["Wrath of Azshara"] = true, + + --HoV + ["Hymdall"] = true, + ["Hyrja"] = true, + ["Fenryr"] = true, + ["God-King Skovald"] = true, + ["Odyn"] = true, + + --MoS + ["Ymiron, the Fallen King"] = true, + ["Harbaron"] = true, + ["Helya"] = true, + + --NL + ["Rokmora"] = true, + ["Ularogg Cragshaper"] = true, + ["Naraxas"] = true, + ["Dargul the Underking"] = true, + + --Arc + ["Ivanyr"] = true, + ["Corstilax"] = true, + ["General Xakal"] = true, + ["Nal'tira"] = true, + ["Advisor Vandros"] = true, + + --VoTW + ["Tirathon Saltheril"] = true, + ["Inquisitor Tormentorum"] = true, + ["Ash'golm"] = true, + ["Glazer"] = true, + ["Cordana Felsong"] = true, +} diff --git a/WIP/Hydra Shot 2.lua b/WeakAuras/Projects/Hydra Shot 2.lua similarity index 97% rename from WIP/Hydra Shot 2.lua rename to WeakAuras/Projects/Hydra Shot 2.lua index 7a0120d..decd84c 100644 --- a/WIP/Hydra Shot 2.lua +++ b/WeakAuras/Projects/Hydra Shot 2.lua @@ -1,70 +1,70 @@ ---UNIT_AURA ---Event that fires off whenever an aura is applied or removed -- probably overkill for this application but it should work relatively fine ---Can also use combatlog event for cast success of hydra shot but am unsure if that would work ---The basic idea of this setup is to minimize the time it's calculating stuff to make it as efficient, to do that we only enable the aura while hydra shot is active; To find when it is active we get the time when it was cast and add 8 seconds to that (Don't know why 8, previous aura said so) ---We find what auras are applied after the cast has begun and see for each if it's the one we're looking for (hydra shot) ---Theoretically SHOULD PROBABLY *LIKELY* work but practically probably isn't going to -function() - if (aura_env.startCast + 12) < GetTime() then - local spell = GetSpellInfo(230139) --hydra shot 230139 - local spell2 = GetSpellInfo(239375) --fish 239375 - local spell3 = GetSpellInfo(230214) -- tank debuff - local j = 0 - for i = 1, GetNumGroupMembers() do - local name = GetRaidRosterInfo(i) - if not UnitDebuff(name, spell) and not UnitDebuff(name, spell2) and not UnitDebuff(name, spell3) then - if name == UnitName("player") and j < 2 then - aura_env.output = "|cffffd00cStar|r" - return 0 - end - if name == UnitName("player") and j >= 2 and j < 5 then - aura_env.output = "cff4baf1cTriangle|r" - return 0 - end - if name == UnitName("player") and j >= 5 and j < 8 then - aura_env.output = "cfff6802cCircle|r" - return 0 - end - if name == UnitName("player") and j >= 8 and j < 11 then - aura_env.output = "cfff0098cDiamond|r" - return 0 - end - j = j + 1 - end - end - aura_env.output = "Whatever" - return 0 - end -end - ---DISPLAY -function() --It's more efficient to only return a value every frame instead of calculating for it as well as returning it - return aura_env.output -end - ---EVERY FRAME TRIGGER ---The trigger that will be actually showing the aura -function() --Enables the weakaura for 8 seconds after the cast - if (aura_env.startCast + 12) < GetTime() then --If the time of cast + 8 seconds is < current time the aura will be shown (aka for the next 8 seconds after the cast) - return true - else - return false - end -end - ---COMBAT_LOG_EVENT_UNFILTERED -function(...) --Enables the weakaura for 8 seconds after the cast - local subevent = select(3, ...) - if subevent == "SPELL_CAST_START" then --If there was a spell cast (in the combat log) - local caster = select(6, ...) --Found who cast it - local spell = select(14, ...) --And what was cast - if caster:match("Mistress") and spell == "Hydra Shot" then --If the spell is Hydra Shot and Mistress cast it then - aura_env.startCast = GetTime() --Get the time when it was cast - end - end -end - ---INIT ---Defines protected variables which are the output and the cast time for the timer -aura_env.startCast = 0 +--UNIT_AURA +--Event that fires off whenever an aura is applied or removed -- probably overkill for this application but it should work relatively fine +--Can also use combatlog event for cast success of hydra shot but am unsure if that would work +--The basic idea of this setup is to minimize the time it's calculating stuff to make it as efficient, to do that we only enable the aura while hydra shot is active; To find when it is active we get the time when it was cast and add 8 seconds to that (Don't know why 8, previous aura said so) +--We find what auras are applied after the cast has begun and see for each if it's the one we're looking for (hydra shot) +--Theoretically SHOULD PROBABLY *LIKELY* work but practically probably isn't going to +function() + if (aura_env.startCast + 12) < GetTime() then + local spell = GetSpellInfo(230139) --hydra shot 230139 + local spell2 = GetSpellInfo(239375) --fish 239375 + local spell3 = GetSpellInfo(230214) -- tank debuff + local j = 0 + for i = 1, GetNumGroupMembers() do + local name = GetRaidRosterInfo(i) + if not UnitDebuff(name, spell) and not UnitDebuff(name, spell2) and not UnitDebuff(name, spell3) then + if name == UnitName("player") and j < 2 then + aura_env.output = "|cffffd00cStar|r" + return 0 + end + if name == UnitName("player") and j >= 2 and j < 5 then + aura_env.output = "cff4baf1cTriangle|r" + return 0 + end + if name == UnitName("player") and j >= 5 and j < 8 then + aura_env.output = "cfff6802cCircle|r" + return 0 + end + if name == UnitName("player") and j >= 8 and j < 11 then + aura_env.output = "cfff0098cDiamond|r" + return 0 + end + j = j + 1 + end + end + aura_env.output = "Whatever" + return 0 + end +end + +--DISPLAY +function() --It's more efficient to only return a value every frame instead of calculating for it as well as returning it + return aura_env.output +end + +--EVERY FRAME TRIGGER +--The trigger that will be actually showing the aura +function() --Enables the weakaura for 8 seconds after the cast + if (aura_env.startCast + 12) < GetTime() then --If the time of cast + 8 seconds is < current time the aura will be shown (aka for the next 8 seconds after the cast) + return true + else + return false + end +end + +--COMBAT_LOG_EVENT_UNFILTERED +function(...) --Enables the weakaura for 8 seconds after the cast + local subevent = select(3, ...) + if subevent == "SPELL_CAST_START" then --If there was a spell cast (in the combat log) + local caster = select(6, ...) --Found who cast it + local spell = select(14, ...) --And what was cast + if caster:match("Mistress") and spell == "Hydra Shot" then --If the spell is Hydra Shot and Mistress cast it then + aura_env.startCast = GetTime() --Get the time when it was cast + end + end +end + +--INIT +--Defines protected variables which are the output and the cast time for the timer +aura_env.startCast = 0 aura_env.output = "" \ No newline at end of file diff --git a/WIP/Hydra Shot.lua b/WeakAuras/Projects/Hydra Shot.lua similarity index 97% rename from WIP/Hydra Shot.lua rename to WeakAuras/Projects/Hydra Shot.lua index 42adeee..eac2b4c 100644 --- a/WIP/Hydra Shot.lua +++ b/WeakAuras/Projects/Hydra Shot.lua @@ -1,50 +1,50 @@ -function () - local spell = GetSpellInfo(230139) --hydra shot 230139 - local spell2 = GetSpellInfo(239375) --fish 239375 - local spell3 = GetSpellInfo(230214) -- tank debuff - local star = "star" --Don't need this, isn't used anywhere - local triangle = "triangle" --Don't need this, isn't used anywhere - local circle = "circle" --Don't need this, isn't used anywhere - local diamond = "diamond" --Don't need this, isn't used anywhere - local playerName = UnitName("player") - --These empty lines are pissing me off only because I don't do it as such - local total = 0 --Don't need this, isn't used anywhere - local max = 18 --Don't need this, isn't used anywhere - local j = 0 - - for i=1, GetNumGroupMembers() do - - local name = GetRaidRosterInfo(i) - if (not UnitDebuff(name, spell) and not UnitDebuff(name, spell2) and not UnitDebuff(name, spell3)) then - - if (name == playerName and j<2) then - - return string.format("%s", "|cffffd00cStar") --It is good habbit to close a |c with an |r (basically returns the color to it's default from |c) - - end - - if (name == playerName and j>=2 and j<5) then - return string.format("%s", "|cff4baf1cTriangle") - - end - - if (name == playerName and j>=5 and j<8) then - return string.format("%s", "|cfff6802cCircle") - end - - if (name == playerName and j>=8 and j<11) then - return string.format("%s", "|cfff0098cDiamond") - end - - j = j+1 - - end - - - end - - return string.format("%s", "Whatever") -end - - - +function () + local spell = GetSpellInfo(230139) --hydra shot 230139 + local spell2 = GetSpellInfo(239375) --fish 239375 + local spell3 = GetSpellInfo(230214) -- tank debuff + local star = "star" --Don't need this, isn't used anywhere + local triangle = "triangle" --Don't need this, isn't used anywhere + local circle = "circle" --Don't need this, isn't used anywhere + local diamond = "diamond" --Don't need this, isn't used anywhere + local playerName = UnitName("player") + --These empty lines are pissing me off only because I don't do it as such + local total = 0 --Don't need this, isn't used anywhere + local max = 18 --Don't need this, isn't used anywhere + local j = 0 + + for i=1, GetNumGroupMembers() do + + local name = GetRaidRosterInfo(i) + if (not UnitDebuff(name, spell) and not UnitDebuff(name, spell2) and not UnitDebuff(name, spell3)) then + + if (name == playerName and j<2) then + + return string.format("%s", "|cffffd00cStar") --It is good habbit to close a |c with an |r (basically returns the color to it's default from |c) + + end + + if (name == playerName and j>=2 and j<5) then + return string.format("%s", "|cff4baf1cTriangle") + + end + + if (name == playerName and j>=5 and j<8) then + return string.format("%s", "|cfff6802cCircle") + end + + if (name == playerName and j>=8 and j<11) then + return string.format("%s", "|cfff0098cDiamond") + end + + j = j+1 + + end + + + end + + return string.format("%s", "Whatever") +end + + + diff --git a/WIP/Icey AP/C AP.lua b/WeakAuras/Projects/Icey AP/C AP.lua similarity index 96% rename from WIP/Icey AP/C AP.lua rename to WeakAuras/Projects/Icey AP/C AP.lua index 0b73ad2..c641dda 100644 --- a/WIP/Icey AP/C AP.lua +++ b/WeakAuras/Projects/Icey AP/C AP.lua @@ -1,5 +1,5 @@ -function() - local AP = UnitPower("player") - local maxAP = UnitPowerMax("player") - return maxAP - AP, maxAP, 1 +function() + local AP = UnitPower("player") + local maxAP = UnitPowerMax("player") + return maxAP - AP, maxAP, 1 end \ No newline at end of file diff --git a/WIP/Icey AP/Cast AP.lua b/WeakAuras/Projects/Icey AP/Cast AP.lua similarity index 97% rename from WIP/Icey AP/Cast AP.lua rename to WeakAuras/Projects/Icey AP/Cast AP.lua index 9513580..673a0bb 100644 --- a/WIP/Icey AP/Cast AP.lua +++ b/WeakAuras/Projects/Icey AP/Cast AP.lua @@ -1,27 +1,27 @@ -function() - local AP = UnitPower("player") --Get astral power and max power - local maxAP = UnitPowerMax("player") - local APgains = --Define AP gained by spells - { - ["New Moon"] = 10, - ["Half Moon"] = 20, - ["Full Moon"] = 40, - ["Lunar Strike"] = 12, - ["Solar Wrath"] = 8 - } - local buff = UnitBuff("player", "Blessing of Elune") --Find 25% increase if present - local casting = UnitCastingInfo("player") --Get spell currently being cast if any - if casting then --If there's a spell being cast - local plusAP = AP + APgains[casting] --Add AP gained by spell currently cast to current AP to "predict" AP - if buff then - if casting == "Lunar Strike" or casting == "Solar Wrath" then --If either spell affected by buff is being cast add 25% to it's ap gained - local plusAP = AP + APgains[casting] - plusAP = math.floor(plusAP + APgains[casting] * 0.25) --Get the 25% of 8 or 12 and add it to 8 or 12 - end - end - return maxAP - plusAP, maxAP, 1 - end - if not casting then - return maxAP - AP, maxAP, 1 - end +function() + local AP = UnitPower("player") --Get astral power and max power + local maxAP = UnitPowerMax("player") + local APgains = --Define AP gained by spells + { + ["New Moon"] = 10, + ["Half Moon"] = 20, + ["Full Moon"] = 40, + ["Lunar Strike"] = 12, + ["Solar Wrath"] = 8 + } + local buff = UnitBuff("player", "Blessing of Elune") --Find 25% increase if present + local casting = UnitCastingInfo("player") --Get spell currently being cast if any + if casting then --If there's a spell being cast + local plusAP = AP + APgains[casting] --Add AP gained by spell currently cast to current AP to "predict" AP + if buff then + if casting == "Lunar Strike" or casting == "Solar Wrath" then --If either spell affected by buff is being cast add 25% to it's ap gained + local plusAP = AP + APgains[casting] + plusAP = math.floor(plusAP + APgains[casting] * 0.25) --Get the 25% of 8 or 12 and add it to 8 or 12 + end + end + return maxAP - plusAP, maxAP, 1 + end + if not casting then + return maxAP - AP, maxAP, 1 + end end \ No newline at end of file diff --git a/WIP/Icey AP/Pred AP.lua b/WeakAuras/Projects/Icey AP/Pred AP.lua similarity index 97% rename from WIP/Icey AP/Pred AP.lua rename to WeakAuras/Projects/Icey AP/Pred AP.lua index d267801..1e0437b 100644 --- a/WIP/Icey AP/Pred AP.lua +++ b/WeakAuras/Projects/Icey AP/Pred AP.lua @@ -1,5 +1,5 @@ -function() - local AP = UnitPower("player") --Get astral power and max power - local maxAP = UnitPowerMax("player") - return maxAP - AP, maxAP, 1 +function() + local AP = UnitPower("player") --Get astral power and max power + local maxAP = UnitPowerMax("player") + return maxAP - AP, maxAP, 1 end \ No newline at end of file diff --git a/Complete Projects/Legion/Ignore Alliance.lua b/WeakAuras/Projects/Ignore Alliance.lua similarity index 95% rename from Complete Projects/Legion/Ignore Alliance.lua rename to WeakAuras/Projects/Ignore Alliance.lua index 63158ab..9f3cb05 100644 --- a/Complete Projects/Legion/Ignore Alliance.lua +++ b/WeakAuras/Projects/Ignore Alliance.lua @@ -1,8 +1,8 @@ ---CHAT_MSG_SAY -function(e, text, sender, language) - if GetRealZoneText() == "Elwynn Forest" then - if language == "Common" then - AddIgnore(sender) - end - end -end +--CHAT_MSG_SAY +function(e, text, sender, language) + if GetRealZoneText() == "Elwynn Forest" then + if language == "Common" then + AddIgnore(sender) + end + end +end diff --git a/Complete Projects/Legion/Ilterendi Uptime.lua b/WeakAuras/Projects/Ilterendi Uptime.lua similarity index 96% rename from Complete Projects/Legion/Ilterendi Uptime.lua rename to WeakAuras/Projects/Ilterendi Uptime.lua index ebc0430..bfc5f07 100644 --- a/Complete Projects/Legion/Ilterendi Uptime.lua +++ b/WeakAuras/Projects/Ilterendi Uptime.lua @@ -1,20 +1,20 @@ -DISPLAY -function() - if aura_env.startTime ~= nil and aura_env.buffTime ~= nil then - local localTime = GetTime() - aura_env.startTime - local buff = UnitBuff("player", "Ilterendi, Crown Jewel of Silvermoon") - if buff ~= nil then - aura_env.buffTime = aura_env.buffTime + (GetTime() - aura_env.lastTime) - end - aura_env.lastTime = GetTime() - aura_env.uptime = (math.floor((aura_env.buffTime / localTime) * 100)) - return aura_env.uptime .. "%%" - end -end - -ON SHOW -aura_env.startTime = GetTime() -aura_env.buffTime = 0 - -ON HIDE -print("20% god uptime", aura_env.uptime .. "%") +DISPLAY +function() + if aura_env.startTime ~= nil and aura_env.buffTime ~= nil then + local localTime = GetTime() - aura_env.startTime + local buff = UnitBuff("player", "Ilterendi, Crown Jewel of Silvermoon") + if buff ~= nil then + aura_env.buffTime = aura_env.buffTime + (GetTime() - aura_env.lastTime) + end + aura_env.lastTime = GetTime() + aura_env.uptime = (math.floor((aura_env.buffTime / localTime) * 100)) + return aura_env.uptime .. "%%" + end +end + +ON SHOW +aura_env.startTime = GetTime() +aura_env.buffTime = 0 + +ON HIDE +print("20% god uptime", aura_env.uptime .. "%") diff --git a/FreshShit/Incoming/export b/WeakAuras/Projects/Incoming/export similarity index 100% rename from FreshShit/Incoming/export rename to WeakAuras/Projects/Incoming/export diff --git a/FreshShit/Incoming/sct b/WeakAuras/Projects/Incoming/sct similarity index 100% rename from FreshShit/Incoming/sct rename to WeakAuras/Projects/Incoming/sct diff --git a/Complete Projects/Legion/Init.lua b/WeakAuras/Projects/Init.lua similarity index 95% rename from Complete Projects/Legion/Init.lua rename to WeakAuras/Projects/Init.lua index ca24fbd..c9c1304 100644 --- a/Complete Projects/Legion/Init.lua +++ b/WeakAuras/Projects/Init.lua @@ -1,4 +1,4 @@ -PLAYER_ENTERING_WORLD -function() - SetCVar("floatingCombatTextCombatHealing", 1) -end +PLAYER_ENTERING_WORLD +function() + SetCVar("floatingCombatTextCombatHealing", 1) +end diff --git a/Complete Projects/Legion/Innervate on Whisper.lua b/WeakAuras/Projects/Innervate on Whisper.lua similarity index 97% rename from Complete Projects/Legion/Innervate on Whisper.lua rename to WeakAuras/Projects/Innervate on Whisper.lua index a07ab39..5d8e7ee 100644 --- a/Complete Projects/Legion/Innervate on Whisper.lua +++ b/WeakAuras/Projects/Innervate on Whisper.lua @@ -1,67 +1,67 @@ ---CHAT_MSG_WHISPER -function(_, msg, sender) - msg = msg:lower() - sender = sender:match("%a+") - local cd, dur = GetSpellCooldown("Innervate") - if msg == "innervate" and UnitGroupRolesAssigned(sender) == "HEALER" then - if cd == 0 then - aura_env.whisperT = math.floor(GetTime()) + 10 - aura_env.sender = sender - end - if cd > 0 then - local readyin = math.floor(cd + dur - math.floor(GetTime())) - SendChatMessage("Innervate on cd - Ready in " .. readyin .. " seconds", "WHISPER", "Common", sender) - end - end -end - ---DISPLAY -function() - local function GetClassColor(name) - local color = "|cFF000000" - local class = UnitClass(name) - if class == "Death Knight" then color = "|cFFC41F3B" elseif - class == "Demon Hunter" then color = "|cFFA330C9" elseif - class == "Druid" then color = "|cFFFF7D0A" elseif - class == "Hunter" then color = "|cFFABD473" elseif - class == "Mage" then color = "|cFF40C7EB" elseif - class == "Monk" then color = "|cFF00FF96" elseif - class == "Paladin" then color = "|cFFF58CBA" elseif - class == "Priest" then color = "|cFFFFFFFF" elseif - class == "Rogue" then color = "|cFFFFF569" elseif - class == "Shaman" then color = "|cFF0070DE" elseif - class == "Warlock" then color = "|cFF8787ED" elseif - class == "Warrior" then color = "|cFFC79C6E" end - return color - end - if aura_env.whisperT > math.floor(GetTime()) then - return "Innervate " .. GetClassColor(aura_env.sender) .. aura_env.sender .. "|r" - else - aura_env.sender = "" - return "" - end -end - ---COMBAT_LOG_EVENT_UNFILTERED -function(...) - local subevent = select(3, ...) - if subevent == "SPELL_CAST_SUCCESS" then - local caster = select(6, ...) - local target = select(10, ...) - local spell = select(14, ...) - if caster == UnitName("player") and spell == "Innervate" then - if target ~= aura_env.sender then - SendChatMessage("Casting innervate on " .. target, "WHISPER", "Common", aura_env.sender) - end - if target == aura_env.sender then - SendChatMessage("Casting innervate on you!", "WHISPER", "Common", aura_env.sender) - end - aura_env.whisperT = 0 - aura_env.sender = "" - end - end -end - ---INIT -aura_env.whisperT = 0 -aura_env.sender = "" +--CHAT_MSG_WHISPER +function(_, msg, sender) + msg = msg:lower() + sender = sender:match("%a+") + local cd, dur = GetSpellCooldown("Innervate") + if msg == "innervate" and UnitGroupRolesAssigned(sender) == "HEALER" then + if cd == 0 then + aura_env.whisperT = math.floor(GetTime()) + 10 + aura_env.sender = sender + end + if cd > 0 then + local readyin = math.floor(cd + dur - math.floor(GetTime())) + SendChatMessage("Innervate on cd - Ready in " .. readyin .. " seconds", "WHISPER", "Common", sender) + end + end +end + +--DISPLAY +function() + local function GetClassColor(name) + local color = "|cFF000000" + local class = UnitClass(name) + if class == "Death Knight" then color = "|cFFC41F3B" elseif + class == "Demon Hunter" then color = "|cFFA330C9" elseif + class == "Druid" then color = "|cFFFF7D0A" elseif + class == "Hunter" then color = "|cFFABD473" elseif + class == "Mage" then color = "|cFF40C7EB" elseif + class == "Monk" then color = "|cFF00FF96" elseif + class == "Paladin" then color = "|cFFF58CBA" elseif + class == "Priest" then color = "|cFFFFFFFF" elseif + class == "Rogue" then color = "|cFFFFF569" elseif + class == "Shaman" then color = "|cFF0070DE" elseif + class == "Warlock" then color = "|cFF8787ED" elseif + class == "Warrior" then color = "|cFFC79C6E" end + return color + end + if aura_env.whisperT > math.floor(GetTime()) then + return "Innervate " .. GetClassColor(aura_env.sender) .. aura_env.sender .. "|r" + else + aura_env.sender = "" + return "" + end +end + +--COMBAT_LOG_EVENT_UNFILTERED +function(...) + local subevent = select(3, ...) + if subevent == "SPELL_CAST_SUCCESS" then + local caster = select(6, ...) + local target = select(10, ...) + local spell = select(14, ...) + if caster == UnitName("player") and spell == "Innervate" then + if target ~= aura_env.sender then + SendChatMessage("Casting innervate on " .. target, "WHISPER", "Common", aura_env.sender) + end + if target == aura_env.sender then + SendChatMessage("Casting innervate on you!", "WHISPER", "Common", aura_env.sender) + end + aura_env.whisperT = 0 + aura_env.sender = "" + end + end +end + +--INIT +aura_env.whisperT = 0 +aura_env.sender = "" diff --git a/Complete Projects/Legion/InspectIlvl.lua b/WeakAuras/Projects/InspectIlvl.lua similarity index 95% rename from Complete Projects/Legion/InspectIlvl.lua rename to WeakAuras/Projects/InspectIlvl.lua index 1ef6d66..b8f3f04 100644 --- a/Complete Projects/Legion/InspectIlvl.lua +++ b/WeakAuras/Projects/InspectIlvl.lua @@ -1,21 +1,21 @@ ---INSPECT_READY CHAT_MSG_SYSTEM -function(e, msg) - if e == "INSPECT_READY" then - if GetTime() - aura_env.time >= 1 then - local name = UnitName("target") - SendChatMessage(".ilevel " .. name, "SAY") - aura_env.time = GetTime() - end - elseif e == "CHAT_MSG_SYSTEM" then - aura_env.ilvl = msg:match("Equipped ilvl for .+: (%d+)") - return true - end -end - ---DISPLAY -function() - return format("%d", aura_env.ilvl) -end - ---INIT +--INSPECT_READY CHAT_MSG_SYSTEM +function(e, msg) + if e == "INSPECT_READY" then + if GetTime() - aura_env.time >= 1 then + local name = UnitName("target") + SendChatMessage(".ilevel " .. name, "SAY") + aura_env.time = GetTime() + end + elseif e == "CHAT_MSG_SYSTEM" then + aura_env.ilvl = msg:match("Equipped ilvl for .+: (%d+)") + return true + end +end + +--DISPLAY +function() + return format("%d", aura_env.ilvl) +end + +--INIT aura_env.time = 0 \ No newline at end of file diff --git a/Complete Projects/Legion/Ironfur.lua b/WeakAuras/Projects/Ironfur.lua similarity index 97% rename from Complete Projects/Legion/Ironfur.lua rename to WeakAuras/Projects/Ironfur.lua index fc804df..1909f7d 100644 --- a/Complete Projects/Legion/Ironfur.lua +++ b/WeakAuras/Projects/Ironfur.lua @@ -1,44 +1,44 @@ ---COMBAT_LOG_EVENT_UNFILTERED -function(allstates, e, ...) - local aura_env = aura_env - local se = select(2, ...) - if se == "SPELL_CAST_SUCCESS" then - local caster = select(5, ...) - local spell = select(13, ...) - if caster == UnitName("player") and spell == "Ironfur" then - allstates[#allstates + 1] = { - show = true, - changed = true, - resort = true, - index = GetTime(), - progressType = "timed", - expirationTime = GetTime() + aura_env.ironfurDuration, - duration = aura_env.ironfurDuration, - autoHide = true, - } - if aura_env.buff == true then - allstates[#allstates].expirationTime = allstates[#allstates].expirationTime + 2 - allstates[#allstates].duration = allstates[#allstates].duration + 2 - end - return true - end - elseif se == "SPELL_AURA_APPLIED" then - local caster = select(5, ...) - local spell = select(13, ...) - if caster == UnitName("player") and spell == "Guardian of Elune" then - aura_env.buff = true - end - elseif se == "SPELL_AURA_REMOVED" then - local caster = select(5, ...) - local spell = select(13, ...) - if caster == UnitName("player") and spell == "Guardian of Elune" then - C_Timer.After(0.1, function() - aura_env.buff = false - end) - end - end -end - ---INIT -aura_env.ironfurDuration = 6 -aura_env.buff = false +--COMBAT_LOG_EVENT_UNFILTERED +function(allstates, e, ...) + local aura_env = aura_env + local se = select(2, ...) + if se == "SPELL_CAST_SUCCESS" then + local caster = select(5, ...) + local spell = select(13, ...) + if caster == UnitName("player") and spell == "Ironfur" then + allstates[#allstates + 1] = { + show = true, + changed = true, + resort = true, + index = GetTime(), + progressType = "timed", + expirationTime = GetTime() + aura_env.ironfurDuration, + duration = aura_env.ironfurDuration, + autoHide = true, + } + if aura_env.buff == true then + allstates[#allstates].expirationTime = allstates[#allstates].expirationTime + 2 + allstates[#allstates].duration = allstates[#allstates].duration + 2 + end + return true + end + elseif se == "SPELL_AURA_APPLIED" then + local caster = select(5, ...) + local spell = select(13, ...) + if caster == UnitName("player") and spell == "Guardian of Elune" then + aura_env.buff = true + end + elseif se == "SPELL_AURA_REMOVED" then + local caster = select(5, ...) + local spell = select(13, ...) + if caster == UnitName("player") and spell == "Guardian of Elune" then + C_Timer.After(0.1, function() + aura_env.buff = false + end) + end + end +end + +--INIT +aura_env.ironfurDuration = 6 +aura_env.buff = false diff --git a/Complete Projects/Legion/JanaPullTimer.lua b/WeakAuras/Projects/JanaPullTimer.lua similarity index 96% rename from Complete Projects/Legion/JanaPullTimer.lua rename to WeakAuras/Projects/JanaPullTimer.lua index 6f98e67..603bed6 100644 --- a/Complete Projects/Legion/JanaPullTimer.lua +++ b/WeakAuras/Projects/JanaPullTimer.lua @@ -1,47 +1,47 @@ ---CHAT_MSG_ADDON -function(e, ...) - local msg = select(2, ...) - if msg:match("Pull") and msg:match("%d+") then - local pull = msg:match("%d+") - print(pull) - end -end - - - - - -function(allstates, e, msg, sender) - if e == "CHAT_MSG_SAY" or e == "CHAT_MSG_PARTY" or e == "CHAT_MSG_PARTY_LEADER" or e == "CHAT_MSG_ADDON" then - if e ~= "CHAT_MSG_ADDON" then - if (sender == "Angellianna" or sender == "Piinkiepiie" or sender == "Smolpotato") and msg:match("%d+") and select(1, msg:find("%d+")) == 1 and select(2, msg:find(".+")) <= 3 then - aura_env.pullTime = tonumber(msg:match("%d+")) - else - if sender:match("Pull") then - aura_env.pullTime = tonumber(sender:match("%d+")) - end - end - if aura_env.timer then - aura_env.timer:Cancel() - end - aura_env.timer = C_Timer.NewTimer(aura_env.pullTime, function() WeakAuras.ScanEvents("HIDE_PULL") end) - allstates[1] = { - show = true, - changed = true, - progressType = "timed", - expirationTime = GetTime() + aura_env.pullTime, - duration = aura_env.pullTime, - } - return true - elseif e == "HIDE_PULL" then - allstates[1].show = false - allstates[1].changed = true - return true - elseif e == "PLAYER_REGEN_DISABLED" then - if allstates[1] then - allstates[1].show = false - allstates[1].changed = true - end - return true - end +--CHAT_MSG_ADDON +function(e, ...) + local msg = select(2, ...) + if msg:match("Pull") and msg:match("%d+") then + local pull = msg:match("%d+") + print(pull) + end +end + + + + + +function(allstates, e, msg, sender) + if e == "CHAT_MSG_SAY" or e == "CHAT_MSG_PARTY" or e == "CHAT_MSG_PARTY_LEADER" or e == "CHAT_MSG_ADDON" then + if e ~= "CHAT_MSG_ADDON" then + if (sender == "Angellianna" or sender == "Piinkiepiie" or sender == "Smolpotato") and msg:match("%d+") and select(1, msg:find("%d+")) == 1 and select(2, msg:find(".+")) <= 3 then + aura_env.pullTime = tonumber(msg:match("%d+")) + else + if sender:match("Pull") then + aura_env.pullTime = tonumber(sender:match("%d+")) + end + end + if aura_env.timer then + aura_env.timer:Cancel() + end + aura_env.timer = C_Timer.NewTimer(aura_env.pullTime, function() WeakAuras.ScanEvents("HIDE_PULL") end) + allstates[1] = { + show = true, + changed = true, + progressType = "timed", + expirationTime = GetTime() + aura_env.pullTime, + duration = aura_env.pullTime, + } + return true + elseif e == "HIDE_PULL" then + allstates[1].show = false + allstates[1].changed = true + return true + elseif e == "PLAYER_REGEN_DISABLED" then + if allstates[1] then + allstates[1].show = false + allstates[1].changed = true + end + return true + end end \ No newline at end of file diff --git a/Complete Projects/Legion/Judgment of Light DebuffConsumedPerSecond.lua b/WeakAuras/Projects/Judgment of Light DebuffConsumedPerSecond.lua similarity index 97% rename from Complete Projects/Legion/Judgment of Light DebuffConsumedPerSecond.lua rename to WeakAuras/Projects/Judgment of Light DebuffConsumedPerSecond.lua index 79139de..cbbcb1e 100644 --- a/Complete Projects/Legion/Judgment of Light DebuffConsumedPerSecond.lua +++ b/WeakAuras/Projects/Judgment of Light DebuffConsumedPerSecond.lua @@ -1,52 +1,52 @@ ---COMBAT_LOG_EVENT_UNFILTERED PLAYER_REGEN_DISABLED PLAYER_REGEN_ENABLED UPDATE_DCPS TICK_TIMER -function(e, ...) - if e == "COMBAT_LOG_EVENT_UNFILTERED" then - local se = select(2, ...) - if se == "SPELL_HEAL" then - local source = select(5, ...) - if source == UnitName("player") then - local time, spell = GetTime(), select(13, ...) - if spell == "Judgment of Light" then - aura_env.htable[#aura_env.htable + 1] = time - return true - end - end - end - elseif e == "PLAYER_REGEN_DISABLED" then - aura_env.htable = {} - aura_env.combatTimer = 0 - if not aura_env.ticker then print("No ticker found, starting new one"); aura_env.ticker = C_Timer.NewTicker(aura_env.interval, function() WeakAuras.ScanEvents("UPDATE_DCPS") end) end -elseif e == "PLAYER_REGEN_ENABLED" then - if aura_env.ticker then print("Ticker found, killing it"); aura_env.ticker:Cancel(); aura_env.ticker = nil end -elseif e == "UPDATE_DCPS" then - aura_env.tempcount = aura_env.tempcount + 1 - if aura_env.tempcount >= 1 / aura_env.interval then - aura_env.tempcount = 0 - aura_env.combatTimer = aura_env.combatTimer + 1 - end - return true -end -end - ---DISPLAY -function() - local dc = 0 - local timeinterval = 10 - for i = #aura_env.htable, 1, -1 do - if aura_env.htable[i] > GetTime() - timeinterval then - dc = dc + 1 - else - break - end - end - return string.format("%.1f\n%.1f", dc / timeinterval, #aura_env.htable / aura_env.combatTimer) -end - ---INIT -if not aura_env.combatTimer then aura_env.combatTimer = 0 end -if not aura_env.htable then aura_env.htable = {} end -if not aura_env.interval then aura_env.interval = 0.1 end -if not aura_env.tempcount then aura_env.tempcount = 0 end -if WeakAuras.IsOptionsOpen() and aura_env.ticker then - aura_env.ticker:Cancel() -end +--COMBAT_LOG_EVENT_UNFILTERED PLAYER_REGEN_DISABLED PLAYER_REGEN_ENABLED UPDATE_DCPS TICK_TIMER +function(e, ...) + if e == "COMBAT_LOG_EVENT_UNFILTERED" then + local se = select(2, ...) + if se == "SPELL_HEAL" then + local source = select(5, ...) + if source == UnitName("player") then + local time, spell = GetTime(), select(13, ...) + if spell == "Judgment of Light" then + aura_env.htable[#aura_env.htable + 1] = time + return true + end + end + end + elseif e == "PLAYER_REGEN_DISABLED" then + aura_env.htable = {} + aura_env.combatTimer = 0 + if not aura_env.ticker then print("No ticker found, starting new one"); aura_env.ticker = C_Timer.NewTicker(aura_env.interval, function() WeakAuras.ScanEvents("UPDATE_DCPS") end) end +elseif e == "PLAYER_REGEN_ENABLED" then + if aura_env.ticker then print("Ticker found, killing it"); aura_env.ticker:Cancel(); aura_env.ticker = nil end +elseif e == "UPDATE_DCPS" then + aura_env.tempcount = aura_env.tempcount + 1 + if aura_env.tempcount >= 1 / aura_env.interval then + aura_env.tempcount = 0 + aura_env.combatTimer = aura_env.combatTimer + 1 + end + return true +end +end + +--DISPLAY +function() + local dc = 0 + local timeinterval = 10 + for i = #aura_env.htable, 1, -1 do + if aura_env.htable[i] > GetTime() - timeinterval then + dc = dc + 1 + else + break + end + end + return string.format("%.1f\n%.1f", dc / timeinterval, #aura_env.htable / aura_env.combatTimer) +end + +--INIT +if not aura_env.combatTimer then aura_env.combatTimer = 0 end +if not aura_env.htable then aura_env.htable = {} end +if not aura_env.interval then aura_env.interval = 0.1 end +if not aura_env.tempcount then aura_env.tempcount = 0 end +if WeakAuras.IsOptionsOpen() and aura_env.ticker then + aura_env.ticker:Cancel() +end diff --git a/Complete Projects/Legion/Judgment of Light.lua b/WeakAuras/Projects/Judgment of Light.lua similarity index 96% rename from Complete Projects/Legion/Judgment of Light.lua rename to WeakAuras/Projects/Judgment of Light.lua index d41cd0f..d698b85 100644 --- a/Complete Projects/Legion/Judgment of Light.lua +++ b/WeakAuras/Projects/Judgment of Light.lua @@ -1,41 +1,41 @@ -DISPLAY -function() - if aura_env.update == 1 then - for i = 1, 40 do - if UnitExists("nameplate" .. i) and UnitIsEnemy("player", "nameplate" .. i) and UnitAffectingCombat("nameplate" .. i) then - aura_env.enemies = aura_env.enemies + 1 - if UnitDebuff("nameplate" .. i, "Judgment of Light") then - aura_env.lightenemies = aura_env.lightenemies + 1 - local stacks = select(4, UnitDebuff("nameplate" .. i, "Judgment of Light")) - aura_env.totalstacks = aura_env.totalstacks + stacks - aura_env.update = 0 - end - end - end - end - return aura_env.lightenemies .. "/" .. aura_env.enemies .. " " .. aura_env.totalstacks -end - -TRIGGER -NAME_PLATE_UNIT_ADDED / REMOVED -function(...) - local subEvent = select(3, ...) - local caster = select(6, ...) - if (subEvent == "SPELL_AURA_APPLIED" or subEvent == "SPELL_HEAL" or subEvent == "SPELL_AURA_REMOVED") and aura_env.update == 0 and caster == UnitName("player") and InCombatLockdown("player") then - aura_env.lightenemies = 0 - aura_env.enemies = 0 - aura_env.totalstacks = 0 - aura_env.update = 1 - end -end - -DURATION -function() - return aura_env.totalstacks, aura_env.lightenemies * 40, 1 -end - -INIT -aura_env.update = 0 -aura_env.lightenemies = 0 -aura_env.enemies = 0 +DISPLAY +function() + if aura_env.update == 1 then + for i = 1, 40 do + if UnitExists("nameplate" .. i) and UnitIsEnemy("player", "nameplate" .. i) and UnitAffectingCombat("nameplate" .. i) then + aura_env.enemies = aura_env.enemies + 1 + if UnitDebuff("nameplate" .. i, "Judgment of Light") then + aura_env.lightenemies = aura_env.lightenemies + 1 + local stacks = select(4, UnitDebuff("nameplate" .. i, "Judgment of Light")) + aura_env.totalstacks = aura_env.totalstacks + stacks + aura_env.update = 0 + end + end + end + end + return aura_env.lightenemies .. "/" .. aura_env.enemies .. " " .. aura_env.totalstacks +end + +TRIGGER +NAME_PLATE_UNIT_ADDED / REMOVED +function(...) + local subEvent = select(3, ...) + local caster = select(6, ...) + if (subEvent == "SPELL_AURA_APPLIED" or subEvent == "SPELL_HEAL" or subEvent == "SPELL_AURA_REMOVED") and aura_env.update == 0 and caster == UnitName("player") and InCombatLockdown("player") then + aura_env.lightenemies = 0 + aura_env.enemies = 0 + aura_env.totalstacks = 0 + aura_env.update = 1 + end +end + +DURATION +function() + return aura_env.totalstacks, aura_env.lightenemies * 40, 1 +end + +INIT +aura_env.update = 0 +aura_env.lightenemies = 0 +aura_env.enemies = 0 aura_env.totalstacks = 0 \ No newline at end of file diff --git a/Complete Projects/Legion/Judgment of Light/AP.lua b/WeakAuras/Projects/Judgment of Light/AP.lua similarity index 96% rename from Complete Projects/Legion/Judgment of Light/AP.lua rename to WeakAuras/Projects/Judgment of Light/AP.lua index 7f46be2..59abffe 100644 --- a/Complete Projects/Legion/Judgment of Light/AP.lua +++ b/WeakAuras/Projects/Judgment of Light/AP.lua @@ -1,17 +1,17 @@ ---DISPLAY -function() - if GetSpecialization() == 1 then - local AP = select(4, UnitDebuff("focus", "Judgment of Light")) or 0 - return AP - end - if GetSpecialization() == 2 then - local AP = 0 - for i = 1, 40 do - if UnitExists("nameplate" .. i) and UnitDebuff("nameplate" .. i,"Judgment of Light") then - local APP = select(4, UnitDebuff("nameplate" .. i, "Judgment of Light")) or 0 - AP = AP + APP - end - end - return AP - end +--DISPLAY +function() + if GetSpecialization() == 1 then + local AP = select(4, UnitDebuff("focus", "Judgment of Light")) or 0 + return AP + end + if GetSpecialization() == 2 then + local AP = 0 + for i = 1, 40 do + if UnitExists("nameplate" .. i) and UnitDebuff("nameplate" .. i,"Judgment of Light") then + local APP = select(4, UnitDebuff("nameplate" .. i, "Judgment of Light")) or 0 + AP = AP + APP + end + end + return AP + end end \ No newline at end of file diff --git a/Complete Projects/Legion/Judgment of Light/Background.lua b/WeakAuras/Projects/Judgment of Light/Background.lua similarity index 95% rename from Complete Projects/Legion/Judgment of Light/Background.lua rename to WeakAuras/Projects/Judgment of Light/Background.lua index 70d59b2..763c240 100644 --- a/Complete Projects/Legion/Judgment of Light/Background.lua +++ b/WeakAuras/Projects/Judgment of Light/Background.lua @@ -1,25 +1,25 @@ ---TRIGGER -function() - return true -end - ---DURATION -function() - if GetSpecialization() == 1 then - local AP = select(4, UnitDebuff("focus", "Judgment of Light")) or 0 - local maxAP = 40 - return AP, maxAP, 1 - end - if GetSpecialization() == 2 then - local AP = 0 - local maxAP = 0 - for i = 1, 40 do - if UnitExists("nameplate" .. i) and UnitDebuff("nameplate" .. i,"Judgment of Light") then - local APP = select(4, UnitDebuff("nameplate" .. i, "Judgment of Light")) or 0 - maxAP = maxAP + 40 - AP = AP + APP - end - end - end - return AP, maxAP, 1 +--TRIGGER +function() + return true +end + +--DURATION +function() + if GetSpecialization() == 1 then + local AP = select(4, UnitDebuff("focus", "Judgment of Light")) or 0 + local maxAP = 40 + return AP, maxAP, 1 + end + if GetSpecialization() == 2 then + local AP = 0 + local maxAP = 0 + for i = 1, 40 do + if UnitExists("nameplate" .. i) and UnitDebuff("nameplate" .. i,"Judgment of Light") then + local APP = select(4, UnitDebuff("nameplate" .. i, "Judgment of Light")) or 0 + maxAP = maxAP + 40 + AP = AP + APP + end + end + end + return AP, maxAP, 1 end \ No newline at end of file diff --git a/Complete Projects/Legion/Judgment of Light/CODE.txt b/WeakAuras/Projects/Judgment of Light/CODE.txt similarity index 100% rename from Complete Projects/Legion/Judgment of Light/CODE.txt rename to WeakAuras/Projects/Judgment of Light/CODE.txt diff --git a/Complete Projects/Legion/Judgment of Light/Current AP.lua b/WeakAuras/Projects/Judgment of Light/Current AP.lua similarity index 96% rename from Complete Projects/Legion/Judgment of Light/Current AP.lua rename to WeakAuras/Projects/Judgment of Light/Current AP.lua index cd3eaec..65a493f 100644 --- a/Complete Projects/Legion/Judgment of Light/Current AP.lua +++ b/WeakAuras/Projects/Judgment of Light/Current AP.lua @@ -1,25 +1,25 @@ ---TRIGGER -function() - return true --always on -end - ---DURATION -function() - if GetSpecialization() == 1 then - local AP = select(4, UnitDebuff("focus", "Judgment of Light")) or 0 - local maxAP = 40 - return maxAP - AP, maxAP, 1 - end - if GetSpecialization() == 2 then - local AP = 0 - local maxAP = 0 - for i = 1, 40 do - if UnitExists("nameplate" .. i) and UnitDebuff("nameplate" .. i,"Judgment of Light") then - local APP = select(4, UnitDebuff("nameplate" .. i, "Judgment of Light")) or 0 - maxAP = maxAP + 40 - AP = AP + APP - end - end - return maxAP - AP, maxAP, 1 - end +--TRIGGER +function() + return true --always on +end + +--DURATION +function() + if GetSpecialization() == 1 then + local AP = select(4, UnitDebuff("focus", "Judgment of Light")) or 0 + local maxAP = 40 + return maxAP - AP, maxAP, 1 + end + if GetSpecialization() == 2 then + local AP = 0 + local maxAP = 0 + for i = 1, 40 do + if UnitExists("nameplate" .. i) and UnitDebuff("nameplate" .. i,"Judgment of Light") then + local APP = select(4, UnitDebuff("nameplate" .. i, "Judgment of Light")) or 0 + maxAP = maxAP + 40 + AP = AP + APP + end + end + return maxAP - AP, maxAP, 1 + end end \ No newline at end of file diff --git a/Complete Projects/Legion/Juked.lua b/WeakAuras/Projects/Juked.lua similarity index 96% rename from Complete Projects/Legion/Juked.lua rename to WeakAuras/Projects/Juked.lua index ec5aba3..8a1e296 100644 --- a/Complete Projects/Legion/Juked.lua +++ b/WeakAuras/Projects/Juked.lua @@ -1,129 +1,129 @@ ---COMBAT_LOG_EVENT_UNFILTERED PLAYER_REGEN_DISABLED PLAYER_REGEN_ENABLED TICKER_GO_PING -function(allstates, e, ...) - if e == "COMBAT_LOG_EVENT_UNFILTERED" then - if InCombatLockdown() == true then - local se = select(2, ...) - if se == "SPELL_CAST_SUCCESS" then - local caster = select(5, ...) - local casterFlags = select(6, ...) - if bit.band(casterFlags, 0x00000010) then --Hostiles - --if bit.band(casterFlags, 0x00000140) then --Hostile players - local spellID = select(12, ...) - if aura_env.spells[spellID] then - allstates[caster] = { - show = true, - changed = true, - progressType = "timed", - expirationTime = GetTime() + aura_env.spells[spellID].time, - duration = aura_env.spells[spellID].time, - autohide = true, - index = GetTime() + aura_env.spells[spellID].time, - resort = true, - icon = select(3, GetSpellInfo(spellID)), - } - return true - end - end - end - end - elseif e == "TICKER_GO_PING" then - for k, v in pairs(allstates) do - if v.expirationTime < GetTime() then - v.show = false - v.changed = true - end - if not v.icon then - v.show = false - v.changed = true - end - end - return true - elseif e == "PLAYER_REGEN_DISABLED" then - aura_env.tickerGoPing = C_Timer.NewTicker(0.2, function() - WeakAuras.ScanEvents("TICKER_GO_PING") - end) - elseif e == "PLAYER_REGEN_ENABLED" then - aura_env.tickerGoPing:Cancel() - for k, v in pairs(allstates) do - v.show = false - v.changed = true - end - return true - end -end - ---INIT -aura_env.spells = { - --[774] = { - -- ["time"] = 10, - -- ["prio"] = true, - --}, - [6552] = { - ["time"] = 15, - ["prio"] = true, - }, --Pummel - [23920] = { - ["time"] = 25, - prio = false, - }, --Spell Reflection - [1766] = { - ["time"] = 15, - ["prio"] = true, - }, --Kick - [47528] = { - ["time"] = 15, - ["prio"] = true, - }, --Mind Freeze - [47476] = { - ["time"] = 60, - prio = false, - }, --Strangulate - [96231] = { - ["time"] = 15, - ["prio"] = true, - }, --Rebuke - [31935] = { - ["time"] = 15, - ["prio"] = true, - }, --Avengers Shield - [57994] = { - ["time"] = 12, - ["prio"] = true, - }, --Wind Shear - [2139] = { - ["time"] = 24, - ["prio"] = true, - }, --Counterspell - [19647] = { - ["time"] = 24, - ["prio"] = true, - }, --Spell Lock - [119911] = { - ["time"] = 24, - ["prio"] = true, - }, --Optical Blast - [106839] = { - ["time"] = 15, - ["prio"] = true, - }, --Skull Bash - [78675] = { - ["time"] = 60, - ["prio"] = true, - }, --Solar Bream - [116705] = { - ["time"] = 15, - ["prio"] = true, - }, --Spear Hand Strike - [15487] = { - ["time"] = 45, - prio = false, - }, --Silence - [114028] = { - ["time"] = 30, - prio = false, - }, --Mass Spell Reflect - [147362] = { - ["time"] = 24, - ["prio"] = true, - }, --Counter Shot -} +--COMBAT_LOG_EVENT_UNFILTERED PLAYER_REGEN_DISABLED PLAYER_REGEN_ENABLED TICKER_GO_PING +function(allstates, e, ...) + if e == "COMBAT_LOG_EVENT_UNFILTERED" then + if InCombatLockdown() == true then + local se = select(2, ...) + if se == "SPELL_CAST_SUCCESS" then + local caster = select(5, ...) + local casterFlags = select(6, ...) + if bit.band(casterFlags, 0x00000010) then --Hostiles + --if bit.band(casterFlags, 0x00000140) then --Hostile players + local spellID = select(12, ...) + if aura_env.spells[spellID] then + allstates[caster] = { + show = true, + changed = true, + progressType = "timed", + expirationTime = GetTime() + aura_env.spells[spellID].time, + duration = aura_env.spells[spellID].time, + autohide = true, + index = GetTime() + aura_env.spells[spellID].time, + resort = true, + icon = select(3, GetSpellInfo(spellID)), + } + return true + end + end + end + end + elseif e == "TICKER_GO_PING" then + for k, v in pairs(allstates) do + if v.expirationTime < GetTime() then + v.show = false + v.changed = true + end + if not v.icon then + v.show = false + v.changed = true + end + end + return true + elseif e == "PLAYER_REGEN_DISABLED" then + aura_env.tickerGoPing = C_Timer.NewTicker(0.2, function() + WeakAuras.ScanEvents("TICKER_GO_PING") + end) + elseif e == "PLAYER_REGEN_ENABLED" then + aura_env.tickerGoPing:Cancel() + for k, v in pairs(allstates) do + v.show = false + v.changed = true + end + return true + end +end + +--INIT +aura_env.spells = { + --[774] = { + -- ["time"] = 10, + -- ["prio"] = true, + --}, + [6552] = { + ["time"] = 15, + ["prio"] = true, + }, --Pummel + [23920] = { + ["time"] = 25, + prio = false, + }, --Spell Reflection + [1766] = { + ["time"] = 15, + ["prio"] = true, + }, --Kick + [47528] = { + ["time"] = 15, + ["prio"] = true, + }, --Mind Freeze + [47476] = { + ["time"] = 60, + prio = false, + }, --Strangulate + [96231] = { + ["time"] = 15, + ["prio"] = true, + }, --Rebuke + [31935] = { + ["time"] = 15, + ["prio"] = true, + }, --Avengers Shield + [57994] = { + ["time"] = 12, + ["prio"] = true, + }, --Wind Shear + [2139] = { + ["time"] = 24, + ["prio"] = true, + }, --Counterspell + [19647] = { + ["time"] = 24, + ["prio"] = true, + }, --Spell Lock + [119911] = { + ["time"] = 24, + ["prio"] = true, + }, --Optical Blast + [106839] = { + ["time"] = 15, + ["prio"] = true, + }, --Skull Bash + [78675] = { + ["time"] = 60, + ["prio"] = true, + }, --Solar Bream + [116705] = { + ["time"] = 15, + ["prio"] = true, + }, --Spear Hand Strike + [15487] = { + ["time"] = 45, + prio = false, + }, --Silence + [114028] = { + ["time"] = 30, + prio = false, + }, --Mass Spell Reflect + [147362] = { + ["time"] = 24, + ["prio"] = true, + }, --Counter Shot +} diff --git a/Complete Projects/Legion/KeyGlow.lua b/WeakAuras/Projects/KeyGlow.lua similarity index 97% rename from Complete Projects/Legion/KeyGlow.lua rename to WeakAuras/Projects/KeyGlow.lua index 807b5f9..f02caf6 100644 --- a/Complete Projects/Legion/KeyGlow.lua +++ b/WeakAuras/Projects/KeyGlow.lua @@ -1,42 +1,42 @@ ---BAG_UPDATE -function(e) - if #aura_env.glowList > 0 then - for k, v in ipairs(aura_env.glowList) do - local link = select(7, GetContainerItemInfo(v.bag, v.slot)) - local hasItem = false - for k, v in pairs(aura_env.itemList) do - if link and link:match(v) then - hasItem = true - end - end - if hasItem == false then - ActionButton_HideOverlayGlow(_G["ElvUI_ContainerFrameBag" .. v.bag .. "Slot" ..v.slot]) - end - end - end - for i = 0, 4 do - for j = 1, GetContainerNumSlots(i) do - local link = select(7, GetContainerItemInfo(i, j)) - local hasItem = false - if link then - for k, v in pairs(aura_env.itemList) do - if link and link:match(v) then - hasItem = true - end - end - end - if hasItem == true then - aura_env.glowList[#aura_env.glowList + 1] = { - ["bag"] = i, - ["slot"] = j, - ["item"] = v, --ATTENTION D: - } - ActionButton_ShowOverlayGlow(_G["ElvUI_ContainerFrameBag" .. i .. "Slot" ..j]) - end - end - end -end - ---INIT -aura_env.itemList = {"Keystone", "Tome of the Tranquil Mind"} -aura_env.glowList = {} +--BAG_UPDATE +function(e) + if #aura_env.glowList > 0 then + for k, v in ipairs(aura_env.glowList) do + local link = select(7, GetContainerItemInfo(v.bag, v.slot)) + local hasItem = false + for k, v in pairs(aura_env.itemList) do + if link and link:match(v) then + hasItem = true + end + end + if hasItem == false then + ActionButton_HideOverlayGlow(_G["ElvUI_ContainerFrameBag" .. v.bag .. "Slot" ..v.slot]) + end + end + end + for i = 0, 4 do + for j = 1, GetContainerNumSlots(i) do + local link = select(7, GetContainerItemInfo(i, j)) + local hasItem = false + if link then + for k, v in pairs(aura_env.itemList) do + if link and link:match(v) then + hasItem = true + end + end + end + if hasItem == true then + aura_env.glowList[#aura_env.glowList + 1] = { + ["bag"] = i, + ["slot"] = j, + ["item"] = v, --ATTENTION D: + } + ActionButton_ShowOverlayGlow(_G["ElvUI_ContainerFrameBag" .. i .. "Slot" ..j]) + end + end + end +end + +--INIT +aura_env.itemList = {"Keystone", "Tome of the Tranquil Mind"} +aura_env.glowList = {} diff --git a/Complete Projects/Legion/Kill - Wipe counter.lua b/WeakAuras/Projects/Kill - Wipe counter.lua similarity index 97% rename from Complete Projects/Legion/Kill - Wipe counter.lua rename to WeakAuras/Projects/Kill - Wipe counter.lua index 4b5ecc8..2364fa1 100644 --- a/Complete Projects/Legion/Kill - Wipe counter.lua +++ b/WeakAuras/Projects/Kill - Wipe counter.lua @@ -1,33 +1,33 @@ ---KillsnWipes Global ---ENCOUNTER_START ENCOUNTER_END -function(event, encounterID, encounterName, difficultyID, groupSize, success) - print(event, encounterID, encounterName, difficultyID, groupSize, success) - if difficultyID == 14 or difficultyID == 15 or difficultyID == 16 or difficultyID == 17 then - if difficultyID == 14 then - local difficulty = "Normal" - elseif difficultyID == 15 then - local difficulty = "Heroic" - elseif difficultyID == 16 then - local difficulty = "Mythic" - elseif difficultyID == 17 then - local difficulty = "LFR" - end - if event == "ENCOUNTER_START" then - if KillsnWipes.encounterName == nil then - KillsnWipes.encounterName = {["Normal"] = {}, ["Heroic"] = {}, ["Mythic"] = {}, ["LFR"] = {}} - KillsnWipes.encounterName.Normal = {["tries"] = 0, ["wipes"] = 0, ["kills"] = 0} - KillsnWipes.encounterName.Heroic = {["tries"] = 0, ["wipes"] = 0, ["kills"] = 0} - KillsnWipes.encounterName.Mythic = {["tries"] = 0, ["wipes"] = 0, ["kills"] = 0} - KillsnWipes.encounterName.LFR = {["tries"] = 0, ["wipes"] = 0, ["kills"] = 0} - end - KillsnWipes.encounterName[difficulty].tries = KillsnWipes.encounterName[difficulty].tries + 1 - end - if event == "ENCOUNTER_END" then - if success == 0 then - KillsnWipes.encounterName[difficulty].wipes = KillsnWipes.encounterName[difficulty].wipes + 1 - else - KillsnWipes.encounterName[difficulty].kills = KillsnWipes.encounterName[difficulty].kills + 1 - end - end - end +--KillsnWipes Global +--ENCOUNTER_START ENCOUNTER_END +function(event, encounterID, encounterName, difficultyID, groupSize, success) + print(event, encounterID, encounterName, difficultyID, groupSize, success) + if difficultyID == 14 or difficultyID == 15 or difficultyID == 16 or difficultyID == 17 then + if difficultyID == 14 then + local difficulty = "Normal" + elseif difficultyID == 15 then + local difficulty = "Heroic" + elseif difficultyID == 16 then + local difficulty = "Mythic" + elseif difficultyID == 17 then + local difficulty = "LFR" + end + if event == "ENCOUNTER_START" then + if KillsnWipes.encounterName == nil then + KillsnWipes.encounterName = {["Normal"] = {}, ["Heroic"] = {}, ["Mythic"] = {}, ["LFR"] = {}} + KillsnWipes.encounterName.Normal = {["tries"] = 0, ["wipes"] = 0, ["kills"] = 0} + KillsnWipes.encounterName.Heroic = {["tries"] = 0, ["wipes"] = 0, ["kills"] = 0} + KillsnWipes.encounterName.Mythic = {["tries"] = 0, ["wipes"] = 0, ["kills"] = 0} + KillsnWipes.encounterName.LFR = {["tries"] = 0, ["wipes"] = 0, ["kills"] = 0} + end + KillsnWipes.encounterName[difficulty].tries = KillsnWipes.encounterName[difficulty].tries + 1 + end + if event == "ENCOUNTER_END" then + if success == 0 then + KillsnWipes.encounterName[difficulty].wipes = KillsnWipes.encounterName[difficulty].wipes + 1 + else + KillsnWipes.encounterName[difficulty].kills = KillsnWipes.encounterName[difficulty].kills + 1 + end + end + end end \ No newline at end of file diff --git a/Complete Projects/Legion/KoSList.lua b/WeakAuras/Projects/KoSList.lua similarity index 96% rename from Complete Projects/Legion/KoSList.lua rename to WeakAuras/Projects/KoSList.lua index 2a7f505..a0ba8f5 100644 --- a/Complete Projects/Legion/KoSList.lua +++ b/WeakAuras/Projects/KoSList.lua @@ -1,33 +1,33 @@ ---NAME_PLATE_UNIT_REMOVED NAME_PLATE_UNIT_ADDED ADD_KOS -function(e, u) - if e == "NAME_PLATE_UNIT_ADDED" then - if WeakAurasSaved.CustomTrash.KoSList[UnitName(u)] == 1 then - aura_env.koslist[UnitName(u)] = 1 - return true - end - elseif e == "NAME_PLATE_UNIT_REMOVED" then - if WeakAurasSaved.CustomTrash.KoSList[UnitName(u)] == 1 and aura_env.koslist[UnitName(u)] == 1 then - aura_env.koslist[UnitName(u)] = nil - return true - end - elseif e == "ADD_KOS" then - if not WeakAurasSaved.CustomTrash.KoSList[u] and u then - WeakAurasSaved.CustomTrash.KoSList[u] = 1 - end - end -end - ---DISPLAY -function() - local output = "" - for k, v in pairs(aura_env.koslist) do - if v == 1 then - output = output .. k .. "\n" - end - end - return output -end - ---INIT -aura_env.koslist = {} -if not WeakAurasSaved.CustomTrash.KoSList then WeakAurasSaved.CustomTrash.KoSList = {} end +--NAME_PLATE_UNIT_REMOVED NAME_PLATE_UNIT_ADDED ADD_KOS +function(e, u) + if e == "NAME_PLATE_UNIT_ADDED" then + if WeakAurasSaved.CustomTrash.KoSList[UnitName(u)] == 1 then + aura_env.koslist[UnitName(u)] = 1 + return true + end + elseif e == "NAME_PLATE_UNIT_REMOVED" then + if WeakAurasSaved.CustomTrash.KoSList[UnitName(u)] == 1 and aura_env.koslist[UnitName(u)] == 1 then + aura_env.koslist[UnitName(u)] = nil + return true + end + elseif e == "ADD_KOS" then + if not WeakAurasSaved.CustomTrash.KoSList[u] and u then + WeakAurasSaved.CustomTrash.KoSList[u] = 1 + end + end +end + +--DISPLAY +function() + local output = "" + for k, v in pairs(aura_env.koslist) do + if v == 1 then + output = output .. k .. "\n" + end + end + return output +end + +--INIT +aura_env.koslist = {} +if not WeakAurasSaved.CustomTrash.KoSList then WeakAurasSaved.CustomTrash.KoSList = {} end diff --git a/Complete Projects/Legion/Last n Melee.lua b/WeakAuras/Projects/Last n Melee.lua similarity index 96% rename from Complete Projects/Legion/Last n Melee.lua rename to WeakAuras/Projects/Last n Melee.lua index a6d2d6e..0029738 100644 --- a/Complete Projects/Legion/Last n Melee.lua +++ b/WeakAuras/Projects/Last n Melee.lua @@ -1,94 +1,94 @@ ---DISPLAY -function() - local minhit, maxhit = 9999999, 0 - local function tohex(input) - local output = string.format("%x", input * 255) - return output - end - - local function grad(c, minhit, maxhit) - c = (((maxhit - c) / (maxhit - minhit)) * 1) - if c > 0.5 then - c = 1 - (2 * (c - 0.5)) - return c, 1, 0, 1 - else - c = c * 2 - return 1, c, 0, 1 - end - end - - local function shorten(val) - local function round(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var - end - local n = 2 - if val < 1e3 then - return round(val, n) - elseif val > 1e3 and val < 1e6 then - return round(val / 1e3, n) .. "k" - elseif val > 1e6 and val < 1e9 then - return round(val / 1e6, n) .. "M" - elseif val > 1e9 then - return round(val / 1e9, n) .. "G" - end - end - - local output = "MELEE" .. "\n" - local totaldmgdone = 0 - for k,v in ipairs(aura_env.swings) do --Get total dmg for average hit - totaldmgdone = totaldmgdone + v - end - if #aura_env.swings > 0 then - output = output .. shorten(totaldmgdone / #aura_env.swings) .. "\n\n" - - for k,v in ipairs(aura_env.swings) do --Get min and max hit - if v > maxhit then - maxhit = v - end - if v < minhit then - minhit = v - end - end - for k,v in ipairs(aura_env.swings) do --Final format for output - local color1, color2, color3, color4 = 0, 0, 0, 0 - color1, color2, color3, color4 = grad(v, minhit, maxhit) - color1, color2, color3, color4 = tohex(color1), tohex(color2), tohex(color3), tohex(color4) - color1, color2, color3, color4 = tostring(color1), tostring(color2), tostring(color3), tostring(color4) - if color1 == "0" then color1 = "00" end - if color2 == "0" then color2 = "00" end - if color3 == "0" then color3 = "00" end - local color = "|c" .. color4 .. color1 .. color2 .. color3 - output = output .. color .. shorten(v) .. "\n" - end - end - return output -end - ---PLAYER_REGEN_DISABLED -function() - aura_env.swings = {} -end - ---COMBAT_LOG_EVENT_UNFILTERED -function(...) - local subEvent = select(3, ...) - local target = select(10, ...) - if subEvent == "SWING_DAMAGE" and target == UnitName("player") then - local block = select(17, ...) or 0 - local var = select(13, ...) + block - if #aura_env.swings == 10 then - table.remove(aura_env.swings, 1) - end - table.insert(aura_env.swings, var) - end -end - ---INIT -aura_env.swingerino = 10 -aura_env.swings = {} +--DISPLAY +function() + local minhit, maxhit = 9999999, 0 + local function tohex(input) + local output = string.format("%x", input * 255) + return output + end + + local function grad(c, minhit, maxhit) + c = (((maxhit - c) / (maxhit - minhit)) * 1) + if c > 0.5 then + c = 1 - (2 * (c - 0.5)) + return c, 1, 0, 1 + else + c = c * 2 + return 1, c, 0, 1 + end + end + + local function shorten(val) + local function round(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var + end + local n = 2 + if val < 1e3 then + return round(val, n) + elseif val > 1e3 and val < 1e6 then + return round(val / 1e3, n) .. "k" + elseif val > 1e6 and val < 1e9 then + return round(val / 1e6, n) .. "M" + elseif val > 1e9 then + return round(val / 1e9, n) .. "G" + end + end + + local output = "MELEE" .. "\n" + local totaldmgdone = 0 + for k,v in ipairs(aura_env.swings) do --Get total dmg for average hit + totaldmgdone = totaldmgdone + v + end + if #aura_env.swings > 0 then + output = output .. shorten(totaldmgdone / #aura_env.swings) .. "\n\n" + + for k,v in ipairs(aura_env.swings) do --Get min and max hit + if v > maxhit then + maxhit = v + end + if v < minhit then + minhit = v + end + end + for k,v in ipairs(aura_env.swings) do --Final format for output + local color1, color2, color3, color4 = 0, 0, 0, 0 + color1, color2, color3, color4 = grad(v, minhit, maxhit) + color1, color2, color3, color4 = tohex(color1), tohex(color2), tohex(color3), tohex(color4) + color1, color2, color3, color4 = tostring(color1), tostring(color2), tostring(color3), tostring(color4) + if color1 == "0" then color1 = "00" end + if color2 == "0" then color2 = "00" end + if color3 == "0" then color3 = "00" end + local color = "|c" .. color4 .. color1 .. color2 .. color3 + output = output .. color .. shorten(v) .. "\n" + end + end + return output +end + +--PLAYER_REGEN_DISABLED +function() + aura_env.swings = {} +end + +--COMBAT_LOG_EVENT_UNFILTERED +function(...) + local subEvent = select(3, ...) + local target = select(10, ...) + if subEvent == "SWING_DAMAGE" and target == UnitName("player") then + local block = select(17, ...) or 0 + local var = select(13, ...) + block + if #aura_env.swings == 10 then + table.remove(aura_env.swings, 1) + end + table.insert(aura_env.swings, var) + end +end + +--INIT +aura_env.swingerino = 10 +aura_env.swings = {} aura_env.pointer = 1 \ No newline at end of file diff --git a/Complete Projects/Legion/Last n Spells.lua b/WeakAuras/Projects/Last n Spells.lua similarity index 96% rename from Complete Projects/Legion/Last n Spells.lua rename to WeakAuras/Projects/Last n Spells.lua index 90c7421..25b1c6c 100644 --- a/Complete Projects/Legion/Last n Spells.lua +++ b/WeakAuras/Projects/Last n Spells.lua @@ -1,93 +1,93 @@ ---DISPLAY -function() - local minhit, maxhit = 9999999, 0 - local function tohex(input) - local output = string.format("%x", input * 255) - return output - end - - local function grad(c, minhit, maxhit) - c = (((maxhit - c) / (maxhit - minhit)) * 1) - if c > 0.5 then - c = 1 - (2 * (c - 0.5)) - return c, 1, 0, 1 - else - c = c * 2 - return 1, c, 0, 1 - end - end - - local function shorten(val) - local function round(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var - end - local n = 2 - if val < 1e3 then - return round(val, n) - elseif val > 1e3 and val < 1e6 then - return round(val / 1e3, n) .. "k" - elseif val > 1e6 and val < 1e9 then - return round(val / 1e6, n) .. "M" - elseif val > 1e9 then - return round(val / 1e9, n) .. "G" - end - end - - local output = "SPELL" .. "\n" - local totaldmgdone = 0 - for k,v in ipairs(aura_env.swings) do --Get total dmg for average hit - totaldmgdone = totaldmgdone + v - end - if #aura_env.swings > 0 then - output = output .. shorten(totaldmgdone / #aura_env.swings) .. "\n\n" - - for k,v in ipairs(aura_env.swings) do --Get min and max hit - if v > maxhit then - maxhit = v - end - if v < minhit then - minhit = v - end - end - for k,v in ipairs(aura_env.swings) do --Final format for output - local color1, color2, color3, color4 = 0, 0, 0, 0 - color1, color2, color3, color4 = grad(v, minhit, maxhit) - color1, color2, color3, color4 = tohex(color1), tohex(color2), tohex(color3), tohex(color4) - color1, color2, color3, color4 = tostring(color1), tostring(color2), tostring(color3), tostring(color4) - if color1 == "0" then color1 = "00" end - if color2 == "0" then color2 = "00" end - if color3 == "0" then color3 = "00" end - local color = "|c" .. color4 .. color1 .. color2 .. color3 - output = output .. color .. shorten(v) .. "\n" - end - end - return output -end - ---PLAYER_REGEN_DISABLED -function() - aura_env.swings = {} -end - ---COMBAT_LOG_EVENT_UNFILTERED -function(...) - local subEvent = select(3, ...) - local target = select(10, ...) - if subEvent == "SPELL_DAMAGE" and target == UnitName("player") then - local var = select(13, ...) - if #aura_env.swings == 10 then - table.remove(aura_env.swings, 1) - end - table.insert(aura_env.swings, var) - end -end - ---INIT -aura_env.swingerino = 10 -aura_env.swings = {} +--DISPLAY +function() + local minhit, maxhit = 9999999, 0 + local function tohex(input) + local output = string.format("%x", input * 255) + return output + end + + local function grad(c, minhit, maxhit) + c = (((maxhit - c) / (maxhit - minhit)) * 1) + if c > 0.5 then + c = 1 - (2 * (c - 0.5)) + return c, 1, 0, 1 + else + c = c * 2 + return 1, c, 0, 1 + end + end + + local function shorten(val) + local function round(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var + end + local n = 2 + if val < 1e3 then + return round(val, n) + elseif val > 1e3 and val < 1e6 then + return round(val / 1e3, n) .. "k" + elseif val > 1e6 and val < 1e9 then + return round(val / 1e6, n) .. "M" + elseif val > 1e9 then + return round(val / 1e9, n) .. "G" + end + end + + local output = "SPELL" .. "\n" + local totaldmgdone = 0 + for k,v in ipairs(aura_env.swings) do --Get total dmg for average hit + totaldmgdone = totaldmgdone + v + end + if #aura_env.swings > 0 then + output = output .. shorten(totaldmgdone / #aura_env.swings) .. "\n\n" + + for k,v in ipairs(aura_env.swings) do --Get min and max hit + if v > maxhit then + maxhit = v + end + if v < minhit then + minhit = v + end + end + for k,v in ipairs(aura_env.swings) do --Final format for output + local color1, color2, color3, color4 = 0, 0, 0, 0 + color1, color2, color3, color4 = grad(v, minhit, maxhit) + color1, color2, color3, color4 = tohex(color1), tohex(color2), tohex(color3), tohex(color4) + color1, color2, color3, color4 = tostring(color1), tostring(color2), tostring(color3), tostring(color4) + if color1 == "0" then color1 = "00" end + if color2 == "0" then color2 = "00" end + if color3 == "0" then color3 = "00" end + local color = "|c" .. color4 .. color1 .. color2 .. color3 + output = output .. color .. shorten(v) .. "\n" + end + end + return output +end + +--PLAYER_REGEN_DISABLED +function() + aura_env.swings = {} +end + +--COMBAT_LOG_EVENT_UNFILTERED +function(...) + local subEvent = select(3, ...) + local target = select(10, ...) + if subEvent == "SPELL_DAMAGE" and target == UnitName("player") then + local var = select(13, ...) + if #aura_env.swings == 10 then + table.remove(aura_env.swings, 1) + end + table.insert(aura_env.swings, var) + end +end + +--INIT +aura_env.swingerino = 10 +aura_env.swings = {} aura_env.pointer = 1 \ No newline at end of file diff --git a/WIP/Last n spells cast.lua b/WeakAuras/Projects/Last n spells cast.lua similarity index 96% rename from WIP/Last n spells cast.lua rename to WeakAuras/Projects/Last n spells cast.lua index 9aa6ba0..1648ca7 100644 --- a/WIP/Last n spells cast.lua +++ b/WeakAuras/Projects/Last n spells cast.lua @@ -1,30 +1,30 @@ -COMBAT_LOG_EVENT_UNFILTERED -function(...) - DavesFuckerySpellsCast = {} - local subevent = select(3, ...) - local caster = --GET CASTER FROM INGAME EVENT - local function addSpell(spellname) - if #DavesFuckerySpellsCast == aura_env.maxspells then - table.remove(DavesFuckerySpellsCast, 1) - table.insert(DavesFuckerySpellsCast, spellname) - else - table.insert(DavesFuckerySpellsCast,spellname) - end - end - if aura_env.casterName ~= "" then - if subevent == "SPELL_CAST_SUCCESS" and caster == aura_env.casterName then - local spellname = --GET SPELL NAME FROM INGAME EVENT - addSpell(spellname) - end - else - if subevent == "SPELL_CAST_SUCCESS" and caster == UnitName(aura_env.casterID) then - local spellname = --GET SPELL NAME FROM INGAME EVENT - addSpell(spellname) - end - end -end - -INIT -aura_env.maxspells = 5 -aura_env.casterID = "player" +COMBAT_LOG_EVENT_UNFILTERED +function(...) + DavesFuckerySpellsCast = {} + local subevent = select(3, ...) + local caster = --GET CASTER FROM INGAME EVENT + local function addSpell(spellname) + if #DavesFuckerySpellsCast == aura_env.maxspells then + table.remove(DavesFuckerySpellsCast, 1) + table.insert(DavesFuckerySpellsCast, spellname) + else + table.insert(DavesFuckerySpellsCast,spellname) + end + end + if aura_env.casterName ~= "" then + if subevent == "SPELL_CAST_SUCCESS" and caster == aura_env.casterName then + local spellname = --GET SPELL NAME FROM INGAME EVENT + addSpell(spellname) + end + else + if subevent == "SPELL_CAST_SUCCESS" and caster == UnitName(aura_env.casterID) then + local spellname = --GET SPELL NAME FROM INGAME EVENT + addSpell(spellname) + end + end +end + +INIT +aura_env.maxspells = 5 +aura_env.casterID = "player" aura_env.casterName = "" \ No newline at end of file diff --git a/Complete Projects/Legion/Leggo Sniffer.lua b/WeakAuras/Projects/Leggo Sniffer.lua similarity index 95% rename from Complete Projects/Legion/Leggo Sniffer.lua rename to WeakAuras/Projects/Leggo Sniffer.lua index 02094f3..f20cfae 100644 --- a/Complete Projects/Legion/Leggo Sniffer.lua +++ b/WeakAuras/Projects/Leggo Sniffer.lua @@ -1,33 +1,33 @@ -PLAYER_TARGET_CHANGED -function() - local legCount = 0 - local slot = {0, 0} - local link = {"", ""} - if CheckInteractDistance("target", 1) and UnitIsPlayer("target") then - for i = 1, 15 do - local quality = GetInventoryItemQuality("target", i) - if quality == 5 then - legCount = legCount + 1 - slot[legCount] = i - link[legCount] = GetInventoryItemLink("target", i) - end - end - local querry = 2 - aura_env.texture = select(10, GetItemInfo(link[querry])) - if link[querry] == "" then - aura_env.trigger = 0 - end - print(link[querry]) - return true - end -end - -function() - if UnitExists("target") and UnitIsPlayer("target") then - return true - else - return false - end -end - +PLAYER_TARGET_CHANGED +function() + local legCount = 0 + local slot = {0, 0} + local link = {"", ""} + if CheckInteractDistance("target", 1) and UnitIsPlayer("target") then + for i = 1, 15 do + local quality = GetInventoryItemQuality("target", i) + if quality == 5 then + legCount = legCount + 1 + slot[legCount] = i + link[legCount] = GetInventoryItemLink("target", i) + end + end + local querry = 2 + aura_env.texture = select(10, GetItemInfo(link[querry])) + if link[querry] == "" then + aura_env.trigger = 0 + end + print(link[querry]) + return true + end +end + +function() + if UnitExists("target") and UnitIsPlayer("target") then + return true + else + return false + end +end + aura_env.texture = "" \ No newline at end of file diff --git a/Complete Projects/Legion/List the bois.lua b/WeakAuras/Projects/List the bois.lua similarity index 97% rename from Complete Projects/Legion/List the bois.lua rename to WeakAuras/Projects/List the bois.lua index 20a310b..fc0bcd4 100644 --- a/Complete Projects/Legion/List the bois.lua +++ b/WeakAuras/Projects/List the bois.lua @@ -1,96 +1,96 @@ ---COMBAT_LOG_EVENT_UNFILTERED GROUP_ROSTER_UPDATE -function(event, _, subevent) - if (event == "COMBAT_LOG_EVENT_UNFILTERED" and subevent == "UNIT_DIED") or event == "GROUP_ROSTER_UPDATE" then - aura_env.dps = 0 - aura_env.heal = 0 - aura_env.tank = 0 - - aura_env.dpsDead = 0 - aura_env.healDead = 0 - aura_env.tankDead = 0 - if IsInRaid("player") == true then - for i = 1, GetNumGroupMembers() do - if UnitGroupRolesAssigned("raid"..i) == "TANK" then - if UnitIsDeadOrGhost("raid"..i) then - aura_env.tankDead = aura_env.tankDead + 1 - else - aura_env.tank = aura_env.tank + 1 - end - end - if UnitGroupRolesAssigned("raid"..i) == "DAMAGER" then - if UnitIsDeadOrGhost("raid"..i) then - aura_env.dpsDead = aura_env.dpsDead + 1 - else - aura_env.dps = aura_env.dps + 1 - end - end - if UnitGroupRolesAssigned("raid"..i) == "HEALER" then - if UnitIsDeadOrGhost("raid"..i) then - aura_env.healDead = aura_env.healDead + 1 - else - aura_env.heal = aura_env.heal + 1 - end - end - end - else - for i = 1, GetNumGroupMembers() do - if UnitGroupRolesAssigned("party"..i) == "TANK" then - if UnitIsDeadOrGhost("party"..i) then - aura_env.tankDead = aura_env.tankDead + 1 - else - aura_env.tank = aura_env.tank + 1 - end - end - if UnitGroupRolesAssigned("party"..i) == "DAMAGER" then - if UnitIsDeadOrGhost("party"..i) then - aura_env.dpsDead = aura_env.dpsDead + 1 - else - aura_env.dps = aura_env.dps + 1 - end - end - if UnitGroupRolesAssigned("party"..i) == "HEALER" then - if UnitIsDeadOrGhost("party"..i) then - aura_env.healDead = aura_env.healDead + 1 - else - aura_env.heal = aura_env.heal + 1 - end - end - end - if UnitIsDeadOrGhost("player") then - if UnitGroupRolesAssigned("player") == "TANK" then - aura_env.tankDead = aura_env.tankDead + 1 - end - if UnitGroupRolesAssigned("player") == "DAMAGER" then - aura_env.dpsDead = aura_env.dpsDead + 1 - end - if UnitGroupRolesAssigned("player") == "HEALER" then - aura_env.healDead = aura_env.healDead + 1 - end - else - if UnitGroupRolesAssigned("player") == "TANK" then - aura_env.tank = aura_env.tank + 1 - end - if UnitGroupRolesAssigned("player") == "DAMAGER" then - aura_env.dps = aura_env.dps + 1 - end - if UnitGroupRolesAssigned("player") == "HEALER" then - aura_env.heal = aura_env.heal + 1 - end - end - end - end -end - ---DISPLAY -function() - return "TANKS: " .. aura_env.tank - aura_env.tankDead .. "\n" .. "HEALS: " .. aura_env.heal - aura_env.healDead .. "\n" .. "DPS:" .. aura_env.dps - aura_env.dpsDead -end - ---INIT -aura_env.dps = 0 -aura_env.heal = 0 -aura_env.tank = 0 - -aura_env.dpsDead = 0 -aura_env.healDead = 0 -aura_env.tankDead = 0 +--COMBAT_LOG_EVENT_UNFILTERED GROUP_ROSTER_UPDATE +function(event, _, subevent) + if (event == "COMBAT_LOG_EVENT_UNFILTERED" and subevent == "UNIT_DIED") or event == "GROUP_ROSTER_UPDATE" then + aura_env.dps = 0 + aura_env.heal = 0 + aura_env.tank = 0 + + aura_env.dpsDead = 0 + aura_env.healDead = 0 + aura_env.tankDead = 0 + if IsInRaid("player") == true then + for i = 1, GetNumGroupMembers() do + if UnitGroupRolesAssigned("raid"..i) == "TANK" then + if UnitIsDeadOrGhost("raid"..i) then + aura_env.tankDead = aura_env.tankDead + 1 + else + aura_env.tank = aura_env.tank + 1 + end + end + if UnitGroupRolesAssigned("raid"..i) == "DAMAGER" then + if UnitIsDeadOrGhost("raid"..i) then + aura_env.dpsDead = aura_env.dpsDead + 1 + else + aura_env.dps = aura_env.dps + 1 + end + end + if UnitGroupRolesAssigned("raid"..i) == "HEALER" then + if UnitIsDeadOrGhost("raid"..i) then + aura_env.healDead = aura_env.healDead + 1 + else + aura_env.heal = aura_env.heal + 1 + end + end + end + else + for i = 1, GetNumGroupMembers() do + if UnitGroupRolesAssigned("party"..i) == "TANK" then + if UnitIsDeadOrGhost("party"..i) then + aura_env.tankDead = aura_env.tankDead + 1 + else + aura_env.tank = aura_env.tank + 1 + end + end + if UnitGroupRolesAssigned("party"..i) == "DAMAGER" then + if UnitIsDeadOrGhost("party"..i) then + aura_env.dpsDead = aura_env.dpsDead + 1 + else + aura_env.dps = aura_env.dps + 1 + end + end + if UnitGroupRolesAssigned("party"..i) == "HEALER" then + if UnitIsDeadOrGhost("party"..i) then + aura_env.healDead = aura_env.healDead + 1 + else + aura_env.heal = aura_env.heal + 1 + end + end + end + if UnitIsDeadOrGhost("player") then + if UnitGroupRolesAssigned("player") == "TANK" then + aura_env.tankDead = aura_env.tankDead + 1 + end + if UnitGroupRolesAssigned("player") == "DAMAGER" then + aura_env.dpsDead = aura_env.dpsDead + 1 + end + if UnitGroupRolesAssigned("player") == "HEALER" then + aura_env.healDead = aura_env.healDead + 1 + end + else + if UnitGroupRolesAssigned("player") == "TANK" then + aura_env.tank = aura_env.tank + 1 + end + if UnitGroupRolesAssigned("player") == "DAMAGER" then + aura_env.dps = aura_env.dps + 1 + end + if UnitGroupRolesAssigned("player") == "HEALER" then + aura_env.heal = aura_env.heal + 1 + end + end + end + end +end + +--DISPLAY +function() + return "TANKS: " .. aura_env.tank - aura_env.tankDead .. "\n" .. "HEALS: " .. aura_env.heal - aura_env.healDead .. "\n" .. "DPS:" .. aura_env.dps - aura_env.dpsDead +end + +--INIT +aura_env.dps = 0 +aura_env.heal = 0 +aura_env.tank = 0 + +aura_env.dpsDead = 0 +aura_env.healDead = 0 +aura_env.tankDead = 0 diff --git a/Complete Projects/Legion/Loot Filter.lua b/WeakAuras/Projects/Loot Filter.lua similarity index 96% rename from Complete Projects/Legion/Loot Filter.lua rename to WeakAuras/Projects/Loot Filter.lua index c4b1040..b390083 100644 --- a/Complete Projects/Legion/Loot Filter.lua +++ b/WeakAuras/Projects/Loot Filter.lua @@ -1,353 +1,353 @@ --- START_LOOT_ROLL ---Doesn't work for now -function(_, id) - local name, _, quality, ilvl, _, class, subclass, _, slot = GetItemInfo(GetLootRollItemLink(id)) - local _, _, count, _, bopflag, canneed, cangreed, cande = GetLootRollItemInfo(id) - local pclass = select(3, UnitClass("player")) - - print("name " .. name) - print("quality " .. quality) - print("ilvl " .. ilvl) - print("class " .. class) - print("subclass " .. subclass) - print("slot " .. slot) - - print("cannneed", canneed) - if cannneed == 1 then - if bopflag == 0 then - RollOnLoot(id, 1) - print("Rolling on " .. class .. " " .. subclass .. " 1!") - elseif name == "Bloodhunter's Quarry" then - RollOnLoot(id, 1) - print("Rolling on " .. class .. " " .. subclass .. " 2!") - end - print("cangreed", cangreed) - elseif cangreed == 1 then - if bopflag == 1 then - if aura_env.skills[pclass][subclass] ~= 1 then - RollOnLoot(id, 0) - print("Rolling on " .. class .. " " .. subclass .. " 3!") - elseif aura_env.skills[pclass][class] ~= 1 then - RollOnLoot(id, 0) - print("Rolling on " .. class .. " " .. subclass .. " 4!") - end - end - end -end - ---INIT -aura_env.skills = -{ - --Warrior - [1] = - { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 0, - ["Mail"] = 0, - ["Plate"] = 1, - ["Shields"] = 1, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 1, - ["Bows"] = 1, - ["Guns"] = 1, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 1, - ["Polearms"] = 1, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 1, - ["Warglaives"] = 1, - ["Staves"] = 1, - ["Fist Weapons"] = 1, - ["Daggers"] = 1, - ["Crossbows"] = 1, - ["Wands"] = 0, - }, - --Paladin - [2] = - { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 0, - ["Mail"] = 0, - ["Plate"] = 1, - ["Shields"] = 1, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 1, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 1, - ["Polearms"] = 1, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 1, - ["Warglaives"] = 0, - ["Staves"] = 0, - ["Fist Weapons"] = 0, - ["Daggers"] = 0, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, - --Hunter - [3] = - { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 0, - ["Mail"] = 1, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 1, - ["Bows"] = 1, - ["Guns"] = 1, - ["One-Handed Maces"] = 0, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 1, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 1, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 1, - ["Daggers"] = 1, - ["Crossbows"] = 1, - ["Wands"] = 0, - }, - --Rogue - [4] = - { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 1, - ["Mail"] = 0, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 0, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 0, - ["Fist Weapons"] = 1, - ["Daggers"] = 1, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, - --Priest - [5] = - { - --Armor Skills - ["Cloth"] = 1, - ["Leather"] = 0, - ["Mail"] = 0, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 0, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 0, - ["One-Handed Swords"] = 0, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 0, - ["Daggers"] = 1, - ["Crossbows"] = 0, - ["Wands"] = 1, - }, - --Death Knight - [6] = - { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 0, - ["Mail"] = 0, - ["Plate"] = 1, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 1, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 1, - ["Polearms"] = 1, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 1, - ["Warglaives"] = 0, - ["Staves"] = 0, - ["Fist Weapons"] = 0, - ["Daggers"] = 0, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, - --Shaman - [7] = - { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 0, - ["Mail"] = 1, - ["Plate"] = 0, - ["Shields"] = 1, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 0, - ["One-Handed Swords"] = 0, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 1, - ["Daggers"] = 1, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, - --Mage - [8] = - { - --Armor Skills - ["Cloth"] = 1, - ["Leather"] = 0, - ["Mail"] = 0, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 0, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 0, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 0, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 0, - ["Daggers"] = 1, - ["Crossbows"] = 0, - ["Wands"] = 1, - }, - --Warlock - [9] = - { - --Armor Skills - ["Cloth"] = 1, - ["Leather"] = 0, - ["Mail"] = 0, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 0, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 0, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 0, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 0, - ["Daggers"] = 1, - ["Crossbows"] = 0, - ["Wands"] = 1, - }, - --Monk - [10] = - { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 1, - ["Mail"] = 0, - ["Plate"] = 1, - ["Shields"] = 1, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 1, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 1, - ["Daggers"] = 0, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, - --Druid - [11] = - { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 1, - ["Mail"] = 0, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 0, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 1, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 1, - ["One-Handed Swords"] = 0, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 0, - ["Staves"] = 1, - ["Fist Weapons"] = 1, - ["Daggers"] = 1, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, - --Demon Hunter - [12] = - { - --Armor Skills - ["Cloth"] = 0, - ["Leather"] = 1, - ["Mail"] = 0, - ["Plate"] = 0, - ["Shields"] = 0, - --Weapon Skills - ["One-Handed Axes"] = 1, - ["Two-Handed Axes"] = 0, - ["Bows"] = 0, - ["Guns"] = 0, - ["One-Handed Maces"] = 0, - ["Two-Handed Maces"] = 0, - ["Polearms"] = 0, - ["One-Handed Swords"] = 1, - ["Two-Handed Swords"] = 0, - ["Warglaives"] = 1, - ["Staves"] = 0, - ["Fist Weapons"] = 1, - ["Daggers"] = 0, - ["Crossbows"] = 0, - ["Wands"] = 0, - }, -} +-- START_LOOT_ROLL +--Doesn't work for now +function(_, id) + local name, _, quality, ilvl, _, class, subclass, _, slot = GetItemInfo(GetLootRollItemLink(id)) + local _, _, count, _, bopflag, canneed, cangreed, cande = GetLootRollItemInfo(id) + local pclass = select(3, UnitClass("player")) + + print("name " .. name) + print("quality " .. quality) + print("ilvl " .. ilvl) + print("class " .. class) + print("subclass " .. subclass) + print("slot " .. slot) + + print("cannneed", canneed) + if cannneed == 1 then + if bopflag == 0 then + RollOnLoot(id, 1) + print("Rolling on " .. class .. " " .. subclass .. " 1!") + elseif name == "Bloodhunter's Quarry" then + RollOnLoot(id, 1) + print("Rolling on " .. class .. " " .. subclass .. " 2!") + end + print("cangreed", cangreed) + elseif cangreed == 1 then + if bopflag == 1 then + if aura_env.skills[pclass][subclass] ~= 1 then + RollOnLoot(id, 0) + print("Rolling on " .. class .. " " .. subclass .. " 3!") + elseif aura_env.skills[pclass][class] ~= 1 then + RollOnLoot(id, 0) + print("Rolling on " .. class .. " " .. subclass .. " 4!") + end + end + end +end + +--INIT +aura_env.skills = +{ + --Warrior + [1] = + { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 0, + ["Mail"] = 0, + ["Plate"] = 1, + ["Shields"] = 1, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 1, + ["Bows"] = 1, + ["Guns"] = 1, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 1, + ["Polearms"] = 1, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 1, + ["Warglaives"] = 1, + ["Staves"] = 1, + ["Fist Weapons"] = 1, + ["Daggers"] = 1, + ["Crossbows"] = 1, + ["Wands"] = 0, + }, + --Paladin + [2] = + { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 0, + ["Mail"] = 0, + ["Plate"] = 1, + ["Shields"] = 1, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 1, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 1, + ["Polearms"] = 1, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 1, + ["Warglaives"] = 0, + ["Staves"] = 0, + ["Fist Weapons"] = 0, + ["Daggers"] = 0, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, + --Hunter + [3] = + { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 0, + ["Mail"] = 1, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 1, + ["Bows"] = 1, + ["Guns"] = 1, + ["One-Handed Maces"] = 0, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 1, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 1, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 1, + ["Daggers"] = 1, + ["Crossbows"] = 1, + ["Wands"] = 0, + }, + --Rogue + [4] = + { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 1, + ["Mail"] = 0, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 0, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 0, + ["Fist Weapons"] = 1, + ["Daggers"] = 1, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, + --Priest + [5] = + { + --Armor Skills + ["Cloth"] = 1, + ["Leather"] = 0, + ["Mail"] = 0, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 0, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 0, + ["One-Handed Swords"] = 0, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 0, + ["Daggers"] = 1, + ["Crossbows"] = 0, + ["Wands"] = 1, + }, + --Death Knight + [6] = + { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 0, + ["Mail"] = 0, + ["Plate"] = 1, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 1, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 1, + ["Polearms"] = 1, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 1, + ["Warglaives"] = 0, + ["Staves"] = 0, + ["Fist Weapons"] = 0, + ["Daggers"] = 0, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, + --Shaman + [7] = + { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 0, + ["Mail"] = 1, + ["Plate"] = 0, + ["Shields"] = 1, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 0, + ["One-Handed Swords"] = 0, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 1, + ["Daggers"] = 1, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, + --Mage + [8] = + { + --Armor Skills + ["Cloth"] = 1, + ["Leather"] = 0, + ["Mail"] = 0, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 0, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 0, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 0, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 0, + ["Daggers"] = 1, + ["Crossbows"] = 0, + ["Wands"] = 1, + }, + --Warlock + [9] = + { + --Armor Skills + ["Cloth"] = 1, + ["Leather"] = 0, + ["Mail"] = 0, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 0, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 0, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 0, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 0, + ["Daggers"] = 1, + ["Crossbows"] = 0, + ["Wands"] = 1, + }, + --Monk + [10] = + { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 1, + ["Mail"] = 0, + ["Plate"] = 1, + ["Shields"] = 1, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 1, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 1, + ["Daggers"] = 0, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, + --Druid + [11] = + { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 1, + ["Mail"] = 0, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 0, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 1, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 1, + ["One-Handed Swords"] = 0, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 0, + ["Staves"] = 1, + ["Fist Weapons"] = 1, + ["Daggers"] = 1, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, + --Demon Hunter + [12] = + { + --Armor Skills + ["Cloth"] = 0, + ["Leather"] = 1, + ["Mail"] = 0, + ["Plate"] = 0, + ["Shields"] = 0, + --Weapon Skills + ["One-Handed Axes"] = 1, + ["Two-Handed Axes"] = 0, + ["Bows"] = 0, + ["Guns"] = 0, + ["One-Handed Maces"] = 0, + ["Two-Handed Maces"] = 0, + ["Polearms"] = 0, + ["One-Handed Swords"] = 1, + ["Two-Handed Swords"] = 0, + ["Warglaives"] = 1, + ["Staves"] = 0, + ["Fist Weapons"] = 1, + ["Daggers"] = 0, + ["Crossbows"] = 0, + ["Wands"] = 0, + }, +} diff --git a/Complete Projects/Legion/Maiden Color Assignment.lua b/WeakAuras/Projects/Maiden Color Assignment.lua similarity index 97% rename from Complete Projects/Legion/Maiden Color Assignment.lua rename to WeakAuras/Projects/Maiden Color Assignment.lua index 5cf1aab..7c3c124 100644 --- a/Complete Projects/Legion/Maiden Color Assignment.lua +++ b/WeakAuras/Projects/Maiden Color Assignment.lua @@ -1,76 +1,76 @@ ---COMBAT_LOG_EVENT_UNFILTERED PLAYER_REGEN_DISABLED -function(e, ...) - if e == "COMBAT_LOG_EVENT_UNFILTERED" then - --for i = 1, 40 do - --local temp = select(i, ...) - --if temp then - --print(i, temp) - --end - --end - local se = select(2, ...) - if se == "SPELL_CAST_START" then - local source = select(5, ...) or 0 - local spell = select(13, ...) or 0 - if source:match("Vigilance") and spell == "Infusion" then - aura_env.infusionCounter = aura_env.infusionCounter + 1 - if aura_env.infusionCounter == 1 or (aura_env.infusionCounter - 1) % 2 == 0 then - print("AYAYAYAJAJSDJASDJIASJIDIJDIJD LOL") - local lightGroup = {["outer"] = false, ["mid"] = false, ["inner"] = false} - local felGroup = {["outer"] = false, ["mid"] = false, ["inner"] = false} - for k, v in pairs(aura_env.soakers) do - if UnitDebuff(v.unit, "Fel Infusion") and v.alive == true then - if felGroup.outer == false then - felGroup.outer = k - elseif felGroup.mid == false then - felGroup.mid = k - elseif felGroup.inner == false then - felGroup.inner = k - end - elseif UnitDebuff(v.unit, "Light Infusion") and v.alive == true then - if lightGroup.outer == false then - lightGroup.outer = k - elseif lightGroup.mid == false then - lightGroup.mid = k - elseif lightGroup.inner == false then - lightGroup.inner = k - end - end - end - -- Announce soakers pls - print("felGroup.outer, felGroup.mid, felGroup.inner", felGroup.outer, felGroup.mid, felGroup.inner) - print("lightGroup.outer, lightGroup.mid, lightGroup.inner", lightGroup.outer, lightGroup.mid, lightGroup.inner) - end - end - elseif e == "UNIT_DIED" then - for k, v in pairs(aura_env.soakers) do - if UnitIsDeadOrGhost(k) then - v.alive = false - end - end - end - elseif e == "PLAYER_REGEN_DISABLED" then - aura_env.infusionCounter = 0 - for i = 1, 40 do - local unit = "raid" .. i - local class = select(3, UnitClass(unit)) - if UnitIsConnected(unit) then - local spec = GetInspectSpecialization(unit) - -- Specs don't work, use classes instead ??? && roles - print("SPECERINO", spec, unit) - if aura_env.rangedSpecs[spec] then - aura_env.soakers[UnitName(unit)] = {["id"] = unit, ["alive"] = true} - print(UnitName(unit), unit) - if UnitIsDeadOrGhost(unit) then - aura_env.soakers[UnitName(unit)].alive = false - end - end - end - end - end -end ---7@pQ8G)n - ---INIT -aura_env.infusionCounter = 0 -aura_env.rangedSpecs = {102, 253, 254, 62, 63, 64, 258, 262, 265, 266, 267} -aura_env.soakers = {} +--COMBAT_LOG_EVENT_UNFILTERED PLAYER_REGEN_DISABLED +function(e, ...) + if e == "COMBAT_LOG_EVENT_UNFILTERED" then + --for i = 1, 40 do + --local temp = select(i, ...) + --if temp then + --print(i, temp) + --end + --end + local se = select(2, ...) + if se == "SPELL_CAST_START" then + local source = select(5, ...) or 0 + local spell = select(13, ...) or 0 + if source:match("Vigilance") and spell == "Infusion" then + aura_env.infusionCounter = aura_env.infusionCounter + 1 + if aura_env.infusionCounter == 1 or (aura_env.infusionCounter - 1) % 2 == 0 then + print("AYAYAYAJAJSDJASDJIASJIDIJDIJD LOL") + local lightGroup = {["outer"] = false, ["mid"] = false, ["inner"] = false} + local felGroup = {["outer"] = false, ["mid"] = false, ["inner"] = false} + for k, v in pairs(aura_env.soakers) do + if UnitDebuff(v.unit, "Fel Infusion") and v.alive == true then + if felGroup.outer == false then + felGroup.outer = k + elseif felGroup.mid == false then + felGroup.mid = k + elseif felGroup.inner == false then + felGroup.inner = k + end + elseif UnitDebuff(v.unit, "Light Infusion") and v.alive == true then + if lightGroup.outer == false then + lightGroup.outer = k + elseif lightGroup.mid == false then + lightGroup.mid = k + elseif lightGroup.inner == false then + lightGroup.inner = k + end + end + end + -- Announce soakers pls + print("felGroup.outer, felGroup.mid, felGroup.inner", felGroup.outer, felGroup.mid, felGroup.inner) + print("lightGroup.outer, lightGroup.mid, lightGroup.inner", lightGroup.outer, lightGroup.mid, lightGroup.inner) + end + end + elseif e == "UNIT_DIED" then + for k, v in pairs(aura_env.soakers) do + if UnitIsDeadOrGhost(k) then + v.alive = false + end + end + end + elseif e == "PLAYER_REGEN_DISABLED" then + aura_env.infusionCounter = 0 + for i = 1, 40 do + local unit = "raid" .. i + local class = select(3, UnitClass(unit)) + if UnitIsConnected(unit) then + local spec = GetInspectSpecialization(unit) + -- Specs don't work, use classes instead ??? && roles + print("SPECERINO", spec, unit) + if aura_env.rangedSpecs[spec] then + aura_env.soakers[UnitName(unit)] = {["id"] = unit, ["alive"] = true} + print(UnitName(unit), unit) + if UnitIsDeadOrGhost(unit) then + aura_env.soakers[UnitName(unit)].alive = false + end + end + end + end + end +end +--7@pQ8G)n + +--INIT +aura_env.infusionCounter = 0 +aura_env.rangedSpecs = {102, 253, 254, 62, 63, 64, 258, 262, 265, 266, 267} +aura_env.soakers = {} diff --git a/Complete Projects/Legion/Members Alive.lua b/WeakAuras/Projects/Members Alive.lua similarity index 97% rename from Complete Projects/Legion/Members Alive.lua rename to WeakAuras/Projects/Members Alive.lua index 86aa16e..03e3162 100644 --- a/Complete Projects/Legion/Members Alive.lua +++ b/WeakAuras/Projects/Members Alive.lua @@ -1,37 +1,37 @@ ---COMBAT_LOG_EVENT_UNFILTERED GROUP_ROSTER_UPDATE -function(event,_,subevent) - if (event == "COMBAT_LOG_EVENT_UNFILTERED" and subevent == "UNIT_DIED") or event == "GROUP_ROSTER_UPDATE" then - aura_env.members = GetNumGroupMembers() - aura_env.membersAlive = GetNumGroupMembers() - if IsInRaid("player") == true then - for i = 1, GetNumGroupMembers() do - if UnitIsDeadOrGhost("raid" .. i) or not UnitIsConnected("raid" .. i) then - aura_env.membersAlive = aura_env.membersAlive - 1 - end - end - else - aura_env.membersAlive = aura_env.membersAlive + 1 - for i = 1, GetNumGroupMembers() do - if UnitIsDeadOrGhost("party" .. i) or not UnitIsConnected("party" .. i) then - aura_env.membersAlive = aura_env.membersAlive - 1 - end - end - end - if UnitIsDeadOrGhost("player") then - aura_env.membersAlive = aura_env.membersAlive - 1 - end - end -end - ---DISPLAY -function() - if aura_env.membersAlive and aura_env.members then - return "Alive: " .. aura_env.membersAlive .. "/" .. aura_env.members - else - return "" - end -end - ---INIT -aura_env.members = 0 +--COMBAT_LOG_EVENT_UNFILTERED GROUP_ROSTER_UPDATE +function(event,_,subevent) + if (event == "COMBAT_LOG_EVENT_UNFILTERED" and subevent == "UNIT_DIED") or event == "GROUP_ROSTER_UPDATE" then + aura_env.members = GetNumGroupMembers() + aura_env.membersAlive = GetNumGroupMembers() + if IsInRaid("player") == true then + for i = 1, GetNumGroupMembers() do + if UnitIsDeadOrGhost("raid" .. i) or not UnitIsConnected("raid" .. i) then + aura_env.membersAlive = aura_env.membersAlive - 1 + end + end + else + aura_env.membersAlive = aura_env.membersAlive + 1 + for i = 1, GetNumGroupMembers() do + if UnitIsDeadOrGhost("party" .. i) or not UnitIsConnected("party" .. i) then + aura_env.membersAlive = aura_env.membersAlive - 1 + end + end + end + if UnitIsDeadOrGhost("player") then + aura_env.membersAlive = aura_env.membersAlive - 1 + end + end +end + +--DISPLAY +function() + if aura_env.membersAlive and aura_env.members then + return "Alive: " .. aura_env.membersAlive .. "/" .. aura_env.members + else + return "" + end +end + +--INIT +aura_env.members = 0 aura_env.membersAlive = 0 \ No newline at end of file diff --git a/Complete Projects/Legion/Misdirect God.lua b/WeakAuras/Projects/Misdirect God.lua similarity index 98% rename from Complete Projects/Legion/Misdirect God.lua rename to WeakAuras/Projects/Misdirect God.lua index 77cb202..b139688 100644 --- a/Complete Projects/Legion/Misdirect God.lua +++ b/WeakAuras/Projects/Misdirect God.lua @@ -1,42 +1,42 @@ -COMBAT_LOG_EVENT_UNFILTERED -function(...) - local spellName = select(14, ...) - local target = select(10, ...) - local source = select(6, ...) - local subEvent = select(3, ...) - if (spellName == "Tricks of the Trade" or spellName == "Misdirection") and subEvent == "SPELL_CAST_SUCCESS" then - aura_env.spellName = spellName - aura_env.caster = source - aura_env.target = target - aura_env.cast_time = GetTime() - return true - else - return false - end -end - -DISPLAY -function() - local target_class = UnitClass(aura_env.target) - local target_class_color = "|cFFFFFFFF" - local time_color = "|cFFFFFFFF" - if aura_env.spellName == "Tricks of the Trade" or aura_env.spellName == "Misdirection" then cooldown_time = aura_env.cast_time + 30 else cooldown_time = 0 end - if (cooldown_time / GetTime()) < 1 then time_color = "|cFF00FF00" else time_color = "|cFFFF0000" end - if UnitClass(aura_env.target) == "Death Knight" then target_class_color = "|cFFC41F3B" - elseif UnitClass(aura_env.target) == "Demon Hunter" then target_class_color = "|cFFA330C9" - elseif UnitClass(aura_env.target) == "Druid" then target_class_color = "|cFFFF7D0A" - elseif UnitClass(aura_env.target) == "Hunter" then target_class_color = "|cFFABD473" - elseif UnitClass(aura_env.target) == "Mage" then target_class_color = "|cFF40C7EB" - elseif UnitClass(aura_env.target) == "Monk" then target_class_color = "|cFF00FF96" - elseif UnitClass(aura_env.target) == "Paladin" then target_class_color = "|cFFF58CBA" - elseif UnitClass(aura_env.target) == "Priest" then target_class_color = "|cFFFFFFFF" - elseif UnitClass(aura_env.target) == "Rogue" then target_class_color = "|cFFFFF569" - elseif UnitClass(aura_env.target) == "Shaman" then target_class_color = "|cFF0070DE" - elseif UnitClass(aura_env.target) == "Warlock" then target_class_color = "|cFF8787ED" - elseif UnitClass(aura_env.target) == "Warrior" then target_class_color = "|cFFC79C6E" end - local source_class = UnitClass(aura_env.caster) - if source_class == "Hunter" then return "|cFF0000FF------------------------------- \n" .. "|cFFABD473" .. aura_env.caster .. target_class_color .. "\n" .. aura_env.target .. "\n" .. "|cFFABD473" .. aura_env.spellName .. "\n" .. time_color .. math.floor(GetTime() - aura_env.cast_time) .. "\n|cFF0000FF-------------------------------" - elseif - source_class == "Rogue" then return "|cFF0000FF------------------------------- \n" .. "|cFFFFF569" .. aura_env.caster .. "\n" .. target_class_color .. aura_env.target .. "\n" .. "|cFFFFF569" .. aura_env.spellName .. "\n" .. time_color .. math.floor(GetTime() - aura_env.cast_time) .. "\n|cFF0000FF-------------------------------" - end -end +COMBAT_LOG_EVENT_UNFILTERED +function(...) + local spellName = select(14, ...) + local target = select(10, ...) + local source = select(6, ...) + local subEvent = select(3, ...) + if (spellName == "Tricks of the Trade" or spellName == "Misdirection") and subEvent == "SPELL_CAST_SUCCESS" then + aura_env.spellName = spellName + aura_env.caster = source + aura_env.target = target + aura_env.cast_time = GetTime() + return true + else + return false + end +end + +DISPLAY +function() + local target_class = UnitClass(aura_env.target) + local target_class_color = "|cFFFFFFFF" + local time_color = "|cFFFFFFFF" + if aura_env.spellName == "Tricks of the Trade" or aura_env.spellName == "Misdirection" then cooldown_time = aura_env.cast_time + 30 else cooldown_time = 0 end + if (cooldown_time / GetTime()) < 1 then time_color = "|cFF00FF00" else time_color = "|cFFFF0000" end + if UnitClass(aura_env.target) == "Death Knight" then target_class_color = "|cFFC41F3B" + elseif UnitClass(aura_env.target) == "Demon Hunter" then target_class_color = "|cFFA330C9" + elseif UnitClass(aura_env.target) == "Druid" then target_class_color = "|cFFFF7D0A" + elseif UnitClass(aura_env.target) == "Hunter" then target_class_color = "|cFFABD473" + elseif UnitClass(aura_env.target) == "Mage" then target_class_color = "|cFF40C7EB" + elseif UnitClass(aura_env.target) == "Monk" then target_class_color = "|cFF00FF96" + elseif UnitClass(aura_env.target) == "Paladin" then target_class_color = "|cFFF58CBA" + elseif UnitClass(aura_env.target) == "Priest" then target_class_color = "|cFFFFFFFF" + elseif UnitClass(aura_env.target) == "Rogue" then target_class_color = "|cFFFFF569" + elseif UnitClass(aura_env.target) == "Shaman" then target_class_color = "|cFF0070DE" + elseif UnitClass(aura_env.target) == "Warlock" then target_class_color = "|cFF8787ED" + elseif UnitClass(aura_env.target) == "Warrior" then target_class_color = "|cFFC79C6E" end + local source_class = UnitClass(aura_env.caster) + if source_class == "Hunter" then return "|cFF0000FF------------------------------- \n" .. "|cFFABD473" .. aura_env.caster .. target_class_color .. "\n" .. aura_env.target .. "\n" .. "|cFFABD473" .. aura_env.spellName .. "\n" .. time_color .. math.floor(GetTime() - aura_env.cast_time) .. "\n|cFF0000FF-------------------------------" + elseif + source_class == "Rogue" then return "|cFF0000FF------------------------------- \n" .. "|cFFFFF569" .. aura_env.caster .. "\n" .. target_class_color .. aura_env.target .. "\n" .. "|cFFFFF569" .. aura_env.spellName .. "\n" .. time_color .. math.floor(GetTime() - aura_env.cast_time) .. "\n|cFF0000FF-------------------------------" + end +end diff --git a/Complete Projects/Legion/Misdirect.lua b/WeakAuras/Projects/Misdirect.lua similarity index 98% rename from Complete Projects/Legion/Misdirect.lua rename to WeakAuras/Projects/Misdirect.lua index d68974d..cdddce1 100644 --- a/Complete Projects/Legion/Misdirect.lua +++ b/WeakAuras/Projects/Misdirect.lua @@ -1,48 +1,48 @@ -COMBAT_LOG_EVENT_UNFILTERED -function(...) - local spellName = select(14, ...) - local target = select(10, ...) - local source = select(6, ...) - local subEvent = select(3, ...) - if (spellName == "Tricks of the Trade" or spellName == "Misdirection") and subEvent == "SPELL_CAST_SUCCESS" then - aura_env.spellName = spellName - aura_env.caster = source - aura_env.target = target - aura_env.cast_time = GetTime() - return true - else - return false - end -end - -DISPLAY -function() - local target_class = UnitClass(aura_env.target) - local target_class_color = "|cFFFFFFFF" - local time_color = "|cFFFFFFFF" - if aura_env.spellName == "Tricks of the Trade" then local cooldown_time = aura_env.cast_time + 30 elseif aura_env.spellName == "Misdirection" then cooldown_time = aura_env.cast_time + 30 end - if (cooldown_time / GetTime()) < 1 then time_color = "|cFF00FF00" else time_color = "|cFFFF0000" end - if UnitClass(aura_env.target) == "Death Knight" then target_class_color = "|cFFC41F3B" - elseif UnitClass(aura_env.target) == "Demon Hunter" then target_class_color = "|cFFA330C9" - elseif UnitClass(aura_env.target) == "Druid" then target_class_color = "|cFFFF7D0A" - elseif UnitClass(aura_env.target) == "Hunter" then target_class_color = "|cFFABD473" - elseif UnitClass(aura_env.target) == "Mage" then target_class_color = "|cFF40C7EB" - elseif UnitClass(aura_env.target) == "Monk" then target_class_color = "|cFF00FF96" - elseif UnitClass(aura_env.target) == "Paladin" then target_class_color = "|cFFF58CBA" - elseif UnitClass(aura_env.target) == "Priest" then target_class_color = "|cFFFFFFFF" - elseif UnitClass(aura_env.target) == "Rogue" then target_class_color = "|cFFFFF569" - elseif UnitClass(aura_env.target) == "Shaman" then target_class_color = "|cFF0070DE" - elseif UnitClass(aura_env.target) == "Warlock" then target_class_color = "|cFF8787ED" - elseif UnitClass(aura_env.target) == "Warrior" then target_class_color = "|cFFC79C6E" end - local source_class = UnitClass(aura_env.caster) - if source_class == "Hunter" then return "|cFF0000FF------------------------------- \n" .. "|cFFABD473" .. aura_env.caster .. target_class_color .. "\n" .. aura_env.target .. "\n" .. "|cFFABD473" .. aura_env.spellName .. "\n" .. time_color .. math.floor(GetTime() - aura_env.cast_time) .. "\n|cFF0000FF-------------------------------" - elseif - source_class == "Rogue" then return "|cFF0000FF------------------------------- \n" .. "|cFFFFF569" .. aura_env.caster .. "\n" .. target_class_color .. aura_env.target .. "\n" .. "|cFFFFF569" .. aura_env.spellName .. "\n" .. time_color .. math.floor(GetTime() - aura_env.cast_time) .. "\n|cFF0000FF-------------------------------" - end -end - -INIT -aura_env.target = "" -aura_env.cast_time = 0 -aura_env.spellName = "" -aura_env.caster = "" +COMBAT_LOG_EVENT_UNFILTERED +function(...) + local spellName = select(14, ...) + local target = select(10, ...) + local source = select(6, ...) + local subEvent = select(3, ...) + if (spellName == "Tricks of the Trade" or spellName == "Misdirection") and subEvent == "SPELL_CAST_SUCCESS" then + aura_env.spellName = spellName + aura_env.caster = source + aura_env.target = target + aura_env.cast_time = GetTime() + return true + else + return false + end +end + +DISPLAY +function() + local target_class = UnitClass(aura_env.target) + local target_class_color = "|cFFFFFFFF" + local time_color = "|cFFFFFFFF" + if aura_env.spellName == "Tricks of the Trade" then local cooldown_time = aura_env.cast_time + 30 elseif aura_env.spellName == "Misdirection" then cooldown_time = aura_env.cast_time + 30 end + if (cooldown_time / GetTime()) < 1 then time_color = "|cFF00FF00" else time_color = "|cFFFF0000" end + if UnitClass(aura_env.target) == "Death Knight" then target_class_color = "|cFFC41F3B" + elseif UnitClass(aura_env.target) == "Demon Hunter" then target_class_color = "|cFFA330C9" + elseif UnitClass(aura_env.target) == "Druid" then target_class_color = "|cFFFF7D0A" + elseif UnitClass(aura_env.target) == "Hunter" then target_class_color = "|cFFABD473" + elseif UnitClass(aura_env.target) == "Mage" then target_class_color = "|cFF40C7EB" + elseif UnitClass(aura_env.target) == "Monk" then target_class_color = "|cFF00FF96" + elseif UnitClass(aura_env.target) == "Paladin" then target_class_color = "|cFFF58CBA" + elseif UnitClass(aura_env.target) == "Priest" then target_class_color = "|cFFFFFFFF" + elseif UnitClass(aura_env.target) == "Rogue" then target_class_color = "|cFFFFF569" + elseif UnitClass(aura_env.target) == "Shaman" then target_class_color = "|cFF0070DE" + elseif UnitClass(aura_env.target) == "Warlock" then target_class_color = "|cFF8787ED" + elseif UnitClass(aura_env.target) == "Warrior" then target_class_color = "|cFFC79C6E" end + local source_class = UnitClass(aura_env.caster) + if source_class == "Hunter" then return "|cFF0000FF------------------------------- \n" .. "|cFFABD473" .. aura_env.caster .. target_class_color .. "\n" .. aura_env.target .. "\n" .. "|cFFABD473" .. aura_env.spellName .. "\n" .. time_color .. math.floor(GetTime() - aura_env.cast_time) .. "\n|cFF0000FF-------------------------------" + elseif + source_class == "Rogue" then return "|cFF0000FF------------------------------- \n" .. "|cFFFFF569" .. aura_env.caster .. "\n" .. target_class_color .. aura_env.target .. "\n" .. "|cFFFFF569" .. aura_env.spellName .. "\n" .. time_color .. math.floor(GetTime() - aura_env.cast_time) .. "\n|cFF0000FF-------------------------------" + end +end + +INIT +aura_env.target = "" +aura_env.cast_time = 0 +aura_env.spellName = "" +aura_env.caster = "" diff --git a/Complete Projects/Legion/Mistress Fuckery.lua b/WeakAuras/Projects/Mistress Fuckery.lua similarity index 96% rename from Complete Projects/Legion/Mistress Fuckery.lua rename to WeakAuras/Projects/Mistress Fuckery.lua index d20f25b..675d373 100644 --- a/Complete Projects/Legion/Mistress Fuckery.lua +++ b/WeakAuras/Projects/Mistress Fuckery.lua @@ -1,79 +1,79 @@ ---[[ -Fuckin how to do what and where is guide ty - -mistress aaa for burden -make counter for fish -make for run on cast -make for track aggro -make for track debuffs -make for track HP and fishie loss -make for burden clear track because visual not work -make for ams for double burden for bugs - -Delicious Butterfish - 239375 -Burden of Pain - 230201 -]]-- - ---DISPLAY -function() - local burden = "Burden of Pain" - local hunger = "Consuming Hunger" - local fish = "Delicious Bufferfish" - if UnitName("target") == "Mistress Sassz'ine" then - print("I THINK ITS WORKING") - local bosshp = math.floor(UnitHealth("target") / UnitHealthMax("target")) * 100 - local hptofifteen = bosshp - aura_env.hpthreshold[1] - if hptofifteen < 0 then - table.remove(aura_env.hpthreshold, 1) - hptofifteen = bosshp - aura_env.hpthreshold[1] - end - local fish = 0 - local out = "" - for i = 1, GetNumGroupMembers() do - if UnitAura("raid" .. i, fish) then - fish = fish + 1 - end - end - if UnitDetailedThreatSituation("player", "target") then - local whotank = UnitName("player") - elseif UnitDetailedThreatSituation(aura_env.tank, "target") then - local whotank = aura_env.tank - end - if UnitCastingInfo("target") == burden then --If she's casting burden then - local mydebuff = UnitAura("player", burden) - local theirdebuff = UnitAura(aura_env.tank, burden) - if mydebuff and theirdebuff then --If both tanks have burden - out = out .. "Buggerino - AMS or pray to the Lord" .. "\n" - end - if whotank == aura_env.tank then --If she's casting it on the other tank - out = out .. "Taunt after cast!" .. "\n" - elseif whotank == UnitName("player") then --If it's being cast on you - out = out .. "Run away from the boss!" .. "\n" - end - end - print(hptofifteen) - if hptofifteen <= 2 then --If it's time to clear fish and fish do exist - out = "Take a hit to clear fish!" .. "\n" - end - if UnitDebuff("player", hunger) then - out = out .. "RUN INTO THE STUN BEFORE YOU KILL EVERYONE YOU LUNATIC" .. "\n" - end - return out - end -end - ---PLAYER_REGEN_DISABLED -function() --Find tank - aura_env.hpthreshold = {85, 70, 55, 40, 25, 10} - for i = 1, GetNumGroupMembers() do - if UnitGroupRolesAssigned("raid" .. i) == "TANK" and UnitName("raid" .. i) ~= UnitName("player") then - aura_env.tank = UnitName("raid" .. i) - print("Found tank! " .. aura_env.tank) - break - end - end -end - ---INIT -aura_env.tank = "" +--[[ +Fuckin how to do what and where is guide ty + +mistress aaa for burden +make counter for fish +make for run on cast +make for track aggro +make for track debuffs +make for track HP and fishie loss +make for burden clear track because visual not work +make for ams for double burden for bugs + +Delicious Butterfish - 239375 +Burden of Pain - 230201 +]]-- + +--DISPLAY +function() + local burden = "Burden of Pain" + local hunger = "Consuming Hunger" + local fish = "Delicious Bufferfish" + if UnitName("target") == "Mistress Sassz'ine" then + print("I THINK ITS WORKING") + local bosshp = math.floor(UnitHealth("target") / UnitHealthMax("target")) * 100 + local hptofifteen = bosshp - aura_env.hpthreshold[1] + if hptofifteen < 0 then + table.remove(aura_env.hpthreshold, 1) + hptofifteen = bosshp - aura_env.hpthreshold[1] + end + local fish = 0 + local out = "" + for i = 1, GetNumGroupMembers() do + if UnitAura("raid" .. i, fish) then + fish = fish + 1 + end + end + if UnitDetailedThreatSituation("player", "target") then + local whotank = UnitName("player") + elseif UnitDetailedThreatSituation(aura_env.tank, "target") then + local whotank = aura_env.tank + end + if UnitCastingInfo("target") == burden then --If she's casting burden then + local mydebuff = UnitAura("player", burden) + local theirdebuff = UnitAura(aura_env.tank, burden) + if mydebuff and theirdebuff then --If both tanks have burden + out = out .. "Buggerino - AMS or pray to the Lord" .. "\n" + end + if whotank == aura_env.tank then --If she's casting it on the other tank + out = out .. "Taunt after cast!" .. "\n" + elseif whotank == UnitName("player") then --If it's being cast on you + out = out .. "Run away from the boss!" .. "\n" + end + end + print(hptofifteen) + if hptofifteen <= 2 then --If it's time to clear fish and fish do exist + out = "Take a hit to clear fish!" .. "\n" + end + if UnitDebuff("player", hunger) then + out = out .. "RUN INTO THE STUN BEFORE YOU KILL EVERYONE YOU LUNATIC" .. "\n" + end + return out + end +end + +--PLAYER_REGEN_DISABLED +function() --Find tank + aura_env.hpthreshold = {85, 70, 55, 40, 25, 10} + for i = 1, GetNumGroupMembers() do + if UnitGroupRolesAssigned("raid" .. i) == "TANK" and UnitName("raid" .. i) ~= UnitName("player") then + aura_env.tank = UnitName("raid" .. i) + print("Found tank! " .. aura_env.tank) + break + end + end +end + +--INIT +aura_env.tank = "" aura_env.hpthreshold = {} \ No newline at end of file diff --git a/Complete Projects/Legion/Mitigation.lua b/WeakAuras/Projects/Mitigation.lua similarity index 97% rename from Complete Projects/Legion/Mitigation.lua rename to WeakAuras/Projects/Mitigation.lua index d99e963..3d6b073 100644 --- a/Complete Projects/Legion/Mitigation.lua +++ b/WeakAuras/Projects/Mitigation.lua @@ -1,183 +1,183 @@ ---UNIT_AURA -function() - if UnitExists("target") then - local level = UnitLevel("target") - else - level = 110 - end - local pDR = GetCombatRatingBonus(CR_VERSATILITY_DAMAGE_TAKEN) / 100 - local mDR = pDR - local armor = select(2, UnitArmor("player")) - local armorDR = armor / (armor + (aura_env.constants[level])) - pDR = aura_env.stackDef(pDR, armorDR) - for k, v in ipairs(aura_env.buffs) do - if UnitBuff("player", v) then - --print(UnitBuff("player", v)) - if v == "Shield of the Righteous" or v == "Ardent Defender" then - --print("YEET") - local mitigation = abs(select(17, UnitBuff("player", v))) / 100 - pDR = aura_env.stackDef(pDR, mitigation) - mDR = aura_env.stackDef(mDR, mitigation) - end - if v == "Stoneform" then - --print("YEET") - local mitigation = abs(select(17, UnitBuff("player", v))) / 100 - pDR = aura_env.stackDef(pDR, mitigation) - end - if v == "Guardian of Ancient Kings" then - --print("YEET") - local mitigation = abs(select(19, UnitBuff("player", v))) / 100 - pDR = aura_env.stackDef(pDR, mitigation) - mDR = aura_env.stackDef(mDR, mitigation) - end - end - if UnitDebuff("target", v) then - if v == "Eye of Tyr" then - local mitigation = abs(select(17, UnitDebuff("target", v))) / 100 - pDR = aura_env.stackDef(pDR, mitigation) - mDR = aura_env.stackDef(mDR, mitigation) - end - end - end - aura_env.DR.p = pDR * 100 - aura_env.DR.m = mDR * 100 - local HP = UnitHealth("player") - for k, v in pairs(aura_env.absorbs) do - if UnitBuff("player", v) then - local absorb = select(17, UnitBuff("player", v)) - HP = HP + absorb - end - end - aura_env.pHP = HP / (1 - pDR) - aura_env.mHP = HP / (1 - mDR) - return true -end - ---DISPLAY -function() - local output = "P: " .. aura_env.round(aura_env.DR.p, 2) .. "% " - if aura_env.pHP < aura_env.thresholds.p[1] then output = output .. "\124c" .. aura_env.pColor1 .. aura_env.shorten(aura_env.pHP) .. "\124r" end - if aura_env.pHP > aura_env.thresholds.p[1] and aura_env.pHP < aura_env.thresholds.p[2] then output = output .. "\124c" .. aura_env.pColor2 .. aura_env.shorten(aura_env.pHP) .. "\124r" end - if aura_env.pHP > aura_env.thresholds.p[2] and aura_env.pHP < aura_env.thresholds.p[3] then output = output .. "\124c" .. aura_env.pColor3 .. aura_env.shorten(aura_env.pHP) .. "\124r" end - if aura_env.pHP > aura_env.thresholds.p[3] and aura_env.pHP < aura_env.thresholds.p[4] then output = output .. "\124c" .. aura_env.pColor4 .. aura_env.shorten(aura_env.pHP) .. "\124r" end - if aura_env.pHP > aura_env.thresholds.p[4] and aura_env.pHP < aura_env.thresholds.p[5] then output = output .. "\124c" .. aura_env.pColor5 .. aura_env.shorten(aura_env.pHP) .. "\124r" end - if aura_env.pHP > aura_env.thresholds.p[5] then output = output .. "\124c" .. aura_env.pColor6 .. aura_env.shorten(aura_env.pHP) .. "\124r" end - output = output .. "\n" - output = output .. "M: " .. aura_env.round(aura_env.DR.m, 2) .. "% " - if aura_env.mHP < aura_env.thresholds.m[1] then output = output .. "\124c" .. aura_env.pColor1 .. aura_env.shorten(aura_env.mHP) .. "\124r" end - if aura_env.mHP > aura_env.thresholds.m[1] and aura_env.mHP < aura_env.thresholds.m[2] then output = output .. "\124c" .. aura_env.pColor2 .. aura_env.shorten(aura_env.mHP) .. "\124r" end - if aura_env.mHP > aura_env.thresholds.m[2] and aura_env.mHP < aura_env.thresholds.m[3] then output = output .. "\124c" .. aura_env.pColor3 .. aura_env.shorten(aura_env.mHP) .. "\124r" end - if aura_env.mHP > aura_env.thresholds.m[3] and aura_env.mHP < aura_env.thresholds.m[4] then output = output .. "\124c" .. aura_env.pColor4 .. aura_env.shorten(aura_env.mHP) .. "\124r" end - if aura_env.mHP > aura_env.thresholds.m[4] and aura_env.mHP < aura_env.thresholds.m[5] then output = output .. "\124c" .. aura_env.pColor5 .. aura_env.shorten(aura_env.mHP) .. "\124r" end - if aura_env.mHP > aura_env.thresholds.m[5] then output = output .. "\124c" .. aura_env.pColor6 .. aura_env.shorten(aura_env.mHP) .. "\124r" end - return output -end - ---INIT -aura_env.mHP = 0 -aura_env.pHP = 0 -aura_env.thresholds = { - ["p"] = { - 40e6, - 60e6, - 80e6, - 100e6, - 140e6, - }, - ["m"] = { - 40e6, - 50e6, - 60e6, - 70e6, - 80e6, - }, -} -aura_env.constants = { - [110] = 7390, - [111] = 7648, - [112] = 7906, - [113] = 8164, -} -aura_env.buffs = { - "Shield of the Righteous", - "Ardent Defender", - "Guardian of Ancient Kings", - "Eye of Tyr", - "Stoneform", -} -aura_env.absorbs = { - "Bulwark of Order", - "Bulwark of Flame" -} -aura_env.stackDef = function(def1, def2) - local x = 1 - def1 - local y = 1 - def2 - local var = x * y - return 1 - var -end -aura_env.DR = { - ["p"] = 0, - ["m"] = 0 -} -aura_env.round = function(var, n) - if (n) then - var = math.floor((var * 10 ^ n) + 0.5) / (10 ^ n) - else - var = math.floor(var + 0.5) - end - return var -end -aura_env.shorten = function(val) - local function round(var, n) - if (n) then - var = math.floor((var * 10 ^ n) + 0.5) / (10 ^ n) - else - var = math.floor(var + 0.5) - end - return var - end - local n = 2 - if val < 1e3 then - return round(val, n) - elseif val > 1e3 and val < 1e6 then - return round(val / 1e3, n) .. "k" - elseif val > 1e6 and val < 1e9 then - return round(val / 1e6, n) .. "M" - elseif val > 1e9 then - return round(val / 1e9, n) .. "G" - end -end -local Color1 = {255, 0, 0} -- The color if you have < 7 million effective health -local Color2 = {255, 128, 0} -- The color if you have >= 7 million effective health -local Color3 = {0, 255, 0} -- The color if you have >= 10 million effective health -local Color4 = {0, 255, 255} -- The color if you have >= 15 million effective health -local Color5 = {255, 0, 255} -- The color if you have >= 25 million effective health -local Color6 = {255, 255, 0} -- The color if you have >= 44 million effective health -local function RGBtoHex(rgb) - local hexadecimal = 'FF' - for key, value in pairs(rgb) do - local hex = '' - - while(value > 0)do - local index = math.fmod(value, 16) + 1 - value = math.floor(value / 16) - hex = string.sub('0123456789ABCDEF', index, index) .. hex - end - - if(string.len(hex) == 0)then - hex = '00' - - elseif(string.len(hex) == 1)then - hex = '0' .. hex - end - - hexadecimal = hexadecimal .. hex - end - return hexadecimal -end -aura_env.pColor1 = RGBtoHex(Color1) -aura_env.pColor2 = RGBtoHex(Color2) -aura_env.pColor3 = RGBtoHex(Color3) -aura_env.pColor4 = RGBtoHex(Color4) -aura_env.pColor5 = RGBtoHex(Color5) -aura_env.pColor6 = RGBtoHex(Color6) +--UNIT_AURA +function() + if UnitExists("target") then + local level = UnitLevel("target") + else + level = 110 + end + local pDR = GetCombatRatingBonus(CR_VERSATILITY_DAMAGE_TAKEN) / 100 + local mDR = pDR + local armor = select(2, UnitArmor("player")) + local armorDR = armor / (armor + (aura_env.constants[level])) + pDR = aura_env.stackDef(pDR, armorDR) + for k, v in ipairs(aura_env.buffs) do + if UnitBuff("player", v) then + --print(UnitBuff("player", v)) + if v == "Shield of the Righteous" or v == "Ardent Defender" then + --print("YEET") + local mitigation = abs(select(17, UnitBuff("player", v))) / 100 + pDR = aura_env.stackDef(pDR, mitigation) + mDR = aura_env.stackDef(mDR, mitigation) + end + if v == "Stoneform" then + --print("YEET") + local mitigation = abs(select(17, UnitBuff("player", v))) / 100 + pDR = aura_env.stackDef(pDR, mitigation) + end + if v == "Guardian of Ancient Kings" then + --print("YEET") + local mitigation = abs(select(19, UnitBuff("player", v))) / 100 + pDR = aura_env.stackDef(pDR, mitigation) + mDR = aura_env.stackDef(mDR, mitigation) + end + end + if UnitDebuff("target", v) then + if v == "Eye of Tyr" then + local mitigation = abs(select(17, UnitDebuff("target", v))) / 100 + pDR = aura_env.stackDef(pDR, mitigation) + mDR = aura_env.stackDef(mDR, mitigation) + end + end + end + aura_env.DR.p = pDR * 100 + aura_env.DR.m = mDR * 100 + local HP = UnitHealth("player") + for k, v in pairs(aura_env.absorbs) do + if UnitBuff("player", v) then + local absorb = select(17, UnitBuff("player", v)) + HP = HP + absorb + end + end + aura_env.pHP = HP / (1 - pDR) + aura_env.mHP = HP / (1 - mDR) + return true +end + +--DISPLAY +function() + local output = "P: " .. aura_env.round(aura_env.DR.p, 2) .. "% " + if aura_env.pHP < aura_env.thresholds.p[1] then output = output .. "\124c" .. aura_env.pColor1 .. aura_env.shorten(aura_env.pHP) .. "\124r" end + if aura_env.pHP > aura_env.thresholds.p[1] and aura_env.pHP < aura_env.thresholds.p[2] then output = output .. "\124c" .. aura_env.pColor2 .. aura_env.shorten(aura_env.pHP) .. "\124r" end + if aura_env.pHP > aura_env.thresholds.p[2] and aura_env.pHP < aura_env.thresholds.p[3] then output = output .. "\124c" .. aura_env.pColor3 .. aura_env.shorten(aura_env.pHP) .. "\124r" end + if aura_env.pHP > aura_env.thresholds.p[3] and aura_env.pHP < aura_env.thresholds.p[4] then output = output .. "\124c" .. aura_env.pColor4 .. aura_env.shorten(aura_env.pHP) .. "\124r" end + if aura_env.pHP > aura_env.thresholds.p[4] and aura_env.pHP < aura_env.thresholds.p[5] then output = output .. "\124c" .. aura_env.pColor5 .. aura_env.shorten(aura_env.pHP) .. "\124r" end + if aura_env.pHP > aura_env.thresholds.p[5] then output = output .. "\124c" .. aura_env.pColor6 .. aura_env.shorten(aura_env.pHP) .. "\124r" end + output = output .. "\n" + output = output .. "M: " .. aura_env.round(aura_env.DR.m, 2) .. "% " + if aura_env.mHP < aura_env.thresholds.m[1] then output = output .. "\124c" .. aura_env.pColor1 .. aura_env.shorten(aura_env.mHP) .. "\124r" end + if aura_env.mHP > aura_env.thresholds.m[1] and aura_env.mHP < aura_env.thresholds.m[2] then output = output .. "\124c" .. aura_env.pColor2 .. aura_env.shorten(aura_env.mHP) .. "\124r" end + if aura_env.mHP > aura_env.thresholds.m[2] and aura_env.mHP < aura_env.thresholds.m[3] then output = output .. "\124c" .. aura_env.pColor3 .. aura_env.shorten(aura_env.mHP) .. "\124r" end + if aura_env.mHP > aura_env.thresholds.m[3] and aura_env.mHP < aura_env.thresholds.m[4] then output = output .. "\124c" .. aura_env.pColor4 .. aura_env.shorten(aura_env.mHP) .. "\124r" end + if aura_env.mHP > aura_env.thresholds.m[4] and aura_env.mHP < aura_env.thresholds.m[5] then output = output .. "\124c" .. aura_env.pColor5 .. aura_env.shorten(aura_env.mHP) .. "\124r" end + if aura_env.mHP > aura_env.thresholds.m[5] then output = output .. "\124c" .. aura_env.pColor6 .. aura_env.shorten(aura_env.mHP) .. "\124r" end + return output +end + +--INIT +aura_env.mHP = 0 +aura_env.pHP = 0 +aura_env.thresholds = { + ["p"] = { + 40e6, + 60e6, + 80e6, + 100e6, + 140e6, + }, + ["m"] = { + 40e6, + 50e6, + 60e6, + 70e6, + 80e6, + }, +} +aura_env.constants = { + [110] = 7390, + [111] = 7648, + [112] = 7906, + [113] = 8164, +} +aura_env.buffs = { + "Shield of the Righteous", + "Ardent Defender", + "Guardian of Ancient Kings", + "Eye of Tyr", + "Stoneform", +} +aura_env.absorbs = { + "Bulwark of Order", + "Bulwark of Flame" +} +aura_env.stackDef = function(def1, def2) + local x = 1 - def1 + local y = 1 - def2 + local var = x * y + return 1 - var +end +aura_env.DR = { + ["p"] = 0, + ["m"] = 0 +} +aura_env.round = function(var, n) + if (n) then + var = math.floor((var * 10 ^ n) + 0.5) / (10 ^ n) + else + var = math.floor(var + 0.5) + end + return var +end +aura_env.shorten = function(val) + local function round(var, n) + if (n) then + var = math.floor((var * 10 ^ n) + 0.5) / (10 ^ n) + else + var = math.floor(var + 0.5) + end + return var + end + local n = 2 + if val < 1e3 then + return round(val, n) + elseif val > 1e3 and val < 1e6 then + return round(val / 1e3, n) .. "k" + elseif val > 1e6 and val < 1e9 then + return round(val / 1e6, n) .. "M" + elseif val > 1e9 then + return round(val / 1e9, n) .. "G" + end +end +local Color1 = {255, 0, 0} -- The color if you have < 7 million effective health +local Color2 = {255, 128, 0} -- The color if you have >= 7 million effective health +local Color3 = {0, 255, 0} -- The color if you have >= 10 million effective health +local Color4 = {0, 255, 255} -- The color if you have >= 15 million effective health +local Color5 = {255, 0, 255} -- The color if you have >= 25 million effective health +local Color6 = {255, 255, 0} -- The color if you have >= 44 million effective health +local function RGBtoHex(rgb) + local hexadecimal = 'FF' + for key, value in pairs(rgb) do + local hex = '' + + while(value > 0)do + local index = math.fmod(value, 16) + 1 + value = math.floor(value / 16) + hex = string.sub('0123456789ABCDEF', index, index) .. hex + end + + if(string.len(hex) == 0)then + hex = '00' + + elseif(string.len(hex) == 1)then + hex = '0' .. hex + end + + hexadecimal = hexadecimal .. hex + end + return hexadecimal +end +aura_env.pColor1 = RGBtoHex(Color1) +aura_env.pColor2 = RGBtoHex(Color2) +aura_env.pColor3 = RGBtoHex(Color3) +aura_env.pColor4 = RGBtoHex(Color4) +aura_env.pColor5 = RGBtoHex(Color5) +aura_env.pColor6 = RGBtoHex(Color6) diff --git a/Complete Projects/Legion/Mob Kill Counter.lua b/WeakAuras/Projects/Mob Kill Counter.lua similarity index 95% rename from Complete Projects/Legion/Mob Kill Counter.lua rename to WeakAuras/Projects/Mob Kill Counter.lua index 1d00369..c417467 100644 --- a/Complete Projects/Legion/Mob Kill Counter.lua +++ b/WeakAuras/Projects/Mob Kill Counter.lua @@ -1,16 +1,16 @@ -COMBAT_LOG_EVENT_UNFILTERED -function(...) - local subEvent = select(3, ...) - local target = select(10, ...) - if subEvent == "PARTY_KILL" and target == "Felborne Energist" then - aura_env.kill_count = aura_env.kill_count + 1 - end -end - -DISPLAY -function() - return aura_env.kill_count -end - -INIT -aura_env.kill_count = 0 +COMBAT_LOG_EVENT_UNFILTERED +function(...) + local subEvent = select(3, ...) + local target = select(10, ...) + if subEvent == "PARTY_KILL" and target == "Felborne Energist" then + aura_env.kill_count = aura_env.kill_count + 1 + end +end + +DISPLAY +function() + return aura_env.kill_count +end + +INIT +aura_env.kill_count = 0 diff --git a/WIP/Nameplate HP Sort.lua b/WeakAuras/Projects/Nameplate HP Sort.lua similarity index 96% rename from WIP/Nameplate HP Sort.lua rename to WeakAuras/Projects/Nameplate HP Sort.lua index 2e8a83f..cd7fc9b 100644 --- a/WIP/Nameplate HP Sort.lua +++ b/WeakAuras/Projects/Nameplate HP Sort.lua @@ -1,44 +1,44 @@ ---Nameplate HP order -function() - local enemies = {} - local output = "" - for i = 1, 40 do - if UnitIsEnemy("nameplate" .. i, "player") and UnitAffectingCombat("nameplate" .. i) then - --print(UnitGUID("nameplate" .. i), UnitHealth("nameplate" .. i), UnitHealthMax("nameplate" .. i), (UnitHealth("nameplate" .. i) / UnitHealthMax("nameplate" .. i)) * 100) - --local ID = UnitGUID("nameplate" .. i):match("%a+%-%d+%-%d+%-%d+%-%d+%-%d+%-(.+)") - --ID = ID:gsub(0, "") - --print(ID) - enemies[UnitGUID("nameplate" .. i)] = (UnitHealth("nameplate" .. i) / UnitHealthMax("nameplate" .. i)) * 100 - end - end - for k,v in pairs(enemies) do - --local ID = UnitGUID("target"):match("%a+%-%d+%-%d+%-%d+%-%d+%-%d+%-(.+)") - --ID = ID:gsub(0, "") - print("Target " .. UnitGUID("target") .. " key " .. k) - if k == UnitGUID("target") then - print("GREEN") - output = "|cFF00FF00" .. output .. k .. " " .. v .. "|r\n" - else - print("WHITE") - output = "|cFFFFFFFF" .. output .. k .. " " .. v .. "|r\n" - end - end - return output -end - - -local enemies = -{ - ["Creature-0-5-1220-0-109349-0000002871"] = 17, - ["Creature-0-5-1220-0-109349-0000002870"] = 13 -} -local target = "Creature-0-5-1220-0-109349-0000002871" -local output = "" -for k,v in pairs(enemies) do - if target == k then - output = output .. k .. " " .. v .. " GREEN\n" - else - output = output .. k .. " " .. v .. "\n" - end -end +--Nameplate HP order +function() + local enemies = {} + local output = "" + for i = 1, 40 do + if UnitIsEnemy("nameplate" .. i, "player") and UnitAffectingCombat("nameplate" .. i) then + --print(UnitGUID("nameplate" .. i), UnitHealth("nameplate" .. i), UnitHealthMax("nameplate" .. i), (UnitHealth("nameplate" .. i) / UnitHealthMax("nameplate" .. i)) * 100) + --local ID = UnitGUID("nameplate" .. i):match("%a+%-%d+%-%d+%-%d+%-%d+%-%d+%-(.+)") + --ID = ID:gsub(0, "") + --print(ID) + enemies[UnitGUID("nameplate" .. i)] = (UnitHealth("nameplate" .. i) / UnitHealthMax("nameplate" .. i)) * 100 + end + end + for k,v in pairs(enemies) do + --local ID = UnitGUID("target"):match("%a+%-%d+%-%d+%-%d+%-%d+%-%d+%-(.+)") + --ID = ID:gsub(0, "") + print("Target " .. UnitGUID("target") .. " key " .. k) + if k == UnitGUID("target") then + print("GREEN") + output = "|cFF00FF00" .. output .. k .. " " .. v .. "|r\n" + else + print("WHITE") + output = "|cFFFFFFFF" .. output .. k .. " " .. v .. "|r\n" + end + end + return output +end + + +local enemies = +{ + ["Creature-0-5-1220-0-109349-0000002871"] = 17, + ["Creature-0-5-1220-0-109349-0000002870"] = 13 +} +local target = "Creature-0-5-1220-0-109349-0000002871" +local output = "" +for k,v in pairs(enemies) do + if target == k then + output = output .. k .. " " .. v .. " GREEN\n" + else + output = output .. k .. " " .. v .. "\n" + end +end print(output) \ No newline at end of file diff --git a/Complete Projects/Legion/NameplateAchivTest.lua b/WeakAuras/Projects/NameplateAchivTest.lua similarity index 96% rename from Complete Projects/Legion/NameplateAchivTest.lua rename to WeakAuras/Projects/NameplateAchivTest.lua index 18420d8..45f6585 100644 --- a/Complete Projects/Legion/NameplateAchivTest.lua +++ b/WeakAuras/Projects/NameplateAchivTest.lua @@ -1,6 +1,6 @@ --- /run NotifyInspect("party2") ---INSPECT_READY -function(e, ...) - print(e) - DevTools_Dump(GetInventoryItemLink("party2", 1)) +-- /run NotifyInspect("party2") +--INSPECT_READY +function(e, ...) + print(e) + DevTools_Dump(GetInventoryItemLink("party2", 1)) end \ No newline at end of file diff --git a/NewAge/NameplateInfo/Hostility.lua b/WeakAuras/Projects/NameplateInfo/Hostility.lua similarity index 100% rename from NewAge/NameplateInfo/Hostility.lua rename to WeakAuras/Projects/NameplateInfo/Hostility.lua diff --git a/LegionWA/NearbyPlayers/Event.lua b/WeakAuras/Projects/NearbyPlayers/Event.lua similarity index 96% rename from LegionWA/NearbyPlayers/Event.lua rename to WeakAuras/Projects/NearbyPlayers/Event.lua index 36dcc6d..113d2f1 100644 --- a/LegionWA/NearbyPlayers/Event.lua +++ b/WeakAuras/Projects/NearbyPlayers/Event.lua @@ -1,7 +1,7 @@ --- COMBAT_LOG_EVENT_UNFILTERED -function(allstates, e, ...) - local caster = select(6, ...) - local target = select(10, ...) - - aura_env.processEvent(allstates, caster, target) +-- COMBAT_LOG_EVENT_UNFILTERED +function(allstates, e, ...) + local caster = select(6, ...) + local target = select(10, ...) + + aura_env.processEvent(allstates, caster, target) end \ No newline at end of file diff --git a/LegionWA/NearbyPlayers/Init.lua b/WeakAuras/Projects/NearbyPlayers/Init.lua similarity index 95% rename from LegionWA/NearbyPlayers/Init.lua rename to WeakAuras/Projects/NearbyPlayers/Init.lua index 0c65dd5..4c39f77 100644 --- a/LegionWA/NearbyPlayers/Init.lua +++ b/WeakAuras/Projects/NearbyPlayers/Init.lua @@ -1,83 +1,83 @@ -if not WeakAurasSaved.Cyka then WeakAurasSaved.Cyka = {} end -if not WeakAurasSaved.Cyka.Cache then WeakAurasSaved.Cyka.Cache = {} end -if not WeakAurasSaved.Cyka.Cache.PlayerInfo then WeakAurasSaved.Cyka.Cache.PlayerInfo = {} end - -local allianceRaces = { - "Draenai", - "Dwarf", - "Gnome", - "Human", - "Night Elf", - "Worgen", -} - -PlayerController = { - nearbyPlayers = {}, - addPlayer = function(self, name) self.nearbyPlayers[name] = Player:New(name) end, - getPlayers = function(self) end, - process = function(guid) - if self.nearbyPlayers[guid] == nil then - self.addPlayer(guid) - else - end - end, -} - -Player = { - guid = nil, - lastSighted = nil, - info = nil, - update = function(self) self.lastSighted = GetTime() end, - getFormatted = function(self) - -- Color by class - -- Format time - return info.name .. " " .. self.lastSighted - end, -} -PlayerInfo = { - class = nil, - race = nil, - name = nil, - isHostile = nil, -} - -function Player:New(guid) - o = {} - setmetatable(o, self) - self.__index = self - - o.guid = guid or "" - o.lastSighted = GetTime() - o.info = PlayerInfo:New(guid) - - return o -end -function PlayerInfo:New(guid) - o = {} - setmetatable(o, self) - self.__index = self - - local info - if WeakAurasSaved.Cyka.Cache.PlayerInfo[guid] then - info = WeakAurasSaved.Cyka.Cache.PlayerInfo[guid] - else - info = GetPlayerInfoByGUID(guid) - WeakAurasSaved.Cyka.Cache.PlayerInfo[guid] = { - class = info.class, - race = info.race, - name = info.name, - isHostile = allianceRaces[race] ~= nil, - } - end - o.class = info.class or "" - o.race = info.race or "" - o.name = info.name or "" - o.isHostile = info.isHostile or true - - return o -end - -aura_env.processEvent = function(caster, target) - PlayerController:process(caster) - PlayerController:process(target) -end +if not WeakAurasSaved.Cyka then WeakAurasSaved.Cyka = {} end +if not WeakAurasSaved.Cyka.Cache then WeakAurasSaved.Cyka.Cache = {} end +if not WeakAurasSaved.Cyka.Cache.PlayerInfo then WeakAurasSaved.Cyka.Cache.PlayerInfo = {} end + +local allianceRaces = { + "Draenai", + "Dwarf", + "Gnome", + "Human", + "Night Elf", + "Worgen", +} + +PlayerController = { + nearbyPlayers = {}, + addPlayer = function(self, name) self.nearbyPlayers[name] = Player:New(name) end, + getPlayers = function(self) end, + process = function(guid) + if self.nearbyPlayers[guid] == nil then + self.addPlayer(guid) + else + end + end, +} + +Player = { + guid = nil, + lastSighted = nil, + info = nil, + update = function(self) self.lastSighted = GetTime() end, + getFormatted = function(self) + -- Color by class + -- Format time + return info.name .. " " .. self.lastSighted + end, +} +PlayerInfo = { + class = nil, + race = nil, + name = nil, + isHostile = nil, +} + +function Player:New(guid) + o = {} + setmetatable(o, self) + self.__index = self + + o.guid = guid or "" + o.lastSighted = GetTime() + o.info = PlayerInfo:New(guid) + + return o +end +function PlayerInfo:New(guid) + o = {} + setmetatable(o, self) + self.__index = self + + local info + if WeakAurasSaved.Cyka.Cache.PlayerInfo[guid] then + info = WeakAurasSaved.Cyka.Cache.PlayerInfo[guid] + else + info = GetPlayerInfoByGUID(guid) + WeakAurasSaved.Cyka.Cache.PlayerInfo[guid] = { + class = info.class, + race = info.race, + name = info.name, + isHostile = allianceRaces[race] ~= nil, + } + end + o.class = info.class or "" + o.race = info.race or "" + o.name = info.name or "" + o.isHostile = info.isHostile or true + + return o +end + +aura_env.processEvent = function(caster, target) + PlayerController:process(caster) + PlayerController:process(target) +end diff --git a/Complete Projects/Legion/Necrotic Rot.lua b/WeakAuras/Projects/Necrotic Rot.lua similarity index 95% rename from Complete Projects/Legion/Necrotic Rot.lua rename to WeakAuras/Projects/Necrotic Rot.lua index 57f358e..40d770a 100644 --- a/Complete Projects/Legion/Necrotic Rot.lua +++ b/WeakAuras/Projects/Necrotic Rot.lua @@ -1,69 +1,69 @@ -TRIGGER -function() - if UnitGroupRolesAssigned("player") == "HEALER" then - if UnitDebuff("target", "Necrotic Rot") then - return true - end - end - if UnitGroupRolesAssigned("player") == "TANK" then - if UnitDebuff("player", "Necrotic Rot") then - return true - end - end -end - -TRIGGER DURATION -function() - if UnitGroupRolesAssigned("player") == "HEALER" then - if UnitDebuff("target", "Necrotic Rot") then - aura_env.stacks = select(4, UnitDebuff("target", "Necrotic Rot")) - aura_env.exptime = select(7, UnitDebuff("target", "Necrotic Rot")) - aura_env.maxDur = select(6, UnitDebuff("target", "Necrotic Rot")) - end - end - if UnitGroupRolesAssigned("player") == "TANK" then - if UnitDebuff("player", "Necrotic Rot") then - aura_env.stacks = select(4, UnitDebuff("player", "Necrotic Rot")) - aura_env.exptime = select(7, UnitDebuff("player", "Necrotic Rot")) - aura_env.maxDur = select(6, UnitDebuff("player", "Necrotic Rot")) - end - end - if aura_env.stacks > 33 then - aura_env.stacks = 33 - end - return 33 - aura_env.stacks, 33, 1 -end - -TRIGGER NAME -function() - return - (aura_env.stacks * 3) -end - -DISPLAY -function() - return aura_env.stacks -end - -ANIMATION COLOR -function() - local function range(val, min, max, max2) - local val = 1 - (((max - val) / (max - min)) * max2) - return val - end - local remtime = aura_env.exptime - GetTime() - local c = range(remtime, 0, aura_env.maxDur, 1) - c = 1 - c - c expected as [0, 1] - if c > 0.5 then - c = 1 - (2 * (c - 0.5)) - return c, 1, 0, 1 - else - c = c * 2 - return 1, c, 0 ,1 - end -end - -INIT -aura_env.stacks = 0 -aura_env.exptime = 0 +TRIGGER +function() + if UnitGroupRolesAssigned("player") == "HEALER" then + if UnitDebuff("target", "Necrotic Rot") then + return true + end + end + if UnitGroupRolesAssigned("player") == "TANK" then + if UnitDebuff("player", "Necrotic Rot") then + return true + end + end +end + +TRIGGER DURATION +function() + if UnitGroupRolesAssigned("player") == "HEALER" then + if UnitDebuff("target", "Necrotic Rot") then + aura_env.stacks = select(4, UnitDebuff("target", "Necrotic Rot")) + aura_env.exptime = select(7, UnitDebuff("target", "Necrotic Rot")) + aura_env.maxDur = select(6, UnitDebuff("target", "Necrotic Rot")) + end + end + if UnitGroupRolesAssigned("player") == "TANK" then + if UnitDebuff("player", "Necrotic Rot") then + aura_env.stacks = select(4, UnitDebuff("player", "Necrotic Rot")) + aura_env.exptime = select(7, UnitDebuff("player", "Necrotic Rot")) + aura_env.maxDur = select(6, UnitDebuff("player", "Necrotic Rot")) + end + end + if aura_env.stacks > 33 then + aura_env.stacks = 33 + end + return 33 - aura_env.stacks, 33, 1 +end + +TRIGGER NAME +function() + return - (aura_env.stacks * 3) +end + +DISPLAY +function() + return aura_env.stacks +end + +ANIMATION COLOR +function() + local function range(val, min, max, max2) + local val = 1 - (((max - val) / (max - min)) * max2) + return val + end + local remtime = aura_env.exptime - GetTime() + local c = range(remtime, 0, aura_env.maxDur, 1) + c = 1 - c + c expected as [0, 1] + if c > 0.5 then + c = 1 - (2 * (c - 0.5)) + return c, 1, 0, 1 + else + c = c * 2 + return 1, c, 0 ,1 + end +end + +INIT +aura_env.stacks = 0 +aura_env.exptime = 0 aura_env.maxDur = 0 \ No newline at end of file diff --git a/Complete Projects/Legion/Nightwell Energy/Background.lua b/WeakAuras/Projects/Nightwell Energy/Background.lua similarity index 95% rename from Complete Projects/Legion/Nightwell Energy/Background.lua rename to WeakAuras/Projects/Nightwell Energy/Background.lua index 70d59b2..763c240 100644 --- a/Complete Projects/Legion/Nightwell Energy/Background.lua +++ b/WeakAuras/Projects/Nightwell Energy/Background.lua @@ -1,25 +1,25 @@ ---TRIGGER -function() - return true -end - ---DURATION -function() - if GetSpecialization() == 1 then - local AP = select(4, UnitDebuff("focus", "Judgment of Light")) or 0 - local maxAP = 40 - return AP, maxAP, 1 - end - if GetSpecialization() == 2 then - local AP = 0 - local maxAP = 0 - for i = 1, 40 do - if UnitExists("nameplate" .. i) and UnitDebuff("nameplate" .. i,"Judgment of Light") then - local APP = select(4, UnitDebuff("nameplate" .. i, "Judgment of Light")) or 0 - maxAP = maxAP + 40 - AP = AP + APP - end - end - end - return AP, maxAP, 1 +--TRIGGER +function() + return true +end + +--DURATION +function() + if GetSpecialization() == 1 then + local AP = select(4, UnitDebuff("focus", "Judgment of Light")) or 0 + local maxAP = 40 + return AP, maxAP, 1 + end + if GetSpecialization() == 2 then + local AP = 0 + local maxAP = 0 + for i = 1, 40 do + if UnitExists("nameplate" .. i) and UnitDebuff("nameplate" .. i,"Judgment of Light") then + local APP = select(4, UnitDebuff("nameplate" .. i, "Judgment of Light")) or 0 + maxAP = maxAP + 40 + AP = AP + APP + end + end + end + return AP, maxAP, 1 end \ No newline at end of file diff --git a/Complete Projects/Legion/Nightwell Energy/CODE.txt b/WeakAuras/Projects/Nightwell Energy/CODE.txt similarity index 100% rename from Complete Projects/Legion/Nightwell Energy/CODE.txt rename to WeakAuras/Projects/Nightwell Energy/CODE.txt diff --git a/Complete Projects/Legion/Nightwell Energy/Shield.lua b/WeakAuras/Projects/Nightwell Energy/Shield.lua similarity index 96% rename from Complete Projects/Legion/Nightwell Energy/Shield.lua rename to WeakAuras/Projects/Nightwell Energy/Shield.lua index 2a68268..116302a 100644 --- a/Complete Projects/Legion/Nightwell Energy/Shield.lua +++ b/WeakAuras/Projects/Nightwell Energy/Shield.lua @@ -1,31 +1,31 @@ ---EVERY FRAME -function() - return true -end - ---DURATION -function() - local AP = 0 - for i = 1, 40 do - local spellID = select(11, UnitBuff("player", i)) -- don't know which return arg it is - if spellID == 214577 then - local AP = select(17, UnitBuff("player", i)) - return aura_env.max - AP, aura_env.max, 1 - end - end -end - ---COMBAT_LOG_EVENT_UNFILTERED -function(...) - local subevent = select(3, ...) - local caster = select(6, ...) - if subevent == "SPELL_AURA_APPLIED" and caster == UnitName("player") then - local spell = select(13, ...) - if spell == 214577 then - aura_env.max = select(17, ...) - end - end -end - ---INIT +--EVERY FRAME +function() + return true +end + +--DURATION +function() + local AP = 0 + for i = 1, 40 do + local spellID = select(11, UnitBuff("player", i)) -- don't know which return arg it is + if spellID == 214577 then + local AP = select(17, UnitBuff("player", i)) + return aura_env.max - AP, aura_env.max, 1 + end + end +end + +--COMBAT_LOG_EVENT_UNFILTERED +function(...) + local subevent = select(3, ...) + local caster = select(6, ...) + if subevent == "SPELL_AURA_APPLIED" and caster == UnitName("player") then + local spell = select(13, ...) + if spell == 214577 then + aura_env.max = select(17, ...) + end + end +end + +--INIT aura_env.max = 0 \ No newline at end of file diff --git a/Complete Projects/Legion/Nightwell Energy/Stacks.lua b/WeakAuras/Projects/Nightwell Energy/Stacks.lua similarity index 95% rename from Complete Projects/Legion/Nightwell Energy/Stacks.lua rename to WeakAuras/Projects/Nightwell Energy/Stacks.lua index f5624e6..ff539d6 100644 --- a/Complete Projects/Legion/Nightwell Energy/Stacks.lua +++ b/WeakAuras/Projects/Nightwell Energy/Stacks.lua @@ -1,17 +1,17 @@ ---EVERY FRAME -function() - return true -end - ---DURATION -function() - local maxAP = 10 - local AP = 0 - for i = 1, 40 do - local spellID = select(11, UnitBuff("player", i)) -- don't know which return arg it is - if spellID == 214572 then - local AP = select(4, UnitBuff("player", i)) - return maxAP - AP, maxAP, 1 - end - end +--EVERY FRAME +function() + return true +end + +--DURATION +function() + local maxAP = 10 + local AP = 0 + for i = 1, 40 do + local spellID = select(11, UnitBuff("player", i)) -- don't know which return arg it is + if spellID == 214572 then + local AP = select(4, UnitBuff("player", i)) + return maxAP - AP, maxAP, 1 + end + end end \ No newline at end of file diff --git a/Complete Projects/Legion/Nightwell Energy/Text.lua b/WeakAuras/Projects/Nightwell Energy/Text.lua similarity index 96% rename from Complete Projects/Legion/Nightwell Energy/Text.lua rename to WeakAuras/Projects/Nightwell Energy/Text.lua index 83cfbab..b49dec8 100644 --- a/Complete Projects/Legion/Nightwell Energy/Text.lua +++ b/WeakAuras/Projects/Nightwell Energy/Text.lua @@ -1,39 +1,39 @@ ---TRIGGER -function() - return true --always on -end - ---DURATION -function() - local function shorten(val) - local function round(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var - end - local n = 2 - if val < 1e3 then - return round(val, n) - elseif val > 1e3 and val < 1e6 then - return round(val / 1e3, n) .. "k" - elseif val > 1e6 and val < 1e9 then - return round(val / 1e6, n) .. "M" - elseif val > 1e9 then - return round(val / 1e9, n) .. "G" - end - end - for i = 1, 40 do - local spellID = select(11, UnitBuff("player", i)) -- don't know which return arg it is - if spellID == 214577 then - local AP = select(17, UnitBuff("player", i)) - return shorten(AP) - end - if spellID == 214572 then - local AP = select(4, UnitBuff("player", i)) - return AP - end - end +--TRIGGER +function() + return true --always on +end + +--DURATION +function() + local function shorten(val) + local function round(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var + end + local n = 2 + if val < 1e3 then + return round(val, n) + elseif val > 1e3 and val < 1e6 then + return round(val / 1e3, n) .. "k" + elseif val > 1e6 and val < 1e9 then + return round(val / 1e6, n) .. "M" + elseif val > 1e9 then + return round(val / 1e9, n) .. "G" + end + end + for i = 1, 40 do + local spellID = select(11, UnitBuff("player", i)) -- don't know which return arg it is + if spellID == 214577 then + local AP = select(17, UnitBuff("player", i)) + return shorten(AP) + end + if spellID == 214572 then + local AP = select(4, UnitBuff("player", i)) + return AP + end + end end \ No newline at end of file diff --git a/Complete Projects/Legion/Nightwell Energy/Todo b/WeakAuras/Projects/Nightwell Energy/Todo similarity index 98% rename from Complete Projects/Legion/Nightwell Energy/Todo rename to WeakAuras/Projects/Nightwell Energy/Todo index 00f3874..5f46088 100644 --- a/Complete Projects/Legion/Nightwell Energy/Todo +++ b/WeakAuras/Projects/Nightwell Energy/Todo @@ -1,2 +1,2 @@ -Todo ---MAKE IT WORK ON HOLY AND PROT AND USE NAMEPLATE FOR PROT FOR STACKS ON HOLY USE FOCUS ALSO USE THE GET ROLE FUNCTION THING GOOD LUCK +Todo +--MAKE IT WORK ON HOLY AND PROT AND USE NAMEPLATE FOR PROT FOR STACKS ON HOLY USE FOCUS ALSO USE THE GET ROLE FUNCTION THING GOOD LUCK diff --git a/NewAge/NullBarrier/CLEU1.lua b/WeakAuras/Projects/NullBarrier/CLEU1.lua similarity index 97% rename from NewAge/NullBarrier/CLEU1.lua rename to WeakAuras/Projects/NullBarrier/CLEU1.lua index 01cc500..68ec099 100644 --- a/NewAge/NullBarrier/CLEU1.lua +++ b/WeakAuras/Projects/NullBarrier/CLEU1.lua @@ -1,10 +1,10 @@ -function() - if select(2, CombatLogGetCurrentEventInfo()) == "SPELL_AURA_APPLIED" then - local target = select(5, CombatLogGetCurrentEventInfo()) - local buff = select(13, CombatLogGetCurrentEventInfo()) - if target == UnitName("player") and aura_env.buffs[buff] ~= nil then - aura_env.max = aura_env.GetAbsorbs() - end - end - return aura_env.GetAbsorbs() > 0 +function() + if select(2, CombatLogGetCurrentEventInfo()) == "SPELL_AURA_APPLIED" then + local target = select(5, CombatLogGetCurrentEventInfo()) + local buff = select(13, CombatLogGetCurrentEventInfo()) + if target == UnitName("player") and aura_env.buffs[buff] ~= nil then + aura_env.max = aura_env.GetAbsorbs() + end + end + return aura_env.GetAbsorbs() > 0 end \ No newline at end of file diff --git a/NewAge/NullBarrier/CLEU2.lua b/WeakAuras/Projects/NullBarrier/CLEU2.lua similarity index 97% rename from NewAge/NullBarrier/CLEU2.lua rename to WeakAuras/Projects/NullBarrier/CLEU2.lua index c5a705e..ea53242 100644 --- a/NewAge/NullBarrier/CLEU2.lua +++ b/WeakAuras/Projects/NullBarrier/CLEU2.lua @@ -1,10 +1,10 @@ -function() - if select(2, CombatLogGetCurrentEventInfo()) == "SPELL_AURA_APPLIED" then - local target = select(5, CombatLogGetCurrentEventInfo()) - local buff = select(13, CombatLogGetCurrentEventInfo()) - if target == UnitName("player") and aura_env.buffs[buff] ~= nil then - aura_env.timeApplied = GetTime() - return true - end - end +function() + if select(2, CombatLogGetCurrentEventInfo()) == "SPELL_AURA_APPLIED" then + local target = select(5, CombatLogGetCurrentEventInfo()) + local buff = select(13, CombatLogGetCurrentEventInfo()) + if target == UnitName("player") and aura_env.buffs[buff] ~= nil then + aura_env.timeApplied = GetTime() + return true + end + end end \ No newline at end of file diff --git a/NewAge/NullBarrier/CustomDuration1.lua b/WeakAuras/Projects/NullBarrier/CustomDuration1.lua similarity index 96% rename from NewAge/NullBarrier/CustomDuration1.lua rename to WeakAuras/Projects/NullBarrier/CustomDuration1.lua index 7c61f99..8732875 100644 --- a/NewAge/NullBarrier/CustomDuration1.lua +++ b/WeakAuras/Projects/NullBarrier/CustomDuration1.lua @@ -1,3 +1,3 @@ -function() - return aura_env.GetAbsorbs(), aura_env.max, 1 +function() + return aura_env.GetAbsorbs(), aura_env.max, 1 end \ No newline at end of file diff --git a/NewAge/NullBarrier/CustomDuration2.lua b/WeakAuras/Projects/NullBarrier/CustomDuration2.lua similarity index 96% rename from NewAge/NullBarrier/CustomDuration2.lua rename to WeakAuras/Projects/NullBarrier/CustomDuration2.lua index ab30a4b..5d2f12c 100644 --- a/NewAge/NullBarrier/CustomDuration2.lua +++ b/WeakAuras/Projects/NullBarrier/CustomDuration2.lua @@ -1,3 +1,3 @@ -function() - return 15, aura_env.timeApplied + 15 +function() + return 15, aura_env.timeApplied + 15 end \ No newline at end of file diff --git a/NewAge/NullBarrier/Export b/WeakAuras/Projects/NullBarrier/Export similarity index 100% rename from NewAge/NullBarrier/Export rename to WeakAuras/Projects/NullBarrier/Export diff --git a/NewAge/NullBarrier/INIT1.lua b/WeakAuras/Projects/NullBarrier/INIT1.lua similarity index 94% rename from NewAge/NullBarrier/INIT1.lua rename to WeakAuras/Projects/NullBarrier/INIT1.lua index 3b75aa1..0674c4c 100644 --- a/NewAge/NullBarrier/INIT1.lua +++ b/WeakAuras/Projects/NullBarrier/INIT1.lua @@ -1,39 +1,39 @@ -aura_env.buffs = { - ["Null Barrier"] = 1, - ["Empowered Null Barrier"] = 1, -} -aura_env.max = 0 - -aura_env.GetBuff = function(name) - for i = 1, 40 do - if UnitBuff("player", i) == name then return i end - end - return 0 -end - -aura_env.GetAbsorb = function(name) - local temp = select(16, UnitBuff("player", aura_env.GetBuff(name))) - if temp then - return temp - else - return 0 - end -end - -aura_env.GetAbsorbs = function() - local abs = 0 - for k, v in pairs(aura_env.buffs) do - abs = abs + aura_env.GetAbsorb(k) - end - return abs -end - -aura_env.PrettyPrintNum = function(n) - if n > 1e6 then - return string.format("%.2fM", n / 1e6) - elseif n > 1e3 then - return string.format("%.2fk", n / 1e3) - else - return n - end -end +aura_env.buffs = { + ["Null Barrier"] = 1, + ["Empowered Null Barrier"] = 1, +} +aura_env.max = 0 + +aura_env.GetBuff = function(name) + for i = 1, 40 do + if UnitBuff("player", i) == name then return i end + end + return 0 +end + +aura_env.GetAbsorb = function(name) + local temp = select(16, UnitBuff("player", aura_env.GetBuff(name))) + if temp then + return temp + else + return 0 + end +end + +aura_env.GetAbsorbs = function() + local abs = 0 + for k, v in pairs(aura_env.buffs) do + abs = abs + aura_env.GetAbsorb(k) + end + return abs +end + +aura_env.PrettyPrintNum = function(n) + if n > 1e6 then + return string.format("%.2fM", n / 1e6) + elseif n > 1e3 then + return string.format("%.2fk", n / 1e3) + else + return n + end +end diff --git a/NewAge/NullBarrier/INIT2.lua b/WeakAuras/Projects/NullBarrier/INIT2.lua similarity index 94% rename from NewAge/NullBarrier/INIT2.lua rename to WeakAuras/Projects/NullBarrier/INIT2.lua index da3aac6..465e560 100644 --- a/NewAge/NullBarrier/INIT2.lua +++ b/WeakAuras/Projects/NullBarrier/INIT2.lua @@ -1,4 +1,4 @@ -aura_env.buffs = { - ["Null Barrier"] = 1, -} -aura_env.timeApplied = 0 +aura_env.buffs = { + ["Null Barrier"] = 1, +} +aura_env.timeApplied = 0 diff --git a/NewAge/NullBarrier/Text1.lua b/WeakAuras/Projects/NullBarrier/Text1.lua similarity index 97% rename from NewAge/NullBarrier/Text1.lua rename to WeakAuras/Projects/NullBarrier/Text1.lua index 9a93ed4..7459d14 100644 --- a/NewAge/NullBarrier/Text1.lua +++ b/WeakAuras/Projects/NullBarrier/Text1.lua @@ -1,3 +1,3 @@ -function() - return aura_env.PrettyPrintNum(aura_env.GetAbsorbs()) +function() + return aura_env.PrettyPrintNum(aura_env.GetAbsorbs()) end \ No newline at end of file diff --git a/Complete Projects/Legion/OneSecondTicker.lua b/WeakAuras/Projects/OneSecondTicker.lua similarity index 97% rename from Complete Projects/Legion/OneSecondTicker.lua rename to WeakAuras/Projects/OneSecondTicker.lua index 365f815..f65c524 100644 --- a/Complete Projects/Legion/OneSecondTicker.lua +++ b/WeakAuras/Projects/OneSecondTicker.lua @@ -1,6 +1,6 @@ ---PLAYER_REGEN_DISABLED PLAYER_REGEN_ENABLED -function() - if not WeakAurasSaved.GlobalTicker then - WeakAurasSaved.GlobalTicker = C_Timer.NewTicker(1, function() WeakAuras.ScanEvents("GLOBAL_TICKER") end) - end -end +--PLAYER_REGEN_DISABLED PLAYER_REGEN_ENABLED +function() + if not WeakAurasSaved.GlobalTicker then + WeakAurasSaved.GlobalTicker = C_Timer.NewTicker(1, function() WeakAuras.ScanEvents("GLOBAL_TICKER") end) + end +end diff --git a/FreshShit/OreCamper/event.lua b/WeakAuras/Projects/OreCamper/event.lua similarity index 97% rename from FreshShit/OreCamper/event.lua rename to WeakAuras/Projects/OreCamper/event.lua index df5a8d6..f338832 100644 --- a/FreshShit/OreCamper/event.lua +++ b/WeakAuras/Projects/OreCamper/event.lua @@ -1,24 +1,24 @@ --- UNIT_SPELLCAST_SENT ----@param allstates allstates ----@param e string ----@param source string ----@param spellname string ----@param _ string ----@param target string -function(allstates, e, source, spellname, _, target) - if source ~= "player" then return end - if spellname ~= "Mining" then return end - if aura_env.depositIterator[target] == nil then aura_env.depositIterator[target] = 0 end - local state = { - changed = true, - show = true, - progressType = "timed", - autoHide = true, - duration = aura_env.cooldown, - expirationTime = GetTime() + aura_env.cooldown, - name = string.format("%s #%d", target, aura_env.depositIterator[target]), - } - allstates[aura_env.depositIterator[target]] = state - aura_env.depositIterator[target] = aura_env.depositIterator[target] + 1 - return true +-- UNIT_SPELLCAST_SENT +---@param allstates allstates +---@param e string +---@param source string +---@param spellname string +---@param _ string +---@param target string +function(allstates, e, source, spellname, _, target) + if source ~= "player" then return end + if spellname ~= "Mining" then return end + if aura_env.depositIterator[target] == nil then aura_env.depositIterator[target] = 0 end + local state = { + changed = true, + show = true, + progressType = "timed", + autoHide = true, + duration = aura_env.cooldown, + expirationTime = GetTime() + aura_env.cooldown, + name = string.format("%s #%d", target, aura_env.depositIterator[target]), + } + allstates[aura_env.depositIterator[target]] = state + aura_env.depositIterator[target] = aura_env.depositIterator[target] + 1 + return true end \ No newline at end of file diff --git a/FreshShit/OreCamper/event2.lua b/WeakAuras/Projects/OreCamper/event2.lua similarity index 96% rename from FreshShit/OreCamper/event2.lua rename to WeakAuras/Projects/OreCamper/event2.lua index 7de1e88..eddbab7 100644 --- a/FreshShit/OreCamper/event2.lua +++ b/WeakAuras/Projects/OreCamper/event2.lua @@ -1,35 +1,35 @@ ---- CLEU:SPELL_DAMAGE -function(allstates, e, ...) - local source = arg4 - if not source or source ~= UnitName("player") then return end - local targetGUID = arg6 - if not targetGUID then return end - local targetName = arg7 - if not targetName then return end - local overkill = arg13 - if not overkill or overkill <= 0 then return end - - local currentTime = GetTime() - if aura_env.lastEvent > 0 and currentTime - aura_env.lastEvent < aura_env.throttle then return end - aura_env.lastEvent = currentTime - local cooldown = aura_env.cooldown - --- local lastEventTime = aura_env.lastEventTimes[targetGUID] or currentTime --- local timeSinceLastEvent = currentTime - lastEventTime --- local cooldown = timeSinceLastEvent --- if cooldown == 0 then cooldown = aura_env.cooldown end - - local state = { - changed = true, - show = true, - progressType = "timed", - autoHide = true, - duration = cooldown, - expirationTime = currentTime + cooldown, - name = string.format("%s", targetName), - } - - aura_env.lastEventTimes[targetGUID] = currentTime - allstates[targetGUID] = state - return true -end +--- CLEU:SPELL_DAMAGE +function(allstates, e, ...) + local source = arg4 + if not source or source ~= UnitName("player") then return end + local targetGUID = arg6 + if not targetGUID then return end + local targetName = arg7 + if not targetName then return end + local overkill = arg13 + if not overkill or overkill <= 0 then return end + + local currentTime = GetTime() + if aura_env.lastEvent > 0 and currentTime - aura_env.lastEvent < aura_env.throttle then return end + aura_env.lastEvent = currentTime + local cooldown = aura_env.cooldown + +-- local lastEventTime = aura_env.lastEventTimes[targetGUID] or currentTime +-- local timeSinceLastEvent = currentTime - lastEventTime +-- local cooldown = timeSinceLastEvent +-- if cooldown == 0 then cooldown = aura_env.cooldown end + + local state = { + changed = true, + show = true, + progressType = "timed", + autoHide = true, + duration = cooldown, + expirationTime = currentTime + cooldown, + name = string.format("%s", targetName), + } + + aura_env.lastEventTimes[targetGUID] = currentTime + allstates[targetGUID] = state + return true +end diff --git a/FreshShit/OreCamper/export b/WeakAuras/Projects/OreCamper/export similarity index 99% rename from FreshShit/OreCamper/export rename to WeakAuras/Projects/OreCamper/export index ef916c7..04c8074 100644 --- a/FreshShit/OreCamper/export +++ b/WeakAuras/Projects/OreCamper/export @@ -1,2 +1,2 @@ -rt +rt !LJrBtnoVX)l05M5UPeMeia39HBMM3aY1qcnY8WD94CIWwXrhosPs2qG26F7DxjlBhiaPx78mtNoWKOSA1Q99xKFdFpFI2NS)EnoAVd8jl8jH4)a0iL8EFs3rxn0NCJufYuTPb3gQKl9jTJ5p(ivfMn1tkJt4aOvJMntZs8pP5No(Jh(PpEqJM738OgnB6pRwtGYp42)WJoQ5rFS5N(y96np44Jpc3VPpHkcMlvxi5IeFsNEd96n2DVDKXsfWsdB4pSU)W9nFEG5ZMiq4a6L0agUfHgKWLcTrUsOQeybS)mUGRNBxdlTqH1jkEuetPTu3RaaUmKDt6SzEpSK5toR3Glo5YbW(MFstv09XBLfh3puBPRo9g2DmrcbofFLpzsNweVjeVwJbILIxkzzm9bG4ebDbl)uMJaxaJgNmVKixOygIqUO3GbiEPIswlXY8bY40fcIv0B4tu0qEQg0c1Rd4Rzd4lGl9gGDJ5rIsTkOxmecuG49nMfLRXaAglPgRpC8jbXuTgppiNbiWfPGT2P6S7(uOA(JSNceaFtURtvtzdJPSHXu2WykRV3HiYubFbnHzU5aASv4IncZWdDof4U2v9cJatc5VLsvSSPNKghNn9Q5CGaeLr0SMWWhaTopaCRtx6okb5w0RrlbpfIqkyOAvmJhzvhrkEO94J7A2b0DIKtaNmqmiJB1T)Le4AKju0RZOrTuo3BhKky37lTrjYG7a)ndYhx)a0sXHiUopCl9CUG1P7Pw(lfHYpn58U9Vk(qnedotbonG)jnHAOKnG5eeQLdjDg3RhGOMfplpoYB0fogQVWWpnSY0v8qWBd1M00eGmJwMu6dqvbdyIieHdoQUrSd5v2hintjOX)Mtq2)iNrd)zLipsieOGaNyJB0mKwAxyKrFdeCbLl2ESlIL3o8ToRfb4qMc1T5IFJ6Bu(d5Amq1JTc(X7wwM7cnVBmpLHOJxZlaC4rxnr4wK9AMe8PIPraRp6sVb9h2duYGSmj4vdxSz(kT2fznPQxkoRYLgY00eubAc0wQKrkMwd5Dc4ANuGmMp5ef)XSP)LuAi68b58DQrRA5BguDjo(ppxHEHuMm)ICgYVTjzuRWFMQtyHSqimbz4QH2y6yqObdpyYsvaKEX3Dz)SPTJPIBZzwp3E9r33zqa51DO6eUiQnvD9L9Rv(RAe8agFdjE)BiOLgVCUno0ePgF6TN3F0Xxr)2prh0vmxeMjxSmnjMJPwkSUvuFF1O(caPtUa5XlxgI2esA(3itGrwbwksAHm1Rw4Y6(BPO7Bxic4IYCuEJf42Q6rVC5m3TwRw20lh2hQ)HhWwjeCpZ(sTA1(tGWtxKnLghB4hD1LvrasNRb5seTguTmvf8cBHfKrUzJ7ozJqHuvrSKYTMLkmTq8(cEAxGt21DV7w5wG1t21rHpK9LSP2)4Zk5YS)XNZMUJvtTdG7CMiBQIbUIW3mr4tovPaypi4TdC1BFqmeyctC3EHSLsnpPp4JtHIuF3YC)iB6NbYj4XokTfhiBA9NCtXsOEmQQa1IbH)E5EU)cMtfrSqZ2jQuqj9mu0ZL3)A77sgHUMg82jHVGfUZgqfJooJhYEnY5ktyWPqUdGoxdL3l2WbyRwYThXJVWs6tzj463)HSP)XTJiwR4NDow7ntQGW43VZ7a39)W7qHj3Xz332y8Hk0)FwUSWd97Vfb(roNG2TYJVnUaVnsG(OrjrDEOOTi7lG3ZB0yCWCwWTfPDwVJAdqOO4gsKuKxBoy8HuEO)XMAtglM)tte9DyUuXdfPATOnqgXdGu2UG(QHXfIY33)h5Ic1qO8ZEUeU6H1GUi(FWMIkAjVV4efwMh72gQYC7dDZjGbs1XdYl0uTK7eSSBc2GHNT67e9Ckeq8vxhtnChaOuIPHkdw2LVtK)ZTOphdE2(r6TAjMD4E6dRDNBrJwvW(BooSwdh8YoPADP3Okxz(yc1RaYw107S(D(Zff1nBUw)H9hoS34jd6DINRXXVvPvsd(yBn8zGKyXYmkbZ265WrivTN7Rp9C3bDPDdmBuBu9FWVM6F5)xO(h3)0Z2c9FoA)AgGM)Aga9VKbyt9J)7OHOX(pZqm0m48gmaDgnCIBSK3Ya4WRQfOAOZlAbUX38WaEvu15Vrq(SV5mLzYOcyYsQLdj4TvC5ywA7DqyMhHOr20lGM)JlaBgXbOHjJ7CgpAogTwpFaG2XqrftvesRUD)38vsw3Gu9rlm0gAkkKb5xh273kFjnxU(2p)j9wFIjZ0NAtP184cecwryBgj1C)pvyDJhNlVgpRn8yDeno0C1P0AfgosOV(kg92wqvh91NZc50RjiE6RBlxbDx1sXeudK9Krrqrq5elDUz9IJqL)Lf78F5RQDLhxeHMpku7YHIEwBJMoS(0HzF5L6YY2Kn0Yx(OXOISZBBbEsrL7bB9vkkyLVQy16V6uoPrLYtFNP7TdYAN69LEZP1NqNUcjexGdnBcsmeVR9bhmp3GuXHw7STzqoB04()1rd9An45V10JsqXHXORkJ(nQI7aMR5(O06)Vc \ No newline at end of file diff --git a/FreshShit/OreCamper/init.lua b/WeakAuras/Projects/OreCamper/init.lua similarity index 96% rename from FreshShit/OreCamper/init.lua rename to WeakAuras/Projects/OreCamper/init.lua index 78c8ab1..d40fcbb 100644 --- a/FreshShit/OreCamper/init.lua +++ b/WeakAuras/Projects/OreCamper/init.lua @@ -1,5 +1,5 @@ -aura_env.cooldown = 240 -aura_env.depositIterator = {} -aura_env.lastEventTimes = {} -aura_env.throttle = 0.5 -aura_env.lastEvent = 0 +aura_env.cooldown = 240 +aura_env.depositIterator = {} +aura_env.lastEventTimes = {} +aura_env.throttle = 0.5 +aura_env.lastEvent = 0 diff --git a/NewAge/OverallAbsorbs/Export.txt b/WeakAuras/Projects/OverallAbsorbs/Export.txt similarity index 100% rename from NewAge/OverallAbsorbs/Export.txt rename to WeakAuras/Projects/OverallAbsorbs/Export.txt diff --git a/NewAge/OverallAbsorbs/INIT.lua b/WeakAuras/Projects/OverallAbsorbs/INIT.lua similarity index 94% rename from NewAge/OverallAbsorbs/INIT.lua rename to WeakAuras/Projects/OverallAbsorbs/INIT.lua index 233dfed..7861b66 100644 --- a/NewAge/OverallAbsorbs/INIT.lua +++ b/WeakAuras/Projects/OverallAbsorbs/INIT.lua @@ -1,43 +1,43 @@ -aura_env.buffs = { - ["Null Barrier"] = 1, - ["Empowered Null Barrier"] = 1, - ["Resounding Protection"] = 1, - ["Guard"] = 1, - ["Void Shroud"] = 1, - ["Stoneskin"] = 1, -} -aura_env.max = 0 - -aura_env.GetBuff = function(name) - for i = 1, 40 do - if UnitBuff("player", i) == name then return i end - end - return 0 -end - -aura_env.GetAbsorb = function(name) - local temp = select(16, UnitBuff("player", aura_env.GetBuff(name))) - if temp then - return temp - else - return 0 - end -end - -aura_env.GetAbsorbs = function() - local abs = 0 - for k, v in pairs(aura_env.buffs) do - abs = abs + aura_env.GetAbsorb(k) - end - return abs -end - -aura_env.PrettyPrintNum = function(n) - if n > 1e6 then - return string.format("%.2fM", n / 1e6) - elseif n > 1e3 then - return string.format("%.2fk", n / 1e3) - else - return n - end -end +aura_env.buffs = { + ["Null Barrier"] = 1, + ["Empowered Null Barrier"] = 1, + ["Resounding Protection"] = 1, + ["Guard"] = 1, + ["Void Shroud"] = 1, + ["Stoneskin"] = 1, +} +aura_env.max = 0 + +aura_env.GetBuff = function(name) + for i = 1, 40 do + if UnitBuff("player", i) == name then return i end + end + return 0 +end + +aura_env.GetAbsorb = function(name) + local temp = select(16, UnitBuff("player", aura_env.GetBuff(name))) + if temp then + return temp + else + return 0 + end +end + +aura_env.GetAbsorbs = function() + local abs = 0 + for k, v in pairs(aura_env.buffs) do + abs = abs + aura_env.GetAbsorb(k) + end + return abs +end + +aura_env.PrettyPrintNum = function(n) + if n > 1e6 then + return string.format("%.2fM", n / 1e6) + elseif n > 1e3 then + return string.format("%.2fk", n / 1e3) + else + return n + end +end diff --git a/Complete Projects/Legion/PPM.lua b/WeakAuras/Projects/PPM.lua similarity index 95% rename from Complete Projects/Legion/PPM.lua rename to WeakAuras/Projects/PPM.lua index 3a636d8..5f6b2d7 100644 --- a/Complete Projects/Legion/PPM.lua +++ b/WeakAuras/Projects/PPM.lua @@ -1,62 +1,62 @@ -DISPLAY -function() - local function round(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var - end - if UnitAffectingCombat("player") == true then - aura_env.endTime = math.floor(GetTime()) - end - local ppm = aura_env.procs / ((aura_env.endTime - aura_env.startTime) / 60) - ppm = ppm / 60 - return round(ppm, 2) -end - ---COMBAT_LOG_EVENT_UNFILTERED -function(...) - local subevent = select(3, ...) - if subevent == "SPELL_AURA_APPLIED" then - local caster = select(6, ...) - local bname = select(14, ...) - if caster == UnitName("player") and bname == aura_env.bname then - aura_env.procs = aura_env.procs + 1 - local expTime = select(7, UnitBuff("player", aura_env.bname)) - aura_env.expTime = expTime - end - end -end - ---PLAYER_REGEN_DISABLED -function() --Enable timer on start combat - aura_env.startTime = math.floor(GetTime()) - return true -end - ---PLAYER_REGEN_ENABLED -function() --Disable timer on end cobat - aura_env.endTime = math.floor(GetTime()) - return true -end - ---EVERY FRAME TRIGGER -function() - if UnitBuff("player", aura_env.bname) then - local expTime = select(7, UnitBuff("player", aura_env.bname)) - --print(expTime, aura_env.expTime) - if expTime ~= aura_env.expTime then - aura_env.procs = aura_env.procs + 1 - end - aura_env.expTime = expTime - end -end - -INIT -aura_env.bname = "Meat Cleaver" -aura_env.startTime = 0 -aura_env.endTime = 0 -aura_env.procs = 0 +DISPLAY +function() + local function round(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var + end + if UnitAffectingCombat("player") == true then + aura_env.endTime = math.floor(GetTime()) + end + local ppm = aura_env.procs / ((aura_env.endTime - aura_env.startTime) / 60) + ppm = ppm / 60 + return round(ppm, 2) +end + +--COMBAT_LOG_EVENT_UNFILTERED +function(...) + local subevent = select(3, ...) + if subevent == "SPELL_AURA_APPLIED" then + local caster = select(6, ...) + local bname = select(14, ...) + if caster == UnitName("player") and bname == aura_env.bname then + aura_env.procs = aura_env.procs + 1 + local expTime = select(7, UnitBuff("player", aura_env.bname)) + aura_env.expTime = expTime + end + end +end + +--PLAYER_REGEN_DISABLED +function() --Enable timer on start combat + aura_env.startTime = math.floor(GetTime()) + return true +end + +--PLAYER_REGEN_ENABLED +function() --Disable timer on end cobat + aura_env.endTime = math.floor(GetTime()) + return true +end + +--EVERY FRAME TRIGGER +function() + if UnitBuff("player", aura_env.bname) then + local expTime = select(7, UnitBuff("player", aura_env.bname)) + --print(expTime, aura_env.expTime) + if expTime ~= aura_env.expTime then + aura_env.procs = aura_env.procs + 1 + end + aura_env.expTime = expTime + end +end + +INIT +aura_env.bname = "Meat Cleaver" +aura_env.startTime = 0 +aura_env.endTime = 0 +aura_env.procs = 0 aura_env.expTime = 0 \ No newline at end of file diff --git a/FreshShit/PersonalAnnouncer/event.lua b/WeakAuras/Projects/PersonalAnnouncer/event.lua similarity index 96% rename from FreshShit/PersonalAnnouncer/event.lua rename to WeakAuras/Projects/PersonalAnnouncer/event.lua index c9dda8d..e5b422e 100644 --- a/FreshShit/PersonalAnnouncer/event.lua +++ b/WeakAuras/Projects/PersonalAnnouncer/event.lua @@ -1,13 +1,13 @@ --- TICKER_500 -function(e) - if aura_env.ActiveSet == nil then - aura_env.ActiveSet = aura_env.Cooldowns[UnitClass("player")] - if aura_env.ActiveSet == nil then - aura_env.ActiveSet = {} - end - end - for _, cooldown in ipairs(aura_env.ActiveSet) do - if aura_env.debug then print(string.format("Calling update on %s", cooldown.name)) end - cooldown:Update() - end +-- TICKER_500 +function(e) + if aura_env.ActiveSet == nil then + aura_env.ActiveSet = aura_env.Cooldowns[UnitClass("player")] + if aura_env.ActiveSet == nil then + aura_env.ActiveSet = {} + end + end + for _, cooldown in ipairs(aura_env.ActiveSet) do + if aura_env.debug then print(string.format("Calling update on %s", cooldown.name)) end + cooldown:Update() + end end \ No newline at end of file diff --git a/FreshShit/PersonalAnnouncer/export b/WeakAuras/Projects/PersonalAnnouncer/export similarity index 100% rename from FreshShit/PersonalAnnouncer/export rename to WeakAuras/Projects/PersonalAnnouncer/export diff --git a/FreshShit/PersonalAnnouncer/init.lua b/WeakAuras/Projects/PersonalAnnouncer/init.lua similarity index 96% rename from FreshShit/PersonalAnnouncer/init.lua rename to WeakAuras/Projects/PersonalAnnouncer/init.lua index d6360bc..d10223c 100644 --- a/FreshShit/PersonalAnnouncer/init.lua +++ b/WeakAuras/Projects/PersonalAnnouncer/init.lua @@ -1,187 +1,187 @@ -aura_env.debug = true - ----@class BaseCooldown ----@field name string ----@field filename string ----@field id number ----@field isOnCooldown boolean ----@field announced boolean ----@field remaining number -aura_env.BaseCooldown = { - ---@param id number - ---@param name string - ---@param playbackSpeed number? - ---@return BaseCooldown - new = function(id, name, playbackSpeed) - local self = setmetatable({}, { - __index = aura_env.BaseCooldown, - }) - self.id = id - self.name = name - name = string.gsub(name, " ", "_") - name = string.gsub(name, "'", "") - name = string.lower(name) - self.filename = name - if playbackSpeed == nil then - self.filename = string.format("1x\\%s", self.filename) - else - self.filename = string.format("%.1fx\\%s", playbackSpeed, self.filename) - end - if aura_env.debug then print(string.format("Created BaseCooldown with filename %s", self.filename)) end - self.isOnCooldown = false - self.announced = false - self.remaining = 0 - return self - end, - - ---@param self BaseCooldown - ---@param cooldownFunc fun(spellId: number): number, number - Update = function(self, cooldownFunc) - local start, duration = cooldownFunc(self.id) - local isOnCooldown = start > 0 and duration > 3 - local remaining = start + duration - GetTime() - - if not isOnCooldown and self.isOnCooldown then - self:playComplete() - self.announced = false - end - if not self.announced and isOnCooldown and remaining < 10 then - self:playSoon() - self.announced = true - end - - self.isOnCooldown = isOnCooldown - self.remaining = remaining - end, - - ---@param self BaseCooldown - playComplete = function(self) - local soundFile = string.format("Interface\\Sounds\\alerts\\%s.ogg", self.filename) - if aura_env.debug then - print(string.format("%s is off cooldown, playing sound file at %s", self.filename, soundFile)) - end - WeakAuras.ScanEvents("PLAY_SOUND", soundFile) - end, - - ---@param self BaseCooldown - playSoon = function(self) - local soundFile = string.format("Interface\\Sounds\\alerts\\%s_soon.ogg", self.filename) - if aura_env.debug then - print(string.format("%s is almost off cooldown, playing sound file at %s", self.filename, soundFile)) - end - WeakAuras.ScanEvents("PLAY_SOUND", soundFile) - end, -} - ----@class Spell:BaseCooldown -aura_env.Spell = { - ---@param id number - ---@param name string - ---@param playbackSpeed number? - ---@return Spell - new = function(id, name, playbackSpeed) - local obj = aura_env.BaseCooldown.new(id, name, playbackSpeed) - ---@cast obj Spell - setmetatable(obj, { - __index = aura_env.Spell, - }) - return obj - end, - Update = function(self) aura_env.BaseCooldown.Update(self, GetSpellCooldown) end, - playComplete = aura_env.BaseCooldown.playComplete, - playSoon = aura_env.BaseCooldown.playSoon, -} ----@class Item:BaseCooldown -aura_env.Item = { - ---@param id number - ---@param name string - ---@param playbackSpeed number? - ---@return Item - new = function(id, name, playbackSpeed) - local obj = aura_env.BaseCooldown.new(id, name, playbackSpeed) - ---@cast obj Item - setmetatable(obj, { - __index = aura_env.Item, - }) - return obj - end, - Update = function(self) aura_env.BaseCooldown.Update(self, GetItemCooldown) end, - playComplete = aura_env.BaseCooldown.playComplete, - playSoon = aura_env.BaseCooldown.playSoon, -} ----@class Buff:BaseCooldown ----@field isActive boolean -aura_env.Buff = { - ---@param id number - ---@param name string - ---@param playbackSpeed number? - ---@return Buff - new = function(id, name, playbackSpeed) - local obj = aura_env.BaseCooldown.new(id, name, playbackSpeed) - ---@cast obj Buff - setmetatable(obj, { - __index = aura_env.Buff, - }) - obj.isActive = false - return obj - end, - Update = function(self) - local duration, expiry = select(6, UnitBuff("player", self.name)) - - local isActive = true - if duration == nil or expiry == nil then - isActive = false - expiry = 0 - end - local remaining = expiry - GetTime() - - if not isActive and self.isActive then - self:playComplete() -- More like "PlayExpired" - self.announced = false - end - if not self.announced and isActive and remaining < 5 then - self:playSoon() -- More like "PlayExpiring" - self.announced = true - end - - self.isActive = isActive - self.remaining = remaining - end, - ---@param self Buff - playComplete = function(self) - local soundFile = string.format("Interface\\Sounds\\alerts\\%s_expired.ogg", self.filename) - if aura_env.debug then - print(string.format("%s expired, playing sound file at %s", self.filename, soundFile)) - end - WeakAuras.ScanEvents("PLAY_SOUND", soundFile) - end, - ---@param self Buff - playSoon = function(self) - local soundFile = string.format("Interface\\Sounds\\alerts\\%s_expiring.ogg", self.filename) - if aura_env.debug then - print(string.format("%s expiring, playing sound file at %s", self.filename, soundFile)) - end - WeakAuras.ScanEvents("PLAY_SOUND", soundFile) - end, -} - ----@type table|nil -aura_env.ActiveSet = nil - ----@type table> -aura_env.Cooldowns = { - ["Warrior"] = { - aura_env.Spell.new(107574, "Avatar", 1.6), - aura_env.Spell.new(1719, "Battle Cry", 1.6), - aura_env.Spell.new(205545, "Odyns Fury", 1.6), - aura_env.Spell.new(26297, "Berserking", 1.6), - aura_env.Spell.new(12292, "Bloodbath", 1.6), - }, - ["Warlock"] = { - aura_env.Spell.new(108416, "Dark Pact", 1.6), - aura_env.Spell.new(104773, "Unending Resolve", 1.6), - aura_env.Spell.new(196098, "Soul Harvest", 1.6), - aura_env.Item.new(5512, "Healthstone", 1.6), - aura_env.Buff.new(0, "Deadwind Harvester", 1.6), - }, -} +aura_env.debug = true + +---@class BaseCooldown +---@field name string +---@field filename string +---@field id number +---@field isOnCooldown boolean +---@field announced boolean +---@field remaining number +aura_env.BaseCooldown = { + ---@param id number + ---@param name string + ---@param playbackSpeed number? + ---@return BaseCooldown + new = function(id, name, playbackSpeed) + local self = setmetatable({}, { + __index = aura_env.BaseCooldown, + }) + self.id = id + self.name = name + name = string.gsub(name, " ", "_") + name = string.gsub(name, "'", "") + name = string.lower(name) + self.filename = name + if playbackSpeed == nil then + self.filename = string.format("1x\\%s", self.filename) + else + self.filename = string.format("%.1fx\\%s", playbackSpeed, self.filename) + end + if aura_env.debug then print(string.format("Created BaseCooldown with filename %s", self.filename)) end + self.isOnCooldown = false + self.announced = false + self.remaining = 0 + return self + end, + + ---@param self BaseCooldown + ---@param cooldownFunc fun(spellId: number): number, number + Update = function(self, cooldownFunc) + local start, duration = cooldownFunc(self.id) + local isOnCooldown = start > 0 and duration > 3 + local remaining = start + duration - GetTime() + + if not isOnCooldown and self.isOnCooldown then + self:playComplete() + self.announced = false + end + if not self.announced and isOnCooldown and remaining < 10 then + self:playSoon() + self.announced = true + end + + self.isOnCooldown = isOnCooldown + self.remaining = remaining + end, + + ---@param self BaseCooldown + playComplete = function(self) + local soundFile = string.format("Interface\\Sounds\\alerts\\%s.ogg", self.filename) + if aura_env.debug then + print(string.format("%s is off cooldown, playing sound file at %s", self.filename, soundFile)) + end + WeakAuras.ScanEvents("PLAY_SOUND", soundFile) + end, + + ---@param self BaseCooldown + playSoon = function(self) + local soundFile = string.format("Interface\\Sounds\\alerts\\%s_soon.ogg", self.filename) + if aura_env.debug then + print(string.format("%s is almost off cooldown, playing sound file at %s", self.filename, soundFile)) + end + WeakAuras.ScanEvents("PLAY_SOUND", soundFile) + end, +} + +---@class Spell:BaseCooldown +aura_env.Spell = { + ---@param id number + ---@param name string + ---@param playbackSpeed number? + ---@return Spell + new = function(id, name, playbackSpeed) + local obj = aura_env.BaseCooldown.new(id, name, playbackSpeed) + ---@cast obj Spell + setmetatable(obj, { + __index = aura_env.Spell, + }) + return obj + end, + Update = function(self) aura_env.BaseCooldown.Update(self, GetSpellCooldown) end, + playComplete = aura_env.BaseCooldown.playComplete, + playSoon = aura_env.BaseCooldown.playSoon, +} +---@class Item:BaseCooldown +aura_env.Item = { + ---@param id number + ---@param name string + ---@param playbackSpeed number? + ---@return Item + new = function(id, name, playbackSpeed) + local obj = aura_env.BaseCooldown.new(id, name, playbackSpeed) + ---@cast obj Item + setmetatable(obj, { + __index = aura_env.Item, + }) + return obj + end, + Update = function(self) aura_env.BaseCooldown.Update(self, GetItemCooldown) end, + playComplete = aura_env.BaseCooldown.playComplete, + playSoon = aura_env.BaseCooldown.playSoon, +} +---@class Buff:BaseCooldown +---@field isActive boolean +aura_env.Buff = { + ---@param id number + ---@param name string + ---@param playbackSpeed number? + ---@return Buff + new = function(id, name, playbackSpeed) + local obj = aura_env.BaseCooldown.new(id, name, playbackSpeed) + ---@cast obj Buff + setmetatable(obj, { + __index = aura_env.Buff, + }) + obj.isActive = false + return obj + end, + Update = function(self) + local duration, expiry = select(6, UnitBuff("player", self.name)) + + local isActive = true + if duration == nil or expiry == nil then + isActive = false + expiry = 0 + end + local remaining = expiry - GetTime() + + if not isActive and self.isActive then + self:playComplete() -- More like "PlayExpired" + self.announced = false + end + if not self.announced and isActive and remaining < 5 then + self:playSoon() -- More like "PlayExpiring" + self.announced = true + end + + self.isActive = isActive + self.remaining = remaining + end, + ---@param self Buff + playComplete = function(self) + local soundFile = string.format("Interface\\Sounds\\alerts\\%s_expired.ogg", self.filename) + if aura_env.debug then + print(string.format("%s expired, playing sound file at %s", self.filename, soundFile)) + end + WeakAuras.ScanEvents("PLAY_SOUND", soundFile) + end, + ---@param self Buff + playSoon = function(self) + local soundFile = string.format("Interface\\Sounds\\alerts\\%s_expiring.ogg", self.filename) + if aura_env.debug then + print(string.format("%s expiring, playing sound file at %s", self.filename, soundFile)) + end + WeakAuras.ScanEvents("PLAY_SOUND", soundFile) + end, +} + +---@type table|nil +aura_env.ActiveSet = nil + +---@type table> +aura_env.Cooldowns = { + ["Warrior"] = { + aura_env.Spell.new(107574, "Avatar", 1.6), + aura_env.Spell.new(1719, "Battle Cry", 1.6), + aura_env.Spell.new(205545, "Odyns Fury", 1.6), + aura_env.Spell.new(26297, "Berserking", 1.6), + aura_env.Spell.new(12292, "Bloodbath", 1.6), + }, + ["Warlock"] = { + aura_env.Spell.new(108416, "Dark Pact", 1.6), + aura_env.Spell.new(104773, "Unending Resolve", 1.6), + aura_env.Spell.new(196098, "Soul Harvest", 1.6), + aura_env.Item.new(5512, "Healthstone", 1.6), + aura_env.Buff.new(0, "Deadwind Harvester", 1.6), + }, +} diff --git a/WIP/Premade Automation.lua b/WeakAuras/Projects/Premade Automation.lua similarity index 96% rename from WIP/Premade Automation.lua rename to WeakAuras/Projects/Premade Automation.lua index a332245..a48c340 100644 --- a/WIP/Premade Automation.lua +++ b/WeakAuras/Projects/Premade Automation.lua @@ -1,16 +1,16 @@ -function() - C_LFGList.Search(2, "") - numResults, resultIDTable = C_LFGList.GetSearchResults(); - print(numResults, resultIDTable) - for k,v in pairs(resultIDTable) do - --local _,_,name,comment,_,iLvl,_,_,_,_,_,leaderName,numMembers = C_LFGList.GetSearchResultInfo(v); - for i = 1, 40 do - local tempvar = "" - tempvar = select(i, C_LFGList.GetSearchResultInfo(v)) - if tempvar ~= nil then - print(tempvar, i) - end - end - print("") - end +function() + C_LFGList.Search(2, "") + numResults, resultIDTable = C_LFGList.GetSearchResults(); + print(numResults, resultIDTable) + for k,v in pairs(resultIDTable) do + --local _,_,name,comment,_,iLvl,_,_,_,_,_,leaderName,numMembers = C_LFGList.GetSearchResultInfo(v); + for i = 1, 40 do + local tempvar = "" + tempvar = select(i, C_LFGList.GetSearchResultInfo(v)) + if tempvar ~= nil then + print(tempvar, i) + end + end + print("") + end end \ No newline at end of file diff --git a/Complete Projects/Legion/Premade Groups.lua b/WeakAuras/Projects/Premade Groups.lua similarity index 96% rename from Complete Projects/Legion/Premade Groups.lua rename to WeakAuras/Projects/Premade Groups.lua index e45c38c..a1c9f3c 100644 --- a/Complete Projects/Legion/Premade Groups.lua +++ b/WeakAuras/Projects/Premade Groups.lua @@ -1,63 +1,63 @@ ---LFG_LIST_SEARCH_RESULTS_RECEIVED -function() - aura_env.grouperino = {} - for k,v in ipairs(select(2, C_LFGList.GetSearchResults())) do - local id,aid,name,desc = C_LFGList.GetSearchResultInfo(v) - local leader = select(13, C_LFGList.GetSearchResultInfo(v)) - local members = select(14, C_LFGList.GetSearchResultInfo(v)) - local dungeon = C_LFGList.GetActivityInfo(aid) - local tank, heal, dps = 0, 0, 0 - for k,v in pairs(C_LFGList.GetSearchResultMemberCounts(v)) do - if k == "DAMAGER" then - dps = v - elseif k == "TANK" then - tank = v - elseif k == "HEALER" then - heal = v - end - end - local level = name:match("(%d+)") or "-" - local sname = dungeon:gsub(" (Mythic Keystone)", "") - if sname:match("Black Rook Hold") then sname = "BRH" - elseif sname:match("Court of Stars") then sname = "CoS" - elseif sname:match("Darkheart Thicket") then sname = "DHT" - elseif sname:match("Eye of Azshara") then sname = "EoA" - elseif sname:match("Halls of Valor") then sname = "HoV" - elseif sname:match("Maw of Souls") then sname = "MoS" - elseif sname:match("Neltharion's Lair") then sname = "NL" - elseif sname:match("The Arcway") then sname = "Arc" - elseif sname:match("Vault of the Wardens") then sname = "VoTW" - elseif sname:match("Cathedral of Eternal Night") then sname = "CoEN" - end - aura_env.grouperino[#aura_env.grouperino + 1] = - { - ["Name"] = name, - ["Description"] = desc, - ["Leader"] = leader, - ["Members"] = members, - ["Dungeon"] = dungeon, - ["Tank"] = tank, - ["DPS"] = dps, - ["Heal"] = heal, - - ["Dungeon2"] = sname, - ["Level"] = level, - } - end -end - ---DISPLAY -function() - local output = "" - for k,v in ipairs(aura_env.grouperino) do - if v.Level ~= "-" then - if tonumber(v.Level) > -1 then - output = output .. v.Dungeon2 .. " - " .. v.Level .. " " .. v.Members .. " " .. v.Tank .. "/" .. v.Heal .. "/" .. v.DPS .. "\n" - end - end - end - return output -end - ---INIT +--LFG_LIST_SEARCH_RESULTS_RECEIVED +function() + aura_env.grouperino = {} + for k,v in ipairs(select(2, C_LFGList.GetSearchResults())) do + local id,aid,name,desc = C_LFGList.GetSearchResultInfo(v) + local leader = select(13, C_LFGList.GetSearchResultInfo(v)) + local members = select(14, C_LFGList.GetSearchResultInfo(v)) + local dungeon = C_LFGList.GetActivityInfo(aid) + local tank, heal, dps = 0, 0, 0 + for k,v in pairs(C_LFGList.GetSearchResultMemberCounts(v)) do + if k == "DAMAGER" then + dps = v + elseif k == "TANK" then + tank = v + elseif k == "HEALER" then + heal = v + end + end + local level = name:match("(%d+)") or "-" + local sname = dungeon:gsub(" (Mythic Keystone)", "") + if sname:match("Black Rook Hold") then sname = "BRH" + elseif sname:match("Court of Stars") then sname = "CoS" + elseif sname:match("Darkheart Thicket") then sname = "DHT" + elseif sname:match("Eye of Azshara") then sname = "EoA" + elseif sname:match("Halls of Valor") then sname = "HoV" + elseif sname:match("Maw of Souls") then sname = "MoS" + elseif sname:match("Neltharion's Lair") then sname = "NL" + elseif sname:match("The Arcway") then sname = "Arc" + elseif sname:match("Vault of the Wardens") then sname = "VoTW" + elseif sname:match("Cathedral of Eternal Night") then sname = "CoEN" + end + aura_env.grouperino[#aura_env.grouperino + 1] = + { + ["Name"] = name, + ["Description"] = desc, + ["Leader"] = leader, + ["Members"] = members, + ["Dungeon"] = dungeon, + ["Tank"] = tank, + ["DPS"] = dps, + ["Heal"] = heal, + + ["Dungeon2"] = sname, + ["Level"] = level, + } + end +end + +--DISPLAY +function() + local output = "" + for k,v in ipairs(aura_env.grouperino) do + if v.Level ~= "-" then + if tonumber(v.Level) > -1 then + output = output .. v.Dungeon2 .. " - " .. v.Level .. " " .. v.Members .. " " .. v.Tank .. "/" .. v.Heal .. "/" .. v.DPS .. "\n" + end + end + end + return output +end + +--INIT aura_env.grouperino = {} \ No newline at end of file diff --git a/NewAge/PrimaryStatBar/CLEU.lua b/WeakAuras/Projects/PrimaryStatBar/CLEU.lua similarity index 97% rename from NewAge/PrimaryStatBar/CLEU.lua rename to WeakAuras/Projects/PrimaryStatBar/CLEU.lua index 398a605..d3a2230 100644 --- a/NewAge/PrimaryStatBar/CLEU.lua +++ b/WeakAuras/Projects/PrimaryStatBar/CLEU.lua @@ -1,7 +1,7 @@ -function(e, ...) - aura_env.currentStat = aura_env.GetPrimaryStat() - if aura_env.maxStat < aura_env.currentStat then - aura_env.maxStat = aura_env.currentStat - end - return true +function(e, ...) + aura_env.currentStat = aura_env.GetPrimaryStat() + if aura_env.maxStat < aura_env.currentStat then + aura_env.maxStat = aura_env.currentStat + end + return true end \ No newline at end of file diff --git a/NewAge/PrimaryStatBar/CustomDuration.lua b/WeakAuras/Projects/PrimaryStatBar/CustomDuration.lua similarity index 97% rename from NewAge/PrimaryStatBar/CustomDuration.lua rename to WeakAuras/Projects/PrimaryStatBar/CustomDuration.lua index 314bbce..0f7d858 100644 --- a/NewAge/PrimaryStatBar/CustomDuration.lua +++ b/WeakAuras/Projects/PrimaryStatBar/CustomDuration.lua @@ -1,3 +1,3 @@ -function() - return aura_env.currentStat, aura_env.maxStat, 1 +function() + return aura_env.currentStat, aura_env.maxStat, 1 end \ No newline at end of file diff --git a/NewAge/PrimaryStatBar/Export.txt b/WeakAuras/Projects/PrimaryStatBar/Export.txt similarity index 100% rename from NewAge/PrimaryStatBar/Export.txt rename to WeakAuras/Projects/PrimaryStatBar/Export.txt diff --git a/NewAge/PrimaryStatBar/INIT.lua b/WeakAuras/Projects/PrimaryStatBar/INIT.lua similarity index 95% rename from NewAge/PrimaryStatBar/INIT.lua rename to WeakAuras/Projects/PrimaryStatBar/INIT.lua index 64e9e7d..a2bdde9 100644 --- a/NewAge/PrimaryStatBar/INIT.lua +++ b/WeakAuras/Projects/PrimaryStatBar/INIT.lua @@ -1,17 +1,17 @@ -aura_env.specStatTable = { - ["Windwalker"] = 2, - ["Brewmaster"] = 2, - ["Mistweaver"] = 4, -} -aura_env.maxStat = 0 -aura_env.currentStat = 0 - -aura_env.GetPrimaryStat = function() - stat = UnitStat("player", aura_env.GetPrimStatID()) - return stat -end - -aura_env.GetPrimStatID = function() - specID, specName = GetSpecializationInfo(GetSpecialization()) - return aura_env.specStatTable[specName] -end +aura_env.specStatTable = { + ["Windwalker"] = 2, + ["Brewmaster"] = 2, + ["Mistweaver"] = 4, +} +aura_env.maxStat = 0 +aura_env.currentStat = 0 + +aura_env.GetPrimaryStat = function() + stat = UnitStat("player", aura_env.GetPrimStatID()) + return stat +end + +aura_env.GetPrimStatID = function() + specID, specName = GetSpecializationInfo(GetSpecialization()) + return aura_env.specStatTable[specName] +end diff --git a/Complete Projects/Legion/Prydaz.lua b/WeakAuras/Projects/Prydaz.lua similarity index 96% rename from Complete Projects/Legion/Prydaz.lua rename to WeakAuras/Projects/Prydaz.lua index ff9f1c6..296c91b 100644 --- a/Complete Projects/Legion/Prydaz.lua +++ b/WeakAuras/Projects/Prydaz.lua @@ -1,52 +1,52 @@ -TRIGGER -function() - local buff = UnitBuff("player", "Xavaric's Magnum Opus") or 0 - if buff ~= 0 then return true else return false end -end - -DURATION TRIGGER -function() - return aura_env.absorb, aura_env.maxAbsorb, true -end - -NAME TRIGGER -function() - local function shorten(val) - local function round(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var - end - local n = 2 - if val < 1e3 then - return round(val, n) - elseif val > 1e3 and val < 1e6 then - return round(val / 1e3, n) .. "k" - elseif val > 1e6 and val < 1e9 then - return round(val / 1e6, n) .. "M" - elseif val > 1e9 then - return round(val / 1e9, n) .. "G" - end - end - return shorten(aura_env.absorb) -end - -DISPLAY -function() - if UnitGroupRolesAssigned("player") == "TANK" then - aura_env.maxAbsorb = math.floor(UnitHealthMax("player") * 0.15) - aura_env.absorb = select(17, UnitBuff("player", "Xavaric's Magnum Opus")) or 0 - return math.floor((aura_env.absorb / aura_env.maxAbsorb) * 100) - else - aura_env.maxAbsorb = math.floor(UnitHealthMax("player") * 0.25) - aura_env.absorb = select(17, UnitBuff("player", "Xavaric's Magnum Opus")) or 0 - return math.floor((aura_env.absorb / aura_env.maxAbsorb) * 100) - end -end - -INIT -aura_env.maxAbsorb = 0 +TRIGGER +function() + local buff = UnitBuff("player", "Xavaric's Magnum Opus") or 0 + if buff ~= 0 then return true else return false end +end + +DURATION TRIGGER +function() + return aura_env.absorb, aura_env.maxAbsorb, true +end + +NAME TRIGGER +function() + local function shorten(val) + local function round(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var + end + local n = 2 + if val < 1e3 then + return round(val, n) + elseif val > 1e3 and val < 1e6 then + return round(val / 1e3, n) .. "k" + elseif val > 1e6 and val < 1e9 then + return round(val / 1e6, n) .. "M" + elseif val > 1e9 then + return round(val / 1e9, n) .. "G" + end + end + return shorten(aura_env.absorb) +end + +DISPLAY +function() + if UnitGroupRolesAssigned("player") == "TANK" then + aura_env.maxAbsorb = math.floor(UnitHealthMax("player") * 0.15) + aura_env.absorb = select(17, UnitBuff("player", "Xavaric's Magnum Opus")) or 0 + return math.floor((aura_env.absorb / aura_env.maxAbsorb) * 100) + else + aura_env.maxAbsorb = math.floor(UnitHealthMax("player") * 0.25) + aura_env.absorb = select(17, UnitBuff("player", "Xavaric's Magnum Opus")) or 0 + return math.floor((aura_env.absorb / aura_env.maxAbsorb) * 100) + end +end + +INIT +aura_env.maxAbsorb = 0 aura_env.absorb = 0 \ No newline at end of file diff --git a/FreshShit/PrydazBar/event.lua b/WeakAuras/Projects/PrydazBar/event.lua similarity index 95% rename from FreshShit/PrydazBar/event.lua rename to WeakAuras/Projects/PrydazBar/event.lua index c778ec1..dacb326 100644 --- a/FreshShit/PrydazBar/event.lua +++ b/WeakAuras/Projects/PrydazBar/event.lua @@ -1,27 +1,27 @@ --- COMBAT_LOG_EVENT_UNFILTERED --- For some reason the non lua version does not work (with status > event > spell aura applied...) -function(e, ...) - local subevent, err = CLEUParser.GetSubevent(...) - if err ~= nil then - -- print(err) - return - end - - if subevent == "SPELL_AURA_APPLIED" then - local spellid, err = CLEUParser.GetSpellId(...) - if err ~= nil then - -- print(err) - return - end - - local target, err = CLEUParser.GetDestName(...) - if err ~= nil then - -- print(err) - return - end - - if spellid == 207472 and UnitName("player") == target then - return true - end - end -end +-- COMBAT_LOG_EVENT_UNFILTERED +-- For some reason the non lua version does not work (with status > event > spell aura applied...) +function(e, ...) + local subevent, err = CLEUParser.GetSubevent(...) + if err ~= nil then + -- print(err) + return + end + + if subevent == "SPELL_AURA_APPLIED" then + local spellid, err = CLEUParser.GetSpellId(...) + if err ~= nil then + -- print(err) + return + end + + local target, err = CLEUParser.GetDestName(...) + if err ~= nil then + -- print(err) + return + end + + if spellid == 207472 and UnitName("player") == target then + return true + end + end +end diff --git a/FreshShit/PrydazBar/export b/WeakAuras/Projects/PrydazBar/export similarity index 100% rename from FreshShit/PrydazBar/export rename to WeakAuras/Projects/PrydazBar/export diff --git a/Complete Projects/Legion/PrydazOLD.lua b/WeakAuras/Projects/PrydazOLD.lua similarity index 96% rename from Complete Projects/Legion/PrydazOLD.lua rename to WeakAuras/Projects/PrydazOLD.lua index 01471c0..e674504 100644 --- a/Complete Projects/Legion/PrydazOLD.lua +++ b/WeakAuras/Projects/PrydazOLD.lua @@ -1,20 +1,20 @@ -TRIGGER -function() - local buff = UnitBuff("player", "Xavaric's Magnum Opus") or 0 - if buff ~= nil then return true else return false end -end - -DURATION -function() - local max_absorb = math.floor(UnitHealthMax("player") / 4) - local absorb = select(17, UnitBuff("player", "Xavaric's Magnum Opus")) or 0 - local percentage = math.floor((absorb / max_absorb) * 100) - return percentage, 100, true -end - -DISPLAY -function() - local max_absorb = math.floor(UnitHealthMax("player") / 4) - local absorb = select(17, UnitBuff("player", "Xavaric's Magnum Opus")) or 0 - return math.floor((absorb / max_absorb) * 100) -end +TRIGGER +function() + local buff = UnitBuff("player", "Xavaric's Magnum Opus") or 0 + if buff ~= nil then return true else return false end +end + +DURATION +function() + local max_absorb = math.floor(UnitHealthMax("player") / 4) + local absorb = select(17, UnitBuff("player", "Xavaric's Magnum Opus")) or 0 + local percentage = math.floor((absorb / max_absorb) * 100) + return percentage, 100, true +end + +DISPLAY +function() + local max_absorb = math.floor(UnitHealthMax("player") / 4) + local absorb = select(17, UnitBuff("player", "Xavaric's Magnum Opus")) or 0 + return math.floor((absorb / max_absorb) * 100) +end diff --git a/Complete Projects/Legion/PrydazTimer.lua b/WeakAuras/Projects/PrydazTimer.lua similarity index 96% rename from Complete Projects/Legion/PrydazTimer.lua rename to WeakAuras/Projects/PrydazTimer.lua index 085edfd..812276a 100644 --- a/Complete Projects/Legion/PrydazTimer.lua +++ b/WeakAuras/Projects/PrydazTimer.lua @@ -1,29 +1,29 @@ ---Pydaz fuck ---COMBAT_LOG_EVENT_UNFILTERED -function(e, ...) - local casterGUID = select(4, ...) - local spellID = select(12, ...) - local se = select(2, ...) - if se == "SPELL_AURA_APPLIED" then - if casterGUID == UnitGUID("player") and spellID == 207472 then - if WeakAurasSaved.ShittyTicker then - if WeakAurasSaved.ShittyTicker._callback then - WeakAurasSaved.ShittyTicker:Cancel() - end - WeakAurasSaved.ShittyTicker = nil - end - WeakAuras.ScanEvents("PRYDAZ_REFRESH") - WeakAurasSaved.ShittyTicker = C_Timer.NewTicker(30, function() WeakAuras.ScanEvents("PRYDAZ_REFRESH") end) - end - end -end - ---PRYDAZ_REFRESH -function(e) - return true -end - ---DURATION -function() - return 30, GetTime() + 30 -end +--Pydaz fuck +--COMBAT_LOG_EVENT_UNFILTERED +function(e, ...) + local casterGUID = select(4, ...) + local spellID = select(12, ...) + local se = select(2, ...) + if se == "SPELL_AURA_APPLIED" then + if casterGUID == UnitGUID("player") and spellID == 207472 then + if WeakAurasSaved.ShittyTicker then + if WeakAurasSaved.ShittyTicker._callback then + WeakAurasSaved.ShittyTicker:Cancel() + end + WeakAurasSaved.ShittyTicker = nil + end + WeakAuras.ScanEvents("PRYDAZ_REFRESH") + WeakAurasSaved.ShittyTicker = C_Timer.NewTicker(30, function() WeakAuras.ScanEvents("PRYDAZ_REFRESH") end) + end + end +end + +--PRYDAZ_REFRESH +function(e) + return true +end + +--DURATION +function() + return 30, GetTime() + 30 +end diff --git a/Complete Projects/Legion/PullTimer.lua b/WeakAuras/Projects/PullTimer.lua similarity index 98% rename from Complete Projects/Legion/PullTimer.lua rename to WeakAuras/Projects/PullTimer.lua index 3ffbbc4..32ee9cc 100644 --- a/Complete Projects/Legion/PullTimer.lua +++ b/WeakAuras/Projects/PullTimer.lua @@ -1,45 +1,45 @@ ---Pull timer ---CHAT_MSG_SAY HIDE_PULL CHAT_MSG_PARTY CHAT_MSG_PARTY_LEADER PLAYER_REGEN_DISABLED CHAT_MSG_ADDON ---TSU -function(allstates, e, msg, sender) - if e == "CHAT_MSG_SAY" or e == "CHAT_MSG_PARTY" or e == "CHAT_MSG_PARTY_LEADER" or e == "CHAT_MSG_ADDON" then - if e ~= "CHAT_MSG_ADDON" then - if (sender == "Angellianna" or sender == "Piinkiepiie" or sender == "Smolpotato") and msg:match("%d+") and select(1, msg:find("%d+")) == 1 and select(2, msg:find(".+")) <= 3 then - aura_env.pullTime = tonumber(msg:match("%d+")) - end - else - if msg:match("Pull") then - aura_env.pullTime = tonumber(sender:match("%d+")) - else - break - end - end - if aura_env.timer then - aura_env.timer:Cancel() - end - aura_env.timer = C_Timer.NewTimer(aura_env.pullTime, function() WeakAuras.ScanEvents("HIDE_PULL") end) - allstates[1] = { - show = true, - changed = true, - progressType = "timed", - expirationTime = GetTime() + aura_env.pullTime, - duration = aura_env.pullTime, - } - print(e, msg, sender) - return true - elseif e == "HIDE_PULL" then - allstates[1].show = false - allstates[1].changed = true - return true - elseif e == "PLAYER_REGEN_DISABLED" then - if allstates[1] then - allstates[1].show = false - allstates[1].changed = true - end - return true - end -end - ---[[ -dO0dlaGiq1LuvvgLkvNsvLxrHywue3svvLDPigMIQJjuTmkWZesnnksxtb02uKsJtHuCofPyDkKmpfG6EaCqr0cvKQhsHAIcjxuOSrqjFuHyKkuDsfOvQQmtvk3esXofPFck1qHuTufKNc1uH4Quq2QcP0xvaYzvvL3sb1DPqAVu9xvYGjhwIfdkEmGMSaxwQntr9ziz0IWPL0Qviv9AiLMTQCBbTBr9BGgUqSCk9CvmDLUoiBxr57kugVIKZRGA9kaEVcPY9vvv1(r7XDehh64ahh4ioE7Pwy9kOoog2gc52GPXC8WW2S5tVEA0ZN7yyaTbT1yWhO1r804E6Cp1apDUNgTNo3tn1tJ7RJRabZomo2myEH1RG64yyBiKBdMgZXWuSgd(aToINg3tN7Pg4WA0yW0oqtnyAMM5Mg9aNpWPnA38)nqt90O904(64hyjWrCCnJYccfXrCCi0BRoIV(64T8686iooe6TvhXxFDCq1S5kqO3oSJ44qO3wDeF91X2cW2rCCi0BRoIV(6yZfGBfm7iooe6TvhXxFDCKzr2YRZRJ44qO3wDeF91XB5151ahXXHqVT6i(6RJTGV2rCCi0BRoIV(6RJpHGGBc0TGOS954t3X2gvfmJmCK2XfiBbMI1XNTaeThhghV9ulKTDCu9wQVdfUTDUUd74TNAHfyEDCSPIy7ZzSYWoggqBqBHTzZNE9utD8wdBlSaZRJJnveBFoJvg2XWaAdA7G5tVEA0g44G6z0dLbU1zTJlVNJHYRTIcvBDehde6SGHo2xhxaU1znITIcvBrdyq7P)x85ooOEI8kdJ0tT3AZRJ)xehxZBBZL3OTTNky2tJ2XRTIcvBDehde6SGHxjQbTJbcDwWqhVdhPDmqOZcg64EwN3JJnE8KixObpYfo5FuJpyuXUq3q3Urz84jrUqdEKl0toeYFugpEsKl0Gh5c9KdH831TyjJk2quOFl5FXg6AOyJel9kQbXjN(Tyr5yGqNfm8Ahos74Zw2gksqzBhFsaogSZo(KaCmyNtcCRZAhhazlBfm74ODmqOZcggfKTSvWSJ5NzOmWTcMV)JFuuuu2EHSzQcKTC15ztIa9Ei1W2eQr6fPg23)rzeQcKTC15ztIa9Ei1WMFDoWXaHolyOJ5NzOmWTcMVxEVZw2(ycvBcv4bLjuNoh02F8JIIIQAMQPaaGcUXJNe5cn4rUWj)dofOLQPaaGcUXJNe5cn4rUqp5qi)bNc0s1uaaqb34XtICHg8ixONCiK)UUflzuXgco1MOZ8JIIIIIIIQAM6(PZbTLcaak4jZO63RwY5cCkql1PZbTLcaak4OxRz0w7i1AdNc0sD6CqBPaaGcooe8fbClli8FuLCav4b1OcllWe3H)VaJa)hvjhqD6xdCVh3eQWdQrzUMdUd)Fbgb(VFuaaqfNQKdOo9RbU3nWeQWdQrzUMdUdFIrG)7h1agav0uBIoZpkkkkkkkkkkkQcKTC15ztIa9Ei1WMca1cMHcHPT3dpOgvyzbM4o8)fye4)(XpkkkkkkkkkkkQQzQcKTC15zt2AyBP2eDMFuuuuuuuuuuuuuuuufiB5QZZMS1W2okJlzG97(p(rrrrrrrrrrrr15a(rrrrrrrrrrrrvGSLRopBYwdBlfakJVqQHTDsApgsnST3lq2YvNNnjc07HudBtOmdLbUvW89FudOUG2Kq2YzcgyjhBwN3ZD4JpyuXUq3q3Ub)hvNd(XpkkkkkkkkkkkQY7D2Y2hdh3OuaOgD8JIIIIIIIIIIIIIII6KaCmkauRfQnHFuuuuuuuuuuuuuuuuatuYO6akauRfQnHFuuuuuuuuuuuuuuuurSGOS95GmCKMcaf8Tg2bWnHFuuuuuuuuuuuuuuuu9urQ2YwbZi1WMca1i9Iud77)OmcvbYwU68SjrGEpKAyBc)OOOOOOOOOOOOOOOOcGSLTcMPaqvGSLRopBseO3dPg2MWpkkkkkkkkkkkQ)NFuuuuuuuuuuuu2EHSzQ1c18JIIIIIIIQZb8JIIIQFNUAMQPaaGc(4dgvSl0n0TBWP2eDMFuuuuuuuuL37SLTpgoUrNCsaogfakZL3P5hfffffffv59oBz7JHJB0jatuYO6akauRfQ5hfffffffLTxiBMATqn)OOOO63PRMPAkaaOGJ(TK)fBORHInsS0ROgeNC63IffCQnrN5hfffffffv1mv59oBz7JHJBuQnrN5hfffffffffffv59oBz7JHJB0jNeGJrbGYC5DA(rrrrrrrrrrrrvEVZw2(y44gDcWeLmQoGca1AHA(rrrrrrrr15a(rrrrrrrrz7fYMPwluZpkkkQohWVoh4yGjAGO1X9SoV(6yyaTbTDWmSSG51HXXBnSTW6vqDCmSneYTbtJ54AUUxNTy3oWtJ7yykarBGfmIXGpqRJ4PX905EQbE6CpnApDUNAQNg3xhNOROsSEQPZDCgkeXwrHQThpnUJhRgSj80ONp3XWaAdARpDhddOnOTXcq1ooof61P6NJHPaeTOSGq5aJbFGwhXtn1tN7RJHb0g0wCDaAp105oUg4y0HEpKAyBD8wdBlUoaTNAGPoE7PwCDaAp1at91XhhBWKbojUboEMNg3udI7R7 -]] +--Pull timer +--CHAT_MSG_SAY HIDE_PULL CHAT_MSG_PARTY CHAT_MSG_PARTY_LEADER PLAYER_REGEN_DISABLED CHAT_MSG_ADDON +--TSU +function(allstates, e, msg, sender) + if e == "CHAT_MSG_SAY" or e == "CHAT_MSG_PARTY" or e == "CHAT_MSG_PARTY_LEADER" or e == "CHAT_MSG_ADDON" then + if e ~= "CHAT_MSG_ADDON" then + if (sender == "Angellianna" or sender == "Piinkiepiie" or sender == "Smolpotato") and msg:match("%d+") and select(1, msg:find("%d+")) == 1 and select(2, msg:find(".+")) <= 3 then + aura_env.pullTime = tonumber(msg:match("%d+")) + end + else + if msg:match("Pull") then + aura_env.pullTime = tonumber(sender:match("%d+")) + else + break + end + end + if aura_env.timer then + aura_env.timer:Cancel() + end + aura_env.timer = C_Timer.NewTimer(aura_env.pullTime, function() WeakAuras.ScanEvents("HIDE_PULL") end) + allstates[1] = { + show = true, + changed = true, + progressType = "timed", + expirationTime = GetTime() + aura_env.pullTime, + duration = aura_env.pullTime, + } + print(e, msg, sender) + return true + elseif e == "HIDE_PULL" then + allstates[1].show = false + allstates[1].changed = true + return true + elseif e == "PLAYER_REGEN_DISABLED" then + if allstates[1] then + allstates[1].show = false + allstates[1].changed = true + end + return true + end +end + +--[[ +dO0dlaGiq1LuvvgLkvNsvLxrHywue3svvLDPigMIQJjuTmkWZesnnksxtb02uKsJtHuCofPyDkKmpfG6EaCqr0cvKQhsHAIcjxuOSrqjFuHyKkuDsfOvQQmtvk3esXofPFck1qHuTufKNc1uH4Quq2QcP0xvaYzvvL3sb1DPqAVu9xvYGjhwIfdkEmGMSaxwQntr9ziz0IWPL0Qviv9AiLMTQCBbTBr9BGgUqSCk9CvmDLUoiBxr57kugVIKZRGA9kaEVcPY9vvv1(r7XDehh64ahh4ioE7Pwy9kOoog2gc52GPXC8WW2S5tVEA0ZN7yyaTbT1yWhO1r804E6Cp1apDUNgTNo3tn1tJ7RJRabZomo2myEH1RG64yyBiKBdMgZXWuSgd(aToINg3tN7Pg4WA0yW0oqtnyAMM5Mg9aNpWPnA38)nqt90O904(64hyjWrCCnJYccfXrCCi0BRoIV(64T8686iooe6TvhXxFDCq1S5kqO3oSJ44qO3wDeF91X2cW2rCCi0BRoIV(6yZfGBfm7iooe6TvhXxFDCKzr2YRZRJ44qO3wDeF91XB5151ahXXHqVT6i(6RJTGV2rCCi0BRoIV(6RJpHGGBc0TGOS954t3X2gvfmJmCK2XfiBbMI1XNTaeThhghV9ulKTDCu9wQVdfUTDUUd74TNAHfyEDCSPIy7ZzSYWoggqBqBHTzZNE9utD8wdBlSaZRJJnveBFoJvg2XWaAdA7G5tVEA0g44G6z0dLbU1zTJlVNJHYRTIcvBDehde6SGHo2xhxaU1znITIcvBrdyq7P)x85ooOEI8kdJ0tT3AZRJ)xehxZBBZL3OTTNky2tJ2XRTIcvBDehde6SGHxjQbTJbcDwWqhVdhPDmqOZcg64EwN3JJnE8KixObpYfo5FuJpyuXUq3q3Urz84jrUqdEKl0toeYFugpEsKl0Gh5c9KdH831TyjJk2quOFl5FXg6AOyJel9kQbXjN(Tyr5yGqNfm8Ahos74Zw2gksqzBhFsaogSZo(KaCmyNtcCRZAhhazlBfm74ODmqOZcggfKTSvWSJ5NzOmWTcMV)JFuuuu2EHSzQcKTC15ztIa9Ei1W2eQr6fPg23)rzeQcKTC15ztIa9Ei1WMFDoWXaHolyOJ5NzOmWTcMVxEVZw2(ycvBcv4bLjuNoh02F8JIIIQAMQPaaGcUXJNe5cn4rUWj)dofOLQPaaGcUXJNe5cn4rUqp5qi)bNc0s1uaaqb34XtICHg8ixONCiK)UUflzuXgco1MOZ8JIIIIIIIQAM6(PZbTLcaak4jZO63RwY5cCkql1PZbTLcaak4OxRz0w7i1AdNc0sD6CqBPaaGcooe8fbClli8FuLCav4b1OcllWe3H)VaJa)hvjhqD6xdCVh3eQWdQrzUMdUd)Fbgb(VFuaaqfNQKdOo9RbU3nWeQWdQrzUMdUdFIrG)7h1agav0uBIoZpkkkkkkkkkkkQcKTC15ztIa9Ei1WMca1cMHcHPT3dpOgvyzbM4o8)fye4)(XpkkkkkkkkkkkQQzQcKTC15zt2AyBP2eDMFuuuuuuuuuuuuuuuufiB5QZZMS1W2okJlzG97(p(rrrrrrrrrrrr15a(rrrrrrrrrrrrvGSLRopBYwdBlfakJVqQHTDsApgsnST3lq2YvNNnjc07HudBtOmdLbUvW89FudOUG2Kq2YzcgyjhBwN3ZD4JpyuXUq3q3Ub)hvNd(XpkkkkkkkkkkkQY7D2Y2hdh3OuaOgD8JIIIIIIIIIIIIIII6KaCmkauRfQnHFuuuuuuuuuuuuuuuuatuYO6akauRfQnHFuuuuuuuuuuuuuuuurSGOS95GmCKMcaf8Tg2bWnHFuuuuuuuuuuuuuuuu9urQ2YwbZi1WMca1i9Iud77)OmcvbYwU68SjrGEpKAyBc)OOOOOOOOOOOOOOOOcGSLTcMPaqvGSLRopBseO3dPg2MWpkkkkkkkkkkkQ)NFuuuuuuuuuuuu2EHSzQ1c18JIIIIIIIQZb8JIIIQFNUAMQPaaGc(4dgvSl0n0TBWP2eDMFuuuuuuuuL37SLTpgoUrNCsaogfakZL3P5hfffffffv59oBz7JHJB0jatuYO6akauRfQ5hfffffffLTxiBMATqn)OOOO63PRMPAkaaOGJ(TK)fBORHInsS0ROgeNC63IffCQnrN5hfffffffv1mv59oBz7JHJBuQnrN5hfffffffffffv59oBz7JHJB0jNeGJrbGYC5DA(rrrrrrrrrrrrvEVZw2(y44gDcWeLmQoGca1AHA(rrrrrrrr15a(rrrrrrrrz7fYMPwluZpkkkQohWVoh4yGjAGO1X9SoV(6yyaTbTDWmSSG51HXXBnSTW6vqDCmSneYTbtJ54AUUxNTy3oWtJ7yykarBGfmIXGpqRJ4PX905EQbE6CpnApDUNAQNg3xhNOROsSEQPZDCgkeXwrHQThpnUJhRgSj80ONp3XWaAdARpDhddOnOTXcq1ooof61P6NJHPaeTOSGq5aJbFGwhXtn1tN7RJHb0g0wCDaAp105oUg4y0HEpKAyBD8wdBlUoaTNAGPoE7PwCDaAp1at91XhhBWKbojUboEMNg3udI7R7 +]] diff --git a/Complete Projects/Legion/QuestSyncer.lua b/WeakAuras/Projects/QuestSyncer.lua similarity index 97% rename from Complete Projects/Legion/QuestSyncer.lua rename to WeakAuras/Projects/QuestSyncer.lua index 6426f12..429dc5f 100644 --- a/Complete Projects/Legion/QuestSyncer.lua +++ b/WeakAuras/Projects/QuestSyncer.lua @@ -1,400 +1,400 @@ ---DISPLAY -function() - if aura_env.statee then - return aura_env.statee.text - end -end - ---QUEST_ACCEPTED QUEST_TURNED_IN CHAT_MSG_ADDON -function(e, ...) - if e == "CHAT_MSG_ADDON" then - local identifier, msg, channel, sender = ... - sender = sender:match("(.+)-") - if identifier == "DQUEST" then - local n, ID, pclass = msg:match("A(%d+)[-](%d+)[-](%d+)") - n = tonumber(n) - ID = tonumber(ID) - pclass = tonumber(pclass) - aura_env.guild[sender] = { - ["n"] = n, - ["ID"] = ID, - ["pclass"] = pclass, - } - WeakAuras.ScanEvents("DAVE_QUEST_DING") - end - elseif e == "QUEST_ACCEPTED" then - local ID = select(2, ...) - if aura_env.questDatabase[ID] then - aura_env.currentQuest = aura_env.questDatabase[ID] - SendAddonMessage("DQUEST", "A" .. aura_env.questDatabase[ID] .. "-" .. ID .. "-" .. select(3, UnitClass("player")), "GUILD") - end - --elseif e == "QUEST_TURNED_IN" then - -- local ID = select(1, ...) - -- SendAddonMessage("DQUEST", "C" .. ID, "PARTY") - end -end - ---TSU ---DAVE_QUEST_DING -function(allstates, e) - --local output = "" - for k, v in pairs(allstates) do - v.show = false - v.changed = true - end - aura_env.quests = {} - for k, v in pairs(aura_env.guild) do - if not aura_env.quests[v.n] then - aura_env.quests[v.n] = {} - end - if not aura_env.classList[k] then - aura_env.classList[k] = v.pclass - end - aura_env.quests[v.n][#aura_env.quests[v.n] + 1] = k - --print("aura_env.quests", aura_env.currentQuest) - --DevTools_Dump(aura_env.quests) - --print("aura_env.guild") - --DevTools_Dump(aura_env.guild) - --print("aura_env.quests[aura_env.currentQuest]") - --DevTools_Dump(aura_env.quests[aura_env.currentQuest]) - end - --output = output .. "Your quest\n" - if aura_env.currentQuest <= 1 then - allstates[#allstates + 1] = { - changed = true, - show = true, - text = "Your quest [" .. aura_env.currentQuest .. "/89] (" .. aura_env.questNames[aura_env.currentQuest] .. ")", - } - if aura_env.quests[aura_env.currentQuest] and type(aura_env.quests[aura_env.currentQuest]) == "table" then - for k, v in pairs(aura_env.quests[aura_env.currentQuest]) do - --output = output .. " " .. aura_env.classColor(aura_env.classList[v]) .. v .. "|r\n" - allstates[#allstates + 1] = { - changed = true, - show = true, - text = " " .. v, - pclass = aura_env.classList[v], - } - end - end - --output = output .. "Next quest\n" - allstates[#allstates + 1] = { - changed = true, - show = true, - text = "Next quest (" .. aura_env.questNames[aura_env.currentQuest + 1] .. ")", - } - if aura_env.quests[aura_env.currentQuest + 1] and type(aura_env.quests[aura_env.currentQuest + 1]) == "table" then - for k, v in pairs(aura_env.quests[aura_env.currentQuest + 1]) do - --output = output .. " " .. aura_env.classColor(aura_env.classList[v]) .. v .. "|r\n" - allstates[#allstates + 1] = { - changed = true, - show = true, - text = " " .. v, - pclass = aura_env.classList[v], - } - end - end - elseif aura_env.currentQuest > 1 and aura_env.currentQuest < 89 then - --output = output .. "Previous Quest\n" - allstates[#allstates + 1] = { - changed = true, - show = true, - text = "Previous Quest (" .. aura_env.questNames[aura_env.currentQuest - 1] .. ")", - } - if aura_env.quests[aura_env.currentQuest - 1] and type(aura_env.quests[aura_env.currentQuest - 1]) == "table" then - for k, v in pairs(aura_env.quests[aura_env.currentQuest - 1]) do - --output = output .. " " .. aura_env.classColor(aura_env.classList[v]) .. v .. "|r\n" - allstates[#allstates + 1] = { - changed = true, - show = true, - text = " " .. v, - pclass = aura_env.classList[v], - } - end - end - --output = output .. "Your quest\n" - allstates[#allstates + 1] = { - changed = true, - show = true, - text = "Your quest [" .. aura_env.currentQuest .. "/89] (" .. aura_env.questNames[aura_env.currentQuest] .. ")", - } - if aura_env.quests[aura_env.currentQuest] and type(aura_env.quests[aura_env.currentQuest]) == "table" then - for k, v in pairs(aura_env.quests[aura_env.currentQuest]) do - --output = output .. " " .. aura_env.classColor(aura_env.classList[v]) .. v .. "|r\n" - allstates[#allstates + 1] = { - changed = true, - show = true, - text = " " .. v, - pclass = aura_env.classList[v], - } - end - end - --output = output .. "Next quest\n" - allstates[#allstates + 1] = { - changed = true, - show = true, - text = "Next quest (" .. aura_env.questNames[aura_env.currentQuest + 1] .. ")", - } - if aura_env.quests[aura_env.currentQuest + 1] and type(aura_env.quests[aura_env.currentQuest + 1]) == "table" then - for k, v in pairs(aura_env.quests[aura_env.currentQuest + 1]) do - --output = output .. " " .. aura_env.classColor(aura_env.classList[v]) .. v .. "|r\n" - allstates[#allstates + 1] = { - changed = true, - show = true, - text = " " .. v, - pclass = aura_env.classList[v], - } - end - end - elseif aura_env.currentQuest == 89 then - --output = output .. "Previous Quest\n" - allstates[#allstates + 1] = { - changed = true, - show = true, - text = "Previous Quest (" .. aura_env.questNames[aura_env.currentQuest - 1] .. ")", - } - if aura_env.quests[aura_env.currentQuest - 1] and type(aura_env.quests[aura_env.currentQuest - 1]) == "table" then - for k, v in pairs(aura_env.quests[aura_env.currentQuest - 1]) do - --output = output .. " " .. aura_env.classColor(aura_env.classList[v]) .. v .. "|r\n" - allstates[#allstates + 1] = { - changed = true, - show = true, - text = " " .. v, - pclass = aura_env.classList[v], - } - end - end - --output = output .. "Your quest\n" - allstates[#allstates + 1] = { - changed = true, - show = true, - text = "Your quest [" .. aura_env.currentQuest .. "/89] (" .. aura_env.questNames[aura_env.currentQuest] .. ")", - } - if aura_env.quests[aura_env.currentQuest] and type(aura_env.quests[aura_env.currentQuest]) == "table" then - for k, v in pairs(aura_env.quests[aura_env.currentQuest]) do - --output = output .. " " .. aura_env.classColor(aura_env.classList[v]) .. v .. "|r\n" - allstates[#allstates + 1] = { - changed = true, - show = true, - text = " " .. v, - pclass = aura_env.classList[v], - } - end - end - end - --DevTools_Dump(allstates) - return true -end - ---ANIMATION / COLOR -function() - if aura_env.statee.pclass then - return aura_env.classColor(aura_env.statee.pclass) - end -end - ---INIT -local plswork = RegisterAddonMessagePrefix("DQUEST") -if plswork == false then - print("no work :( 001") -end -aura_env.currentQuest = 1 -aura_env.guild = {} -aura_env.quests = {} -aura_env.classList = {} -aura_env.questDatabase = { - [47835] = 1, - [47867] = 2, - [47223] = 3, - [47224] = 4, - [48440] = 5, - [46938] = 6, - [47589] = 7, - [46297] = 8, - [48483] = 9, - [47627] = 10, - [47641] = 11, - [46732] = 12, - [46816] = 13, - [46839] = 14, - [46840] = 15, - [46841] = 16, - [46842] = 17, - [46843] = 18, - [48500] = 19, - [47431] = 20, - [46213] = 21, - [40238] = 22, - [47541] = 23, - [47508] = 24, - [47771] = 25, - [47526] = 26, - [47754] = 27, - [47652] = 28, - [47653] = 29, - [47743] = 30, - [49143] = 31, - [47287] = 32, - [48559] = 33, - [48199] = 34, - [48200] = 35, - [48201] = 36, - [48202] = 37, - [47473] = 38, - [47889] = 39, - [47890] = 40, - [47891] = 41, - [47892] = 42, - [47986] = 43, - [47987] = 44, - [47988] = 45, - [47991] = 46, - [47990] = 47, - [47989] = 48, - [47992] = 49, - [47993] = 50, - [47994] = 51, - [48081] = 52, - [46815] = 53, - [46818] = 54, - [46834] = 55, - [47066] = 56, - [46941] = 57, - [47686] = 58, - [47882] = 59, - [47688] = 60, - [47883] = 61, - [47689] = 62, - [47685] = 63, - [47687] = 64, - [47690] = 65, - [48107] = 66, - [48461] = 67, - [48344] = 68, - [47691] = 69, - [47854] = 70, - [47995] = 71, - [47853] = 72, - [48345] = 73, - [47855] = 74, - [47856] = 75, - [47416] = 76, - [47238] = 77, - [40761] = 78, - [47101] = 79, - [47180] = 80, - [47100] = 81, - [47183] = 82, - [47184] = 83, - [47203] = 84, - [47217] = 85, - [47218] = 86, - [47219] = 87, - [47220] = 88, - [48560] = 89, -} -aura_env.questNames = { - [1] = "The Hand of Fate", - [2] = "Two If By Sea", - [3] = "Light's Exodus", - [4] = "The Vindicaar", - [5] = "Into the Night", - [6] = "Alone in the Abyss", - [7] = "Righteous Fury", - [8] = "Overwhelming Power", - [9] = "A Stranger's Plea", - [10] = "Vengeance", - [11] = "Sign of Resistance", - [12] = "The Prophet's Gambit", - [13] = "Rendezvous", - [14] = "From Darkness", - [15] = "Prisoners No More", - [16] = "Threat Reduction", - [17] = "A Strike at the Heart", - [18] = "Return to the Vindicaar", - [19] = "A Moment of Respite", - [20] = "Gathering Light", - [21] = "Crystals Not Included", - [22] = "A Grim Equation", - [23] = "The Best Prevention", - [24] = "Fire at Will", - [25] = "Locating the Longshot", - [26] = "Bringing the Big Guns", - [27] = "Lightly Roasted", - [28] = "The Light Mother", - [29] = "Light's Return", - [30] = "The Child of Light and Shadow", - [31] = "Essence of the Light Mother", - [32] = "The Vindicaar Matrix Core", - [33] = "An Offering of Light", - [34] = "The Burning Heart", - [35] = "Securing a Foothold", - [36] = "Reinforce Light's Purchase", - [37] = "Reinforce the Veiled Den", - [38] = "Sizing Up The Opposition", - [39] = "The Speaker Calls", - [40] = "Visions of Torment", - [41] = "Dire News", - [42] = "Storming the Citadel", - [43] = "Scars of the Past", - [44] = "Preventive Measures", - [45] = "Chaos Theory", - [46] = "Dark Machinations", - [47] = "A Touch of Fel", - [48] = "Heralds of Apocalypse", - [49] = "Dawn of Justice", - [50] = "Lord of the Spire", - [51] = "Forming a Bond", - [52] = "A Floating Ruin", - [53] = "Mac'Aree, Jewel of Argus", - [54] = "Defenseless and Afraid", - [55] = "Khazaduum, First of His Name", - [56] = "Consecrating Ground", - [57] = "The Path Forward", - [58] = "Not-So-Humble Beginnings", - [59] = "Conservation of Magic", - [60] = "Invasive Species", - [61] = "The Longest Vigil", - [62] = "Gatekeeper's Challenge: Tenacity", - [63] = "Gatekeeper's Challenge: Cunning", - [64] = "Gatekeeper's Challenge: Mastery", - [65] = "The Defiler's Legacy", - [66] = "The Sigil of Awakening", - [67] = "Where They Least Expect It", - [68] = "We Have a Problem", - [69] = "A Non-Prophet Organization ", - [70] = "Wrath of the Hight Exarch", - [71] = "Overt Ops", - [72] = "Flanking Maneuvers", - [73] = "Talgath's Forces", - [74] = "What Might Have Been", - [75] = "Across the Universe", - [76] = "Shadow of the Triumvirate", - [77] = "The Seat of the Triumvirate", - [78] = "Whispers from Oronaar", - [79] = "Arkhaan's Prayers", - [80] = "The Pulsing Madness", - [81] = "Arkhaan's Pain", - [82] = "Arkhaan's Plan", - [83] = "Arkhaan's Peril", - [84] = "Throwing Shade", - [85] = "Sources of Darkness", - [86] = "The Shadowguard Incursion", - [87] = "A Vessel Made Ready", - [88] = "A Beacon in the Dark", - [89] = "An Offering of Shadow", -} -aura_env.classColor = function(class) - if class == 1 then return 0.78, 0.61, 0.43 elseif - class == 2 then return 0.96, 0.55, 0.73 elseif - class == 3 then return 0.67, 0.83, 0.45 elseif - class == 4 then return 1, 0.96, 0.41 elseif - class == 5 then return 1, 1, 1 elseif - class == 6 then return 0.77, 0.12, 0.23 elseif - class == 7 then return 0, 0.44, 0.87 elseif - class == 8 then return 0.25, 0.78, 0.92 elseif - class == 9 then return 0.53, 0.53, 0.93 elseif - class == 10 then return 0, 1, 0.59 elseif - class == 11 then return 1, 0.49, 0.04 elseif - class == 12 then return 0.64, 0.19, 0.79 else - return 1, 1, 1 end -end +--DISPLAY +function() + if aura_env.statee then + return aura_env.statee.text + end +end + +--QUEST_ACCEPTED QUEST_TURNED_IN CHAT_MSG_ADDON +function(e, ...) + if e == "CHAT_MSG_ADDON" then + local identifier, msg, channel, sender = ... + sender = sender:match("(.+)-") + if identifier == "DQUEST" then + local n, ID, pclass = msg:match("A(%d+)[-](%d+)[-](%d+)") + n = tonumber(n) + ID = tonumber(ID) + pclass = tonumber(pclass) + aura_env.guild[sender] = { + ["n"] = n, + ["ID"] = ID, + ["pclass"] = pclass, + } + WeakAuras.ScanEvents("DAVE_QUEST_DING") + end + elseif e == "QUEST_ACCEPTED" then + local ID = select(2, ...) + if aura_env.questDatabase[ID] then + aura_env.currentQuest = aura_env.questDatabase[ID] + SendAddonMessage("DQUEST", "A" .. aura_env.questDatabase[ID] .. "-" .. ID .. "-" .. select(3, UnitClass("player")), "GUILD") + end + --elseif e == "QUEST_TURNED_IN" then + -- local ID = select(1, ...) + -- SendAddonMessage("DQUEST", "C" .. ID, "PARTY") + end +end + +--TSU +--DAVE_QUEST_DING +function(allstates, e) + --local output = "" + for k, v in pairs(allstates) do + v.show = false + v.changed = true + end + aura_env.quests = {} + for k, v in pairs(aura_env.guild) do + if not aura_env.quests[v.n] then + aura_env.quests[v.n] = {} + end + if not aura_env.classList[k] then + aura_env.classList[k] = v.pclass + end + aura_env.quests[v.n][#aura_env.quests[v.n] + 1] = k + --print("aura_env.quests", aura_env.currentQuest) + --DevTools_Dump(aura_env.quests) + --print("aura_env.guild") + --DevTools_Dump(aura_env.guild) + --print("aura_env.quests[aura_env.currentQuest]") + --DevTools_Dump(aura_env.quests[aura_env.currentQuest]) + end + --output = output .. "Your quest\n" + if aura_env.currentQuest <= 1 then + allstates[#allstates + 1] = { + changed = true, + show = true, + text = "Your quest [" .. aura_env.currentQuest .. "/89] (" .. aura_env.questNames[aura_env.currentQuest] .. ")", + } + if aura_env.quests[aura_env.currentQuest] and type(aura_env.quests[aura_env.currentQuest]) == "table" then + for k, v in pairs(aura_env.quests[aura_env.currentQuest]) do + --output = output .. " " .. aura_env.classColor(aura_env.classList[v]) .. v .. "|r\n" + allstates[#allstates + 1] = { + changed = true, + show = true, + text = " " .. v, + pclass = aura_env.classList[v], + } + end + end + --output = output .. "Next quest\n" + allstates[#allstates + 1] = { + changed = true, + show = true, + text = "Next quest (" .. aura_env.questNames[aura_env.currentQuest + 1] .. ")", + } + if aura_env.quests[aura_env.currentQuest + 1] and type(aura_env.quests[aura_env.currentQuest + 1]) == "table" then + for k, v in pairs(aura_env.quests[aura_env.currentQuest + 1]) do + --output = output .. " " .. aura_env.classColor(aura_env.classList[v]) .. v .. "|r\n" + allstates[#allstates + 1] = { + changed = true, + show = true, + text = " " .. v, + pclass = aura_env.classList[v], + } + end + end + elseif aura_env.currentQuest > 1 and aura_env.currentQuest < 89 then + --output = output .. "Previous Quest\n" + allstates[#allstates + 1] = { + changed = true, + show = true, + text = "Previous Quest (" .. aura_env.questNames[aura_env.currentQuest - 1] .. ")", + } + if aura_env.quests[aura_env.currentQuest - 1] and type(aura_env.quests[aura_env.currentQuest - 1]) == "table" then + for k, v in pairs(aura_env.quests[aura_env.currentQuest - 1]) do + --output = output .. " " .. aura_env.classColor(aura_env.classList[v]) .. v .. "|r\n" + allstates[#allstates + 1] = { + changed = true, + show = true, + text = " " .. v, + pclass = aura_env.classList[v], + } + end + end + --output = output .. "Your quest\n" + allstates[#allstates + 1] = { + changed = true, + show = true, + text = "Your quest [" .. aura_env.currentQuest .. "/89] (" .. aura_env.questNames[aura_env.currentQuest] .. ")", + } + if aura_env.quests[aura_env.currentQuest] and type(aura_env.quests[aura_env.currentQuest]) == "table" then + for k, v in pairs(aura_env.quests[aura_env.currentQuest]) do + --output = output .. " " .. aura_env.classColor(aura_env.classList[v]) .. v .. "|r\n" + allstates[#allstates + 1] = { + changed = true, + show = true, + text = " " .. v, + pclass = aura_env.classList[v], + } + end + end + --output = output .. "Next quest\n" + allstates[#allstates + 1] = { + changed = true, + show = true, + text = "Next quest (" .. aura_env.questNames[aura_env.currentQuest + 1] .. ")", + } + if aura_env.quests[aura_env.currentQuest + 1] and type(aura_env.quests[aura_env.currentQuest + 1]) == "table" then + for k, v in pairs(aura_env.quests[aura_env.currentQuest + 1]) do + --output = output .. " " .. aura_env.classColor(aura_env.classList[v]) .. v .. "|r\n" + allstates[#allstates + 1] = { + changed = true, + show = true, + text = " " .. v, + pclass = aura_env.classList[v], + } + end + end + elseif aura_env.currentQuest == 89 then + --output = output .. "Previous Quest\n" + allstates[#allstates + 1] = { + changed = true, + show = true, + text = "Previous Quest (" .. aura_env.questNames[aura_env.currentQuest - 1] .. ")", + } + if aura_env.quests[aura_env.currentQuest - 1] and type(aura_env.quests[aura_env.currentQuest - 1]) == "table" then + for k, v in pairs(aura_env.quests[aura_env.currentQuest - 1]) do + --output = output .. " " .. aura_env.classColor(aura_env.classList[v]) .. v .. "|r\n" + allstates[#allstates + 1] = { + changed = true, + show = true, + text = " " .. v, + pclass = aura_env.classList[v], + } + end + end + --output = output .. "Your quest\n" + allstates[#allstates + 1] = { + changed = true, + show = true, + text = "Your quest [" .. aura_env.currentQuest .. "/89] (" .. aura_env.questNames[aura_env.currentQuest] .. ")", + } + if aura_env.quests[aura_env.currentQuest] and type(aura_env.quests[aura_env.currentQuest]) == "table" then + for k, v in pairs(aura_env.quests[aura_env.currentQuest]) do + --output = output .. " " .. aura_env.classColor(aura_env.classList[v]) .. v .. "|r\n" + allstates[#allstates + 1] = { + changed = true, + show = true, + text = " " .. v, + pclass = aura_env.classList[v], + } + end + end + end + --DevTools_Dump(allstates) + return true +end + +--ANIMATION / COLOR +function() + if aura_env.statee.pclass then + return aura_env.classColor(aura_env.statee.pclass) + end +end + +--INIT +local plswork = RegisterAddonMessagePrefix("DQUEST") +if plswork == false then + print("no work :( 001") +end +aura_env.currentQuest = 1 +aura_env.guild = {} +aura_env.quests = {} +aura_env.classList = {} +aura_env.questDatabase = { + [47835] = 1, + [47867] = 2, + [47223] = 3, + [47224] = 4, + [48440] = 5, + [46938] = 6, + [47589] = 7, + [46297] = 8, + [48483] = 9, + [47627] = 10, + [47641] = 11, + [46732] = 12, + [46816] = 13, + [46839] = 14, + [46840] = 15, + [46841] = 16, + [46842] = 17, + [46843] = 18, + [48500] = 19, + [47431] = 20, + [46213] = 21, + [40238] = 22, + [47541] = 23, + [47508] = 24, + [47771] = 25, + [47526] = 26, + [47754] = 27, + [47652] = 28, + [47653] = 29, + [47743] = 30, + [49143] = 31, + [47287] = 32, + [48559] = 33, + [48199] = 34, + [48200] = 35, + [48201] = 36, + [48202] = 37, + [47473] = 38, + [47889] = 39, + [47890] = 40, + [47891] = 41, + [47892] = 42, + [47986] = 43, + [47987] = 44, + [47988] = 45, + [47991] = 46, + [47990] = 47, + [47989] = 48, + [47992] = 49, + [47993] = 50, + [47994] = 51, + [48081] = 52, + [46815] = 53, + [46818] = 54, + [46834] = 55, + [47066] = 56, + [46941] = 57, + [47686] = 58, + [47882] = 59, + [47688] = 60, + [47883] = 61, + [47689] = 62, + [47685] = 63, + [47687] = 64, + [47690] = 65, + [48107] = 66, + [48461] = 67, + [48344] = 68, + [47691] = 69, + [47854] = 70, + [47995] = 71, + [47853] = 72, + [48345] = 73, + [47855] = 74, + [47856] = 75, + [47416] = 76, + [47238] = 77, + [40761] = 78, + [47101] = 79, + [47180] = 80, + [47100] = 81, + [47183] = 82, + [47184] = 83, + [47203] = 84, + [47217] = 85, + [47218] = 86, + [47219] = 87, + [47220] = 88, + [48560] = 89, +} +aura_env.questNames = { + [1] = "The Hand of Fate", + [2] = "Two If By Sea", + [3] = "Light's Exodus", + [4] = "The Vindicaar", + [5] = "Into the Night", + [6] = "Alone in the Abyss", + [7] = "Righteous Fury", + [8] = "Overwhelming Power", + [9] = "A Stranger's Plea", + [10] = "Vengeance", + [11] = "Sign of Resistance", + [12] = "The Prophet's Gambit", + [13] = "Rendezvous", + [14] = "From Darkness", + [15] = "Prisoners No More", + [16] = "Threat Reduction", + [17] = "A Strike at the Heart", + [18] = "Return to the Vindicaar", + [19] = "A Moment of Respite", + [20] = "Gathering Light", + [21] = "Crystals Not Included", + [22] = "A Grim Equation", + [23] = "The Best Prevention", + [24] = "Fire at Will", + [25] = "Locating the Longshot", + [26] = "Bringing the Big Guns", + [27] = "Lightly Roasted", + [28] = "The Light Mother", + [29] = "Light's Return", + [30] = "The Child of Light and Shadow", + [31] = "Essence of the Light Mother", + [32] = "The Vindicaar Matrix Core", + [33] = "An Offering of Light", + [34] = "The Burning Heart", + [35] = "Securing a Foothold", + [36] = "Reinforce Light's Purchase", + [37] = "Reinforce the Veiled Den", + [38] = "Sizing Up The Opposition", + [39] = "The Speaker Calls", + [40] = "Visions of Torment", + [41] = "Dire News", + [42] = "Storming the Citadel", + [43] = "Scars of the Past", + [44] = "Preventive Measures", + [45] = "Chaos Theory", + [46] = "Dark Machinations", + [47] = "A Touch of Fel", + [48] = "Heralds of Apocalypse", + [49] = "Dawn of Justice", + [50] = "Lord of the Spire", + [51] = "Forming a Bond", + [52] = "A Floating Ruin", + [53] = "Mac'Aree, Jewel of Argus", + [54] = "Defenseless and Afraid", + [55] = "Khazaduum, First of His Name", + [56] = "Consecrating Ground", + [57] = "The Path Forward", + [58] = "Not-So-Humble Beginnings", + [59] = "Conservation of Magic", + [60] = "Invasive Species", + [61] = "The Longest Vigil", + [62] = "Gatekeeper's Challenge: Tenacity", + [63] = "Gatekeeper's Challenge: Cunning", + [64] = "Gatekeeper's Challenge: Mastery", + [65] = "The Defiler's Legacy", + [66] = "The Sigil of Awakening", + [67] = "Where They Least Expect It", + [68] = "We Have a Problem", + [69] = "A Non-Prophet Organization ", + [70] = "Wrath of the Hight Exarch", + [71] = "Overt Ops", + [72] = "Flanking Maneuvers", + [73] = "Talgath's Forces", + [74] = "What Might Have Been", + [75] = "Across the Universe", + [76] = "Shadow of the Triumvirate", + [77] = "The Seat of the Triumvirate", + [78] = "Whispers from Oronaar", + [79] = "Arkhaan's Prayers", + [80] = "The Pulsing Madness", + [81] = "Arkhaan's Pain", + [82] = "Arkhaan's Plan", + [83] = "Arkhaan's Peril", + [84] = "Throwing Shade", + [85] = "Sources of Darkness", + [86] = "The Shadowguard Incursion", + [87] = "A Vessel Made Ready", + [88] = "A Beacon in the Dark", + [89] = "An Offering of Shadow", +} +aura_env.classColor = function(class) + if class == 1 then return 0.78, 0.61, 0.43 elseif + class == 2 then return 0.96, 0.55, 0.73 elseif + class == 3 then return 0.67, 0.83, 0.45 elseif + class == 4 then return 1, 0.96, 0.41 elseif + class == 5 then return 1, 1, 1 elseif + class == 6 then return 0.77, 0.12, 0.23 elseif + class == 7 then return 0, 0.44, 0.87 elseif + class == 8 then return 0.25, 0.78, 0.92 elseif + class == 9 then return 0.53, 0.53, 0.93 elseif + class == 10 then return 0, 1, 0.59 elseif + class == 11 then return 1, 0.49, 0.04 elseif + class == 12 then return 0.64, 0.19, 0.79 else + return 1, 1, 1 end +end diff --git a/FreshShit/RIOChecker/display.lua b/WeakAuras/Projects/RIOChecker/display.lua similarity index 95% rename from FreshShit/RIOChecker/display.lua rename to WeakAuras/Projects/RIOChecker/display.lua index eb05861..bead550 100644 --- a/FreshShit/RIOChecker/display.lua +++ b/WeakAuras/Projects/RIOChecker/display.lua @@ -1,3 +1,3 @@ -function() - return aura_env.displayString +function() + return aura_env.displayString end \ No newline at end of file diff --git a/FreshShit/RIOChecker/event.lua b/WeakAuras/Projects/RIOChecker/event.lua similarity index 97% rename from FreshShit/RIOChecker/event.lua rename to WeakAuras/Projects/RIOChecker/event.lua index be89365..dc31c3b 100644 --- a/FreshShit/RIOChecker/event.lua +++ b/WeakAuras/Projects/RIOChecker/event.lua @@ -1,40 +1,40 @@ --- CHAT_MSG_SYSTEM -function(e, msg) - if e == "OPTIONS" then - WeakAuras.ScanEvents("CHAT_MSG_SYSTEM", "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ") - WeakAuras.ScanEvents("CHAT_MSG_SYSTEM", "-> Return to Karazhan: Lower / isDPS / +++5 / 8m29s / 59.1 ") - WeakAuras.ScanEvents("CHAT_MSG_SYSTEM", "-> Cathedral of Eternal Night / isDPS / +++2 / 9m41s / 23.4 ") - WeakAuras.ScanEvents("CHAT_MSG_SYSTEM", "-> Seat of the Triumvirate / isDPS / +++14 / 14m54s / 165.5 ") - WeakAuras.ScanEvents("CHAT_MSG_SYSTEM", "-> Return to Karazhan: Upper / isDPS / +++11 / 10m23s / 128.0 ") - WeakAuras.ScanEvents("CHAT_MSG_SYSTEM", "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ") - end - if not msg then return end - if msg:find("stats not found") then - aura_env.messageSent = false - return - end - if msg:find("Incorrect syntax") and aura_env.messageSent then - local name = UnitName("target") - if not name then return end - if not aura_env.me then aura_env.me = UnitName("player") end - local msg = ".ch " .. name - C_Timer.After(0.5, function() - SendChatMessage(msg, "WHISPER", nil, aura_env.me) - end) - return - end - if string.byte(msg, 1) + string.byte(msg, 6) == 77 then - aura_env.messageSent = false - aura_env.reading = not aura_env.reading - if aura_env.reading then - aura_env.fullMessage = {} - else - aura_env.Process() - end - - return - end - if aura_env.reading then - aura_env.fullMessage[#aura_env.fullMessage + 1] = msg - end +-- CHAT_MSG_SYSTEM +function(e, msg) + if e == "OPTIONS" then + WeakAuras.ScanEvents("CHAT_MSG_SYSTEM", "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ") + WeakAuras.ScanEvents("CHAT_MSG_SYSTEM", "-> Return to Karazhan: Lower / isDPS / +++5 / 8m29s / 59.1 ") + WeakAuras.ScanEvents("CHAT_MSG_SYSTEM", "-> Cathedral of Eternal Night / isDPS / +++2 / 9m41s / 23.4 ") + WeakAuras.ScanEvents("CHAT_MSG_SYSTEM", "-> Seat of the Triumvirate / isDPS / +++14 / 14m54s / 165.5 ") + WeakAuras.ScanEvents("CHAT_MSG_SYSTEM", "-> Return to Karazhan: Upper / isDPS / +++11 / 10m23s / 128.0 ") + WeakAuras.ScanEvents("CHAT_MSG_SYSTEM", "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ") + end + if not msg then return end + if msg:find("stats not found") then + aura_env.messageSent = false + return + end + if msg:find("Incorrect syntax") and aura_env.messageSent then + local name = UnitName("target") + if not name then return end + if not aura_env.me then aura_env.me = UnitName("player") end + local msg = ".ch " .. name + C_Timer.After(0.5, function() + SendChatMessage(msg, "WHISPER", nil, aura_env.me) + end) + return + end + if string.byte(msg, 1) + string.byte(msg, 6) == 77 then + aura_env.messageSent = false + aura_env.reading = not aura_env.reading + if aura_env.reading then + aura_env.fullMessage = {} + else + aura_env.Process() + end + + return + end + if aura_env.reading then + aura_env.fullMessage[#aura_env.fullMessage + 1] = msg + end end \ No newline at end of file diff --git a/FreshShit/RIOChecker/event2.lua b/WeakAuras/Projects/RIOChecker/event2.lua similarity index 97% rename from FreshShit/RIOChecker/event2.lua rename to WeakAuras/Projects/RIOChecker/event2.lua index fa0924c..8a1fadc 100644 --- a/FreshShit/RIOChecker/event2.lua +++ b/WeakAuras/Projects/RIOChecker/event2.lua @@ -1,15 +1,15 @@ --- UNIT_TARGET -function(e, source) - if not source then return end - if not source == "player" then return end - if not UnitExists("target") then return end - if not UnitIsPlayer("target") then return end - local name = UnitName("target") - if not name then return end - if not aura_env.me then aura_env.m = UnitName("player") end - if not aura_env.previousTarget then aura_env.previousTarget = name end - if aura_env.previousTarget == name then return end - local msg = ".ch " .. name - SendChatMessage(msg, "WHISPER", nil, aura_env.me) - aura_env.messageSent = true +-- UNIT_TARGET +function(e, source) + if not source then return end + if not source == "player" then return end + if not UnitExists("target") then return end + if not UnitIsPlayer("target") then return end + local name = UnitName("target") + if not name then return end + if not aura_env.me then aura_env.m = UnitName("player") end + if not aura_env.previousTarget then aura_env.previousTarget = name end + if aura_env.previousTarget == name then return end + local msg = ".ch " .. name + SendChatMessage(msg, "WHISPER", nil, aura_env.me) + aura_env.messageSent = true end \ No newline at end of file diff --git a/FreshShit/RIOChecker/export b/WeakAuras/Projects/RIOChecker/export similarity index 100% rename from FreshShit/RIOChecker/export rename to WeakAuras/Projects/RIOChecker/export diff --git a/FreshShit/RIOChecker/init.lua b/WeakAuras/Projects/RIOChecker/init.lua similarity index 96% rename from FreshShit/RIOChecker/init.lua rename to WeakAuras/Projects/RIOChecker/init.lua index 5e2fefe..734d30d 100644 --- a/FreshShit/RIOChecker/init.lua +++ b/WeakAuras/Projects/RIOChecker/init.lua @@ -1,219 +1,219 @@ -aura_env.me = UnitName("player") -aura_env.reading = false -aura_env.fullMessage = {} -aura_env.displayString = "" -aura_env.messageSent = false -aura_env.previousTarget = "" - ----@class ScoreColorer ----@field colors table ----@field breakpoints table -aura_env.ScoreColorer = { - --- Make sure colors and breakpoints always have the same number of entries! VERY IMPORTANT! - ---@type table - colors = { - { r = 0.62, g = 0.62, b = 0.62 }, -- Grey - { r = 1, g = 1, b = 1 }, -- White - { r = 0.12, g = 1, b = 0 }, -- Green - { r = 0, g = 0.44, b = 0.87 }, -- Blue - { r = 0.64, g = 0.21, b = 0.93 }, -- Purple - { r = 1, g = 0.5, b = 0 }, -- Orange - { r = 1, g = 0.2, b = 0.23 }, - { r = 0, g = 0.8, b = 1.0 }, -- Blizzard Blue - }, - breakpoints = { 0, 100, 200, 300, 400, 550, 750, 9999 }, - - ---@param value number - ---@return Color, nil|string - Interpolate = function(value) - local color = { r = 0, g = 0, b = 0 } - - ---@type table> - local bracket = { { 0, 0 }, { 1, 1 } } - for i = 1, #aura_env.ScoreColorer.breakpoints do - if value < aura_env.ScoreColorer.breakpoints[i] then - bracket[2] = { i, aura_env.ScoreColorer.breakpoints[i] } - break - end - bracket[1] = { i, aura_env.ScoreColorer.breakpoints[i] } - end - - ---@type Color - local startColor = aura_env.ScoreColorer.colors[bracket[1][1]] - ---@type Color - local endColor = aura_env.ScoreColorer.colors[bracket[2][1]] - - local fraction = (value - bracket[1][2]) / (bracket[2][2] - bracket[1][2]) - - for k, v in pairs(startColor) do - color[k] = aura_env.ScoreColorer.lerp(v, endColor[k], fraction) - end - - return color, nil - end, - - ---@param a number - ---@param b number - ---@param t number - ---@return number - lerp = function(a, b, t) return a * (1 - t) + b * t end, -} ----@class KeyLevel ----@field colors table ----@field breakpoints table -aura_env.KeyLevel = { - --- Make sure colors and breakpoints always have the same number of entries! VERY IMPORTANT! - ---@type table - colors = { - { r = 0.62, g = 0.62, b = 0.62 }, -- Grey - { r = 1, g = 1, b = 1 }, -- White - { r = 0.12, g = 1, b = 0 }, -- Green - { r = 0, g = 0.44, b = 0.87 }, -- Blue - { r = 0.64, g = 0.21, b = 0.93 }, -- Purple - { r = 1, g = 0.5, b = 0 }, -- Orange - { r = 1, g = 0.2, b = 0.23 }, - { r = 0, g = 0.8, b = 1.0 }, -- Blizzard Blue - }, - breakpoints = { 1, 10, 15, 20, 25, 29, 33, 9999 }, - - ---@param value number - ---@return Color, nil|string - Interpolate = function(value) - local color = { r = 0, g = 0, b = 0 } - - ---@type table> - local bracket = { { 0, 0 }, { 1, 1 } } - for i = 1, #aura_env.KeyLevel.breakpoints do - if value < aura_env.KeyLevel.breakpoints[i] then - bracket[2] = { i, aura_env.KeyLevel.breakpoints[i] } - break - end - bracket[1] = { i, aura_env.KeyLevel.breakpoints[i] } - end - - ---@type Color - local startColor = aura_env.KeyLevel.colors[bracket[1][1]] - ---@type Color - local endColor = aura_env.KeyLevel.colors[bracket[2][1]] - - local fraction = (value - bracket[1][2]) / (bracket[2][2] - bracket[1][2]) - - for k, v in pairs(startColor) do - color[k] = aura_env.KeyLevel.lerp(v, endColor[k], fraction) - end - - return color, nil - end, - - ---@param a number - ---@param b number - ---@param t number - ---@return number - lerp = function(a, b, t) return a * (1 - t) + b * t end, -} - ----@class Key ----@field name string ----@field role string ----@field level string ----@field time string ----@field score number -Key = { - ---@return Key - ---@param name string - ---@param role string - ---@param level string - ---@param time string - ---@param score string - new = function(name, role, level, time, score) - local self = setmetatable({}, { - __index = Key, - __tostring = function(self) - local score = self.score - local keyLevel = tonumber(self.level:match("%d+$")) or 0 - - local formattedScore, err = aura_env.ScoreColorer.Interpolate(self.score) - if not err then - score = string.format( - "|cff%02x%02x%02x%d|r", - formattedScore.r * 255, - formattedScore.g * 255, - formattedScore.b * 255, - self.score - ) - end - - local formattedLevel, err = aura_env.KeyLevel.Interpolate(keyLevel) - if not err then - level = string.format( - "|cff%02x%02x%02x%s|r", - formattedLevel.r * 255, - formattedLevel.g * 255, - formattedLevel.b * 255, - self.level - ) - end - - return string.format("%-30s %-10s %-10s %-10s %-10s", self.name, self.role, level, self.time, score) - end, - }) - self.name = name - self.role = role - self.level = level - self.time = time - self.score = tonumber(score) or 0 - return self - end, - ---@return string - hash = function(self) return table.concat({ self.name, self.role, self.level, self.time, self.score }, "/") end, - - ---@param self Key - ---@param other Key - ---@return boolean - compareTo = function(self, other) - if not self then return true end - if not other then return false end - if self.name <= other.name then return true end - return false - end, - ---@param self Key - register = function(self) - if not WeakAurasSaved.Cyka then WeakAurasSaved.Cyka = {} end - if not WeakAurasSaved.Cyka.MData then WeakAurasSaved.Cyka.MData = {} end - WeakAurasSaved.Cyka.MData[self:hash()] = self - end, -} - ----@param keys Key[] -local function render(keys) - local str = {} - for k, v in ipairs(keys) do - str[#str + 1] = tostring(v) - end - aura_env.displayString = table.concat(str, "\n") -end - -function aura_env.Process() - ---@type Key[] - local keys = {} - for k, msg in ipairs(aura_env.fullMessage) do - local key, role, level, time, score = string.match(msg, "^->([^/]+)/([^/]+)/([^/]+)/([^/]+)/(.+)$") - - key = string.gsub(key, "^%s+", "") - key = string.gsub(key, "%s+$", "") - role = string.gsub(role, "%s+", "") - level = string.gsub(level, "%s+", "") - time = string.gsub(time, "%s+", "") - score = string.gsub(score, "%s+", "") - - local keyObj = Key.new(key, role, level, time, score) - keyObj:register() - if key then keys[#keys + 1] = keyObj end - end - table.sort(keys, Key.compareTo) - render(keys) -end - --- /run WeakAurasSaved.Cyka.MData = {} --- /dump WeakAurasSaved.Cyka.MData --- /dump InterfaceGUI.Cashe_1[UnitGUID("player")] +aura_env.me = UnitName("player") +aura_env.reading = false +aura_env.fullMessage = {} +aura_env.displayString = "" +aura_env.messageSent = false +aura_env.previousTarget = "" + +---@class ScoreColorer +---@field colors table +---@field breakpoints table +aura_env.ScoreColorer = { + --- Make sure colors and breakpoints always have the same number of entries! VERY IMPORTANT! + ---@type table + colors = { + { r = 0.62, g = 0.62, b = 0.62 }, -- Grey + { r = 1, g = 1, b = 1 }, -- White + { r = 0.12, g = 1, b = 0 }, -- Green + { r = 0, g = 0.44, b = 0.87 }, -- Blue + { r = 0.64, g = 0.21, b = 0.93 }, -- Purple + { r = 1, g = 0.5, b = 0 }, -- Orange + { r = 1, g = 0.2, b = 0.23 }, + { r = 0, g = 0.8, b = 1.0 }, -- Blizzard Blue + }, + breakpoints = { 0, 100, 200, 300, 400, 550, 750, 9999 }, + + ---@param value number + ---@return Color, nil|string + Interpolate = function(value) + local color = { r = 0, g = 0, b = 0 } + + ---@type table> + local bracket = { { 0, 0 }, { 1, 1 } } + for i = 1, #aura_env.ScoreColorer.breakpoints do + if value < aura_env.ScoreColorer.breakpoints[i] then + bracket[2] = { i, aura_env.ScoreColorer.breakpoints[i] } + break + end + bracket[1] = { i, aura_env.ScoreColorer.breakpoints[i] } + end + + ---@type Color + local startColor = aura_env.ScoreColorer.colors[bracket[1][1]] + ---@type Color + local endColor = aura_env.ScoreColorer.colors[bracket[2][1]] + + local fraction = (value - bracket[1][2]) / (bracket[2][2] - bracket[1][2]) + + for k, v in pairs(startColor) do + color[k] = aura_env.ScoreColorer.lerp(v, endColor[k], fraction) + end + + return color, nil + end, + + ---@param a number + ---@param b number + ---@param t number + ---@return number + lerp = function(a, b, t) return a * (1 - t) + b * t end, +} +---@class KeyLevel +---@field colors table +---@field breakpoints table +aura_env.KeyLevel = { + --- Make sure colors and breakpoints always have the same number of entries! VERY IMPORTANT! + ---@type table + colors = { + { r = 0.62, g = 0.62, b = 0.62 }, -- Grey + { r = 1, g = 1, b = 1 }, -- White + { r = 0.12, g = 1, b = 0 }, -- Green + { r = 0, g = 0.44, b = 0.87 }, -- Blue + { r = 0.64, g = 0.21, b = 0.93 }, -- Purple + { r = 1, g = 0.5, b = 0 }, -- Orange + { r = 1, g = 0.2, b = 0.23 }, + { r = 0, g = 0.8, b = 1.0 }, -- Blizzard Blue + }, + breakpoints = { 1, 10, 15, 20, 25, 29, 33, 9999 }, + + ---@param value number + ---@return Color, nil|string + Interpolate = function(value) + local color = { r = 0, g = 0, b = 0 } + + ---@type table> + local bracket = { { 0, 0 }, { 1, 1 } } + for i = 1, #aura_env.KeyLevel.breakpoints do + if value < aura_env.KeyLevel.breakpoints[i] then + bracket[2] = { i, aura_env.KeyLevel.breakpoints[i] } + break + end + bracket[1] = { i, aura_env.KeyLevel.breakpoints[i] } + end + + ---@type Color + local startColor = aura_env.KeyLevel.colors[bracket[1][1]] + ---@type Color + local endColor = aura_env.KeyLevel.colors[bracket[2][1]] + + local fraction = (value - bracket[1][2]) / (bracket[2][2] - bracket[1][2]) + + for k, v in pairs(startColor) do + color[k] = aura_env.KeyLevel.lerp(v, endColor[k], fraction) + end + + return color, nil + end, + + ---@param a number + ---@param b number + ---@param t number + ---@return number + lerp = function(a, b, t) return a * (1 - t) + b * t end, +} + +---@class Key +---@field name string +---@field role string +---@field level string +---@field time string +---@field score number +Key = { + ---@return Key + ---@param name string + ---@param role string + ---@param level string + ---@param time string + ---@param score string + new = function(name, role, level, time, score) + local self = setmetatable({}, { + __index = Key, + __tostring = function(self) + local score = self.score + local keyLevel = tonumber(self.level:match("%d+$")) or 0 + + local formattedScore, err = aura_env.ScoreColorer.Interpolate(self.score) + if not err then + score = string.format( + "|cff%02x%02x%02x%d|r", + formattedScore.r * 255, + formattedScore.g * 255, + formattedScore.b * 255, + self.score + ) + end + + local formattedLevel, err = aura_env.KeyLevel.Interpolate(keyLevel) + if not err then + level = string.format( + "|cff%02x%02x%02x%s|r", + formattedLevel.r * 255, + formattedLevel.g * 255, + formattedLevel.b * 255, + self.level + ) + end + + return string.format("%-30s %-10s %-10s %-10s %-10s", self.name, self.role, level, self.time, score) + end, + }) + self.name = name + self.role = role + self.level = level + self.time = time + self.score = tonumber(score) or 0 + return self + end, + ---@return string + hash = function(self) return table.concat({ self.name, self.role, self.level, self.time, self.score }, "/") end, + + ---@param self Key + ---@param other Key + ---@return boolean + compareTo = function(self, other) + if not self then return true end + if not other then return false end + if self.name <= other.name then return true end + return false + end, + ---@param self Key + register = function(self) + if not WeakAurasSaved.Cyka then WeakAurasSaved.Cyka = {} end + if not WeakAurasSaved.Cyka.MData then WeakAurasSaved.Cyka.MData = {} end + WeakAurasSaved.Cyka.MData[self:hash()] = self + end, +} + +---@param keys Key[] +local function render(keys) + local str = {} + for k, v in ipairs(keys) do + str[#str + 1] = tostring(v) + end + aura_env.displayString = table.concat(str, "\n") +end + +function aura_env.Process() + ---@type Key[] + local keys = {} + for k, msg in ipairs(aura_env.fullMessage) do + local key, role, level, time, score = string.match(msg, "^->([^/]+)/([^/]+)/([^/]+)/([^/]+)/(.+)$") + + key = string.gsub(key, "^%s+", "") + key = string.gsub(key, "%s+$", "") + role = string.gsub(role, "%s+", "") + level = string.gsub(level, "%s+", "") + time = string.gsub(time, "%s+", "") + score = string.gsub(score, "%s+", "") + + local keyObj = Key.new(key, role, level, time, score) + keyObj:register() + if key then keys[#keys + 1] = keyObj end + end + table.sort(keys, Key.compareTo) + render(keys) +end + +-- /run WeakAurasSaved.Cyka.MData = {} +-- /dump WeakAurasSaved.Cyka.MData +-- /dump InterfaceGUI.Cashe_1[UnitGUID("player")] diff --git a/Complete Projects/Legion/Raid Frame Glow.lua b/WeakAuras/Projects/Raid Frame Glow.lua similarity index 97% rename from Complete Projects/Legion/Raid Frame Glow.lua rename to WeakAuras/Projects/Raid Frame Glow.lua index 75ae585..d4eb4af 100644 --- a/Complete Projects/Legion/Raid Frame Glow.lua +++ b/WeakAuras/Projects/Raid Frame Glow.lua @@ -1,173 +1,173 @@ ---/run WeakAuras.ScanEvents("UPDATE_FRAME_GLOW") ---ID_UPDATED UPDATE_FRAME_GLOW PLAYER_REGEN_DISABLED PLAYER_REGEN_ENABLED GROUP_ROSTER_UPDATE ---ElvUF_Focus.Health ---ElvUF_TargetTarget.Health -function(e, id) - if not aura_env.ticker then aura_env.ticker = C_Timer.NewTicker(0.1, function() WeakAuras.ScanEvents("UPDATE_FRAME_GLOW") end) end - if e == "PLAYER_REGEN_DISABLED" or e == "PLAYER_REGEN_ENABLED" then - WeakAuras.ScanEvents("UPDATE_FRAME_GLOW") - elseif e == "UPDATE_FRAME_GLOW" then - local hptable = {["hp"] = 1e21, ["id"] = 0, ["mhp"] = 0, ["php"] = 100} - for i = 1, GetNumGroupMembers() do - --if UnitHealthMax("raid" .. i) - UnitHealth("raid" .. i) > hptable.mhp then --Missing HP - if UnitIsConnected("raid" .. i) == true then - if UnitHealth("raid" .. i) / UnitHealthMax("raid" .. i) < hptable.php then --% HP - if UnitHealth("raid" .. i) / UnitHealthMax("raid" .. i) < 0.6 and UnitHealth("raid" .. i) / UnitHealthMax("raid" .. i) > 0 and UnitIsConnected("raid" .. i) then - hptable.hp = UnitHealth("raid" .. i) - hptable.mhp = UnitHealthMax("raid" .. i) - UnitHealth("raid" .. i) - hptable.php = UnitHealth("raid" .. i) / UnitHealthMax("raid" .. i) - hptable.id = i - hptable.name = UnitName("raid" .. i) - end - end - end - end - if hptable.id ~= aura_env.lastID then - WeakAuras.ScanEvents("ID_UPDATED", hptable.id) - aura_env.lastID = hptable.id - end - - if UnitExists("focus") then - local fhp = UnitHealth("focus") / UnitHealthMax("focus") - if fhp < 0.4 then - ActionButton_ShowOverlayGlow(ElvUF_Focus.Health) - else - ActionButton_HideOverlayGlow(ElvUF_Focus.Health) - end - end - if UnitExists("targettarget") then - local tthp = UnitHealth("targettarget") / UnitHealthMax("targettarget") - if tthp < 0.4 then - print("QUICK GLOW OMG OMGO GMO") - ActionButton_ShowOverlayGlow(ElvUF_TargetTarget.Health) - else - ActionButton_HideOverlayGlow(ElvUF_TargetTarget.Health) - end - end - - elseif e == "ID_UPDATED" then - if id ~= aura_env.glowingPlate and aura_env.glowingPlate > 0 then - ActionButton_HideOverlayGlow(aura_env.GetFrame("raid" .. aura_env.glowingPlate)) - end - if aura_env.GetFrame("raid" .. id) then - ActionButton_ShowOverlayGlow(aura_env.GetFrame("raid" .. id)) - aura_env.glowingPlate = id - end - end -end - ---INIT -if not aura_env.ticker then aura_env.ticker = C_Timer.NewTicker(0.1, function() WeakAuras.ScanEvents("UPDATE_FRAME_GLOW") end) end -aura_env.lastID = 0 -aura_env.glowingPlate = 0 - -local frame_priority = { - -- raid frames - [1] = "^Vd1", -- vuhdo - [2] = "^Healbot", -- healbot - [3] = "^GridLayout", -- grid - [4] = "^Grid2Layout", -- grid2 - [5] = "^ElvUF_RaidGroup", -- elv - [6] = "^oUF_bdGrid", -- bdgrid - [7] = "^oUF.*raid", -- generic oUF - [8] = "^LimeGroup", -- lime - [9] = "^SUFHeaderraid", -- suf - [10] = "^CompactRaid", -- blizz - -- party frames - [11] = "^SUFHeaderparty", --suf - [12] = "^ElvUF_PartyGroup", -- elv - [13] = "^oUF.*party", -- generic oUF - [14] = "^PitBull4_Groups_Party", -- pitbull4 - [15] = "^CompactParty", -- blizz - -- player frame - [16] = "^SUFUnitplayer", - [17] = "^PitBull4_Frames_Player", - [18] = "^ElvUF_Player", - [19] = "^oUF.*player", - [20] = "^PlayerFrame", -} - -WA_GetFramesCache = WA_GetFramesCache or {} -if not WA_GetFramesCacheListener then - WA_GetFramesCacheListener = CreateFrame("Frame") - local f = WA_GetFramesCacheListener - f:RegisterEvent("PLAYER_REGEN_DISABLED") - f:RegisterEvent("PLAYER_REGEN_ENABLED") - f:RegisterEvent("GROUP_ROSTER_UPDATE") - f:SetScript("OnEvent", function(self, event, ...) - WA_GetFramesCache = {} - end) -end - -local function GetFrames(target) - local function FindButtonsForUnit(frame, target) - local results = {} - if type(frame) == "table" and not frame:IsForbidden() then - local type = frame:GetObjectType() - if type == "Frame" or type == "Button" then - for _,child in ipairs({frame:GetChildren()}) do - for _,v in pairs(FindButtonsForUnit(child, target)) do - tinsert(results, v) - end - end - end - if type == "Button" then - local unit = frame:GetAttribute('unit') - if unit and frame:IsVisible() and frame:GetName() then - WA_GetFramesCache[frame] = unit - if UnitIsUnit(unit, target) then - -- print("F:", frame:GetName()) - tinsert(results, frame) - end - end - end - end - return results - end - - if not UnitExists(target) then - if type(target) == "string" and target:find("Player") then - target = select(6,GetPlayerInfoByGUID(target)) - else - return {} - end - end - - local results = {} - for frame, unit in pairs(WA_GetFramesCache) do - --print("from cache:", frame:GetName()) - if UnitIsUnit(unit, target) then - if frame:GetAttribute('unit') == unit then - tinsert(results, frame) - else - results = {} - break - end - end - end - - return #results > 0 and results or FindButtonsForUnit(UIParent, target) -end - -local isElvUI = IsAddOnLoaded("ElvUI") -local function WhyElvWhy(frame) - if isElvUI and frame and frame:GetName():find("^ElvUF_") and frame.Health then - return frame.Health - else - return frame - end -end - - -function aura_env.GetFrame(target) - local frames = GetFrames(target) - if not frames then return nil end - for i=1,#frame_priority do - for _,frame in pairs(frames) do - if (frame:GetName()):find(frame_priority[i]) then - return WhyElvWhy(frame) - end - end - end - return WhyElvWhy(frames[1]) -end +--/run WeakAuras.ScanEvents("UPDATE_FRAME_GLOW") +--ID_UPDATED UPDATE_FRAME_GLOW PLAYER_REGEN_DISABLED PLAYER_REGEN_ENABLED GROUP_ROSTER_UPDATE +--ElvUF_Focus.Health +--ElvUF_TargetTarget.Health +function(e, id) + if not aura_env.ticker then aura_env.ticker = C_Timer.NewTicker(0.1, function() WeakAuras.ScanEvents("UPDATE_FRAME_GLOW") end) end + if e == "PLAYER_REGEN_DISABLED" or e == "PLAYER_REGEN_ENABLED" then + WeakAuras.ScanEvents("UPDATE_FRAME_GLOW") + elseif e == "UPDATE_FRAME_GLOW" then + local hptable = {["hp"] = 1e21, ["id"] = 0, ["mhp"] = 0, ["php"] = 100} + for i = 1, GetNumGroupMembers() do + --if UnitHealthMax("raid" .. i) - UnitHealth("raid" .. i) > hptable.mhp then --Missing HP + if UnitIsConnected("raid" .. i) == true then + if UnitHealth("raid" .. i) / UnitHealthMax("raid" .. i) < hptable.php then --% HP + if UnitHealth("raid" .. i) / UnitHealthMax("raid" .. i) < 0.6 and UnitHealth("raid" .. i) / UnitHealthMax("raid" .. i) > 0 and UnitIsConnected("raid" .. i) then + hptable.hp = UnitHealth("raid" .. i) + hptable.mhp = UnitHealthMax("raid" .. i) - UnitHealth("raid" .. i) + hptable.php = UnitHealth("raid" .. i) / UnitHealthMax("raid" .. i) + hptable.id = i + hptable.name = UnitName("raid" .. i) + end + end + end + end + if hptable.id ~= aura_env.lastID then + WeakAuras.ScanEvents("ID_UPDATED", hptable.id) + aura_env.lastID = hptable.id + end + + if UnitExists("focus") then + local fhp = UnitHealth("focus") / UnitHealthMax("focus") + if fhp < 0.4 then + ActionButton_ShowOverlayGlow(ElvUF_Focus.Health) + else + ActionButton_HideOverlayGlow(ElvUF_Focus.Health) + end + end + if UnitExists("targettarget") then + local tthp = UnitHealth("targettarget") / UnitHealthMax("targettarget") + if tthp < 0.4 then + print("QUICK GLOW OMG OMGO GMO") + ActionButton_ShowOverlayGlow(ElvUF_TargetTarget.Health) + else + ActionButton_HideOverlayGlow(ElvUF_TargetTarget.Health) + end + end + + elseif e == "ID_UPDATED" then + if id ~= aura_env.glowingPlate and aura_env.glowingPlate > 0 then + ActionButton_HideOverlayGlow(aura_env.GetFrame("raid" .. aura_env.glowingPlate)) + end + if aura_env.GetFrame("raid" .. id) then + ActionButton_ShowOverlayGlow(aura_env.GetFrame("raid" .. id)) + aura_env.glowingPlate = id + end + end +end + +--INIT +if not aura_env.ticker then aura_env.ticker = C_Timer.NewTicker(0.1, function() WeakAuras.ScanEvents("UPDATE_FRAME_GLOW") end) end +aura_env.lastID = 0 +aura_env.glowingPlate = 0 + +local frame_priority = { + -- raid frames + [1] = "^Vd1", -- vuhdo + [2] = "^Healbot", -- healbot + [3] = "^GridLayout", -- grid + [4] = "^Grid2Layout", -- grid2 + [5] = "^ElvUF_RaidGroup", -- elv + [6] = "^oUF_bdGrid", -- bdgrid + [7] = "^oUF.*raid", -- generic oUF + [8] = "^LimeGroup", -- lime + [9] = "^SUFHeaderraid", -- suf + [10] = "^CompactRaid", -- blizz + -- party frames + [11] = "^SUFHeaderparty", --suf + [12] = "^ElvUF_PartyGroup", -- elv + [13] = "^oUF.*party", -- generic oUF + [14] = "^PitBull4_Groups_Party", -- pitbull4 + [15] = "^CompactParty", -- blizz + -- player frame + [16] = "^SUFUnitplayer", + [17] = "^PitBull4_Frames_Player", + [18] = "^ElvUF_Player", + [19] = "^oUF.*player", + [20] = "^PlayerFrame", +} + +WA_GetFramesCache = WA_GetFramesCache or {} +if not WA_GetFramesCacheListener then + WA_GetFramesCacheListener = CreateFrame("Frame") + local f = WA_GetFramesCacheListener + f:RegisterEvent("PLAYER_REGEN_DISABLED") + f:RegisterEvent("PLAYER_REGEN_ENABLED") + f:RegisterEvent("GROUP_ROSTER_UPDATE") + f:SetScript("OnEvent", function(self, event, ...) + WA_GetFramesCache = {} + end) +end + +local function GetFrames(target) + local function FindButtonsForUnit(frame, target) + local results = {} + if type(frame) == "table" and not frame:IsForbidden() then + local type = frame:GetObjectType() + if type == "Frame" or type == "Button" then + for _,child in ipairs({frame:GetChildren()}) do + for _,v in pairs(FindButtonsForUnit(child, target)) do + tinsert(results, v) + end + end + end + if type == "Button" then + local unit = frame:GetAttribute('unit') + if unit and frame:IsVisible() and frame:GetName() then + WA_GetFramesCache[frame] = unit + if UnitIsUnit(unit, target) then + -- print("F:", frame:GetName()) + tinsert(results, frame) + end + end + end + end + return results + end + + if not UnitExists(target) then + if type(target) == "string" and target:find("Player") then + target = select(6,GetPlayerInfoByGUID(target)) + else + return {} + end + end + + local results = {} + for frame, unit in pairs(WA_GetFramesCache) do + --print("from cache:", frame:GetName()) + if UnitIsUnit(unit, target) then + if frame:GetAttribute('unit') == unit then + tinsert(results, frame) + else + results = {} + break + end + end + end + + return #results > 0 and results or FindButtonsForUnit(UIParent, target) +end + +local isElvUI = IsAddOnLoaded("ElvUI") +local function WhyElvWhy(frame) + if isElvUI and frame and frame:GetName():find("^ElvUF_") and frame.Health then + return frame.Health + else + return frame + end +end + + +function aura_env.GetFrame(target) + local frames = GetFrames(target) + if not frames then return nil end + for i=1,#frame_priority do + for _,frame in pairs(frames) do + if (frame:GetName()):find(frame_priority[i]) then + return WhyElvWhy(frame) + end + end + end + return WhyElvWhy(frames[1]) +end diff --git a/Complete Projects/Legion/Raid Rolls.lua b/WeakAuras/Projects/Raid Rolls.lua similarity index 97% rename from Complete Projects/Legion/Raid Rolls.lua rename to WeakAuras/Projects/Raid Rolls.lua index b5c13f4..b0d610b 100644 --- a/Complete Projects/Legion/Raid Rolls.lua +++ b/WeakAuras/Projects/Raid Rolls.lua @@ -1,31 +1,31 @@ -TRIGGER -function(_,message) - if string.find(message, "rolls") then - _,_,name,roll,rollmax = string.find(message, "(%a+)%srolls%s(%d+)%s%p%d%-(%d+)%p") - local source_class = UnitClass(name) - if source_class == "Death Knight" then source_class_color = "|cFFC41F3B" elseif - source_class == "Demon Hunter" then source_class_color = "|cFFA330C9" elseif - source_class == "Druid" then source_class_color = "|cFFFF7D0A" elseif - source_class == "Hunter" then source_class_color = "|cFFABD473" elseif - source_class == "Mage" then source_class_color = "|cFF40C7EB" elseif - source_class == "Monk" then source_class_color = "|cFF00FF96" elseif - source_class == "Paladin" then source_class_color = "|cFFF58CBA" elseif - source_class == "Priest" then source_class_color = "|cFFFFFFFF" elseif - source_class == "Rogue" then source_class_color = "|cFFFFF569" elseif - source_class == "Shaman" then source_class_color = "|cFF0070DE" elseif - source_class == "Warlock" then source_class_color = "|cFF8787ED" elseif - source_class == "Warrior" then source_class_color = "|cFFC79C6E" end - if string.find(rollmax, "100") then - aura_env.output = aura_env.output .. source_class_color .. name .. "|cFFFFFFFF" .. " " .. roll .. "\n" - end - end -end - -DISPLAY -function() - return aura_env.output -end - -INIT -aura_env.output = "" -aura_env.lastItemName = "" +TRIGGER +function(_,message) + if string.find(message, "rolls") then + _,_,name,roll,rollmax = string.find(message, "(%a+)%srolls%s(%d+)%s%p%d%-(%d+)%p") + local source_class = UnitClass(name) + if source_class == "Death Knight" then source_class_color = "|cFFC41F3B" elseif + source_class == "Demon Hunter" then source_class_color = "|cFFA330C9" elseif + source_class == "Druid" then source_class_color = "|cFFFF7D0A" elseif + source_class == "Hunter" then source_class_color = "|cFFABD473" elseif + source_class == "Mage" then source_class_color = "|cFF40C7EB" elseif + source_class == "Monk" then source_class_color = "|cFF00FF96" elseif + source_class == "Paladin" then source_class_color = "|cFFF58CBA" elseif + source_class == "Priest" then source_class_color = "|cFFFFFFFF" elseif + source_class == "Rogue" then source_class_color = "|cFFFFF569" elseif + source_class == "Shaman" then source_class_color = "|cFF0070DE" elseif + source_class == "Warlock" then source_class_color = "|cFF8787ED" elseif + source_class == "Warrior" then source_class_color = "|cFFC79C6E" end + if string.find(rollmax, "100") then + aura_env.output = aura_env.output .. source_class_color .. name .. "|cFFFFFFFF" .. " " .. roll .. "\n" + end + end +end + +DISPLAY +function() + return aura_env.output +end + +INIT +aura_env.output = "" +aura_env.lastItemName = "" diff --git a/Complete Projects/Legion/Raid loot DOESNT WORK.lua b/WeakAuras/Projects/Raid loot DOESNT WORK.lua similarity index 97% rename from Complete Projects/Legion/Raid loot DOESNT WORK.lua rename to WeakAuras/Projects/Raid loot DOESNT WORK.lua index 42bc9f6..170d275 100644 --- a/Complete Projects/Legion/Raid loot DOESNT WORK.lua +++ b/WeakAuras/Projects/Raid loot DOESNT WORK.lua @@ -1,60 +1,60 @@ ---Load out of combat -CHAT_MSG_LOOT -function(_,msg) - local who = string.match(msg, "%a+") - local what = string.match(msg, "%[(.+)%]") - local itemQuality = select(3, GetItemInfo(what)) or "" - local itemType = select(6, GetItemInfo(what)) or "" - local itemSubType = select(7, GetItemInfo(what)) or "" - if itemType == "Armor" then - aura_env.who[aura_env.pointer] = who - aura_env.what[aura_env.pointer] = what - aura_env.itemQuality[aura_env.pointer] = itemQuality - aura_env.itemSubType[aura_env.pointer] = itemSubType - aura_env.pointer = aura_env.pointer + 1 - end -end - -DISPLAY -function() - local output = "" - local qualityColor = "|cFFFFFFFF" - local classColor = "|cFFFFFFFF" - if aura_env.pointer > 1 then - for i = 1, aura_env.pointer - 1 do - if aura_env.who[i] ~= "You" then - local playerClass = UnitClass(aura_env.who[i]) - else - playerClass = UnitClass("player") - end - if aura_env.itemQuality[i] == 0 then qualityColor = "|cFF9D9D9D" elseif - aura_env.itemQuality[i] == 2 then qualityColor = "|cFF1EFF00" elseif - aura_env.itemQuality[i] == 3 then qualityColor = "|cFF0070DD" elseif - aura_env.itemQuality[i] == 4 then qualityColor = "|cFFA335EE" elseif - aura_env.itemQuality[i] == 5 then qualityColor = "|cFFFF8000" - end - if playerClass == "Death Knight" then classColor = "|cFFC41F3B" - elseif playerClass == "Demon Hunter" then classColor = "|cFFA330C9" - elseif playerClass == "Druid" then classColor = "|cFFFF7D0A" - elseif playerClass == "Hunter" then classColor = "|cFFABD473" - elseif playerClass == "Mage" then classColor = "|cFF40C7EB" - elseif playerClass == "Monk" then classColor = "|cFF00FF96" - elseif playerClass == "Paladin" then classColor = "|cFFF58CBA" - elseif playerClass == "Priest" then classColor = "|cFFFFFFFF" - elseif playerClass == "Rogue" then classColor = "|cFFFFF569" - elseif playerClass == "Shaman" then classColor = "|cFF0070DE" - elseif playerClass == "Warlock" then classColor = "|cFF8787ED" - elseif playerClass == "Warrior" then classColor = "|cFFC79C6E" - end - output = output .. classColor .. aura_env.who[i] .. " " .. "|cFFFFFFFF" .. aura_env.itemSubType[i] .. " " .. qualityColor .. "%[" .. aura_env.what[i] .. "%]" .. "\n" - end - end - return output -end - -ON HIDE -aura_env.pointer = 1 -aura_env.who = {} -aura_env.what = {} -aura_env.itemQuality = {} +--Load out of combat +CHAT_MSG_LOOT +function(_,msg) + local who = string.match(msg, "%a+") + local what = string.match(msg, "%[(.+)%]") + local itemQuality = select(3, GetItemInfo(what)) or "" + local itemType = select(6, GetItemInfo(what)) or "" + local itemSubType = select(7, GetItemInfo(what)) or "" + if itemType == "Armor" then + aura_env.who[aura_env.pointer] = who + aura_env.what[aura_env.pointer] = what + aura_env.itemQuality[aura_env.pointer] = itemQuality + aura_env.itemSubType[aura_env.pointer] = itemSubType + aura_env.pointer = aura_env.pointer + 1 + end +end + +DISPLAY +function() + local output = "" + local qualityColor = "|cFFFFFFFF" + local classColor = "|cFFFFFFFF" + if aura_env.pointer > 1 then + for i = 1, aura_env.pointer - 1 do + if aura_env.who[i] ~= "You" then + local playerClass = UnitClass(aura_env.who[i]) + else + playerClass = UnitClass("player") + end + if aura_env.itemQuality[i] == 0 then qualityColor = "|cFF9D9D9D" elseif + aura_env.itemQuality[i] == 2 then qualityColor = "|cFF1EFF00" elseif + aura_env.itemQuality[i] == 3 then qualityColor = "|cFF0070DD" elseif + aura_env.itemQuality[i] == 4 then qualityColor = "|cFFA335EE" elseif + aura_env.itemQuality[i] == 5 then qualityColor = "|cFFFF8000" + end + if playerClass == "Death Knight" then classColor = "|cFFC41F3B" + elseif playerClass == "Demon Hunter" then classColor = "|cFFA330C9" + elseif playerClass == "Druid" then classColor = "|cFFFF7D0A" + elseif playerClass == "Hunter" then classColor = "|cFFABD473" + elseif playerClass == "Mage" then classColor = "|cFF40C7EB" + elseif playerClass == "Monk" then classColor = "|cFF00FF96" + elseif playerClass == "Paladin" then classColor = "|cFFF58CBA" + elseif playerClass == "Priest" then classColor = "|cFFFFFFFF" + elseif playerClass == "Rogue" then classColor = "|cFFFFF569" + elseif playerClass == "Shaman" then classColor = "|cFF0070DE" + elseif playerClass == "Warlock" then classColor = "|cFF8787ED" + elseif playerClass == "Warrior" then classColor = "|cFFC79C6E" + end + output = output .. classColor .. aura_env.who[i] .. " " .. "|cFFFFFFFF" .. aura_env.itemSubType[i] .. " " .. qualityColor .. "%[" .. aura_env.what[i] .. "%]" .. "\n" + end + end + return output +end + +ON HIDE +aura_env.pointer = 1 +aura_env.who = {} +aura_env.what = {} +aura_env.itemQuality = {} aura_env.itemSubType = {} \ No newline at end of file diff --git a/Complete Projects/Legion/RaidCDs.lua b/WeakAuras/Projects/RaidCDs.lua similarity index 97% rename from Complete Projects/Legion/RaidCDs.lua rename to WeakAuras/Projects/RaidCDs.lua index 4ee19fd..0f82014 100644 --- a/Complete Projects/Legion/RaidCDs.lua +++ b/WeakAuras/Projects/RaidCDs.lua @@ -1,149 +1,149 @@ ---DISPLAY -function() - if aura_env.statee then - return aura_env.statee.string - end -end - ---COMBAT_LOG_EVENT_UNFILTERED GROUP_ROSTER_UPDATE COOLDOWN_TICKER PLAYER_REGEN_DISABLED PLAYER_REGEN_ENABLED COMBAT_TICK -function(allstates, e, ...) - --if not aura_env.ticker then - -- aura_env.ticker = C_Timer.NewTicker(0.05, function() WeakAuras.ScanEvents("COOLDOWN_TICKER") end) - --end - --if e == "COOLDOWN_TICKER" then - -- if allstates[1] then - -- if allstates[1].time + 2 < GetTime() then - -- allstates[1].show = false - -- allstates[1].changed = true - -- table.remove(allstates, 1) - -- WeakAuras.ScanEvents("COOLDOWN_TICKER") - -- return true - -- end - -- end - if e == "COMBAT_LOG_EVENT_UNFILTERED" then - local se = select(2, ...) - if not allstates[1] or not allstates[1].string then - allstates[1] = { - string = "[" .. aura_env.formatTime(aura_env.combatTime) .. "]", - show = true, - changed = true, - } - end - if se == "SPELL_CAST_SUCCESS" then - local caster = select(5, ...) or 0 - if aura_env.raid[caster] then - local spell = select(13, ...) - if aura_env.spells[spell] then - allstates[#allstates + 1] = { - caster = caster, - spell = spell, - string = "[" .. aura_env.formatTime(aura_env.combatTime) .. "] " .. caster .. " - " .. spell, - class = aura_env.raid[caster], - time = GetTime(), - show = true, - changed = true, - } - if #allstates > 8 then - allstates[2].show = false - allstates[2].changed = true - table.remove(allstates, 2) - end - return true - end - end - end - elseif e == "GROUP_ROSTER_UPDATE" then - local prefix = "party" - if IsInRaid() == true then - prefix = "raid" - end - aura_env.raid = {} - aura_env.raid[UnitName("player")] = select(3, UnitClass("player")) - for i = 1, GetNumGroupMembers() do - if UnitName(prefix .. i) and not aura_env.raid[UnitName(prefix .. i)] then - aura_env.raid[UnitName(prefix .. i)] = select(3, UnitClass(prefix .. i)) - print("YEET", UnitName(prefix .. i), select(3, UnitClass(prefix .. i))) - end - end - elseif e == "COMBAT_TICK" then - aura_env.combatTime = aura_env.combatTime + 1 - if allstates[1] then - allstates[1].string = "[" .. aura_env.formatTime(aura_env.combatTime) .. "]" - allstates[1].changed = true - allstates[1].show = true - end - elseif e == "PLAYER_REGEN_DISABLED" then - aura_env.combatTime = 0 - for i = 2, 10 do - if allstates[i] then - allstates[i].show = false - allstates[i].changed = true - end - end - if not aura_env.combatTicker then - aura_env.combatTicker = C_Timer.NewTicker(1, function() WeakAuras.ScanEvents("COMBAT_TICK") end) - end - elseif e == "PLAYER_REGEN_ENABLED" then - if aura_env.combatTicker then - aura_env.combatTicker:Cancel() - aura_env.combatTicker = nil - end - end - --DevTools_Dump(aura_env.raid) - return true -end - ---INIT -aura_env.raid = {} -aura_env.combatTime = 0 -aura_env.spells = { - ["Divine Shield"] = true, - ["Blessing of Spellwarding"] = true, - ["Blessing of Protection"] = true, - ["Blessing of Sacrifice"] = true, - ["Avenging Wrath"] = true, - ["Aura Mastery"] = true, - ["Guardian Spirit"] = true, - ["Divine Hymn"] = true, - ["Raise Ally"] = true, - ["Tranquility"] = true, - ["Stampeding Roar"] = true, - ["Rebirth"] = true, - ["Ice Block"] = true, - ["Deterrence"] = true, - ["Survival Instincts"] = true, - ["Anti-Magic Shell"] = true, - ["Vampiric Blood"] = true, - ["Revival"] = true, - ["Life Cocoon"] = true, - ["Diffuse Magic"] = true, - ["Lay on Hands"] = true, - ["Dispersion"] = true, - ["Evasion"] = true, - ["Cloak of Shadows"] = true, - ["Bloodlust"] = true, - ["Healing Tide Totem"] = true, - ["Soulstone"] = true, - ["Rallying Cry"] = true, - ["Power Word: Barrier"] = true, - ["Spirit Link Totem"] = true, - ["Wind Rush Totem"] = true, - ["Ancestral Guidance"] = true, - --["Hand of the Protector"] = true, - --["Healing Rain"] = true, - --["Shimmer"] = true, - --["Death and Decay"] = true, -} -aura_env.formatTime = function(time) - local res, m, s = time, 0, 0 - while res >= 60 do - m = m + 1 - res = res - 60 - end - s = res - if s < 10 then - s = string.format("0%d", s) - end - if type(s) ~= "string" then tostring(s) end - return string.format("%d:%s", m, s) -end +--DISPLAY +function() + if aura_env.statee then + return aura_env.statee.string + end +end + +--COMBAT_LOG_EVENT_UNFILTERED GROUP_ROSTER_UPDATE COOLDOWN_TICKER PLAYER_REGEN_DISABLED PLAYER_REGEN_ENABLED COMBAT_TICK +function(allstates, e, ...) + --if not aura_env.ticker then + -- aura_env.ticker = C_Timer.NewTicker(0.05, function() WeakAuras.ScanEvents("COOLDOWN_TICKER") end) + --end + --if e == "COOLDOWN_TICKER" then + -- if allstates[1] then + -- if allstates[1].time + 2 < GetTime() then + -- allstates[1].show = false + -- allstates[1].changed = true + -- table.remove(allstates, 1) + -- WeakAuras.ScanEvents("COOLDOWN_TICKER") + -- return true + -- end + -- end + if e == "COMBAT_LOG_EVENT_UNFILTERED" then + local se = select(2, ...) + if not allstates[1] or not allstates[1].string then + allstates[1] = { + string = "[" .. aura_env.formatTime(aura_env.combatTime) .. "]", + show = true, + changed = true, + } + end + if se == "SPELL_CAST_SUCCESS" then + local caster = select(5, ...) or 0 + if aura_env.raid[caster] then + local spell = select(13, ...) + if aura_env.spells[spell] then + allstates[#allstates + 1] = { + caster = caster, + spell = spell, + string = "[" .. aura_env.formatTime(aura_env.combatTime) .. "] " .. caster .. " - " .. spell, + class = aura_env.raid[caster], + time = GetTime(), + show = true, + changed = true, + } + if #allstates > 8 then + allstates[2].show = false + allstates[2].changed = true + table.remove(allstates, 2) + end + return true + end + end + end + elseif e == "GROUP_ROSTER_UPDATE" then + local prefix = "party" + if IsInRaid() == true then + prefix = "raid" + end + aura_env.raid = {} + aura_env.raid[UnitName("player")] = select(3, UnitClass("player")) + for i = 1, GetNumGroupMembers() do + if UnitName(prefix .. i) and not aura_env.raid[UnitName(prefix .. i)] then + aura_env.raid[UnitName(prefix .. i)] = select(3, UnitClass(prefix .. i)) + print("YEET", UnitName(prefix .. i), select(3, UnitClass(prefix .. i))) + end + end + elseif e == "COMBAT_TICK" then + aura_env.combatTime = aura_env.combatTime + 1 + if allstates[1] then + allstates[1].string = "[" .. aura_env.formatTime(aura_env.combatTime) .. "]" + allstates[1].changed = true + allstates[1].show = true + end + elseif e == "PLAYER_REGEN_DISABLED" then + aura_env.combatTime = 0 + for i = 2, 10 do + if allstates[i] then + allstates[i].show = false + allstates[i].changed = true + end + end + if not aura_env.combatTicker then + aura_env.combatTicker = C_Timer.NewTicker(1, function() WeakAuras.ScanEvents("COMBAT_TICK") end) + end + elseif e == "PLAYER_REGEN_ENABLED" then + if aura_env.combatTicker then + aura_env.combatTicker:Cancel() + aura_env.combatTicker = nil + end + end + --DevTools_Dump(aura_env.raid) + return true +end + +--INIT +aura_env.raid = {} +aura_env.combatTime = 0 +aura_env.spells = { + ["Divine Shield"] = true, + ["Blessing of Spellwarding"] = true, + ["Blessing of Protection"] = true, + ["Blessing of Sacrifice"] = true, + ["Avenging Wrath"] = true, + ["Aura Mastery"] = true, + ["Guardian Spirit"] = true, + ["Divine Hymn"] = true, + ["Raise Ally"] = true, + ["Tranquility"] = true, + ["Stampeding Roar"] = true, + ["Rebirth"] = true, + ["Ice Block"] = true, + ["Deterrence"] = true, + ["Survival Instincts"] = true, + ["Anti-Magic Shell"] = true, + ["Vampiric Blood"] = true, + ["Revival"] = true, + ["Life Cocoon"] = true, + ["Diffuse Magic"] = true, + ["Lay on Hands"] = true, + ["Dispersion"] = true, + ["Evasion"] = true, + ["Cloak of Shadows"] = true, + ["Bloodlust"] = true, + ["Healing Tide Totem"] = true, + ["Soulstone"] = true, + ["Rallying Cry"] = true, + ["Power Word: Barrier"] = true, + ["Spirit Link Totem"] = true, + ["Wind Rush Totem"] = true, + ["Ancestral Guidance"] = true, + --["Hand of the Protector"] = true, + --["Healing Rain"] = true, + --["Shimmer"] = true, + --["Death and Decay"] = true, +} +aura_env.formatTime = function(time) + local res, m, s = time, 0, 0 + while res >= 60 do + m = m + 1 + res = res - 60 + end + s = res + if s < 10 then + s = string.format("0%d", s) + end + if type(s) ~= "string" then tostring(s) end + return string.format("%d:%s", m, s) +end diff --git a/Complete Projects/Legion/RaidCooldownAlert.lua b/WeakAuras/Projects/RaidCooldownAlert.lua similarity index 96% rename from Complete Projects/Legion/RaidCooldownAlert.lua rename to WeakAuras/Projects/RaidCooldownAlert.lua index 09b328f..9f6560d 100644 --- a/Complete Projects/Legion/RaidCooldownAlert.lua +++ b/WeakAuras/Projects/RaidCooldownAlert.lua @@ -1,18 +1,18 @@ ---COMBAT_LOG_EVENT_UNFILTERED PLAYER_REGEN_DISABLED GROUP_ROSTER_UPDATE -function(e, ...) - if e == "COMBAT_LOG_EVENT_UNFILTERED" then - local se = select(2, ...) - local caster = select(5, ...) - if UnitIsFriend("player", caster) then - print("yay!", aura_env.raidIDs[caster]) - end - elseif e == "GROUP_ROSTER_UPDATE" or e == "PLAYER_REGEN_DISABLED" then - for i = 1, GetNumGroupMembers() do - print(UnitName("raid" .. i), "raid" .. i) - aura_env.raidIDs[UnitName("raid" .. i)] = "raid" .. i - end - end -end - ---INIT +--COMBAT_LOG_EVENT_UNFILTERED PLAYER_REGEN_DISABLED GROUP_ROSTER_UPDATE +function(e, ...) + if e == "COMBAT_LOG_EVENT_UNFILTERED" then + local se = select(2, ...) + local caster = select(5, ...) + if UnitIsFriend("player", caster) then + print("yay!", aura_env.raidIDs[caster]) + end + elseif e == "GROUP_ROSTER_UPDATE" or e == "PLAYER_REGEN_DISABLED" then + for i = 1, GetNumGroupMembers() do + print(UnitName("raid" .. i), "raid" .. i) + aura_env.raidIDs[UnitName("raid" .. i)] = "raid" .. i + end + end +end + +--INIT aura_env.raidIDs = {} \ No newline at end of file diff --git a/WeakAuras/Projects/RaiderSA/.gitignore b/WeakAuras/Projects/RaiderSA/.gitignore new file mode 100644 index 0000000..db3c70c --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/.gitignore @@ -0,0 +1,2 @@ +staging/* +source diff --git a/WeakAuras/Projects/RaiderSA/buildscript/main.js b/WeakAuras/Projects/RaiderSA/buildscript/main.js new file mode 100644 index 0000000..452afb0 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/buildscript/main.js @@ -0,0 +1,110 @@ +const fs = require("fs"); +const path = require("path"); +const { exec } = require("node:child_process"); +const { ECDH } = require("crypto"); + +const SAMPLE = path.join(__dirname, "..", "samples", "genericfemale.wav"); +const WORDS_FILE = path.join(__dirname, "..", "words.txt"); +const SOURCE_DIR = path.join(__dirname, "..", "source"); +const OUT_DIR = path.join(__dirname, "..", "out"); +const TTS_MODEL = "tts_models/multilingual/multi-dataset/xtts_v2"; +const TTS_COMMAND = `tts --text "$word" --model_name $model --speaker_wav "$sample" --language_idx en --out_path "$outPath"`; +const FFMPEG_COMMAND = `ffmpeg -i "$file" -filter:a "volume=2.5, atempo=1.65" "$outPath"`; + +if (!fs.existsSync(SOURCE_DIR)) { + fs.mkdirSync(SOURCE_DIR, { recursive: true }); +} +if (!fs.existsSync(OUT_DIR)) { + fs.mkdirSync(OUT_DIR, { recursive: true }); +} + +const temp = SAMPLE.replace(".wav", "").split("\\"); +const sampleName = temp.at(-1); +const OUTPUT = path.join(OUT_DIR, sampleName); +const SOURCE = path.join(SOURCE_DIR, sampleName); +if (!fs.existsSync(OUTPUT)) { + fs.mkdirSync(OUTPUT, { recursive: true }); +} +if (!fs.existsSync(SOURCE)) { + fs.mkdirSync(SOURCE, { recursive: true }); +} + +const words = fs + .readFileSync(WORDS_FILE) + .toString() + .split("\n") + .filter((w) => !w.includes("#")); +function getCookedFiles() { + return fs.readdirSync(OUTPUT).map((f) => f.replace(".ogg", "")); +} +function getSourceFiles() { + return fs.readdirSync(SOURCE).map((f) => f.replace(".wav", "")); +} + +function execCommand(command) { + return new Promise((resolve, reject) => { + exec(command, (error, stdout, stderr) => { + if (error) { + console.error("Error running TTS: " + stderr); + reject(stderr); + } + resolve(stdout); + }); + }); +} +async function runTTS(word) { + const ttsComamnd = TTS_COMMAND.replace("$word", word) + .replace("$model", TTS_MODEL) + .replace("$sample", SAMPLE) + .replace("$outPath", `${path.join(SOURCE, word + ".wav")}`); + console.log(`Running tts for ${word} using ${ttsComamnd}`); + await execCommand(ttsComamnd); +} +async function doCommit() { + const tempLookup = getCookedFiles().reduce((acc, file) => { + acc[file] = true; + return acc; + }, {}); + + for (const stagedFile of getSourceFiles()) { + if (!tempLookup[stagedFile]) { + const ffmpegCommand = FFMPEG_COMMAND.replace("$file", path.join(SOURCE, stagedFile + ".wav")).replace( + "$outPath", + path.join(OUTPUT, stagedFile + ".ogg") + ); + console.log(`Running ${ffmpegCommand}`); + await execCommand(ffmpegCommand); + } + // Lesson learnt: Do NOT delete the source... + // fs.rmSync(path.join(STAGE, stagedFile + ".wav")); + } + + console.log("All files committed"); +} + +async function main() { + await doCommit(); + + const tempLookup = getSourceFiles().reduce((acc, file) => { + acc[file] = true; + return acc; + }, {}); + const wordToTTS = []; + for (let word of words) { + word = word.trim(); + if (word) { + if (!tempLookup[word]) { + wordToTTS.push(word); + } else { + console.log(`Skipping ${word} since it exists in either stage or out`); + } + } + } + + for (const word of wordToTTS) { + await runTTS(word); + } + await doCommit(); +} + +main(); diff --git a/WeakAuras/Projects/RaiderSA/buildscript/package.json b/WeakAuras/Projects/RaiderSA/buildscript/package.json new file mode 100644 index 0000000..09b1d4b --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/buildscript/package.json @@ -0,0 +1,12 @@ +{ + "name": "buildscript", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC" +} diff --git a/WeakAuras/Projects/RaiderSA/buildscript/words2luaArr.js b/WeakAuras/Projects/RaiderSA/buildscript/words2luaArr.js new file mode 100644 index 0000000..5d78c73 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/buildscript/words2luaArr.js @@ -0,0 +1,27 @@ +const fs = require("fs"); +const path = require("path"); + +const WORDS_FILE = path.join(__dirname, "..", "words.txt"); + +const words = fs.readFileSync(WORDS_FILE).toString().split("\n"); + +const luaArr = []; +luaArr.push("aura_env.spells = {"); + +for (let line = 0; line < words.length; line++) { + const lineContent = words[line].trim(); + if (/^#\d+/.test(lineContent)) { + const [_, id, mode] = /^#(\d+)!(\d)/.exec(lineContent); + + const spellname = words[line + 1].trim(); + luaArr.push(`\t[${id}] = {`); + luaArr.push(`\t\t["name"] = "${spellname}",`); + luaArr.push(`\t\t["mode"] = ${mode},`); + luaArr.push("\t},"); + } else if (lineContent.includes("##")) { + luaArr.push(`\t-- ${lineContent}`); + } +} + +luaArr.push("}"); +fs.writeFileSync(path.join(__dirname, "..", "luaarr.lua"), luaArr.join("\n")); diff --git a/WeakAuras/Projects/RaiderSA/deploy.sh b/WeakAuras/Projects/RaiderSA/deploy.sh new file mode 100644 index 0000000..560efdd --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/deploy.sh @@ -0,0 +1,4 @@ +#!/bin/sh +target="/c/Games/WoW Legion/Interface/Sounds" +cp out/*speedy* $target +for file in $(ls $target); do mv $target/$file $target/$(echo $file | sed 's/-speedy//g'); done \ No newline at end of file diff --git a/WeakAuras/Projects/RaiderSA/info.txt b/WeakAuras/Projects/RaiderSA/info.txt new file mode 100644 index 0000000..60095fb --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/info.txt @@ -0,0 +1,29 @@ +#Garothi + Fel Bombardment + Eradication + Carnage +#Felhounds + Molten Touch + Desolate Gaze + Enflame Corruption + Consuming Sphere + Siphon Corruption +Tortured Rage +Add friendly spells too + +tts --model_name "tts_models/multilingual/multi-dataset/xtts_v2" --language_idx en --text "Felhounds" +tts.voice_conversion_to_file(source_wav="my/source.wav", target_wav="my/target.wav", file_path="output.wav") + +# t is duration!! +ffmpeg -ss 00:16:12 -i input.mp4 -t 00:00:48 -q:a 0 -map a sample.wav + +tts --model_name tts_models/multilingual/multi-dataset/xtts_v2 --text "" --speaker_wav sample.wav --language_idx en + +My son, the day you were born, the very forests of Lordaeron whispered the name Arthas. My child, I watched with pride as you grew into a weapon of righteousness. Remember, our line has always ruled with wisdom and strength. And I know you will show restraint when exercising your great power. But the truest victory, my son, is stirring the hearts of your people. I tell you this, for when my days have come to an end, you shall be King. + +Maybe have sets of enabled spells per spec + +/run PlaySoundFile("Interface\\AddOns\\SharedMedia_MyMedia\\sound\\Demolish-speedy.wav", "Master") + + +tts --text "My son, the day you were born, the very forests of Lordaeron whispered the name Arthas. My child, I watched with pride as you grew into a weapon of righteousness. Remember, our line has always ruled with wisdom and strength. And I know you will show restraint when exercising your great power. But the truest victory, my son, is stirring the hearts of your people. I tell you this, for when my days have come to an end, you shall be King." --model_name tts_models/multilingual/multi-dataset/xtts_v2 --speaker_wav sample.wav --language_idx en \ No newline at end of file diff --git a/WeakAuras/Projects/RaiderSA/luaarr.lua b/WeakAuras/Projects/RaiderSA/luaarr.lua new file mode 100644 index 0000000..a65f17b --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/luaarr.lua @@ -0,0 +1,915 @@ +aura_env.spells = { + -- ##################################################################################### + -- ### DEBUG ### + -- ##################################################################################### + -- ##774!3 + -- ##33763!3 + -- ##5185!3 + -- ##################################################################################### + -- ### Antorus ### + -- ##################################################################################### + -- ########################################## + -- ## Garothi ## + -- ########################################## + [244410] = { + ["name"] = "Decimation", + ["mode"] = 3, + }, + [246220] = { + ["name"] = "Fel Bombardment", + ["mode"] = 3, + }, + [244969] = { + ["name"] = "Eradication", + ["mode"] = 3, + }, + [244106] = { + ["name"] = "Carnage", + ["mode"] = 3, + }, + -- ########################################## + -- ## Felhounds ## + -- ########################################## + [244086] = { + ["name"] = "Molten Touch", + ["mode"] = 3, + }, + [244768] = { + ["name"] = "Desolate Gaze", + ["mode"] = 3, + }, + [244057] = { + ["name"] = "Enflame Corruption", + ["mode"] = 3, + }, + [244131] = { + ["name"] = "Consuming Sphere", + ["mode"] = 3, + }, + [244056] = { + ["name"] = "Siphon Corruption", + ["mode"] = 3, + }, + -- ########################################## + -- ## High Command ## + -- ########################################## + [245161] = { + ["name"] = "Entropic Mine", + ["mode"] = 3, + }, + [245546] = { + ["name"] = "Summon Reinforcements", + ["mode"] = 3, + }, + -- ########################################## + -- ## Portal Keeper ## + -- ########################################## + [244016] = { + ["name"] = "Reality Tear", + ["mode"] = 3, + }, + [243983] = { + ["name"] = "Collapsing World", + ["mode"] = 3, + }, + [244000] = { + ["name"] = "Felstorm Barrage", + ["mode"] = 3, + }, + -- ########################################## + -- ## Imonar ## + -- ########################################## + [247552] = { + ["name"] = "Sleep Canister", + ["mode"] = 3, + }, + [247367] = { + ["name"] = "Shock Lance", + ["mode"] = 3, + }, + [248068] = { + ["name"] = "Empowered Pulse Grenade", + ["mode"] = 3, + }, + [247376] = { + ["name"] = "Pulse Grenade", + ["mode"] = 3, + }, + [247716] = { + ["name"] = "Charged Blasts", + ["mode"] = 3, + }, + [247687] = { + ["name"] = "Sever", + ["mode"] = 3, + }, + [248070] = { + ["name"] = "Empowered Shrapnel Blast", + ["mode"] = 3, + }, + [250255] = { + ["name"] = "Empowered Shock Lance", + ["mode"] = 3, + }, + -- ########################################## + -- ## Kin'garoth ## + -- ########################################## + [254919] = { + ["name"] = "Forging Strike", + ["mode"] = 3, + }, + [254926] = { + ["name"] = "Reverberating Strike", + ["mode"] = 3, + }, + [246840] = { + ["name"] = "Ruiner", + ["mode"] = 3, + }, + [246779] = { + ["name"] = "Diabolic Bomb", + ["mode"] = 3, + }, + [246706] = { + ["name"] = "Demolish", + ["mode"] = 3, + }, + [246664] = { + ["name"] = "Annihilation", + ["mode"] = 3, + }, + -- ########################################## + -- ## Varimathras ## + -- ########################################## + [243960] = { + ["name"] = "Shadow Strike", + ["mode"] = 3, + }, + [243961] = { + ["name"] = "Misery", + ["mode"] = 3, + }, + [244042] = { + ["name"] = "Marked Prey", + ["mode"] = 3, + }, + [244093] = { + ["name"] = "Necrotic Embrace", + ["mode"] = 3, + }, + [248732] = { + ["name"] = "Echoes of Doom", + ["mode"] = 3, + }, + [243999] = { + ["name"] = "Dark Fissure", + ["mode"] = 3, + }, + -- ########################################## + -- ## Coven ## + -- ########################################## + [253189] = { + ["name"] = "Shivan Pact", + ["mode"] = 3, + }, + [244899] = { + ["name"] = "Fiery Strike", + ["mode"] = 1, + }, + [245627] = { + ["name"] = "Whirling Saber", + ["mode"] = 1, + }, + [245281] = { + ["name"] = "Shadow Blades", + ["mode"] = 3, + }, + [245586] = { + ["name"] = "Chilled Blood", + ["mode"] = 2, + }, + -- ########################################## + -- ## Aggramar ## + -- ########################################## + [254452] = { + ["name"] = "Ravenous Blaze", + ["mode"] = 3, + }, + [244693] = { + ["name"] = "Wake of Flame", + ["mode"] = 3, + }, + [244291] = { + ["name"] = "Foe Braker", + ["mode"] = 1, + }, + [244033] = { + ["name"] = "Flame Rend", + ["mode"] = 1, + }, + [247079] = { + ["name"] = "Empowered Flame Rend", + ["mode"] = 1, + }, + [245983] = { + ["name"] = "Flare", + ["mode"] = 3, + }, + [246037] = { + ["name"] = "Empowered Flare", + ["mode"] = 3, + }, + -- ########################################## + -- ## Argus ## + -- ########################################## + [256457] = { + ["name"] = "Cone of Death", + ["mode"] = 3, + }, + [248396] = { + ["name"] = "Soulblight", + ["mode"] = 3, + }, + [257296] = { + ["name"] = "Tortured Rage", + ["mode"] = 3, + }, + [251570] = { + ["name"] = "Soulbomb", + ["mode"] = 3, + }, + -- ###################################################################################### + -- ### DUNGEONS ### + -- ###################################################################################### + -- ########################################## + -- ## Black Rook Hold ## + -- ########################################## + [225573] = { + ["name"] = "Dark Mending", + ["mode"] = 3, + }, + [200105] = { + ["name"] = "Sacrifice Soul", + ["mode"] = 3, + }, + [225732] = { + ["name"] = "Strike Down", + ["mode"] = 3, + }, + [194996] = { + ["name"] = "Soul Echoes", + ["mode"] = 3, + }, + [195254] = { + ["name"] = "Swirling Scythe", + ["mode"] = 3, + }, + [194956] = { + ["name"] = "Reap Soul", + ["mode"] = 3, + }, + [200248] = { + ["name"] = "Arcane Blitz", + ["mode"] = 3, + }, + [200345] = { + ["name"] = "Arrow Barrage", + ["mode"] = 3, + }, + [200291] = { + ["name"] = "Knife Dance", + ["mode"] = 3, + }, + [200261] = { + ["name"] = "Bonebreaking Strike", + ["mode"] = 3, + }, + [197418] = { + ["name"] = "Vengeful Shear", + ["mode"] = 3, + }, + [201139] = { + ["name"] = "Brutal Assault", + ["mode"] = 3, + }, + [198245] = { + ["name"] = "Brutal Haymaker", + ["mode"] = 3, + }, + [198079] = { + ["name"] = "Hateful Gaze", + ["mode"] = 3, + }, + -- ########################################## + -- ## Cathedral of Eternal Night ## + -- ########################################## + [241937] = { + ["name"] = "Shadow Wall", + ["mode"] = 3, + }, + [238543] = { + ["name"] = "Demonic Mending", + ["mode"] = 3, + }, + [242792] = { + ["name"] = "Vile Roots", + ["mode"] = 3, + }, + [236627] = { + ["name"] = "Floral Fulmination", + ["mode"] = 3, + }, + [239217] = { + ["name"] = "Blinding Glare", + ["mode"] = 3, + }, + [237726] = { + ["name"] = "Scornful Gaze", + ["mode"] = 3, + }, + [190620] = { + ["name"] = "Felblaze Orb", + ["mode"] = 3, + }, + [239268] = { + ["name"] = "Venom Storm", + ["mode"] = 3, + }, + [234107] = { + ["name"] = "Chaotic Energy", + ["mode"] = 3, + }, + [236543] = { + ["name"] = "Felsoul Cleave", + ["mode"] = 3, + }, + [238315] = { + ["name"] = "Shadow Sweep", + ["mode"] = 3, + }, + [243168] = { + ["name"] = "Demonic Upheaval", + ["mode"] = 3, + }, + -- ########################################## + -- ## Court of Stars ## + -- ########################################## + [210261] = { + ["name"] = "Sound Alarm", + ["mode"] = 3, + }, + [215204] = { + ["name"] = "Hinder", + ["mode"] = 3, + }, + [209027] = { + ["name"] = "Quelling Strike", + ["mode"] = 3, + }, + [209516] = { + ["name"] = "Mana Fang", + ["mode"] = 3, + }, + [209485] = { + ["name"] = "Drain Magic", + ["mode"] = 3, + }, + [209404] = { + ["name"] = "Seal Magic", + ["mode"] = 3, + }, + [209495] = { + ["name"] = "Charged Smash", + ["mode"] = 3, + }, + [225100] = { + ["name"] = "Charging Station", + ["mode"] = 3, + }, + [219488] = { + ["name"] = "Streetsweeper", + ["mode"] = 3, + }, + [212784] = { + ["name"] = "Eye Storm", + ["mode"] = 3, + }, + [211464] = { + ["name"] = "Fel Detonation", + ["mode"] = 3, + }, + [207980] = { + ["name"] = "Disintegration Beam", + ["mode"] = 3, + }, + [207979] = { + ["name"] = "Shockwave", + ["mode"] = 3, + }, + [209628] = { + ["name"] = "Piercing Gale", + ["mode"] = 3, + }, + [209676] = { + ["name"] = "Slicing Maelstrom", + ["mode"] = 3, + }, + -- ########################################## + -- ## Darkheart Thicket ## + -- ########################################## + [200631] = { + ["name"] = "Unnerving Screech", + ["mode"] = 3, + }, + [200580] = { + ["name"] = "Maddening Roar", + ["mode"] = 3, + }, + [191326] = { + ["name"] = "Breath of Corruption", + ["mode"] = 3, + }, + [201400] = { + ["name"] = "Dread Inferno", + ["mode"] = 3, + }, + [200238] = { + ["name"] = "Feed on the Weak", + ["mode"] = 3, + }, + -- ########################################## + -- ## Eye of Azshara ## + -- ########################################## + [195172] = { + ["name"] = "Mighty Slam", + ["mode"] = 3, + }, + [195129] = { + ["name"] = "Thundering Stomp", + ["mode"] = 3, + }, + [195046] = { + ["name"] = "Rejuvenating Waters", + ["mode"] = 3, + }, + [162135] = { + ["name"] = "Bellowing Roar", + ["mode"] = 3, + }, + [197105] = { + ["name"] = "Polymorh Fish", + ["mode"] = 3, + }, + [193597] = { + ["name"] = "Static Nova", + ["mode"] = 3, + }, + [193611] = { + ["name"] = "Focused Lightning", + ["mode"] = 3, + }, + [196129] = { + ["name"] = "Spray Sand", + ["mode"] = 3, + }, + [196144] = { + ["name"] = "Sandstorm", + ["mode"] = 3, + }, + [196296] = { + ["name"] = "Roiling Storm", + ["mode"] = 3, + }, + [196290] = { + ["name"] = "Chaotic Tempest", + ["mode"] = 3, + }, + [191848] = { + ["name"] = "Rampage", + ["mode"] = 3, + }, + -- ########################################## + -- ## Halls of Valor ## + -- ########################################## + [198605] = { + ["name"] = "Thunderstrike", + ["mode"] = 3, + }, + [198888] = { + ["name"] = "Lightning Breath", + ["mode"] = 3, + }, + [191284] = { + ["name"] = "Horn of Valor", + ["mode"] = 3, + }, + [198934] = { + ["name"] = "Rune of Healing", + ["mode"] = 3, + }, + [215433] = { + ["name"] = "Holy Radiance", + ["mode"] = 3, + }, + [199210] = { + ["name"] = "Penetrating Shot", + ["mode"] = 3, + }, + [191976] = { + ["name"] = "Arcing Bolt", + ["mode"] = 3, + }, + [192305] = { + ["name"] = "Eye of the Storm", + ["mode"] = 3, + }, + [192307] = { + ["name"] = "Sanctify", + ["mode"] = 3, + }, + [192048] = { + ["name"] = "Expel Light", + ["mode"] = 3, + }, + [192018] = { + ["name"] = "Shield of Light", + ["mode"] = 3, + }, + [196512] = { + ["name"] = "Claw Frenzy", + ["mode"] = 3, + }, + [199652] = { + ["name"] = "Sever", + ["mode"] = 3, + }, + [199726] = { + ["name"] = "Unruly Yell", + ["mode"] = 3, + }, + [199674] = { + ["name"] = "Wicked Dagger", + ["mode"] = 3, + }, + [193826] = { + ["name"] = "Ragnarok", + ["mode"] = 3, + }, + [198263] = { + ["name"] = "Radiant Tempest", + ["mode"] = 3, + }, + [198072] = { + ["name"] = "Spear of Light", + ["mode"] = 3, + }, + [197961] = { + ["name"] = "Runic Band", + ["mode"] = 3, + }, + [198750] = { + ["name"] = "Surge", + ["mode"] = 3, + }, + -- ########################################## + -- ## Maw of Souls ## + -- ########################################## + [193364] = { + ["name"] = "Screams of the Dead", + ["mode"] = 3, + }, + [194442] = { + ["name"] = "Six Pound Barrel", + ["mode"] = 3, + }, + [194615] = { + ["name"] = "Sea Legs", + ["mode"] = 3, + }, + [192019] = { + ["name"] = "Lantern of Darkness", + ["mode"] = 3, + }, + [194099] = { + ["name"] = "Bile Breath", + ["mode"] = 3, + }, + [198405] = { + ["name"] = "Bone Chilling Scream", + ["mode"] = 3, + }, + [194325] = { + ["name"] = "Fragment", + ["mode"] = 3, + }, + [194216] = { + ["name"] = "Cosmic Scythe", + ["mode"] = 3, + }, + [195293] = { + ["name"] = "Debilitating Shout", + ["mode"] = 3, + }, + [185539] = { + ["name"] = "Rapid Rupture", + ["mode"] = 3, + }, + [198495] = { + ["name"] = "Torrent", + ["mode"] = 3, + }, + [202098] = { + ["name"] = "Brackwater Barrage", + ["mode"] = 3, + }, + -- ########################################## + -- ## Neltharion's Lair ## + -- ########################################## + [202181] = { + ["name"] = "Stone Gaze", + ["mode"] = 3, + }, + [226296] = { + ["name"] = "Piercing Shards", + ["mode"] = 3, + }, + [188169] = { + ["name"] = "Razor Shards", + ["mode"] = 3, + }, + [198496] = { + ["name"] = "Sunder", + ["mode"] = 3, + }, + [199176] = { + ["name"] = "Spiked Tongue", + ["mode"] = 3, + }, + [193585] = { + ["name"] = "Bound", + ["mode"] = 3, + }, + [200700] = { + ["name"] = "Landslide", + ["mode"] = 3, + }, + [200732] = { + ["name"] = "Molten Crash", + ["mode"] = 3, + }, + -- ########################################## + -- ## The Arcway ## + -- ########################################## + [211771] = { + ["name"] = "Prophecies of Doom", + ["mode"] = 3, + }, + [211037] = { + ["name"] = "Celerity Zone", + ["mode"] = 3, + }, + [195791] = { + ["name"] = "Quarantine", + ["mode"] = 3, + }, + [226285] = { + ["name"] = "Demonic Ascension", + ["mode"] = 3, + }, + [197810] = { + ["name"] = "Wicked Slam", + ["mode"] = 3, + }, + [211217] = { + ["name"] = "Arcane Slicer", + ["mode"] = 3, + }, + [211115] = { + ["name"] = "Phase Breach", + ["mode"] = 3, + }, + [196392] = { + ["name"] = "Overcharge Mana", + ["mode"] = 3, + }, + [200040] = { + ["name"] = "Nether Venom", + ["mode"] = 3, + }, + [200227] = { + ["name"] = "Tangled Web", + ["mode"] = 3, + }, + [220871] = { + ["name"] = "Unstable Mana", + ["mode"] = 3, + }, + -- ########################################## + -- ## Vault of the Wardens ## + -- ########################################## + [193069] = { + ["name"] = "Nightmares", + ["mode"] = 3, + }, + [197799] = { + ["name"] = "Unleash Fury", + ["mode"] = 3, + }, + [191735] = { + ["name"] = "Deafening Screech", + ["mode"] = 3, + }, + [190836] = { + ["name"] = "Hatred", + ["mode"] = 3, + }, + [202913] = { + ["name"] = "Fel Mortar", + ["mode"] = 3, + }, + [200898] = { + ["name"] = "Teleport", + ["mode"] = 3, + }, + [199917] = { + ["name"] = "Shadow Crash", + ["mode"] = 3, + }, + [202658] = { + ["name"] = "Drain", + ["mode"] = 3, + }, + [194945] = { + ["name"] = "Lingering Gaze", + ["mode"] = 3, + }, + [196249] = { + ["name"] = "Meteor", + ["mode"] = 3, + }, + [192631] = { + ["name"] = "Lava Wreath", + ["mode"] = 3, + }, + [197513] = { + ["name"] = "Detonating Moonglaive", + ["mode"] = 3, + }, + [189469] = { + ["name"] = "Turn Kick", + ["mode"] = 3, + }, + -- ########################################## + -- ## Seat of the Triumvirate ## + -- ########################################## + -- ########################################## + -- ## Upper Karazhan ## + -- ########################################## + [230083] = { + ["name"] = "Nullification", + ["mode"] = 3, + }, + [227267] = { + ["name"] = "Summon Volatile Energy", + ["mode"] = 3, + }, + [227254] = { + ["name"] = "Evocation", + ["mode"] = 3, + }, + [229662] = { + ["name"] = "Fel Breath", + ["mode"] = 3, + }, + [36247] = { + ["name"] = "Fel Fireball", + ["mode"] = 3, + }, + [227628] = { + ["name"] = "Piercing Missiles", + ["mode"] = 3, + }, + [227615] = { + ["name"] = "Inferno Bolt", + ["mode"] = 3, + }, + [227592] = { + ["name"] = "Frostbite", + ["mode"] = 3, + }, + [228269] = { + ["name"] = "Flame Wreath", + ["mode"] = 3, + }, + [227779] = { + ["name"] = "Ceaseless Winter", + ["mode"] = 3, + }, + [229706] = { + ["name"] = "Leech Life", + ["mode"] = 3, + }, + [229714] = { + ["name"] = "Consume Magic", + ["mode"] = 3, + }, + [229159] = { + ["name"] = "Chaotic Shadows", + ["mode"] = 3, + }, + [229083] = { + ["name"] = "Burning Blast", + ["mode"] = 3, + }, + [229151] = { + ["name"] = "Disintegrate", + ["mode"] = 3, + }, + -- ########################################## + -- ## Lower Karazhan ## + -- ########################################## + [228221] = { + ["name"] = "Severe Dusting", + ["mode"] = 3, + }, + [228225] = { + ["name"] = "Sultry Heat", + ["mode"] = 3, + }, + [232153] = { + ["name"] = "Kara Kazham", + ["mode"] = 3, + }, + [227987] = { + ["name"] = "Dinner Bell", + ["mode"] = 3, + }, + [228025] = { + ["name"] = "Heat Wave", + ["mode"] = 3, + }, + [227568] = { + ["name"] = "Burning Leg Sweep", + ["mode"] = 3, + }, + [227776] = { + ["name"] = "Magic Magnificent", + ["mode"] = 3, + }, + [227966] = { + ["name"] = "Flashlight", + ["mode"] = 3, + }, + [228279] = { + ["name"] = "Shadow Rejuvenation", + ["mode"] = 3, + }, + [228278] = { + ["name"] = "Demoralizing Shout", + ["mode"] = 3, + }, + [228277] = { + ["name"] = "Shackles of Servitude", + ["mode"] = 3, + }, + [226316] = { + ["name"] = "Shadow Bolt Volley", + ["mode"] = 3, + }, + [227508] = { + ["name"] = "Mass Repentance", + ["mode"] = 3, + }, + [227793] = { + ["name"] = "Sacred Ground", + ["mode"] = 3, + }, + [227463] = { + ["name"] = "Whirling Edge", + ["mode"] = 3, + }, + [227646] = { + ["name"] = "Iron Whirlwind", + ["mode"] = 3, + }, + [227672] = { + ["name"] = "Will Breaker", + ["mode"] = 3, + }, + [227404] = { + ["name"] = "Intangible Presence", + ["mode"] = 3, + }, + [227493] = { + ["name"] = "Mortal Strike", + ["mode"] = 3, + }, + [228852] = { + ["name"] = "Shared Suffering", + ["mode"] = 3, + }, + [228837] = { + ["name"] = "#Bellowing Roar", + ["mode"] = 3, + }, +} diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Annihilation.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Annihilation.ogg new file mode 100644 index 0000000..af0688d --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Annihilation.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0448cc4136871a2d479ad6a59328334a70cb682501bf492b6d2c24ad6cf0322c +size 8006 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Arcane Blitz.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Arcane Blitz.ogg new file mode 100644 index 0000000..6d37228 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Arcane Blitz.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d433f5e62fa3b337b9d6a54978d708947949a77cea9fd9001608ae95287e5d4e +size 9757 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Arcane Slicer.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Arcane Slicer.ogg new file mode 100644 index 0000000..db543f3 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Arcane Slicer.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:430eb78391bf377bee39fcf9c7b8fbe294849eca4e73e66e3dd908df37a72cee +size 8548 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Arcing Bolt.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Arcing Bolt.ogg new file mode 100644 index 0000000..54fcc1f --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Arcing Bolt.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ceaec38e8946a2390ec922ee31a993a7f76de1c3baa38a404aafe95d4acf20de +size 8046 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Arrow Barrage.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Arrow Barrage.ogg new file mode 100644 index 0000000..a8d481c --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Arrow Barrage.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0dd5d6333fc4a391176b58f5266a97778825c81f4e0a4fbc0ccbd88f0eac4d67 +size 8269 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Bellowing Roar.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Bellowing Roar.ogg new file mode 100644 index 0000000..f16df32 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Bellowing Roar.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf80680908965585fcd0fe8e1230ba4f2d69670af8866a2e2c125645eed82b01 +size 7378 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Bile Breath.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Bile Breath.ogg new file mode 100644 index 0000000..776e4c1 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Bile Breath.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:27b9c261d93b784aade72a4527b05cb66a0e8e51b52f10a77bc31401a58f925a +size 7306 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Blinding Glare.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Blinding Glare.ogg new file mode 100644 index 0000000..ba45c08 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Blinding Glare.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b74a5932deafe257afd7d3058985493574b0d03377aa244adcbcf5c495032de8 +size 7848 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Bone Chilling Scream.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Bone Chilling Scream.ogg new file mode 100644 index 0000000..516c77a --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Bone Chilling Scream.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:663725b20636e6af00a97a293b3a93cbf8e03f8c47831fb0237e9a4fff235209 +size 10307 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Bonebreaking Strike.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Bonebreaking Strike.ogg new file mode 100644 index 0000000..d65eac6 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Bonebreaking Strike.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c40e18e647b70a204ea10c1fab75aa016299af78bda044e8fec2fe5da996ac74 +size 8897 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Bound.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Bound.ogg new file mode 100644 index 0000000..bc780da --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Bound.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b5957ed5f6d2abd0977fa4edcf10dee995035c1e961fb5cea2d7f9eb72252612 +size 6400 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Brackwater Barrage.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Brackwater Barrage.ogg new file mode 100644 index 0000000..67065a8 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Brackwater Barrage.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9518ebe459940b58c9077d5693ee357f1024f87140e86bc62a0856111f426784 +size 8755 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Breath of Corruption.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Breath of Corruption.ogg new file mode 100644 index 0000000..f62fb59 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Breath of Corruption.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4d43c566d45e45a51117e0a56d4d5711e23b92c8f06c440af28bd1f741fa40e6 +size 9949 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Brutal Assault.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Brutal Assault.ogg new file mode 100644 index 0000000..da9260e --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Brutal Assault.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:08a79b3ffcbc1f41d2f07376943c26ffa16b8025315cc1cc02de25241d63b462 +size 8101 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Brutal Haymaker.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Brutal Haymaker.ogg new file mode 100644 index 0000000..5a7eff8 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Brutal Haymaker.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c6520311f28f18ac055a60b11d343b7bf175c712133e6917746349164778f7fe +size 8365 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Burning Blast.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Burning Blast.ogg new file mode 100644 index 0000000..33e034a --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Burning Blast.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f21e338bb33bff5078a88e40054120ce89f1b7dba3b4c0e5a7554217daf87e64 +size 8360 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Burning Leg Sweep.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Burning Leg Sweep.ogg new file mode 100644 index 0000000..a181685 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Burning Leg Sweep.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:677b3426466799fd5326dead9fd4ab305b5739b190294eda47b68093c29b61e6 +size 9532 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Carnage.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Carnage.ogg new file mode 100644 index 0000000..adaf455 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Carnage.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:86d704314789840e9ef633d79e747bd23d934ece2ee4f137e8cc2862fb308ed4 +size 6172 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Ceaseless Winter.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Ceaseless Winter.ogg new file mode 100644 index 0000000..4b86474 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Ceaseless Winter.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:46feb2669442e57e66820ff6cc9408685fca16670fe5565fe31c46f4296b63fa +size 10416 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Celerity Zone.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Celerity Zone.ogg new file mode 100644 index 0000000..7ebf8b2 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Celerity Zone.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:764173e5a84924f6757faab428d865099efb11b80bfa06ef152b347620c6a805 +size 8144 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Chaotic Energy.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Chaotic Energy.ogg new file mode 100644 index 0000000..4ad2885 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Chaotic Energy.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a4fb420a4fa60be0161b7a35a1b198ea90cdb5f9008c61b677512ee7aa04cd2 +size 8727 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Chaotic Shadows.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Chaotic Shadows.ogg new file mode 100644 index 0000000..a103804 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Chaotic Shadows.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89a552a850e96a9ba19cb2bba3a1f03988ad3f47588e763909c6397c4444be52 +size 9207 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Chaotic Tempest.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Chaotic Tempest.ogg new file mode 100644 index 0000000..3655d8a --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Chaotic Tempest.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ac04f3d08ef09cb623323f07260af51a2f668dc37747bdaa52a9b53efb42ec1 +size 8721 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Charged Blasts.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Charged Blasts.ogg new file mode 100644 index 0000000..5c0413b --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Charged Blasts.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0d339230897f22e35ef0901cb7860bba97cd30f758397c42fa77ec4fde6f51c7 +size 9825 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Charged Smash.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Charged Smash.ogg new file mode 100644 index 0000000..b5ffcbe --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Charged Smash.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0cb0a7eb134cb73a8bfe1ca4b8480ef6ca92d9e36215fefe4d8412391d4df932 +size 8771 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Charging Station.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Charging Station.ogg new file mode 100644 index 0000000..3837a4a --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Charging Station.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d63a5b58307959b11c8a3044e63a25c30d244e267681ce14142f2d4acc14cdd +size 9340 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Chilled Blood.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Chilled Blood.ogg new file mode 100644 index 0000000..a8ad5ad --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Chilled Blood.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e88adc45e79d9d16feb0ec705f5548af51ed1fc9cd57a0b4e753510bebf1f93 +size 8086 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Claw Frenzy.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Claw Frenzy.ogg new file mode 100644 index 0000000..08071c9 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Claw Frenzy.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:69a577dc896e640b710b13220aacfb1973faac7948fd418f77a8fe3cdbc5ee7a +size 9510 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Collapsing World.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Collapsing World.ogg new file mode 100644 index 0000000..682e742 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Collapsing World.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e6e72e6ee375457bb5732876ae393b7efbd79a3f6e6d6c21f9db4674ccfd7cc3 +size 9112 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Cone of Death.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Cone of Death.ogg new file mode 100644 index 0000000..69fc425 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Cone of Death.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c7f05012aed10b807c2b595733e30c33d79aeff8dd527ff830b038bbd0094ff +size 8235 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Consume Magic.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Consume Magic.ogg new file mode 100644 index 0000000..97de3c0 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Consume Magic.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:77d6d554713ba383aa62608a3e2c85e3ef780b64cb6e5652e94e5e1360b2aa42 +size 9319 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Consuming Sphere.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Consuming Sphere.ogg new file mode 100644 index 0000000..db266e5 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Consuming Sphere.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7f469a7809cae85d66ee6917245547dd96b3c18677a6599baa337782718c6010 +size 10503 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Cosmic Scythe.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Cosmic Scythe.ogg new file mode 100644 index 0000000..360029b --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Cosmic Scythe.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:46564d78cc2f22a1eed5efb4ac08c5f1414447ff0e9babea34aee4d94bdb9c17 +size 8261 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Dark Mending.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Dark Mending.ogg new file mode 100644 index 0000000..aab3dfb --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Dark Mending.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3969483519b91fec68afa48bd2e505adb30313d3f8038e403824345008b50fb +size 8737 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Deafening Screech.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Deafening Screech.ogg new file mode 100644 index 0000000..609d7b3 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Deafening Screech.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d9aea4f5def330ab41564c4aa6a0670b0ab219bccee8eb556c58bf1749d14905 +size 11677 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Debilitating Shout.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Debilitating Shout.ogg new file mode 100644 index 0000000..c83a958 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Debilitating Shout.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a689f753a35a0456006befcc7e081be5dd4a51fbb9128764306b14a4310fcadf +size 9346 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Decimation.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Decimation.ogg new file mode 100644 index 0000000..73cdcac --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Decimation.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:09faaf909ebc7d378adb3383d56b51f0c47fdb7c778b5a27b208419140cfbd8c +size 8888 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Demolish.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Demolish.ogg new file mode 100644 index 0000000..afce8d0 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Demolish.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e8c4ad19e8f60c55b390368b1998686830397acc6275028676caf44033a1ce3 +size 7922 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Demonic Ascension.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Demonic Ascension.ogg new file mode 100644 index 0000000..8a4a77c --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Demonic Ascension.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3aaeb52804371dc6d77093f94e2ede99f9c2f8b498b5f5d977eb618e826b20bb +size 10089 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Demonic Mending.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Demonic Mending.ogg new file mode 100644 index 0000000..53525c8 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Demonic Mending.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa2260b7576e7527aae2569db67e571123fbad3d7efffcab88a019b8cda5a421 +size 9291 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Demonic Upheaval.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Demonic Upheaval.ogg new file mode 100644 index 0000000..1fe1201 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Demonic Upheaval.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e765691215d53b40d370ac3c7b5094c741ef35e6f1a3ced9192cb46fe6a2812 +size 10042 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Demoralizing Shout.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Demoralizing Shout.ogg new file mode 100644 index 0000000..dbd63c7 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Demoralizing Shout.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8b2efefab5492fc46403e2f989c6bae7eef8b46fa5b5644b65a5fb22b1be83a3 +size 10404 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Desolate Gaze.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Desolate Gaze.ogg new file mode 100644 index 0000000..17c61a4 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Desolate Gaze.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0d1a8e18977709da21002e64e5dc499c9a9f34d988e95a68d07dadb04dba77ad +size 9232 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Detonating Moonglaive.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Detonating Moonglaive.ogg new file mode 100644 index 0000000..ba0d91b --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Detonating Moonglaive.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:29e28db9877a4211b2dca7a3a87a5ae82748ef6d40e8c88f6fefe9b6ad4cace2 +size 9608 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Diabolic Bomb.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Diabolic Bomb.ogg new file mode 100644 index 0000000..f23c675 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Diabolic Bomb.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca0a2f706d18dacb22a402d3aba8c8cd54f9e9c0cbacc68860b9be5ee508dcd6 +size 10495 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Dinner Bell.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Dinner Bell.ogg new file mode 100644 index 0000000..6fd7a70 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Dinner Bell.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f61d84ed3e1e539e45745438192ecbd9333a0dcd5bebbf478f5081a3c5583e1 +size 7376 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Disintegrate.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Disintegrate.ogg new file mode 100644 index 0000000..b95bcfd --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Disintegrate.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8afee1b8557bbe934ba2167884a65d68244fb8c9f524c6d6a2a7642cf9cf78a4 +size 7740 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Disintegration Beam.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Disintegration Beam.ogg new file mode 100644 index 0000000..9b12c77 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Disintegration Beam.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:268cd1f353bc6d5af42455f6f31dd14411516599247c31c1f1ab781c5c2087cb +size 12271 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Drain Magic.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Drain Magic.ogg new file mode 100644 index 0000000..81a9118 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Drain Magic.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ba3fe4f38a741ddb24e284bdfd7a25f85d8ba0497ca68e31e62d0f36c0b43494 +size 7834 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Drain.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Drain.ogg new file mode 100644 index 0000000..93ff71d --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Drain.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:476988f167e783c2905b47bc0df2f8b77f6763fb2e2c1dec3a57b282c9fe31b3 +size 6888 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Dread Inferno.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Dread Inferno.ogg new file mode 100644 index 0000000..30f475a --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Dread Inferno.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c8e7715f625fbdfe7d09b0b21ac19699af56b6a8c45e6c6636a7a4595c6bde8e +size 9532 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Echoes of Doom.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Echoes of Doom.ogg new file mode 100644 index 0000000..1b67459 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Echoes of Doom.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:53044903dc7d919bb050e8697c8f09b3d2e47a4df2d75ac5fda9add30deb1187 +size 8698 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Empowered Flame Rend.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Empowered Flame Rend.ogg new file mode 100644 index 0000000..b73a577 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Empowered Flame Rend.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a514f71cd4b0b085483ab84cd4d55a02a30b50543fda55c8537938dcd25899ff +size 9494 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Empowered Flare.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Empowered Flare.ogg new file mode 100644 index 0000000..a9d8119 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Empowered Flare.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c0a37e9668055b97c4b2cacb35c1ae54e919754522cf833b009d5cb2f98a4581 +size 8797 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Empowered Pulse Grenade.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Empowered Pulse Grenade.ogg new file mode 100644 index 0000000..844459e --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Empowered Pulse Grenade.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a600d779929163f6b59357d47c1e6af7184be23637aac6ab751cdf5423334b52 +size 10431 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Empowered Shock Lance.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Empowered Shock Lance.ogg new file mode 100644 index 0000000..beb66d9 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Empowered Shock Lance.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:57c055e3331fd658ad58a1adda5292fd0c4e30611731d2cccbe096eb6a62c4a8 +size 12310 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Empowered Shrapnel Blast.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Empowered Shrapnel Blast.ogg new file mode 100644 index 0000000..374b929 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Empowered Shrapnel Blast.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:513d360ba9222a9f992b282f31e671d20b1979094f5eb5ad2c284f883dac9494 +size 11974 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Enflame Corruption.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Enflame Corruption.ogg new file mode 100644 index 0000000..1955eda --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Enflame Corruption.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d72ad90b699b1baad5ae8410e230b4efdbcb016664a24f341a43aa30f1a8e44b +size 10831 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Entropic Mine.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Entropic Mine.ogg new file mode 100644 index 0000000..c69f069 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Entropic Mine.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3397e3f083022342df56b7ed2fb9e3bdf5fa8da2e72a78287047cb96741dadae +size 9015 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Eradication.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Eradication.ogg new file mode 100644 index 0000000..e514dfc --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Eradication.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6af216e0179a8a56029e5c6c41f0e48fbeba28a4030bd99954b115d041d2deef +size 9002 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Evocation.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Evocation.ogg new file mode 100644 index 0000000..7c3b383 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Evocation.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca2e786edae7997d8e5dc3acf21b5964094dac581f996acdb4fce8817183ab84 +size 8243 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Expel Light.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Expel Light.ogg new file mode 100644 index 0000000..f9f5bf2 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Expel Light.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:29cfb5580ce9741f7265af7a0f6e2337747a5fcd6a58c30973ed8214da4bb6b0 +size 10264 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Eye Storm.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Eye Storm.ogg new file mode 100644 index 0000000..6db50a6 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Eye Storm.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5f7cd2198c3c1bc57aa4a2538d884f91c162099ebf3806bb2e3f7cef766f7ab +size 7521 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Eye of the Storm.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Eye of the Storm.ogg new file mode 100644 index 0000000..39589f3 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Eye of the Storm.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:efec128f27cbd7da06cda14e0ff3b646e47c910fa2d83dc084acef8adb19d30f +size 8500 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Feed on the Weak.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Feed on the Weak.ogg new file mode 100644 index 0000000..dae0503 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Feed on the Weak.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d68a5714c02ff6128b740b0e087f311e4fcc074bcbccfc5fb637d1f363b63b2e +size 7221 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Fel Bombardment.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Fel Bombardment.ogg new file mode 100644 index 0000000..bc97b68 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Fel Bombardment.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ca886ccae970f955ca56a39d7e041d5b892d6be4266f6c6d03474bd1f2ec3fd +size 9060 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Fel Breath.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Fel Breath.ogg new file mode 100644 index 0000000..8288d62 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Fel Breath.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:028d0b40b817b3adab3b28ce84aa3c72c468e3fc935989c8bcce43d1f52d4852 +size 6535 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Fel Detonation.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Fel Detonation.ogg new file mode 100644 index 0000000..2746f44 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Fel Detonation.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3cbd089fda41fd672e8c7240c1eac7370f797b09376ebd93cb7f7cdd38673c96 +size 8761 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Fel Fireball.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Fel Fireball.ogg new file mode 100644 index 0000000..afe8f8c --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Fel Fireball.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c3861b36faa7f6bfa66ecb2a64fa7ac3270afeb828359081d4f0ae88b005e15 +size 9051 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Fel Mortar.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Fel Mortar.ogg new file mode 100644 index 0000000..b3425d6 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Fel Mortar.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c5fe9a9d495f2634cd06e638fb5a579f7f360e64451f1b6e3565e8fea283fea7 +size 7498 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Felblaze Orb.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Felblaze Orb.ogg new file mode 100644 index 0000000..5ba3901 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Felblaze Orb.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d00360a8e1e4e7c7ee1964e37efc22088ebc35647b4205646a88a6940f82c8e9 +size 8655 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Felsoul Cleave.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Felsoul Cleave.ogg new file mode 100644 index 0000000..4370a37 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Felsoul Cleave.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b357828394a59681412c65dbd48252c578cb3fad1946ba11ced451fe0961ca42 +size 8861 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Fiery Strike.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Fiery Strike.ogg new file mode 100644 index 0000000..37dcb28 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Fiery Strike.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aba7d722b73de3433df043ee3edc1f33c584719c71c8db2b28b06792daae5d70 +size 7880 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Flame Rend.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Flame Rend.ogg new file mode 100644 index 0000000..83e3a5d --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Flame Rend.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d34f83694bcda6bef4742fd0e835fa9a89f075aff617d5afeaa2e7d85c1a966 +size 6728 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Flame Wreath.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Flame Wreath.ogg new file mode 100644 index 0000000..a4b5f10 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Flame Wreath.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:57800dae5100fe9cd04a08348490b2c51ae9a7d766bc6ce815acc5c9fecba2c3 +size 6391 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Flare.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Flare.ogg new file mode 100644 index 0000000..ff65e2e --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Flare.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf04de04a856c50626424ffdcfb7cc16e9e50bb516cf5b2f75ee52b4f319a15b +size 5802 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Flashlight.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Flashlight.ogg new file mode 100644 index 0000000..df739b6 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Flashlight.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89e4054cf56599e0b21dcfba001e5222306aaebedf815337fe242adf48c71eef +size 6618 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Floral Fulmination.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Floral Fulmination.ogg new file mode 100644 index 0000000..7ed5e57 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Floral Fulmination.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:90ecbcbe31bc08634d1d14b919c8203f97c9fd9765e1a5d039a84b9044b9cead +size 10994 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Focused Lightning.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Focused Lightning.ogg new file mode 100644 index 0000000..c36a2f0 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Focused Lightning.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2afbdc5dd9e5b0c4f4ffd743e2d978ba68e573366bec241779ba48b7e48518fe +size 9398 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Foe Braker.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Foe Braker.ogg new file mode 100644 index 0000000..765c9f4 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Foe Braker.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa00e456ff942bd3fb6778a04d8426aa53d8f98956941160b1b048bd9072e8cb +size 8578 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Forging Strike.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Forging Strike.ogg new file mode 100644 index 0000000..88c545b --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Forging Strike.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:78870d7fd89448368fe50da6ee9e59fca86dba54b707c399de13d96988acca8d +size 8444 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Fragment.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Fragment.ogg new file mode 100644 index 0000000..fa2885b --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Fragment.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5fc1ba386cbedbec2f076feaf39c15031ee2dc58fdfe539c9945a3bcccc0c723 +size 5601 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Frostbite.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Frostbite.ogg new file mode 100644 index 0000000..2b755d0 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Frostbite.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e80872709c62f7960348bdd99af179dd92ca350268986dc23292ca1b7375d19b +size 6907 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Hateful Gaze.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Hateful Gaze.ogg new file mode 100644 index 0000000..c78845c --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Hateful Gaze.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11523d8e4bdbe137aba49457759b58b058df3263afc151a63f73abd4bde3a7c6 +size 8306 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Hatred.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Hatred.ogg new file mode 100644 index 0000000..78c7fbe --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Hatred.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c1844c57ae486e0da3b0e2ef7d09409d61c56b043b6a9c034fb2673d957aa5d +size 7641 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Healing Touch.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Healing Touch.ogg new file mode 100644 index 0000000..0a3d7b7 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Healing Touch.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4c21a1b6fe54db07257d5f69e96d4c6fc488f8c2ff35d8c35ab244df780f1fc +size 8160 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Heat Wave.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Heat Wave.ogg new file mode 100644 index 0000000..48f4159 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Heat Wave.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:67aa6eea719d76fb3de7c6ce9f2d4ad0ae7188fb6e32ee08553bca75f2e471f8 +size 7118 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Hinder.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Hinder.ogg new file mode 100644 index 0000000..a169407 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Hinder.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d6025173f52893aa3e1e2b1206bdaaf2e296e7bf9617b3ba15125b0420c3d294 +size 6558 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Holy Radiance.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Holy Radiance.ogg new file mode 100644 index 0000000..4f7c8de --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Holy Radiance.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b653fe271dfe7be727e77aab9a15de349d952f9fd55117a10ab4257cbbaaa1f5 +size 8616 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Horn of Valor.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Horn of Valor.ogg new file mode 100644 index 0000000..498c223 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Horn of Valor.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:444510bf32fbf9f0283a715a98e23eb0b0219781849339868167502713e140f9 +size 8456 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Inferno Bolt.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Inferno Bolt.ogg new file mode 100644 index 0000000..6f7ae40 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Inferno Bolt.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f1c739b9108b5305948e71d1d20296bd8b5ca58159c8a322f3b8f2ebbb0b073c +size 8148 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Intangible Presence.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Intangible Presence.ogg new file mode 100644 index 0000000..516d88e --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Intangible Presence.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9d1b08325e197326a212a424bfd50ae525728bea7f1804e8d92332e9da88fadc +size 10966 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Iron Whirlwind.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Iron Whirlwind.ogg new file mode 100644 index 0000000..ac5c3ff --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Iron Whirlwind.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ef6b365b3b64aa259cf80d501e80535153126a3c05737187f772f8543b5fc308 +size 7926 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Kara Kazham.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Kara Kazham.ogg new file mode 100644 index 0000000..0afd85f --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Kara Kazham.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ffbce4acc752bd9f41f5db3c98e59b0c859c20796fee76041657ec66db00d80a +size 7926 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Knife Dance.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Knife Dance.ogg new file mode 100644 index 0000000..cbd2614 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Knife Dance.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:97c3e424efee1a8abac5833f0b52772c63c9e9dabe2548296fb44dfd2b8bf190 +size 8040 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Landslide.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Landslide.ogg new file mode 100644 index 0000000..d8b31e2 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Landslide.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d7196b8a0ee8b4f7bf32f807ed2f93de30e4ea2920dd46f67f5c3fc30eeb2d18 +size 7812 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Lantern of Darkness.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Lantern of Darkness.ogg new file mode 100644 index 0000000..aa423ea --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Lantern of Darkness.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9a2f4c04bc40a2468c768776d8ad995b2e095ef54cc71bec2b299c54ea53a31c +size 9157 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Lava Wreath.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Lava Wreath.ogg new file mode 100644 index 0000000..0b8e0ba --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Lava Wreath.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f0836d09f7e7a8f00d1cb8657855b80b43a00856292861de01741bc571c1eed +size 7422 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Leech Life.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Leech Life.ogg new file mode 100644 index 0000000..af841fa --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Leech Life.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c87cf11d87c25a7813a4480cc8095e27c7283568e8f765c1faa0ef384dedebf +size 7861 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Lifebloom.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Lifebloom.ogg new file mode 100644 index 0000000..6321476 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Lifebloom.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8841db5acffbaa9be6293b0fbe18a06704c8f2ac759e2ed673ee9918843c7d67 +size 6780 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Lightning Breath.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Lightning Breath.ogg new file mode 100644 index 0000000..718f07c --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Lightning Breath.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:568a586429499f2484b3357d2d170ec8210a8503e0db2e009ef28c4084c0bde5 +size 7942 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Lingering Gaze.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Lingering Gaze.ogg new file mode 100644 index 0000000..f8079ec --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Lingering Gaze.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:afe0af485004014e60ab286da9a20fb6d151f05d2306615ff21a63840d1beeff +size 8712 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Maddening Roar.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Maddening Roar.ogg new file mode 100644 index 0000000..bddce1e --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Maddening Roar.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44be8e70c04ca99c08090356a75a80bae1790881ff9f379a30a306d8b736a5f8 +size 8963 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Magic Magnificent.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Magic Magnificent.ogg new file mode 100644 index 0000000..a15edf9 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Magic Magnificent.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f1982173910839584987b9cae467809d5015fad99cd5ec5d35ba4cdfdc31501e +size 10944 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Mana Fang.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Mana Fang.ogg new file mode 100644 index 0000000..4c95dfb --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Mana Fang.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d38483b5522a528b2b61b37ac00381a89dfca6dd13c3ad2a8f467a499a67b03d +size 7678 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Marked Prey.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Marked Prey.ogg new file mode 100644 index 0000000..4419271 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Marked Prey.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a326e937ea815c263eac508a22ce38586f2ba289de2452add6987121ed56c7b9 +size 7985 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Mass Repentance.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Mass Repentance.ogg new file mode 100644 index 0000000..c6134c2 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Mass Repentance.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:77f48c4861e681f69a1e81685e073f3d5ec31694fb50126c9f24a718a287cd92 +size 8845 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Meteor.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Meteor.ogg new file mode 100644 index 0000000..271bfa4 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Meteor.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e5b758d43e6eaceac83809c50ad859bf0b16e08d38ae53231dc145a1d02c9c1 +size 7009 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Mighty Slam.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Mighty Slam.ogg new file mode 100644 index 0000000..5543769 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Mighty Slam.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:39e0fbec7cf384404f5ef0456378c429e23ed2894d59865effb9901737f41c99 +size 7983 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Misery.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Misery.ogg new file mode 100644 index 0000000..b6ba924 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Misery.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:529af50474216494eaeb78a52f78336ff92a901f3d21b51912cb9548607f1bb4 +size 6518 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Molten Crash.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Molten Crash.ogg new file mode 100644 index 0000000..1db7a3d --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Molten Crash.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:795261ca526fc50a7de01807dd6e21000fa4c5fde5a6f3163c2534647c51d7fd +size 8619 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Molten Touch.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Molten Touch.ogg new file mode 100644 index 0000000..c098e65 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Molten Touch.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6fea820ca90105dea4e4406dcadb9831572bf6b2b3a234a391cd7ba8d4b74233 +size 9022 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Mortal Strike.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Mortal Strike.ogg new file mode 100644 index 0000000..d0a4383 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Mortal Strike.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:05f6dfc2e70c58f9d54cd877cfa4c1a9dadbe0195cd902f3382121dfddc873bc +size 7244 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Necrotic Embrace.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Necrotic Embrace.ogg new file mode 100644 index 0000000..af73599 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Necrotic Embrace.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f23adf243127a5861d7032788e1addd749425052781cc49037defa2b23e943fb +size 10397 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Nether Venom.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Nether Venom.ogg new file mode 100644 index 0000000..255460c --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Nether Venom.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7be54df847f3852a8ec82a50098b761551df27431543948151078f447b17b4db +size 8355 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Nightmares.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Nightmares.ogg new file mode 100644 index 0000000..12b73f5 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Nightmares.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:47603e9205f304a053e8e0ef88193e163e933fae4154055547f50397fa5715a3 +size 8148 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Nullification.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Nullification.ogg new file mode 100644 index 0000000..1fa1a36 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Nullification.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf3383d41d8c746cccbbc9e0472dfd23efb4498f2eaeba4dfa8428e59081a567 +size 8990 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Overcharge Mana.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Overcharge Mana.ogg new file mode 100644 index 0000000..9db6dce --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Overcharge Mana.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a4a2a65590dadf1c964d00cfc1ca572128406e4420956b9f4258cd2682648cf +size 9974 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Penetrating Shot.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Penetrating Shot.ogg new file mode 100644 index 0000000..061f28f --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Penetrating Shot.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e6b4bc2b49e847423d96144120e5032f851c5ec8e8bd8a47aa5498f84e5ba945 +size 8753 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Phase Breach.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Phase Breach.ogg new file mode 100644 index 0000000..a4d7ae3 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Phase Breach.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:29104252ae867c7eda034c47f7a003cb682b720f80c4fe49c8da657f3e715052 +size 8558 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Piercing Gale.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Piercing Gale.ogg new file mode 100644 index 0000000..cd2fcc9 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Piercing Gale.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eaecb83e874a34e2176b9d3ecb476de2d6dcae7f0525001bb76d806957b99c17 +size 9239 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Piercing Missiles.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Piercing Missiles.ogg new file mode 100644 index 0000000..e47359b --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Piercing Missiles.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f0bb6b910f5a848f81286a8381ef8a322b570c57f741bf948cf48dec010dff6 +size 9222 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Piercing Shards.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Piercing Shards.ogg new file mode 100644 index 0000000..c4ca241 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Piercing Shards.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:65551b1b757d1275a6355106190ae4a94a462cfaed2df46747cada0d949c1f92 +size 9585 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Polymorh Fish.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Polymorh Fish.ogg new file mode 100644 index 0000000..a8e75b9 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Polymorh Fish.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4391b26812ecc60f5fe79a521b3f9e151f193fb1743f9bc20496904cd49f5694 +size 8735 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Prophecies of Doom.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Prophecies of Doom.ogg new file mode 100644 index 0000000..7ebf5ae --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Prophecies of Doom.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e80f3ee91072ea388278e2c35e5ad26c823e4e5a8109da871baae92dbf86681 +size 10887 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Pulse Grenade.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Pulse Grenade.ogg new file mode 100644 index 0000000..ac808eb --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Pulse Grenade.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb628941909355d47ba71f5fc636c2e5f16023cafa2f43f168c0749100d602d9 +size 7093 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Quarantine.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Quarantine.ogg new file mode 100644 index 0000000..d27e26b --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Quarantine.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c25cfa1fc4596bde4bd9105c8bc450e3b7bffe022a78edd82b01b1efc7d411b8 +size 7942 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Quelling Strike.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Quelling Strike.ogg new file mode 100644 index 0000000..a374011 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Quelling Strike.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7808b73f7d50e833e684ec48ee98cf15a33b7156197831fbf8f1ee2e1816075 +size 8034 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Radiant Tempest.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Radiant Tempest.ogg new file mode 100644 index 0000000..15a127b --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Radiant Tempest.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f5854df5b3ec953d02fef01370ce4202fd5f993b7082e7a066ed14761ee0579 +size 9938 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Ragnarok.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Ragnarok.ogg new file mode 100644 index 0000000..f0c8c0f --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Ragnarok.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4d1eb53bac5ae9ba2749fd9e3b4ed02599056e67d6a3d77b0197bac1a2cda116 +size 7649 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Rampage.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Rampage.ogg new file mode 100644 index 0000000..ab15ecd --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Rampage.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:563f2132aaaa6695cd2cc1af417fb799f7bf5e66b16bd919a8532234de2782ce +size 8037 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Rapid Rupture.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Rapid Rupture.ogg new file mode 100644 index 0000000..010db0a --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Rapid Rupture.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:69c673a9ff96ac3adeb5857f307f942702854af3b18d5e48f5c0feca47401f28 +size 9806 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Ravenous Blaze.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Ravenous Blaze.ogg new file mode 100644 index 0000000..fb5a815 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Ravenous Blaze.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a666552f49a5a855f91a8b951d623673b7bd1fd9fef9fc4834ad908c92b67232 +size 9541 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Razor Shards.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Razor Shards.ogg new file mode 100644 index 0000000..abefcec --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Razor Shards.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a7452c10a2f81b48521fc1995b3a3ea36e1a183b785b54c8be191748ac196e5 +size 8950 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Reality Tear.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Reality Tear.ogg new file mode 100644 index 0000000..7d0e2c9 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Reality Tear.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec514a6d9adea6f0b07aa6f58dfac1b5d94e59d7a0f01059b14fbc0386340cc5 +size 9376 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Reap Soul.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Reap Soul.ogg new file mode 100644 index 0000000..9a0620e --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Reap Soul.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:14b0c1d136468db9e47b21236e61aa335534c81bcb966e590e19475048796ccd +size 8205 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Rejuvenating Waters.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Rejuvenating Waters.ogg new file mode 100644 index 0000000..b888ad8 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Rejuvenating Waters.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:717c0a275a0e40ef9b1ee7f0250acc9d6611d7732da5b712cda4907c238b7867 +size 12325 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Rejuvenation.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Rejuvenation.ogg new file mode 100644 index 0000000..e35e0c9 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Rejuvenation.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8a3a4286bac56908b6ac9f55fa68fc644372f7f2b9a0977a2ecd3b8e00e6f31b +size 9459 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Reverberating Strike.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Reverberating Strike.ogg new file mode 100644 index 0000000..f107a20 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Reverberating Strike.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2470d104bf906bc8b2e6ce09cef0e075e905400ffdb3bfce9569487d3e7f8b36 +size 9529 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Roiling Storm.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Roiling Storm.ogg new file mode 100644 index 0000000..3f0be6e --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Roiling Storm.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:808834774209b92b210b4e8f9c536b28f58d2d996ea63f618399a180d766cfb6 +size 8598 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Ruiner.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Ruiner.ogg new file mode 100644 index 0000000..f9140fc --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Ruiner.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b99f357a8318eab7a3ed4c833e86f288309e4f8bff6371947b6784ab90ced78 +size 7220 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Rune of Healing.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Rune of Healing.ogg new file mode 100644 index 0000000..122810b --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Rune of Healing.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7f3cbd5d156626b8004ec5beef5855b55ff145418410d41b8b17c4fc505449d +size 8482 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Runic Band.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Runic Band.ogg new file mode 100644 index 0000000..9e6d7e1 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Runic Band.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22d1dc9019094333375abf00d19c2db48f9900bc66d90419d2ef6628ccce7382 +size 8643 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Sacred Ground.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Sacred Ground.ogg new file mode 100644 index 0000000..63efac6 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Sacred Ground.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:892edfa3eded83016cf134dc9b684b72927aada71951f77d365b9584a5d3ac9b +size 9778 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Sacrifice Soul.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Sacrifice Soul.ogg new file mode 100644 index 0000000..2847be3 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Sacrifice Soul.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5db660e039884e12f346a88316c3cf1d3f96577c4f249f370787f42e4e076dff +size 10470 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Sanctify.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Sanctify.ogg new file mode 100644 index 0000000..2d69100 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Sanctify.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:532025794368e16335b5de4071c04a3be02dfec731c2511018fa6f637ebec8e3 +size 8107 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Sandstorm.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Sandstorm.ogg new file mode 100644 index 0000000..382da84 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Sandstorm.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e19a4d728dca89d6c37a2fdab9b258fad0af400d845f7621917f6a39d5fd298b +size 8278 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Scornful Gaze.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Scornful Gaze.ogg new file mode 100644 index 0000000..2f3a693 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Scornful Gaze.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7167db10e9f9e1d9588aad9d5ae38faad892468ab78218c4ba5e621d9d316042 +size 9328 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Screams of the Dead.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Screams of the Dead.ogg new file mode 100644 index 0000000..9f30a1a --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Screams of the Dead.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d56464b30cad497e4cd833c995fc9736c92cae2ba382e0ee676a72c925bc7082 +size 9033 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Sea Legs.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Sea Legs.ogg new file mode 100644 index 0000000..579994e --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Sea Legs.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ebcaf55e379280aeaca406fb5fad1df07084dee54468ff42709c6c2023092b21 +size 7792 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Seal Magic.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Seal Magic.ogg new file mode 100644 index 0000000..7167e02 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Seal Magic.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:972c72a2939ae2ea929a9129a39f1e78a44fdb78be94f4cf5f0d9f0649964985 +size 7775 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Sever.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Sever.ogg new file mode 100644 index 0000000..21ab8d4 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Sever.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1be50dfe11b8f41f37120ab26f272e86040d380dc8dcf62b3e680fe546c07005 +size 6216 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Severe Dusting.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Severe Dusting.ogg new file mode 100644 index 0000000..ed993bb --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Severe Dusting.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d269132de9ecc705ad146fc3199eefb94fb89faf8cde78879a484280f8374f8f +size 9645 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Shackles of Servitude.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Shackles of Servitude.ogg new file mode 100644 index 0000000..0684ec1 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Shackles of Servitude.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c6bfba5009f851857a309e726869bcd09d0f0f2bcb55225564176109e6209cb +size 12352 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Shadow Blades.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Shadow Blades.ogg new file mode 100644 index 0000000..3fb766d --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Shadow Blades.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5353184cca735237122567d6edd928f02972b36690b5496c50f301b2b2735143 +size 8305 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Shadow Bolt Volley.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Shadow Bolt Volley.ogg new file mode 100644 index 0000000..65ccda0 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Shadow Bolt Volley.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc1a7eb806e5b5e2c25e31cefae32d17c1ec346248a848583c2d895720b607f0 +size 8125 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Shadow Crash.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Shadow Crash.ogg new file mode 100644 index 0000000..648f0ba --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Shadow Crash.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7a63036ae1ecf8bf4ba913fb43b6126d11e179a3df77a25d779c3ba98c66936 +size 8432 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Shadow Rejuvenation.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Shadow Rejuvenation.ogg new file mode 100644 index 0000000..c9254d6 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Shadow Rejuvenation.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04759eb764471e38aab4c37816ded29d58aa68d7ed9c520b78ce97470fa9ef4d +size 10768 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Shadow Strike.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Shadow Strike.ogg new file mode 100644 index 0000000..13c8cc4 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Shadow Strike.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23cc92c8f2448d31a61c8c389a8c97fa74d89a51e63b88dcccbbf3935874f9d1 +size 7416 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Shadow Sweep.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Shadow Sweep.ogg new file mode 100644 index 0000000..62d064b --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Shadow Sweep.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4cc91b5bfd1ebaf7ef5db0fb7358b174c2c972e9ab5d878eff8b4355d41f8b9 +size 7109 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Shadow Wall.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Shadow Wall.ogg new file mode 100644 index 0000000..ec08d18 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Shadow Wall.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c4fd0b2cdb7bfbf8cdfe37124bba19fad91a7899a209dad9b921141ed8ffd504 +size 7991 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Shared Suffering.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Shared Suffering.ogg new file mode 100644 index 0000000..5dbde6b --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Shared Suffering.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d5835e8331d75dca049e8118a87c1e9d896e5b8aa9150b2874d0967ed0214a8d +size 9006 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Shield of Light.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Shield of Light.ogg new file mode 100644 index 0000000..b8039bc --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Shield of Light.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ad7777db93dc8464171bec4f5fc135b53726b7aa6ab1521e1cf4601de6df2103 +size 8062 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Shivan Pact.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Shivan Pact.ogg new file mode 100644 index 0000000..2847d26 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Shivan Pact.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5cba41c314164b18d77e7023470dcf41ad6d49eaa93a57beb42bd4b8ee18c6d7 +size 8016 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Shock Lance.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Shock Lance.ogg new file mode 100644 index 0000000..54951db --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Shock Lance.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a18349357d1133f6dd420588283bf1f5b0a972a6c842aef3e001b05b28800f7 +size 8745 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Shockwave.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Shockwave.ogg new file mode 100644 index 0000000..6d34823 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Shockwave.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1b87d5808fafab78c5b2d177b8eadb628ce98ae70c4f086edeaea17dcd7f1862 +size 8941 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Siphon Corruption.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Siphon Corruption.ogg new file mode 100644 index 0000000..bee6df3 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Siphon Corruption.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:944574ee16791e7374ff3497650644602cb069f89b822ae71ec28bb5cda028cc +size 9435 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Six Pound Barrel.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Six Pound Barrel.ogg new file mode 100644 index 0000000..f6fe681 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Six Pound Barrel.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a379854d20c89018ced4896755e0b824de32439e758dce4fc4f980847e645cd +size 11461 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Sleep Canister.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Sleep Canister.ogg new file mode 100644 index 0000000..b508647 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Sleep Canister.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df8ef899645f80fa44782a42f9e0a1f1f38b3ac7f840f9724d31ccf3b3738a2d +size 9281 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Slicing Maelstrom.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Slicing Maelstrom.ogg new file mode 100644 index 0000000..7ad5eab --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Slicing Maelstrom.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4d0e48a3cd490e8addc04f23e855a1d2ae65b0801ace9f8ab50beff5bc624fa +size 10777 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Soul Echoes.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Soul Echoes.ogg new file mode 100644 index 0000000..4f9f1e3 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Soul Echoes.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ad7d32d72db4bc789540ca6151aa6265279c08574b5ef11d29bce3e2d61d56f +size 9551 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Soulblight.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Soulblight.ogg new file mode 100644 index 0000000..cd1da8d --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Soulblight.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:75dfe4636c2fd1f95ea93dc5cdd64c6090f949e0029029feaf67c950a3ed0529 +size 7177 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Soulbomb.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Soulbomb.ogg new file mode 100644 index 0000000..6577e43 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Soulbomb.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:122dbca88ec331128d3a1b05889c8741a24c9f50b16449d04e9e0403c8275e40 +size 7816 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Sound Alarm.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Sound Alarm.ogg new file mode 100644 index 0000000..9eb3bc6 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Sound Alarm.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d927be12de9e7a6a6069f0308b93df6a9345ab69faa07e846d29fd63ab727575 +size 7132 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Spear of Light.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Spear of Light.ogg new file mode 100644 index 0000000..f786eca --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Spear of Light.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:26bfbace38801b3e602a1716bbb75301b2f938bf7838ef925100ff8d1892d837 +size 8819 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Spiked Tongue.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Spiked Tongue.ogg new file mode 100644 index 0000000..b021213 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Spiked Tongue.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d0120182f89b631939fe2205fd2bca9599dc29b2a078e9bd4a20fc6edc1cfeec +size 7593 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Spray Sand.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Spray Sand.ogg new file mode 100644 index 0000000..deb5048 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Spray Sand.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:261131b323b59217ba022c885eda99a12f26ea4bc208dd5f2c5f81fb8e71d6de +size 11168 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Stasis Trap.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Stasis Trap.ogg new file mode 100644 index 0000000..4aa4e6e --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Stasis Trap.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:374c566190d79c5f252973a704a2382529dd7756650350629e890863e5d5cf53 +size 9451 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Static Nova.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Static Nova.ogg new file mode 100644 index 0000000..10c747a --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Static Nova.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:64f49353f4b4ee019d60e9ae15339fedcbb009cea09fa3361a1a523ee5656a7c +size 8420 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Stone Gaze.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Stone Gaze.ogg new file mode 100644 index 0000000..4ab1c77 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Stone Gaze.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51727fa42bed96ac6ad941b25c6aa2d604adbc26bcb6a4cfe75c7e9ff84f51f8 +size 8737 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Streetsweeper.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Streetsweeper.ogg new file mode 100644 index 0000000..469cf33 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Streetsweeper.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f30367f3671d5e6050b24bd2f0cbe9ccf34767d1bbbd5f97f51cdfdba7768ffe +size 9013 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Strike Down.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Strike Down.ogg new file mode 100644 index 0000000..9a0fa5b --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Strike Down.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:59ab857655175f701ddef13d30ec735d4dd4d1a66449f72c39f5fb9c26347a8f +size 9213 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Sultry Heat.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Sultry Heat.ogg new file mode 100644 index 0000000..a71bf65 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Sultry Heat.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f61a3abb30c0c42da6c3cdc15aeb5abc13cf51c1ed8842a57ebb9316c052fe5 +size 9298 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Summon Reinforcements.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Summon Reinforcements.ogg new file mode 100644 index 0000000..0826c42 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Summon Reinforcements.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fd6e9515626417183e231ed4950527de25ac140d410e64c9a978b686a48adbbf +size 10690 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Summon Volatile Energy.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Summon Volatile Energy.ogg new file mode 100644 index 0000000..e194c63 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Summon Volatile Energy.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:290dfd509db0fca0a9b39a2646322a77cd0f87418d57a40639868e221ed3f7fc +size 13151 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Sunder.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Sunder.ogg new file mode 100644 index 0000000..aa6024a --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Sunder.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cc7eaad93f405d38685cf36c3e191b80fe2e02f392dca7ec75a8b0a443456cec +size 7004 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Surge.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Surge.ogg new file mode 100644 index 0000000..375a76f --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Surge.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cfec9a87a6c981386f6568d4819c8ad30710c6b50a4fcee1c2eb5f2a283ee73f +size 8062 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Swirling Scythe.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Swirling Scythe.ogg new file mode 100644 index 0000000..de7543b --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Swirling Scythe.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:662ea4f4e8b4ef36d6c1d20b5b135057e74ab8ce26204b20fc44d0a47eee9d68 +size 8634 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Tangled Web.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Tangled Web.ogg new file mode 100644 index 0000000..4a0ed97 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Tangled Web.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f01e1659550bd664f063996b7663970f5607829bf6077a8f2a608c3a51c118f0 +size 8406 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Teleport.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Teleport.ogg new file mode 100644 index 0000000..5f85c26 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Teleport.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c6b9163dc15458d5adadcbde87571dbee75115c9b010af87d553947767161e8a +size 6835 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Thundering Stomp.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Thundering Stomp.ogg new file mode 100644 index 0000000..43cf561 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Thundering Stomp.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dac39b77c315dac69633572c649dddc7119d17093a400b3d611d266479515dac +size 9646 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Thunderstrike.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Thunderstrike.ogg new file mode 100644 index 0000000..4768aea --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Thunderstrike.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e9b96aa93a2da2f2678c3f36e98179f3a6701dfb5ab616ce80c7aadea9a3155f +size 6494 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Torrent.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Torrent.ogg new file mode 100644 index 0000000..ce6604f --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Torrent.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d250a33a15f54cad370871b480a04dcd384a7e8cdfc7690f195cd84daa19b24 +size 6320 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Tortured Rage.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Tortured Rage.ogg new file mode 100644 index 0000000..478cb12 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Tortured Rage.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:731b6c7a490dbed75f29c8179e6dd1f6b5363b2fd53e6e7b8bf6206caccfc996 +size 9646 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Turn Kick.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Turn Kick.ogg new file mode 100644 index 0000000..61e4364 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Turn Kick.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a61a3bb2bda7900af12a1784f607a129012109371d97bc47e6ceaaa38c908211 +size 6734 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Unleash Fury.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Unleash Fury.ogg new file mode 100644 index 0000000..d7ee787 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Unleash Fury.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fede0b29828b50ee92974c4b355090d88a4455e58822de4d6160bd6e8aa6a565 +size 9710 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Unnerving Screech.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Unnerving Screech.ogg new file mode 100644 index 0000000..6773e29 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Unnerving Screech.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6353e664cd142aa1638a6d11665c8f69ffe8e5abccfc2f873577a869e079138a +size 10749 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Unruly Yell.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Unruly Yell.ogg new file mode 100644 index 0000000..d834a95 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Unruly Yell.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fe0b96ef6bf99f3d38e83ad66cfc9039055562f394ccad213aeb6bd02c2a1977 +size 8143 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Unstable Mana.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Unstable Mana.ogg new file mode 100644 index 0000000..e465c48 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Unstable Mana.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df8b6c6e755211987c9bbdd1264438daeaf88966d0aad145be4e9234ff7c3724 +size 9410 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Vengeful Shear.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Vengeful Shear.ogg new file mode 100644 index 0000000..28e1fda --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Vengeful Shear.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:722e9ee2acec232d5b52dfce5b06f5ce57636428bee184cc3aa1bf3a65f70d1e +size 8909 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Venom Storm.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Venom Storm.ogg new file mode 100644 index 0000000..40d77e7 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Venom Storm.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f183cc4bbf1447482efd80c5a4d8a1f75087916a8242b82c2e3eb019f31e4f8 +size 8637 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Vile Roots.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Vile Roots.ogg new file mode 100644 index 0000000..e3dea8a --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Vile Roots.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:73d0e4e7cf04ee89b766b014d2dbeb087cd5cfc41c34d6869b53aafe2add67f3 +size 7707 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Wake of Flame.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Wake of Flame.ogg new file mode 100644 index 0000000..d6b6afd --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Wake of Flame.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b47f92502f7f21ea4be6c8f1c096cc49943a30f6637007699cc9ec1ff2ebfe47 +size 8411 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Whirling Edge.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Whirling Edge.ogg new file mode 100644 index 0000000..af915cd --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Whirling Edge.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1bf39b7d39dcc286ec7793b0d676139c19b83d1655a71fc19b3e73f12e397b58 +size 8462 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Whirling Saber.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Whirling Saber.ogg new file mode 100644 index 0000000..5169de7 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Whirling Saber.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:69ea5ee3fcf96eb4c9b26949d4deb49a9785b85b9d95299d31ee5df242cb5bd2 +size 8774 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Wicked Dagger.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Wicked Dagger.ogg new file mode 100644 index 0000000..71faca0 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Wicked Dagger.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5350f423483f0900cf32c25a5667f1de84480a7242e5cc8bdb7e88e60f2d0a08 +size 9251 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Wicked Slam.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Wicked Slam.ogg new file mode 100644 index 0000000..122daf4 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Wicked Slam.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:64d5120a391cb9c622614fb674298e9100778f406d87f76bbefe9906a6399101 +size 9360 diff --git a/WeakAuras/Projects/RaiderSA/out/animegirl/Will Breaker.ogg b/WeakAuras/Projects/RaiderSA/out/animegirl/Will Breaker.ogg new file mode 100644 index 0000000..9b4fc1e --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/animegirl/Will Breaker.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8eb3e3a9478367671fa075a0243f9977422ed5dc38b766b8bedf9880eb185f63 +size 8064 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Annihilation.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Annihilation.ogg new file mode 100644 index 0000000..1415f42 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Annihilation.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:42bf8f204c5ee83fc38bf6f288f62bb3623678096fcb93d0962271bfb2ba67cb +size 7184 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Arcane Blitz.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Arcane Blitz.ogg new file mode 100644 index 0000000..5830d87 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Arcane Blitz.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff41089088df47419b7a7245ac040298fd6d60688de706874706280ea8c6fdb6 +size 7440 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Arcane Slicer.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Arcane Slicer.ogg new file mode 100644 index 0000000..2a4c591 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Arcane Slicer.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4b3e3f9b1e6405beaafca73ab22dfa39ee0f601a589b9d03ac74b866131e581f +size 7885 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Arcing Bolt.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Arcing Bolt.ogg new file mode 100644 index 0000000..720b621 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Arcing Bolt.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:540dff937d8e4d160a5c36409fc9a47c45bd02aefed9a4ad6315e9e71bd924aa +size 6604 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Arrow Barrage.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Arrow Barrage.ogg new file mode 100644 index 0000000..549fc63 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Arrow Barrage.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7d2f671920ea79feefb2cb3b7b4ecbddea966d9d343a50367275830928a1a213 +size 6644 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Bellowing Roar.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Bellowing Roar.ogg new file mode 100644 index 0000000..3d19990 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Bellowing Roar.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b376276acea358c4df6e00ae90852d5ecc43a09255757d32ae9197bfd4d3eade +size 7033 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Bile Breath.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Bile Breath.ogg new file mode 100644 index 0000000..b0d8660 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Bile Breath.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc4bcb11566031a74dfd49a863f133ab5fbb740ecf26c649cc38008495331f40 +size 6336 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Blinding Glare.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Blinding Glare.ogg new file mode 100644 index 0000000..c9c68df --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Blinding Glare.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fda2c2d542d5d174e13441fb31dbfc77ae3a363d6da5916ee86200f19f60ad89 +size 6768 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Bone Chilling Scream.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Bone Chilling Scream.ogg new file mode 100644 index 0000000..4ffa4c1 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Bone Chilling Scream.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa3b04144aac112f0f5d1db5fc178d474ed8b8cee5550299143c301ded3fbf3c +size 8694 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Bonebreaking Strike.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Bonebreaking Strike.ogg new file mode 100644 index 0000000..67f8533 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Bonebreaking Strike.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e40b75cd9a57e61fc7f278826e58ae605006969a0f7a29f4c5b1ff65819b2a47 +size 7849 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Bound.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Bound.ogg new file mode 100644 index 0000000..3da25f0 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Bound.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:998218b004d4137cf02c9c30e50885298581bfbfbb1c25e202006ce7b24c432a +size 5801 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Brackwater Barrage.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Brackwater Barrage.ogg new file mode 100644 index 0000000..e096397 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Brackwater Barrage.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8350a61fff8ef6cd8b42226840fb41e8341d041411b0f7da3a6e5f708935cc7e +size 8400 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Breath of Corruption.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Breath of Corruption.ogg new file mode 100644 index 0000000..09839b7 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Breath of Corruption.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2349bd886235508734b6f0765a7bc7e47caa34663f21623afad111451b79ba00 +size 7644 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Brutal Assault.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Brutal Assault.ogg new file mode 100644 index 0000000..ebae4f5 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Brutal Assault.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6b77b2a7f6bd876ac8b93aba01ed36aec5510b65d254461312e54f2397b88cc +size 6580 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Brutal Haymaker.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Brutal Haymaker.ogg new file mode 100644 index 0000000..76ed52c --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Brutal Haymaker.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f325fe0e667be08d4a8a39fbac5cb03545311da1646d316c39fa56981e26e3f9 +size 7435 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Burning Blast.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Burning Blast.ogg new file mode 100644 index 0000000..81ef5f2 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Burning Blast.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c215eec52edbf1b0b46cc1e2d0460a1a21528f1d71944a3e306d6dc928074e72 +size 6899 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Burning Leg Sweep.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Burning Leg Sweep.ogg new file mode 100644 index 0000000..eb4b97e --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Burning Leg Sweep.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:916cff80711e6e52154add4ac29b8c207aadcf7f5c36774769bc321574817058 +size 7009 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Carnage.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Carnage.ogg new file mode 100644 index 0000000..0c8e6cd --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Carnage.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f12565f4cf176f46b0b8ce84f458a3b82223babca94c0460fee80d589610889 +size 5743 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Ceaseless Winter.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Ceaseless Winter.ogg new file mode 100644 index 0000000..f581cb7 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Ceaseless Winter.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:209c70280687b7068ffef793a7c4b04aa81c93e2cae6c7f7ff744d5917910c70 +size 7819 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Celerity Zone.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Celerity Zone.ogg new file mode 100644 index 0000000..d367bf2 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Celerity Zone.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c9b9b3e7104dc9e91ba8ab109f117e68cef10ecba847f703116d24bfde05947 +size 6688 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Chaotic Energy.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Chaotic Energy.ogg new file mode 100644 index 0000000..e6d1ee2 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Chaotic Energy.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:49be6850f8543de49aa0d77fde1ce9938ff9d4bc09bac891d64e604b95b8ea52 +size 7726 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Chaotic Shadows.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Chaotic Shadows.ogg new file mode 100644 index 0000000..717106d --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Chaotic Shadows.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4b2e88b1b2908d524dc6960881c57188009cf2dbf43cf54b1e2d5f8ab8b48ad +size 8607 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Chaotic Tempest.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Chaotic Tempest.ogg new file mode 100644 index 0000000..c443ddf --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Chaotic Tempest.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d84eaf2eeaaced6f4adfd2b15cf9860d5237c8b48eaf413b583a000738fee6d3 +size 8019 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Charged Blasts.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Charged Blasts.ogg new file mode 100644 index 0000000..bbd5a98 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Charged Blasts.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bc81c3168c76876416d3be9da2f9e2f24d7873a972ab01c60fce7a7b4616d6e1 +size 8640 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Charged Smash.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Charged Smash.ogg new file mode 100644 index 0000000..e37941e --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Charged Smash.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:328d03679adf1188d892636b67d85f7374274bb1533c72d9bab54ed445168358 +size 8272 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Charging Station.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Charging Station.ogg new file mode 100644 index 0000000..42c2eac --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Charging Station.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:255bd7a06fa8aa8144ea6b97001695de6e347f734c471be53e1ba8f2b9084f90 +size 7875 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Chilled Blood.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Chilled Blood.ogg new file mode 100644 index 0000000..e58fb80 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Chilled Blood.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:527c022d7c943bdd340f73f7f953a89ef5517f540e11d9150ec8cbe9f7e01ae0 +size 6776 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Claw Frenzy.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Claw Frenzy.ogg new file mode 100644 index 0000000..dcebbcc --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Claw Frenzy.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e578d243d35ceae49b627dab055add3874c20e48ef4371ef4ea0df91508f048 +size 7475 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Collapsing World.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Collapsing World.ogg new file mode 100644 index 0000000..aa0b569 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Collapsing World.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f808edf70fb9313177dc61148ff2af1c10206dddc4caa8d47525c60a48629958 +size 7355 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Cone of Death.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Cone of Death.ogg new file mode 100644 index 0000000..ef39790 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Cone of Death.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:07e637f04ba2a8df3be025c821ac3931a1a25d372faf54f9e52b3c65174268e4 +size 6244 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Consume Magic.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Consume Magic.ogg new file mode 100644 index 0000000..f36930c --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Consume Magic.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c2f9a42293ed2c1234030c193433be97ffc013959b04434fa1433c321d516742 +size 7766 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Consuming Sphere.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Consuming Sphere.ogg new file mode 100644 index 0000000..dbf20a5 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Consuming Sphere.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:64a6326bc97d9a2d641b9afc23db2a98fe8b079ab689d57b426ba70ee9b3cab0 +size 7729 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Cosmic Scythe.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Cosmic Scythe.ogg new file mode 100644 index 0000000..ffa8253 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Cosmic Scythe.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eaf9df99d51eb39b20d5e0967cb2bd7e44c1d5d084140dfd324e090f4d5c50da +size 7673 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Dark Fissure.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Dark Fissure.ogg new file mode 100644 index 0000000..76344f5 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Dark Fissure.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9605f29267458f3f1820cd764799469f070c393bf15ec89bfa99a8edafc95cc1 +size 7209 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Dark Mending.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Dark Mending.ogg new file mode 100644 index 0000000..440aedb --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Dark Mending.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fe336db7da38e81a8ec553d0a0657ffd709aae55c42a9812de17cf1f6f9d5027 +size 7662 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Deafening Screech.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Deafening Screech.ogg new file mode 100644 index 0000000..02f21eb --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Deafening Screech.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6cf4d59beb91124e34f5f50fe8a20d9917b27ef6d34f97a70a3808d29371f769 +size 8006 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Debilitating Shout.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Debilitating Shout.ogg new file mode 100644 index 0000000..f42dbb2 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Debilitating Shout.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5fbefc0ed37d0d4c4896c39320836e32cd44c3ee304399b3cf52e708c9d0639c +size 8132 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Decimation.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Decimation.ogg new file mode 100644 index 0000000..6bbc943 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Decimation.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:68b7849da6bd446af33784f4293e1808fff7ad07bf895c29e2571907b39891f8 +size 6834 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Demolish.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Demolish.ogg new file mode 100644 index 0000000..34224ba --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Demolish.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c17c0a6b06d5f1ec4578a0b898e7d0743472676732c945e7bfc231b6a04b2fd8 +size 6315 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Demonic Ascension.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Demonic Ascension.ogg new file mode 100644 index 0000000..08cab99 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Demonic Ascension.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a2a63898e131e10a83f473c38455ac04b955f37fe7f46ae7973e442cb955c543 +size 9172 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Demonic Mending.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Demonic Mending.ogg new file mode 100644 index 0000000..a25fc39 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Demonic Mending.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:896e2a92072588ed219a19406ab88090165f43b8a79bb3ae5c78abdabe6f3db7 +size 8513 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Demonic Upheaval.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Demonic Upheaval.ogg new file mode 100644 index 0000000..7dde6cf --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Demonic Upheaval.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:81afc8b690c1a6dc37a9c223cc491ce9dbb18ef4eeefe9ff85c2763d6ae26b22 +size 7307 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Demoralizing Shout.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Demoralizing Shout.ogg new file mode 100644 index 0000000..341742d --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Demoralizing Shout.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63e2d24fafb27626379faffdd74c47ac31805bcc7c6e66d774847604b0fbc551 +size 8149 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Desolate Gaze.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Desolate Gaze.ogg new file mode 100644 index 0000000..225f718 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Desolate Gaze.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e9d5ddd9cdd8de497d88d08c322e74e71ed6f6999b0dcca76d49e076a4f007f2 +size 7896 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Detonating Moonglaive.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Detonating Moonglaive.ogg new file mode 100644 index 0000000..4c761c7 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Detonating Moonglaive.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:19307adffa02f37f438b910dd6d9d4b0a8b08db2b1b945c430394d08de6d5a6b +size 7672 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Diabolic Bomb.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Diabolic Bomb.ogg new file mode 100644 index 0000000..17eb3de --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Diabolic Bomb.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:902ea97a024fd9fb354edffa1d608393ebe38c38a9be0915386a61bde86d49a9 +size 7845 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Dinner Bell.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Dinner Bell.ogg new file mode 100644 index 0000000..eba83dc --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Dinner Bell.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc56d9d7e6a065395ac3af8cedde52729f2f4a51563da21162891e91a0b29bb1 +size 6118 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Disintegrate.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Disintegrate.ogg new file mode 100644 index 0000000..f9e8e4a --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Disintegrate.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d543ce19107847ccb2c8b10b706958a803a01e9c4cfb68402d0f4e7f81487bc +size 6676 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Disintegration Beam.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Disintegration Beam.ogg new file mode 100644 index 0000000..3e94287 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Disintegration Beam.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:68f1ecbd77eefce73c43c21095dc83b0e9399a0f239cfe677b0db08a4bf46a13 +size 8354 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Drain Magic.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Drain Magic.ogg new file mode 100644 index 0000000..32a419e --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Drain Magic.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2452afb53e890878684a1adad9f8776efbace2dc6bbcdebbd5aafb8801cfe086 +size 6579 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Drain.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Drain.ogg new file mode 100644 index 0000000..f405002 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Drain.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cebc96e50cc7c94ae9ab4232b96cb28f4501ab203a6063b159923bf86f95925c +size 5864 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Dread Inferno.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Dread Inferno.ogg new file mode 100644 index 0000000..159ad02 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Dread Inferno.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c657970431826bce883cbc4474a632b25ce4d065a7d35ecc00c2bf832cf36d00 +size 7897 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Echoes of Doom.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Echoes of Doom.ogg new file mode 100644 index 0000000..80ce5ac --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Echoes of Doom.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:276e27cea3e5c57d30132be7b119da8031e8e318f63167bf5afc21ca628e11cc +size 7908 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Empowered Flame Rend.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Empowered Flame Rend.ogg new file mode 100644 index 0000000..758620a --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Empowered Flame Rend.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb4cd50324e1f984b96512a9fc699422b7ba07852422c480a4667ab235a068b3 +size 7592 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Empowered Flare.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Empowered Flare.ogg new file mode 100644 index 0000000..86a1ea2 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Empowered Flare.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a1a16820ab3d65be56d452a8a1d7f2dea76f78f3ca39a101906a16391201cf17 +size 7602 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Empowered Pulse Grenade.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Empowered Pulse Grenade.ogg new file mode 100644 index 0000000..fba6d77 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Empowered Pulse Grenade.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff99a22eea7c6f6ff4bfe4226e467a7ff0ec3364a22deaa49bec729fc9337f2b +size 8815 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Empowered Shock Lance.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Empowered Shock Lance.ogg new file mode 100644 index 0000000..ef9be74 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Empowered Shock Lance.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2dc6ffa5d2bc7ef5e9202cd2804c5c3686005c65a8f29e823683641c14399d0 +size 8895 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Empowered Shrapnel Blast.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Empowered Shrapnel Blast.ogg new file mode 100644 index 0000000..ac924e2 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Empowered Shrapnel Blast.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0378300b17b706b2e2e1750b5d40ced36f57386f25827eb81f5d9ed3a8a72a1f +size 9967 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Enflame Corruption.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Enflame Corruption.ogg new file mode 100644 index 0000000..4a0d3e2 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Enflame Corruption.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e41d63234b0a9ec677030ecadddc43a0f3f083cd991a7a6d6cded4c5f000b8d +size 8386 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Entropic Mine.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Entropic Mine.ogg new file mode 100644 index 0000000..4e32548 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Entropic Mine.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a3e68a1e981f809df4a325282028addb75ca2cb806ce24f7dbd1ee5dd164a363 +size 7975 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Eradication.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Eradication.ogg new file mode 100644 index 0000000..46cbb5f --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Eradication.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae7593f1e325d45bc6207cbc01d409d5e3eebe53187801b9976eb46310c950c4 +size 7060 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Evocation.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Evocation.ogg new file mode 100644 index 0000000..d7fbab9 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Evocation.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cdfb8bbaa902381ebafc31f8d2481a041b99cfc042c22fafde59bee1fdfb7dce +size 7167 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Expel Light.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Expel Light.ogg new file mode 100644 index 0000000..b846f6f --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Expel Light.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b55b2972ad9533d64edffeb6b5aad34b7ef5075702db3883059d7a891f53e91c +size 7078 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Eye Storm.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Eye Storm.ogg new file mode 100644 index 0000000..c449900 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Eye Storm.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:88ca8db1a34f3c664c2075af93d4a5a0dd756ab7db697f3d71f70b713db59108 +size 6402 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Eye of the Storm.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Eye of the Storm.ogg new file mode 100644 index 0000000..4eb5b37 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Eye of the Storm.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c708546b2a1e062cd086634fd4db78996eeb8332e257ffc51743d9a2ba22e8df +size 7470 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Feed on the Weak.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Feed on the Weak.ogg new file mode 100644 index 0000000..d6872aa --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Feed on the Weak.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4418baca62aa434eeaf8887ef1cf40698d6552ebbded37c98efa4b752aced532 +size 6339 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Fel Bombardment.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Fel Bombardment.ogg new file mode 100644 index 0000000..ba2d224 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Fel Bombardment.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4c3457f0cf2fc6acc7469aa1b1b260fd6e01ffb26a352dda2e905f8144759e3 +size 7247 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Fel Breath.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Fel Breath.ogg new file mode 100644 index 0000000..51d992d --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Fel Breath.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:71bb4411325dcf902c6fc67a7a51a3332bd1412357f3499267665f1bf4f8373a +size 6049 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Fel Detonation.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Fel Detonation.ogg new file mode 100644 index 0000000..8e05be7 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Fel Detonation.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6486c6e3caa25c8a931d4d42d4d5cdb3300766de2ef39a350f43a632a160f425 +size 8079 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Fel Fireball.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Fel Fireball.ogg new file mode 100644 index 0000000..36fcec6 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Fel Fireball.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cb4ea78c97f8a2077d442799170a22df01b0c97e01e01c3c96c7d473e41aa824 +size 7249 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Fel Mortar.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Fel Mortar.ogg new file mode 100644 index 0000000..be295e6 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Fel Mortar.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a3edef2937177f23eff23a8ef0bc231206ab516331489860c7326989b5745d88 +size 6016 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Felblaze Orb.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Felblaze Orb.ogg new file mode 100644 index 0000000..941a0ef --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Felblaze Orb.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:25366da26d504e613b4fb061a2100b9f0080c8cb9140a7f8369e042204957cf5 +size 6917 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Felsoul Cleave.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Felsoul Cleave.ogg new file mode 100644 index 0000000..e1689eb --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Felsoul Cleave.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8b68c5ab7c68c58ff03fbf4129512c63835f2b5096de109b53146a038fe1245c +size 7270 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Felstorm Barrage.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Felstorm Barrage.ogg new file mode 100644 index 0000000..5f5e23f --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Felstorm Barrage.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f374256029951b9d0372cb4fab1edf4da85ee89b03251e5d11e3650aa4a09733 +size 7911 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Fiery Strike.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Fiery Strike.ogg new file mode 100644 index 0000000..d6f1dd3 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Fiery Strike.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5dc95e5b9e734220706a8c8df18118fa6286db7abd2bcf03fc5bf26ec970b3d7 +size 7103 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Flame Rend.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Flame Rend.ogg new file mode 100644 index 0000000..118c7c7 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Flame Rend.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:da60adf49192f0ed03c9de2e478643b97689a4ba53df2b6233797b0eebb12e23 +size 5871 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Flame Wreath.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Flame Wreath.ogg new file mode 100644 index 0000000..5926204 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Flame Wreath.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f92cd4e70c518b58bb8857cea9a70a818a3e5da84aae2b120e982b4a643da59f +size 7064 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Flare.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Flare.ogg new file mode 100644 index 0000000..6df3ec0 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Flare.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:06c5a92554202411d10fcda7323abd988ce9b4d4ca6a77beb731064db549fefa +size 6779 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Flashlight.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Flashlight.ogg new file mode 100644 index 0000000..0fb5d4e --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Flashlight.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:201139bfd62ca3e32fa19f45521d5206b01d78b82252369a32cb0937d61b2cc3 +size 5971 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Floral Fulmination.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Floral Fulmination.ogg new file mode 100644 index 0000000..7222293 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Floral Fulmination.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:70b91c36e089332c34bfb052eeb17915adbbec666a9e6042e63cc1f38c187b26 +size 7921 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Focused Lightning.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Focused Lightning.ogg new file mode 100644 index 0000000..a9d4b6d --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Focused Lightning.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e080936c69ffa4bc228bd3d963078e849082c7a849d572e064a6293a8b5912f2 +size 7851 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Foe Braker.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Foe Braker.ogg new file mode 100644 index 0000000..d4ae4c6 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Foe Braker.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:92e8e39d80a5198826e8d15dfe2bcd8844a6e54569ea80dc6fafd5ec713df120 +size 6602 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Forging Strike.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Forging Strike.ogg new file mode 100644 index 0000000..ecb7145 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Forging Strike.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e83e44cd41c6cca7d23558687f2747a0e4361ed2839e33f52071b4571c333de5 +size 6685 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Fragment.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Fragment.ogg new file mode 100644 index 0000000..a284bbf --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Fragment.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fbf380e2803392612e0d738a2b9dcd30168425a9533676452b862cfa4820da12 +size 6152 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Frostbite.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Frostbite.ogg new file mode 100644 index 0000000..4a85eef --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Frostbite.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a11b814d8432164de93b93ce7f5bd186f9e54f132e5817717f5e65bb9e5055d6 +size 6533 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Hateful Gaze.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Hateful Gaze.ogg new file mode 100644 index 0000000..20f58ca --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Hateful Gaze.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ad2465bc38b7a8a081d4ecf9d9c5557d96f943934de0e559354d4afaed72a0a5 +size 7809 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Hatred.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Hatred.ogg new file mode 100644 index 0000000..dfc9fb8 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Hatred.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4e5a7b36c21200ce27bed6910154fe7da9892f486cebd00490b2182b9b556568 +size 6041 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Healing Touch.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Healing Touch.ogg new file mode 100644 index 0000000..c223976 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Healing Touch.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:529433fc48c7182ac0270c46be404af54f17d3177914af9fb0364833aa0def31 +size 7035 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Heat Wave.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Heat Wave.ogg new file mode 100644 index 0000000..73c29c2 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Heat Wave.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dcd46e77673ac27c705f976368b85f5623c08ef069a97874041ae1a39ad1f082 +size 6094 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Hinder.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Hinder.ogg new file mode 100644 index 0000000..2ef0598 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Hinder.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b9b64dee69071159241c6b84b395aa69906104e59ef6036172f572f4b65b57a +size 9159 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Holy Radiance.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Holy Radiance.ogg new file mode 100644 index 0000000..82caab7 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Holy Radiance.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:acc49c941b9db04b20771cd02f7897fd3fbd10838fc370fc06fa634492aae38f +size 7797 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Horn of Valor.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Horn of Valor.ogg new file mode 100644 index 0000000..1a228bf --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Horn of Valor.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:748bcaad2e931c93d68cc2e004099e9cf83035b1370a5781c8f7c6b5cc85a4ec +size 6827 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Inferno Bolt.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Inferno Bolt.ogg new file mode 100644 index 0000000..f90e0c8 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Inferno Bolt.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:133c816b8c3b67c4b869efb228e4593f9ee38e1c1e6e198498ebcde0e24942fb +size 6676 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Intangible Presence.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Intangible Presence.ogg new file mode 100644 index 0000000..4fd2d46 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Intangible Presence.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb1eeb2e7243725189cfff708cea1d67534f2517a2564feb78b6c8d919a53d8b +size 8958 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Iron Whirlwind.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Iron Whirlwind.ogg new file mode 100644 index 0000000..84807ee --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Iron Whirlwind.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a4a48ed63fccd0218ab3bff2bcedf476a69c92ed2bc1bbce57828fb08af10a4 +size 7625 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Kara Kazham.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Kara Kazham.ogg new file mode 100644 index 0000000..87f1e64 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Kara Kazham.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:75030ed100053c9fcaac880962c10abfb536315b09cacaff33babd2cc34793db +size 6513 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Knife Dance.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Knife Dance.ogg new file mode 100644 index 0000000..da9027e --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Knife Dance.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2cb9861d8b7cc967a71e446b677f847c2b42c8a5cbde0491720a2678bec6c6d3 +size 7081 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Landslide.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Landslide.ogg new file mode 100644 index 0000000..7ff1e17 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Landslide.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5663cea331fb6a19eb338db0e05f9d06b87d1317285751848e068a4b2e48738e +size 6405 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Lantern of Darkness.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Lantern of Darkness.ogg new file mode 100644 index 0000000..d23c825 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Lantern of Darkness.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:77aa8680c6dd0c84618089986e1419e23ad76848486a5d332087b4df4eb9bd48 +size 8262 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Lava Wreath.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Lava Wreath.ogg new file mode 100644 index 0000000..5668ba0 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Lava Wreath.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eddab1baed1ef42d6eba098b277e2662f4c563e90d50925084147cfdd0213967 +size 6372 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Leech Life.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Leech Life.ogg new file mode 100644 index 0000000..96aa19a --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Leech Life.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc09b8f4cb2ea8b473379475fe902d1973ec2b380defa1d5c634d8fe4cb0f2a4 +size 6193 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Lifebloom.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Lifebloom.ogg new file mode 100644 index 0000000..71042e6 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Lifebloom.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8a998b7654c7aa3e23b222cfae302d818a7cabb3b66ffd366bcd400e9743fd63 +size 6277 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Lightning Breath.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Lightning Breath.ogg new file mode 100644 index 0000000..1f262a8 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Lightning Breath.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:044ce51b40d9c8aa93ec6c0d874b7d191c23baf47c454718c22db33e1b1055b2 +size 6982 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Lingering Gaze.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Lingering Gaze.ogg new file mode 100644 index 0000000..f21651f --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Lingering Gaze.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dfa5cce38a9caa0b155766d71eaf082f8c26860295dadb61f8f8f7a587db38c1 +size 7123 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Maddening Roar.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Maddening Roar.ogg new file mode 100644 index 0000000..2b11cfd --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Maddening Roar.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8e645125b72c22ae6360cc0145dc54e0c74cee422b805e2be0c7c4cfd17b995 +size 7217 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Magic Magnificent.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Magic Magnificent.ogg new file mode 100644 index 0000000..9f5e264 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Magic Magnificent.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:83019d39e8425e99103dffb3e3a7f766e3f524228f16211bab70ae8d6293cb97 +size 8109 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Mana Fang.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Mana Fang.ogg new file mode 100644 index 0000000..5be4db4 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Mana Fang.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a9691e9ddef0ec7f1abac381c1236474764cdb62895e595682fbeff6400f75d +size 6356 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Marked Prey.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Marked Prey.ogg new file mode 100644 index 0000000..7200f87 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Marked Prey.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8919e6dc92e8533659884f1d33c4dd5e537c01b71c2ced1a09d6e034402370aa +size 6391 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Mass Repentance.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Mass Repentance.ogg new file mode 100644 index 0000000..df9c6cc --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Mass Repentance.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eaee2f3356f0efce4db94011b2f5a4121880fe5f02a634d8fba997d0e315f423 +size 7947 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Meteor.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Meteor.ogg new file mode 100644 index 0000000..916b530 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Meteor.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:336282889779198771ea89de349670c93e1fd0978ff1a86a0a02a61d9e770f0d +size 5862 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Mighty Slam.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Mighty Slam.ogg new file mode 100644 index 0000000..f8a90ca --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Mighty Slam.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:76bbb4205a446cdee5236b4d921fc4a79e5a8edb8d0cd159a5f4019fbeb99fab +size 6779 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Misery.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Misery.ogg new file mode 100644 index 0000000..31853fb --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Misery.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:54b41742ff01cb3e0ccfb8bbb29c6eed7a591542a73cddfdf5bc660cc917686c +size 5888 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Molten Crash.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Molten Crash.ogg new file mode 100644 index 0000000..0983da6 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Molten Crash.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22b7dfdb3abbc258bad99240c587549a116adb137cbabea8e11a967cb4d4aeae +size 6824 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Molten Touch.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Molten Touch.ogg new file mode 100644 index 0000000..cb19b3e --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Molten Touch.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fbbf163f46ff25c1ec8673903397829ad13ce8d7b598e90da73e04cc10c957aa +size 7118 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Mortal Strike.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Mortal Strike.ogg new file mode 100644 index 0000000..715a8b5 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Mortal Strike.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:17b549f8f8e8fc5a51e1644f74e05196b3a86cd053d71cfcef8905f0477ecba2 +size 6917 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Necrotic Embrace.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Necrotic Embrace.ogg new file mode 100644 index 0000000..c0be29c --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Necrotic Embrace.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:635195114eb3ea4d0c6cea6a305c1e4c08ea499f440334950b34ec6c5524dbc4 +size 8384 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Nether Venom.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Nether Venom.ogg new file mode 100644 index 0000000..f2be6b3 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Nether Venom.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99d8f7b90235b2446f72389abf54e62b36cca6823e2977d3bb85878ec191801b +size 6372 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Nightmares.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Nightmares.ogg new file mode 100644 index 0000000..bc5ba86 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Nightmares.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dba56e618d81bad627dce189193b49fff11726f55aa7b2e8ccdb40fe432c8be8 +size 6573 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Nullification.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Nullification.ogg new file mode 100644 index 0000000..b2cc8e2 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Nullification.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8df7f63a173de157cede1d3256f02a382bffb406bd9fd48e47e16618ff56897d +size 7521 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Overcharge Mana.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Overcharge Mana.ogg new file mode 100644 index 0000000..58458dd --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Overcharge Mana.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:607286d42115ecf009259d5da470239736a544bea90db225bd8ee83490da8ec5 +size 7392 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Penetrating Shot.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Penetrating Shot.ogg new file mode 100644 index 0000000..184ac75 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Penetrating Shot.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6ebe7a46416d9062c9c920017f1ea3baf5ab8be364bc1d6323b354dd3e6b00ae +size 7307 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Phase Breach.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Phase Breach.ogg new file mode 100644 index 0000000..1084f5c --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Phase Breach.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:32d4dd54b42c51cc407d470c59fefdcc2d3acc202f38e2524dc6c93a0866b590 +size 7076 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Piercing Gale.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Piercing Gale.ogg new file mode 100644 index 0000000..4f2af15 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Piercing Gale.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f951f8c2cb5173dcacfa152b381286ef37551942cb671409ca8cc869b0c2864c +size 6777 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Piercing Missiles.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Piercing Missiles.ogg new file mode 100644 index 0000000..e9e70ef --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Piercing Missiles.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df810531b197c5464999c3252ff2ec0ae46072236f924cd25fe3d79ef61e5f43 +size 8387 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Piercing Shards.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Piercing Shards.ogg new file mode 100644 index 0000000..e344e56 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Piercing Shards.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f21fc4cbf8d210d33cbbdcec656f561c14b7606946a797becff27e868bcc73ea +size 7682 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Polymorh Fish.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Polymorh Fish.ogg new file mode 100644 index 0000000..aec7d7b --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Polymorh Fish.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44206357e526735e074e4c81b3a10760673a81cb7d46e5b1a0ff13d50f402970 +size 7178 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Prophecies of Doom.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Prophecies of Doom.ogg new file mode 100644 index 0000000..ecae088 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Prophecies of Doom.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a15d6c5b05b6571e271f23a619364357c546f1f3dd4e4b8d7ae4d6a7f0b5695e +size 8144 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Pulse Grenade.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Pulse Grenade.ogg new file mode 100644 index 0000000..c583144 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Pulse Grenade.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:50c1f90058aceecf018dc69f699d3ec8dc5fbc95dc7f410bdccea468ef772580 +size 7308 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Quarantine.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Quarantine.ogg new file mode 100644 index 0000000..98a2526 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Quarantine.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:35c731936af9fdc120b92b4e77b2fc25ed33af0d23fb4b45b8c298b6038ada4b +size 6169 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Quelling Strike.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Quelling Strike.ogg new file mode 100644 index 0000000..0a76fc2 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Quelling Strike.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c9f4ccc0156c8370dbce4a9889b692ff607f79e979c41ea4b2885ce64a56dfa1 +size 7135 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Radiant Tempest.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Radiant Tempest.ogg new file mode 100644 index 0000000..00db3e7 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Radiant Tempest.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e35db361ae56b02af2968ae1fdc53590b7431e3863ff1cf8db0a376f76eb323 +size 8342 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Ragnarok.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Ragnarok.ogg new file mode 100644 index 0000000..c1138bd --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Ragnarok.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2ffde5ed3f6d8e636360b0efc513d323854b444dbd6109021a88073a06ddc790 +size 5916 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Rampage.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Rampage.ogg new file mode 100644 index 0000000..6080e15 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Rampage.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8bc9111ce86818baebf5b278cafc67e3c6a339a9f7431f7f6287ab434892a450 +size 6842 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Rapid Rupture.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Rapid Rupture.ogg new file mode 100644 index 0000000..f30d2d4 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Rapid Rupture.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5280508bf8074ab486678f98021f7f94228c5659ad3848f19142ac1e10d05473 +size 7554 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Ravenous Blaze.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Ravenous Blaze.ogg new file mode 100644 index 0000000..39d04a3 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Ravenous Blaze.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1857befcc46301a15d79f6292992c61af46205c5087b7fa6165ce8dffd18fbc7 +size 7402 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Razor Shards.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Razor Shards.ogg new file mode 100644 index 0000000..6de62c3 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Razor Shards.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a86161c678e87da5ab727d77dbfb083b71bca6a41e3c6ba55a90cbdc3f6507d +size 7582 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Reality Tear.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Reality Tear.ogg new file mode 100644 index 0000000..3f5d9d4 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Reality Tear.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22ce5e3a213ecc73ba7df1cc43d86f093fd5f4b6b92962b6108488f5ee3a4e59 +size 7221 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Reap Soul.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Reap Soul.ogg new file mode 100644 index 0000000..c7965cb --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Reap Soul.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f88227020f4899443ed674f56bfcedadc32358a27b1ae8e4ee1fbbdd2fb1343d +size 6476 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Rejuvenating Waters.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Rejuvenating Waters.ogg new file mode 100644 index 0000000..3de2caf --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Rejuvenating Waters.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c3ce46aecfa8bf7717ca74bd35851a816eb523a0d894886255a0b95bd8a58bbf +size 8208 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Rejuvenation.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Rejuvenation.ogg new file mode 100644 index 0000000..ddebc19 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Rejuvenation.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:00400eedc78349bfcf26f13ebb59f9a7c6c1c56426853e6be3b4e9c0526febc8 +size 7727 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Reverberating Strike.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Reverberating Strike.ogg new file mode 100644 index 0000000..62cad36 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Reverberating Strike.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa1487e3893ffecb6ace4c5e21dc467d2330f3ab367e3cf44a46eaef536ce246 +size 7648 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Roiling Storm.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Roiling Storm.ogg new file mode 100644 index 0000000..f62a6d5 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Roiling Storm.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:72bbe8538e15e1327b0c285979d9d50ccb3b0bcbc81a33e388aed4e63790e3f4 +size 7790 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Ruiner.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Ruiner.ogg new file mode 100644 index 0000000..cdbc8fb --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Ruiner.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f64bcc816c9056c5873c67b04e6e3fe44ea16c7d7af269ed01b18026e7f25a41 +size 5546 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Rune of Healing.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Rune of Healing.ogg new file mode 100644 index 0000000..b1e8c4e --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Rune of Healing.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bbf997f6cfb1a01b4cf0f6aab60d1b8f7b5400f504cb4d1d3288320caebd5b20 +size 6706 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Runic Band.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Runic Band.ogg new file mode 100644 index 0000000..d4e5cf9 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Runic Band.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a65551ca54d55fe1bf2c5454c05f8acfaf9dc3c1c1d766227ece3f3d559ec546 +size 7493 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Sacred Ground.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Sacred Ground.ogg new file mode 100644 index 0000000..2d24a00 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Sacred Ground.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:52801837824d1c8d69d36d7c7bc2791ddedc2a85acb30d258d7f46105ae8ece7 +size 8607 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Sacrifice Soul.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Sacrifice Soul.ogg new file mode 100644 index 0000000..322a5ac --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Sacrifice Soul.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2bc4f884cd5245b2938bac1f1a87ef996ab4d1a892b12c95ab2ba6cce07b7660 +size 7447 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Sanctify.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Sanctify.ogg new file mode 100644 index 0000000..f01d38d --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Sanctify.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a87f8a2a69924887fac8564edeb56e0f64cc73550038191de9dbbbdad0d26cdd +size 6785 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Sandstorm.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Sandstorm.ogg new file mode 100644 index 0000000..194c538 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Sandstorm.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4784dec7196091654eb4c1656e841b881c4abc4bab8f937e409cb939f50d0b6f +size 7012 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Scornful Gaze.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Scornful Gaze.ogg new file mode 100644 index 0000000..728475f --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Scornful Gaze.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:437978857c29fc00d5f001bc3a51415086731f51c7c4be4badf5ce3f3cc289f8 +size 8470 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Screams of the Dead.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Screams of the Dead.ogg new file mode 100644 index 0000000..477f248 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Screams of the Dead.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f15ff5e949ea0eb2bce864739a05c1ea0c421a1519a5087dafba27c9b0356497 +size 8475 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Sea Legs.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Sea Legs.ogg new file mode 100644 index 0000000..7e7d67a --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Sea Legs.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d281fd10e3757855963de4d8238c17dd290afdad93759834cd5e8b4a73bf1357 +size 6645 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Seal Magic.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Seal Magic.ogg new file mode 100644 index 0000000..ed38ca6 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Seal Magic.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:73200af2708dd0806ddbe9bca3ca804d42eebb4588d0fc54785b7bfb595daff4 +size 6992 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Sever.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Sever.ogg new file mode 100644 index 0000000..de562ef --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Sever.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cc73227a732bdd12b29016ef1b4bd2c2fa1ad588ca2f795d9103281d73799ed1 +size 5729 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Severe Dusting.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Severe Dusting.ogg new file mode 100644 index 0000000..8c11f85 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Severe Dusting.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:71db42e3ff53da3476a465b8c096af1fb73f1b8216b626ca45b3fa3abda8d232 +size 8321 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Shackles of Servitude.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Shackles of Servitude.ogg new file mode 100644 index 0000000..1237e91 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Shackles of Servitude.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2ae9a6c0d177f6f726e06f2d33308167fc664e0ef7370e74be116802fde4ee45 +size 9116 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Shadow Blades.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Shadow Blades.ogg new file mode 100644 index 0000000..9d5b3ca --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Shadow Blades.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7aaa828db442019d7a4345dfcb1d361cea32c86402dd1fd9380717b75ecda2ba +size 6846 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Shadow Bolt Volley.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Shadow Bolt Volley.ogg new file mode 100644 index 0000000..42d1da3 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Shadow Bolt Volley.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e4ae7636c60ad11f75c296348a858492505c1771c8ad6565e21bc54fc0c98335 +size 7668 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Shadow Crash.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Shadow Crash.ogg new file mode 100644 index 0000000..4138805 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Shadow Crash.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:977956633a908635e22477020dd25f91bfe8fb394f3d8be1551af9323d803bcd +size 6806 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Shadow Rejuvenation.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Shadow Rejuvenation.ogg new file mode 100644 index 0000000..32e725c --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Shadow Rejuvenation.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:34cca09af69c7a1f2b82eea872f6de9542b58ec8f3f259565e00b9d12874b114 +size 9395 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Shadow Strike.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Shadow Strike.ogg new file mode 100644 index 0000000..edfc3b7 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Shadow Strike.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5050e18c7ea84860eaf24524721df154ee7de34837bfe961c6e1aaa8afa4ef68 +size 7114 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Shadow Sweep.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Shadow Sweep.ogg new file mode 100644 index 0000000..63d029e --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Shadow Sweep.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d378ecca3ad948d7e6e21b2cd0f3c492f6ad7acaefb0edde1d827005cbf8938 +size 6655 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Shadow Wall.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Shadow Wall.ogg new file mode 100644 index 0000000..f0ca74b --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Shadow Wall.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:815497087758cd5caab2168b7ce0818a496948c8b9fc331910db8d853273fdcc +size 6833 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Shared Suffering.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Shared Suffering.ogg new file mode 100644 index 0000000..f08aee3 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Shared Suffering.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:30dc6c7a617aa0c756e4d7a72d24e3f01aee98fb7153884ed32a77e3275311da +size 7249 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Shield of Light.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Shield of Light.ogg new file mode 100644 index 0000000..f0d9dc0 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Shield of Light.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9aeeb270b87255b136ef7c70cd7f87c8707b21c933fafc183c2fb3a3e5dfec79 +size 6641 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Shivan Pact.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Shivan Pact.ogg new file mode 100644 index 0000000..2ac7e53 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Shivan Pact.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e1ef4fcc92954cdac5c62367c1c47a83e6ccae7add3c45a686c9da2a54ddaf1 +size 6493 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Shock Lance.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Shock Lance.ogg new file mode 100644 index 0000000..02abae2 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Shock Lance.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d477d61535aded7d138a1fc5ea5a1e20dc78792b4840f778bc252c15d433615f +size 7282 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Shockwave.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Shockwave.ogg new file mode 100644 index 0000000..8e76621 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Shockwave.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:41430f21d9ecc5d45301c1c9271e482aa1684d96b4760d16bbaaffd198d303e9 +size 6343 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Siphon Corruption.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Siphon Corruption.ogg new file mode 100644 index 0000000..9fe5137 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Siphon Corruption.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8b1f9347a9ce5d85e6775b7a33077bf3f99d1648d6d9d77b47f664b6c3dbb13 +size 7915 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Six Pound Barrel.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Six Pound Barrel.ogg new file mode 100644 index 0000000..e1d6be6 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Six Pound Barrel.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc2fc5efcb13a32745e5e6bda5f66891dcf3b29eddf176eddf0e2d7765439921 +size 7649 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Sleep Canister.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Sleep Canister.ogg new file mode 100644 index 0000000..46791a0 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Sleep Canister.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ed42cfc407e788ab93bad869f1d6409e7057900e8cd9818cb9949fe3713897a5 +size 7762 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Slicing Maelstrom.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Slicing Maelstrom.ogg new file mode 100644 index 0000000..e2e31a6 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Slicing Maelstrom.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a5a312f440e8ff527da0ad8904069595af07f34b4af31143b0591dd14a8fdd9 +size 8432 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Soul Echoes.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Soul Echoes.ogg new file mode 100644 index 0000000..814de70 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Soul Echoes.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2bbdd1b68329bdf1b0e39802dabb6fbc581865a24ce8c399cfb8a7cd1e3ff53e +size 7554 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Soulblight.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Soulblight.ogg new file mode 100644 index 0000000..a315dec --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Soulblight.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:08fbf8c03090edf0ef1360b32a4eb9e82b029bf783f8e7ac23fbc297c1006b75 +size 6795 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Soulbomb.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Soulbomb.ogg new file mode 100644 index 0000000..aa6f689 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Soulbomb.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2019532672c73528358028c45bad714214f3a8b4b06795b3b5595dd6b353fb8 +size 6300 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Sound Alarm.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Sound Alarm.ogg new file mode 100644 index 0000000..a6070ff --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Sound Alarm.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e98098f642820d09a02cdfb1fe77e66a6f2e4a133f6e2fece3d127adeb5920b +size 6735 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Spear of Light.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Spear of Light.ogg new file mode 100644 index 0000000..d0d8897 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Spear of Light.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51d1d0848deca0a9d5ddfe5a2c3d5d0bd4bffa329aa3f11acfa52394d76828ab +size 6629 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Spiked Tongue.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Spiked Tongue.ogg new file mode 100644 index 0000000..d998197 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Spiked Tongue.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ba337d42492470b789dded83ad1d81b57352ee3b814455e545e87acb6c420446 +size 7069 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Spray Sand.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Spray Sand.ogg new file mode 100644 index 0000000..71788b2 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Spray Sand.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:003f39d4b3d64cd0db99505477269f56e9f4b359c2cf71cb5d1ddc6ae84955a6 +size 7117 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Stasis Trap.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Stasis Trap.ogg new file mode 100644 index 0000000..d459fcc --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Stasis Trap.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:394eff1740e0a171a4716e1ffd6998ffa03ea1b9b3091c1d77cc4ce5ae377314 +size 6984 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Static Nova.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Static Nova.ogg new file mode 100644 index 0000000..6bbab5a --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Static Nova.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e9a64576ea8efd97dec429776107fe1d77554774cc9cfe083614b01c67ff4326 +size 6909 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Stone Gaze.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Stone Gaze.ogg new file mode 100644 index 0000000..1468c81 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Stone Gaze.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:278ef37c5abefe87f77bf4259e90e209815e580fd59bf303899559ab8fbdbb1f +size 7403 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Streetsweeper.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Streetsweeper.ogg new file mode 100644 index 0000000..9b722c1 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Streetsweeper.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:72164456d993a0891604caf6e43c916c7a9f0bb1dd37a7746213f853c977564d +size 7269 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Strike Down.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Strike Down.ogg new file mode 100644 index 0000000..9b01949 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Strike Down.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b3be38214686ba45972804574d614cb01ded3a18d822d3879b30087d4c84c8eb +size 6835 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Sultry Heat.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Sultry Heat.ogg new file mode 100644 index 0000000..9298ec5 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Sultry Heat.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8f394c8d0c1eeb92556e61c1557e4815a329b417d4724969a1ca4f2c08f1ec10 +size 6437 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Summon Reinforcements.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Summon Reinforcements.ogg new file mode 100644 index 0000000..bf28e71 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Summon Reinforcements.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8161324fde2d2722c6c92c3f48f8c45f75ec5edd5a91f4edcb9bdaf773902258 +size 8858 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Summon Volatile Energy.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Summon Volatile Energy.ogg new file mode 100644 index 0000000..22aff56 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Summon Volatile Energy.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7c4eb44b454547ca810d728e12f348aa5cdb3840a4852aa5c6201d529177ad6 +size 9030 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Sunder.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Sunder.ogg new file mode 100644 index 0000000..fe3f1b6 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Sunder.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:987e4eb302094a0e658b37b92e11b08c2769d9ff6fd2786ce29d45cde094ae32 +size 6046 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Surge.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Surge.ogg new file mode 100644 index 0000000..35f60ca --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Surge.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7d037e9d910059295ee1712bfbe49540a94db9af8a96f08a3e72bea2fc825d80 +size 6239 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Swirling Scythe.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Swirling Scythe.ogg new file mode 100644 index 0000000..97ed5c9 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Swirling Scythe.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c75f39689558d95de0f23483e4ba1115a42f0b7512e77569e636d5f9128b4ad +size 7322 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Tangled Web.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Tangled Web.ogg new file mode 100644 index 0000000..a5403e8 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Tangled Web.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f8f5a829f3e98b942a669616fc84ddf0ae2b6b567781490a99b5290c54ad114a +size 6287 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Teleport.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Teleport.ogg new file mode 100644 index 0000000..86ed1a0 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Teleport.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b15e2e6b8b7976fb8ffdbf0fa02fb8c65e24e38aa221ca790c513f78a27609e0 +size 5818 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Thundering Stomp.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Thundering Stomp.ogg new file mode 100644 index 0000000..89efa72 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Thundering Stomp.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6ceaa4290ce719b85b7da8e20354ccb10098a4e69715ae9a8a821c02a45ab8dc +size 7304 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Thunderstrike.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Thunderstrike.ogg new file mode 100644 index 0000000..f9ca072 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Thunderstrike.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:45a5ab093940592f3ade27f23f5ce2977c1df59be5d0eb7ef4f574b7fe965875 +size 6778 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Torrent.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Torrent.ogg new file mode 100644 index 0000000..86855e6 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Torrent.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:073ec54850ced1f0f0e2cbf76023613da7c8c88171c7bd7841582d34b00e1deb +size 11303 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Tortured Rage.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Tortured Rage.ogg new file mode 100644 index 0000000..6f45d33 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Tortured Rage.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b8a5b2a4e898c6facc551b7fa558dd010a08931fb1f82b3e0770d22ad079d00a +size 8019 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Turn Kick.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Turn Kick.ogg new file mode 100644 index 0000000..a278447 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Turn Kick.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f3a38ba8226510884b8117ad0524786e7b009a44de48fdaefe6f17b6c7afaf04 +size 6150 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Unleash Fury.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Unleash Fury.ogg new file mode 100644 index 0000000..54d8454 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Unleash Fury.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7502b2cef46ec3ceba4c9f616151fee59bee21ad95097f88c8213289d772b999 +size 7392 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Unnerving Screech.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Unnerving Screech.ogg new file mode 100644 index 0000000..487c6e7 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Unnerving Screech.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:59e45e2820cbbfb1d71ee557a9b83acdeea1b36c4c26af98ddcc1669889b6863 +size 8551 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Unruly Yell.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Unruly Yell.ogg new file mode 100644 index 0000000..7e6a168 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Unruly Yell.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a97f0f4f71b184015ca293859f961c9362af03c702b3235c1789cd36e3ef75a3 +size 7384 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Unstable Mana.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Unstable Mana.ogg new file mode 100644 index 0000000..7525c9f --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Unstable Mana.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:450e286fbb14d43d26608c2f41decb48952c03d504b7429186a7fb193b3b20c7 +size 7711 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Vengeful Shear.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Vengeful Shear.ogg new file mode 100644 index 0000000..90664cc --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Vengeful Shear.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7856802ecd3417f3cc74a7f686e85c31371635baa65362f1c9c7bc8181a50a3b +size 7565 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Venom Storm.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Venom Storm.ogg new file mode 100644 index 0000000..6234907 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Venom Storm.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c0af89dbd85ce50630985cc63dcda92358ef20ea1e82bd9dfd0f5f6b66a64e6f +size 7729 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Vile Roots.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Vile Roots.ogg new file mode 100644 index 0000000..c88b829 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Vile Roots.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b2b5f2085f9187f2c2c559e96fda5b74a1ff808cb57da20daac3f7307cf557fa +size 7141 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Wake of Flame.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Wake of Flame.ogg new file mode 100644 index 0000000..d3d819b --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Wake of Flame.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:12efaea85fbb23d0824d242275663402cd7abcca919bbb0e443791eac4d2b579 +size 7707 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Whirling Edge.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Whirling Edge.ogg new file mode 100644 index 0000000..69be530 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Whirling Edge.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ed339c179638228c30292b156cf2dc2ad14e0a14d71af3de7061066ba664a704 +size 7546 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Whirling Saber.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Whirling Saber.ogg new file mode 100644 index 0000000..ff0e653 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Whirling Saber.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:96f2547788434d2759a414e8b9f634db690f6571b9679a3c2ac3e6f3e722c9f2 +size 7181 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Wicked Dagger.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Wicked Dagger.ogg new file mode 100644 index 0000000..8fbd1b4 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Wicked Dagger.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cdcb5be05159da86115fb101167c42f84bff191887528e4a535b1ee46292c0fb +size 7380 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Wicked Slam.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Wicked Slam.ogg new file mode 100644 index 0000000..293d4a3 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Wicked Slam.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec4779d174d81c9ff0e0b45ae91d8758e47aa29a03848432e49e23c3f6b055a4 +size 8550 diff --git a/WeakAuras/Projects/RaiderSA/out/genericfemale/Will Breaker.ogg b/WeakAuras/Projects/RaiderSA/out/genericfemale/Will Breaker.ogg new file mode 100644 index 0000000..680755a --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/genericfemale/Will Breaker.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:69f0fb0435a5494598aae80a7a7211a56318921865b232d5ebd3c796f5304cec +size 6738 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Annihilation.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Annihilation.ogg new file mode 100644 index 0000000..54f64fe --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Annihilation.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a9f81db87233db76506e0a3de823d34a203acf667fa315dfbbd415d79cda2a6 +size 7811 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Arcane Blitz.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Arcane Blitz.ogg new file mode 100644 index 0000000..836c7cd --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Arcane Blitz.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e1deafa1311614a9c5bb07c833e05804e286c2ca7fb0fc07a5440d49fcf5c371 +size 7656 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Arcane Slicer.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Arcane Slicer.ogg new file mode 100644 index 0000000..a709adb --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Arcane Slicer.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:27d57f2413d1d1a7f77e8b04da656a03dba757d61c4fba422e01d94bbbad0788 +size 7735 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Arcing Bolt.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Arcing Bolt.ogg new file mode 100644 index 0000000..7ca1789 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Arcing Bolt.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:689db5de6d890d86a2c4cb9230d504a4399096531ae1ea5f722882dd14af3ec8 +size 6865 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Arrow Barrage.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Arrow Barrage.ogg new file mode 100644 index 0000000..c1a12e8 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Arrow Barrage.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:29a7d29574a63c014bd7b9b9e844415e1cc05ba222e41ec63b87813dc9982eff +size 7488 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Bellowing Roar.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Bellowing Roar.ogg new file mode 100644 index 0000000..f02fca7 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Bellowing Roar.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b5c0a8facb74b376413beeca10e5c57c89ed499b4fc1a7c1486c19ed0e2a1b4c +size 6846 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Bile Breath.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Bile Breath.ogg new file mode 100644 index 0000000..d7fbb47 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Bile Breath.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:786aedd5f47dc4d07076b0034b525eb9c3d15f878e0b9a8dd19c4f941a4dce79 +size 6622 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Blinding Glare.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Blinding Glare.ogg new file mode 100644 index 0000000..c83c39b --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Blinding Glare.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6a5ac0134ef4de9954ee00eaade0a3cd42d2ecf72fce3914713f3a5b8f16aea +size 7023 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Bone Chilling Scream.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Bone Chilling Scream.ogg new file mode 100644 index 0000000..b593134 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Bone Chilling Scream.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4582c18a725194d3f365a2c419ba8a936f2c67cdd93584d7b65c18015f788e80 +size 8984 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Bonebreaking Strike.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Bonebreaking Strike.ogg new file mode 100644 index 0000000..4ef83ef --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Bonebreaking Strike.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7080cfb83967cd4c54022c14b4d8fc1ac3d68e904ec39aef0c8b61400648e76e +size 7802 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Bound.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Bound.ogg new file mode 100644 index 0000000..54d9ad9 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Bound.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:47e8c25b4b1f3ce76c3fc40b71958eef2f3324ff0310099046b3a74011ff3f64 +size 6111 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Brackwater Barrage.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Brackwater Barrage.ogg new file mode 100644 index 0000000..f1fb3e0 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Brackwater Barrage.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:20c3b2d32c238d089d846d9792c44212b1db61eb58f13734882722c69813a110 +size 8212 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Breath of Corruption.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Breath of Corruption.ogg new file mode 100644 index 0000000..3bddde3 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Breath of Corruption.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:41694b25b0867f6b3389b833815eaa668da15d982dba2d8f98277b025596320f +size 7745 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Brutal Assault.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Brutal Assault.ogg new file mode 100644 index 0000000..419ccab --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Brutal Assault.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cb72dd72ec641506c0f477e150ba97c7d1518362e965a50f6689b70e81180b9a +size 7103 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Brutal Haymaker.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Brutal Haymaker.ogg new file mode 100644 index 0000000..5d9567c --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Brutal Haymaker.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a9362a67cf227560ba670084eca84faac939de38e789a54e7d056c8dbc79c06 +size 7118 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Burning Blast.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Burning Blast.ogg new file mode 100644 index 0000000..547b7b7 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Burning Blast.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b76cc05845363f3b70d4207078fe1018529f000d056d56f47f5576a732fd6f8b +size 6787 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Burning Leg Sweep.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Burning Leg Sweep.ogg new file mode 100644 index 0000000..f2aae11 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Burning Leg Sweep.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1abcd804318f7f28da6fe6f6567a50e5cbfd60c4ace1bfdd4fb7974d73cb048a +size 7692 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Carnage.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Carnage.ogg new file mode 100644 index 0000000..50a3060 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Carnage.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c0127fa97e67caa00fdc4e82a26ce6b338fd75471f1d8e501632f781050913b +size 6284 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Ceaseless Winter.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Ceaseless Winter.ogg new file mode 100644 index 0000000..72cef40 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Ceaseless Winter.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b1cf71eabc6a35e32e279a3eaa48efe1e0fb94f8e456bbf1061fcf0fcb13572d +size 7398 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Celerity Zone.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Celerity Zone.ogg new file mode 100644 index 0000000..47bfd27 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Celerity Zone.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6ba75359c8d5d60277f0910948d05af1112208ea1c6850c05114a6f1edb8bb4e +size 7437 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Chaotic Energy.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Chaotic Energy.ogg new file mode 100644 index 0000000..4427df4 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Chaotic Energy.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:00bd08145bd6ae13967ed6804017ed72779c09a09925684a7049f987ab158c86 +size 8019 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Chaotic Shadows.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Chaotic Shadows.ogg new file mode 100644 index 0000000..735f26a --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Chaotic Shadows.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7515474b2768cb039920c0eb8cda9c07048904e1fa763458ba6bd1fb91ba20c6 +size 7337 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Chaotic Tempest.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Chaotic Tempest.ogg new file mode 100644 index 0000000..da2e16c --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Chaotic Tempest.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e45afa31b551fe9cd6b249f84b32e7db31d4fc1cf207c6b94f22392422504ba +size 7677 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Charged Blasts.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Charged Blasts.ogg new file mode 100644 index 0000000..3eabc6c --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Charged Blasts.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1ab122ca2a08aa8f85f14b21bdffe5bd276ee57906d7bb60d2025810506dd043 +size 7792 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Charged Smash.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Charged Smash.ogg new file mode 100644 index 0000000..da46f29 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Charged Smash.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23320841c7d23eea2cb0854331b35e397b0dcdec4a9a6174e28de79e17fdd680 +size 8379 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Charging Station.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Charging Station.ogg new file mode 100644 index 0000000..2e03e30 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Charging Station.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1b85009fc07cd6e9d73496c862035ec1149299a718a8b6ad67082fc50495a9d5 +size 7618 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Chilled Blood.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Chilled Blood.ogg new file mode 100644 index 0000000..d15044a --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Chilled Blood.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db7f2c4e7ffe76f40ac433b8ff0465c4659c065099e82b0ab87ea0d71772bbaf +size 7059 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Claw Frenzy.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Claw Frenzy.ogg new file mode 100644 index 0000000..5057f16 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Claw Frenzy.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c103e9963cdc4ea9103938695ddd15e4f0ccc91e7b294ee16898be47e7ff3ba +size 7126 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Collapsing World.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Collapsing World.ogg new file mode 100644 index 0000000..058c04b --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Collapsing World.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0cb2d6f8d90ec4e2f027a66186714cb4d7670f03c4f6a6d6be68b24185655f0 +size 8224 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Cone of Death.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Cone of Death.ogg new file mode 100644 index 0000000..1140b93 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Cone of Death.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:43e5fb59eeb992a9a358d65da0b252df1518007c461720bb4b32fa321ffee06c +size 7145 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Consume Magic.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Consume Magic.ogg new file mode 100644 index 0000000..053033e --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Consume Magic.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2dd9a2c258748eba7b137702c17cbca2c81d43dc3c0ef2cb136248284bf9de70 +size 7548 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Consuming Sphere.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Consuming Sphere.ogg new file mode 100644 index 0000000..bd5a6f1 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Consuming Sphere.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ead2c5c16a3a80645c17a5d41ce40bd1dad63fd172f75a586e5e1c1a5b30f9dd +size 8536 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Cosmic Scythe.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Cosmic Scythe.ogg new file mode 100644 index 0000000..83ff728 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Cosmic Scythe.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f928c9fd5d68601488db6ca8e8269fc9d179680c5af38538f4e5ec742615202f +size 7091 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Dark Mending.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Dark Mending.ogg new file mode 100644 index 0000000..c7d225c --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Dark Mending.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1be1a57efa0483a308d290dfdae2121176ef14f0b44bf285114336363a8bb46c +size 7207 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Deafening Screech.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Deafening Screech.ogg new file mode 100644 index 0000000..251a77a --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Deafening Screech.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ab28ba8859bc147ec6c18379e6e1b4f40aefe57fd780bee2ed0460da9961277 +size 7862 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Debilitating Shout.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Debilitating Shout.ogg new file mode 100644 index 0000000..4aa26cc --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Debilitating Shout.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:470e5a453cf3eb9a2cc0a84b7bc5912ab3bf7b8fe37c0d0de4b790f7bf4d78da +size 8569 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Decimation.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Decimation.ogg new file mode 100644 index 0000000..fce936b --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Decimation.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ecd15cc7f9d152e6179abc0afd861ed48dad0fb830ad8d963b172a1eaef1d43 +size 7333 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Demolish.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Demolish.ogg new file mode 100644 index 0000000..aa53715 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Demolish.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:37bc761e2b8df670f09d2a4ba039fb7e97c4d389159556e9642a2e87c6d03934 +size 6396 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Demonic Ascension.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Demonic Ascension.ogg new file mode 100644 index 0000000..2652746 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Demonic Ascension.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:68f3a1c9f9edf4148954610952ffa618d4751577b7569252217eb0d88b896d85 +size 8228 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Demonic Mending.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Demonic Mending.ogg new file mode 100644 index 0000000..a03b99b --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Demonic Mending.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04861f5c5a841c81708f37ddd3264952643a021db1d4a90ffc6ceb55bcce198d +size 7571 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Demonic Upheaval.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Demonic Upheaval.ogg new file mode 100644 index 0000000..89f7d40 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Demonic Upheaval.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ec47d85d5bd03cf07ce183d5a57da84dd66f40daa128dd4d33ed9014b0fc62b +size 7730 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Demoralizing Shout.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Demoralizing Shout.ogg new file mode 100644 index 0000000..a0881f1 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Demoralizing Shout.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dfed9ec15f371efd1d5c81f7f60961dc0c3fba7f66af7f2bf7dc37c47fb50247 +size 8202 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Desolate Gaze.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Desolate Gaze.ogg new file mode 100644 index 0000000..a418c0f --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Desolate Gaze.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6ce40462d375801c4a29e05284ebef7e5335ddf71c8b730961714d45879b9591 +size 7683 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Detonating Moonglaive.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Detonating Moonglaive.ogg new file mode 100644 index 0000000..8597ff7 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Detonating Moonglaive.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a9392145fa17dbab6db6c85c69c63d432fe7e94cedef3ac0a554fad036ebf1e8 +size 8264 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Diabolic Bomb.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Diabolic Bomb.ogg new file mode 100644 index 0000000..149f461 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Diabolic Bomb.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:17a73dbe1af6f29853e80b1df7dc036b7c02e6f977d7d9f5146f2c5eb85fe4b6 +size 7624 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Dinner Bell.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Dinner Bell.ogg new file mode 100644 index 0000000..693852e --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Dinner Bell.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4da293ec39602d6943386f6fa1f7c5fd110758b1f66c17eb33161490a226250 +size 6268 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Disintegrate.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Disintegrate.ogg new file mode 100644 index 0000000..f29d17b --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Disintegrate.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc74e0cdbac7ae4c458ac76208f738969a4d385756586d423f0cbab6fc398ad7 +size 7255 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Disintegration Beam.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Disintegration Beam.ogg new file mode 100644 index 0000000..4e11332 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Disintegration Beam.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a508ebc1cc70acfe74a8ab46bcc718ee27991192c2aab2274f454583a62a0d2 +size 8395 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Drain Magic.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Drain Magic.ogg new file mode 100644 index 0000000..97d73c4 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Drain Magic.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9200e681feda29eb6630cbfdc669237245aa87fbd2284b5fc169c14e4316c2c7 +size 7127 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Drain.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Drain.ogg new file mode 100644 index 0000000..76e0fdd --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Drain.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d82fb2c147660fc10d76036ba47039b846e28162d91e7c3a98e78c9ffd48ef92 +size 6010 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Dread Inferno.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Dread Inferno.ogg new file mode 100644 index 0000000..755d39b --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Dread Inferno.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e8eca5e9ac8d1e0e2604180680ab004da4856cdd25ca4f4b8dc1c30bc4bfaf2 +size 7368 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Echoes of Doom.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Echoes of Doom.ogg new file mode 100644 index 0000000..73cbd85 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Echoes of Doom.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7d89a69562f1070d11d3e26651adb8dded822ec5b53c464e722b597d6e356cc +size 7858 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Empowered Flame Rend.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Empowered Flame Rend.ogg new file mode 100644 index 0000000..4feb8ea --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Empowered Flame Rend.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a9e78f5fba7dbfcde97bf987d236dec1fe1c6ccc302c62d5ec5c63d869637571 +size 9519 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Empowered Flare.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Empowered Flare.ogg new file mode 100644 index 0000000..fcc0df2 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Empowered Flare.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d16eafb2d6d5a8b36a7233c5015f4b9397a1560e6f92cc9169611a1f37611c8f +size 8115 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Empowered Pulse Grenade.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Empowered Pulse Grenade.ogg new file mode 100644 index 0000000..669d318 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Empowered Pulse Grenade.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac3cb0277941e40709d547c06c127fbc521cb1ed6201f5cc344b11b168a6a3f0 +size 9091 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Empowered Shock Lance.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Empowered Shock Lance.ogg new file mode 100644 index 0000000..a5c419e --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Empowered Shock Lance.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60d80edf2918271ea43961516d6c622e6119c5b7feebe0c6105fda09452eea24 +size 10213 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Empowered Shrapnel Blast.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Empowered Shrapnel Blast.ogg new file mode 100644 index 0000000..9dd6717 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Empowered Shrapnel Blast.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1bf8ad1ef5efb8ecc81836af591d9d6260aa16b6fe2c6d07f327814549b6233c +size 10843 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Enflame Corruption.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Enflame Corruption.ogg new file mode 100644 index 0000000..90c082a --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Enflame Corruption.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:708c16d8c4e1fcf0ac58dca73bf59a9845f7c2f710827292ecf15cd393344858 +size 8807 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Entropic Mine.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Entropic Mine.ogg new file mode 100644 index 0000000..cb35a65 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Entropic Mine.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:027aa024bc2a6ff8faa043a96f23c0794a02d5dc245c4a6ec163e6c81df22480 +size 8062 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Eradication.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Eradication.ogg new file mode 100644 index 0000000..45423ca --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Eradication.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6335cba2a4c86c98086c134c73f1b458ba91e41bf06832e5853469588fd2b9c7 +size 7189 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Evocation.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Evocation.ogg new file mode 100644 index 0000000..b128bc7 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Evocation.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:abc52e972ca781b1dab933ec48fd4ded1d7d91c835c3e651b6b8842cbb242753 +size 7033 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Expel Light.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Expel Light.ogg new file mode 100644 index 0000000..40f38b0 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Expel Light.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:be649de242c35c93f5646a53e7fe99b71b2a29ef8eff5804b4113096bd52e473 +size 7294 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Eye Storm.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Eye Storm.ogg new file mode 100644 index 0000000..51c2f5c --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Eye Storm.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:85ede0dc9a7b19d9e1a3e673fc02638097d03ad914af31ce8028d22c19268698 +size 6782 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Eye of the Storm.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Eye of the Storm.ogg new file mode 100644 index 0000000..b6d9f50 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Eye of the Storm.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3380508992126f9838ed64b1e185fa969e075d2d622722101ba9af3e9e28964e +size 7845 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Feed on the Weak.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Feed on the Weak.ogg new file mode 100644 index 0000000..5003e08 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Feed on the Weak.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b85d7ec3ac01a0960689c46c4319a78a7d913a7e535490480ae3773cba825f01 +size 7918 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Fel Bombardment.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Fel Bombardment.ogg new file mode 100644 index 0000000..0497063 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Fel Bombardment.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0410c710340e35a671db2bae8b0cbfdc5a20750807b7aff0f14002bbc3d293ed +size 7199 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Fel Breath.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Fel Breath.ogg new file mode 100644 index 0000000..6d5f761 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Fel Breath.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a69dd2559f43972457e1ae072e08fa14e6414ab04493e5bedf9be3a5c84d67f3 +size 6266 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Fel Detonation.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Fel Detonation.ogg new file mode 100644 index 0000000..bac8eb7 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Fel Detonation.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:83269e857d9923759dd277459ca9ee021992e301d0782097f152e8673764c34a +size 7761 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Fel Fireball.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Fel Fireball.ogg new file mode 100644 index 0000000..f51438d --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Fel Fireball.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:43d6c2a1e1760d8797751385a11d77e9040ab086c23190f743de8930b9053be6 +size 6769 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Fel Mortar.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Fel Mortar.ogg new file mode 100644 index 0000000..50da6fd --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Fel Mortar.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd75fef14cbf4d8deaa175f6a6478e5d16ccdad8fad16aa8f76b37d737bff9ab +size 6281 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Felblaze Orb.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Felblaze Orb.ogg new file mode 100644 index 0000000..7d895d5 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Felblaze Orb.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a654652f49790904d3fa53019b833887d499bd47f91410ce760b8a5375e454b +size 7331 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Felsoul Cleave.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Felsoul Cleave.ogg new file mode 100644 index 0000000..3a4b280 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Felsoul Cleave.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9522d7d90ede54410fee475545ef01a1cf9466dbb8b1f2ff643d3a11de96b27c +size 7116 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Fiery Strike.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Fiery Strike.ogg new file mode 100644 index 0000000..17e4a28 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Fiery Strike.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63119f3a0294f63735cf57cd061f6d6c642fa4415db51287802de624c6d4d74c +size 7148 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Flame Rend.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Flame Rend.ogg new file mode 100644 index 0000000..c9df29d --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Flame Rend.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a60d27c3606ad14381c29d07c8cc7d86b03118b1c1e0d77e0ea4425bbd479ed +size 6747 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Flame Wreath.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Flame Wreath.ogg new file mode 100644 index 0000000..7add3b9 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Flame Wreath.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce5bcef7c8f5639b531297aadc6d92503724083032c4b66a8e500acb35612480 +size 6288 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Flare.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Flare.ogg new file mode 100644 index 0000000..7a36fc8 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Flare.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7186f6c0f471af4adb8758599247c2ff495888bf0eb380cedc9ead26c8c1941e +size 5688 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Flashlight.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Flashlight.ogg new file mode 100644 index 0000000..c6a97ec --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Flashlight.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4ea7a296a8473f30c254c92f25970c638d669cf6a5917962bb726e1434d3530 +size 6146 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Floral Fulmination.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Floral Fulmination.ogg new file mode 100644 index 0000000..ae65311 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Floral Fulmination.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:54c219339ca0d8d2d29976c962b0a5789b7c3876cca5c3242843e13dd35ec471 +size 8496 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Focused Lightning.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Focused Lightning.ogg new file mode 100644 index 0000000..f7d64f4 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Focused Lightning.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:035e4971c9812449bbf84254e1729a59a19b9aa35fe16743f1639325466fa8fd +size 7540 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Foe Braker.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Foe Braker.ogg new file mode 100644 index 0000000..80db874 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Foe Braker.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ade6e8d9c6deb54081c510f41f264ecc9d4400173b777e0c90f2015c2e0fda21 +size 6203 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Forging Strike.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Forging Strike.ogg new file mode 100644 index 0000000..df624da --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Forging Strike.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6dc9cb71f9804f6eb8cd712bbc1475994517bdbf3c70ae63b7ecf1d6e3200cad +size 7335 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Fragment.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Fragment.ogg new file mode 100644 index 0000000..75bdfbf --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Fragment.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:64d04f7b54fd0c6767e6c83aadde4b1ddbd5d9825778388466fadd9562bd7a85 +size 8527 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Frostbite.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Frostbite.ogg new file mode 100644 index 0000000..c6b687e --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Frostbite.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c109f783eaa3513cf45c612d28a3ec379bf4e9cc620aa1501255562f911965b8 +size 6497 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Hateful Gaze.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Hateful Gaze.ogg new file mode 100644 index 0000000..49b12bf --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Hateful Gaze.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d885cc2f9a7b024d04f4c88dfcd83abfc8dd2bc9b2e397bcf1394a6dfa119fae +size 7800 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Hatred.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Hatred.ogg new file mode 100644 index 0000000..1b77cc1 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Hatred.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:389c43b2bb27312d2c217fdfe2e0f0988ae8d76bb6332c95ddb114fb43ef132d +size 5922 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Healing Touch.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Healing Touch.ogg new file mode 100644 index 0000000..357a053 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Healing Touch.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6d7dce6d475c5de1541881bf9b1a77ae5d34816477d12db4b7c71cce81e4da9 +size 7095 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Heat Wave.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Heat Wave.ogg new file mode 100644 index 0000000..29efdd4 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Heat Wave.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f4c750238769590b6876ebd2a95660e83f7d798ac19b4df749b808f0f23cbd75 +size 6547 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Hinder.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Hinder.ogg new file mode 100644 index 0000000..69a374f --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Hinder.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e264aab215ab433a769655f63b6e7344cc81d0c4d5d52d1068be912a79f67023 +size 5688 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Holy Radiance.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Holy Radiance.ogg new file mode 100644 index 0000000..6509de1 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Holy Radiance.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3aa631913b91ca0f30b0f3205988e02f839eaf6ccf5ddaca37d5c9b18fadaf77 +size 6848 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Horn of Valor.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Horn of Valor.ogg new file mode 100644 index 0000000..3b4de3c --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Horn of Valor.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c3b95182a8b28210f81b113fc7ad2aaa0b67c440b252a124dbbfa71d416366c +size 7321 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Inferno Bolt.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Inferno Bolt.ogg new file mode 100644 index 0000000..64e2ef4 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Inferno Bolt.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:146eabf8a6c12b7b7f8b07679a4673be88a66f134ebcdb9048d2221bce7eaaf0 +size 7191 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Intangible Presence.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Intangible Presence.ogg new file mode 100644 index 0000000..58217a8 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Intangible Presence.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d329b37c88caaf2c6962d21b12b49578abf54f7e50dfa10bc825297843f40c41 +size 9217 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Iron Whirlwind.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Iron Whirlwind.ogg new file mode 100644 index 0000000..f53f9f3 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Iron Whirlwind.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d47df53ff146132c96a1817a32a02df09588597e8ff998d99b677b3674c325af +size 7348 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Kara Kazham.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Kara Kazham.ogg new file mode 100644 index 0000000..54c8f13 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Kara Kazham.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c59e5156ec1d49b53c55e9b588080400b9f63f1b811a680068fb6145d8293d7c +size 6967 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Knife Dance.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Knife Dance.ogg new file mode 100644 index 0000000..9852b71 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Knife Dance.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0d45be09eab869e3cfee14d11e88f91ec57578b8e217537c6d5aa73f942d4ce3 +size 7228 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Landslide.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Landslide.ogg new file mode 100644 index 0000000..afcaeed --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Landslide.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9863c559512cf8dbc0716eaba1627f854143e88b14af05f7d92e047c3c2a72aa +size 6858 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Lantern of Darkness.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Lantern of Darkness.ogg new file mode 100644 index 0000000..7fbfca0 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Lantern of Darkness.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e936c035b24ee4f05b78a330aa147706093834d501839273a56bd20908c89617 +size 9160 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Lava Wreath.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Lava Wreath.ogg new file mode 100644 index 0000000..84d7ae6 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Lava Wreath.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b724cdcb156a7e30b03a3dd44e823ee390ef373b25699f61dda79d4ab119c5b +size 6772 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Leech Life.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Leech Life.ogg new file mode 100644 index 0000000..93251c7 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Leech Life.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd6387fd80de48f1beea944c8a8872c2617555aec8d0a97ffec078e15ef37592 +size 6598 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Lifebloom.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Lifebloom.ogg new file mode 100644 index 0000000..9c43802 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Lifebloom.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:66ba0c04902d0631bd44bc1eb4f067fee69a626763729f61afcf83be6c972336 +size 7131 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Lightning Breath.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Lightning Breath.ogg new file mode 100644 index 0000000..ee818e1 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Lightning Breath.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e13912f08dec83a51c75af56bf727999d37aa29baa12d833587de88106afffa +size 6997 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Lingering Gaze.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Lingering Gaze.ogg new file mode 100644 index 0000000..9a6e452 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Lingering Gaze.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8caf92342dc88fef4ec8b2a3b1de5387396a27bfb8e50e008359921a6d7b8921 +size 8109 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Maddening Roar.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Maddening Roar.ogg new file mode 100644 index 0000000..b8a214a --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Maddening Roar.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a467296d074cb34db3114267031f714b6d093a0d7fdaec2f8b769ac92077085c +size 7110 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Magic Magnificent.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Magic Magnificent.ogg new file mode 100644 index 0000000..17f0fc4 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Magic Magnificent.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b7ab1e43d83fccf356549b716ed07e2b118908adb76e4c84d838af1faad0b7b5 +size 8586 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Mana Fang.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Mana Fang.ogg new file mode 100644 index 0000000..41e0e56 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Mana Fang.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7706e060a417b43a2cb7f57266adb9f48185ea23e4d1e5e4d76ebd5542f3c1b8 +size 6725 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Marked Prey.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Marked Prey.ogg new file mode 100644 index 0000000..0a861e5 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Marked Prey.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c49ca408e551957949da8fad1f43843a300e1a7faef242f22c635cd067d3a4d +size 6873 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Mass Repentance.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Mass Repentance.ogg new file mode 100644 index 0000000..061c7a5 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Mass Repentance.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23b8ca867164bf0426374e18d9cee2e953da80573b02ea04cf1cce20d492ef1d +size 7686 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Meteor.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Meteor.ogg new file mode 100644 index 0000000..0d5ad04 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Meteor.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5264ecbf2a0a5638ed5f52b2f0bb1437947565ed73c3e326696e90086647d2bd +size 5928 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Mighty Slam.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Mighty Slam.ogg new file mode 100644 index 0000000..a230f5e --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Mighty Slam.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b774c796272840ad7b50fb7b63266425be3df78e527bd412c78b1b52a0032c2 +size 8010 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Misery.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Misery.ogg new file mode 100644 index 0000000..32efeac --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Misery.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8434d70da828949db7ea7aca22d941954d2b7ad728b2b06e237ea2224df28665 +size 6030 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Molten Crash.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Molten Crash.ogg new file mode 100644 index 0000000..a291acf --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Molten Crash.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c079741f38121c7854df25123a49b360bebbbf586253fc5f79e9b2bf91a9d5c +size 8578 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Molten Touch.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Molten Touch.ogg new file mode 100644 index 0000000..55e781d --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Molten Touch.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f984d1a3640b32fdd9c8d204425fdbafa86b80262b6e66cab1511ef69a20701c +size 7074 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Mortal Strike.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Mortal Strike.ogg new file mode 100644 index 0000000..27eb1c6 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Mortal Strike.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:902fae28b3ba09bd2a314bfa5c4b52db0727dd7a641796753ac09816cf5d1a5d +size 6827 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Necrotic Embrace.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Necrotic Embrace.ogg new file mode 100644 index 0000000..0dfdd02 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Necrotic Embrace.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:be3b18edb4a99792099fac3bfdfadb3130f717c4ff126d5fa159905029875786 +size 9427 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Nether Venom.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Nether Venom.ogg new file mode 100644 index 0000000..af7a89b --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Nether Venom.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bac888ce674258a7d7e20f31164e5c96baa5a7ca77709ea516168816c659be59 +size 6957 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Nightmares.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Nightmares.ogg new file mode 100644 index 0000000..f0478cb --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Nightmares.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:238b17158306477438b405141032bb937f228c949a4c1dc89755b862ef87c704 +size 6641 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Nullification.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Nullification.ogg new file mode 100644 index 0000000..9043b84 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Nullification.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:411b1cb982bab657e2047c0211588b66e8e773f807bd68990fee141458accdd8 +size 6917 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Overcharge Mana.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Overcharge Mana.ogg new file mode 100644 index 0000000..d1400a1 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Overcharge Mana.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11e1567c52b5ebae48137e74d924bb727f4b5e23850b418fb05b1891c60455b3 +size 8218 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Penetrating Shot.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Penetrating Shot.ogg new file mode 100644 index 0000000..3c0513a --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Penetrating Shot.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6493fd39cb32b45b7f294e37dcad3bc29fb2109505d8adbb961f72c675be9795 +size 7245 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Phase Breach.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Phase Breach.ogg new file mode 100644 index 0000000..a83a6e2 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Phase Breach.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c4812377d2820a3c1985c6d0715581e43480361ed3131f58d830cdadc61ea634 +size 8152 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Piercing Gale.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Piercing Gale.ogg new file mode 100644 index 0000000..b8b60cc --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Piercing Gale.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf83a2bcf4ee0870a194ec8b28087009a53a3e2686961fbf7ad6596d3c8abc91 +size 7251 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Piercing Missiles.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Piercing Missiles.ogg new file mode 100644 index 0000000..f4309e9 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Piercing Missiles.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:02e3807d3daa1d6ce65672481abcf1017c86e0c3ce7008c15461ac0e240ca868 +size 7577 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Piercing Shards.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Piercing Shards.ogg new file mode 100644 index 0000000..57fb400 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Piercing Shards.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:777d4eaacd999aa715e83d1457b538135fe181bc0386a671286bfd025025a940 +size 8485 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Polymorh Fish.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Polymorh Fish.ogg new file mode 100644 index 0000000..10dc347 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Polymorh Fish.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a9d1f1b41aada9a7b28cab681c3d6e3e4b4b7cca8fed15a1ae59123ae179f26a +size 7528 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Prophecies of Doom.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Prophecies of Doom.ogg new file mode 100644 index 0000000..57a14d0 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Prophecies of Doom.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d05943923135df7ae50df8f26171eec0cf631e29813e791e51a34d6c46d18278 +size 8088 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Pulse Grenade.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Pulse Grenade.ogg new file mode 100644 index 0000000..b5117c1 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Pulse Grenade.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8dd0f777d7cb3097dd54b6e7f22f92e904f9f7eee619c659558c65c69b6db2a2 +size 7757 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Quarantine.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Quarantine.ogg new file mode 100644 index 0000000..e2578d4 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Quarantine.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec3f7deed0f643720b1c45493abf119f077af9ba93c3d719283893ba552bd00f +size 6983 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Quelling Strike.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Quelling Strike.ogg new file mode 100644 index 0000000..10d07cd --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Quelling Strike.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:287621d9da5f6653fd07c0bfbac2a9df6c9ac1306b3350cbfd33f726d3209d0d +size 6731 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Radiant Tempest.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Radiant Tempest.ogg new file mode 100644 index 0000000..d135e7f --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Radiant Tempest.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a26d5104ff12a006ae88a21067bf5ff8ce026485dfd3245b7b0fd59e26e293a +size 8233 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Ragnarok.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Ragnarok.ogg new file mode 100644 index 0000000..4d7d0c0 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Ragnarok.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1177ed2a30db497d7cbc9a1b26b417f6c0b8195bbf55a8949fcb308ecb585c03 +size 6092 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Rampage.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Rampage.ogg new file mode 100644 index 0000000..3e3f5de --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Rampage.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df2310040a0dc69c3ee54432b960072bf85ae585a871983230f458fad6bdcad4 +size 6971 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Rapid Rupture.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Rapid Rupture.ogg new file mode 100644 index 0000000..537b2f9 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Rapid Rupture.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8017930e61d8d45baa38df2ecf9546bf6e848df640c199f011da079f875f1f0c +size 7200 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Ravenous Blaze.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Ravenous Blaze.ogg new file mode 100644 index 0000000..8c9fbc4 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Ravenous Blaze.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e387698168770a3d989a90ebc8a26ff4b9ef1a7246a77a0b8250871bfb8d58d +size 8470 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Razor Shards.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Razor Shards.ogg new file mode 100644 index 0000000..64cf195 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Razor Shards.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e1f6886ccd0753ab6db0a44615b6834efb0cf1b98b50fba9f7eae7d3f6531032 +size 7613 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Reality Tear.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Reality Tear.ogg new file mode 100644 index 0000000..02b7789 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Reality Tear.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:913ce49872c9a97dfe7d03e51ea2e9251482d2594bcf41515fba9f1d58e8c783 +size 8139 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Reap Soul.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Reap Soul.ogg new file mode 100644 index 0000000..1cb4957 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Reap Soul.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0b22841e3eef4b6d0b063964027574c2543762f2bbd0d1b155af94cc91114086 +size 7723 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Rejuvenating Waters.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Rejuvenating Waters.ogg new file mode 100644 index 0000000..ef7af62 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Rejuvenating Waters.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1b473ecfd02d3e76b4cad581bf7957311db8d05822e06779135dbba961a20108 +size 9010 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Rejuvenation.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Rejuvenation.ogg new file mode 100644 index 0000000..6df2677 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Rejuvenation.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:457a7554ff0e713b67ab945a7346bac461a90b7d8bfee8ab83f37063763cab06 +size 7558 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Reverberating Strike.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Reverberating Strike.ogg new file mode 100644 index 0000000..16653fe --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Reverberating Strike.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d157c5e309c4b2d5add627c4c4bab403b6895872953070893f0bb7c9e72d95cb +size 8390 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Roiling Storm.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Roiling Storm.ogg new file mode 100644 index 0000000..172e7d2 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Roiling Storm.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f8ab603eb7f2d3c0470819856c17b0fea50794b1bc57a0b329922a8a40900a1f +size 7707 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Ruiner.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Ruiner.ogg new file mode 100644 index 0000000..3f6ad6b --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Ruiner.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:037bff5a30cd406b81aeca3c11adf58240354e7e31275697dcd196ab750fdda8 +size 6392 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Rune of Healing.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Rune of Healing.ogg new file mode 100644 index 0000000..84505c1 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Rune of Healing.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:25f63afbdc816f3b4bdaa1f1bda33025832d4b465bead5e2c29b089b47b42c2b +size 7067 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Runic Band.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Runic Band.ogg new file mode 100644 index 0000000..ce1e735 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Runic Band.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ba381969b94f6de7136c627a73b0d1c8a2edfbac3a5894cd21ef27f633a207ce +size 7264 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Sacred Ground.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Sacred Ground.ogg new file mode 100644 index 0000000..53b3af0 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Sacred Ground.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff4b1e964814cee17df6b2eaaa44593f503796af8d548c4699ebd8948871bc62 +size 7738 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Sacrifice Soul.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Sacrifice Soul.ogg new file mode 100644 index 0000000..ae34a76 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Sacrifice Soul.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:10ebead65c48380c373f6f44d78747197a310456482a0a101900f45fd847fdb6 +size 8755 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Sanctify.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Sanctify.ogg new file mode 100644 index 0000000..f31bfc8 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Sanctify.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e28d4fb3d5ee76322d6e2a373addb83aa46734daf87dda4e338fc1380396c5a +size 6871 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Sandstorm.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Sandstorm.ogg new file mode 100644 index 0000000..a531200 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Sandstorm.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0186500b2deae4f0bcfcd511fa378d4fe113f620a420a09cd3b08d217656d5d +size 7043 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Scornful Gaze.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Scornful Gaze.ogg new file mode 100644 index 0000000..52359bd --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Scornful Gaze.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a6eeb40ba2db8e95bbd71936787e003656ed7a13ee4be835e15f8bafbe1e860 +size 8430 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Screams of the Dead.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Screams of the Dead.ogg new file mode 100644 index 0000000..0a80ded --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Screams of the Dead.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:47f429930ef42fdebe56671ec74f6fe8bf61b5e5dfc5a16804c37efa14589355 +size 7494 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Sea Legs.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Sea Legs.ogg new file mode 100644 index 0000000..700e7cb --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Sea Legs.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:359954b661b9380ab24316bf2578b480bc95b73a7ef085a25811c647f54c9be7 +size 7003 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Seal Magic.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Seal Magic.ogg new file mode 100644 index 0000000..96445f3 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Seal Magic.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a20db8768d3e7521cb31f5b4ee4cbe6795e5b1b06009fcc64a166260d50ad1e6 +size 6698 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Sever.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Sever.ogg new file mode 100644 index 0000000..700cecf --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Sever.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac76f6c4ecacbf09ccf6cd453ed5797fb9009f12e4e6e63d85a48d19ddc8a085 +size 6890 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Severe Dusting.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Severe Dusting.ogg new file mode 100644 index 0000000..2c32f33 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Severe Dusting.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:43e4e2af419638aedad53a4ac9d18dc22836db5904fab170670b1e8d6bfc7014 +size 7874 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Shackles of Servitude.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Shackles of Servitude.ogg new file mode 100644 index 0000000..588f577 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Shackles of Servitude.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f600ffecb874c8bfa3fd6bbde64b16ef99d0f9edf8330ef9656ab304bdf2c2df +size 8395 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Shadow Blades.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Shadow Blades.ogg new file mode 100644 index 0000000..666ac94 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Shadow Blades.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:485f6e08e84366e65bcd5117912bc94a00e48af45335eb8bec906e0ef00f39e3 +size 7569 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Shadow Bolt Volley.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Shadow Bolt Volley.ogg new file mode 100644 index 0000000..dcd0975 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Shadow Bolt Volley.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4f281c382ea9f6545a2b5f0c9e8baa549c5be96283293d9f34e1295a7cea2ad2 +size 7395 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Shadow Crash.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Shadow Crash.ogg new file mode 100644 index 0000000..4f9e9ac --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Shadow Crash.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:835bc833251f4b3c53a0fd4398681e13d180ac1aa6e332dc8a7115c5c8311bf0 +size 6959 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Shadow Rejuvenation.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Shadow Rejuvenation.ogg new file mode 100644 index 0000000..3e5ef3c --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Shadow Rejuvenation.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e2addb3adc3b9e628c09a25932dbf8bc8a1bcef981d448b21dbaba8405ad71f4 +size 8825 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Shadow Strike.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Shadow Strike.ogg new file mode 100644 index 0000000..e9c8d7b --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Shadow Strike.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c0185f548a015253fab614f692cf946e8abaeae02a79ee99d0364941e98db710 +size 6854 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Shadow Sweep.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Shadow Sweep.ogg new file mode 100644 index 0000000..f9786f7 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Shadow Sweep.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8bbbdb15ab6151f1c3f9413436ce084b2fd1925f9f5734b2cae4ca3adb4c11b0 +size 6216 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Shadow Wall.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Shadow Wall.ogg new file mode 100644 index 0000000..60adb17 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Shadow Wall.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a395364d57769f7d1c5a4574c24c3ef2de0517203a65280a723fc211b92015a +size 6558 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Shared Suffering.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Shared Suffering.ogg new file mode 100644 index 0000000..1e6f551 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Shared Suffering.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4f1d197c85d6fab06cbd9f6ba66cee74de7294c04851d13d5a7eb2ccb159ac3 +size 6679 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Shield of Light.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Shield of Light.ogg new file mode 100644 index 0000000..4c434a0 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Shield of Light.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:921f750555e8792c4283339979d42a5266177697255b3c23dd90dbfeca8e7f25 +size 7038 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Shivan Pact.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Shivan Pact.ogg new file mode 100644 index 0000000..e0c5aee --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Shivan Pact.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74d13fa94ed9a55db5224cd4e60b6d47db608749a737eba973fd5f00be960bd8 +size 7070 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Shock Lance.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Shock Lance.ogg new file mode 100644 index 0000000..569626a --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Shock Lance.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c4a657fe5fd4e1aafe833c940493bb8d04618a68c70d82be42b800ce4cccc02 +size 6919 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Shockwave.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Shockwave.ogg new file mode 100644 index 0000000..82af32f --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Shockwave.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99d7f4025deb2a9ee05b8d54a4354423f0938f69dc914da4a5274915d6d04cb6 +size 6912 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Siphon Corruption.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Siphon Corruption.ogg new file mode 100644 index 0000000..efeae60 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Siphon Corruption.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3d257434a93b230474d86f17659ef937f51006d51b92019dbb9ececd35f127f1 +size 8663 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Six Pound Barrel.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Six Pound Barrel.ogg new file mode 100644 index 0000000..7b2b63b --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Six Pound Barrel.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:145df497b3d40c9a4ca60cd58d48cf76621712737292edb28dca7370a12447f9 +size 8382 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Sleep Canister.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Sleep Canister.ogg new file mode 100644 index 0000000..1e6e07b --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Sleep Canister.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:48fecd2ba178ea1cbdae622b001d6f590928fdec7aeadc082a181af0c991816d +size 7374 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Slicing Maelstrom.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Slicing Maelstrom.ogg new file mode 100644 index 0000000..e6cda60 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Slicing Maelstrom.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:221582502b74c409bc621653d8478dcb65b6b5a26e1c3a98b5399329e547674e +size 8285 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Soul Echoes.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Soul Echoes.ogg new file mode 100644 index 0000000..e125de9 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Soul Echoes.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:247c60f958977992f908b3523341e5768a5fe58608e515be57faa6a2ac0c527c +size 8109 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Soulblight.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Soulblight.ogg new file mode 100644 index 0000000..8ac4a09 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Soulblight.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f66e5fa68d04df3aa82d6823ebf6ae3247d0e5129843822040bd76f738cd3490 +size 6297 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Soulbomb.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Soulbomb.ogg new file mode 100644 index 0000000..60bef6d --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Soulbomb.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:35a9ab24123bd67ea5c9405c2d314692e2a8346a5bb39f378d3ac50ba4145960 +size 7210 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Sound Alarm.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Sound Alarm.ogg new file mode 100644 index 0000000..ae5ad31 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Sound Alarm.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93a46874ac8d04ee9bbf2669ca468c19a9e6c4f36b8634ffa8a497a9b162c82d +size 7132 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Spear of Light.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Spear of Light.ogg new file mode 100644 index 0000000..dacec3a --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Spear of Light.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:539385fb3ee00b680409bd5de79821489f347e3ed081cd5b5d97828d51fa25b2 +size 7008 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Spiked Tongue.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Spiked Tongue.ogg new file mode 100644 index 0000000..2cb7ace --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Spiked Tongue.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:35bfb0896a1f9c28afb51ef6f3515f6775ac36a2c72a6e655c3fd6ebfc5fd3db +size 7360 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Spray Sand.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Spray Sand.ogg new file mode 100644 index 0000000..255e201 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Spray Sand.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b1a27cccb86046ac670efa40112f3ca6a8591456b421aeeda54afad467f4afa6 +size 6696 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Stasis Trap.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Stasis Trap.ogg new file mode 100644 index 0000000..9f52e25 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Stasis Trap.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1313c84597858861c50c4cc4189ffa5c3ece90be7b41df9dc8bc576937a00bac +size 7115 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Static Nova.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Static Nova.ogg new file mode 100644 index 0000000..7dbc581 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Static Nova.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:40871f18dd49e55788f0dd5e5fed825ebcf05f6d6800d5be6b8be200c8abfb09 +size 7006 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Stone Gaze.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Stone Gaze.ogg new file mode 100644 index 0000000..b27e0c1 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Stone Gaze.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af3767b07664848744852d897a2d2981e7bbd03f5b7d5ef8e4f92eff3a4dc057 +size 7744 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Streetsweeper.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Streetsweeper.ogg new file mode 100644 index 0000000..b64fb68 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Streetsweeper.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:97cdbbb07befefa8f3b3ebb2159ee6c9d6d333d69c30b4e0b6b6726b12e470ca +size 8466 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Strike Down.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Strike Down.ogg new file mode 100644 index 0000000..f16a2cb --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Strike Down.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:409d804c1a4da79849512c8fce2cd109cd8071a1a10830e4bf656e8884f71e53 +size 6164 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Sultry Heat.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Sultry Heat.ogg new file mode 100644 index 0000000..af5d7f0 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Sultry Heat.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:06217430babb7771bf508d9b7ceac8f309de21270fa96c8b689f447c366b77c0 +size 6771 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Summon Reinforcements.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Summon Reinforcements.ogg new file mode 100644 index 0000000..65d9ac6 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Summon Reinforcements.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:69bddb1e67cc2c905e4357e39d9295c3a13f0f0bfde09929852e683034a889e0 +size 9642 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Summon Volatile Energy.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Summon Volatile Energy.ogg new file mode 100644 index 0000000..2a8153a --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Summon Volatile Energy.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bdecc84100a57d528cf25843b0329c209ef4d2c05bb0bf11a9ae73b7bed8ad98 +size 9326 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Sunder.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Sunder.ogg new file mode 100644 index 0000000..4701a42 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Sunder.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:33ad3dce015914db96369337265c5bfb6ee878cf667daab1616b119a4b11c650 +size 7674 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Surge.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Surge.ogg new file mode 100644 index 0000000..44fdb0f --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Surge.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6b372c8f0ffe9eca9f10964511896aa0c9086d140de1e71a85d1e68bf2a0c28 +size 6161 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Swirling Scythe.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Swirling Scythe.ogg new file mode 100644 index 0000000..f42d07f --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Swirling Scythe.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5819fec2280c2c5b2c9c307fd6717ab2c1a48341cf859c0d65615159d81a6173 +size 6997 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Tangled Web.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Tangled Web.ogg new file mode 100644 index 0000000..bb3f029 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Tangled Web.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bfcfa1bdccabed4ee218b3d8017840baf8b85146a45aaaf8cf5026e976f1478c +size 6805 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Teleport.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Teleport.ogg new file mode 100644 index 0000000..a5ce4e5 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Teleport.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e9e28afc0fc9a1fefc730c638607d884d0cc89f3b22e62607fbfdf9e080ad4a +size 6067 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Thundering Stomp.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Thundering Stomp.ogg new file mode 100644 index 0000000..920ee55 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Thundering Stomp.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2cb8747a139210e16fff05febec82b981a6f36e09fdf2fc3699b11c8d99beecc +size 7449 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Thunderstrike.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Thunderstrike.ogg new file mode 100644 index 0000000..9f019a8 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Thunderstrike.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a29067c830f97f7879b282f3bc9fb8832c811e4afe54b406f62d3c20b65be7d2 +size 6278 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Torrent.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Torrent.ogg new file mode 100644 index 0000000..5d4be2d --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Torrent.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:577dc180b30833ec401936523e54fbd385c97d616c05e46effdc14e618f6bf77 +size 6054 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Tortured Rage.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Tortured Rage.ogg new file mode 100644 index 0000000..65e9bc7 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Tortured Rage.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a6e95ebeea6392b3a0733bec7f744bb307871db813c18727c84933ca6aed6b9 +size 8298 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Turn Kick.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Turn Kick.ogg new file mode 100644 index 0000000..71eec3d --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Turn Kick.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab014ebc145cc311dfa3a2cd5f1b2e47872a05037fa8a7c4df95aeb3a48f7780 +size 6203 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Unleash Fury.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Unleash Fury.ogg new file mode 100644 index 0000000..9acf252 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Unleash Fury.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dcb9e456255b4da3af0d5d82e36110e805b9aa2383dd7b7740882200516f57a6 +size 6705 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Unnerving Screech.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Unnerving Screech.ogg new file mode 100644 index 0000000..03fdf19 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Unnerving Screech.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a3daffe64986fc55cc924ec20eb21002282d5bbf25506007d4b2d611e5534b44 +size 8789 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Unruly Yell.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Unruly Yell.ogg new file mode 100644 index 0000000..c9efcbb --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Unruly Yell.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:88bb844dfa51723feb30262806d02310a0fed88aeaec98b770027d770cf746d5 +size 6960 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Unstable Mana.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Unstable Mana.ogg new file mode 100644 index 0000000..bee65a2 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Unstable Mana.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3dbfa994d1221a2837900d90a9cfca595eb0c00f702f43110a499363b444b032 +size 7463 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Vengeful Shear.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Vengeful Shear.ogg new file mode 100644 index 0000000..7d2d837 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Vengeful Shear.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:031ef2ce3e8c0143ed099048bc32a6ffca3e6a2b10e3289f1e626c763e11cbf5 +size 7583 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Venom Storm.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Venom Storm.ogg new file mode 100644 index 0000000..9671dc6 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Venom Storm.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2ed9b86a32fe62944d6e53c92c66b552bcc2e280a79b668404fa8523f09eb471 +size 9395 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Vile Roots.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Vile Roots.ogg new file mode 100644 index 0000000..6b1da75 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Vile Roots.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:75ce3d4a33cd554c01fbcb5ca7624b8fa21bb23abb9849b11a92a0d38e058574 +size 7686 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Wake of Flame.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Wake of Flame.ogg new file mode 100644 index 0000000..554b57b --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Wake of Flame.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9fa1ea1372f8a2df1d3755a293790771b5341a712e9bbc4e818e1cc8f48b3aa +size 7542 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Whirling Edge.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Whirling Edge.ogg new file mode 100644 index 0000000..3e719fa --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Whirling Edge.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b0669471066b916846963d8b3ada02e4f9aaa5f9f74d5b76657e571cf657e0a9 +size 7975 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Whirling Saber.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Whirling Saber.ogg new file mode 100644 index 0000000..3cfa42f --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Whirling Saber.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d01525d319f3a3f577973a5be97eea6c350be920a8c3ac384d3ef459e0308b38 +size 7535 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Wicked Dagger.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Wicked Dagger.ogg new file mode 100644 index 0000000..a8822e0 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Wicked Dagger.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d6a718655782a3d04bbb238659380a64a88b81436f2b4054fa4735d6e0e0a96f +size 6808 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Wicked Slam.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Wicked Slam.ogg new file mode 100644 index 0000000..7cd3d4d --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Wicked Slam.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dcb9d1c3af7859100db4ad80b5975c326cfd559ba675274f23a1620cd32d51d8 +size 7532 diff --git a/WeakAuras/Projects/RaiderSA/out/trump/Will Breaker.ogg b/WeakAuras/Projects/RaiderSA/out/trump/Will Breaker.ogg new file mode 100644 index 0000000..3a66aad --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/out/trump/Will Breaker.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ba2ee1b622fc729bf9c623c3548d9e7452f9b2b0c4b5aa2c19e8111981afcacd +size 6641 diff --git a/WeakAuras/Projects/RaiderSA/runtts.sh b/WeakAuras/Projects/RaiderSA/runtts.sh new file mode 100644 index 0000000..995b665 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/runtts.sh @@ -0,0 +1,13 @@ +#!/bin/sh +model=tts_models/multilingual/multi-dataset/xtts_v2 +mkdir out +if [ ! -t 0 ]; then + while IFS= read -r line; do + tts --text "$line" --model_name $model --speaker_wav samples/genericfemale.wav --language_idx en --out_path out/$(echo $line | sed 's/ /_/g').wav + done +else + for word in "$@"; + do + tts --text "$word" --model_name $model --speaker_wav samples/genericfemale.wav --language_idx en --out_path out/$(echo $word | sed 's/ /_/g').wav + done +fi diff --git a/WeakAuras/Projects/RaiderSA/samples/animedangerboy.wav b/WeakAuras/Projects/RaiderSA/samples/animedangerboy.wav new file mode 100644 index 0000000..e987395 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/samples/animedangerboy.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:183c59b5e6a16421e8ae320b6066d4115f8070e3df4d09b55aca632cbd902026 +size 5292078 diff --git a/WeakAuras/Projects/RaiderSA/samples/animegirl.wav b/WeakAuras/Projects/RaiderSA/samples/animegirl.wav new file mode 100644 index 0000000..9cc251c --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/samples/animegirl.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a16fa70a8263da16bfc6f0c155d20f5ba1a86fc84899ae295f4ab65fad675621 +size 4939278 diff --git a/WeakAuras/Projects/RaiderSA/samples/boberkurwa.wav b/WeakAuras/Projects/RaiderSA/samples/boberkurwa.wav new file mode 100644 index 0000000..8c388aa --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/samples/boberkurwa.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:157d0f32a38589f8ba9913b262438631b519e6bdaea9077ad679013f86958191 +size 3838830 diff --git a/WeakAuras/Projects/RaiderSA/samples/genericfemale.wav b/WeakAuras/Projects/RaiderSA/samples/genericfemale.wav new file mode 100644 index 0000000..2de3a40 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/samples/genericfemale.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89a4fa9a16b6463f852cf9424f72c3d3c87aa83010e89db534c53fcd1ae12c02 +size 1002030 diff --git a/WeakAuras/Projects/RaiderSA/samples/trump.wav b/WeakAuras/Projects/RaiderSA/samples/trump.wav new file mode 100644 index 0000000..fb36f84 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/samples/trump.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6ea2cb957ce238cdd39356367936b1b0733010cddd9426f873b4c417735c08c7 +size 8467278 diff --git a/WeakAuras/Projects/RaiderSA/speedify.sh b/WeakAuras/Projects/RaiderSA/speedify.sh new file mode 100644 index 0000000..e6d4db4 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/speedify.sh @@ -0,0 +1,5 @@ +#!/bin/bash +for file in "$@"; +do + ffmpeg -i $file -filter:a "atempo=1.8" $(echo $file | sed 's/.wav//g')-speedy.wav +done diff --git a/WeakAuras/Projects/RaiderSA/test.sh b/WeakAuras/Projects/RaiderSA/test.sh new file mode 100644 index 0000000..a97abb3 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/test.sh @@ -0,0 +1,8 @@ +IFS=$'\n' +for model in tts_models/en/ek1/tacotron2 tts_models/en/ljspeech/tacotron2-DDC tts_models/en/ljspeech/tacotron2-DDC_ph tts_models/en/ljspeech/glow-tts tts_models/en/ljspeech/speedy-speech tts_models/en/ljspeech/tacotron2-DCA tts_models/en/ljspeech/vits tts_models/en/ljspeech/vits--neon tts_models/en/ljspeech/fast_pitch tts_models/en/ljspeech/overflow tts_models/en/ljspeech/neural_hmm tts_models/en/vctk/vits tts_models/en/vctk/fast_pitch tts_models/en/sam/tacotron-DDC tts_models/en/blizzard2013/capacitron-t2-c50 tts_models/en/blizzard2013/capacitron-t2-c150_v2 tts_models/en/multi-dataset/tortoise-v2 tts_models/en/jenny/jenny tts_models/es/mai/tacotron2-DDC tts_models/es/css10/vits +do + filename=$(echo $model | awk -F "/" '{print $4}') + mkdir out/$filename + echo "$(cat words.txt | grep -v '#')" | xargs -I% -P2 -- tts --text "%" --model_name "$model" --out_path out/$filename/$(echo % | sed 's/ /_/g').wav + # echo "$(cat words.txt | grep -v '#')" | xargs -I% -P8 -- echo "%" +done \ No newline at end of file diff --git a/WeakAuras/Projects/RaiderSA/tts_output.wav b/WeakAuras/Projects/RaiderSA/tts_output.wav new file mode 100644 index 0000000..c216f90 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/tts_output.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e083bcc8eb13551e86d6f2a69da5f302da3bb699180cd16d0463c14a8171f116 +size 1732332 diff --git a/WeakAuras/Projects/RaiderSA/weakaura/init.lua b/WeakAuras/Projects/RaiderSA/weakaura/init.lua new file mode 100644 index 0000000..388469a --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/weakaura/init.lua @@ -0,0 +1,955 @@ +-- Maybe add an option for debuff applied to player +-- Add spell ids; there's way too many duplicate spells by name +-- Also make proper project with git and shit +-- Also sound sounds into sound packs or something +-- Do like sound/general sound/trump etc +-- Make a perma storage array with list of spells by occurrence +-- With the goal of hopefully finding some spells that trigger 0 times +-- Which might be an indication of an invalid ID or alike +-- Add an "on you" voiceline for when the player is target (like is on you) + +local soundPack = "genericfemale" +-- local soundPack = "trump"; + +--INIT +-- 1 = trigger on cast start +-- 2 = trigger on cast success +-- 3 = trigger on both +aura_env.spells = { + -- ##################################################################################### + -- ### DEBUG ### + -- ##################################################################################### + -- ##774!3 + -- ##33763!3 + -- ##5185!3 + -- ##################################################################################### + -- ### Antorus ### + -- ##################################################################################### + -- ########################################## + -- ## Garothi ## + -- ########################################## + [244410] = { + ["name"] = "Decimation", + ["mode"] = 3, + }, + [246220] = { + ["name"] = "Fel Bombardment", + ["mode"] = 3, + }, + [244969] = { + ["name"] = "Eradication", + ["mode"] = 3, + }, + [244106] = { + ["name"] = "Carnage", + ["mode"] = 3, + }, + -- ########################################## + -- ## Felhounds ## + -- ########################################## + [244086] = { + ["name"] = "Molten Touch", + ["mode"] = 3, + }, + [244768] = { + ["name"] = "Desolate Gaze", + ["mode"] = 3, + }, + [244057] = { + ["name"] = "Enflame Corruption", + ["mode"] = 3, + }, + [244131] = { + ["name"] = "Consuming Sphere", + ["mode"] = 3, + }, + [244056] = { + ["name"] = "Siphon Corruption", + ["mode"] = 3, + }, + -- ########################################## + -- ## High Command ## + -- ########################################## + [245161] = { + ["name"] = "Entropic Mine", + ["mode"] = 3, + }, + [245546] = { + ["name"] = "Summon Reinforcements", + ["mode"] = 3, + }, + -- ########################################## + -- ## Portal Keeper ## + -- ########################################## + [244016] = { + ["name"] = "Reality Tear", + ["mode"] = 3, + }, + [243983] = { + ["name"] = "Collapsing World", + ["mode"] = 3, + }, + [244000] = { + ["name"] = "Felstorm Barrage", + ["mode"] = 3, + }, + -- ########################################## + -- ## Imonar ## + -- ########################################## + [247552] = { + ["name"] = "Sleep Canister", + ["mode"] = 3, + }, + [247367] = { + ["name"] = "Shock Lance", + ["mode"] = 3, + }, + [248068] = { + ["name"] = "Empowered Pulse Grenade", + ["mode"] = 3, + }, + [247376] = { + ["name"] = "Pulse Grenade", + ["mode"] = 3, + }, + [247716] = { + ["name"] = "Charged Blasts", + ["mode"] = 3, + }, + [247687] = { + ["name"] = "Sever", + ["mode"] = 3, + }, + [248070] = { + ["name"] = "Empowered Shrapnel Blast", + ["mode"] = 3, + }, + [250255] = { + ["name"] = "Empowered Shock Lance", + ["mode"] = 3, + }, + -- ########################################## + -- ## Kin'garoth ## + -- ########################################## + [254919] = { + ["name"] = "Forging Strike", + ["mode"] = 3, + }, + [254926] = { + ["name"] = "Reverberating Strike", + ["mode"] = 3, + }, + [246840] = { + ["name"] = "Ruiner", + ["mode"] = 3, + }, + [246779] = { + ["name"] = "Diabolic Bomb", + ["mode"] = 3, + }, + [246706] = { + ["name"] = "Demolish", + ["mode"] = 3, + }, + [246664] = { + ["name"] = "Annihilation", + ["mode"] = 3, + }, + -- ########################################## + -- ## Varimathras ## + -- ########################################## + [243960] = { + ["name"] = "Shadow Strike", + ["mode"] = 3, + }, + [243961] = { + ["name"] = "Misery", + ["mode"] = 3, + }, + [244042] = { + ["name"] = "Marked Prey", + ["mode"] = 3, + }, + [244093] = { + ["name"] = "Necrotic Embrace", + ["mode"] = 3, + }, + [248732] = { + ["name"] = "Echoes of Doom", + ["mode"] = 3, + }, + [243999] = { + ["name"] = "Dark Fissure", + ["mode"] = 3, + }, + -- ########################################## + -- ## Coven ## + -- ########################################## + [253189] = { + ["name"] = "Shivan Pact", + ["mode"] = 3, + }, + [244899] = { + ["name"] = "Fiery Strike", + ["mode"] = 1, + }, + [245627] = { + ["name"] = "Whirling Saber", + ["mode"] = 1, + }, + [245281] = { + ["name"] = "Shadow Blades", + ["mode"] = 3, + }, + [245586] = { + ["name"] = "Chilled Blood", + ["mode"] = 2, + }, + -- ########################################## + -- ## Aggramar ## + -- ########################################## + [254452] = { + ["name"] = "Ravenous Blaze", + ["mode"] = 3, + }, + [244693] = { + ["name"] = "Wake of Flame", + ["mode"] = 3, + }, + [244291] = { + ["name"] = "Foe Braker", + ["mode"] = 1, + }, + [244033] = { + ["name"] = "Flame Rend", + ["mode"] = 1, + }, + [247079] = { + ["name"] = "Empowered Flame Rend", + ["mode"] = 1, + }, + [245983] = { + ["name"] = "Flare", + ["mode"] = 3, + }, + [246037] = { + ["name"] = "Empowered Flare", + ["mode"] = 3, + }, + -- ########################################## + -- ## Argus ## + -- ########################################## + [256457] = { + ["name"] = "Cone of Death", + ["mode"] = 3, + }, + [248396] = { + ["name"] = "Soulblight", + ["mode"] = 3, + }, + [257296] = { + ["name"] = "Tortured Rage", + ["mode"] = 3, + }, + [251570] = { + ["name"] = "Soulbomb", + ["mode"] = 3, + }, + -- ###################################################################################### + -- ### DUNGEONS ### + -- ###################################################################################### + -- ########################################## + -- ## Black Rook Hold ## + -- ########################################## + [225573] = { + ["name"] = "Dark Mending", + ["mode"] = 3, + }, + [200105] = { + ["name"] = "Sacrifice Soul", + ["mode"] = 3, + }, + [225732] = { + ["name"] = "Strike Down", + ["mode"] = 3, + }, + [194996] = { + ["name"] = "Soul Echoes", + ["mode"] = 3, + }, + [195254] = { + ["name"] = "Swirling Scythe", + ["mode"] = 3, + }, + [194956] = { + ["name"] = "Reap Soul", + ["mode"] = 3, + }, + [200248] = { + ["name"] = "Arcane Blitz", + ["mode"] = 3, + }, + [200345] = { + ["name"] = "Arrow Barrage", + ["mode"] = 3, + }, + [200291] = { + ["name"] = "Knife Dance", + ["mode"] = 3, + }, + [200261] = { + ["name"] = "Bonebreaking Strike", + ["mode"] = 3, + }, + [197418] = { + ["name"] = "Vengeful Shear", + ["mode"] = 3, + }, + [201139] = { + ["name"] = "Brutal Assault", + ["mode"] = 3, + }, + [198245] = { + ["name"] = "Brutal Haymaker", + ["mode"] = 3, + }, + [198079] = { + ["name"] = "Hateful Gaze", + ["mode"] = 3, + }, + -- ########################################## + -- ## Cathedral of Eternal Night ## + -- ########################################## + [241937] = { + ["name"] = "Shadow Wall", + ["mode"] = 3, + }, + [238543] = { + ["name"] = "Demonic Mending", + ["mode"] = 3, + }, + [242792] = { + ["name"] = "Vile Roots", + ["mode"] = 3, + }, + [236627] = { + ["name"] = "Floral Fulmination", + ["mode"] = 3, + }, + [239217] = { + ["name"] = "Blinding Glare", + ["mode"] = 3, + }, + [237726] = { + ["name"] = "Scornful Gaze", + ["mode"] = 3, + }, + [190620] = { + ["name"] = "Felblaze Orb", + ["mode"] = 3, + }, + [239268] = { + ["name"] = "Venom Storm", + ["mode"] = 3, + }, + [234107] = { + ["name"] = "Chaotic Energy", + ["mode"] = 3, + }, + [236543] = { + ["name"] = "Felsoul Cleave", + ["mode"] = 3, + }, + [238315] = { + ["name"] = "Shadow Sweep", + ["mode"] = 3, + }, + [243168] = { + ["name"] = "Demonic Upheaval", + ["mode"] = 3, + }, + -- ########################################## + -- ## Court of Stars ## + -- ########################################## + [210261] = { + ["name"] = "Sound Alarm", + ["mode"] = 3, + }, + [215204] = { + ["name"] = "Hinder", + ["mode"] = 3, + }, + [209027] = { + ["name"] = "Quelling Strike", + ["mode"] = 3, + }, + [209516] = { + ["name"] = "Mana Fang", + ["mode"] = 3, + }, + [209485] = { + ["name"] = "Drain Magic", + ["mode"] = 3, + }, + [209404] = { + ["name"] = "Seal Magic", + ["mode"] = 3, + }, + [209495] = { + ["name"] = "Charged Smash", + ["mode"] = 3, + }, + [225100] = { + ["name"] = "Charging Station", + ["mode"] = 3, + }, + [219488] = { + ["name"] = "Streetsweeper", + ["mode"] = 3, + }, + [212784] = { + ["name"] = "Eye Storm", + ["mode"] = 3, + }, + [211464] = { + ["name"] = "Fel Detonation", + ["mode"] = 3, + }, + [207980] = { + ["name"] = "Disintegration Beam", + ["mode"] = 3, + }, + [207979] = { + ["name"] = "Shockwave", + ["mode"] = 3, + }, + [209628] = { + ["name"] = "Piercing Gale", + ["mode"] = 3, + }, + [209676] = { + ["name"] = "Slicing Maelstrom", + ["mode"] = 3, + }, + -- ########################################## + -- ## Darkheart Thicket ## + -- ########################################## + [200631] = { + ["name"] = "Unnerving Screech", + ["mode"] = 3, + }, + [200580] = { + ["name"] = "Maddening Roar", + ["mode"] = 3, + }, + [191326] = { + ["name"] = "Breath of Corruption", + ["mode"] = 3, + }, + [201400] = { + ["name"] = "Dread Inferno", + ["mode"] = 3, + }, + [200238] = { + ["name"] = "Feed on the Weak", + ["mode"] = 3, + }, + -- ########################################## + -- ## Eye of Azshara ## + -- ########################################## + [195172] = { + ["name"] = "Mighty Slam", + ["mode"] = 3, + }, + [195129] = { + ["name"] = "Thundering Stomp", + ["mode"] = 3, + }, + [195046] = { + ["name"] = "Rejuvenating Waters", + ["mode"] = 3, + }, + [162135] = { + ["name"] = "Bellowing Roar", + ["mode"] = 3, + }, + [197105] = { + ["name"] = "Polymorh Fish", + ["mode"] = 3, + }, + [193597] = { + ["name"] = "Static Nova", + ["mode"] = 3, + }, + [193611] = { + ["name"] = "Focused Lightning", + ["mode"] = 3, + }, + [196129] = { + ["name"] = "Spray Sand", + ["mode"] = 3, + }, + [196144] = { + ["name"] = "Sandstorm", + ["mode"] = 3, + }, + [196296] = { + ["name"] = "Roiling Storm", + ["mode"] = 3, + }, + [196290] = { + ["name"] = "Chaotic Tempest", + ["mode"] = 3, + }, + [191848] = { + ["name"] = "Rampage", + ["mode"] = 3, + }, + -- ########################################## + -- ## Halls of Valor ## + -- ########################################## + [198605] = { + ["name"] = "Thunderstrike", + ["mode"] = 3, + }, + [198888] = { + ["name"] = "Lightning Breath", + ["mode"] = 3, + }, + [191284] = { + ["name"] = "Horn of Valor", + ["mode"] = 3, + }, + [198934] = { + ["name"] = "Rune of Healing", + ["mode"] = 3, + }, + [215433] = { + ["name"] = "Holy Radiance", + ["mode"] = 3, + }, + [199210] = { + ["name"] = "Penetrating Shot", + ["mode"] = 3, + }, + [191976] = { + ["name"] = "Arcing Bolt", + ["mode"] = 3, + }, + [192305] = { + ["name"] = "Eye of the Storm", + ["mode"] = 3, + }, + [192307] = { + ["name"] = "Sanctify", + ["mode"] = 3, + }, + [192048] = { + ["name"] = "Expel Light", + ["mode"] = 3, + }, + [192018] = { + ["name"] = "Shield of Light", + ["mode"] = 3, + }, + [196512] = { + ["name"] = "Claw Frenzy", + ["mode"] = 3, + }, + [199652] = { + ["name"] = "Sever", + ["mode"] = 3, + }, + [199726] = { + ["name"] = "Unruly Yell", + ["mode"] = 3, + }, + [199674] = { + ["name"] = "Wicked Dagger", + ["mode"] = 3, + }, + [193826] = { + ["name"] = "Ragnarok", + ["mode"] = 3, + }, + [198263] = { + ["name"] = "Radiant Tempest", + ["mode"] = 3, + }, + [198072] = { + ["name"] = "Spear of Light", + ["mode"] = 3, + }, + [197961] = { + ["name"] = "Runic Band", + ["mode"] = 3, + }, + [198750] = { + ["name"] = "Surge", + ["mode"] = 3, + }, + -- ########################################## + -- ## Maw of Souls ## + -- ########################################## + [193364] = { + ["name"] = "Screams of the Dead", + ["mode"] = 3, + }, + [194442] = { + ["name"] = "Six Pound Barrel", + ["mode"] = 3, + }, + [194615] = { + ["name"] = "Sea Legs", + ["mode"] = 3, + }, + [192019] = { + ["name"] = "Lantern of Darkness", + ["mode"] = 3, + }, + [194099] = { + ["name"] = "Bile Breath", + ["mode"] = 3, + }, + [198405] = { + ["name"] = "Bone Chilling Scream", + ["mode"] = 3, + }, + [194325] = { + ["name"] = "Fragment", + ["mode"] = 3, + }, + [194216] = { + ["name"] = "Cosmic Scythe", + ["mode"] = 3, + }, + [195293] = { + ["name"] = "Debilitating Shout", + ["mode"] = 3, + }, + [185539] = { + ["name"] = "Rapid Rupture", + ["mode"] = 3, + }, + [198495] = { + ["name"] = "Torrent", + ["mode"] = 3, + }, + [202098] = { + ["name"] = "Brackwater Barrage", + ["mode"] = 3, + }, + -- ########################################## + -- ## Neltharion's Lair ## + -- ########################################## + [202181] = { + ["name"] = "Stone Gaze", + ["mode"] = 3, + }, + [226296] = { + ["name"] = "Piercing Shards", + ["mode"] = 3, + }, + [188169] = { + ["name"] = "Razor Shards", + ["mode"] = 3, + }, + [198496] = { + ["name"] = "Sunder", + ["mode"] = 3, + }, + [199176] = { + ["name"] = "Spiked Tongue", + ["mode"] = 3, + }, + [193585] = { + ["name"] = "Bound", + ["mode"] = 3, + }, + [200700] = { + ["name"] = "Landslide", + ["mode"] = 3, + }, + [200732] = { + ["name"] = "Molten Crash", + ["mode"] = 3, + }, + -- ########################################## + -- ## The Arcway ## + -- ########################################## + [211771] = { + ["name"] = "Prophecies of Doom", + ["mode"] = 3, + }, + [211037] = { + ["name"] = "Celerity Zone", + ["mode"] = 3, + }, + [195791] = { + ["name"] = "Quarantine", + ["mode"] = 3, + }, + [226285] = { + ["name"] = "Demonic Ascension", + ["mode"] = 3, + }, + [197810] = { + ["name"] = "Wicked Slam", + ["mode"] = 3, + }, + [211217] = { + ["name"] = "Arcane Slicer", + ["mode"] = 3, + }, + [211115] = { + ["name"] = "Phase Breach", + ["mode"] = 3, + }, + [196392] = { + ["name"] = "Overcharge Mana", + ["mode"] = 3, + }, + [200040] = { + ["name"] = "Nether Venom", + ["mode"] = 3, + }, + [200227] = { + ["name"] = "Tangled Web", + ["mode"] = 3, + }, + [220871] = { + ["name"] = "Unstable Mana", + ["mode"] = 3, + }, + -- ########################################## + -- ## Vault of the Wardens ## + -- ########################################## + [193069] = { + ["name"] = "Nightmares", + ["mode"] = 3, + }, + [197799] = { + ["name"] = "Unleash Fury", + ["mode"] = 3, + }, + [191735] = { + ["name"] = "Deafening Screech", + ["mode"] = 3, + }, + [190836] = { + ["name"] = "Hatred", + ["mode"] = 3, + }, + [202913] = { + ["name"] = "Fel Mortar", + ["mode"] = 3, + }, + [200898] = { + ["name"] = "Teleport", + ["mode"] = 3, + }, + [199917] = { + ["name"] = "Shadow Crash", + ["mode"] = 3, + }, + [202658] = { + ["name"] = "Drain", + ["mode"] = 3, + }, + [194945] = { + ["name"] = "Lingering Gaze", + ["mode"] = 3, + }, + [196249] = { + ["name"] = "Meteor", + ["mode"] = 3, + }, + [192631] = { + ["name"] = "Lava Wreath", + ["mode"] = 3, + }, + [197513] = { + ["name"] = "Detonating Moonglaive", + ["mode"] = 3, + }, + [189469] = { + ["name"] = "Turn Kick", + ["mode"] = 3, + }, + -- ########################################## + -- ## Seat of the Triumvirate ## + -- ########################################## + -- ########################################## + -- ## Upper Karazhan ## + -- ########################################## + [230083] = { + ["name"] = "Nullification", + ["mode"] = 3, + }, + [227267] = { + ["name"] = "Summon Volatile Energy", + ["mode"] = 3, + }, + [227254] = { + ["name"] = "Evocation", + ["mode"] = 3, + }, + [229662] = { + ["name"] = "Fel Breath", + ["mode"] = 3, + }, + [36247] = { + ["name"] = "Fel Fireball", + ["mode"] = 3, + }, + [227628] = { + ["name"] = "Piercing Missiles", + ["mode"] = 3, + }, + [227615] = { + ["name"] = "Inferno Bolt", + ["mode"] = 3, + }, + [227592] = { + ["name"] = "Frostbite", + ["mode"] = 3, + }, + [228269] = { + ["name"] = "Flame Wreath", + ["mode"] = 3, + }, + [227779] = { + ["name"] = "Ceaseless Winter", + ["mode"] = 3, + }, + [229706] = { + ["name"] = "Leech Life", + ["mode"] = 3, + }, + [229714] = { + ["name"] = "Consume Magic", + ["mode"] = 3, + }, + [229159] = { + ["name"] = "Chaotic Shadows", + ["mode"] = 3, + }, + [229083] = { + ["name"] = "Burning Blast", + ["mode"] = 3, + }, + [229151] = { + ["name"] = "Disintegrate", + ["mode"] = 3, + }, + -- ########################################## + -- ## Lower Karazhan ## + -- ########################################## + [228221] = { + ["name"] = "Severe Dusting", + ["mode"] = 3, + }, + [228225] = { + ["name"] = "Sultry Heat", + ["mode"] = 3, + }, + [232153] = { + ["name"] = "Kara Kazham", + ["mode"] = 3, + }, + [227987] = { + ["name"] = "Dinner Bell", + ["mode"] = 3, + }, + [228025] = { + ["name"] = "Heat Wave", + ["mode"] = 3, + }, + [227568] = { + ["name"] = "Burning Leg Sweep", + ["mode"] = 3, + }, + [227776] = { + ["name"] = "Magic Magnificent", + ["mode"] = 3, + }, + [227966] = { + ["name"] = "Flashlight", + ["mode"] = 3, + }, + [228279] = { + ["name"] = "Shadow Rejuvenation", + ["mode"] = 3, + }, + [228278] = { + ["name"] = "Demoralizing Shout", + ["mode"] = 3, + }, + [228277] = { + ["name"] = "Shackles of Servitude", + ["mode"] = 3, + }, + [226316] = { + ["name"] = "Shadow Bolt Volley", + ["mode"] = 3, + }, + [227508] = { + ["name"] = "Mass Repentance", + ["mode"] = 3, + }, + [227793] = { + ["name"] = "Sacred Ground", + ["mode"] = 3, + }, + [227463] = { + ["name"] = "Whirling Edge", + ["mode"] = 3, + }, + [227646] = { + ["name"] = "Iron Whirlwind", + ["mode"] = 3, + }, + [227672] = { + ["name"] = "Will Breaker", + ["mode"] = 3, + }, + [227404] = { + ["name"] = "Intangible Presence", + ["mode"] = 3, + }, + [227493] = { + ["name"] = "Mortal Strike", + ["mode"] = 3, + }, + [228852] = { + ["name"] = "Shared Suffering", + ["mode"] = 3, + }, + [228837] = { + ["name"] = "#Bellowing Roar", + ["mode"] = 3, + }, +} + +if DaveSaved.RaiderSA == nil then DaveSaved.RaiderSA = {} end +if DaveSaved.RaiderSA.Procs == nil then + DaveSaved.RaiderSA.Procs = {} + for key, value in pairs(aura_env.spells) do + DaveSaved.RaiderSA.Procs[value.name] = 0 + end +end + +function aura_env.playSound(spellName) + local soundFile = aura_env.spellToSoundfile(spellName) + local success = PlaySoundFile(soundFile, "Master") + if not success then + print("Failed playing sound file: " .. soundFile) + return + end + DaveSaved.RaiderSA.Procs[spellName] = DaveSaved.RaiderSA.Procs[spellName] + 1 +end + +function aura_env.spellToSoundfile(spellName) + -- spellName = spellName:gsub("%s", "_"); + return "Interface\\Sounds\\" .. soundPack .. "\\" .. spellName .. ".ogg" +end diff --git a/WeakAuras/Projects/RaiderSA/weakaura/trigger.lua b/WeakAuras/Projects/RaiderSA/weakaura/trigger.lua new file mode 100644 index 0000000..da0df34 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/weakaura/trigger.lua @@ -0,0 +1,18 @@ +-- If performance becomes an issue try UNIT_SPELLCAST_START/STOP/SUCCEEDED +--COMBAT_LOG_EVENT_UNFILTERED +function(...) + local se = select(3, ...); + local spellId = select(13, ...); + if (spellId ~= nil and se == "SPELL_CAST_START") then + local entry = aura_env.spells[spellId]; + if (entry ~= nil and (entry.mode == 1 or entry.mode == 3)) then + aura_env.playSound(entry.name); + end + end + if (spellId ~= nil and se == "SPELL_CAST_SUCCESS") then + local entry = aura_env.spells[spellId]; + if (entry ~= nil and (entry.mode == 2 or entry.mode == 3)) then + aura_env.playSound(entry.name); + end + end +end \ No newline at end of file diff --git a/WeakAuras/Projects/RaiderSA/words.txt b/WeakAuras/Projects/RaiderSA/words.txt new file mode 100644 index 0000000..792a248 --- /dev/null +++ b/WeakAuras/Projects/RaiderSA/words.txt @@ -0,0 +1,548 @@ +##################################################################################### +### DEBUG ### +##################################################################################### + +##774!3 +Rejuvenation +##33763!3 +Lifebloom +##5185!3 +Healing Touch + +##################################################################################### +### Antorus ### +##################################################################################### + +########################################## +## Garothi ## +########################################## + +#244410!3 +Decimation +#246220!3 +Fel Bombardment +#244969!3 +Eradication +#244106!3 +Carnage + +########################################## +## Felhounds ## +########################################## + +#244086!3 +Molten Touch +#244768!3 +Desolate Gaze +#244057!3 +Enflame Corruption +#244131!3 +Consuming Sphere +#244056!3 +Siphon Corruption + +########################################## +## High Command ## +########################################## + +#245161!3 +Entropic Mine +#245546!3 +Summon Reinforcements + +########################################## +## Portal Keeper ## +########################################## + +#244016!3 +Reality Tear +#243983!3 +Collapsing World +#244000!3 +Felstorm Barrage + +########################################## +## Imonar ## +########################################## + +#247552!3 +Sleep Canister +#247367!3 +Shock Lance +#248068!3 +Empowered Pulse Grenade +#247376!3 +Pulse Grenade +#247716!3 +Charged Blasts +#247687!3 +Sever +#248070!3 +Empowered Shrapnel Blast +#250255!3 +Empowered Shock Lance + +########################################## +## Kin'garoth ## +########################################## + +#254919!3 +Forging Strike +#254926!3 +Reverberating Strike +#246840!3 +Ruiner +#246779!3 +Diabolic Bomb +#246706!3 +Demolish +#246664!3 +Annihilation + +########################################## +## Varimathras ## +########################################## + +#243960!3 +Shadow Strike +#243961!3 +Misery +#244042!3 +Marked Prey +#244093!3 +Necrotic Embrace +#248732!3 +Echoes of Doom +#243999!3 +Dark Fissure + +########################################## +## Coven ## +########################################## + +#253189!3 +Shivan Pact +#244899!1 +Fiery Strike +#245627!1 +Whirling Saber +#245281!3 +Shadow Blades +#245586!2 +Chilled Blood + +########################################## +## Aggramar ## +########################################## + +#254452!3 +Ravenous Blaze +#244693!3 +Wake of Flame +#244291!1 +Foe Braker +#244033!1 +Flame Rend +#247079!1 +Empowered Flame Rend +#245983!3 +Flare +#246037!3 +Empowered Flare + +########################################## +## Argus ## +########################################## + +#256457!3 +Cone of Death +#248396!3 +Soulblight +#257296!3 +Tortured Rage +#251570!3 +Soulbomb + +###################################################################################### +### DUNGEONS ### +###################################################################################### + +########################################## +## Black Rook Hold ## +########################################## + +#225573!3 +Dark Mending +#200105!3 +Sacrifice Soul +#225732!3 +Strike Down +#194996!3 +Soul Echoes +#195254!3 +Swirling Scythe +#194956!3 +Reap Soul +#200248!3 +Arcane Blitz +#200345!3 +Arrow Barrage +#200291!3 +Knife Dance +#200261!3 +Bonebreaking Strike +#197418!3 +Vengeful Shear +#201139!3 +Brutal Assault +#198245!3 +Brutal Haymaker +#198079!3 +Hateful Gaze + +########################################## +## Cathedral of Eternal Night ## +########################################## + +#241937!3 +Shadow Wall +#238543!3 +Demonic Mending +#242792!3 +Vile Roots +#236627!3 +Floral Fulmination +#239217!3 +Blinding Glare +#237726!3 +Scornful Gaze +#190620!3 +Felblaze Orb +#239268!3 +Venom Storm +#234107!3 +Chaotic Energy +#236543!3 +Felsoul Cleave +#238315!3 +Shadow Sweep +#243168!3 +Demonic Upheaval + +########################################## +## Court of Stars ## +########################################## + +#210261!3 +Sound Alarm +#215204!3 +Hinder +#209027!3 +Quelling Strike +#209516!3 +Mana Fang +#209485!3 +Drain Magic +#209404!3 +Seal Magic +#209495!3 +Charged Smash +#225100!3 +Charging Station +#219488!3 +Streetsweeper +#212784!3 +Eye Storm +#211464!3 +Fel Detonation +#207980!3 +Disintegration Beam +#207979!3 +Shockwave +#209628!3 +Piercing Gale +#209676!3 +Slicing Maelstrom + +########################################## +## Darkheart Thicket ## +########################################## + +#200631!3 +Unnerving Screech +#200580!3 +Maddening Roar +#191326!3 +Breath of Corruption +#201400!3 +Dread Inferno +#200238!3 +Feed on the Weak + +########################################## +## Eye of Azshara ## +########################################## + +#195172!3 +Mighty Slam +#195129!3 +Thundering Stomp +#195046!3 +Rejuvenating Waters +#162135!3 +Bellowing Roar +#197105!3 +Polymorh Fish +#193597!3 +Static Nova +#193611!3 +Focused Lightning +#196129!3 +Spray Sand +#196144!3 +Sandstorm +#196296!3 +Roiling Storm +#196290!3 +Chaotic Tempest +#191848!3 +Rampage + +########################################## +## Halls of Valor ## +########################################## + +#198605!3 +Thunderstrike +#198888!3 +Lightning Breath +#191284!3 +Horn of Valor +#198934!3 +Rune of Healing +#215433!3 +Holy Radiance +#199210!3 +Penetrating Shot +#191976!3 +Arcing Bolt +#192305!3 +Eye of the Storm +#192307!3 +Sanctify +#192048!3 +Expel Light +#192018!3 +Shield of Light +#196512!3 +Claw Frenzy +#199652!3 +Sever +#199726!3 +Unruly Yell +#199674!3 +Wicked Dagger +#193826!3 +Ragnarok +#198263!3 +Radiant Tempest +#198072!3 +Spear of Light +#197961!3 +Runic Band +#198750!3 +Surge + +########################################## +## Maw of Souls ## +########################################## + +#193364!3 +Screams of the Dead +#194442!3 +Six Pound Barrel +#194615!3 +Sea Legs +#192019!3 +Lantern of Darkness +#194099!3 +Bile Breath +#198405!3 +Bone Chilling Scream +#194325!3 +Fragment +#194216!3 +Cosmic Scythe +#195293!3 +Debilitating Shout +#185539!3 +Rapid Rupture +#198495!3 +Torrent +#202098!3 +Brackwater Barrage + +########################################## +## Neltharion's Lair ## +########################################## + +#202181!3 +Stone Gaze +#226296!3 +Piercing Shards +#188169!3 +Razor Shards +#198496!3 +Sunder +#199176!3 +Spiked Tongue +#193585!3 +Bound +#200700!3 +Landslide +#200732!3 +Molten Crash + +########################################## +## The Arcway ## +########################################## + +#211771!3 +Prophecies of Doom +#211037!3 +Celerity Zone +#195791!3 +Quarantine +#226285!3 +Demonic Ascension +#197810!3 +Wicked Slam +#211217!3 +Arcane Slicer +#211115!3 +Phase Breach +#196392!3 +Overcharge Mana +#200040!3 +Nether Venom +#200227!3 +Tangled Web +#220871!3 +Unstable Mana + +########################################## +## Vault of the Wardens ## +########################################## + +#193069!3 +Nightmares +#197799!3 +Unleash Fury +#191735!3 +Deafening Screech +#190836!3 +Hatred +#202913!3 +Fel Mortar +#200898!3 +Teleport +#199917!3 +Shadow Crash +#202658!3 +Drain +#194945!3 +Lingering Gaze +#196249!3 +Meteor +#192631!3 +Lava Wreath +#197513!3 +Detonating Moonglaive +#189469!3 +Turn Kick + +########################################## +## Seat of the Triumvirate ## +########################################## + +########################################## +## Upper Karazhan ## +########################################## + +#230083!3 +Nullification +#227267!3 +Summon Volatile Energy +#227254!3 +Evocation +#229662!3 +Fel Breath +#36247!3 +Fel Fireball +#227628!3 +Piercing Missiles +#227615!3 +Inferno Bolt +#227592!3 +Frostbite +#228269!3 +Flame Wreath +#227779!3 +Ceaseless Winter +#229706!3 +Leech Life +#229714!3 +Consume Magic +#229159!3 +Chaotic Shadows +#229083!3 +Burning Blast +#229151!3 +Disintegrate + +########################################## +## Lower Karazhan ## +########################################## + +#228221!3 +Severe Dusting +#228225!3 +Sultry Heat +#232153!3 +Kara Kazham +#227987!3 +Dinner Bell +#228025!3 +Heat Wave +#227568!3 +Burning Leg Sweep +#227776!3 +Magic Magnificent +#227966!3 +Flashlight +#228279!3 +Shadow Rejuvenation +#228278!3 +Demoralizing Shout +#228277!3 +Shackles of Servitude +#226316!3 +Shadow Bolt Volley +#227508!3 +Mass Repentance +#227793!3 +Sacred Ground +#227463!3 +Whirling Edge +#227646!3 +Iron Whirlwind +#227672!3 +Will Breaker +#227404!3 +Intangible Presence +#227493!3 +Mortal Strike +#228852!3 +Shared Suffering +#228837!3 +#Bellowing Roar \ No newline at end of file diff --git a/WeakAuras/Projects/RaiderSA/working_out.tar b/WeakAuras/Projects/RaiderSA/working_out.tar new file mode 100644 index 0000000000000000000000000000000000000000..bff7e4b0fc09306c949d6d3a5da7cf28583e6594 GIT binary patch literal 3133440 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

Tj?8bYS`cgBX=zivFotv|rfi{n&V3k1D*Q4r|( zJjvEaVLZYK+ps>ins|R9KsiS_nv;c=mo}z=R55PW!`;CM?M;ueLGLz*(K~;>T*M)x z`|7mUI>utOySu55P6uBVnqA^;Hu6S@*$fd4-u!(S{f?h9cuKt<{0tg?a z8O0QrJFd$34-LTQ4C<`l)s^U=@dHw)qX*~@n* z)?DozbB$B0^TFbO>3CUyZJcws^Cgp`du5*;Oz0_YU?OwG!-NFv0=y&AO!RbFpv$p~ zGCis(;KYu6{*%`C7V?_1*cj58aRv!4|K}b`KI3^hHWxasu!vWl5b8P)0r>TS02HGBh5JN2{P6 z=Nu>RgtXNXXi;1{2=LB$vK?WUJ0fgyliWk~3-&ld&GpejDuKH?ABA=Az-~Y4=xtT3 z`wp^uznXPA)~QHU9UAQTp6;eW+|%un&nK-H3i}KcDR+RBOVek>WX36)(vOs+t0VrL z?<}zHa0;Fg-hKg~)an-B62lX-(t+1oJ8#T5)5)7#yw=^X^Fd47&#l@qyz|AF$Vh*z;-z+ zL8GH}br9W!hT;GrPaGM{Zw~*q+MI6VIRn(s*Gis9hSOr3va-(AoMGMYI$*O-p4}~S zGH~JH(lEV93ppZS4d0yRQWKnt$nRA|ZJvHC+w$H_%$62gEF?flAYEHSGXdfCIt%=z zbk}?@O^2aS!gnDYNIlqLfloeQ+ivWbg=zGl#lcsVtcJ)i>8$a(>8@!^Pt%^M5h9h5B7x zfCSV?57ce%S=;M2=qKaZG`TC?w(ycdw3UeE7gK!Cq>nL#ZnAKNMR`Q%mI#~EQT4}!V+PEYm;?lErxBQ#J9#md z004@)>lE2t*WD^TkY3|kq?p>%`3XL*^QD%siB7bJM@D*N5pX?S5u-!UUSfJva%BHp zsmDbqm%4d8Zs5_#9Z2QIkHaO%h-Cs%&dR38tp|z?yr-K%*tD}{KRT*!;7aq{$#V+7 z+{)%1rvG4gLft=xDS=QSs?_o1W6v05`lu|Qp}irAFy3Dq>14nA1%^d~KBBSx*X+8T(y6qTfRlgu(ZpdSQwUXh7Z>t#=4B)&_uF%OTs&4HFI(& zR|3v?1erW*uU-O^z^so8P|IY3Fm*@Pw{@>){!2V~6E_e0le@*}YGxLxB zpJ7fp_NxEC>i@6$|EvE0s{g<0|F8Q0tN#D0|G(=0uloP1{{L^O|4aT=lKrWV{^e6i+foU*jc&e5bjWV`35HE z9dXGLBWTPnoZT&A!cAgX~%xx@%g!V+_cdjZ=T@|;3bqU`VzK2*oC!Tv# zjPrCbHj)nk?D@7mcwHrbBC$rbDRZmZ^m@l+V3?q+wI5@wa?U3TWw<59n$I<_`s_Y= z%3fg(R?>Y-KG|{wGM@Hvywls9Qo-e$A)4q?kEm8Z<>iI|1`eXMBZr|^`OLG8Rnx;% zM|bKkBJoIXKbW@&Y#lZ@8B6&3+FW8tcDxVEUend%M@>U1nTV%8gsdR8qkj5S7+NK>gWFLvOPI^z|u|Bax$(8P<)SyD=m z@||rhXjDzC>70G9qt}RQIPJ#fM@cV%%ttnXpHZD7y*>T)2%$MKkra(hfT5o4CXj45b%Ee2lCF>4U0GNVXyhB`kHU>=n41;!QXu~2tPxpkzu#GbD z?Ew$2a7#Ui zRzw?1-(TA8z4d7of%1LKheoTLb$jB>QtbD8oA7=5a^UtMvhIrS#FJjrVR_HIgDZx` zCF+<(^2}KjJzDUV)7a+oQ@MIL=)D<0Es1H_qrept2_*>*sEjPT6XzcX#%fp+;rx7? zl@3A90hS%co4&V9biH-)NtIP~JcPdgT?#&l{*kyP@u>G3YRRH!P*+r}5@IRHw;aVM#-eGY&QU=L)$ zQ>W0h>ZGQamM5J;&X7DIG~~!c4}E+uimdgCI&Qnu3FKV5T~Jtq|GvI+XcbdJUaA`* z?@qOmT5R>VRT1278mWqXC=iQ4PJPB@``%@_nxX({e45 zjB~CG6t%g{g#5-*T6Pc)kMVS2!_r z`@^?sFjnj8XivAafZsCz=296X%P+EYwDPI)6vsdb7;Q35o7NWmh0)63Pk#1{f>Tiw zmRSN~TfQWLSrsh)RGbGys}|y&tRoS-#^KN|k}NUF+*9elmK=Y0ba#4FW54leQdta# z0kp3C>I{Zml4+N{`*9}{ML(UGA!2>ZFU1;?oL4g}x}XHRby}*R?UU^Sk8S%Xtz%y? zRi}$epaZ^QT@xFpdNXcqYhy3Nzm3TErN6y@v>-$6a-_EUOY|2P9ToWXuj78e%HXut zTfZck6-Yban==-F^DlJU4E95W$gKJ(Ixpi>^t#wU{Sqb-&z*=s(>j1v57~t{*c^?b zcTf69vIZZVY9n~?9qCU)^bc;&tIo8vB~NS}&U-D39|$Tii!Yv2qwsuI0i2sJSUS2O zoUgDrUnvDvNGB;0by6w>P{ycWDD;|(K6omsEfgN6heb@ib*r?r?w_di6u4n)0v|n+ zIHvNS48w|zqj~~=YJ!9dn8TOnwsl;n1D4vx zS`{l1G7Sc|zIBF2hil;wZAcYD==9%NZJ@)JaxMl%Vk&{^t~@7)d>HGqOg<4U?k|J^R!7YnvDUbHmmlXTOUukS$V zLP5BL8TFc>(;A5yUS4kUoQAysds8 zj(#(NDH516K06ccsl24IU@lX|CTE@N(YWk$nyp7ecxwd@9OCvxj6Tc26+xxeKHOSc z03NBr2)UM4e%|=iDEMX(p@STbo5qr7Msc{(AKp-n2F5#tkHyhI;~!C~)Y-dkcg7{; zA4qz|UTQgXe6Sw->b=Ma2?df{Kno0uf3%~#scqu%eb&NEtHL6WNuD^&|B~{<*NR(t zr39Hz1@I}^25TUp)>~nbsqV=CKw-rpG0Ka%MLj~;*RwmUi3Pt`++^_X>LbY_5qF(?D!aPHL~hKq2YK<6Q&d^7S@%ABbraKD`>o{M}@AF9zu0OQaVJe|}_ zkQswjM`W6xg(X>{)q3gJ$I}92r$w8ubLr#u?TJyB21Y9yp_ZBbLE*7e<|P?aJ0(?c z7LI(~1-1z_fR3%J;WRGlWo6s#PPPhHlML(42h*M`L6ayylI&&g<{n?-zEe3iRhx^)VB$EoCrXu>#!GThjg_yu#`r=d+YwCVT z3QERyfUfozM(#=WY3ankeIFu_>7Gd8x*Js71eP97TK&xrs$n7&1a#n33*$Jgl+V&N zI?#5HYZ>4InKQ7&j=fcGdrVxYK<6~acVPu`zg#03JMR5i`qcg=W zjkGZVQ=z?@X9#Maf8)(r`|ST6BHTA#|4&CYxO>x22*H-PPq z3u4K9ImT5-6cNc~8Nc)IyNhJ++l|T&Z~~>9rqo%;q3cI$N|h-P;X+CpJ^(#P(2TFg zv`g9-vt^yqnj;bZHH$O@{Xp?uM+5gV~mf8=sSWAh1uut_KjJ`k!wQqI}to&N**}#wbiutu@uU(1m zPcYNLAt(=l2aOyFwZgc-+Nf-82gY~p{JvT^3oW!iah*92d(he&`G{O=a1_X=b^;{) zo9RCsj zb2N7NpW6EGKhFM7_#YE98`FQ`f2<5lY_IvBe{$>oM?U_0{zo9%ANyz7`k0%ee~thB znfZtR{dOCD-T!a&mH)l+zgPbE%Ku*Z-z)!n<$tgI@0I_(^1oO9_wUI6TzUQ~)Be;) zfA}A~o@+h1j=GdafRsYCg1U}*fr5^|ykeBEm$iZb{NHdt5Qv*W4`p(h78&@N3^CSp zTqCPS$emne#-ceTpK>+sP&!J7D4NTGhs%JAiy!_#haZFEnC>2q_N_k;HFHKiq~H8G zB&8Xn>5Y|BJVR)BWO#Uv&hD?0V)h5uS@RrFZsRG~D*DS8s@-9|Z57^ON9?yxH6sR3 zQk8_>-wu;uB{6*YbZ;yp&yk))8uCcwqHe22?KApx07<&YY&5=BG*hCy-4Vyd{2=qa z7iBHI zb$^nWP>cf7D+F^Ql08yNm;>v;1Qa5c>`{6a^>waC9`@<$$km8>V2SA)wa>z}6Aq<6 z$jnSrA))J!73RnLFKIB=38K{)XgshR#Lwq@1GR(m?Z;wT(kp%6+sfE)`bBE~ zU6D0-V9aHFwS767>_CR>DG6?W0EHPW99HgSuS;doNht_HeVA%DWXl!bSGg$ExU@ z_$BgXokq5)F1RWU3n1lcs50&M5zR#lv%l-={81X)9E160 zqVFRK()wJOuF8pC)mv5V-HO{Z)gz{zBX?yvCvbGw2Mrky47A6LaJ0QAB!)dGvqylD z#u{d=qoZzRm`Gg7=UdMw(Rxq78ziR4(w)EhNVIS6=$wN#@_vOu905)c`$U$Bx9qm9-8Qa}PEsxDWn&x~^@V5z>`@nF=4`B}VMhPE)7RCFI=h`u-0K5k# zar|_|ar$oBScH?X08)<@Qe>GoCw<8REB%l<HT0k;^3CyZ;m66e{6%FD8fr4l%hql0Z@^)H z41h{@qlNwt_U;7=GN4EYUX~p10ObBUA6Y^>RsKv*Z%#V^(tuYiO-dcmK*;NtPm@DXUMxAcA>pe!@1OGw4oH6nOEEp>91h%?sw`S#D8K7h zKHKc}V<7cZMckP5+o* z`SZn46RPkiJlpLJF)W3nW`G=D&BpLy>^Edj!=9#-Jb zoTr)-&8^^9M)vF`?H|&_AZ!mJ>efmq^|hr#o7os1xHOtWW)6r|g9epC$#d3a%Jr9v z#Y2(BJmuIu|7-6d=Gt<*wxkiMU$JYCE{q!E;w56%4IjEHbruxSM&8{a@V&zvZWjeK zQ+Yig^nqJsK+E9yJhlbO^KL-vxqSTv5&*y}{Qw2YO`?}Kkm4VX)*pSg?gkode!?07 z58K&@OL?X2*ocqVeTGZ=Z5=Ho3V-Ud@&HthEibLR=|TcqX)+(Bq8f5ksClLxzPKJa zls}EPykA<`!rL3`4)W~kqUo2Lz-W2L>2s>}RZ{xsJ0@hF`ZaMf)6!>trlDXNXO;H* zk1e*WS(PIybPi1#M3W@c1O1lc>xCc5{4^vO4f*bF_1#Az^(O$1z8GY|rv?|)L9$A-8bRBr8OLC;L*LV%i^Or<2dXFXWcR<>e4u&|Ly@30hoQe{ zB{yg*h&_8ef&6j{^X(P{Xr4k84oqvhP!-n{U}>{U$M?@&B5L+>=FTRffAC;%@9Fgq z+g7aNMgzp+M1@fh@-2slf^L!CtBuPEaC9d@b$6sb6E3a25jUm)z8Il&JPj3cH4c?E zDK1_?P~(o0Q9ct_T0LJ`%l+2O>5N19K_ca)wac#C`5}rh&ehf9J!=$)o`)%!$&X*i zvNN^oSVuOgtm&Hoqg~#M&$cucij6G7#hK}z zmXA`nnekPPN2?yW5n4oE6!#nThgve96z`Fq$FM?a=UQ;wZ%Jl59KV1E!pD> zl$os~J+$vU_R!Is&aqf|7Z1^lw^hS;NRP@^Alt}EZN|d`-ulK26lt|=TtQ~l$=Nl1 z!dA=QShVFn8YIxDfKd=2{}{DqGgN)lwC+;N%UQr!c)ZUkY4#Pev9@){tYn}j=e_uq zsXJNwrtGa{-{6tK-dcka`ks=c{WiXEbLCPJ6u4l2Kn4a1MS-4pF)8G;jl<{e9_5A) z0H9foTWG5o1q-Yaoh-_ZboIbk)YD?7rcA|QEqfNgOg)(m{LV^&6cXN4-{ITmJpuRz4 zW8Z}&&;di7AfD_UFZ!0!D{O-tkdIibey_Ji$6fnGf*48nyS3p%&CzstPf`@(MFCDP zP3ht^WzCT5!XA@`<-Ok7Ej|puwp1W@bE2O7jhBr+yi~V$OTKr)KC<1}MjxuT#>ek0 zGoK%8WganGZQ2lc7A6Q}PuJtV<2v*v&k>J`TX!S5#_u@eP_4qig3`S%pW_~|+OMYE zFkHp!_#)~(&x=~Lo48PIJ11?Czq%mv0|$5dXZ%d&j$`(QJ&3kxAK`iC4h#pN$5FMB z2jByhXQG}gCz`zP^u~QY4oXrA#u?+$Cc+rQUw|A0#WKdC4Ccl^i7+}^;FRKQlp&iFs40PH{T9~Nc?_W#X)*cn+~ z>%abW;_zR*{kQ%T??lP{_keul+dcoB|NI^K*MD|r^J!n}zh3?4)qh_7=hc5+{pZzx zUj66Qe_s9P)qh_7=f9)>fF=KR0{3@*^e^kb1)jqlavg1-!qW|ka@BaaV9t(APX<-vS@K`-z^4=Xd_ZcLpL6Y-Jb7;FuMpz{S_dt&Dbwxw$Bp z4Ey=4j;Pb>RC_o$@pGSrqQ`R92HxFnU8h-U_aC(&;j8+IJl1YJ0UUnh^yj3Vwz5D;VjgI}oQwqz!S(+A7VPXgO#$5m_45djja;1?KnC7O~H2u0$1@v@5K9hNc8IyiY_owJ(q!=DuMpd|YkVix`^9ZG_;21Q?K`y^jVu$&?D_Y1kb%rP%mlxj(CFZFJQY(Xnq%5)<-oJPyqvUvmehMe$Ac}Q0mFzH~jPDGqP?){w z5`-)F`*~YmbckF&GxCgySB&`NNDp&fSUM+^G4PUl_opzB0|nipT~3(LS(PnY%YE(u z5MRPW=lHM+3bFO9%GwS)Y!S`n7#ACGKOJ&3Zwdd??t{dSg6hp*7M8(2%>IJ_pvDT7-; zWiPz>2|{`v=`V8g?M>?M{>@K1xf669ZKU1CKe`m_6|LKEqF4P({W{~eSwRe2`Z3%H zPIISkO&memf9?Zs1^qJa<8*K0|HS}*vWyxslCLpeh36c|4~wlK5wIFC0Yf;0 zw>rxrVMhaJs&D(w&381m<2Y0rhaq5LN5)A!8A*pS<#Mw%+ zUyRi`Xd6yH3B`n`Rq(i5)}MWSzW0#EsUB4mRg%#W^Xb9BzQQaxJVPT+wlPO@<9mmf zQ+SnmJ!TLmTxznZC*7vr*+tB=*+?4};?9e20)@iFnVil49;oFW6^anluqtlO9wH-m zDqNz&`TaBhsXvEvN%)DI+kbH=dcIP6!$xV#oPFp=io^@WU2O8tz$;9JC>{V}VcI8) zZ^@1{BFlVgueD4X_&!q{kqt%OyF0h^vD%VdmA99Q!h6SkcZYafk~F(PlDX?+w*=$) znC_fAEyY956N|V!JQ%w0+p2wISR`14;d86}m#Iu7I-&)Crj0=xu1~eQHb&n+@FT>w z8#FtpeaI$Y@{HQon@dCSNM~s9N3+V>da4XUaj3-C*v z(nEJKW#)Esmg}7~!?;WHImr-q@CiO#Oj?V*+UiN=gT4#1AKzh^wxb| zQjSL40}Ss^CZeOIPfAvnq9iQEJN(}7Lb!4lK>*~X4xbpffa*AN^rwoxv6Jb-KGnnp z1+MbOR6{($n+Sv_HgKQbly5oFNPXRYoOpSw*M}*;vXZAN31IMhQ?}(($jJOO=0DfeMacSNJ#D@;Y|W> zIy$o&B2bwjT`A1D212IB0OPoGVx~_)UN1zU02tOAb^wH1TGe+9d7s^T-wG3lL-PJ- zO>S=0p|u?>H)s$ni?7i=%XZ&qK%d-g7rjqKaweLMP2<7Y1VE%E1xqA`oc|zB*k1h& zTyoz4@^)8zW-#AJJV%?~-~zwM&VQll=3g(5qPH<+3N2~C zf^8`LhP`0xi_8+Y(L1d6W-}Jt>V&A;o#T2%VWnptns_^yP{hB9CfU0IE1y;7+&$KL zj~aRU?Pb>144w4tm<=1w;B>3e^rgzPe>r?WoW1ZQP&%buvNB^qZ0#7J)QK-C3n8hD zC6JRUWX`x2G*!~EU+8ciD&6qZ4_xhqPa;33Dtb*K=++JZRc>ZjfVusX665DAoleJu zko1-%sl)FJIC_FWc(J_+>u=KVpOx?cabJ-lZ6$neDP-%<;W=5%dtwrTOgpvp$#RYBK9kx;ryVOfN1tNm3t7-bm07t3v=h@bXxkFDjUZ`yKP+9 zLFgtW+~)Av{I|JLK?RWJn!P)Y0Dz;11D{Kn*W+c+ zPCQKB#5|JS!D`YZ({}Co$eUu36^|u;^ip1k+=G#ry`$Q-vj`Rqcq2uO-0-m#g1Vsx zHD+}&r*A?!#jl-)cip1`&Z8wYbhj|;SNwEz-C;Gfb#ftDkgie>r6A2_xotypGixRf zyk3MYOilDV1?G9}peiu$O%5iXyL=Fnz5sB^uNm0kKt1ZMx<6-#YxVH>Vh~@P>7TLR zkZ}{M+h=~ed%J5qnf^h8N2^U#C6*z&jhsN=m4eQkru(|2l)(2LE3L=X5_$(+EEXw3 z)wZ^FPwE{9>A+=rLLE)1)D{Cos}&ym9u>#C0!}BKXO&Ma1ma0qji~}sAbystN*f{A zRs;1ExIYU({^|2ncLNRnnEs)?`aO{5IK=2815s4!-DnJ>^~*}^qs2Ov?6*YcLWF31>f9$MG|A+svGrrb;{nID&|6;(u^}jiPviiR}si8F` z{OA1d@5sOYC*Zyh_v(MI{`cyCum1Pyf3N=c>VL2P_v(MI{`cyCum1Pn+5i5|kN*0f zPhj>bgOa?0q2do0H$g=O8JR#;0eS7f1OriJ4K-y26YVb=8hC%`kLDlvPoDK{s8=^{ z>kJ^Bvb_BCwO!YNhW(?8XT=#N1vRQ5A0Dke<73RV0=wsWIQ|ACQJ_H2Da*L|selVZ z-?=e^VnM+$s=KVO7+I3!is4e3hGxFk*?_(PZ7UXaT_v z_fGr^dd0=6J^(xihS?=6QSb&A1@7oVjPJ7LUD7Z=Ox6?K2ZGGLjTMLcxmoRzj~%A3 zS^5@s9*F&^{!#$5msr36f3oR>6}oJDc%~U&YNoEz09qf)+#q2-l;s?`?NZoaeD44# zF%(N(71Shd0TUZ1?TSlzgRlOypL{md2QAwOVR@}9KcyrNbx$)uayB8oq2)ws<=w`i zP3!L@#1sm#%5voRS^cn_(0kH)rbUJFyBB{kQf`y`0!dGOMYa0fmTF#u-=;?b(eCID zYmpT{Kz&fSH$pf>1R6Eh`;-G?>WbEjLX3BvH?*?P~B7Z9m-pamjs zoc!5Yqlok2MtHaT2^zNd3+!Yg1a%utaPxWNN!M<93Ac^Be?cr5F92dJ^Tk-EgpHrf zhn=UyXKIL^N4WEMvP^80^j`Z-l!vlt zqu3bUl+0Q#0wO+E+%ueh4!S_z;RsB1&QfSA`%ik}RQQuHrvP<3TbYFMbOS28 zuuS5t+8q#SR6cJlP&x7oxy1|?45JU?{;*dgCFPGbuiQvZ=76t>8LQOFF6<~S_bI%=N4VLc)E)L(mdcWK6lcFeAW}@ zTM5q#x+!U|<3Onu0c!0MZ;kI87tx9#H6#=9Ehj zq3{h9U<~H^s6sW1O8u!aLM*ir9E&7EE}PUvL#p~YNiy=(g%bb<4_Z9yi6s1wi?N5_ zNW;*l9hykN+OO7}z}(xXBoVFQ{ho5dY&Sq_ZX69U3XKmB6=Z;Hol5zAm8CRs0SP~i zLRo?anzx zo>K4@1M;g)e#^iZRFUvGOGTQq<# z+>(@1?wJ;$vr0sf7g!F|^}+6!W$_IhnrBv4p(DV2gAM`~2=B6h->F8edOB_>oVcXq zuBx;}+enSx^yJ`HkFc*N3H^rDKe1L4o4RaK5aF9|oDbT_6)bVK|usKR5m2 z*?Ti+nHYRo_{9G0ZFW~cH2I>XfiGx&?ur;-kv^(|EqFqPeWM9OKmYTg=%C1XJhy5( zNs~7t_IXkF7-hKRWhPsc+u$kS{?;fn3omPkU*nEc@sfplrNvLa`&w>4DP#GCh`PTH zG!q=s9QlB`oOS=Mbk+9i{GRzByNhx^c8Ko&>#y4{EDbh%d%Evv51YXlVJC`Qcg(|W zio@s7%l(J208nbSU7-fdf=+GO5{E!?Td96yxd!Tp;S_r z1BL>GHw)85FQ@N0EfarPQ8J_`wv>57umOo*ymf!MdE3R?t%h^x{o<7z{If;jgqG$P}r@MLg!$-G} z0nbTQ2&+yS#z(dr5ZWM4y+Ov$Rmj+qbw4#kjRlO{)@C6g=#m?p%jggN}#LXnUW!6mmX2ukp{LbvnUqG56 zSzKt9v7uPGZaokMnBR{Cy^V-EB}r98;l?L^9%D&^pgplKGeN6S4uv40kC=zNxf zO{>Ww2yDdoEuOVbtkNl+uxo%f_#+`;o|f=ycMSh&N@=D8 z#4MZMTS4c?+mqJ8PbB6G%LK(Z$QAn@*W@)WBWgpAjf42U^_218_t9aosr1D7c-1Z5 z%1XrCBoqCkdIdj+FuSR^MYgzRLEx0i91D6;vqbW~wrmxI$q(Eb1k3j)K?_zb9$M71 zbIcgr>O_elB`|R$-I*88<`*4P{3H;&v$;GIp6NgBq?n&nOB4%!4Szl`=l7$ik&b`6 z`}q8vt;5@7RoC(o3JJ(7aBP0|$)_#SInP~6nkP49h)Wvi(U$cWKC;;FPerOPey*G^ z4a)i)h{m~KBSS^2)jr^2d&yJ?lFpYDnyJZThLc}khZ0fmhLUkm`-tRpN`~Z(xU8)M# zFTktqxF*KuR$}m^C13NbLc`?|40WKMgjRjEh;F*QDVJsHQHq@7BmT(BVjt=UgFW|^ zoh9lHjDo|Th*m+7eL!3E!<@Yiwd62!ILTRd!gGg5Jb71v=7ZvsVx(D)sle@=SIG_f zc6TCngaqBOh8aNEL!jVchwk{nD1waEEs5aDCL6Yu6gm`U2b2r}yqTLI)g9*}Z~fHq zn0h5DygcOJV<;uLgFrINH)1!hfjVH$yjn_*(0XS8oq626>qh%Vxy5?X_aMzl*?b!s`@({5@MaX4cJFi<0Cw>09(a;E%n&`v3q5 z`^_I+BWrnNnpv`9?z>YfrxZ*z_l1S^oHfz&?YAC@6|eyPXo%c^Q|`CH9Ij#4#;R^n z6KDgGtiOnFFI(i_+Ms0{OJJEjRZt*!Jhq+%F|{^BUFPltD3M2jAfy+2S`J0({!AU5 z6T^{7fxj*CYU?T}{s3u$NT~$^AQHoNR?*8olqT^gXgY?}{Fcwe-2{{Gm+E|{-hWJ_ z|DONZ+UuB;%GukRm>K-16afB5^?&RPtpB_JF|)9}`rn^({$Kw0Z~YHK2HpJcA+Jfy zS^hcy`#bWl|B(>z>A(8ltN*?F->d(<`roVnz53s)|GoO(tN*?F->d)qxAZ@ef1Sep zoge-6zru({5?UoiMOj%bUvIF#kEg7>g1McBoQ$Stoc5okAcbVbL7;!^|3=HK70|#b z{cSBhw1{i59KX_Mx_3qA%*ORcMjTCZ=zZ!5Q|24ryuiJd(QaH}oj{qf{w^ns8dg^IaUFxXf-;x*={Mw9nrqsNvpoUIT@nPJEtDOTkJp2j)(l!QE!((kPfE3iJ3fX{jCEqqh1%AwwSt{rPr- zKg9~`4J#5!`rt#E7dC9#M9Pk}n`8?&B(1OziL;1TrJOY#<4fQK1?miN74p<{&X{>a zk>_po9oYp=+H*Di9Q8o&7K7>1k1T{1>?x~*?cwNQY)SNUYc@%kox>wOU#sL*4cgUN zdQhx#O~8Yp_1B1fO4&IG{d7pNvHYo$4<}&;I}qv?L>}W?@k2K6k{FR$o0C$D#;~%4 zk{|8Ew4vklZ<57XTUvPct%MD`MT-^TqMi{Z(Yh-$XXL&vMx=IwTram~J+Bu66n1P6vW=}3#$@RoY&V4=aG2`wW)K>>77k*^Myzd<~$$L z3akcyuU_4HLX1v_YX^!!ELLcR`AFO`+$QWwV{56Buta-P82^Afb&)o}nT?tdKfCbS z$mb<9isSC9p>(S}(K5IDfpXeA)zE26hHNtCRN^!(8d}J;EPZ~i^AMb&HfrF(+n96B zx?C4krn7MI0kWn6EB_h}-+BP>B%Ewr*N#u)iLe^HK|B1)4kB-=4?(~;a}%?WYK|fLo5wm>1y*~LLCV;$ z{aSf^D1=~q?y%R4D)|f;Of+9~_?c@ZPw;O3EG!a2OjZL2g^^#wg?~zc$TO)D6hI4| zOMdL<<-IZraU`ThFBf(Jb*d1|bb?|LL7&pYaf~4s_xj3* zI2@|X*){q$7Ah(LV&kENvy#YE4n;a~I#sAp{I?15S3xpMdtr3%j;*%R;i~+MyeDh3 zT!|d(7GhJll+N6Ja=!Bb%Wj7s`Ax*$-KpAitQgGa0=p;(AEv)2U}-zA7RwKRW6fu7 zkoP4G-ZezW|Fw~28U@b2!-3!N9`JtM(D^qa#|sSL>0bE` zFfPqvKZL)cc{f3xo4+zCGCIYUKgn_FJV+H81#e7S@V zmvSH8|9Rt0=sgE;Td+{jHa)1)AD^x3vF(1WTh~lwXbY}}X(53{lac}oN2q&Lgdq-0 zG>td%H!>W@s!K(0xd^^~aZA*MI6pnl z*-O0|Pxmqv_lj)FZV8?1W;t+ncjpc2yHM3Y^qe?tc_Aq^k1BLWu+*S(U9$V4!G@az zw3zR>z}=Zb;7jFl75gkBrGCRV5jFmBCO|10%JY-qYl`^fhi|pb-M4U?wm&J4wYrW3 zzp>FI)bzcnkUTUfv*k$bM7s&DcibHA+CjP|f!*2;O!Eg^>$Vq=0PsM&bXixSq}-e& z{@FCCV>8MOimF!F<`}M(>IIUxuV#{ zfBLWl$r@{_ncTtJ{8}@m`9H0Xn#kB8su^h`=bD{p~db zI9h5S2L{#_P0QuYZo4!@2Z9uR(5W#1uX0@}2O*`r)MoR`i%w_Ds5jy^s)VXWn^K9cj67S&o5cl9c~mA^yOnAxU_7)DY36j8zN|eVQN(Jn@kYuQbVJJ ztre{XpmS}i$(8Eo_P}?(b?AX4HHq+TO9z?E_#wu4?;e~eVo1ivM9dhM93^XW&OTSZ zWos#Bai%JJaEL?6Iv|SmCE=7l3;%w-(M_!V%`yl-n@j;!61YdKLZA+Xpk#lP%uY3j zn8jOQ(PLitv^Jz9k!0V0neCVsZRm_N^XMv5a6gnedwaWFYMe7tZ$D>05w42D#4w7D zR;#TTvcj;SC~KgO$E-(*VWm>B!2aw$27t8uK8xF0&*f7SMwY6(-k%NDl_$eB`Rm#_{nacWnwEin*`r)&!(Ri+11fdCr zU2$!v`}4G$1eHb%_2gaN#hn=ZDQc}pI}5g8Ff`>m7*Yg|AfMZNcQ?^2df@g?BTP>x zB@ThMa9I$l6Eb5uO%=-*&~r~i|6|Xd`hr8DDq`{u*&_vwQqw-5jYZd?dAif649yw( zKtKj~hIAoNt0HSZz)#|&eTbC`x3Pv%6-pdo?@Dpo_fVUJ?oOB~LoKX|ZFQvcSa*-qm3U_xfO8VR+Rlg!4Ir^r(myMQ01_X5 z`?4mZ9#kiaSrOTV>?r?o6pRe2bXC#?PSB52sT`EiTk}{;&iaImsPf0Nod_l!ySYAb zID`e5S42P`ve1TYL$>l?W!k;qpDYNSNVm^(BE=_2hSe^MBq_mcR8RxJZMQPJXG02G zfH@zq6{X~Wcdb!%eX7NT-LTJgD`PFBu1I)7<=rC20VB@La&L6M6##NZ5>ebFCx&zG za}u*?<@K2Sydy~g2wn?7rKX(9u_gwqA;;}LASW%sik~AU1w!N|Jjk@#N@&B}%KT~f z=O?C5wrl1M@yGCt8+!0;s}SH7Bo?y4)IcM3^0gr$PsMU*;SAodCSpfB`}NEGnGVZg z$)sgAPMd^^zmKb#7FB?-Y>sq}6sUh#i}YWo82?w>|I_~@4fJfS>`nAYzgp

gfF^ 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

#-nFJ_9s=`R?`MI^n} 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≫yt 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 z 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 BS! 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

fEJf@VF0u;9ZP@j% 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%0DEk_4o{?pbQ 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 sxFy~?%P0tC=6%S%pU0C+|bHp-eC zUS;xT^|oWerf!A-I>zvU@q&P>pt>PzeT<(AI*dJtl#Ty2snpdi##7z_p=hrIk(~FV zLCZi(*=CT=jyteY<+Pw-(9qBa8D3P>By)I2Ur3zMl9td80k{-F*Crp6Gka1vxUM|u z|DiD;CmjXwAfJ^pjtk~G-iYm0x*wcH($JeyqUuJ2=m^E zjW1Rk-i5I|ESh8O11K&!CN;Nb3^7XgQ>-j6Bo8`HGxIVLp-CG%ngnE?;s+CfR(xRl zyRpgfxdZwNOKfVxjzJcxogXROpC825ajaRBRChn{4p#Ffdeg$|?9WHez3Wgjy6dFG zt}m6U&deQ@jwAhYu9H9->t5fHfIQ)&&}F?NA|M_p#=4DZer2kb+?k@HDyGGUJ`EIn z2HDki*N!?gXC_$*uhdXj{$jOZYnXBIlI(fEBov*TM&p>|#H%=7HK^3yo5D{YLk=qK z-eOJ^JRFk&xWFT@fYh#&&7+WKo@%S<>p8+l zblFU8cAhp|RTynm@}UJsMFcQY_9(c>PP!^jxYU~pbeJK$Acoj9_yWCo}@OaMH6;H zJ{4~U2(*hfgRQC^cDQe zdMoU^`5JEc#&kZ%icVQcsZ)HRe{=Dn0?S1I@0wgV$ib!8$7h|EWKOzp-N4&MOgxN&3c8K(=P{bb|-%32I-LC zQgS!Dgyd+VIY!f-+>c0zK)iTbXE~+tnn%}kEXdTRiNX(<&`!>jwVepIc{m!KjF1&T zS|w?)$h2OuEilX20f-EiiRThdY61w<>n4nCX;qU8Gz(zirkD57Bb*9aIFU88~R~G zpa`Fx0zM_7BFC;P(KC@-po6>q#zhT z2TwQ51uxUX1Fc#}LWcx^xh^2qn=H1mPVp`>Qe2luS9);o?v6{ZIz+;X9WYN@XP~9w zW%z!Z_St+x)I~6(W9=MwyS;ih?W5*t$p`(h@oW%e2D6rCodyKFC^BN;jG#J7FBm`t=cx>GO0eNARqdFM* z(oieUdF~poX}%(l63jl+{LKi#m&DlS{qMbhK|%yzk%GXufIu*hG%A?10|i_~q40-GTsQ8KDS?u=4*- zwI$YQPP*DPVNUH0~s2TV; z+uAtTTAN7mN=ki1{5J@ct&87Ss6l3%Ud}jsaNY3tVwuCdFmSl};laqXoX8pBUr

9{#ticM&&>u25R z7tJ)msQcsH5A8bwlDObc$fIpf`?WFA)bUpxSCMTmp65P85vKuuLgGa`r_+g&lWchY zKqHFBl03eJ3;6V3ilnbjaM4t`!J02PkkGkp!udj$*x@9 zNMq$)7Oighx#X~`bwi?!nbSL1d>2B8&^xwH>k$zViWNmQcu_SlkW<0>eVF^*Mbag_ z?^1C^l)5*GY2K$e?5DhJpj(YtJ3+e=*G1dq)EA7)u_hujZBEkem%Tblr-+*Z>3`>-v~xKD_AhGelM5IlrB*&P;l zmAuZS8MHD7xiYVHLJ}ER4#})-nXL)DJd(+kj$ecRT4=0|wIyaLnQyg8Bpc*N(UWKz zlr1rJEm!#o!MVzrOkD71G`%hI5)&tT32f0Tau86HD+mVE{{LVYIq z9g7z4AU(!zhqqPt2u(~O)v3ZtgYa1wBu2TLOscf_K>|fjU+iS{^Y^MERpCWa1df|7 z@CY&9Vb1Soxtd4Rm8=Q0jZ1(A<|o_U8krle*x7VUA;0!G&Th(2ro1nRUiEJ9Q#}`X ziIi|clSSp(w5@6MbzonJIe%k;RmSBpt?u~|98*~J@{5x;8^rqMl65NV5 z!R8ntc;@LD+P zH^OzJPhIeN(D`Q%VR$sp-Y!e6f-1nuB4M2`2AvSU$LyHt2@Nkys2=E&420(b&?X=p zY&e<;T@&4xdXxA34Zdvd!O8HRK{Q_=%>A<+0@y=)8bw8v4UbzIMnOA49mI4>2FG(d zZu$zY+Onvmm&@U=ZZZ|7tS#M#TToOZxMbGhUcr}6WWPSCWxk&O;jI57xq>-XNWe!j zx6Mr?9zTE~@q+ee)%8W=(}VnG@7TvrA6g$&IRPPncZ`@iWr};;6u-3kodajJ?L8YI zC1H&1Wau|pqiPC47Kkt6i@G`!1w3WXj*Dhp+09NUu~Uzkx_Ba{v4`V4$0Q~1^3+bX zZN5$BXu9Ih)8R+!LA>yM<%C2Aj_}XUX?#D#9dAvr;5UdwZ7Ra_mUR+Vkuh&tBr6&2 zO|cw!?kylGHr2%2aHF?&0c|o7`2tZ4>v30-kKJlU(~9i%)tK3 zr+Wal#L;fb7#71jo!%TUm2WX0FSs4v6) zw7V$`0p`3D*yQFJv3H0ZhM?=M$&7@;M~#Jw9E4U-{rb7bAa=RAY6y7o(&5u+l_Ixn z`s$2GMJWMIPqRw3@98F=qt~oIfPk+erMmfOj4>S3%LlR7D9}3G(JaqnmY$6A#FZMz zRMjM1t}?Zz+n|f&?lm&~B?|;zUg7pH23|aMfNB6J%l-T%jGIc>D||TL#ArqKrpC(e z+o83CMy){lmq!$7m zh1K!+yYrxKoW6l;c)at_dNZRI3jXk?-7XHSxveG}KY8K-*3>phqK*z`C?}{ru%}$b zreCTeJ#Dl*UFO(h%UVe?ZM}dZ+oQ+LegEagl$n4k7iLx2*8Nkg?w1;mn5O=bIy2dn zFZ~^d+Ke_c7vuQfb@wx&T^y!tIO3O}sO=~WKwhIERYHkCsaOs;NHqhx9o{dgBzLlp zK+~A}mU|>t87Fx8qMW8kX;7YjTAOi1KJ>Enw&_AGm&uAU6dH=4QJI0~3sBvXrkt3K ztpV)fJqf%XPS_~IZ73tx)Ig9G6%-trVbMmhE<`N*G@Vf0$~r6?UC@(L(;E%Lt@9@HgL2X4fHh4C z9S*4%+Lz7@lh_kv^eF}G86AJA!Etfv@6=J!mOi;3Qn!0cwPQmG8kwO|{(0E>-H44{ z)T9wZd>MK|cqkIhokw)`dBw-#OIA3J4S5*AF--8$yqfC5&m+smJLKDhJ#c`m7%EaU z;3IR)dngr`viT7CZG z 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%0A(3E{^!YiC+FV^`X`Zvn8m6!oAF12 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, rgbHex: table}, rgbString: string} ----@type table -aura_env.ClassColors = { - { - className = "Warrior", - color = { - rgbInt = { 198, 155, 109 }, - rgbHex = { 0.78, 0.61, 0.43 }, - }, - rgbString = "C69B6D", - }, - { - className = "Paladin", - color = { - rgbInt = { 244, 140, 186 }, - rgbHex = { 0.96, 0.55, 0.73 }, - }, - rgbString = "F48CBA", - }, - { - className = "Hunter", - color = { - rgbInt = { 170, 211, 114 }, - rgbHex = { 0.67, 0.83, 0.45 }, - }, - rgbString = "AAD372", - }, - { - className = "Rogue", - color = { - rgbInt = { 255, 244, 104 }, - rgbHex = { 1.00, 0.96, 0.41 }, - }, - rgbString = "FFF468", - }, - { - className = "Priest", - color = { - rgbInt = { 255, 255, 255 }, - rgbHex = { 1.00, 1.00, 1.00 }, - }, - rgbString = "FFFFFF", - }, - { - className = "Death Knight", - color = { - rgbInt = { 196, 30, 58 }, - rgbHex = { 0.77, 0.12, 0.23 }, - }, - rgbString = "C41E3A", - }, - { - className = "Shaman", - color = { - rgbInt = { 0, 112, 221 }, - rgbHex = { 0.00, 0.44, 0.87 }, - }, - rgbString = "0070DD", - }, - { - className = "Mage", - color = { - rgbInt = { 63, 199, 235 }, - rgbHex = { 0.25, 0.78, 0.92 }, - }, - rgbString = "3FC7EB", - }, - { - className = "Warlock", - color = { - rgbInt = { 135, 136, 238 }, - rgbHex = { 0.53, 0.53, 0.93 }, - }, - rgbString = "8788EE", - }, - { - className = "Monk", - color = { - rgbInt = { 0, 255, 152 }, - rgbHex = { 0.00, 1.00, 0.60 }, - }, - rgbString = "00FF98", - }, - { - className = "Druid", - color = { - rgbInt = { 255, 124, 10 }, - rgbHex = { 1.00, 0.49, 0.04 }, - }, - rgbString = "FF7C0A", - }, - { - className = "Demon Hunter", - color = { - rgbInt = { 163, 48, 201 }, - rgbHex = { 0.64, 0.19, 0.79 }, - }, - rgbString = "A330C9", - }, -} - -local SoundFileRoot = "Interface\\Sounds\\spellAlert\\" - ----@param guid string ----@return string, nil|string -local function GetUnitFromGuid(guid) - local unit = aura_env.GUIDUnitMap[guid] - if unit == nil then return "none", "Unit not found" end - return unit, nil -end - ----@param guid string ----@return {name: string, target: string, targetClassId: number, prettyTarget: string}, nil|string -local function GetTargetInfoForGuid(guid) - local retval = { - name = "", - target = "", - targetClassId = 1, - prettyTarget = "", - } - - local unit, err = GetUnitFromGuid(guid) - if err then return retval, err end - - local targetUnit = string.format("%starget", unit) - retval.target = UnitName(targetUnit) - retval.prettyTarget = retval.target - - local targetClassId = select(3, UnitClass(targetUnit)) - retval.targetClassId = targetClassId - ---@type ClassColor - local classColorInfo = aura_env.ClassColors[targetClassId] - if classColorInfo then - retval.prettyTarget = string.format("|cFF%s%s|r", classColorInfo.rgbString, retval.target) - end - - return retval, nil -end - ----@param guid string ----@return {name: string, startms: number, endms: number, spellid: number}, nil|string -local function GetCastInfoForGuid(guid) - local retval = { - name = "", - startms = 0, - endms = 0, - spellid = 0, - } - - local unit, err = GetUnitFromGuid(guid) - if err then return retval, err end - local name, _, _, _, startTimeMS, endTimeMS, _, _, _, spellId = UnitCastingInfo(unit) - if name == nil then return retval, "Unit not casting" end - - retval.name = name - retval.startms = startTimeMS - retval.endms = endTimeMS - retval.spellid = spellId - - return retval, nil -end - ----@class Alert ----@field id number ----@field soundFile string ----@field events table ----@field instruction string ----@field afflictedInstruction string ----@field iterator number -aura_env.Alert = { - ---@param id number - ---@param name string - ---@param events table - ---@param instruction string - ---@param afflictedInstruction string - ---@return Alert - new = function(id, name, events, instruction, afflictedInstruction) - local self = setmetatable({}, { - __index = aura_env.Alert, - }) - self.id = id - name = string.gsub(name, " ", "_") - name = string.lower(name) - self.soundFile = string.format("%s%s.ogg", SoundFileRoot, name) - self.events = {} - for _, event in ipairs(events) do - self.events[event] = true - end - self.instruction = instruction - self.afflictedInstruction = afflictedInstruction - self.iterator = 0 - return self - end, - - ---@param self Alert - ---@param allstates allstates - ---@param ... any - ---@return string|nil - Trigger = function(self, allstates, ...) - -- We trust that the event is valid - local spellname, err = CLEUParser.GetSpellName(...) - if err then return err end - - -- The idea is: - -- SEE C_NamePlate.GetNamePlateForUnit !!!! - -- If the spell is being cast (SPELL_CAST_START) target will be nil (because server is cooked) - -- So what we want to do is get the source GUID and try to find it in nameplates - -- If it exists in nameplates we have a unitid and we can try to get casting info - -- From the casting info we can get the cast start and end as well as get the target from unit+target - -- However if the spell is already cast (SPELL_CAST_SUCCESS) the call to castInfo will return no info for cast - -- But it will return info about the target - -- Now the target itself is the actual target of the unit NOT the target of the spell - -- We just have to assume that the target of the spell is the same as the target of the unit - -- We then clamp the cast time to at least 1 second (meaning instant spells appear for 1s) - -- And get the target "manually" from the instant cast using the same principle as with the cast start - local src, err = CLEUParser.GetSourceGUID(...) - if err then return err end - local castInfo, err = GetCastInfoForGuid(src) - local targetInfo, err = GetTargetInfoForGuid(src) - DevTools_Dump(targetInfo) - - -- If the event DOES have destName then use that ACTUAL target - -- Unless it's the same target we already got - -- The reason we don't overwrite the same target we already got is because we can not (easily) infer - -- The target class from the destName because we don't know where to look for the unit - local target, err = CLEUParser.GetDestName(...) - if err == nil and target ~= targetInfo.target then - targetInfo.target = target - targetInfo.prettyTarget = target - targetInfo.targetClassId = 1 - end - - local displayText = self.instruction - if err == nil and targetInfo.target == PlayerName then displayText = self.afflictedInstruction end - - local castEnd = math.max(GetTime() + 5, castInfo.endms / 1000) - local castDuration = math.max(5, (castInfo.endms - castInfo.startms) / 1000) - - ---@type state - local state = { - show = true, - changed = true, - progressType = "timed", - expireTime = castEnd, - duration = castDuration, - autoHide = true, - name = spellname, - instruction = displayText, - target = targetInfo.target, - prettyTarget = targetInfo.prettyTarget, - targetClassId = targetInfo.targetClassId, - } - - allstates[string.format("%d-%d", self.id, self.iterator)] = state - self.iterator = self.iterator + 1 - return nil - end, -} - -local alerts = { - -- Debug - -- aura_env.Alert.new(774, "Rejuvenation", { "SPELL_AURA_APPLIED" }, "REJUV", "REEEEEEEEJUUUUUUUUUUUVVVVVVVVV"), - -- Garothi - aura_env.Alert.new(244410, "Decimation", { "SPELL_CAST_SUCCESS" }, "", "Move"), - aura_env.Alert.new(246220, "Fel Bombardment", { "SPELL_CAST_SUCCESS" }, "", "Move"), - aura_env.Alert.new(244969, "Eradication", { "SPELL_CAST_START" }, "Run away", ""), - aura_env.Alert.new(244106, "Carnage", { "SPELL_CAST_START" }, "Tank the boss", ""), - aura_env.Alert.new(246664, "Annihilation", { "SPELL_CAST_SUCCESS" }, "Soak pools", ""), - -- Felhounds - aura_env.Alert.new(244086, "Molten Touch", { "SPELL_CAST_SUCCESS" }, "", "Run away"), - aura_env.Alert.new(244768, "Desolate Gaze", { "SPELL_AURA_APPLIED" }, "", "Move away"), - aura_env.Alert.new( - 244057, - "Enflame Corruption", - { "SPELL_CAST_START", "SPELL_AURA_APPLIED" }, - "Spread", - "Spread!!" - ), - aura_env.Alert.new(244131, "Consuming Sphere", { "SPELL_AURA_APPLIED" }, "Move", ""), - aura_env.Alert.new(244056, "Siphon Corruption", { "SPELL_CAST_START", "SPELL_AURA_APPLIED" }, "Stack", "Stack!!"), - -- Antoran High Command - -- aura_env.Alert.new(245161, "Entropic Mine"), -- Need more info - -- aura_env.Alert.new(245546, "Summon Reinforcements"), -- Need more info - -- Portal Keeper Hasabel - aura_env.Alert.new(244016, "Reality Tear", { "SPELL_CAST_SUCCESS" }, "", ""), - aura_env.Alert.new(243983, "Collapsing World", { "SPELL_CAST_SUCCESS" }, "Dodge", ""), - aura_env.Alert.new(244000, "Felstorm Barrage", { "SPELL_CAST_START" }, "Dodge", ""), - -- Imonar - -- aura_env.Alert.new(247552, "Sleep Canister"), -- Need more info - aura_env.Alert.new(247367, "Shock Lance", { "SPELL_CAST_SUCCESS" }, "", ""), - aura_env.Alert.new(248068, "Empowered Pulse Grenade", { "SPELL_CAST_SUCCESS" }, "", ""), -- Need more info - aura_env.Alert.new(247376, "Pulse Grenade", { "SPELL_CAST_SUCCESS" }, "", ""), -- Need more info - aura_env.Alert.new(247716, "Charged Blasts", { "SPELL_AURA_APPLIED" }, "", "Move!!"), - aura_env.Alert.new(247687, "Sever", { "SPELL_CAST_SUCCESS" }, "", ""), - aura_env.Alert.new(248070, "Empowered Shrapnel Blast", { "SPELL_CAST_START" }, "Mines", ""), - aura_env.Alert.new(250255, "Empowered Shock Lance", { "SPELL_CAST_START" }, "", ""), - -- Kin'garoth - aura_env.Alert.new(254919, "Forging Strike", { "SPELL_CAST_START" }, "", ""), - aura_env.Alert.new(254926, "Reverberating Strike", { "SPELL_CAST_START" }, "Dodge", "Dodge"), - -- aura_env.Alert.new(246840, "Ruiner"), -- Need more info - -- aura_env.Alert.new(246779, "Diabolic Bomb"), -- Need more info - -- aura_env.Alert.new(246706, "Demolish"), -- Need more info - -- Varimathras - aura_env.Alert.new(243960, "Shadow Strike", { "SPELL_CAST_SUCCESS" }, "Taunt", "Survive"), - aura_env.Alert.new(243961, "Misery", { "SPELL_AURA_APPLIED" }, "", "Survive"), - aura_env.Alert.new(244042, "Marked Prey", { "SPELL_AURA_APPLIED" }, "Do not soak", "Let someone soak"), - -- aura_env.Alert.new(244093, "Necrotic Embrace"), -- Need more info - -- aura_env.Alert.new(248732, "Echoes of Doom"), -- Need more info - aura_env.Alert.new(243999, "Dark Fissure", { "SPELL_CAST_START" }, "Move", ""), - -- Coven - -- aura_env.Alert.new(253189, "Shivan Pact"), -- Need more info - aura_env.Alert.new(244899, "Fiery Strike", { "SPELL_CAST_START" }, "", "Prepare"), - aura_env.Alert.new(245627, "Whirling Saber", { "SPELL_CAST_START" }, "Dodge", ""), - aura_env.Alert.new(245281, "Shadow Blades", { "SPELL_CAST_START" }, "Dodge", ""), -- Need more info - aura_env.Alert.new(245586, "Chilled Blood", { "SPELL_AURA_APPLIED" }, "Heal", "Heal"), - -- Aggramar - -- aura_env.Alert.new(254452, "Ravenous Blaze"), -- Need more info - aura_env.Alert.new(244693, "Wake of Flame", { "SPELL_CAST_START" }, "Dodge", "Dodge!"), - -- aura_env.Alert.new(244291, "Foe Braker"), -- Need more info - -- aura_env.Alert.new(244033, "Flame Rend"), -- Need more info - -- aura_env.Alert.new(247079, "Empowered Flame Rend"), -- Need more info - -- aura_env.Alert.new(245983, "Flare"), -- Need more info - -- aura_env.Alert.new(246037, "Empowered Flare"), -- Need more info - -- Argus - -- aura_env.Alert.new(256457, "Cone of Death"), -- Need more info - aura_env.Alert.new(248396, "Soulblight", { "SPELL_AURA_APPLIED" }, "", "Run away from group"), - aura_env.Alert.new(257296, "Tortured Rage", { "SPELL_CAST_START" }, "Brace", ""), - aura_env.Alert.new(251570, "Soulbomb", { "SPELL_AURA_APPLIED" }, "Brace", "Run far away from group"), - - -- Mythic+ - -- Black Rook Hold - -- aura_env.Alert.new(225573, "Dark Mending"), - -- aura_env.Alert.new(200105, "Sacrifice Soul"), - -- aura_env.Alert.new(225732, "Strike Down"), - -- aura_env.Alert.new(194996, "Soul Echoes"), - -- aura_env.Alert.new(195254, "Swirling Scythe"), - -- aura_env.Alert.new(194956, "Reap Soul"), - aura_env.Alert.new(201858, "Shoot", { "SPELL_CAST_START" }, "", "LOS!"), - -- aura_env.Alert.new(200248, "Arcane Blitz"), - -- aura_env.Alert.new(200345, "Arrow Barrage"), - -- aura_env.Alert.new(200291, "Knife Dance"), - -- aura_env.Alert.new(200261, "Bonebreaking Strike"), - -- aura_env.Alert.new(197418, "Vengeful Shear"), - -- aura_env.Alert.new(201139, "Brutal Assault"), - -- aura_env.Alert.new(198245, "Brutal Haymaker"), - -- aura_env.Alert.new(198079, "Hateful Gaze"), - -- Cathedral of Eternal Night - -- aura_env.Alert.new(241937, "Shadow Wall"), - -- aura_env.Alert.new(238543, "Demonic Mending"), - -- aura_env.Alert.new(242792, "Vile Roots"), - -- aura_env.Alert.new(236627, "Floral Fulmination"), - -- aura_env.Alert.new(239217, "Blinding Glare"), - -- aura_env.Alert.new(237726, "Scornful Gaze"), - -- aura_env.Alert.new(190620, "Felblaze Orb"), - -- aura_env.Alert.new(239268, "Venom Storm"), - -- aura_env.Alert.new(234107, "Chaotic Energy"), - -- aura_env.Alert.new(236543, "Felsoul Cleave"), - -- aura_env.Alert.new(238315, "Shadow Sweep"), - -- aura_env.Alert.new(243168, "Demonic Upheaval"), - -- Court of Stars - -- aura_env.Alert.new(210261, "Sound Alarm"), - -- aura_env.Alert.new(215204, "Hinder"), - -- aura_env.Alert.new(209027, "Quelling Strike"), - -- aura_env.Alert.new(209516, "Mana Fang"), - -- aura_env.Alert.new(209485, "Drain Magic"), - -- aura_env.Alert.new(209404, "Seal Magic"), - -- aura_env.Alert.new(209495, "Charged Smash"), - -- aura_env.Alert.new(225100, "Charging Station"), - -- aura_env.Alert.new(219488, "Streetsweeper"), - -- aura_env.Alert.new(212784, "Eye Storm"), - -- aura_env.Alert.new(211464, "Fel Detonation"), - -- aura_env.Alert.new(207980, "Disintegration Beam"), - -- aura_env.Alert.new(207979, "Shockwave"), - -- aura_env.Alert.new(209628, "Piercing Gale"), - -- aura_env.Alert.new(209676, "Slicing Maelstrom"), - -- Darkheart Thicket - -- aura_env.Alert.new(200631, "Unnerving Screech"), - -- aura_env.Alert.new(200580, "Maddening Roar"), - -- aura_env.Alert.new(191326, "Breath of Corruption"), - -- aura_env.Alert.new(201400, "Dread Inferno"), - -- aura_env.Alert.new(200238, "Feed on the Weak"), - -- Eye of Azshara - -- aura_env.Alert.new(195172, "Mighty Slam"), - -- aura_env.Alert.new(195129, "Thundering Stomp"), - -- aura_env.Alert.new(195046, "Rejuvenating Waters"), - -- aura_env.Alert.new(162135, "Bellowing Roar"), - -- aura_env.Alert.new(197105, "Polymorh Fish"), - -- aura_env.Alert.new(193597, "Static Nova"), - -- aura_env.Alert.new(193611, "Focused Lightning"), - -- aura_env.Alert.new(196129, "Spray Sand"), - -- aura_env.Alert.new(196144, "Sandstorm"), - -- aura_env.Alert.new(196296, "Roiling Storm"), - -- aura_env.Alert.new(196290, "Chaotic Tempest"), - -- aura_env.Alert.new(191848, "Rampage"), - -- Halls of Valor - -- aura_env.Alert.new(198605, "Thunderstrike"), - -- aura_env.Alert.new(198888, "Lightning Breath"), - -- aura_env.Alert.new(191284, "Horn of Valor"), - -- aura_env.Alert.new(198934, "Rune of Healing"), - -- aura_env.Alert.new(215433, "Holy Radiance"), - -- aura_env.Alert.new(199210, "Penetrating Shot"), - -- aura_env.Alert.new(191976, "Arcing Bolt"), - -- aura_env.Alert.new(192305, "Eye of the Storm"), - -- aura_env.Alert.new(192307, "Sanctify"), - -- aura_env.Alert.new(192048, "Expel Light"), - -- aura_env.Alert.new(192018, "Shield of Light"), - -- aura_env.Alert.new(196512, "Claw Frenzy"), - -- aura_env.Alert.new(199652, "Sever"), - -- aura_env.Alert.new(199726, "Unruly Yell"), - -- aura_env.Alert.new(199674, "Wicked Dagger"), - -- aura_env.Alert.new(193826, "Ragnarok"), - -- aura_env.Alert.new(198263, "Radiant Tempest"), - -- aura_env.Alert.new(198072, "Spear of Light"), - -- aura_env.Alert.new(197961, "Runic Band"), - -- aura_env.Alert.new(198750, "Surge"), - -- Maw of Souls - -- aura_env.Alert.new(193364, "Screams of the Dead"), - -- aura_env.Alert.new(194442, "Six Pound Barrel"), - -- aura_env.Alert.new(194615, "Sea Legs"), - -- aura_env.Alert.new(192019, "Lantern of Darkness"), - -- aura_env.Alert.new(194099, "Bile Breath"), - -- aura_env.Alert.new(198405, "Bone Chilling Scream"), - -- aura_env.Alert.new(194325, "Fragment"), - -- aura_env.Alert.new(194216, "Cosmic Scythe"), - -- aura_env.Alert.new(195293, "Debilitating Shout"), - -- aura_env.Alert.new(185539, "Rapid Rupture"), - -- aura_env.Alert.new(198495, "Torrent"), - -- aura_env.Alert.new(202098, "Brackwater Barrage"), - -- Neltharion's Lair - -- aura_env.Alert.new(202181, "Stone Gaze"), - -- aura_env.Alert.new(226296, "Piercing Shards"), - -- aura_env.Alert.new(188169, "Razor Shards"), - -- aura_env.Alert.new(198496, "Sunder"), - -- aura_env.Alert.new(199176, "Spiked Tongue"), - -- aura_env.Alert.new(193585, "Bound"), - -- aura_env.Alert.new(200700, "Landslide"), - -- aura_env.Alert.new(200732, "Molten Crash"), - -- The Arcway - -- aura_env.Alert.new(211771, "Prophecies of Doom"), - -- aura_env.Alert.new(211037, "Celerity Zone"), - -- aura_env.Alert.new(195791, "Quarantine"), - -- aura_env.Alert.new(226285, "Demonic Ascension"), - -- aura_env.Alert.new(197810, "Wicked Slam"), - -- aura_env.Alert.new(211217, "Arcane Slicer"), - -- aura_env.Alert.new(211115, "Phase Breach"), - -- aura_env.Alert.new(196392, "Overcharge Mana"), - -- aura_env.Alert.new(200040, "Nether Venom"), - -- aura_env.Alert.new(200227, "Tangled Web"), - -- aura_env.Alert.new(220871, "Unstable Mana"), - -- Vault of the Wardens - -- aura_env.Alert.new(193069, "Nightmares"), - -- aura_env.Alert.new(197799, "Unleash Fury"), - -- aura_env.Alert.new(191735, "Deafening Screech"), - -- aura_env.Alert.new(190836, "Hatred"), - -- aura_env.Alert.new(202913, "Fel Mortar"), - -- aura_env.Alert.new(200898, "Teleport"), - -- aura_env.Alert.new(199917, "Shadow Crash"), - -- aura_env.Alert.new(202658, "Drain"), - -- aura_env.Alert.new(194945, "Lingering Gaze"), - -- aura_env.Alert.new(196249, "Meteor"), - -- aura_env.Alert.new(192631, "Lava Wreath"), - -- aura_env.Alert.new(197513, "Detonating Moonglaive"), - -- aura_env.Alert.new(189469, "Turn Kick"), - -- Upper Karazhan - -- aura_env.Alert.new(230083, "Nullification"), - -- aura_env.Alert.new(227267, "Summon Volatile Energy"), - -- aura_env.Alert.new(227254, "Evocation"), - -- aura_env.Alert.new(229662, "Fel Breath"), - -- aura_env.Alert.new(36247, "Fel Fireball"), - -- aura_env.Alert.new(227628, "Piercing Missiles"), - -- aura_env.Alert.new(227615, "Inferno Bolt"), - -- aura_env.Alert.new(227592, "Frostbite"), - -- aura_env.Alert.new(228269, "Flame Wreath"), - -- aura_env.Alert.new(227779, "Ceaseless Winter"), - -- aura_env.Alert.new(229706, "Leech Life"), - -- aura_env.Alert.new(229714, "Consume Magic"), - -- aura_env.Alert.new(229159, "Chaotic Shadows"), - -- aura_env.Alert.new(229083, "Burning Blast"), - -- aura_env.Alert.new(229151, "Disintegrate"), - -- Lower Karazhan - -- aura_env.Alert.new(228221, "Severe Dusting"), - -- aura_env.Alert.new(228225, "Sultry Heat"), - -- aura_env.Alert.new(232153, "Kara Kazham"), - -- aura_env.Alert.new(227987, "Dinner Bell"), - -- aura_env.Alert.new(228025, "Heat Wave"), - -- aura_env.Alert.new(227568, "Burning Leg Sweep"), - -- aura_env.Alert.new(227776, "Magic Magnificent"), - -- aura_env.Alert.new(227966, "Flashlight"), - -- aura_env.Alert.new(228279, "Shadow Rejuvenation"), - -- aura_env.Alert.new(228278, "Demoralizing Shout"), - -- aura_env.Alert.new(228277, "Shackles of Servitude"), - -- aura_env.Alert.new(226316, "Shadow Bolt Volley"), - -- aura_env.Alert.new(227508, "Mass Repentance"), - -- aura_env.Alert.new(227793, "Sacred Ground"), - -- aura_env.Alert.new(227463, "Whirling Edge"), - -- aura_env.Alert.new(227646, "Iron Whirlwind"), - -- aura_env.Alert.new(227672, "Will Breaker"), - -- aura_env.Alert.new(227404, "Intangible Presence"), - -- aura_env.Alert.new(227493, "Mortal Strike"), - -- aura_env.Alert.new(228852, "Shared Suffering"), - -- aura_env.Alert.new(228837, "Bellowing Roar"), -} - ----@type table> -aura_env.EventMap = {} -for _, alert in ipairs(alerts) do - for event, _ in pairs(alert.events) do - if not aura_env.EventMap[event] then aura_env.EventMap[event] = {} end - aura_env.EventMap[event][alert.id] = alert - end -end - -local function varargToString(...) - local output = {} - for i = 1, select("#", ...) do - output[#output + 1] = string.format("%d = %s", i, tostring(select(i, ...))) - end - return table.concat(output, "; ") -end - --- C:\Users\Administrator\Seafile\Backup-WoW\Ruski\WTF\Account\phatphuckdave\SavedVariables\WeakAuras.lua -if not WeakAurasSaved then WeakAurasSaved = {} end -if not WeakAurasSaved.Cyka then WeakAurasSaved.Cyka = {} end -if not WeakAurasSaved.Cyka.CLEUExample then WeakAurasSaved.Cyka.CLEUExample = {} end ---/run WeakAurasSaved.Cyka.CLEUExample = {} ----@param spellName string ----@param spellId number ----@param subevent string ----@param ... any -aura_env.LogSpell = function(spellName, spellId, subevent, ...) - -- table.insert(WeakAurasSaved.Cyka.CLEUExample, varargToString(spellName, spellId, subevent, ...)) -end +aura_env.GUIDUnitMap = {} +aura_env.PlayerName = UnitName("player") +-- Indices are class ids +---@alias ClassColor {className: string, color: {rgbInt: table, rgbHex: table}, rgbString: string} +---@type table +aura_env.ClassColors = { + { + className = "Warrior", + color = { + rgbInt = { 198, 155, 109 }, + rgbHex = { 0.78, 0.61, 0.43 }, + }, + rgbString = "C69B6D", + }, + { + className = "Paladin", + color = { + rgbInt = { 244, 140, 186 }, + rgbHex = { 0.96, 0.55, 0.73 }, + }, + rgbString = "F48CBA", + }, + { + className = "Hunter", + color = { + rgbInt = { 170, 211, 114 }, + rgbHex = { 0.67, 0.83, 0.45 }, + }, + rgbString = "AAD372", + }, + { + className = "Rogue", + color = { + rgbInt = { 255, 244, 104 }, + rgbHex = { 1.00, 0.96, 0.41 }, + }, + rgbString = "FFF468", + }, + { + className = "Priest", + color = { + rgbInt = { 255, 255, 255 }, + rgbHex = { 1.00, 1.00, 1.00 }, + }, + rgbString = "FFFFFF", + }, + { + className = "Death Knight", + color = { + rgbInt = { 196, 30, 58 }, + rgbHex = { 0.77, 0.12, 0.23 }, + }, + rgbString = "C41E3A", + }, + { + className = "Shaman", + color = { + rgbInt = { 0, 112, 221 }, + rgbHex = { 0.00, 0.44, 0.87 }, + }, + rgbString = "0070DD", + }, + { + className = "Mage", + color = { + rgbInt = { 63, 199, 235 }, + rgbHex = { 0.25, 0.78, 0.92 }, + }, + rgbString = "3FC7EB", + }, + { + className = "Warlock", + color = { + rgbInt = { 135, 136, 238 }, + rgbHex = { 0.53, 0.53, 0.93 }, + }, + rgbString = "8788EE", + }, + { + className = "Monk", + color = { + rgbInt = { 0, 255, 152 }, + rgbHex = { 0.00, 1.00, 0.60 }, + }, + rgbString = "00FF98", + }, + { + className = "Druid", + color = { + rgbInt = { 255, 124, 10 }, + rgbHex = { 1.00, 0.49, 0.04 }, + }, + rgbString = "FF7C0A", + }, + { + className = "Demon Hunter", + color = { + rgbInt = { 163, 48, 201 }, + rgbHex = { 0.64, 0.19, 0.79 }, + }, + rgbString = "A330C9", + }, +} + +local SoundFileRoot = "Interface\\Sounds\\spellAlert\\" + +---@param guid string +---@return string, nil|string +local function GetUnitFromGuid(guid) + local unit = aura_env.GUIDUnitMap[guid] + if unit == nil then return "none", "Unit not found" end + return unit, nil +end + +---@param guid string +---@return {name: string, target: string, targetClassId: number, prettyTarget: string}, nil|string +local function GetTargetInfoForGuid(guid) + local retval = { + name = "", + target = "", + targetClassId = 1, + prettyTarget = "", + } + + local unit, err = GetUnitFromGuid(guid) + if err then return retval, err end + + local targetUnit = string.format("%starget", unit) + retval.target = UnitName(targetUnit) + retval.prettyTarget = retval.target + + local targetClassId = select(3, UnitClass(targetUnit)) + retval.targetClassId = targetClassId + ---@type ClassColor + local classColorInfo = aura_env.ClassColors[targetClassId] + if classColorInfo then + retval.prettyTarget = string.format("|cFF%s%s|r", classColorInfo.rgbString, retval.target) + end + + return retval, nil +end + +---@param guid string +---@return {name: string, startms: number, endms: number, spellid: number}, nil|string +local function GetCastInfoForGuid(guid) + local retval = { + name = "", + startms = 0, + endms = 0, + spellid = 0, + } + + local unit, err = GetUnitFromGuid(guid) + if err then return retval, err end + local name, _, _, _, startTimeMS, endTimeMS, _, _, _, spellId = UnitCastingInfo(unit) + if name == nil then return retval, "Unit not casting" end + + retval.name = name + retval.startms = startTimeMS + retval.endms = endTimeMS + retval.spellid = spellId + + return retval, nil +end + +---@class Alert +---@field id number +---@field soundFile string +---@field events table +---@field instruction string +---@field afflictedInstruction string +---@field iterator number +aura_env.Alert = { + ---@param id number + ---@param name string + ---@param events table + ---@param instruction string + ---@param afflictedInstruction string + ---@return Alert + new = function(id, name, events, instruction, afflictedInstruction) + local self = setmetatable({}, { + __index = aura_env.Alert, + }) + self.id = id + name = string.gsub(name, " ", "_") + name = string.lower(name) + self.soundFile = string.format("%s%s.ogg", SoundFileRoot, name) + self.events = {} + for _, event in ipairs(events) do + self.events[event] = true + end + self.instruction = instruction + self.afflictedInstruction = afflictedInstruction + self.iterator = 0 + return self + end, + + ---@param self Alert + ---@param allstates allstates + ---@param ... any + ---@return string|nil + Trigger = function(self, allstates, ...) + -- We trust that the event is valid + local spellname, err = CLEUParser.GetSpellName(...) + if err then return err end + + -- The idea is: + -- SEE C_NamePlate.GetNamePlateForUnit !!!! + -- If the spell is being cast (SPELL_CAST_START) target will be nil (because server is cooked) + -- So what we want to do is get the source GUID and try to find it in nameplates + -- If it exists in nameplates we have a unitid and we can try to get casting info + -- From the casting info we can get the cast start and end as well as get the target from unit+target + -- However if the spell is already cast (SPELL_CAST_SUCCESS) the call to castInfo will return no info for cast + -- But it will return info about the target + -- Now the target itself is the actual target of the unit NOT the target of the spell + -- We just have to assume that the target of the spell is the same as the target of the unit + -- We then clamp the cast time to at least 1 second (meaning instant spells appear for 1s) + -- And get the target "manually" from the instant cast using the same principle as with the cast start + local src, err = CLEUParser.GetSourceGUID(...) + if err then return err end + local castInfo, err = GetCastInfoForGuid(src) + local targetInfo, err = GetTargetInfoForGuid(src) + DevTools_Dump(targetInfo) + + -- If the event DOES have destName then use that ACTUAL target + -- Unless it's the same target we already got + -- The reason we don't overwrite the same target we already got is because we can not (easily) infer + -- The target class from the destName because we don't know where to look for the unit + local target, err = CLEUParser.GetDestName(...) + if err == nil and target ~= targetInfo.target then + targetInfo.target = target + targetInfo.prettyTarget = target + targetInfo.targetClassId = 1 + end + + local displayText = self.instruction + if err == nil and targetInfo.target == PlayerName then displayText = self.afflictedInstruction end + + local castEnd = math.max(GetTime() + 5, castInfo.endms / 1000) + local castDuration = math.max(5, (castInfo.endms - castInfo.startms) / 1000) + + ---@type state + local state = { + show = true, + changed = true, + progressType = "timed", + expireTime = castEnd, + duration = castDuration, + autoHide = true, + name = spellname, + instruction = displayText, + target = targetInfo.target, + prettyTarget = targetInfo.prettyTarget, + targetClassId = targetInfo.targetClassId, + } + + allstates[string.format("%d-%d", self.id, self.iterator)] = state + self.iterator = self.iterator + 1 + return nil + end, +} + +local alerts = { + -- Debug + -- aura_env.Alert.new(774, "Rejuvenation", { "SPELL_AURA_APPLIED" }, "REJUV", "REEEEEEEEJUUUUUUUUUUUVVVVVVVVV"), + -- Garothi + aura_env.Alert.new(244410, "Decimation", { "SPELL_CAST_SUCCESS" }, "", "Move"), + aura_env.Alert.new(246220, "Fel Bombardment", { "SPELL_CAST_SUCCESS" }, "", "Move"), + aura_env.Alert.new(244969, "Eradication", { "SPELL_CAST_START" }, "Run away", ""), + aura_env.Alert.new(244106, "Carnage", { "SPELL_CAST_START" }, "Tank the boss", ""), + aura_env.Alert.new(246664, "Annihilation", { "SPELL_CAST_SUCCESS" }, "Soak pools", ""), + -- Felhounds + aura_env.Alert.new(244086, "Molten Touch", { "SPELL_CAST_SUCCESS" }, "", "Run away"), + aura_env.Alert.new(244768, "Desolate Gaze", { "SPELL_AURA_APPLIED" }, "", "Move away"), + aura_env.Alert.new( + 244057, + "Enflame Corruption", + { "SPELL_CAST_START", "SPELL_AURA_APPLIED" }, + "Spread", + "Spread!!" + ), + aura_env.Alert.new(244131, "Consuming Sphere", { "SPELL_AURA_APPLIED" }, "Move", ""), + aura_env.Alert.new(244056, "Siphon Corruption", { "SPELL_CAST_START", "SPELL_AURA_APPLIED" }, "Stack", "Stack!!"), + -- Antoran High Command + -- aura_env.Alert.new(245161, "Entropic Mine"), -- Need more info + -- aura_env.Alert.new(245546, "Summon Reinforcements"), -- Need more info + -- Portal Keeper Hasabel + aura_env.Alert.new(244016, "Reality Tear", { "SPELL_CAST_SUCCESS" }, "", ""), + aura_env.Alert.new(243983, "Collapsing World", { "SPELL_CAST_SUCCESS" }, "Dodge", ""), + aura_env.Alert.new(244000, "Felstorm Barrage", { "SPELL_CAST_START" }, "Dodge", ""), + -- Imonar + -- aura_env.Alert.new(247552, "Sleep Canister"), -- Need more info + aura_env.Alert.new(247367, "Shock Lance", { "SPELL_CAST_SUCCESS" }, "", ""), + aura_env.Alert.new(248068, "Empowered Pulse Grenade", { "SPELL_CAST_SUCCESS" }, "", ""), -- Need more info + aura_env.Alert.new(247376, "Pulse Grenade", { "SPELL_CAST_SUCCESS" }, "", ""), -- Need more info + aura_env.Alert.new(247716, "Charged Blasts", { "SPELL_AURA_APPLIED" }, "", "Move!!"), + aura_env.Alert.new(247687, "Sever", { "SPELL_CAST_SUCCESS" }, "", ""), + aura_env.Alert.new(248070, "Empowered Shrapnel Blast", { "SPELL_CAST_START" }, "Mines", ""), + aura_env.Alert.new(250255, "Empowered Shock Lance", { "SPELL_CAST_START" }, "", ""), + -- Kin'garoth + aura_env.Alert.new(254919, "Forging Strike", { "SPELL_CAST_START" }, "", ""), + aura_env.Alert.new(254926, "Reverberating Strike", { "SPELL_CAST_START" }, "Dodge", "Dodge"), + -- aura_env.Alert.new(246840, "Ruiner"), -- Need more info + -- aura_env.Alert.new(246779, "Diabolic Bomb"), -- Need more info + -- aura_env.Alert.new(246706, "Demolish"), -- Need more info + -- Varimathras + aura_env.Alert.new(243960, "Shadow Strike", { "SPELL_CAST_SUCCESS" }, "Taunt", "Survive"), + aura_env.Alert.new(243961, "Misery", { "SPELL_AURA_APPLIED" }, "", "Survive"), + aura_env.Alert.new(244042, "Marked Prey", { "SPELL_AURA_APPLIED" }, "Do not soak", "Let someone soak"), + -- aura_env.Alert.new(244093, "Necrotic Embrace"), -- Need more info + -- aura_env.Alert.new(248732, "Echoes of Doom"), -- Need more info + aura_env.Alert.new(243999, "Dark Fissure", { "SPELL_CAST_START" }, "Move", ""), + -- Coven + -- aura_env.Alert.new(253189, "Shivan Pact"), -- Need more info + aura_env.Alert.new(244899, "Fiery Strike", { "SPELL_CAST_START" }, "", "Prepare"), + aura_env.Alert.new(245627, "Whirling Saber", { "SPELL_CAST_START" }, "Dodge", ""), + aura_env.Alert.new(245281, "Shadow Blades", { "SPELL_CAST_START" }, "Dodge", ""), -- Need more info + aura_env.Alert.new(245586, "Chilled Blood", { "SPELL_AURA_APPLIED" }, "Heal", "Heal"), + -- Aggramar + -- aura_env.Alert.new(254452, "Ravenous Blaze"), -- Need more info + aura_env.Alert.new(244693, "Wake of Flame", { "SPELL_CAST_START" }, "Dodge", "Dodge!"), + -- aura_env.Alert.new(244291, "Foe Braker"), -- Need more info + -- aura_env.Alert.new(244033, "Flame Rend"), -- Need more info + -- aura_env.Alert.new(247079, "Empowered Flame Rend"), -- Need more info + -- aura_env.Alert.new(245983, "Flare"), -- Need more info + -- aura_env.Alert.new(246037, "Empowered Flare"), -- Need more info + -- Argus + -- aura_env.Alert.new(256457, "Cone of Death"), -- Need more info + aura_env.Alert.new(248396, "Soulblight", { "SPELL_AURA_APPLIED" }, "", "Run away from group"), + aura_env.Alert.new(257296, "Tortured Rage", { "SPELL_CAST_START" }, "Brace", ""), + aura_env.Alert.new(251570, "Soulbomb", { "SPELL_AURA_APPLIED" }, "Brace", "Run far away from group"), + + -- Mythic+ + -- Black Rook Hold + -- aura_env.Alert.new(225573, "Dark Mending"), + -- aura_env.Alert.new(200105, "Sacrifice Soul"), + -- aura_env.Alert.new(225732, "Strike Down"), + -- aura_env.Alert.new(194996, "Soul Echoes"), + -- aura_env.Alert.new(195254, "Swirling Scythe"), + -- aura_env.Alert.new(194956, "Reap Soul"), + aura_env.Alert.new(201858, "Shoot", { "SPELL_CAST_START" }, "", "LOS!"), + -- aura_env.Alert.new(200248, "Arcane Blitz"), + -- aura_env.Alert.new(200345, "Arrow Barrage"), + -- aura_env.Alert.new(200291, "Knife Dance"), + -- aura_env.Alert.new(200261, "Bonebreaking Strike"), + -- aura_env.Alert.new(197418, "Vengeful Shear"), + -- aura_env.Alert.new(201139, "Brutal Assault"), + -- aura_env.Alert.new(198245, "Brutal Haymaker"), + -- aura_env.Alert.new(198079, "Hateful Gaze"), + -- Cathedral of Eternal Night + -- aura_env.Alert.new(241937, "Shadow Wall"), + -- aura_env.Alert.new(238543, "Demonic Mending"), + -- aura_env.Alert.new(242792, "Vile Roots"), + -- aura_env.Alert.new(236627, "Floral Fulmination"), + -- aura_env.Alert.new(239217, "Blinding Glare"), + -- aura_env.Alert.new(237726, "Scornful Gaze"), + -- aura_env.Alert.new(190620, "Felblaze Orb"), + -- aura_env.Alert.new(239268, "Venom Storm"), + -- aura_env.Alert.new(234107, "Chaotic Energy"), + -- aura_env.Alert.new(236543, "Felsoul Cleave"), + -- aura_env.Alert.new(238315, "Shadow Sweep"), + -- aura_env.Alert.new(243168, "Demonic Upheaval"), + -- Court of Stars + -- aura_env.Alert.new(210261, "Sound Alarm"), + -- aura_env.Alert.new(215204, "Hinder"), + -- aura_env.Alert.new(209027, "Quelling Strike"), + -- aura_env.Alert.new(209516, "Mana Fang"), + -- aura_env.Alert.new(209485, "Drain Magic"), + -- aura_env.Alert.new(209404, "Seal Magic"), + -- aura_env.Alert.new(209495, "Charged Smash"), + -- aura_env.Alert.new(225100, "Charging Station"), + -- aura_env.Alert.new(219488, "Streetsweeper"), + -- aura_env.Alert.new(212784, "Eye Storm"), + -- aura_env.Alert.new(211464, "Fel Detonation"), + -- aura_env.Alert.new(207980, "Disintegration Beam"), + -- aura_env.Alert.new(207979, "Shockwave"), + -- aura_env.Alert.new(209628, "Piercing Gale"), + -- aura_env.Alert.new(209676, "Slicing Maelstrom"), + -- Darkheart Thicket + -- aura_env.Alert.new(200631, "Unnerving Screech"), + -- aura_env.Alert.new(200580, "Maddening Roar"), + -- aura_env.Alert.new(191326, "Breath of Corruption"), + -- aura_env.Alert.new(201400, "Dread Inferno"), + -- aura_env.Alert.new(200238, "Feed on the Weak"), + -- Eye of Azshara + -- aura_env.Alert.new(195172, "Mighty Slam"), + -- aura_env.Alert.new(195129, "Thundering Stomp"), + -- aura_env.Alert.new(195046, "Rejuvenating Waters"), + -- aura_env.Alert.new(162135, "Bellowing Roar"), + -- aura_env.Alert.new(197105, "Polymorh Fish"), + -- aura_env.Alert.new(193597, "Static Nova"), + -- aura_env.Alert.new(193611, "Focused Lightning"), + -- aura_env.Alert.new(196129, "Spray Sand"), + -- aura_env.Alert.new(196144, "Sandstorm"), + -- aura_env.Alert.new(196296, "Roiling Storm"), + -- aura_env.Alert.new(196290, "Chaotic Tempest"), + -- aura_env.Alert.new(191848, "Rampage"), + -- Halls of Valor + -- aura_env.Alert.new(198605, "Thunderstrike"), + -- aura_env.Alert.new(198888, "Lightning Breath"), + -- aura_env.Alert.new(191284, "Horn of Valor"), + -- aura_env.Alert.new(198934, "Rune of Healing"), + -- aura_env.Alert.new(215433, "Holy Radiance"), + -- aura_env.Alert.new(199210, "Penetrating Shot"), + -- aura_env.Alert.new(191976, "Arcing Bolt"), + -- aura_env.Alert.new(192305, "Eye of the Storm"), + -- aura_env.Alert.new(192307, "Sanctify"), + -- aura_env.Alert.new(192048, "Expel Light"), + -- aura_env.Alert.new(192018, "Shield of Light"), + -- aura_env.Alert.new(196512, "Claw Frenzy"), + -- aura_env.Alert.new(199652, "Sever"), + -- aura_env.Alert.new(199726, "Unruly Yell"), + -- aura_env.Alert.new(199674, "Wicked Dagger"), + -- aura_env.Alert.new(193826, "Ragnarok"), + -- aura_env.Alert.new(198263, "Radiant Tempest"), + -- aura_env.Alert.new(198072, "Spear of Light"), + -- aura_env.Alert.new(197961, "Runic Band"), + -- aura_env.Alert.new(198750, "Surge"), + -- Maw of Souls + -- aura_env.Alert.new(193364, "Screams of the Dead"), + -- aura_env.Alert.new(194442, "Six Pound Barrel"), + -- aura_env.Alert.new(194615, "Sea Legs"), + -- aura_env.Alert.new(192019, "Lantern of Darkness"), + -- aura_env.Alert.new(194099, "Bile Breath"), + -- aura_env.Alert.new(198405, "Bone Chilling Scream"), + -- aura_env.Alert.new(194325, "Fragment"), + -- aura_env.Alert.new(194216, "Cosmic Scythe"), + -- aura_env.Alert.new(195293, "Debilitating Shout"), + -- aura_env.Alert.new(185539, "Rapid Rupture"), + -- aura_env.Alert.new(198495, "Torrent"), + -- aura_env.Alert.new(202098, "Brackwater Barrage"), + -- Neltharion's Lair + -- aura_env.Alert.new(202181, "Stone Gaze"), + -- aura_env.Alert.new(226296, "Piercing Shards"), + -- aura_env.Alert.new(188169, "Razor Shards"), + -- aura_env.Alert.new(198496, "Sunder"), + -- aura_env.Alert.new(199176, "Spiked Tongue"), + -- aura_env.Alert.new(193585, "Bound"), + -- aura_env.Alert.new(200700, "Landslide"), + -- aura_env.Alert.new(200732, "Molten Crash"), + -- The Arcway + -- aura_env.Alert.new(211771, "Prophecies of Doom"), + -- aura_env.Alert.new(211037, "Celerity Zone"), + -- aura_env.Alert.new(195791, "Quarantine"), + -- aura_env.Alert.new(226285, "Demonic Ascension"), + -- aura_env.Alert.new(197810, "Wicked Slam"), + -- aura_env.Alert.new(211217, "Arcane Slicer"), + -- aura_env.Alert.new(211115, "Phase Breach"), + -- aura_env.Alert.new(196392, "Overcharge Mana"), + -- aura_env.Alert.new(200040, "Nether Venom"), + -- aura_env.Alert.new(200227, "Tangled Web"), + -- aura_env.Alert.new(220871, "Unstable Mana"), + -- Vault of the Wardens + -- aura_env.Alert.new(193069, "Nightmares"), + -- aura_env.Alert.new(197799, "Unleash Fury"), + -- aura_env.Alert.new(191735, "Deafening Screech"), + -- aura_env.Alert.new(190836, "Hatred"), + -- aura_env.Alert.new(202913, "Fel Mortar"), + -- aura_env.Alert.new(200898, "Teleport"), + -- aura_env.Alert.new(199917, "Shadow Crash"), + -- aura_env.Alert.new(202658, "Drain"), + -- aura_env.Alert.new(194945, "Lingering Gaze"), + -- aura_env.Alert.new(196249, "Meteor"), + -- aura_env.Alert.new(192631, "Lava Wreath"), + -- aura_env.Alert.new(197513, "Detonating Moonglaive"), + -- aura_env.Alert.new(189469, "Turn Kick"), + -- Upper Karazhan + -- aura_env.Alert.new(230083, "Nullification"), + -- aura_env.Alert.new(227267, "Summon Volatile Energy"), + -- aura_env.Alert.new(227254, "Evocation"), + -- aura_env.Alert.new(229662, "Fel Breath"), + -- aura_env.Alert.new(36247, "Fel Fireball"), + -- aura_env.Alert.new(227628, "Piercing Missiles"), + -- aura_env.Alert.new(227615, "Inferno Bolt"), + -- aura_env.Alert.new(227592, "Frostbite"), + -- aura_env.Alert.new(228269, "Flame Wreath"), + -- aura_env.Alert.new(227779, "Ceaseless Winter"), + -- aura_env.Alert.new(229706, "Leech Life"), + -- aura_env.Alert.new(229714, "Consume Magic"), + -- aura_env.Alert.new(229159, "Chaotic Shadows"), + -- aura_env.Alert.new(229083, "Burning Blast"), + -- aura_env.Alert.new(229151, "Disintegrate"), + -- Lower Karazhan + -- aura_env.Alert.new(228221, "Severe Dusting"), + -- aura_env.Alert.new(228225, "Sultry Heat"), + -- aura_env.Alert.new(232153, "Kara Kazham"), + -- aura_env.Alert.new(227987, "Dinner Bell"), + -- aura_env.Alert.new(228025, "Heat Wave"), + -- aura_env.Alert.new(227568, "Burning Leg Sweep"), + -- aura_env.Alert.new(227776, "Magic Magnificent"), + -- aura_env.Alert.new(227966, "Flashlight"), + -- aura_env.Alert.new(228279, "Shadow Rejuvenation"), + -- aura_env.Alert.new(228278, "Demoralizing Shout"), + -- aura_env.Alert.new(228277, "Shackles of Servitude"), + -- aura_env.Alert.new(226316, "Shadow Bolt Volley"), + -- aura_env.Alert.new(227508, "Mass Repentance"), + -- aura_env.Alert.new(227793, "Sacred Ground"), + -- aura_env.Alert.new(227463, "Whirling Edge"), + -- aura_env.Alert.new(227646, "Iron Whirlwind"), + -- aura_env.Alert.new(227672, "Will Breaker"), + -- aura_env.Alert.new(227404, "Intangible Presence"), + -- aura_env.Alert.new(227493, "Mortal Strike"), + -- aura_env.Alert.new(228852, "Shared Suffering"), + -- aura_env.Alert.new(228837, "Bellowing Roar"), +} + +---@type table> +aura_env.EventMap = {} +for _, alert in ipairs(alerts) do + for event, _ in pairs(alert.events) do + if not aura_env.EventMap[event] then aura_env.EventMap[event] = {} end + aura_env.EventMap[event][alert.id] = alert + end +end + +local function varargToString(...) + local output = {} + for i = 1, select("#", ...) do + output[#output + 1] = string.format("%d = %s", i, tostring(select(i, ...))) + end + return table.concat(output, "; ") +end + +-- C:\Users\Administrator\Seafile\Backup-WoW\Ruski\WTF\Account\phatphuckdave\SavedVariables\WeakAuras.lua +if not WeakAurasSaved then WeakAurasSaved = {} end +if not WeakAurasSaved.Cyka then WeakAurasSaved.Cyka = {} end +if not WeakAurasSaved.Cyka.CLEUExample then WeakAurasSaved.Cyka.CLEUExample = {} end +--/run WeakAurasSaved.Cyka.CLEUExample = {} +---@param spellName string +---@param spellId number +---@param subevent string +---@param ... any +aura_env.LogSpell = function(spellName, spellId, subevent, ...) + -- table.insert(WeakAurasSaved.Cyka.CLEUExample, varargToString(spellName, spellId, subevent, ...)) +end diff --git a/FreshShit/RaiderlosSA/logger.lua b/WeakAuras/Projects/RaiderlosSA/logger.lua similarity index 96% rename from FreshShit/RaiderlosSA/logger.lua rename to WeakAuras/Projects/RaiderlosSA/logger.lua index f05b50c..e4358f1 100644 --- a/FreshShit/RaiderlosSA/logger.lua +++ b/WeakAuras/Projects/RaiderlosSA/logger.lua @@ -1,13 +1,13 @@ ---- COMBAT_LOG_EVENT_UNFILTERED ----@param e string ----@param ... any -function(e, ...) - local spellName, err = CLEUParser.GetSpellName(...) - if err then return end - local spellId, err = CLEUParser.GetSpellId(...) - if err then return end - local subevent, err = CLEUParser.GetSubevent(...) - if err then return end - aura_env.LogSpell(spellName, spellId, subevent, ...) -end +--- COMBAT_LOG_EVENT_UNFILTERED +---@param e string +---@param ... any +function(e, ...) + local spellName, err = CLEUParser.GetSpellName(...) + if err then return end + local spellId, err = CLEUParser.GetSpellId(...) + if err then return end + local subevent, err = CLEUParser.GetSubevent(...) + if err then return end + aura_env.LogSpell(spellName, spellId, subevent, ...) +end \ No newline at end of file diff --git a/WeakAuras/Projects/RaiderlosSA/out/162135.txt b/WeakAuras/Projects/RaiderlosSA/out/162135.txt new file mode 100644 index 0000000..e69de29 diff --git a/WeakAuras/Projects/RaiderlosSA/out/185539.txt b/WeakAuras/Projects/RaiderlosSA/out/185539.txt new file mode 100644 index 0000000..bdcedc3 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/185539.txt @@ -0,0 +1,13 @@ + ["185539-SPELL_PERIODIC_DAMAGE"] = "Rapid Rupture, 185539, SPELL_PERIODIC_DAMAGE, 1709839495.01, SPELL_PERIODIC_DAMAGE, false, Creature-0-67-1492-0-99801-000060B841, Destructor Tentacle, 2632, 0, Player-67-00282563, Fregath, 1298, 0, 185539, Rapid Rupture, 1, 32288, 0, 1, nil, nil, nil, false, false, false, false", + ["185539-SPELL_CAST_SUCCESS"] = "Rapid Rupture, 185539, SPELL_CAST_SUCCESS, 1709839460.962, SPELL_CAST_SUCCESS, false, Creature-0-67-1492-0-99801-000060A908, Destructor Tentacle, 68168, 0, Player-67-00282563, Fregath, 1298, 0, 185539, Rapid Rupture, 1", + ["185539-SPELL_AURA_REMOVED"] = "Rapid Rupture, 185539, SPELL_AURA_REMOVED, 1709839467.088, SPELL_AURA_REMOVED, false, Creature-0-67-1492-0-99801-000060A908, Destructor Tentacle, 2632, 0, Player-67-00282563, Fregath, 1298, 0, 185539, Rapid Rupture, 1, DEBUFF", + ["185539-SPELL_PERIODIC_MISSED"] = "Rapid Rupture, 185539, SPELL_PERIODIC_MISSED, 1709839461.485, SPELL_PERIODIC_MISSED, false, Creature-0-67-1492-0-99801-000060A908, Destructor Tentacle, 68168, 0, Player-67-00282563, Fregath, 1298, 0, 185539, Rapid Rupture, 1, ABSORB, false, 32820", + ["185539-SPELL_AURA_APPLIED"] = "Rapid Rupture, 185539, SPELL_AURA_APPLIED, 1709839461.017, SPELL_AURA_APPLIED, false, Creature-0-67-1492-0-99801-000060A908, Destructor Tentacle, 68168, 0, Player-67-00282563, Fregath, 1298, 0, 185539, Rapid Rupture, 1, DEBUFF", + ["185539-SPELL_AURA_APPLIED_DOSE"] = "Rapid Rupture, 185539, SPELL_AURA_APPLIED_DOSE, 1710449840.496, SPELL_AURA_APPLIED_DOSE, false, Creature-0-67-1492-0-99801-00006586C4, Destructor Tentacle, 2632, 0, Player-67-0020D015, Shadowhavoc, 1298, 0, 185539, Rapid Rupture, 1, DEBUFF, 2", + ["185539-SPELL_ABSORBED"] = "Rapid Rupture, 185539, SPELL_ABSORBED, 1709839461.485, SPELL_ABSORBED, false, Creature-0-67-1492-0-99801-000060A908, Destructor Tentacle, 68168, 0, Player-67-00282563, Fregath, 1298, 0, 185539, Rapid Rupture, 1, Player-67-00282563, Fregath, 1298, 0, 209388, Bulwark of Order, 2, 32820", + ["185539-SPELL_PERIODIC_DAMAGE"] = "Rapid Rupture, 185539, SPELL_PERIODIC_DAMAGE, 1710320844.496, SPELL_PERIODIC_DAMAGE, false, Creature-0-67-1492-0-99801-0000295A03, Destructor Tentacle, 2632, 0, Player-67-0029B09E, Чазусеаз, 1298, 0, 185539, Rapid Rupture, 1, 38560, 0, 1, nil, nil, nil, false, false, false, false", + ["185539-SPELL_CAST_SUCCESS"] = "Rapid Rupture, 185539, SPELL_CAST_SUCCESS, 1710320843.996, SPELL_CAST_SUCCESS, false, Creature-0-67-1492-0-99801-0000295A03, Destructor Tentacle, 2632, 0, Player-67-0029B09E, Чазусеаз, 1298, 0, 185539, Rapid Rupture, 1", + ["185539-SPELL_AURA_APPLIED"] = "Rapid Rupture, 185539, SPELL_AURA_APPLIED, 1710320844.029, SPELL_AURA_APPLIED, false, Creature-0-67-1492-0-99801-0000295A03, Destructor Tentacle, 2632, 0, Player-67-0029B09E, Чазусеаз, 1298, 0, 185539, Rapid Rupture, 1, DEBUFF", + ["185539-SPELL_PERIODIC_MISSED"] = "Rapid Rupture, 185539, SPELL_PERIODIC_MISSED, 1710324706.593, SPELL_PERIODIC_MISSED, false, Creature-0-67-1492-0-99801-00002DD1DE, Destructor Tentacle, 68168, 0, Player-67-00197F9E, Arakyl, 1298, 0, 185539, Rapid Rupture, 1, ABSORB, false, 33816", + ["185539-SPELL_ABSORBED"] = "Rapid Rupture, 185539, SPELL_ABSORBED, 1710324706.593, SPELL_ABSORBED, false, Creature-0-67-1492-0-99801-00002DD1DE, Destructor Tentacle, 68168, 0, Player-67-00197F9E, Arakyl, 1298, 0, 185539, Rapid Rupture, 1, Player-67-00197F9E, Arakyl, 1298, 0, 252545, Light of Absolarn, 8, 25701", + ["185539-SPELL_AURA_REMOVED"] = "Rapid Rupture, 185539, SPELL_AURA_REMOVED, 1710320850.063, SPELL_AURA_REMOVED, false, Creature-0-67-1492-0-99801-0000295A03, Destructor Tentacle, 2632, 0, Player-67-0029B09E, Чазусеаз, 1298, 0, 185539, Rapid Rupture, 1, DEBUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/188169.txt b/WeakAuras/Projects/RaiderlosSA/out/188169.txt new file mode 100644 index 0000000..970703c --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/188169.txt @@ -0,0 +1,5 @@ + ["188169-SPELL_CAST_START"] = "Razor Shards, 188169, SPELL_CAST_START, 1709812109.246, SPELL_CAST_START, false, Creature-0-67-1458-0-91003-0000337608, Rokmora, 68168, 0, , nil, -2147483648, -2147483648, 188169, Razor Shards, 8", + ["188169-SPELL_MISSED"] = "Razor Shards, 188169, SPELL_MISSED, 1710153122.628, SPELL_MISSED, false, Creature-0-67-1458-0-91003-00002D7302, Rokmora, 68168, 0, Pet-0-67-1458-0-78158-00002D9D76, Doomguard, 4369, 0, 188169, Razor Shards, 8, ABSORB, false, 20539", + ["188169-SPELL_CAST_SUCCESS"] = "Razor Shards, 188169, SPELL_CAST_SUCCESS, 1709812113.072, SPELL_CAST_SUCCESS, false, Creature-0-67-1458-0-91003-0000337608, Rokmora, 68168, 0, Creature-0-67-1458-0-91003-0000337608, Rokmora, 68168, 0, 188169, Razor Shards, 8", + ["188169-SPELL_ABSORBED"] = "Razor Shards, 188169, SPELL_ABSORBED, 1709840203.112, SPELL_ABSORBED, false, Creature-0-67-1458-0-91003-000061B4C3, Rokmora, 68168, 0, Player-67-00282563, Fregath, 1298, 0, 188169, Razor Shards, 8, Player-67-00282563, Fregath, 1298, 0, 209388, Bulwark of Order, 2, 516034", + ["188169-SPELL_DAMAGE"] = "Razor Shards, 188169, SPELL_DAMAGE, 1709812113.318, SPELL_DAMAGE, false, Creature-0-67-1458-0-91003-0000337608, Rokmora, 68168, 0, Player-67-002A36D8, Pakkan, 1298, 0, 188169, Razor Shards, 8, 1767516, -1, 8, nil, nil, nil, false, false, false, false", diff --git a/WeakAuras/Projects/RaiderlosSA/out/189469.txt b/WeakAuras/Projects/RaiderlosSA/out/189469.txt new file mode 100644 index 0000000..6a8c25e --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/189469.txt @@ -0,0 +1,5 @@ + ["189469-SPELL_MISSED"] = "Turn Kick, 189469, SPELL_MISSED, 1710084317.828, SPELL_MISSED, false, Creature-0-67-1493-0-100364-00004F0DA3, Spirit of Vengeance, 2632, 0, Player-67-00334D94, Злойпень, 1298, 0, 189469, Turn Kick, 1, DODGE, false", + ["189469-SPELL_DAMAGE"] = "Turn Kick, 189469, SPELL_DAMAGE, 1709813880.787, SPELL_DAMAGE, false, Creature-0-67-1493-0-100364-000034E6DD, Spirit of Vengeance, 68168, 0, Player-67-002C9B2F, Pakmann, 1298, 0, 189469, Turn Kick, 1, 113126, -1, 1, nil, nil, nil, false, false, false, false", + ["189469-SPELL_CAST_SUCCESS"] = "Turn Kick, 189469, SPELL_CAST_SUCCESS, 1709813880.787, SPELL_CAST_SUCCESS, false, Creature-0-67-1493-0-100364-000034E6DD, Spirit of Vengeance, 68168, 0, Player-67-002C9B2F, Pakmann, 1298, 0, 189469, Turn Kick, 1", + ["189469-SPELL_CAST_START"] = "Turn Kick, 189469, SPELL_CAST_START, 1709803396.005, SPELL_CAST_START, false, Creature-0-67-1493-0-100364-000029414A, Spirit of Vengeance, 68168, 0, , nil, -2147483648, -2147483648, 189469, Turn Kick, 1", + ["189469-SPELL_ABSORBED"] = "Turn Kick, 189469, SPELL_ABSORBED, 1710344983.429, SPELL_ABSORBED, false, Creature-0-67-1493-0-100364-000031769B, Spirit of Vengeance, 2632, 0, Player-67-0017E389, Димабравлик, 1298, 0, 189469, Turn Kick, 1, Player-67-0017E389, Димабравлик, 1298, 0, 209388, Bulwark of Order, 2, 142785", diff --git a/WeakAuras/Projects/RaiderlosSA/out/190620.txt b/WeakAuras/Projects/RaiderlosSA/out/190620.txt new file mode 100644 index 0000000..e69de29 diff --git a/WeakAuras/Projects/RaiderlosSA/out/190836.txt b/WeakAuras/Projects/RaiderlosSA/out/190836.txt new file mode 100644 index 0000000..e69de29 diff --git a/WeakAuras/Projects/RaiderlosSA/out/191284.txt b/WeakAuras/Projects/RaiderlosSA/out/191284.txt new file mode 100644 index 0000000..e835c76 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/191284.txt @@ -0,0 +1,8 @@ + ["191284-SPELL_DAMAGE"] = "Horn of Valor, 191284, SPELL_DAMAGE, 1710339246.105, SPELL_DAMAGE, false, Creature-0-67-1477-0-94960-0000298BAA, Hymdall, 68168, 0, Player-67-001D862F, Matveyko, 1298, 0, 191284, Horn of Valor, 1, 737714, -1, 1, nil, nil, nil, false, false, false, false", + ["191284-SPELL_ABSORBED"] = "Horn of Valor, 191284, SPELL_ABSORBED, 1710339246.105, SPELL_ABSORBED, false, Creature-0-67-1477-0-94960-0000298BAA, Hymdall, 68168, 0, Player-67-00161B12, Сэтх, 1298, 0, 191284, Horn of Valor, 1, Player-67-00161B12, Сэтх, 1298, 0, 252208, Refractive Shell, 2, 326943", + ["191284-SPELL_CAST_SUCCESS"] = "Horn of Valor, 191284, SPELL_CAST_SUCCESS, 1710339246.105, SPELL_CAST_SUCCESS, false, Creature-0-67-1477-0-94960-0000298BAA, Hymdall, 68168, 0, , nil, -2147483648, -2147483648, 191284, Horn of Valor, 1", + ["191284-SPELL_CAST_START"] = "Horn of Valor, 191284, SPELL_CAST_START, 1710339244.809, SPELL_CAST_START, false, Creature-0-67-1477-0-94960-0000298BAA, Hymdall, 68168, 0, , nil, -2147483648, -2147483648, 191284, Horn of Valor, 1", + ["191284-SPELL_DAMAGE"] = "Horn of Valor, 191284, SPELL_DAMAGE, 1709749130.837, SPELL_DAMAGE, false, Creature-0-67-1477-0-94960-0000434460, Hymdall, 68168, 0, Player-67-002C9240, Wilmarin, 1298, 0, 191284, Horn of Valor, 1, 668992, -1, 1, nil, nil, nil, false, false, false, false", + ["191284-SPELL_ABSORBED"] = "Horn of Valor, 191284, SPELL_ABSORBED, 1709749130.81, SPELL_ABSORBED, false, Creature-0-67-1477-0-94960-0000434460, Hymdall, 68168, 0, Player-67-002CCCC4, Jistx, 1298, 0, 191284, Horn of Valor, 1, Player-67-002CCCC4, Jistx, 1298, 0, 108366, Soul Leech, 32, 1233585", + ["191284-SPELL_CAST_SUCCESS"] = "Horn of Valor, 191284, SPELL_CAST_SUCCESS, 1709749130.837, SPELL_CAST_SUCCESS, false, Creature-0-67-1477-0-94960-0000434460, Hymdall, 68168, 0, , nil, -2147483648, -2147483648, 191284, Horn of Valor, 1", + ["191284-SPELL_CAST_START"] = "Horn of Valor, 191284, SPELL_CAST_START, 1709749129.516, SPELL_CAST_START, false, Creature-0-67-1477-0-94960-0000434460, Hymdall, 68168, 0, , nil, -2147483648, -2147483648, 191284, Horn of Valor, 1", diff --git a/WeakAuras/Projects/RaiderlosSA/out/191326.txt b/WeakAuras/Projects/RaiderlosSA/out/191326.txt new file mode 100644 index 0000000..baa54a6 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/191326.txt @@ -0,0 +1,5 @@ + ["191326-SPELL_AURA_APPLIED_DOSE"] = "Breath of Corruption, 191326, SPELL_AURA_APPLIED_DOSE, 1709815317.619, SPELL_AURA_APPLIED_DOSE, false, Creature-0-67-1466-0-99200-00003776A3, Dresaron, 68168, 0, Player-67-002C9B2F, Pakmann, 1298, 0, 191326, Breath of Corruption, 4, DEBUFF, 2", + ["191326-SPELL_AURA_APPLIED"] = "Breath of Corruption, 191326, SPELL_AURA_APPLIED, 1709815316.651, SPELL_AURA_APPLIED, false, Creature-0-67-1466-0-99200-00003776A3, Dresaron, 68168, 0, Player-67-002C9B2F, Pakmann, 1298, 0, 191326, Breath of Corruption, 4, DEBUFF", + ["191326-SPELL_DAMAGE"] = "Breath of Corruption, 191326, SPELL_DAMAGE, 1709815316.6, SPELL_DAMAGE, false, Creature-0-67-1466-0-99200-00003776A3, Dresaron, 68168, 0, Player-67-002C9B2F, Pakmann, 1298, 0, 191326, Breath of Corruption, 4, 3074110, -1, 4, nil, nil, nil, false, false, false, false", + ["191326-SPELL_AURA_REMOVED"] = "Breath of Corruption, 191326, SPELL_AURA_REMOVED, 1709815323.65, SPELL_AURA_REMOVED, false, Creature-0-67-1466-0-99200-00003776A3, Dresaron, 68168, 0, Player-67-002C9B2F, Pakmann, 1298, 0, 191326, Breath of Corruption, 4, DEBUFF", + ["191326-SPELL_DAMAGE"] = "Breath of Corruption, 191326, SPELL_DAMAGE, 1710322004.489, SPELL_DAMAGE, false, Creature-0-67-1466-0-99200-00002A7F4D, Dresaron, 2632, 0, Player-67-0029B09E, Чазусеаз, 1298, 0, 191326, Breath of Corruption, 4, 860100, -1, 4, nil, nil, nil, false, false, false, false", diff --git a/WeakAuras/Projects/RaiderlosSA/out/191735.txt b/WeakAuras/Projects/RaiderlosSA/out/191735.txt new file mode 100644 index 0000000..3103f40 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/191735.txt @@ -0,0 +1,2 @@ + ["191735-SPELL_CAST_SUCCESS"] = "Deafening Screech, 191735, SPELL_CAST_SUCCESS, 1709802824.843, SPELL_CAST_SUCCESS, false, Creature-0-67-1493-0-98954-0000294131, Felsworn Myrmidon, 2632, 0, , nil, -2147483648, -2147483648, 191735, Deafening Screech, 1", + ["191735-SPELL_CAST_START"] = "Deafening Screech, 191735, SPELL_CAST_START, 1709802745.898, SPELL_CAST_START, false, Creature-0-67-1493-0-98954-0000294117, Felsworn Myrmidon, 68168, 0, , nil, -2147483648, -2147483648, 191735, Deafening Screech, 1", diff --git a/WeakAuras/Projects/RaiderlosSA/out/191848.txt b/WeakAuras/Projects/RaiderlosSA/out/191848.txt new file mode 100644 index 0000000..e69de29 diff --git a/WeakAuras/Projects/RaiderlosSA/out/191976.txt b/WeakAuras/Projects/RaiderlosSA/out/191976.txt new file mode 100644 index 0000000..dfffd58 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/191976.txt @@ -0,0 +1,10 @@ + ["191976-SPELL_MISSED"] = "Arcing Bolt, 191976, SPELL_MISSED, 1710340075.375, SPELL_MISSED, false, Creature-0-67-1477-0-95833-000029F0A8, Hyrja, 68168, 0, Player-67-0034CC49, Иризен, 1298, 0, 191976, Arcing Bolt, 8, ABSORB, false, 2539728", + ["191976-SPELL_CAST_START"] = "Arcing Bolt, 191976, SPELL_CAST_START, 1710340042.315, SPELL_CAST_START, false, Creature-0-67-1477-0-95833-000029F0A8, Hyrja, 68168, 0, , nil, -2147483648, -2147483648, 191976, Arcing Bolt, 8", + ["191976-SPELL_DAMAGE"] = "Arcing Bolt, 191976, SPELL_DAMAGE, 1710340043.693, SPELL_DAMAGE, false, Creature-0-67-1477-0-95833-000029F0A8, Hyrja, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 64, 191976, Arcing Bolt, 8, 2179528, -1, 8, nil, nil, 1291523, false, false, false, false", + ["191976-SPELL_ABSORBED"] = "Arcing Bolt, 191976, SPELL_ABSORBED, 1710340043.678, SPELL_ABSORBED, false, Creature-0-67-1477-0-95833-000029F0A8, Hyrja, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 64, 191976, Arcing Bolt, 8, Player-67-002D9DD1, Succpotato, 1297, 64, 252208, Refractive Shell, 2, 312063", + ["191976-SPELL_CAST_SUCCESS"] = "Arcing Bolt, 191976, SPELL_CAST_SUCCESS, 1710340043.693, SPELL_CAST_SUCCESS, false, Creature-0-67-1477-0-95833-000029F0A8, Hyrja, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 64, 191976, Arcing Bolt, 8", + ["191976-SPELL_MISSED"] = "Arcing Bolt, 191976, SPELL_MISSED, 1709749498.289, SPELL_MISSED, false, Creature-0-67-1477-0-95833-000043ADE6, Hyrja, 68168, 0, Player-67-002C9240, Wilmarin, 1298, 64, 191976, Arcing Bolt, 8, ABSORB, false, 1733943", + ["191976-SPELL_CAST_START"] = "Arcing Bolt, 191976, SPELL_CAST_START, 1709749465.163, SPELL_CAST_START, false, Creature-0-67-1477-0-95833-000043ADE6, Hyrja, 68168, 0, , nil, -2147483648, -2147483648, 191976, Arcing Bolt, 8", + ["191976-SPELL_ABSORBED"] = "Arcing Bolt, 191976, SPELL_ABSORBED, 1709749498.289, SPELL_ABSORBED, false, Creature-0-67-1477-0-95833-000043ADE6, Hyrja, 68168, 0, Player-67-002C9240, Wilmarin, 1298, 64, 191976, Arcing Bolt, 8, Player-67-002C9240, Wilmarin, 1298, 64, 252545, Light of Absolarn, 8, 1733943", + ["191976-SPELL_CAST_SUCCESS"] = "Arcing Bolt, 191976, SPELL_CAST_SUCCESS, 1709749466.449, SPELL_CAST_SUCCESS, false, Creature-0-67-1477-0-95833-000043ADE6, Hyrja, 68168, 0, Player-67-0029CFE6, Cazahofks, 1298, 64, 191976, Arcing Bolt, 8", + ["191976-SPELL_DAMAGE"] = "Arcing Bolt, 191976, SPELL_DAMAGE, 1709749466.449, SPELL_DAMAGE, false, Creature-0-67-1477-0-95833-000043ADE6, Hyrja, 68168, 0, Player-67-0029CFE6, Cazahofks, 1298, 64, 191976, Arcing Bolt, 8, 2692127, -1, 8, nil, nil, nil, false, false, false, false", diff --git a/WeakAuras/Projects/RaiderlosSA/out/192018.txt b/WeakAuras/Projects/RaiderlosSA/out/192018.txt new file mode 100644 index 0000000..0835d8f --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/192018.txt @@ -0,0 +1,6 @@ + ["192018-SPELL_CAST_START"] = "Shield of Light, 192018, SPELL_CAST_START, 1710340062.979, SPELL_CAST_START, false, Creature-0-67-1477-0-95833-000029F0A8, Hyrja, 68168, 0, , nil, -2147483648, -2147483648, 192018, Shield of Light, 2", + ["192018-SPELL_CAST_SUCCESS"] = "Shield of Light, 192018, SPELL_CAST_SUCCESS, 1710340065.02, SPELL_CAST_SUCCESS, false, Creature-0-67-1477-0-95833-000029F0A8, Hyrja, 68168, 0, Player-67-001D862F, Matveyko, 1298, 0, 192018, Shield of Light, 2", + ["192018-SPELL_DAMAGE"] = "Shield of Light, 192018, SPELL_DAMAGE, 1710340065.02, SPELL_DAMAGE, false, Creature-0-67-1477-0-95833-000029F0A8, Hyrja, 68168, 0, Player-67-001D862F, Matveyko, 1298, 0, 192018, Shield of Light, 2, 4232015, -1, 2, nil, nil, nil, false, false, false, false", + ["192018-SPELL_CAST_SUCCESS"] = "Shield of Light, 192018, SPELL_CAST_SUCCESS, 1709749487.85, SPELL_CAST_SUCCESS, false, Creature-0-67-1477-0-95833-000043ADE6, Hyrja, 68168, 0, Player-67-002C9240, Wilmarin, 1298, 0, 192018, Shield of Light, 2", + ["192018-SPELL_DAMAGE"] = "Shield of Light, 192018, SPELL_DAMAGE, 1709749487.85, SPELL_DAMAGE, false, Creature-0-67-1477-0-95833-000043ADE6, Hyrja, 68168, 0, Player-67-002C9240, Wilmarin, 1298, 0, 192018, Shield of Light, 2, 6131612, -1, 2, nil, nil, nil, false, false, false, false", + ["192018-SPELL_CAST_START"] = "Shield of Light, 192018, SPELL_CAST_START, 1709749485.827, SPELL_CAST_START, false, Creature-0-67-1477-0-95833-000043ADE6, Hyrja, 68168, 0, , nil, -2147483648, -2147483648, 192018, Shield of Light, 2", diff --git a/WeakAuras/Projects/RaiderlosSA/out/192019.txt b/WeakAuras/Projects/RaiderlosSA/out/192019.txt new file mode 100644 index 0000000..6dfbe2b --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/192019.txt @@ -0,0 +1,8 @@ + ["192019-SPELL_AURA_REMOVED"] = "Lantern of Darkness, 192019, SPELL_AURA_REMOVED, 1709839107.293, SPELL_AURA_REMOVED, false, Creature-0-67-1492-0-97182-00005FA820, Night Watch Mariner, 68168, 0, Creature-0-67-1492-0-97182-00005FA820, Night Watch Mariner, 68168, 0, 192019, Lantern of Darkness, 32, BUFF", + ["192019-SPELL_CAST_START"] = "Lantern of Darkness, 192019, SPELL_CAST_START, 1709839100.246, SPELL_CAST_START, false, Creature-0-67-1492-0-97182-00005FA820, Night Watch Mariner, 68168, 0, , nil, -2147483648, -2147483648, 192019, Lantern of Darkness, 32", + ["192019-SPELL_AURA_APPLIED"] = "Lantern of Darkness, 192019, SPELL_AURA_APPLIED, 1709839101.286, SPELL_AURA_APPLIED, false, Creature-0-67-1492-0-97182-00005FA820, Night Watch Mariner, 68168, 0, Creature-0-67-1492-0-97182-00005FA820, Night Watch Mariner, 68168, 0, 192019, Lantern of Darkness, 32, BUFF", + ["192019-SPELL_CAST_SUCCESS"] = "Lantern of Darkness, 192019, SPELL_CAST_SUCCESS, 1709839101.286, SPELL_CAST_SUCCESS, false, Creature-0-67-1492-0-97182-00005FA820, Night Watch Mariner, 68168, 0, , nil, -2147483648, -2147483648, 192019, Lantern of Darkness, 32", + ["192019-SPELL_AURA_REMOVED"] = "Lantern of Darkness, 192019, SPELL_AURA_REMOVED, 1710320693.992, SPELL_AURA_REMOVED, false, Creature-0-67-1492-0-97182-00002911BD, Night Watch Mariner, 68168, 0, Creature-0-67-1492-0-97182-00002911BD, Night Watch Mariner, 68168, 0, 192019, Lantern of Darkness, 32, BUFF", + ["192019-SPELL_CAST_START"] = "Lantern of Darkness, 192019, SPELL_CAST_START, 1710320688.173, SPELL_CAST_START, false, Creature-0-67-1492-0-97182-00002911BD, Night Watch Mariner, 68168, 0, , nil, -2147483648, -2147483648, 192019, Lantern of Darkness, 32", + ["192019-SPELL_AURA_APPLIED"] = "Lantern of Darkness, 192019, SPELL_AURA_APPLIED, 1710320689.202, SPELL_AURA_APPLIED, false, Creature-0-67-1492-0-97182-00002911BD, Night Watch Mariner, 68168, 0, Creature-0-67-1492-0-97182-00002911BD, Night Watch Mariner, 68168, 0, 192019, Lantern of Darkness, 32, BUFF", + ["192019-SPELL_CAST_SUCCESS"] = "Lantern of Darkness, 192019, SPELL_CAST_SUCCESS, 1710320689.202, SPELL_CAST_SUCCESS, false, Creature-0-67-1492-0-97182-00002911BD, Night Watch Mariner, 68168, 0, , nil, -2147483648, -2147483648, 192019, Lantern of Darkness, 32", diff --git a/WeakAuras/Projects/RaiderlosSA/out/192048.txt b/WeakAuras/Projects/RaiderlosSA/out/192048.txt new file mode 100644 index 0000000..53f2fb2 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/192048.txt @@ -0,0 +1,4 @@ + ["192048-SPELL_AURA_REMOVED"] = "Expel Light, 192048, SPELL_AURA_REMOVED, 1710340072.541, SPELL_AURA_REMOVED, true, , nil, 68168, 0, Player-67-001D862F, Matveyko, 1298, 128, 192048, Expel Light, 2, DEBUFF", + ["192048-SPELL_AURA_APPLIED"] = "Expel Light, 192048, SPELL_AURA_APPLIED, 1710340069.549, SPELL_AURA_APPLIED, true, , nil, 68168, 0, Player-67-001D862F, Matveyko, 1298, 0, 192048, Expel Light, 2, DEBUFF", + ["192048-SPELL_AURA_REMOVED"] = "Expel Light, 192048, SPELL_AURA_REMOVED, 1709749467.023, SPELL_AURA_REMOVED, true, , nil, 68168, 0, Player-67-0034F511, Intrill, 1298, 128, 192048, Expel Light, 2, DEBUFF", + ["192048-SPELL_AURA_APPLIED"] = "Expel Light, 192048, SPELL_AURA_APPLIED, 1709749463.975, SPELL_AURA_APPLIED, true, , nil, 68168, 0, Player-67-0034F511, Intrill, 1298, 0, 192048, Expel Light, 2, DEBUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/192305.txt b/WeakAuras/Projects/RaiderlosSA/out/192305.txt new file mode 100644 index 0000000..e69de29 diff --git a/WeakAuras/Projects/RaiderlosSA/out/192307.txt b/WeakAuras/Projects/RaiderlosSA/out/192307.txt new file mode 100644 index 0000000..a0339b1 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/192307.txt @@ -0,0 +1,9 @@ + ["192307-SPELL_CAST_SUCCESS"] = "Sanctify, 192307, SPELL_CAST_SUCCESS, 1710340080.17, SPELL_CAST_SUCCESS, false, Creature-0-67-1477-0-95833-000029F0A8, Hyrja, 68168, 0, , nil, -2147483648, -2147483648, 192307, Sanctify, 2", + ["192307-SPELL_MISSED"] = "Sanctify, 192307, SPELL_MISSED, 1710340080.17, SPELL_MISSED, false, Creature-0-67-1477-0-95833-000029F0A8, Hyrja, 68168, 0, Player-67-0034CC49, Иризен, 1298, 128, 192307, Sanctify, 2, IMMUNE, false", + ["192307-SPELL_CAST_START"] = "Sanctify, 192307, SPELL_CAST_START, 1710340077.672, SPELL_CAST_START, false, Creature-0-67-1477-0-95833-000029F0A8, Hyrja, 68168, 0, , nil, -2147483648, -2147483648, 192307, Sanctify, 2", + ["192307-SPELL_AURA_REMOVED"] = "Sanctify, 192307, SPELL_AURA_REMOVED, 1710340089.172, SPELL_AURA_REMOVED, false, Creature-0-67-1477-0-95833-000029F0A8, Hyrja, 68168, 0, Creature-0-67-1477-0-95833-000029F0A8, Hyrja, 68168, 0, 192307, Sanctify, 2, BUFF", + ["192307-SPELL_AURA_APPLIED"] = "Sanctify, 192307, SPELL_AURA_APPLIED, 1710340080.191, SPELL_AURA_APPLIED, false, Creature-0-67-1477-0-95833-000029F0A8, Hyrja, 68168, 0, Creature-0-67-1477-0-95833-000029F0A8, Hyrja, 68168, 0, 192307, Sanctify, 2, BUFF", + ["192307-SPELL_CAST_SUCCESS"] = "Sanctify, 192307, SPELL_CAST_SUCCESS, 1709749503.089, SPELL_CAST_SUCCESS, false, Creature-0-67-1477-0-95833-000043ADE6, Hyrja, 2632, 0, , nil, -2147483648, -2147483648, 192307, Sanctify, 2", + ["192307-SPELL_AURA_REMOVED"] = "Sanctify, 192307, SPELL_AURA_REMOVED, 1709749512.144, SPELL_AURA_REMOVED, false, Creature-0-67-1477-0-95833-000043ADE6, Hyrja, 2632, 0, Creature-0-67-1477-0-95833-000043ADE6, Hyrja, 2632, 0, 192307, Sanctify, 2, BUFF", + ["192307-SPELL_AURA_APPLIED"] = "Sanctify, 192307, SPELL_AURA_APPLIED, 1709749503.089, SPELL_AURA_APPLIED, false, Creature-0-67-1477-0-95833-000043ADE6, Hyrja, 2632, 0, Creature-0-67-1477-0-95833-000043ADE6, Hyrja, 2632, 0, 192307, Sanctify, 2, BUFF", + ["192307-SPELL_CAST_START"] = "Sanctify, 192307, SPELL_CAST_START, 1709749500.555, SPELL_CAST_START, false, Creature-0-67-1477-0-95833-000043ADE6, Hyrja, 2632, 0, , nil, -2147483648, -2147483648, 192307, Sanctify, 2", diff --git a/WeakAuras/Projects/RaiderlosSA/out/192631.txt b/WeakAuras/Projects/RaiderlosSA/out/192631.txt new file mode 100644 index 0000000..a6604cc --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/192631.txt @@ -0,0 +1,2 @@ + ["192631-SPELL_CAST_SUCCESS"] = "Lava Wreath, 192631, SPELL_CAST_SUCCESS, 1710083969.903, SPELL_CAST_SUCCESS, false, Creature-0-67-1493-0-95886-00004F0D2F, Ash'Golm, 68168, 0, , nil, -2147483648, -2147483648, 192631, Lava Wreath, 1", + ["192631-SPELL_CAST_START"] = "Lava Wreath, 192631, SPELL_CAST_START, 1710083967.879, SPELL_CAST_START, false, Creature-0-67-1493-0-95886-00004F0D2F, Ash'Golm, 68168, 0, , nil, -2147483648, -2147483648, 192631, Lava Wreath, 1", diff --git a/WeakAuras/Projects/RaiderlosSA/out/193069.txt b/WeakAuras/Projects/RaiderlosSA/out/193069.txt new file mode 100644 index 0000000..25bc7fb --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/193069.txt @@ -0,0 +1,4 @@ + ["193069-SPELL_CAST_START"] = "Nightmares, 193069, SPELL_CAST_START, 1709813045.168, SPELL_CAST_START, false, Creature-0-67-1493-0-96587-000034CFF2, Felsworn Infester, 2632, 0, , nil, -2147483648, -2147483648, 193069, Nightmares, 32", + ["193069-SPELL_CAST_SUCCESS"] = "Nightmares, 193069, SPELL_CAST_SUCCESS, 1709813094.619, SPELL_CAST_SUCCESS, false, Creature-0-67-1493-0-96587-000034E67F, Felsworn Infester, 2632, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 193069, Nightmares, 32", + ["193069-SPELL_AURA_APPLIED"] = "Nightmares, 193069, SPELL_AURA_APPLIED, 1709813094.632, SPELL_AURA_APPLIED, false, Creature-0-67-1493-0-96587-000034E67F, Felsworn Infester, 2632, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 193069, Nightmares, 32, DEBUFF", + ["193069-SPELL_AURA_REMOVED"] = "Nightmares, 193069, SPELL_AURA_REMOVED, 1709813099.729, SPELL_AURA_REMOVED, false, Creature-0-67-1493-0-96587-000034E67F, Felsworn Infester, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 193069, Nightmares, 32, DEBUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/193364.txt b/WeakAuras/Projects/RaiderlosSA/out/193364.txt new file mode 100644 index 0000000..4ca0485 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/193364.txt @@ -0,0 +1,14 @@ + ["193364-SPELL_CAST_SUCCESS"] = "Screams of the Dead, 193364, SPELL_CAST_SUCCESS, 1709838923.275, SPELL_CAST_SUCCESS, false, Creature-0-67-1492-0-96756-00005FA7CF, Ymiron, the Fallen King, 68168, 0, , nil, -2147483648, -2147483648, 193364, Screams of the Dead, 32", + ["193364-SPELL_AURA_REMOVED"] = "Screams of the Dead, 193364, SPELL_AURA_REMOVED, 1710320652.782, SPELL_AURA_REMOVED, false, Creature-0-67-1492-0-96756-000029116D, Ymiron, the Fallen King, 68168, 0, Player-67-0029B09E, Чазусеаз, 1298, 0, 193364, Screams of the Dead, 32, DEBUFF", + ["193364-SPELL_MISSED"] = "Screams of the Dead, 193364, SPELL_MISSED, 1709940725.071, SPELL_MISSED, false, Creature-0-67-1492-0-96756-000074064E, Ymiron, the Fallen King, 68168, 0, Player-67-002B9144, Redoc, 1298, 0, 193364, Screams of the Dead, 32, IMMUNE, false", + ["193364-SPELL_DAMAGE"] = "Screams of the Dead, 193364, SPELL_DAMAGE, 1710320647.688, SPELL_DAMAGE, false, Creature-0-67-1492-0-96756-000029116D, Ymiron, the Fallen King, 68168, 0, Player-67-0029B09E, Чазусеаз, 1298, 0, 193364, Screams of the Dead, 32, 753758, -1, 32, nil, nil, nil, false, false, false, false", + ["193364-SPELL_CAST_START"] = "Screams of the Dead, 193364, SPELL_CAST_START, 1709838920.766, SPELL_CAST_START, false, Creature-0-67-1492-0-96756-00005FA7CF, Ymiron, the Fallen King, 68168, 0, , nil, -2147483648, -2147483648, 193364, Screams of the Dead, 32", + ["193364-SPELL_ABSORBED"] = "Screams of the Dead, 193364, SPELL_ABSORBED, 1710320647.671, SPELL_ABSORBED, false, Creature-0-67-1492-0-96756-000029116D, Ymiron, the Fallen King, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 193364, Screams of the Dead, 32, Player-67-002D9DD1, Succpotato, 1297, 0, 252208, Refractive Shell, 2, 316042", + ["193364-SPELL_AURA_APPLIED"] = "Screams of the Dead, 193364, SPELL_AURA_APPLIED, 1710320647.736, SPELL_AURA_APPLIED, false, Creature-0-67-1492-0-96756-000029116D, Ymiron, the Fallen King, 68168, 0, Player-67-0029B09E, Чазусеаз, 1298, 0, 193364, Screams of the Dead, 32, DEBUFF", + ["193364-SPELL_CAST_SUCCESS"] = "Screams of the Dead, 193364, SPELL_CAST_SUCCESS, 1710320648.857, SPELL_CAST_SUCCESS, false, Creature-0-67-1492-0-96756-000029116D, Ymiron, the Fallen King, 2632, 0, , nil, -2147483648, -2147483648, 193364, Screams of the Dead, 32", + ["193364-SPELL_AURA_APPLIED"] = "Screams of the Dead, 193364, SPELL_AURA_APPLIED, 1710320648.923, SPELL_AURA_APPLIED, false, Creature-0-67-1492-0-96756-000029116D, Ymiron, the Fallen King, 2632, 0, Player-67-0029B09E, Чазусеаз, 1298, 0, 193364, Screams of the Dead, 32, DEBUFF", + ["193364-SPELL_AURA_REMOVED"] = "Screams of the Dead, 193364, SPELL_AURA_REMOVED, 1710320653.957, SPELL_AURA_REMOVED, false, Creature-0-67-1492-0-96756-000029116D, Ymiron, the Fallen King, 2632, 0, Player-67-0029B09E, Чазусеаз, 1298, 0, 193364, Screams of the Dead, 32, DEBUFF", + ["193364-SPELL_MISSED"] = "Screams of the Dead, 193364, SPELL_MISSED, 1710320648.857, SPELL_MISSED, false, Creature-0-67-1492-0-96756-000029116D, Ymiron, the Fallen King, 2632, 0, Player-67-002D9DD1, Succpotato, 1298, 0, 193364, Screams of the Dead, 32, ABSORB, false, 803432", + ["193364-SPELL_DAMAGE"] = "Screams of the Dead, 193364, SPELL_DAMAGE, 1710320648.857, SPELL_DAMAGE, false, Creature-0-67-1492-0-96756-000029116D, Ymiron, the Fallen King, 2632, 0, Player-67-0029B09E, Чазусеаз, 1298, 0, 193364, Screams of the Dead, 32, 753758, -1, 32, nil, nil, nil, false, false, false, false", + ["193364-SPELL_CAST_START"] = "Screams of the Dead, 193364, SPELL_CAST_START, 1710320646.323, SPELL_CAST_START, false, Creature-0-67-1492-0-96756-000029116D, Ymiron, the Fallen King, 2632, 0, , nil, -2147483648, -2147483648, 193364, Screams of the Dead, 32", + ["193364-SPELL_ABSORBED"] = "Screams of the Dead, 193364, SPELL_ABSORBED, 1710320648.857, SPELL_ABSORBED, false, Creature-0-67-1492-0-96756-000029116D, Ymiron, the Fallen King, 2632, 0, Player-67-002D9DD1, Succpotato, 1298, 0, 193364, Screams of the Dead, 32, Player-67-002D9DD1, Succpotato, 1298, 0, 252208, Refractive Shell, 2, 316042", diff --git a/WeakAuras/Projects/RaiderlosSA/out/193585.txt b/WeakAuras/Projects/RaiderlosSA/out/193585.txt new file mode 100644 index 0000000..d1de7ba --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/193585.txt @@ -0,0 +1,8 @@ + ["193585-SPELL_PERIODIC_DAMAGE"] = "Bound, 193585, SPELL_PERIODIC_DAMAGE, 1709841425.298, SPELL_PERIODIC_DAMAGE, false, Creature-0-67-1458-0-102232-000061B4FE, Rockbound Trapper, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 193585, Bound, 1, 274585, 0, 1, nil, nil, 91974, false, false, false, false", + ["193585-SPELL_PERIODIC_MISSED"] = "Bound, 193585, SPELL_PERIODIC_MISSED, 1709841423.338, SPELL_PERIODIC_MISSED, false, Creature-0-67-1458-0-102232-000061B4FE, Rockbound Trapper, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 193585, Bound, 1, ABSORB, false, 366559", + ["193585-SPELL_CAST_SUCCESS"] = "Bound, 193585, SPELL_CAST_SUCCESS, 1709812618.285, SPELL_CAST_SUCCESS, false, Creature-0-67-1458-0-102232-0000337643, Rockbound Trapper, 2632, 0, Player-67-002A36D8, Pakkan, 1298, 0, 193585, Bound, 1", + ["193585-SPELL_ABSORBED"] = "Bound, 193585, SPELL_ABSORBED, 1709841423.338, SPELL_ABSORBED, false, Creature-0-67-1458-0-102232-000061B4FE, Rockbound Trapper, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 193585, Bound, 1, Player-67-002D9DD1, Succpotato, 1297, 0, 108366, Soul Leech, 32, 366559", + ["193585-SPELL_AURA_REMOVED"] = "Bound, 193585, SPELL_AURA_REMOVED, 1709841427.393, SPELL_AURA_REMOVED, false, Creature-0-67-1458-0-102232-000061B4FE, Rockbound Trapper, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 193585, Bound, 1, DEBUFF", + ["193585-SPELL_CAST_START"] = "Bound, 193585, SPELL_CAST_START, 1709812615.859, SPELL_CAST_START, false, Creature-0-67-1458-0-102232-0000337643, Rockbound Trapper, 2632, 0, , nil, -2147483648, -2147483648, 193585, Bound, 1", + ["193585-SPELL_MISSED"] = "Bound, 193585, SPELL_MISSED, 1709812618.974, SPELL_MISSED, false, Creature-0-67-1458-0-102232-0000337643, Rockbound Trapper, 2632, 0, Player-67-002A36D8, Pakkan, 1298, 0, 193585, Bound, 1, DODGE, false", + ["193585-SPELL_AURA_APPLIED"] = "Bound, 193585, SPELL_AURA_APPLIED, 1709841423.338, SPELL_AURA_APPLIED, false, Creature-0-67-1458-0-102232-000061B4FE, Rockbound Trapper, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 193585, Bound, 1, DEBUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/193597.txt b/WeakAuras/Projects/RaiderlosSA/out/193597.txt new file mode 100644 index 0000000..1cd4a12 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/193597.txt @@ -0,0 +1,11 @@ + ["193597-SPELL_DAMAGE"] = "Static Nova, 193597, SPELL_DAMAGE, 1709915920.755, SPELL_DAMAGE, false, Creature-0-67-1456-0-91789-00004E9865, Lady Hatecoil, 68168, 0, Player-67-001A361E, Hullsa, 1298, 0, 193597, Static Nova, 8, 2160722, -1, 8, nil, nil, nil, false, false, false, false", + ["193597-SPELL_AURA_REMOVED"] = "Static Nova, 193597, SPELL_AURA_REMOVED, 1709915925.828, SPELL_AURA_REMOVED, false, Creature-0-67-1456-0-91789-00004E9865, Lady Hatecoil, 68168, 0, Player-67-001A361E, Hullsa, 1298, 0, 193597, Static Nova, 8, DEBUFF", + ["193597-SPELL_CAST_START"] = "Static Nova, 193597, SPELL_CAST_START, 1709915916.722, SPELL_CAST_START, false, Creature-0-67-1456-0-91789-00004E9865, Lady Hatecoil, 68168, 0, , nil, -2147483648, -2147483648, 193597, Static Nova, 8", + ["193597-SPELL_ABSORBED"] = "Static Nova, 193597, SPELL_ABSORBED, 1710106363.288, SPELL_ABSORBED, false, Creature-0-67-1456-0-91789-000077B198, Lady Hatecoil, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 193597, Static Nova, 8, Player-67-002D9DD1, Succpotato, 1297, 0, 108366, Soul Leech, 32, 966896", + ["193597-SPELL_AURA_APPLIED"] = "Static Nova, 193597, SPELL_AURA_APPLIED, 1709915920.799, SPELL_AURA_APPLIED, false, Creature-0-67-1456-0-91789-00004E9865, Lady Hatecoil, 68168, 0, Player-67-001A361E, Hullsa, 1298, 0, 193597, Static Nova, 8, DEBUFF", + ["193597-SPELL_CAST_SUCCESS"] = "Static Nova, 193597, SPELL_CAST_SUCCESS, 1709915920.755, SPELL_CAST_SUCCESS, false, Creature-0-67-1456-0-91789-00004E9865, Lady Hatecoil, 68168, 0, , nil, -2147483648, -2147483648, 193597, Static Nova, 8", + ["193597-SPELL_DAMAGE"] = "Static Nova, 193597, SPELL_DAMAGE, 1710492979.506, SPELL_DAMAGE, false, Creature-0-67-1456-0-91789-00001FCEB7, Lady Hatecoil, 68168, 0, Player-67-0033EEFC, Wafba, 1298, 0, 193597, Static Nova, 8, 7235790, -1, 8, nil, nil, nil, false, false, false, false", + ["193597-SPELL_AURA_REMOVED"] = "Static Nova, 193597, SPELL_AURA_REMOVED, 1710492984.521, SPELL_AURA_REMOVED, false, Creature-0-67-1456-0-91789-00001FCEB7, Lady Hatecoil, 2632, 0, Player-67-0033EEFC, Wafba, 1298, 0, 193597, Static Nova, 8, DEBUFF", + ["193597-SPELL_AURA_APPLIED"] = "Static Nova, 193597, SPELL_AURA_APPLIED, 1710492979.526, SPELL_AURA_APPLIED, false, Creature-0-67-1456-0-91789-00001FCEB7, Lady Hatecoil, 68168, 0, Player-67-0033EEFC, Wafba, 1298, 0, 193597, Static Nova, 8, DEBUFF", + ["193597-SPELL_CAST_SUCCESS"] = "Static Nova, 193597, SPELL_CAST_SUCCESS, 1710492909.415, SPELL_CAST_SUCCESS, false, Creature-0-67-1456-0-91789-00001FCEB7, Lady Hatecoil, 68168, 0, , nil, -2147483648, -2147483648, 193597, Static Nova, 8", + ["193597-SPELL_CAST_START"] = "Static Nova, 193597, SPELL_CAST_START, 1710325515.527, SPELL_CAST_START, false, Creature-0-67-1456-0-91789-00002E578F, Lady Hatecoil, 2632, 0, , nil, -2147483648, -2147483648, 193597, Static Nova, 8", diff --git a/WeakAuras/Projects/RaiderlosSA/out/193611.txt b/WeakAuras/Projects/RaiderlosSA/out/193611.txt new file mode 100644 index 0000000..cd0d6b7 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/193611.txt @@ -0,0 +1,9 @@ + ["193611-SPELL_DAMAGE"] = "Focused Lightning, 193611, SPELL_DAMAGE, 1710000026.613, SPELL_DAMAGE, false, Creature-0-67-1456-0-91789-00004E6217, Lady Hatecoil, 68168, 0, Player-67-003453A3, Notadh, 1298, 0, 193611, Focused Lightning, 8, 2963999, -1, 8, nil, nil, nil, false, false, false, false", + ["193611-SPELL_CAST_SUCCESS"] = "Focused Lightning, 193611, SPELL_CAST_SUCCESS, 1710000026.613, SPELL_CAST_SUCCESS, false, Creature-0-67-1456-0-91789-00004E6217, Lady Hatecoil, 68168, 0, , nil, -2147483648, -2147483648, 193611, Focused Lightning, 8", + ["193611-SPELL_ABSORBED"] = "Focused Lightning, 193611, SPELL_ABSORBED, 1710000026.6, SPELL_ABSORBED, false, Creature-0-67-1456-0-91789-00004E6217, Lady Hatecoil, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 193611, Focused Lightning, 8, Player-67-002D9DD1, Succpotato, 1297, 0, 207472, Xavaric's Magnum Opus, 1, 985382", + ["193611-SPELL_MISSED"] = "Focused Lightning, 193611, SPELL_MISSED, 1710106341.266, SPELL_MISSED, false, Creature-0-67-1456-0-91789-000077B198, Lady Hatecoil, 68168, 0, Player-67-0034DA6C, Yousheng, 1298, 0, 193611, Focused Lightning, 8, IMMUNE, false", + ["193611-SPELL_CAST_START"] = "Focused Lightning, 193611, SPELL_CAST_START, 1710000022.576, SPELL_CAST_START, false, Creature-0-67-1456-0-91789-00004E6217, Lady Hatecoil, 68168, 0, , nil, -2147483648, -2147483648, 193611, Focused Lightning, 8", + ["193611-SPELL_DAMAGE"] = "Focused Lightning, 193611, SPELL_DAMAGE, 1710492923.43, SPELL_DAMAGE, false, Creature-0-67-1456-0-91789-00001FCEB7, Lady Hatecoil, 68168, 0, Player-67-002D575C, Dememedruid, 1298, 0, 193611, Focused Lightning, 8, 2344194, -1, 8, nil, nil, 1128685, false, false, false, false", + ["193611-SPELL_CAST_START"] = "Focused Lightning, 193611, SPELL_CAST_START, 1710492919.39, SPELL_CAST_START, false, Creature-0-67-1456-0-91789-00001FCEB7, Lady Hatecoil, 68168, 0, , nil, -2147483648, -2147483648, 193611, Focused Lightning, 8", + ["193611-SPELL_CAST_SUCCESS"] = "Focused Lightning, 193611, SPELL_CAST_SUCCESS, 1710492923.43, SPELL_CAST_SUCCESS, false, Creature-0-67-1456-0-91789-00001FCEB7, Lady Hatecoil, 68168, 0, , nil, -2147483648, -2147483648, 193611, Focused Lightning, 8", + ["193611-SPELL_ABSORBED"] = "Focused Lightning, 193611, SPELL_ABSORBED, 1710492957.428, SPELL_ABSORBED, false, Creature-0-67-1456-0-91789-00001FCEB7, Lady Hatecoil, 68168, 0, Player-67-002D575C, Dememedruid, 1298, 0, 193611, Focused Lightning, 8, Player-67-001E41D9, Jasophine, 1298, 0, 203538, Greater Blessing of Kings, 2, 145617", diff --git a/WeakAuras/Projects/RaiderlosSA/out/193826.txt b/WeakAuras/Projects/RaiderlosSA/out/193826.txt new file mode 100644 index 0000000..29943d4 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/193826.txt @@ -0,0 +1,8 @@ + ["193826-SPELL_CAST_START"] = "Ragnarok, 193826, SPELL_CAST_START, 1710340724.008, SPELL_CAST_START, false, Vehicle-0-67-1477-0-95675-00002BAFB8, God-King Skovald, 68168, 0, , nil, -2147483648, -2147483648, 193826, Ragnarok, 4", + ["193826-SPELL_CAST_SUCCESS"] = "Ragnarok, 193826, SPELL_CAST_SUCCESS, 1710340727.015, SPELL_CAST_SUCCESS, false, Vehicle-0-67-1477-0-95675-00002BAFB8, God-King Skovald, 68168, 0, , nil, -2147483648, -2147483648, 193826, Ragnarok, 4", + ["193826-SPELL_AURA_REMOVED"] = "Ragnarok, 193826, SPELL_AURA_REMOVED, 1710340736.019, SPELL_AURA_REMOVED, false, Vehicle-0-67-1477-0-95675-00002BAFB8, God-King Skovald, 68168, 0, Vehicle-0-67-1477-0-95675-00002BAFB8, God-King Skovald, 68168, 0, 193826, Ragnarok, 4, BUFF", + ["193826-SPELL_AURA_APPLIED"] = "Ragnarok, 193826, SPELL_AURA_APPLIED, 1710340727.015, SPELL_AURA_APPLIED, false, Vehicle-0-67-1477-0-95675-00002BAFB8, God-King Skovald, 68168, 0, Vehicle-0-67-1477-0-95675-00002BAFB8, God-King Skovald, 68168, 0, 193826, Ragnarok, 4, BUFF", + ["193826-SPELL_CAST_START"] = "Ragnarok, 193826, SPELL_CAST_START, 1709750101.801, SPELL_CAST_START, false, Vehicle-0-67-1477-0-95675-000044F6B0, God-King Skovald, 68168, 0, , nil, -2147483648, -2147483648, 193826, Ragnarok, 4", + ["193826-SPELL_AURA_APPLIED"] = "Ragnarok, 193826, SPELL_AURA_APPLIED, 1709750104.799, SPELL_AURA_APPLIED, false, Vehicle-0-67-1477-0-95675-000044F6B0, God-King Skovald, 68168, 0, Vehicle-0-67-1477-0-95675-000044F6B0, God-King Skovald, 68168, 0, 193826, Ragnarok, 4, BUFF", + ["193826-SPELL_AURA_REMOVED"] = "Ragnarok, 193826, SPELL_AURA_REMOVED, 1709750113.872, SPELL_AURA_REMOVED, false, Vehicle-0-67-1477-0-95675-000044F6B0, God-King Skovald, 68168, 0, Vehicle-0-67-1477-0-95675-000044F6B0, God-King Skovald, 68168, 0, 193826, Ragnarok, 4, BUFF", + ["193826-SPELL_CAST_SUCCESS"] = "Ragnarok, 193826, SPELL_CAST_SUCCESS, 1709750104.799, SPELL_CAST_SUCCESS, false, Vehicle-0-67-1477-0-95675-000044F6B0, God-King Skovald, 68168, 0, , nil, -2147483648, -2147483648, 193826, Ragnarok, 4", diff --git a/WeakAuras/Projects/RaiderlosSA/out/194099.txt b/WeakAuras/Projects/RaiderlosSA/out/194099.txt new file mode 100644 index 0000000..f1e0bdc --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/194099.txt @@ -0,0 +1,12 @@ + ["194099-SPELL_CAST_SUCCESS"] = "Bile Breath, 194099, SPELL_CAST_SUCCESS, 1709839126.653, SPELL_CAST_SUCCESS, false, Creature-0-67-1492-0-97185-00005FA80F, The Grimewalker, 68168, 0, , nil, -2147483648, -2147483648, 194099, Bile Breath, 8", + ["194099-SPELL_AURA_REMOVED"] = "Bile Breath, 194099, SPELL_AURA_REMOVED, 1709839127.876, SPELL_AURA_REMOVED, false, Creature-0-67-1492-0-97185-00005FA80F, The Grimewalker, 68168, 0, Player-67-00340A28, Gunwomen, 1298, 0, 194099, Bile Breath, 8, DEBUFF", + ["194099-SPELL_CAST_START"] = "Bile Breath, 194099, SPELL_CAST_START, 1709839123.612, SPELL_CAST_START, false, Creature-0-67-1492-0-97185-00005FA80F, The Grimewalker, 68168, 0, , nil, -2147483648, -2147483648, 194099, Bile Breath, 8", + ["194099-SPELL_AURA_APPLIED"] = "Bile Breath, 194099, SPELL_AURA_APPLIED, 1709839126.702, SPELL_AURA_APPLIED, false, Creature-0-67-1492-0-97185-00005FA80F, The Grimewalker, 68168, 0, Player-67-00340A28, Gunwomen, 1298, 0, 194099, Bile Breath, 8, DEBUFF", + ["194099-SPELL_ABSORBED"] = "Bile Breath, 194099, SPELL_ABSORBED, 1709839142.328, SPELL_ABSORBED, false, Creature-0-67-1492-0-97185-00005FA80F, The Grimewalker, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 194099, Bile Breath, 8, Player-67-002D9DD1, Succpotato, 1297, 0, 252208, Refractive Shell, 2, 313402", + ["194099-SPELL_MISSED"] = "Bile Breath, 194099, SPELL_MISSED, 1709839142.303, SPELL_MISSED, false, Creature-0-67-1492-0-97185-00005FA80F, The Grimewalker, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 194099, Bile Breath, 8, ABSORB, false, 4039685", + ["194099-SPELL_DAMAGE"] = "Bile Breath, 194099, SPELL_DAMAGE, 1709839126.653, SPELL_DAMAGE, false, Creature-0-67-1492-0-97185-00005FA80F, The Grimewalker, 68168, 0, Player-67-00340A28, Gunwomen, 1298, 0, 194099, Bile Breath, 8, 3489754, -1, 8, nil, nil, nil, false, false, false, false", + ["194099-SPELL_CAST_SUCCESS"] = "Bile Breath, 194099, SPELL_CAST_SUCCESS, 1710320712.865, SPELL_CAST_SUCCESS, false, Creature-0-67-1492-0-97185-00002911AC, The Grimewalker, 2632, 0, , nil, -2147483648, -2147483648, 194099, Bile Breath, 8", + ["194099-SPELL_AURA_REMOVED"] = "Bile Breath, 194099, SPELL_AURA_REMOVED, 1710320727.906, SPELL_AURA_REMOVED, false, Creature-0-67-1492-0-97185-00002911AC, The Grimewalker, 2632, 0, Player-67-0029B09E, Чазусеаз, 1298, 0, 194099, Bile Breath, 8, DEBUFF", + ["194099-SPELL_AURA_APPLIED"] = "Bile Breath, 194099, SPELL_AURA_APPLIED, 1710320712.932, SPELL_AURA_APPLIED, false, Creature-0-67-1492-0-97185-00002911AC, The Grimewalker, 2632, 0, Player-67-0029B09E, Чазусеаз, 1298, 0, 194099, Bile Breath, 8, DEBUFF", + ["194099-SPELL_CAST_START"] = "Bile Breath, 194099, SPELL_CAST_START, 1710320709.832, SPELL_CAST_START, false, Creature-0-67-1492-0-97185-00002911AC, The Grimewalker, 2632, 0, , nil, -2147483648, -2147483648, 194099, Bile Breath, 8", + ["194099-SPELL_DAMAGE"] = "Bile Breath, 194099, SPELL_DAMAGE, 1710320712.865, SPELL_DAMAGE, false, Creature-0-67-1492-0-97185-00002911AC, The Grimewalker, 2632, 0, Player-67-0029B09E, Чазусеаз, 1298, 0, 194099, Bile Breath, 8, 1139462, -1, 8, nil, nil, nil, false, false, false, false", diff --git a/WeakAuras/Projects/RaiderlosSA/out/194216.txt b/WeakAuras/Projects/RaiderlosSA/out/194216.txt new file mode 100644 index 0000000..d09b890 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/194216.txt @@ -0,0 +1,4 @@ + ["194216-SPELL_CAST_SUCCESS"] = "Cosmic Scythe, 194216, SPELL_CAST_SUCCESS, 1709839208.786, SPELL_CAST_SUCCESS, false, Creature-0-67-1492-0-96754-00005FA807, Harbaron, 68168, 0, , nil, -2147483648, -2147483648, 194216, Cosmic Scythe, 64", + ["194216-SPELL_CAST_START"] = "Cosmic Scythe, 194216, SPELL_CAST_START, 1709839207.267, SPELL_CAST_START, false, Creature-0-67-1492-0-96754-00005FA807, Harbaron, 68168, 0, , nil, -2147483648, -2147483648, 194216, Cosmic Scythe, 64", + ["194216-SPELL_CAST_SUCCESS"] = "Cosmic Scythe, 194216, SPELL_CAST_SUCCESS, 1710320755.811, SPELL_CAST_SUCCESS, false, Creature-0-67-1492-0-96754-00002911A4, Harbaron, 2632, 0, , nil, -2147483648, -2147483648, 194216, Cosmic Scythe, 64", + ["194216-SPELL_CAST_START"] = "Cosmic Scythe, 194216, SPELL_CAST_START, 1710320754.277, SPELL_CAST_START, false, Creature-0-67-1492-0-96754-00002911A4, Harbaron, 2632, 0, , nil, -2147483648, -2147483648, 194216, Cosmic Scythe, 64", diff --git a/WeakAuras/Projects/RaiderlosSA/out/194325.txt b/WeakAuras/Projects/RaiderlosSA/out/194325.txt new file mode 100644 index 0000000..1873bd3 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/194325.txt @@ -0,0 +1,2 @@ + ["194325-SPELL_CAST_SUCCESS"] = "Fragment, 194325, SPELL_CAST_SUCCESS, 1709839226.15, SPELL_CAST_SUCCESS, false, Creature-0-67-1492-0-96754-00005FA807, Harbaron, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 64, 194325, Fragment, 32", + ["194325-SPELL_CAST_START"] = "Fragment, 194325, SPELL_CAST_START, 1709839223.166, SPELL_CAST_START, false, Creature-0-67-1492-0-96754-00005FA807, Harbaron, 68168, 0, , nil, -2147483648, -2147483648, 194325, Fragment, 32", diff --git a/WeakAuras/Projects/RaiderlosSA/out/194442.txt b/WeakAuras/Projects/RaiderlosSA/out/194442.txt new file mode 100644 index 0000000..098898c --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/194442.txt @@ -0,0 +1,4 @@ + ["194442-SPELL_CAST_SUCCESS"] = "Six Pound Barrel, 194442, SPELL_CAST_SUCCESS, 1709839056.311, SPELL_CAST_SUCCESS, false, Creature-0-67-1492-0-99188-00005FA7FA, Waterlogged Soul Guard, 68168, 0, Player-67-00340A28, Gunwomen, 1298, 0, 194442, Six Pound Barrel, 16", + ["194442-SPELL_CAST_START"] = "Six Pound Barrel, 194442, SPELL_CAST_START, 1709839054.799, SPELL_CAST_START, false, Creature-0-67-1492-0-99188-00005FA7FA, Waterlogged Soul Guard, 68168, 0, , nil, -2147483648, -2147483648, 194442, Six Pound Barrel, 16", + ["194442-SPELL_CAST_SUCCESS"] = "Six Pound Barrel, 194442, SPELL_CAST_SUCCESS, 1710320669.769, SPELL_CAST_SUCCESS, false, Creature-0-67-1492-0-99188-00002911C1, Waterlogged Soul Guard, 2632, 0, Player-67-0020E0C2, Toofedka, 1298, 0, 194442, Six Pound Barrel, 16", + ["194442-SPELL_CAST_START"] = "Six Pound Barrel, 194442, SPELL_CAST_START, 1710320668.268, SPELL_CAST_START, false, Creature-0-67-1492-0-99188-00002911C1, Waterlogged Soul Guard, 68168, 0, , nil, -2147483648, -2147483648, 194442, Six Pound Barrel, 16", diff --git a/WeakAuras/Projects/RaiderlosSA/out/194615.txt b/WeakAuras/Projects/RaiderlosSA/out/194615.txt new file mode 100644 index 0000000..c2ea842 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/194615.txt @@ -0,0 +1,4 @@ + ["194615-SPELL_AURA_REMOVED"] = "Sea Legs, 194615, SPELL_AURA_REMOVED, 1709839068.797, SPELL_AURA_REMOVED, false, Creature-0-67-1492-0-98919-00005FA7FC, Seacursed Swiftblade, 2632, 0, Creature-0-67-1492-0-98919-00005FA7FC, Seacursed Swiftblade, 2632, 0, 194615, Sea Legs, 8, BUFF", + ["194615-SPELL_AURA_APPLIED"] = "Sea Legs, 194615, SPELL_AURA_APPLIED, 1709839062.76, SPELL_AURA_APPLIED, false, Creature-0-67-1492-0-98919-00005FA7FC, Seacursed Swiftblade, 2632, 0, Creature-0-67-1492-0-98919-00005FA7FC, Seacursed Swiftblade, 2632, 0, 194615, Sea Legs, 8, BUFF", + ["194615-SPELL_AURA_APPLIED"] = "Sea Legs, 194615, SPELL_AURA_APPLIED, 1710320681.478, SPELL_AURA_APPLIED, false, Creature-0-67-1492-0-98919-00002911C3, Seacursed Swiftblade, 68168, 0, Creature-0-67-1492-0-98919-00002911C3, Seacursed Swiftblade, 68168, 0, 194615, Sea Legs, 8, BUFF", + ["194615-SPELL_AURA_REMOVED"] = "Sea Legs, 194615, SPELL_AURA_REMOVED, 1710320684.56, SPELL_AURA_REMOVED, false, Creature-0-67-1492-0-98919-00002911C3, Seacursed Swiftblade, 2632, 0, Creature-0-67-1492-0-98919-00002911C3, Seacursed Swiftblade, 2632, 0, 194615, Sea Legs, 8, BUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/194945.txt b/WeakAuras/Projects/RaiderlosSA/out/194945.txt new file mode 100644 index 0000000..50ef178 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/194945.txt @@ -0,0 +1,5 @@ + ["194945-SPELL_PERIODIC_MISSED"] = "Lingering Gaze, 194945, SPELL_PERIODIC_MISSED, 1709813702.911, SPELL_PERIODIC_MISSED, false, Creature-0-67-1493-0-95887-000034E6F0, Glazer, 2632, 0, Player-67-0031DEC3, Darcsia, 1298, 0, 194945, Lingering Gaze, 32, ABSORB, false, 1287162", + ["194945-SPELL_ABSORBED"] = "Lingering Gaze, 194945, SPELL_ABSORBED, 1709803200.327, SPELL_ABSORBED, false, Creature-0-67-1493-0-95887-000029415D, Glazer, 68168, 0, Player-67-003516C9, Mistwrap, 1298, 0, 194945, Lingering Gaze, 32, Player-67-003516C9, Mistwrap, 1298, 0, 214423, Stance of the Mountain, 1, 200502", + ["194945-SPELL_AURA_REMOVED"] = "Lingering Gaze, 194945, SPELL_AURA_REMOVED, 1709803205.835, SPELL_AURA_REMOVED, false, Creature-0-67-1493-0-95887-000029415D, Glazer, 68168, 0, Player-67-003516C9, Mistwrap, 1298, 0, 194945, Lingering Gaze, 32, DEBUFF", + ["194945-SPELL_PERIODIC_DAMAGE"] = "Lingering Gaze, 194945, SPELL_PERIODIC_DAMAGE, 1709803200.287, SPELL_PERIODIC_DAMAGE, false, Creature-0-67-1493-0-95887-000029415D, Glazer, 68168, 0, Creature-0-67-1493-0-68467-0000296109, Pandaren Air Spirit, 4370, 0, 194945, Lingering Gaze, 32, 497255, 480107, 32, nil, nil, nil, false, false, false, false", + ["194945-SPELL_AURA_APPLIED"] = "Lingering Gaze, 194945, SPELL_AURA_APPLIED, 1709803200.327, SPELL_AURA_APPLIED, false, Creature-0-67-1493-0-95887-000029415D, Glazer, 68168, 0, Player-67-003516C9, Mistwrap, 1298, 0, 194945, Lingering Gaze, 32, DEBUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/194956.txt b/WeakAuras/Projects/RaiderlosSA/out/194956.txt new file mode 100644 index 0000000..1bc4619 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/194956.txt @@ -0,0 +1,7 @@ + ["194956-SPELL_AURA_APPLIED"] = "Reap Soul, 194956, SPELL_AURA_APPLIED, 1710074505.934, SPELL_AURA_APPLIED, false, Creature-0-88-1501-0-98542-000027E3CB, Amalgam of Souls, 68168, 0, Player-67-0033B422, Фрипал, 1298, 0, 194956, Reap Soul, 32, DEBUFF", + ["194956-SPELL_DAMAGE"] = "Reap Soul, 194956, SPELL_DAMAGE, 1710074505.87, SPELL_DAMAGE, false, Creature-0-88-1501-0-98542-000027E3CB, Amalgam of Souls, 68168, 0, Player-67-0033B422, Фрипал, 1298, 0, 194956, Reap Soul, 32, 1504485, -1, 32, nil, 1002990, nil, false, false, false, false", + ["194956-SPELL_ABSORBED"] = "Reap Soul, 194956, SPELL_ABSORBED, 1710444712.445, SPELL_ABSORBED, false, Creature-0-67-1501-0-98542-00005C4B6A, Amalgam of Souls, 68168, 0, Player-67-00282563, Fregath, 1298, 0, 194956, Reap Soul, 32, Player-67-00282563, Fregath, 1298, 0, 209388, Bulwark of Order, 2, 746306", + ["194956-SPELL_AURA_REMOVED"] = "Reap Soul, 194956, SPELL_AURA_REMOVED, 1710074535.963, SPELL_AURA_REMOVED, false, Creature-0-88-1501-0-98542-000027E3CB, Amalgam of Souls, 68168, 0, Player-67-0033B422, Фрипал, 1298, 0, 194956, Reap Soul, 32, DEBUFF", + ["194956-SPELL_AURA_APPLIED_DOSE"] = "Reap Soul, 194956, SPELL_AURA_APPLIED_DOSE, 1710074623.532, SPELL_AURA_APPLIED_DOSE, false, Creature-0-88-1501-0-98542-000027E3CB, Amalgam of Souls, 68168, 0, Player-67-0033B422, Фрипал, 1298, 0, 194956, Reap Soul, 32, DEBUFF, 2", + ["194956-SPELL_CAST_SUCCESS"] = "Reap Soul, 194956, SPELL_CAST_SUCCESS, 1710074505.87, SPELL_CAST_SUCCESS, false, Creature-0-88-1501-0-98542-000027E3CB, Amalgam of Souls, 68168, 0, , nil, -2147483648, -2147483648, 194956, Reap Soul, 32", + ["194956-SPELL_CAST_START"] = "Reap Soul, 194956, SPELL_CAST_START, 1710074502.849, SPELL_CAST_START, false, Creature-0-88-1501-0-98542-000027E3CB, Amalgam of Souls, 68168, 0, , nil, -2147483648, -2147483648, 194956, Reap Soul, 32", diff --git a/WeakAuras/Projects/RaiderlosSA/out/194996.txt b/WeakAuras/Projects/RaiderlosSA/out/194996.txt new file mode 100644 index 0000000..e69de29 diff --git a/WeakAuras/Projects/RaiderlosSA/out/195046.txt b/WeakAuras/Projects/RaiderlosSA/out/195046.txt new file mode 100644 index 0000000..e6ad3f4 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/195046.txt @@ -0,0 +1,4 @@ + ["195046-SPELL_CAST_SUCCESS"] = "Rejuvenating Waters, 195046, SPELL_CAST_SUCCESS, 1709798454.503, SPELL_CAST_SUCCESS, false, Creature-0-67-1456-0-95861-000024BABA, Hatecoil Oracle, 2632, 0, Creature-0-67-1456-0-91783-000024BA96, Hatecoil Stormweaver, 2632, 0, 195046, Rejuvenating Waters, 16", + ["195046-SPELL_CAST_START"] = "Rejuvenating Waters, 195046, SPELL_CAST_START, 1709798440.883, SPELL_CAST_START, false, Creature-0-67-1456-0-95861-000024BABB, Hatecoil Oracle, 2632, 0, , nil, -2147483648, -2147483648, 195046, Rejuvenating Waters, 16", + ["195046-SPELL_CAST_SUCCESS"] = "Rejuvenating Waters, 195046, SPELL_CAST_SUCCESS, 1710492236.827, SPELL_CAST_SUCCESS, false, Creature-0-67-1456-0-95861-00001FCE66, Hatecoil Oracle, 2632, 0, Creature-0-67-1456-0-91783-00001FCE63, Hatecoil Stormweaver, 2632, 0, 195046, Rejuvenating Waters, 16", + ["195046-SPELL_CAST_START"] = "Rejuvenating Waters, 195046, SPELL_CAST_START, 1710325383.291, SPELL_CAST_START, false, Creature-0-67-1456-0-95861-00002E574F, Hatecoil Oracle, 2632, 0, , nil, -2147483648, -2147483648, 195046, Rejuvenating Waters, 16", diff --git a/WeakAuras/Projects/RaiderlosSA/out/195129.txt b/WeakAuras/Projects/RaiderlosSA/out/195129.txt new file mode 100644 index 0000000..ae0dcae --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/195129.txt @@ -0,0 +1,7 @@ + ["195129-SPELL_MISSED"] = "Thundering Stomp, 195129, SPELL_MISSED, 1709798458.381, SPELL_MISSED, false, Creature-0-67-1456-0-91782-000024BAB1, Hatecoil Crusher, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 195129, Thundering Stomp, 8, ABSORB, false, 425892", + ["195129-SPELL_DAMAGE"] = "Thundering Stomp, 195129, SPELL_DAMAGE, 1709798458.381, SPELL_DAMAGE, false, Creature-0-67-1456-0-91782-000024BAB1, Hatecoil Crusher, 68168, 0, Player-67-002E9414, Foreverdown, 1298, 0, 195129, Thundering Stomp, 8, 435429, -1, 8, nil, nil, nil, false, false, false, false", + ["195129-SPELL_CAST_SUCCESS"] = "Thundering Stomp, 195129, SPELL_CAST_SUCCESS, 1709798458.381, SPELL_CAST_SUCCESS, false, Creature-0-67-1456-0-91782-000024BAB1, Hatecoil Crusher, 68168, 0, , nil, -2147483648, -2147483648, 195129, Thundering Stomp, 8", + ["195129-SPELL_AURA_REMOVED"] = "Thundering Stomp, 195129, SPELL_AURA_REMOVED, 1709798459.474, SPELL_AURA_REMOVED, false, Creature-0-67-1456-0-91782-000024BAB1, Hatecoil Crusher, 68168, 0, Player-67-00318352, Shortcake, 1298, 0, 195129, Thundering Stomp, 8, DEBUFF", + ["195129-SPELL_AURA_APPLIED"] = "Thundering Stomp, 195129, SPELL_AURA_APPLIED, 1709798458.443, SPELL_AURA_APPLIED, false, Creature-0-67-1456-0-91782-000024BAB1, Hatecoil Crusher, 68168, 0, Player-67-00318352, Shortcake, 1298, 0, 195129, Thundering Stomp, 8, DEBUFF", + ["195129-SPELL_CAST_START"] = "Thundering Stomp, 195129, SPELL_CAST_START, 1709798455.374, SPELL_CAST_START, false, Creature-0-67-1456-0-91782-000024BAB1, Hatecoil Crusher, 2632, 0, , nil, -2147483648, -2147483648, 195129, Thundering Stomp, 8", + ["195129-SPELL_ABSORBED"] = "Thundering Stomp, 195129, SPELL_ABSORBED, 1709798458.381, SPELL_ABSORBED, false, Creature-0-67-1456-0-91782-000024BAB1, Hatecoil Crusher, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 195129, Thundering Stomp, 8, Player-67-002D9DD1, Succpotato, 1297, 0, 108416, Dark Pact, 1, 425892", diff --git a/WeakAuras/Projects/RaiderlosSA/out/195172.txt b/WeakAuras/Projects/RaiderlosSA/out/195172.txt new file mode 100644 index 0000000..3fa5ba3 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/195172.txt @@ -0,0 +1,5 @@ + ["195172-SPELL_ABSORBED"] = "Mighty Slam, 195172, SPELL_ABSORBED, 1709817918.153, SPELL_ABSORBED, false, Creature-0-67-1456-0-91782-00003ACD63, Hatecoil Crusher, 2632, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 195172, Mighty Slam, 1, Player-67-002D9DD1, Succpotato, 1297, 0, 207472, Xavaric's Magnum Opus, 1, 436235", + ["195172-SPELL_MISSED"] = "Mighty Slam, 195172, SPELL_MISSED, 1709817918.153, SPELL_MISSED, false, Creature-0-67-1456-0-91782-00003ACD63, Hatecoil Crusher, 2632, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 195172, Mighty Slam, 1, ABSORB, false, 436235", + ["195172-SPELL_CAST_START"] = "Mighty Slam, 195172, SPELL_CAST_START, 1709798451.748, SPELL_CAST_START, false, Creature-0-67-1456-0-91782-000024BAB1, Hatecoil Crusher, 2632, 0, , nil, -2147483648, -2147483648, 195172, Mighty Slam, 1", + ["195172-SPELL_CAST_SUCCESS"] = "Mighty Slam, 195172, SPELL_CAST_SUCCESS, 1709798454.246, SPELL_CAST_SUCCESS, false, Creature-0-67-1456-0-91782-000024BAB1, Hatecoil Crusher, 2632, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 195172, Mighty Slam, 1", + ["195172-SPELL_DAMAGE"] = "Mighty Slam, 195172, SPELL_DAMAGE, 1709798454.246, SPELL_DAMAGE, false, Creature-0-67-1456-0-91782-000024BAB1, Hatecoil Crusher, 2632, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 195172, Mighty Slam, 1, 905146, -1, 1, nil, nil, nil, false, false, false, false", diff --git a/WeakAuras/Projects/RaiderlosSA/out/195254.txt b/WeakAuras/Projects/RaiderlosSA/out/195254.txt new file mode 100644 index 0000000..574b5d8 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/195254.txt @@ -0,0 +1,4 @@ + ["195254-SPELL_CAST_SUCCESS"] = "Swirling Scythe, 195254, SPELL_CAST_SUCCESS, 1710074491.117, SPELL_CAST_SUCCESS, false, Creature-0-88-1501-0-98542-000027E3CB, Amalgam of Souls, 68168, 0, Player-88-000083FE, Данкан-legionx5, 1298, 128, 195254, Swirling Scythe, 1", + ["195254-SPELL_CAST_START"] = "Swirling Scythe, 195254, SPELL_CAST_START, 1710074490.618, SPELL_CAST_START, false, Creature-0-88-1501-0-98542-000027E3CB, Amalgam of Souls, 68168, 0, , nil, -2147483648, -2147483648, 195254, Swirling Scythe, 1", + ["195254-SPELL_CAST_SUCCESS"] = "Swirling Scythe, 195254, SPELL_CAST_SUCCESS, 1710160074.641, SPELL_CAST_SUCCESS, false, Creature-0-67-1501-0-98542-000035D694, Amalgam of Souls, 2632, 0, Player-67-002D9DD1, Succpotato, 1298, 0, 195254, Swirling Scythe, 1", + ["195254-SPELL_CAST_START"] = "Swirling Scythe, 195254, SPELL_CAST_START, 1710160074.075, SPELL_CAST_START, false, Creature-0-67-1501-0-98542-000035D694, Amalgam of Souls, 2632, 0, , nil, -2147483648, -2147483648, 195254, Swirling Scythe, 1", diff --git a/WeakAuras/Projects/RaiderlosSA/out/195293.txt b/WeakAuras/Projects/RaiderlosSA/out/195293.txt new file mode 100644 index 0000000..5670eb5 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/195293.txt @@ -0,0 +1,2 @@ + ["195293-SPELL_CAST_START"] = "Debilitating Shout, 195293, SPELL_CAST_START, 1709839396.126, SPELL_CAST_START, false, Creature-0-67-1492-0-99307-00005FA836, Skjal, 68168, 0, , nil, -2147483648, -2147483648, 195293, Debilitating Shout, 8", + ["195293-SPELL_CAST_START"] = "Debilitating Shout, 195293, SPELL_CAST_START, 1710320804.429, SPELL_CAST_START, false, Creature-0-67-1492-0-99307-00002911D3, Skjal, 2632, 0, , nil, -2147483648, -2147483648, 195293, Debilitating Shout, 8", diff --git a/WeakAuras/Projects/RaiderlosSA/out/195791.txt b/WeakAuras/Projects/RaiderlosSA/out/195791.txt new file mode 100644 index 0000000..5657c62 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/195791.txt @@ -0,0 +1,2 @@ + ["195791-SPELL_CAST_SUCCESS"] = "Quarantine, 195791, SPELL_CAST_SUCCESS, 1709801500.015, SPELL_CAST_SUCCESS, false, Creature-0-67-1516-0-98205-000027CDF6, Corstilax, 68168, 0, , nil, -2147483648, -2147483648, 195791, Quarantine, 64", + ["195791-SPELL_CAST_START"] = "Quarantine, 195791, SPELL_CAST_START, 1709801498.023, SPELL_CAST_START, false, Creature-0-67-1516-0-98205-000027CDF6, Corstilax, 68168, 0, , nil, -2147483648, -2147483648, 195791, Quarantine, 64", diff --git a/WeakAuras/Projects/RaiderlosSA/out/196129.txt b/WeakAuras/Projects/RaiderlosSA/out/196129.txt new file mode 100644 index 0000000..05f8dd8 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/196129.txt @@ -0,0 +1,3 @@ + ["196129-SPELL_DAMAGE"] = "Spray Sand, 196129, SPELL_DAMAGE, 1709916009.311, SPELL_DAMAGE, false, Creature-0-67-1456-0-91790-00004E98C8, Mak'rana Siltwalker, 2632, 0, Player-67-001A361E, Hullsa, 1298, 0, 196129, Spray Sand, 8, 879459, -1, 8, nil, nil, nil, false, false, false, false", + ["196129-SPELL_ABSORBED"] = "Spray Sand, 196129, SPELL_ABSORBED, 1709798570.345, SPELL_ABSORBED, false, Creature-0-67-1456-0-91790-000024BB70, Mak'rana Siltwalker, 68168, 0, Player-88-00060D3C, Чмы-legionx5, 1298, 0, 196129, Spray Sand, 8, Player-88-00060D3C, Чмы-legionx5, 1298, 0, 207472, Xavaric's Magnum Opus, 1, 543377", + ["196129-SPELL_MISSED"] = "Spray Sand, 196129, SPELL_MISSED, 1709798570.367, SPELL_MISSED, false, Creature-0-67-1456-0-91790-000024BB70, Mak'rana Siltwalker, 68168, 0, Player-88-00060D3C, Чмы-legionx5, 1298, 0, 196129, Spray Sand, 8, ABSORB, false, 543377", diff --git a/WeakAuras/Projects/RaiderlosSA/out/196144.txt b/WeakAuras/Projects/RaiderlosSA/out/196144.txt new file mode 100644 index 0000000..33f366b --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/196144.txt @@ -0,0 +1,5 @@ + ["196144-SPELL_AURA_REMOVED"] = "Sandstorm, 196144, SPELL_AURA_REMOVED, 1709916027.631, SPELL_AURA_REMOVED, false, Creature-0-67-1456-0-91790-00004E98C8, Mak'rana Siltwalker, 2632, 0, Player-67-002E06C1, Yabadabaduu, 1298, 0, 196144, Sandstorm, 8, DEBUFF", + ["196144-SPELL_AURA_APPLIED"] = "Sandstorm, 196144, SPELL_AURA_APPLIED, 1709916015.594, SPELL_AURA_APPLIED, false, Creature-0-67-1456-0-91790-00004E98C8, Mak'rana Siltwalker, 2632, 0, Player-67-002E06C1, Yabadabaduu, 1298, 0, 196144, Sandstorm, 8, DEBUFF", + ["196144-SPELL_CAST_SUCCESS"] = "Sandstorm, 196144, SPELL_CAST_SUCCESS, 1709916015.564, SPELL_CAST_SUCCESS, false, Creature-0-67-1456-0-91790-00004E98C8, Mak'rana Siltwalker, 2632, 0, Player-67-002E06C1, Yabadabaduu, 1298, 0, 196144, Sandstorm, 8", + ["196144-SPELL_CAST_START"] = "Sandstorm, 196144, SPELL_CAST_START, 1709916014.031, SPELL_CAST_START, false, Creature-0-67-1456-0-91790-00004E98C8, Mak'rana Siltwalker, 2632, 0, , nil, -2147483648, -2147483648, 196144, Sandstorm, 8", + ["196144-SPELL_CAST_START"] = "Sandstorm, 196144, SPELL_CAST_START, 1710492688.527, SPELL_CAST_START, false, Creature-0-67-1456-0-91790-00001FCF23, Mak'rana Siltwalker, 68168, 0, , nil, -2147483648, -2147483648, 196144, Sandstorm, 8", diff --git a/WeakAuras/Projects/RaiderlosSA/out/196249.txt b/WeakAuras/Projects/RaiderlosSA/out/196249.txt new file mode 100644 index 0000000..6f915c0 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/196249.txt @@ -0,0 +1,2 @@ + ["196249-SPELL_CAST_START"] = "Meteor, 196249, SPELL_CAST_START, 1710083862.819, SPELL_CAST_START, false, Creature-0-67-1493-0-99649-000050A22B, Dreadlord Mendacius, 2632, 0, , nil, -2147483648, -2147483648, 196249, Meteor, 4", + ["196249-SPELL_CAST_SUCCESS"] = "Meteor, 196249, SPELL_CAST_SUCCESS, 1710083865.849, SPELL_CAST_SUCCESS, false, Creature-0-67-1493-0-99649-000050A22B, Dreadlord Mendacius, 68168, 0, , nil, -2147483648, -2147483648, 196249, Meteor, 4", diff --git a/WeakAuras/Projects/RaiderlosSA/out/196290.txt b/WeakAuras/Projects/RaiderlosSA/out/196290.txt new file mode 100644 index 0000000..ef82e3e --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/196290.txt @@ -0,0 +1,8 @@ + ["196290-SPELL_AURA_APPLIED"] = "Chaotic Tempest, 196290, SPELL_AURA_APPLIED, 1709818267.598, SPELL_AURA_APPLIED, false, Creature-0-67-1456-0-91792-00003C034D, Stormwake Hydra, 2632, 0, Creature-0-67-1456-0-91792-00003C034D, Stormwake Hydra, 2632, 0, 196290, Chaotic Tempest, 1, BUFF", + ["196290-SPELL_CAST_SUCCESS"] = "Chaotic Tempest, 196290, SPELL_CAST_SUCCESS, 1709818267.598, SPELL_CAST_SUCCESS, false, Creature-0-67-1456-0-91792-00003C034D, Stormwake Hydra, 2632, 0, , nil, -2147483648, -2147483648, 196290, Chaotic Tempest, 1", + ["196290-SPELL_AURA_REMOVED"] = "Chaotic Tempest, 196290, SPELL_AURA_REMOVED, 1709818270.588, SPELL_AURA_REMOVED, false, Creature-0-67-1456-0-91792-00003C034D, Stormwake Hydra, 2632, 0, Creature-0-67-1456-0-91792-00003C034D, Stormwake Hydra, 2632, 0, 196290, Chaotic Tempest, 1, BUFF", + ["196290-SPELL_CAST_START"] = "Chaotic Tempest, 196290, SPELL_CAST_START, 1709818266.557, SPELL_CAST_START, false, Creature-0-67-1456-0-91792-00003C034D, Stormwake Hydra, 2632, 0, , nil, -2147483648, -2147483648, 196290, Chaotic Tempest, 1", + ["196290-SPELL_AURA_REMOVED"] = "Chaotic Tempest, 196290, SPELL_AURA_REMOVED, 1710492485.889, SPELL_AURA_REMOVED, false, Creature-0-67-1456-0-91792-00001FCF29, Stormwake Hydra, 68168, 0, Creature-0-67-1456-0-91792-00001FCF29, Stormwake Hydra, 68168, 0, 196290, Chaotic Tempest, 1, BUFF", + ["196290-SPELL_CAST_SUCCESS"] = "Chaotic Tempest, 196290, SPELL_CAST_SUCCESS, 1710492482.867, SPELL_CAST_SUCCESS, false, Creature-0-67-1456-0-91792-00001FCF29, Stormwake Hydra, 68168, 0, , nil, -2147483648, -2147483648, 196290, Chaotic Tempest, 1", + ["196290-SPELL_AURA_APPLIED"] = "Chaotic Tempest, 196290, SPELL_AURA_APPLIED, 1710492482.867, SPELL_AURA_APPLIED, false, Creature-0-67-1456-0-91792-00001FCF29, Stormwake Hydra, 68168, 0, Creature-0-67-1456-0-91792-00001FCF29, Stormwake Hydra, 68168, 0, 196290, Chaotic Tempest, 1, BUFF", + ["196290-SPELL_CAST_START"] = "Chaotic Tempest, 196290, SPELL_CAST_START, 1710492481.827, SPELL_CAST_START, false, Creature-0-67-1456-0-91792-00001FCF29, Stormwake Hydra, 68168, 0, , nil, -2147483648, -2147483648, 196290, Chaotic Tempest, 1", diff --git a/WeakAuras/Projects/RaiderlosSA/out/196296.txt b/WeakAuras/Projects/RaiderlosSA/out/196296.txt new file mode 100644 index 0000000..6be2ce6 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/196296.txt @@ -0,0 +1,8 @@ + ["196296-SPELL_CAST_SUCCESS"] = "Roiling Storm, 196296, SPELL_CAST_SUCCESS, 1709818279.692, SPELL_CAST_SUCCESS, false, Creature-0-67-1456-0-91792-00003C034D, Stormwake Hydra, 2632, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 196296, Roiling Storm, 1", + ["196296-SPELL_CAST_START"] = "Roiling Storm, 196296, SPELL_CAST_START, 1709818278.667, SPELL_CAST_START, false, Creature-0-67-1456-0-91792-00003C034D, Stormwake Hydra, 2632, 0, , nil, -2147483648, -2147483648, 196296, Roiling Storm, 1", + ["196296-SPELL_AURA_REMOVED"] = "Roiling Storm, 196296, SPELL_AURA_REMOVED, 1709818280.708, SPELL_AURA_REMOVED, false, Creature-0-67-1456-0-91792-00003C034D, Stormwake Hydra, 2632, 0, Creature-0-67-1456-0-91792-00003C034D, Stormwake Hydra, 2632, 0, 196296, Roiling Storm, 1, BUFF", + ["196296-SPELL_AURA_APPLIED"] = "Roiling Storm, 196296, SPELL_AURA_APPLIED, 1709818279.692, SPELL_AURA_APPLIED, false, Creature-0-67-1456-0-91792-00003C034D, Stormwake Hydra, 2632, 0, Creature-0-67-1456-0-91792-00003C034D, Stormwake Hydra, 2632, 0, 196296, Roiling Storm, 1, BUFF", + ["196296-SPELL_CAST_SUCCESS"] = "Roiling Storm, 196296, SPELL_CAST_SUCCESS, 1710492494.897, SPELL_CAST_SUCCESS, false, Creature-0-67-1456-0-91792-00001FCF29, Stormwake Hydra, 68168, 0, Player-67-002D575C, Dememedruid, 1298, 0, 196296, Roiling Storm, 1", + ["196296-SPELL_CAST_START"] = "Roiling Storm, 196296, SPELL_CAST_START, 1710492493.894, SPELL_CAST_START, false, Creature-0-67-1456-0-91792-00001FCF29, Stormwake Hydra, 68168, 0, , nil, -2147483648, -2147483648, 196296, Roiling Storm, 1", + ["196296-SPELL_AURA_APPLIED"] = "Roiling Storm, 196296, SPELL_AURA_APPLIED, 1710492494.897, SPELL_AURA_APPLIED, false, Creature-0-67-1456-0-91792-00001FCF29, Stormwake Hydra, 68168, 0, Creature-0-67-1456-0-91792-00001FCF29, Stormwake Hydra, 68168, 0, 196296, Roiling Storm, 1, BUFF", + ["196296-SPELL_AURA_REMOVED"] = "Roiling Storm, 196296, SPELL_AURA_REMOVED, 1710492495.945, SPELL_AURA_REMOVED, false, Creature-0-67-1456-0-91792-00001FCF29, Stormwake Hydra, 68168, 0, Creature-0-67-1456-0-91792-00001FCF29, Stormwake Hydra, 68168, 0, 196296, Roiling Storm, 1, BUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/196392.txt b/WeakAuras/Projects/RaiderlosSA/out/196392.txt new file mode 100644 index 0000000..4aadc28 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/196392.txt @@ -0,0 +1 @@ + ["196392-SPELL_CAST_SUCCESS"] = "Overcharge Mana, 196392, SPELL_CAST_SUCCESS, 1710190361.142, SPELL_CAST_SUCCESS, false, Creature-0-67-1516-0-98203-000065F2F8, Ivanyr, 68168, 0, Creature-0-67-1516-0-98734-000065F2F9, Night Crystal, 2632, 0, 196392, Overcharge Mana, 64", diff --git a/WeakAuras/Projects/RaiderlosSA/out/196512.txt b/WeakAuras/Projects/RaiderlosSA/out/196512.txt new file mode 100644 index 0000000..e2d825e --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/196512.txt @@ -0,0 +1,8 @@ + ["196512-SPELL_MISSED"] = "Claw Frenzy, 196512, SPELL_MISSED, 1709898715.912, SPELL_MISSED, false, Creature-0-67-1477-0-95674-00003637A6, Fenryr, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 196512, Claw Frenzy, 1, ABSORB, false, 997453", + ["196512-SPELL_DAMAGE"] = "Claw Frenzy, 196512, SPELL_DAMAGE, 1709898774.165, SPELL_DAMAGE, false, Creature-0-67-1477-0-99868-0000363BED, Fenryr, 68168, 0, Player-67-00351FE4, Дусяхентай, 1298, 0, 196512, Claw Frenzy, 1, 170850, -1, 1, nil, nil, nil, false, false, false, false", + ["196512-SPELL_ABSORBED"] = "Claw Frenzy, 196512, SPELL_ABSORBED, 1709898715.912, SPELL_ABSORBED, false, Creature-0-67-1477-0-95674-00003637A6, Fenryr, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 196512, Claw Frenzy, 1, Player-67-002D9DD1, Succpotato, 1297, 0, 108366, Soul Leech, 32, 997453", + ["196512-SPELL_CAST_SUCCESS"] = "Claw Frenzy, 196512, SPELL_CAST_SUCCESS, 1709898715.912, SPELL_CAST_SUCCESS, false, Creature-0-67-1477-0-95674-00003637A6, Fenryr, 68168, 0, , nil, -2147483648, -2147483648, 196512, Claw Frenzy, 1", + ["196512-SPELL_MISSED"] = "Claw Frenzy, 196512, SPELL_MISSED, 1709749725.801, SPELL_MISSED, false, Creature-0-67-1477-0-95674-00004471AB, Fenryr, 2632, 128, Player-67-002C9240, Wilmarin, 1298, 0, 196512, Claw Frenzy, 1, ABSORB, false, 701068", + ["196512-SPELL_DAMAGE"] = "Claw Frenzy, 196512, SPELL_DAMAGE, 1709749712.174, SPELL_DAMAGE, false, Creature-0-67-1477-0-95674-00004471AB, Fenryr, 2632, 128, Player-67-002C9240, Wilmarin, 1298, 0, 196512, Claw Frenzy, 1, 1540810, -1, 1, nil, nil, nil, false, false, false, false", + ["196512-SPELL_ABSORBED"] = "Claw Frenzy, 196512, SPELL_ABSORBED, 1709749725.782, SPELL_ABSORBED, false, Creature-0-67-1477-0-95674-00004471AB, Fenryr, 2632, 128, Player-67-002C9240, Wilmarin, 1298, 0, 196512, Claw Frenzy, 1, Player-67-002C9240, Wilmarin, 1298, 0, 252545, Light of Absolarn, 8, 701068", + ["196512-SPELL_CAST_SUCCESS"] = "Claw Frenzy, 196512, SPELL_CAST_SUCCESS, 1709749712.174, SPELL_CAST_SUCCESS, false, Creature-0-67-1477-0-95674-00004471AB, Fenryr, 2632, 128, , nil, -2147483648, -2147483648, 196512, Claw Frenzy, 1", diff --git a/WeakAuras/Projects/RaiderlosSA/out/197105.txt b/WeakAuras/Projects/RaiderlosSA/out/197105.txt new file mode 100644 index 0000000..bc15d27 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/197105.txt @@ -0,0 +1,8 @@ + ["197105-SPELL_AURA_REMOVED"] = "Polymorph: Fish, 197105, SPELL_AURA_REMOVED, 1709818530.353, SPELL_AURA_REMOVED, false, Creature-0-67-1456-0-97171-00003ACDD6, Hatecoil Arcanist, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 197105, Polymorph: Fish, 64, DEBUFF", + ["197105-SPELL_CAST_START"] = "Polymorph: Fish, 197105, SPELL_CAST_START, 1709798499.456, SPELL_CAST_START, false, Creature-0-67-1456-0-97171-000024BB0A, Hatecoil Arcanist, 68168, 0, , nil, -2147483648, -2147483648, 197105, Polymorph: Fish, 64", + ["197105-SPELL_CAST_SUCCESS"] = "Polymorph: Fish, 197105, SPELL_CAST_SUCCESS, 1709818529.96, SPELL_CAST_SUCCESS, false, Creature-0-67-1456-0-97171-00003ACDD6, Hatecoil Arcanist, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 197105, Polymorph: Fish, 64", + ["197105-SPELL_AURA_APPLIED"] = "Polymorph: Fish, 197105, SPELL_AURA_APPLIED, 1709818530.006, SPELL_AURA_APPLIED, false, Creature-0-67-1456-0-97171-00003ACDD6, Hatecoil Arcanist, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 197105, Polymorph: Fish, 64, DEBUFF", + ["197105-SPELL_AURA_REMOVED"] = "Polymorph: Fish, 197105, SPELL_AURA_REMOVED, 1710493487.326, SPELL_AURA_REMOVED, false, Creature-0-67-1456-0-100249-00001FCEA8, Channeler Varisz, 2632, 0, Player-67-001E41D9, Jasophine, 1298, 0, 197105, Polymorph: Fish, 64, DEBUFF", + ["197105-SPELL_CAST_START"] = "Polymorph: Fish, 197105, SPELL_CAST_START, 1710325436.13, SPELL_CAST_START, false, Creature-0-67-1456-0-97171-00002E5793, Hatecoil Arcanist, 2632, 0, , nil, -2147483648, -2147483648, 197105, Polymorph: Fish, 64", + ["197105-SPELL_AURA_APPLIED"] = "Polymorph: Fish, 197105, SPELL_AURA_APPLIED, 1710493485.272, SPELL_AURA_APPLIED, false, Creature-0-67-1456-0-100249-00001FCEA8, Channeler Varisz, 2632, 0, Player-67-001E41D9, Jasophine, 1298, 0, 197105, Polymorph: Fish, 64, DEBUFF", + ["197105-SPELL_CAST_SUCCESS"] = "Polymorph: Fish, 197105, SPELL_CAST_SUCCESS, 1710493485.249, SPELL_CAST_SUCCESS, false, Creature-0-67-1456-0-100249-00001FCEA8, Channeler Varisz, 2632, 0, Player-67-001E41D9, Jasophine, 1298, 0, 197105, Polymorph: Fish, 64", diff --git a/WeakAuras/Projects/RaiderlosSA/out/197418.txt b/WeakAuras/Projects/RaiderlosSA/out/197418.txt new file mode 100644 index 0000000..b0791e5 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/197418.txt @@ -0,0 +1,8 @@ + ["197418-SPELL_MISSED"] = "Vengeful Shear, 197418, SPELL_MISSED, 1710181823.927, SPELL_MISSED, false, Vehicle-0-88-1501-0-98696-00002DA3C5, Illysanna Ravencrest, 68168, 0, Player-88-00008C31, Kusmanchik-legionx5, 1298, 0, 197418, Vengeful Shear, 1, ABSORB, false, 4598350", + ["197418-SPELL_CAST_START"] = "Vengeful Shear, 197418, SPELL_CAST_START, 1710075086.766, SPELL_CAST_START, false, Vehicle-0-88-1501-0-98696-000027E34B, Illysanna Ravencrest, 68168, 0, , nil, -2147483648, -2147483648, 197418, Vengeful Shear, 1", + ["197418-SPELL_ABSORBED"] = "Vengeful Shear, 197418, SPELL_ABSORBED, 1710075170.377, SPELL_ABSORBED, false, Vehicle-0-88-1501-0-98696-000027E34B, Illysanna Ravencrest, 68168, 0, Player-67-0033B422, Фрипал, 1298, 0, 197418, Vengeful Shear, 1, Player-67-0033B422, Фрипал, 1298, 0, 209388, Bulwark of Order, 2, 648260", + ["197418-SPELL_CAST_SUCCESS"] = "Vengeful Shear, 197418, SPELL_CAST_SUCCESS, 1710075089.271, SPELL_CAST_SUCCESS, false, Vehicle-0-88-1501-0-98696-000027E34B, Illysanna Ravencrest, 68168, 0, Player-67-0033B422, Фрипал, 1298, 0, 197418, Vengeful Shear, 1", + ["197418-SPELL_DAMAGE"] = "Vengeful Shear, 197418, SPELL_DAMAGE, 1710075089.271, SPELL_DAMAGE, false, Vehicle-0-88-1501-0-98696-000027E34B, Illysanna Ravencrest, 68168, 0, Player-67-0033B422, Фрипал, 1298, 0, 197418, Vengeful Shear, 1, 6970477, -1, 1, nil, 4646984, nil, false, false, false, false", + ["197418-SPELL_CAST_START"] = "Vengeful Shear, 197418, SPELL_CAST_START, 1710160243.841, SPELL_CAST_START, false, Vehicle-0-67-1501-0-98696-000035D5F7, Illysanna Ravencrest, 2632, 0, , nil, -2147483648, -2147483648, 197418, Vengeful Shear, 1", + ["197418-SPELL_DAMAGE"] = "Vengeful Shear, 197418, SPELL_DAMAGE, 1710160246.341, SPELL_DAMAGE, false, Vehicle-0-67-1501-0-98696-000035D5F7, Illysanna Ravencrest, 2632, 0, Player-67-00352047, Киряфистинг, 1298, 0, 197418, Vengeful Shear, 1, 883846, -1, 1, nil, nil, nil, false, false, false, false", + ["197418-SPELL_CAST_SUCCESS"] = "Vengeful Shear, 197418, SPELL_CAST_SUCCESS, 1710160246.341, SPELL_CAST_SUCCESS, false, Vehicle-0-67-1501-0-98696-000035D5F7, Illysanna Ravencrest, 2632, 0, Player-67-00352047, Киряфистинг, 1298, 0, 197418, Vengeful Shear, 1", diff --git a/WeakAuras/Projects/RaiderlosSA/out/197513.txt b/WeakAuras/Projects/RaiderlosSA/out/197513.txt new file mode 100644 index 0000000..e69de29 diff --git a/WeakAuras/Projects/RaiderlosSA/out/197799.txt b/WeakAuras/Projects/RaiderlosSA/out/197799.txt new file mode 100644 index 0000000..e69de29 diff --git a/WeakAuras/Projects/RaiderlosSA/out/197810.txt b/WeakAuras/Projects/RaiderlosSA/out/197810.txt new file mode 100644 index 0000000..ce795e5 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/197810.txt @@ -0,0 +1,5 @@ + ["197810-SPELL_CAST_START"] = "Wicked Slam, 197810, SPELL_CAST_START, 1710191584.865, SPELL_CAST_START, false, Creature-0-67-1516-0-98206-000065F210, General Xakal, 68168, 0, , nil, -2147483648, -2147483648, 197810, Wicked Slam, 1", + ["197810-SPELL_CAST_SUCCESS"] = "Wicked Slam, 197810, SPELL_CAST_SUCCESS, 1710191586.922, SPELL_CAST_SUCCESS, false, Creature-0-67-1516-0-98206-000065F210, General Xakal, 68168, 0, , nil, -2147483648, -2147483648, 197810, Wicked Slam, 1", + ["197810-SPELL_MISSED"] = "Wicked Slam, 197810, SPELL_MISSED, 1710191586.922, SPELL_MISSED, false, Creature-0-67-1516-0-98206-000065F210, General Xakal, 68168, 0, Player-67-002B9144, Redoc, 1298, 0, 197810, Wicked Slam, 1, DODGE, false", + ["197810-SPELL_ABSORBED"] = "Wicked Slam, 197810, SPELL_ABSORBED, 1710191586.922, SPELL_ABSORBED, false, Creature-0-67-1516-0-98206-000065F210, General Xakal, 68168, 0, Player-67-0034D3BE, Iamedgars, 1298, 0, 197810, Wicked Slam, 1, Player-67-0034D3BE, Iamedgars, 1298, 0, 235313, Blazing Barrier, 4, 655200", + ["197810-SPELL_DAMAGE"] = "Wicked Slam, 197810, SPELL_DAMAGE, 1710191586.922, SPELL_DAMAGE, false, Creature-0-67-1516-0-98206-000065F210, General Xakal, 68168, 0, Player-67-0034D3BE, Iamedgars, 1298, 0, 197810, Wicked Slam, 1, 4139244, -1, 1, nil, nil, 3977236, false, false, false, false", diff --git a/WeakAuras/Projects/RaiderlosSA/out/197961.txt b/WeakAuras/Projects/RaiderlosSA/out/197961.txt new file mode 100644 index 0000000..08b5e09 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/197961.txt @@ -0,0 +1,4 @@ + ["197961-SPELL_CAST_START"] = "Runic Brand, 197961, SPELL_CAST_START, 1710340870.156, SPELL_CAST_START, false, Creature-0-67-1477-0-95676-00002BAF9A, Odyn, 68168, 0, , nil, -2147483648, -2147483648, 197961, Runic Brand, 2", + ["197961-SPELL_CAST_SUCCESS"] = "Runic Brand, 197961, SPELL_CAST_SUCCESS, 1710340872.171, SPELL_CAST_SUCCESS, false, Creature-0-67-1477-0-95676-00002BAF9A, Odyn, 68168, 0, , nil, -2147483648, -2147483648, 197961, Runic Brand, 2", + ["197961-SPELL_CAST_START"] = "Runic Brand, 197961, SPELL_CAST_START, 1709750228.553, SPELL_CAST_START, false, Creature-0-67-1477-0-95676-000044F691, Odyn, 68168, 0, , nil, -2147483648, -2147483648, 197961, Runic Brand, 2", + ["197961-SPELL_CAST_SUCCESS"] = "Runic Brand, 197961, SPELL_CAST_SUCCESS, 1709750230.605, SPELL_CAST_SUCCESS, false, Creature-0-67-1477-0-95676-000044F691, Odyn, 68168, 0, , nil, -2147483648, -2147483648, 197961, Runic Brand, 2", diff --git a/WeakAuras/Projects/RaiderlosSA/out/198072.txt b/WeakAuras/Projects/RaiderlosSA/out/198072.txt new file mode 100644 index 0000000..e69de29 diff --git a/WeakAuras/Projects/RaiderlosSA/out/198079.txt b/WeakAuras/Projects/RaiderlosSA/out/198079.txt new file mode 100644 index 0000000..42df69c --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/198079.txt @@ -0,0 +1,4 @@ + ["198079-SPELL_AURA_APPLIED"] = "Hateful Gaze, 198079, SPELL_AURA_APPLIED, 1710075544.598, SPELL_AURA_APPLIED, false, Vehicle-0-88-1501-0-98949-000027E3F3, Smashspite the Hateful, 68168, 0, Player-88-000083FE, Данкан-legionx5, 1298, 0, 198079, Hateful Gaze, 1, DEBUFF", + ["198079-SPELL_AURA_REMOVED"] = "Hateful Gaze, 198079, SPELL_AURA_REMOVED, 1710075549.62, SPELL_AURA_REMOVED, false, Vehicle-0-88-1501-0-98949-000027E3F3, Smashspite the Hateful, 68168, 0, Player-88-000083FE, Данкан-legionx5, 1298, 0, 198079, Hateful Gaze, 1, DEBUFF", + ["198079-SPELL_CAST_SUCCESS"] = "Hateful Gaze, 198079, SPELL_CAST_SUCCESS, 1710075544.544, SPELL_CAST_SUCCESS, false, Vehicle-0-88-1501-0-98949-000027E3F3, Smashspite the Hateful, 68168, 0, Player-88-000083FE, Данкан-legionx5, 1298, 0, 198079, Hateful Gaze, 1", + ["198079-SPELL_CAST_SUCCESS"] = "Hateful Gaze, 198079, SPELL_CAST_SUCCESS, 1710160366.921, SPELL_CAST_SUCCESS, false, Vehicle-0-67-1501-0-98949-000035D6BC, Smashspite the Hateful, 2632, 0, Player-67-00353A34, Полезайнанож, 1298, 0, 198079, Hateful Gaze, 1", diff --git a/WeakAuras/Projects/RaiderlosSA/out/198245.txt b/WeakAuras/Projects/RaiderlosSA/out/198245.txt new file mode 100644 index 0000000..f170023 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/198245.txt @@ -0,0 +1,3 @@ + ["198245-SPELL_CAST_START"] = "Brutal Haymaker, 198245, SPELL_CAST_START, 1710075641.24, SPELL_CAST_START, false, Vehicle-0-88-1501-0-98949-000027E3F3, Smashspite the Hateful, 2632, 0, , nil, -2147483648, -2147483648, 198245, Brutal Haymaker, 1", + ["198245-SPELL_CAST_SUCCESS"] = "Brutal Haymaker, 198245, SPELL_CAST_SUCCESS, 1710075644.004, SPELL_CAST_SUCCESS, false, Vehicle-0-88-1501-0-98949-000027E3F3, Smashspite the Hateful, 2632, 0, Player-67-001CE101, Моннами, 1298, 0, 198245, Brutal Haymaker, 1", + ["198245-SPELL_DAMAGE"] = "Brutal Haymaker, 198245, SPELL_DAMAGE, 1710075644.004, SPELL_DAMAGE, false, Vehicle-0-88-1501-0-98949-000027E3F3, Smashspite the Hateful, 2632, 0, Player-67-001CE101, Моннами, 1298, 0, 198245, Brutal Haymaker, 1, 11825364, 9785153, 1, nil, nil, nil, false, false, false, false", diff --git a/WeakAuras/Projects/RaiderlosSA/out/198263.txt b/WeakAuras/Projects/RaiderlosSA/out/198263.txt new file mode 100644 index 0000000..aa81095 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/198263.txt @@ -0,0 +1,4 @@ + ["198263-SPELL_CAST_START"] = "Radiant Tempest, 198263, SPELL_CAST_START, 1710340849.342, SPELL_CAST_START, false, Creature-0-67-1477-0-95676-00002BAF9A, Odyn, 2632, 0, , nil, -2147483648, -2147483648, 198263, Radiant Tempest, 2", + ["198263-SPELL_CAST_SUCCESS"] = "Radiant Tempest, 198263, SPELL_CAST_SUCCESS, 1710340856.355, SPELL_CAST_SUCCESS, false, Creature-0-67-1477-0-95676-00002BAF9A, Odyn, 68168, 0, , nil, -2147483648, -2147483648, 198263, Radiant Tempest, 2", + ["198263-SPELL_CAST_SUCCESS"] = "Radiant Tempest, 198263, SPELL_CAST_SUCCESS, 1709750214.78, SPELL_CAST_SUCCESS, false, Creature-0-67-1477-0-95676-000044F691, Odyn, 68168, 0, , nil, -2147483648, -2147483648, 198263, Radiant Tempest, 2", + ["198263-SPELL_CAST_START"] = "Radiant Tempest, 198263, SPELL_CAST_START, 1709750207.718, SPELL_CAST_START, false, Creature-0-67-1477-0-95676-000044F691, Odyn, 68168, 0, , nil, -2147483648, -2147483648, 198263, Radiant Tempest, 2", diff --git a/WeakAuras/Projects/RaiderlosSA/out/198405.txt b/WeakAuras/Projects/RaiderlosSA/out/198405.txt new file mode 100644 index 0000000..8484a72 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/198405.txt @@ -0,0 +1,8 @@ + ["198405-SPELL_AURA_REMOVED"] = "Bone Chilling Scream, 198405, SPELL_AURA_REMOVED, 1709839304.426, SPELL_AURA_REMOVED, false, Creature-0-67-1492-0-97097-0000605795, Helarjar Champion, 2632, 0, Player-67-00352CA6, Cjmiles, 1298, 0, 198405, Bone Chilling Scream, 32, DEBUFF", + ["198405-SPELL_AURA_APPLIED"] = "Bone Chilling Scream, 198405, SPELL_AURA_APPLIED, 1709839304.37, SPELL_AURA_APPLIED, false, Creature-0-67-1492-0-97097-0000605795, Helarjar Champion, 2632, 0, Player-67-00352CA6, Cjmiles, 1298, 0, 198405, Bone Chilling Scream, 32, DEBUFF", + ["198405-SPELL_CAST_SUCCESS"] = "Bone Chilling Scream, 198405, SPELL_CAST_SUCCESS, 1709839304.37, SPELL_CAST_SUCCESS, false, Creature-0-67-1492-0-97097-0000605795, Helarjar Champion, 2632, 0, , nil, -2147483648, -2147483648, 198405, Bone Chilling Scream, 32", + ["198405-SPELL_CAST_START"] = "Bone Chilling Scream, 198405, SPELL_CAST_START, 1709839172.26, SPELL_CAST_START, false, Creature-0-67-1492-0-97097-00005FA7E4, Helarjar Champion, 2632, 0, , nil, -2147483648, -2147483648, 198405, Bone Chilling Scream, 32", + ["198405-SPELL_AURA_REMOVED"] = "Bone Chilling Scream, 198405, SPELL_AURA_REMOVED, 1710324637.156, SPELL_AURA_REMOVED, false, Creature-0-67-1492-0-97097-00002DAAA6, Helarjar Champion, 2632, 0, Player-67-00291F84, Krz, 1298, 0, 198405, Bone Chilling Scream, 32, DEBUFF", + ["198405-SPELL_AURA_APPLIED"] = "Bone Chilling Scream, 198405, SPELL_AURA_APPLIED, 1710324636.874, SPELL_AURA_APPLIED, false, Creature-0-67-1492-0-97097-00002DAAA6, Helarjar Champion, 2632, 0, Player-67-003521C2, Bonkleta, 1297, 0, 198405, Bone Chilling Scream, 32, DEBUFF", + ["198405-SPELL_CAST_SUCCESS"] = "Bone Chilling Scream, 198405, SPELL_CAST_SUCCESS, 1710324636.789, SPELL_CAST_SUCCESS, false, Creature-0-67-1492-0-97097-00002DAAA6, Helarjar Champion, 2632, 0, , nil, -2147483648, -2147483648, 198405, Bone Chilling Scream, 32", + ["198405-SPELL_CAST_START"] = "Bone Chilling Scream, 198405, SPELL_CAST_START, 1710320735.206, SPELL_CAST_START, false, Creature-0-67-1492-0-97097-00002911A8, Helarjar Champion, 2632, 0, , nil, -2147483648, -2147483648, 198405, Bone Chilling Scream, 32", diff --git a/WeakAuras/Projects/RaiderlosSA/out/198495.txt b/WeakAuras/Projects/RaiderlosSA/out/198495.txt new file mode 100644 index 0000000..e11f5d7 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/198495.txt @@ -0,0 +1,4 @@ + ["198495-SPELL_DAMAGE"] = "Torrent, 198495, SPELL_DAMAGE, 1709839573.92, SPELL_DAMAGE, false, Creature-0-67-1492-0-96759-00005FA82A, Helya, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 198495, Torrent, 16, 796254, -1, 16, nil, nil, 2374768, false, false, false, false", + ["198495-SPELL_CAST_START"] = "Torrent, 198495, SPELL_CAST_START, 1709839539.049, SPELL_CAST_START, false, Creature-0-67-1492-0-96759-00005FA82A, Helya, 68168, 0, , nil, -2147483648, -2147483648, 198495, Torrent, 16", + ["198495-SPELL_ABSORBED"] = "Torrent, 198495, SPELL_ABSORBED, 1709839573.92, SPELL_ABSORBED, false, Creature-0-67-1492-0-96759-00005FA82A, Helya, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 198495, Torrent, 16, Player-67-002D9DD1, Succpotato, 1297, 0, 108366, Soul Leech, 32, 866348", + ["198495-SPELL_CAST_SUCCESS"] = "Torrent, 198495, SPELL_CAST_SUCCESS, 1709839573.161, SPELL_CAST_SUCCESS, false, Creature-0-67-1492-0-96759-00005FA82A, Helya, 68168, 0, , nil, -2147483648, -2147483648, 198495, Torrent, 16", diff --git a/WeakAuras/Projects/RaiderlosSA/out/198496.txt b/WeakAuras/Projects/RaiderlosSA/out/198496.txt new file mode 100644 index 0000000..cdd68fd --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/198496.txt @@ -0,0 +1,5 @@ + ["198496-SPELL_DAMAGE"] = "Sunder, 198496, SPELL_DAMAGE, 1709812334.124, SPELL_DAMAGE, false, Creature-0-67-1458-0-91004-0000337647, Ularogg Cragshaper, 68168, 0, Player-67-002A36D8, Pakkan, 1298, 0, 198496, Sunder, 8, 1255082, -1, 8, nil, nil, nil, false, false, false, false", + ["198496-SPELL_MISSED"] = "Sunder, 198496, SPELL_MISSED, 1709840805.117, SPELL_MISSED, false, Creature-0-67-1458-0-91004-000061B502, Ularogg Cragshaper, 2632, 0, Player-67-00282563, Fregath, 1298, 0, 198496, Sunder, 8, ABSORB, false, 2632113", + ["198496-SPELL_CAST_START"] = "Sunder, 198496, SPELL_CAST_START, 1709812333.705, SPELL_CAST_START, false, Creature-0-67-1458-0-91004-0000337647, Ularogg Cragshaper, 68168, 0, , nil, -2147483648, -2147483648, 198496, Sunder, 8", + ["198496-SPELL_ABSORBED"] = "Sunder, 198496, SPELL_ABSORBED, 1709840699.646, SPELL_ABSORBED, false, Creature-0-67-1458-0-91004-000061B502, Ularogg Cragshaper, 68168, 0, Player-67-00282563, Fregath, 1298, 0, 198496, Sunder, 8, Player-67-00282563, Fregath, 1298, 0, 209388, Bulwark of Order, 2, 447772", + ["198496-SPELL_CAST_SUCCESS"] = "Sunder, 198496, SPELL_CAST_SUCCESS, 1709812334.124, SPELL_CAST_SUCCESS, false, Creature-0-67-1458-0-91004-0000337647, Ularogg Cragshaper, 68168, 0, Player-67-002A36D8, Pakkan, 1298, 0, 198496, Sunder, 8", diff --git a/WeakAuras/Projects/RaiderlosSA/out/198605.txt b/WeakAuras/Projects/RaiderlosSA/out/198605.txt new file mode 100644 index 0000000..9a5525d --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/198605.txt @@ -0,0 +1,3 @@ + ["198605-SPELL_DAMAGE"] = "Thunderstrike, 198605, SPELL_DAMAGE, 1709898587.588, SPELL_DAMAGE, false, Creature-0-67-1477-0-95842-0000361120, Valarjar Thundercaller, 2632, 0, Player-67-00351FE4, Дусяхентай, 1298, 0, 198605, Thunderstrike, 8, 158444, -1, 8, nil, nil, nil, false, false, false, false", + ["198605-SPELL_MISSED"] = "Thunderstrike, 198605, SPELL_MISSED, 1709898641.55, SPELL_MISSED, false, Creature-0-67-1477-0-95842-000036112E, Valarjar Thundercaller, 2632, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 198605, Thunderstrike, 8, ABSORB, false, 250978", + ["198605-SPELL_ABSORBED"] = "Thunderstrike, 198605, SPELL_ABSORBED, 1709898641.529, SPELL_ABSORBED, false, Creature-0-67-1477-0-95842-000036112E, Valarjar Thundercaller, 2632, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 198605, Thunderstrike, 8, Player-67-002D9DD1, Succpotato, 1297, 0, 108366, Soul Leech, 32, 250978", diff --git a/WeakAuras/Projects/RaiderlosSA/out/198750.txt b/WeakAuras/Projects/RaiderlosSA/out/198750.txt new file mode 100644 index 0000000..f4a48be --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/198750.txt @@ -0,0 +1,2 @@ + ["198750-SPELL_CAST_START"] = "Surge, 198750, SPELL_CAST_START, 1710340848.391, SPELL_CAST_START, false, Creature-0-67-1477-0-102019-00002C3AF5, Stormforged Obliterator, 2632, 0, , nil, -2147483648, -2147483648, 198750, Surge, 8", + ["198750-SPELL_CAST_START"] = "Surge, 198750, SPELL_CAST_START, 1709750210.793, SPELL_CAST_START, false, Creature-0-67-1477-0-102019-0000459006, Stormforged Obliterator, 2632, 0, , nil, -2147483648, -2147483648, 198750, Surge, 8", diff --git a/WeakAuras/Projects/RaiderlosSA/out/198888.txt b/WeakAuras/Projects/RaiderlosSA/out/198888.txt new file mode 100644 index 0000000..b11b1d1 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/198888.txt @@ -0,0 +1,6 @@ + ["198888-SPELL_CAST_START"] = "Lightning Breath, 198888, SPELL_CAST_START, 1709898585.586, SPELL_CAST_START, false, Vehicle-0-67-1477-0-97068-0000361121, Storm Drake, 2632, 0, , nil, -2147483648, -2147483648, 198888, Lightning Breath, 8", + ["198888-SPELL_DAMAGE"] = "Lightning Breath, 198888, SPELL_DAMAGE, 1710339157.101, SPELL_DAMAGE, false, Vehicle-0-67-1477-0-97068-0000298BC6, Storm Drake, 2632, 0, Player-67-001D862F, Matveyko, 1298, 0, 198888, Lightning Breath, 8, 6402734, -1, 8, nil, nil, nil, false, false, false, false", + ["198888-SPELL_CAST_SUCCESS"] = "Lightning Breath, 198888, SPELL_CAST_SUCCESS, 1709898587.092, SPELL_CAST_SUCCESS, false, Vehicle-0-67-1477-0-97068-0000361121, Storm Drake, 2632, 0, , nil, -2147483648, -2147483648, 198888, Lightning Breath, 8", + ["198888-SPELL_DAMAGE"] = "Lightning Breath, 198888, SPELL_DAMAGE, 1709749063.496, SPELL_DAMAGE, false, Vehicle-0-67-1477-0-97068-000043447C, Storm Drake, 68168, 0, Player-67-002C9240, Wilmarin, 1298, 0, 198888, Lightning Breath, 8, 3062201, -1, 8, nil, nil, 1020733, false, false, false, false", + ["198888-SPELL_CAST_START"] = "Lightning Breath, 198888, SPELL_CAST_START, 1709749061.935, SPELL_CAST_START, false, Vehicle-0-67-1477-0-97068-000043447C, Storm Drake, 68168, 0, , nil, -2147483648, -2147483648, 198888, Lightning Breath, 8", + ["198888-SPELL_CAST_SUCCESS"] = "Lightning Breath, 198888, SPELL_CAST_SUCCESS, 1709749063.496, SPELL_CAST_SUCCESS, false, Vehicle-0-67-1477-0-97068-000043447C, Storm Drake, 68168, 0, , nil, -2147483648, -2147483648, 198888, Lightning Breath, 8", diff --git a/WeakAuras/Projects/RaiderlosSA/out/198934.txt b/WeakAuras/Projects/RaiderlosSA/out/198934.txt new file mode 100644 index 0000000..4f0bc1f --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/198934.txt @@ -0,0 +1,2 @@ + ["198934-SPELL_CAST_SUCCESS"] = "Rune of Healing, 198934, SPELL_CAST_SUCCESS, 1709898635.7, SPELL_CAST_SUCCESS, false, Creature-0-67-1477-0-95834-00003610EE, Valarjar Mystic, 2632, 0, , nil, -2147483648, -2147483648, 198934, Rune of Healing, 2", + ["198934-SPELL_CAST_START"] = "Rune of Healing, 198934, SPELL_CAST_START, 1709898626.899, SPELL_CAST_START, false, Creature-0-67-1477-0-95834-00003610FC, Valarjar Mystic, 2632, 0, , nil, -2147483648, -2147483648, 198934, Rune of Healing, 2", diff --git a/WeakAuras/Projects/RaiderlosSA/out/199176.txt b/WeakAuras/Projects/RaiderlosSA/out/199176.txt new file mode 100644 index 0000000..6351c97 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/199176.txt @@ -0,0 +1,2 @@ + ["199176-SPELL_CAST_START"] = "Spiked Tongue, 199176, SPELL_CAST_START, 1709841243.02, SPELL_CAST_START, false, Vehicle-0-67-1458-0-91005-000061B52A, Naraxas, 68168, 0, , nil, -2147483648, -2147483648, 199176, Spiked Tongue, 1", + ["199176-SPELL_CAST_SUCCESS"] = "Spiked Tongue, 199176, SPELL_CAST_SUCCESS, 1709841249.036, SPELL_CAST_SUCCESS, false, Vehicle-0-67-1458-0-91005-000061B52A, Naraxas, 68168, 0, , nil, -2147483648, -2147483648, 199176, Spiked Tongue, 1", diff --git a/WeakAuras/Projects/RaiderlosSA/out/199210.txt b/WeakAuras/Projects/RaiderlosSA/out/199210.txt new file mode 100644 index 0000000..4f08def --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/199210.txt @@ -0,0 +1,4 @@ + ["199210-SPELL_DAMAGE"] = "Penetrating Shot, 199210, SPELL_DAMAGE, 1709898642.054, SPELL_DAMAGE, false, Creature-0-67-1477-0-96640-000036112F, Valarjar Marksman, 2632, 0, Player-88-00061D03, Опля-legionx5, 1298, 0, 199210, Penetrating Shot, 1, 689994, -1, 1, nil, nil, nil, false, false, false, false", + ["199210-SPELL_ABSORBED"] = "Penetrating Shot, 199210, SPELL_ABSORBED, 1709898642.054, SPELL_ABSORBED, false, Creature-0-67-1477-0-96640-000036112F, Valarjar Marksman, 2632, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 199210, Penetrating Shot, 1, Player-67-002D9DD1, Succpotato, 1297, 0, 108366, Soul Leech, 32, 318457", + ["199210-SPELL_MISSED"] = "Penetrating Shot, 199210, SPELL_MISSED, 1709898642.054, SPELL_MISSED, false, Creature-0-67-1477-0-96640-000036112F, Valarjar Marksman, 2632, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 199210, Penetrating Shot, 1, ABSORB, false, 734826", + ["199210-SPELL_DAMAGE"] = "Penetrating Shot, 199210, SPELL_DAMAGE, 1709749630.47, SPELL_DAMAGE, false, Creature-0-67-1477-0-96640-000043448B, Valarjar Marksman, 2632, 0, Player-67-002C9240, Wilmarin, 1298, 0, 199210, Penetrating Shot, 1, 673388, -1, 1, nil, nil, nil, false, false, false, false", diff --git a/WeakAuras/Projects/RaiderlosSA/out/199652.txt b/WeakAuras/Projects/RaiderlosSA/out/199652.txt new file mode 100644 index 0000000..d2549b5 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/199652.txt @@ -0,0 +1,15 @@ + ["199652-SPELL_MISSED"] = "Sever, 199652, SPELL_MISSED, 1710340576.312, SPELL_MISSED, false, Creature-0-67-1477-0-95843-00002BAFB9, King Haldor, 68168, 0, Player-67-001D862F, Matveyko, 1298, 0, 199652, Sever, 1, PARRY, false", + ["199652-SPELL_ABSORBED"] = "Sever, 199652, SPELL_ABSORBED, 1710340624.194, SPELL_ABSORBED, false, Creature-0-67-1477-0-97084-00002BAFE6, King Tor, 2632, 0, Player-67-001D862F, Matveyko, 1298, 0, 199652, Sever, 1, Player-67-001D862F, Matveyko, 1298, 0, 252208, Refractive Shell, 2, 456297", + ["199652-SPELL_CAST_SUCCESS"] = "Sever, 199652, SPELL_CAST_SUCCESS, 1710340576.312, SPELL_CAST_SUCCESS, false, Creature-0-67-1477-0-95843-00002BAFB9, King Haldor, 68168, 0, Player-67-001D862F, Matveyko, 1298, 0, 199652, Sever, 1", + ["199652-SPELL_CAST_START"] = "Sever, 199652, SPELL_CAST_START, 1710340575.256, SPELL_CAST_START, false, Creature-0-67-1477-0-95843-00002BAFB9, King Haldor, 68168, 0, , nil, -2147483648, -2147483648, 199652, Sever, 1", + ["199652-SPELL_AURA_APPLIED"] = "Sever, 199652, SPELL_AURA_APPLIED, 1710340624.264, SPELL_AURA_APPLIED, false, Creature-0-67-1477-0-97084-00002BAFE6, King Tor, 2632, 0, Player-67-001D862F, Matveyko, 1298, 0, 199652, Sever, 1, DEBUFF", + ["199652-SPELL_AURA_REMOVED"] = "Sever, 199652, SPELL_AURA_REMOVED, 1710340636.291, SPELL_AURA_REMOVED, false, Creature-0-67-1477-0-97084-00002BAFE6, King Tor, 68168, 0, Player-67-001D862F, Matveyko, 1298, 0, 199652, Sever, 1, DEBUFF", + ["199652-SPELL_DAMAGE"] = "Sever, 199652, SPELL_DAMAGE, 1710340624.194, SPELL_DAMAGE, false, Creature-0-67-1477-0-97084-00002BAFE6, King Tor, 2632, 0, Player-67-001D862F, Matveyko, 1298, 0, 199652, Sever, 1, 2505427, -1, 1, nil, nil, 456297, false, false, false, false", + ["199652-SPELL_CAST_START"] = "Sever, 199652, SPELL_CAST_START, 1709749975.956, SPELL_CAST_START, false, Creature-0-67-1477-0-95843-000044F6B1, King Haldor, 68168, 0, , nil, -2147483648, -2147483648, 199652, Sever, 1", + ["199652-SPELL_MISSED"] = "Sever, 199652, SPELL_MISSED, 1709749977, SPELL_MISSED, false, Creature-0-67-1477-0-95843-000044F6B1, King Haldor, 68168, 0, Player-67-002C9240, Wilmarin, 1298, 0, 199652, Sever, 1, DODGE, false", + ["199652-SPELL_ABSORBED"] = "Sever, 199652, SPELL_ABSORBED, 1709750006.879, SPELL_ABSORBED, false, Creature-0-67-1477-0-97084-000044F6DE, King Tor, 68168, 0, Player-67-002C9240, Wilmarin, 1298, 0, 199652, Sever, 1, Player-67-002C9240, Wilmarin, 1298, 0, 252545, Light of Absolarn, 8, 1558945", + ["199652-SPELL_AURA_APPLIED_DOSE"] = "Sever, 199652, SPELL_AURA_APPLIED_DOSE, 1709750017.553, SPELL_AURA_APPLIED_DOSE, false, Creature-0-67-1477-0-97084-000044F6DE, King Tor, 68168, 0, Player-67-002C9240, Wilmarin, 1298, 0, 199652, Sever, 1, DEBUFF, 2", + ["199652-SPELL_CAST_SUCCESS"] = "Sever, 199652, SPELL_CAST_SUCCESS, 1709749977, SPELL_CAST_SUCCESS, false, Creature-0-67-1477-0-95843-000044F6B1, King Haldor, 68168, 0, Player-67-002C9240, Wilmarin, 1298, 0, 199652, Sever, 1", + ["199652-SPELL_DAMAGE"] = "Sever, 199652, SPELL_DAMAGE, 1709750020.878, SPELL_DAMAGE, false, Creature-0-67-1477-0-97081-000044F6DC, King Bjorn, 2632, 0, Player-67-002C9240, Wilmarin, 1298, 0, 199652, Sever, 1, 1461194, -1, 1, nil, nil, nil, false, false, false, false", + ["199652-SPELL_AURA_APPLIED"] = "Sever, 199652, SPELL_AURA_APPLIED, 1709750006.942, SPELL_AURA_APPLIED, false, Creature-0-67-1477-0-97084-000044F6DE, King Tor, 68168, 0, Player-67-002C9240, Wilmarin, 1298, 0, 199652, Sever, 1, DEBUFF", + ["199652-SPELL_AURA_REMOVED"] = "Sever, 199652, SPELL_AURA_REMOVED, 1709750032.935, SPELL_AURA_REMOVED, false, Creature-0-67-1477-0-97084-000044F6DE, King Tor, 68168, 0, Player-67-002C9240, Wilmarin, 1298, 0, 199652, Sever, 1, DEBUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/199674.txt b/WeakAuras/Projects/RaiderlosSA/out/199674.txt new file mode 100644 index 0000000..7cf1967 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/199674.txt @@ -0,0 +1,11 @@ + ["199674-SPELL_CAST_START"] = "Wicked Dagger, 199674, SPELL_CAST_START, 1710340603.738, SPELL_CAST_START, false, Creature-0-67-1477-0-97081-00002BAFE4, King Bjorn, 2632, 0, , nil, -2147483648, -2147483648, 199674, Wicked Dagger, 1", + ["199674-SPELL_CAST_SUCCESS"] = "Wicked Dagger, 199674, SPELL_CAST_SUCCESS, 1710340604.771, SPELL_CAST_SUCCESS, false, Creature-0-67-1477-0-97081-00002BAFE4, King Bjorn, 2632, 0, Player-67-0034CC49, Иризен, 1298, 0, 199674, Wicked Dagger, 1", + ["199674-SPELL_ABSORBED"] = "Wicked Dagger, 199674, SPELL_ABSORBED, 1710340604.899, SPELL_ABSORBED, false, Creature-0-67-1477-0-97081-00002BAFE4, King Bjorn, 2632, 0, Player-67-0034CC49, Иризен, 1298, 0, 199674, Wicked Dagger, 1, Player-67-0034CC49, Иризен, 1298, 0, 203538, Greater Blessing of Kings, 2, 147677", + ["199674-SPELL_AURA_REMOVED"] = "Wicked Dagger, 199674, SPELL_AURA_REMOVED, 1710340607.987, SPELL_AURA_REMOVED, false, Creature-0-67-1477-0-97081-00002BAFE4, King Bjorn, 2632, 0, Player-67-0034CC49, Иризен, 1298, 0, 199674, Wicked Dagger, 1, DEBUFF", + ["199674-SPELL_AURA_APPLIED"] = "Wicked Dagger, 199674, SPELL_AURA_APPLIED, 1710340604.96, SPELL_AURA_APPLIED, false, Creature-0-67-1477-0-97081-00002BAFE4, King Bjorn, 2632, 0, Player-67-0034CC49, Иризен, 1298, 0, 199674, Wicked Dagger, 1, DEBUFF", + ["199674-SPELL_DAMAGE"] = "Wicked Dagger, 199674, SPELL_DAMAGE, 1710340604.912, SPELL_DAMAGE, false, Creature-0-67-1477-0-97081-00002BAFE4, King Bjorn, 2632, 0, Player-67-0034CC49, Иризен, 1298, 0, 199674, Wicked Dagger, 1, 3616296, -1, 1, nil, nil, 147677, false, false, false, false", + ["199674-SPELL_CAST_SUCCESS"] = "Wicked Dagger, 199674, SPELL_CAST_SUCCESS, 1709750003.951, SPELL_CAST_SUCCESS, false, Creature-0-67-1477-0-97081-000044F6DC, King Bjorn, 68168, 0, Player-67-0034F511, Intrill, 1298, 0, 199674, Wicked Dagger, 1", + ["199674-SPELL_AURA_REMOVED"] = "Wicked Dagger, 199674, SPELL_AURA_REMOVED, 1709750007.645, SPELL_AURA_REMOVED, false, Creature-0-67-1477-0-97081-000044F6DC, King Bjorn, 2632, 0, Player-67-0034F511, Intrill, 1298, 0, 199674, Wicked Dagger, 1, DEBUFF", + ["199674-SPELL_AURA_APPLIED"] = "Wicked Dagger, 199674, SPELL_AURA_APPLIED, 1709750004.636, SPELL_AURA_APPLIED, false, Creature-0-67-1477-0-97081-000044F6DC, King Bjorn, 68168, 0, Player-67-0034F511, Intrill, 1298, 0, 199674, Wicked Dagger, 1, DEBUFF", + ["199674-SPELL_CAST_START"] = "Wicked Dagger, 199674, SPELL_CAST_START, 1709750002.957, SPELL_CAST_START, false, Creature-0-67-1477-0-97081-000044F6DC, King Bjorn, 68168, 0, , nil, -2147483648, -2147483648, 199674, Wicked Dagger, 1", + ["199674-SPELL_DAMAGE"] = "Wicked Dagger, 199674, SPELL_DAMAGE, 1709750004.582, SPELL_DAMAGE, false, Creature-0-67-1477-0-97081-000044F6DC, King Bjorn, 68168, 0, Player-67-0034F511, Intrill, 1298, 0, 199674, Wicked Dagger, 1, 2011766, -1, 1, nil, nil, nil, false, false, false, false", diff --git a/WeakAuras/Projects/RaiderlosSA/out/199726.txt b/WeakAuras/Projects/RaiderlosSA/out/199726.txt new file mode 100644 index 0000000..b69ecdd --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/199726.txt @@ -0,0 +1,7 @@ + ["199726-SPELL_CAST_START"] = "Unruly Yell, 199726, SPELL_CAST_START, 1710340526.688, SPELL_CAST_START, false, Creature-0-67-1477-0-97083-00002BAFE5, King Ranulf, 68168, 0, , nil, -2147483648, -2147483648, 199726, Unruly Yell, 1", + ["199726-SPELL_DAMAGE"] = "Unruly Yell, 199726, SPELL_DAMAGE, 1709750014.697, SPELL_DAMAGE, false, Creature-0-67-1477-0-97084-000044F6DE, King Tor, 68168, 0, Player-67-002CCCC4, Jistx, 1298, 0, 199726, Unruly Yell, 1, 654589, -1, 1, nil, nil, 1196253, false, false, false, false", + ["199726-SPELL_MISSED"] = "Unruly Yell, 199726, SPELL_MISSED, 1709750014.697, SPELL_MISSED, false, Creature-0-67-1477-0-97084-000044F6DE, King Tor, 68168, 0, Player-67-002C9240, Wilmarin, 1298, 0, 199726, Unruly Yell, 1, ABSORB, false, 1046884", + ["199726-SPELL_ABSORBED"] = "Unruly Yell, 199726, SPELL_ABSORBED, 1709750014.672, SPELL_ABSORBED, false, Creature-0-67-1477-0-97084-000044F6DE, King Tor, 68168, 0, Player-67-002CCCC4, Jistx, 1298, 0, 199726, Unruly Yell, 1, Player-67-002CCCC4, Jistx, 1298, 0, 108366, Soul Leech, 32, 1196253", + ["199726-SPELL_CAST_START"] = "Unruly Yell, 199726, SPELL_CAST_START, 1709749952.07, SPELL_CAST_START, false, Creature-0-67-1477-0-97083-000044F6DD, King Ranulf, 2632, 0, , nil, -2147483648, -2147483648, 199726, Unruly Yell, 1", + ["199726-SPELL_INTERRUPT"] = "Unruly Yell, 199726, SPELL_INTERRUPT, 1709750014.697, SPELL_INTERRUPT, false, Creature-0-67-1477-0-97084-000044F6DE, King Tor, 68168, 0, Player-67-002CCCC4, Jistx, 1298, 0, 199726, Unruly Yell, 1, 198590, Drain Soul, 32", + ["199726-SPELL_CAST_SUCCESS"] = "Unruly Yell, 199726, SPELL_CAST_SUCCESS, 1709750014.697, SPELL_CAST_SUCCESS, false, Creature-0-67-1477-0-97084-000044F6DE, King Tor, 68168, 0, , nil, -2147483648, -2147483648, 199726, Unruly Yell, 1", diff --git a/WeakAuras/Projects/RaiderlosSA/out/199917.txt b/WeakAuras/Projects/RaiderlosSA/out/199917.txt new file mode 100644 index 0000000..e69de29 diff --git a/WeakAuras/Projects/RaiderlosSA/out/200040.txt b/WeakAuras/Projects/RaiderlosSA/out/200040.txt new file mode 100644 index 0000000..f3111fd --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/200040.txt @@ -0,0 +1,5 @@ + ["200040-SPELL_AURA_REMOVED"] = "Nether Venom, 200040, SPELL_AURA_REMOVED, 1709801648.373, SPELL_AURA_REMOVED, true, , nil, 1297, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 200040, Nether Venom, 64, DEBUFF", + ["200040-SPELL_ABSORBED"] = "Nether Venom, 200040, SPELL_ABSORBED, 1709801644.58, SPELL_ABSORBED, true, , nil, 1297, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 200040, Nether Venom, 64, Player-67-002D9DD1, Succpotato, 1297, 0, 252208, Refractive Shell, 2, 313402", + ["200040-SPELL_PERIODIC_DAMAGE"] = "Nether Venom, 200040, SPELL_PERIODIC_DAMAGE, 1709801646.461, SPELL_PERIODIC_DAMAGE, true, , nil, 1298, 0, Player-67-0035205B, Laewiä, 1298, 0, 200040, Nether Venom, 64, 308297, 0, 64, nil, nil, nil, false, false, false, false", + ["200040-SPELL_AURA_APPLIED"] = "Nether Venom, 200040, SPELL_AURA_APPLIED, 1709801644.58, SPELL_AURA_APPLIED, true, , nil, 1297, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 200040, Nether Venom, 64, DEBUFF", + ["200040-SPELL_PERIODIC_MISSED"] = "Nether Venom, 200040, SPELL_PERIODIC_MISSED, 1709801644.58, SPELL_PERIODIC_MISSED, true, , nil, 1297, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 200040, Nether Venom, 64, ABSORB, false, 324611", diff --git a/WeakAuras/Projects/RaiderlosSA/out/200105.txt b/WeakAuras/Projects/RaiderlosSA/out/200105.txt new file mode 100644 index 0000000..2995012 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/200105.txt @@ -0,0 +1,4 @@ + ["200105-SPELL_AURA_APPLIED"] = "Sacrifice Soul, 200105, SPELL_AURA_APPLIED, 1710337317.052, SPELL_AURA_APPLIED, false, Creature-0-67-1501-0-98368-000026BA6F, Ghostly Protector, 2632, 0, Creature-0-67-1501-0-98368-000026BA6F, Ghostly Protector, 2632, 0, 200105, Sacrifice Soul, 32, BUFF", + ["200105-SPELL_AURA_REMOVED"] = "Sacrifice Soul, 200105, SPELL_AURA_REMOVED, 1710337319.245, SPELL_AURA_REMOVED, false, Creature-0-67-1501-0-98368-000026BA6F, Ghostly Protector, 2632, 0, Creature-0-67-1501-0-98368-000026BA6F, Ghostly Protector, 2632, 0, 200105, Sacrifice Soul, 32, BUFF", + ["200105-SPELL_CAST_START"] = "Sacrifice Soul, 200105, SPELL_CAST_START, 1710337315.535, SPELL_CAST_START, false, Creature-0-67-1501-0-98368-000026BA6F, Ghostly Protector, 2632, 0, , nil, -2147483648, -2147483648, 200105, Sacrifice Soul, 32", + ["200105-SPELL_CAST_SUCCESS"] = "Sacrifice Soul, 200105, SPELL_CAST_SUCCESS, 1710337317.052, SPELL_CAST_SUCCESS, false, Creature-0-67-1501-0-98368-000026BA6F, Ghostly Protector, 2632, 0, , nil, -2147483648, -2147483648, 200105, Sacrifice Soul, 32", diff --git a/WeakAuras/Projects/RaiderlosSA/out/200227.txt b/WeakAuras/Projects/RaiderlosSA/out/200227.txt new file mode 100644 index 0000000..9c50c5f --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/200227.txt @@ -0,0 +1,2 @@ + ["200227-SPELL_CAST_START"] = "Tangled Web, 200227, SPELL_CAST_START, 1709917521.423, SPELL_CAST_START, false, Creature-0-67-1516-0-98207-000050EF5D, Nal'tira, 68168, 0, , nil, -2147483648, -2147483648, 200227, Tangled Web, 64", + ["200227-SPELL_CAST_SUCCESS"] = "Tangled Web, 200227, SPELL_CAST_SUCCESS, 1709917522.944, SPELL_CAST_SUCCESS, false, Creature-0-67-1516-0-98207-000050EF5D, Nal'tira, 68168, 0, , nil, -2147483648, -2147483648, 200227, Tangled Web, 64", diff --git a/WeakAuras/Projects/RaiderlosSA/out/200238.txt b/WeakAuras/Projects/RaiderlosSA/out/200238.txt new file mode 100644 index 0000000..5ede615 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/200238.txt @@ -0,0 +1,7 @@ + ["200238-SPELL_CAST_SUCCESS"] = "Feed on the Weak, 200238, SPELL_CAST_SUCCESS, 1709815495.471, SPELL_CAST_SUCCESS, false, Creature-0-67-1466-0-99192-0000377644, Shade of Xavius, 68168, 0, Player-67-003003AA, Roxytwo, 1298, 0, 200238, Feed on the Weak, 32", + ["200238-SPELL_PERIODIC_DAMAGE"] = "Feed on the Weak, 200238, SPELL_PERIODIC_DAMAGE, 1709815497.471, SPELL_PERIODIC_DAMAGE, false, Creature-0-67-1466-0-99192-0000377644, Shade of Xavius, 68168, 0, Player-67-003003AA, Roxytwo, 1298, 128, 200238, Feed on the Weak, 32, 1238013, 0, 32, nil, nil, 1046966, false, false, false, false", + ["200238-SPELL_ABSORBED"] = "Feed on the Weak, 200238, SPELL_ABSORBED, 1709815496.514, SPELL_ABSORBED, false, Creature-0-67-1466-0-99192-0000377644, Shade of Xavius, 68168, 0, Player-67-003003AA, Roxytwo, 1298, 128, 200238, Feed on the Weak, 32, Player-67-003003AA, Roxytwo, 1298, 128, 108366, Soul Leech, 32, 1104390", + ["200238-SPELL_AURA_REMOVED"] = "Feed on the Weak, 200238, SPELL_AURA_REMOVED, 1709815500.522, SPELL_AURA_REMOVED, false, Creature-0-67-1466-0-99192-0000377644, Shade of Xavius, 68168, 0, Player-67-003003AA, Roxytwo, 1298, 128, 200238, Feed on the Weak, 32, DEBUFF", + ["200238-SPELL_MISSED"] = "Feed on the Weak, 200238, SPELL_MISSED, 1710354847.762, SPELL_MISSED, false, Creature-0-7-1466-0-99192-0000248D2B, Shade of Xavius, 68168, 0, Player-7-00116879, Элнела-epicx1, 1298, 0, 200238, Feed on the Weak, 32, IMMUNE, false", + ["200238-SPELL_AURA_APPLIED"] = "Feed on the Weak, 200238, SPELL_AURA_APPLIED, 1709815495.537, SPELL_AURA_APPLIED, false, Creature-0-67-1466-0-99192-0000377644, Shade of Xavius, 68168, 0, Player-67-003003AA, Roxytwo, 1298, 0, 200238, Feed on the Weak, 32, DEBUFF", + ["200238-SPELL_PERIODIC_MISSED"] = "Feed on the Weak, 200238, SPELL_PERIODIC_MISSED, 1709815496.514, SPELL_PERIODIC_MISSED, false, Creature-0-67-1466-0-99192-0000377644, Shade of Xavius, 68168, 0, Player-67-003003AA, Roxytwo, 1298, 128, 200238, Feed on the Weak, 32, ABSORB, false, 2284979", diff --git a/WeakAuras/Projects/RaiderlosSA/out/200248.txt b/WeakAuras/Projects/RaiderlosSA/out/200248.txt new file mode 100644 index 0000000..1b49ea7 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/200248.txt @@ -0,0 +1,8 @@ + ["200248-SPELL_CAST_START"] = "Arcane Blitz, 200248, SPELL_CAST_START, 1710074766.727, SPELL_CAST_START, false, Creature-0-88-1501-0-98280-000027E360, Risen Arcanist, 2632, 0, , nil, -2147483648, -2147483648, 200248, Arcane Blitz, 64", + ["200248-SPELL_CAST_SUCCESS"] = "Arcane Blitz, 200248, SPELL_CAST_SUCCESS, 1710074770.201, SPELL_CAST_SUCCESS, false, Creature-0-88-1501-0-98280-000027E360, Risen Arcanist, 2632, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 200248, Arcane Blitz, 64", + ["200248-SPELL_AURA_REMOVED"] = "Arcane Blitz, 200248, SPELL_AURA_REMOVED, 1710074780.338, SPELL_AURA_REMOVED, false, Creature-0-88-1501-0-98280-000027E360, Risen Arcanist, 2632, 0, Creature-0-88-1501-0-98280-000027E360, Risen Arcanist, 2632, 0, 200248, Arcane Blitz, 64, BUFF", + ["200248-SPELL_MISSED"] = "Arcane Blitz, 200248, SPELL_MISSED, 1710074844.4, SPELL_MISSED, false, Creature-0-88-1501-0-98280-000027E351, Risen Arcanist, 2632, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 200248, Arcane Blitz, 64, ABSORB, false, 2256366", + ["200248-SPELL_AURA_APPLIED_DOSE"] = "Arcane Blitz, 200248, SPELL_AURA_APPLIED_DOSE, 1710074860.241, SPELL_AURA_APPLIED_DOSE, false, Creature-0-88-1501-0-98280-000027E351, Risen Arcanist, 68168, 0, Creature-0-88-1501-0-98280-000027E351, Risen Arcanist, 68168, 0, 200248, Arcane Blitz, 64, BUFF, 2", + ["200248-SPELL_AURA_APPLIED"] = "Arcane Blitz, 200248, SPELL_AURA_APPLIED, 1710074770.286, SPELL_AURA_APPLIED, false, Creature-0-88-1501-0-98280-000027E360, Risen Arcanist, 2632, 0, Creature-0-88-1501-0-98280-000027E360, Risen Arcanist, 2632, 0, 200248, Arcane Blitz, 64, BUFF", + ["200248-SPELL_ABSORBED"] = "Arcane Blitz, 200248, SPELL_ABSORBED, 1710074770.968, SPELL_ABSORBED, false, Creature-0-88-1501-0-98280-000027E360, Risen Arcanist, 2632, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 200248, Arcane Blitz, 64, Player-67-002D9DD1, Succpotato, 1297, 0, 108366, Soul Leech, 32, 421597", + ["200248-SPELL_DAMAGE"] = "Arcane Blitz, 200248, SPELL_DAMAGE, 1710074770.968, SPELL_DAMAGE, false, Creature-0-88-1501-0-98280-000027E360, Risen Arcanist, 2632, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 200248, Arcane Blitz, 64, 29269, -1, 64, nil, nil, 2119265, false, false, false, false", diff --git a/WeakAuras/Projects/RaiderlosSA/out/200261.txt b/WeakAuras/Projects/RaiderlosSA/out/200261.txt new file mode 100644 index 0000000..326d402 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/200261.txt @@ -0,0 +1,7 @@ + ["200261-SPELL_CAST_SUCCESS"] = "Bonebreaking Strike, 200261, SPELL_CAST_SUCCESS, 1710074692.136, SPELL_CAST_SUCCESS, false, Creature-0-88-1501-0-98243-000027E3AC, Soul-Torn Champion, 2632, 0, , nil, -2147483648, -2147483648, 200261, Bonebreaking Strike, 1", + ["200261-SPELL_ABSORBED"] = "Bonebreaking Strike, 200261, SPELL_ABSORBED, 1710074817.809, SPELL_ABSORBED, false, Creature-0-88-1501-0-98243-000027E3AC, Soul-Torn Champion, 2632, 0, Player-67-0033B422, Фрипал, 1298, 0, 200261, Bonebreaking Strike, 1, Player-67-0033B422, Фрипал, 1298, 0, 209388, Bulwark of Order, 2, 149794", + ["200261-SPELL_AURA_REMOVED"] = "Bonebreaking Strike, 200261, SPELL_AURA_REMOVED, 1710074819.095, SPELL_AURA_REMOVED, false, Creature-0-88-1501-0-98243-000027E3AC, Soul-Torn Champion, 2632, 0, Player-67-0033B422, Фрипал, 1298, 0, 200261, Bonebreaking Strike, 1, DEBUFF", + ["200261-SPELL_CAST_START"] = "Bonebreaking Strike, 200261, SPELL_CAST_START, 1710074689.135, SPELL_CAST_START, false, Creature-0-88-1501-0-98243-000027E3AC, Soul-Torn Champion, 2632, 0, , nil, -2147483648, -2147483648, 200261, Bonebreaking Strike, 1", + ["200261-SPELL_AURA_APPLIED"] = "Bonebreaking Strike, 200261, SPELL_AURA_APPLIED, 1710074817.867, SPELL_AURA_APPLIED, false, Creature-0-88-1501-0-98243-000027E3AC, Soul-Torn Champion, 2632, 0, Player-67-0033B422, Фрипал, 1298, 0, 200261, Bonebreaking Strike, 1, DEBUFF", + ["200261-SPELL_DAMAGE"] = "Bonebreaking Strike, 200261, SPELL_DAMAGE, 1710074861.627, SPELL_DAMAGE, false, Creature-0-88-1501-0-98243-000027E3AC, Soul-Torn Champion, 2632, 0, Player-67-0033B422, Фрипал, 1298, 0, 200261, Bonebreaking Strike, 1, 68546, -1, 1, nil, nil, nil, false, false, false, false", + ["200261-SPELL_MISSED"] = "Bonebreaking Strike, 200261, SPELL_MISSED, 1710074817.825, SPELL_MISSED, false, Creature-0-88-1501-0-98243-000027E3AC, Soul-Torn Champion, 2632, 0, Player-67-0033B422, Фрипал, 1298, 0, 200261, Bonebreaking Strike, 1, ABSORB, false, 149794", diff --git a/WeakAuras/Projects/RaiderlosSA/out/200291.txt b/WeakAuras/Projects/RaiderlosSA/out/200291.txt new file mode 100644 index 0000000..c4664de --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/200291.txt @@ -0,0 +1,4 @@ + ["200291-SPELL_CAST_SUCCESS"] = "Knife Dance, 200291, SPELL_CAST_SUCCESS, 1710074697.611, SPELL_CAST_SUCCESS, false, Creature-0-88-1501-0-98691-000027E3AD, Risen Scout, 2632, 0, , nil, -2147483648, -2147483648, 200291, Knife Dance, 1", + ["200291-SPELL_AURA_APPLIED"] = "Knife Dance, 200291, SPELL_AURA_APPLIED, 1710074697.611, SPELL_AURA_APPLIED, false, Creature-0-88-1501-0-98691-000027E3AD, Risen Scout, 2632, 0, Creature-0-88-1501-0-98691-000027E3AD, Risen Scout, 2632, 0, 200291, Knife Dance, 1, BUFF", + ["200291-SPELL_CAST_START"] = "Knife Dance, 200291, SPELL_CAST_START, 1710074695.585, SPELL_CAST_START, false, Creature-0-88-1501-0-98691-000027E3AD, Risen Scout, 2632, 0, , nil, -2147483648, -2147483648, 200291, Knife Dance, 1", + ["200291-SPELL_AURA_REMOVED"] = "Knife Dance, 200291, SPELL_AURA_REMOVED, 1710074702.632, SPELL_AURA_REMOVED, false, Creature-0-88-1501-0-98691-000027E3AD, Risen Scout, 68168, 0, Creature-0-88-1501-0-98691-000027E3AD, Risen Scout, 68168, 0, 200291, Knife Dance, 1, BUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/200345.txt b/WeakAuras/Projects/RaiderlosSA/out/200345.txt new file mode 100644 index 0000000..0bcd277 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/200345.txt @@ -0,0 +1,2 @@ + ["200345-SPELL_AURA_REMOVED"] = "Arrow Barrage, 200345, SPELL_AURA_REMOVED, 1710074792.396, SPELL_AURA_REMOVED, false, Creature-0-88-1501-0-98275-000027E36A, Risen Archer, 2632, 0, Creature-0-88-1501-0-98275-000027E36A, Risen Archer, 2632, 0, 200345, Arrow Barrage, 1, BUFF", + ["200345-SPELL_AURA_APPLIED"] = "Arrow Barrage, 200345, SPELL_AURA_APPLIED, 1710074787.371, SPELL_AURA_APPLIED, false, Creature-0-88-1501-0-98275-000027E36A, Risen Archer, 2632, 0, Creature-0-88-1501-0-98275-000027E36A, Risen Archer, 2632, 0, 200345, Arrow Barrage, 1, BUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/200580.txt b/WeakAuras/Projects/RaiderlosSA/out/200580.txt new file mode 100644 index 0000000..0df2e8e --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/200580.txt @@ -0,0 +1,8 @@ + ["200580-SPELL_AURA_APPLIED_DOSE"] = "Maddening Roar, 200580, SPELL_AURA_APPLIED_DOSE, 1710353940.678, SPELL_AURA_APPLIED_DOSE, false, Creature-0-7-1466-0-95779-0000244D41, Festerhide Grizzly, 2632, 0, Player-7-00116879, Элнела-epicx1, 1298, 0, 200580, Maddening Roar, 32, DEBUFF, 2", + ["200580-SPELL_MISSED"] = "Maddening Roar, 200580, SPELL_MISSED, 1710353937.075, SPELL_MISSED, false, Creature-0-7-1466-0-95779-0000244D41, Festerhide Grizzly, 2632, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 200580, Maddening Roar, 32, ABSORB, false, 1951377", + ["200580-SPELL_CAST_SUCCESS"] = "Maddening Roar, 200580, SPELL_CAST_SUCCESS, 1709814699.053, SPELL_CAST_SUCCESS, false, Creature-0-67-1466-0-95779-0000371342, Festerhide Grizzly, 2632, 0, , nil, -2147483648, -2147483648, 200580, Maddening Roar, 32", + ["200580-SPELL_AURA_REMOVED"] = "Maddening Roar, 200580, SPELL_AURA_REMOVED, 1709814706.089, SPELL_AURA_REMOVED, false, Creature-0-67-1466-0-95779-0000371342, Festerhide Grizzly, 2632, 0, Player-67-002C9B2F, Pakmann, 1298, 0, 200580, Maddening Roar, 32, DEBUFF", + ["200580-SPELL_ABSORBED"] = "Maddening Roar, 200580, SPELL_ABSORBED, 1710353937.075, SPELL_ABSORBED, false, Creature-0-7-1466-0-95779-0000244D41, Festerhide Grizzly, 2632, 0, Player-7-00116879, Элнела-epicx1, 1298, 0, 200580, Maddening Roar, 32, Player-7-00116879, Элнела-epicx1, 1298, 0, 207472, Xavaric's Magnum Opus, 1, 1580991", + ["200580-SPELL_AURA_APPLIED"] = "Maddening Roar, 200580, SPELL_AURA_APPLIED, 1709814699.162, SPELL_AURA_APPLIED, false, Creature-0-67-1466-0-95779-0000371342, Festerhide Grizzly, 2632, 0, Player-67-002C9B2F, Pakmann, 1298, 0, 200580, Maddening Roar, 32, DEBUFF", + ["200580-SPELL_CAST_START"] = "Maddening Roar, 200580, SPELL_CAST_START, 1709814638.257, SPELL_CAST_START, false, Creature-0-67-1466-0-95779-0000371391, Festerhide Grizzly, 68168, 0, , nil, -2147483648, -2147483648, 200580, Maddening Roar, 32", + ["200580-SPELL_DAMAGE"] = "Maddening Roar, 200580, SPELL_DAMAGE, 1709814699.053, SPELL_DAMAGE, false, Creature-0-67-1466-0-95779-0000371342, Festerhide Grizzly, 2632, 0, Player-67-002C9B2F, Pakmann, 1298, 0, 200580, Maddening Roar, 32, 969512, -1, 32, nil, nil, nil, false, false, false, false", diff --git a/WeakAuras/Projects/RaiderlosSA/out/200631.txt b/WeakAuras/Projects/RaiderlosSA/out/200631.txt new file mode 100644 index 0000000..abae426 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/200631.txt @@ -0,0 +1,12 @@ + ["200631-SPELL_CAST_SUCCESS"] = "Unnerving Screech, 200631, SPELL_CAST_SUCCESS, 1709814569.652, SPELL_CAST_SUCCESS, false, Creature-0-67-1466-0-95769-0000370019, Mindshattered Screecher, 2632, 0, Player-67-002C9B2F, Pakmann, 1298, 0, 200631, Unnerving Screech, 1", + ["200631-SPELL_DAMAGE"] = "Unnerving Screech, 200631, SPELL_DAMAGE, 1709814570.007, SPELL_DAMAGE, false, Creature-0-67-1466-0-95769-0000370019, Mindshattered Screecher, 2632, 0, Player-67-002C9B2F, Pakmann, 1298, 0, 200631, Unnerving Screech, 1, 281761, -1, 1, nil, nil, nil, false, false, false, false", + ["200631-SPELL_AURA_REMOVED"] = "Unnerving Screech, 200631, SPELL_AURA_REMOVED, 1709814570.706, SPELL_AURA_REMOVED, false, Creature-0-67-1466-0-95769-0000370019, Mindshattered Screecher, 2632, 0, Player-67-002C9B2F, Pakmann, 1298, 0, 200631, Unnerving Screech, 1, DEBUFF", + ["200631-SPELL_ABSORBED"] = "Unnerving Screech, 200631, SPELL_ABSORBED, 1709982572.461, SPELL_ABSORBED, false, Creature-0-67-1466-0-95769-0000349D2A, Mindshattered Screecher, 2632, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 200631, Unnerving Screech, 1, Player-67-002D9DD1, Succpotato, 1297, 0, 108366, Soul Leech, 32, 151948", + ["200631-SPELL_AURA_APPLIED"] = "Unnerving Screech, 200631, SPELL_AURA_APPLIED, 1709814570.074, SPELL_AURA_APPLIED, false, Creature-0-67-1466-0-95769-0000370019, Mindshattered Screecher, 2632, 0, Player-67-002C9B2F, Pakmann, 1298, 0, 200631, Unnerving Screech, 1, DEBUFF", + ["200631-SPELL_MISSED"] = "Unnerving Screech, 200631, SPELL_MISSED, 1709982572.474, SPELL_MISSED, false, Creature-0-67-1466-0-95769-0000349D2A, Mindshattered Screecher, 2632, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 200631, Unnerving Screech, 1, ABSORB, false, 484765", + ["200631-SPELL_CAST_SUCCESS"] = "Unnerving Screech, 200631, SPELL_CAST_SUCCESS, 1710321702.322, SPELL_CAST_SUCCESS, false, Creature-0-67-1466-0-95769-00002A35CC, Mindshattered Screecher, 2632, 0, Player-67-002D9DD1, Succpotato, 1298, 0, 200631, Unnerving Screech, 1", + ["200631-SPELL_DAMAGE"] = "Unnerving Screech, 200631, SPELL_DAMAGE, 1710321702.656, SPELL_DAMAGE, false, Creature-0-67-1466-0-95769-00002A35CC, Mindshattered Screecher, 2632, 0, Player-67-002D9DD1, Succpotato, 1298, 0, 200631, Unnerving Screech, 1, 262029, -1, 1, nil, nil, 442245, false, false, false, false", + ["200631-SPELL_AURA_REMOVED"] = "Unnerving Screech, 200631, SPELL_AURA_REMOVED, 1710321702.656, SPELL_AURA_REMOVED, false, Creature-0-67-1466-0-95769-00002A35CF, Mindshattered Screecher, 2632, 0, Player-67-002D9DD1, Succpotato, 1298, 0, 200631, Unnerving Screech, 1, DEBUFF", + ["200631-SPELL_AURA_APPLIED"] = "Unnerving Screech, 200631, SPELL_AURA_APPLIED, 1710321701.489, SPELL_AURA_APPLIED, false, Creature-0-67-1466-0-95769-00002A35CF, Mindshattered Screecher, 2632, 0, Player-67-002D9DD1, Succpotato, 1298, 0, 200631, Unnerving Screech, 1, DEBUFF", + ["200631-SPELL_ABSORBED"] = "Unnerving Screech, 200631, SPELL_ABSORBED, 1710321701.456, SPELL_ABSORBED, false, Creature-0-67-1466-0-95769-00002A35CF, Mindshattered Screecher, 2632, 0, Player-67-002D9DD1, Succpotato, 1298, 0, 200631, Unnerving Screech, 1, Player-67-002D9DD1, Succpotato, 1298, 0, 108366, Soul Leech, 32, 57194", + ["200631-SPELL_MISSED"] = "Unnerving Screech, 200631, SPELL_MISSED, 1710321701.422, SPELL_MISSED, false, Creature-0-67-1466-0-95769-00002A35CF, Mindshattered Screecher, 2632, 0, Player-67-002D9DD1, Succpotato, 1298, 0, 200631, Unnerving Screech, 1, ABSORB, false, 728742", diff --git a/WeakAuras/Projects/RaiderlosSA/out/200700.txt b/WeakAuras/Projects/RaiderlosSA/out/200700.txt new file mode 100644 index 0000000..2f2dd84 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/200700.txt @@ -0,0 +1,2 @@ + ["200700-SPELL_CAST_START"] = "Landslide, 200700, SPELL_CAST_START, 1709812700.242, SPELL_CAST_START, false, Creature-0-67-1458-0-91007-0000337630, Dargrul, 68168, 0, , nil, -2147483648, -2147483648, 200700, Landslide, 8", + ["200700-SPELL_CAST_SUCCESS"] = "Landslide, 200700, SPELL_CAST_SUCCESS, 1709812701.519, SPELL_CAST_SUCCESS, false, Creature-0-67-1458-0-91007-0000337630, Dargrul, 68168, 0, Player-67-002A36D8, Pakkan, 1298, 0, 200700, Landslide, 8", diff --git a/WeakAuras/Projects/RaiderlosSA/out/200732.txt b/WeakAuras/Projects/RaiderlosSA/out/200732.txt new file mode 100644 index 0000000..06e03fa --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/200732.txt @@ -0,0 +1,5 @@ + ["200732-SPELL_ABSORBED"] = "Molten Crash, 200732, SPELL_ABSORBED, 1709841552.572, SPELL_ABSORBED, false, Creature-0-67-1458-0-91007-000061B4EB, Dargrul, 68168, 0, Player-67-00282563, Fregath, 1298, 0, 200732, Molten Crash, 8, Player-67-00282563, Fregath, 1298, 0, 209388, Bulwark of Order, 2, 1604565", + ["200732-SPELL_CAST_SUCCESS"] = "Molten Crash, 200732, SPELL_CAST_SUCCESS, 1709812705.535, SPELL_CAST_SUCCESS, false, Creature-0-67-1458-0-91007-0000337630, Dargrul, 68168, 0, Player-67-002A36D8, Pakkan, 1298, 0, 200732, Molten Crash, 8", + ["200732-SPELL_MISSED"] = "Molten Crash, 200732, SPELL_MISSED, 1709841552.572, SPELL_MISSED, false, Creature-0-67-1458-0-91007-000061B4EB, Dargrul, 68168, 0, Player-67-00282563, Fregath, 1298, 0, 200732, Molten Crash, 8, ABSORB, false, 1604565", + ["200732-SPELL_CAST_START"] = "Molten Crash, 200732, SPELL_CAST_START, 1709812703.485, SPELL_CAST_START, false, Creature-0-67-1458-0-91007-0000337630, Dargrul, 68168, 0, , nil, -2147483648, -2147483648, 200732, Molten Crash, 8", + ["200732-SPELL_DAMAGE"] = "Molten Crash, 200732, SPELL_DAMAGE, 1709812705.535, SPELL_DAMAGE, false, Creature-0-67-1458-0-91007-0000337630, Dargrul, 68168, 0, Player-67-002A36D8, Pakkan, 1298, 0, 200732, Molten Crash, 8, 2395578, -1, 8, nil, nil, nil, false, false, false, false", diff --git a/WeakAuras/Projects/RaiderlosSA/out/200898.txt b/WeakAuras/Projects/RaiderlosSA/out/200898.txt new file mode 100644 index 0000000..794b8f3 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/200898.txt @@ -0,0 +1,2 @@ + ["200898-SPELL_CAST_START"] = "Teleport, 200898, SPELL_CAST_START, 1709803002.318, SPELL_CAST_START, false, Creature-0-67-1493-0-96015-00002941F2, Inquisitor Tormentorum, 68168, 0, , nil, -2147483648, -2147483648, 200898, Teleport, 1", + ["200898-SPELL_CAST_SUCCESS"] = "Teleport, 200898, SPELL_CAST_SUCCESS, 1709803003.349, SPELL_CAST_SUCCESS, false, Creature-0-67-1493-0-96015-00002941F2, Inquisitor Tormentorum, 68168, 0, , nil, -2147483648, -2147483648, 200898, Teleport, 1", diff --git a/WeakAuras/Projects/RaiderlosSA/out/201139.txt b/WeakAuras/Projects/RaiderlosSA/out/201139.txt new file mode 100644 index 0000000..44368df --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/201139.txt @@ -0,0 +1,4 @@ + ["201139-SPELL_AURA_APPLIED"] = "Brutal Assault, 201139, SPELL_AURA_APPLIED, 1710075235.102, SPELL_AURA_APPLIED, false, Creature-0-88-1501-0-98810-000027E375, Wrathguard Bladelord, 2632, 0, Creature-0-88-1501-0-98810-000027E375, Wrathguard Bladelord, 2632, 0, 201139, Brutal Assault, 1, BUFF", + ["201139-SPELL_AURA_REMOVED"] = "Brutal Assault, 201139, SPELL_AURA_REMOVED, 1710075237.1, SPELL_AURA_REMOVED, false, Creature-0-88-1501-0-98810-000027E375, Wrathguard Bladelord, 2632, 0, Creature-0-88-1501-0-98810-000027E375, Wrathguard Bladelord, 2632, 0, 201139, Brutal Assault, 1, BUFF", + ["201139-SPELL_CAST_START"] = "Brutal Assault, 201139, SPELL_CAST_START, 1710075233.604, SPELL_CAST_START, false, Creature-0-88-1501-0-98810-000027E375, Wrathguard Bladelord, 2632, 0, , nil, -2147483648, -2147483648, 201139, Brutal Assault, 1", + ["201139-SPELL_CAST_SUCCESS"] = "Brutal Assault, 201139, SPELL_CAST_SUCCESS, 1710075235.102, SPELL_CAST_SUCCESS, false, Creature-0-88-1501-0-98810-000027E375, Wrathguard Bladelord, 2632, 0, , nil, -2147483648, -2147483648, 201139, Brutal Assault, 1", diff --git a/WeakAuras/Projects/RaiderlosSA/out/201400.txt b/WeakAuras/Projects/RaiderlosSA/out/201400.txt new file mode 100644 index 0000000..1b76a9b --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/201400.txt @@ -0,0 +1 @@ + ["201400-SPELL_DAMAGE"] = "Dread Inferno, 201400, SPELL_DAMAGE, 1709815459.564, SPELL_DAMAGE, false, Creature-0-67-1466-0-100527-0000377673, Dreadfire Imp, 2632, 0, Player-67-002C9B2F, Pakmann, 1298, 0, 201400, Dread Inferno, 4, 1463672, -1, 4, nil, nil, nil, false, false, false, false", diff --git a/WeakAuras/Projects/RaiderlosSA/out/202098.txt b/WeakAuras/Projects/RaiderlosSA/out/202098.txt new file mode 100644 index 0000000..7a97fe5 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/202098.txt @@ -0,0 +1,5 @@ + ["202098-SPELL_ABSORBED"] = "Brackwater Barrage, 202098, SPELL_ABSORBED, 1709839500.997, SPELL_ABSORBED, false, Creature-0-67-1492-0-96759-00005FA82A, Helya, 2632, 0, Player-67-00282563, Fregath, 1298, 0, 202098, Brackwater Barrage, 16, Player-67-00282563, Fregath, 1298, 0, 209388, Bulwark of Order, 2, 1042204", + ["202098-SPELL_MISSED"] = "Brackwater Barrage, 202098, SPELL_MISSED, 1709839500.997, SPELL_MISSED, false, Creature-0-67-1492-0-96759-00005FA82A, Helya, 2632, 0, Player-67-00282563, Fregath, 1298, 0, 202098, Brackwater Barrage, 16, ABSORB, false, 4136132", + ["202098-SPELL_DAMAGE"] = "Brackwater Barrage, 202098, SPELL_DAMAGE, 1709839501.398, SPELL_DAMAGE, false, Creature-0-67-1492-0-96759-00005FA82A, Helya, 2632, 0, Player-67-00292E75, Kamuihunt, 1298, 0, 202098, Brackwater Barrage, 16, 4945206, -1, 16, nil, nil, nil, false, false, false, false", + ["202098-SPELL_DAMAGE"] = "Brackwater Barrage, 202098, SPELL_DAMAGE, 1710320861.729, SPELL_DAMAGE, false, Creature-0-67-1492-0-96759-00002911C7, Helya, 2632, 0, Player-67-0020E0C2, Toofedka, 1298, 0, 202098, Brackwater Barrage, 16, 155453, -1, 16, nil, nil, 1537127, false, false, false, false", + ["202098-SPELL_ABSORBED"] = "Brackwater Barrage, 202098, SPELL_ABSORBED, 1710320861.729, SPELL_ABSORBED, false, Creature-0-67-1492-0-96759-00002911C7, Helya, 2632, 0, Player-67-0020E0C2, Toofedka, 1298, 0, 202098, Brackwater Barrage, 16, Player-67-0020E0C2, Toofedka, 1298, 0, 252208, Refractive Shell, 2, 312714", diff --git a/WeakAuras/Projects/RaiderlosSA/out/202181.txt b/WeakAuras/Projects/RaiderlosSA/out/202181.txt new file mode 100644 index 0000000..173dd56 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/202181.txt @@ -0,0 +1,4 @@ + ["202181-SPELL_AURA_APPLIED"] = "Stone Gaze, 202181, SPELL_AURA_APPLIED, 1709840366.332, SPELL_AURA_APPLIED, false, Creature-0-67-1458-0-91006-000061BE1F, Rockback Gnasher, 4680, 0, Player-67-00282563, Fregath, 1298, 0, 202181, Stone Gaze, 1, DEBUFF", + ["202181-SPELL_CAST_START"] = "Stone Gaze, 202181, SPELL_CAST_START, 1709812197.064, SPELL_CAST_START, false, Creature-0-67-1458-0-91006-0000337B6C, Rockback Gnasher, 70216, 0, , nil, -2147483648, -2147483648, 202181, Stone Gaze, 1", + ["202181-SPELL_CAST_SUCCESS"] = "Stone Gaze, 202181, SPELL_CAST_SUCCESS, 1709840366.288, SPELL_CAST_SUCCESS, false, Creature-0-67-1458-0-91006-000061BE1F, Rockback Gnasher, 4680, 0, Player-67-00282563, Fregath, 1298, 0, 202181, Stone Gaze, 1", + ["202181-SPELL_AURA_REMOVED"] = "Stone Gaze, 202181, SPELL_AURA_REMOVED, 1709840367.338, SPELL_AURA_REMOVED, false, Creature-0-67-1458-0-91006-000061BE1F, Rockback Gnasher, 4680, 0, Player-67-00282563, Fregath, 1298, 0, 202181, Stone Gaze, 1, DEBUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/202658.txt b/WeakAuras/Projects/RaiderlosSA/out/202658.txt new file mode 100644 index 0000000..b7ee948 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/202658.txt @@ -0,0 +1,7 @@ + ["202658-SPELL_ABSORBED"] = "Drain, 202658, SPELL_ABSORBED, 1709803038.81, SPELL_ABSORBED, false, Creature-0-67-1493-0-102584-00002941E7, Malignant Defiler, 2632, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 202658, Drain, 32, Player-67-002D9DD1, Succpotato, 1297, 0, 252208, Refractive Shell, 2, 191747", + ["202658-SPELL_PERIODIC_DAMAGE"] = "Drain, 202658, SPELL_PERIODIC_DAMAGE, 1710344588.588, SPELL_PERIODIC_DAMAGE, false, Creature-0-67-1493-0-102584-0000323298, Malignant Defiler, 2632, 0, Player-67-00299D61, Katifram, 1298, 0, 202658, Drain, 32, 554772, 0, 32, nil, nil, nil, false, false, false, false", + ["202658-SPELL_AURA_REMOVED"] = "Drain, 202658, SPELL_AURA_REMOVED, 1709803041.884, SPELL_AURA_REMOVED, false, Creature-0-67-1493-0-102584-00002941E7, Malignant Defiler, 2632, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 202658, Drain, 32, DEBUFF", + ["202658-SPELL_CAST_SUCCESS"] = "Drain, 202658, SPELL_CAST_SUCCESS, 1709803035.791, SPELL_CAST_SUCCESS, false, Creature-0-67-1493-0-102584-00002941E7, Malignant Defiler, 2632, 0, , nil, -2147483648, -2147483648, 202658, Drain, 32", + ["202658-SPELL_AURA_APPLIED"] = "Drain, 202658, SPELL_AURA_APPLIED, 1709803035.832, SPELL_AURA_APPLIED, false, Creature-0-67-1493-0-102584-00002941E7, Malignant Defiler, 2632, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 202658, Drain, 32, DEBUFF", + ["202658-SPELL_PERIODIC_MISSED"] = "Drain, 202658, SPELL_PERIODIC_MISSED, 1709803038.81, SPELL_PERIODIC_MISSED, false, Creature-0-67-1493-0-102584-00002941E7, Malignant Defiler, 2632, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 202658, Drain, 32, ABSORB, false, 191747", + ["202658-SPELL_CAST_START"] = "Drain, 202658, SPELL_CAST_START, 1709803032.719, SPELL_CAST_START, false, Creature-0-67-1493-0-102584-00002941E7, Malignant Defiler, 2632, 0, , nil, -2147483648, -2147483648, 202658, Drain, 32", diff --git a/WeakAuras/Projects/RaiderlosSA/out/202913.txt b/WeakAuras/Projects/RaiderlosSA/out/202913.txt new file mode 100644 index 0000000..c3ae9c7 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/202913.txt @@ -0,0 +1,2 @@ + ["202913-SPELL_CAST_START"] = "Fel Mortar, 202913, SPELL_CAST_START, 1709802884.798, SPELL_CAST_START, false, Creature-0-67-1493-0-95885-000029419C, Tirathon Saltheril, 68168, 0, , nil, -2147483648, -2147483648, 202913, Fel Mortar, 1", + ["202913-SPELL_CAST_SUCCESS"] = "Fel Mortar, 202913, SPELL_CAST_SUCCESS, 1709802886.815, SPELL_CAST_SUCCESS, false, Creature-0-67-1493-0-95885-000029419C, Tirathon Saltheril, 68168, 0, , nil, -2147483648, -2147483648, 202913, Fel Mortar, 1", diff --git a/WeakAuras/Projects/RaiderlosSA/out/207979.txt b/WeakAuras/Projects/RaiderlosSA/out/207979.txt new file mode 100644 index 0000000..456d9c6 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/207979.txt @@ -0,0 +1,7 @@ + ["207979-SPELL_ABSORBED"] = "Shockwave, 207979, SPELL_ABSORBED, 1709936238.608, SPELL_ABSORBED, false, Creature-0-67-1571-0-104273-00006E000D, Jazshariu, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 207979, Shockwave, 1, Player-67-002D9DD1, Succpotato, 1297, 0, 108366, Soul Leech, 32, 919674", + ["207979-SPELL_DAMAGE"] = "Shockwave, 207979, SPELL_DAMAGE, 1709940185.411, SPELL_DAMAGE, false, Creature-0-67-1571-0-104273-000072F87B, Jazshariu, 68168, 0, Player-67-002B57E7, Pitic, 1298, 0, 207979, Shockwave, 1, 1087006, -1, 1, nil, nil, nil, false, false, false, false", + ["207979-SPELL_AURA_REMOVED"] = "Shockwave, 207979, SPELL_AURA_REMOVED, 1709936241.685, SPELL_AURA_REMOVED, false, Creature-0-67-1571-0-104273-00006E000D, Jazshariu, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 207979, Shockwave, 1, DEBUFF", + ["207979-SPELL_MISSED"] = "Shockwave, 207979, SPELL_MISSED, 1709936238.608, SPELL_MISSED, false, Creature-0-67-1571-0-104273-00006E000D, Jazshariu, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 207979, Shockwave, 1, ABSORB, false, 2029690", + ["207979-SPELL_CAST_SUCCESS"] = "Shockwave, 207979, SPELL_CAST_SUCCESS, 1709936238.608, SPELL_CAST_SUCCESS, false, Creature-0-67-1571-0-104273-00006E000D, Jazshariu, 68168, 0, , nil, -2147483648, -2147483648, 207979, Shockwave, 1", + ["207979-SPELL_CAST_START"] = "Shockwave, 207979, SPELL_CAST_START, 1709936237.121, SPELL_CAST_START, false, Creature-0-67-1571-0-104273-00006E000D, Jazshariu, 68168, 0, , nil, -2147483648, -2147483648, 207979, Shockwave, 1", + ["207979-SPELL_AURA_APPLIED"] = "Shockwave, 207979, SPELL_AURA_APPLIED, 1709936238.666, SPELL_AURA_APPLIED, false, Creature-0-67-1571-0-104273-00006E000D, Jazshariu, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 207979, Shockwave, 1, DEBUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/207980.txt b/WeakAuras/Projects/RaiderlosSA/out/207980.txt new file mode 100644 index 0000000..2dbac5c --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/207980.txt @@ -0,0 +1,4 @@ + ["207980-SPELL_CAST_SUCCESS"] = "Disintegration Beam, 207980, SPELL_CAST_SUCCESS, 1709936145.201, SPELL_CAST_SUCCESS, false, Creature-0-67-1571-0-104274-00006E000C, Baalgar the Watchful, 68168, 0, Player-67-00318BC5, Ossman, 1298, 0, 207980, Disintegration Beam, 32", + ["207980-SPELL_AURA_APPLIED"] = "Disintegration Beam, 207980, SPELL_AURA_APPLIED, 1709936145.282, SPELL_AURA_APPLIED, false, Creature-0-67-1571-0-104274-00006E000C, Baalgar the Watchful, 68168, 0, Player-67-00318BC5, Ossman, 1298, 0, 207980, Disintegration Beam, 32, DEBUFF", + ["207980-SPELL_AURA_REMOVED"] = "Disintegration Beam, 207980, SPELL_AURA_REMOVED, 1709936150.28, SPELL_AURA_REMOVED, false, Creature-0-67-1571-0-104274-00006E000C, Baalgar the Watchful, 68168, 0, Player-67-00318BC5, Ossman, 1298, 0, 207980, Disintegration Beam, 32, DEBUFF", + ["207980-SPELL_CAST_START"] = "Disintegration Beam, 207980, SPELL_CAST_START, 1709936144.166, SPELL_CAST_START, false, Creature-0-67-1571-0-104274-00006E000C, Baalgar the Watchful, 68168, 0, , nil, -2147483648, -2147483648, 207980, Disintegration Beam, 32", diff --git a/WeakAuras/Projects/RaiderlosSA/out/209027.txt b/WeakAuras/Projects/RaiderlosSA/out/209027.txt new file mode 100644 index 0000000..12e2e1d --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/209027.txt @@ -0,0 +1,7 @@ + ["209027-SPELL_CAST_START"] = "Quelling Strike, 209027, SPELL_CAST_START, 1709935447.312, SPELL_CAST_START, false, Creature-0-67-1571-0-111563-00006DFFEE, Duskwatch Guard, 68168, 0, , nil, -2147483648, -2147483648, 209027, Quelling Strike, 64", + ["209027-SPELL_CAST_SUCCESS"] = "Quelling Strike, 209027, SPELL_CAST_SUCCESS, 1709935479.769, SPELL_CAST_SUCCESS, false, Creature-0-67-1571-0-104246-00006E003C, Duskwatch Guard, 2632, 0, , nil, -2147483648, -2147483648, 209027, Quelling Strike, 64", + ["209027-SPELL_ABSORBED"] = "Quelling Strike, 209027, SPELL_ABSORBED, 1709939678.844, SPELL_ABSORBED, false, Creature-0-67-1571-0-104246-000072F866, Duskwatch Guard, 2632, 0, Player-67-002B9144, Redoc, 1298, 0, 209027, Quelling Strike, 64, Player-67-002B9144, Redoc, 1298, 0, 190456, Ignore Pain, 1, 1463584", + ["209027-SPELL_AURA_APPLIED"] = "Quelling Strike, 209027, SPELL_AURA_APPLIED, 1709935479.855, SPELL_AURA_APPLIED, false, Creature-0-67-1571-0-104246-00006E003C, Duskwatch Guard, 2632, 0, Player-67-0034F561, Baylan, 1298, 0, 209027, Quelling Strike, 64, DEBUFF", + ["209027-SPELL_MISSED"] = "Quelling Strike, 209027, SPELL_MISSED, 1709939776.867, SPELL_MISSED, false, Creature-0-67-1571-0-104246-000072F905, Duskwatch Guard, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 209027, Quelling Strike, 64, ABSORB, false, 3000657", + ["209027-SPELL_DAMAGE"] = "Quelling Strike, 209027, SPELL_DAMAGE, 1709935479.769, SPELL_DAMAGE, false, Creature-0-67-1571-0-104246-00006E003C, Duskwatch Guard, 2632, 0, Player-67-0034F561, Baylan, 1298, 0, 209027, Quelling Strike, 64, 1840687, -1, 64, nil, nil, nil, false, false, false, false", + ["209027-SPELL_AURA_REMOVED"] = "Quelling Strike, 209027, SPELL_AURA_REMOVED, 1709935480.57, SPELL_AURA_REMOVED, false, Creature-0-67-1571-0-104246-00006E003C, Duskwatch Guard, 2632, 0, Player-67-0034F561, Baylan, 1298, 0, 209027, Quelling Strike, 64, DEBUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/209404.txt b/WeakAuras/Projects/RaiderlosSA/out/209404.txt new file mode 100644 index 0000000..cadf2fb --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/209404.txt @@ -0,0 +1,7 @@ + ["209404-SPELL_CAST_SUCCESS"] = "Seal Magic, 209404, SPELL_CAST_SUCCESS, 1709939677.983, SPELL_CAST_SUCCESS, false, Creature-0-67-1571-0-104247-000072F864, Duskwatch Arcanist, 68168, 0, , nil, -2147483648, -2147483648, 209404, Seal Magic, 64", + ["209404-SPELL_CAST_START"] = "Seal Magic, 209404, SPELL_CAST_START, 1709939675.468, SPELL_CAST_START, false, Creature-0-67-1571-0-104247-000072F864, Duskwatch Arcanist, 2632, 0, , nil, -2147483648, -2147483648, 209404, Seal Magic, 64", + ["209404-SPELL_AURA_APPLIED"] = "Seal Magic, 209404, SPELL_AURA_APPLIED, 1709939678.05, SPELL_AURA_APPLIED, false, Creature-0-67-1571-0-104247-000072F864, Duskwatch Arcanist, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 209404, Seal Magic, 64, DEBUFF", + ["209404-SPELL_ABSORBED"] = "Seal Magic, 209404, SPELL_ABSORBED, 1709939677.983, SPELL_ABSORBED, false, Creature-0-67-1571-0-104247-000072F864, Duskwatch Arcanist, 68168, 0, Player-67-002B9144, Redoc, 1298, 0, 209404, Seal Magic, 64, Player-67-002B9144, Redoc, 1298, 0, 190456, Ignore Pain, 1, 2023661", + ["209404-SPELL_AURA_REMOVED"] = "Seal Magic, 209404, SPELL_AURA_REMOVED, 1709939682.079, SPELL_AURA_REMOVED, false, Creature-0-67-1571-0-104247-000072F864, Duskwatch Arcanist, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 209404, Seal Magic, 64, DEBUFF", + ["209404-SPELL_MISSED"] = "Seal Magic, 209404, SPELL_MISSED, 1710179643.03, SPELL_MISSED, false, Creature-0-88-1571-0-104247-00002CC3E8, Duskwatch Arcanist, 2632, 0, Pet-0-88-1571-0-78217-00002CCD23, Infernal, 4369, 0, 209404, Seal Magic, 64, ABSORB, false, 198155", + ["209404-SPELL_DAMAGE"] = "Seal Magic, 209404, SPELL_DAMAGE, 1709939677.983, SPELL_DAMAGE, false, Creature-0-67-1571-0-104247-000072F864, Duskwatch Arcanist, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 209404, Seal Magic, 64, 645395, -1, 64, nil, nil, nil, false, false, false, false", diff --git a/WeakAuras/Projects/RaiderlosSA/out/209485.txt b/WeakAuras/Projects/RaiderlosSA/out/209485.txt new file mode 100644 index 0000000..e69de29 diff --git a/WeakAuras/Projects/RaiderlosSA/out/209495.txt b/WeakAuras/Projects/RaiderlosSA/out/209495.txt new file mode 100644 index 0000000..0ff386c --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/209495.txt @@ -0,0 +1,5 @@ + ["209495-SPELL_CAST_SUCCESS"] = "Charged Smash, 209495, SPELL_CAST_SUCCESS, 1709935553.732, SPELL_CAST_SUCCESS, false, Creature-0-67-1571-0-104270-00006E0038, Guardian Construct, 2632, 0, Player-67-00305D33, Djetli, 1298, 0, 209495, Charged Smash, 1", + ["209495-SPELL_DAMAGE"] = "Charged Smash, 209495, SPELL_DAMAGE, 1709935553.732, SPELL_DAMAGE, false, Creature-0-67-1571-0-104270-00006E0038, Guardian Construct, 2632, 0, Player-67-00305D33, Djetli, 1298, 0, 209495, Charged Smash, 1, 3167286, -1, 1, nil, nil, nil, false, false, false, false", + ["209495-SPELL_ABSORBED"] = "Charged Smash, 209495, SPELL_ABSORBED, 1709939731.304, SPELL_ABSORBED, false, Creature-0-67-1571-0-104270-000072F8A6, Guardian Construct, 2632, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 209495, Charged Smash, 1, Player-67-002D9DD1, Succpotato, 1297, 0, 108366, Soul Leech, 32, 455924", + ["209495-SPELL_CAST_START"] = "Charged Smash, 209495, SPELL_CAST_START, 1709935551.718, SPELL_CAST_START, false, Creature-0-67-1571-0-104270-00006E0038, Guardian Construct, 2632, 0, , nil, -2147483648, -2147483648, 209495, Charged Smash, 1", + ["209495-SPELL_MISSED"] = "Charged Smash, 209495, SPELL_MISSED, 1709935553.732, SPELL_MISSED, false, Creature-0-67-1571-0-104270-00006E0038, Guardian Construct, 2632, 0, Player-67-00318BC5, Ossman, 1298, 0, 209495, Charged Smash, 1, PARRY, false", diff --git a/WeakAuras/Projects/RaiderlosSA/out/209516.txt b/WeakAuras/Projects/RaiderlosSA/out/209516.txt new file mode 100644 index 0000000..bc9fdd3 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/209516.txt @@ -0,0 +1,7 @@ + ["209516-SPELL_ABSORBED"] = "Mana Fang, 209516, SPELL_ABSORBED, 1709939767.306, SPELL_ABSORBED, false, Creature-0-67-1571-0-105699-000072F904, Mana Saber, 2632, 0, Player-67-00247307, Smallpumper, 1298, 0, 209516, Mana Fang, 64, Player-67-00247307, Smallpumper, 1298, 0, 252545, Light of Absolarn, 8, 301592", + ["209516-SPELL_PERIODIC_MISSED"] = "Mana Fang, 209516, SPELL_PERIODIC_MISSED, 1709939767.332, SPELL_PERIODIC_MISSED, false, Creature-0-67-1571-0-105699-000072F904, Mana Saber, 2632, 0, Player-67-00247307, Smallpumper, 1298, 0, 209516, Mana Fang, 64, ABSORB, false, 301592", + ["209516-SPELL_PERIODIC_DAMAGE"] = "Mana Fang, 209516, SPELL_PERIODIC_DAMAGE, 1709935480.185, SPELL_PERIODIC_DAMAGE, false, Creature-0-67-1571-0-105699-00006E003D, Mana Saber, 2632, 0, Player-67-0034F561, Baylan, 1298, 0, 209516, Mana Fang, 64, 382555, 0, 64, nil, nil, nil, false, false, false, false", + ["209516-SPELL_MISSED"] = "Mana Fang, 209516, SPELL_MISSED, 1709939882.119, SPELL_MISSED, false, Creature-0-67-1571-0-105699-000072F969, Mana Saber, 2632, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 209516, Mana Fang, 64, ABSORB, false, 1856051", + ["209516-SPELL_AURA_APPLIED"] = "Mana Fang, 209516, SPELL_AURA_APPLIED, 1709935478.21, SPELL_AURA_APPLIED, false, Creature-0-67-1571-0-105699-00006E003D, Mana Saber, 2632, 0, Player-67-0034F561, Baylan, 1298, 0, 209516, Mana Fang, 64, DEBUFF", + ["209516-SPELL_DAMAGE"] = "Mana Fang, 209516, SPELL_DAMAGE, 1709935478.113, SPELL_DAMAGE, false, Creature-0-67-1571-0-105699-00006E003D, Mana Saber, 2632, 0, Player-67-00318BC5, Ossman, 1298, 0, 209516, Mana Fang, 64, 1624418, -1, 64, nil, nil, nil, false, false, false, false", + ["209516-SPELL_AURA_REMOVED"] = "Mana Fang, 209516, SPELL_AURA_REMOVED, 1709935480.57, SPELL_AURA_REMOVED, false, Creature-0-67-1571-0-105699-00006E003D, Mana Saber, 2632, 0, Player-67-0034F561, Baylan, 1298, 0, 209516, Mana Fang, 64, DEBUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/209628.txt b/WeakAuras/Projects/RaiderlosSA/out/209628.txt new file mode 100644 index 0000000..e68fd0e --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/209628.txt @@ -0,0 +1,5 @@ + ["209628-SPELL_CAST_SUCCESS"] = "Piercing Gale, 209628, SPELL_CAST_SUCCESS, 1709936553.484, SPELL_CAST_SUCCESS, false, Vehicle-0-67-1571-0-105754-00006F8516, Image of Advisor Melandrus, 2632, 0, , nil, -2147483648, -2147483648, 209628, Piercing Gale, 1", + ["209628-SPELL_ABSORBED"] = "Piercing Gale, 209628, SPELL_ABSORBED, 1709940450.292, SPELL_ABSORBED, false, Vehicle-0-67-1571-0-105754-000073C31B, Image of Advisor Melandrus, 2632, 0, Player-67-002B9144, Redoc, 1298, 0, 209628, Piercing Gale, 1, Player-67-002B9144, Redoc, 1298, 0, 190456, Ignore Pain, 1, 763164", + ["209628-SPELL_MISSED"] = "Piercing Gale, 209628, SPELL_MISSED, 1709936553.484, SPELL_MISSED, false, Vehicle-0-67-1571-0-105754-00006F8516, Image of Advisor Melandrus, 2632, 0, Player-67-0034F561, Baylan, 1298, 0, 209628, Piercing Gale, 1, ABSORB, false, 713902", + ["209628-SPELL_CAST_START"] = "Piercing Gale, 209628, SPELL_CAST_START, 1709936551.501, SPELL_CAST_START, false, Vehicle-0-67-1571-0-104218-00006E16CC, Advisor Melandrus, 68168, 0, , nil, -2147483648, -2147483648, 209628, Piercing Gale, 1", + ["209628-SPELL_DAMAGE"] = "Piercing Gale, 209628, SPELL_DAMAGE, 1709940450.307, SPELL_DAMAGE, false, Vehicle-0-67-1571-0-105754-000073C31B, Image of Advisor Melandrus, 2632, 0, Player-67-002B57E7, Pitic, 1298, 0, 209628, Piercing Gale, 1, 807824, -1, 1, nil, nil, nil, false, false, false, false", diff --git a/WeakAuras/Projects/RaiderlosSA/out/209676.txt b/WeakAuras/Projects/RaiderlosSA/out/209676.txt new file mode 100644 index 0000000..7c25fd5 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/209676.txt @@ -0,0 +1,4 @@ + ["209676-SPELL_CAST_START"] = "Slicing Maelstrom, 209676, SPELL_CAST_START, 1709936563.598, SPELL_CAST_START, false, Vehicle-0-67-1571-0-104218-00006E16CC, Advisor Melandrus, 68168, 0, , nil, -2147483648, -2147483648, 209676, Slicing Maelstrom, 1", + ["209676-SPELL_AURA_REMOVED"] = "Slicing Maelstrom, 209676, SPELL_AURA_REMOVED, 1709936568.639, SPELL_AURA_REMOVED, false, Vehicle-0-67-1571-0-104218-00006E16CC, Advisor Melandrus, 68168, 0, Vehicle-0-67-1571-0-104218-00006E16CC, Advisor Melandrus, 68168, 0, 209676, Slicing Maelstrom, 1, BUFF", + ["209676-SPELL_CAST_SUCCESS"] = "Slicing Maelstrom, 209676, SPELL_CAST_SUCCESS, 1709936564.615, SPELL_CAST_SUCCESS, false, Vehicle-0-67-1571-0-104218-00006E16CC, Advisor Melandrus, 68168, 0, , nil, -2147483648, -2147483648, 209676, Slicing Maelstrom, 1", + ["209676-SPELL_AURA_APPLIED"] = "Slicing Maelstrom, 209676, SPELL_AURA_APPLIED, 1709936564.633, SPELL_AURA_APPLIED, false, Vehicle-0-67-1571-0-104218-00006E16CC, Advisor Melandrus, 68168, 0, Vehicle-0-67-1571-0-104218-00006E16CC, Advisor Melandrus, 68168, 0, 209676, Slicing Maelstrom, 1, BUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/210261.txt b/WeakAuras/Projects/RaiderlosSA/out/210261.txt new file mode 100644 index 0000000..691aa85 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/210261.txt @@ -0,0 +1,3 @@ + ["210261-SPELL_CAST_SUCCESS"] = "Sound Alarm, 210261, SPELL_CAST_SUCCESS, 1709935473.192, SPELL_CAST_SUCCESS, false, Creature-0-67-1571-0-104251-00006E0039, Duskwatch Sentry, 68168, 0, , nil, -2147483648, -2147483648, 210261, Sound Alarm, 1", + ["210261-SPELL_CAST_START"] = "Sound Alarm, 210261, SPELL_CAST_START, 1709935471.157, SPELL_CAST_START, false, Creature-0-67-1571-0-104251-00006E0039, Duskwatch Sentry, 2632, 0, , nil, -2147483648, -2147483648, 210261, Sound Alarm, 1", + ["210261-SPELL_SUMMON"] = "Sound Alarm, 210261, SPELL_SUMMON, 1709935473.192, SPELL_SUMMON, false, Creature-0-67-1571-0-104251-00006E0039, Duskwatch Sentry, 68168, 0, Creature-0-67-1571-0-107073-00006E235B, Unknown, 2632, 0, 210261, Sound Alarm, 1", diff --git a/WeakAuras/Projects/RaiderlosSA/out/211037.txt b/WeakAuras/Projects/RaiderlosSA/out/211037.txt new file mode 100644 index 0000000..e69de29 diff --git a/WeakAuras/Projects/RaiderlosSA/out/211115.txt b/WeakAuras/Projects/RaiderlosSA/out/211115.txt new file mode 100644 index 0000000..d67c6f0 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/211115.txt @@ -0,0 +1,5 @@ + ["211115-SPELL_ABSORBED"] = "Phase Breach, 211115, SPELL_ABSORBED, 1709801341.899, SPELL_ABSORBED, false, Creature-0-67-1516-0-106059-000027CDC6, Warp Shade, 2632, 0, Player-67-003516C9, Mistwrap, 1298, 0, 211115, Phase Breach, 64, Player-67-003516C9, Mistwrap, 1298, 0, 252208, Refractive Shell, 2, 122640", + ["211115-SPELL_MISSED"] = "Phase Breach, 211115, SPELL_MISSED, 1709801341.91, SPELL_MISSED, false, Creature-0-67-1516-0-106059-000027CDC6, Warp Shade, 2632, 0, Player-67-00347555, Leiiel, 1298, 0, 211115, Phase Breach, 64, ABSORB, false, 954917", + ["211115-SPELL_CAST_SUCCESS"] = "Phase Breach, 211115, SPELL_CAST_SUCCESS, 1709801341.91, SPELL_CAST_SUCCESS, false, Creature-0-67-1516-0-106059-000027CDC6, Warp Shade, 2632, 0, , nil, -2147483648, -2147483648, 211115, Phase Breach, 64", + ["211115-SPELL_CAST_START"] = "Phase Breach, 211115, SPELL_CAST_START, 1709801339.343, SPELL_CAST_START, false, Creature-0-67-1516-0-106059-000027CDC6, Warp Shade, 2632, 0, , nil, -2147483648, -2147483648, 211115, Phase Breach, 64", + ["211115-SPELL_DAMAGE"] = "Phase Breach, 211115, SPELL_DAMAGE, 1709801341.91, SPELL_DAMAGE, false, Creature-0-67-1516-0-106059-000027CDC6, Warp Shade, 2632, 0, Player-67-003516C9, Mistwrap, 1298, 0, 211115, Phase Breach, 64, 695403, -1, 64, nil, nil, 122640, false, false, false, false", diff --git a/WeakAuras/Projects/RaiderlosSA/out/211217.txt b/WeakAuras/Projects/RaiderlosSA/out/211217.txt new file mode 100644 index 0000000..a27a030 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/211217.txt @@ -0,0 +1,2 @@ + ["211217-SPELL_CAST_START"] = "Arcane Slicer, 211217, SPELL_CAST_START, 1709801385.526, SPELL_CAST_START, false, Creature-0-67-1516-0-98756-000027CE18, Arcane Anomaly, 2632, 0, , nil, -2147483648, -2147483648, 211217, Arcane Slicer, 1", + ["211217-SPELL_CAST_SUCCESS"] = "Arcane Slicer, 211217, SPELL_CAST_SUCCESS, 1709801388.556, SPELL_CAST_SUCCESS, false, Creature-0-67-1516-0-98756-000027CE18, Arcane Anomaly, 2632, 0, , nil, -2147483648, -2147483648, 211217, Arcane Slicer, 1", diff --git a/WeakAuras/Projects/RaiderlosSA/out/211464.txt b/WeakAuras/Projects/RaiderlosSA/out/211464.txt new file mode 100644 index 0000000..192ffdc --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/211464.txt @@ -0,0 +1,9 @@ + ["211464-SPELL_PERIODIC_MISSED"] = "Fel Detonation, 211464, SPELL_PERIODIC_MISSED, 1709936084.255, SPELL_PERIODIC_MISSED, false, Creature-0-67-1571-0-104278-00006E000A, Felbound Enforcer, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 211464, Fel Detonation, 4, ABSORB, false, 465998", + ["211464-SPELL_DAMAGE"] = "Fel Detonation, 211464, SPELL_DAMAGE, 1709936082.254, SPELL_DAMAGE, false, Creature-0-67-1571-0-104278-00006E000A, Felbound Enforcer, 68168, 0, Player-67-0034F561, Baylan, 1298, 0, 211464, Fel Detonation, 4, 383524, -1, 4, nil, nil, nil, false, false, false, false", + ["211464-SPELL_CAST_START"] = "Fel Detonation, 211464, SPELL_CAST_START, 1709936080.264, SPELL_CAST_START, false, Creature-0-67-1571-0-104278-00006E000A, Felbound Enforcer, 68168, 0, , nil, -2147483648, -2147483648, 211464, Fel Detonation, 4", + ["211464-SPELL_PERIODIC_DAMAGE"] = "Fel Detonation, 211464, SPELL_PERIODIC_DAMAGE, 1709936084.315, SPELL_PERIODIC_DAMAGE, false, Creature-0-67-1571-0-104278-00006E000A, Felbound Enforcer, 68168, 0, Player-67-0034F561, Baylan, 1298, 0, 211464, Fel Detonation, 4, 173771, 0, 4, nil, nil, nil, false, false, false, false", + ["211464-SPELL_AURA_APPLIED"] = "Fel Detonation, 211464, SPELL_AURA_APPLIED, 1709936082.329, SPELL_AURA_APPLIED, false, Creature-0-67-1571-0-104278-00006E000A, Felbound Enforcer, 68168, 0, Player-67-0034F561, Baylan, 1298, 0, 211464, Fel Detonation, 4, DEBUFF", + ["211464-SPELL_MISSED"] = "Fel Detonation, 211464, SPELL_MISSED, 1709936082.254, SPELL_MISSED, false, Creature-0-67-1571-0-104278-00006E000A, Felbound Enforcer, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 211464, Fel Detonation, 4, ABSORB, false, 1007169", + ["211464-SPELL_CAST_SUCCESS"] = "Fel Detonation, 211464, SPELL_CAST_SUCCESS, 1709936082.254, SPELL_CAST_SUCCESS, false, Creature-0-67-1571-0-104278-00006E000A, Felbound Enforcer, 68168, 0, , nil, -2147483648, -2147483648, 211464, Fel Detonation, 4", + ["211464-SPELL_ABSORBED"] = "Fel Detonation, 211464, SPELL_ABSORBED, 1709936082.254, SPELL_ABSORBED, false, Creature-0-67-1571-0-104278-00006E000A, Felbound Enforcer, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 211464, Fel Detonation, 4, Player-67-002D9DD1, Succpotato, 1297, 0, 207472, Xavaric's Magnum Opus, 1, 917411", + ["211464-SPELL_AURA_REMOVED"] = "Fel Detonation, 211464, SPELL_AURA_REMOVED, 1709936092.297, SPELL_AURA_REMOVED, false, Creature-0-67-1571-0-104278-00006E000A, Felbound Enforcer, 2632, 0, Player-67-00318BC5, Ossman, 1298, 0, 211464, Fel Detonation, 4, DEBUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/211771.txt b/WeakAuras/Projects/RaiderlosSA/out/211771.txt new file mode 100644 index 0000000..4a4ce4f --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/211771.txt @@ -0,0 +1,5 @@ + ["211771-SPELL_DAMAGE"] = "Prophecies of Doom, 211771, SPELL_DAMAGE, 1709801829.884, SPELL_DAMAGE, false, Creature-0-67-1516-0-105651-000027CD33, Dreadborne Seer, 68168, 0, Player-67-003516C9, Mistwrap, 1298, 0, 211771, Prophecies of Doom, 32, 173465, -1, 32, nil, nil, 173465, false, false, false, false", + ["211771-SPELL_CAST_SUCCESS"] = "Prophecies of Doom, 211771, SPELL_CAST_SUCCESS, 1709801829.884, SPELL_CAST_SUCCESS, false, Creature-0-67-1516-0-105651-000027CD33, Dreadborne Seer, 68168, 0, , nil, -2147483648, -2147483648, 211771, Prophecies of Doom, 32", + ["211771-SPELL_CAST_START"] = "Prophecies of Doom, 211771, SPELL_CAST_START, 1709801712.557, SPELL_CAST_START, false, Creature-0-67-1516-0-105651-000027CD58, Dreadborne Seer, 68168, 0, , nil, -2147483648, -2147483648, 211771, Prophecies of Doom, 32", + ["211771-SPELL_MISSED"] = "Prophecies of Doom, 211771, SPELL_MISSED, 1709801829.884, SPELL_MISSED, false, Creature-0-67-1516-0-105651-000027CD33, Dreadborne Seer, 68168, 0, Player-67-00347555, Leiiel, 1298, 0, 211771, Prophecies of Doom, 32, ABSORB, false, 813082", + ["211771-SPELL_ABSORBED"] = "Prophecies of Doom, 211771, SPELL_ABSORBED, 1709801829.884, SPELL_ABSORBED, false, Creature-0-67-1516-0-105651-000027CD33, Dreadborne Seer, 68168, 0, Player-67-003516C9, Mistwrap, 1298, 0, 211771, Prophecies of Doom, 32, Player-67-003516C9, Mistwrap, 1298, 0, 214423, Stance of the Mountain, 1, 173465", diff --git a/WeakAuras/Projects/RaiderlosSA/out/212784.txt b/WeakAuras/Projects/RaiderlosSA/out/212784.txt new file mode 100644 index 0000000..134ae87 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/212784.txt @@ -0,0 +1,4 @@ + ["212784-SPELL_CAST_START"] = "Eye Storm, 212784, SPELL_CAST_START, 1709935928.448, SPELL_CAST_START, false, Vehicle-0-67-1571-0-105715-00006E00A5, Watchful Inquisitor, 68168, 0, , nil, -2147483648, -2147483648, 212784, Eye Storm, 4", + ["212784-SPELL_AURA_APPLIED"] = "Eye Storm, 212784, SPELL_AURA_APPLIED, 1709936043.639, SPELL_AURA_APPLIED, false, Vehicle-0-67-1571-0-105715-00006E0010, Watchful Inquisitor, 68168, 0, Vehicle-0-67-1571-0-105715-00006E0010, Watchful Inquisitor, 68168, 0, 212784, Eye Storm, 4, BUFF", + ["212784-SPELL_AURA_REMOVED"] = "Eye Storm, 212784, SPELL_AURA_REMOVED, 1709936051.592, SPELL_AURA_REMOVED, false, Vehicle-0-67-1571-0-105715-00006E0010, Watchful Inquisitor, 68168, 0, Vehicle-0-67-1571-0-105715-00006E0010, Watchful Inquisitor, 68168, 0, 212784, Eye Storm, 4, BUFF", + ["212784-SPELL_CAST_SUCCESS"] = "Eye Storm, 212784, SPELL_CAST_SUCCESS, 1709936043.639, SPELL_CAST_SUCCESS, false, Vehicle-0-67-1571-0-105715-00006E0010, Watchful Inquisitor, 68168, 0, , nil, -2147483648, -2147483648, 212784, Eye Storm, 4", diff --git a/WeakAuras/Projects/RaiderlosSA/out/215204.txt b/WeakAuras/Projects/RaiderlosSA/out/215204.txt new file mode 100644 index 0000000..0e2a2cb --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/215204.txt @@ -0,0 +1,4 @@ + ["215204-SPELL_AURA_REMOVED"] = "Hinder, 215204, SPELL_AURA_REMOVED, 1709935839.119, SPELL_AURA_REMOVED, false, Creature-0-67-1571-0-104918-00006E9B93, Vigilant Duskwatch, 2632, 0, Player-67-0034F561, Baylan, 1298, 0, 215204, Hinder, 64, DEBUFF", + ["215204-SPELL_CAST_START"] = "Hinder, 215204, SPELL_CAST_START, 1709935830.941, SPELL_CAST_START, false, Creature-0-67-1571-0-104918-00006E9B93, Vigilant Duskwatch, 2632, 0, , nil, -2147483648, -2147483648, 215204, Hinder, 64", + ["215204-SPELL_CAST_SUCCESS"] = "Hinder, 215204, SPELL_CAST_SUCCESS, 1709935832.993, SPELL_CAST_SUCCESS, false, Creature-0-67-1571-0-104918-00006E9B93, Vigilant Duskwatch, 2632, 0, Player-67-0034F561, Baylan, 1298, 0, 215204, Hinder, 64", + ["215204-SPELL_AURA_APPLIED"] = "Hinder, 215204, SPELL_AURA_APPLIED, 1709935833.047, SPELL_AURA_APPLIED, false, Creature-0-67-1571-0-104918-00006E9B93, Vigilant Duskwatch, 2632, 0, Player-67-0034F561, Baylan, 1298, 0, 215204, Hinder, 64, DEBUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/215433.txt b/WeakAuras/Projects/RaiderlosSA/out/215433.txt new file mode 100644 index 0000000..2c25c12 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/215433.txt @@ -0,0 +1,4 @@ + ["215433-SPELL_CAST_SUCCESS"] = "Holy Radiance, 215433, SPELL_CAST_SUCCESS, 1709898621.019, SPELL_CAST_SUCCESS, false, Creature-0-67-1477-0-95834-00003610FC, Valarjar Mystic, 68168, 0, , nil, -2147483648, -2147483648, 215433, Holy Radiance, 2", + ["215433-SPELL_HEAL"] = "Holy Radiance, 215433, SPELL_HEAL, 1709898621.019, SPELL_HEAL, false, Creature-0-67-1477-0-95834-00003610FC, Valarjar Mystic, 68168, 0, Player-67-0021323C, Ofox, 1298, 0, 215433, Holy Radiance, 2, 2530018, 2530018, 0, false", + ["215433-SPELL_CAST_START"] = "Holy Radiance, 215433, SPELL_CAST_START, 1709898618.53, SPELL_CAST_START, false, Creature-0-67-1477-0-95834-00003610FC, Valarjar Mystic, 68168, 0, , nil, -2147483648, -2147483648, 215433, Holy Radiance, 2", + ["215433-SPELL_CAST_START"] = "Holy Radiance, 215433, SPELL_CAST_START, 1709749220.994, SPELL_CAST_START, false, Creature-0-67-1477-0-95834-0000434457, Valarjar Mystic, 2632, 0, , nil, -2147483648, -2147483648, 215433, Holy Radiance, 2", diff --git a/WeakAuras/Projects/RaiderlosSA/out/219488.txt b/WeakAuras/Projects/RaiderlosSA/out/219488.txt new file mode 100644 index 0000000..68485f0 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/219488.txt @@ -0,0 +1,2 @@ + ["219488-SPELL_SUMMON"] = "Streetsweeper, 219488, SPELL_SUMMON, 1709935820.475, SPELL_SUMMON, false, Vehicle-0-67-1571-0-104215-00006E00EE, Patrol Captain Gerdo, 68168, 0, Creature-0-67-1571-0-110403-00006E9E75, Unknown, 2632, 0, 219488, Streetsweeper, 64", + ["219488-SPELL_CAST_SUCCESS"] = "Streetsweeper, 219488, SPELL_CAST_SUCCESS, 1709935820.475, SPELL_CAST_SUCCESS, false, Vehicle-0-67-1571-0-104215-00006E00EE, Patrol Captain Gerdo, 68168, 0, Player-67-0034F561, Baylan, 1298, 0, 219488, Streetsweeper, 64", diff --git a/WeakAuras/Projects/RaiderlosSA/out/220871.txt b/WeakAuras/Projects/RaiderlosSA/out/220871.txt new file mode 100644 index 0000000..d536c58 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/220871.txt @@ -0,0 +1,4 @@ + ["220871-SPELL_AURA_REMOVED"] = "Unstable Mana, 220871, SPELL_AURA_REMOVED, 1709802023.857, SPELL_AURA_REMOVED, false, Creature-0-67-1516-0-98208-000027CDE6, Advisor Vandros, 2632, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 220871, Unstable Mana, 64, DEBUFF", + ["220871-SPELL_CAST_SUCCESS"] = "Unstable Mana, 220871, SPELL_CAST_SUCCESS, 1709802016.927, SPELL_CAST_SUCCESS, false, Creature-0-67-1516-0-98208-000027CDE6, Advisor Vandros, 68168, 0, , nil, -2147483648, -2147483648, 220871, Unstable Mana, 64", + ["220871-SPELL_CAST_START"] = "Unstable Mana, 220871, SPELL_CAST_START, 1709802014.54, SPELL_CAST_START, false, Creature-0-67-1516-0-98208-000027CDE6, Advisor Vandros, 68168, 0, , nil, -2147483648, -2147483648, 220871, Unstable Mana, 64", + ["220871-SPELL_AURA_APPLIED"] = "Unstable Mana, 220871, SPELL_AURA_APPLIED, 1709802016.976, SPELL_AURA_APPLIED, false, Creature-0-67-1516-0-98208-000027CDE6, Advisor Vandros, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 220871, Unstable Mana, 64, DEBUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/225100.txt b/WeakAuras/Projects/RaiderlosSA/out/225100.txt new file mode 100644 index 0000000..437b666 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/225100.txt @@ -0,0 +1,4 @@ + ["225100-SPELL_AURA_REMOVED"] = "Charging Station, 225100, SPELL_AURA_REMOVED, 1709935519.335, SPELL_AURA_REMOVED, false, Creature-0-67-1571-0-104270-00006E007C, Guardian Construct, 68168, 0, Creature-0-67-1571-0-104270-00006E007C, Guardian Construct, 68168, 0, 225100, Charging Station, 64, BUFF", + ["225100-SPELL_CAST_SUCCESS"] = "Charging Station, 225100, SPELL_CAST_SUCCESS, 1709935514.247, SPELL_CAST_SUCCESS, false, Creature-0-67-1571-0-104270-00006E007C, Guardian Construct, 68168, 0, , nil, -2147483648, -2147483648, 225100, Charging Station, 64", + ["225100-SPELL_AURA_APPLIED"] = "Charging Station, 225100, SPELL_AURA_APPLIED, 1709935514.247, SPELL_AURA_APPLIED, false, Creature-0-67-1571-0-104270-00006E007C, Guardian Construct, 68168, 0, Creature-0-67-1571-0-104270-00006E007C, Guardian Construct, 68168, 0, 225100, Charging Station, 64, BUFF", + ["225100-SPELL_CAST_START"] = "Charging Station, 225100, SPELL_CAST_START, 1709935512.691, SPELL_CAST_START, false, Creature-0-67-1571-0-104270-00006E007C, Guardian Construct, 2632, 0, , nil, -2147483648, -2147483648, 225100, Charging Station, 64", diff --git a/WeakAuras/Projects/RaiderlosSA/out/225573.txt b/WeakAuras/Projects/RaiderlosSA/out/225573.txt new file mode 100644 index 0000000..8232ca2 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/225573.txt @@ -0,0 +1,8 @@ + ["225573-SPELL_AURA_APPLIED"] = "Dark Mending, 225573, SPELL_AURA_APPLIED, 1710074428.941, SPELL_AURA_APPLIED, false, Creature-0-88-1501-0-98370-000027E3E1, Ghostly Councilor, 2632, 0, Creature-0-88-1501-0-98370-000027E3E1, Ghostly Councilor, 2632, 0, 225573, Dark Mending, 32, BUFF", + ["225573-SPELL_CAST_START"] = "Dark Mending, 225573, SPELL_CAST_START, 1710074426.442, SPELL_CAST_START, false, Creature-0-88-1501-0-98370-000027E3E1, Ghostly Councilor, 2632, 0, , nil, -2147483648, -2147483648, 225573, Dark Mending, 32", + ["225573-SPELL_CAST_SUCCESS"] = "Dark Mending, 225573, SPELL_CAST_SUCCESS, 1710074428.941, SPELL_CAST_SUCCESS, false, Creature-0-88-1501-0-98370-000027E3E1, Ghostly Councilor, 2632, 0, , nil, -2147483648, -2147483648, 225573, Dark Mending, 32", + ["225573-SPELL_AURA_REMOVED"] = "Dark Mending, 225573, SPELL_AURA_REMOVED, 1710074433.959, SPELL_AURA_REMOVED, false, Creature-0-88-1501-0-98370-000027E3E1, Ghostly Councilor, 2632, 0, Creature-0-88-1501-0-98370-000027E3E1, Ghostly Councilor, 2632, 0, 225573, Dark Mending, 32, BUFF", + ["225573-SPELL_AURA_APPLIED"] = "Dark Mending, 225573, SPELL_AURA_APPLIED, 1710160061.541, SPELL_AURA_APPLIED, false, Creature-0-67-1501-0-98370-000035D697, Ghostly Councilor, 2632, 0, Creature-0-67-1501-0-98370-000035D697, Ghostly Councilor, 2632, 0, 225573, Dark Mending, 32, BUFF", + ["225573-SPELL_CAST_START"] = "Dark Mending, 225573, SPELL_CAST_START, 1710160058.975, SPELL_CAST_START, false, Creature-0-67-1501-0-98370-000035D697, Ghostly Councilor, 2632, 0, , nil, -2147483648, -2147483648, 225573, Dark Mending, 32", + ["225573-SPELL_CAST_SUCCESS"] = "Dark Mending, 225573, SPELL_CAST_SUCCESS, 1710160061.541, SPELL_CAST_SUCCESS, false, Creature-0-67-1501-0-98370-000035D697, Ghostly Councilor, 2632, 0, , nil, -2147483648, -2147483648, 225573, Dark Mending, 32", + ["225573-SPELL_AURA_REMOVED"] = "Dark Mending, 225573, SPELL_AURA_REMOVED, 1710160066.541, SPELL_AURA_REMOVED, false, Creature-0-67-1501-0-98370-000035D697, Ghostly Councilor, 2632, 0, Creature-0-67-1501-0-98370-000035D697, Ghostly Councilor, 2632, 0, 225573, Dark Mending, 32, BUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/225732.txt b/WeakAuras/Projects/RaiderlosSA/out/225732.txt new file mode 100644 index 0000000..7525764 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/225732.txt @@ -0,0 +1,7 @@ + ["225732-SPELL_ABSORBED"] = "Strike Down, 225732, SPELL_ABSORBED, 1710331987.487, SPELL_ABSORBED, false, Creature-0-67-1501-0-98538-00001F3539, Lady Velandras Ravencrest, 68168, 0, Player-67-00079DF2, Mblo, 1298, 0, 225732, Strike Down, 1, Player-67-00079DF2, Mblo, 1298, 0, 108366, Soul Leech, 32, 627211", + ["225732-SPELL_AURA_REMOVED"] = "Strike Down, 225732, SPELL_AURA_REMOVED, 1710181173.997, SPELL_AURA_REMOVED, false, Creature-0-88-1501-0-98538-00002DA444, Lady Velandras Ravencrest, 2632, 0, Player-88-00008C31, Kusmanchik-legionx5, 1298, 0, 225732, Strike Down, 1, DEBUFF", + ["225732-SPELL_CAST_SUCCESS"] = "Strike Down, 225732, SPELL_CAST_SUCCESS, 1710074428.691, SPELL_CAST_SUCCESS, false, Creature-0-88-1501-0-98538-000027E3D1, Lady Velandras Ravencrest, 2632, 0, , nil, -2147483648, -2147483648, 225732, Strike Down, 1", + ["225732-SPELL_MISSED"] = "Strike Down, 225732, SPELL_MISSED, 1710074428.691, SPELL_MISSED, false, Creature-0-88-1501-0-98538-000027E3D1, Lady Velandras Ravencrest, 2632, 0, Player-67-0033B422, Фрипал, 1298, 0, 225732, Strike Down, 1, PARRY, false", + ["225732-SPELL_CAST_START"] = "Strike Down, 225732, SPELL_CAST_START, 1710074426.947, SPELL_CAST_START, false, Creature-0-88-1501-0-98538-000027E3D1, Lady Velandras Ravencrest, 2632, 0, , nil, -2147483648, -2147483648, 225732, Strike Down, 1", + ["225732-SPELL_AURA_APPLIED"] = "Strike Down, 225732, SPELL_AURA_APPLIED, 1710181172.926, SPELL_AURA_APPLIED, false, Creature-0-88-1501-0-98538-00002DA444, Lady Velandras Ravencrest, 2632, 0, Player-88-00008C31, Kusmanchik-legionx5, 1298, 0, 225732, Strike Down, 1, DEBUFF", + ["225732-SPELL_DAMAGE"] = "Strike Down, 225732, SPELL_DAMAGE, 1710331987.487, SPELL_DAMAGE, false, Creature-0-67-1501-0-98538-00001F3539, Lady Velandras Ravencrest, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 225732, Strike Down, 1, 554545, -1, 1, nil, nil, 114265, false, false, false, false", diff --git a/WeakAuras/Projects/RaiderlosSA/out/226285.txt b/WeakAuras/Projects/RaiderlosSA/out/226285.txt new file mode 100644 index 0000000..486dc63 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/226285.txt @@ -0,0 +1,4 @@ + ["226285-SPELL_CAST_SUCCESS"] = "Demonic Ascension, 226285, SPELL_CAST_SUCCESS, 1709801784.489, SPELL_CAST_SUCCESS, false, Creature-0-67-1516-0-105617-000027CD7A, Eredar Chaosbringer, 2632, 0, , nil, -2147483648, -2147483648, 226285, Demonic Ascension, 32", + ["226285-SPELL_AURA_APPLIED"] = "Demonic Ascension, 226285, SPELL_AURA_APPLIED, 1709801784.489, SPELL_AURA_APPLIED, false, Creature-0-67-1516-0-105617-000027CD7A, Eredar Chaosbringer, 2632, 0, Creature-0-67-1516-0-105617-000027CD7A, Eredar Chaosbringer, 2632, 0, 226285, Demonic Ascension, 32, BUFF", + ["226285-SPELL_CAST_START"] = "Demonic Ascension, 226285, SPELL_CAST_START, 1709801781.967, SPELL_CAST_START, false, Creature-0-67-1516-0-105617-000027CD7A, Eredar Chaosbringer, 2632, 0, , nil, -2147483648, -2147483648, 226285, Demonic Ascension, 32", + ["226285-SPELL_AURA_REMOVED"] = "Demonic Ascension, 226285, SPELL_AURA_REMOVED, 1709801788.419, SPELL_AURA_REMOVED, false, Creature-0-67-1516-0-105617-000027CD7A, Eredar Chaosbringer, 2632, 0, Creature-0-67-1516-0-105617-000027CD7A, Eredar Chaosbringer, 2632, 0, 226285, Demonic Ascension, 32, BUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/226296.txt b/WeakAuras/Projects/RaiderlosSA/out/226296.txt new file mode 100644 index 0000000..86ec51e --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/226296.txt @@ -0,0 +1,9 @@ + ["226296-SPELL_MISSED"] = "Piercing Shards, 226296, SPELL_MISSED, 1709840532.651, SPELL_MISSED, false, Creature-0-67-1458-0-91000-000061B4F1, Vileshard Hulk, 68168, 0, Player-67-00282563, Fregath, 1298, 0, 226296, Piercing Shards, 8, ABSORB, false, 906884", + ["226296-SPELL_CAST_SUCCESS"] = "Piercing Shards, 226296, SPELL_CAST_SUCCESS, 1709812194.448, SPELL_CAST_SUCCESS, false, Creature-0-67-1458-0-91000-000033762D, Vileshard Hulk, 2632, 0, Player-67-002A36D8, Pakkan, 1298, 0, 226296, Piercing Shards, 8", + ["226296-SPELL_AURA_APPLIED"] = "Piercing Shards, 226296, SPELL_AURA_APPLIED, 1709840037.434, SPELL_AURA_APPLIED, false, Creature-0-67-1458-0-91000-000061B4CF, Vileshard Hulk, 2632, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 226296, Piercing Shards, 8, DEBUFF", + ["226296-SPELL_CAST_START"] = "Piercing Shards, 226296, SPELL_CAST_START, 1709811996.099, SPELL_CAST_START, false, Creature-0-67-1458-0-91000-0000337614, Vileshard Hulk, 2632, 0, , nil, -2147483648, -2147483648, 226296, Piercing Shards, 8", + ["226296-SPELL_AURA_REMOVED"] = "Piercing Shards, 226296, SPELL_AURA_REMOVED, 1709840040.824, SPELL_AURA_REMOVED, false, Creature-0-67-1458-0-91000-000061B4CF, Vileshard Hulk, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 226296, Piercing Shards, 8, DEBUFF", + ["226296-SPELL_ABSORBED"] = "Piercing Shards, 226296, SPELL_ABSORBED, 1709840037.374, SPELL_ABSORBED, false, Creature-0-67-1458-0-91000-000061B4CF, Vileshard Hulk, 2632, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 226296, Piercing Shards, 8, Player-67-002D9DD1, Succpotato, 1297, 0, 108366, Soul Leech, 32, 376067", + ["226296-SPELL_DAMAGE"] = "Piercing Shards, 226296, SPELL_DAMAGE, 1709840037.374, SPELL_DAMAGE, false, Creature-0-67-1458-0-91000-000061B4CF, Vileshard Hulk, 2632, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 226296, Piercing Shards, 8, 3820560, -1, 8, nil, nil, 376067, false, false, false, false", + ["226296-SPELL_PERIODIC_DAMAGE"] = "Piercing Shards, 226296, SPELL_PERIODIC_DAMAGE, 1709840038.381, SPELL_PERIODIC_DAMAGE, false, Creature-0-67-1458-0-91000-000061B4CF, Vileshard Hulk, 2632, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 226296, Piercing Shards, 8, 707381, 0, 8, nil, nil, 8516, false, false, false, false", + ["226296-SPELL_PERIODIC_MISSED"] = "Piercing Shards, 226296, SPELL_PERIODIC_MISSED, 1709840494.004, SPELL_PERIODIC_MISSED, false, Creature-0-67-1458-0-91000-000061B4E8, Vileshard Hulk, 68168, 0, Player-67-00282563, Fregath, 1298, 0, 226296, Piercing Shards, 8, ABSORB, false, 322303", diff --git a/WeakAuras/Projects/RaiderlosSA/out/226316.txt b/WeakAuras/Projects/RaiderlosSA/out/226316.txt new file mode 100644 index 0000000..e69de29 diff --git a/WeakAuras/Projects/RaiderlosSA/out/227254.txt b/WeakAuras/Projects/RaiderlosSA/out/227254.txt new file mode 100644 index 0000000..36ea619 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/227254.txt @@ -0,0 +1,3 @@ + ["227254-SPELL_PERIODIC_ENERGIZE"] = "Evocation, 227254, SPELL_PERIODIC_ENERGIZE, 1709804048.001, SPELL_PERIODIC_ENERGIZE, false, Creature-0-67-1651-0-114247-00002A578D, The Curator, 68168, 0, Creature-0-67-1651-0-114247-00002A578D, The Curator, 68168, 0, 227254, Evocation, 64, 3856, 0, 0, nil", + ["227254-SPELL_AURA_APPLIED"] = "Evocation, 227254, SPELL_AURA_APPLIED, 1709804047, SPELL_AURA_APPLIED, false, Creature-0-67-1651-0-114247-00002A578D, The Curator, 68168, 0, Creature-0-67-1651-0-114247-00002A578D, The Curator, 68168, 0, 227254, Evocation, 64, BUFF", + ["227254-SPELL_AURA_REMOVED"] = "Evocation, 227254, SPELL_AURA_REMOVED, 1709804050.212, SPELL_AURA_REMOVED, false, Creature-0-67-1651-0-114247-00002A578D, The Curator, 68168, 0, Creature-0-67-1651-0-114247-00002A578D, The Curator, 68168, 0, 227254, Evocation, 64, BUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/227267.txt b/WeakAuras/Projects/RaiderlosSA/out/227267.txt new file mode 100644 index 0000000..7dfbb78 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/227267.txt @@ -0,0 +1 @@ + ["227267-SPELL_SUMMON"] = "Summon Volatile Energy, 227267, SPELL_SUMMON, 1709760494.874, SPELL_SUMMON, false, Creature-0-67-1651-0-114247-000056C492, The Curator, 2632, 0, Creature-0-67-1651-0-114249-000056FDCA, Volatile Energy, 2632, 0, 227267, Summon Volatile Energy, 64", diff --git a/WeakAuras/Projects/RaiderlosSA/out/227404.txt b/WeakAuras/Projects/RaiderlosSA/out/227404.txt new file mode 100644 index 0000000..6c6a4bc --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/227404.txt @@ -0,0 +1,4 @@ + ["227404-SPELL_AURA_REMOVED"] = "Intangible Presence, 227404, SPELL_AURA_REMOVED, 1709913442.618, SPELL_AURA_REMOVED, false, Vehicle-0-67-1651-0-114264-000049DEB5, Midnight, 68168, 0, Player-67-002E06C1, Yabadabaduu, 1298, 0, 227404, Intangible Presence, 32, DEBUFF", + ["227404-SPELL_AURA_APPLIED"] = "Intangible Presence, 227404, SPELL_AURA_APPLIED, 1709913431.135, SPELL_AURA_APPLIED, false, Vehicle-0-67-1651-0-114264-000049DEB5, Midnight, 68168, 0, Player-67-000369E9, Иллидарияя, 1298, 0, 227404, Intangible Presence, 32, DEBUFF", + ["227404-SPELL_AURA_APPLIED"] = "Intangible Presence, 227404, SPELL_AURA_APPLIED, 1709910145.757, SPELL_AURA_APPLIED, false, Vehicle-0-67-1651-0-114264-0000456962, Midnight, 68168, 0, Player-67-0034F98C, Elisnakiri, 1298, 0, 227404, Intangible Presence, 32, DEBUFF", + ["227404-SPELL_AURA_REMOVED"] = "Intangible Presence, 227404, SPELL_AURA_REMOVED, 1709910165.587, SPELL_AURA_REMOVED, false, Vehicle-0-67-1651-0-114264-0000456962, Midnight, 68168, 0, Player-67-0034F98C, Elisnakiri, 1298, 0, 227404, Intangible Presence, 32, DEBUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/227463.txt b/WeakAuras/Projects/RaiderlosSA/out/227463.txt new file mode 100644 index 0000000..e09096b --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/227463.txt @@ -0,0 +1,4 @@ + ["227463-SPELL_CAST_START"] = "Whirling Edge, 227463, SPELL_CAST_START, 1709938975.256, SPELL_CAST_START, false, Creature-0-67-1651-0-114320-000071EECA, Lord Robin Daris, 2632, 0, , nil, -2147483648, -2147483648, 227463, Whirling Edge, 1", + ["227463-SPELL_CAST_SUCCESS"] = "Whirling Edge, 227463, SPELL_CAST_SUCCESS, 1709938975.74, SPELL_CAST_SUCCESS, false, Creature-0-67-1651-0-114320-000071EECA, Lord Robin Daris, 2632, 0, Player-67-0034D08E, Карлйк, 1298, 64, 227463, Whirling Edge, 1", + ["227463-SPELL_CAST_SUCCESS"] = "Whirling Edge, 227463, SPELL_CAST_SUCCESS, 1709910041.514, SPELL_CAST_SUCCESS, false, Creature-0-67-1651-0-114320-0000456A0E, Lord Robin Daris, 2584, 0, Player-67-00352BEE, Wosadel, 1352, 0, 227463, Whirling Edge, 1", + ["227463-SPELL_CAST_START"] = "Whirling Edge, 227463, SPELL_CAST_START, 1709910041.051, SPELL_CAST_START, false, Creature-0-67-1651-0-114320-0000456A0E, Lord Robin Daris, 2584, 0, , nil, -2147483648, -2147483648, 227463, Whirling Edge, 1", diff --git a/WeakAuras/Projects/RaiderlosSA/out/227493.txt b/WeakAuras/Projects/RaiderlosSA/out/227493.txt new file mode 100644 index 0000000..1e2a0a1 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/227493.txt @@ -0,0 +1,10 @@ + ["227493-SPELL_CAST_START"] = "Mortal Strike, 227493, SPELL_CAST_START, 1709913448.303, SPELL_CAST_START, false, Creature-0-67-1651-0-114262-000049E08F, Attumen the Huntsman, 2632, 0, , nil, -2147483648, -2147483648, 227493, Mortal Strike, 32", + ["227493-SPELL_AURA_REMOVED"] = "Mortal Strike, 227493, SPELL_AURA_REMOVED, 1709913459.926, SPELL_AURA_REMOVED, false, Creature-0-67-1651-0-114262-000049E08F, Attumen the Huntsman, 2632, 0, Player-67-000369E9, Иллидарияя, 1298, 0, 227493, Mortal Strike, 32, DEBUFF", + ["227493-SPELL_MISSED"] = "Mortal Strike, 227493, SPELL_MISSED, 1709913571.223, SPELL_MISSED, false, Creature-0-67-1651-0-114262-00004B0B6A, Attumen the Huntsman, 68168, 0, Player-67-001A361E, Hullsa, 1298, 0, 227493, Mortal Strike, 32, DODGE, false", + ["227493-SPELL_DAMAGE"] = "Mortal Strike, 227493, SPELL_DAMAGE, 1709913449.846, SPELL_DAMAGE, false, Creature-0-67-1651-0-114262-000049E08F, Attumen the Huntsman, 2632, 0, Player-67-000369E9, Иллидарияя, 1298, 0, 227493, Mortal Strike, 32, 613039, -1, 32, nil, nil, nil, false, false, false, false", + ["227493-SPELL_ABSORBED"] = "Mortal Strike, 227493, SPELL_ABSORBED, 1709913571.223, SPELL_ABSORBED, false, Creature-0-67-1651-0-114262-00004B0B6A, Attumen the Huntsman, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 227493, Mortal Strike, 32, Player-67-002D9DD1, Succpotato, 1297, 0, 108366, Soul Leech, 32, 208608", + ["227493-SPELL_CAST_SUCCESS"] = "Mortal Strike, 227493, SPELL_CAST_SUCCESS, 1709913449.846, SPELL_CAST_SUCCESS, false, Creature-0-67-1651-0-114262-000049E08F, Attumen the Huntsman, 2632, 0, , nil, -2147483648, -2147483648, 227493, Mortal Strike, 32", + ["227493-SPELL_AURA_APPLIED"] = "Mortal Strike, 227493, SPELL_AURA_APPLIED, 1709913449.909, SPELL_AURA_APPLIED, false, Creature-0-67-1651-0-114262-000049E08F, Attumen the Huntsman, 2632, 0, Player-67-000369E9, Иллидарияя, 1298, 0, 227493, Mortal Strike, 32, DEBUFF", + ["227493-SPELL_MISSED"] = "Mortal Strike, 227493, SPELL_MISSED, 1709910157.265, SPELL_MISSED, false, Creature-0-67-1651-0-114262-00004603E7, Attumen the Huntsman, 68168, 0, Player-67-00352BEE, Wosadel, 1298, 0, 227493, Mortal Strike, 32, PARRY, false", + ["227493-SPELL_CAST_SUCCESS"] = "Mortal Strike, 227493, SPELL_CAST_SUCCESS, 1709910157.265, SPELL_CAST_SUCCESS, false, Creature-0-67-1651-0-114262-00004603E7, Attumen the Huntsman, 68168, 0, , nil, -2147483648, -2147483648, 227493, Mortal Strike, 32", + ["227493-SPELL_CAST_START"] = "Mortal Strike, 227493, SPELL_CAST_START, 1709910155.735, SPELL_CAST_START, false, Creature-0-67-1651-0-114262-00004603E7, Attumen the Huntsman, 68168, 0, , nil, -2147483648, -2147483648, 227493, Mortal Strike, 32", diff --git a/WeakAuras/Projects/RaiderlosSA/out/227508.txt b/WeakAuras/Projects/RaiderlosSA/out/227508.txt new file mode 100644 index 0000000..66d3360 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/227508.txt @@ -0,0 +1,4 @@ + ["227508-SPELL_CAST_START"] = "Mass Repentance, 227508, SPELL_CAST_START, 1710353116.772, SPELL_CAST_START, false, Creature-0-7-1651-0-113971-000023675D, Maiden of Virtue, 68168, 0, , nil, -2147483648, -2147483648, 227508, Mass Repentance, 2", + ["227508-SPELL_CAST_SUCCESS"] = "Mass Repentance, 227508, SPELL_CAST_SUCCESS, 1710353121.796, SPELL_CAST_SUCCESS, false, Creature-0-7-1651-0-113971-000023675D, Maiden of Virtue, 68168, 0, , nil, -2147483648, -2147483648, 227508, Mass Repentance, 2", + ["227508-SPELL_AURA_APPLIED"] = "Mass Repentance, 227508, SPELL_AURA_APPLIED, 1710353121.864, SPELL_AURA_APPLIED, false, Creature-0-7-1651-0-113971-000023675D, Maiden of Virtue, 68168, 0, Player-67-0028501B, Cromash, 1298, 0, 227508, Mass Repentance, 2, DEBUFF", + ["227508-SPELL_AURA_REMOVED"] = "Mass Repentance, 227508, SPELL_AURA_REMOVED, 1710353122.018, SPELL_AURA_REMOVED, false, Creature-0-7-1651-0-113971-000023675D, Maiden of Virtue, 68168, 0, Player-67-002547E4, Sharngan, 1298, 0, 227508, Mass Repentance, 2, DEBUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/227568.txt b/WeakAuras/Projects/RaiderlosSA/out/227568.txt new file mode 100644 index 0000000..0228875 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/227568.txt @@ -0,0 +1,8 @@ + ["227568-SPELL_PERIODIC_DAMAGE"] = "Burning Leg Sweep, 227568, SPELL_PERIODIC_DAMAGE, 1710108890.6, SPELL_PERIODIC_DAMAGE, false, Creature-0-67-1651-0-114261-00007C24C9, Toe Knee, 68168, 0, Player-67-00345CD7, Bagrintwo, 1298, 0, 227568, Burning Leg Sweep, 4, 931950, 122484, 4, nil, nil, nil, false, false, false, false", + ["227568-SPELL_AURA_APPLIED"] = "Burning Leg Sweep, 227568, SPELL_AURA_APPLIED, 1710108888.608, SPELL_AURA_APPLIED, false, Creature-0-67-1651-0-114261-00007C24C9, Toe Knee, 2632, 0, Player-67-00345CD7, Bagrintwo, 1298, 0, 227568, Burning Leg Sweep, 4, DEBUFF", + ["227568-SPELL_CAST_SUCCESS"] = "Burning Leg Sweep, 227568, SPELL_CAST_SUCCESS, 1710108888.565, SPELL_CAST_SUCCESS, false, Creature-0-67-1651-0-114261-00007C24C9, Toe Knee, 2632, 0, , nil, -2147483648, -2147483648, 227568, Burning Leg Sweep, 4", + ["227568-SPELL_DAMAGE"] = "Burning Leg Sweep, 227568, SPELL_DAMAGE, 1710108888.565, SPELL_DAMAGE, false, Creature-0-67-1651-0-114261-00007C24C9, Toe Knee, 2632, 0, Player-67-00352C1E, Icoo, 1298, 0, 227568, Burning Leg Sweep, 4, 851726, -1, 4, nil, nil, nil, false, false, false, false", + ["227568-SPELL_ABSORBED"] = "Burning Leg Sweep, 227568, SPELL_ABSORBED, 1710108888.548, SPELL_ABSORBED, false, Creature-0-67-1651-0-114261-00007C24C9, Toe Knee, 2632, 0, Player-67-003453A3, Notadh, 1298, 0, 227568, Burning Leg Sweep, 4, Player-67-003453A3, Notadh, 1298, 0, 235169, Archimonde's Hatred Reborn, 1, 689633", + ["227568-SPELL_CAST_START"] = "Burning Leg Sweep, 227568, SPELL_CAST_START, 1710108885.799, SPELL_CAST_START, false, Creature-0-67-1651-0-114261-00007C24C9, Toe Knee, 2632, 0, , nil, -2147483648, -2147483648, 227568, Burning Leg Sweep, 4", + ["227568-SPELL_MISSED"] = "Burning Leg Sweep, 227568, SPELL_MISSED, 1710108888.565, SPELL_MISSED, false, Creature-0-67-1651-0-114261-00007C24C9, Toe Knee, 2632, 0, Player-67-003453A3, Notadh, 1298, 0, 227568, Burning Leg Sweep, 4, ABSORB, false, 689633", + ["227568-SPELL_AURA_REMOVED"] = "Burning Leg Sweep, 227568, SPELL_AURA_REMOVED, 1710108890.617, SPELL_AURA_REMOVED, false, Creature-0-67-1651-0-114261-00007C24C9, Toe Knee, 68168, 0, Player-67-00345CD7, Bagrintwo, 1298, 0, 227568, Burning Leg Sweep, 4, DEBUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/227592.txt b/WeakAuras/Projects/RaiderlosSA/out/227592.txt new file mode 100644 index 0000000..269f3b8 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/227592.txt @@ -0,0 +1,5 @@ + ["227592-SPELL_CAST_START"] = "Frostbite, 227592, SPELL_CAST_START, 1709804132.312, SPELL_CAST_START, false, Creature-0-67-1651-0-114350-00002A9EDB, Shade of Medivh, 68168, 0, , nil, -2147483648, -2147483648, 227592, Frostbite, 16", + ["227592-SPELL_AURA_APPLIED"] = "Frostbite, 227592, SPELL_AURA_APPLIED, 1709804135.942, SPELL_AURA_APPLIED, false, Creature-0-67-1651-0-114350-00002A9EDB, Shade of Medivh, 68168, 0, Player-67-0035205B, Laewiä, 1298, 0, 227592, Frostbite, 16, DEBUFF", + ["227592-SPELL_AURA_REMOVED"] = "Frostbite, 227592, SPELL_AURA_REMOVED, 1709804156.031, SPELL_AURA_REMOVED, false, Creature-0-67-1651-0-114350-00002A9EDB, Shade of Medivh, 68168, 0, Player-67-0035205B, Laewiä, 1298, 0, 227592, Frostbite, 16, DEBUFF", + ["227592-SPELL_DAMAGE"] = "Frostbite, 227592, SPELL_DAMAGE, 1709804135.896, SPELL_DAMAGE, false, Creature-0-67-1651-0-114350-00002A9EDB, Shade of Medivh, 68168, 0, Player-67-0035205B, Laewiä, 1298, 0, 227592, Frostbite, 16, 1761421, -1, 16, nil, nil, nil, false, false, false, false", + ["227592-SPELL_CAST_SUCCESS"] = "Frostbite, 227592, SPELL_CAST_SUCCESS, 1709804135.344, SPELL_CAST_SUCCESS, false, Creature-0-67-1651-0-114350-00002A9EDB, Shade of Medivh, 68168, 0, Player-67-0035205B, Laewiä, 1298, 0, 227592, Frostbite, 16", diff --git a/WeakAuras/Projects/RaiderlosSA/out/227615.txt b/WeakAuras/Projects/RaiderlosSA/out/227615.txt new file mode 100644 index 0000000..66d4efd --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/227615.txt @@ -0,0 +1,2 @@ + ["227615-SPELL_CAST_START"] = "Inferno Bolt, 227615, SPELL_CAST_START, 1709760605.188, SPELL_CAST_START, false, Creature-0-67-1651-0-114350-00005713CB, Shade of Medivh, 68168, 0, , nil, -2147483648, -2147483648, 227615, Inferno Bolt, 4", + ["227615-SPELL_CAST_SUCCESS"] = "Inferno Bolt, 227615, SPELL_CAST_SUCCESS, 1709760608.222, SPELL_CAST_SUCCESS, false, Creature-0-67-1651-0-114350-00005713CB, Shade of Medivh, 68168, 0, Player-67-003516C9, Mistwrap, 1298, 0, 227615, Inferno Bolt, 4", diff --git a/WeakAuras/Projects/RaiderlosSA/out/227628.txt b/WeakAuras/Projects/RaiderlosSA/out/227628.txt new file mode 100644 index 0000000..ed1fc15 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/227628.txt @@ -0,0 +1 @@ + ["227628-SPELL_CAST_SUCCESS"] = "Piercing Missiles, 227628, SPELL_CAST_SUCCESS, 1709760609.284, SPELL_CAST_SUCCESS, false, Creature-0-67-1651-0-114350-00005713CB, Shade of Medivh, 68168, 0, Player-67-001380D1, Симпотяяшка, 1298, 0, 227628, Piercing Missiles, 64", diff --git a/WeakAuras/Projects/RaiderlosSA/out/227646.txt b/WeakAuras/Projects/RaiderlosSA/out/227646.txt new file mode 100644 index 0000000..f640a27 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/227646.txt @@ -0,0 +1,4 @@ + ["227646-SPELL_AURA_APPLIED"] = "Iron Whirlwind, 227646, SPELL_AURA_APPLIED, 1710109587.717, SPELL_AURA_APPLIED, false, Creature-0-67-1651-0-114318-00007BEA9E, Baron Rafe Dreuger, 2632, 0, Creature-0-67-1651-0-114318-00007BEA9E, Baron Rafe Dreuger, 2632, 0, 227646, Iron Whirlwind, 1, BUFF", + ["227646-SPELL_AURA_REMOVED"] = "Iron Whirlwind, 227646, SPELL_AURA_REMOVED, 1710109595.727, SPELL_AURA_REMOVED, false, Creature-0-67-1651-0-114318-00007BEA9E, Baron Rafe Dreuger, 2632, 0, Creature-0-67-1651-0-114318-00007BEA9E, Baron Rafe Dreuger, 2632, 0, 227646, Iron Whirlwind, 1, BUFF", + ["227646-SPELL_AURA_APPLIED"] = "Iron Whirlwind, 227646, SPELL_AURA_APPLIED, 1709910046.005, SPELL_AURA_APPLIED, false, Creature-0-67-1651-0-114318-0000456A0D, Baron Rafe Dreuger, 2584, 0, Creature-0-67-1651-0-114318-0000456A0D, Baron Rafe Dreuger, 2584, 0, 227646, Iron Whirlwind, 1, BUFF", + ["227646-SPELL_AURA_REMOVED"] = "Iron Whirlwind, 227646, SPELL_AURA_REMOVED, 1709910051.618, SPELL_AURA_REMOVED, false, Creature-0-67-1651-0-114318-0000456A0D, Baron Rafe Dreuger, 2584, 0, Creature-0-67-1651-0-114318-0000456A0D, Baron Rafe Dreuger, 2584, 0, 227646, Iron Whirlwind, 1, BUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/227672.txt b/WeakAuras/Projects/RaiderlosSA/out/227672.txt new file mode 100644 index 0000000..d340dd8 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/227672.txt @@ -0,0 +1,5 @@ + ["227672-SPELL_MISSED"] = "Will Breaker, 227672, SPELL_MISSED, 1710109593.863, SPELL_MISSED, false, Creature-0-67-1651-0-114321-00007BEAA0, Lord Crispin Ference, 2632, 0, Pet-0-67-1651-0-78158-00007CFCF5, Doomguard, 4369, 0, 227672, Will Breaker, 2, ABSORB, false, 123467", + ["227672-SPELL_CAST_START"] = "Will Breaker, 227672, SPELL_CAST_START, 1709939021.795, SPELL_CAST_START, false, Creature-0-67-1651-0-114321-0000724BBA, Lord Crispin Ference, 2632, 0, , nil, -2147483648, -2147483648, 227672, Will Breaker, 2", + ["227672-SPELL_ABSORBED"] = "Will Breaker, 227672, SPELL_ABSORBED, 1710109593.863, SPELL_ABSORBED, false, Creature-0-67-1651-0-114321-00007BEAA0, Lord Crispin Ference, 2632, 0, Player-67-0033159C, Yogistyle, 1298, 0, 227672, Will Breaker, 2, Player-67-0033159C, Yogistyle, 1298, 0, 122470, Touch of Karma, 1, 905570", + ["227672-SPELL_DAMAGE"] = "Will Breaker, 227672, SPELL_DAMAGE, 1709939022.682, SPELL_DAMAGE, false, Creature-0-67-1651-0-114321-0000724BBA, Lord Crispin Ference, 2632, 0, Player-67-00247307, Smallpumper, 1298, 0, 227672, Will Breaker, 2, 1666533, -1, 2, nil, nil, nil, false, false, false, false", + ["227672-SPELL_CAST_SUCCESS"] = "Will Breaker, 227672, SPELL_CAST_SUCCESS, 1709939022.682, SPELL_CAST_SUCCESS, false, Creature-0-67-1651-0-114321-0000724BBA, Lord Crispin Ference, 2632, 0, Player-67-00247307, Smallpumper, 1298, 0, 227672, Will Breaker, 2", diff --git a/WeakAuras/Projects/RaiderlosSA/out/227776.txt b/WeakAuras/Projects/RaiderlosSA/out/227776.txt new file mode 100644 index 0000000..e69de29 diff --git a/WeakAuras/Projects/RaiderlosSA/out/227779.txt b/WeakAuras/Projects/RaiderlosSA/out/227779.txt new file mode 100644 index 0000000..e69de29 diff --git a/WeakAuras/Projects/RaiderlosSA/out/227793.txt b/WeakAuras/Projects/RaiderlosSA/out/227793.txt new file mode 100644 index 0000000..e69de29 diff --git a/WeakAuras/Projects/RaiderlosSA/out/227966.txt b/WeakAuras/Projects/RaiderlosSA/out/227966.txt new file mode 100644 index 0000000..8bfe484 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/227966.txt @@ -0,0 +1,3 @@ + ["227966-SPELL_DAMAGE"] = "Flashlight, 227966, SPELL_DAMAGE, 1709909914.586, SPELL_DAMAGE, false, Creature-0-67-1651-0-114544-0000456ACA, Skeletal Usher, 2632, 0, Player-67-0034F98C, Elisnakiri, 1298, 0, 227966, Flashlight, 2, 146051, -1, 2, nil, nil, nil, false, false, false, false", + ["227966-SPELL_CAST_START"] = "Flashlight, 227966, SPELL_CAST_START, 1709909899.852, SPELL_CAST_START, false, Creature-0-67-1651-0-114544-0000456A9E, Skeletal Usher, 2632, 0, , nil, -2147483648, -2147483648, 227966, Flashlight, 2", + ["227966-SPELL_CAST_SUCCESS"] = "Flashlight, 227966, SPELL_CAST_SUCCESS, 1709909914.586, SPELL_CAST_SUCCESS, false, Creature-0-67-1651-0-114544-0000456ACA, Skeletal Usher, 2632, 0, , nil, -2147483648, -2147483648, 227966, Flashlight, 2", diff --git a/WeakAuras/Projects/RaiderlosSA/out/227987.txt b/WeakAuras/Projects/RaiderlosSA/out/227987.txt new file mode 100644 index 0000000..12bc768 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/227987.txt @@ -0,0 +1 @@ + ["227987-SPELL_CAST_START"] = "Dinner Bell!, 227987, SPELL_CAST_START, 1710352324.544, SPELL_CAST_START, false, Creature-0-7-1651-0-114328-0000237E53, Coggleston, 68168, 0, , nil, -2147483648, -2147483648, 227987, Dinner Bell!, 4", diff --git a/WeakAuras/Projects/RaiderlosSA/out/228025.txt b/WeakAuras/Projects/RaiderlosSA/out/228025.txt new file mode 100644 index 0000000..e69de29 diff --git a/WeakAuras/Projects/RaiderlosSA/out/228221.txt b/WeakAuras/Projects/RaiderlosSA/out/228221.txt new file mode 100644 index 0000000..b11efc6 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/228221.txt @@ -0,0 +1,2 @@ + ["228221-SPELL_AURA_APPLIED"] = "Severe Dusting, 228221, SPELL_AURA_APPLIED, 1710352267.374, SPELL_AURA_APPLIED, false, Creature-0-7-1651-0-114330-0000237E55, Babblet, 2632, 0, Player-7-00105511, Mezi-epicx1, 1298, 0, 228221, Severe Dusting, 1, DEBUFF", + ["228221-SPELL_AURA_REMOVED"] = "Severe Dusting, 228221, SPELL_AURA_REMOVED, 1710352279.507, SPELL_AURA_REMOVED, false, Creature-0-7-1651-0-114330-0000237E55, Babblet, 2632, 0, Player-7-00105511, Mezi-epicx1, 1298, 64, 228221, Severe Dusting, 1, DEBUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/228225.txt b/WeakAuras/Projects/RaiderlosSA/out/228225.txt new file mode 100644 index 0000000..e69de29 diff --git a/WeakAuras/Projects/RaiderlosSA/out/228269.txt b/WeakAuras/Projects/RaiderlosSA/out/228269.txt new file mode 100644 index 0000000..4286d5b --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/228269.txt @@ -0,0 +1,2 @@ + ["228269-SPELL_CAST_START"] = "Flame Wreath, 228269, SPELL_CAST_START, 1709804155.502, SPELL_CAST_START, false, Creature-0-67-1651-0-114350-00002A9EDB, Shade of Medivh, 68168, 0, , nil, -2147483648, -2147483648, 228269, Flame Wreath, 4", + ["228269-SPELL_CAST_SUCCESS"] = "Flame Wreath, 228269, SPELL_CAST_SUCCESS, 1709804158.55, SPELL_CAST_SUCCESS, false, Creature-0-67-1651-0-114350-00002A9EDB, Shade of Medivh, 68168, 0, , nil, -2147483648, -2147483648, 228269, Flame Wreath, 4", diff --git a/WeakAuras/Projects/RaiderlosSA/out/228277.txt b/WeakAuras/Projects/RaiderlosSA/out/228277.txt new file mode 100644 index 0000000..46e86cf --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/228277.txt @@ -0,0 +1,8 @@ + ["228277-SPELL_CAST_START"] = "Shackles of Servitude, 228277, SPELL_CAST_START, 1709913037.858, SPELL_CAST_START, false, Creature-0-67-1651-0-114629-000049DFC4, Spectral Retainer, 2632, 0, , nil, -2147483648, -2147483648, 228277, Shackles of Servitude, 32", + ["228277-SPELL_AURA_REMOVED"] = "Shackles of Servitude, 228277, SPELL_AURA_REMOVED, 1709913076.959, SPELL_AURA_REMOVED, false, Creature-0-67-1651-0-114629-000049DFC4, Spectral Retainer, 2632, 0, Player-67-002E06C1, Yabadabaduu, 1298, 0, 228277, Shackles of Servitude, 32, DEBUFF", + ["228277-SPELL_AURA_APPLIED"] = "Shackles of Servitude, 228277, SPELL_AURA_APPLIED, 1709913061.954, SPELL_AURA_APPLIED, false, Creature-0-67-1651-0-114629-000049DFC4, Spectral Retainer, 2632, 0, Player-67-002E06C1, Yabadabaduu, 1298, 0, 228277, Shackles of Servitude, 32, DEBUFF", + ["228277-SPELL_CAST_SUCCESS"] = "Shackles of Servitude, 228277, SPELL_CAST_SUCCESS, 1709913061.917, SPELL_CAST_SUCCESS, false, Creature-0-67-1651-0-114629-000049DFC4, Spectral Retainer, 2632, 0, Player-67-002E06C1, Yabadabaduu, 1298, 0, 228277, Shackles of Servitude, 32", + ["228277-SPELL_CAST_START"] = "Shackles of Servitude, 228277, SPELL_CAST_START, 1709910019.784, SPELL_CAST_START, false, Creature-0-67-1651-0-114634-0000456A70, Undying Servant, 2632, 0, , nil, -2147483648, -2147483648, 228277, Shackles of Servitude, 32", + ["228277-SPELL_AURA_APPLIED"] = "Shackles of Servitude, 228277, SPELL_AURA_APPLIED, 1709910021.879, SPELL_AURA_APPLIED, false, Creature-0-67-1651-0-114634-0000456A70, Undying Servant, 2632, 0, Player-67-0034F98C, Elisnakiri, 1298, 0, 228277, Shackles of Servitude, 32, DEBUFF", + ["228277-SPELL_CAST_SUCCESS"] = "Shackles of Servitude, 228277, SPELL_CAST_SUCCESS, 1709910021.833, SPELL_CAST_SUCCESS, false, Creature-0-67-1651-0-114634-0000456A70, Undying Servant, 2632, 0, Player-67-0034F98C, Elisnakiri, 1298, 0, 228277, Shackles of Servitude, 32", + ["228277-SPELL_AURA_REMOVED"] = "Shackles of Servitude, 228277, SPELL_AURA_REMOVED, 1709910022.838, SPELL_AURA_REMOVED, false, Creature-0-67-1651-0-114634-0000456A70, Undying Servant, 2632, 0, Player-67-0034F98C, Elisnakiri, 1298, 0, 228277, Shackles of Servitude, 32, DEBUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/228278.txt b/WeakAuras/Projects/RaiderlosSA/out/228278.txt new file mode 100644 index 0000000..d6f3eaa --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/228278.txt @@ -0,0 +1,8 @@ + ["228278-SPELL_CAST_START"] = "Demoralizing Shout, 228278, SPELL_CAST_START, 1709913035.712, SPELL_CAST_START, false, Creature-0-67-1651-0-114633-000049DFDE, Spectral Valet, 2632, 0, , nil, -2147483648, -2147483648, 228278, Demoralizing Shout, 1", + ["228278-SPELL_CAST_SUCCESS"] = "Demoralizing Shout, 228278, SPELL_CAST_SUCCESS, 1709913059.252, SPELL_CAST_SUCCESS, false, Creature-0-67-1651-0-114633-000049DFDE, Spectral Valet, 2632, 0, , nil, -2147483648, -2147483648, 228278, Demoralizing Shout, 1", + ["228278-SPELL_AURA_REMOVED"] = "Demoralizing Shout, 228278, SPELL_AURA_REMOVED, 1709938883.802, SPELL_AURA_REMOVED, false, Creature-0-67-1651-0-114633-000071EEC1, Spectral Valet, 2632, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 228278, Demoralizing Shout, 1, DEBUFF", + ["228278-SPELL_AURA_APPLIED"] = "Demoralizing Shout, 228278, SPELL_AURA_APPLIED, 1709938863.788, SPELL_AURA_APPLIED, false, Creature-0-67-1651-0-114633-000071EEC1, Spectral Valet, 2632, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 228278, Demoralizing Shout, 1, DEBUFF", + ["228278-SPELL_CAST_SUCCESS"] = "Demoralizing Shout, 228278, SPELL_CAST_SUCCESS, 1709909901.636, SPELL_CAST_SUCCESS, false, Creature-0-67-1651-0-114633-0000456A8C, Spectral Valet, 68168, 0, , nil, -2147483648, -2147483648, 228278, Demoralizing Shout, 1", + ["228278-SPELL_AURA_APPLIED"] = "Demoralizing Shout, 228278, SPELL_AURA_APPLIED, 1709909901.636, SPELL_AURA_APPLIED, false, Creature-0-67-1651-0-114633-0000456A8C, Spectral Valet, 68168, 0, Creature-0-67-1651-0-97055-000045B5E6, Shambling Horror, 4370, 0, 228278, Demoralizing Shout, 1, DEBUFF", + ["228278-SPELL_AURA_REMOVED"] = "Demoralizing Shout, 228278, SPELL_AURA_REMOVED, 1709909903.147, SPELL_AURA_REMOVED, false, Creature-0-67-1651-0-114633-0000456A8C, Spectral Valet, 68168, 0, Creature-0-67-1651-0-97055-000045B5E6, Shambling Horror, 4370, 0, 228278, Demoralizing Shout, 1, DEBUFF", + ["228278-SPELL_CAST_START"] = "Demoralizing Shout, 228278, SPELL_CAST_START, 1709909899.633, SPELL_CAST_START, false, Creature-0-67-1651-0-114633-0000456A8C, Spectral Valet, 2632, 0, , nil, -2147483648, -2147483648, 228278, Demoralizing Shout, 1", diff --git a/WeakAuras/Projects/RaiderlosSA/out/228279.txt b/WeakAuras/Projects/RaiderlosSA/out/228279.txt new file mode 100644 index 0000000..90dc9cf --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/228279.txt @@ -0,0 +1,8 @@ + ["228279-SPELL_CAST_SUCCESS"] = "Shadow Rejuvenation, 228279, SPELL_CAST_SUCCESS, 1709913568.703, SPELL_CAST_SUCCESS, false, Creature-0-67-1651-0-114632-000049DF00, Spectral Attendant, 2632, 0, , nil, -2147483648, -2147483648, 228279, Shadow Rejuvenation, 32", + ["228279-SPELL_AURA_APPLIED"] = "Shadow Rejuvenation, 228279, SPELL_AURA_APPLIED, 1709913568.703, SPELL_AURA_APPLIED, false, Creature-0-67-1651-0-114632-000049DF00, Spectral Attendant, 2632, 0, Creature-0-67-1651-0-114632-000049DF00, Spectral Attendant, 2632, 0, 228279, Shadow Rejuvenation, 32, BUFF", + ["228279-SPELL_CAST_START"] = "Shadow Rejuvenation, 228279, SPELL_CAST_START, 1709913567.14, SPELL_CAST_START, false, Creature-0-67-1651-0-114632-000049DF00, Spectral Attendant, 2632, 0, , nil, -2147483648, -2147483648, 228279, Shadow Rejuvenation, 32", + ["228279-SPELL_AURA_REMOVED"] = "Shadow Rejuvenation, 228279, SPELL_AURA_REMOVED, 1709913572.582, SPELL_AURA_REMOVED, false, Creature-0-67-1651-0-114632-000049DF00, Spectral Attendant, 2632, 0, Creature-0-67-1651-0-114632-000049DF00, Spectral Attendant, 2632, 0, 228279, Shadow Rejuvenation, 32, BUFF", + ["228279-SPELL_AURA_APPLIED"] = "Shadow Rejuvenation, 228279, SPELL_AURA_APPLIED, 1709910015.324, SPELL_AURA_APPLIED, false, Creature-0-67-1651-0-114632-0000456A6F, Spectral Attendant, 2632, 0, Creature-0-67-1651-0-114632-0000456A6F, Spectral Attendant, 2632, 0, 228279, Shadow Rejuvenation, 32, BUFF", + ["228279-SPELL_CAST_SUCCESS"] = "Shadow Rejuvenation, 228279, SPELL_CAST_SUCCESS, 1709910015.324, SPELL_CAST_SUCCESS, false, Creature-0-67-1651-0-114632-0000456A6F, Spectral Attendant, 2632, 0, , nil, -2147483648, -2147483648, 228279, Shadow Rejuvenation, 32", + ["228279-SPELL_CAST_START"] = "Shadow Rejuvenation, 228279, SPELL_CAST_START, 1709910013.842, SPELL_CAST_START, false, Creature-0-67-1651-0-114632-0000456A6F, Spectral Attendant, 2632, 0, , nil, -2147483648, -2147483648, 228279, Shadow Rejuvenation, 32", + ["228279-SPELL_AURA_REMOVED"] = "Shadow Rejuvenation, 228279, SPELL_AURA_REMOVED, 1709910027.35, SPELL_AURA_REMOVED, false, Creature-0-67-1651-0-114632-0000456A6F, Spectral Attendant, 2632, 0, Creature-0-67-1651-0-114632-0000456A6F, Spectral Attendant, 2632, 0, 228279, Shadow Rejuvenation, 32, BUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/228837.txt b/WeakAuras/Projects/RaiderlosSA/out/228837.txt new file mode 100644 index 0000000..e69de29 diff --git a/WeakAuras/Projects/RaiderlosSA/out/228852.txt b/WeakAuras/Projects/RaiderlosSA/out/228852.txt new file mode 100644 index 0000000..e2b7c10 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/228852.txt @@ -0,0 +1,3 @@ + ["228852-SPELL_DAMAGE"] = "Shared Suffering, 228852, SPELL_DAMAGE, 1709939101.277, SPELL_DAMAGE, false, Creature-0-67-1651-0-114262-000071F012, Attumen the Huntsman, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 228852, Shared Suffering, 32, 4750072, -1, 32, nil, nil, nil, false, false, false, false", + ["228852-SPELL_CAST_START"] = "Shared Suffering, 228852, SPELL_CAST_START, 1709913456.27, SPELL_CAST_START, false, Creature-0-67-1651-0-114262-000049E08F, Attumen the Huntsman, 2632, 0, , nil, -2147483648, -2147483648, 228852, Shared Suffering, 32", + ["228852-SPELL_CAST_SUCCESS"] = "Shared Suffering, 228852, SPELL_CAST_SUCCESS, 1709913460.12, SPELL_CAST_SUCCESS, false, Creature-0-67-1651-0-114262-000049E08F, Attumen the Huntsman, 2632, 0, , nil, -2147483648, -2147483648, 228852, Shared Suffering, 32", diff --git a/WeakAuras/Projects/RaiderlosSA/out/229083.txt b/WeakAuras/Projects/RaiderlosSA/out/229083.txt new file mode 100644 index 0000000..18d2111 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/229083.txt @@ -0,0 +1,9 @@ + ["229083-SPELL_PERIODIC_MISSED"] = "Burning Blast, 229083, SPELL_PERIODIC_MISSED, 1709760933.445, SPELL_PERIODIC_MISSED, false, Creature-0-67-1651-0-114790-000057714E, Viz'aduum the Watcher, 68168, 0, Player-67-001380D1, Симпотяяшка, 1298, 0, 229083, Burning Blast, 4, IMMUNE, false", + ["229083-SPELL_CAST_START"] = "Burning Blast, 229083, SPELL_CAST_START, 1709760920.383, SPELL_CAST_START, false, Creature-0-67-1651-0-114790-000057714E, Viz'aduum the Watcher, 68168, 0, , nil, -2147483648, -2147483648, 229083, Burning Blast, 4", + ["229083-SPELL_AURA_REMOVED"] = "Burning Blast, 229083, SPELL_AURA_REMOVED, 1709760935.397, SPELL_AURA_REMOVED, false, Creature-0-67-1651-0-114790-000057714E, Viz'aduum the Watcher, 68168, 0, Player-67-001380D1, Симпотяяшка, 1298, 0, 229083, Burning Blast, 4, DEBUFF", + ["229083-SPELL_AURA_APPLIED"] = "Burning Blast, 229083, SPELL_AURA_APPLIED, 1709760922.454, SPELL_AURA_APPLIED, false, Creature-0-67-1651-0-114790-000057714E, Viz'aduum the Watcher, 68168, 0, Player-67-001380D1, Симпотяяшка, 1298, 0, 229083, Burning Blast, 4, DEBUFF", + ["229083-SPELL_DAMAGE"] = "Burning Blast, 229083, SPELL_DAMAGE, 1709760922.403, SPELL_DAMAGE, false, Creature-0-67-1651-0-114790-000057714E, Viz'aduum the Watcher, 68168, 0, Player-67-001380D1, Симпотяяшка, 1298, 0, 229083, Burning Blast, 4, 137169, -1, 4, nil, nil, nil, false, false, false, false", + ["229083-SPELL_CAST_SUCCESS"] = "Burning Blast, 229083, SPELL_CAST_SUCCESS, 1709760922.403, SPELL_CAST_SUCCESS, false, Creature-0-67-1651-0-114790-000057714E, Viz'aduum the Watcher, 68168, 0, Player-67-001380D1, Симпотяяшка, 1298, 0, 229083, Burning Blast, 4", + ["229083-SPELL_AURA_APPLIED_DOSE"] = "Burning Blast, 229083, SPELL_AURA_APPLIED_DOSE, 1709760927.313, SPELL_AURA_APPLIED_DOSE, false, Creature-0-67-1651-0-114790-000057714E, Viz'aduum the Watcher, 68168, 0, Player-67-001380D1, Симпотяяшка, 1298, 0, 229083, Burning Blast, 4, DEBUFF, 2", + ["229083-SPELL_ABSORBED"] = "Burning Blast, 229083, SPELL_ABSORBED, 1709804607.455, SPELL_ABSORBED, false, Creature-0-67-1651-0-114790-00002B13F5, Viz'aduum the Watcher, 68168, 0, Player-67-003516C9, Mistwrap, 1298, 0, 229083, Burning Blast, 4, Player-67-003516C9, Mistwrap, 1298, 0, 214423, Stance of the Mountain, 1, 127400", + ["229083-SPELL_PERIODIC_DAMAGE"] = "Burning Blast, 229083, SPELL_PERIODIC_DAMAGE, 1709760923.419, SPELL_PERIODIC_DAMAGE, false, Creature-0-67-1651-0-114790-000057714E, Viz'aduum the Watcher, 68168, 0, Player-67-001380D1, Симпотяяшка, 1298, 0, 229083, Burning Blast, 4, 130793, 0, 4, nil, nil, nil, false, false, false, false", diff --git a/WeakAuras/Projects/RaiderlosSA/out/229151.txt b/WeakAuras/Projects/RaiderlosSA/out/229151.txt new file mode 100644 index 0000000..a42ceda --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/229151.txt @@ -0,0 +1,5 @@ + ["229151-SPELL_CAST_START"] = "Disintegrate, 229151, SPELL_CAST_START, 1709760944.73, SPELL_CAST_START, false, Creature-0-67-1651-0-114790-000057714E, Viz'aduum the Watcher, 2632, 0, , nil, -2147483648, -2147483648, 229151, Disintegrate, 4", + ["229151-SPELL_CAST_SUCCESS"] = "Disintegrate, 229151, SPELL_CAST_SUCCESS, 1709760948.815, SPELL_CAST_SUCCESS, false, Creature-0-67-1651-0-114790-000057714E, Viz'aduum the Watcher, 68168, 0, , nil, -2147483648, -2147483648, 229151, Disintegrate, 4", + ["229151-SPELL_ABSORBED"] = "Disintegrate, 229151, SPELL_ABSORBED, 1709760948.787, SPELL_ABSORBED, false, Creature-0-67-1651-0-114790-000057714E, Viz'aduum the Watcher, 68168, 0, Player-67-003453A3, Notadh, 1298, 0, 229151, Disintegrate, 4, Player-67-003453A3, Notadh, 1298, 0, 207472, Xavaric's Magnum Opus, 1, 669377", + ["229151-SPELL_DAMAGE"] = "Disintegrate, 229151, SPELL_DAMAGE, 1709760948.815, SPELL_DAMAGE, false, Creature-0-67-1651-0-114790-000057714E, Viz'aduum the Watcher, 68168, 0, Player-67-001380D1, Симпотяяшка, 1298, 0, 229151, Disintegrate, 4, 845965, -1, 4, nil, nil, nil, false, false, false, false", + ["229151-SPELL_MISSED"] = "Disintegrate, 229151, SPELL_MISSED, 1709760948.815, SPELL_MISSED, false, Creature-0-67-1651-0-114790-000057714E, Viz'aduum the Watcher, 68168, 0, Player-67-003453A3, Notadh, 1298, 0, 229151, Disintegrate, 4, ABSORB, false, 669377", diff --git a/WeakAuras/Projects/RaiderlosSA/out/229159.txt b/WeakAuras/Projects/RaiderlosSA/out/229159.txt new file mode 100644 index 0000000..e69de29 diff --git a/WeakAuras/Projects/RaiderlosSA/out/229662.txt b/WeakAuras/Projects/RaiderlosSA/out/229662.txt new file mode 100644 index 0000000..e69de29 diff --git a/WeakAuras/Projects/RaiderlosSA/out/229706.txt b/WeakAuras/Projects/RaiderlosSA/out/229706.txt new file mode 100644 index 0000000..41ea3cc --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/229706.txt @@ -0,0 +1,8 @@ + ["229706-SPELL_HEAL"] = "Leech Life, 229706, SPELL_HEAL, 1709760700.99, SPELL_HEAL, false, Creature-0-67-1651-0-115418-00005713C9, Spider, 2632, 0, Creature-0-67-1651-0-115418-00005713C9, Spider, 2632, 0, 229706, Leech Life, 8, 1179483, 0, 0, false", + ["229706-SPELL_AURA_APPLIED"] = "Leech Life, 229706, SPELL_AURA_APPLIED, 1709760699.037, SPELL_AURA_APPLIED, false, Creature-0-67-1651-0-115418-00005713C9, Spider, 2632, 0, Player-67-003003AA, Roxytwo, 1298, 0, 229706, Leech Life, 8, DEBUFF", + ["229706-SPELL_ABSORBED"] = "Leech Life, 229706, SPELL_ABSORBED, 1709760700.037, SPELL_ABSORBED, false, Creature-0-67-1651-0-115418-00005713C9, Spider, 2632, 0, Player-67-003003AA, Roxytwo, 1298, 0, 229706, Leech Life, 8, Player-67-003003AA, Roxytwo, 1298, 0, 108366, Soul Leech, 32, 393161", + ["229706-SPELL_CAST_START"] = "Leech Life, 229706, SPELL_CAST_START, 1709760697.947, SPELL_CAST_START, false, Creature-0-67-1651-0-115418-00005713C9, Spider, 2632, 0, , nil, -2147483648, -2147483648, 229706, Leech Life, 8", + ["229706-SPELL_MISSED"] = "Leech Life, 229706, SPELL_MISSED, 1709760700.037, SPELL_MISSED, false, Creature-0-67-1651-0-115418-00005713C9, Spider, 2632, 0, Player-67-003003AA, Roxytwo, 1298, 0, 229706, Leech Life, 8, ABSORB, false, 393161", + ["229706-SPELL_AURA_REMOVED"] = "Leech Life, 229706, SPELL_AURA_REMOVED, 1709760709.072, SPELL_AURA_REMOVED, false, Creature-0-67-1651-0-115418-00005713C9, Spider, 2632, 0, Player-67-003003AA, Roxytwo, 1298, 0, 229706, Leech Life, 8, DEBUFF", + ["229706-SPELL_DAMAGE"] = "Leech Life, 229706, SPELL_DAMAGE, 1709760700.99, SPELL_DAMAGE, false, Creature-0-67-1651-0-115418-00005713C9, Spider, 2632, 0, Player-67-003003AA, Roxytwo, 1298, 0, 229706, Leech Life, 8, 393161, -1, 8, nil, nil, nil, false, false, false, false", + ["229706-SPELL_CAST_SUCCESS"] = "Leech Life, 229706, SPELL_CAST_SUCCESS, 1709760698.977, SPELL_CAST_SUCCESS, false, Creature-0-67-1651-0-115418-00005713C9, Spider, 2632, 0, Player-67-003003AA, Roxytwo, 1298, 0, 229706, Leech Life, 8", diff --git a/WeakAuras/Projects/RaiderlosSA/out/229714.txt b/WeakAuras/Projects/RaiderlosSA/out/229714.txt new file mode 100644 index 0000000..e69de29 diff --git a/WeakAuras/Projects/RaiderlosSA/out/230083.txt b/WeakAuras/Projects/RaiderlosSA/out/230083.txt new file mode 100644 index 0000000..1f3dbe5 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/230083.txt @@ -0,0 +1,2 @@ + ["230083-SPELL_AURA_APPLIED"] = "Nullification, 230083, SPELL_AURA_APPLIED, 1709760468.238, SPELL_AURA_APPLIED, false, Creature-0-67-1651-0-115765-000056C4B8, Abstract Nullifier, 68168, 0, Player-67-003516C9, Mistwrap, 1298, 0, 230083, Nullification, 1, DEBUFF", + ["230083-SPELL_AURA_REMOVED"] = "Nullification, 230083, SPELL_AURA_REMOVED, 1709760479.068, SPELL_AURA_REMOVED, false, Creature-0-67-1651-0-115765-000056C4B8, Abstract Nullifier, 2632, 0, Player-67-003516C9, Mistwrap, 1298, 0, 230083, Nullification, 1, DEBUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/232153.txt b/WeakAuras/Projects/RaiderlosSA/out/232153.txt new file mode 100644 index 0000000..2450b45 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/232153.txt @@ -0,0 +1,2 @@ + ["232153-SPELL_CAST_SUCCESS"] = "Kara Kazham!, 232153, SPELL_CAST_SUCCESS, 1710352316.1, SPELL_CAST_SUCCESS, false, Creature-0-7-1651-0-114328-0000237E53, Coggleston, 68168, 0, , nil, -2147483648, -2147483648, 232153, Kara Kazham!, 1", + ["232153-SPELL_CAST_START"] = "Kara Kazham!, 232153, SPELL_CAST_START, 1710352314.549, SPELL_CAST_START, false, Creature-0-7-1651-0-114328-0000237E53, Coggleston, 68168, 0, , nil, -2147483648, -2147483648, 232153, Kara Kazham!, 1", diff --git a/WeakAuras/Projects/RaiderlosSA/out/234107.txt b/WeakAuras/Projects/RaiderlosSA/out/234107.txt new file mode 100644 index 0000000..be2c622 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/234107.txt @@ -0,0 +1,3 @@ + ["234107-SPELL_CAST_SUCCESS"] = "Chaotic Energy, 234107, SPELL_CAST_SUCCESS, 1710094528.763, SPELL_CAST_SUCCESS, false, Creature-0-67-1677-0-118804-000063578D, Domatrax, 68168, 0, , nil, -2147483648, -2147483648, 234107, Chaotic Energy, 4", + ["234107-SPELL_MISSED"] = "Chaotic Energy, 234107, SPELL_MISSED, 1710187478.044, SPELL_MISSED, false, Creature-0-67-1677-0-118804-00005FC36D, Domatrax, 2632, 0, Player-67-002DBA24, Athenà, 1298, 0, 234107, Chaotic Energy, 4, IMMUNE, false", + ["234107-SPELL_CAST_START"] = "Chaotic Energy, 234107, SPELL_CAST_START, 1710094523.746, SPELL_CAST_START, false, Creature-0-67-1677-0-118804-000063578D, Domatrax, 68168, 0, , nil, -2147483648, -2147483648, 234107, Chaotic Energy, 4", diff --git a/WeakAuras/Projects/RaiderlosSA/out/236543.txt b/WeakAuras/Projects/RaiderlosSA/out/236543.txt new file mode 100644 index 0000000..47f43c0 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/236543.txt @@ -0,0 +1,5 @@ + ["236543-SPELL_CAST_START"] = "Felsoul Cleave, 236543, SPELL_CAST_START, 1709751449.543, SPELL_CAST_START, false, Creature-0-67-1677-0-118804-0000472A9A, Domatrax, 68168, 0, , nil, -2147483648, -2147483648, 236543, Felsoul Cleave, 4", + ["236543-SPELL_ENERGIZE"] = "Felsoul Cleave, 236543, SPELL_ENERGIZE, 1710347335.287, SPELL_ENERGIZE, false, Creature-0-67-1677-0-118804-0000353E88, Domatrax, 2632, 0, Creature-0-67-1677-0-69791-000036D3F0, Соломонка, 4370, 0, 236543, Felsoul Cleave, 4, -550000, -550000, 10, 0", + ["236543-SPELL_CAST_SUCCESS"] = "Felsoul Cleave, 236543, SPELL_CAST_SUCCESS, 1709751451.542, SPELL_CAST_SUCCESS, false, Creature-0-67-1677-0-118804-0000472A9A, Domatrax, 68168, 0, , nil, -2147483648, -2147483648, 236543, Felsoul Cleave, 4", + ["236543-SPELL_DAMAGE"] = "Felsoul Cleave, 236543, SPELL_DAMAGE, 1709751451.542, SPELL_DAMAGE, false, Creature-0-67-1677-0-118804-0000472A9A, Domatrax, 68168, 0, Player-67-003514F7, Orste, 1298, 0, 236543, Felsoul Cleave, 4, 198168, -1, 4, nil, 132111, nil, false, false, false, false", + ["236543-SPELL_ABSORBED"] = "Felsoul Cleave, 236543, SPELL_ABSORBED, 1710187518.703, SPELL_ABSORBED, false, Creature-0-67-1677-0-118804-00005FC36D, Domatrax, 68168, 0, Player-67-002DBA24, Athenà, 1298, 0, 236543, Felsoul Cleave, 4, Player-67-002DBA24, Athenà, 1298, 0, 209388, Bulwark of Order, 2, 939825", diff --git a/WeakAuras/Projects/RaiderlosSA/out/236627.txt b/WeakAuras/Projects/RaiderlosSA/out/236627.txt new file mode 100644 index 0000000..e69de29 diff --git a/WeakAuras/Projects/RaiderlosSA/out/237726.txt b/WeakAuras/Projects/RaiderlosSA/out/237726.txt new file mode 100644 index 0000000..8deb7fa --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/237726.txt @@ -0,0 +1,3 @@ + ["237726-SPELL_AURA_APPLIED"] = "Scornful Gaze, 237726, SPELL_AURA_APPLIED, 1709751320.563, SPELL_AURA_APPLIED, false, Creature-0-67-1677-0-117194-0000472A8C, Thrashbite the Scornful, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 237726, Scornful Gaze, 1, DEBUFF", + ["237726-SPELL_CAST_SUCCESS"] = "Scornful Gaze, 237726, SPELL_CAST_SUCCESS, 1709751320.485, SPELL_CAST_SUCCESS, false, Creature-0-67-1677-0-117194-0000472A8C, Thrashbite the Scornful, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 237726, Scornful Gaze, 1", + ["237726-SPELL_AURA_REMOVED"] = "Scornful Gaze, 237726, SPELL_AURA_REMOVED, 1709751326.496, SPELL_AURA_REMOVED, false, Creature-0-67-1677-0-117194-0000472A8C, Thrashbite the Scornful, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 237726, Scornful Gaze, 1, DEBUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/238315.txt b/WeakAuras/Projects/RaiderlosSA/out/238315.txt new file mode 100644 index 0000000..4882ea2 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/238315.txt @@ -0,0 +1,5 @@ + ["238315-SPELL_CAST_SUCCESS"] = "Shadow Sweep, 238315, SPELL_CAST_SUCCESS, 1710094546.523, SPELL_CAST_SUCCESS, false, Creature-0-67-1677-0-118802-000064D540, Hellblaze Mistress, 2632, 0, , nil, -2147483648, -2147483648, 238315, Shadow Sweep, 32", + ["238315-SPELL_DAMAGE"] = "Shadow Sweep, 238315, SPELL_DAMAGE, 1710094546.523, SPELL_DAMAGE, false, Creature-0-67-1677-0-118802-000064D540, Hellblaze Mistress, 2632, 0, Player-67-00328C5C, Stanlèy, 1298, 0, 238315, Shadow Sweep, 32, 1431109, -1, 32, nil, nil, nil, false, false, false, false", + ["238315-SPELL_MISSED"] = "Shadow Sweep, 238315, SPELL_MISSED, 1710094570.377, SPELL_MISSED, false, Creature-0-67-1677-0-118802-000064D80A, Hellblaze Mistress, 2632, 0, Player-67-0027F204, Touchofcheek, 1298, 0, 238315, Shadow Sweep, 32, ABSORB, false, 1984286", + ["238315-SPELL_CAST_START"] = "Shadow Sweep, 238315, SPELL_CAST_START, 1710094545.992, SPELL_CAST_START, false, Creature-0-67-1677-0-118802-000064D540, Hellblaze Mistress, 2632, 0, , nil, -2147483648, -2147483648, 238315, Shadow Sweep, 32", + ["238315-SPELL_ABSORBED"] = "Shadow Sweep, 238315, SPELL_ABSORBED, 1710094570.345, SPELL_ABSORBED, false, Creature-0-67-1677-0-118802-000064D80A, Hellblaze Mistress, 2632, 0, Player-67-0027F204, Touchofcheek, 1298, 0, 238315, Shadow Sweep, 32, Player-67-0027F204, Touchofcheek, 1298, 0, 252208, Refractive Shell, 2, 362103", diff --git a/WeakAuras/Projects/RaiderlosSA/out/238543.txt b/WeakAuras/Projects/RaiderlosSA/out/238543.txt new file mode 100644 index 0000000..57496c3 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/238543.txt @@ -0,0 +1,3 @@ + ["238543-SPELL_CAST_SUCCESS"] = "Demonic Mending, 238543, SPELL_CAST_SUCCESS, 1709751039.065, SPELL_CAST_SUCCESS, false, Creature-0-67-1677-0-119923-00004729ED, Helblaze Soulmender, 2632, 0, , nil, -2147483648, -2147483648, 238543, Demonic Mending, 4", + ["238543-SPELL_HEAL"] = "Demonic Mending, 238543, SPELL_HEAL, 1709751039.065, SPELL_HEAL, false, Creature-0-67-1677-0-119923-00004729ED, Helblaze Soulmender, 2632, 0, Creature-0-67-1677-0-118700-00004729DE, Felblight Stalker, 2632, 0, 238543, Demonic Mending, 4, 1178528, 0, 0, false", + ["238543-SPELL_CAST_START"] = "Demonic Mending, 238543, SPELL_CAST_START, 1709751036.06, SPELL_CAST_START, false, Creature-0-67-1677-0-119923-00004729ED, Helblaze Soulmender, 2632, 0, , nil, -2147483648, -2147483648, 238543, Demonic Mending, 4", diff --git a/WeakAuras/Projects/RaiderlosSA/out/239217.txt b/WeakAuras/Projects/RaiderlosSA/out/239217.txt new file mode 100644 index 0000000..67330ee --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/239217.txt @@ -0,0 +1,5 @@ + ["239217-SPELL_DAMAGE"] = "Blinding Glare, 239217, SPELL_DAMAGE, 1710094168.42, SPELL_DAMAGE, false, Creature-0-67-1677-0-118723-0000635799, Gazerax, 2632, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 239217, Blinding Glare, 32, 3827306, -1, 32, nil, nil, 966896, false, false, false, false", + ["239217-SPELL_ABSORBED"] = "Blinding Glare, 239217, SPELL_ABSORBED, 1710094168.42, SPELL_ABSORBED, false, Creature-0-67-1677-0-118723-0000635799, Gazerax, 2632, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 239217, Blinding Glare, 32, Player-67-002D9DD1, Succpotato, 1297, 0, 108366, Soul Leech, 32, 966896", + ["239217-SPELL_CAST_SUCCESS"] = "Blinding Glare, 239217, SPELL_CAST_SUCCESS, 1709938266.724, SPELL_CAST_SUCCESS, false, Creature-0-67-1677-0-118723-0000714407, Gazerax, 2632, 0, , nil, -2147483648, -2147483648, 239217, Blinding Glare, 32", + ["239217-SPELL_AURA_REMOVED"] = "Blinding Glare, 239217, SPELL_AURA_REMOVED, 1710094174.531, SPELL_AURA_REMOVED, false, Creature-0-67-1677-0-118723-0000635799, Gazerax, 2632, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 239217, Blinding Glare, 32, DEBUFF", + ["239217-SPELL_AURA_APPLIED"] = "Blinding Glare, 239217, SPELL_AURA_APPLIED, 1710094168.47, SPELL_AURA_APPLIED, false, Creature-0-67-1677-0-118723-0000635799, Gazerax, 2632, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 239217, Blinding Glare, 32, DEBUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/239268.txt b/WeakAuras/Projects/RaiderlosSA/out/239268.txt new file mode 100644 index 0000000..51d0b59 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/239268.txt @@ -0,0 +1,3 @@ + ["239268-SPELL_MISSED"] = "Venom Storm, 239268, SPELL_MISSED, 1709751379.764, SPELL_MISSED, false, Creature-0-67-1677-0-118705-0000472A34, Nal'asha, 68168, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 239268, Venom Storm, 8, ABSORB, false, 535561", + ["239268-SPELL_ABSORBED"] = "Venom Storm, 239268, SPELL_ABSORBED, 1709751379.764, SPELL_ABSORBED, false, Creature-0-67-1677-0-118705-0000472A34, Nal'asha, 68168, 0, Player-67-003514F7, Orste, 1298, 0, 239268, Venom Storm, 8, Player-67-003514F7, Orste, 1298, 0, 209388, Bulwark of Order, 2, 272864", + ["239268-SPELL_DAMAGE"] = "Venom Storm, 239268, SPELL_DAMAGE, 1709751379.764, SPELL_DAMAGE, false, Creature-0-67-1677-0-118705-0000472A34, Nal'asha, 68168, 0, Player-67-003514F7, Orste, 1298, 0, 239268, Venom Storm, 8, 171397, -1, 8, nil, nil, 387128, false, false, false, false", diff --git a/WeakAuras/Projects/RaiderlosSA/out/241937.txt b/WeakAuras/Projects/RaiderlosSA/out/241937.txt new file mode 100644 index 0000000..0692256 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/241937.txt @@ -0,0 +1,2 @@ + ["241937-SPELL_AURA_APPLIED"] = "Shadow Wall, 241937, SPELL_AURA_APPLIED, 1709751071.754, SPELL_AURA_APPLIED, true, , nil, 2632, 0, Creature-0-67-1677-0-118690-0000472A10, Wrathguard Invader, 2632, 0, 241937, Shadow Wall, 32, DEBUFF", + ["241937-SPELL_AURA_REMOVED"] = "Shadow Wall, 241937, SPELL_AURA_REMOVED, 1709751072.267, SPELL_AURA_REMOVED, true, , nil, 2632, 0, Creature-0-67-1677-0-118690-0000472A10, Wrathguard Invader, 2632, 0, 241937, Shadow Wall, 32, DEBUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/242792.txt b/WeakAuras/Projects/RaiderlosSA/out/242792.txt new file mode 100644 index 0000000..61c7249 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/242792.txt @@ -0,0 +1,5 @@ + ["242792-SPELL_AURA_REMOVED"] = "Vile Roots, 242792, SPELL_AURA_REMOVED, 1709751219.564, SPELL_AURA_REMOVED, false, Creature-0-67-1677-0-121569-0000472A73, Vilebark Walker, 68168, 0, Player-67-001DAFC2, Арагорни, 1298, 0, 242792, Vile Roots, 8, DEBUFF", + ["242792-SPELL_CAST_SUCCESS"] = "Vile Roots, 242792, SPELL_CAST_SUCCESS, 1709751217.54, SPELL_CAST_SUCCESS, false, Creature-0-67-1677-0-121569-0000472A73, Vilebark Walker, 2632, 0, , nil, -2147483648, -2147483648, 242792, Vile Roots, 8", + ["242792-SPELL_DAMAGE"] = "Vile Roots, 242792, SPELL_DAMAGE, 1709751217.54, SPELL_DAMAGE, false, Creature-0-67-1677-0-121569-0000472A73, Vilebark Walker, 2632, 0, Player-67-001DAFC2, Арагорни, 1298, 0, 242792, Vile Roots, 8, 683134, -1, 8, nil, nil, 203143, false, false, false, false", + ["242792-SPELL_ABSORBED"] = "Vile Roots, 242792, SPELL_ABSORBED, 1709751217.54, SPELL_ABSORBED, false, Creature-0-67-1677-0-121569-0000472A73, Vilebark Walker, 2632, 0, Player-67-001DAFC2, Арагорни, 1298, 0, 242792, Vile Roots, 8, Player-67-001DAFC2, Арагорни, 1298, 0, 203538, Greater Blessing of Kings, 2, 203143", + ["242792-SPELL_AURA_APPLIED"] = "Vile Roots, 242792, SPELL_AURA_APPLIED, 1709751217.592, SPELL_AURA_APPLIED, false, Creature-0-67-1677-0-121569-0000472A73, Vilebark Walker, 2632, 0, Player-67-001DAFC2, Арагорни, 1298, 0, 242792, Vile Roots, 8, DEBUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/243168.txt b/WeakAuras/Projects/RaiderlosSA/out/243168.txt new file mode 100644 index 0000000..e69de29 diff --git a/WeakAuras/Projects/RaiderlosSA/out/243960.txt b/WeakAuras/Projects/RaiderlosSA/out/243960.txt new file mode 100644 index 0000000..45daea8 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/243960.txt @@ -0,0 +1,8 @@ + ["243960-SPELL_MISSED"] = "Shadow Strike, 243960, SPELL_MISSED, 1709755270.987, SPELL_MISSED, false, Creature-0-67-1712-0-122366-00004E582F, Varimathras, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 243960, Shadow Strike, 32, ABSORB, false, 532554", + ["243960-SPELL_ABSORBED"] = "Shadow Strike, 243960, SPELL_ABSORBED, 1709755270.987, SPELL_ABSORBED, false, Creature-0-67-1712-0-122366-00004E582F, Varimathras, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 243960, Shadow Strike, 32, Player-67-00247307, Smallpumper, 1298, 0, 252545, Light of Absolarn, 8, 532554", + ["243960-SPELL_CAST_SUCCESS"] = "Shadow Strike, 243960, SPELL_CAST_SUCCESS, 1709755270.987, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-122366-00004E582F, Varimathras, 68168, 0, , nil, -2147483648, -2147483648, 243960, Shadow Strike, 32", + ["243960-SPELL_DAMAGE"] = "Shadow Strike, 243960, SPELL_DAMAGE, 1709755283.48, SPELL_DAMAGE, false, Creature-0-67-1712-0-122366-00004E582F, Varimathras, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 243960, Shadow Strike, 32, 1288998, -1, 32, nil, nil, nil, false, false, false, false", + ["243960-SPELL_MISSED"] = "Shadow Strike, 243960, SPELL_MISSED, 1709928900.374, SPELL_MISSED, false, Creature-0-67-1712-0-122366-0000641B7D, Varimathras, 68168, 0, Player-67-002C429F, Anusucc, 1300, 0, 243960, Shadow Strike, 32, ABSORB, false, 3085253", + ["243960-SPELL_DAMAGE"] = "Shadow Strike, 243960, SPELL_DAMAGE, 1709928822.473, SPELL_DAMAGE, false, Creature-0-67-1712-0-122366-0000641B7D, Varimathras, 68168, 0, Player-67-002C429F, Anusucc, 1300, 128, 243960, Shadow Strike, 32, 875880, -1, 32, nil, nil, 834182, false, false, false, false", + ["243960-SPELL_ABSORBED"] = "Shadow Strike, 243960, SPELL_ABSORBED, 1709928822.379, SPELL_ABSORBED, false, Creature-0-67-1712-0-122366-0000641B7D, Varimathras, 68168, 0, Player-67-002C429F, Anusucc, 1300, 128, 243960, Shadow Strike, 32, Player-67-0029732D, Ningenpriest, 1300, 0, 208771, Smite, 2, 423768", + ["243960-SPELL_CAST_SUCCESS"] = "Shadow Strike, 243960, SPELL_CAST_SUCCESS, 1709928822.473, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-122366-0000641B7D, Varimathras, 68168, 0, , nil, -2147483648, -2147483648, 243960, Shadow Strike, 32", diff --git a/WeakAuras/Projects/RaiderlosSA/out/243961.txt b/WeakAuras/Projects/RaiderlosSA/out/243961.txt new file mode 100644 index 0000000..332fd02 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/243961.txt @@ -0,0 +1,6 @@ + ["243961-SPELL_HEAL_ABSORBED"] = "Misery, 243961, SPELL_HEAL_ABSORBED, 1709755209.126, SPELL_HEAL_ABSORBED, true, , nil, 1300, 0, Player-67-00303268, Raidenshøgun, 1300, 0, 243961, Misery, 32, Player-67-00303268, Raidenshøgun-uwowx100, 1300, 0, 243961, Leech, 1, 28602", + ["243961-SPELL_AURA_REMOVED"] = "Misery, 243961, SPELL_AURA_REMOVED, 1709755209.262, SPELL_AURA_REMOVED, true, , nil, 1300, 0, Player-67-00303268, Raidenshøgun, 1300, 0, 243961, Misery, 32, DEBUFF", + ["243961-SPELL_AURA_APPLIED"] = "Misery, 243961, SPELL_AURA_APPLIED, 1709755208.502, SPELL_AURA_APPLIED, true, , nil, 1300, 0, Player-67-00303268, Raidenshøgun, 1300, 0, 243961, Misery, 32, DEBUFF", + ["243961-SPELL_AURA_REMOVED"] = "Misery, 243961, SPELL_AURA_REMOVED, 1709928692.363, SPELL_AURA_REMOVED, true, , nil, 1300, 0, Player-67-002BCD76, Khonasham, 1300, 0, 243961, Misery, 32, DEBUFF", + ["243961-SPELL_HEAL_ABSORBED"] = "Misery, 243961, SPELL_HEAL_ABSORBED, 1709928689.663, SPELL_HEAL_ABSORBED, true, , nil, 1300, 128, Player-67-002C429F, Anusucc, 1300, 128, 243961, Misery, 32, Player-67-002C429F, Anusucc-uwowx100, 1300, 128, 243961, Unholy Strength, 1, 1331855", + ["243961-SPELL_AURA_APPLIED"] = "Misery, 243961, SPELL_AURA_APPLIED, 1709928688.13, SPELL_AURA_APPLIED, true, , nil, 1300, 128, Player-67-002C429F, Anusucc, 1300, 128, 243961, Misery, 32, DEBUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/243983.txt b/WeakAuras/Projects/RaiderlosSA/out/243983.txt new file mode 100644 index 0000000..c910147 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/243983.txt @@ -0,0 +1,8 @@ + ["243983-SPELL_CAST_START"] = "Collapsing World, 243983, SPELL_CAST_START, 1709753371.64, SPELL_CAST_START, false, Creature-0-67-1712-0-122104-00004B04B0, Portal Keeper Hasabel, 68168, 0, , nil, -2147483648, -2147483648, 243983, Collapsing World, 32", + ["243983-SPELL_CAST_SUCCESS"] = "Collapsing World, 243983, SPELL_CAST_SUCCESS, 1709753373.64, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-122104-00004B04B0, Portal Keeper Hasabel, 68168, 0, , nil, -2147483648, -2147483648, 243983, Collapsing World, 32", + ["243983-SPELL_SUMMON"] = "Collapsing World, 243983, SPELL_SUMMON, 1709753373.64, SPELL_SUMMON, false, Creature-0-67-1712-0-122104-00004B04B0, Portal Keeper Hasabel, 68168, 0, Creature-0-67-1712-0-122425-00004B63D8, Collapsing World, 2632, 0, 243983, Collapsing World, 32", + ["243983-SPELL_DRAIN"] = "Collapsing World, 243983, SPELL_DRAIN, 1709753373.64, SPELL_DRAIN, false, Creature-0-67-1712-0-122104-00004B04B0, Portal Keeper Hasabel, 68168, 0, Creature-0-67-1712-0-122104-00004B04B0, Portal Keeper Hasabel, 68168, 0, 243983, Collapsing World, 32, 100, 3, nil, nil", + ["243983-SPELL_CAST_SUCCESS"] = "Collapsing World, 243983, SPELL_CAST_SUCCESS, 1709926312.699, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-122104-00005FC7AC, Portal Keeper Hasabel, 2632, 0, , nil, -2147483648, -2147483648, 243983, Collapsing World, 32", + ["243983-SPELL_SUMMON"] = "Collapsing World, 243983, SPELL_SUMMON, 1709926312.699, SPELL_SUMMON, false, Creature-0-67-1712-0-122104-00005FC7AC, Portal Keeper Hasabel, 2632, 0, Creature-0-67-1712-0-122425-0000604AFF, Unknown, 2632, 0, 243983, Collapsing World, 32", + ["243983-SPELL_DRAIN"] = "Collapsing World, 243983, SPELL_DRAIN, 1709926312.699, SPELL_DRAIN, false, Creature-0-67-1712-0-122104-00005FC7AC, Portal Keeper Hasabel, 2632, 0, Creature-0-67-1712-0-122104-00005FC7AC, Portal Keeper Hasabel, 2632, 0, 243983, Collapsing World, 32, 100, 3, nil, nil", + ["243983-SPELL_CAST_START"] = "Collapsing World, 243983, SPELL_CAST_START, 1709926310.675, SPELL_CAST_START, false, Creature-0-67-1712-0-122104-00005FC7AC, Portal Keeper Hasabel, 2632, 0, , nil, -2147483648, -2147483648, 243983, Collapsing World, 32", diff --git a/WeakAuras/Projects/RaiderlosSA/out/243999.txt b/WeakAuras/Projects/RaiderlosSA/out/243999.txt new file mode 100644 index 0000000..6b3c1af --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/243999.txt @@ -0,0 +1,4 @@ + ["243999-SPELL_CAST_START"] = "Dark Fissure, 243999, SPELL_CAST_START, 1709755276.873, SPELL_CAST_START, false, Creature-0-67-1712-0-122366-00004E582F, Varimathras, 68168, 0, , nil, -2147483648, -2147483648, 243999, Dark Fissure, 32", + ["243999-SPELL_CAST_SUCCESS"] = "Dark Fissure, 243999, SPELL_CAST_SUCCESS, 1709755278.893, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-122366-00004E582F, Varimathras, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 243999, Dark Fissure, 32", + ["243999-SPELL_CAST_START"] = "Dark Fissure, 243999, SPELL_CAST_START, 1709928828.322, SPELL_CAST_START, false, Creature-0-67-1712-0-122366-0000641B7D, Varimathras, 68168, 0, , nil, -2147483648, -2147483648, 243999, Dark Fissure, 32", + ["243999-SPELL_CAST_SUCCESS"] = "Dark Fissure, 243999, SPELL_CAST_SUCCESS, 1709928830.378, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-122366-0000641B7D, Varimathras, 68168, 0, Player-67-002C429F, Anusucc, 1300, 128, 243999, Dark Fissure, 32", diff --git a/WeakAuras/Projects/RaiderlosSA/out/244000.txt b/WeakAuras/Projects/RaiderlosSA/out/244000.txt new file mode 100644 index 0000000..08cf0de --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/244000.txt @@ -0,0 +1,4 @@ + ["244000-SPELL_CAST_START"] = "Felstorm Barrage, 244000, SPELL_CAST_START, 1709753393.617, SPELL_CAST_START, false, Creature-0-67-1712-0-122104-00004B04B0, Portal Keeper Hasabel, 68168, 0, , nil, -2147483648, -2147483648, 244000, Felstorm Barrage, 4", + ["244000-SPELL_CAST_SUCCESS"] = "Felstorm Barrage, 244000, SPELL_CAST_SUCCESS, 1709753395.658, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-122104-00004B04B0, Portal Keeper Hasabel, 68168, 0, , nil, -2147483648, -2147483648, 244000, Felstorm Barrage, 4", + ["244000-SPELL_CAST_START"] = "Felstorm Barrage, 244000, SPELL_CAST_START, 1709926332.692, SPELL_CAST_START, false, Creature-0-67-1712-0-122104-00005FC7AC, Portal Keeper Hasabel, 2632, 0, , nil, -2147483648, -2147483648, 244000, Felstorm Barrage, 4", + ["244000-SPELL_CAST_SUCCESS"] = "Felstorm Barrage, 244000, SPELL_CAST_SUCCESS, 1709926334.746, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-122104-00005FC7AC, Portal Keeper Hasabel, 2632, 0, , nil, -2147483648, -2147483648, 244000, Felstorm Barrage, 4", diff --git a/WeakAuras/Projects/RaiderlosSA/out/244016.txt b/WeakAuras/Projects/RaiderlosSA/out/244016.txt new file mode 100644 index 0000000..d5a005d --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/244016.txt @@ -0,0 +1,14 @@ + ["244016-SPELL_AURA_REMOVED"] = "Reality Tear, 244016, SPELL_AURA_REMOVED, 1709753573.132, SPELL_AURA_REMOVED, false, Creature-0-67-1712-0-122104-00004B04B0, Portal Keeper Hasabel, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 244016, Reality Tear, 1, DEBUFF", + ["244016-SPELL_PERIODIC_DAMAGE"] = "Reality Tear, 244016, SPELL_PERIODIC_DAMAGE, 1709753371.64, SPELL_PERIODIC_DAMAGE, false, Creature-0-67-1712-0-122104-00004B04B0, Portal Keeper Hasabel, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 244016, Reality Tear, 1, 51868, 0, 1, nil, nil, nil, false, false, false, false", + ["244016-SPELL_AURA_APPLIED_DOSE"] = "Reality Tear, 244016, SPELL_AURA_APPLIED_DOSE, 1709753379.696, SPELL_AURA_APPLIED_DOSE, false, Creature-0-67-1712-0-122104-00004B04B0, Portal Keeper Hasabel, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 244016, Reality Tear, 1, DEBUFF, 2", + ["244016-SPELL_ABSORBED"] = "Reality Tear, 244016, SPELL_ABSORBED, 1709753369.621, SPELL_ABSORBED, false, Creature-0-67-1712-0-122104-00004B04B0, Portal Keeper Hasabel, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 244016, Reality Tear, 1, Player-67-00247307, Smallpumper, 1298, 0, 252545, Light of Absolarn, 8, 51868", + ["244016-SPELL_AURA_APPLIED"] = "Reality Tear, 244016, SPELL_AURA_APPLIED, 1709753367.673, SPELL_AURA_APPLIED, false, Creature-0-67-1712-0-122104-00004B04B0, Portal Keeper Hasabel, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 244016, Reality Tear, 1, DEBUFF", + ["244016-SPELL_CAST_SUCCESS"] = "Reality Tear, 244016, SPELL_CAST_SUCCESS, 1709753367.589, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-122104-00004B04B0, Portal Keeper Hasabel, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 244016, Reality Tear, 1", + ["244016-SPELL_PERIODIC_MISSED"] = "Reality Tear, 244016, SPELL_PERIODIC_MISSED, 1709753369.621, SPELL_PERIODIC_MISSED, false, Creature-0-67-1712-0-122104-00004B04B0, Portal Keeper Hasabel, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 244016, Reality Tear, 1, ABSORB, false, 51868", + ["244016-SPELL_AURA_APPLIED"] = "Reality Tear, 244016, SPELL_AURA_APPLIED, 1709926306.663, SPELL_AURA_APPLIED, false, Creature-0-67-1712-0-122104-00005FC7AC, Portal Keeper Hasabel, 2632, 0, Player-67-00345CD7, Bagrintwo, 1300, 0, 244016, Reality Tear, 1, DEBUFF", + ["244016-SPELL_PERIODIC_DAMAGE"] = "Reality Tear, 244016, SPELL_PERIODIC_DAMAGE, 1709926314.645, SPELL_PERIODIC_DAMAGE, false, Creature-0-67-1712-0-122104-00005FC7AC, Portal Keeper Hasabel, 2632, 0, Player-67-00345CD7, Bagrintwo, 1300, 0, 244016, Reality Tear, 1, 103595, 0, 1, nil, nil, 11510, false, false, false, false", + ["244016-SPELL_AURA_APPLIED_DOSE"] = "Reality Tear, 244016, SPELL_AURA_APPLIED_DOSE, 1709926330.742, SPELL_AURA_APPLIED_DOSE, false, Creature-0-67-1712-0-122104-00005FC7AC, Portal Keeper Hasabel, 2632, 0, Player-67-002C429F, Anusucc, 1300, 0, 244016, Reality Tear, 1, DEBUFF, 2", + ["244016-SPELL_ABSORBED"] = "Reality Tear, 244016, SPELL_ABSORBED, 1709926308.666, SPELL_ABSORBED, false, Creature-0-67-1712-0-122104-00005FC7AC, Portal Keeper Hasabel, 2632, 0, Player-67-00345CD7, Bagrintwo, 1300, 0, 244016, Reality Tear, 1, Player-67-0029732D, Ningenpriest, 1298, 0, 208771, Smite, 2, 74047", + ["244016-SPELL_CAST_SUCCESS"] = "Reality Tear, 244016, SPELL_CAST_SUCCESS, 1709926306.663, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-122104-00005FC7AC, Portal Keeper Hasabel, 2632, 0, Player-67-00345CD7, Bagrintwo, 1300, 0, 244016, Reality Tear, 1", + ["244016-SPELL_AURA_REMOVED"] = "Reality Tear, 244016, SPELL_AURA_REMOVED, 1709926336.779, SPELL_AURA_REMOVED, false, Creature-0-67-1712-0-122104-00005FC7AC, Portal Keeper Hasabel, 2632, 0, Player-67-00345CD7, Bagrintwo, 1300, 0, 244016, Reality Tear, 1, DEBUFF", + ["244016-SPELL_PERIODIC_MISSED"] = "Reality Tear, 244016, SPELL_PERIODIC_MISSED, 1709926308.666, SPELL_PERIODIC_MISSED, false, Creature-0-67-1712-0-122104-00005FC7AC, Portal Keeper Hasabel, 2632, 0, Player-67-00345CD7, Bagrintwo, 1300, 0, 244016, Reality Tear, 1, ABSORB, false, 97958", diff --git a/WeakAuras/Projects/RaiderlosSA/out/244033.txt b/WeakAuras/Projects/RaiderlosSA/out/244033.txt new file mode 100644 index 0000000..ee2658f --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/244033.txt @@ -0,0 +1,6 @@ + ["244033-SPELL_DAMAGE"] = "Flame Rend, 244033, SPELL_DAMAGE, 1709756298.426, SPELL_DAMAGE, false, Creature-0-67-1712-0-121975-00004E7983, Aggramar, 68168, 0, Player-67-003465EF, Dotsvex, 1300, 0, 244033, Flame Rend, 4, 1224339, -1, 4, nil, nil, 687591, false, false, false, false", + ["244033-SPELL_MISSED"] = "Flame Rend, 244033, SPELL_MISSED, 1709756298.426, SPELL_MISSED, false, Creature-0-67-1712-0-121975-00004E7983, Aggramar, 68168, 0, Player-67-00247307, Smallpumper, 1298, 128, 244033, Flame Rend, 4, ABSORB, false, 569827", + ["244033-SPELL_ABSORBED"] = "Flame Rend, 244033, SPELL_ABSORBED, 1709756298.426, SPELL_ABSORBED, false, Creature-0-67-1712-0-121975-00004E7983, Aggramar, 68168, 0, Player-67-003465EF, Dotsvex, 1300, 0, 244033, Flame Rend, 4, Player-67-003465EF, Dotsvex, 1300, 0, 108366, Soul Leech, 32, 687591", + ["244033-SPELL_DAMAGE"] = "Flame Rend, 244033, SPELL_DAMAGE, 1709929882.433, SPELL_DAMAGE, false, Creature-0-67-1712-0-121975-0000644688, Aggramar, 2632, 0, Player-67-002C429F, Anusucc, 1300, 0, 244033, Flame Rend, 4, 2225777, -1, 4, nil, nil, 423957, false, false, false, false", + ["244033-SPELL_MISSED"] = "Flame Rend, 244033, SPELL_MISSED, 1709929882.433, SPELL_MISSED, false, Creature-0-67-1712-0-121975-0000644688, Aggramar, 2632, 0, Player-67-00345CD7, Bagrintwo, 1298, 0, 244033, Flame Rend, 4, ABSORB, false, 1371388", + ["244033-SPELL_ABSORBED"] = "Flame Rend, 244033, SPELL_ABSORBED, 1709929882.433, SPELL_ABSORBED, false, Creature-0-67-1712-0-121975-0000644688, Aggramar, 2632, 0, Player-67-001B8E8E, Magicrooster, 1300, 0, 244033, Flame Rend, 4, Player-67-001B8E8E, Magicrooster, 1300, 0, 235450, Prismatic Barrier, 64, 1305604", diff --git a/WeakAuras/Projects/RaiderlosSA/out/244042.txt b/WeakAuras/Projects/RaiderlosSA/out/244042.txt new file mode 100644 index 0000000..2b04d90 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/244042.txt @@ -0,0 +1,6 @@ + ["244042-SPELL_CAST_SUCCESS"] = "Marked Prey, 244042, SPELL_CAST_SUCCESS, 1709755286.743, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-122366-00004E582F, Varimathras, 68168, 0, , nil, -2147483648, -2147483648, 244042, Marked Prey, 32", + ["244042-SPELL_AURA_REMOVED"] = "Marked Prey, 244042, SPELL_AURA_REMOVED, 1709755291.805, SPELL_AURA_REMOVED, false, Creature-0-67-1712-0-122366-00004E582F, Varimathras, 68168, 0, Player-67-0033EEFC, Wafba, 1300, 128, 244042, Marked Prey, 32, DEBUFF", + ["244042-SPELL_AURA_APPLIED"] = "Marked Prey, 244042, SPELL_AURA_APPLIED, 1709755286.779, SPELL_AURA_APPLIED, false, Creature-0-67-1712-0-122366-00004E582F, Varimathras, 68168, 0, Player-67-0033EEFC, Wafba, 1300, 0, 244042, Marked Prey, 32, DEBUFF", + ["244042-SPELL_AURA_APPLIED"] = "Marked Prey, 244042, SPELL_AURA_APPLIED, 1709928838.157, SPELL_AURA_APPLIED, false, Creature-0-67-1712-0-122366-0000641B7D, Varimathras, 68168, 0, Player-67-003504AB, Latviann, 1300, 0, 244042, Marked Prey, 32, DEBUFF", + ["244042-SPELL_CAST_SUCCESS"] = "Marked Prey, 244042, SPELL_CAST_SUCCESS, 1709928838.077, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-122366-0000641B7D, Varimathras, 68168, 0, , nil, -2147483648, -2147483648, 244042, Marked Prey, 32", + ["244042-SPELL_AURA_REMOVED"] = "Marked Prey, 244042, SPELL_AURA_REMOVED, 1709928843.171, SPELL_AURA_REMOVED, false, Creature-0-67-1712-0-122366-0000641B7D, Varimathras, 68168, 0, Player-67-003504AB, Latviann, 1300, 128, 244042, Marked Prey, 32, DEBUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/244056.txt b/WeakAuras/Projects/RaiderlosSA/out/244056.txt new file mode 100644 index 0000000..c141860 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/244056.txt @@ -0,0 +1,8 @@ + ["244056-SPELL_AURA_APPLIED"] = "Siphon Corruption, 244056, SPELL_AURA_APPLIED, 1709925145.324, SPELL_AURA_APPLIED, false, Creature-0-67-1712-0-122135-00005C36B1, Shatug, 2632, 0, Creature-0-67-1712-0-122135-00005C36B1, Shatug, 2632, 0, 244056, Siphon Corruption, 32, BUFF", + ["244056-SPELL_CAST_SUCCESS"] = "Siphon Corruption, 244056, SPELL_CAST_SUCCESS, 1709925145.324, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-122135-00005C36B1, Shatug, 2632, 0, , nil, -2147483648, -2147483648, 244056, Siphon Corruption, 32", + ["244056-SPELL_AURA_REMOVED"] = "Siphon Corruption, 244056, SPELL_AURA_REMOVED, 1709925154.442, SPELL_AURA_REMOVED, false, Creature-0-67-1712-0-122135-00005C36B1, Shatug, 2632, 0, Creature-0-67-1712-0-122135-00005C36B1, Shatug, 2632, 0, 244056, Siphon Corruption, 32, BUFF", + ["244056-SPELL_CAST_START"] = "Siphon Corruption, 244056, SPELL_CAST_START, 1709925144.33, SPELL_CAST_START, false, Creature-0-67-1712-0-122135-00005C36B1, Shatug, 2632, 0, , nil, -2147483648, -2147483648, 244056, Siphon Corruption, 32", + ["244056-SPELL_AURA_REMOVED"] = "Siphon Corruption, 244056, SPELL_AURA_REMOVED, 1709752506.729, SPELL_AURA_REMOVED, false, Creature-0-67-1712-0-122135-0000477122, Shatug, 68168, 0, Creature-0-67-1712-0-122135-0000477122, Shatug, 68168, 0, 244056, Siphon Corruption, 32, BUFF", + ["244056-SPELL_CAST_SUCCESS"] = "Siphon Corruption, 244056, SPELL_CAST_SUCCESS, 1709752497.675, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-122135-0000477122, Shatug, 68168, 0, , nil, -2147483648, -2147483648, 244056, Siphon Corruption, 32", + ["244056-SPELL_CAST_START"] = "Siphon Corruption, 244056, SPELL_CAST_START, 1709752496.607, SPELL_CAST_START, false, Creature-0-67-1712-0-122135-0000477122, Shatug, 68168, 0, , nil, -2147483648, -2147483648, 244056, Siphon Corruption, 32", + ["244056-SPELL_AURA_APPLIED"] = "Siphon Corruption, 244056, SPELL_AURA_APPLIED, 1709752497.698, SPELL_AURA_APPLIED, false, Creature-0-67-1712-0-122135-0000477122, Shatug, 68168, 0, Creature-0-67-1712-0-122135-0000477122, Shatug, 68168, 0, 244056, Siphon Corruption, 32, BUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/244057.txt b/WeakAuras/Projects/RaiderlosSA/out/244057.txt new file mode 100644 index 0000000..0f0a4cf --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/244057.txt @@ -0,0 +1,8 @@ + ["244057-SPELL_CAST_START"] = "Enflame Corruption, 244057, SPELL_CAST_START, 1709925170.377, SPELL_CAST_START, false, Creature-0-67-1712-0-122477-00005C36B4, F'harg, 2632, 0, , nil, -2147483648, -2147483648, 244057, Enflame Corruption, 4", + ["244057-SPELL_CAST_SUCCESS"] = "Enflame Corruption, 244057, SPELL_CAST_SUCCESS, 1709925171.385, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-122477-00005C36B4, F'harg, 2632, 0, , nil, -2147483648, -2147483648, 244057, Enflame Corruption, 4", + ["244057-SPELL_AURA_REMOVED"] = "Enflame Corruption, 244057, SPELL_AURA_REMOVED, 1709925180.426, SPELL_AURA_REMOVED, false, Creature-0-67-1712-0-122477-00005C36B4, F'harg, 2632, 0, Creature-0-67-1712-0-122477-00005C36B4, F'harg, 2632, 0, 244057, Enflame Corruption, 4, BUFF", + ["244057-SPELL_AURA_APPLIED"] = "Enflame Corruption, 244057, SPELL_AURA_APPLIED, 1709925171.385, SPELL_AURA_APPLIED, false, Creature-0-67-1712-0-122477-00005C36B4, F'harg, 2632, 0, Creature-0-67-1712-0-122477-00005C36B4, F'harg, 2632, 0, 244057, Enflame Corruption, 4, BUFF", + ["244057-SPELL_CAST_START"] = "Enflame Corruption, 244057, SPELL_CAST_START, 1709752524.71, SPELL_CAST_START, false, Creature-0-67-1712-0-122477-0000477125, F'harg, 2632, 0, , nil, -2147483648, -2147483648, 244057, Enflame Corruption, 4", + ["244057-SPELL_AURA_APPLIED"] = "Enflame Corruption, 244057, SPELL_AURA_APPLIED, 1709752525.73, SPELL_AURA_APPLIED, false, Creature-0-67-1712-0-122477-0000477125, F'harg, 2632, 0, Creature-0-67-1712-0-122477-0000477125, F'harg, 2632, 0, 244057, Enflame Corruption, 4, BUFF", + ["244057-SPELL_AURA_REMOVED"] = "Enflame Corruption, 244057, SPELL_AURA_REMOVED, 1709752534.728, SPELL_AURA_REMOVED, false, Creature-0-67-1712-0-122477-0000477125, F'harg, 2632, 0, Creature-0-67-1712-0-122477-0000477125, F'harg, 2632, 0, 244057, Enflame Corruption, 4, BUFF", + ["244057-SPELL_CAST_SUCCESS"] = "Enflame Corruption, 244057, SPELL_CAST_SUCCESS, 1709752525.73, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-122477-0000477125, F'harg, 2632, 0, , nil, -2147483648, -2147483648, 244057, Enflame Corruption, 4", diff --git a/WeakAuras/Projects/RaiderlosSA/out/244086.txt b/WeakAuras/Projects/RaiderlosSA/out/244086.txt new file mode 100644 index 0000000..cf4eb03 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/244086.txt @@ -0,0 +1,6 @@ + ["244086-SPELL_AURA_REMOVED"] = "Molten Touch, 244086, SPELL_AURA_REMOVED, 1709925141.299, SPELL_AURA_REMOVED, false, Creature-0-67-1712-0-122477-00005C36B4, F'harg, 68168, 0, Player-67-002DCF30, Kritzkrieg, 1300, 0, 244086, Molten Touch, 1, DEBUFF", + ["244086-SPELL_AURA_APPLIED"] = "Molten Touch, 244086, SPELL_AURA_APPLIED, 1709925139.445, SPELL_AURA_APPLIED, false, Creature-0-67-1712-0-122477-00005C36B4, F'harg, 68168, 0, Player-67-002DCF30, Kritzkrieg, 1300, 0, 244086, Molten Touch, 1, DEBUFF", + ["244086-SPELL_CAST_SUCCESS"] = "Molten Touch, 244086, SPELL_CAST_SUCCESS, 1709925139.445, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-122477-00005C36B4, F'harg, 68168, 0, Player-67-002DCF30, Kritzkrieg, 1300, 0, 244086, Molten Touch, 1", + ["244086-SPELL_AURA_REMOVED"] = "Molten Touch, 244086, SPELL_AURA_REMOVED, 1709925140.699, SPELL_AURA_REMOVED, false, Creature-0-67-1712-0-122477-00005C36B4, F'harg, 2632, 0, Player-67-002DCF30, Kritzkrieg, 1300, 0, 244086, Molten Touch, 1, DEBUFF", + ["244086-SPELL_AURA_APPLIED"] = "Molten Touch, 244086, SPELL_AURA_APPLIED, 1709925138.862, SPELL_AURA_APPLIED, false, Creature-0-67-1712-0-122477-00005C36B4, F'harg, 2632, 0, Player-67-002DCF30, Kritzkrieg, 1300, 0, 244086, Molten Touch, 1, DEBUFF", + ["244086-SPELL_CAST_SUCCESS"] = "Molten Touch, 244086, SPELL_CAST_SUCCESS, 1709925138.862, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-122477-00005C36B4, F'harg, 2632, 0, Player-67-002DCF30, Kritzkrieg, 1300, 0, 244086, Molten Touch, 1", diff --git a/WeakAuras/Projects/RaiderlosSA/out/244093.txt b/WeakAuras/Projects/RaiderlosSA/out/244093.txt new file mode 100644 index 0000000..ffd5340 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/244093.txt @@ -0,0 +1,2 @@ + ["244093-SPELL_CAST_SUCCESS"] = "Necrotic Embrace, 244093, SPELL_CAST_SUCCESS, 1709928848.355, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-122366-0000641B7D, Varimathras, 2632, 0, , nil, -2147483648, -2147483648, 244093, Necrotic Embrace, 32", + ["244093-SPELL_CAST_SUCCESS"] = "Necrotic Embrace, 244093, SPELL_CAST_SUCCESS, 1709928847.815, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-122366-0000641B7D, Varimathras, 68168, 0, , nil, -2147483648, -2147483648, 244093, Necrotic Embrace, 32", diff --git a/WeakAuras/Projects/RaiderlosSA/out/244106.txt b/WeakAuras/Projects/RaiderlosSA/out/244106.txt new file mode 100644 index 0000000..e69de29 diff --git a/WeakAuras/Projects/RaiderlosSA/out/244131.txt b/WeakAuras/Projects/RaiderlosSA/out/244131.txt new file mode 100644 index 0000000..bd35a99 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/244131.txt @@ -0,0 +1,4 @@ + ["244131-SPELL_AURA_REMOVED"] = "Consuming Sphere, 244131, SPELL_AURA_REMOVED, 1709925172.506, SPELL_AURA_REMOVED, false, Creature-0-67-1712-0-122135-00005C36B1, Shatug, 68168, 0, Player-67-003460E5, Sugpula, 1300, 0, 244131, Consuming Sphere, 32, DEBUFF", + ["244131-SPELL_AURA_APPLIED"] = "Consuming Sphere, 244131, SPELL_AURA_APPLIED, 1709925172.427, SPELL_AURA_APPLIED, false, Creature-0-67-1712-0-122135-00005C36B1, Shatug, 68168, 0, Player-67-0034F215, Inekshaman, 1300, 0, 244131, Consuming Sphere, 32, DEBUFF", + ["244131-SPELL_AURA_REMOVED"] = "Consuming Sphere, 244131, SPELL_AURA_REMOVED, 1709752527.262, SPELL_AURA_REMOVED, false, Creature-0-67-1712-0-122135-0000477122, Shatug, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 244131, Consuming Sphere, 32, DEBUFF", + ["244131-SPELL_AURA_APPLIED"] = "Consuming Sphere, 244131, SPELL_AURA_APPLIED, 1709752526.726, SPELL_AURA_APPLIED, false, Creature-0-67-1712-0-122135-0000477122, Shatug, 68168, 0, Player-67-00339F45, Shadøws, 1300, 0, 244131, Consuming Sphere, 32, DEBUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/244291.txt b/WeakAuras/Projects/RaiderlosSA/out/244291.txt new file mode 100644 index 0000000..4efe5eb --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/244291.txt @@ -0,0 +1,10 @@ + ["244291-SPELL_AURA_APPLIED"] = "Foe Breaker, 244291, SPELL_AURA_APPLIED, 1709756294.679, SPELL_AURA_APPLIED, false, Creature-0-67-1712-0-121975-00004E7983, Aggramar, 68168, 0, Player-67-00247307, Smallpumper, 1298, 128, 244291, Foe Breaker, 1, DEBUFF", + ["244291-SPELL_AURA_REMOVED"] = "Foe Breaker, 244291, SPELL_AURA_REMOVED, 1709756324.704, SPELL_AURA_REMOVED, false, Creature-0-67-1712-0-121975-00004E7983, Aggramar, 68168, 0, Player-67-00247307, Smallpumper, 1298, 128, 244291, Foe Breaker, 1, DEBUFF", + ["244291-SPELL_DAMAGE"] = "Foe Breaker, 244291, SPELL_DAMAGE, 1709756294.598, SPELL_DAMAGE, false, Creature-0-67-1712-0-121975-00004E7983, Aggramar, 68168, 0, Player-67-00247307, Smallpumper, 1298, 128, 244291, Foe Breaker, 1, 3114084, -1, 1, nil, nil, nil, false, false, false, false", + ["244291-SPELL_MISSED"] = "Foe Breaker, 244291, SPELL_MISSED, 1709756421.99, SPELL_MISSED, false, Creature-0-67-1712-0-121975-00004E7983, Aggramar, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 244291, Foe Breaker, 1, ABSORB, false, 3101721", + ["244291-SPELL_ABSORBED"] = "Foe Breaker, 244291, SPELL_ABSORBED, 1709756421.99, SPELL_ABSORBED, false, Creature-0-67-1712-0-121975-00004E7983, Aggramar, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 244291, Foe Breaker, 1, Player-67-00247307, Smallpumper, 1298, 0, 252545, Light of Absolarn, 8, 3101721", + ["244291-SPELL_AURA_APPLIED_DOSE"] = "Foe Breaker, 244291, SPELL_AURA_APPLIED_DOSE, 1710277390.61, SPELL_AURA_APPLIED_DOSE, false, Creature-0-67-1712-0-121975-00005E7369, Aggramar, 68168, 0, Player-67-00298001, Хронп, 1300, 0, 244291, Foe Breaker, 1, DEBUFF, 2", + ["244291-SPELL_AURA_APPLIED"] = "Foe Breaker, 244291, SPELL_AURA_APPLIED, 1709929878.685, SPELL_AURA_APPLIED, false, Creature-0-67-1712-0-121975-0000644688, Aggramar, 2632, 0, Player-67-002C429F, Anusucc, 1300, 0, 244291, Foe Breaker, 1, DEBUFF", + ["244291-SPELL_AURA_REMOVED"] = "Foe Breaker, 244291, SPELL_AURA_REMOVED, 1709929908.702, SPELL_AURA_REMOVED, false, Creature-0-67-1712-0-121975-0000644688, Aggramar, 2632, 0, Player-67-002C429F, Anusucc, 1300, 128, 244291, Foe Breaker, 1, DEBUFF", + ["244291-SPELL_DAMAGE"] = "Foe Breaker, 244291, SPELL_DAMAGE, 1709929878.626, SPELL_DAMAGE, false, Creature-0-67-1712-0-121975-0000644688, Aggramar, 2632, 0, Player-67-002C429F, Anusucc, 1300, 0, 244291, Foe Breaker, 1, 2887856, -1, 1, nil, nil, 7176924, false, false, false, false", + ["244291-SPELL_ABSORBED"] = "Foe Breaker, 244291, SPELL_ABSORBED, 1709929878.6, SPELL_ABSORBED, false, Creature-0-67-1712-0-121975-0000644688, Aggramar, 2632, 0, Player-67-002C429F, Anusucc, 1300, 0, 244291, Foe Breaker, 1, Player-67-002C429F, Anusucc, 1300, 0, 252545, Light of Absolarn, 8, 3956195", diff --git a/WeakAuras/Projects/RaiderlosSA/out/244410.txt b/WeakAuras/Projects/RaiderlosSA/out/244410.txt new file mode 100644 index 0000000..ef90147 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/244410.txt @@ -0,0 +1,6 @@ + ["244410-SPELL_AURA_REMOVED"] = "Decimation, 244410, SPELL_AURA_REMOVED, 1709924694.157, SPELL_AURA_REMOVED, false, Creature-0-67-1712-0-122773-00005D33E1, Decimator, 2632, 0, Player-67-00339F45, Shadøws, 1300, 0, 244410, Decimation, 4, DEBUFF", + ["244410-SPELL_CAST_SUCCESS"] = "Decimation, 244410, SPELL_CAST_SUCCESS, 1709924689.022, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-122773-00005D33E1, Decimator, 2632, 0, Player-67-0034D19D, Brainstew, 1300, 0, 244410, Decimation, 4", + ["244410-SPELL_AURA_APPLIED"] = "Decimation, 244410, SPELL_AURA_APPLIED, 1709924689.092, SPELL_AURA_APPLIED, false, Creature-0-67-1712-0-122773-00005D33E1, Decimator, 2632, 0, Player-67-00339F45, Shadøws, 1300, 0, 244410, Decimation, 4, DEBUFF", + ["244410-SPELL_AURA_REMOVED"] = "Decimation, 244410, SPELL_AURA_REMOVED, 1709752093.043, SPELL_AURA_REMOVED, false, Creature-0-67-1712-0-122773-00004890BF, Decimator, 2632, 0, Player-67-00303268, Raidenshøgun, 1300, 0, 244410, Decimation, 4, DEBUFF", + ["244410-SPELL_CAST_SUCCESS"] = "Decimation, 244410, SPELL_CAST_SUCCESS, 1709752087.93, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-122773-00004890BF, Decimator, 2632, 0, Player-67-0034E80E, Seedeath, 1300, 0, 244410, Decimation, 4", + ["244410-SPELL_AURA_APPLIED"] = "Decimation, 244410, SPELL_AURA_APPLIED, 1709752087.997, SPELL_AURA_APPLIED, false, Creature-0-67-1712-0-122773-00004890BF, Decimator, 2632, 0, Player-67-00303268, Raidenshøgun, 1300, 0, 244410, Decimation, 4, DEBUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/244693.txt b/WeakAuras/Projects/RaiderlosSA/out/244693.txt new file mode 100644 index 0000000..9c5d702 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/244693.txt @@ -0,0 +1,4 @@ + ["244693-SPELL_CAST_SUCCESS"] = "Wake of Flame, 244693, SPELL_CAST_SUCCESS, 1709756110.194, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-121975-00004E7983, Aggramar, 2632, 0, Player-67-00351D42, Belyth, 1300, 0, 244693, Wake of Flame, 4", + ["244693-SPELL_CAST_START"] = "Wake of Flame, 244693, SPELL_CAST_START, 1709756108.173, SPELL_CAST_START, false, Creature-0-67-1712-0-121975-00004E7983, Aggramar, 2632, 0, , nil, -2147483648, -2147483648, 244693, Wake of Flame, 4", + ["244693-SPELL_CAST_START"] = "Wake of Flame, 244693, SPELL_CAST_START, 1709929845.797, SPELL_CAST_START, false, Creature-0-67-1712-0-121975-0000644688, Aggramar, 2632, 0, , nil, -2147483648, -2147483648, 244693, Wake of Flame, 4", + ["244693-SPELL_CAST_SUCCESS"] = "Wake of Flame, 244693, SPELL_CAST_SUCCESS, 1709929847.794, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-121975-0000644688, Aggramar, 2632, 0, Player-67-00315A41, Tosu, 1298, 0, 244693, Wake of Flame, 4", diff --git a/WeakAuras/Projects/RaiderlosSA/out/244768.txt b/WeakAuras/Projects/RaiderlosSA/out/244768.txt new file mode 100644 index 0000000..46aa9fa --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/244768.txt @@ -0,0 +1,4 @@ + ["244768-SPELL_AURA_REMOVED"] = "Desolate Gaze, 244768, SPELL_AURA_REMOVED, 1709925211.489, SPELL_AURA_REMOVED, false, Creature-0-67-1712-0-122477-00005C36B4, F'harg, 2632, 0, Player-67-0034E040, Chumbinho, 1300, 0, 244768, Desolate Gaze, 1, DEBUFF", + ["244768-SPELL_AURA_APPLIED"] = "Desolate Gaze, 244768, SPELL_AURA_APPLIED, 1709925203.427, SPELL_AURA_APPLIED, false, Creature-0-67-1712-0-122477-00005C36B4, F'harg, 2632, 0, Player-67-0034E040, Chumbinho, 1300, 0, 244768, Desolate Gaze, 1, DEBUFF", + ["244768-SPELL_AURA_REMOVED"] = "Desolate Gaze, 244768, SPELL_AURA_REMOVED, 1709752566.703, SPELL_AURA_REMOVED, false, Creature-0-67-1712-0-122477-0000477125, F'harg, 2632, 0, Player-67-0034D317, Edgarsishere, 1298, 0, 244768, Desolate Gaze, 1, DEBUFF", + ["244768-SPELL_AURA_APPLIED"] = "Desolate Gaze, 244768, SPELL_AURA_APPLIED, 1709752558.69, SPELL_AURA_APPLIED, false, Creature-0-67-1712-0-122477-0000477125, F'harg, 2632, 0, Player-67-0034D317, Edgarsishere, 1298, 0, 244768, Desolate Gaze, 1, DEBUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/244899.txt b/WeakAuras/Projects/RaiderlosSA/out/244899.txt new file mode 100644 index 0000000..213f2ef --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/244899.txt @@ -0,0 +1,16 @@ + ["244899-SPELL_CAST_SUCCESS"] = "Fiery Strike, 244899, SPELL_CAST_SUCCESS, 1709755613.851, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-122468-00004E5DD6, Noura, Mother of Flames, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 244899, Fiery Strike, 4", + ["244899-SPELL_AURA_REMOVED"] = "Fiery Strike, 244899, SPELL_AURA_REMOVED, 1709755820.397, SPELL_AURA_REMOVED, false, Creature-0-67-1712-0-122468-00004E5DD6, Noura, Mother of Flames, 2632, 0, Player-67-00247307, Smallpumper, 1298, 128, 244899, Fiery Strike, 4, DEBUFF", + ["244899-SPELL_MISSED"] = "Fiery Strike, 244899, SPELL_MISSED, 1709929295.961, SPELL_MISSED, false, Creature-0-67-1712-0-122468-00006527FF, Noura, Mother of Flames, 2632, 0, Player-67-002C429F, Anusucc, 1298, 0, 244899, Fiery Strike, 4, ABSORB, false, 1655217", + ["244899-SPELL_CAST_START"] = "Fiery Strike, 244899, SPELL_CAST_START, 1709755613.339, SPELL_CAST_START, false, Creature-0-67-1712-0-122468-00004E5DD6, Noura, Mother of Flames, 68168, 0, , nil, -2147483648, -2147483648, 244899, Fiery Strike, 4", + ["244899-SPELL_ABSORBED"] = "Fiery Strike, 244899, SPELL_ABSORBED, 1709755624.9, SPELL_ABSORBED, false, Creature-0-67-1712-0-122468-00004E5DD6, Noura, Mother of Flames, 68168, 0, Player-67-00351D42, Belyth, 1300, 0, 244899, Fiery Strike, 4, Player-67-00351D42, Belyth, 1300, 0, 235313, Blazing Barrier, 4, 418769", + ["244899-SPELL_AURA_APPLIED"] = "Fiery Strike, 244899, SPELL_AURA_APPLIED, 1709755613.932, SPELL_AURA_APPLIED, false, Creature-0-67-1712-0-122468-00004E5DD6, Noura, Mother of Flames, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 244899, Fiery Strike, 4, DEBUFF", + ["244899-SPELL_DAMAGE"] = "Fiery Strike, 244899, SPELL_DAMAGE, 1709755613.851, SPELL_DAMAGE, false, Creature-0-67-1712-0-122468-00004E5DD6, Noura, Mother of Flames, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 244899, Fiery Strike, 4, 520126, -1, 4, nil, nil, nil, false, false, false, false", + ["244899-SPELL_AURA_APPLIED_DOSE"] = "Fiery Strike, 244899, SPELL_AURA_APPLIED_DOSE, 1709755624.94, SPELL_AURA_APPLIED_DOSE, false, Creature-0-67-1712-0-122468-00004E5DD6, Noura, Mother of Flames, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 244899, Fiery Strike, 4, DEBUFF, 2", + ["244899-SPELL_CAST_SUCCESS"] = "Fiery Strike, 244899, SPELL_CAST_SUCCESS, 1709929295.479, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-122468-00006527FF, Noura, Mother of Flames, 2632, 0, Player-67-002C429F, Anusucc, 1300, 0, 244899, Fiery Strike, 4", + ["244899-SPELL_AURA_REMOVED"] = "Fiery Strike, 244899, SPELL_AURA_REMOVED, 1709929397.61, SPELL_AURA_REMOVED, false, Creature-0-67-1712-0-122468-00006527FF, Noura, Mother of Flames, 2632, 0, Player-67-002C429F, Anusucc, 1300, 0, 244899, Fiery Strike, 4, DEBUFF", + ["244899-SPELL_AURA_APPLIED_DOSE"] = "Fiery Strike, 244899, SPELL_AURA_APPLIED_DOSE, 1709929306.498, SPELL_AURA_APPLIED_DOSE, false, Creature-0-67-1712-0-122468-00006527FF, Noura, Mother of Flames, 2632, 0, Player-67-002C429F, Anusucc, 1300, 0, 244899, Fiery Strike, 4, DEBUFF, 2", + ["244899-SPELL_CAST_START"] = "Fiery Strike, 244899, SPELL_CAST_START, 1709929294.904, SPELL_CAST_START, false, Creature-0-67-1712-0-122468-00006527FF, Noura, Mother of Flames, 2632, 0, , nil, -2147483648, -2147483648, 244899, Fiery Strike, 4", + ["244899-SPELL_ABSORBED"] = "Fiery Strike, 244899, SPELL_ABSORBED, 1709929295.479, SPELL_ABSORBED, false, Creature-0-67-1712-0-122468-00006527FF, Noura, Mother of Flames, 2632, 0, Player-67-002C429F, Anusucc, 1300, 0, 244899, Fiery Strike, 4, Player-67-0029732D, Ningenpriest, 1300, 0, 17, Power Word: Shield, 2, 1209333", + ["244899-SPELL_DAMAGE"] = "Fiery Strike, 244899, SPELL_DAMAGE, 1709929295.479, SPELL_DAMAGE, false, Creature-0-67-1712-0-122468-00006527FF, Noura, Mother of Flames, 2632, 0, Player-67-003224AB, Shkylol, 1300, 0, 244899, Fiery Strike, 4, 1935657, -1, 4, nil, nil, 1067388, false, false, false, false", + ["244899-SPELL_MISSED"] = "Fiery Strike, 244899, SPELL_MISSED, 1709929295.479, SPELL_MISSED, false, Creature-0-67-1712-0-122468-00006527FF, Noura, Mother of Flames, 2632, 0, Player-67-002C429F, Anusucc, 1300, 0, 244899, Fiery Strike, 4, ABSORB, false, 1655217", + ["244899-SPELL_AURA_APPLIED"] = "Fiery Strike, 244899, SPELL_AURA_APPLIED, 1709929295.479, SPELL_AURA_APPLIED, false, Creature-0-67-1712-0-122468-00006527FF, Noura, Mother of Flames, 2632, 0, Player-67-002C429F, Anusucc, 1300, 0, 244899, Fiery Strike, 4, DEBUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/244969.txt b/WeakAuras/Projects/RaiderlosSA/out/244969.txt new file mode 100644 index 0000000..cfe590d --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/244969.txt @@ -0,0 +1,10 @@ + ["244969-SPELL_ABSORBED"] = "Eradication, 244969, SPELL_ABSORBED, 1709924728.522, SPELL_ABSORBED, false, Vehicle-0-67-1712-0-122450-00005C35F5, Garothi Worldbreaker, 2632, 0, Player-67-00345CD7, Bagrintwo, 1300, 0, 244969, Eradication, 1, Player-67-00345CD7, Bagrintwo, 1300, 0, 209388, Bulwark of Order, 2, 527303", + ["244969-SPELL_MISSED"] = "Eradication, 244969, SPELL_MISSED, 1709924728.555, SPELL_MISSED, false, Vehicle-0-67-1712-0-122450-00005C35F5, Garothi Worldbreaker, 2632, 0, Player-67-0034E040, Chumbinho, 1300, 0, 244969, Eradication, 1, IMMUNE, false", + ["244969-SPELL_CAST_START"] = "Eradication, 244969, SPELL_CAST_START, 1709924723.045, SPELL_CAST_START, false, Vehicle-0-67-1712-0-122450-00005C35F5, Garothi Worldbreaker, 2632, 0, , nil, -2147483648, -2147483648, 244969, Eradication, 1", + ["244969-SPELL_CAST_SUCCESS"] = "Eradication, 244969, SPELL_CAST_SUCCESS, 1709924728.555, SPELL_CAST_SUCCESS, false, Vehicle-0-67-1712-0-122450-00005C35F5, Garothi Worldbreaker, 2632, 0, , nil, -2147483648, -2147483648, 244969, Eradication, 1", + ["244969-SPELL_DAMAGE"] = "Eradication, 244969, SPELL_DAMAGE, 1709924728.555, SPELL_DAMAGE, false, Vehicle-0-67-1712-0-122450-00005C35F5, Garothi Worldbreaker, 2632, 0, Player-67-00345CD7, Bagrintwo, 1300, 0, 244969, Eradication, 1, 808458, -1, 1, nil, nil, 527303, false, false, false, false", + ["244969-SPELL_ABSORBED"] = "Eradication, 244969, SPELL_ABSORBED, 1709752136.326, SPELL_ABSORBED, false, Vehicle-0-67-1712-0-122450-0000477022, Garothi Worldbreaker, 68168, 0, Player-67-00300DF1, Keeponsmitin, 1300, 0, 244969, Eradication, 1, Player-67-00300DF1, Keeponsmitin, 1300, 0, 184662, Shield of Vengeance, 2, 527791", + ["244969-SPELL_MISSED"] = "Eradication, 244969, SPELL_MISSED, 1709752136.326, SPELL_MISSED, false, Vehicle-0-67-1712-0-122450-0000477022, Garothi Worldbreaker, 68168, 0, Player-67-00351D42, Belyth, 1300, 0, 244969, Eradication, 1, IMMUNE, false", + ["244969-SPELL_CAST_START"] = "Eradication, 244969, SPELL_CAST_START, 1709752130.798, SPELL_CAST_START, false, Vehicle-0-67-1712-0-122450-0000477022, Garothi Worldbreaker, 68168, 0, , nil, -2147483648, -2147483648, 244969, Eradication, 1", + ["244969-SPELL_CAST_SUCCESS"] = "Eradication, 244969, SPELL_CAST_SUCCESS, 1709752136.326, SPELL_CAST_SUCCESS, false, Vehicle-0-67-1712-0-122450-0000477022, Garothi Worldbreaker, 68168, 0, , nil, -2147483648, -2147483648, 244969, Eradication, 1", + ["244969-SPELL_DAMAGE"] = "Eradication, 244969, SPELL_DAMAGE, 1709752136.326, SPELL_DAMAGE, false, Vehicle-0-67-1712-0-122450-0000477022, Garothi Worldbreaker, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 244969, Eradication, 1, 1344610, -1, 1, nil, nil, nil, false, false, false, false", diff --git a/WeakAuras/Projects/RaiderlosSA/out/245161.txt b/WeakAuras/Projects/RaiderlosSA/out/245161.txt new file mode 100644 index 0000000..e69de29 diff --git a/WeakAuras/Projects/RaiderlosSA/out/245281.txt b/WeakAuras/Projects/RaiderlosSA/out/245281.txt new file mode 100644 index 0000000..e69de29 diff --git a/WeakAuras/Projects/RaiderlosSA/out/245546.txt b/WeakAuras/Projects/RaiderlosSA/out/245546.txt new file mode 100644 index 0000000..e69de29 diff --git a/WeakAuras/Projects/RaiderlosSA/out/245586.txt b/WeakAuras/Projects/RaiderlosSA/out/245586.txt new file mode 100644 index 0000000..047fc10 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/245586.txt @@ -0,0 +1,8 @@ + ["245586-SPELL_HEAL_ABSORBED"] = "Chilled Blood, 245586, SPELL_HEAL_ABSORBED, 1709755805.385, SPELL_HEAL_ABSORBED, false, Creature-0-67-1712-0-122469-00004E5DD7, Diima, Mother of Gloom, 2632, 0, Player-67-00337344, Elemona, 1298, 0, 245586, Chilled Blood, 16, Player-67-00337344, Elemona-uwowx100, 1298, 0, 245586, Leech, 1, 19916", + ["245586-SPELL_AURA_REMOVED"] = "Chilled Blood, 245586, SPELL_AURA_REMOVED, 1709755814.952, SPELL_AURA_REMOVED, false, Creature-0-67-1712-0-122469-00004E5DD7, Diima, Mother of Gloom, 2632, 0, Player-67-0034F5CD, Badbrony, 1300, 0, 245586, Chilled Blood, 16, DEBUFF, 131385", + ["245586-SPELL_CAST_SUCCESS"] = "Chilled Blood, 245586, SPELL_CAST_SUCCESS, 1709755805.299, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-122469-00004E5DD7, Diima, Mother of Gloom, 2632, 0, Player-67-0020B127, Diemtherfker, 1300, 0, 245586, Chilled Blood, 16", + ["245586-SPELL_AURA_APPLIED"] = "Chilled Blood, 245586, SPELL_AURA_APPLIED, 1709755805.338, SPELL_AURA_APPLIED, false, Creature-0-67-1712-0-122469-00004E5DD7, Diima, Mother of Gloom, 2632, 0, Player-67-0034F5CD, Badbrony, 1300, 0, 245586, Chilled Blood, 16, DEBUFF, 5577000", + ["245586-SPELL_HEAL_ABSORBED"] = "Chilled Blood, 245586, SPELL_HEAL_ABSORBED, 1709929487.68, SPELL_HEAL_ABSORBED, false, Creature-0-67-1712-0-122469-0000652801, Diima, Mother of Gloom, 2632, 0, Player-67-00344D74, Dotforlife, 1300, 0, 245586, Chilled Blood, 16, Player-67-00344D74, Dotforlife-uwowx100, 1300, 0, 245586, Leech, 1, 11346", + ["245586-SPELL_AURA_REMOVED"] = "Chilled Blood, 245586, SPELL_AURA_REMOVED, 1709929497.262, SPELL_AURA_REMOVED, false, Creature-0-67-1712-0-122469-0000652801, Diima, Mother of Gloom, 2632, 0, Player-67-00344D74, Dotforlife, 1300, 0, 245586, Chilled Blood, 16, DEBUFF, 3762747", + ["245586-SPELL_CAST_SUCCESS"] = "Chilled Blood, 245586, SPELL_CAST_SUCCESS, 1709929487.171, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-122469-0000652801, Diima, Mother of Gloom, 2632, 0, Player-67-00344FA6, Deadgevex, 1300, 0, 245586, Chilled Blood, 16", + ["245586-SPELL_AURA_APPLIED"] = "Chilled Blood, 245586, SPELL_AURA_APPLIED, 1709929487.236, SPELL_AURA_APPLIED, false, Creature-0-67-1712-0-122469-0000652801, Diima, Mother of Gloom, 2632, 0, Player-67-00344D74, Dotforlife, 1300, 0, 245586, Chilled Blood, 16, DEBUFF, 8000000", diff --git a/WeakAuras/Projects/RaiderlosSA/out/245627.txt b/WeakAuras/Projects/RaiderlosSA/out/245627.txt new file mode 100644 index 0000000..b717421 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/245627.txt @@ -0,0 +1,4 @@ + ["245627-SPELL_CAST_SUCCESS"] = "Whirling Saber, 245627, SPELL_CAST_SUCCESS, 1709755612.491, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-122468-00004E5DD6, Noura, Mother of Flames, 68168, 0, , nil, -2147483648, -2147483648, 245627, Whirling Saber, 4", + ["245627-SPELL_CAST_START"] = "Whirling Saber, 245627, SPELL_CAST_START, 1709755610.79, SPELL_CAST_START, false, Creature-0-67-1712-0-122468-00004E5DD6, Noura, Mother of Flames, 68168, 0, , nil, -2147483648, -2147483648, 245627, Whirling Saber, 4", + ["245627-SPELL_CAST_SUCCESS"] = "Whirling Saber, 245627, SPELL_CAST_SUCCESS, 1709929294.148, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-122468-00006527FF, Noura, Mother of Flames, 2632, 0, , nil, -2147483648, -2147483648, 245627, Whirling Saber, 4", + ["245627-SPELL_CAST_START"] = "Whirling Saber, 245627, SPELL_CAST_START, 1709929292.387, SPELL_CAST_START, false, Creature-0-67-1712-0-122468-00006527FF, Noura, Mother of Flames, 2632, 0, , nil, -2147483648, -2147483648, 245627, Whirling Saber, 4", diff --git a/WeakAuras/Projects/RaiderlosSA/out/245983.txt b/WeakAuras/Projects/RaiderlosSA/out/245983.txt new file mode 100644 index 0000000..e69de29 diff --git a/WeakAuras/Projects/RaiderlosSA/out/246037.txt b/WeakAuras/Projects/RaiderlosSA/out/246037.txt new file mode 100644 index 0000000..e69de29 diff --git a/WeakAuras/Projects/RaiderlosSA/out/246220.txt b/WeakAuras/Projects/RaiderlosSA/out/246220.txt new file mode 100644 index 0000000..446b5c1 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/246220.txt @@ -0,0 +1,6 @@ + ["246220-SPELL_AURA_REMOVED"] = "Fel Bombardment, 246220, SPELL_AURA_REMOVED, 1709924681.045, SPELL_AURA_REMOVED, false, Vehicle-0-67-1712-0-122450-00005C35F5, Garothi Worldbreaker, 2632, 0, Player-67-00345CD7, Bagrintwo, 1300, 0, 246220, Fel Bombardment, 1, DEBUFF", + ["246220-SPELL_AURA_APPLIED"] = "Fel Bombardment, 246220, SPELL_AURA_APPLIED, 1709924674.069, SPELL_AURA_APPLIED, false, Vehicle-0-67-1712-0-122450-00005C35F5, Garothi Worldbreaker, 2632, 0, Player-67-00345CD7, Bagrintwo, 1300, 0, 246220, Fel Bombardment, 1, DEBUFF", + ["246220-SPELL_CAST_SUCCESS"] = "Fel Bombardment, 246220, SPELL_CAST_SUCCESS, 1709924674.011, SPELL_CAST_SUCCESS, false, Vehicle-0-67-1712-0-122450-00005C35F5, Garothi Worldbreaker, 2632, 0, Player-67-00345CD7, Bagrintwo, 1300, 0, 246220, Fel Bombardment, 1", + ["246220-SPELL_AURA_REMOVED"] = "Fel Bombardment, 246220, SPELL_AURA_REMOVED, 1709752079.998, SPELL_AURA_REMOVED, false, Vehicle-0-67-1712-0-122450-0000477022, Garothi Worldbreaker, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 246220, Fel Bombardment, 1, DEBUFF", + ["246220-SPELL_AURA_APPLIED"] = "Fel Bombardment, 246220, SPELL_AURA_APPLIED, 1709752072.979, SPELL_AURA_APPLIED, false, Vehicle-0-67-1712-0-122450-0000477022, Garothi Worldbreaker, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 246220, Fel Bombardment, 1, DEBUFF", + ["246220-SPELL_CAST_SUCCESS"] = "Fel Bombardment, 246220, SPELL_CAST_SUCCESS, 1709752072.924, SPELL_CAST_SUCCESS, false, Vehicle-0-67-1712-0-122450-0000477022, Garothi Worldbreaker, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 246220, Fel Bombardment, 1", diff --git a/WeakAuras/Projects/RaiderlosSA/out/246664.txt b/WeakAuras/Projects/RaiderlosSA/out/246664.txt new file mode 100644 index 0000000..28d9e32 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/246664.txt @@ -0,0 +1,8 @@ + ["246664-SPELL_MISSED"] = "Annihilation, 246664, SPELL_MISSED, 1709754489.095, SPELL_MISSED, false, Creature-0-67-1712-0-127230-00004C90DA, Garothi Annihilator, 2632, 0, Player-67-00297329, Kamuiheal, 1300, 0, 246664, Annihilation, 4, ABSORB, false, 1500944", + ["246664-SPELL_CAST_SUCCESS"] = "Annihilation, 246664, SPELL_CAST_SUCCESS, 1709754489.095, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-127230-00004C90DA, Garothi Annihilator, 2632, 0, , nil, -2147483648, -2147483648, 246664, Annihilation, 4", + ["246664-SPELL_DAMAGE"] = "Annihilation, 246664, SPELL_DAMAGE, 1709754489.095, SPELL_DAMAGE, false, Creature-0-67-1712-0-127230-00004C90DA, Garothi Annihilator, 2632, 0, Player-67-003504AB, Latviann, 1300, 0, 246664, Annihilation, 4, 912542, -1, 4, nil, nil, nil, false, false, false, false", + ["246664-SPELL_ABSORBED"] = "Annihilation, 246664, SPELL_ABSORBED, 1709754489.085, SPELL_ABSORBED, false, Creature-0-67-1712-0-127230-00004C90DA, Garothi Annihilator, 2632, 0, Player-67-00297329, Kamuiheal, 1300, 0, 246664, Annihilation, 4, Player-67-00297329, Kamuiheal, 1300, 0, 207472, Xavaric's Magnum Opus, 1, 1500944", + ["246664-SPELL_CAST_SUCCESS"] = "Annihilation, 246664, SPELL_CAST_SUCCESS, 1709927757.449, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-127230-000061C294, Garothi Annihilator, 2632, 0, , nil, -2147483648, -2147483648, 246664, Annihilation, 4", + ["246664-SPELL_ABSORBED"] = "Annihilation, 246664, SPELL_ABSORBED, 1709927757.449, SPELL_ABSORBED, false, Creature-0-67-1712-0-127230-000061C294, Garothi Annihilator, 2632, 0, Player-67-002A0DBE, Arizus, 1300, 0, 246664, Annihilation, 4, Player-67-002A0DBE, Arizus, 1300, 0, 203538, Greater Blessing of Kings, 2, 242279", + ["246664-SPELL_DAMAGE"] = "Annihilation, 246664, SPELL_DAMAGE, 1709927757.449, SPELL_DAMAGE, false, Creature-0-67-1712-0-127230-000061C294, Garothi Annihilator, 2632, 0, Player-67-002A0DBE, Arizus, 1300, 0, 246664, Annihilation, 4, 1663536, -1, 4, nil, nil, 242279, false, false, false, false", + ["246664-SPELL_MISSED"] = "Annihilation, 246664, SPELL_MISSED, 1709927760.708, SPELL_MISSED, false, Creature-0-67-1712-0-127230-000061C290, Garothi Annihilator, 2632, 0, Player-67-00345CD7, Bagrintwo, 1300, 0, 246664, Annihilation, 4, ABSORB, false, 820532", diff --git a/WeakAuras/Projects/RaiderlosSA/out/246706.txt b/WeakAuras/Projects/RaiderlosSA/out/246706.txt new file mode 100644 index 0000000..0772c31 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/246706.txt @@ -0,0 +1,6 @@ + ["246706-SPELL_DAMAGE"] = "Demolish, 246706, SPELL_DAMAGE, 1709754548.894, SPELL_DAMAGE, true, , nil, 1300, 0, Player-67-00346D7C, Livingbomb, 1300, 0, 246706, Demolish, 32, 2300020, -1, 32, nil, nil, nil, false, false, false, false", + ["246706-SPELL_ABSORBED"] = "Demolish, 246706, SPELL_ABSORBED, 1709754609.107, SPELL_ABSORBED, true, , nil, 1298, 0, Player-67-0034CDD5, Ubberagnarso, 1298, 0, 246706, Demolish, 32, Player-67-0034CDD5, Ubberagnarso, 1298, 0, 108366, Soul Leech, 32, 1054140", + ["246706-SPELL_MISSED"] = "Demolish, 246706, SPELL_MISSED, 1709927768.905, SPELL_MISSED, true, , nil, 1300, 0, Player-67-0034D19D, Brainstew, 1300, 0, 246706, Demolish, 32, IMMUNE, false", + ["246706-SPELL_DAMAGE"] = "Demolish, 246706, SPELL_DAMAGE, 1709927768.348, SPELL_DAMAGE, true, , nil, 1300, 0, Player-67-003224AB, Shkylol, 1300, 0, 246706, Demolish, 32, 19840082, 14503142, 32, nil, nil, 1067388, false, false, false, false", + ["246706-SPELL_ABSORBED"] = "Demolish, 246706, SPELL_ABSORBED, 1709927768.334, SPELL_ABSORBED, true, , nil, 1300, 0, Player-67-003224AB, Shkylol, 1300, 0, 246706, Demolish, 32, Player-67-003224AB, Shkylol, 1300, 0, 108366, Soul Leech, 32, 1067388", + ["246706-SPELL_MISSED"] = "Demolish, 246706, SPELL_MISSED, 1709927768.348, SPELL_MISSED, true, , nil, 1300, 0, Player-67-0034D19D, Brainstew, 1300, 0, 246706, Demolish, 32, IMMUNE, false", diff --git a/WeakAuras/Projects/RaiderlosSA/out/246779.txt b/WeakAuras/Projects/RaiderlosSA/out/246779.txt new file mode 100644 index 0000000..c1c22a3 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/246779.txt @@ -0,0 +1,6 @@ + ["246779-SPELL_MISSED"] = "Diabolic Bomb, 246779, SPELL_MISSED, 1709754817.541, SPELL_MISSED, false, Vehicle-0-67-1712-0-122578-00004C90BC, Kin'garoth, 68168, 0, Player-67-00352BEE, Wosadel, 1300, 0, 246779, Diabolic Bomb, 32, IMMUNE, false", + ["246779-SPELL_DAMAGE"] = "Diabolic Bomb, 246779, SPELL_DAMAGE, 1709754817.541, SPELL_DAMAGE, false, Vehicle-0-67-1712-0-122578-00004C90BC, Kin'garoth, 68168, 0, Player-67-003465EF, Dotsvex, 1300, 0, 246779, Diabolic Bomb, 32, 1293524, -1, 32, nil, nil, 687591, false, false, false, false", + ["246779-SPELL_ABSORBED"] = "Diabolic Bomb, 246779, SPELL_ABSORBED, 1709754817.541, SPELL_ABSORBED, false, Vehicle-0-67-1712-0-122578-00004C90BC, Kin'garoth, 68168, 0, Player-67-003465EF, Dotsvex, 1300, 0, 246779, Diabolic Bomb, 32, Player-67-003465EF, Dotsvex, 1300, 0, 108366, Soul Leech, 32, 687591", + ["246779-SPELL_MISSED"] = "Diabolic Bomb, 246779, SPELL_MISSED, 1709928264.581, SPELL_MISSED, false, Vehicle-0-67-1712-0-122578-000061C276, Kin'garoth, 2632, 0, Player-67-002D1DA2, Pinkleta, 1297, 0, 246779, Diabolic Bomb, 32, ABSORB, false, 1393311", + ["246779-SPELL_ABSORBED"] = "Diabolic Bomb, 246779, SPELL_ABSORBED, 1709928264.581, SPELL_ABSORBED, false, Vehicle-0-67-1712-0-122578-000061C276, Kin'garoth, 2632, 0, Player-67-002D1DA2, Pinkleta, 1297, 0, 246779, Diabolic Bomb, 32, Player-67-002D1DA2, Pinkleta, 1297, 0, 252208, Refractive Shell, 2, 315177", + ["246779-SPELL_DAMAGE"] = "Diabolic Bomb, 246779, SPELL_DAMAGE, 1709928264.581, SPELL_DAMAGE, false, Vehicle-0-67-1712-0-122578-000061C276, Kin'garoth, 2632, 0, Player-67-00352BEE, Wosadel, 1298, 0, 246779, Diabolic Bomb, 32, 1079533, -1, 32, nil, nil, nil, false, false, false, false", diff --git a/WeakAuras/Projects/RaiderlosSA/out/246840.txt b/WeakAuras/Projects/RaiderlosSA/out/246840.txt new file mode 100644 index 0000000..8461039 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/246840.txt @@ -0,0 +1,10 @@ + ["246840-SPELL_AURA_REMOVED"] = "Ruiner, 246840, SPELL_AURA_REMOVED, 1709754815.963, SPELL_AURA_REMOVED, true, , nil, 1300, 0, Player-67-00351D42, Belyth, 1300, 0, 246840, Ruiner, 4, DEBUFF", + ["246840-SPELL_PERIODIC_MISSED"] = "Ruiner, 246840, SPELL_PERIODIC_MISSED, 1709754815.543, SPELL_PERIODIC_MISSED, true, , nil, 1300, 0, Player-67-00351D42, Belyth, 1300, 0, 246840, Ruiner, 4, ABSORB, false, 1337482", + ["246840-SPELL_PERIODIC_DAMAGE"] = "Ruiner, 246840, SPELL_PERIODIC_DAMAGE, 1709754814.831, SPELL_PERIODIC_DAMAGE, true, , nil, 1300, 0, Player-67-00351D42, Belyth, 1300, 0, 246840, Ruiner, 4, 1337482, 0, 4, nil, nil, nil, false, false, false, false", + ["246840-SPELL_ABSORBED"] = "Ruiner, 246840, SPELL_ABSORBED, 1709754887.155, SPELL_ABSORBED, true, , nil, 1300, 0, Player-67-003465EF, Dotsvex, 1300, 0, 246840, Ruiner, 4, Player-67-003465EF, Dotsvex, 1300, 0, 108366, Soul Leech, 32, 557622", + ["246840-SPELL_AURA_APPLIED"] = "Ruiner, 246840, SPELL_AURA_APPLIED, 1709754814.831, SPELL_AURA_APPLIED, true, , nil, 1300, 0, Player-67-00351D42, Belyth, 1300, 0, 246840, Ruiner, 4, DEBUFF", + ["246840-SPELL_AURA_REMOVED"] = "Ruiner, 246840, SPELL_AURA_REMOVED, 1709928348.384, SPELL_AURA_REMOVED, true, , nil, 1300, 0, Player-67-003032B2, Waffele, 1300, 0, 246840, Ruiner, 4, DEBUFF", + ["246840-SPELL_PERIODIC_MISSED"] = "Ruiner, 246840, SPELL_PERIODIC_MISSED, 1709928347.399, SPELL_PERIODIC_MISSED, true, , nil, 1300, 0, Player-67-003032B2, Waffele, 1300, 0, 246840, Ruiner, 4, ABSORB, false, 884626", + ["246840-SPELL_PERIODIC_DAMAGE"] = "Ruiner, 246840, SPELL_PERIODIC_DAMAGE, 1709928449.865, SPELL_PERIODIC_DAMAGE, true, , nil, 1300, 0, Player-67-002A0DBE, Arizus, 1300, 0, 246840, Ruiner, 4, 1485761, 0, 4, nil, nil, nil, false, false, false, false", + ["246840-SPELL_ABSORBED"] = "Ruiner, 246840, SPELL_ABSORBED, 1709928347.399, SPELL_ABSORBED, true, , nil, 1300, 0, Player-67-003032B2, Waffele, 1300, 0, 246840, Ruiner, 4, Player-67-003032B2, Waffele, 1300, 0, 108366, Soul Leech, 32, 884626", + ["246840-SPELL_AURA_APPLIED"] = "Ruiner, 246840, SPELL_AURA_APPLIED, 1709928347.399, SPELL_AURA_APPLIED, true, , nil, 1300, 0, Player-67-003032B2, Waffele, 1300, 0, 246840, Ruiner, 4, DEBUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/247079.txt b/WeakAuras/Projects/RaiderlosSA/out/247079.txt new file mode 100644 index 0000000..4372158 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/247079.txt @@ -0,0 +1,5 @@ + ["247079-SPELL_ABSORBED"] = "Empowered Flame Rend, 247079, SPELL_ABSORBED, 1710103291.205, SPELL_ABSORBED, false, Creature-0-67-1712-0-121975-000068CD93, Aggramar, 68168, 0, Player-67-00247307, Smallpumper, 1300, 1, 247079, Empowered Flame Rend, 4, Player-67-00283236, Evadevine, 1298, 0, 208771, Smite, 2, 349006", + ["247079-SPELL_MISSED"] = "Empowered Flame Rend, 247079, SPELL_MISSED, 1710103710.501, SPELL_MISSED, false, Creature-0-67-1712-0-121975-000068CD93, Aggramar, 2632, 0, Player-67-00303268, Raidenshøgun, 1298, 2, 247079, Empowered Flame Rend, 4, ABSORB, false, 978457", + ["247079-SPELL_AURA_APPLIED"] = "Empowered Flame Rend, 247079, SPELL_AURA_APPLIED, 1710103264.392, SPELL_AURA_APPLIED, false, Creature-0-67-1712-0-121975-000068CD93, Aggramar, 2632, 0, Player-67-00303266, Oozzie, 1300, 0, 247079, Empowered Flame Rend, 4, DEBUFF", + ["247079-SPELL_AURA_REMOVED"] = "Empowered Flame Rend, 247079, SPELL_AURA_REMOVED, 1710103281.437, SPELL_AURA_REMOVED, false, Creature-0-67-1712-0-121975-000068CD93, Aggramar, 2632, 0, Player-67-00303268, Raidenshøgun, 1298, 2, 247079, Empowered Flame Rend, 4, DEBUFF", + ["247079-SPELL_DAMAGE"] = "Empowered Flame Rend, 247079, SPELL_DAMAGE, 1710103291.205, SPELL_DAMAGE, false, Creature-0-67-1712-0-121975-000068CD93, Aggramar, 68168, 0, Player-67-00247307, Smallpumper, 1300, 1, 247079, Empowered Flame Rend, 4, 1557961, -1, 4, nil, nil, 560891, false, false, false, false", diff --git a/WeakAuras/Projects/RaiderlosSA/out/247367.txt b/WeakAuras/Projects/RaiderlosSA/out/247367.txt new file mode 100644 index 0000000..23600ac --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/247367.txt @@ -0,0 +1,16 @@ + ["247367-SPELL_CAST_SUCCESS"] = "Shock Lance, 247367, SPELL_CAST_SUCCESS, 1709754232.983, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-124158-00004C906F, Imonar the Soulhunter, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 247367, Shock Lance, 1", + ["247367-SPELL_ABSORBED"] = "Shock Lance, 247367, SPELL_ABSORBED, 1709754232.983, SPELL_ABSORBED, false, Creature-0-67-1712-0-124158-00004C906F, Imonar the Soulhunter, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 247367, Shock Lance, 1, Player-67-00297329, Kamuiheal, 1300, 0, 257444, Verdant Embrace, 8, 329444", + ["247367-SPELL_MISSED"] = "Shock Lance, 247367, SPELL_MISSED, 1709754232.983, SPELL_MISSED, false, Creature-0-67-1712-0-124158-00004C906F, Imonar the Soulhunter, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 247367, Shock Lance, 1, ABSORB, false, 329444", + ["247367-SPELL_AURA_REMOVED"] = "Shock Lance, 247367, SPELL_AURA_REMOVED, 1709754293.371, SPELL_AURA_REMOVED, false, Creature-0-67-1712-0-124158-00004C906F, Imonar the Soulhunter, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 247367, Shock Lance, 1, DEBUFF", + ["247367-SPELL_DAMAGE"] = "Shock Lance, 247367, SPELL_DAMAGE, 1709754243.061, SPELL_DAMAGE, false, Creature-0-67-1712-0-124158-00004C906F, Imonar the Soulhunter, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 247367, Shock Lance, 1, 691657, -1, 1, nil, nil, nil, false, false, false, false", + ["247367-SPELL_AURA_APPLIED_DOSE"] = "Shock Lance, 247367, SPELL_AURA_APPLIED_DOSE, 1709754238.084, SPELL_AURA_APPLIED_DOSE, false, Creature-0-67-1712-0-124158-00004C906F, Imonar the Soulhunter, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 247367, Shock Lance, 1, DEBUFF, 2", + ["247367-SPELL_AURA_APPLIED"] = "Shock Lance, 247367, SPELL_AURA_APPLIED, 1709754233.046, SPELL_AURA_APPLIED, false, Creature-0-67-1712-0-124158-00004C906F, Imonar the Soulhunter, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 247367, Shock Lance, 1, DEBUFF", + ["247367-SPELL_CAST_START"] = "Shock Lance, 247367, SPELL_CAST_START, 1709754231.98, SPELL_CAST_START, false, Creature-0-67-1712-0-124158-00004C906F, Imonar the Soulhunter, 68168, 0, , nil, -2147483648, -2147483648, 247367, Shock Lance, 1", + ["247367-SPELL_AURA_APPLIED"] = "Shock Lance, 247367, SPELL_AURA_APPLIED, 1709927349.656, SPELL_AURA_APPLIED, false, Creature-0-67-1712-0-124158-000061C1D8, Imonar the Soulhunter, 2632, 0, Player-67-002C429F, Anusucc, 1300, 0, 247367, Shock Lance, 1, DEBUFF", + ["247367-SPELL_CAST_SUCCESS"] = "Shock Lance, 247367, SPELL_CAST_SUCCESS, 1709927349.599, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-124158-000061C1D8, Imonar the Soulhunter, 2632, 0, Player-67-002C429F, Anusucc, 1300, 0, 247367, Shock Lance, 1", + ["247367-SPELL_MISSED"] = "Shock Lance, 247367, SPELL_MISSED, 1709927359.552, SPELL_MISSED, false, Creature-0-67-1712-0-124158-000061C1D8, Imonar the Soulhunter, 2632, 0, Player-67-002C429F, Anusucc, 1300, 0, 247367, Shock Lance, 1, ABSORB, false, 2123331", + ["247367-SPELL_AURA_REMOVED"] = "Shock Lance, 247367, SPELL_AURA_REMOVED, 1709927389.8, SPELL_AURA_REMOVED, false, Creature-0-67-1712-0-124158-000061C1D8, Imonar the Soulhunter, 2632, 0, Player-67-002C429F, Anusucc, 1300, 0, 247367, Shock Lance, 1, DEBUFF", + ["247367-SPELL_AURA_APPLIED_DOSE"] = "Shock Lance, 247367, SPELL_AURA_APPLIED_DOSE, 1709927354.732, SPELL_AURA_APPLIED_DOSE, false, Creature-0-67-1712-0-124158-000061C1D8, Imonar the Soulhunter, 2632, 0, Player-67-002C429F, Anusucc, 1300, 0, 247367, Shock Lance, 1, DEBUFF, 2", + ["247367-SPELL_DAMAGE"] = "Shock Lance, 247367, SPELL_DAMAGE, 1709927349.599, SPELL_DAMAGE, false, Creature-0-67-1712-0-124158-000061C1D8, Imonar the Soulhunter, 2632, 0, Player-67-002C429F, Anusucc, 1300, 0, 247367, Shock Lance, 1, 984477, -1, 1, nil, nil, 310887, false, false, false, false", + ["247367-SPELL_ABSORBED"] = "Shock Lance, 247367, SPELL_ABSORBED, 1709927354.597, SPELL_ABSORBED, false, Creature-0-67-1712-0-124158-000061C1D8, Imonar the Soulhunter, 2632, 0, Player-67-002C429F, Anusucc, 1300, 0, 247367, Shock Lance, 1, Player-67-0029732D, Ningenpriest, 1298, 0, 208771, Smite, 2, 420000", + ["247367-SPELL_CAST_START"] = "Shock Lance, 247367, SPELL_CAST_START, 1709927348.542, SPELL_CAST_START, false, Creature-0-67-1712-0-124158-000061C1D8, Imonar the Soulhunter, 2632, 0, , nil, -2147483648, -2147483648, 247367, Shock Lance, 1", diff --git a/WeakAuras/Projects/RaiderlosSA/out/247376.txt b/WeakAuras/Projects/RaiderlosSA/out/247376.txt new file mode 100644 index 0000000..ac676a3 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/247376.txt @@ -0,0 +1,4 @@ + ["247376-SPELL_CAST_SUCCESS"] = "Pulse Grenade, 247376, SPELL_CAST_SUCCESS, 1709754244.094, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-124158-00004C906F, Imonar the Soulhunter, 68168, 0, , nil, -2147483648, -2147483648, 247376, Pulse Grenade, 1", + ["247376-SPELL_CAST_START"] = "Pulse Grenade, 247376, SPELL_CAST_START, 1709754243.061, SPELL_CAST_START, false, Creature-0-67-1712-0-124158-00004C906F, Imonar the Soulhunter, 68168, 0, , nil, -2147483648, -2147483648, 247376, Pulse Grenade, 1", + ["247376-SPELL_CAST_SUCCESS"] = "Pulse Grenade, 247376, SPELL_CAST_SUCCESS, 1709927360.594, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-124158-000061C1D8, Imonar the Soulhunter, 2632, 0, , nil, -2147483648, -2147483648, 247376, Pulse Grenade, 1", + ["247376-SPELL_CAST_START"] = "Pulse Grenade, 247376, SPELL_CAST_START, 1709927359.602, SPELL_CAST_START, false, Creature-0-67-1712-0-124158-000061C1D8, Imonar the Soulhunter, 2632, 0, , nil, -2147483648, -2147483648, 247376, Pulse Grenade, 1", diff --git a/WeakAuras/Projects/RaiderlosSA/out/247552.txt b/WeakAuras/Projects/RaiderlosSA/out/247552.txt new file mode 100644 index 0000000..83323be --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/247552.txt @@ -0,0 +1,2 @@ + ["247552-SPELL_MISSED"] = "Sleep Canister, 247552, SPELL_MISSED, 1709927357.874, SPELL_MISSED, false, Creature-0-67-1712-0-124158-000061C1D8, Imonar the Soulhunter, 68168, 0, Player-67-003460E5, Sugpula, 1300, 0, 247552, Sleep Canister, 8, IMMUNE, false", + ["247552-SPELL_MISSED"] = "Sleep Canister, 247552, SPELL_MISSED, 1709927357.299, SPELL_MISSED, false, Creature-0-67-1712-0-124158-000061C1D8, Imonar the Soulhunter, 2632, 0, Player-67-003460E5, Sugpula, 1300, 0, 247552, Sleep Canister, 8, IMMUNE, false", diff --git a/WeakAuras/Projects/RaiderlosSA/out/247687.txt b/WeakAuras/Projects/RaiderlosSA/out/247687.txt new file mode 100644 index 0000000..24b9c2b --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/247687.txt @@ -0,0 +1,20 @@ + ["247687-SPELL_AURA_APPLIED"] = "Sever, 247687, SPELL_AURA_APPLIED, 1709754304.801, SPELL_AURA_APPLIED, false, Creature-0-67-1712-0-124158-00004C906F, Imonar the Soulhunter, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 247687, Sever, 1, DEBUFF", + ["247687-SPELL_PERIODIC_DAMAGE"] = "Sever, 247687, SPELL_PERIODIC_DAMAGE, 1709754306.749, SPELL_PERIODIC_DAMAGE, false, Creature-0-67-1712-0-124158-00004C906F, Imonar the Soulhunter, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 247687, Sever, 1, 76931, 0, 1, nil, nil, nil, false, false, false, false", + ["247687-SPELL_CAST_SUCCESS"] = "Sever, 247687, SPELL_CAST_SUCCESS, 1709754304.732, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-124158-00004C906F, Imonar the Soulhunter, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 247687, Sever, 1", + ["247687-SPELL_MISSED"] = "Sever, 247687, SPELL_MISSED, 1709754332.943, SPELL_MISSED, false, Creature-0-67-1712-0-124158-00004C906F, Imonar the Soulhunter, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 247687, Sever, 1, ABSORB, false, 1018735", + ["247687-SPELL_ABSORBED"] = "Sever, 247687, SPELL_ABSORBED, 1709754332.943, SPELL_ABSORBED, false, Creature-0-67-1712-0-124158-00004C906F, Imonar the Soulhunter, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 247687, Sever, 1, Player-67-00247307, Smallpumper, 1298, 0, 252545, Light of Absolarn, 8, 1018735", + ["247687-SPELL_CAST_START"] = "Sever, 247687, SPELL_CAST_START, 1709754303.7, SPELL_CAST_START, false, Creature-0-67-1712-0-124158-00004C906F, Imonar the Soulhunter, 68168, 0, , nil, -2147483648, -2147483648, 247687, Sever, 1", + ["247687-SPELL_AURA_APPLIED_DOSE"] = "Sever, 247687, SPELL_AURA_APPLIED_DOSE, 1709754311.832, SPELL_AURA_APPLIED_DOSE, false, Creature-0-67-1712-0-124158-00004C906F, Imonar the Soulhunter, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 247687, Sever, 1, DEBUFF, 2", + ["247687-SPELL_PERIODIC_MISSED"] = "Sever, 247687, SPELL_PERIODIC_MISSED, 1709754334.77, SPELL_PERIODIC_MISSED, false, Creature-0-67-1712-0-124158-00004C906F, Imonar the Soulhunter, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 247687, Sever, 1, ABSORB, false, 945587", + ["247687-SPELL_AURA_REMOVED"] = "Sever, 247687, SPELL_AURA_REMOVED, 1709754371.174, SPELL_AURA_REMOVED, false, Creature-0-67-1712-0-124158-00004C906F, Imonar the Soulhunter, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 247687, Sever, 1, DEBUFF", + ["247687-SPELL_DAMAGE"] = "Sever, 247687, SPELL_DAMAGE, 1709754304.732, SPELL_DAMAGE, false, Creature-0-67-1712-0-124158-00004C906F, Imonar the Soulhunter, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 247687, Sever, 1, 573616, -1, 1, nil, nil, nil, false, false, false, false", + ["247687-SPELL_AURA_APPLIED"] = "Sever, 247687, SPELL_AURA_APPLIED, 1709927439.137, SPELL_AURA_APPLIED, false, Creature-0-67-1712-0-124158-000061C1D8, Imonar the Soulhunter, 2632, 0, Player-67-002C429F, Anusucc, 1300, 0, 247687, Sever, 1, DEBUFF", + ["247687-SPELL_PERIODIC_DAMAGE"] = "Sever, 247687, SPELL_PERIODIC_DAMAGE, 1709927441.097, SPELL_PERIODIC_DAMAGE, false, Creature-0-67-1712-0-124158-000061C1D8, Imonar the Soulhunter, 2632, 0, Player-67-002C429F, Anusucc, 1300, 0, 247687, Sever, 1, 334998, 0, 1, nil, nil, 63809, false, false, false, false", + ["247687-SPELL_CAST_START"] = "Sever, 247687, SPELL_CAST_START, 1709927438.076, SPELL_CAST_START, false, Creature-0-67-1712-0-124158-000061C1D8, Imonar the Soulhunter, 2632, 0, , nil, -2147483648, -2147483648, 247687, Sever, 1", + ["247687-SPELL_AURA_APPLIED_DOSE"] = "Sever, 247687, SPELL_AURA_APPLIED_DOSE, 1709927446.226, SPELL_AURA_APPLIED_DOSE, false, Creature-0-67-1712-0-124158-000061C1D8, Imonar the Soulhunter, 2632, 0, Player-67-002C429F, Anusucc, 1300, 0, 247687, Sever, 1, DEBUFF, 2", + ["247687-SPELL_AURA_REMOVED"] = "Sever, 247687, SPELL_AURA_REMOVED, 1709927478.274, SPELL_AURA_REMOVED, false, Creature-0-67-1712-0-124158-000061C1D8, Imonar the Soulhunter, 2632, 0, Player-67-002C429F, Anusucc, 1300, 0, 247687, Sever, 1, DEBUFF", + ["247687-SPELL_ABSORBED"] = "Sever, 247687, SPELL_ABSORBED, 1709927439.07, SPELL_ABSORBED, false, Creature-0-67-1712-0-124158-000061C1D8, Imonar the Soulhunter, 2632, 0, Player-67-002C429F, Anusucc, 1300, 0, 247687, Sever, 1, Player-67-002C429F, Anusucc, 1300, 0, 77535, Blood Shield, 32, 997354", + ["247687-SPELL_MISSED"] = "Sever, 247687, SPELL_MISSED, 1709927453.213, SPELL_MISSED, false, Creature-0-67-1712-0-124158-000061C1D8, Imonar the Soulhunter, 2632, 0, Player-67-002C429F, Anusucc, 1300, 0, 247687, Sever, 1, ABSORB, false, 2570802", + ["247687-SPELL_CAST_SUCCESS"] = "Sever, 247687, SPELL_CAST_SUCCESS, 1709927439.07, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-124158-000061C1D8, Imonar the Soulhunter, 2632, 0, Player-67-002C429F, Anusucc, 1300, 0, 247687, Sever, 1", + ["247687-SPELL_DAMAGE"] = "Sever, 247687, SPELL_DAMAGE, 1709927439.07, SPELL_DAMAGE, false, Creature-0-67-1712-0-124158-000061C1D8, Imonar the Soulhunter, 2632, 0, Player-67-002C429F, Anusucc, 1300, 0, 247687, Sever, 1, 405150, -1, 1, nil, nil, 2600014, false, false, false, false", + ["247687-SPELL_PERIODIC_MISSED"] = "Sever, 247687, SPELL_PERIODIC_MISSED, 1709927449.147, SPELL_PERIODIC_MISSED, false, Creature-0-67-1712-0-124158-000061C1D8, Imonar the Soulhunter, 68168, 0, Player-67-002C429F, Anusucc, 1300, 0, 247687, Sever, 1, ABSORB, false, 675944", diff --git a/WeakAuras/Projects/RaiderlosSA/out/247716.txt b/WeakAuras/Projects/RaiderlosSA/out/247716.txt new file mode 100644 index 0000000..0c4ab26 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/247716.txt @@ -0,0 +1,13 @@ + ["247716-SPELL_AURA_REMOVED"] = "Charged Blasts, 247716, SPELL_AURA_REMOVED, 1709754332.867, SPELL_AURA_REMOVED, true, , nil, 2600, 0, Player-67-0034EA31, Koudyran, 1300, 0, 247716, Charged Blasts, 4, DEBUFF", + ["247716-SPELL_PERIODIC_DAMAGE"] = "Charged Blasts, 247716, SPELL_PERIODIC_DAMAGE, 1709754317.827, SPELL_PERIODIC_DAMAGE, true, , nil, 2632, 0, Player-67-0034EA31, Koudyran, 1300, 0, 247716, Charged Blasts, 4, 802297, 0, 4, nil, nil, nil, false, false, false, false", + ["247716-SPELL_ABSORBED"] = "Charged Blasts, 247716, SPELL_ABSORBED, 1709754314.773, SPELL_ABSORBED, true, , nil, 2632, 0, Player-67-00297329, Kamuiheal, 1300, 0, 247716, Charged Blasts, 4, Player-67-00297329, Kamuiheal, 1300, 0, 207472, Xavaric's Magnum Opus, 1, 1413343", + ["247716-SPELL_PERIODIC_MISSED"] = "Charged Blasts, 247716, SPELL_PERIODIC_MISSED, 1709754317.827, SPELL_PERIODIC_MISSED, true, , nil, 2632, 0, Player-67-00300DF1, Keeponsmitin, 1300, 0, 247716, Charged Blasts, 4, ABSORB, false, 730240", + ["247716-SPELL_AURA_APPLIED"] = "Charged Blasts, 247716, SPELL_AURA_APPLIED, 1709754314.834, SPELL_AURA_APPLIED, true, , nil, 2632, 0, Player-67-0034EA31, Koudyran, 1300, 0, 247716, Charged Blasts, 4, DEBUFF", + ["247716-SPELL_DAMAGE"] = "Charged Blasts, 247716, SPELL_DAMAGE, 1709754314.802, SPELL_DAMAGE, true, , nil, 2632, 0, Player-67-0034E79A, Gorlock, 1300, 0, 247716, Charged Blasts, 4, 1188784, -1, 4, nil, nil, nil, false, false, false, false", + ["247716-SPELL_MISSED"] = "Charged Blasts, 247716, SPELL_MISSED, 1709754351.176, SPELL_MISSED, true, , nil, 2632, 0, Player-67-0034CDD5, Ubberagnarso, 1298, 0, 247716, Charged Blasts, 4, ABSORB, false, 1616586", + ["247716-SPELL_AURA_REMOVED"] = "Charged Blasts, 247716, SPELL_AURA_REMOVED, 1709927467.266, SPELL_AURA_REMOVED, true, , nil, 2600, 0, Player-67-0034F5CD, Badbrony, 1300, 0, 247716, Charged Blasts, 4, DEBUFF", + ["247716-SPELL_PERIODIC_DAMAGE"] = "Charged Blasts, 247716, SPELL_PERIODIC_DAMAGE, 1709927452.219, SPELL_PERIODIC_DAMAGE, true, , nil, 2632, 0, Player-67-0034F5CD, Badbrony, 1300, 0, 247716, Charged Blasts, 4, 868748, 0, 4, 217188, nil, nil, false, false, false, false", + ["247716-SPELL_PERIODIC_MISSED"] = "Charged Blasts, 247716, SPELL_PERIODIC_MISSED, 1709927491.39, SPELL_PERIODIC_MISSED, true, , nil, 2600, 0, Player-67-003032B2, Waffele, 1300, 0, 247716, Charged Blasts, 4, ABSORB, false, 889747", + ["247716-SPELL_DAMAGE"] = "Charged Blasts, 247716, SPELL_DAMAGE, 1709927449.228, SPELL_DAMAGE, true, , nil, 2632, 0, Player-67-0034F5CD, Badbrony, 1300, 0, 247716, Charged Blasts, 4, 1814563, -1, 4, nil, nil, nil, false, false, false, false", + ["247716-SPELL_AURA_APPLIED"] = "Charged Blasts, 247716, SPELL_AURA_APPLIED, 1709927449.272, SPELL_AURA_APPLIED, true, , nil, 2632, 0, Player-67-0034F5CD, Badbrony, 1300, 0, 247716, Charged Blasts, 4, DEBUFF", + ["247716-SPELL_ABSORBED"] = "Charged Blasts, 247716, SPELL_ABSORBED, 1709927458.413, SPELL_ABSORBED, true, , nil, 2600, 0, Player-67-0034D3BE, Iamedgars, 1300, 0, 247716, Charged Blasts, 4, Player-67-0029732D, Ningenpriest, 1298, 0, 17, Power Word: Shield, 2, 989355", diff --git a/WeakAuras/Projects/RaiderlosSA/out/248068.txt b/WeakAuras/Projects/RaiderlosSA/out/248068.txt new file mode 100644 index 0000000..41aa550 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/248068.txt @@ -0,0 +1,4 @@ + ["248068-SPELL_CAST_START"] = "Empowered Pulse Grenade, 248068, SPELL_CAST_START, 1709754394.347, SPELL_CAST_START, false, Creature-0-67-1712-0-124158-00004C906F, Imonar the Soulhunter, 68168, 0, , nil, -2147483648, -2147483648, 248068, Empowered Pulse Grenade, 32", + ["248068-SPELL_CAST_SUCCESS"] = "Empowered Pulse Grenade, 248068, SPELL_CAST_SUCCESS, 1709754395.364, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-124158-00004C906F, Imonar the Soulhunter, 68168, 0, , nil, -2147483648, -2147483648, 248068, Empowered Pulse Grenade, 32", + ["248068-SPELL_CAST_START"] = "Empowered Pulse Grenade, 248068, SPELL_CAST_START, 1709927551.63, SPELL_CAST_START, false, Creature-0-67-1712-0-124158-000061C1D8, Imonar the Soulhunter, 2632, 0, , nil, -2147483648, -2147483648, 248068, Empowered Pulse Grenade, 32", + ["248068-SPELL_CAST_SUCCESS"] = "Empowered Pulse Grenade, 248068, SPELL_CAST_SUCCESS, 1709927552.646, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-124158-000061C1D8, Imonar the Soulhunter, 2632, 0, , nil, -2147483648, -2147483648, 248068, Empowered Pulse Grenade, 32", diff --git a/WeakAuras/Projects/RaiderlosSA/out/248070.txt b/WeakAuras/Projects/RaiderlosSA/out/248070.txt new file mode 100644 index 0000000..8133bb4 --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/248070.txt @@ -0,0 +1,4 @@ + ["248070-SPELL_CAST_SUCCESS"] = "Empowered Shrapnel Blast, 248070, SPELL_CAST_SUCCESS, 1709754405.928, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-124158-00004C906F, Imonar the Soulhunter, 68168, 0, , nil, -2147483648, -2147483648, 248070, Empowered Shrapnel Blast, 4", + ["248070-SPELL_CAST_START"] = "Empowered Shrapnel Blast, 248070, SPELL_CAST_START, 1709754404.379, SPELL_CAST_START, false, Creature-0-67-1712-0-124158-00004C906F, Imonar the Soulhunter, 68168, 0, , nil, -2147483648, -2147483648, 248070, Empowered Shrapnel Blast, 4", + ["248070-SPELL_CAST_START"] = "Empowered Shrapnel Blast, 248070, SPELL_CAST_START, 1709927561.622, SPELL_CAST_START, false, Creature-0-67-1712-0-124158-000061C1D8, Imonar the Soulhunter, 2632, 0, , nil, -2147483648, -2147483648, 248070, Empowered Shrapnel Blast, 4", + ["248070-SPELL_CAST_SUCCESS"] = "Empowered Shrapnel Blast, 248070, SPELL_CAST_SUCCESS, 1709927563.132, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-124158-000061C1D8, Imonar the Soulhunter, 2632, 0, , nil, -2147483648, -2147483648, 248070, Empowered Shrapnel Blast, 4", diff --git a/WeakAuras/Projects/RaiderlosSA/out/248396.txt b/WeakAuras/Projects/RaiderlosSA/out/248396.txt new file mode 100644 index 0000000..e25b98f --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/248396.txt @@ -0,0 +1,9 @@ + ["248396-SPELL_PERIODIC_MISSED"] = "Soulblight, 248396, SPELL_PERIODIC_MISSED, 1710278291.659, SPELL_PERIODIC_MISSED, false, Creature-0-67-1712-0-125008-0000622E74, Soulblight Orb, 2600, 0, Player-67-002D9DD1, Succpotato, 1297, 0, 248396, Soulblight, 32, ABSORB, false, 954327", + ["248396-SPELL_PERIODIC_DAMAGE"] = "Soulblight, 248396, SPELL_PERIODIC_DAMAGE, 1709756638.24, SPELL_PERIODIC_DAMAGE, false, Creature-0-67-1712-0-125008-000050DB3C, Soulblight Orb, 2632, 0, Player-67-0034EA31, Koudyran, 1300, 0, 248396, Soulblight, 32, 964123, 0, 32, nil, nil, nil, false, false, false, false", + ["248396-SPELL_AURA_REMOVED"] = "Soulblight, 248396, SPELL_AURA_REMOVED, 1709756644.343, SPELL_AURA_REMOVED, false, Creature-0-67-1712-0-125008-000050DB3C, Soulblight Orb, 2600, 0, Player-67-0034EA31, Koudyran, 1300, 0, 248396, Soulblight, 32, DEBUFF", + ["248396-SPELL_ABSORBED"] = "Soulblight, 248396, SPELL_ABSORBED, 1709756642.168, SPELL_ABSORBED, false, Creature-0-67-1712-0-125008-000050DB3C, Soulblight Orb, 2600, 0, Player-67-00351D42, Belyth, 1300, 0, 248396, Soulblight, 32, Player-67-00351D42, Belyth, 1300, 0, 235313, Blazing Barrier, 4, 392940", + ["248396-SPELL_AURA_APPLIED"] = "Soulblight, 248396, SPELL_AURA_APPLIED, 1709756636.294, SPELL_AURA_APPLIED, false, Creature-0-67-1712-0-125008-000050DB3C, Soulblight Orb, 2632, 0, Player-67-0034EA31, Koudyran, 1300, 0, 248396, Soulblight, 32, DEBUFF", + ["248396-SPELL_PERIODIC_DAMAGE"] = "Soulblight, 248396, SPELL_PERIODIC_DAMAGE, 1709930439.379, SPELL_PERIODIC_DAMAGE, false, Creature-0-67-1712-0-125008-0000671A19, Soulblight Orb, 2632, 0, Player-67-0034D161, Kimbustion, 1300, 0, 248396, Soulblight, 32, 1133080, 0, 32, nil, nil, nil, false, false, false, false", + ["248396-SPELL_AURA_REMOVED"] = "Soulblight, 248396, SPELL_AURA_REMOVED, 1709930445.424, SPELL_AURA_REMOVED, false, Creature-0-67-1712-0-125008-0000671A19, Soulblight Orb, 2600, 0, Player-67-0034D161, Kimbustion, 1300, 0, 248396, Soulblight, 32, DEBUFF", + ["248396-SPELL_AURA_APPLIED"] = "Soulblight, 248396, SPELL_AURA_APPLIED, 1709930437.398, SPELL_AURA_APPLIED, false, Creature-0-67-1712-0-125008-0000671A19, Soulblight Orb, 2632, 0, Player-67-0034D161, Kimbustion, 1300, 0, 248396, Soulblight, 32, DEBUFF", + ["248396-SPELL_ABSORBED"] = "Soulblight, 248396, SPELL_ABSORBED, 1709930447.22, SPELL_ABSORBED, false, Creature-0-67-1712-0-125008-0000671A19, Soulblight Orb, 2600, 0, Player-67-0034D3BE, Iamedgars, 1300, 0, 248396, Soulblight, 32, Player-67-0029732D, Ningenpriest, 1300, 0, 17, Power Word: Shield, 2, 1105342", diff --git a/WeakAuras/Projects/RaiderlosSA/out/248732.txt b/WeakAuras/Projects/RaiderlosSA/out/248732.txt new file mode 100644 index 0000000..e69de29 diff --git a/WeakAuras/Projects/RaiderlosSA/out/250255.txt b/WeakAuras/Projects/RaiderlosSA/out/250255.txt new file mode 100644 index 0000000..2072daa --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/250255.txt @@ -0,0 +1,16 @@ + ["250255-SPELL_DAMAGE"] = "Empowered Shock Lance, 250255, SPELL_DAMAGE, 1709754394.347, SPELL_DAMAGE, false, Creature-0-67-1712-0-124158-00004C906F, Imonar the Soulhunter, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 250255, Empowered Shock Lance, 1, 676004, -1, 1, nil, nil, nil, false, false, false, false", + ["250255-SPELL_AURA_APPLIED"] = "Empowered Shock Lance, 250255, SPELL_AURA_APPLIED, 1709754394.4, SPELL_AURA_APPLIED, false, Creature-0-67-1712-0-124158-00004C906F, Imonar the Soulhunter, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 250255, Empowered Shock Lance, 1, DEBUFF", + ["250255-SPELL_MISSED"] = "Empowered Shock Lance, 250255, SPELL_MISSED, 1709927582.178, SPELL_MISSED, false, Creature-0-67-1712-0-124158-000061C1D8, Imonar the Soulhunter, 2632, 0, Player-67-002C429F, Anusucc, 1300, 0, 250255, Empowered Shock Lance, 1, ABSORB, false, 2218605", + ["250255-SPELL_CAST_START"] = "Empowered Shock Lance, 250255, SPELL_CAST_START, 1709754393.298, SPELL_CAST_START, false, Creature-0-67-1712-0-124158-00004C906F, Imonar the Soulhunter, 68168, 0, , nil, -2147483648, -2147483648, 250255, Empowered Shock Lance, 1", + ["250255-SPELL_AURA_REMOVED"] = "Empowered Shock Lance, 250255, SPELL_AURA_REMOVED, 1709754449.363, SPELL_AURA_REMOVED, false, Creature-0-67-1712-0-124158-00004C906F, Imonar the Soulhunter, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 250255, Empowered Shock Lance, 1, DEBUFF", + ["250255-SPELL_ABSORBED"] = "Empowered Shock Lance, 250255, SPELL_ABSORBED, 1709754444.351, SPELL_ABSORBED, false, Creature-0-67-1712-0-124158-00004C906F, Imonar the Soulhunter, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 250255, Empowered Shock Lance, 1, Player-67-00297329, Kamuiheal, 1300, 0, 257444, Verdant Embrace, 8, 490231", + ["250255-SPELL_AURA_APPLIED_DOSE"] = "Empowered Shock Lance, 250255, SPELL_AURA_APPLIED_DOSE, 1709754404.432, SPELL_AURA_APPLIED_DOSE, false, Creature-0-67-1712-0-124158-00004C906F, Imonar the Soulhunter, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 250255, Empowered Shock Lance, 1, DEBUFF, 2", + ["250255-SPELL_CAST_SUCCESS"] = "Empowered Shock Lance, 250255, SPELL_CAST_SUCCESS, 1709754394.347, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-124158-00004C906F, Imonar the Soulhunter, 68168, 0, Player-67-00247307, Smallpumper, 1298, 0, 250255, Empowered Shock Lance, 1", + ["250255-SPELL_MISSED"] = "Empowered Shock Lance, 250255, SPELL_MISSED, 1709927581.636, SPELL_MISSED, false, Creature-0-67-1712-0-124158-000061C1D8, Imonar the Soulhunter, 2632, 0, Player-67-002C429F, Anusucc, 1300, 0, 250255, Empowered Shock Lance, 1, ABSORB, false, 2218605", + ["250255-SPELL_CAST_START"] = "Empowered Shock Lance, 250255, SPELL_CAST_START, 1709927550.568, SPELL_CAST_START, false, Creature-0-67-1712-0-124158-000061C1D8, Imonar the Soulhunter, 2632, 0, , nil, -2147483648, -2147483648, 250255, Empowered Shock Lance, 1", + ["250255-SPELL_AURA_REMOVED"] = "Empowered Shock Lance, 250255, SPELL_AURA_REMOVED, 1709927638.065, SPELL_AURA_REMOVED, false, Creature-0-67-1712-0-124158-000061C1D8, Imonar the Soulhunter, 2632, 0, Player-67-002C429F, Anusucc, 1300, 0, 250255, Empowered Shock Lance, 1, DEBUFF", + ["250255-SPELL_ABSORBED"] = "Empowered Shock Lance, 250255, SPELL_ABSORBED, 1709927551.63, SPELL_ABSORBED, false, Creature-0-67-1712-0-124158-000061C1D8, Imonar the Soulhunter, 2632, 0, Player-67-002C429F, Anusucc, 1300, 0, 250255, Empowered Shock Lance, 1, Player-67-002C429F, Anusucc, 1300, 0, 77535, Blood Shield, 32, 1028745", + ["250255-SPELL_AURA_APPLIED_DOSE"] = "Empowered Shock Lance, 250255, SPELL_AURA_APPLIED_DOSE, 1709927561.687, SPELL_AURA_APPLIED_DOSE, false, Creature-0-67-1712-0-124158-000061C1D8, Imonar the Soulhunter, 2632, 0, Player-67-002C429F, Anusucc, 1300, 0, 250255, Empowered Shock Lance, 1, DEBUFF, 2", + ["250255-SPELL_AURA_APPLIED"] = "Empowered Shock Lance, 250255, SPELL_AURA_APPLIED, 1709927551.672, SPELL_AURA_APPLIED, false, Creature-0-67-1712-0-124158-000061C1D8, Imonar the Soulhunter, 2632, 0, Player-67-002C429F, Anusucc, 1300, 0, 250255, Empowered Shock Lance, 1, DEBUFF", + ["250255-SPELL_CAST_SUCCESS"] = "Empowered Shock Lance, 250255, SPELL_CAST_SUCCESS, 1709927551.63, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-124158-000061C1D8, Imonar the Soulhunter, 2632, 0, Player-67-002C429F, Anusucc, 1300, 0, 250255, Empowered Shock Lance, 1", + ["250255-SPELL_DAMAGE"] = "Empowered Shock Lance, 250255, SPELL_DAMAGE, 1709927551.63, SPELL_DAMAGE, false, Creature-0-67-1712-0-124158-000061C1D8, Imonar the Soulhunter, 2632, 0, Player-67-002C429F, Anusucc, 1300, 0, 250255, Empowered Shock Lance, 1, 518250, -1, 1, nil, nil, 1517269, false, false, false, false", diff --git a/WeakAuras/Projects/RaiderlosSA/out/251570.txt b/WeakAuras/Projects/RaiderlosSA/out/251570.txt new file mode 100644 index 0000000..52c623e --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/251570.txt @@ -0,0 +1,10 @@ + ["251570-SPELL_AURA_APPLIED"] = "Soulbomb, 251570, SPELL_AURA_APPLIED, 1709756690.205, SPELL_AURA_APPLIED, false, Creature-0-67-1712-0-124828-0000509D5B, Argus the Unmaker, 68168, 0, Player-67-00303268, Raidenshøgun, 1300, 0, 251570, Soulbomb, 32, DEBUFF", + ["251570-SPELL_AURA_REMOVED"] = "Soulbomb, 251570, SPELL_AURA_REMOVED, 1709756705.217, SPELL_AURA_REMOVED, false, Creature-0-67-1712-0-124828-0000509D5B, Argus the Unmaker, 68168, 0, Player-67-00303268, Raidenshøgun, 1300, 0, 251570, Soulbomb, 32, DEBUFF", + ["251570-SPELL_PERIODIC_MISSED"] = "Soulbomb, 251570, SPELL_PERIODIC_MISSED, 1709756702.189, SPELL_PERIODIC_MISSED, false, Creature-0-67-1712-0-124828-0000509D5B, Argus the Unmaker, 68168, 0, Player-67-00303268, Raidenshøgun, 1300, 0, 251570, Soulbomb, 32, ABSORB, false, 444689", + ["251570-SPELL_PERIODIC_DAMAGE"] = "Soulbomb, 251570, SPELL_PERIODIC_DAMAGE, 1709756691.683, SPELL_PERIODIC_DAMAGE, false, Creature-0-67-1712-0-124828-0000509D5B, Argus the Unmaker, 68168, 0, Player-67-00303268, Raidenshøgun, 1300, 0, 251570, Soulbomb, 32, 444689, 0, 32, nil, nil, nil, false, false, false, false", + ["251570-SPELL_ABSORBED"] = "Soulbomb, 251570, SPELL_ABSORBED, 1709930513.229, SPELL_ABSORBED, false, Creature-0-67-1712-0-124828-000066CF54, Argus the Unmaker, 2632, 0, Player-67-002D1DA2, Pinkleta, 1300, 16, 251570, Soulbomb, 32, Player-67-0029732D, Ningenpriest, 1300, 0, 208771, Smite, 2, 286323", + ["251570-SPELL_AURA_REMOVED"] = "Soulbomb, 251570, SPELL_AURA_REMOVED, 1709930524.775, SPELL_AURA_REMOVED, false, Creature-0-67-1712-0-124828-000066CF54, Argus the Unmaker, 2632, 0, Player-67-002D1DA2, Pinkleta, 1297, 16, 251570, Soulbomb, 32, DEBUFF", + ["251570-SPELL_PERIODIC_MISSED"] = "Soulbomb, 251570, SPELL_PERIODIC_MISSED, 1709930511.219, SPELL_PERIODIC_MISSED, false, Creature-0-67-1712-0-124828-000066CF54, Argus the Unmaker, 2632, 0, Player-67-002D1DA2, Pinkleta, 1297, 16, 251570, Soulbomb, 32, ABSORB, false, 731029", + ["251570-SPELL_ABSORBED"] = "Soulbomb, 251570, SPELL_ABSORBED, 1709930512.708, SPELL_ABSORBED, false, Creature-0-67-1712-0-124828-000066CF54, Argus the Unmaker, 2632, 0, Player-67-002D1DA2, Pinkleta, 1297, 16, 251570, Soulbomb, 32, Player-67-0029732D, Ningenpriest, 1300, 0, 208771, Smite, 2, 286323", + ["251570-SPELL_PERIODIC_DAMAGE"] = "Soulbomb, 251570, SPELL_PERIODIC_DAMAGE, 1709930518.696, SPELL_PERIODIC_DAMAGE, false, Creature-0-67-1712-0-124828-000066CF54, Argus the Unmaker, 2632, 0, Player-67-002D1DA2, Pinkleta, 1297, 16, 251570, Soulbomb, 32, 324237, 0, 32, nil, nil, 406792, false, false, false, false", + ["251570-SPELL_AURA_APPLIED"] = "Soulbomb, 251570, SPELL_AURA_APPLIED, 1709930509.734, SPELL_AURA_APPLIED, false, Creature-0-67-1712-0-124828-000066CF54, Argus the Unmaker, 2632, 0, Player-67-002D1DA2, Pinkleta, 1297, 16, 251570, Soulbomb, 32, DEBUFF", diff --git a/WeakAuras/Projects/RaiderlosSA/out/253189.txt b/WeakAuras/Projects/RaiderlosSA/out/253189.txt new file mode 100644 index 0000000..e69de29 diff --git a/WeakAuras/Projects/RaiderlosSA/out/254452.txt b/WeakAuras/Projects/RaiderlosSA/out/254452.txt new file mode 100644 index 0000000..b258aad --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/254452.txt @@ -0,0 +1,6 @@ + ["254452-SPELL_PERIODIC_MISSED"] = "Ravenous Blaze, 254452, SPELL_PERIODIC_MISSED, 1710103277.756, SPELL_PERIODIC_MISSED, false, Creature-0-67-1712-0-121975-000068CD93, Aggramar, 2632, 0, Player-67-002AB7D5, Pylonx, 1298, 0, 254452, Ravenous Blaze, 4, ABSORB, false, 391685", + ["254452-SPELL_PERIODIC_DAMAGE"] = "Ravenous Blaze, 254452, SPELL_PERIODIC_DAMAGE, 1710103277.756, SPELL_PERIODIC_DAMAGE, false, Creature-0-67-1712-0-121975-000068CD93, Aggramar, 2632, 0, Player-67-002D1DA2, Pinkleta, 1297, 0, 254452, Ravenous Blaze, 4, 389883, 0, 4, nil, nil, nil, false, false, false, false", + ["254452-SPELL_CAST_SUCCESS"] = "Ravenous Blaze, 254452, SPELL_CAST_SUCCESS, 1710103275.504, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-121975-000068CD93, Aggramar, 2632, 0, Player-67-00283236, Evadevine, 1298, 0, 254452, Ravenous Blaze, 4", + ["254452-SPELL_AURA_REMOVED"] = "Ravenous Blaze, 254452, SPELL_AURA_REMOVED, 1710103283.448, SPELL_AURA_REMOVED, false, Creature-0-67-1712-0-121975-000068CD93, Aggramar, 68168, 0, Player-67-002D1DA2, Pinkleta, 1297, 0, 254452, Ravenous Blaze, 4, DEBUFF", + ["254452-SPELL_AURA_APPLIED"] = "Ravenous Blaze, 254452, SPELL_AURA_APPLIED, 1710103275.504, SPELL_AURA_APPLIED, false, Creature-0-67-1712-0-121975-000068CD93, Aggramar, 2632, 0, Player-67-002D1DA2, Pinkleta, 1297, 0, 254452, Ravenous Blaze, 4, DEBUFF", + ["254452-SPELL_ABSORBED"] = "Ravenous Blaze, 254452, SPELL_ABSORBED, 1710103277.756, SPELL_ABSORBED, false, Creature-0-67-1712-0-121975-000068CD93, Aggramar, 2632, 0, Player-67-002AB7D5, Pylonx, 1298, 0, 254452, Ravenous Blaze, 4, Player-67-002AB7D5, Pylonx, 1298, 0, 108366, Soul Leech, 32, 391685", diff --git a/WeakAuras/Projects/RaiderlosSA/out/254919.txt b/WeakAuras/Projects/RaiderlosSA/out/254919.txt new file mode 100644 index 0000000..cb959ca --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/254919.txt @@ -0,0 +1,16 @@ + ["254919-SPELL_AURA_REMOVED"] = "Forging Strike, 254919, SPELL_AURA_REMOVED, 1709754827.115, SPELL_AURA_REMOVED, false, Vehicle-0-67-1712-0-122578-00004C90BC, Kin'garoth, 2632, 0, Player-67-00247307, Smallpumper, 1298, 128, 254919, Forging Strike, 1, DEBUFF", + ["254919-SPELL_DAMAGE"] = "Forging Strike, 254919, SPELL_DAMAGE, 1709754609.615, SPELL_DAMAGE, false, Vehicle-0-67-1712-0-122578-00004C90BC, Kin'garoth, 2632, 0, Player-67-00247307, Smallpumper, 1298, 0, 254919, Forging Strike, 1, 676216, -1, 1, nil, nil, nil, false, false, false, false", + ["254919-SPELL_CAST_SUCCESS"] = "Forging Strike, 254919, SPELL_CAST_SUCCESS, 1709754609.615, SPELL_CAST_SUCCESS, false, Vehicle-0-67-1712-0-122578-00004C90BC, Kin'garoth, 2632, 0, Player-67-00247307, Smallpumper, 1298, 0, 254919, Forging Strike, 1", + ["254919-SPELL_MISSED"] = "Forging Strike, 254919, SPELL_MISSED, 1709928075.179, SPELL_MISSED, false, Vehicle-0-67-1712-0-122578-000061C276, Kin'garoth, 2632, 0, Player-67-002C429F, Anusucc, 1298, 128, 254919, Forging Strike, 1, ABSORB, false, 2446653", + ["254919-SPELL_AURA_APPLIED_DOSE"] = "Forging Strike, 254919, SPELL_AURA_APPLIED_DOSE, 1709754807.051, SPELL_AURA_APPLIED_DOSE, false, Vehicle-0-67-1712-0-122578-00004C90BC, Kin'garoth, 68168, 0, Player-67-00247307, Smallpumper, 1298, 128, 254919, Forging Strike, 1, DEBUFF, 2", + ["254919-SPELL_ABSORBED"] = "Forging Strike, 254919, SPELL_ABSORBED, 1709754609.615, SPELL_ABSORBED, false, Vehicle-0-67-1712-0-122578-00004C90BC, Kin'garoth, 2632, 0, Player-67-00337344, Elemona, 1298, 0, 254919, Forging Strike, 1, Player-67-00337344, Elemona, 1298, 0, 207472, Xavaric's Magnum Opus, 1, 1441488", + ["254919-SPELL_AURA_APPLIED"] = "Forging Strike, 254919, SPELL_AURA_APPLIED, 1709754793.039, SPELL_AURA_APPLIED, false, Vehicle-0-67-1712-0-122578-00004C90BC, Kin'garoth, 68168, 0, Player-67-00247307, Smallpumper, 1298, 128, 254919, Forging Strike, 1, DEBUFF", + ["254919-SPELL_CAST_START"] = "Forging Strike, 254919, SPELL_CAST_START, 1709754608.348, SPELL_CAST_START, false, Vehicle-0-67-1712-0-122578-00004C90BC, Kin'garoth, 2632, 0, , nil, -2147483648, -2147483648, 254919, Forging Strike, 1", + ["254919-SPELL_AURA_REMOVED"] = "Forging Strike, 254919, SPELL_AURA_REMOVED, 1709928282.486, SPELL_AURA_REMOVED, false, Vehicle-0-67-1712-0-122578-000061C276, Kin'garoth, 2632, 0, Player-67-002C429F, Anusucc, 1300, 128, 254919, Forging Strike, 1, DEBUFF", + ["254919-SPELL_DAMAGE"] = "Forging Strike, 254919, SPELL_DAMAGE, 1709927990.38, SPELL_DAMAGE, false, Vehicle-0-67-1712-0-122578-000061C276, Kin'garoth, 2632, 0, Player-67-002C429F, Anusucc, 1300, 0, 254919, Forging Strike, 1, 2637811, -1, 1, nil, nil, nil, false, false, false, false", + ["254919-SPELL_CAST_SUCCESS"] = "Forging Strike, 254919, SPELL_CAST_SUCCESS, 1709927990.38, SPELL_CAST_SUCCESS, false, Vehicle-0-67-1712-0-122578-000061C276, Kin'garoth, 2632, 0, Player-67-002C429F, Anusucc, 1300, 0, 254919, Forging Strike, 1", + ["254919-SPELL_MISSED"] = "Forging Strike, 254919, SPELL_MISSED, 1709928074.653, SPELL_MISSED, false, Vehicle-0-67-1712-0-122578-000061C276, Kin'garoth, 2632, 0, Player-67-002C429F, Anusucc, 1300, 128, 254919, Forging Strike, 1, ABSORB, false, 2446653", + ["254919-SPELL_AURA_APPLIED_DOSE"] = "Forging Strike, 254919, SPELL_AURA_APPLIED_DOSE, 1709928262.477, SPELL_AURA_APPLIED_DOSE, false, Vehicle-0-67-1712-0-122578-000061C276, Kin'garoth, 2632, 0, Player-67-002C429F, Anusucc, 1300, 128, 254919, Forging Strike, 1, DEBUFF, 2", + ["254919-SPELL_ABSORBED"] = "Forging Strike, 254919, SPELL_ABSORBED, 1709928074.622, SPELL_ABSORBED, false, Vehicle-0-67-1712-0-122578-000061C276, Kin'garoth, 2632, 0, Player-67-002C429F, Anusucc, 1300, 128, 254919, Forging Strike, 1, Player-67-002C429F, Anusucc, 1300, 128, 252545, Light of Absolarn, 8, 2055189", + ["254919-SPELL_AURA_APPLIED"] = "Forging Strike, 254919, SPELL_AURA_APPLIED, 1709928248.45, SPELL_AURA_APPLIED, false, Vehicle-0-67-1712-0-122578-000061C276, Kin'garoth, 2632, 0, Player-67-002C429F, Anusucc, 1300, 128, 254919, Forging Strike, 1, DEBUFF", + ["254919-SPELL_CAST_START"] = "Forging Strike, 254919, SPELL_CAST_START, 1709927989.167, SPELL_CAST_START, false, Vehicle-0-67-1712-0-122578-000061C276, Kin'garoth, 2632, 0, , nil, -2147483648, -2147483648, 254919, Forging Strike, 1", diff --git a/WeakAuras/Projects/RaiderlosSA/out/254926.txt b/WeakAuras/Projects/RaiderlosSA/out/254926.txt new file mode 100644 index 0000000..703e51f --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/254926.txt @@ -0,0 +1,10 @@ + ["254926-SPELL_CAST_SUCCESS"] = "Reverberating Strike, 254926, SPELL_CAST_SUCCESS, 1709754801.003, SPELL_CAST_SUCCESS, false, Vehicle-0-67-1712-0-122578-00004C90BC, Kin'garoth, 68168, 0, Player-67-00247307, Smallpumper, 1298, 128, 254926, Reverberating Strike, 1", + ["254926-SPELL_ABSORBED"] = "Reverberating Strike, 254926, SPELL_ABSORBED, 1709754873.321, SPELL_ABSORBED, false, Vehicle-0-67-1712-0-122578-00004C90BC, Kin'garoth, 68168, 0, Player-67-0034CDD5, Ubberagnarso, 1300, 0, 254926, Reverberating Strike, 1, Player-67-0034CDD5, Ubberagnarso, 1300, 0, 207472, Xavaric's Magnum Opus, 1, 433169", + ["254926-SPELL_CAST_START"] = "Reverberating Strike, 254926, SPELL_CAST_START, 1709754799.793, SPELL_CAST_START, false, Vehicle-0-67-1712-0-122578-00004C90BC, Kin'garoth, 68168, 0, , nil, -2147483648, -2147483648, 254926, Reverberating Strike, 1", + ["254926-SPELL_MISSED"] = "Reverberating Strike, 254926, SPELL_MISSED, 1709754801.003, SPELL_MISSED, false, Vehicle-0-67-1712-0-122578-00004C90BC, Kin'garoth, 68168, 0, Player-67-00247307, Smallpumper, 1298, 128, 254926, Reverberating Strike, 1, PARRY, false", + ["254926-SPELL_DAMAGE"] = "Reverberating Strike, 254926, SPELL_DAMAGE, 1709754873.321, SPELL_DAMAGE, false, Vehicle-0-67-1712-0-122578-00004C90BC, Kin'garoth, 68168, 0, Player-67-00340A28, Gunwomen, 1300, 0, 254926, Reverberating Strike, 1, 616081, -1, 1, nil, nil, nil, false, false, false, false", + ["254926-SPELL_CAST_SUCCESS"] = "Reverberating Strike, 254926, SPELL_CAST_SUCCESS, 1709928328.663, SPELL_CAST_SUCCESS, false, Vehicle-0-67-1712-0-122578-000061C276, Kin'garoth, 2632, 0, Player-67-002A0DBE, Arizus, 1300, 0, 254926, Reverberating Strike, 1", + ["254926-SPELL_ABSORBED"] = "Reverberating Strike, 254926, SPELL_ABSORBED, 1709928358.708, SPELL_ABSORBED, false, Vehicle-0-67-1712-0-122578-000061C276, Kin'garoth, 2632, 0, Player-67-002A2BE8, Darklockorc, 1300, 0, 254926, Reverberating Strike, 1, Player-67-002A2BE8, Darklockorc, 1300, 0, 108366, Soul Leech, 32, 278946", + ["254926-SPELL_CAST_START"] = "Reverberating Strike, 254926, SPELL_CAST_START, 1709928327.47, SPELL_CAST_START, false, Vehicle-0-67-1712-0-122578-000061C276, Kin'garoth, 2632, 0, , nil, -2147483648, -2147483648, 254926, Reverberating Strike, 1", + ["254926-SPELL_MISSED"] = "Reverberating Strike, 254926, SPELL_MISSED, 1709928328.663, SPELL_MISSED, false, Vehicle-0-67-1712-0-122578-000061C276, Kin'garoth, 2632, 0, Player-67-0034D19D, Brainstew, 1300, 0, 254926, Reverberating Strike, 1, DODGE, false", + ["254926-SPELL_DAMAGE"] = "Reverberating Strike, 254926, SPELL_DAMAGE, 1709928328.663, SPELL_DAMAGE, false, Vehicle-0-67-1712-0-122578-000061C276, Kin'garoth, 2632, 0, Player-67-003504AB, Latviann, 1300, 0, 254926, Reverberating Strike, 1, 1009943, -1, 1, nil, nil, nil, false, false, false, false", diff --git a/WeakAuras/Projects/RaiderlosSA/out/256457.txt b/WeakAuras/Projects/RaiderlosSA/out/256457.txt new file mode 100644 index 0000000..e69de29 diff --git a/WeakAuras/Projects/RaiderlosSA/out/257296.txt b/WeakAuras/Projects/RaiderlosSA/out/257296.txt new file mode 100644 index 0000000..190d3ea --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/257296.txt @@ -0,0 +1,10 @@ + ["257296-SPELL_MISSED"] = "Tortured Rage, 257296, SPELL_MISSED, 1709756612.062, SPELL_MISSED, false, Creature-0-67-1712-0-124828-0000509D5B, Argus the Unmaker, 68168, 0, Player-67-0034CDD5, Ubberagnarso, 1300, 0, 257296, Tortured Rage, 32, ABSORB, false, 1588389", + ["257296-SPELL_CAST_SUCCESS"] = "Tortured Rage, 257296, SPELL_CAST_SUCCESS, 1709756612.062, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-124828-0000509D5B, Argus the Unmaker, 68168, 0, , nil, -2147483648, -2147483648, 257296, Tortured Rage, 32", + ["257296-SPELL_DAMAGE"] = "Tortured Rage, 257296, SPELL_DAMAGE, 1709756612.062, SPELL_DAMAGE, false, Creature-0-67-1712-0-124828-0000509D5B, Argus the Unmaker, 68168, 0, Player-67-00310B05, Freewillie, 1300, 0, 257296, Tortured Rage, 32, 1533019, -1, 32, nil, nil, nil, false, false, false, false", + ["257296-SPELL_ABSORBED"] = "Tortured Rage, 257296, SPELL_ABSORBED, 1709756612.062, SPELL_ABSORBED, false, Creature-0-67-1712-0-124828-0000509D5B, Argus the Unmaker, 68168, 0, Player-67-0034D317, Edgarsishere, 1298, 0, 257296, Tortured Rage, 32, Player-67-0034D317, Edgarsishere, 1298, 0, 108366, Soul Leech, 32, 812610", + ["257296-SPELL_CAST_START"] = "Tortured Rage, 257296, SPELL_CAST_START, 1709756609.034, SPELL_CAST_START, false, Creature-0-67-1712-0-124828-0000509D5B, Argus the Unmaker, 68168, 0, , nil, -2147483648, -2147483648, 257296, Tortured Rage, 32", + ["257296-SPELL_MISSED"] = "Tortured Rage, 257296, SPELL_MISSED, 1709930413.179, SPELL_MISSED, false, Creature-0-67-1712-0-124828-000066CF54, Argus the Unmaker, 2632, 0, Player-67-002C429F, Anusucc, 1300, 128, 257296, Tortured Rage, 32, ABSORB, false, 1196634", + ["257296-SPELL_CAST_SUCCESS"] = "Tortured Rage, 257296, SPELL_CAST_SUCCESS, 1709930413.179, SPELL_CAST_SUCCESS, false, Creature-0-67-1712-0-124828-000066CF54, Argus the Unmaker, 2632, 0, , nil, -2147483648, -2147483648, 257296, Tortured Rage, 32", + ["257296-SPELL_CAST_START"] = "Tortured Rage, 257296, SPELL_CAST_START, 1709930410.162, SPELL_CAST_START, false, Creature-0-67-1712-0-124828-000066CF54, Argus the Unmaker, 2632, 0, , nil, -2147483648, -2147483648, 257296, Tortured Rage, 32", + ["257296-SPELL_DAMAGE"] = "Tortured Rage, 257296, SPELL_DAMAGE, 1709930413.179, SPELL_DAMAGE, false, Creature-0-67-1712-0-124828-000066CF54, Argus the Unmaker, 2632, 0, Player-67-00315A41, Tosu, 1298, 2, 257296, Tortured Rage, 32, 417700, -1, 32, nil, nil, 1721259, false, false, false, false", + ["257296-SPELL_ABSORBED"] = "Tortured Rage, 257296, SPELL_ABSORBED, 1709930413.179, SPELL_ABSORBED, false, Creature-0-67-1712-0-124828-000066CF54, Argus the Unmaker, 2632, 0, Player-67-002C429F, Anusucc, 1300, 128, 257296, Tortured Rage, 32, Player-67-002C429F, Anusucc, 1300, 128, 252545, Light of Absolarn, 8, 1005173", diff --git a/WeakAuras/Projects/RaiderlosSA/out/36247.txt b/WeakAuras/Projects/RaiderlosSA/out/36247.txt new file mode 100644 index 0000000..8beeb7c --- /dev/null +++ b/WeakAuras/Projects/RaiderlosSA/out/36247.txt @@ -0,0 +1 @@ + ["36247-SPELL_CAST_START"] = "Fel Fireball, 36247, SPELL_CAST_START, 1709804073.56, SPELL_CAST_START, false, Creature-0-67-1651-0-115488-00002A9EFC, Infused Pyromancer, 68168, 0, , nil, -2147483648, -2147483648, 36247, Fel Fireball, 4", diff --git a/FreshShit/RaiderlosSA/scratch.lua b/WeakAuras/Projects/RaiderlosSA/scratch.lua similarity index 96% rename from FreshShit/RaiderlosSA/scratch.lua rename to WeakAuras/Projects/RaiderlosSA/scratch.lua index 0c75e54..ad72493 100644 --- a/FreshShit/RaiderlosSA/scratch.lua +++ b/WeakAuras/Projects/RaiderlosSA/scratch.lua @@ -1,9 +1,9 @@ -local function varargToString(...) - local output = {} - for i = 1, select("#", ...) do - table.insert(output, tostring(select(i, ...))) - end - print(table.concat(output, ", ")) -end - -test("Hello", "world", "again", 2323, true) +local function varargToString(...) + local output = {} + for i = 1, select("#", ...) do + table.insert(output, tostring(select(i, ...))) + end + print(table.concat(output, ", ")) +end + +test("Hello", "world", "again", 2323, true) diff --git a/FreshShit/RaiderlosSA/spells.txt b/WeakAuras/Projects/RaiderlosSA/spells.txt similarity index 94% rename from FreshShit/RaiderlosSA/spells.txt rename to WeakAuras/Projects/RaiderlosSA/spells.txt index b955f92..792a248 100644 --- a/FreshShit/RaiderlosSA/spells.txt +++ b/WeakAuras/Projects/RaiderlosSA/spells.txt @@ -1,548 +1,548 @@ -##################################################################################### -### DEBUG ### -##################################################################################### - -##774!3 -Rejuvenation -##33763!3 -Lifebloom -##5185!3 -Healing Touch - -##################################################################################### -### Antorus ### -##################################################################################### - -########################################## -## Garothi ## -########################################## - -#244410!3 -Decimation -#246220!3 -Fel Bombardment -#244969!3 -Eradication -#244106!3 -Carnage - -########################################## -## Felhounds ## -########################################## - -#244086!3 -Molten Touch -#244768!3 -Desolate Gaze -#244057!3 -Enflame Corruption -#244131!3 -Consuming Sphere -#244056!3 -Siphon Corruption - -########################################## -## High Command ## -########################################## - -#245161!3 -Entropic Mine -#245546!3 -Summon Reinforcements - -########################################## -## Portal Keeper ## -########################################## - -#244016!3 -Reality Tear -#243983!3 -Collapsing World -#244000!3 -Felstorm Barrage - -########################################## -## Imonar ## -########################################## - -#247552!3 -Sleep Canister -#247367!3 -Shock Lance -#248068!3 -Empowered Pulse Grenade -#247376!3 -Pulse Grenade -#247716!3 -Charged Blasts -#247687!3 -Sever -#248070!3 -Empowered Shrapnel Blast -#250255!3 -Empowered Shock Lance - -########################################## -## Kin'garoth ## -########################################## - -#254919!3 -Forging Strike -#254926!3 -Reverberating Strike -#246840!3 -Ruiner -#246779!3 -Diabolic Bomb -#246706!3 -Demolish -#246664!3 -Annihilation - -########################################## -## Varimathras ## -########################################## - -#243960!3 -Shadow Strike -#243961!3 -Misery -#244042!3 -Marked Prey -#244093!3 -Necrotic Embrace -#248732!3 -Echoes of Doom -#243999!3 -Dark Fissure - -########################################## -## Coven ## -########################################## - -#253189!3 -Shivan Pact -#244899!1 -Fiery Strike -#245627!1 -Whirling Saber -#245281!3 -Shadow Blades -#245586!2 -Chilled Blood - -########################################## -## Aggramar ## -########################################## - -#254452!3 -Ravenous Blaze -#244693!3 -Wake of Flame -#244291!1 -Foe Braker -#244033!1 -Flame Rend -#247079!1 -Empowered Flame Rend -#245983!3 -Flare -#246037!3 -Empowered Flare - -########################################## -## Argus ## -########################################## - -#256457!3 -Cone of Death -#248396!3 -Soulblight -#257296!3 -Tortured Rage -#251570!3 -Soulbomb - -###################################################################################### -### DUNGEONS ### -###################################################################################### - -########################################## -## Black Rook Hold ## -########################################## - -#225573!3 -Dark Mending -#200105!3 -Sacrifice Soul -#225732!3 -Strike Down -#194996!3 -Soul Echoes -#195254!3 -Swirling Scythe -#194956!3 -Reap Soul -#200248!3 -Arcane Blitz -#200345!3 -Arrow Barrage -#200291!3 -Knife Dance -#200261!3 -Bonebreaking Strike -#197418!3 -Vengeful Shear -#201139!3 -Brutal Assault -#198245!3 -Brutal Haymaker -#198079!3 -Hateful Gaze - -########################################## -## Cathedral of Eternal Night ## -########################################## - -#241937!3 -Shadow Wall -#238543!3 -Demonic Mending -#242792!3 -Vile Roots -#236627!3 -Floral Fulmination -#239217!3 -Blinding Glare -#237726!3 -Scornful Gaze -#190620!3 -Felblaze Orb -#239268!3 -Venom Storm -#234107!3 -Chaotic Energy -#236543!3 -Felsoul Cleave -#238315!3 -Shadow Sweep -#243168!3 -Demonic Upheaval - -########################################## -## Court of Stars ## -########################################## - -#210261!3 -Sound Alarm -#215204!3 -Hinder -#209027!3 -Quelling Strike -#209516!3 -Mana Fang -#209485!3 -Drain Magic -#209404!3 -Seal Magic -#209495!3 -Charged Smash -#225100!3 -Charging Station -#219488!3 -Streetsweeper -#212784!3 -Eye Storm -#211464!3 -Fel Detonation -#207980!3 -Disintegration Beam -#207979!3 -Shockwave -#209628!3 -Piercing Gale -#209676!3 -Slicing Maelstrom - -########################################## -## Darkheart Thicket ## -########################################## - -#200631!3 -Unnerving Screech -#200580!3 -Maddening Roar -#191326!3 -Breath of Corruption -#201400!3 -Dread Inferno -#200238!3 -Feed on the Weak - -########################################## -## Eye of Azshara ## -########################################## - -#195172!3 -Mighty Slam -#195129!3 -Thundering Stomp -#195046!3 -Rejuvenating Waters -#162135!3 -Bellowing Roar -#197105!3 -Polymorh Fish -#193597!3 -Static Nova -#193611!3 -Focused Lightning -#196129!3 -Spray Sand -#196144!3 -Sandstorm -#196296!3 -Roiling Storm -#196290!3 -Chaotic Tempest -#191848!3 -Rampage - -########################################## -## Halls of Valor ## -########################################## - -#198605!3 -Thunderstrike -#198888!3 -Lightning Breath -#191284!3 -Horn of Valor -#198934!3 -Rune of Healing -#215433!3 -Holy Radiance -#199210!3 -Penetrating Shot -#191976!3 -Arcing Bolt -#192305!3 -Eye of the Storm -#192307!3 -Sanctify -#192048!3 -Expel Light -#192018!3 -Shield of Light -#196512!3 -Claw Frenzy -#199652!3 -Sever -#199726!3 -Unruly Yell -#199674!3 -Wicked Dagger -#193826!3 -Ragnarok -#198263!3 -Radiant Tempest -#198072!3 -Spear of Light -#197961!3 -Runic Band -#198750!3 -Surge - -########################################## -## Maw of Souls ## -########################################## - -#193364!3 -Screams of the Dead -#194442!3 -Six Pound Barrel -#194615!3 -Sea Legs -#192019!3 -Lantern of Darkness -#194099!3 -Bile Breath -#198405!3 -Bone Chilling Scream -#194325!3 -Fragment -#194216!3 -Cosmic Scythe -#195293!3 -Debilitating Shout -#185539!3 -Rapid Rupture -#198495!3 -Torrent -#202098!3 -Brackwater Barrage - -########################################## -## Neltharion's Lair ## -########################################## - -#202181!3 -Stone Gaze -#226296!3 -Piercing Shards -#188169!3 -Razor Shards -#198496!3 -Sunder -#199176!3 -Spiked Tongue -#193585!3 -Bound -#200700!3 -Landslide -#200732!3 -Molten Crash - -########################################## -## The Arcway ## -########################################## - -#211771!3 -Prophecies of Doom -#211037!3 -Celerity Zone -#195791!3 -Quarantine -#226285!3 -Demonic Ascension -#197810!3 -Wicked Slam -#211217!3 -Arcane Slicer -#211115!3 -Phase Breach -#196392!3 -Overcharge Mana -#200040!3 -Nether Venom -#200227!3 -Tangled Web -#220871!3 -Unstable Mana - -########################################## -## Vault of the Wardens ## -########################################## - -#193069!3 -Nightmares -#197799!3 -Unleash Fury -#191735!3 -Deafening Screech -#190836!3 -Hatred -#202913!3 -Fel Mortar -#200898!3 -Teleport -#199917!3 -Shadow Crash -#202658!3 -Drain -#194945!3 -Lingering Gaze -#196249!3 -Meteor -#192631!3 -Lava Wreath -#197513!3 -Detonating Moonglaive -#189469!3 -Turn Kick - -########################################## -## Seat of the Triumvirate ## -########################################## - -########################################## -## Upper Karazhan ## -########################################## - -#230083!3 -Nullification -#227267!3 -Summon Volatile Energy -#227254!3 -Evocation -#229662!3 -Fel Breath -#36247!3 -Fel Fireball -#227628!3 -Piercing Missiles -#227615!3 -Inferno Bolt -#227592!3 -Frostbite -#228269!3 -Flame Wreath -#227779!3 -Ceaseless Winter -#229706!3 -Leech Life -#229714!3 -Consume Magic -#229159!3 -Chaotic Shadows -#229083!3 -Burning Blast -#229151!3 -Disintegrate - -########################################## -## Lower Karazhan ## -########################################## - -#228221!3 -Severe Dusting -#228225!3 -Sultry Heat -#232153!3 -Kara Kazham -#227987!3 -Dinner Bell -#228025!3 -Heat Wave -#227568!3 -Burning Leg Sweep -#227776!3 -Magic Magnificent -#227966!3 -Flashlight -#228279!3 -Shadow Rejuvenation -#228278!3 -Demoralizing Shout -#228277!3 -Shackles of Servitude -#226316!3 -Shadow Bolt Volley -#227508!3 -Mass Repentance -#227793!3 -Sacred Ground -#227463!3 -Whirling Edge -#227646!3 -Iron Whirlwind -#227672!3 -Will Breaker -#227404!3 -Intangible Presence -#227493!3 -Mortal Strike -#228852!3 -Shared Suffering -#228837!3 +##################################################################################### +### DEBUG ### +##################################################################################### + +##774!3 +Rejuvenation +##33763!3 +Lifebloom +##5185!3 +Healing Touch + +##################################################################################### +### Antorus ### +##################################################################################### + +########################################## +## Garothi ## +########################################## + +#244410!3 +Decimation +#246220!3 +Fel Bombardment +#244969!3 +Eradication +#244106!3 +Carnage + +########################################## +## Felhounds ## +########################################## + +#244086!3 +Molten Touch +#244768!3 +Desolate Gaze +#244057!3 +Enflame Corruption +#244131!3 +Consuming Sphere +#244056!3 +Siphon Corruption + +########################################## +## High Command ## +########################################## + +#245161!3 +Entropic Mine +#245546!3 +Summon Reinforcements + +########################################## +## Portal Keeper ## +########################################## + +#244016!3 +Reality Tear +#243983!3 +Collapsing World +#244000!3 +Felstorm Barrage + +########################################## +## Imonar ## +########################################## + +#247552!3 +Sleep Canister +#247367!3 +Shock Lance +#248068!3 +Empowered Pulse Grenade +#247376!3 +Pulse Grenade +#247716!3 +Charged Blasts +#247687!3 +Sever +#248070!3 +Empowered Shrapnel Blast +#250255!3 +Empowered Shock Lance + +########################################## +## Kin'garoth ## +########################################## + +#254919!3 +Forging Strike +#254926!3 +Reverberating Strike +#246840!3 +Ruiner +#246779!3 +Diabolic Bomb +#246706!3 +Demolish +#246664!3 +Annihilation + +########################################## +## Varimathras ## +########################################## + +#243960!3 +Shadow Strike +#243961!3 +Misery +#244042!3 +Marked Prey +#244093!3 +Necrotic Embrace +#248732!3 +Echoes of Doom +#243999!3 +Dark Fissure + +########################################## +## Coven ## +########################################## + +#253189!3 +Shivan Pact +#244899!1 +Fiery Strike +#245627!1 +Whirling Saber +#245281!3 +Shadow Blades +#245586!2 +Chilled Blood + +########################################## +## Aggramar ## +########################################## + +#254452!3 +Ravenous Blaze +#244693!3 +Wake of Flame +#244291!1 +Foe Braker +#244033!1 +Flame Rend +#247079!1 +Empowered Flame Rend +#245983!3 +Flare +#246037!3 +Empowered Flare + +########################################## +## Argus ## +########################################## + +#256457!3 +Cone of Death +#248396!3 +Soulblight +#257296!3 +Tortured Rage +#251570!3 +Soulbomb + +###################################################################################### +### DUNGEONS ### +###################################################################################### + +########################################## +## Black Rook Hold ## +########################################## + +#225573!3 +Dark Mending +#200105!3 +Sacrifice Soul +#225732!3 +Strike Down +#194996!3 +Soul Echoes +#195254!3 +Swirling Scythe +#194956!3 +Reap Soul +#200248!3 +Arcane Blitz +#200345!3 +Arrow Barrage +#200291!3 +Knife Dance +#200261!3 +Bonebreaking Strike +#197418!3 +Vengeful Shear +#201139!3 +Brutal Assault +#198245!3 +Brutal Haymaker +#198079!3 +Hateful Gaze + +########################################## +## Cathedral of Eternal Night ## +########################################## + +#241937!3 +Shadow Wall +#238543!3 +Demonic Mending +#242792!3 +Vile Roots +#236627!3 +Floral Fulmination +#239217!3 +Blinding Glare +#237726!3 +Scornful Gaze +#190620!3 +Felblaze Orb +#239268!3 +Venom Storm +#234107!3 +Chaotic Energy +#236543!3 +Felsoul Cleave +#238315!3 +Shadow Sweep +#243168!3 +Demonic Upheaval + +########################################## +## Court of Stars ## +########################################## + +#210261!3 +Sound Alarm +#215204!3 +Hinder +#209027!3 +Quelling Strike +#209516!3 +Mana Fang +#209485!3 +Drain Magic +#209404!3 +Seal Magic +#209495!3 +Charged Smash +#225100!3 +Charging Station +#219488!3 +Streetsweeper +#212784!3 +Eye Storm +#211464!3 +Fel Detonation +#207980!3 +Disintegration Beam +#207979!3 +Shockwave +#209628!3 +Piercing Gale +#209676!3 +Slicing Maelstrom + +########################################## +## Darkheart Thicket ## +########################################## + +#200631!3 +Unnerving Screech +#200580!3 +Maddening Roar +#191326!3 +Breath of Corruption +#201400!3 +Dread Inferno +#200238!3 +Feed on the Weak + +########################################## +## Eye of Azshara ## +########################################## + +#195172!3 +Mighty Slam +#195129!3 +Thundering Stomp +#195046!3 +Rejuvenating Waters +#162135!3 +Bellowing Roar +#197105!3 +Polymorh Fish +#193597!3 +Static Nova +#193611!3 +Focused Lightning +#196129!3 +Spray Sand +#196144!3 +Sandstorm +#196296!3 +Roiling Storm +#196290!3 +Chaotic Tempest +#191848!3 +Rampage + +########################################## +## Halls of Valor ## +########################################## + +#198605!3 +Thunderstrike +#198888!3 +Lightning Breath +#191284!3 +Horn of Valor +#198934!3 +Rune of Healing +#215433!3 +Holy Radiance +#199210!3 +Penetrating Shot +#191976!3 +Arcing Bolt +#192305!3 +Eye of the Storm +#192307!3 +Sanctify +#192048!3 +Expel Light +#192018!3 +Shield of Light +#196512!3 +Claw Frenzy +#199652!3 +Sever +#199726!3 +Unruly Yell +#199674!3 +Wicked Dagger +#193826!3 +Ragnarok +#198263!3 +Radiant Tempest +#198072!3 +Spear of Light +#197961!3 +Runic Band +#198750!3 +Surge + +########################################## +## Maw of Souls ## +########################################## + +#193364!3 +Screams of the Dead +#194442!3 +Six Pound Barrel +#194615!3 +Sea Legs +#192019!3 +Lantern of Darkness +#194099!3 +Bile Breath +#198405!3 +Bone Chilling Scream +#194325!3 +Fragment +#194216!3 +Cosmic Scythe +#195293!3 +Debilitating Shout +#185539!3 +Rapid Rupture +#198495!3 +Torrent +#202098!3 +Brackwater Barrage + +########################################## +## Neltharion's Lair ## +########################################## + +#202181!3 +Stone Gaze +#226296!3 +Piercing Shards +#188169!3 +Razor Shards +#198496!3 +Sunder +#199176!3 +Spiked Tongue +#193585!3 +Bound +#200700!3 +Landslide +#200732!3 +Molten Crash + +########################################## +## The Arcway ## +########################################## + +#211771!3 +Prophecies of Doom +#211037!3 +Celerity Zone +#195791!3 +Quarantine +#226285!3 +Demonic Ascension +#197810!3 +Wicked Slam +#211217!3 +Arcane Slicer +#211115!3 +Phase Breach +#196392!3 +Overcharge Mana +#200040!3 +Nether Venom +#200227!3 +Tangled Web +#220871!3 +Unstable Mana + +########################################## +## Vault of the Wardens ## +########################################## + +#193069!3 +Nightmares +#197799!3 +Unleash Fury +#191735!3 +Deafening Screech +#190836!3 +Hatred +#202913!3 +Fel Mortar +#200898!3 +Teleport +#199917!3 +Shadow Crash +#202658!3 +Drain +#194945!3 +Lingering Gaze +#196249!3 +Meteor +#192631!3 +Lava Wreath +#197513!3 +Detonating Moonglaive +#189469!3 +Turn Kick + +########################################## +## Seat of the Triumvirate ## +########################################## + +########################################## +## Upper Karazhan ## +########################################## + +#230083!3 +Nullification +#227267!3 +Summon Volatile Energy +#227254!3 +Evocation +#229662!3 +Fel Breath +#36247!3 +Fel Fireball +#227628!3 +Piercing Missiles +#227615!3 +Inferno Bolt +#227592!3 +Frostbite +#228269!3 +Flame Wreath +#227779!3 +Ceaseless Winter +#229706!3 +Leech Life +#229714!3 +Consume Magic +#229159!3 +Chaotic Shadows +#229083!3 +Burning Blast +#229151!3 +Disintegrate + +########################################## +## Lower Karazhan ## +########################################## + +#228221!3 +Severe Dusting +#228225!3 +Sultry Heat +#232153!3 +Kara Kazham +#227987!3 +Dinner Bell +#228025!3 +Heat Wave +#227568!3 +Burning Leg Sweep +#227776!3 +Magic Magnificent +#227966!3 +Flashlight +#228279!3 +Shadow Rejuvenation +#228278!3 +Demoralizing Shout +#228277!3 +Shackles of Servitude +#226316!3 +Shadow Bolt Volley +#227508!3 +Mass Repentance +#227793!3 +Sacred Ground +#227463!3 +Whirling Edge +#227646!3 +Iron Whirlwind +#227672!3 +Will Breaker +#227404!3 +Intangible Presence +#227493!3 +Mortal Strike +#228852!3 +Shared Suffering +#228837!3 #Bellowing Roar \ No newline at end of file diff --git a/Random Trash/Account with herbalism dudu.txt b/WeakAuras/Projects/Random Trash/Account with herbalism dudu.txt similarity index 90% rename from Random Trash/Account with herbalism dudu.txt rename to WeakAuras/Projects/Random Trash/Account with herbalism dudu.txt index c9f15cc..f847cc7 100644 --- a/Random Trash/Account with herbalism dudu.txt +++ b/WeakAuras/Projects/Random Trash/Account with herbalism dudu.txt @@ -1,6 +1,6 @@ -sponge bob -sigarezest1 - - -overlordack +sponge bob +sigarezest1 + + +overlordack stefan2004 \ No newline at end of file diff --git a/Random Trash/Asakawa debuffs on nameplate non tsu.lua b/WeakAuras/Projects/Random Trash/Asakawa debuffs on nameplate non tsu.lua similarity index 97% rename from Random Trash/Asakawa debuffs on nameplate non tsu.lua rename to WeakAuras/Projects/Random Trash/Asakawa debuffs on nameplate non tsu.lua index 617733e..669f21c 100644 --- a/Random Trash/Asakawa debuffs on nameplate non tsu.lua +++ b/WeakAuras/Projects/Random Trash/Asakawa debuffs on nameplate non tsu.lua @@ -1,45 +1,45 @@ --- DO NOT EDIT -- -local points = {"TOP", "BOTTOM", "LEFT", "RIGHT", "CENTER", "TOPLEFT", "TOPRIGHT", "BOTTOMLEFT", "BOTTOMRIGHT"} - -local sortBy = aura_env.config.sort -local direction = aura_env.config.grow -local spacing = aura_env.config.spacing -local selfPoint = points[aura_env.config.selfPoint] -local anchorPoint = points[aura_env.config.anchorPoint] - -local x = direction == 3 and -(aura_env.region.width+spacing) or direction == 4 and (aura_env.region.width+spacing) or 0 -local y = direction == 2 and -(aura_env.region.height+spacing) or direction == 1 and (aura_env.region.height+spacing) or 0 - -local units = {} - -aura_env.UpdateClone = function(unit, region) - units[unit] = units[unit] or {} - local needsAdding = true - for i = #units[unit],1,-1 do - if units[unit][i] == region then - needsAdding = false - end - if (not units[unit][i].state.show) or (units[unit][i].id ~= aura_env.id) then - table.remove(units[unit], i) - end - end - if needsAdding then table.insert(units[unit], region) end - table.sort(units[unit], function(a,b) - return a.state[sortBy] < b.state[sortBy] - end - ) - for i, region in ipairs(units[unit]) do - region:SetAnchor(selfPoint, C_NamePlate.GetNamePlateForUnit(unit), anchorPoint) - region:SetOffset(aura_env.config.xOff + (x*(i-1)), aura_env.config.yOff + (y*(i-1))) - end -end - -aura_env.AddClone(aura_env.statee.unit, aura_env.region) - -aura_env.UpdateClone(aura_env.statee.unit, aura_env.region) - -function() - if aura_env.statee then - aura_env.UpdateClone(aura_env.statee.unit, aura_env.region) - end +-- DO NOT EDIT -- +local points = {"TOP", "BOTTOM", "LEFT", "RIGHT", "CENTER", "TOPLEFT", "TOPRIGHT", "BOTTOMLEFT", "BOTTOMRIGHT"} + +local sortBy = aura_env.config.sort +local direction = aura_env.config.grow +local spacing = aura_env.config.spacing +local selfPoint = points[aura_env.config.selfPoint] +local anchorPoint = points[aura_env.config.anchorPoint] + +local x = direction == 3 and -(aura_env.region.width+spacing) or direction == 4 and (aura_env.region.width+spacing) or 0 +local y = direction == 2 and -(aura_env.region.height+spacing) or direction == 1 and (aura_env.region.height+spacing) or 0 + +local units = {} + +aura_env.UpdateClone = function(unit, region) + units[unit] = units[unit] or {} + local needsAdding = true + for i = #units[unit],1,-1 do + if units[unit][i] == region then + needsAdding = false + end + if (not units[unit][i].state.show) or (units[unit][i].id ~= aura_env.id) then + table.remove(units[unit], i) + end + end + if needsAdding then table.insert(units[unit], region) end + table.sort(units[unit], function(a,b) + return a.state[sortBy] < b.state[sortBy] + end + ) + for i, region in ipairs(units[unit]) do + region:SetAnchor(selfPoint, C_NamePlate.GetNamePlateForUnit(unit), anchorPoint) + region:SetOffset(aura_env.config.xOff + (x*(i-1)), aura_env.config.yOff + (y*(i-1))) + end +end + +aura_env.AddClone(aura_env.statee.unit, aura_env.region) + +aura_env.UpdateClone(aura_env.statee.unit, aura_env.region) + +function() + if aura_env.statee then + aura_env.UpdateClone(aura_env.statee.unit, aura_env.region) + end end \ No newline at end of file diff --git a/Random Trash/GM Chat b/WeakAuras/Projects/Random Trash/GM Chat similarity index 98% rename from Random Trash/GM Chat rename to WeakAuras/Projects/Random Trash/GM Chat index 7974bc2..562b825 100644 --- a/Random Trash/GM Chat +++ b/WeakAuras/Projects/Random Trash/GM Chat @@ -1,128 +1,128 @@ -[02:19 AM] [Revealed]: [Orcish] oi -[02:19 AM] [Bosnianlady]: tank battle -[02:19 AM] [Lethaleye]: need 1 dps -[02:19 AM] [Pinkiepiie]: Wel it's not physical eh? -[02:19 AM] [Revealed]: [Orcish] hold up -[02:19 AM] [Revealed]: [Orcish] i gotta touch pinkie -[02:19 AM] [Revealed]: [Orcish] he wants me to touch him -[02:19 AM] [Revealed]: [Orcish] then after -[02:19 AM] [Revealed]: [Orcish] we can try -[02:19 AM] [Revealed]: [Orcish] rdy pink? -[02:19 AM] [Pinkiepiie]: yee boi -[02:19 AM] [Revealed]: [Orcish] gonna keg, keg and strike -[02:19 AM] [Pinkiepiie]: keg me daddy -[02:20 AM] [Pinkiepiie]: yea that was a weak ass keg smh -[02:20 AM] [Revealed]: [Orcish] ye -[02:20 AM] [Bosnianlady]: dude i tanked fuking 3 mos 18s in last hour -[02:20 AM] [Revealed]: [Orcish] xD -[02:20 AM] [Bosnianlady]: am losing my mind -[02:20 AM] [Revealed]: [Orcish] LOL -[02:20 AM] [Revealed]: [Orcish] i'd hate that -[02:20 AM] [Bosnianlady]: ye -[02:20 AM] [Revealed]: [Orcish] aight wanna tank battle? -[02:20 AM] [Bosnianlady]: ye -[02:20 AM] [Revealed]: [Orcish] i don't know how well i'll do -[02:20 AM] [Pinkiepiie]: pog -[02:20 AM] [Pinkiepiie]: hp unmoved -[02:21 AM] [Revealed]: [Orcish] u running brambles? -[02:21 AM] [Bosnianlady]: yep -[02:21 AM] [Revealed]: [Orcish] i feel it -[02:21 AM] [Revealed]: [Orcish] :( -[02:21 AM] [P] [Pinkiepiie]: (924.6) yay -[02:21 AM] Revealed bows before Bosnianlady. -[02:21 AM] [P] [Kidon]: (880.6) gonna run and grab a cup of tea rq -[02:21 AM] [Bosnianlady]: fak -[02:21 AM] [Bosnianlady]: sry -[02:21 AM] [P] [Starsynth]: [Orcish] (932.4) I just did the same -[02:21 AM] Bosnianlady cries on Revealed's shoulder. -[02:21 AM] Bortah bursts into dance. -[02:21 AM] [P] [AFK] [Fluffenchops]: (926.9) xD -[02:21 AM] [P] [Pinkiepiie]: (924.6) cb -[02:22 AM] Bosnianlady cries on Revealed's shoulder. -[02:22 AM] Bosnianlady hugs Revealed. -[02:22 AM] [Revealed]: [Orcish] sry, my gf just texted me as soon as I died lol -[02:22 AM] Bosnianlady hugs Revealed. -[02:22 AM] Revealed hugs Bosnianlady. -[02:22 AM] [P] [Pinkiepiie]: (924.6) Well ok -[02:22 AM] [P] [Pinkiepiie]: (924.6) Onto eoa -[02:23 AM] [P] [Revealed]: [Orcish] (913.3) let's see who gets there first? -[02:23 AM] [P] [Pinkiepiie]: (924.6) ooo -[02:23 AM] [P] [Pinkiepiie]: (916.1) y e s -[02:23 AM] [P] [Pinkiepiie]: (916.1) Cmon then -[02:23 AM] [P] [Pinkiepiie]: (916.1) o you dog -[02:23 AM] [P] [Revealed]: [Orcish] (913.3) noob, u lost already -[02:23 AM] [P] [Pinkiepiie]: (916.1) You got insta flight don't you -[02:23 AM] [P] [Revealed]: [Orcish] (913.3) :) -[02:24 AM] [P] [Pinkiepiie]: (916.1) s m h -[02:24 AM] [P] [Pinkiepiie]: (916.1) d o n o r s -[02:24 AM] [P] [Kidon]: (880.6) back -[02:24 AM] [P] [Pinkiepiie]: (916.1) stealing our wives -[02:24 AM] [P] [Kidon]: (880.6) i hit my leg on the chair and had to breath for like 10 seconds -[02:24 AM] [P] [Pinkiepiie]: (916.1) lol -[02:24 AM] [P] [Revealed]: [Orcish] (913.3) dw wont steal ur serbian blyat wife -[02:24 AM] [P] [Revealed]: [Orcish] (913.3) got my own girl -[02:24 AM] [P] [Starsynth]: [Orcish] (932.4) REEEeeeee -[02:24 AM] [P] [Starsynth]: [Orcish] (932.4) clikc -[02:24 AM] [P] [Starsynth]: [Orcish] (932.4) u fuck -[02:24 AM] [P] [Pinkiepiie]: (916.1) Jokes on you -[02:25 AM] [P] [Pinkiepiie]: (916.1) I'm a sad miserable loser -[02:25 AM] [P] [Pinkiepiie]: (916.1) ;) -[02:25 AM] [P] [Revealed]: [Orcish] (913.3) oh -[02:25 AM] [P] [Revealed]: [Orcish] (913.3) ur horde -[02:25 AM] [P] [Starsynth]: [Orcish] (932.4) ._. -[02:25 AM] [P] [Starsynth]: [Orcish] (932.4) PINK -[02:25 AM] [P] [Starsynth]: [Orcish] (932.4) NO -[02:25 AM] [P] [Revealed]: [Orcish] (913.3) ;w; -[02:25 AM] [P] [Starsynth]: [Orcish] (932.4) YOU A winner -[02:25 AM] [P] [Starsynth]: [Orcish] (932.4) LOOK -[02:25 AM] [P] [Starsynth]: [Orcish] (932.4) AT DIs big bad -[02:25 AM] [P] [Starsynth]: [Orcish] (932.4) BOY -[02:25 AM] [P] [Starsynth]: [Orcish] (932.4) DWURf -[02:25 AM] [P] [Starsynth]: [Orcish] (932.4) Look at this sexy maniac -[02:25 AM] [P] [Starsynth]: [Orcish] (932.4) come -[02:25 AM] [P] [Revealed]: [Orcish] (913.3) my girl said she'd go make some food -[02:25 AM] [P] [Starsynth]: [Orcish] (932.4) accept summon pleb -[02:25 AM] [P] [Revealed]: [Orcish] (913.3) and i said "u eat something good ok" -[02:25 AM] Starsynth cheers at you. -[02:25 AM] Starsynth loves you. -[02:25 AM] [P] [Revealed]: [Orcish] (913.3) and she said "ya, wish i could eat you" -[02:25 AM] Starsynth is very happy with you! -[02:25 AM] [P] [Revealed]: [Orcish] (913.3) lmfao -[02:26 AM] [P] [Starsynth]: [Orcish] (896.7) Then you woke up? -[02:26 AM] [P] [Starsynth]: [Orcish] (896.7) OMEGalul -[02:26 AM] [P] [AFK] [Fluffenchops]: (926.9) awawaw goalz -[02:26 AM] [P] [Revealed]: [Orcish] (913.3) lmfao -[02:26 AM] [P] [Revealed]: [Orcish] (913.3) o -[02:26 AM] [P] [Revealed]: [Orcish] (913.3) i -[02:26 AM] [P] [Revealed]: [Orcish] (913.3) fluffen -[02:26 AM] [P] [Revealed]: [Orcish] (913.3) dont do that -[02:26 AM] [P] [Revealed]: [Orcish] (913.3) "awwawa" -[02:26 AM] [P] [AFK] [Fluffenchops]: (926.9) why -[02:26 AM] [P] [Revealed]: [Orcish] (913.3) reminds me of a retard thot named baby -[02:26 AM] [P] [Pinkiepiie]: (924.6) oof -[02:26 AM] [P] [AFK] [Fluffenchops]: (926.9) lul -[02:26 AM] [P] [Pinkiepiie]: (924.6) We say not that name -[02:26 AM] [P] [Starsynth]: [Orcish] (896.7) hahahah -[02:26 AM] [P] [Starsynth]: [Orcish] (896.7) Yes -[02:26 AM] [P] [AFK] [Fluffenchops]: (926.9) dont compare me to her pls :D -[02:26 AM] [P] [Revealed]: [Orcish] (913.3) aight -[02:26 AM] [P] [Revealed]: [Orcish] (913.3) dont do the awawa -[02:26 AM] [P] [Revealed]: [Orcish] (913.3) i had that bitch banned 30d -[02:26 AM] [P] [AFK] [Fluffenchops]: (926.9) aye -[02:26 AM] [P] [Starsynth]: [Orcish] (932.9) You ? -[02:26 AM] [P] [AFK] [Fluffenchops]: (926.9) i mean -[02:26 AM] [P] [Starsynth]: [Orcish] (932.9) Krem saved your ass -[02:26 AM] [P] [Revealed]: [Orcish] (913.3) for trynna blackmail me outta staff -[02:26 AM] [P] [Starsynth]: [Orcish] (932.9) :D -[02:26 AM] [P] [Revealed]: [Orcish] (913.3) "i had that bitch banned" -[02:27 AM] [P] [Pinkiepiie]: (924.6) 30??? -[02:27 AM] [P] [Revealed]: [Orcish] (913.3) that doesnt mean i banned her -[02:27 AM] [P] [Pinkiepiie]: (924.6) Doesn't that deserve a -1 -[02:27 AM] [P] [Starsynth]: [Orcish] (932.9) :P -[02:27 AM] [P] [Starsynth]: [Orcish] (932.9) go -[02:27 AM] [P] [Revealed]: [Orcish] (913.3) i'd say so too but -[02:27 AM] [P] [Starsynth]: [Orcish] (932.9) put it in -[02:27 AM] [P] [Revealed]: [Orcish] (913.3) put it in hard -[02:27 AM] [Starsynth]: [Orcish] tacno -[02:27 AM] [Starsynth]: [Orcish] ajde jasi me +[02:19 AM] [Revealed]: [Orcish] oi +[02:19 AM] [Bosnianlady]: tank battle +[02:19 AM] [Lethaleye]: need 1 dps +[02:19 AM] [Pinkiepiie]: Wel it's not physical eh? +[02:19 AM] [Revealed]: [Orcish] hold up +[02:19 AM] [Revealed]: [Orcish] i gotta touch pinkie +[02:19 AM] [Revealed]: [Orcish] he wants me to touch him +[02:19 AM] [Revealed]: [Orcish] then after +[02:19 AM] [Revealed]: [Orcish] we can try +[02:19 AM] [Revealed]: [Orcish] rdy pink? +[02:19 AM] [Pinkiepiie]: yee boi +[02:19 AM] [Revealed]: [Orcish] gonna keg, keg and strike +[02:19 AM] [Pinkiepiie]: keg me daddy +[02:20 AM] [Pinkiepiie]: yea that was a weak ass keg smh +[02:20 AM] [Revealed]: [Orcish] ye +[02:20 AM] [Bosnianlady]: dude i tanked fuking 3 mos 18s in last hour +[02:20 AM] [Revealed]: [Orcish] xD +[02:20 AM] [Bosnianlady]: am losing my mind +[02:20 AM] [Revealed]: [Orcish] LOL +[02:20 AM] [Revealed]: [Orcish] i'd hate that +[02:20 AM] [Bosnianlady]: ye +[02:20 AM] [Revealed]: [Orcish] aight wanna tank battle? +[02:20 AM] [Bosnianlady]: ye +[02:20 AM] [Revealed]: [Orcish] i don't know how well i'll do +[02:20 AM] [Pinkiepiie]: pog +[02:20 AM] [Pinkiepiie]: hp unmoved +[02:21 AM] [Revealed]: [Orcish] u running brambles? +[02:21 AM] [Bosnianlady]: yep +[02:21 AM] [Revealed]: [Orcish] i feel it +[02:21 AM] [Revealed]: [Orcish] :( +[02:21 AM] [P] [Pinkiepiie]: (924.6) yay +[02:21 AM] Revealed bows before Bosnianlady. +[02:21 AM] [P] [Kidon]: (880.6) gonna run and grab a cup of tea rq +[02:21 AM] [Bosnianlady]: fak +[02:21 AM] [Bosnianlady]: sry +[02:21 AM] [P] [Starsynth]: [Orcish] (932.4) I just did the same +[02:21 AM] Bosnianlady cries on Revealed's shoulder. +[02:21 AM] Bortah bursts into dance. +[02:21 AM] [P] [AFK] [Fluffenchops]: (926.9) xD +[02:21 AM] [P] [Pinkiepiie]: (924.6) cb +[02:22 AM] Bosnianlady cries on Revealed's shoulder. +[02:22 AM] Bosnianlady hugs Revealed. +[02:22 AM] [Revealed]: [Orcish] sry, my gf just texted me as soon as I died lol +[02:22 AM] Bosnianlady hugs Revealed. +[02:22 AM] Revealed hugs Bosnianlady. +[02:22 AM] [P] [Pinkiepiie]: (924.6) Well ok +[02:22 AM] [P] [Pinkiepiie]: (924.6) Onto eoa +[02:23 AM] [P] [Revealed]: [Orcish] (913.3) let's see who gets there first? +[02:23 AM] [P] [Pinkiepiie]: (924.6) ooo +[02:23 AM] [P] [Pinkiepiie]: (916.1) y e s +[02:23 AM] [P] [Pinkiepiie]: (916.1) Cmon then +[02:23 AM] [P] [Pinkiepiie]: (916.1) o you dog +[02:23 AM] [P] [Revealed]: [Orcish] (913.3) noob, u lost already +[02:23 AM] [P] [Pinkiepiie]: (916.1) You got insta flight don't you +[02:23 AM] [P] [Revealed]: [Orcish] (913.3) :) +[02:24 AM] [P] [Pinkiepiie]: (916.1) s m h +[02:24 AM] [P] [Pinkiepiie]: (916.1) d o n o r s +[02:24 AM] [P] [Kidon]: (880.6) back +[02:24 AM] [P] [Pinkiepiie]: (916.1) stealing our wives +[02:24 AM] [P] [Kidon]: (880.6) i hit my leg on the chair and had to breath for like 10 seconds +[02:24 AM] [P] [Pinkiepiie]: (916.1) lol +[02:24 AM] [P] [Revealed]: [Orcish] (913.3) dw wont steal ur serbian blyat wife +[02:24 AM] [P] [Revealed]: [Orcish] (913.3) got my own girl +[02:24 AM] [P] [Starsynth]: [Orcish] (932.4) REEEeeeee +[02:24 AM] [P] [Starsynth]: [Orcish] (932.4) clikc +[02:24 AM] [P] [Starsynth]: [Orcish] (932.4) u fuck +[02:24 AM] [P] [Pinkiepiie]: (916.1) Jokes on you +[02:25 AM] [P] [Pinkiepiie]: (916.1) I'm a sad miserable loser +[02:25 AM] [P] [Pinkiepiie]: (916.1) ;) +[02:25 AM] [P] [Revealed]: [Orcish] (913.3) oh +[02:25 AM] [P] [Revealed]: [Orcish] (913.3) ur horde +[02:25 AM] [P] [Starsynth]: [Orcish] (932.4) ._. +[02:25 AM] [P] [Starsynth]: [Orcish] (932.4) PINK +[02:25 AM] [P] [Starsynth]: [Orcish] (932.4) NO +[02:25 AM] [P] [Revealed]: [Orcish] (913.3) ;w; +[02:25 AM] [P] [Starsynth]: [Orcish] (932.4) YOU A winner +[02:25 AM] [P] [Starsynth]: [Orcish] (932.4) LOOK +[02:25 AM] [P] [Starsynth]: [Orcish] (932.4) AT DIs big bad +[02:25 AM] [P] [Starsynth]: [Orcish] (932.4) BOY +[02:25 AM] [P] [Starsynth]: [Orcish] (932.4) DWURf +[02:25 AM] [P] [Starsynth]: [Orcish] (932.4) Look at this sexy maniac +[02:25 AM] [P] [Starsynth]: [Orcish] (932.4) come +[02:25 AM] [P] [Revealed]: [Orcish] (913.3) my girl said she'd go make some food +[02:25 AM] [P] [Starsynth]: [Orcish] (932.4) accept summon pleb +[02:25 AM] [P] [Revealed]: [Orcish] (913.3) and i said "u eat something good ok" +[02:25 AM] Starsynth cheers at you. +[02:25 AM] Starsynth loves you. +[02:25 AM] [P] [Revealed]: [Orcish] (913.3) and she said "ya, wish i could eat you" +[02:25 AM] Starsynth is very happy with you! +[02:25 AM] [P] [Revealed]: [Orcish] (913.3) lmfao +[02:26 AM] [P] [Starsynth]: [Orcish] (896.7) Then you woke up? +[02:26 AM] [P] [Starsynth]: [Orcish] (896.7) OMEGalul +[02:26 AM] [P] [AFK] [Fluffenchops]: (926.9) awawaw goalz +[02:26 AM] [P] [Revealed]: [Orcish] (913.3) lmfao +[02:26 AM] [P] [Revealed]: [Orcish] (913.3) o +[02:26 AM] [P] [Revealed]: [Orcish] (913.3) i +[02:26 AM] [P] [Revealed]: [Orcish] (913.3) fluffen +[02:26 AM] [P] [Revealed]: [Orcish] (913.3) dont do that +[02:26 AM] [P] [Revealed]: [Orcish] (913.3) "awwawa" +[02:26 AM] [P] [AFK] [Fluffenchops]: (926.9) why +[02:26 AM] [P] [Revealed]: [Orcish] (913.3) reminds me of a retard thot named baby +[02:26 AM] [P] [Pinkiepiie]: (924.6) oof +[02:26 AM] [P] [AFK] [Fluffenchops]: (926.9) lul +[02:26 AM] [P] [Pinkiepiie]: (924.6) We say not that name +[02:26 AM] [P] [Starsynth]: [Orcish] (896.7) hahahah +[02:26 AM] [P] [Starsynth]: [Orcish] (896.7) Yes +[02:26 AM] [P] [AFK] [Fluffenchops]: (926.9) dont compare me to her pls :D +[02:26 AM] [P] [Revealed]: [Orcish] (913.3) aight +[02:26 AM] [P] [Revealed]: [Orcish] (913.3) dont do the awawa +[02:26 AM] [P] [Revealed]: [Orcish] (913.3) i had that bitch banned 30d +[02:26 AM] [P] [AFK] [Fluffenchops]: (926.9) aye +[02:26 AM] [P] [Starsynth]: [Orcish] (932.9) You ? +[02:26 AM] [P] [AFK] [Fluffenchops]: (926.9) i mean +[02:26 AM] [P] [Starsynth]: [Orcish] (932.9) Krem saved your ass +[02:26 AM] [P] [Revealed]: [Orcish] (913.3) for trynna blackmail me outta staff +[02:26 AM] [P] [Starsynth]: [Orcish] (932.9) :D +[02:26 AM] [P] [Revealed]: [Orcish] (913.3) "i had that bitch banned" +[02:27 AM] [P] [Pinkiepiie]: (924.6) 30??? +[02:27 AM] [P] [Revealed]: [Orcish] (913.3) that doesnt mean i banned her +[02:27 AM] [P] [Pinkiepiie]: (924.6) Doesn't that deserve a -1 +[02:27 AM] [P] [Starsynth]: [Orcish] (932.9) :P +[02:27 AM] [P] [Starsynth]: [Orcish] (932.9) go +[02:27 AM] [P] [Revealed]: [Orcish] (913.3) i'd say so too but +[02:27 AM] [P] [Starsynth]: [Orcish] (932.9) put it in +[02:27 AM] [P] [Revealed]: [Orcish] (913.3) put it in hard +[02:27 AM] [Starsynth]: [Orcish] tacno +[02:27 AM] [Starsynth]: [Orcish] ajde jasi me [02:27 AM] [P] [Kidon]: (880.6) o.o \ No newline at end of file diff --git a/Random Trash/Glowy Nameplate.lua b/WeakAuras/Projects/Random Trash/Glowy Nameplate.lua similarity index 96% rename from Random Trash/Glowy Nameplate.lua rename to WeakAuras/Projects/Random Trash/Glowy Nameplate.lua index 774594b..864fe68 100644 --- a/Random Trash/Glowy Nameplate.lua +++ b/WeakAuras/Projects/Random Trash/Glowy Nameplate.lua @@ -1,177 +1,177 @@ -function(allstates, event, ...) - local unitID = ... - local group = aura_env.group - local hplimit = aura_env.hplimit - - for i = 1, GetNumGroupMembers() do - if unitID == group..i then - local curHP = UnitHealth(group..i) - local maxHP = UnitHealthMax(group..i) - local percent = (curHP / maxHP) * 100 - - allstates[unitID] = allstates[unitID] or {} - local state = allstates[unitID] - - if percent < hplimit and state.show == true then - return - end - - state.show = false - - if percent < hplimit then - state.show = true - state.changed = true - state.name = group..i - end - end - end - return true -end - -aura_env.hplimit = 60 --health percentage threshold, change to whatever number you want (1-100) - ------------------------------------------ ---DONT CHANGE ANYTHING BELLOW THIS LINE-- ------------------------------------------ - -aura_env.me = UnitGUID("player") -aura_env.group = "party" -if IsInGroup() and not IsInRaid() then - aura_env.group = "party" -elseif IsInRaid() then - aura_env.group = "raid" -end - -aura_env.frameTable = {} - --- Send this function a group/raid member's unitID or GUID and it will return their raid frame. -function aura_env.GetFrame(target) - if not UnitExists(target) then - if type(target) == "string" and target:find("Player") then - target = select(6, GetPlayerInfoByGUID(target)) - else - return - end - end - --ShadowUF - if IsAddOnLoaded("ShadowedUnitFrames") then - if ShadowUF.enabledUnits.raid then - for _, frame in pairs(ShadowUF.Units.unitFrames) do - if frame.unitType == "raid" and frame:IsVisible() and frame.unit and UnitIsUnit(frame.unit, target) - then - return frame - end - end - end - end - -- CompactRaid - if IsAddOnLoaded("CompactRaid") then - return CompactRaid:FindUnitFrame(target) - end - -- Healbot - if IsAddOnLoaded("HealBot") then - for _, frame in pairs(HealBot_Unit_Button) do - if UnitIsUnit(frame.unit, target) then - return frame - end - end - end - -- Vuhdo - if IsAddOnLoaded("VuhDo") and VUHDO_CONFIG["SHOW_PANELS"] then - for _, v in pairs(VUHDO_UNIT_BUTTONS) do - if v[1].raidid and UnitIsUnit(v[1].raidid, target) then - return v[1] - end - end - end - if IsAddOnLoaded("Grid") then - for _, frame in pairs(Grid.modules.GridFrame.registeredFrames) do - if frame:IsVisible() then - if frame.unit and UnitIsUnit(frame.unit, target) then - return frame - end - end - end - end - --Grid2 - if IsAddOnLoaded("Grid2") then - for _, frame in pairs(Grid2Frame.registeredFrames) do - if frame:IsVisible() then - if frame.unit and UnitIsUnit(frame.unit, target) then - return frame - end - end - end - end - -- ElvUI - if ElvUF then - for _, frame in pairs(ElvUF.objects) do - if (frame.unitframeType == "raid" - or frame.unitframeType == "party" - or frame.unitframeType == "raid40" - ) - and frame:IsVisible() and frame.unit and UnitIsUnit(frame.unit, target) - then - return frame - end - end -end --- bdGrid -if IsAddOnLoaded("bdGrid") then - for _, frame in pairs(oUF_bdGridRaid) do - if UnitIsUnit(frame.unit, target) then - return frame - end - end -end ---Lastly, default frames -if CompactRaidFrameContainer.groupMode == "flush" then - for _, frame in pairs(CompactRaidFrameContainer.flowFrames) do - if frame.unit and frame:IsVisible() and UnitIsUnit(frame.unit, target) then - return frame - end - end -else - for i = 1, 8 do - for j = 1, 5 do - local frame = _G["CompactRaidGroup"..i.."Member"..j] - if frame:IsVisible() and frame.unit and UnitIsUnit(frame.unit, target) - then - return frame - end - end - end -end --- debug - uncomment below if you're seeing issues ---print("GlowOnDemand (WA) - No frame found. Target sent: ".. target) -end - -local frame = aura_env.GetFrame(aura_env.statee.name) -if frame then - local LBG = LibStub("LibButtonGlow-1.0") - table.insert(aura_env.frameTable, frame) - LBG.ShowOverlayGlow(frame) -end - -local frame = aura_env.GetFrame(aura_env.statee.name) -local LBG = LibStub("LibButtonGlow-1.0") -for i, v in ipairs(aura_env.frameTable) do - if v == frame then - table.remove(aura_env.frameTable, i) - break - end -end -LBG.HideOverlayGlow(frame) - -function(t) - if not t[1] then - if #aura_env.frameTable > 0 then - for _, v in ipairs(aura_env.frameTable) do - local LBG = LibStub("LibButtonGlow-1.0") - LBG.HideOverlayGlow(v) - end - end - aura_env.frameTable = {} - end - return t[1] -end +function(allstates, event, ...) + local unitID = ... + local group = aura_env.group + local hplimit = aura_env.hplimit + + for i = 1, GetNumGroupMembers() do + if unitID == group..i then + local curHP = UnitHealth(group..i) + local maxHP = UnitHealthMax(group..i) + local percent = (curHP / maxHP) * 100 + + allstates[unitID] = allstates[unitID] or {} + local state = allstates[unitID] + + if percent < hplimit and state.show == true then + return + end + + state.show = false + + if percent < hplimit then + state.show = true + state.changed = true + state.name = group..i + end + end + end + return true +end + +aura_env.hplimit = 60 --health percentage threshold, change to whatever number you want (1-100) + +----------------------------------------- +--DONT CHANGE ANYTHING BELLOW THIS LINE-- +----------------------------------------- + +aura_env.me = UnitGUID("player") +aura_env.group = "party" +if IsInGroup() and not IsInRaid() then + aura_env.group = "party" +elseif IsInRaid() then + aura_env.group = "raid" +end + +aura_env.frameTable = {} + +-- Send this function a group/raid member's unitID or GUID and it will return their raid frame. +function aura_env.GetFrame(target) + if not UnitExists(target) then + if type(target) == "string" and target:find("Player") then + target = select(6, GetPlayerInfoByGUID(target)) + else + return + end + end + --ShadowUF + if IsAddOnLoaded("ShadowedUnitFrames") then + if ShadowUF.enabledUnits.raid then + for _, frame in pairs(ShadowUF.Units.unitFrames) do + if frame.unitType == "raid" and frame:IsVisible() and frame.unit and UnitIsUnit(frame.unit, target) + then + return frame + end + end + end + end + -- CompactRaid + if IsAddOnLoaded("CompactRaid") then + return CompactRaid:FindUnitFrame(target) + end + -- Healbot + if IsAddOnLoaded("HealBot") then + for _, frame in pairs(HealBot_Unit_Button) do + if UnitIsUnit(frame.unit, target) then + return frame + end + end + end + -- Vuhdo + if IsAddOnLoaded("VuhDo") and VUHDO_CONFIG["SHOW_PANELS"] then + for _, v in pairs(VUHDO_UNIT_BUTTONS) do + if v[1].raidid and UnitIsUnit(v[1].raidid, target) then + return v[1] + end + end + end + if IsAddOnLoaded("Grid") then + for _, frame in pairs(Grid.modules.GridFrame.registeredFrames) do + if frame:IsVisible() then + if frame.unit and UnitIsUnit(frame.unit, target) then + return frame + end + end + end + end + --Grid2 + if IsAddOnLoaded("Grid2") then + for _, frame in pairs(Grid2Frame.registeredFrames) do + if frame:IsVisible() then + if frame.unit and UnitIsUnit(frame.unit, target) then + return frame + end + end + end + end + -- ElvUI + if ElvUF then + for _, frame in pairs(ElvUF.objects) do + if (frame.unitframeType == "raid" + or frame.unitframeType == "party" + or frame.unitframeType == "raid40" + ) + and frame:IsVisible() and frame.unit and UnitIsUnit(frame.unit, target) + then + return frame + end + end +end +-- bdGrid +if IsAddOnLoaded("bdGrid") then + for _, frame in pairs(oUF_bdGridRaid) do + if UnitIsUnit(frame.unit, target) then + return frame + end + end +end +--Lastly, default frames +if CompactRaidFrameContainer.groupMode == "flush" then + for _, frame in pairs(CompactRaidFrameContainer.flowFrames) do + if frame.unit and frame:IsVisible() and UnitIsUnit(frame.unit, target) then + return frame + end + end +else + for i = 1, 8 do + for j = 1, 5 do + local frame = _G["CompactRaidGroup"..i.."Member"..j] + if frame:IsVisible() and frame.unit and UnitIsUnit(frame.unit, target) + then + return frame + end + end + end +end +-- debug - uncomment below if you're seeing issues +--print("GlowOnDemand (WA) - No frame found. Target sent: ".. target) +end + +local frame = aura_env.GetFrame(aura_env.statee.name) +if frame then + local LBG = LibStub("LibButtonGlow-1.0") + table.insert(aura_env.frameTable, frame) + LBG.ShowOverlayGlow(frame) +end + +local frame = aura_env.GetFrame(aura_env.statee.name) +local LBG = LibStub("LibButtonGlow-1.0") +for i, v in ipairs(aura_env.frameTable) do + if v == frame then + table.remove(aura_env.frameTable, i) + break + end +end +LBG.HideOverlayGlow(frame) + +function(t) + if not t[1] then + if #aura_env.frameTable > 0 then + for _, v in ipairs(aura_env.frameTable) do + local LBG = LibStub("LibButtonGlow-1.0") + LBG.HideOverlayGlow(v) + end + end + aura_env.frameTable = {} + end + return t[1] +end diff --git a/Random Trash/Hashing/1.lua b/WeakAuras/Projects/Random Trash/Hashing/1.lua similarity index 96% rename from Random Trash/Hashing/1.lua rename to WeakAuras/Projects/Random Trash/Hashing/1.lua index 365f6db..6cf9774 100644 --- a/Random Trash/Hashing/1.lua +++ b/WeakAuras/Projects/Random Trash/Hashing/1.lua @@ -1,171 +1,171 @@ -local cc = { - "Gnaw", - "Hungering Cold", - "Bash", - "Cyclone", - "Entangling Roots", - "Hibernate", - "Maim", - "Pounce", - "Entrapment", - "Freezing Trap", - "Pin", - "Scare Beast", - "Scatter Shot", - "Intimidation", - "Ravage", - "Sonic Blast", - "Wyvern Sting", - "Deep Freeze", - "Dragon's Breath", - "Frost Nova", - "Polymorph", - "Shattered Barrier", - "Slow", - "Frostbolt", - "Hammer of Justice", - "Holy Wrath", - "Repentance", - "Seal of Justice", - "Turn Evil", - "Mind Control", - "Psychic Horror", - "Psychic Scream", - "Shackle Undead", - "Holy Word: Chastise", - "Sin and Punishment", - "Blind", - "Cheap Shot", - "Gouge", - "Kidney Shot", - "Sap", - "Earthbind Totem", - "Stoneclaw Totem", - "Hex", - "Banish", - "Death Coil", - "Fear", - "Howl of Terror", - "Intercept", - "Seduction", - "Shadowfury", - "Charge", - "Concussion Blow", - "Hamstring", - "Improved Hamstring", - "Intimidating Shout", - "Shockwave", -} -local hashtable = {} -local spellarray = {} -local function tonum(cchar) - if cchar == ":" then return 58 end - if cchar == "-" then return 45 end - if cchar == "!" then return 32 end - if cchar == "," then return 44 end - - if cchar == "0" then return 48 end - if cchar == "1" then return 49 end - if cchar == "2" then return 50 end - if cchar == "3" then return 51 end - if cchar == "4" then return 52 end - if cchar == "5" then return 53 end - if cchar == "6" then return 54 end - if cchar == "7" then return 55 end - if cchar == "8" then return 56 end - if cchar == "9" then return 57 end - - if cchar == "A" then return 65 end - if cchar == "B" then return 66 end - if cchar == "C" then return 67 end - if cchar == "D" then return 68 end - if cchar == "E" then return 69 end - if cchar == "F" then return 70 end - if cchar == "G" then return 71 end - if cchar == "H" then return 72 end - if cchar == "I" then return 73 end - if cchar == "J" then return 74 end - if cchar == "K" then return 75 end - if cchar == "L" then return 76 end - if cchar == "M" then return 77 end - if cchar == "N" then return 78 end - if cchar == "O" then return 79 end - if cchar == "P" then return 80 end - if cchar == "Q" then return 81 end - if cchar == "R" then return 82 end - if cchar == "S" then return 83 end - if cchar == "T" then return 84 end - if cchar == "U" then return 85 end - if cchar == "V" then return 86 end - if cchar == "W" then return 87 end - if cchar == "X" then return 88 end - if cchar == "Y" then return 89 end - if cchar == "Z" then return 90 end - - if cchar == "a" then return 97 end - if cchar == "b" then return 98 end - if cchar == "c" then return 99 end - if cchar == "d" then return 100 end - if cchar == "e" then return 101 end - if cchar == "f" then return 102 end - if cchar == "g" then return 103 end - if cchar == "h" then return 104 end - if cchar == "i" then return 105 end - if cchar == "j" then return 106 end - if cchar == "k" then return 107 end - if cchar == "l" then return 108 end - if cchar == "m" then return 109 end - if cchar == "n" then return 110 end - if cchar == "o" then return 111 end - if cchar == "p" then return 112 end - if cchar == "q" then return 113 end - if cchar == "r" then return 114 end - if cchar == "s" then return 115 end - if cchar == "t" then return 116 end - if cchar == "u" then return 117 end - if cchar == "v" then return 118 end - if cchar == "w" then return 119 end - if cchar == "x" then return 120 end - if cchar == "y" then return 121 end - if cchar == "z" then return 122 end -end - -local function findcollision(hash_table, array) - local collisions = 0 - for k, v in ipairs(hash_table) do - for i = 1, table.getn(hash_table) do - if i ~= k then - if hash_table[i] == hash_table[k] then - collisions = collisions + 1 - print(hash_table[i], hash_table[k], i, k, array[i], array[k]) - end - end - end - end - return collisions -end - -local function tohash(tempvar) - local charTable = {} - local hash = 0 - for char in tempvar:gmatch("%a") do - charTable[#charTable + 1] = char - hash = hash + tonum(char) - hash = hash / table.getn(charTable) - end - hash = math.floor(hash * 10000) - return hash - --print(spellarray[hash], hash) -end - -local function checkbase(spell) - if spellarray[tohash(spell)] == nil then return 0 end - if spellarray[tohash(spell)] == spell then return 1 end -end - -for k, v in ipairs(cc) do - local hash = tohash(v) - hashtable[#hashtable] = hash - spellarray[hash] = v -end -findcollision(hashtable, cc) +local cc = { + "Gnaw", + "Hungering Cold", + "Bash", + "Cyclone", + "Entangling Roots", + "Hibernate", + "Maim", + "Pounce", + "Entrapment", + "Freezing Trap", + "Pin", + "Scare Beast", + "Scatter Shot", + "Intimidation", + "Ravage", + "Sonic Blast", + "Wyvern Sting", + "Deep Freeze", + "Dragon's Breath", + "Frost Nova", + "Polymorph", + "Shattered Barrier", + "Slow", + "Frostbolt", + "Hammer of Justice", + "Holy Wrath", + "Repentance", + "Seal of Justice", + "Turn Evil", + "Mind Control", + "Psychic Horror", + "Psychic Scream", + "Shackle Undead", + "Holy Word: Chastise", + "Sin and Punishment", + "Blind", + "Cheap Shot", + "Gouge", + "Kidney Shot", + "Sap", + "Earthbind Totem", + "Stoneclaw Totem", + "Hex", + "Banish", + "Death Coil", + "Fear", + "Howl of Terror", + "Intercept", + "Seduction", + "Shadowfury", + "Charge", + "Concussion Blow", + "Hamstring", + "Improved Hamstring", + "Intimidating Shout", + "Shockwave", +} +local hashtable = {} +local spellarray = {} +local function tonum(cchar) + if cchar == ":" then return 58 end + if cchar == "-" then return 45 end + if cchar == "!" then return 32 end + if cchar == "," then return 44 end + + if cchar == "0" then return 48 end + if cchar == "1" then return 49 end + if cchar == "2" then return 50 end + if cchar == "3" then return 51 end + if cchar == "4" then return 52 end + if cchar == "5" then return 53 end + if cchar == "6" then return 54 end + if cchar == "7" then return 55 end + if cchar == "8" then return 56 end + if cchar == "9" then return 57 end + + if cchar == "A" then return 65 end + if cchar == "B" then return 66 end + if cchar == "C" then return 67 end + if cchar == "D" then return 68 end + if cchar == "E" then return 69 end + if cchar == "F" then return 70 end + if cchar == "G" then return 71 end + if cchar == "H" then return 72 end + if cchar == "I" then return 73 end + if cchar == "J" then return 74 end + if cchar == "K" then return 75 end + if cchar == "L" then return 76 end + if cchar == "M" then return 77 end + if cchar == "N" then return 78 end + if cchar == "O" then return 79 end + if cchar == "P" then return 80 end + if cchar == "Q" then return 81 end + if cchar == "R" then return 82 end + if cchar == "S" then return 83 end + if cchar == "T" then return 84 end + if cchar == "U" then return 85 end + if cchar == "V" then return 86 end + if cchar == "W" then return 87 end + if cchar == "X" then return 88 end + if cchar == "Y" then return 89 end + if cchar == "Z" then return 90 end + + if cchar == "a" then return 97 end + if cchar == "b" then return 98 end + if cchar == "c" then return 99 end + if cchar == "d" then return 100 end + if cchar == "e" then return 101 end + if cchar == "f" then return 102 end + if cchar == "g" then return 103 end + if cchar == "h" then return 104 end + if cchar == "i" then return 105 end + if cchar == "j" then return 106 end + if cchar == "k" then return 107 end + if cchar == "l" then return 108 end + if cchar == "m" then return 109 end + if cchar == "n" then return 110 end + if cchar == "o" then return 111 end + if cchar == "p" then return 112 end + if cchar == "q" then return 113 end + if cchar == "r" then return 114 end + if cchar == "s" then return 115 end + if cchar == "t" then return 116 end + if cchar == "u" then return 117 end + if cchar == "v" then return 118 end + if cchar == "w" then return 119 end + if cchar == "x" then return 120 end + if cchar == "y" then return 121 end + if cchar == "z" then return 122 end +end + +local function findcollision(hash_table, array) + local collisions = 0 + for k, v in ipairs(hash_table) do + for i = 1, table.getn(hash_table) do + if i ~= k then + if hash_table[i] == hash_table[k] then + collisions = collisions + 1 + print(hash_table[i], hash_table[k], i, k, array[i], array[k]) + end + end + end + end + return collisions +end + +local function tohash(tempvar) + local charTable = {} + local hash = 0 + for char in tempvar:gmatch("%a") do + charTable[#charTable + 1] = char + hash = hash + tonum(char) + hash = hash / table.getn(charTable) + end + hash = math.floor(hash * 10000) + return hash + --print(spellarray[hash], hash) +end + +local function checkbase(spell) + if spellarray[tohash(spell)] == nil then return 0 end + if spellarray[tohash(spell)] == spell then return 1 end +end + +for k, v in ipairs(cc) do + local hash = tohash(v) + hashtable[#hashtable] = hash + spellarray[hash] = v +end +findcollision(hashtable, cc) diff --git a/Random Trash/Hashing/2.lua b/WeakAuras/Projects/Random Trash/Hashing/2.lua similarity index 97% rename from Random Trash/Hashing/2.lua rename to WeakAuras/Projects/Random Trash/Hashing/2.lua index 03daa70..054a92a 100644 --- a/Random Trash/Hashing/2.lua +++ b/WeakAuras/Projects/Random Trash/Hashing/2.lua @@ -1,143 +1,143 @@ -COMBAT_LOG_EVENT_UNFILTERED -function(...) - local caster = select(6, ...) - if caster == UnitName("player") then - local subevent = select(3, ...); local spell = select(14, ...) - print(subevent, spell) - print(aura_env.checkbase(spell)) - if aura_env.checkbase(spell) == 1 then - aura_env.debuffspell = spell - end - end -end - -DISPLAY -function() - if aura_env.debuffspell ~= "" then - local time = GetTime() * 10 - local exptime = select(6, UnitDebuff("player", aura_env.debuffspell))) * 10 - local remtime = math.floor(exptime - time) - if remtime <= 0 then - aura_env.debuffspell = "" - end - return remtime - else - return "" - end -end - -INIT -aura_env.debuffspell = "" -local cc = -{ - "Gnaw", "Hungering Cold", "Bash", "Cyclone", "Entangling Roots", "Hibernate", "Maim", "Pounce", "Entrapment", "Freezing Trap", "Pin", "Scare Beast", "Scatter Shot", "Intimidation", "Ravage", "Sonic Blast", "Wyvern Sting", "Deep Freeze", "Dragon's Breath", "Frost Nova", "Polymorph", "Shattered Barrier", "Slow", "Frostbolt", "Hammer of Justice", "Holy Wrath", "Repentance", "Seal of Justice", "Turn Evil", "Mind Control", "Psychic Horror", "Psychic Scream", "Shackle Undead", "Holy Word: Chastise", "Sin and Punishment", "Blind", "Cheap Shot", "Gouge", "Kidney Shot", "Sap", "Earthbind Totem", "Stoneclaw Totem", "Hex", "Banish", "Death Coil", "Fear", "Howl of Terror", "Intercept", "Seduction", "Shadowfury", "Charge", "Concussion Blow", "Hamstring", "Improved Hamstring", "Intimidating Shout", "Shockwave", "Binding Shot", "Thunderstrike", "Glowing Fragment" -} -local hashtable = {} -aura_env.spellarray = {} -local function tonum(cchar) - if cchar == ":" then return 58 end - if cchar == "-" then return 45 end - if cchar == "!" then return 32 end - if cchar == "," then return 44 end - - if cchar == "0" then return 48 end - if cchar == "1" then return 49 end - if cchar == "2" then return 50 end - if cchar == "3" then return 51 end - if cchar == "4" then return 52 end - if cchar == "5" then return 53 end - if cchar == "6" then return 54 end - if cchar == "7" then return 55 end - if cchar == "8" then return 56 end - if cchar == "9" then return 57 end - - if cchar == "A" then return 65 end - if cchar == "B" then return 66 end - if cchar == "C" then return 67 end - if cchar == "D" then return 68 end - if cchar == "E" then return 69 end - if cchar == "F" then return 70 end - if cchar == "G" then return 71 end - if cchar == "H" then return 72 end - if cchar == "I" then return 73 end - if cchar == "J" then return 74 end - if cchar == "K" then return 75 end - if cchar == "L" then return 76 end - if cchar == "M" then return 77 end - if cchar == "N" then return 78 end - if cchar == "O" then return 79 end - if cchar == "P" then return 80 end - if cchar == "Q" then return 81 end - if cchar == "R" then return 82 end - if cchar == "S" then return 83 end - if cchar == "T" then return 84 end - if cchar == "U" then return 85 end - if cchar == "V" then return 86 end - if cchar == "W" then return 87 end - if cchar == "X" then return 88 end - if cchar == "Y" then return 89 end - if cchar == "Z" then return 90 end - - if cchar == "a" then return 97 end - if cchar == "b" then return 98 end - if cchar == "c" then return 99 end - if cchar == "d" then return 100 end - if cchar == "e" then return 101 end - if cchar == "f" then return 102 end - if cchar == "g" then return 103 end - if cchar == "h" then return 104 end - if cchar == "i" then return 105 end - if cchar == "j" then return 106 end - if cchar == "k" then return 107 end - if cchar == "l" then return 108 end - if cchar == "m" then return 109 end - if cchar == "n" then return 110 end - if cchar == "o" then return 111 end - if cchar == "p" then return 112 end - if cchar == "q" then return 113 end - if cchar == "r" then return 114 end - if cchar == "s" then return 115 end - if cchar == "t" then return 116 end - if cchar == "u" then return 117 end - if cchar == "v" then return 118 end - if cchar == "w" then return 119 end - if cchar == "x" then return 120 end - if cchar == "y" then return 121 end - if cchar == "z" then return 122 end -end -local function findcollision(hash_table, array) - local collisions = 0 - for k,v in ipairs(hash_table) do - for i = 1, table.getn(hash_table) do - if i ~= k then - if hash_table[i] == hash_table[k] then - collisions = collisions + 1 - print(hash_table[i], hash_table[k], i, k, array[i], array[k]) - end - end - end - end - return collisions -end -aura_env.tohash = function(tempvar) - local charTable = {} - local hash = 0 - for char in tempvar:gmatch("%a") do - charTable[#charTable + 1] = char - hash = hash + tonum(char) - hash = hash / table.getn(charTable) - end - hash = math.floor(hash * 10000) - return hash - --print(aura_env.spellarray[hash], hash) -end -aura_env.checkbase = function(spell) - if aura_env.spellarray[aura_env.tohash(spell)] == nil then return 0 end - if aura_env.spellarray[aura_env.tohash(spell)] == spell then return 1 end -end -for k,v in ipairs(cc) do - local hash = aura_env.tohash(v) - hashtable[#hashtable] = hash - aura_env.spellarray[hash] = v -end +COMBAT_LOG_EVENT_UNFILTERED +function(...) + local caster = select(6, ...) + if caster == UnitName("player") then + local subevent = select(3, ...); local spell = select(14, ...) + print(subevent, spell) + print(aura_env.checkbase(spell)) + if aura_env.checkbase(spell) == 1 then + aura_env.debuffspell = spell + end + end +end + +DISPLAY +function() + if aura_env.debuffspell ~= "" then + local time = GetTime() * 10 + local exptime = select(6, UnitDebuff("player", aura_env.debuffspell))) * 10 + local remtime = math.floor(exptime - time) + if remtime <= 0 then + aura_env.debuffspell = "" + end + return remtime + else + return "" + end +end + +INIT +aura_env.debuffspell = "" +local cc = +{ + "Gnaw", "Hungering Cold", "Bash", "Cyclone", "Entangling Roots", "Hibernate", "Maim", "Pounce", "Entrapment", "Freezing Trap", "Pin", "Scare Beast", "Scatter Shot", "Intimidation", "Ravage", "Sonic Blast", "Wyvern Sting", "Deep Freeze", "Dragon's Breath", "Frost Nova", "Polymorph", "Shattered Barrier", "Slow", "Frostbolt", "Hammer of Justice", "Holy Wrath", "Repentance", "Seal of Justice", "Turn Evil", "Mind Control", "Psychic Horror", "Psychic Scream", "Shackle Undead", "Holy Word: Chastise", "Sin and Punishment", "Blind", "Cheap Shot", "Gouge", "Kidney Shot", "Sap", "Earthbind Totem", "Stoneclaw Totem", "Hex", "Banish", "Death Coil", "Fear", "Howl of Terror", "Intercept", "Seduction", "Shadowfury", "Charge", "Concussion Blow", "Hamstring", "Improved Hamstring", "Intimidating Shout", "Shockwave", "Binding Shot", "Thunderstrike", "Glowing Fragment" +} +local hashtable = {} +aura_env.spellarray = {} +local function tonum(cchar) + if cchar == ":" then return 58 end + if cchar == "-" then return 45 end + if cchar == "!" then return 32 end + if cchar == "," then return 44 end + + if cchar == "0" then return 48 end + if cchar == "1" then return 49 end + if cchar == "2" then return 50 end + if cchar == "3" then return 51 end + if cchar == "4" then return 52 end + if cchar == "5" then return 53 end + if cchar == "6" then return 54 end + if cchar == "7" then return 55 end + if cchar == "8" then return 56 end + if cchar == "9" then return 57 end + + if cchar == "A" then return 65 end + if cchar == "B" then return 66 end + if cchar == "C" then return 67 end + if cchar == "D" then return 68 end + if cchar == "E" then return 69 end + if cchar == "F" then return 70 end + if cchar == "G" then return 71 end + if cchar == "H" then return 72 end + if cchar == "I" then return 73 end + if cchar == "J" then return 74 end + if cchar == "K" then return 75 end + if cchar == "L" then return 76 end + if cchar == "M" then return 77 end + if cchar == "N" then return 78 end + if cchar == "O" then return 79 end + if cchar == "P" then return 80 end + if cchar == "Q" then return 81 end + if cchar == "R" then return 82 end + if cchar == "S" then return 83 end + if cchar == "T" then return 84 end + if cchar == "U" then return 85 end + if cchar == "V" then return 86 end + if cchar == "W" then return 87 end + if cchar == "X" then return 88 end + if cchar == "Y" then return 89 end + if cchar == "Z" then return 90 end + + if cchar == "a" then return 97 end + if cchar == "b" then return 98 end + if cchar == "c" then return 99 end + if cchar == "d" then return 100 end + if cchar == "e" then return 101 end + if cchar == "f" then return 102 end + if cchar == "g" then return 103 end + if cchar == "h" then return 104 end + if cchar == "i" then return 105 end + if cchar == "j" then return 106 end + if cchar == "k" then return 107 end + if cchar == "l" then return 108 end + if cchar == "m" then return 109 end + if cchar == "n" then return 110 end + if cchar == "o" then return 111 end + if cchar == "p" then return 112 end + if cchar == "q" then return 113 end + if cchar == "r" then return 114 end + if cchar == "s" then return 115 end + if cchar == "t" then return 116 end + if cchar == "u" then return 117 end + if cchar == "v" then return 118 end + if cchar == "w" then return 119 end + if cchar == "x" then return 120 end + if cchar == "y" then return 121 end + if cchar == "z" then return 122 end +end +local function findcollision(hash_table, array) + local collisions = 0 + for k,v in ipairs(hash_table) do + for i = 1, table.getn(hash_table) do + if i ~= k then + if hash_table[i] == hash_table[k] then + collisions = collisions + 1 + print(hash_table[i], hash_table[k], i, k, array[i], array[k]) + end + end + end + end + return collisions +end +aura_env.tohash = function(tempvar) + local charTable = {} + local hash = 0 + for char in tempvar:gmatch("%a") do + charTable[#charTable + 1] = char + hash = hash + tonum(char) + hash = hash / table.getn(charTable) + end + hash = math.floor(hash * 10000) + return hash + --print(aura_env.spellarray[hash], hash) +end +aura_env.checkbase = function(spell) + if aura_env.spellarray[aura_env.tohash(spell)] == nil then return 0 end + if aura_env.spellarray[aura_env.tohash(spell)] == spell then return 1 end +end +for k,v in ipairs(cc) do + local hash = aura_env.tohash(v) + hashtable[#hashtable] = hash + aura_env.spellarray[hash] = v +end findcollision(hashtable, cc) \ No newline at end of file diff --git a/Random Trash/Herbs/Aethril.txt b/WeakAuras/Projects/Random Trash/Herbs/Aethril.txt similarity index 95% rename from Random Trash/Herbs/Aethril.txt rename to WeakAuras/Projects/Random Trash/Herbs/Aethril.txt index 0f80659..ba4e2d6 100644 --- a/Random Trash/Herbs/Aethril.txt +++ b/WeakAuras/Projects/Random Trash/Herbs/Aethril.txt @@ -1,150 +1,150 @@ -/way Azsuna 52.44 12.55 -/way Azsuna 43.81 13.48 -/way Azsuna 43.5 11.55 -/way Azsuna 43.54 10.41 -/way Azsuna 44.04 10.02 -/way Azsuna 45.05 8.91 -/way Azsuna 45.31 9.62 -/way Azsuna 50.71 12.66 -/way Azsuna 51.42 10.39 -/way Azsuna 51.03 11.49 -/way Azsuna 52.24 13.93 -/way Azsuna 53.1 13.66 -/way Azsuna 54.52 13.09 -/way Azsuna 53.98 15.09 -/way Azsuna 57.19 18.32 -/way Azsuna 57.95 19.85 -/way Azsuna 61.05 17.05 -/way Azsuna 62.21 16.11 -/way Azsuna 62.26 17.91 -/way Azsuna 61.86 18.55 -/way Azsuna 59.87 20.07 -/way Azsuna 60.17 20.82 -/way Azsuna 60.31 21.25 -/way Azsuna 58.31 24.61 -/way Azsuna 58.91 22.75 -/way Azsuna 59.92 22.74 -/way Azsuna 61.61 26.13 -/way Azsuna 61.21 27.72 -/way Azsuna 61.95 30.74 -/way Azsuna 63.08 30.76 -/way Azsuna 62.57 28.52 -/way Azsuna 64.55 27.75 -/way Azsuna 65.58 38.31 -/way Azsuna 66.38 38.49 -/way Azsuna 66.44 35.73 -/way Azsuna 65.28 35.11 -/way Azsuna 64.73 34.57 -/way Azsuna 63.54 34.19 -/way Azsuna 64.81 45.69 -/way Azsuna 63.1 46.83 -/way Azsuna 59.34 49.85 -/way Azsuna 56.61 52.15 -/way Azsuna 53.11 54.38 -/way Azsuna 51.66 55.68 -/way Azsuna 50.1 55.25 -/way Azsuna 50.05 56.35 -/way Azsuna 49.08 55.87 -/way Azsuna 36.28 21.97 -/way Azsuna 36.07 23.09 -/way Azsuna 35.3 23.32 -/way Azsuna 35.24 25.27 -/way Azsuna 35.84 26.66 -/way Azsuna 35.28 28.34 -/way Azsuna 38.92 33.69 -/way Azsuna 38.76 32.81 -/way Azsuna 39.8 32.01 -/way Azsuna 38.58 31.7 -/way Azsuna 37.15 31.49 -/way Azsuna 37.81 33.03 -/way Azsuna 38.91 33.95 -/way Azsuna 46.87 32.18 -/way Azsuna 46.45 33.24 -/way Azsuna 42.85 29.84 -/way Azsuna 42.2 30.7 -/way Azsuna 41.42 31.81 -/way Azsuna 40.38 32.88 -/way Azsuna 40.63 35.62 -/way Azsuna 43.97 31.84 -/way Azsuna 45.87 28.71 -/way Azsuna 44.62 30.16 -/way Azsuna 44.16 31.22 -/way Azsuna 45.01 33.8 -/way Azsuna 44.82 35.66 -/way Azsuna 44.33 38.18 -/way Azsuna 44.13 36.79 -/way Azsuna 43.29 36.63 -/way Azsuna 58.5 44.5 -/way Azsuna 56.98 46.04 -/way Azsuna 56.87 47.43 -/way Azsuna 58.08 48.77 -/way Azsuna 58.1 47.82 -/way Azsuna 59.82 48.78 -/way Azsuna 61.93 50.54 -/way Azsuna 60.81 49.52 -/way Azsuna 60.13 50.52 -/way Azsuna 58.7 50.72 -/way Azsuna 57.92 51.18 -/way Azsuna 56.76 51.49 -/way Azsuna 57.02 53.1 -/way Azsuna 60.5 55.71 -/way Azsuna 61.23 55.29 -/way Azsuna 62.2 54.63 -/way Azsuna 62.35 53.03 -/way Azsuna 61.71 51.69 -/way Azsuna 62.88 48.79 -/way Azsuna 59.03 16.36 -/way Azsuna 56.05 52.99 -/way Azsuna 54.9 54.78 -/way Azsuna 46.89 48.44 -/way Azsuna 48.12 52.99 -/way Azsuna 50.61 58.06 -/way Azsuna 65.48 47.52 -/way Azsuna 66.67 48.25 -/way Azsuna 67.25 46.04 -/way Azsuna 67.21 43.27 -/way Azsuna 56.87 48.7 -/way Azsuna 47.7 38.02 -/way Azsuna 45.05 37.62 -/way Azsuna 48.4 32.78 -/way Azsuna 51.98 31.45 -/way Azsuna 57.2 27.62 -/way Azsuna 61.29 29.89 -/way Azsuna 64.67 31.6 -/way Azsuna 60.67 23.86 -/way Azsuna 62.79 25.61 -/way Azsuna 66.4 36.85 -/way Azsuna 63.3 35.71 -/way Azsuna 54.11 30.37 -/way Azsuna 57.92 33.75 -/way Azsuna 42.81 10.38 -/way Azsuna 48.74 10.63 -/way Azsuna 40.78 11.45 -/way Azsuna 39.74 13.5 -/way Azsuna 35.84 15.6 -/way Azsuna 35.53 22.66 -/way Azsuna 35.42 27.64 -/way Azsuna 32.97 32.94 -/way Azsuna 38.01 35.61 -/way Azsuna 52.67 26.74 -/way Azsuna 54.31 17.67 -/way Azsuna 56.06 19.39 -/way Azsuna 51.37 15.24 -/way Azsuna 45.71 15.14 -/way Azsuna 46.61 16.25 -/way Azsuna 48.01 12.51 -/way Azsuna 44.59 32.83 -/way Azsuna 41.47 33.61 -/way Azsuna 42.3 36.7 -/way Azsuna 40.85 38.78 -/way Azsuna 39.97 53.3 -/way Azsuna 48.93 43.77 -/way Azsuna 60.71 36.87 -/way Azsuna 61.83 39.44 -/way Azsuna 56.71 64.6 -/way Azsuna 57 62.25 -/way Azsuna 62.66 54.86 -/way Azsuna 61.84 55.45 -/way Azsuna 56.88 61.05 -/way Azsuna 52.56 60.68 +/way Azsuna 52.44 12.55 +/way Azsuna 43.81 13.48 +/way Azsuna 43.5 11.55 +/way Azsuna 43.54 10.41 +/way Azsuna 44.04 10.02 +/way Azsuna 45.05 8.91 +/way Azsuna 45.31 9.62 +/way Azsuna 50.71 12.66 +/way Azsuna 51.42 10.39 +/way Azsuna 51.03 11.49 +/way Azsuna 52.24 13.93 +/way Azsuna 53.1 13.66 +/way Azsuna 54.52 13.09 +/way Azsuna 53.98 15.09 +/way Azsuna 57.19 18.32 +/way Azsuna 57.95 19.85 +/way Azsuna 61.05 17.05 +/way Azsuna 62.21 16.11 +/way Azsuna 62.26 17.91 +/way Azsuna 61.86 18.55 +/way Azsuna 59.87 20.07 +/way Azsuna 60.17 20.82 +/way Azsuna 60.31 21.25 +/way Azsuna 58.31 24.61 +/way Azsuna 58.91 22.75 +/way Azsuna 59.92 22.74 +/way Azsuna 61.61 26.13 +/way Azsuna 61.21 27.72 +/way Azsuna 61.95 30.74 +/way Azsuna 63.08 30.76 +/way Azsuna 62.57 28.52 +/way Azsuna 64.55 27.75 +/way Azsuna 65.58 38.31 +/way Azsuna 66.38 38.49 +/way Azsuna 66.44 35.73 +/way Azsuna 65.28 35.11 +/way Azsuna 64.73 34.57 +/way Azsuna 63.54 34.19 +/way Azsuna 64.81 45.69 +/way Azsuna 63.1 46.83 +/way Azsuna 59.34 49.85 +/way Azsuna 56.61 52.15 +/way Azsuna 53.11 54.38 +/way Azsuna 51.66 55.68 +/way Azsuna 50.1 55.25 +/way Azsuna 50.05 56.35 +/way Azsuna 49.08 55.87 +/way Azsuna 36.28 21.97 +/way Azsuna 36.07 23.09 +/way Azsuna 35.3 23.32 +/way Azsuna 35.24 25.27 +/way Azsuna 35.84 26.66 +/way Azsuna 35.28 28.34 +/way Azsuna 38.92 33.69 +/way Azsuna 38.76 32.81 +/way Azsuna 39.8 32.01 +/way Azsuna 38.58 31.7 +/way Azsuna 37.15 31.49 +/way Azsuna 37.81 33.03 +/way Azsuna 38.91 33.95 +/way Azsuna 46.87 32.18 +/way Azsuna 46.45 33.24 +/way Azsuna 42.85 29.84 +/way Azsuna 42.2 30.7 +/way Azsuna 41.42 31.81 +/way Azsuna 40.38 32.88 +/way Azsuna 40.63 35.62 +/way Azsuna 43.97 31.84 +/way Azsuna 45.87 28.71 +/way Azsuna 44.62 30.16 +/way Azsuna 44.16 31.22 +/way Azsuna 45.01 33.8 +/way Azsuna 44.82 35.66 +/way Azsuna 44.33 38.18 +/way Azsuna 44.13 36.79 +/way Azsuna 43.29 36.63 +/way Azsuna 58.5 44.5 +/way Azsuna 56.98 46.04 +/way Azsuna 56.87 47.43 +/way Azsuna 58.08 48.77 +/way Azsuna 58.1 47.82 +/way Azsuna 59.82 48.78 +/way Azsuna 61.93 50.54 +/way Azsuna 60.81 49.52 +/way Azsuna 60.13 50.52 +/way Azsuna 58.7 50.72 +/way Azsuna 57.92 51.18 +/way Azsuna 56.76 51.49 +/way Azsuna 57.02 53.1 +/way Azsuna 60.5 55.71 +/way Azsuna 61.23 55.29 +/way Azsuna 62.2 54.63 +/way Azsuna 62.35 53.03 +/way Azsuna 61.71 51.69 +/way Azsuna 62.88 48.79 +/way Azsuna 59.03 16.36 +/way Azsuna 56.05 52.99 +/way Azsuna 54.9 54.78 +/way Azsuna 46.89 48.44 +/way Azsuna 48.12 52.99 +/way Azsuna 50.61 58.06 +/way Azsuna 65.48 47.52 +/way Azsuna 66.67 48.25 +/way Azsuna 67.25 46.04 +/way Azsuna 67.21 43.27 +/way Azsuna 56.87 48.7 +/way Azsuna 47.7 38.02 +/way Azsuna 45.05 37.62 +/way Azsuna 48.4 32.78 +/way Azsuna 51.98 31.45 +/way Azsuna 57.2 27.62 +/way Azsuna 61.29 29.89 +/way Azsuna 64.67 31.6 +/way Azsuna 60.67 23.86 +/way Azsuna 62.79 25.61 +/way Azsuna 66.4 36.85 +/way Azsuna 63.3 35.71 +/way Azsuna 54.11 30.37 +/way Azsuna 57.92 33.75 +/way Azsuna 42.81 10.38 +/way Azsuna 48.74 10.63 +/way Azsuna 40.78 11.45 +/way Azsuna 39.74 13.5 +/way Azsuna 35.84 15.6 +/way Azsuna 35.53 22.66 +/way Azsuna 35.42 27.64 +/way Azsuna 32.97 32.94 +/way Azsuna 38.01 35.61 +/way Azsuna 52.67 26.74 +/way Azsuna 54.31 17.67 +/way Azsuna 56.06 19.39 +/way Azsuna 51.37 15.24 +/way Azsuna 45.71 15.14 +/way Azsuna 46.61 16.25 +/way Azsuna 48.01 12.51 +/way Azsuna 44.59 32.83 +/way Azsuna 41.47 33.61 +/way Azsuna 42.3 36.7 +/way Azsuna 40.85 38.78 +/way Azsuna 39.97 53.3 +/way Azsuna 48.93 43.77 +/way Azsuna 60.71 36.87 +/way Azsuna 61.83 39.44 +/way Azsuna 56.71 64.6 +/way Azsuna 57 62.25 +/way Azsuna 62.66 54.86 +/way Azsuna 61.84 55.45 +/way Azsuna 56.88 61.05 +/way Azsuna 52.56 60.68 /way Azsuna 46 61.02 \ No newline at end of file diff --git a/Random Trash/Herbs/Dreamleaf.txt b/WeakAuras/Projects/Random Trash/Herbs/Dreamleaf.txt similarity index 96% rename from Random Trash/Herbs/Dreamleaf.txt rename to WeakAuras/Projects/Random Trash/Herbs/Dreamleaf.txt index e1399e0..a669445 100644 --- a/Random Trash/Herbs/Dreamleaf.txt +++ b/WeakAuras/Projects/Random Trash/Herbs/Dreamleaf.txt @@ -1,200 +1,200 @@ -/way Val'Sharah 61.87 52.19 -/way Val'Sharah 60.2 53.05 -/way Val'Sharah 60.65 54.53 -/way Val'Sharah 59.47 55.87 -/way Val'Sharah 56.22 60.29 -/way Val'Sharah 56.95 61.33 -/way Val'Sharah 56.52 64.31 -/way Val'Sharah 58.38 65.51 -/way Val'Sharah 56.03 64.65 -/way Val'Sharah 55.53 70.26 -/way Val'Sharah 57.79 71.48 -/way Val'Sharah 59.03 69.43 -/way Val'Sharah 57.33 69.9 -/way Val'Sharah 55.39 68.84 -/way Val'Sharah 55.08 63.45 -/way Val'Sharah 52.34 61.54 -/way Val'Sharah 51.12 64.53 -/way Val'Sharah 54.28 62.65 -/way Val'Sharah 54.32 66.08 -/way Val'Sharah 58.53 61.45 -/way Val'Sharah 58.37 63.02 -/way Val'Sharah 59.24 65.05 -/way Val'Sharah 62.31 64.97 -/way Val'Sharah 63.37 67.79 -/way Val'Sharah 64.83 68.7 -/way Val'Sharah 68.37 63.92 -/way Val'Sharah 66.9 66.86 -/way Val'Sharah 67.08 68.7 -/way Val'Sharah 66.91 70.84 -/way Val'Sharah 65.61 71.3 -/way Val'Sharah 65.43 74.05 -/way Val'Sharah 66.57 73.67 -/way Val'Sharah 68.75 72.27 -/way Val'Sharah 67.56 72.17 -/way Val'Sharah 68.81 74.63 -/way Val'Sharah 67.77 75.19 -/way Val'Sharah 67.02 76.86 -/way Val'Sharah 65.7 75.96 -/way Val'Sharah 60.05 76.17 -/way Val'Sharah 56.95 76.95 -/way Val'Sharah 57.35 75.19 -/way Val'Sharah 58.36 73.27 -/way Val'Sharah 59.08 73.81 -/way Val'Sharah 60.66 75.82 -/way Val'Sharah 61.34 79.25 -/way Val'Sharah 62.71 80.38 -/way Val'Sharah 60.26 80.68 -/way Val'Sharah 59.23 82.19 -/way Val'Sharah 62.34 84.98 -/way Val'Sharah 58.92 88.3 -/way Val'Sharah 55.85 89.71 -/way Val'Sharah 56.13 87.83 -/way Val'Sharah 54.22 88.9 -/way Val'Sharah 53.37 87.68 -/way Val'Sharah 50.61 86.57 -/way Val'Sharah 49.98 83.55 -/way Val'Sharah 49.47 81.21 -/way Val'Sharah 50.49 79.7 -/way Val'Sharah 51.4 78.35 -/way Val'Sharah 52.52 75.98 -/way Val'Sharah 48.75 73.96 -/way Val'Sharah 48.14 72.49 -/way Val'Sharah 46.98 58.58 -/way Val'Sharah 43.72 57.99 -/way Val'Sharah 46.84 37.45 -/way Val'Sharah 46.85 39.36 -/way Val'Sharah 47.84 38.96 -/way Val'Sharah 48.45 40.92 -/way Val'Sharah 50.4 39.27 -/way Val'Sharah 50.43 40.57 -/way Val'Sharah 52.45 44.2 -/way Val'Sharah 54.73 47.17 -/way Val'Sharah 56.35 45.89 -/way Val'Sharah 54.9 41.74 -/way Val'Sharah 54.87 39.41 -/way Val'Sharah 56.71 40.19 -/way Val'Sharah 57.58 41.53 -/way Val'Sharah 58.36 41.66 -/way Val'Sharah 60.05 42.17 -/way Val'Sharah 61.65 43.31 -/way Val'Sharah 60.92 41.56 -/way Val'Sharah 62.24 44.16 -/way Val'Sharah 62.18 43.11 -/way Val'Sharah 64.04 40.91 -/way Val'Sharah 62.84 40.65 -/way Val'Sharah 63.51 38.93 -/way Val'Sharah 69.12 39.38 -/way Val'Sharah 70.92 38.4 -/way Val'Sharah 71.19 42.44 -/way Val'Sharah 72.93 44.69 -/way Val'Sharah 71.57 47.07 -/way Val'Sharah 69.24 45.68 -/way Val'Sharah 69.93 47.65 -/way Val'Sharah 68.74 48.58 -/way Val'Sharah 68.01 50.36 -/way Val'Sharah 70.59 51.95 -/way Val'Sharah 70.77 54.92 -/way Val'Sharah 71.17 56.39 -/way Val'Sharah 70.27 56.41 -/way Val'Sharah 69.1 55.12 -/way Val'Sharah 65.97 59.44 -/way Val'Sharah 65.88 56.5 -/way Val'Sharah 64.45 53.78 -/way Val'Sharah 63.19 56.73 -/way Val'Sharah 64.13 58.96 -/way Val'Sharah 65.55 61.24 -/way Val'Sharah 64.01 61.23 -/way Val'Sharah 64.35 75.33 -/way Val'Sharah 64.04 79.4 -/way Val'Sharah 65.31 79.67 -/way Val'Sharah 64.07 81.41 -/way Val'Sharah 62.41 82.04 -/way Val'Sharah 61.02 83.56 -/way Val'Sharah 59.89 83.19 -/way Val'Sharah 60.72 84.32 -/way Val'Sharah 61.72 84.3 -/way Val'Sharah 59.99 79.24 -/way Val'Sharah 56.12 79.23 -/way Val'Sharah 55.7 76.89 -/way Val'Sharah 51.19 72.26 -/way Val'Sharah 53.78 70.92 -/way Val'Sharah 52.44 72.53 -/way Val'Sharah 47.63 77.64 -/way Val'Sharah 49.85 74.92 -/way Val'Sharah 49.99 77.55 -/way Val'Sharah 47.43 76.36 -/way Val'Sharah 44.57 82.87 -/way Val'Sharah 44.59 86.64 -/way Val'Sharah 45.1 86.63 -/way Val'Sharah 44.31 85.05 -/way Val'Sharah 42.91 83.59 -/way Val'Sharah 42.69 81.24 -/way Val'Sharah 42.59 80.4 -/way Val'Sharah 41.57 81.13 -/way Val'Sharah 40.88 75.34 -/way Val'Sharah 50.44 53.49 -/way Val'Sharah 53.43 52.68 -/way Val'Sharah 55.29 50.86 -/way Val'Sharah 54.1 52.27 -/way Val'Sharah 53.37 51.14 -/way Val'Sharah 53.52 49.5 -/way Val'Sharah 52.4 49.71 -/way Val'Sharah 50.9 49.61 -/way Val'Sharah 47.8 52.24 -/way Val'Sharah 47.93 55.01 -/way Val'Sharah 46.89 53.79 -/way Val'Sharah 46.22 55.18 -/way Val'Sharah 46.32 56.82 -/way Val'Sharah 40.2 62.85 -/way Val'Sharah 40.35 60.93 -/way Val'Sharah 36.08 58.38 -/way Val'Sharah 35.03 60.53 -/way Val'Sharah 35.66 60.3 -/way Val'Sharah 40.75 60.72 -/way Val'Sharah 44.99 60.93 -/way Val'Sharah 43.77 60.96 -/way Val'Sharah 43.04 63.03 -/way Val'Sharah 41.88 63.67 -/way Val'Sharah 42.45 61.88 -/way Val'Sharah 43.65 60.82 -/way Val'Sharah 58.38 33.52 -/way Val'Sharah 41.66 54.31 -/way Val'Sharah 40.52 51.34 -/way Val'Sharah 37.56 54.61 -/way Val'Sharah 49.48 49.77 -/way Val'Sharah 51.33 41.98 -/way Val'Sharah 55.3 55.78 -/way Val'Sharah 61.99 30.91 -/way Val'Sharah 57.71 39.6 -/way Val'Sharah 69.54 37.38 -/way Val'Sharah 68.35 39.91 -/way Val'Sharah 62.37 48.14 -/way Val'Sharah 65.9 41.14 -/way Val'Sharah 73.55 52.84 -/way Val'Sharah 74.57 39.75 -/way Val'Sharah 72.1 49.22 -/way Val'Sharah 69.79 53.26 -/way Val'Sharah 67.27 60.55 -/way Val'Sharah 64.16 58.7 -/way Val'Sharah 54.76 57.01 -/way Val'Sharah 57.81 60.35 -/way Val'Sharah 48.01 69.08 -/way Val'Sharah 42.49 79.11 -/way Val'Sharah 41.64 69.85 -/way Val'Sharah 45.52 73.05 -/way Val'Sharah 50.98 82.3 -/way Val'Sharah 65.76 68.15 -/way Val'Sharah 63.63 64.98 -/way Val'Sharah 57.28 90.49 -/way Val'Sharah 55.64 84.34 -/way Val'Sharah 39.95 88.45 -/way Val'Sharah 44.02 82.51 -/way Val'Sharah 47.72 85.61 -/way Val'Sharah 50.24 84.23 -/way Val'Sharah 43.02 88.03 -/way Val'Sharah 46.15 83.47 -/way Val'Sharah 55.23 68.18 -/way Val'Sharah 22.55 64.61 -/way Val'Sharah 22.95 72.49 +/way Val'Sharah 61.87 52.19 +/way Val'Sharah 60.2 53.05 +/way Val'Sharah 60.65 54.53 +/way Val'Sharah 59.47 55.87 +/way Val'Sharah 56.22 60.29 +/way Val'Sharah 56.95 61.33 +/way Val'Sharah 56.52 64.31 +/way Val'Sharah 58.38 65.51 +/way Val'Sharah 56.03 64.65 +/way Val'Sharah 55.53 70.26 +/way Val'Sharah 57.79 71.48 +/way Val'Sharah 59.03 69.43 +/way Val'Sharah 57.33 69.9 +/way Val'Sharah 55.39 68.84 +/way Val'Sharah 55.08 63.45 +/way Val'Sharah 52.34 61.54 +/way Val'Sharah 51.12 64.53 +/way Val'Sharah 54.28 62.65 +/way Val'Sharah 54.32 66.08 +/way Val'Sharah 58.53 61.45 +/way Val'Sharah 58.37 63.02 +/way Val'Sharah 59.24 65.05 +/way Val'Sharah 62.31 64.97 +/way Val'Sharah 63.37 67.79 +/way Val'Sharah 64.83 68.7 +/way Val'Sharah 68.37 63.92 +/way Val'Sharah 66.9 66.86 +/way Val'Sharah 67.08 68.7 +/way Val'Sharah 66.91 70.84 +/way Val'Sharah 65.61 71.3 +/way Val'Sharah 65.43 74.05 +/way Val'Sharah 66.57 73.67 +/way Val'Sharah 68.75 72.27 +/way Val'Sharah 67.56 72.17 +/way Val'Sharah 68.81 74.63 +/way Val'Sharah 67.77 75.19 +/way Val'Sharah 67.02 76.86 +/way Val'Sharah 65.7 75.96 +/way Val'Sharah 60.05 76.17 +/way Val'Sharah 56.95 76.95 +/way Val'Sharah 57.35 75.19 +/way Val'Sharah 58.36 73.27 +/way Val'Sharah 59.08 73.81 +/way Val'Sharah 60.66 75.82 +/way Val'Sharah 61.34 79.25 +/way Val'Sharah 62.71 80.38 +/way Val'Sharah 60.26 80.68 +/way Val'Sharah 59.23 82.19 +/way Val'Sharah 62.34 84.98 +/way Val'Sharah 58.92 88.3 +/way Val'Sharah 55.85 89.71 +/way Val'Sharah 56.13 87.83 +/way Val'Sharah 54.22 88.9 +/way Val'Sharah 53.37 87.68 +/way Val'Sharah 50.61 86.57 +/way Val'Sharah 49.98 83.55 +/way Val'Sharah 49.47 81.21 +/way Val'Sharah 50.49 79.7 +/way Val'Sharah 51.4 78.35 +/way Val'Sharah 52.52 75.98 +/way Val'Sharah 48.75 73.96 +/way Val'Sharah 48.14 72.49 +/way Val'Sharah 46.98 58.58 +/way Val'Sharah 43.72 57.99 +/way Val'Sharah 46.84 37.45 +/way Val'Sharah 46.85 39.36 +/way Val'Sharah 47.84 38.96 +/way Val'Sharah 48.45 40.92 +/way Val'Sharah 50.4 39.27 +/way Val'Sharah 50.43 40.57 +/way Val'Sharah 52.45 44.2 +/way Val'Sharah 54.73 47.17 +/way Val'Sharah 56.35 45.89 +/way Val'Sharah 54.9 41.74 +/way Val'Sharah 54.87 39.41 +/way Val'Sharah 56.71 40.19 +/way Val'Sharah 57.58 41.53 +/way Val'Sharah 58.36 41.66 +/way Val'Sharah 60.05 42.17 +/way Val'Sharah 61.65 43.31 +/way Val'Sharah 60.92 41.56 +/way Val'Sharah 62.24 44.16 +/way Val'Sharah 62.18 43.11 +/way Val'Sharah 64.04 40.91 +/way Val'Sharah 62.84 40.65 +/way Val'Sharah 63.51 38.93 +/way Val'Sharah 69.12 39.38 +/way Val'Sharah 70.92 38.4 +/way Val'Sharah 71.19 42.44 +/way Val'Sharah 72.93 44.69 +/way Val'Sharah 71.57 47.07 +/way Val'Sharah 69.24 45.68 +/way Val'Sharah 69.93 47.65 +/way Val'Sharah 68.74 48.58 +/way Val'Sharah 68.01 50.36 +/way Val'Sharah 70.59 51.95 +/way Val'Sharah 70.77 54.92 +/way Val'Sharah 71.17 56.39 +/way Val'Sharah 70.27 56.41 +/way Val'Sharah 69.1 55.12 +/way Val'Sharah 65.97 59.44 +/way Val'Sharah 65.88 56.5 +/way Val'Sharah 64.45 53.78 +/way Val'Sharah 63.19 56.73 +/way Val'Sharah 64.13 58.96 +/way Val'Sharah 65.55 61.24 +/way Val'Sharah 64.01 61.23 +/way Val'Sharah 64.35 75.33 +/way Val'Sharah 64.04 79.4 +/way Val'Sharah 65.31 79.67 +/way Val'Sharah 64.07 81.41 +/way Val'Sharah 62.41 82.04 +/way Val'Sharah 61.02 83.56 +/way Val'Sharah 59.89 83.19 +/way Val'Sharah 60.72 84.32 +/way Val'Sharah 61.72 84.3 +/way Val'Sharah 59.99 79.24 +/way Val'Sharah 56.12 79.23 +/way Val'Sharah 55.7 76.89 +/way Val'Sharah 51.19 72.26 +/way Val'Sharah 53.78 70.92 +/way Val'Sharah 52.44 72.53 +/way Val'Sharah 47.63 77.64 +/way Val'Sharah 49.85 74.92 +/way Val'Sharah 49.99 77.55 +/way Val'Sharah 47.43 76.36 +/way Val'Sharah 44.57 82.87 +/way Val'Sharah 44.59 86.64 +/way Val'Sharah 45.1 86.63 +/way Val'Sharah 44.31 85.05 +/way Val'Sharah 42.91 83.59 +/way Val'Sharah 42.69 81.24 +/way Val'Sharah 42.59 80.4 +/way Val'Sharah 41.57 81.13 +/way Val'Sharah 40.88 75.34 +/way Val'Sharah 50.44 53.49 +/way Val'Sharah 53.43 52.68 +/way Val'Sharah 55.29 50.86 +/way Val'Sharah 54.1 52.27 +/way Val'Sharah 53.37 51.14 +/way Val'Sharah 53.52 49.5 +/way Val'Sharah 52.4 49.71 +/way Val'Sharah 50.9 49.61 +/way Val'Sharah 47.8 52.24 +/way Val'Sharah 47.93 55.01 +/way Val'Sharah 46.89 53.79 +/way Val'Sharah 46.22 55.18 +/way Val'Sharah 46.32 56.82 +/way Val'Sharah 40.2 62.85 +/way Val'Sharah 40.35 60.93 +/way Val'Sharah 36.08 58.38 +/way Val'Sharah 35.03 60.53 +/way Val'Sharah 35.66 60.3 +/way Val'Sharah 40.75 60.72 +/way Val'Sharah 44.99 60.93 +/way Val'Sharah 43.77 60.96 +/way Val'Sharah 43.04 63.03 +/way Val'Sharah 41.88 63.67 +/way Val'Sharah 42.45 61.88 +/way Val'Sharah 43.65 60.82 +/way Val'Sharah 58.38 33.52 +/way Val'Sharah 41.66 54.31 +/way Val'Sharah 40.52 51.34 +/way Val'Sharah 37.56 54.61 +/way Val'Sharah 49.48 49.77 +/way Val'Sharah 51.33 41.98 +/way Val'Sharah 55.3 55.78 +/way Val'Sharah 61.99 30.91 +/way Val'Sharah 57.71 39.6 +/way Val'Sharah 69.54 37.38 +/way Val'Sharah 68.35 39.91 +/way Val'Sharah 62.37 48.14 +/way Val'Sharah 65.9 41.14 +/way Val'Sharah 73.55 52.84 +/way Val'Sharah 74.57 39.75 +/way Val'Sharah 72.1 49.22 +/way Val'Sharah 69.79 53.26 +/way Val'Sharah 67.27 60.55 +/way Val'Sharah 64.16 58.7 +/way Val'Sharah 54.76 57.01 +/way Val'Sharah 57.81 60.35 +/way Val'Sharah 48.01 69.08 +/way Val'Sharah 42.49 79.11 +/way Val'Sharah 41.64 69.85 +/way Val'Sharah 45.52 73.05 +/way Val'Sharah 50.98 82.3 +/way Val'Sharah 65.76 68.15 +/way Val'Sharah 63.63 64.98 +/way Val'Sharah 57.28 90.49 +/way Val'Sharah 55.64 84.34 +/way Val'Sharah 39.95 88.45 +/way Val'Sharah 44.02 82.51 +/way Val'Sharah 47.72 85.61 +/way Val'Sharah 50.24 84.23 +/way Val'Sharah 43.02 88.03 +/way Val'Sharah 46.15 83.47 +/way Val'Sharah 55.23 68.18 +/way Val'Sharah 22.55 64.61 +/way Val'Sharah 22.95 72.49 /way Val'Sharah 21.81 69.82 \ No newline at end of file diff --git a/Random Trash/Herbs/Fjarnskaggl.txt b/WeakAuras/Projects/Random Trash/Herbs/Fjarnskaggl.txt similarity index 96% rename from Random Trash/Herbs/Fjarnskaggl.txt rename to WeakAuras/Projects/Random Trash/Herbs/Fjarnskaggl.txt index e1ffc62..c5f6374 100644 --- a/Random Trash/Herbs/Fjarnskaggl.txt +++ b/WeakAuras/Projects/Random Trash/Herbs/Fjarnskaggl.txt @@ -1,200 +1,200 @@ -/way Stormheim 47.24 55.62 -/way Stormheim 51.47 55.4 -/way Stormheim 49.09 52.04 -/way Stormheim 48.14 53.66 -/way Stormheim 45.46 53.33 -/way Stormheim 42.97 59.67 -/way Stormheim 42.91 57.7 -/way Stormheim 42.8 56.74 -/way Stormheim 41.94 53.95 -/way Stormheim 39.66 53.74 -/way Stormheim 40.06 52.65 -/way Stormheim 41.77 49.95 -/way Stormheim 42.6 49.17 -/way Stormheim 42.02 50.81 -/way Stormheim 42.54 52.47 -/way Stormheim 42.86 51.62 -/way Stormheim 44.56 52.7 -/way Stormheim 43.88 52.96 -/way Stormheim 43.66 54.02 -/way Stormheim 44.39 54.51 -/way Stormheim 44.57 56.26 -/way Stormheim 44.17 58.37 -/way Stormheim 46.02 58.16 -/way Stormheim 45.54 56.28 -/way Stormheim 45.64 55.67 -/way Stormheim 45.88 54.95 -/way Stormheim 75.52 64.36 -/way Stormheim 74.64 63.4 -/way Stormheim 75.47 61.49 -/way Stormheim 76.04 62.25 -/way Stormheim 76.34 62.88 -/way Stormheim 75.6 61.16 -/way Stormheim 74.48 61.07 -/way Stormheim 73.1 61.55 -/way Stormheim 71.6 61.94 -/way Stormheim 71.17 61.79 -/way Stormheim 70.7 61.82 -/way Stormheim 69.93 60.51 -/way Stormheim 68.88 62.24 -/way Stormheim 68.02 62.34 -/way Stormheim 68.38 60.4 -/way Stormheim 68.09 58.09 -/way Stormheim 68.51 57.47 -/way Stormheim 69.32 57.12 -/way Stormheim 70.52 56.23 -/way Stormheim 68.72 55.81 -/way Stormheim 68.24 55.37 -/way Stormheim 67.73 53.38 -/way Stormheim 67.47 50.94 -/way Stormheim 66.2 50.65 -/way Stormheim 66.13 49.8 -/way Stormheim 65.36 46.62 -/way Stormheim 68.76 42.62 -/way Stormheim 69.77 41.67 -/way Stormheim 70.11 40.61 -/way Stormheim 70.23 39.9 -/way Stormheim 70.45 39.16 -/way Stormheim 71.16 38.18 -/way Stormheim 70.62 37.63 -/way Stormheim 69.98 37.93 -/way Stormheim 69.85 36.95 -/way Stormheim 69.11 37.75 -/way Stormheim 68.09 38.08 -/way Stormheim 68.51 39.26 -/way Stormheim 67.77 40.49 -/way Stormheim 67.39 41.98 -/way Stormheim 66.73 42.58 -/way Stormheim 67.01 43.27 -/way Stormheim 66.64 43.31 -/way Stormheim 65.25 48.23 -/way Stormheim 64.43 47.44 -/way Stormheim 64.3 49.23 -/way Stormheim 63.4 49.43 -/way Stormheim 61.43 49.66 -/way Stormheim 62.74 50.15 -/way Stormheim 62.33 50.62 -/way Stormheim 61.77 51.52 -/way Stormheim 61.5 53.26 -/way Stormheim 61.08 54.15 -/way Stormheim 59.76 53.98 -/way Stormheim 59.06 52.97 -/way Stormheim 59.38 51.04 -/way Stormheim 59.05 51.07 -/way Stormheim 58.05 51.4 -/way Stormheim 57.23 50.59 -/way Stormheim 56.64 50.71 -/way Stormheim 53.07 53.33 -/way Stormheim 53.94 54.38 -/way Stormheim 53.44 54.49 -/way Stormheim 52.19 56.4 -/way Stormheim 51.96 58.49 -/way Stormheim 51.66 58.85 -/way Stormheim 51.36 59.61 -/way Stormheim 52 60.49 -/way Stormheim 53.76 58.93 -/way Stormheim 53.43 58.03 -/way Stormheim 52.75 56.71 -/way Stormheim 53.34 56.63 -/way Stormheim 53.46 55.97 -/way Stormheim 52.99 55.07 -/way Stormheim 52.69 53.46 -/way Stormheim 51.16 53.73 -/way Stormheim 50.62 53.1 -/way Stormheim 50.2 52.37 -/way Stormheim 50.13 50.4 -/way Stormheim 48.08 50.93 -/way Stormheim 47.68 48.92 -/way Stormheim 44.23 45.97 -/way Stormheim 45.22 43.32 -/way Stormheim 45.69 42.54 -/way Stormheim 46.28 42.7 -/way Stormheim 48.34 39.8 -/way Stormheim 49.36 37.64 -/way Stormheim 47.3 38.94 -/way Stormheim 42.38 41.41 -/way Stormheim 42.36 39.64 -/way Stormheim 42.97 39.05 -/way Stormheim 42.41 38.26 -/way Stormheim 40.83 40.62 -/way Stormheim 41.68 40.19 -/way Stormheim 61.22 64.31 -/way Stormheim 56.67 79.09 -/way Stormheim 73.25 44.25 -/way Stormheim 73.25 44.5 -/way Stormheim 69.24 50.47 -/way Stormheim 64.32 44.07 -/way Stormheim 62.95 46.32 -/way Stormheim 63.56 45.14 -/way Stormheim 68.35 58.98 -/way Stormheim 71.6 52.25 -/way Stormheim 82.09 57.01 -/way Stormheim 80.93 56.31 -/way Stormheim 79.83 64.42 -/way Stormheim 78.73 63.87 -/way Stormheim 80.89 63.18 -/way Stormheim 78.75 58.41 -/way Stormheim 77.87 57.58 -/way Stormheim 73.32 59.52 -/way Stormheim 70.2 58.54 -/way Stormheim 68.78 54.4 -/way Stormheim 67.69 59.37 -/way Stormheim 67.61 54.47 -/way Stormheim 65.94 52.25 -/way Stormheim 63.57 55.84 -/way Stormheim 68.18 50.25 -/way Stormheim 43.9 58.83 -/way Stormheim 43.27 81.62 -/way Stormheim 45.24 75.28 -/way Stormheim 43.53 70.2 -/way Stormheim 43.4 71.29 -/way Stormheim 48 67.59 -/way Stormheim 41.82 65.83 -/way Stormheim 41.11 65.23 -/way Stormheim 37.84 64.52 -/way Stormheim 41.31 58.59 -/way Stormheim 42.35 61.07 -/way Stormheim 38.37 56.57 -/way Stormheim 37.66 55.01 -/way Stormheim 44.11 44.07 -/way Stormheim 46.61 40.23 -/way Stormheim 44.65 38.78 -/way Stormheim 47.94 35.39 -/way Stormheim 43.25 31.36 -/way Stormheim 45.4 30.26 -/way Stormheim 43.1 26.67 -/way Stormheim 45.47 25.53 -/way Stormheim 50.15 21.58 -/way Stormheim 48.03 21.48 -/way Stormheim 62 25.52 -/way Stormheim 60.54 29.82 -/way Stormheim 52 25.83 -/way Stormheim 50.54 35.56 -/way Stormheim 44.97 39.08 -/way Stormheim 42.83 42.04 -/way Stormheim 43.57 45.19 -/way Stormheim 43.59 46.2 -/way Stormheim 49.47 49.89 -/way Stormheim 48.93 49.78 -/way Stormheim 43.63 38.21 -/way Stormheim 45.98 38.79 -/way Stormheim 44.19 40.82 -/way Stormheim 43.7 42.61 -/way Stormheim 44.29 46.69 -/way Stormheim 40.96 37.98 -/way Stormheim 42.18 36.75 -/way Stormheim 28.74 46.9 -/way Stormheim 29.32 47.14 -/way Stormheim 30.43 51.49 -/way Stormheim 34.47 45.62 -/way Stormheim 28.01 41.97 -/way Stormheim 33.22 43.93 -/way Stormheim 34.45 42.11 -/way Stormheim 36.37 40.26 -/way Stormheim 38.14 23.01 -/way Stormheim 43.17 21.07 -/way Stormheim 35.77 27.54 -/way Stormheim 63.95 62.4 -/way Stormheim 65.8 58.06 -/way Stormheim 59.47 56.02 +/way Stormheim 47.24 55.62 +/way Stormheim 51.47 55.4 +/way Stormheim 49.09 52.04 +/way Stormheim 48.14 53.66 +/way Stormheim 45.46 53.33 +/way Stormheim 42.97 59.67 +/way Stormheim 42.91 57.7 +/way Stormheim 42.8 56.74 +/way Stormheim 41.94 53.95 +/way Stormheim 39.66 53.74 +/way Stormheim 40.06 52.65 +/way Stormheim 41.77 49.95 +/way Stormheim 42.6 49.17 +/way Stormheim 42.02 50.81 +/way Stormheim 42.54 52.47 +/way Stormheim 42.86 51.62 +/way Stormheim 44.56 52.7 +/way Stormheim 43.88 52.96 +/way Stormheim 43.66 54.02 +/way Stormheim 44.39 54.51 +/way Stormheim 44.57 56.26 +/way Stormheim 44.17 58.37 +/way Stormheim 46.02 58.16 +/way Stormheim 45.54 56.28 +/way Stormheim 45.64 55.67 +/way Stormheim 45.88 54.95 +/way Stormheim 75.52 64.36 +/way Stormheim 74.64 63.4 +/way Stormheim 75.47 61.49 +/way Stormheim 76.04 62.25 +/way Stormheim 76.34 62.88 +/way Stormheim 75.6 61.16 +/way Stormheim 74.48 61.07 +/way Stormheim 73.1 61.55 +/way Stormheim 71.6 61.94 +/way Stormheim 71.17 61.79 +/way Stormheim 70.7 61.82 +/way Stormheim 69.93 60.51 +/way Stormheim 68.88 62.24 +/way Stormheim 68.02 62.34 +/way Stormheim 68.38 60.4 +/way Stormheim 68.09 58.09 +/way Stormheim 68.51 57.47 +/way Stormheim 69.32 57.12 +/way Stormheim 70.52 56.23 +/way Stormheim 68.72 55.81 +/way Stormheim 68.24 55.37 +/way Stormheim 67.73 53.38 +/way Stormheim 67.47 50.94 +/way Stormheim 66.2 50.65 +/way Stormheim 66.13 49.8 +/way Stormheim 65.36 46.62 +/way Stormheim 68.76 42.62 +/way Stormheim 69.77 41.67 +/way Stormheim 70.11 40.61 +/way Stormheim 70.23 39.9 +/way Stormheim 70.45 39.16 +/way Stormheim 71.16 38.18 +/way Stormheim 70.62 37.63 +/way Stormheim 69.98 37.93 +/way Stormheim 69.85 36.95 +/way Stormheim 69.11 37.75 +/way Stormheim 68.09 38.08 +/way Stormheim 68.51 39.26 +/way Stormheim 67.77 40.49 +/way Stormheim 67.39 41.98 +/way Stormheim 66.73 42.58 +/way Stormheim 67.01 43.27 +/way Stormheim 66.64 43.31 +/way Stormheim 65.25 48.23 +/way Stormheim 64.43 47.44 +/way Stormheim 64.3 49.23 +/way Stormheim 63.4 49.43 +/way Stormheim 61.43 49.66 +/way Stormheim 62.74 50.15 +/way Stormheim 62.33 50.62 +/way Stormheim 61.77 51.52 +/way Stormheim 61.5 53.26 +/way Stormheim 61.08 54.15 +/way Stormheim 59.76 53.98 +/way Stormheim 59.06 52.97 +/way Stormheim 59.38 51.04 +/way Stormheim 59.05 51.07 +/way Stormheim 58.05 51.4 +/way Stormheim 57.23 50.59 +/way Stormheim 56.64 50.71 +/way Stormheim 53.07 53.33 +/way Stormheim 53.94 54.38 +/way Stormheim 53.44 54.49 +/way Stormheim 52.19 56.4 +/way Stormheim 51.96 58.49 +/way Stormheim 51.66 58.85 +/way Stormheim 51.36 59.61 +/way Stormheim 52 60.49 +/way Stormheim 53.76 58.93 +/way Stormheim 53.43 58.03 +/way Stormheim 52.75 56.71 +/way Stormheim 53.34 56.63 +/way Stormheim 53.46 55.97 +/way Stormheim 52.99 55.07 +/way Stormheim 52.69 53.46 +/way Stormheim 51.16 53.73 +/way Stormheim 50.62 53.1 +/way Stormheim 50.2 52.37 +/way Stormheim 50.13 50.4 +/way Stormheim 48.08 50.93 +/way Stormheim 47.68 48.92 +/way Stormheim 44.23 45.97 +/way Stormheim 45.22 43.32 +/way Stormheim 45.69 42.54 +/way Stormheim 46.28 42.7 +/way Stormheim 48.34 39.8 +/way Stormheim 49.36 37.64 +/way Stormheim 47.3 38.94 +/way Stormheim 42.38 41.41 +/way Stormheim 42.36 39.64 +/way Stormheim 42.97 39.05 +/way Stormheim 42.41 38.26 +/way Stormheim 40.83 40.62 +/way Stormheim 41.68 40.19 +/way Stormheim 61.22 64.31 +/way Stormheim 56.67 79.09 +/way Stormheim 73.25 44.25 +/way Stormheim 73.25 44.5 +/way Stormheim 69.24 50.47 +/way Stormheim 64.32 44.07 +/way Stormheim 62.95 46.32 +/way Stormheim 63.56 45.14 +/way Stormheim 68.35 58.98 +/way Stormheim 71.6 52.25 +/way Stormheim 82.09 57.01 +/way Stormheim 80.93 56.31 +/way Stormheim 79.83 64.42 +/way Stormheim 78.73 63.87 +/way Stormheim 80.89 63.18 +/way Stormheim 78.75 58.41 +/way Stormheim 77.87 57.58 +/way Stormheim 73.32 59.52 +/way Stormheim 70.2 58.54 +/way Stormheim 68.78 54.4 +/way Stormheim 67.69 59.37 +/way Stormheim 67.61 54.47 +/way Stormheim 65.94 52.25 +/way Stormheim 63.57 55.84 +/way Stormheim 68.18 50.25 +/way Stormheim 43.9 58.83 +/way Stormheim 43.27 81.62 +/way Stormheim 45.24 75.28 +/way Stormheim 43.53 70.2 +/way Stormheim 43.4 71.29 +/way Stormheim 48 67.59 +/way Stormheim 41.82 65.83 +/way Stormheim 41.11 65.23 +/way Stormheim 37.84 64.52 +/way Stormheim 41.31 58.59 +/way Stormheim 42.35 61.07 +/way Stormheim 38.37 56.57 +/way Stormheim 37.66 55.01 +/way Stormheim 44.11 44.07 +/way Stormheim 46.61 40.23 +/way Stormheim 44.65 38.78 +/way Stormheim 47.94 35.39 +/way Stormheim 43.25 31.36 +/way Stormheim 45.4 30.26 +/way Stormheim 43.1 26.67 +/way Stormheim 45.47 25.53 +/way Stormheim 50.15 21.58 +/way Stormheim 48.03 21.48 +/way Stormheim 62 25.52 +/way Stormheim 60.54 29.82 +/way Stormheim 52 25.83 +/way Stormheim 50.54 35.56 +/way Stormheim 44.97 39.08 +/way Stormheim 42.83 42.04 +/way Stormheim 43.57 45.19 +/way Stormheim 43.59 46.2 +/way Stormheim 49.47 49.89 +/way Stormheim 48.93 49.78 +/way Stormheim 43.63 38.21 +/way Stormheim 45.98 38.79 +/way Stormheim 44.19 40.82 +/way Stormheim 43.7 42.61 +/way Stormheim 44.29 46.69 +/way Stormheim 40.96 37.98 +/way Stormheim 42.18 36.75 +/way Stormheim 28.74 46.9 +/way Stormheim 29.32 47.14 +/way Stormheim 30.43 51.49 +/way Stormheim 34.47 45.62 +/way Stormheim 28.01 41.97 +/way Stormheim 33.22 43.93 +/way Stormheim 34.45 42.11 +/way Stormheim 36.37 40.26 +/way Stormheim 38.14 23.01 +/way Stormheim 43.17 21.07 +/way Stormheim 35.77 27.54 +/way Stormheim 63.95 62.4 +/way Stormheim 65.8 58.06 +/way Stormheim 59.47 56.02 /way Stormheim 60.84 55.71 \ No newline at end of file diff --git a/Random Trash/Herbs/Foxflower.txt b/WeakAuras/Projects/Random Trash/Herbs/Foxflower.txt similarity index 96% rename from Random Trash/Herbs/Foxflower.txt rename to WeakAuras/Projects/Random Trash/Herbs/Foxflower.txt index 3370451..e367160 100644 --- a/Random Trash/Herbs/Foxflower.txt +++ b/WeakAuras/Projects/Random Trash/Herbs/Foxflower.txt @@ -1,199 +1,199 @@ -/way Highmountain 39.04 63.21 -/way Highmountain 42.24 55.42 -/way Highmountain 43.3 58.87 -/way Highmountain 40.39 59.24 -/way Highmountain 42.39 67.1 -/way Highmountain 37.19 66.98 -/way Highmountain 42.21 65.26 -/way Highmountain 42.86 52.36 -/way Highmountain 44.42 49.56 -/way Highmountain 46.31 46.84 -/way Highmountain 44.32 44.33 -/way Highmountain 47.06 48.3 -/way Highmountain 46.96 47.09 -/way Highmountain 57.3 22.65 -/way Highmountain 57.13 20.04 -/way Highmountain 56.54 21.14 -/way Highmountain 55.97 20.78 -/way Highmountain 56 20.19 -/way Highmountain 55.94 19.48 -/way Highmountain 54.72 16.63 -/way Highmountain 55.63 17.81 -/way Highmountain 55.27 18.91 -/way Highmountain 55.32 18.59 -/way Highmountain 41.11 51.73 -/way Highmountain 42.6 48.57 -/way Highmountain 43.68 48.71 -/way Highmountain 39.67 52.78 -/way Highmountain 40.85 53.98 -/way Highmountain 42.82 52.88 -/way Highmountain 41.21 56.52 -/way Highmountain 39.74 67.27 -/way Highmountain 40.77 65.23 -/way Highmountain 37.33 63.76 -/way Highmountain 37.5 62.89 -/way Highmountain 37.72 62.08 -/way Highmountain 40.68 57.62 -/way Highmountain 47.51 9.64 -/way Highmountain 45.07 8.99 -/way Highmountain 42.96 9.11 -/way Highmountain 43.26 8.47 -/way Highmountain 42.69 7.59 -/way Highmountain 45.72 9.49 -/way Highmountain 46.02 8.48 -/way Highmountain 44.75 8.04 -/way Highmountain 44.62 7.22 -/way Highmountain 41.25 13 -/way Highmountain 41.24 11.49 -/way Highmountain 42.07 11.42 -/way Highmountain 44.2 10.31 -/way Highmountain 43.54 11.57 -/way Highmountain 44.12 11.56 -/way Highmountain 45.67 12.81 -/way Highmountain 45.6 11.82 -/way Highmountain 48.04 10.68 -/way Highmountain 48.1 9.57 -/way Highmountain 50.88 11.06 -/way Highmountain 50.51 10.69 -/way Highmountain 50.02 10.43 -/way Highmountain 49.54 10.43 -/way Highmountain 48.84 10.72 -/way Highmountain 48.44 10.66 -/way Highmountain 47.95 11.28 -/way Highmountain 46.49 11.47 -/way Highmountain 47.16 11.19 -/way Highmountain 56.04 63.04 -/way Highmountain 56.46 60.72 -/way Highmountain 57.51 59.57 -/way Highmountain 57.31 58.61 -/way Highmountain 56.29 56.16 -/way Highmountain 56.93 56.51 -/way Highmountain 57.33 56.08 -/way Highmountain 57.78 56.85 -/way Highmountain 57.95 54.56 -/way Highmountain 57.54 53.68 -/way Highmountain 57.15 53.7 -/way Highmountain 55.34 53.18 -/way Highmountain 55.2 53.41 -/way Highmountain 56.17 54.2 -/way Highmountain 55.99 55.43 -/way Highmountain 55.9 56.79 -/way Highmountain 57.56 57.6 -/way Highmountain 55.89 59.48 -/way Highmountain 55.11 61.2 -/way Highmountain 39 40.8 -/way Highmountain 39.15 39.51 -/way Highmountain 40.15 36.93 -/way Highmountain 40.41 37.67 -/way Highmountain 40.55 36.19 -/way Highmountain 41.38 36.45 -/way Highmountain 41.54 35.29 -/way Highmountain 41.97 33.67 -/way Highmountain 41.46 31.24 -/way Highmountain 41.4 28.92 -/way Highmountain 40.79 29.51 -/way Highmountain 42.57 30.29 -/way Highmountain 46.38 32.35 -/way Highmountain 45.3 32.49 -/way Highmountain 44.18 33.11 -/way Highmountain 44.31 32.62 -/way Highmountain 44.76 30.4 -/way Highmountain 37.07 19.85 -/way Highmountain 36.06 20.92 -/way Highmountain 32.68 23.7 -/way Highmountain 33.36 21.36 -/way Highmountain 34.62 22.6 -/way Highmountain 35.26 23.87 -/way Highmountain 36.27 23.14 -/way Highmountain 34.74 23.43 -/way Highmountain 34.05 24.22 -/way Highmountain 34.18 27.2 -/way Highmountain 34.23 25.22 -/way Highmountain 31.78 35.09 -/way Highmountain 32.12 34.17 -/way Highmountain 33.13 33.36 -/way Highmountain 32.78 32.58 -/way Highmountain 31.77 31.79 -/way Highmountain 30.37 28.05 -/way Highmountain 30.53 29.81 -/way Highmountain 30.8 30.32 -/way Highmountain 28.47 40.12 -/way Highmountain 27.69 41.13 -/way Highmountain 28.37 41.03 -/way Highmountain 28.86 42.47 -/way Highmountain 29.95 41.71 -/way Highmountain 31.73 38.3 -/way Highmountain 30.38 39.04 -/way Highmountain 31.37 36.91 -/way Highmountain 31.64 35.8 -/way Highmountain 30.36 34.88 -/way Highmountain 31.05 33.51 -/way Highmountain 30.53 33.11 -/way Highmountain 31.38 30.83 -/way Highmountain 44.68 54.55 -/way Highmountain 44.08 54.55 -/way Highmountain 43.58 54.82 -/way Highmountain 45.12 50.11 -/way Highmountain 43.58 45.93 -/way Highmountain 42.63 45.65 -/way Highmountain 42.96 46.27 -/way Highmountain 42.09 46.82 -/way Highmountain 39.3 46.88 -/way Highmountain 40.18 47.01 -/way Highmountain 40.81 46.97 -/way Highmountain 41.37 48.56 -/way Highmountain 40.45 48.42 -/way Highmountain 38.56 50.23 -/way Highmountain 38.26 49.28 -/way Highmountain 39.77 49.03 -/way Highmountain 39.89 49.73 -/way Highmountain 39.97 50.65 -/way Highmountain 40.15 51.03 -/way Highmountain 58.81 62.31 -/way Highmountain 55.76 65.74 -/way Highmountain 52.04 58.38 -/way Highmountain 50.81 67.32 -/way Highmountain 43.38 66.19 -/way Highmountain 24.98 59.43 -/way Highmountain 26.05 63.62 -/way Highmountain 28.67 55.49 -/way Highmountain 26.86 41.18 -/way Highmountain 25.89 44.55 -/way Highmountain 24.23 43.43 -/way Highmountain 26.35 39.24 -/way Highmountain 28.83 35.34 -/way Highmountain 27.93 30.52 -/way Highmountain 28.73 28.61 -/way Highmountain 31.88 26.11 -/way Highmountain 37.52 15.31 -/way Highmountain 44.79 12.36 -/way Highmountain 58.06 22.18 -/way Highmountain 57.64 19.03 -/way Highmountain 54.81 16.28 -/way Highmountain 53.1 13.37 -/way Highmountain 49.63 13.87 -/way Highmountain 49.23 8.72 -/way Highmountain 47.72 6.15 -/way Highmountain 44.93 7.4 -/way Highmountain 42.09 27.58 -/way Highmountain 46.45 26.28 -/way Highmountain 47.57 24.96 -/way Highmountain 48.31 29.71 -/way Highmountain 35.86 38.62 -/way Highmountain 40.33 33.71 -/way Highmountain 36.87 35.15 -/way Highmountain 37.26 33.85 -/way Highmountain 42.47 51.44 -/way Highmountain 42.21 54.16 -/way Highmountain 44.95 55.74 -/way Highmountain 52 32.57 -/way Highmountain 52.49 34.19 -/way Highmountain 52.71 39.16 -/way Highmountain 54.4 50.27 -/way Highmountain 49.74 42.1 -/way Highmountain 47.22 51.9 -/way Highmountain 47.87 54.97 -/way Highmountain 43.42 72.85 -/way Highmountain 48.48 54.81 -/way Highmountain 38.62 61.09 +/way Highmountain 39.04 63.21 +/way Highmountain 42.24 55.42 +/way Highmountain 43.3 58.87 +/way Highmountain 40.39 59.24 +/way Highmountain 42.39 67.1 +/way Highmountain 37.19 66.98 +/way Highmountain 42.21 65.26 +/way Highmountain 42.86 52.36 +/way Highmountain 44.42 49.56 +/way Highmountain 46.31 46.84 +/way Highmountain 44.32 44.33 +/way Highmountain 47.06 48.3 +/way Highmountain 46.96 47.09 +/way Highmountain 57.3 22.65 +/way Highmountain 57.13 20.04 +/way Highmountain 56.54 21.14 +/way Highmountain 55.97 20.78 +/way Highmountain 56 20.19 +/way Highmountain 55.94 19.48 +/way Highmountain 54.72 16.63 +/way Highmountain 55.63 17.81 +/way Highmountain 55.27 18.91 +/way Highmountain 55.32 18.59 +/way Highmountain 41.11 51.73 +/way Highmountain 42.6 48.57 +/way Highmountain 43.68 48.71 +/way Highmountain 39.67 52.78 +/way Highmountain 40.85 53.98 +/way Highmountain 42.82 52.88 +/way Highmountain 41.21 56.52 +/way Highmountain 39.74 67.27 +/way Highmountain 40.77 65.23 +/way Highmountain 37.33 63.76 +/way Highmountain 37.5 62.89 +/way Highmountain 37.72 62.08 +/way Highmountain 40.68 57.62 +/way Highmountain 47.51 9.64 +/way Highmountain 45.07 8.99 +/way Highmountain 42.96 9.11 +/way Highmountain 43.26 8.47 +/way Highmountain 42.69 7.59 +/way Highmountain 45.72 9.49 +/way Highmountain 46.02 8.48 +/way Highmountain 44.75 8.04 +/way Highmountain 44.62 7.22 +/way Highmountain 41.25 13 +/way Highmountain 41.24 11.49 +/way Highmountain 42.07 11.42 +/way Highmountain 44.2 10.31 +/way Highmountain 43.54 11.57 +/way Highmountain 44.12 11.56 +/way Highmountain 45.67 12.81 +/way Highmountain 45.6 11.82 +/way Highmountain 48.04 10.68 +/way Highmountain 48.1 9.57 +/way Highmountain 50.88 11.06 +/way Highmountain 50.51 10.69 +/way Highmountain 50.02 10.43 +/way Highmountain 49.54 10.43 +/way Highmountain 48.84 10.72 +/way Highmountain 48.44 10.66 +/way Highmountain 47.95 11.28 +/way Highmountain 46.49 11.47 +/way Highmountain 47.16 11.19 +/way Highmountain 56.04 63.04 +/way Highmountain 56.46 60.72 +/way Highmountain 57.51 59.57 +/way Highmountain 57.31 58.61 +/way Highmountain 56.29 56.16 +/way Highmountain 56.93 56.51 +/way Highmountain 57.33 56.08 +/way Highmountain 57.78 56.85 +/way Highmountain 57.95 54.56 +/way Highmountain 57.54 53.68 +/way Highmountain 57.15 53.7 +/way Highmountain 55.34 53.18 +/way Highmountain 55.2 53.41 +/way Highmountain 56.17 54.2 +/way Highmountain 55.99 55.43 +/way Highmountain 55.9 56.79 +/way Highmountain 57.56 57.6 +/way Highmountain 55.89 59.48 +/way Highmountain 55.11 61.2 +/way Highmountain 39 40.8 +/way Highmountain 39.15 39.51 +/way Highmountain 40.15 36.93 +/way Highmountain 40.41 37.67 +/way Highmountain 40.55 36.19 +/way Highmountain 41.38 36.45 +/way Highmountain 41.54 35.29 +/way Highmountain 41.97 33.67 +/way Highmountain 41.46 31.24 +/way Highmountain 41.4 28.92 +/way Highmountain 40.79 29.51 +/way Highmountain 42.57 30.29 +/way Highmountain 46.38 32.35 +/way Highmountain 45.3 32.49 +/way Highmountain 44.18 33.11 +/way Highmountain 44.31 32.62 +/way Highmountain 44.76 30.4 +/way Highmountain 37.07 19.85 +/way Highmountain 36.06 20.92 +/way Highmountain 32.68 23.7 +/way Highmountain 33.36 21.36 +/way Highmountain 34.62 22.6 +/way Highmountain 35.26 23.87 +/way Highmountain 36.27 23.14 +/way Highmountain 34.74 23.43 +/way Highmountain 34.05 24.22 +/way Highmountain 34.18 27.2 +/way Highmountain 34.23 25.22 +/way Highmountain 31.78 35.09 +/way Highmountain 32.12 34.17 +/way Highmountain 33.13 33.36 +/way Highmountain 32.78 32.58 +/way Highmountain 31.77 31.79 +/way Highmountain 30.37 28.05 +/way Highmountain 30.53 29.81 +/way Highmountain 30.8 30.32 +/way Highmountain 28.47 40.12 +/way Highmountain 27.69 41.13 +/way Highmountain 28.37 41.03 +/way Highmountain 28.86 42.47 +/way Highmountain 29.95 41.71 +/way Highmountain 31.73 38.3 +/way Highmountain 30.38 39.04 +/way Highmountain 31.37 36.91 +/way Highmountain 31.64 35.8 +/way Highmountain 30.36 34.88 +/way Highmountain 31.05 33.51 +/way Highmountain 30.53 33.11 +/way Highmountain 31.38 30.83 +/way Highmountain 44.68 54.55 +/way Highmountain 44.08 54.55 +/way Highmountain 43.58 54.82 +/way Highmountain 45.12 50.11 +/way Highmountain 43.58 45.93 +/way Highmountain 42.63 45.65 +/way Highmountain 42.96 46.27 +/way Highmountain 42.09 46.82 +/way Highmountain 39.3 46.88 +/way Highmountain 40.18 47.01 +/way Highmountain 40.81 46.97 +/way Highmountain 41.37 48.56 +/way Highmountain 40.45 48.42 +/way Highmountain 38.56 50.23 +/way Highmountain 38.26 49.28 +/way Highmountain 39.77 49.03 +/way Highmountain 39.89 49.73 +/way Highmountain 39.97 50.65 +/way Highmountain 40.15 51.03 +/way Highmountain 58.81 62.31 +/way Highmountain 55.76 65.74 +/way Highmountain 52.04 58.38 +/way Highmountain 50.81 67.32 +/way Highmountain 43.38 66.19 +/way Highmountain 24.98 59.43 +/way Highmountain 26.05 63.62 +/way Highmountain 28.67 55.49 +/way Highmountain 26.86 41.18 +/way Highmountain 25.89 44.55 +/way Highmountain 24.23 43.43 +/way Highmountain 26.35 39.24 +/way Highmountain 28.83 35.34 +/way Highmountain 27.93 30.52 +/way Highmountain 28.73 28.61 +/way Highmountain 31.88 26.11 +/way Highmountain 37.52 15.31 +/way Highmountain 44.79 12.36 +/way Highmountain 58.06 22.18 +/way Highmountain 57.64 19.03 +/way Highmountain 54.81 16.28 +/way Highmountain 53.1 13.37 +/way Highmountain 49.63 13.87 +/way Highmountain 49.23 8.72 +/way Highmountain 47.72 6.15 +/way Highmountain 44.93 7.4 +/way Highmountain 42.09 27.58 +/way Highmountain 46.45 26.28 +/way Highmountain 47.57 24.96 +/way Highmountain 48.31 29.71 +/way Highmountain 35.86 38.62 +/way Highmountain 40.33 33.71 +/way Highmountain 36.87 35.15 +/way Highmountain 37.26 33.85 +/way Highmountain 42.47 51.44 +/way Highmountain 42.21 54.16 +/way Highmountain 44.95 55.74 +/way Highmountain 52 32.57 +/way Highmountain 52.49 34.19 +/way Highmountain 52.71 39.16 +/way Highmountain 54.4 50.27 +/way Highmountain 49.74 42.1 +/way Highmountain 47.22 51.9 +/way Highmountain 47.87 54.97 +/way Highmountain 43.42 72.85 +/way Highmountain 48.48 54.81 +/way Highmountain 38.62 61.09 /way Highmountain 42.5 61.79 \ No newline at end of file diff --git a/Random Trash/Herbs/Icecap.txt b/WeakAuras/Projects/Random Trash/Herbs/Icecap.txt similarity index 96% rename from Random Trash/Herbs/Icecap.txt rename to WeakAuras/Projects/Random Trash/Herbs/Icecap.txt index 53eb99e..caafd1f 100644 --- a/Random Trash/Herbs/Icecap.txt +++ b/WeakAuras/Projects/Random Trash/Herbs/Icecap.txt @@ -1,84 +1,84 @@ -/way Winterspring 59.16 84.77 -/way Winterspring 62.31 83 -/way Winterspring 57.11 82.01 -/way Winterspring 64.06 78.62 -/way Winterspring 61.3 77.48 -/way Winterspring 62.98 75.01 -/way Winterspring 60.57 72.97 -/way Winterspring 57.89 76.61 -/way Winterspring 58.81 71.72 -/way Winterspring 61.9 70.8 -/way Winterspring 55.55 66.93 -/way Winterspring 57.47 67.97 -/way Winterspring 64.62 67.64 -/way Winterspring 58.61 64.35 -/way Winterspring 60.58 63.25 -/way Winterspring 66.46 63.37 -/way Winterspring 54.22 59.72 -/way Winterspring 50.02 59.7 -/way Winterspring 55.15 58.99 -/way Winterspring 58.3 57.27 -/way Winterspring 66.48 58.7 -/way Winterspring 65.73 55.86 -/way Winterspring 67.08 55.5 -/way Winterspring 56.21 54.41 -/way Winterspring 63.85 54.34 -/way Winterspring 57.63 53.91 -/way Winterspring 62.95 52.24 -/way Winterspring 54.26 51.46 -/way Winterspring 53.42 52.49 -/way Winterspring 51.05 47.74 -/way Winterspring 62.14 46 -/way Winterspring 57.41 44.12 -/way Winterspring 67.38 43.91 -/way Winterspring 64.77 44.54 -/way Winterspring 63.95 38.93 -/way Winterspring 56.38 40.05 -/way Winterspring 53.33 40.12 -/way Winterspring 54.33 39.28 -/way Winterspring 58.25 36.59 -/way Winterspring 66.39 31.62 -/way Winterspring 65.34 33.85 -/way Winterspring 56.84 35.19 -/way Winterspring 53.46 28.57 -/way Winterspring 61.98 31.58 -/way Winterspring 61.24 31.93 -/way Winterspring 57.11 33.25 -/way Winterspring 47.75 31.28 -/way Winterspring 53.36 33.23 -/way Winterspring 58 25.44 -/way Winterspring 56.97 26.83 -/way Winterspring 49.79 25.15 -/way Winterspring 56.02 22.75 -/way Winterspring 46.42 24.46 -/way Winterspring 50.08 22.67 -/way Winterspring 46.7 18.24 -/way Winterspring 48.65 17.22 -/way Winterspring 49.35 18.76 -/way Winterspring 52.3 20.68 -/way Winterspring 45.21 14.81 -/way Winterspring 45.87 20.86 -/way Winterspring 47.49 50.39 -/way Winterspring 48.23 53.43 -/way Winterspring 47.36 58.17 -/way Winterspring 48.56 57.74 -/way Winterspring 45.22 57.7 -/way Winterspring 45.19 59.5 -/way Winterspring 42.43 49.82 -/way Winterspring 40.35 49.45 -/way Winterspring 40.46 54.28 -/way Winterspring 39.05 55.74 -/way Winterspring 37.6 55.77 -/way Winterspring 34.89 57.33 -/way Winterspring 34.59 50.15 -/way Winterspring 33.26 48.43 -/way Winterspring 32.77 51.29 -/way Winterspring 31.15 57.24 -/way Winterspring 30.3 54.04 -/way Winterspring 28.92 52.76 -/way Winterspring 28.32 55.97 -/way Winterspring 26.04 49.17 -/way Winterspring 24.02 49.75 -/way Winterspring 25.24 51.71 -/way Winterspring 24.44 50.98 -/way Winterspring 24.27 56.95 +/way Winterspring 59.16 84.77 +/way Winterspring 62.31 83 +/way Winterspring 57.11 82.01 +/way Winterspring 64.06 78.62 +/way Winterspring 61.3 77.48 +/way Winterspring 62.98 75.01 +/way Winterspring 60.57 72.97 +/way Winterspring 57.89 76.61 +/way Winterspring 58.81 71.72 +/way Winterspring 61.9 70.8 +/way Winterspring 55.55 66.93 +/way Winterspring 57.47 67.97 +/way Winterspring 64.62 67.64 +/way Winterspring 58.61 64.35 +/way Winterspring 60.58 63.25 +/way Winterspring 66.46 63.37 +/way Winterspring 54.22 59.72 +/way Winterspring 50.02 59.7 +/way Winterspring 55.15 58.99 +/way Winterspring 58.3 57.27 +/way Winterspring 66.48 58.7 +/way Winterspring 65.73 55.86 +/way Winterspring 67.08 55.5 +/way Winterspring 56.21 54.41 +/way Winterspring 63.85 54.34 +/way Winterspring 57.63 53.91 +/way Winterspring 62.95 52.24 +/way Winterspring 54.26 51.46 +/way Winterspring 53.42 52.49 +/way Winterspring 51.05 47.74 +/way Winterspring 62.14 46 +/way Winterspring 57.41 44.12 +/way Winterspring 67.38 43.91 +/way Winterspring 64.77 44.54 +/way Winterspring 63.95 38.93 +/way Winterspring 56.38 40.05 +/way Winterspring 53.33 40.12 +/way Winterspring 54.33 39.28 +/way Winterspring 58.25 36.59 +/way Winterspring 66.39 31.62 +/way Winterspring 65.34 33.85 +/way Winterspring 56.84 35.19 +/way Winterspring 53.46 28.57 +/way Winterspring 61.98 31.58 +/way Winterspring 61.24 31.93 +/way Winterspring 57.11 33.25 +/way Winterspring 47.75 31.28 +/way Winterspring 53.36 33.23 +/way Winterspring 58 25.44 +/way Winterspring 56.97 26.83 +/way Winterspring 49.79 25.15 +/way Winterspring 56.02 22.75 +/way Winterspring 46.42 24.46 +/way Winterspring 50.08 22.67 +/way Winterspring 46.7 18.24 +/way Winterspring 48.65 17.22 +/way Winterspring 49.35 18.76 +/way Winterspring 52.3 20.68 +/way Winterspring 45.21 14.81 +/way Winterspring 45.87 20.86 +/way Winterspring 47.49 50.39 +/way Winterspring 48.23 53.43 +/way Winterspring 47.36 58.17 +/way Winterspring 48.56 57.74 +/way Winterspring 45.22 57.7 +/way Winterspring 45.19 59.5 +/way Winterspring 42.43 49.82 +/way Winterspring 40.35 49.45 +/way Winterspring 40.46 54.28 +/way Winterspring 39.05 55.74 +/way Winterspring 37.6 55.77 +/way Winterspring 34.89 57.33 +/way Winterspring 34.59 50.15 +/way Winterspring 33.26 48.43 +/way Winterspring 32.77 51.29 +/way Winterspring 31.15 57.24 +/way Winterspring 30.3 54.04 +/way Winterspring 28.92 52.76 +/way Winterspring 28.32 55.97 +/way Winterspring 26.04 49.17 +/way Winterspring 24.02 49.75 +/way Winterspring 25.24 51.71 +/way Winterspring 24.44 50.98 +/way Winterspring 24.27 56.95 diff --git a/Random Trash/Herbs/Mountain Silversage.txt b/WeakAuras/Projects/Random Trash/Herbs/Mountain Silversage.txt similarity index 96% rename from Random Trash/Herbs/Mountain Silversage.txt rename to WeakAuras/Projects/Random Trash/Herbs/Mountain Silversage.txt index b1ea89f..d37e98e 100644 --- a/Random Trash/Herbs/Mountain Silversage.txt +++ b/WeakAuras/Projects/Random Trash/Herbs/Mountain Silversage.txt @@ -1,53 +1,53 @@ -/way Winterspring 66.76 84.03 -/way Winterspring 66.36 80.75 -/way Winterspring 62.24 80.15 -/way Winterspring 55.96 78.8 -/way Winterspring 56.02 76.95 -/way Winterspring 64.96 72.59 -/way Winterspring 65.44 70.65 -/way Winterspring 68.36 69 -/way Winterspring 52.57 67.93 -/way Winterspring 53.37 66.5 -/way Winterspring 61.09 66.97 -/way Winterspring 67.45 66.84 -/way Winterspring 68.19 64.02 -/way Winterspring 47.6 63.37 -/way Winterspring 67.42 57.23 -/way Winterspring 67.19 51.85 -/way Winterspring 63.49 50.05 -/way Winterspring 58.87 45.42 -/way Winterspring 53.68 45.06 -/way Winterspring 69.19 44.89 -/way Winterspring 59.6 42 -/way Winterspring 67.82 39.48 -/way Winterspring 59.84 37.64 -/way Winterspring 67.43 35.4 -/way Winterspring 66.7 29.13 -/way Winterspring 60.88 28.01 -/way Winterspring 60.16 21.19 -/way Winterspring 53.95 19.05 -/way Winterspring 52.44 18.27 -/way Winterspring 48.51 14.34 -/way Winterspring 44.13 14.69 -/way Winterspring 44.53 21.08 -/way Winterspring 45.31 26.71 -/way Winterspring 46.16 33.23 -/way Winterspring 48.2 45.28 -/way Winterspring 42.52 56.26 -/way Winterspring 42.18 53.86 -/way Winterspring 42.49 45.67 -/way Winterspring 40.75 46.4 -/way Winterspring 40.5 58 -/way Winterspring 39.56 44.86 -/way Winterspring 37.41 47.1 -/way Winterspring 37.05 58.92 -/way Winterspring 35.56 47.08 -/way Winterspring 34.11 59.82 -/way Winterspring 31.96 59.46 -/way Winterspring 31.19 47.17 -/way Winterspring 27.81 58.83 -/way Winterspring 27.7 47.35 -/way Winterspring 26.52 47.47 -/way Winterspring 24.62 62.82 -/way Winterspring 21.76 62.47 +/way Winterspring 66.76 84.03 +/way Winterspring 66.36 80.75 +/way Winterspring 62.24 80.15 +/way Winterspring 55.96 78.8 +/way Winterspring 56.02 76.95 +/way Winterspring 64.96 72.59 +/way Winterspring 65.44 70.65 +/way Winterspring 68.36 69 +/way Winterspring 52.57 67.93 +/way Winterspring 53.37 66.5 +/way Winterspring 61.09 66.97 +/way Winterspring 67.45 66.84 +/way Winterspring 68.19 64.02 +/way Winterspring 47.6 63.37 +/way Winterspring 67.42 57.23 +/way Winterspring 67.19 51.85 +/way Winterspring 63.49 50.05 +/way Winterspring 58.87 45.42 +/way Winterspring 53.68 45.06 +/way Winterspring 69.19 44.89 +/way Winterspring 59.6 42 +/way Winterspring 67.82 39.48 +/way Winterspring 59.84 37.64 +/way Winterspring 67.43 35.4 +/way Winterspring 66.7 29.13 +/way Winterspring 60.88 28.01 +/way Winterspring 60.16 21.19 +/way Winterspring 53.95 19.05 +/way Winterspring 52.44 18.27 +/way Winterspring 48.51 14.34 +/way Winterspring 44.13 14.69 +/way Winterspring 44.53 21.08 +/way Winterspring 45.31 26.71 +/way Winterspring 46.16 33.23 +/way Winterspring 48.2 45.28 +/way Winterspring 42.52 56.26 +/way Winterspring 42.18 53.86 +/way Winterspring 42.49 45.67 +/way Winterspring 40.75 46.4 +/way Winterspring 40.5 58 +/way Winterspring 39.56 44.86 +/way Winterspring 37.41 47.1 +/way Winterspring 37.05 58.92 +/way Winterspring 35.56 47.08 +/way Winterspring 34.11 59.82 +/way Winterspring 31.96 59.46 +/way Winterspring 31.19 47.17 +/way Winterspring 27.81 58.83 +/way Winterspring 27.7 47.35 +/way Winterspring 26.52 47.47 +/way Winterspring 24.62 62.82 +/way Winterspring 21.76 62.47 /way Winterspring 22.41 58.99 \ No newline at end of file diff --git a/Random Trash/Herbs/Starlight Rose.txt b/WeakAuras/Projects/Random Trash/Herbs/Starlight Rose.txt similarity index 96% rename from Random Trash/Herbs/Starlight Rose.txt rename to WeakAuras/Projects/Random Trash/Herbs/Starlight Rose.txt index e4d8aa5..97feabf 100644 --- a/Random Trash/Herbs/Starlight Rose.txt +++ b/WeakAuras/Projects/Random Trash/Herbs/Starlight Rose.txt @@ -1,200 +1,200 @@ -/way Suramar 52.4 48.2 -/way Suramar 54.4 48.23 -/way Suramar 59.18 50.54 -/way Suramar 58.96 46.15 -/way Suramar 54.91 46.5 -/way Suramar 54.55 47.26 -/way Suramar 61.05 50.74 -/way Suramar 62.89 52.74 -/way Suramar 63.77 54.93 -/way Suramar 70.23 63.85 -/way Suramar 67.49 59.77 -/way Suramar 66.18 57.51 -/way Suramar 64.22 52.52 -/way Suramar 60.07 49.38 -/way Suramar 55.96 45.39 -/way Suramar 22.27 58.65 -/way Suramar 22.86 54.7 -/way Suramar 23.04 53.17 -/way Suramar 23.12 53.84 -/way Suramar 24.63 51.23 -/way Suramar 27.43 41.62 -/way Suramar 24.7 39.47 -/way Suramar 23.73 39.94 -/way Suramar 18.41 47.7 -/way Suramar 19.13 45.07 -/way Suramar 18.87 43.64 -/way Suramar 17.04 43.5 -/way Suramar 15.28 42.46 -/way Suramar 15.58 39.75 -/way Suramar 16.94 39.28 -/way Suramar 17.3 39.97 -/way Suramar 18.19 40.52 -/way Suramar 19.77 43.53 -/way Suramar 19.81 42.84 -/way Suramar 23.16 43.34 -/way Suramar 26.86 40.75 -/way Suramar 27.44 41.95 -/way Suramar 27.32 45.11 -/way Suramar 28.79 47.29 -/way Suramar 31.11 47.49 -/way Suramar 31.52 49.9 -/way Suramar 31.61 54.38 -/way Suramar 33.61 54.24 -/way Suramar 34.03 53.09 -/way Suramar 37.9 48.99 -/way Suramar 39.05 51.47 -/way Suramar 40.39 48.64 -/way Suramar 40.77 48.19 -/way Suramar 44.14 50.24 -/way Suramar 56.5 45.1 -/way Suramar 59.76 42.14 -/way Suramar 58.33 41.44 -/way Suramar 58.51 43.04 -/way Suramar 59.12 47.83 -/way Suramar 35.44 37.57 -/way Suramar 34.72 37.99 -/way Suramar 33.97 37.32 -/way Suramar 20.39 51.41 -/way Suramar 19.48 49.62 -/way Suramar 20.86 49.17 -/way Suramar 21.24 48.51 -/way Suramar 21.67 46.84 -/way Suramar 20.77 46.4 -/way Suramar 20.68 45.54 -/way Suramar 23.78 46.23 -/way Suramar 23.67 45.78 -/way Suramar 24.7 44.5 -/way Suramar 24.36 42.97 -/way Suramar 25.12 42.57 -/way Suramar 25.27 41.14 -/way Suramar 25.49 38.68 -/way Suramar 26.48 37.83 -/way Suramar 28.26 37.27 -/way Suramar 31.6 36.18 -/way Suramar 32.77 37.25 -/way Suramar 33.51 35.46 -/way Suramar 32.97 39.24 -/way Suramar 32.76 40.68 -/way Suramar 30.18 46.7 -/way Suramar 29.81 47.95 -/way Suramar 27.61 50.45 -/way Suramar 27.86 53.57 -/way Suramar 27.06 53.26 -/way Suramar 26.08 53.85 -/way Suramar 25.37 54.48 -/way Suramar 25.15 56.59 -/way Suramar 24.5 55.55 -/way Suramar 22.73 55.49 -/way Suramar 21.64 56.04 -/way Suramar 20.89 52.45 -/way Suramar 21.6 48.93 -/way Suramar 22.78 47 -/way Suramar 23.67 47.17 -/way Suramar 28.81 49.54 -/way Suramar 27.63 49.1 -/way Suramar 28.12 47.43 -/way Suramar 29.6 45.44 -/way Suramar 31.08 44.93 -/way Suramar 32.12 45.11 -/way Suramar 32.86 44.32 -/way Suramar 35.29 50.54 -/way Suramar 31.72 11.15 -/way Suramar 35.36 11.62 -/way Suramar 38.72 14.9 -/way Suramar 39.7 14.87 -/way Suramar 28.23 19.56 -/way Suramar 24.39 25.74 -/way Suramar 26.2 27.16 -/way Suramar 28.07 29.18 -/way Suramar 28.8 38.56 -/way Suramar 30.55 37.63 -/way Suramar 34.55 42.86 -/way Suramar 33.84 50.23 -/way Suramar 35.52 51.77 -/way Suramar 35.33 58.01 -/way Suramar 38.64 62.53 -/way Suramar 40.41 73 -/way Suramar 41.04 81.46 -/way Suramar 41.17 83.21 -/way Suramar 70.07 61.17 -/way Suramar 69.26 62.64 -/way Suramar 68.31 58.27 -/way Suramar 66.58 55.69 -/way Suramar 66.13 53.94 -/way Suramar 65.37 48.57 -/way Suramar 65.11 50.4 -/way Suramar 62.57 50.61 -/way Suramar 65.12 38.6 -/way Suramar 62.25 45.8 -/way Suramar 60.11 46.19 -/way Suramar 58.62 49.54 -/way Suramar 56.22 48.62 -/way Suramar 47.37 55.17 -/way Suramar 41.33 72.02 -/way Suramar 38.71 60.97 -/way Suramar 36.71 59.7 -/way Suramar 39.76 57.54 -/way Suramar 42.32 49.6 -/way Suramar 49.52 47.44 -/way Suramar 49.79 40.3 -/way Suramar 48.78 42.77 -/way Suramar 46.87 39.44 -/way Suramar 36.65 42.98 -/way Suramar 29.53 46.51 -/way Suramar 28.25 46.15 -/way Suramar 25.63 52.48 -/way Suramar 27.12 69.02 -/way Suramar 23.49 61.88 -/way Suramar 26.37 46.84 -/way Suramar 28.77 41.26 -/way Suramar 28.94 43.58 -/way Suramar 30.97 39.66 -/way Suramar 34.05 38.76 -/way Suramar 34.52 44.14 -/way Suramar 36.22 41.74 -/way Suramar 39.85 39.65 -/way Suramar 47.15 41.25 -/way Suramar 40.72 40.06 -/way Suramar 44.52 39.66 -/way Suramar 41.5 38.6 -/way Suramar 44.86 35.75 -/way Suramar 44.63 33.2 -/way Suramar 47.33 28.88 -/way Suramar 32.03 34.06 -/way Suramar 27.66 36 -/way Suramar 27.58 44.62 -/way Suramar 25.91 44.49 -/way Suramar 26.84 48.81 -/way Suramar 22.94 55.55 -/way Suramar 19.91 54.45 -/way Suramar 21.16 53.32 -/way Suramar 22.64 50.19 -/way Suramar 24.23 33.84 -/way Suramar 30.34 33.68 -/way Suramar 30.66 33.03 -/way Suramar 39.58 16.08 -/way Suramar 39.3 14.48 -/way Suramar 34.8 10.58 -/way Suramar 30.29 8.71 -/way Suramar 30.67 12.65 -/way Suramar 31.53 14.5 -/way Suramar 31.63 16.56 -/way Suramar 33.53 20.08 -/way Suramar 34.88 19.76 -/way Suramar 35.59 18.08 -/way Suramar 43.46 27.48 -/way Suramar 42.73 27.39 -/way Suramar 41.23 25.46 -/way Suramar 39.47 24.45 -/way Suramar 38.39 26.94 -/way Suramar 37.32 26.91 -/way Suramar 36.21 30.36 -/way Suramar 27.01 29.36 -/way Suramar 27.04 31.9 -/way Suramar 17.98 42.91 -/way Suramar 15.82 43.16 -/way Suramar 15.74 38.61 -/way Suramar 16.66 36.19 -/way Suramar 21.23 20.19 +/way Suramar 52.4 48.2 +/way Suramar 54.4 48.23 +/way Suramar 59.18 50.54 +/way Suramar 58.96 46.15 +/way Suramar 54.91 46.5 +/way Suramar 54.55 47.26 +/way Suramar 61.05 50.74 +/way Suramar 62.89 52.74 +/way Suramar 63.77 54.93 +/way Suramar 70.23 63.85 +/way Suramar 67.49 59.77 +/way Suramar 66.18 57.51 +/way Suramar 64.22 52.52 +/way Suramar 60.07 49.38 +/way Suramar 55.96 45.39 +/way Suramar 22.27 58.65 +/way Suramar 22.86 54.7 +/way Suramar 23.04 53.17 +/way Suramar 23.12 53.84 +/way Suramar 24.63 51.23 +/way Suramar 27.43 41.62 +/way Suramar 24.7 39.47 +/way Suramar 23.73 39.94 +/way Suramar 18.41 47.7 +/way Suramar 19.13 45.07 +/way Suramar 18.87 43.64 +/way Suramar 17.04 43.5 +/way Suramar 15.28 42.46 +/way Suramar 15.58 39.75 +/way Suramar 16.94 39.28 +/way Suramar 17.3 39.97 +/way Suramar 18.19 40.52 +/way Suramar 19.77 43.53 +/way Suramar 19.81 42.84 +/way Suramar 23.16 43.34 +/way Suramar 26.86 40.75 +/way Suramar 27.44 41.95 +/way Suramar 27.32 45.11 +/way Suramar 28.79 47.29 +/way Suramar 31.11 47.49 +/way Suramar 31.52 49.9 +/way Suramar 31.61 54.38 +/way Suramar 33.61 54.24 +/way Suramar 34.03 53.09 +/way Suramar 37.9 48.99 +/way Suramar 39.05 51.47 +/way Suramar 40.39 48.64 +/way Suramar 40.77 48.19 +/way Suramar 44.14 50.24 +/way Suramar 56.5 45.1 +/way Suramar 59.76 42.14 +/way Suramar 58.33 41.44 +/way Suramar 58.51 43.04 +/way Suramar 59.12 47.83 +/way Suramar 35.44 37.57 +/way Suramar 34.72 37.99 +/way Suramar 33.97 37.32 +/way Suramar 20.39 51.41 +/way Suramar 19.48 49.62 +/way Suramar 20.86 49.17 +/way Suramar 21.24 48.51 +/way Suramar 21.67 46.84 +/way Suramar 20.77 46.4 +/way Suramar 20.68 45.54 +/way Suramar 23.78 46.23 +/way Suramar 23.67 45.78 +/way Suramar 24.7 44.5 +/way Suramar 24.36 42.97 +/way Suramar 25.12 42.57 +/way Suramar 25.27 41.14 +/way Suramar 25.49 38.68 +/way Suramar 26.48 37.83 +/way Suramar 28.26 37.27 +/way Suramar 31.6 36.18 +/way Suramar 32.77 37.25 +/way Suramar 33.51 35.46 +/way Suramar 32.97 39.24 +/way Suramar 32.76 40.68 +/way Suramar 30.18 46.7 +/way Suramar 29.81 47.95 +/way Suramar 27.61 50.45 +/way Suramar 27.86 53.57 +/way Suramar 27.06 53.26 +/way Suramar 26.08 53.85 +/way Suramar 25.37 54.48 +/way Suramar 25.15 56.59 +/way Suramar 24.5 55.55 +/way Suramar 22.73 55.49 +/way Suramar 21.64 56.04 +/way Suramar 20.89 52.45 +/way Suramar 21.6 48.93 +/way Suramar 22.78 47 +/way Suramar 23.67 47.17 +/way Suramar 28.81 49.54 +/way Suramar 27.63 49.1 +/way Suramar 28.12 47.43 +/way Suramar 29.6 45.44 +/way Suramar 31.08 44.93 +/way Suramar 32.12 45.11 +/way Suramar 32.86 44.32 +/way Suramar 35.29 50.54 +/way Suramar 31.72 11.15 +/way Suramar 35.36 11.62 +/way Suramar 38.72 14.9 +/way Suramar 39.7 14.87 +/way Suramar 28.23 19.56 +/way Suramar 24.39 25.74 +/way Suramar 26.2 27.16 +/way Suramar 28.07 29.18 +/way Suramar 28.8 38.56 +/way Suramar 30.55 37.63 +/way Suramar 34.55 42.86 +/way Suramar 33.84 50.23 +/way Suramar 35.52 51.77 +/way Suramar 35.33 58.01 +/way Suramar 38.64 62.53 +/way Suramar 40.41 73 +/way Suramar 41.04 81.46 +/way Suramar 41.17 83.21 +/way Suramar 70.07 61.17 +/way Suramar 69.26 62.64 +/way Suramar 68.31 58.27 +/way Suramar 66.58 55.69 +/way Suramar 66.13 53.94 +/way Suramar 65.37 48.57 +/way Suramar 65.11 50.4 +/way Suramar 62.57 50.61 +/way Suramar 65.12 38.6 +/way Suramar 62.25 45.8 +/way Suramar 60.11 46.19 +/way Suramar 58.62 49.54 +/way Suramar 56.22 48.62 +/way Suramar 47.37 55.17 +/way Suramar 41.33 72.02 +/way Suramar 38.71 60.97 +/way Suramar 36.71 59.7 +/way Suramar 39.76 57.54 +/way Suramar 42.32 49.6 +/way Suramar 49.52 47.44 +/way Suramar 49.79 40.3 +/way Suramar 48.78 42.77 +/way Suramar 46.87 39.44 +/way Suramar 36.65 42.98 +/way Suramar 29.53 46.51 +/way Suramar 28.25 46.15 +/way Suramar 25.63 52.48 +/way Suramar 27.12 69.02 +/way Suramar 23.49 61.88 +/way Suramar 26.37 46.84 +/way Suramar 28.77 41.26 +/way Suramar 28.94 43.58 +/way Suramar 30.97 39.66 +/way Suramar 34.05 38.76 +/way Suramar 34.52 44.14 +/way Suramar 36.22 41.74 +/way Suramar 39.85 39.65 +/way Suramar 47.15 41.25 +/way Suramar 40.72 40.06 +/way Suramar 44.52 39.66 +/way Suramar 41.5 38.6 +/way Suramar 44.86 35.75 +/way Suramar 44.63 33.2 +/way Suramar 47.33 28.88 +/way Suramar 32.03 34.06 +/way Suramar 27.66 36 +/way Suramar 27.58 44.62 +/way Suramar 25.91 44.49 +/way Suramar 26.84 48.81 +/way Suramar 22.94 55.55 +/way Suramar 19.91 54.45 +/way Suramar 21.16 53.32 +/way Suramar 22.64 50.19 +/way Suramar 24.23 33.84 +/way Suramar 30.34 33.68 +/way Suramar 30.66 33.03 +/way Suramar 39.58 16.08 +/way Suramar 39.3 14.48 +/way Suramar 34.8 10.58 +/way Suramar 30.29 8.71 +/way Suramar 30.67 12.65 +/way Suramar 31.53 14.5 +/way Suramar 31.63 16.56 +/way Suramar 33.53 20.08 +/way Suramar 34.88 19.76 +/way Suramar 35.59 18.08 +/way Suramar 43.46 27.48 +/way Suramar 42.73 27.39 +/way Suramar 41.23 25.46 +/way Suramar 39.47 24.45 +/way Suramar 38.39 26.94 +/way Suramar 37.32 26.91 +/way Suramar 36.21 30.36 +/way Suramar 27.01 29.36 +/way Suramar 27.04 31.9 +/way Suramar 17.98 42.91 +/way Suramar 15.82 43.16 +/way Suramar 15.74 38.61 +/way Suramar 16.66 36.19 +/way Suramar 21.23 20.19 /way Suramar 22.84 19.42 \ No newline at end of file diff --git a/Random Trash/Herbs/_How2Find.txt b/WeakAuras/Projects/Random Trash/Herbs/_How2Find.txt similarity index 97% rename from Random Trash/Herbs/_How2Find.txt rename to WeakAuras/Projects/Random Trash/Herbs/_How2Find.txt index a9f7cfd..c8bebc5 100644 --- a/Random Trash/Herbs/_How2Find.txt +++ b/WeakAuras/Projects/Random Trash/Herbs/_How2Find.txt @@ -1,2 +1,2 @@ -(\d+.?\d+) +(\d+.?\d+) left: (\d+.?\d+)%; top: (\d+.?\d+) \ No newline at end of file diff --git a/Random Trash/Interesting Shit/BARS QUESTIONMARK.lua b/WeakAuras/Projects/Random Trash/Interesting Shit/BARS QUESTIONMARK.lua similarity index 96% rename from Random Trash/Interesting Shit/BARS QUESTIONMARK.lua rename to WeakAuras/Projects/Random Trash/Interesting Shit/BARS QUESTIONMARK.lua index c787dec..aafb551 100644 --- a/Random Trash/Interesting Shit/BARS QUESTIONMARK.lua +++ b/WeakAuras/Projects/Random Trash/Interesting Shit/BARS QUESTIONMARK.lua @@ -1,132 +1,132 @@ ---1 -function(allstates) - for _, v in pairs(allstates) do - v.show = false; - v.changed = true; - end - for unit in aura_env.GroupMembers() do - if UnitIsVisible(unit) then - local role = UnitGroupRolesAssigned(unit) - --local icon = aura_env.roles[role] or "" - local name = string.sub(UnitName(unit),1,6) - local _, class = UnitClass(unit) - local _,_,_,str = GetClassColor(class) - name = string.format("|c%s%s|r", str, name) - local inside = WA_GetUnitDebuff(unit, GetSpellInfo(236283)) and "inside" - local dead = UnitIsDeadOrGhost(unit) and "DEAD" - local flag = inside or "" - local torment = UnitPower(unit, 10) - - local index = (100 - torment) - if role == "TANK" then - index = index - 1000 - elseif role == "HEALER" then - index = index - 500 - end - if inside then index = index - 100 end - - allstates[unit] = allstates[unit] or {}; - local state = allstates[unit]; - state.index = index - state.resort = true - state.ID = unit - state.show = true; - state.changed = true; - state.name = dead or name; - state.progressType = "static"; - state.value = torment - state.total = 100 - state.flag = flag - end - end - - for i = 1,3 do - local icon = i == 3 and aura_env.roles["TANK"] - or i == 2 and aura_env.roles["HEALER"] - or aura_env.roles["DAMAGER"] - local name = i == 3 and "TANKS" or i == 2 and "HEALERS" or "DPS" - local col = i == 3 and "FF8C00" or i == 2 and "7FFF00" or "DC143C" - local flag = string.format("%s |cFF%s%s|r %s", icon, col, name, icon) - - allstates["spacer"..i] = allstates["spacer"..i] or {}; - local state = allstates["spacer"..i]; - state.index = i * -400 - state.resort = true - state.ID = "spacer" - state.show = true; - state.changed = true; - state.name = "" - state.progressType = "static"; - state.value = 0 - state.total = 100 - state.flag = flag - end - - for k, v in pairs(allstates) do - if v.ID == "spacer" then - local region = WeakAuras.GetRegion(aura_env.id, k) - region.timer:ClearAllPoints() - region.timer:SetPoint("CENTER", region.bar, "CENTER") - region.bar.bg:SetVertexColor(1,1,1,0) - end - end - - return true -end - - ---2 -function aura_env.GroupMembers(reversed, forceParty) - local unit = (not forceParty and IsInRaid()) and 'raid' or 'party' - local numGroupMembers = forceParty and GetNumSubgroupMembers() or GetNumGroupMembers() - local i = reversed and numGroupMembers or (unit == 'party' and 0 or 1) - return function() - local ret - if i == 0 and unit == 'party' then - ret = 'player' - elseif i <= numGroupMembers and i > 0 then - ret = unit .. i - end - i = i + (reversed and -1 or 1) - return ret - end -end - -aura_env.roles = { - ["TANK"] = "|TInterface\\LFGFrame\\UI-LFG-ICON-PORTRAITROLES:0:0:0:0:64:64:0:19:22:41|t", - ["HEALER"] = "|TInterface\\LFGFrame\\UI-LFG-ICON-PORTRAITROLES:0:0:0:0:64:64:20:39:1:20|t", - ["DAMAGER"] = "|TInterface\\LFGFrame\\UI-LFG-ICON-PORTRAITROLES:0:0:0:0:64:64:20:39:22:41|t" -} - - ---3 -function() - local r,g,b = 0,1,0 - if aura_env and aura_env.statee then - if aura_env.statee.value > 40 then - r,g,b = 1,1,0 - end - if aura_env.statee.value > 80 then - r,g,b = 1,0.5,0 - end - if aura_env.statee.value > 95 then - r,g,b = 1,0,0 - end - local region = WeakAuras.GetRegion(aura_env.id, aura_env.statee.ID) - region.text:ClearAllPoints() - region.text:SetPoint("RIGHT", region.bar, "LEFT", -3,1) - region.text:SetJustifyH("RIGHT") - - end - return r, g, b, 1 -end - - ---4 -function(_,_,prog) - if aura_env.statee and aura_env.statee.ID == "spacer" then - return "" - else - return prog - end +--1 +function(allstates) + for _, v in pairs(allstates) do + v.show = false; + v.changed = true; + end + for unit in aura_env.GroupMembers() do + if UnitIsVisible(unit) then + local role = UnitGroupRolesAssigned(unit) + --local icon = aura_env.roles[role] or "" + local name = string.sub(UnitName(unit),1,6) + local _, class = UnitClass(unit) + local _,_,_,str = GetClassColor(class) + name = string.format("|c%s%s|r", str, name) + local inside = WA_GetUnitDebuff(unit, GetSpellInfo(236283)) and "inside" + local dead = UnitIsDeadOrGhost(unit) and "DEAD" + local flag = inside or "" + local torment = UnitPower(unit, 10) + + local index = (100 - torment) + if role == "TANK" then + index = index - 1000 + elseif role == "HEALER" then + index = index - 500 + end + if inside then index = index - 100 end + + allstates[unit] = allstates[unit] or {}; + local state = allstates[unit]; + state.index = index + state.resort = true + state.ID = unit + state.show = true; + state.changed = true; + state.name = dead or name; + state.progressType = "static"; + state.value = torment + state.total = 100 + state.flag = flag + end + end + + for i = 1,3 do + local icon = i == 3 and aura_env.roles["TANK"] + or i == 2 and aura_env.roles["HEALER"] + or aura_env.roles["DAMAGER"] + local name = i == 3 and "TANKS" or i == 2 and "HEALERS" or "DPS" + local col = i == 3 and "FF8C00" or i == 2 and "7FFF00" or "DC143C" + local flag = string.format("%s |cFF%s%s|r %s", icon, col, name, icon) + + allstates["spacer"..i] = allstates["spacer"..i] or {}; + local state = allstates["spacer"..i]; + state.index = i * -400 + state.resort = true + state.ID = "spacer" + state.show = true; + state.changed = true; + state.name = "" + state.progressType = "static"; + state.value = 0 + state.total = 100 + state.flag = flag + end + + for k, v in pairs(allstates) do + if v.ID == "spacer" then + local region = WeakAuras.GetRegion(aura_env.id, k) + region.timer:ClearAllPoints() + region.timer:SetPoint("CENTER", region.bar, "CENTER") + region.bar.bg:SetVertexColor(1,1,1,0) + end + end + + return true +end + + +--2 +function aura_env.GroupMembers(reversed, forceParty) + local unit = (not forceParty and IsInRaid()) and 'raid' or 'party' + local numGroupMembers = forceParty and GetNumSubgroupMembers() or GetNumGroupMembers() + local i = reversed and numGroupMembers or (unit == 'party' and 0 or 1) + return function() + local ret + if i == 0 and unit == 'party' then + ret = 'player' + elseif i <= numGroupMembers and i > 0 then + ret = unit .. i + end + i = i + (reversed and -1 or 1) + return ret + end +end + +aura_env.roles = { + ["TANK"] = "|TInterface\\LFGFrame\\UI-LFG-ICON-PORTRAITROLES:0:0:0:0:64:64:0:19:22:41|t", + ["HEALER"] = "|TInterface\\LFGFrame\\UI-LFG-ICON-PORTRAITROLES:0:0:0:0:64:64:20:39:1:20|t", + ["DAMAGER"] = "|TInterface\\LFGFrame\\UI-LFG-ICON-PORTRAITROLES:0:0:0:0:64:64:20:39:22:41|t" +} + + +--3 +function() + local r,g,b = 0,1,0 + if aura_env and aura_env.statee then + if aura_env.statee.value > 40 then + r,g,b = 1,1,0 + end + if aura_env.statee.value > 80 then + r,g,b = 1,0.5,0 + end + if aura_env.statee.value > 95 then + r,g,b = 1,0,0 + end + local region = WeakAuras.GetRegion(aura_env.id, aura_env.statee.ID) + region.text:ClearAllPoints() + region.text:SetPoint("RIGHT", region.bar, "LEFT", -3,1) + region.text:SetJustifyH("RIGHT") + + end + return r, g, b, 1 +end + + +--4 +function(_,_,prog) + if aura_env.statee and aura_env.statee.ID == "spacer" then + return "" + else + return prog + end end \ No newline at end of file diff --git a/Random Trash/Interesting Shit/SeaStar.lua b/WeakAuras/Projects/Random Trash/Interesting Shit/SeaStar.lua similarity index 96% rename from Random Trash/Interesting Shit/SeaStar.lua rename to WeakAuras/Projects/Random Trash/Interesting Shit/SeaStar.lua index 0a81513..4050ada 100644 --- a/Random Trash/Interesting Shit/SeaStar.lua +++ b/WeakAuras/Projects/Random Trash/Interesting Shit/SeaStar.lua @@ -1,134 +1,134 @@ ---Text? -function() - if not WeakAuras.IsOptionsOpen() then - WeakAuras.regions[aura_env.id].region.text2:SetText(string.format("Shuffle in %i casts", 10-aura_env.casts)) - -- return math.floor(((aura_env.rate - aura_env.success) / (10 - aura_env.casts) * 100) + 0.5) .. "%" - return aura_env.rate - aura_env.success - else - return "0" - end -end - - ---ENCOUNTER_START COMBAT_LOG_EVENT_UNFILTERED ENCOUNTER_END -function(event, ...) - if event == "ENCOUNTER_START" then - local id, id2 = ... - if not id then return end - --print("COMBAT STARTED") - - if GetNumGroupMembers() <= 5 then return end - local specID = GetSpecializationInfo(GetSpecialization()) - if not aura_env.procRate[specID] then return end - aura_env.reset() - aura_env.rate = aura_env.procRate[specID] - return true - - elseif event == "COMBAT_LOG_EVENT_UNFILTERED" then - local _, type, _, source, _, _, _, dest, _, _, _, spell, name = ... - - if type == "SPELL_CAST_SUCCESS" and source == aura_env.player and aura_env.spells[spell] then - if not aura_env.checkBuff() then - - aura_env.casts = aura_env.casts + 1 - end - - if aura_env.casts >= 10 then - aura_env.reset() - end - elseif (type == "SPELL_AURA_APPLIED" and - dest == aura_env.player and - (spell >= 242459 and spell <= 242474)) then - -- Because Blizzard needed 8 auras for one proc. - - aura_env.success = aura_env.success + 1 - if aura_env.casts == 0 then - aura_env.success = 0 - end - - - end - end -end - ---Untrigger -function(event, ...) - if event == "ENCOUNTER_END" then - local id, id2 = ... - if not id then return end - - print("ENCOUNTER ENDED") - print(...) - return true - - end - - -end - ---Name -function() - return string.format("Shuffle in %i casts", 10-aura_env.casts) -end - ---Every Frame -function() - return (aura_env.rate - aura_env.success) == 0 and not aura_env.checkBuff() - -end - ---INIT ---[[ -Author: Voulk (Discord: Voulk#1858) -Wago Link: X - -You can read more on the new deck based RNG system here: -https://questionablyepic.com/deck-RNG - - -]] - - - -aura_env.player = UnitGUID"player" -aura_env.buffID = 0 -aura_env.rate = 0 -aura_env.reset = function() - aura_env.deckSize = 10 - aura_env.success = 0 - aura_env.casts = 0 -end -aura_env.reset() - -aura_env.spells = -{ - [1064] = true, -- chain heal - [48438] = true, -- wild growth - [596] = true, -- prayer of healing - [85222] = true, -- light of dawn - [194509] = true, -- pw:r - [191837] = true -- essence font -} - -aura_env.procRate = -{ - [105] = 5, -- rdruid - [270] = 5, -- mw - [256] = 6, -- disc - [257] = 4, -- holy - [264] = 4, -- rsham - [65] = 4 -- hpal -} - - - --- Checks if the aura is active. If it is, we had a proc. -aura_env.checkBuff = function() - - local _, _, _, _, _, duration, expTime = UnitBuff("player", "Ocean's Embrace") - if duration then - return true - end - -end - +--Text? +function() + if not WeakAuras.IsOptionsOpen() then + WeakAuras.regions[aura_env.id].region.text2:SetText(string.format("Shuffle in %i casts", 10-aura_env.casts)) + -- return math.floor(((aura_env.rate - aura_env.success) / (10 - aura_env.casts) * 100) + 0.5) .. "%" + return aura_env.rate - aura_env.success + else + return "0" + end +end + + +--ENCOUNTER_START COMBAT_LOG_EVENT_UNFILTERED ENCOUNTER_END +function(event, ...) + if event == "ENCOUNTER_START" then + local id, id2 = ... + if not id then return end + --print("COMBAT STARTED") + + if GetNumGroupMembers() <= 5 then return end + local specID = GetSpecializationInfo(GetSpecialization()) + if not aura_env.procRate[specID] then return end + aura_env.reset() + aura_env.rate = aura_env.procRate[specID] + return true + + elseif event == "COMBAT_LOG_EVENT_UNFILTERED" then + local _, type, _, source, _, _, _, dest, _, _, _, spell, name = ... + + if type == "SPELL_CAST_SUCCESS" and source == aura_env.player and aura_env.spells[spell] then + if not aura_env.checkBuff() then + + aura_env.casts = aura_env.casts + 1 + end + + if aura_env.casts >= 10 then + aura_env.reset() + end + elseif (type == "SPELL_AURA_APPLIED" and + dest == aura_env.player and + (spell >= 242459 and spell <= 242474)) then + -- Because Blizzard needed 8 auras for one proc. + + aura_env.success = aura_env.success + 1 + if aura_env.casts == 0 then + aura_env.success = 0 + end + + + end + end +end + +--Untrigger +function(event, ...) + if event == "ENCOUNTER_END" then + local id, id2 = ... + if not id then return end + + print("ENCOUNTER ENDED") + print(...) + return true + + end + + +end + +--Name +function() + return string.format("Shuffle in %i casts", 10-aura_env.casts) +end + +--Every Frame +function() + return (aura_env.rate - aura_env.success) == 0 and not aura_env.checkBuff() + +end + +--INIT +--[[ +Author: Voulk (Discord: Voulk#1858) +Wago Link: X + +You can read more on the new deck based RNG system here: +https://questionablyepic.com/deck-RNG + + +]] + + + +aura_env.player = UnitGUID"player" +aura_env.buffID = 0 +aura_env.rate = 0 +aura_env.reset = function() + aura_env.deckSize = 10 + aura_env.success = 0 + aura_env.casts = 0 +end +aura_env.reset() + +aura_env.spells = +{ + [1064] = true, -- chain heal + [48438] = true, -- wild growth + [596] = true, -- prayer of healing + [85222] = true, -- light of dawn + [194509] = true, -- pw:r + [191837] = true -- essence font +} + +aura_env.procRate = +{ + [105] = 5, -- rdruid + [270] = 5, -- mw + [256] = 6, -- disc + [257] = 4, -- holy + [264] = 4, -- rsham + [65] = 4 -- hpal +} + + + +-- Checks if the aura is active. If it is, we had a proc. +aura_env.checkBuff = function() + + local _, _, _, _, _, duration, expTime = UnitBuff("player", "Ocean's Embrace") + if duration then + return true + end + +end + diff --git a/Random Trash/Some stuff.lua b/WeakAuras/Projects/Random Trash/Some stuff.lua similarity index 96% rename from Random Trash/Some stuff.lua rename to WeakAuras/Projects/Random Trash/Some stuff.lua index 704fae0..a2d6217 100644 --- a/Random Trash/Some stuff.lua +++ b/WeakAuras/Projects/Random Trash/Some stuff.lua @@ -1,17 +1,17 @@ ---COMBAT_LOG_EVENT_UNFILTERED -function(event, ...) - destFlags = select(10, ...) - --for i = 1, 40 do - --local x = select(i, ...) - --if x then - --print(i, x) - --end - --end - local se = select(2, ...) - if se == "SPELL_CAST_SUCCESS" then - local id = select(12, ...) - if (destFlags) then - print(CombatLog_Object_IsA(destFlags, COMBATLOG_FILTER_HOSTILE_PLAYERS)) - end - end -end +--COMBAT_LOG_EVENT_UNFILTERED +function(event, ...) + destFlags = select(10, ...) + --for i = 1, 40 do + --local x = select(i, ...) + --if x then + --print(i, x) + --end + --end + local se = select(2, ...) + if se == "SPELL_CAST_SUCCESS" then + local id = select(12, ...) + if (destFlags) then + print(CombatLog_Object_IsA(destFlags, COMBATLOG_FILTER_HOSTILE_PLAYERS)) + end + end +end diff --git a/Random Trash/Spells of some sort.txt b/WeakAuras/Projects/Random Trash/Spells of some sort.txt similarity index 95% rename from Random Trash/Spells of some sort.txt rename to WeakAuras/Projects/Random Trash/Spells of some sort.txt index a7c91a5..95ca855 100644 --- a/Random Trash/Spells of some sort.txt +++ b/WeakAuras/Projects/Random Trash/Spells of some sort.txt @@ -1,770 +1,770 @@ -SPELLS - -Paladin -Prot -Arcane Torrent 155145 90 -Honorable Medallion 195710 180 -Portal: Vale of Eternal Blossoms 132626 60 -Ardent Defender 498 60 -Avenging Wrath 31884 21 -Bastion of Light 204035 120 -Divine Shield 642 300 -Eye of Tyr 209202 60 -Guardian of Ancient Kings 86659 300 -Hammer of Justice 853 60 -Lay on Hands 633 600 -Bastion of Light 204035 120 -Blinding Light 115750 90 -Blessing of Spellwarding 204018 180 -Aegis of Light 204150 180 -Seraphim 152262 30 -Gladiator's Medallion 208683 120 -Shield of Virtue 215652 25 -Guardian of the Forgotten Queen 228049 180 -Holy -Arcane Torrent 155145 90 -Honorable Medallion 195710 180 -Portal: Vale of Eternal Blossoms 132626 60 -Aura Mastery 31821 180 -Avenging Wrath 31842 120 -Blinding Light 115750 90 -Divine Protection 498 60 -Divine Shield 642 300 -Hammer of Justice 853 60 -Holy Avenger 105809 90 -Lay on Hands 633 600 -Tyr's Deliverance 200652 90 -Light's Hammer 114158 60 -Blinding Light 115750 90 -Aura of Mercy 183415 180 -Holy Avenger 105809 90 -Gladiator's Medallion 208683 120 -Divine Favor 210294 45 -Avenging Crusader 216331 60 - -Ret -Arcane Torrent 155145 90 -Honorable Medallion 195710 180 -Portal: Vale of Eternal Blossoms 132626 60 -Crusade 31884 21 -Divine Shield 642 300 -Hammer of Justice 853 60 -Hand of Hindrance 183218 30 -Lay on Hands 633 600 -Shield of Vengeance 184662 120 -Wake of Ashes 205273 30 -Blinding Light 115750 90 -Eye for an Eye 205191 60 -Holy Wrath 210220 180 -Gladiator's Medallion 208683 120 -Blessing of Sanctuary 210256 45 -Hammer of Reckoning 247675 60 - - - -Druid -Balance -Honorable Medallion 195710 180 -Shadowmeld 58984 120 -Barkskin 22812 60 -Celestial Alignment 194223 180 -Dash 1850 180 -Displacer Beast 102280 30 -Dreamwalk 193753 60 -Innervate 29166 180 -Rebirth 20484 600 -Solar Beam 78675 60 -Warrior of Elune 202425 45 -Force of Nature 205636 60 -Warrior of Elune 202425 45 -Renewal 108238 90 -Displacer Beast 102280 30 -Mighty Bash 5211 50 -Mass Entanglement 102359 30 -Typhoon 132469 30 -Incarnation: Chosen of Elune 102560 180 -Astral Communion 202359 80 -Fury of Elune 202770 90 -Gladiator's Medallion 208683 120 -Faerie Swarm 209749 30 - -Feral -Honorable Medallion 195710 180 -Shadowmeld 58984 120 -Ashamane's Frenzy 210722 75 -Berserk 106951 180 -Dash 1850 180 -Dreamwalk 193753 60 -Rebirth 20484 600 -Stampeding Roar 106898 120 -Tiger's Fury 5217 30 -Renewal 108238 90 -Displacer Beast 102280 30 -Mighty Bash 5211 50 -Mass Entanglement 102359 30 -Typhoon 132469 30 -Incarnation: King of the Jungle 102543 180 -Elune's Guidance 202060 45 -Gladiator's Medallion 208683 120 -Thorns 236696 45 -Rip and Tear 203242 60 - -Guardian -Honorable Medallion 195710 180 -Shadowmeld 58984 120 -Barkskin 22812 60 -Dash 1850 180 -Dreamwalk 193753 60 -Incapacitating Roar 99 30 -Rage of the Sleeper 200851 90 -Rebirth 20484 600 -Stampeding Roar 106898 120 -Bristling Fur 155835 40 -Intimidating Roar 236748 30 -Mighty Bash 5211 50 -Mass Entanglement 102359 30 -Typhoon 132469 30 -Incarnation: Guardian of Ursoc 102558 180 -Lunar Beam 204066 75 -Gladiator's Medallion 208683 120 -Demoralizing Roar 201664 30 -Overrun 202246 25 - -Resto -Honorable Medallion 195710 180 -Shadowmeld 58984 120 -Barkskin 22812 60 -Dash 1850 180 -Displacer Beast 102280 30 -Dreamwalk 193753 60 -Essence of G'Hanir 208253 90 -Innervate 29166 180 -Ironbark 102342 90 -Rebirth 20484 600 -Tranquility 740 180 -Ursol's Vortex 102793 60 -Cenarion Ward 102351 30 -Renewal 108238 90 -Displacer Beast 102280 30 -Mighty Bash 5211 50 -Mass Entanglement 102359 30 -Typhoon 132469 30 -Incarnation: Tree of Life 33891 180 -Flourish 197721 60 -Gladiator's Medallion 208683 120 -Thorns 203727 45 -Overgrowth 203651 45 - - - -Warrior -Prot -Blood Fury 20572 120 -Battle Cry 1719 60 -Berserker Rage 18499 60 -Demoralizing Shout 1160 90 -Last Stand 12975 180 -Neltharion's Fury 203524 45 -Shield Wall 871 240 -Shockwave 46968 40 -Shockwave 46968 40 -Storm Bolt 107570 30 -Impending Victory 202168 30 -Avatar 107574 90 -Ravager 228920 60 -Gladiator's Medallion 208683 120 -Mass Spell Reflection 213915 30 -Disarm 236236 45 - -Fury -Blood Fury 20572 120 -Battle Cry 1719 60 -Berserker Rage 18499 60 -Bloodbath 12292 30 -Commanding Shout 97462 180 -Enraged Regeneration 184364 120 -Intimidating Shout 5246 90 -Odyn's Fury 205545 45 -Shockwave 46968 40 -Shockwave 46968 40 -Storm Bolt 107570 30 -Avatar 107574 90 -Bloodbath 12292 30 -Bladestorm 46924 90 -Dragon Roar 118000 25 -Gladiator's Medallion 208683 120 -Disarm 236077 45 -Spell Reflection 216890 25 - -Arms -Blood Fury 20572 120 -Battle Cry 1719 60 -Berserker Rage 18499 60 -Bladestorm 227847 90 -Commanding Shout 97462 180 -Die by the Sword 118038 180 -Intimidating Shout 5246 90 -Shockwave 46968 40 -Warbreaker 209577 60 -Shockwave 46968 40 -Storm Bolt 107570 30 -Avatar 107574 90 -Ravager 152277 60 -Gladiator's Medallion 208683 120 -Disarm 236077 45 -Spell Reflection 216890 25 -Duel 236273 60 -War Banner 236320 90 -Sharpen Blade 198817 25 - - - -Hunter -BM -Every Man for Himself 59752 120 -Honorable Medallion 195710 180 -Aspect of the Cheetah 186257 180 -Aspect of the Turtle 186265 180 -Aspect of the Wild 193530 120 -Bestial Wrath 19574 90 -Counter Shot 147362 24 -Exhilaration 109304 120 -Feign Death 5384 30 -Misdirection 34477 30 -Titan's Thunder 207068 60 -Binding Shot 109248 45 -Wyvern Sting 19386 45 -Intimidation 19577 60 -A Murder of Crows 131894 60 -Stampede 201430 180 -Gladiator's Medallion 208683 120 -Viper Sting 202797 30 -Scorpid Sting 202900 24 -Spider Sting 202914 45 -Dire Beast: Hawk 208652 30 -Dire Beast: Basilisk 205691 120 -Interlope 248518 45 - -MM -Every Man for Himself 59752 120 -Honorable Medallion 195710 180 -Aspect of the Cheetah 186257 180 -Aspect of the Turtle 186265 180 -Bursting Shot 186387 30 -Counter Shot 147362 24 -Exhilaration 109304 120 -Feign Death 5384 30 -Misdirection 34477 30 -Trueshot 193526 180 -Explosive Shot 212431 30 -Sentinel 206817 60 -Binding Shot 109248 45 -Wyvern Sting 19386 45 -Camouflage 199483 60 -A Murder of Crows 131894 60 -Piercing Shot 198670 30 -Gladiator's Medallion 208683 120 -Viper Sting 202797 30 -Scorpid Sting 202900 24 -Spider Sting 202914 45 -Scatter Shot 213691 30 -Hi-Explosive Trap 236776 40 - -Surv -Every Man for Himself 59752 120 -Honorable Medallion 195710 180 -Aspect of the Cheetah 186257 180 -Aspect of the Eagle 186289 120 -Aspect of the Turtle 186265 180 -Exhilaration 109304 120 -Feign Death 5384 30 -Fury of the Eagle 203415 45 -A Murder of Crows 206505 60 -Snake Hunter 201078 120 -Steel Trap 162488 60 -Sticky Bomb 191241 25 -Camouflage 199483 60 -Dragonsfire Grenade 194855 30 -Spitting Cobra 194407 60 -Gladiator's Medallion 208683 120 -Viper Sting 202797 30 -Scorpid Sting 202900 24 -Spider Sting 202914 45 -Mending Bandage 212640 25 -Master's Call 53271 45 - - - -Warlock -Affli -Arcane Torrent 28730 90 -Create Soulwell 29893 120 -Ritual of Summoning 698 120 -Soul Harvest 196098 120 -Soulstone 20707 600 -Summon Doomguard 18540 180 -Summon Infernal 1122 180 -Unending Resolve 104773 180 -Haunt 48181 25 -Mortal Coil 6789 45 -Howl of Terror 5484 40 -Phantom Singularity 205179 40 -Soul Harvest 196098 120 -Dark Pact 108416 60 -Grimoire of Service 108501 90 -Grimoire of Sacrifice 108503 30 -Gladiator's Medallion 208683 120 -Curse of Fragility 199954 45 -Casting Circle 221703 30 -Nether Ward 212295 45 -Soulshatter 212356 60 -Curse of Shadows 234877 30 - -Destro -Arcane Torrent 28730 90 -Create Soulwell 29893 120 -Havoc 80240 45 -Ritual of Summoning 698 120 -Soulstone 20707 600 -Summon Doomguard 18540 180 -Summon Infernal 1122 180 -Unending Resolve 104773 180 -Mortal Coil 6789 45 -Shadowfury 30283 30 -Cataclysm 152108 30 -Soul Harvest 196098 120 -Dark Pact 108416 60 -Grimoire of Service 108501 90 -Grimoire of Sacrifice 108503 30 -Channel Demonfire 196447 25 -Gladiator's Medallion 208683 120 -Curse of Fragility 199954 45 -Casting Circle 221703 30 -Nether Ward 212295 45 -Firestone 212284 25 -Bane of Havoc 200546 45 - -Demo -Arcane Torrent 28730 90 -Create Soulwell 29893 120 -Ritual of Summoning 698 120 -Soulstone 20707 600 -Summon Doomguard 18540 180 -Summon Infernal 1122 180 -Thal'kiel's Consumption 211714 45 -Unending Resolve 104773 180 -Mortal Coil 6789 45 -Shadowfury 30283 30 -Soul Harvest 196098 120 -Dark Pact 108416 60 -Grimoire of Service 108501 90 -Summon Darkglare 205180 24 -Gladiator's Medallion 208683 120 -Curse of Fragility 199954 45 -Casting Circle 221703 30 -Nether Ward 212295 45 -Call Felhunter 212619 24 -Call Fel Lord 212459 90 -Call Observer 201996 90 - - - -Monk -MW -Shadowmeld 58984 120 -Diffuse Magic 122783 90 -Fortifying Brew 243435 90 -Life Cocoon 116849 180 -Revival 115310 180 -Thunder Focus Tea 116680 30 -Transcendence: Transfer 119996 25 -Zen Pilgrimage 126892 60 -Chi Burst 123986 30 -Tiger's Lust 116841 30 -Ring of Peace 116844 45 -Leg Sweep 119381 45 -Diffuse Magic 122783 90 -Dampen Harm 122278 120 -Invoke Chi-Ji, the Red Crane 198664 180 -Mana Tea 197908 90 -Gladiator's Medallion 208683 120 -Zen Focus Tea 209584 45 -Way of the Crane 216113 45 - -BM -Shadowmeld 58984 120 -Chi Burst 123986 30 -Exploding Keg 214326 75 -Fortifying Brew 115203 420 -Tiger's Lust 116841 30 -Transcendence: Transfer 119996 25 -Zen Meditation 115176 300 -Zen Pilgrimage 126892 60 -Chi Burst 123986 30 -Tiger's Lust 116841 30 -Black Ox Brew 115399 90 -Ring of Peace 116844 45 -Leg Sweep 119381 45 -Dampen Harm 122278 120 -Invoke Niuzao, the Black Ox 132578 180 -Gladiator's Medallion 208683 120 -Guard 202162 45 -Double Barrel 202335 45 -Mighty Ox Kick 202370 30 - -WW -Shadowmeld 58984 120 -Chi Burst 123986 30 -Energizing Elixir 115288 60 -Fists of Fury 113656 24 -Flying Serpent Kick 101545 25 -Strike of the Windlord 205320 40 -Tiger's Lust 116841 30 -Touch of Death 115080 120 -Touch of Karma 122470 90 -Transcendence: Transfer 119996 25 -Whirling Dragon Punch 152175 24 -Zen Pilgrimage 126892 60 -Chi Burst 123986 30 -Tiger's Lust 116841 30 -Energizing Elixir 115288 60 -Ring of Peace 116844 45 -Leg Sweep 119381 45 -Diffuse Magic 122783 90 -Dampen Harm 122278 120 -Invoke Xuen, the White Tiger 123904 180 -Whirling Dragon Punch 152175 24 -Serenity 152173 90 -Gladiator's Medallion 208683 120 -Fortifying Brew 201318 90 -Zen Moment 201325 45 -Grapple Weapon 233759 60 - - - -Priest -Shadow -Arcane Torrent 232633 90 -Dispersion 47585 120 -Fade 586 30 -Mind Bomb 8122 60 -Shadow Crash 205385 30 -Shadowfiend 34433 180 -Silence 15487 45 -Vampiric Embrace 15286 180 -Void Torrent 205065 60 -Mind Bomb 205369 30 -Power Infusion 10060 120 -Mindbender 200174 60 -Shadow Crash 205385 30 -Surrender to Madness 193223 600 -Gladiator's Medallion 208683 120 -Psyfiend 211522 45 -Void Shift 108968 300 - -Holy -Arcane Torrent 232633 90 -Desperate Prayer 19236 90 -Divine Hymn 64843 180 -Fade 586 30 -Guardian Spirit 47788 240 -Holy Word: Chastise 88625 60 -Holy Word: Sanctify 34861 60 -Leap of Faith 73325 90 -Shining Force 204263 45 -Symbol of Hope 64901 360 -Halo 120517 40 -Apotheosis 200183 180 -Gladiator's Medallion 208683 120 -Inner Focus 196762 30 -Holy Ward 213610 30 -Greater Fade 213602 45 -Ray of Hope 197268 60 - -Disc -Arcane Torrent 232633 90 -Evangelism 246287 75 -Fade 586 30 -Leap of Faith 73325 90 -Light's Wrath 207946 90 -Mindbender 34433 180 -Pain Suppression 33206 240 -Power Word: Barrier 62618 180 -Psychic Scream 8122 60 -Rapture 47536 120 -Shining Force 204263 45 -Mindbender 123040 60 -Halo 120517 40 -Power Infusion 10060 120 -Evangelism 246287 75 -Gladiator's Medallion 208683 120 -Archangel 197862 60 -Dark Archangel 197871 60 - - - -DH -Havoc -Arcane Torrent 202719 90 -Honorable Medallion 195710 180 -Blur 198589 60 -Chaos Blades 247938 120 -Chaos Nova 179057 60 -Darkness 196718 180 -Eye Beam 198013 45 -Fury of the Illidari 201467 60 -Metamorphosis 191427 300 -Nemesis 206491 120 -Netherwalk 196555 120 -Spectral Sight 188501 30 -Vengeful Retreat 198793 25 -Netherwalk 196555 120 -Fel Eruption 211881 30 -Nemesis 206491 120 -Chaos Blades 247938 120 -Fel Barrage 211053 60 -Gladiator's Medallion 208683 120 -Reverse Magic 205604 60 -Eye of Leotheras 206649 45 -Rain from Above 206803 60 -Mana Break 203704 60 - -Veng -Arcane Torrent 202719 90 -Honorable Medallion 195710 180 -Demon Spikes 198793 25 -Fiery Brand 179057 60 -Immolation Aura 198013 45 -Metamorphosis 191427 300 -Sigil of Misery 207684 60 -Sigil of Silence 202137 60 -Soul Carver 207407 40 -Spectral Sight 188501 30 -Torment 198589 60 -Fel Eruption 211881 30 -Sigil of Chains 202138 90 -Fel Devastation 212084 60 -Demonic Infusion 236189 90 -Soul Barrier 227225 30 -Gladiator's Medallion 208683 120 -Reverse Magic 205604 60 -Eye of Leotheras 206649 45 -Demonic Trample 205629 30 -Illidan's Grasp 205630 60 - - - -DK -Blood -Arcane Torrent 50613 90 -Anti-Magic Shell 48707 60 -Asphyxiate 221562 45 -Blood Mirror 206977 120 -Blooddrinker 206931 30 -Consumption 205223 45 -Dancing Rune Weapon 49028 180 -Death and Decay 43265 30 -Death Gate 50977 60 -Gorefiend's Grasp 108199 120 -Icebound Fortitude 48792 180 -Raise Ally 61999 600 -Vampiric Blood 55233 90 -Wraith Walk 212552 45 -Blooddrinker 206931 30 -Tombstone 219809 60 -Bonestorm 194844 60 -Blood Mirror 206977 120 -Gladiator's Medallion 208683 120 -Dark Simulacrum 77606 25 -Anti-Magic Zone 51052 120 -Strangulate 47476 60 - -UH -Arcane Torrent 50613 90 -Anti-Magic Shell 48707 60 -Apocalypse 220143 90 -Army of the Dead 42650 600 -Corpse Shield 207319 60 -Dark Transformation 63560 60 -Death Gate 50977 60 -Defile 43265 30 -Icebound Fortitude 48792 180 -Raise Ally 61999 600 -Raise Dead 46584 60 -Summon Gargoyle 49206 180 -Wraith Walk 212552 45 -Blighted Rune Weapon 194918 60 -Asphyxiate 108194 45 -Corpse Shield 207319 60 -Dark Arbiter 207349 120 -Defile 152280 30 -Soul Reaper 130736 45 -Gladiator's Medallion 208683 120 -Dark Simulacrum 77606 25 -Anti-Magic Zone 51052 120 - -Frost -Arcane Torrent 50613 90 -Anti-Magic Shell 48707 60 -Breath of Sindragosa 152279 120 -Death Gate 50977 60 -Icebound Fortitude 48792 180 -Pillar of Frost 51271 60 -Raise Ally 61999 600 -Sindragosa's Fury 190778 300 -Wraith Walk 212552 45 -Horn of Winter 57330 30 -Blinding Sleet 207167 60 -Obliteration 207256 90 -Breath of Sindragosa 152279 120 -Gladiator's Medallion 208683 120 -Dark Simulacrum 77606 25 -Anti-Magic Zone 51052 120 -Chill Streak 204160 45 - - - -Rogue -Sub -Arcane Torrent 25046 90 -Honorable Medallion 195710 180 -Blind 2094 120 -Cloak of Shadows 31224 90 -Crimson Vial 185311 30 -Distract 1725 30 -Evasion 5277 120 -Goremaw's Bite 209782 60 -Marked for Death 137619 60 -Shadow Blades 121471 180 -Shroud of Concealment 114018 360 -Sprint 2983 120 -Tricks of the Trade 57934 30 -Vanish 1856 120 -Marked for Death 137619 60 -Gladiator's Medallion 208683 120 -Smoke Bomb 212182 180 -Cold Blood 213981 60 -Shadowy Duel 207736 120 - -Assa -Arcane Torrent 25046 90 -Honorable Medallion 195710 180 -Blind 2094 120 -Cloak of Shadows 31224 90 -Crimson Vial 185311 30 -Distract 1725 30 -Evasion 5277 120 -Kingsbane 192759 45 -Poisons 66 300 -Shroud of Concealment 114018 360 -Sprint 2983 120 -Toxic Blade 245388 25 -Tricks of the Trade 57934 30 -Vanish 1856 120 -Vendetta 79140 120 -Toxic Blade 245388 25 -Exsanguinate 200806 45 -Marked for Death 137619 60 -Gladiator's Medallion 208683 120 -Neurotoxin 206328 25 - -Outlaw -Arcane Torrent 25046 90 -Honorable Medallion 195710 180 -Adrenaline Rush 13750 180 -Blind 2094 120 -Bribe 199740 1800 -Cloak of Shadows 31224 90 -Crimson Vial 185311 30 -Curse of the Dreadblades 202665 90 -Distract 1725 30 -Grappling Hook 195457 30 -Marked for Death 137619 60 -Riposte 199754 120 -Shroud of Concealment 114018 360 -Sprint 2983 120 -Tricks of the Trade 57934 30 -Vanish 1856 120 -Grappling Hook 195457 30 -Cannonball Barrage 185767 60 -Killing Spree 51690 120 -Marked for Death 137619 60 -Gladiator's Medallion 208683 120 -Dismantle 207777 45 -Plunder Armor 198529 120 - - - -Mage -Frost -Arcane Torrent 28730 90 -Honorable Medallion 195710 180 -Teleportation Nexus 223413 43200 -Cold Snap 235219 300 -Counterspell 2139 24 -Displacement 212801 30 -Ebonbolt 214634 45 -Frozen Orb 84714 60 -Ice Barrier 11426 25 -Ice Block 45438 240 -Icy Veins 12472 180 -Invisibility 66 300 -Time Warp 80353 300 -Lonely Winter 31687 60 -Ray of Frost 205021 60 -Mirror Image 55342 120 -Ice Nova 157997 25 -Frozen Touch 205030 30 -Ring of Frost 113724 45 -Comet Storm 153595 30 -Gladiator's Medallion 208683 120 -Temporal Shield 198111 45 -Ice Form 198144 60 - -Arcane -Arcane Torrent 28730 90 -Honorable Medallion 195710 180 -Teleportation Nexus 223413 43200 -Arcane Power 12042 90 -Counterspell 2139 24 -Displacement 195676 30 -Greater Invisibility 66 300 -Ice Block 45438 240 -Mark of Aluneth 224968 60 -Presence of Mind 205025 60 -Prismatic Barrier 235450 25 -Time Warp 80353 300 -Mirror Image 55342 120 -Supernova 157980 25 -Charged Up 205032 40 -Ring of Frost 113724 45 -Erosion 205039 60 -Gladiator's Medallion 208683 120 -Temporal Shield 198111 45 -Rewind Time 213220 30 -Mass Invisibility 198158 60 - -Fire -Arcane Torrent 28730 90 -Honorable Medallion 195710 180 -Teleportation Nexus 223413 43200 -Blazing Barrier 235313 25 -Combustion 190319 120 -Counterspell 2139 24 -Ice Block 45438 240 -Invisibility 66 300 -Time Warp 80353 300 -Blast Wave 157981 25 -Mirror Image 55342 120 -Alexstrasza's Fury 235870 45 -Ring of Frost 113724 45 -Meteor 153561 45 -Gladiator's Medallion 208683 120 -Temporal Shield 198111 45 - -Every Man for Himself 59752 - - -Blessing of Freedom 1044 -Blessing of Sacrifice 6940 +SPELLS + +Paladin +Prot +Arcane Torrent 155145 90 +Honorable Medallion 195710 180 +Portal: Vale of Eternal Blossoms 132626 60 +Ardent Defender 498 60 +Avenging Wrath 31884 21 +Bastion of Light 204035 120 +Divine Shield 642 300 +Eye of Tyr 209202 60 +Guardian of Ancient Kings 86659 300 +Hammer of Justice 853 60 +Lay on Hands 633 600 +Bastion of Light 204035 120 +Blinding Light 115750 90 +Blessing of Spellwarding 204018 180 +Aegis of Light 204150 180 +Seraphim 152262 30 +Gladiator's Medallion 208683 120 +Shield of Virtue 215652 25 +Guardian of the Forgotten Queen 228049 180 +Holy +Arcane Torrent 155145 90 +Honorable Medallion 195710 180 +Portal: Vale of Eternal Blossoms 132626 60 +Aura Mastery 31821 180 +Avenging Wrath 31842 120 +Blinding Light 115750 90 +Divine Protection 498 60 +Divine Shield 642 300 +Hammer of Justice 853 60 +Holy Avenger 105809 90 +Lay on Hands 633 600 +Tyr's Deliverance 200652 90 +Light's Hammer 114158 60 +Blinding Light 115750 90 +Aura of Mercy 183415 180 +Holy Avenger 105809 90 +Gladiator's Medallion 208683 120 +Divine Favor 210294 45 +Avenging Crusader 216331 60 + +Ret +Arcane Torrent 155145 90 +Honorable Medallion 195710 180 +Portal: Vale of Eternal Blossoms 132626 60 +Crusade 31884 21 +Divine Shield 642 300 +Hammer of Justice 853 60 +Hand of Hindrance 183218 30 +Lay on Hands 633 600 +Shield of Vengeance 184662 120 +Wake of Ashes 205273 30 +Blinding Light 115750 90 +Eye for an Eye 205191 60 +Holy Wrath 210220 180 +Gladiator's Medallion 208683 120 +Blessing of Sanctuary 210256 45 +Hammer of Reckoning 247675 60 + + + +Druid +Balance +Honorable Medallion 195710 180 +Shadowmeld 58984 120 +Barkskin 22812 60 +Celestial Alignment 194223 180 +Dash 1850 180 +Displacer Beast 102280 30 +Dreamwalk 193753 60 +Innervate 29166 180 +Rebirth 20484 600 +Solar Beam 78675 60 +Warrior of Elune 202425 45 +Force of Nature 205636 60 +Warrior of Elune 202425 45 +Renewal 108238 90 +Displacer Beast 102280 30 +Mighty Bash 5211 50 +Mass Entanglement 102359 30 +Typhoon 132469 30 +Incarnation: Chosen of Elune 102560 180 +Astral Communion 202359 80 +Fury of Elune 202770 90 +Gladiator's Medallion 208683 120 +Faerie Swarm 209749 30 + +Feral +Honorable Medallion 195710 180 +Shadowmeld 58984 120 +Ashamane's Frenzy 210722 75 +Berserk 106951 180 +Dash 1850 180 +Dreamwalk 193753 60 +Rebirth 20484 600 +Stampeding Roar 106898 120 +Tiger's Fury 5217 30 +Renewal 108238 90 +Displacer Beast 102280 30 +Mighty Bash 5211 50 +Mass Entanglement 102359 30 +Typhoon 132469 30 +Incarnation: King of the Jungle 102543 180 +Elune's Guidance 202060 45 +Gladiator's Medallion 208683 120 +Thorns 236696 45 +Rip and Tear 203242 60 + +Guardian +Honorable Medallion 195710 180 +Shadowmeld 58984 120 +Barkskin 22812 60 +Dash 1850 180 +Dreamwalk 193753 60 +Incapacitating Roar 99 30 +Rage of the Sleeper 200851 90 +Rebirth 20484 600 +Stampeding Roar 106898 120 +Bristling Fur 155835 40 +Intimidating Roar 236748 30 +Mighty Bash 5211 50 +Mass Entanglement 102359 30 +Typhoon 132469 30 +Incarnation: Guardian of Ursoc 102558 180 +Lunar Beam 204066 75 +Gladiator's Medallion 208683 120 +Demoralizing Roar 201664 30 +Overrun 202246 25 + +Resto +Honorable Medallion 195710 180 +Shadowmeld 58984 120 +Barkskin 22812 60 +Dash 1850 180 +Displacer Beast 102280 30 +Dreamwalk 193753 60 +Essence of G'Hanir 208253 90 +Innervate 29166 180 +Ironbark 102342 90 +Rebirth 20484 600 +Tranquility 740 180 +Ursol's Vortex 102793 60 +Cenarion Ward 102351 30 +Renewal 108238 90 +Displacer Beast 102280 30 +Mighty Bash 5211 50 +Mass Entanglement 102359 30 +Typhoon 132469 30 +Incarnation: Tree of Life 33891 180 +Flourish 197721 60 +Gladiator's Medallion 208683 120 +Thorns 203727 45 +Overgrowth 203651 45 + + + +Warrior +Prot +Blood Fury 20572 120 +Battle Cry 1719 60 +Berserker Rage 18499 60 +Demoralizing Shout 1160 90 +Last Stand 12975 180 +Neltharion's Fury 203524 45 +Shield Wall 871 240 +Shockwave 46968 40 +Shockwave 46968 40 +Storm Bolt 107570 30 +Impending Victory 202168 30 +Avatar 107574 90 +Ravager 228920 60 +Gladiator's Medallion 208683 120 +Mass Spell Reflection 213915 30 +Disarm 236236 45 + +Fury +Blood Fury 20572 120 +Battle Cry 1719 60 +Berserker Rage 18499 60 +Bloodbath 12292 30 +Commanding Shout 97462 180 +Enraged Regeneration 184364 120 +Intimidating Shout 5246 90 +Odyn's Fury 205545 45 +Shockwave 46968 40 +Shockwave 46968 40 +Storm Bolt 107570 30 +Avatar 107574 90 +Bloodbath 12292 30 +Bladestorm 46924 90 +Dragon Roar 118000 25 +Gladiator's Medallion 208683 120 +Disarm 236077 45 +Spell Reflection 216890 25 + +Arms +Blood Fury 20572 120 +Battle Cry 1719 60 +Berserker Rage 18499 60 +Bladestorm 227847 90 +Commanding Shout 97462 180 +Die by the Sword 118038 180 +Intimidating Shout 5246 90 +Shockwave 46968 40 +Warbreaker 209577 60 +Shockwave 46968 40 +Storm Bolt 107570 30 +Avatar 107574 90 +Ravager 152277 60 +Gladiator's Medallion 208683 120 +Disarm 236077 45 +Spell Reflection 216890 25 +Duel 236273 60 +War Banner 236320 90 +Sharpen Blade 198817 25 + + + +Hunter +BM +Every Man for Himself 59752 120 +Honorable Medallion 195710 180 +Aspect of the Cheetah 186257 180 +Aspect of the Turtle 186265 180 +Aspect of the Wild 193530 120 +Bestial Wrath 19574 90 +Counter Shot 147362 24 +Exhilaration 109304 120 +Feign Death 5384 30 +Misdirection 34477 30 +Titan's Thunder 207068 60 +Binding Shot 109248 45 +Wyvern Sting 19386 45 +Intimidation 19577 60 +A Murder of Crows 131894 60 +Stampede 201430 180 +Gladiator's Medallion 208683 120 +Viper Sting 202797 30 +Scorpid Sting 202900 24 +Spider Sting 202914 45 +Dire Beast: Hawk 208652 30 +Dire Beast: Basilisk 205691 120 +Interlope 248518 45 + +MM +Every Man for Himself 59752 120 +Honorable Medallion 195710 180 +Aspect of the Cheetah 186257 180 +Aspect of the Turtle 186265 180 +Bursting Shot 186387 30 +Counter Shot 147362 24 +Exhilaration 109304 120 +Feign Death 5384 30 +Misdirection 34477 30 +Trueshot 193526 180 +Explosive Shot 212431 30 +Sentinel 206817 60 +Binding Shot 109248 45 +Wyvern Sting 19386 45 +Camouflage 199483 60 +A Murder of Crows 131894 60 +Piercing Shot 198670 30 +Gladiator's Medallion 208683 120 +Viper Sting 202797 30 +Scorpid Sting 202900 24 +Spider Sting 202914 45 +Scatter Shot 213691 30 +Hi-Explosive Trap 236776 40 + +Surv +Every Man for Himself 59752 120 +Honorable Medallion 195710 180 +Aspect of the Cheetah 186257 180 +Aspect of the Eagle 186289 120 +Aspect of the Turtle 186265 180 +Exhilaration 109304 120 +Feign Death 5384 30 +Fury of the Eagle 203415 45 +A Murder of Crows 206505 60 +Snake Hunter 201078 120 +Steel Trap 162488 60 +Sticky Bomb 191241 25 +Camouflage 199483 60 +Dragonsfire Grenade 194855 30 +Spitting Cobra 194407 60 +Gladiator's Medallion 208683 120 +Viper Sting 202797 30 +Scorpid Sting 202900 24 +Spider Sting 202914 45 +Mending Bandage 212640 25 +Master's Call 53271 45 + + + +Warlock +Affli +Arcane Torrent 28730 90 +Create Soulwell 29893 120 +Ritual of Summoning 698 120 +Soul Harvest 196098 120 +Soulstone 20707 600 +Summon Doomguard 18540 180 +Summon Infernal 1122 180 +Unending Resolve 104773 180 +Haunt 48181 25 +Mortal Coil 6789 45 +Howl of Terror 5484 40 +Phantom Singularity 205179 40 +Soul Harvest 196098 120 +Dark Pact 108416 60 +Grimoire of Service 108501 90 +Grimoire of Sacrifice 108503 30 +Gladiator's Medallion 208683 120 +Curse of Fragility 199954 45 +Casting Circle 221703 30 +Nether Ward 212295 45 +Soulshatter 212356 60 +Curse of Shadows 234877 30 + +Destro +Arcane Torrent 28730 90 +Create Soulwell 29893 120 +Havoc 80240 45 +Ritual of Summoning 698 120 +Soulstone 20707 600 +Summon Doomguard 18540 180 +Summon Infernal 1122 180 +Unending Resolve 104773 180 +Mortal Coil 6789 45 +Shadowfury 30283 30 +Cataclysm 152108 30 +Soul Harvest 196098 120 +Dark Pact 108416 60 +Grimoire of Service 108501 90 +Grimoire of Sacrifice 108503 30 +Channel Demonfire 196447 25 +Gladiator's Medallion 208683 120 +Curse of Fragility 199954 45 +Casting Circle 221703 30 +Nether Ward 212295 45 +Firestone 212284 25 +Bane of Havoc 200546 45 + +Demo +Arcane Torrent 28730 90 +Create Soulwell 29893 120 +Ritual of Summoning 698 120 +Soulstone 20707 600 +Summon Doomguard 18540 180 +Summon Infernal 1122 180 +Thal'kiel's Consumption 211714 45 +Unending Resolve 104773 180 +Mortal Coil 6789 45 +Shadowfury 30283 30 +Soul Harvest 196098 120 +Dark Pact 108416 60 +Grimoire of Service 108501 90 +Summon Darkglare 205180 24 +Gladiator's Medallion 208683 120 +Curse of Fragility 199954 45 +Casting Circle 221703 30 +Nether Ward 212295 45 +Call Felhunter 212619 24 +Call Fel Lord 212459 90 +Call Observer 201996 90 + + + +Monk +MW +Shadowmeld 58984 120 +Diffuse Magic 122783 90 +Fortifying Brew 243435 90 +Life Cocoon 116849 180 +Revival 115310 180 +Thunder Focus Tea 116680 30 +Transcendence: Transfer 119996 25 +Zen Pilgrimage 126892 60 +Chi Burst 123986 30 +Tiger's Lust 116841 30 +Ring of Peace 116844 45 +Leg Sweep 119381 45 +Diffuse Magic 122783 90 +Dampen Harm 122278 120 +Invoke Chi-Ji, the Red Crane 198664 180 +Mana Tea 197908 90 +Gladiator's Medallion 208683 120 +Zen Focus Tea 209584 45 +Way of the Crane 216113 45 + +BM +Shadowmeld 58984 120 +Chi Burst 123986 30 +Exploding Keg 214326 75 +Fortifying Brew 115203 420 +Tiger's Lust 116841 30 +Transcendence: Transfer 119996 25 +Zen Meditation 115176 300 +Zen Pilgrimage 126892 60 +Chi Burst 123986 30 +Tiger's Lust 116841 30 +Black Ox Brew 115399 90 +Ring of Peace 116844 45 +Leg Sweep 119381 45 +Dampen Harm 122278 120 +Invoke Niuzao, the Black Ox 132578 180 +Gladiator's Medallion 208683 120 +Guard 202162 45 +Double Barrel 202335 45 +Mighty Ox Kick 202370 30 + +WW +Shadowmeld 58984 120 +Chi Burst 123986 30 +Energizing Elixir 115288 60 +Fists of Fury 113656 24 +Flying Serpent Kick 101545 25 +Strike of the Windlord 205320 40 +Tiger's Lust 116841 30 +Touch of Death 115080 120 +Touch of Karma 122470 90 +Transcendence: Transfer 119996 25 +Whirling Dragon Punch 152175 24 +Zen Pilgrimage 126892 60 +Chi Burst 123986 30 +Tiger's Lust 116841 30 +Energizing Elixir 115288 60 +Ring of Peace 116844 45 +Leg Sweep 119381 45 +Diffuse Magic 122783 90 +Dampen Harm 122278 120 +Invoke Xuen, the White Tiger 123904 180 +Whirling Dragon Punch 152175 24 +Serenity 152173 90 +Gladiator's Medallion 208683 120 +Fortifying Brew 201318 90 +Zen Moment 201325 45 +Grapple Weapon 233759 60 + + + +Priest +Shadow +Arcane Torrent 232633 90 +Dispersion 47585 120 +Fade 586 30 +Mind Bomb 8122 60 +Shadow Crash 205385 30 +Shadowfiend 34433 180 +Silence 15487 45 +Vampiric Embrace 15286 180 +Void Torrent 205065 60 +Mind Bomb 205369 30 +Power Infusion 10060 120 +Mindbender 200174 60 +Shadow Crash 205385 30 +Surrender to Madness 193223 600 +Gladiator's Medallion 208683 120 +Psyfiend 211522 45 +Void Shift 108968 300 + +Holy +Arcane Torrent 232633 90 +Desperate Prayer 19236 90 +Divine Hymn 64843 180 +Fade 586 30 +Guardian Spirit 47788 240 +Holy Word: Chastise 88625 60 +Holy Word: Sanctify 34861 60 +Leap of Faith 73325 90 +Shining Force 204263 45 +Symbol of Hope 64901 360 +Halo 120517 40 +Apotheosis 200183 180 +Gladiator's Medallion 208683 120 +Inner Focus 196762 30 +Holy Ward 213610 30 +Greater Fade 213602 45 +Ray of Hope 197268 60 + +Disc +Arcane Torrent 232633 90 +Evangelism 246287 75 +Fade 586 30 +Leap of Faith 73325 90 +Light's Wrath 207946 90 +Mindbender 34433 180 +Pain Suppression 33206 240 +Power Word: Barrier 62618 180 +Psychic Scream 8122 60 +Rapture 47536 120 +Shining Force 204263 45 +Mindbender 123040 60 +Halo 120517 40 +Power Infusion 10060 120 +Evangelism 246287 75 +Gladiator's Medallion 208683 120 +Archangel 197862 60 +Dark Archangel 197871 60 + + + +DH +Havoc +Arcane Torrent 202719 90 +Honorable Medallion 195710 180 +Blur 198589 60 +Chaos Blades 247938 120 +Chaos Nova 179057 60 +Darkness 196718 180 +Eye Beam 198013 45 +Fury of the Illidari 201467 60 +Metamorphosis 191427 300 +Nemesis 206491 120 +Netherwalk 196555 120 +Spectral Sight 188501 30 +Vengeful Retreat 198793 25 +Netherwalk 196555 120 +Fel Eruption 211881 30 +Nemesis 206491 120 +Chaos Blades 247938 120 +Fel Barrage 211053 60 +Gladiator's Medallion 208683 120 +Reverse Magic 205604 60 +Eye of Leotheras 206649 45 +Rain from Above 206803 60 +Mana Break 203704 60 + +Veng +Arcane Torrent 202719 90 +Honorable Medallion 195710 180 +Demon Spikes 198793 25 +Fiery Brand 179057 60 +Immolation Aura 198013 45 +Metamorphosis 191427 300 +Sigil of Misery 207684 60 +Sigil of Silence 202137 60 +Soul Carver 207407 40 +Spectral Sight 188501 30 +Torment 198589 60 +Fel Eruption 211881 30 +Sigil of Chains 202138 90 +Fel Devastation 212084 60 +Demonic Infusion 236189 90 +Soul Barrier 227225 30 +Gladiator's Medallion 208683 120 +Reverse Magic 205604 60 +Eye of Leotheras 206649 45 +Demonic Trample 205629 30 +Illidan's Grasp 205630 60 + + + +DK +Blood +Arcane Torrent 50613 90 +Anti-Magic Shell 48707 60 +Asphyxiate 221562 45 +Blood Mirror 206977 120 +Blooddrinker 206931 30 +Consumption 205223 45 +Dancing Rune Weapon 49028 180 +Death and Decay 43265 30 +Death Gate 50977 60 +Gorefiend's Grasp 108199 120 +Icebound Fortitude 48792 180 +Raise Ally 61999 600 +Vampiric Blood 55233 90 +Wraith Walk 212552 45 +Blooddrinker 206931 30 +Tombstone 219809 60 +Bonestorm 194844 60 +Blood Mirror 206977 120 +Gladiator's Medallion 208683 120 +Dark Simulacrum 77606 25 +Anti-Magic Zone 51052 120 +Strangulate 47476 60 + +UH +Arcane Torrent 50613 90 +Anti-Magic Shell 48707 60 +Apocalypse 220143 90 +Army of the Dead 42650 600 +Corpse Shield 207319 60 +Dark Transformation 63560 60 +Death Gate 50977 60 +Defile 43265 30 +Icebound Fortitude 48792 180 +Raise Ally 61999 600 +Raise Dead 46584 60 +Summon Gargoyle 49206 180 +Wraith Walk 212552 45 +Blighted Rune Weapon 194918 60 +Asphyxiate 108194 45 +Corpse Shield 207319 60 +Dark Arbiter 207349 120 +Defile 152280 30 +Soul Reaper 130736 45 +Gladiator's Medallion 208683 120 +Dark Simulacrum 77606 25 +Anti-Magic Zone 51052 120 + +Frost +Arcane Torrent 50613 90 +Anti-Magic Shell 48707 60 +Breath of Sindragosa 152279 120 +Death Gate 50977 60 +Icebound Fortitude 48792 180 +Pillar of Frost 51271 60 +Raise Ally 61999 600 +Sindragosa's Fury 190778 300 +Wraith Walk 212552 45 +Horn of Winter 57330 30 +Blinding Sleet 207167 60 +Obliteration 207256 90 +Breath of Sindragosa 152279 120 +Gladiator's Medallion 208683 120 +Dark Simulacrum 77606 25 +Anti-Magic Zone 51052 120 +Chill Streak 204160 45 + + + +Rogue +Sub +Arcane Torrent 25046 90 +Honorable Medallion 195710 180 +Blind 2094 120 +Cloak of Shadows 31224 90 +Crimson Vial 185311 30 +Distract 1725 30 +Evasion 5277 120 +Goremaw's Bite 209782 60 +Marked for Death 137619 60 +Shadow Blades 121471 180 +Shroud of Concealment 114018 360 +Sprint 2983 120 +Tricks of the Trade 57934 30 +Vanish 1856 120 +Marked for Death 137619 60 +Gladiator's Medallion 208683 120 +Smoke Bomb 212182 180 +Cold Blood 213981 60 +Shadowy Duel 207736 120 + +Assa +Arcane Torrent 25046 90 +Honorable Medallion 195710 180 +Blind 2094 120 +Cloak of Shadows 31224 90 +Crimson Vial 185311 30 +Distract 1725 30 +Evasion 5277 120 +Kingsbane 192759 45 +Poisons 66 300 +Shroud of Concealment 114018 360 +Sprint 2983 120 +Toxic Blade 245388 25 +Tricks of the Trade 57934 30 +Vanish 1856 120 +Vendetta 79140 120 +Toxic Blade 245388 25 +Exsanguinate 200806 45 +Marked for Death 137619 60 +Gladiator's Medallion 208683 120 +Neurotoxin 206328 25 + +Outlaw +Arcane Torrent 25046 90 +Honorable Medallion 195710 180 +Adrenaline Rush 13750 180 +Blind 2094 120 +Bribe 199740 1800 +Cloak of Shadows 31224 90 +Crimson Vial 185311 30 +Curse of the Dreadblades 202665 90 +Distract 1725 30 +Grappling Hook 195457 30 +Marked for Death 137619 60 +Riposte 199754 120 +Shroud of Concealment 114018 360 +Sprint 2983 120 +Tricks of the Trade 57934 30 +Vanish 1856 120 +Grappling Hook 195457 30 +Cannonball Barrage 185767 60 +Killing Spree 51690 120 +Marked for Death 137619 60 +Gladiator's Medallion 208683 120 +Dismantle 207777 45 +Plunder Armor 198529 120 + + + +Mage +Frost +Arcane Torrent 28730 90 +Honorable Medallion 195710 180 +Teleportation Nexus 223413 43200 +Cold Snap 235219 300 +Counterspell 2139 24 +Displacement 212801 30 +Ebonbolt 214634 45 +Frozen Orb 84714 60 +Ice Barrier 11426 25 +Ice Block 45438 240 +Icy Veins 12472 180 +Invisibility 66 300 +Time Warp 80353 300 +Lonely Winter 31687 60 +Ray of Frost 205021 60 +Mirror Image 55342 120 +Ice Nova 157997 25 +Frozen Touch 205030 30 +Ring of Frost 113724 45 +Comet Storm 153595 30 +Gladiator's Medallion 208683 120 +Temporal Shield 198111 45 +Ice Form 198144 60 + +Arcane +Arcane Torrent 28730 90 +Honorable Medallion 195710 180 +Teleportation Nexus 223413 43200 +Arcane Power 12042 90 +Counterspell 2139 24 +Displacement 195676 30 +Greater Invisibility 66 300 +Ice Block 45438 240 +Mark of Aluneth 224968 60 +Presence of Mind 205025 60 +Prismatic Barrier 235450 25 +Time Warp 80353 300 +Mirror Image 55342 120 +Supernova 157980 25 +Charged Up 205032 40 +Ring of Frost 113724 45 +Erosion 205039 60 +Gladiator's Medallion 208683 120 +Temporal Shield 198111 45 +Rewind Time 213220 30 +Mass Invisibility 198158 60 + +Fire +Arcane Torrent 28730 90 +Honorable Medallion 195710 180 +Teleportation Nexus 223413 43200 +Blazing Barrier 235313 25 +Combustion 190319 120 +Counterspell 2139 24 +Ice Block 45438 240 +Invisibility 66 300 +Time Warp 80353 300 +Blast Wave 157981 25 +Mirror Image 55342 120 +Alexstrasza's Fury 235870 45 +Ring of Frost 113724 45 +Meteor 153561 45 +Gladiator's Medallion 208683 120 +Temporal Shield 198111 45 + +Every Man for Himself 59752 + + +Blessing of Freedom 1044 +Blessing of Sacrifice 6940 Death from Above 152150 \ No newline at end of file diff --git a/Random Trash/TomTom/2.lua b/WeakAuras/Projects/Random Trash/TomTom/2.lua similarity index 96% rename from Random Trash/TomTom/2.lua rename to WeakAuras/Projects/Random Trash/TomTom/2.lua index 4937ff0..46cf104 100644 --- a/Random Trash/TomTom/2.lua +++ b/WeakAuras/Projects/Random Trash/TomTom/2.lua @@ -1,46 +1,46 @@ --- TODO: Make this not suck -function TomTom:AddWaypoint(x, y, desc, persistent, minimap, world, silent) - local c, z = GetCurrentMapContinent(), GetCurrentMapZone() - - if not c or not z or c < 1 then - --self:Print("Cannot find a valid zone to place the coordinates") - return - end - - return self:AddZWaypoint(c, z, x, y, desc, persistent, minimap, world, nil, silent) -end - -function TomTom:AddZWaypoint(c, z, x, y, desc, persistent, minimap, world, callbacks, silent, crazy) - -- Convert the c,z,x,y tuple to m,f,x,y and pass the work off to AddMFWaypoint() - local mapId, floor = hbd:GetMapIDFromCZ(c, z) - if not mapId then return end - - return self:AddMFWaypoint(mapId, floor, x / 100, y / 100, { - title = desc, - persistent = persistent, - minimap = minimap, - world = world, - callbacks = callbacks, - silent = silent, - crazy = crazy, - }) -end - -function TomTom:AddWaypointToCurrentZone(x, y, desc) - local m, f = TomTom:GetCurrentPlayerPosition() - if not m then return end - - return self:AddMFWaypoint(m, f, x / 100, y / 100, { - title = desc, - }) -end - -function TomTom:SetCustomWaypoint(c, z, x, y, callback, minimap, world, silent) - return self:AddZWaypoint(c, z, x, y, nil, false, minimap, world, callback, silent) -end - -function TomTom:SetCustomMFWaypoint(m, f, x, y, opts) - opts.persistent = false - - return self:AddMFWaypoint(m, f, x, y, opts) -end +-- TODO: Make this not suck +function TomTom:AddWaypoint(x, y, desc, persistent, minimap, world, silent) + local c, z = GetCurrentMapContinent(), GetCurrentMapZone() + + if not c or not z or c < 1 then + --self:Print("Cannot find a valid zone to place the coordinates") + return + end + + return self:AddZWaypoint(c, z, x, y, desc, persistent, minimap, world, nil, silent) +end + +function TomTom:AddZWaypoint(c, z, x, y, desc, persistent, minimap, world, callbacks, silent, crazy) + -- Convert the c,z,x,y tuple to m,f,x,y and pass the work off to AddMFWaypoint() + local mapId, floor = hbd:GetMapIDFromCZ(c, z) + if not mapId then return end + + return self:AddMFWaypoint(mapId, floor, x / 100, y / 100, { + title = desc, + persistent = persistent, + minimap = minimap, + world = world, + callbacks = callbacks, + silent = silent, + crazy = crazy, + }) +end + +function TomTom:AddWaypointToCurrentZone(x, y, desc) + local m, f = TomTom:GetCurrentPlayerPosition() + if not m then return end + + return self:AddMFWaypoint(m, f, x / 100, y / 100, { + title = desc, + }) +end + +function TomTom:SetCustomWaypoint(c, z, x, y, callback, minimap, world, silent) + return self:AddZWaypoint(c, z, x, y, nil, false, minimap, world, callback, silent) +end + +function TomTom:SetCustomMFWaypoint(m, f, x, y, opts) + opts.persistent = false + + return self:AddMFWaypoint(m, f, x, y, opts) +end diff --git a/Random Trash/TomTom/3.lua b/WeakAuras/Projects/Random Trash/TomTom/3.lua similarity index 97% rename from Random Trash/TomTom/3.lua rename to WeakAuras/Projects/Random Trash/TomTom/3.lua index 9e0b7f3..d5f503f 100644 --- a/Random Trash/TomTom/3.lua +++ b/WeakAuras/Projects/Random Trash/TomTom/3.lua @@ -1,58 +1,58 @@ -function TomTom:AddMFWaypoint(m, f, x, y, opts) - opts = opts or {} - - -- Default values - if opts.persistent == nil then opts.persistent = self.profile.persistence.savewaypoints end - if opts.minimap == nil then opts.minimap = self.profile.minimap.enable end - if opts.world == nil then opts.world = self.profile.worldmap.enable end - if opts.crazy == nil then opts.crazy = self.profile.arrow.autoqueue end - if opts.cleardistance == nil then opts.cleardistance = self.profile.persistence.cleardistance end - if opts.arrivaldistance == nil then opts.arrivaldistance = self.profile.arrow.arrival end - - if not opts.callbacks then opts.callbacks = TomTom:DefaultCallbacks(opts) end - - local zoneName = hbd:GetLocalizedMap(m) - - -- Get the default map floor, if necessary - if not f then - local floors = hbd:GetNumFloors(m) - f = floors == 0 and 0 or 1 - end - - -- Ensure there isn't already a waypoint at this location - local key = self:GetKey({ m, f, x, y, title = opts.title }) - if waypoints[m] and waypoints[m][key] then return waypoints[m][key] end - - -- uid is the 'new waypoint' called this for historical reasons - local uid = { m, f, x, y, title = opts.title } - - -- Copy over any options, so we have em - for k, v in pairs(opts) do - if not uid[k] then uid[k] = v end - end - - -- No need to convert x and y because they're already 0-1 instead of 0-100 - self:SetWaypoint(uid, opts.callbacks, opts.minimap, opts.world) - if opts.crazy then self:SetCrazyArrow(uid, opts.arrivaldistance, opts.title) end - - waypoints[m] = waypoints[m] or {} - waypoints[m][key] = uid - - -- If this is a persistent waypoint, then add it to the waypoints table - if opts.persistent then self.waypointprofile[m][key] = uid end - - if not opts.silent and self.profile.general.announce then - local ctxt = RoundCoords(x, y, 2) - local desc = opts.title and opts.title or "" - local sep = opts.title and " - " or "" - local msg = string.format(L["|cffffff78TomTom:|r Added a waypoint (%s%s%s) in %s"], desc, sep, ctxt, zoneName) - ChatFrame1:AddMessage(msg) - end - return uid -end - -local coord_fmt = "%%.%df, %%.%df" -function RoundCoords(x, y, prec) - local fmt = coord_fmt:format(prec, prec) - return fmt:format(x * 100, y * 100) -end +function TomTom:AddMFWaypoint(m, f, x, y, opts) + opts = opts or {} + + -- Default values + if opts.persistent == nil then opts.persistent = self.profile.persistence.savewaypoints end + if opts.minimap == nil then opts.minimap = self.profile.minimap.enable end + if opts.world == nil then opts.world = self.profile.worldmap.enable end + if opts.crazy == nil then opts.crazy = self.profile.arrow.autoqueue end + if opts.cleardistance == nil then opts.cleardistance = self.profile.persistence.cleardistance end + if opts.arrivaldistance == nil then opts.arrivaldistance = self.profile.arrow.arrival end + + if not opts.callbacks then opts.callbacks = TomTom:DefaultCallbacks(opts) end + + local zoneName = hbd:GetLocalizedMap(m) + + -- Get the default map floor, if necessary + if not f then + local floors = hbd:GetNumFloors(m) + f = floors == 0 and 0 or 1 + end + + -- Ensure there isn't already a waypoint at this location + local key = self:GetKey({ m, f, x, y, title = opts.title }) + if waypoints[m] and waypoints[m][key] then return waypoints[m][key] end + + -- uid is the 'new waypoint' called this for historical reasons + local uid = { m, f, x, y, title = opts.title } + + -- Copy over any options, so we have em + for k, v in pairs(opts) do + if not uid[k] then uid[k] = v end + end + + -- No need to convert x and y because they're already 0-1 instead of 0-100 + self:SetWaypoint(uid, opts.callbacks, opts.minimap, opts.world) + if opts.crazy then self:SetCrazyArrow(uid, opts.arrivaldistance, opts.title) end + + waypoints[m] = waypoints[m] or {} + waypoints[m][key] = uid + + -- If this is a persistent waypoint, then add it to the waypoints table + if opts.persistent then self.waypointprofile[m][key] = uid end + + if not opts.silent and self.profile.general.announce then + local ctxt = RoundCoords(x, y, 2) + local desc = opts.title and opts.title or "" + local sep = opts.title and " - " or "" + local msg = string.format(L["|cffffff78TomTom:|r Added a waypoint (%s%s%s) in %s"], desc, sep, ctxt, zoneName) + ChatFrame1:AddMessage(msg) + end + return uid +end + +local coord_fmt = "%%.%df, %%.%df" +function RoundCoords(x, y, prec) + local fmt = coord_fmt:format(prec, prec) + return fmt:format(x * 100, y * 100) +end diff --git a/Random Trash/TomTom/TomTom.lua b/WeakAuras/Projects/Random Trash/TomTom/TomTom.lua similarity index 96% rename from Random Trash/TomTom/TomTom.lua rename to WeakAuras/Projects/Random Trash/TomTom/TomTom.lua index ff04df5..5519458 100644 --- a/Random Trash/TomTom/TomTom.lua +++ b/WeakAuras/Projects/Random Trash/TomTom/TomTom.lua @@ -1,1344 +1,1344 @@ ---[[-------------------------------------------------------------------------- --- TomTom by Cladhaire --- --- All Rights Reserved -----------------------------------------------------------------------------]] - --- Simple localization table for messages -local L = TomTomLocals -local ldb = LibStub("LibDataBroker-1.1") -local hbd = LibStub("HereBeDragons-1.0") - -local addonName, addon = ... -local TomTom = addon - -addon.hbd = hbd - --- Local definitions -local GetCurrentCursorPosition -local WorldMap_OnUpdate -local Block_OnClick, Block_OnUpdate, Block_OnEnter, Block_OnLeave -local Block_OnDragStart, Block_OnDragStop -local callbackTbl -local RoundCoords - -local waypoints = {} - -function TomTom:Initialize(event, addon) - self.defaults = { - profile = { - general = { - confirmremoveall = true, - announce = false, - corpse_arrow = true, - }, - block = { - enable = true, - accuracy = 2, - bordercolor = { 1, 0.8, 0, 0.8 }, - bgcolor = { 0, 0, 0, 0.4 }, - lock = false, - height = 30, - width = 100, - fontsize = 12, - throttle = 0.2, - }, - mapcoords = { - playerenable = true, - playeraccuracy = 2, - cursorenable = true, - cursoraccuracy = 2, - throttle = 0.1, - }, - arrow = { - enable = true, - goodcolor = { 0, 1, 0 }, - badcolor = { 1, 0, 0 }, - middlecolor = { 1, 1, 0 }, - exactcolor = { 0, 1, 0 }, - arrival = 15, - lock = false, - noclick = false, - showtta = true, - showdistance = true, - stickycorpse = false, - autoqueue = true, - menu = true, - scale = 1.0, - alpha = 1.0, - title_width = 0, - title_height = 0, - title_scale = 1, - title_alpha = 1, - setclosest = true, - closestusecontinent = false, - enablePing = false, - hideDuringPetBattles = true, - }, - minimap = { - enable = true, - otherzone = true, - tooltip = true, - menu = true, - }, - worldmap = { - enable = true, - tooltip = true, - otherzone = true, - clickcreate = true, - menu = true, - create_modifier = "C", - }, - comm = { - enable = true, - prompt = false, - }, - persistence = { - cleardistance = 10, - savewaypoints = true, - }, - feeds = { - coords = false, - coords_throttle = 0.3, - coords_accuracy = 2, - arrow = false, - arrow_throttle = 0.1, - }, - poi = { - enable = true, - modifier = "C", - setClosest = false, - arrival = 0, - }, - }, - } - - self.waydefaults = { - global = { - converted = { - ["*"] = {}, - }, - }, - profile = { - ["*"] = {}, - }, - } - - self.db = LibStub("AceDB-3.0"):New("TomTomDB", self.defaults, "Default") - self.waydb = LibStub("AceDB-3.0"):New("TomTomWaypointsMF", self.waydefaults) - - self.db.RegisterCallback(self, "OnProfileChanged", "ReloadOptions") - self.db.RegisterCallback(self, "OnProfileCopied", "ReloadOptions") - self.db.RegisterCallback(self, "OnProfileReset", "ReloadOptions") - self.waydb.RegisterCallback(self, "OnProfileChanged", "ReloadWaypoints") - self.waydb.RegisterCallback(self, "OnProfileCopied", "ReloadWaypoints") - self.waydb.RegisterCallback(self, "OnProfileReset", "ReloadWaypoints") - - self.tooltip = CreateFrame("GameTooltip", "TomTomTooltip", nil, "GameTooltipTemplate") - self.tooltip:SetFrameStrata("DIALOG") - - self.dropdown = CreateFrame("Frame", "TomTomDropdown", nil, "UIDropDownMenuTemplate") - - -- Both the waypoints and waypointprofile tables are going to contain subtables for each - -- of the mapids that might exist. Under these will be a hash of key/waypoint pairs consisting - -- of the waypoints for the given map file. - self.waypoints = waypoints - self.waypointprofile = self.waydb.profile - - self:RegisterEvent("PLAYER_LEAVING_WORLD") - self:RegisterEvent("CHAT_MSG_ADDON") - RegisterAddonMessagePrefix("TOMTOM3") - - -- Watch for pet battle start/end so we can hide/show the arrow - self:RegisterEvent("PET_BATTLE_OPENING_START", "ShowHideCrazyArrow") - self:RegisterEvent("PET_BATTLE_CLOSE", "ShowHideCrazyArrow") - - self:ReloadOptions() - self:ReloadWaypoints() - - if self.db.profile.feeds.coords then - -- Create a data feed for coordinates - local feed_coords = ldb:NewDataObject("TomTom_Coords", { - type = "data source", - icon = "Interface\\Icons\\INV_Misc_Map_01", - text = "", - }) - - local coordFeedFrame = CreateFrame("Frame") - local throttle, counter = self.db.profile.feeds.coords_throttle, 0 - function TomTom:_privateupdatecoordthrottle(x) throttle = x end - - coordFeedFrame:SetScript("OnUpdate", function(self, elapsed) - counter = counter + elapsed - if counter < throttle then return end - - counter = 0 - local m, f, x, y = TomTom:GetCurrentPlayerPosition() - - if x and y then - local opt = TomTom.db.profile.feeds - feed_coords.text = string.format("%s", RoundCoords(x, y, opt.coords_accuracy)) - end - end) - end -end - --- Some utility functions that can pack/unpack data from a waypoint - --- Returns a hashable 'key' for a given waypoint consisting of the --- map, floor, x, y and the waypoints title. This isn't truly --- unique, but should be close enough to determine duplicates, etc. -function TomTom:GetKey(waypoint) - local m, f, x, y = unpack(waypoint) - return self:GetKeyArgs(m, f, x, y, waypoint.title) -end - -function TomTom:GetKeyArgs(m, f, x, y, title) - if not f then - local floors = hbd:GetNumFloors(m) - f = floors == 0 and 0 or 1 - end - - -- Fudge the x/y values so they avoid precision/printf issues - local x = x * 10000 - local y = y * 10000 - - local key = string.format("%d:%d:%s:%s:%s", m, f, x * 10e4, y * 10e4, tostring(title)) - return key -end - --- Returns the player's current coordinates without flipping the map or --- causing any other weirdness. This can and will cause the coordinates to be --- weird if you zoom the map out to your parent, but there is no way to --- recover this without changing/setting the map zoom. Deal with it =) -function TomTom:GetCurrentCoords() - local x, y = GetPlayerMapPosition("player") - if x and y and x > 0 and y > 0 then return x, y end -end - -function TomTom:GetCurrentPlayerPosition() - local x, y, mapID, mapFloor = hbd:GetPlayerZonePosition() - return mapID, mapFloor, x, y -end - -function TomTom:ReloadOptions() - -- This handles the reloading of all options - self.profile = self.db.profile - - self:ShowHideWorldCoords() - self:ShowHideCoordBlock() - self:ShowHideCrazyArrow() - self:EnableDisablePOIIntegration() -end - -function TomTom:ClearAllWaypoints() - for mapId, entries in pairs(waypoints) do - for key, waypoint in pairs(entries) do - -- The waypoint IS the UID now - self:ClearWaypoint(waypoint) - end - end -end - -function TomTom:ResetWaypointOptions() - local minimap = self.profile.minimap.enable - local world = self.profile.worldmap.enable - local cleardistance = self.profile.persistence.cleardistance - local arrivaldistance = self.profile.arrow.arrival - - for map, data in pairs(self.waypointprofile) do - for key, waypoint in pairs(data) do - waypoint.minimap = minimap - waypoint.world = sorld - waypoint.cleardistance = cleardistance - waypoint.arrivaldistance = arrivaldistance - end - end -end - -function TomTom:ReloadWaypoints() - self:ClearAllWaypoints() - - waypoints = {} - self.waypoints = waypoints - self.waypointprofile = self.waydb.profile - - local cm, cf, cx, cy = TomTom:GetCurrentPlayerPosition() - - for mapId, data in pairs(self.waypointprofile) do - local same = mapId == cm - local minimap = self.profile.minimap.enable and (self.profile.minimap.otherzone or same) - local world = self.profile.worldmap.enable and (self.profile.worldmap.otherzone or same) - for key, waypoint in pairs(data) do - local m, f, x, y = unpack(waypoint) - local title = waypoint.title - - -- Set up default options - local options = { - desc = title, - title = title, - persistent = waypoint.persistent, - minimap = minimap, - world = world, - callbacks = nil, - silent = true, - } - - -- Override options with what is stored in the profile - for k, v in pairs(waypoint) do - if type(k) == "string" then - if k ~= "callbacks" then - -- we can never import callbacks, so ditch them - options[k] = v - end - end - end - - self:AddMFWaypoint(m, f, x, y, options) - end - end -end - -function TomTom:UpdateCoordFeedThrottle() self:_privateupdatecoordthrottle(self.db.profile.feeds.coords_throttle) end - --- Hook some global functions so we know when the world map size changes -local mapSizedUp = not (WORLDMAP_SETTINGS.size == WORLDMAP_WINDOWED_SIZE) -hooksecurefunc("WorldMap_ToggleSizeUp", function() - mapSizedUp = true - TomTom:ShowHideWorldCoords() -end) -hooksecurefunc("WorldMap_ToggleSizeDown", function() - mapSizedUp = false - TomTom:ShowHideWorldCoords() -end) - -function TomTom:ShowHideWorldCoords() - -- Bail out if we're not supposed to be showing this frame - if self.profile.mapcoords.playerenable or self.db.profile.mapcoords.cursorenable then - -- Create the frame if it doesn't exist - if not TomTomWorldFrame then - TomTomWorldFrame = CreateFrame("Frame", nil, WorldMapFrame) - TomTomWorldFrame.Player = TomTomWorldFrame:CreateFontString(nil, "OVERLAY", "GameFontHighlightSmall") - TomTomWorldFrame.Cursor = TomTomWorldFrame:CreateFontString(nil, "OVERLAY", "GameFontHighlightSmall") - TomTomWorldFrame:SetScript("OnUpdate", WorldMap_OnUpdate) - end - - TomTomWorldFrame.Player:ClearAllPoints() - TomTomWorldFrame.Cursor:ClearAllPoints() - - if mapSizedUp then - TomTomWorldFrame.Player:SetPoint("TOPLEFT", WorldMapFrame.BorderFrame, "TOPLEFT", 30, -6) - TomTomWorldFrame.Cursor:SetPoint("TOPLEFT", WorldMapFrame.BorderFrame, "TOPRIGHT", -170, -6) - else - TomTomWorldFrame.Player:SetPoint("TOPLEFT", WorldMapFrame.BorderFrame, "TOPLEFT", 100, -6) - TomTomWorldFrame.Cursor:SetPoint("TOPLEFT", WorldMapFrame.BorderFrame, "TOPRIGHT", -170, -6) - end - - TomTomWorldFrame.Player:Hide() - TomTomWorldFrame.Cursor:Hide() - - if self.profile.mapcoords.playerenable then TomTomWorldFrame.Player:Show() end - - if self.profile.mapcoords.cursorenable then TomTomWorldFrame.Cursor:Show() end - - -- Show the frame - TomTomWorldFrame:Show() - elseif TomTomWorldFrame then - TomTomWorldFrame:Hide() - end -end - -function TomTom:ShowHideCoordBlock() - -- Bail out if we're not supposed to be showing this frame - if self.profile.block.enable then - -- Create the frame if it doesn't exist - if not TomTomBlock then - -- Create the coordinate display - TomTomBlock = CreateFrame("Button", "TomTomBlock", UIParent) - TomTomBlock:SetWidth(120) - TomTomBlock:SetHeight(32) - TomTomBlock:SetToplevel(1) - TomTomBlock:SetFrameStrata("LOW") - TomTomBlock:SetMovable(true) - TomTomBlock:EnableMouse(true) - TomTomBlock:SetClampedToScreen() - TomTomBlock:RegisterForDrag("LeftButton") - TomTomBlock:RegisterForClicks("RightButtonUp") - TomTomBlock:SetPoint("TOP", Minimap, "BOTTOM", -20, -10) - - TomTomBlock.Text = TomTomBlock:CreateFontString(nil, "OVERLAY", "GameFontNormal") - TomTomBlock.Text:SetJustifyH("CENTER") - TomTomBlock.Text:SetPoint("CENTER", 0, 0) - - TomTomBlock:SetBackdrop({ - bgFile = "Interface\\ChatFrame\\ChatFrameBackground", - edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", - edgeSize = 16, - insets = { left = 4, right = 4, top = 4, bottom = 4 }, - }) - TomTomBlock:SetBackdropColor(0, 0, 0, 0.4) - TomTomBlock:SetBackdropBorderColor(1, 0.8, 0, 0.8) - - -- Set behavior scripts - TomTomBlock:SetScript("OnUpdate", Block_OnUpdate) - TomTomBlock:SetScript("OnClick", Block_OnClick) - TomTomBlock:SetScript("OnEnter", Block_OnEnter) - TomTomBlock:SetScript("OnLeave", Block_OnLeave) - TomTomBlock:SetScript("OnDragStop", Block_OnDragStop) - TomTomBlock:SetScript("OnDragStart", Block_OnDragStart) - end - -- Show the frame - TomTomBlock:Show() - - local opt = self.profile.block - - -- Update the backdrop color, and border color - TomTomBlock:SetBackdropColor(unpack(opt.bgcolor)) - TomTomBlock:SetBackdropBorderColor(unpack(opt.bordercolor)) - - -- Update the height and width - TomTomBlock:SetHeight(opt.height) - TomTomBlock:SetWidth(opt.width) - - -- Update the font size - local font, height = TomTomBlock.Text:GetFont() - TomTomBlock.Text:SetFont(font, opt.fontsize, select(3, TomTomBlock.Text:GetFont())) - elseif TomTomBlock then - TomTomBlock:Hide() - end -end - --- Hook the WorldMap OnClick -local world_click_verify = { - ["A"] = function() return IsAltKeyDown() end, - ["C"] = function() return IsControlKeyDown() end, - ["S"] = function() return IsShiftKeyDown() end, -} - -local origScript = WorldMapButton_OnClick -WorldMapButton_OnClick = function(self, ...) - if WorldMapButton.ignoreClick then - WorldMapButton.ignoreClick = false - return - end - - local mouseButton, button = ... - if mouseButton == "RightButton" then - -- Check for all the modifiers that are currently set - for mod in TomTom.db.profile.worldmap.create_modifier:gmatch("[ACS]") do - if not world_click_verify[mod] or not world_click_verify[mod]() then - return origScript and origScript(self, ...) or true - end - end - - local m, f = GetCurrentMapAreaID() - local x, y = GetCurrentCursorPosition() - - if not m or m == WORLDMAP_COSMIC_ID then return origScript and origScript(self, ...) or true end - - local uid = TomTom:AddMFWaypoint(m, f, x, y, { - title = L["TomTom waypoint"], - }) - else - return origScript and origScript(self, ...) or true - end -end - -if WorldMapButton:GetScript("OnClick") == origScript then - WorldMapButton:SetScript("OnClick", WorldMapButton_OnClick) -end - -local function WaypointCallback(event, arg1, arg2, arg3) - if event == "OnDistanceArrive" then - TomTom:ClearWaypoint(arg1) - elseif event == "OnTooltipShown" then - local tooltip = arg1 - if arg3 then - tooltip:SetText(L["TomTom waypoint"]) - tooltip:AddLine(string.format(L["%s yards away"], math.floor(arg2)), 1, 1, 1) - tooltip:Show() - else - tooltip.lines[2]:SetFormattedText(L["%s yards away"], math.floor(arg2), 1, 1, 1) - end - end -end - ---[[------------------------------------------------------------------- --- Dropdown menu code --------------------------------------------------------------------]] --- - -StaticPopupDialogs["TOMTOM_REMOVE_ALL_CONFIRM"] = { - preferredIndex = STATICPOPUPS_NUMDIALOGS, - text = L["Are you sure you would like to remove ALL TomTom waypoints?"], - button1 = L["Yes"], - button2 = L["No"], - OnAccept = function() - TomTom.waydb:ResetProfile() - TomTom:ReloadWaypoints() - end, - timeout = 30, - whileDead = 1, - hideOnEscape = 1, -} - -local dropdown_info = { - -- Define level one elements here - [1] = { - { -- Title - text = L["Waypoint Options"], - isTitle = 1, - }, - { - -- set as crazy arrow - text = L["Set as waypoint arrow"], - func = function() - local uid = TomTom.dropdown.uid - local data = uid - TomTom:SetCrazyArrow(uid, TomTom.profile.arrow.arrival, data.title or L["TomTom waypoint"]) - end, - }, - { - -- Send waypoint - text = L["Send waypoint to"], - hasArrow = true, - value = "send", - }, - { -- Remove waypoint - text = L["Remove waypoint"], - func = function() - local uid = TomTom.dropdown.uid - local data = uid - TomTom:RemoveWaypoint(uid) - --TomTom:PrintF("Removing waypoint %0.2f, %0.2f in %s", data.x, data.y, data.zone) - end, - }, - { -- Remove all waypoints from this zone - text = L["Remove all waypoints from this zone"], - func = function() - local uid = TomTom.dropdown.uid - local data = uid - local mapId = data[1] - for key, waypoint in pairs(waypoints[mapId]) do - TomTom:RemoveWaypoint(waypoint) - end - end, - }, - { -- Remove ALL waypoints - text = L["Remove all waypoints"], - func = function() - if TomTom.db.profile.general.confirmremoveall then - StaticPopup_Show("TOMTOM_REMOVE_ALL_CONFIRM") - else - StaticPopupDialogs["TOMTOM_REMOVE_ALL_CONFIRM"].OnAccept() - return - end - end, - }, - { -- Save this waypoint - text = L["Save this waypoint between sessions"], - checked = function() return TomTom:UIDIsSaved(TomTom.dropdown.uid) end, - func = function() - -- Add/remove it from the SV file - local uid = TomTom.dropdown.uid - local data = waypoints[uid] - if data then - local key = TomTom:GetKey(data) - local mapId = data[1] - - if mapId then - if UIDIsSavedTomTom.waypointprofile[mapId][key] then - TomTom.waypointprofile[mapId][key] = nil - else - TomTom.waypointprofile[mapId][key] = data - end - end - end - end, - }, - }, - [2] = { - send = { - { - -- Title - text = L["Waypoint communication"], - isTitle = true, - }, - { - -- Party - text = L["Send to party"], - func = function() TomTom:SendWaypoint(TomTom.dropdown.uid, "PARTY") end, - }, - { - -- Raid - text = L["Send to raid"], - func = function() TomTom:SendWaypoint(TomTom.dropdown.uid, "RAID") end, - }, - { - -- Battleground - text = L["Send to battleground"], - func = function() TomTom:SendWaypoint(TomTom.dropdown.uid, "BATTLEGROUND") end, - }, - { - -- Guild - text = L["Send to guild"], - func = function() TomTom:SendWaypoint(TomTom.dropdown.uid, "GUILD") end, - }, - }, - }, -} - -local function init_dropdown(self, level) - -- Make sure level is set to 1, if not supplied - level = level or 1 - - -- Get the current level from the info table - local info = dropdown_info[level] - - -- If a value has been set, try to find it at the current level - if level > 1 and UIDROPDOWNMENU_MENU_VALUE then - if info[UIDROPDOWNMENU_MENU_VALUE] then info = info[UIDROPDOWNMENU_MENU_VALUE] end - end - - -- Add the buttons to the menu - for idx, entry in ipairs(info) do - if type(entry.checked) == "function" then - -- Make this button dynamic - local new = {} - for k, v in pairs(entry) do - new[k] = v - end - new.checked = new.checked() - entry = new - else - entry.checked = nil - end - - UIDropDownMenu_AddButton(entry, level) - end -end - -function TomTom:InitializeDropdown(uid) - self.dropdown.uid = uid - UIDropDownMenu_Initialize(self.dropdown, init_dropdown) -end - -function TomTom:UIDIsSaved(uid) - local data = uid - if data then - local key = TomTom:GetKey(data) - local mapId = data[1] - - if data then return not not TomTom.waypointprofile[mapId][key] end - end - return false -end - -function TomTom:SendWaypoint(uid, channel) - local data = uid - local m, f, x, y = unpack(data) - local msg = string.format("%d:%d:%f:%f:%s", m, f, x, y, data.title or "") - SendAddonMessage("TOMTOM3", msg, channel) -end - -function TomTom:CHAT_MSG_ADDON(event, prefix, data, channel, sender) - if prefix ~= "TOMTOM3" then return end - if sender == UnitName("player") then return end - - local m, f, x, y, title = string.split(":", data) - if not title:match("%S") then title = string.format(L["Waypoint from %s"], sender) end - - m = tonumber(m) - f = tonumber(f) - x = tonumber(x) - y = tonumber(y) - - local zoneName = hbd:GetLocalizedMap(m) - self:AddMFWaypoint(m, f, x, y, { title = title }) - local msg = string.format(L["|cffffff78TomTom|r: Added '%s' (sent from %s) to zone %s"], title, sender, zoneName) - ChatFrame1:AddMessage(msg) -end - ---[[------------------------------------------------------------------- --- Define callback functions --------------------------------------------------------------------]] --- -local function _minimap_onclick(event, uid, self, button) - if TomTom.db.profile.minimap.menu then - TomTom:InitializeDropdown(uid) - ToggleDropDownMenu(1, nil, TomTom.dropdown, "cursor", 0, 0) - end -end - -local function _world_onclick(event, uid, self, button) - if TomTom.db.profile.worldmap.menu then - TomTom:InitializeDropdown(uid) - ToggleDropDownMenu(1, nil, TomTom.dropdown, "cursor", 0, 0) - end -end - -local function _both_tooltip_show(event, tooltip, uid, dist) - local data = uid - - tooltip:SetText(data.title or L["Unknown waypoint"]) - if dist and tonumber(dist) then - tooltip:AddLine(string.format(L["%s yards away"], math.floor(dist)), 1, 1, 1) - else - tooltip:AddLine(L["Unknown distance"]) - end - local m, f, x, y = unpack(data) - local zoneName = hbd:GetLocalizedMap(m) - - tooltip:AddLine(string.format(L["%s (%.2f, %.2f)"], zoneName, x * 100, y * 100), 0.7, 0.7, 0.7) - tooltip:Show() -end - -local function _minimap_tooltip_show(event, tooltip, uid, dist) - if not TomTom.db.profile.minimap.tooltip then - tooltip:Hide() - return - end - return _both_tooltip_show(event, tooltip, uid, dist) -end - -local function _world_tooltip_show(event, tooltip, uid, dist) - if not TomTom.db.profile.worldmap.tooltip then - tooltip:Hide() - return - end - return _both_tooltip_show(event, tooltip, uid, dist) -end - -local function _both_tooltip_update(event, tooltip, uid, dist) - if dist and tonumber(dist) then - tooltip.lines[2]:SetFormattedText(L["%s yards away"], math.floor(dist), 1, 1, 1) - else - tooltip.lines[2]:SetText(L["Unknown distance"]) - end -end - -local function _both_clear_distance(event, uid, range, distance, lastdistance) - -- Only clear the waypoint if we weren't inside it when it was set - if lastdistance and not UnitOnTaxi("player") then TomTom:RemoveWaypoint(uid) end -end - -local function _both_ping_arrival(event, uid, range, distance, lastdistance) - if TomTom.profile.arrow.enablePing then PlaySoundFile("Interface\\AddOns\\TomTom\\Media\\ping.mp3") end -end - -local function _remove(event, uid) - local data = uid - local key = TomTom:GetKey(data) - local mapId = data[1] - local sv = TomTom.waypointprofile[mapId] - - if sv and sv[key] then sv[key] = nil end - - -- Remove this entry from the waypoints table - if waypoints[mapId] then waypoints[mapId][key] = nil end -end - -local function noop() end - -function TomTom:RemoveWaypoint(uid) - local data = uid - self:ClearWaypoint(uid) - - local key = TomTom:GetKey(data) - local mapId = data[1] - local sv = TomTom.waypointprofile[mapId] - - if sv and sv[key] then sv[key] = nil end - - -- Remove this entry from the waypoints table - if waypoints[mapId] then waypoints[mapId][key] = nil end -end - --- TODO: Make this not suck -function TomTom:AddWaypoint(x, y, desc, persistent, minimap, world, silent) - local c, z = GetCurrentMapContinent(), GetCurrentMapZone() - - if not c or not z or c < 1 then - --self:Print("Cannot find a valid zone to place the coordinates") - return - end - - return self:AddZWaypoint(c, z, x, y, desc, persistent, minimap, world, nil, silent) -end - -function TomTom:AddZWaypoint(c, z, x, y, desc, persistent, minimap, world, callbacks, silent, crazy) - -- Convert the c,z,x,y tuple to m,f,x,y and pass the work off to AddMFWaypoint() - local mapId, floor = hbd:GetMapIDFromCZ(c, z) - if not mapId then return end - - return self:AddMFWaypoint(mapId, floor, x / 100, y / 100, { - title = desc, - persistent = persistent, - minimap = minimap, - world = world, - callbacks = callbacks, - silent = silent, - crazy = crazy, - }) -end - -function TomTom:AddWaypointToCurrentZone(x, y, desc) - local m, f = TomTom:GetCurrentPlayerPosition() - if not m then return end - - return self:AddMFWaypoint(m, f, x / 100, y / 100, { - title = desc, - }) -end - --- Return a set of default callbacks that can be used by addons to provide --- more detailed functionality without losing the tooltip and onclick --- functionality. --- --- Options that are used in this 'opts' table in this function: --- * cleardistance - When the player is this far from the waypoint, the --- waypoint will be removed. --- * arrivaldistance - When the player is within this radius of the waypoint, --- the crazy arrow will change to the 'downwards' arrow, indicating that --- the player has arrived. - -function TomTom:DefaultCallbacks(opts) - opts = opts or {} - - local callbacks = { - minimap = { - onclick = _minimap_onclick, - tooltip_show = _minimap_tooltip_show, - tooltip_update = _both_tooltip_update, - }, - world = { - onclick = _world_onclick, - tooltip_show = _world_tooltip_show, - tooltip_update = _both_tooltip_show, - }, - distance = {}, - } - - local cleardistance = self.profile.persistence.cleardistance - local arrivaldistance = self.profile.arrow.arrival - - -- Allow both of these to be overriden by options - if opts.cleardistance then cleardistance = opts.cleardistance end - if opts.arrivaldistance then arrivaldistance = opts.arrivaldistance end - - if cleardistance == arrivaldistance then - callbacks.distance[cleardistance] = function(...) - _both_clear_distance(...) - _both_ping_arrival(...) - end - else - if cleardistance > 0 then callbacks.distance[cleardistance] = _both_clear_distance end - if arrivaldistance > 0 then callbacks.distance[arrivaldistance] = _both_ping_arrival end - end - - return callbacks -end - -function TomTom:AddMFWaypoint(m, f, x, y, opts) - opts = opts or {} - - -- Default values - if opts.persistent == nil then opts.persistent = self.profile.persistence.savewaypoints end - if opts.minimap == nil then opts.minimap = self.profile.minimap.enable end - if opts.world == nil then opts.world = self.profile.worldmap.enable end - if opts.crazy == nil then opts.crazy = self.profile.arrow.autoqueue end - if opts.cleardistance == nil then opts.cleardistance = self.profile.persistence.cleardistance end - if opts.arrivaldistance == nil then opts.arrivaldistance = self.profile.arrow.arrival end - - if not opts.callbacks then opts.callbacks = TomTom:DefaultCallbacks(opts) end - - local zoneName = hbd:GetLocalizedMap(m) - - -- Get the default map floor, if necessary - if not f then - local floors = hbd:GetNumFloors(m) - f = floors == 0 and 0 or 1 - end - - -- Ensure there isn't already a waypoint at this location - local key = self:GetKey({ m, f, x, y, title = opts.title }) - if waypoints[m] and waypoints[m][key] then return waypoints[m][key] end - - -- uid is the 'new waypoint' called this for historical reasons - local uid = { m, f, x, y, title = opts.title } - - -- Copy over any options, so we have em - for k, v in pairs(opts) do - if not uid[k] then uid[k] = v end - end - - -- No need to convert x and y because they're already 0-1 instead of 0-100 - self:SetWaypoint(uid, opts.callbacks, opts.minimap, opts.world) - if opts.crazy then self:SetCrazyArrow(uid, opts.arrivaldistance, opts.title) end - - waypoints[m] = waypoints[m] or {} - waypoints[m][key] = uid - - -- If this is a persistent waypoint, then add it to the waypoints table - if opts.persistent then self.waypointprofile[m][key] = uid end - - if not opts.silent and self.profile.general.announce then - local ctxt = RoundCoords(x, y, 2) - local desc = opts.title and opts.title or "" - local sep = opts.title and " - " or "" - local msg = string.format(L["|cffffff78TomTom:|r Added a waypoint (%s%s%s) in %s"], desc, sep, ctxt, zoneName) - ChatFrame1:AddMessage(msg) - end - - return uid -end - --- Check to see if a given uid/waypoint is actually set somewhere -function TomTom:IsValidWaypoint(waypoint) - local m = waypoint[1] - local key = self:GetKey(waypoint) - if waypoints[m] and waypoints[m][key] then - return true - else - return false - end -end - -function TomTom:WaypointMFExists(m, f, x, y, desc) - local key = self:GetKeyArgs(m, f, x, y, desc) - if waypoints[m] and waypoints[m][key] then - return true - else - return false - end -end - -function TomTom:WaypointExists(c, z, x, y, desc) - local m, f = hbd:GetMapIDFromCZ(c, z) - return self:WaypointMFExists(m, f, x, y, desc) -end - -function TomTom:SetCustomWaypoint(c, z, x, y, callback, minimap, world, silent) - return self:AddZWaypoint(c, z, x, y, nil, false, minimap, world, callback, silent) -end - -function TomTom:SetCustomMFWaypoint(m, f, x, y, opts) - opts.persistent = false - - return self:AddMFWaypoint(m, f, x, y, opts) -end - -do - -- Code courtesy ckknight - function GetCurrentCursorPosition() - local x, y = GetCursorPosition() - local left, top = WorldMapDetailFrame:GetLeft(), WorldMapDetailFrame:GetTop() - local width = WorldMapDetailFrame:GetWidth() - local height = WorldMapDetailFrame:GetHeight() - local scale = WorldMapDetailFrame:GetEffectiveScale() - local cx = (x / scale - left) / width - local cy = (top - y / scale) / height - - if cx < 0 or cx > 1 or cy < 0 or cy > 1 then return nil, nil end - - return cx, cy - end - - local coord_fmt = "%%.%df, %%.%df" - function RoundCoords(x, y, prec) - local fmt = coord_fmt:format(prec, prec) - return fmt:format(x * 100, y * 100) - end - - local coord_throttle = 0 - function WorldMap_OnUpdate(self, elapsed) - coord_throttle = coord_throttle + elapsed - if coord_throttle <= TomTom.profile.mapcoords.throttle then return end - - coord_throttle = 0 - local x, y = TomTom:GetCurrentCoords() - local opt = TomTom.db.profile - - if not x or not y then - self.Player:SetText("Player: ---") - else - self.Player:SetFormattedText("Player: %s", RoundCoords(x, y, opt.mapcoords.playeraccuracy)) - end - - local cX, cY = GetCurrentCursorPosition() - - if not cX or not cY then - self.Cursor:SetText("Cursor: ---") - else - self.Cursor:SetFormattedText("Cursor: %s", RoundCoords(cX, cY, opt.mapcoords.cursoraccuracy)) - end - end -end - -do - local bcounter = 0 - function Block_OnUpdate(self, elapsed) - bcounter = bcounter + elapsed - if bcounter > TomTom.profile.block.throttle then - bcounter = bcounter - TomTom.profile.block.throttle - - local x, y = TomTom:GetCurrentCoords() - - local opt = TomTom.db.profile - if not x or not y then - local blank = ("-"):rep(8) - self.Text:SetText(blank) - else - self.Text:SetFormattedText("%s", RoundCoords(x, y, opt.block.accuracy)) - end - end - end - - function Block_OnDragStart(self, button, down) - if not TomTom.db.profile.block.lock then self:StartMoving() end - end - - function Block_OnDragStop(self, button, down) self:StopMovingOrSizing() end - - function Block_OnClick(self, button, down) - local m, f, x, y = TomTom:GetCurrentPlayerPosition() - local zoneName = hbd:GetLocalizedMap(m) - local desc = string.format("%s: %.2f, %.2f", zoneName, x * 100, y * 100) - TomTom:AddMFWaypoint(m, f, x, y, { - title = desc, - }) - end -end - -function TomTom:DebugListWaypoints() - local m, f, x, y = self:GetCurrentPlayerPosition() - local ctxt = RoundCoords(x, y, 2) - local czone = hbd:GetLocalizedMap(m) - self:Printf(L["You are at (%s) in '%s' (map: %d, floor: %d)"], ctxt, czone or "UNKNOWN", m, f) - if waypoints[m] then - for key, wp in pairs(waypoints[m]) do - local ctxt = RoundCoords(wp[3], wp[4], 2) - local desc = wp.title and wp.title or L["Unknown waypoint"] - local indent = " " - self:Printf(L["%s%s - %s (map: %d, floor: %d)"], indent, desc, ctxt, wp[1], wp[2]) - end - else - local indent = " " - self:Printf(L["%sNo waypoints in this zone"], indent) - end -end - -local function usage() - ChatFrame1:AddMessage(L["|cffffff78TomTom |r/way |cffffff78Usage:|r"]) - ChatFrame1:AddMessage(L["|cffffff78/way [desc]|r - Adds a waypoint at x,y with descrtiption desc"]) - ChatFrame1:AddMessage( - L["|cffffff78/way [desc]|r - Adds a waypoint at x,y in zone with description desc"] - ) - ChatFrame1:AddMessage(L["|cffffff78/way reset all|r - Resets all waypoints"]) - ChatFrame1:AddMessage(L["|cffffff78/way reset |r - Resets all waypoints in zone"]) - ChatFrame1:AddMessage(L["|cffffff78/way list|r - Lists active waypoints in current zone"]) -end - -function TomTom:GetClosestWaypoint() - local m, f, x, y = self:GetCurrentPlayerPosition() - local c = hbd:GetCZFromMapID(m) - - local closest_waypoint = nil - local closest_dist = nil - - if not self.profile.arrow.closestusecontinent then - -- Simple search within this zone - if waypoints[m] then - for key, waypoint in pairs(waypoints[m]) do - local dist, x, y = TomTom:GetDistanceToWaypoint(waypoint) - if (dist and closest_dist == nil) or (dist and dist < closest_dist) then - closest_dist = dist - closest_waypoint = waypoint - end - end - end - else - -- Search all waypoints on this continent - for map, waypoints in pairs(waypoints) do - if c == hbd:GetCZFromMapID(m) then - for key, waypoint in pairs(waypoints) do - local dist, x, y = TomTom:GetDistanceToWaypoint(waypoint) - if (dist and closest_dist == nil) or (dist and dist < closest_dist) then - closest_dist = dist - closest_waypoint = waypoint - end - end - end - end - end - - if closest_dist then return closest_waypoint end -end - -function TomTom:SetClosestWaypoint() - local uid = self:GetClosestWaypoint() - if uid then - local data = uid - TomTom:SetCrazyArrow(uid, TomTom.profile.arrow.arrival, data.title) - end -end - -SLASH_TOMTOM_CLOSEST_WAYPOINT1 = "/cway" -SLASH_TOMTOM_CLOSEST_WAYPOINT2 = "/closestway" -SlashCmdList["TOMTOM_CLOSEST_WAYPOINT"] = function(msg) TomTom:SetClosestWaypoint() end - -SLASH_TOMTOM_WAYBACK1 = "/wayb" -SLASH_TOMTOM_WAYBACK2 = "/wayback" -SlashCmdList["TOMTOM_WAYBACK"] = function(msg) - local title = L["Wayback"] - if msg and msg:match("%S") then title = msg end - - local backm, backf, backx, backy = TomTom:GetCurrentPlayerPosition() - TomTom:AddMFWaypoint(backm, backf, backx, backy, { - title = title, - }) -end - -SLASH_TOMTOM_WAY1 = "/way" -SLASH_TOMTOM_WAY2 = "/tway" -SLASH_TOMTOM_WAY3 = "/tomtomway" - -local nameToMapId = {} -do - -- Fetch the names of the continents - local continentNames = {} - local continentData = { GetMapContinents() } - - for c = 1, (#continentData / 2) do - local index = (c * 2) - 1 - local areaId, name = continentData[index], continentData[index + 1] - local instanceId = GetAreaMapInfo(areaId) - continentNames[instanceId] = name - end - - for idx, areaMapId in pairs(GetAreaMaps()) do - local name = GetMapNameByID(areaMapId) - local a, b, c = GetAreaMapInfo(areaMapId) - local parent = (c == -1 and a or c) - local parentName = continentNames[parent] or GetMapNameByID(parent) - - if name and nameToMapId[name] then - if type(nameToMapId[name]) ~= "table" then - -- convert to a table - nameToMapId[name] = { nameToMapId[name] } - end - - table.insert(nameToMapId[name], areaMapId) - else - nameToMapId[name] = areaMapId - end - end - - -- Handle any duplicates - local newEntries = {} - for name, areaId in pairs(nameToMapId) do - if type(areaId) == "table" then - nameToMapId[name] = nil - for idx, areaId in pairs(areaId) do - local a, b, c = GetAreaMapInfo(areaId) - local parent = (c == -1 and a or c) - local parentName = continentNames[parent] or GetMapNameByID(parent) - if parentName then - local newName = name .. ":" .. parentName - newEntries[newName] = areaId - end - end - end - end - - -- Add the de-duplicated entries - for name, areaId in pairs(newEntries) do - nameToMapId[name] = areaId - end -end - -local wrongseparator = "(%d)" .. (tonumber("1.1") and "," or ".") .. "(%d)" -local rightseparator = "%1" .. (tonumber("1.1") and "." or ",") .. "%2" - --- Make comparison only lowercase letters and numbers -local function lowergsub(s) return s:lower():gsub("[^%a%d]", "") end - -SlashCmdList["TOMTOM_WAY"] = function(msg) - msg = msg:gsub("(%d)[%.,] (%d)", "%1 %2"):gsub(wrongseparator, rightseparator) - local tokens = {} - for token in msg:gmatch("%S+") do - table.insert(tokens, token) - end - - -- Lower the first token - local ltoken = tokens[1] and tokens[1]:lower() - - if ltoken == "list" then - TomTom:DebugListWaypoints() - return - elseif ltoken == "reset" then - local ltoken2 = tokens[2] and tokens[2]:lower() - if ltoken2 == "all" then - if TomTom.db.profile.general.confirmremoveall then - StaticPopup_Show("TOMTOM_REMOVE_ALL_CONFIRM") - else - StaticPopupDialogs["TOMTOM_REMOVE_ALL_CONFIRM"].OnAccept() - return - end - elseif tokens[2] then - -- Reset the named zone - local zone = table.concat(tokens, " ", 2) - -- Find a fuzzy match for the zone - - local matches = {} - local lzone = lowergsub(zone) - - for name, mapId in pairs(nameToMapId) do - local lname = lowergsub(name) - if lname == lzone then - -- We have an exact match - matches = { name } - break - elseif lname:match(lzone) then - table.insert(matches, name) - end - end - - if #matches > 5 then - local msg = - string.format(L["Found %d possible matches for zone %s. Please be more specific"], #matches, zone) - ChatFrame1:AddMessage(msg) - return - elseif #matches > 1 then - table.sort(matches) - - ChatFrame1:AddMessage( - string.format( - L["Found multiple matches for zone '%s'. Did you mean: %s"], - zone, - table.concat(matches, ", ") - ) - ) - return - elseif #matches == 0 then - local msg = string.format(L["Could not find any matches for zone %s."], zone) - ChatFrame1:AddMessage(msg) - return - end - - local zoneName = matches[1] - local mapId = nameToMapId[zoneName] - - local numRemoved = 0 - if waypoints[mapId] then - for key, uid in pairs(waypoints[mapId]) do - TomTom:RemoveWaypoint(uid) - numRemoved = numRemoved + 1 - end - ChatFrame1:AddMessage(L["Removed %d waypoints from %s"]:format(numRemoved, zoneName)) - else - ChatFrame1:AddMessage(L["There were no waypoints to remove in %s"]:format(zoneName)) - end - end - elseif tokens[1] and not tonumber(tokens[1]) then - -- Example: /way Elwynn Forest 34.2 50.7 Party in the forest! - -- tokens[1] = Elwynn - -- tokens[2] = Forest - -- tokens[3] = 34.2 - -- tokens[4] = 50.7 - -- tokens[5] = Party - -- ... - -- - -- Find the first numeric token - local zoneEnd - for idx = 1, #tokens do - local token = tokens[idx] - if tonumber(token) then - -- We've encountered a number, so the zone name must have - -- ended at the prior token - zoneEnd = idx - 1 - break - end - end - - if not zoneEnd then - usage() - return - end - - -- This is a waypoint set, with a zone before the coords - local zone = table.concat(tokens, " ", 1, zoneEnd) - local x, y, desc = select(zoneEnd + 1, unpack(tokens)) - - if desc then desc = table.concat(tokens, " ", zoneEnd + 3) end - - -- Find a fuzzy match for the zone - local matches = {} - local lzone = lowergsub(zone) - - for name, mapId in pairs(nameToMapId) do - local lname = lowergsub(name) - if lname == lzone then - -- We have an exact match - matches = { name } - break - elseif lname:match(lzone) then - table.insert(matches, name) - end - end - - if #matches > 5 then - local msg = - string.format(L["Found %d possible matches for zone %s. Please be more specific"], #matches, zone) - ChatFrame1:AddMessage(msg) - return - elseif #matches > 1 then - local msg = string.format( - L["Found multiple matches for zone '%s'. Did you mean: %s"], - zone, - table.concat(matches, ", ") - ) - ChatFrame1:AddMessage(msg) - return - elseif #matches == 0 then - local msg = string.format(L["Could not find any matches for zone %s."], zone) - ChatFrame1:AddMessage(msg) - return - end - - -- There was only one match, so proceed - local zoneName = matches[1] - local mapId = nameToMapId[zoneName] - - x = x and tonumber(x) - y = y and tonumber(y) - - if not x or not y then return usage() end - - x = tonumber(x) - y = tonumber(y) - TomTom:AddMFWaypoint(mapId, nil, x / 100, y / 100, { - title = desc or L["TomTom waypoint"], - }) - elseif tonumber(tokens[1]) then - -- A vanilla set command - local x, y, desc = unpack(tokens) - if not x or not tonumber(x) then - return usage() - elseif not y or not tonumber(y) then - return usage() - end - if desc then desc = table.concat(tokens, " ", 3) end - x = tonumber(x) - y = tonumber(y) - - local m, f = TomTom:GetCurrentPlayerPosition() - if m and x and y then - TomTom:AddMFWaypoint(m, f, x / 100, y / 100, { - title = desc or L["TomTom waypoint"], - }) - end - else - return usage() - end -end +--[[-------------------------------------------------------------------------- +-- TomTom by Cladhaire +-- +-- All Rights Reserved +----------------------------------------------------------------------------]] + +-- Simple localization table for messages +local L = TomTomLocals +local ldb = LibStub("LibDataBroker-1.1") +local hbd = LibStub("HereBeDragons-1.0") + +local addonName, addon = ... +local TomTom = addon + +addon.hbd = hbd + +-- Local definitions +local GetCurrentCursorPosition +local WorldMap_OnUpdate +local Block_OnClick, Block_OnUpdate, Block_OnEnter, Block_OnLeave +local Block_OnDragStart, Block_OnDragStop +local callbackTbl +local RoundCoords + +local waypoints = {} + +function TomTom:Initialize(event, addon) + self.defaults = { + profile = { + general = { + confirmremoveall = true, + announce = false, + corpse_arrow = true, + }, + block = { + enable = true, + accuracy = 2, + bordercolor = { 1, 0.8, 0, 0.8 }, + bgcolor = { 0, 0, 0, 0.4 }, + lock = false, + height = 30, + width = 100, + fontsize = 12, + throttle = 0.2, + }, + mapcoords = { + playerenable = true, + playeraccuracy = 2, + cursorenable = true, + cursoraccuracy = 2, + throttle = 0.1, + }, + arrow = { + enable = true, + goodcolor = { 0, 1, 0 }, + badcolor = { 1, 0, 0 }, + middlecolor = { 1, 1, 0 }, + exactcolor = { 0, 1, 0 }, + arrival = 15, + lock = false, + noclick = false, + showtta = true, + showdistance = true, + stickycorpse = false, + autoqueue = true, + menu = true, + scale = 1.0, + alpha = 1.0, + title_width = 0, + title_height = 0, + title_scale = 1, + title_alpha = 1, + setclosest = true, + closestusecontinent = false, + enablePing = false, + hideDuringPetBattles = true, + }, + minimap = { + enable = true, + otherzone = true, + tooltip = true, + menu = true, + }, + worldmap = { + enable = true, + tooltip = true, + otherzone = true, + clickcreate = true, + menu = true, + create_modifier = "C", + }, + comm = { + enable = true, + prompt = false, + }, + persistence = { + cleardistance = 10, + savewaypoints = true, + }, + feeds = { + coords = false, + coords_throttle = 0.3, + coords_accuracy = 2, + arrow = false, + arrow_throttle = 0.1, + }, + poi = { + enable = true, + modifier = "C", + setClosest = false, + arrival = 0, + }, + }, + } + + self.waydefaults = { + global = { + converted = { + ["*"] = {}, + }, + }, + profile = { + ["*"] = {}, + }, + } + + self.db = LibStub("AceDB-3.0"):New("TomTomDB", self.defaults, "Default") + self.waydb = LibStub("AceDB-3.0"):New("TomTomWaypointsMF", self.waydefaults) + + self.db.RegisterCallback(self, "OnProfileChanged", "ReloadOptions") + self.db.RegisterCallback(self, "OnProfileCopied", "ReloadOptions") + self.db.RegisterCallback(self, "OnProfileReset", "ReloadOptions") + self.waydb.RegisterCallback(self, "OnProfileChanged", "ReloadWaypoints") + self.waydb.RegisterCallback(self, "OnProfileCopied", "ReloadWaypoints") + self.waydb.RegisterCallback(self, "OnProfileReset", "ReloadWaypoints") + + self.tooltip = CreateFrame("GameTooltip", "TomTomTooltip", nil, "GameTooltipTemplate") + self.tooltip:SetFrameStrata("DIALOG") + + self.dropdown = CreateFrame("Frame", "TomTomDropdown", nil, "UIDropDownMenuTemplate") + + -- Both the waypoints and waypointprofile tables are going to contain subtables for each + -- of the mapids that might exist. Under these will be a hash of key/waypoint pairs consisting + -- of the waypoints for the given map file. + self.waypoints = waypoints + self.waypointprofile = self.waydb.profile + + self:RegisterEvent("PLAYER_LEAVING_WORLD") + self:RegisterEvent("CHAT_MSG_ADDON") + RegisterAddonMessagePrefix("TOMTOM3") + + -- Watch for pet battle start/end so we can hide/show the arrow + self:RegisterEvent("PET_BATTLE_OPENING_START", "ShowHideCrazyArrow") + self:RegisterEvent("PET_BATTLE_CLOSE", "ShowHideCrazyArrow") + + self:ReloadOptions() + self:ReloadWaypoints() + + if self.db.profile.feeds.coords then + -- Create a data feed for coordinates + local feed_coords = ldb:NewDataObject("TomTom_Coords", { + type = "data source", + icon = "Interface\\Icons\\INV_Misc_Map_01", + text = "", + }) + + local coordFeedFrame = CreateFrame("Frame") + local throttle, counter = self.db.profile.feeds.coords_throttle, 0 + function TomTom:_privateupdatecoordthrottle(x) throttle = x end + + coordFeedFrame:SetScript("OnUpdate", function(self, elapsed) + counter = counter + elapsed + if counter < throttle then return end + + counter = 0 + local m, f, x, y = TomTom:GetCurrentPlayerPosition() + + if x and y then + local opt = TomTom.db.profile.feeds + feed_coords.text = string.format("%s", RoundCoords(x, y, opt.coords_accuracy)) + end + end) + end +end + +-- Some utility functions that can pack/unpack data from a waypoint + +-- Returns a hashable 'key' for a given waypoint consisting of the +-- map, floor, x, y and the waypoints title. This isn't truly +-- unique, but should be close enough to determine duplicates, etc. +function TomTom:GetKey(waypoint) + local m, f, x, y = unpack(waypoint) + return self:GetKeyArgs(m, f, x, y, waypoint.title) +end + +function TomTom:GetKeyArgs(m, f, x, y, title) + if not f then + local floors = hbd:GetNumFloors(m) + f = floors == 0 and 0 or 1 + end + + -- Fudge the x/y values so they avoid precision/printf issues + local x = x * 10000 + local y = y * 10000 + + local key = string.format("%d:%d:%s:%s:%s", m, f, x * 10e4, y * 10e4, tostring(title)) + return key +end + +-- Returns the player's current coordinates without flipping the map or +-- causing any other weirdness. This can and will cause the coordinates to be +-- weird if you zoom the map out to your parent, but there is no way to +-- recover this without changing/setting the map zoom. Deal with it =) +function TomTom:GetCurrentCoords() + local x, y = GetPlayerMapPosition("player") + if x and y and x > 0 and y > 0 then return x, y end +end + +function TomTom:GetCurrentPlayerPosition() + local x, y, mapID, mapFloor = hbd:GetPlayerZonePosition() + return mapID, mapFloor, x, y +end + +function TomTom:ReloadOptions() + -- This handles the reloading of all options + self.profile = self.db.profile + + self:ShowHideWorldCoords() + self:ShowHideCoordBlock() + self:ShowHideCrazyArrow() + self:EnableDisablePOIIntegration() +end + +function TomTom:ClearAllWaypoints() + for mapId, entries in pairs(waypoints) do + for key, waypoint in pairs(entries) do + -- The waypoint IS the UID now + self:ClearWaypoint(waypoint) + end + end +end + +function TomTom:ResetWaypointOptions() + local minimap = self.profile.minimap.enable + local world = self.profile.worldmap.enable + local cleardistance = self.profile.persistence.cleardistance + local arrivaldistance = self.profile.arrow.arrival + + for map, data in pairs(self.waypointprofile) do + for key, waypoint in pairs(data) do + waypoint.minimap = minimap + waypoint.world = sorld + waypoint.cleardistance = cleardistance + waypoint.arrivaldistance = arrivaldistance + end + end +end + +function TomTom:ReloadWaypoints() + self:ClearAllWaypoints() + + waypoints = {} + self.waypoints = waypoints + self.waypointprofile = self.waydb.profile + + local cm, cf, cx, cy = TomTom:GetCurrentPlayerPosition() + + for mapId, data in pairs(self.waypointprofile) do + local same = mapId == cm + local minimap = self.profile.minimap.enable and (self.profile.minimap.otherzone or same) + local world = self.profile.worldmap.enable and (self.profile.worldmap.otherzone or same) + for key, waypoint in pairs(data) do + local m, f, x, y = unpack(waypoint) + local title = waypoint.title + + -- Set up default options + local options = { + desc = title, + title = title, + persistent = waypoint.persistent, + minimap = minimap, + world = world, + callbacks = nil, + silent = true, + } + + -- Override options with what is stored in the profile + for k, v in pairs(waypoint) do + if type(k) == "string" then + if k ~= "callbacks" then + -- we can never import callbacks, so ditch them + options[k] = v + end + end + end + + self:AddMFWaypoint(m, f, x, y, options) + end + end +end + +function TomTom:UpdateCoordFeedThrottle() self:_privateupdatecoordthrottle(self.db.profile.feeds.coords_throttle) end + +-- Hook some global functions so we know when the world map size changes +local mapSizedUp = not (WORLDMAP_SETTINGS.size == WORLDMAP_WINDOWED_SIZE) +hooksecurefunc("WorldMap_ToggleSizeUp", function() + mapSizedUp = true + TomTom:ShowHideWorldCoords() +end) +hooksecurefunc("WorldMap_ToggleSizeDown", function() + mapSizedUp = false + TomTom:ShowHideWorldCoords() +end) + +function TomTom:ShowHideWorldCoords() + -- Bail out if we're not supposed to be showing this frame + if self.profile.mapcoords.playerenable or self.db.profile.mapcoords.cursorenable then + -- Create the frame if it doesn't exist + if not TomTomWorldFrame then + TomTomWorldFrame = CreateFrame("Frame", nil, WorldMapFrame) + TomTomWorldFrame.Player = TomTomWorldFrame:CreateFontString(nil, "OVERLAY", "GameFontHighlightSmall") + TomTomWorldFrame.Cursor = TomTomWorldFrame:CreateFontString(nil, "OVERLAY", "GameFontHighlightSmall") + TomTomWorldFrame:SetScript("OnUpdate", WorldMap_OnUpdate) + end + + TomTomWorldFrame.Player:ClearAllPoints() + TomTomWorldFrame.Cursor:ClearAllPoints() + + if mapSizedUp then + TomTomWorldFrame.Player:SetPoint("TOPLEFT", WorldMapFrame.BorderFrame, "TOPLEFT", 30, -6) + TomTomWorldFrame.Cursor:SetPoint("TOPLEFT", WorldMapFrame.BorderFrame, "TOPRIGHT", -170, -6) + else + TomTomWorldFrame.Player:SetPoint("TOPLEFT", WorldMapFrame.BorderFrame, "TOPLEFT", 100, -6) + TomTomWorldFrame.Cursor:SetPoint("TOPLEFT", WorldMapFrame.BorderFrame, "TOPRIGHT", -170, -6) + end + + TomTomWorldFrame.Player:Hide() + TomTomWorldFrame.Cursor:Hide() + + if self.profile.mapcoords.playerenable then TomTomWorldFrame.Player:Show() end + + if self.profile.mapcoords.cursorenable then TomTomWorldFrame.Cursor:Show() end + + -- Show the frame + TomTomWorldFrame:Show() + elseif TomTomWorldFrame then + TomTomWorldFrame:Hide() + end +end + +function TomTom:ShowHideCoordBlock() + -- Bail out if we're not supposed to be showing this frame + if self.profile.block.enable then + -- Create the frame if it doesn't exist + if not TomTomBlock then + -- Create the coordinate display + TomTomBlock = CreateFrame("Button", "TomTomBlock", UIParent) + TomTomBlock:SetWidth(120) + TomTomBlock:SetHeight(32) + TomTomBlock:SetToplevel(1) + TomTomBlock:SetFrameStrata("LOW") + TomTomBlock:SetMovable(true) + TomTomBlock:EnableMouse(true) + TomTomBlock:SetClampedToScreen() + TomTomBlock:RegisterForDrag("LeftButton") + TomTomBlock:RegisterForClicks("RightButtonUp") + TomTomBlock:SetPoint("TOP", Minimap, "BOTTOM", -20, -10) + + TomTomBlock.Text = TomTomBlock:CreateFontString(nil, "OVERLAY", "GameFontNormal") + TomTomBlock.Text:SetJustifyH("CENTER") + TomTomBlock.Text:SetPoint("CENTER", 0, 0) + + TomTomBlock:SetBackdrop({ + bgFile = "Interface\\ChatFrame\\ChatFrameBackground", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + edgeSize = 16, + insets = { left = 4, right = 4, top = 4, bottom = 4 }, + }) + TomTomBlock:SetBackdropColor(0, 0, 0, 0.4) + TomTomBlock:SetBackdropBorderColor(1, 0.8, 0, 0.8) + + -- Set behavior scripts + TomTomBlock:SetScript("OnUpdate", Block_OnUpdate) + TomTomBlock:SetScript("OnClick", Block_OnClick) + TomTomBlock:SetScript("OnEnter", Block_OnEnter) + TomTomBlock:SetScript("OnLeave", Block_OnLeave) + TomTomBlock:SetScript("OnDragStop", Block_OnDragStop) + TomTomBlock:SetScript("OnDragStart", Block_OnDragStart) + end + -- Show the frame + TomTomBlock:Show() + + local opt = self.profile.block + + -- Update the backdrop color, and border color + TomTomBlock:SetBackdropColor(unpack(opt.bgcolor)) + TomTomBlock:SetBackdropBorderColor(unpack(opt.bordercolor)) + + -- Update the height and width + TomTomBlock:SetHeight(opt.height) + TomTomBlock:SetWidth(opt.width) + + -- Update the font size + local font, height = TomTomBlock.Text:GetFont() + TomTomBlock.Text:SetFont(font, opt.fontsize, select(3, TomTomBlock.Text:GetFont())) + elseif TomTomBlock then + TomTomBlock:Hide() + end +end + +-- Hook the WorldMap OnClick +local world_click_verify = { + ["A"] = function() return IsAltKeyDown() end, + ["C"] = function() return IsControlKeyDown() end, + ["S"] = function() return IsShiftKeyDown() end, +} + +local origScript = WorldMapButton_OnClick +WorldMapButton_OnClick = function(self, ...) + if WorldMapButton.ignoreClick then + WorldMapButton.ignoreClick = false + return + end + + local mouseButton, button = ... + if mouseButton == "RightButton" then + -- Check for all the modifiers that are currently set + for mod in TomTom.db.profile.worldmap.create_modifier:gmatch("[ACS]") do + if not world_click_verify[mod] or not world_click_verify[mod]() then + return origScript and origScript(self, ...) or true + end + end + + local m, f = GetCurrentMapAreaID() + local x, y = GetCurrentCursorPosition() + + if not m or m == WORLDMAP_COSMIC_ID then return origScript and origScript(self, ...) or true end + + local uid = TomTom:AddMFWaypoint(m, f, x, y, { + title = L["TomTom waypoint"], + }) + else + return origScript and origScript(self, ...) or true + end +end + +if WorldMapButton:GetScript("OnClick") == origScript then + WorldMapButton:SetScript("OnClick", WorldMapButton_OnClick) +end + +local function WaypointCallback(event, arg1, arg2, arg3) + if event == "OnDistanceArrive" then + TomTom:ClearWaypoint(arg1) + elseif event == "OnTooltipShown" then + local tooltip = arg1 + if arg3 then + tooltip:SetText(L["TomTom waypoint"]) + tooltip:AddLine(string.format(L["%s yards away"], math.floor(arg2)), 1, 1, 1) + tooltip:Show() + else + tooltip.lines[2]:SetFormattedText(L["%s yards away"], math.floor(arg2), 1, 1, 1) + end + end +end + +--[[------------------------------------------------------------------- +-- Dropdown menu code +-------------------------------------------------------------------]] +-- + +StaticPopupDialogs["TOMTOM_REMOVE_ALL_CONFIRM"] = { + preferredIndex = STATICPOPUPS_NUMDIALOGS, + text = L["Are you sure you would like to remove ALL TomTom waypoints?"], + button1 = L["Yes"], + button2 = L["No"], + OnAccept = function() + TomTom.waydb:ResetProfile() + TomTom:ReloadWaypoints() + end, + timeout = 30, + whileDead = 1, + hideOnEscape = 1, +} + +local dropdown_info = { + -- Define level one elements here + [1] = { + { -- Title + text = L["Waypoint Options"], + isTitle = 1, + }, + { + -- set as crazy arrow + text = L["Set as waypoint arrow"], + func = function() + local uid = TomTom.dropdown.uid + local data = uid + TomTom:SetCrazyArrow(uid, TomTom.profile.arrow.arrival, data.title or L["TomTom waypoint"]) + end, + }, + { + -- Send waypoint + text = L["Send waypoint to"], + hasArrow = true, + value = "send", + }, + { -- Remove waypoint + text = L["Remove waypoint"], + func = function() + local uid = TomTom.dropdown.uid + local data = uid + TomTom:RemoveWaypoint(uid) + --TomTom:PrintF("Removing waypoint %0.2f, %0.2f in %s", data.x, data.y, data.zone) + end, + }, + { -- Remove all waypoints from this zone + text = L["Remove all waypoints from this zone"], + func = function() + local uid = TomTom.dropdown.uid + local data = uid + local mapId = data[1] + for key, waypoint in pairs(waypoints[mapId]) do + TomTom:RemoveWaypoint(waypoint) + end + end, + }, + { -- Remove ALL waypoints + text = L["Remove all waypoints"], + func = function() + if TomTom.db.profile.general.confirmremoveall then + StaticPopup_Show("TOMTOM_REMOVE_ALL_CONFIRM") + else + StaticPopupDialogs["TOMTOM_REMOVE_ALL_CONFIRM"].OnAccept() + return + end + end, + }, + { -- Save this waypoint + text = L["Save this waypoint between sessions"], + checked = function() return TomTom:UIDIsSaved(TomTom.dropdown.uid) end, + func = function() + -- Add/remove it from the SV file + local uid = TomTom.dropdown.uid + local data = waypoints[uid] + if data then + local key = TomTom:GetKey(data) + local mapId = data[1] + + if mapId then + if UIDIsSavedTomTom.waypointprofile[mapId][key] then + TomTom.waypointprofile[mapId][key] = nil + else + TomTom.waypointprofile[mapId][key] = data + end + end + end + end, + }, + }, + [2] = { + send = { + { + -- Title + text = L["Waypoint communication"], + isTitle = true, + }, + { + -- Party + text = L["Send to party"], + func = function() TomTom:SendWaypoint(TomTom.dropdown.uid, "PARTY") end, + }, + { + -- Raid + text = L["Send to raid"], + func = function() TomTom:SendWaypoint(TomTom.dropdown.uid, "RAID") end, + }, + { + -- Battleground + text = L["Send to battleground"], + func = function() TomTom:SendWaypoint(TomTom.dropdown.uid, "BATTLEGROUND") end, + }, + { + -- Guild + text = L["Send to guild"], + func = function() TomTom:SendWaypoint(TomTom.dropdown.uid, "GUILD") end, + }, + }, + }, +} + +local function init_dropdown(self, level) + -- Make sure level is set to 1, if not supplied + level = level or 1 + + -- Get the current level from the info table + local info = dropdown_info[level] + + -- If a value has been set, try to find it at the current level + if level > 1 and UIDROPDOWNMENU_MENU_VALUE then + if info[UIDROPDOWNMENU_MENU_VALUE] then info = info[UIDROPDOWNMENU_MENU_VALUE] end + end + + -- Add the buttons to the menu + for idx, entry in ipairs(info) do + if type(entry.checked) == "function" then + -- Make this button dynamic + local new = {} + for k, v in pairs(entry) do + new[k] = v + end + new.checked = new.checked() + entry = new + else + entry.checked = nil + end + + UIDropDownMenu_AddButton(entry, level) + end +end + +function TomTom:InitializeDropdown(uid) + self.dropdown.uid = uid + UIDropDownMenu_Initialize(self.dropdown, init_dropdown) +end + +function TomTom:UIDIsSaved(uid) + local data = uid + if data then + local key = TomTom:GetKey(data) + local mapId = data[1] + + if data then return not not TomTom.waypointprofile[mapId][key] end + end + return false +end + +function TomTom:SendWaypoint(uid, channel) + local data = uid + local m, f, x, y = unpack(data) + local msg = string.format("%d:%d:%f:%f:%s", m, f, x, y, data.title or "") + SendAddonMessage("TOMTOM3", msg, channel) +end + +function TomTom:CHAT_MSG_ADDON(event, prefix, data, channel, sender) + if prefix ~= "TOMTOM3" then return end + if sender == UnitName("player") then return end + + local m, f, x, y, title = string.split(":", data) + if not title:match("%S") then title = string.format(L["Waypoint from %s"], sender) end + + m = tonumber(m) + f = tonumber(f) + x = tonumber(x) + y = tonumber(y) + + local zoneName = hbd:GetLocalizedMap(m) + self:AddMFWaypoint(m, f, x, y, { title = title }) + local msg = string.format(L["|cffffff78TomTom|r: Added '%s' (sent from %s) to zone %s"], title, sender, zoneName) + ChatFrame1:AddMessage(msg) +end + +--[[------------------------------------------------------------------- +-- Define callback functions +-------------------------------------------------------------------]] +-- +local function _minimap_onclick(event, uid, self, button) + if TomTom.db.profile.minimap.menu then + TomTom:InitializeDropdown(uid) + ToggleDropDownMenu(1, nil, TomTom.dropdown, "cursor", 0, 0) + end +end + +local function _world_onclick(event, uid, self, button) + if TomTom.db.profile.worldmap.menu then + TomTom:InitializeDropdown(uid) + ToggleDropDownMenu(1, nil, TomTom.dropdown, "cursor", 0, 0) + end +end + +local function _both_tooltip_show(event, tooltip, uid, dist) + local data = uid + + tooltip:SetText(data.title or L["Unknown waypoint"]) + if dist and tonumber(dist) then + tooltip:AddLine(string.format(L["%s yards away"], math.floor(dist)), 1, 1, 1) + else + tooltip:AddLine(L["Unknown distance"]) + end + local m, f, x, y = unpack(data) + local zoneName = hbd:GetLocalizedMap(m) + + tooltip:AddLine(string.format(L["%s (%.2f, %.2f)"], zoneName, x * 100, y * 100), 0.7, 0.7, 0.7) + tooltip:Show() +end + +local function _minimap_tooltip_show(event, tooltip, uid, dist) + if not TomTom.db.profile.minimap.tooltip then + tooltip:Hide() + return + end + return _both_tooltip_show(event, tooltip, uid, dist) +end + +local function _world_tooltip_show(event, tooltip, uid, dist) + if not TomTom.db.profile.worldmap.tooltip then + tooltip:Hide() + return + end + return _both_tooltip_show(event, tooltip, uid, dist) +end + +local function _both_tooltip_update(event, tooltip, uid, dist) + if dist and tonumber(dist) then + tooltip.lines[2]:SetFormattedText(L["%s yards away"], math.floor(dist), 1, 1, 1) + else + tooltip.lines[2]:SetText(L["Unknown distance"]) + end +end + +local function _both_clear_distance(event, uid, range, distance, lastdistance) + -- Only clear the waypoint if we weren't inside it when it was set + if lastdistance and not UnitOnTaxi("player") then TomTom:RemoveWaypoint(uid) end +end + +local function _both_ping_arrival(event, uid, range, distance, lastdistance) + if TomTom.profile.arrow.enablePing then PlaySoundFile("Interface\\AddOns\\TomTom\\Media\\ping.mp3") end +end + +local function _remove(event, uid) + local data = uid + local key = TomTom:GetKey(data) + local mapId = data[1] + local sv = TomTom.waypointprofile[mapId] + + if sv and sv[key] then sv[key] = nil end + + -- Remove this entry from the waypoints table + if waypoints[mapId] then waypoints[mapId][key] = nil end +end + +local function noop() end + +function TomTom:RemoveWaypoint(uid) + local data = uid + self:ClearWaypoint(uid) + + local key = TomTom:GetKey(data) + local mapId = data[1] + local sv = TomTom.waypointprofile[mapId] + + if sv and sv[key] then sv[key] = nil end + + -- Remove this entry from the waypoints table + if waypoints[mapId] then waypoints[mapId][key] = nil end +end + +-- TODO: Make this not suck +function TomTom:AddWaypoint(x, y, desc, persistent, minimap, world, silent) + local c, z = GetCurrentMapContinent(), GetCurrentMapZone() + + if not c or not z or c < 1 then + --self:Print("Cannot find a valid zone to place the coordinates") + return + end + + return self:AddZWaypoint(c, z, x, y, desc, persistent, minimap, world, nil, silent) +end + +function TomTom:AddZWaypoint(c, z, x, y, desc, persistent, minimap, world, callbacks, silent, crazy) + -- Convert the c,z,x,y tuple to m,f,x,y and pass the work off to AddMFWaypoint() + local mapId, floor = hbd:GetMapIDFromCZ(c, z) + if not mapId then return end + + return self:AddMFWaypoint(mapId, floor, x / 100, y / 100, { + title = desc, + persistent = persistent, + minimap = minimap, + world = world, + callbacks = callbacks, + silent = silent, + crazy = crazy, + }) +end + +function TomTom:AddWaypointToCurrentZone(x, y, desc) + local m, f = TomTom:GetCurrentPlayerPosition() + if not m then return end + + return self:AddMFWaypoint(m, f, x / 100, y / 100, { + title = desc, + }) +end + +-- Return a set of default callbacks that can be used by addons to provide +-- more detailed functionality without losing the tooltip and onclick +-- functionality. +-- +-- Options that are used in this 'opts' table in this function: +-- * cleardistance - When the player is this far from the waypoint, the +-- waypoint will be removed. +-- * arrivaldistance - When the player is within this radius of the waypoint, +-- the crazy arrow will change to the 'downwards' arrow, indicating that +-- the player has arrived. + +function TomTom:DefaultCallbacks(opts) + opts = opts or {} + + local callbacks = { + minimap = { + onclick = _minimap_onclick, + tooltip_show = _minimap_tooltip_show, + tooltip_update = _both_tooltip_update, + }, + world = { + onclick = _world_onclick, + tooltip_show = _world_tooltip_show, + tooltip_update = _both_tooltip_show, + }, + distance = {}, + } + + local cleardistance = self.profile.persistence.cleardistance + local arrivaldistance = self.profile.arrow.arrival + + -- Allow both of these to be overriden by options + if opts.cleardistance then cleardistance = opts.cleardistance end + if opts.arrivaldistance then arrivaldistance = opts.arrivaldistance end + + if cleardistance == arrivaldistance then + callbacks.distance[cleardistance] = function(...) + _both_clear_distance(...) + _both_ping_arrival(...) + end + else + if cleardistance > 0 then callbacks.distance[cleardistance] = _both_clear_distance end + if arrivaldistance > 0 then callbacks.distance[arrivaldistance] = _both_ping_arrival end + end + + return callbacks +end + +function TomTom:AddMFWaypoint(m, f, x, y, opts) + opts = opts or {} + + -- Default values + if opts.persistent == nil then opts.persistent = self.profile.persistence.savewaypoints end + if opts.minimap == nil then opts.minimap = self.profile.minimap.enable end + if opts.world == nil then opts.world = self.profile.worldmap.enable end + if opts.crazy == nil then opts.crazy = self.profile.arrow.autoqueue end + if opts.cleardistance == nil then opts.cleardistance = self.profile.persistence.cleardistance end + if opts.arrivaldistance == nil then opts.arrivaldistance = self.profile.arrow.arrival end + + if not opts.callbacks then opts.callbacks = TomTom:DefaultCallbacks(opts) end + + local zoneName = hbd:GetLocalizedMap(m) + + -- Get the default map floor, if necessary + if not f then + local floors = hbd:GetNumFloors(m) + f = floors == 0 and 0 or 1 + end + + -- Ensure there isn't already a waypoint at this location + local key = self:GetKey({ m, f, x, y, title = opts.title }) + if waypoints[m] and waypoints[m][key] then return waypoints[m][key] end + + -- uid is the 'new waypoint' called this for historical reasons + local uid = { m, f, x, y, title = opts.title } + + -- Copy over any options, so we have em + for k, v in pairs(opts) do + if not uid[k] then uid[k] = v end + end + + -- No need to convert x and y because they're already 0-1 instead of 0-100 + self:SetWaypoint(uid, opts.callbacks, opts.minimap, opts.world) + if opts.crazy then self:SetCrazyArrow(uid, opts.arrivaldistance, opts.title) end + + waypoints[m] = waypoints[m] or {} + waypoints[m][key] = uid + + -- If this is a persistent waypoint, then add it to the waypoints table + if opts.persistent then self.waypointprofile[m][key] = uid end + + if not opts.silent and self.profile.general.announce then + local ctxt = RoundCoords(x, y, 2) + local desc = opts.title and opts.title or "" + local sep = opts.title and " - " or "" + local msg = string.format(L["|cffffff78TomTom:|r Added a waypoint (%s%s%s) in %s"], desc, sep, ctxt, zoneName) + ChatFrame1:AddMessage(msg) + end + + return uid +end + +-- Check to see if a given uid/waypoint is actually set somewhere +function TomTom:IsValidWaypoint(waypoint) + local m = waypoint[1] + local key = self:GetKey(waypoint) + if waypoints[m] and waypoints[m][key] then + return true + else + return false + end +end + +function TomTom:WaypointMFExists(m, f, x, y, desc) + local key = self:GetKeyArgs(m, f, x, y, desc) + if waypoints[m] and waypoints[m][key] then + return true + else + return false + end +end + +function TomTom:WaypointExists(c, z, x, y, desc) + local m, f = hbd:GetMapIDFromCZ(c, z) + return self:WaypointMFExists(m, f, x, y, desc) +end + +function TomTom:SetCustomWaypoint(c, z, x, y, callback, minimap, world, silent) + return self:AddZWaypoint(c, z, x, y, nil, false, minimap, world, callback, silent) +end + +function TomTom:SetCustomMFWaypoint(m, f, x, y, opts) + opts.persistent = false + + return self:AddMFWaypoint(m, f, x, y, opts) +end + +do + -- Code courtesy ckknight + function GetCurrentCursorPosition() + local x, y = GetCursorPosition() + local left, top = WorldMapDetailFrame:GetLeft(), WorldMapDetailFrame:GetTop() + local width = WorldMapDetailFrame:GetWidth() + local height = WorldMapDetailFrame:GetHeight() + local scale = WorldMapDetailFrame:GetEffectiveScale() + local cx = (x / scale - left) / width + local cy = (top - y / scale) / height + + if cx < 0 or cx > 1 or cy < 0 or cy > 1 then return nil, nil end + + return cx, cy + end + + local coord_fmt = "%%.%df, %%.%df" + function RoundCoords(x, y, prec) + local fmt = coord_fmt:format(prec, prec) + return fmt:format(x * 100, y * 100) + end + + local coord_throttle = 0 + function WorldMap_OnUpdate(self, elapsed) + coord_throttle = coord_throttle + elapsed + if coord_throttle <= TomTom.profile.mapcoords.throttle then return end + + coord_throttle = 0 + local x, y = TomTom:GetCurrentCoords() + local opt = TomTom.db.profile + + if not x or not y then + self.Player:SetText("Player: ---") + else + self.Player:SetFormattedText("Player: %s", RoundCoords(x, y, opt.mapcoords.playeraccuracy)) + end + + local cX, cY = GetCurrentCursorPosition() + + if not cX or not cY then + self.Cursor:SetText("Cursor: ---") + else + self.Cursor:SetFormattedText("Cursor: %s", RoundCoords(cX, cY, opt.mapcoords.cursoraccuracy)) + end + end +end + +do + local bcounter = 0 + function Block_OnUpdate(self, elapsed) + bcounter = bcounter + elapsed + if bcounter > TomTom.profile.block.throttle then + bcounter = bcounter - TomTom.profile.block.throttle + + local x, y = TomTom:GetCurrentCoords() + + local opt = TomTom.db.profile + if not x or not y then + local blank = ("-"):rep(8) + self.Text:SetText(blank) + else + self.Text:SetFormattedText("%s", RoundCoords(x, y, opt.block.accuracy)) + end + end + end + + function Block_OnDragStart(self, button, down) + if not TomTom.db.profile.block.lock then self:StartMoving() end + end + + function Block_OnDragStop(self, button, down) self:StopMovingOrSizing() end + + function Block_OnClick(self, button, down) + local m, f, x, y = TomTom:GetCurrentPlayerPosition() + local zoneName = hbd:GetLocalizedMap(m) + local desc = string.format("%s: %.2f, %.2f", zoneName, x * 100, y * 100) + TomTom:AddMFWaypoint(m, f, x, y, { + title = desc, + }) + end +end + +function TomTom:DebugListWaypoints() + local m, f, x, y = self:GetCurrentPlayerPosition() + local ctxt = RoundCoords(x, y, 2) + local czone = hbd:GetLocalizedMap(m) + self:Printf(L["You are at (%s) in '%s' (map: %d, floor: %d)"], ctxt, czone or "UNKNOWN", m, f) + if waypoints[m] then + for key, wp in pairs(waypoints[m]) do + local ctxt = RoundCoords(wp[3], wp[4], 2) + local desc = wp.title and wp.title or L["Unknown waypoint"] + local indent = " " + self:Printf(L["%s%s - %s (map: %d, floor: %d)"], indent, desc, ctxt, wp[1], wp[2]) + end + else + local indent = " " + self:Printf(L["%sNo waypoints in this zone"], indent) + end +end + +local function usage() + ChatFrame1:AddMessage(L["|cffffff78TomTom |r/way |cffffff78Usage:|r"]) + ChatFrame1:AddMessage(L["|cffffff78/way [desc]|r - Adds a waypoint at x,y with descrtiption desc"]) + ChatFrame1:AddMessage( + L["|cffffff78/way [desc]|r - Adds a waypoint at x,y in zone with description desc"] + ) + ChatFrame1:AddMessage(L["|cffffff78/way reset all|r - Resets all waypoints"]) + ChatFrame1:AddMessage(L["|cffffff78/way reset |r - Resets all waypoints in zone"]) + ChatFrame1:AddMessage(L["|cffffff78/way list|r - Lists active waypoints in current zone"]) +end + +function TomTom:GetClosestWaypoint() + local m, f, x, y = self:GetCurrentPlayerPosition() + local c = hbd:GetCZFromMapID(m) + + local closest_waypoint = nil + local closest_dist = nil + + if not self.profile.arrow.closestusecontinent then + -- Simple search within this zone + if waypoints[m] then + for key, waypoint in pairs(waypoints[m]) do + local dist, x, y = TomTom:GetDistanceToWaypoint(waypoint) + if (dist and closest_dist == nil) or (dist and dist < closest_dist) then + closest_dist = dist + closest_waypoint = waypoint + end + end + end + else + -- Search all waypoints on this continent + for map, waypoints in pairs(waypoints) do + if c == hbd:GetCZFromMapID(m) then + for key, waypoint in pairs(waypoints) do + local dist, x, y = TomTom:GetDistanceToWaypoint(waypoint) + if (dist and closest_dist == nil) or (dist and dist < closest_dist) then + closest_dist = dist + closest_waypoint = waypoint + end + end + end + end + end + + if closest_dist then return closest_waypoint end +end + +function TomTom:SetClosestWaypoint() + local uid = self:GetClosestWaypoint() + if uid then + local data = uid + TomTom:SetCrazyArrow(uid, TomTom.profile.arrow.arrival, data.title) + end +end + +SLASH_TOMTOM_CLOSEST_WAYPOINT1 = "/cway" +SLASH_TOMTOM_CLOSEST_WAYPOINT2 = "/closestway" +SlashCmdList["TOMTOM_CLOSEST_WAYPOINT"] = function(msg) TomTom:SetClosestWaypoint() end + +SLASH_TOMTOM_WAYBACK1 = "/wayb" +SLASH_TOMTOM_WAYBACK2 = "/wayback" +SlashCmdList["TOMTOM_WAYBACK"] = function(msg) + local title = L["Wayback"] + if msg and msg:match("%S") then title = msg end + + local backm, backf, backx, backy = TomTom:GetCurrentPlayerPosition() + TomTom:AddMFWaypoint(backm, backf, backx, backy, { + title = title, + }) +end + +SLASH_TOMTOM_WAY1 = "/way" +SLASH_TOMTOM_WAY2 = "/tway" +SLASH_TOMTOM_WAY3 = "/tomtomway" + +local nameToMapId = {} +do + -- Fetch the names of the continents + local continentNames = {} + local continentData = { GetMapContinents() } + + for c = 1, (#continentData / 2) do + local index = (c * 2) - 1 + local areaId, name = continentData[index], continentData[index + 1] + local instanceId = GetAreaMapInfo(areaId) + continentNames[instanceId] = name + end + + for idx, areaMapId in pairs(GetAreaMaps()) do + local name = GetMapNameByID(areaMapId) + local a, b, c = GetAreaMapInfo(areaMapId) + local parent = (c == -1 and a or c) + local parentName = continentNames[parent] or GetMapNameByID(parent) + + if name and nameToMapId[name] then + if type(nameToMapId[name]) ~= "table" then + -- convert to a table + nameToMapId[name] = { nameToMapId[name] } + end + + table.insert(nameToMapId[name], areaMapId) + else + nameToMapId[name] = areaMapId + end + end + + -- Handle any duplicates + local newEntries = {} + for name, areaId in pairs(nameToMapId) do + if type(areaId) == "table" then + nameToMapId[name] = nil + for idx, areaId in pairs(areaId) do + local a, b, c = GetAreaMapInfo(areaId) + local parent = (c == -1 and a or c) + local parentName = continentNames[parent] or GetMapNameByID(parent) + if parentName then + local newName = name .. ":" .. parentName + newEntries[newName] = areaId + end + end + end + end + + -- Add the de-duplicated entries + for name, areaId in pairs(newEntries) do + nameToMapId[name] = areaId + end +end + +local wrongseparator = "(%d)" .. (tonumber("1.1") and "," or ".") .. "(%d)" +local rightseparator = "%1" .. (tonumber("1.1") and "." or ",") .. "%2" + +-- Make comparison only lowercase letters and numbers +local function lowergsub(s) return s:lower():gsub("[^%a%d]", "") end + +SlashCmdList["TOMTOM_WAY"] = function(msg) + msg = msg:gsub("(%d)[%.,] (%d)", "%1 %2"):gsub(wrongseparator, rightseparator) + local tokens = {} + for token in msg:gmatch("%S+") do + table.insert(tokens, token) + end + + -- Lower the first token + local ltoken = tokens[1] and tokens[1]:lower() + + if ltoken == "list" then + TomTom:DebugListWaypoints() + return + elseif ltoken == "reset" then + local ltoken2 = tokens[2] and tokens[2]:lower() + if ltoken2 == "all" then + if TomTom.db.profile.general.confirmremoveall then + StaticPopup_Show("TOMTOM_REMOVE_ALL_CONFIRM") + else + StaticPopupDialogs["TOMTOM_REMOVE_ALL_CONFIRM"].OnAccept() + return + end + elseif tokens[2] then + -- Reset the named zone + local zone = table.concat(tokens, " ", 2) + -- Find a fuzzy match for the zone + + local matches = {} + local lzone = lowergsub(zone) + + for name, mapId in pairs(nameToMapId) do + local lname = lowergsub(name) + if lname == lzone then + -- We have an exact match + matches = { name } + break + elseif lname:match(lzone) then + table.insert(matches, name) + end + end + + if #matches > 5 then + local msg = + string.format(L["Found %d possible matches for zone %s. Please be more specific"], #matches, zone) + ChatFrame1:AddMessage(msg) + return + elseif #matches > 1 then + table.sort(matches) + + ChatFrame1:AddMessage( + string.format( + L["Found multiple matches for zone '%s'. Did you mean: %s"], + zone, + table.concat(matches, ", ") + ) + ) + return + elseif #matches == 0 then + local msg = string.format(L["Could not find any matches for zone %s."], zone) + ChatFrame1:AddMessage(msg) + return + end + + local zoneName = matches[1] + local mapId = nameToMapId[zoneName] + + local numRemoved = 0 + if waypoints[mapId] then + for key, uid in pairs(waypoints[mapId]) do + TomTom:RemoveWaypoint(uid) + numRemoved = numRemoved + 1 + end + ChatFrame1:AddMessage(L["Removed %d waypoints from %s"]:format(numRemoved, zoneName)) + else + ChatFrame1:AddMessage(L["There were no waypoints to remove in %s"]:format(zoneName)) + end + end + elseif tokens[1] and not tonumber(tokens[1]) then + -- Example: /way Elwynn Forest 34.2 50.7 Party in the forest! + -- tokens[1] = Elwynn + -- tokens[2] = Forest + -- tokens[3] = 34.2 + -- tokens[4] = 50.7 + -- tokens[5] = Party + -- ... + -- + -- Find the first numeric token + local zoneEnd + for idx = 1, #tokens do + local token = tokens[idx] + if tonumber(token) then + -- We've encountered a number, so the zone name must have + -- ended at the prior token + zoneEnd = idx - 1 + break + end + end + + if not zoneEnd then + usage() + return + end + + -- This is a waypoint set, with a zone before the coords + local zone = table.concat(tokens, " ", 1, zoneEnd) + local x, y, desc = select(zoneEnd + 1, unpack(tokens)) + + if desc then desc = table.concat(tokens, " ", zoneEnd + 3) end + + -- Find a fuzzy match for the zone + local matches = {} + local lzone = lowergsub(zone) + + for name, mapId in pairs(nameToMapId) do + local lname = lowergsub(name) + if lname == lzone then + -- We have an exact match + matches = { name } + break + elseif lname:match(lzone) then + table.insert(matches, name) + end + end + + if #matches > 5 then + local msg = + string.format(L["Found %d possible matches for zone %s. Please be more specific"], #matches, zone) + ChatFrame1:AddMessage(msg) + return + elseif #matches > 1 then + local msg = string.format( + L["Found multiple matches for zone '%s'. Did you mean: %s"], + zone, + table.concat(matches, ", ") + ) + ChatFrame1:AddMessage(msg) + return + elseif #matches == 0 then + local msg = string.format(L["Could not find any matches for zone %s."], zone) + ChatFrame1:AddMessage(msg) + return + end + + -- There was only one match, so proceed + local zoneName = matches[1] + local mapId = nameToMapId[zoneName] + + x = x and tonumber(x) + y = y and tonumber(y) + + if not x or not y then return usage() end + + x = tonumber(x) + y = tonumber(y) + TomTom:AddMFWaypoint(mapId, nil, x / 100, y / 100, { + title = desc or L["TomTom waypoint"], + }) + elseif tonumber(tokens[1]) then + -- A vanilla set command + local x, y, desc = unpack(tokens) + if not x or not tonumber(x) then + return usage() + elseif not y or not tonumber(y) then + return usage() + end + if desc then desc = table.concat(tokens, " ", 3) end + x = tonumber(x) + y = tonumber(y) + + local m, f = TomTom:GetCurrentPlayerPosition() + if m and x and y then + TomTom:AddMFWaypoint(m, f, x / 100, y / 100, { + title = desc or L["TomTom waypoint"], + }) + end + else + return usage() + end +end diff --git a/Random Trash/idk/idk.lua b/WeakAuras/Projects/Random Trash/idk/idk.lua similarity index 95% rename from Random Trash/idk/idk.lua rename to WeakAuras/Projects/Random Trash/idk/idk.lua index 183514d..beea49e 100644 --- a/Random Trash/idk/idk.lua +++ b/WeakAuras/Projects/Random Trash/idk/idk.lua @@ -1,65 +1,65 @@ -function() - FriendlyPlayerNameplateIds = {} - local pointer = 1 - for i = 1, 40 do - if UnitIsPlayer("nameplate" .. i) == true then - FriendlyPlayerNameplateIds[pointer] = i - pointer = pointer + 1 - end - end -end - - - -UnitIsFriend("player", "nameplate" .. i) - - - - -function() - local output = "" - for k,v in ipairs(FriendlyPlayerNameplateIds) do - if UnitName("nameplate" .. v) ~= nil then - output = output .. string.match(UnitName("nameplate" .. v), "%a+") .. " " .. UnitHealth("nameplate" .. v) .. "/" .. UnitHealthMax("nameplate" .. v) .. "\n" - end - end - return output -end - - - - - - -function() - local output = "" - FriendlyPlayerNameplateIds = {} - local pointer = 1 - for i = 1, 40 do - if UnitIsPlayer("nameplate" .. i) == true then - FriendlyPlayerNameplateIds[pointer] = i - pointer = pointer + 1 - output = output .. i .. " " .. string.match(UnitName("nameplate" .. i), "%a+") .. "\n" - end - end - output = output .. "\n\n\n" - for k,v in ipairs(FriendlyPlayerNameplateIds) do - output = output .. k .. " " .. v .. "\n" - end - return output -end - - - - - - - -local f = CreateFrame("Button", "name", UIParent, "SecureUnitButtonTemplate") -f:SetAttribute("unit", "player") -- or whatever unit you're making -f:EnableMouse(true) -f:SetSize(100, 20) -- width 100, height 20 -f:SetAllPoints(WeakAuras.regions[aura_env.id].region) -f:RegisterForClicks("LeftButtonUp", "RightButtonUp") -f:SetAttribute("type1", "target") -- Left click targets unit +function() + FriendlyPlayerNameplateIds = {} + local pointer = 1 + for i = 1, 40 do + if UnitIsPlayer("nameplate" .. i) == true then + FriendlyPlayerNameplateIds[pointer] = i + pointer = pointer + 1 + end + end +end + + + +UnitIsFriend("player", "nameplate" .. i) + + + + +function() + local output = "" + for k,v in ipairs(FriendlyPlayerNameplateIds) do + if UnitName("nameplate" .. v) ~= nil then + output = output .. string.match(UnitName("nameplate" .. v), "%a+") .. " " .. UnitHealth("nameplate" .. v) .. "/" .. UnitHealthMax("nameplate" .. v) .. "\n" + end + end + return output +end + + + + + + +function() + local output = "" + FriendlyPlayerNameplateIds = {} + local pointer = 1 + for i = 1, 40 do + if UnitIsPlayer("nameplate" .. i) == true then + FriendlyPlayerNameplateIds[pointer] = i + pointer = pointer + 1 + output = output .. i .. " " .. string.match(UnitName("nameplate" .. i), "%a+") .. "\n" + end + end + output = output .. "\n\n\n" + for k,v in ipairs(FriendlyPlayerNameplateIds) do + output = output .. k .. " " .. v .. "\n" + end + return output +end + + + + + + + +local f = CreateFrame("Button", "name", UIParent, "SecureUnitButtonTemplate") +f:SetAttribute("unit", "player") -- or whatever unit you're making +f:EnableMouse(true) +f:SetSize(100, 20) -- width 100, height 20 +f:SetAllPoints(WeakAuras.regions[aura_env.id].region) +f:RegisterForClicks("LeftButtonUp", "RightButtonUp") +f:SetAttribute("type1", "target") -- Left click targets unit f:SetAttribute("type2", "togglemenu") -- Right click opens the context menu \ No newline at end of file diff --git a/Random Trash/idk/idk2.lua b/WeakAuras/Projects/Random Trash/idk/idk2.lua similarity index 94% rename from Random Trash/idk/idk2.lua rename to WeakAuras/Projects/Random Trash/idk/idk2.lua index 7239e58..a35b3c7 100644 --- a/Random Trash/idk/idk2.lua +++ b/WeakAuras/Projects/Random Trash/idk/idk2.lua @@ -1,89 +1,89 @@ ---https://wago.io/VJb37XBIb -{ - "m": "d", - "s": "2.1.0.27", - "d": { - "yOffset": -13, - "width": 185, - "version": 1, - "id": "Player Frame Clickable", - "additional_triggers": [ - { - "untrigger": [], - "trigger": { - "unit": "player", - "use_unit": true, - "use_alwaystrue": true, - "event": "Conditions", - "subeventPrefix": "SPELL", - "subeventSuffix": "_CAST_START", - "type": "status", - "unevent": "auto" -} -} -], -"numTriggers": 2, -"disjunctive": "any", -"regionType": "texture", -"load": { -"use_never": false, -"faction": { -"multi": [] -}, -"difficulty": { -"multi": [] -}, -"role": { -"multi": [] -}, -"talent": { -"multi": [] -}, -"race": { -"multi": [] -} -}, -"trigger": { -"custom": "function(event) -return false -end -", -"events": "PLAYER_ENTERING_WORLD", -"type": "custom", -"custom_type": "status", -"custom_hide": "timed" -}, -"init_completed": 1, -"color": [ -null, -null, -null, -0 -], -"url": "https://wago.io/VJb37XBIb/1", -"untrigger": { -"custom": function() -if LeafPlayerFrame then -else - local r = WeakAuras.regions[aura_env.id].region - local f = CreateFrame("button", "LeafPlayerFrame", r, "SecureActionButtonTemplate") - f.unit = 'player' - f:SetAttribute("unit", "player") - f:SetAllPoints(r) - f:EnableMouse(true) - f:RegisterForClicks("LeftButtonUp", "RightButtonUp") - f:SetAttribute("type1", "target") - f:SetAttribute("type2", "togglemenu") - RegisterUnitWatch(f) - f:SetScript("OnEnter",UnitFrame_OnEnter) -end -end -" -}, -"height": 20, -"texture": "interface\\addons\\LeafPack\\Other\\Square Frame.tga", -"semver": "1.0.0" -}, -"v": 1421, -"wagoID": "VJb37XBIb" +--https://wago.io/VJb37XBIb +{ + "m": "d", + "s": "2.1.0.27", + "d": { + "yOffset": -13, + "width": 185, + "version": 1, + "id": "Player Frame Clickable", + "additional_triggers": [ + { + "untrigger": [], + "trigger": { + "unit": "player", + "use_unit": true, + "use_alwaystrue": true, + "event": "Conditions", + "subeventPrefix": "SPELL", + "subeventSuffix": "_CAST_START", + "type": "status", + "unevent": "auto" +} +} +], +"numTriggers": 2, +"disjunctive": "any", +"regionType": "texture", +"load": { +"use_never": false, +"faction": { +"multi": [] +}, +"difficulty": { +"multi": [] +}, +"role": { +"multi": [] +}, +"talent": { +"multi": [] +}, +"race": { +"multi": [] +} +}, +"trigger": { +"custom": "function(event) +return false +end +", +"events": "PLAYER_ENTERING_WORLD", +"type": "custom", +"custom_type": "status", +"custom_hide": "timed" +}, +"init_completed": 1, +"color": [ +null, +null, +null, +0 +], +"url": "https://wago.io/VJb37XBIb/1", +"untrigger": { +"custom": function() +if LeafPlayerFrame then +else + local r = WeakAuras.regions[aura_env.id].region + local f = CreateFrame("button", "LeafPlayerFrame", r, "SecureActionButtonTemplate") + f.unit = 'player' + f:SetAttribute("unit", "player") + f:SetAllPoints(r) + f:EnableMouse(true) + f:RegisterForClicks("LeftButtonUp", "RightButtonUp") + f:SetAttribute("type1", "target") + f:SetAttribute("type2", "togglemenu") + RegisterUnitWatch(f) + f:SetScript("OnEnter",UnitFrame_OnEnter) +end +end +" +}, +"height": 20, +"texture": "interface\\addons\\LeafPack\\Other\\Square Frame.tga", +"semver": "1.0.0" +}, +"v": 1421, +"wagoID": "VJb37XBIb" } \ No newline at end of file diff --git a/Random Trash/idk/idk3.lua b/WeakAuras/Projects/Random Trash/idk/idk3.lua similarity index 95% rename from Random Trash/idk/idk3.lua rename to WeakAuras/Projects/Random Trash/idk/idk3.lua index 3e39521..9e14bb3 100644 --- a/Random Trash/idk/idk3.lua +++ b/WeakAuras/Projects/Random Trash/idk/idk3.lua @@ -1,1333 +1,1333 @@ ---https://wago.io/V1NFD3AxM -{ - "m": "d", - "s": "2.2.2.0", - "c": [ - { - "yOffset": -210, - "outline": "None", - "id": "Target Name", - "additional_triggers": [], - "font": "bignoodle", - "regionType": "text", - "animation": { - "main": { - "colorA": 1, - "x": 0, - "duration": "100", - "colorFunc": return function(r1, g1, b1, a1, r2, g2, b2, a2) local class = UnitClass("target") - local red, green, blue = 1,1,0 - - if class == "Death Knight" then - red, green, blue = 0.77,0.12,0.23 - - elseif class == "Demon Hunter" then - red, green, blue = 0.64,0.19,0.79 - - elseif class == "Druid" then - red, green, blue = 1.00,0.49,0.04 - - elseif class == "Hunter" then - red, green, blue = 0.67,0.83,0.45 - - elseif class == "Mage" then - red, green, blue = 0.41,0.80,0.94 - - elseif class == "Monk" then - red, green, blue = 0,255,150 - - elseif class == "Paladin" then - red, green, blue = 0.96,0.55,0.73 - - elseif class == "Priest" then - red, green, blue = 1.00,1.00,1.00 - - elseif class == "Rogue" then - red, green, blue = 1.00,0.96,0.41 - - elseif class == "Shaman" then - red, green, blue = 0.0,0.44,0.87 - - elseif class == "Warlock" then - red, green, blue = 0.58,0.51,0.79 - - else red, green, blue = 0.78,0.61,0.43 -- Warrior, formatted slightly different. - end - - return red, green, blue, 1 - end - - - - ", - "y": 0, - "scalex": 1, - "scaley": 1, - "use_color": true, - "colorType": "custom", - "rotate": 0, - "colorG": 1, - "alpha": 0, - "type": "custom", - "colorR": 1, - "colorB": 1, - "duration_type": "relative" -} -}, -"activeTriggerMode": 0, -"init_completed": 1, -"numTriggers": 1, -"frameStrata": 5, -"displayText": "%n", -"xOffset": 158, -"customText": "function(r1, g1, b1, a1, r2, g2, b2, a2) - -local class = UnitClass("target") -local red, green, blue = 1,1,0 - -if class == "Death Knight" then - red, green, blue = 0.77,0.12,0.23 - - elseif class == "Demon Hunter" then - red, green, blue = 0.64,0.19,0.79 - - elseif class == "Druid" then - red, green, blue = 1.00,0.49,0.04 - - elseif class == "Hunter" then - red, green, blue = 0.67,0.83,0.45 - - elseif class == "Mage" then - red, green, blue = 0.41,0.80,0.94 - - elseif class == "Monk" then - red, green, blue = 0,255,150 - - elseif class == "Paladin" then - red, green, blue = 0.96,0.55,0.73 - - elseif class == "Priest" then - red, green, blue = 1.00,1.00,1.00 - - elseif class == "Rogue" then - red, green, blue = 1.00,0.96,0.41 - - elseif class == "Shaman" then - red, green, blue = 0.0,0.44,0.87 - - elseif class == "Warlock" then - red, green, blue = 0.58,0.51,0.79 - - else red, green, blue = 0.78,0.61,0.43 -- Warrior, formatted slightly different. - end - - return red, green, blue, 1 - end - - - - ", - "load": { - "difficulty": { - "multi": [] - }, - "faction": { - "multi": [] - }, - "class": { - "single": "HUNTER", - "multi": { - "DRUID": true -} -}, -"talent": { -"multi": [] -}, -"race": { -"multi": [] -}, -"role": { -"multi": [] -}, -"use_name": false, -"use_never": false, -"pvptalent": { -"multi": [] -} -}, -"trigger": { -"unit": "target", -"use_percenthealth": false, -"unevent": "auto", -"events": "PLAYER_ENTERING_WORLD", -"use_unit": true, -"type": "status", -"custom_type": "status", -"custom_hide": "timed", -"check": "event" -}, -"selfPoint": "LEFT", -"untrigger": { -"unit": "target" -}, -"width": 53.333267211914, -"height": 17.777723312378, -"fontSize": 18, -"url": "https://wago.io/V1NFD3AxM/1", -"version": 1, -"semver": "1.0.0" -}, -{ - "yOffset": -211, - "outline": "None", - "color": [ - 0, - 0, - 0 - ], - "additional_triggers": [], - "font": "bignoodle", - "regionType": "text", - "animation": { - "main": { - "scalex": 1, - "x": 0, - "duration": "100", - "y": 0, - "colorFunc": "return function(r1, g1, b1, a1, r2, g2, b2, a2) - - local class = UnitClass("target") - local red, green, blue = 1,1,0 - - if class == "Death Knight" then - red, green, blue = 0.77,0.12,0.23 - - elseif class == "Demon Hunter" then - red, green, blue = 0.64,0.19,0.79 - - elseif class == "Druid" then - red, green, blue = 1.00,0.49,0.04 - - elseif class == "Hunter" then - red, green, blue = 0.67,0.83,0.45 - - elseif class == "Mage" then - red, green, blue = 0.41,0.80,0.94 - - elseif class == "Monk" then - red, green, blue = 0,255,150 - - elseif class == "Paladin" then - red, green, blue = 0.96,0.55,0.73 - - elseif class == "Priest" then - red, green, blue = 1.00,1.00,1.00 - - elseif class == "Rogue" then - red, green, blue = 1.00,0.96,0.41 - - elseif class == "Shaman" then - red, green, blue = 0.0,0.44,0.87 - - elseif class == "Warlock" then - red, green, blue = 0.58,0.51,0.79 - - else red, green, blue = 0.78,0.61,0.43 -- Warrior, formatted slightly different. - end - - return red, green, blue, 1 - end - - - - ", - "scaley": 1, - "duration_type": "relative", - "colorType": "custom", - "use_color": true, - "rotate": 0, - "alpha": 0, - "colorG": 1, - "colorR": 1, - "colorB": 1, - "colorA": 1 -} -}, -"activeTriggerMode": 0, -"init_completed": 1, -"numTriggers": 1, -"frameStrata": 4, -"displayText": "%n", -"xOffset": 158.5, -"customText": "function(r1, g1, b1, a1, r2, g2, b2, a2) - -local class = UnitClass("target") -local red, green, blue = 1,1,0 - -if class == "Death Knight" then - red, green, blue = 0.77,0.12,0.23 - - elseif class == "Demon Hunter" then - red, green, blue = 0.64,0.19,0.79 - - elseif class == "Druid" then - red, green, blue = 1.00,0.49,0.04 - - elseif class == "Hunter" then - red, green, blue = 0.67,0.83,0.45 - - elseif class == "Mage" then - red, green, blue = 0.41,0.80,0.94 - - elseif class == "Monk" then - red, green, blue = 0,255,150 - - elseif class == "Paladin" then - red, green, blue = 0.96,0.55,0.73 - - elseif class == "Priest" then - red, green, blue = 1.00,1.00,1.00 - - elseif class == "Rogue" then - red, green, blue = 1.00,0.96,0.41 - - elseif class == "Shaman" then - red, green, blue = 0.0,0.44,0.87 - - elseif class == "Warlock" then - red, green, blue = 0.58,0.51,0.79 - - else red, green, blue = 0.78,0.61,0.43 -- Warrior, formatted slightly different. - end - - return red, green, blue, 1 - end - - - - ", - "id": "Target Name Shadow", - "load": { - "use_never": false, - "faction": { - "multi": [] - }, - "class": { - "single": "HUNTER", - "multi": { - "DRUID": true -} -}, -"talent": { -"multi": [] -}, -"race": { -"multi": [] -}, -"role": { -"multi": [] -}, -"use_name": false, -"difficulty": { -"multi": [] -}, -"pvptalent": { -"multi": [] -} -}, -"trigger": { -"unit": "target", -"use_percenthealth": false, -"unevent": "auto", -"events": "PLAYER_ENTERING_WORLD", -"use_unit": true, -"type": "status", -"custom_type": "status", -"custom_hide": "timed", -"check": "event" -}, -"width": 53.333358764648, -"untrigger": { -"unit": "target" -}, -"selfPoint": "LEFT", -"height": 17.777723312378, -"fontSize": 18, -"url": "https://wago.io/V1NFD3AxM/1", -"version": 1, -"semver": "1.0.0" -}, -{ - "yOffset": -210, - "outline": "None", - "id": "Target HP", - "additional_triggers": [], - "font": "bignoodle", - "regionType": "text", - "activeTriggerMode": 0, - "init_completed": 1, - "numTriggers": 1, - "frameStrata": 5, - "displayText": "%c", - "xOffset": -151, - "customText": "function() - if UnitIsDead("target") then - return "0" - end - - local health = UnitHealth("target") - if health >= 1000000 then - health = string.format("%.1fm", health / 1000000) -- 2.4m - elseif health >= 10000 then - health = string.format("%dk", health / 1000) -- 24k, 240k - elseif health >= 1000 then - health = string.format("%.1fk", health / 1000) -- 2.4k - end - - if UnitIsDead("target") then - return "0" - end - - local targethp = string.format("%.f", (UnitHealth("target")/UnitHealthMax("target"))*100) - - return string.format("%s | %s", targethp, health) - end", - "load": { - "difficulty": { - "multi": [] - }, - "faction": { - "multi": [] - }, - "class": { - "single": "HUNTER", - "multi": { - "DRUID": true - } - }, - "talent": { - "multi": [] - }, - "race": { - "multi": [] - }, - "role": { - "multi": [] - }, - "use_name": false, - "use_never": false, - "pvptalent": { - "multi": [] - } - }, - "trigger": { - "unit": "target", - "use_percenthealth": false, - "unevent": "auto", - "events": "PLAYER_ENTERING_WORLD", - "use_unit": true, - "type": "status", - "custom_type": "status", - "custom_hide": "timed", - "check": "event" - }, - "selfPoint": "LEFT", - "untrigger": { - "unit": "target" - }, - "width": 15.316210746765, - "height": 9.8461561203003, - "fontSize": 10, - "url": "https://wago.io/V1NFD3AxM/1", - "version": 1, - "semver": "1.0.0" - }, - { - "yOffset": -211, - "outline": "None", - "id": "Target HP Shadow", - "additional_triggers": [], - "font": "bignoodle", - "regionType": "text", - "activeTriggerMode": 0, - "init_completed": 1, - "numTriggers": 1, - "frameStrata": 4, - "displayText": "%c", - "xOffset": -150, - "customText": "function() - if UnitIsDead("target") then - return "0" - end - - local health = UnitHealth("target") - if health >= 1000000 then - health = string.format("%.1fm", health / 1000000) -- 2.4m - elseif health >= 10000 then - health = string.format("%dk", health / 1000) -- 24k, 240k - elseif health >= 1000 then - health = string.format("%.1fk", health / 1000) -- 2.4k - end - - if UnitIsDead("target") then - return "0" - end - - local targethp = string.format("%.f", (UnitHealth("target")/UnitHealthMax("target"))*100) - - return string.format("%s | %s", targethp, health) - end", - "trigger": { - "unit": "target", - "use_percenthealth": false, - "unevent": "auto", - "events": "PLAYER_ENTERING_WORLD", - "use_unit": true, - "type": "status", - "custom_type": "status", - "custom_hide": "timed", - "check": "event" - }, - "load": { - "use_never": false, - "faction": { - "multi": [] - }, - "class": { - "single": "HUNTER", - "multi": { - "DRUID": true - } - }, - "talent": { - "multi": [] - }, - "race": { - "multi": [] - }, - "role": { - "multi": [] - }, - "use_name": false, - "difficulty": { - "multi": [] - }, - "pvptalent": { - "multi": [] - } - }, - "width": 15.316210746765, - "color": [ - 0, - 0, - 0 - ], - "untrigger": { - "unit": "target" - }, - "selfPoint": "LEFT", - "height": 9.8461561203003, - "fontSize": 10, - "url": "https://wago.io/V1NFD3AxM/1", - "version": 1, - "semver": "1.0.0" - }, - { - "yOffset": -210, - "outline": "None", - "id": "Target MP", - "additional_triggers": [], - "font": "bignoodle", - "regionType": "text", - "activeTriggerMode": 0, - "init_completed": 1, - "numTriggers": 1, - "frameStrata": 5, - "displayText": "%c", - "xOffset": -318, - "customText": "function() - if UnitIsDead("target") then - return "0" - end - - local power = UnitPower("target") - if power >= 1000000 then - power = string.format("%.1fm", power / 1000000) -- 2.4m - elseif power >= 10000 then - power = string.format("%dk", power / 1000) -- 24k, 240k - elseif power >= 1000 then - power = string.format("%.1fk", power / 1000) -- 2.4k - end - - if UnitIsDead("target") then - return "0" - end - - local powermax = UnitPowerMax("target") - if powermax >= 1000000 then - powermax = string.format("%.1fm", powermax / 1000000) -- 2.4m - elseif powermax >= 10000 then - powermax = string.format("%dk", powermax / 1000) -- 24k, 240k - elseif powermax >= 1000 then - powermax = string.format("%.1fk", powermax / 1000) -- 2.4k - end - return string.format("%s | %s", powermax, power) - end", - "load": { - "use_never": false, - "faction": { - "multi": [] - }, - "class": { - "single": "HUNTER", - "multi": { - "DRUID": true - } - }, - "talent": { - "multi": [] - }, - "race": { - "multi": [] - }, - "role": { - "multi": [] - }, - "use_name": false, - "difficulty": { - "multi": [] - }, - "pvptalent": { - "multi": [] - } - }, - "trigger": { - "unit": "target", - "use_percenthealth": false, - "unevent": "auto", - "custom_hide": "timed", - "events": "PLAYER_ENTERING_WORLD", - "event": "Power", - "use_unit": true, - "custom_type": "status", - "type": "status", - "check": "event" - }, - "width": 13.675245285034, - "untrigger": { - "unit": "target" - }, - "selfPoint": "LEFT", - "height": 9.8461561203003, - "fontSize": 10, - "url": "https://wago.io/V1NFD3AxM/1", - "version": 1, - "semver": "1.0.0" - }, - { - "yOffset": -211, - "outline": "None", - "color": [ - 0, - 0, - 0 - ], - "additional_triggers": [], - "font": "bignoodle", - "regionType": "text", - "activeTriggerMode": 0, - "init_completed": 1, - "numTriggers": 1, - "frameStrata": 4, - "displayText": "%c", - "xOffset": -317, - "customText": "function() - if UnitIsDead("target") then - return "0" - end - - local power = UnitPower("target") - if power >= 1000000 then - power = string.format("%.1fm", power / 1000000) -- 2.4m - elseif power >= 10000 then - power = string.format("%dk", power / 1000) -- 24k, 240k - elseif power >= 1000 then - power = string.format("%.1fk", power / 1000) -- 2.4k - end - - if UnitIsDead("target") then - return "0" - end - - local powermax = UnitPowerMax("target") - if powermax >= 1000000 then - powermax = string.format("%.1fm", powermax / 1000000) -- 2.4m - elseif powermax >= 10000 then - powermax = string.format("%dk", powermax / 1000) -- 24k, 240k - elseif powermax >= 1000 then - powermax = string.format("%.1fk", powermax / 1000) -- 2.4k - end - return string.format("%s | %s", powermax, power) - end", - "id": "Target MP Shadow", - "load": { - "use_never": false, - "faction": { - "multi": [] - }, - "class": { - "single": "HUNTER", - "multi": { - "DRUID": true - } - }, - "talent": { - "multi": [] - }, - "race": { - "multi": [] - }, - "role": { - "multi": [] - }, - "use_name": false, - "difficulty": { - "multi": [] - }, - "pvptalent": { - "multi": [] - } - }, - "trigger": { - "unit": "target", - "use_percenthealth": false, - "unevent": "auto", - "custom_hide": "timed", - "events": "PLAYER_ENTERING_WORLD", - "event": "Power", - "type": "status", - "custom_type": "status", - "use_unit": true, - "check": "event" - }, - "width": 13.675245285034, - "untrigger": { - "unit": "target" - }, - "selfPoint": "LEFT", - "height": 9.8461561203003, - "fontSize": 10, - "url": "https://wago.io/V1NFD3AxM/1", - "version": 1, - "semver": "1.0.0" - }, - { - "yOffset": -210, - "additional_triggers": [], - "regionType": "aurabar", - "activeTriggerMode": 0, - "init_completed": 1, - "texture": "Kait", - "xOffset": -6, - "borderEdge": "1 Pixel", - "height": 12, - "borderSize": 2, - "orientation": "HORIZONTAL_INVERSE", - "id": "Target Health Bar", - "backdropColor": [ - 0.07843137254902, - 0.07843137254902, - 0.07843137254902, - 1 - ], - "backgroundColor": [ - 0.07843137254902, - 0.07843137254902, - 0.07843137254902, - 1 - ], - "barColor": [ - 0.28235294117647, - 0.28235294117647, - 0.28235294117647 - ], - "fontFlags": "OUTLINE", - "borderBackdrop": "Solid", - "borderOffset": 2, - "numTriggers": 1, - "frameStrata": 3, - "icon": false, - "border": true, - "borderColor": [ - 0, - 0, - 0, - 1 - ], - "timer": false, - "text": false, - "borderInset": 2, - "load": { - "use_never": false, - "faction": { - "multi": [] - }, - "class": { - "single": "HUNTER", - "multi": { - "ROGUE": true, - "MONK": true, - "PRIEST": true, - "DEATHKNIGHT": true, - "WARLOCK": true, - "HUNTER": true, - "MAGE": true, - "DRUID": true, - "SHAMAN": true, - "PALADIN": true -} -}, -"talent": { -"multi": [] -}, -"race": { -"multi": [] -}, -"role": { -"multi": [] -}, -"use_name": false, -"difficulty": { -"multi": [] -}, -"name": "Kaitain", -"pvptalent": { -"multi": [] -} -}, -"trigger": { -"unevent": "auto", -"use_spellName": true, -"unit": "target", -"use_unit": true, -"custom_hide": "timed", -"type": "status", -"spellName": 61304 -}, -"stacks": false, -"untrigger": { -"unit": "target", -"spellName": 61304 -}, -"sparkColor": [ -null, -null, -null, -0 -], -"icon_side": "LEFT", -"width": 300, -"url": "https://wago.io/V1NFD3AxM/1", -"version": 1, -"semver": "1.0.0" -}, -{ - "yOffset": -210, - "borderSize": 2, - "id": "Target Health Shadow", - "additional_triggers": [], - "backdropColor": [ - 0.07843137254902, - 0.07843137254902, - 0.07843137254902, - 1 - ], - "regionType": "aurabar", - "backgroundColor": [ - 0.07843137254902, - 0.07843137254902, - 0.07843137254902 - ], - "trigger": { - "spellName": 61304, - "custom_hide": "timed", - "use_spellName": true, - "type": "status", - "unit": "target", - "use_unit": true, - "unevent": "auto" - }, - "fontFlags": "OUTLINE", - "borderBackdrop": "Solid", - "width": 308, - "borderOffset": 2, - "barColor": [ - 0.28235294117647, - 0.28235294117647, - null, - 0 - ], - "numTriggers": 1, - "texture": "Kait", - "frameStrata": 2, - "icon": false, - "text": false, - "xOffset": -6, - "borderInset": 2, - "timer": false, - "stacks": false, - "borderColor": [ - 0, - 0, - 0, - 1 - ], - "load": { - "use_never": false, - "faction": { - "multi": [] - }, - "class": { - "single": "HUNTER", - "multi": { - "MAGE": true, - "MONK": true, - "PRIEST": true, - "DEATHKNIGHT": true, - "WARLOCK": true, - "HUNTER": true, - "ROGUE": true, - "DRUID": true, - "SHAMAN": true, - "PALADIN": true -} -}, -"talent": { -"multi": [] -}, -"race": { -"multi": [] -}, -"role": { -"multi": [] -}, -"use_name": false, -"difficulty": { -"multi": [] -}, -"name": "Kaitain", -"pvptalent": { -"multi": [] -} -}, -"borderEdge": "1 Pixel", -"init_completed": 1, -"untrigger": { -"unit": "target", -"spellName": 61304 -}, -"sparkColor": [ -null, -null, -null, -0 -], -"height": 20, -"activeTriggerMode": 0, -"url": "https://wago.io/V1NFD3AxM/1", -"version": 1, -"semver": "1.0.0" -}, -{ - "yOffset": -210, - "additional_triggers": [], - "regionType": "aurabar", - "animation": { - "main": { - "scalex": 1, - "x": 0, - "duration": "100", - "colorA": 1, - "y": 0, - "colorFunc": "return function(r1, g1, b1, a1, r2, g2, b2, a2) - - local class = UnitClass("target") - local red, green, blue = 1,1,0 - - if class == "Death Knight" then - red, green, blue = 0.77,0.12,0.23 - - elseif class == "Demon Hunter" then - red, green, blue = 0.64,0.19,0.79 - - elseif class == "Druid" then - red, green, blue = 1.00,0.49,0.04 - - elseif class == "Hunter" then - red, green, blue = 0.67,0.83,0.45 - - elseif class == "Mage" then - red, green, blue = 0.41,0.80,0.94 - - elseif class == "Monk" then - red, green, blue = 0,255,150 - - elseif class == "Paladin" then - red, green, blue = 0.96,0.55,0.73 - - elseif class == "Priest" then - red, green, blue = 1.00,1.00,1.00 - - elseif class == "Rogue" then - red, green, blue = 1.00,0.96,0.41 - - elseif class == "Shaman" then - red, green, blue = 0.0,0.44,0.87 - - elseif class == "Warlock" then - red, green, blue = 0.58,0.51,0.79 - - else red, green, blue = 0.78,0.61,0.43 -- Warrior, formatted slightly different. - end - - return red, green, blue, 1 - end - - - - - ", - "scaley": 1, - "duration_type": "relative", - "colorType": "custom", - "rotate": 0, - "colorG": 1, - "alpha": 0, - "type": "custom", - "colorR": 1, - "colorB": 1, - "use_color": true -} -}, -"trigger": { -"unevent": "auto", -"use_unit": true, -"unit": "target", -"event": "Power", -"type": "status", -"custom_hide": "timed", -"use_spellName": true, -"spellName": 61304 -}, -"init_completed": 1, -"texture": "Kait", -"borderColor": [ -0, -0, -0, -1 -], -"borderEdge": "1 Pixel", -"height": 12, -"borderSize": 2, -"orientation": "HORIZONTAL_INVERSE", -"id": "Target Power Bar", -"backdropColor": [ -0.07843137254902, -0.07843137254902, -0.07843137254902, -1 -], -"backgroundColor": [ -0.07843137254902, -0.07843137254902, -0.07843137254902, -1 -], -"barColor": [ -0.28235294117647, -0.28235294117647, -0.28235294117647 -], -"fontFlags": "OUTLINE", -"borderBackdrop": "Solid", -"borderOffset": 2, -"numTriggers": 1, -"frameStrata": 3, -"icon": false, -"activeTriggerMode": 0, -"xOffset": -248, -"timer": false, -"stacks": false, -"borderInset": 2, -"load": { -"use_never": false, -"faction": { -"multi": [] -}, -"class": { -"single": "HUNTER", -"multi": { -"MAGE": true, -"MONK": true, -"PRIEST": true, -"DEATHKNIGHT": true, -"WARLOCK": true, -"HUNTER": true, -"ROGUE": true, -"DRUID": true, -"SHAMAN": true, -"PALADIN": true -} -}, -"talent": { -"multi": [] -}, -"race": { -"multi": [] -}, -"role": { -"multi": [] -}, -"use_name": false, -"difficulty": { -"multi": [] -}, -"name": "Kaitain", -"pvptalent": { -"multi": [] -} -}, -"text": false, -"width": 150, -"untrigger": { -"unit": "target", -"spellName": 61304 -}, -"sparkColor": [ -null, -null, -null, -0 -], -"icon_side": "LEFT", -"border": true, -"url": "https://wago.io/V1NFD3AxM/1", -"version": 1, -"semver": "1.0.0" -}, -{ - "yOffset": -210, - "borderSize": 2, - "id": "Target Power Bar Shadow", - "additional_triggers": [], - "init_completed": 1, - "backdropColor": [ - 0.07843137254902, - 0.07843137254902, - 0.07843137254902, - 1 - ], - "regionType": "aurabar", - "animation": { - "main": { - "scalex": 1, - "x": 0, - "duration": "100", - "y": 0, - "colorFunc": "return function(r1, g1, b1, a1, r2, g2, b2, a2) - - local class = UnitClass("target") - local red, green, blue = 1,1,0 - - if class == "Death Knight" then - red, green, blue = 0.77,0.12,0.23 - - elseif class == "Demon Hunter" then - red, green, blue = 0.64,0.19,0.79 - - elseif class == "Druid" then - red, green, blue = 1.00,0.49,0.04 - - elseif class == "Hunter" then - red, green, blue = 0.67,0.83,0.45 - - elseif class == "Mage" then - red, green, blue = 0.41,0.80,0.94 - - elseif class == "Monk" then - red, green, blue = 0,255,150 - - elseif class == "Paladin" then - red, green, blue = 0.96,0.55,0.73 - - elseif class == "Priest" then - red, green, blue = 1.00,1.00,1.00 - - elseif class == "Rogue" then - red, green, blue = 1.00,0.96,0.41 - - elseif class == "Shaman" then - red, green, blue = 0.0,0.44,0.87 - - elseif class == "Warlock" then - red, green, blue = 0.58,0.51,0.79 - - else red, green, blue = 0.78,0.61,0.43 -- Warrior, formatted slightly different. - end - - return red, green, blue, 1 - end - - - - - ", - "scaley": 1, - "colorR": 1, - "colorType": "custom", - "duration_type": "relative", - "rotate": 0, - "alpha": 0, - "colorG": 1, - "use_color": true, - "colorB": 1, - "colorA": 1 -} -}, -"activeTriggerMode": 0, -"fontFlags": "OUTLINE", -"borderBackdrop": "Solid", -"backgroundColor": [ -0.07843137254902, -0.07843137254902, -0.07843137254902 -], -"borderOffset": 2, -"width": 158, -"numTriggers": 1, -"texture": "Kait", -"frameStrata": 2, -"icon": false, -"borderInset": 2, -"borderColor": [ -0, -0, -0, -1 -], -"borderEdge": "1 Pixel", -"timer": false, -"text": false, -"stacks": false, -"load": { -"use_never": false, -"faction": { -"multi": [] -}, -"class": { -"single": "HUNTER", -"multi": { -"MAGE": true, -"MONK": true, -"PRIEST": true, -"DEATHKNIGHT": true, -"WARLOCK": true, -"HUNTER": true, -"PALADIN": true, -"DRUID": true, -"SHAMAN": true, -"ROGUE": true -} -}, -"talent": { -"multi": [] -}, -"race": { -"multi": [] -}, -"role": { -"multi": [] -}, -"use_name": false, -"difficulty": { -"multi": [] -}, -"name": "Kaitain", -"pvptalent": { -"multi": [] -} -}, -"barColor": [ -0.28235294117647, -0.28235294117647, -0.28235294117647, -0 -], -"xOffset": -248, -"untrigger": { -"unit": "target", -"spellName": 61304 -}, -"sparkColor": [ -null, -null, -null, -0 -], -"height": 20, -"trigger": { -"spellName": 61304, -"custom_hide": "timed", -"use_spellName": true, -"event": "Power", -"type": "status", -"unit": "target", -"use_unit": true, -"unevent": "auto" -}, -"url": "https://wago.io/V1NFD3AxM/1", -"version": 1, -"semver": "1.0.0" -} -], -"d": { -"expanded": false, -"frameStrata": 3, -"version": 1, -"id": "Target Unit Frame", -"additional_triggers": [], -"regionType": "group", -"activeTriggerMode": 0, -"selfPoint": "BOTTOMLEFT", -"anchorPoint": "BOTTOM", -"url": "https://wago.io/V1NFD3AxM/1", -"load": { -"difficulty": { -"multi": [] -}, -"use_class": false, -"role": { -"multi": [] -}, -"race": { -"multi": [] -}, -"faction": { -"multi": [] -}, -"talent": { -"multi": [] -}, -"pvptalent": { -"multi": [] -} -}, -"yOffset": 680, -"numTriggers": 1, -"semver": "1.0.0" -}, -"v": 1421, -"a": [], -"wagoID": "V1NFD3AxM" +--https://wago.io/V1NFD3AxM +{ + "m": "d", + "s": "2.2.2.0", + "c": [ + { + "yOffset": -210, + "outline": "None", + "id": "Target Name", + "additional_triggers": [], + "font": "bignoodle", + "regionType": "text", + "animation": { + "main": { + "colorA": 1, + "x": 0, + "duration": "100", + "colorFunc": return function(r1, g1, b1, a1, r2, g2, b2, a2) local class = UnitClass("target") + local red, green, blue = 1,1,0 + + if class == "Death Knight" then + red, green, blue = 0.77,0.12,0.23 + + elseif class == "Demon Hunter" then + red, green, blue = 0.64,0.19,0.79 + + elseif class == "Druid" then + red, green, blue = 1.00,0.49,0.04 + + elseif class == "Hunter" then + red, green, blue = 0.67,0.83,0.45 + + elseif class == "Mage" then + red, green, blue = 0.41,0.80,0.94 + + elseif class == "Monk" then + red, green, blue = 0,255,150 + + elseif class == "Paladin" then + red, green, blue = 0.96,0.55,0.73 + + elseif class == "Priest" then + red, green, blue = 1.00,1.00,1.00 + + elseif class == "Rogue" then + red, green, blue = 1.00,0.96,0.41 + + elseif class == "Shaman" then + red, green, blue = 0.0,0.44,0.87 + + elseif class == "Warlock" then + red, green, blue = 0.58,0.51,0.79 + + else red, green, blue = 0.78,0.61,0.43 -- Warrior, formatted slightly different. + end + + return red, green, blue, 1 + end + + + + ", + "y": 0, + "scalex": 1, + "scaley": 1, + "use_color": true, + "colorType": "custom", + "rotate": 0, + "colorG": 1, + "alpha": 0, + "type": "custom", + "colorR": 1, + "colorB": 1, + "duration_type": "relative" +} +}, +"activeTriggerMode": 0, +"init_completed": 1, +"numTriggers": 1, +"frameStrata": 5, +"displayText": "%n", +"xOffset": 158, +"customText": "function(r1, g1, b1, a1, r2, g2, b2, a2) + +local class = UnitClass("target") +local red, green, blue = 1,1,0 + +if class == "Death Knight" then + red, green, blue = 0.77,0.12,0.23 + + elseif class == "Demon Hunter" then + red, green, blue = 0.64,0.19,0.79 + + elseif class == "Druid" then + red, green, blue = 1.00,0.49,0.04 + + elseif class == "Hunter" then + red, green, blue = 0.67,0.83,0.45 + + elseif class == "Mage" then + red, green, blue = 0.41,0.80,0.94 + + elseif class == "Monk" then + red, green, blue = 0,255,150 + + elseif class == "Paladin" then + red, green, blue = 0.96,0.55,0.73 + + elseif class == "Priest" then + red, green, blue = 1.00,1.00,1.00 + + elseif class == "Rogue" then + red, green, blue = 1.00,0.96,0.41 + + elseif class == "Shaman" then + red, green, blue = 0.0,0.44,0.87 + + elseif class == "Warlock" then + red, green, blue = 0.58,0.51,0.79 + + else red, green, blue = 0.78,0.61,0.43 -- Warrior, formatted slightly different. + end + + return red, green, blue, 1 + end + + + + ", + "load": { + "difficulty": { + "multi": [] + }, + "faction": { + "multi": [] + }, + "class": { + "single": "HUNTER", + "multi": { + "DRUID": true +} +}, +"talent": { +"multi": [] +}, +"race": { +"multi": [] +}, +"role": { +"multi": [] +}, +"use_name": false, +"use_never": false, +"pvptalent": { +"multi": [] +} +}, +"trigger": { +"unit": "target", +"use_percenthealth": false, +"unevent": "auto", +"events": "PLAYER_ENTERING_WORLD", +"use_unit": true, +"type": "status", +"custom_type": "status", +"custom_hide": "timed", +"check": "event" +}, +"selfPoint": "LEFT", +"untrigger": { +"unit": "target" +}, +"width": 53.333267211914, +"height": 17.777723312378, +"fontSize": 18, +"url": "https://wago.io/V1NFD3AxM/1", +"version": 1, +"semver": "1.0.0" +}, +{ + "yOffset": -211, + "outline": "None", + "color": [ + 0, + 0, + 0 + ], + "additional_triggers": [], + "font": "bignoodle", + "regionType": "text", + "animation": { + "main": { + "scalex": 1, + "x": 0, + "duration": "100", + "y": 0, + "colorFunc": "return function(r1, g1, b1, a1, r2, g2, b2, a2) + + local class = UnitClass("target") + local red, green, blue = 1,1,0 + + if class == "Death Knight" then + red, green, blue = 0.77,0.12,0.23 + + elseif class == "Demon Hunter" then + red, green, blue = 0.64,0.19,0.79 + + elseif class == "Druid" then + red, green, blue = 1.00,0.49,0.04 + + elseif class == "Hunter" then + red, green, blue = 0.67,0.83,0.45 + + elseif class == "Mage" then + red, green, blue = 0.41,0.80,0.94 + + elseif class == "Monk" then + red, green, blue = 0,255,150 + + elseif class == "Paladin" then + red, green, blue = 0.96,0.55,0.73 + + elseif class == "Priest" then + red, green, blue = 1.00,1.00,1.00 + + elseif class == "Rogue" then + red, green, blue = 1.00,0.96,0.41 + + elseif class == "Shaman" then + red, green, blue = 0.0,0.44,0.87 + + elseif class == "Warlock" then + red, green, blue = 0.58,0.51,0.79 + + else red, green, blue = 0.78,0.61,0.43 -- Warrior, formatted slightly different. + end + + return red, green, blue, 1 + end + + + + ", + "scaley": 1, + "duration_type": "relative", + "colorType": "custom", + "use_color": true, + "rotate": 0, + "alpha": 0, + "colorG": 1, + "colorR": 1, + "colorB": 1, + "colorA": 1 +} +}, +"activeTriggerMode": 0, +"init_completed": 1, +"numTriggers": 1, +"frameStrata": 4, +"displayText": "%n", +"xOffset": 158.5, +"customText": "function(r1, g1, b1, a1, r2, g2, b2, a2) + +local class = UnitClass("target") +local red, green, blue = 1,1,0 + +if class == "Death Knight" then + red, green, blue = 0.77,0.12,0.23 + + elseif class == "Demon Hunter" then + red, green, blue = 0.64,0.19,0.79 + + elseif class == "Druid" then + red, green, blue = 1.00,0.49,0.04 + + elseif class == "Hunter" then + red, green, blue = 0.67,0.83,0.45 + + elseif class == "Mage" then + red, green, blue = 0.41,0.80,0.94 + + elseif class == "Monk" then + red, green, blue = 0,255,150 + + elseif class == "Paladin" then + red, green, blue = 0.96,0.55,0.73 + + elseif class == "Priest" then + red, green, blue = 1.00,1.00,1.00 + + elseif class == "Rogue" then + red, green, blue = 1.00,0.96,0.41 + + elseif class == "Shaman" then + red, green, blue = 0.0,0.44,0.87 + + elseif class == "Warlock" then + red, green, blue = 0.58,0.51,0.79 + + else red, green, blue = 0.78,0.61,0.43 -- Warrior, formatted slightly different. + end + + return red, green, blue, 1 + end + + + + ", + "id": "Target Name Shadow", + "load": { + "use_never": false, + "faction": { + "multi": [] + }, + "class": { + "single": "HUNTER", + "multi": { + "DRUID": true +} +}, +"talent": { +"multi": [] +}, +"race": { +"multi": [] +}, +"role": { +"multi": [] +}, +"use_name": false, +"difficulty": { +"multi": [] +}, +"pvptalent": { +"multi": [] +} +}, +"trigger": { +"unit": "target", +"use_percenthealth": false, +"unevent": "auto", +"events": "PLAYER_ENTERING_WORLD", +"use_unit": true, +"type": "status", +"custom_type": "status", +"custom_hide": "timed", +"check": "event" +}, +"width": 53.333358764648, +"untrigger": { +"unit": "target" +}, +"selfPoint": "LEFT", +"height": 17.777723312378, +"fontSize": 18, +"url": "https://wago.io/V1NFD3AxM/1", +"version": 1, +"semver": "1.0.0" +}, +{ + "yOffset": -210, + "outline": "None", + "id": "Target HP", + "additional_triggers": [], + "font": "bignoodle", + "regionType": "text", + "activeTriggerMode": 0, + "init_completed": 1, + "numTriggers": 1, + "frameStrata": 5, + "displayText": "%c", + "xOffset": -151, + "customText": "function() + if UnitIsDead("target") then + return "0" + end + + local health = UnitHealth("target") + if health >= 1000000 then + health = string.format("%.1fm", health / 1000000) -- 2.4m + elseif health >= 10000 then + health = string.format("%dk", health / 1000) -- 24k, 240k + elseif health >= 1000 then + health = string.format("%.1fk", health / 1000) -- 2.4k + end + + if UnitIsDead("target") then + return "0" + end + + local targethp = string.format("%.f", (UnitHealth("target")/UnitHealthMax("target"))*100) + + return string.format("%s | %s", targethp, health) + end", + "load": { + "difficulty": { + "multi": [] + }, + "faction": { + "multi": [] + }, + "class": { + "single": "HUNTER", + "multi": { + "DRUID": true + } + }, + "talent": { + "multi": [] + }, + "race": { + "multi": [] + }, + "role": { + "multi": [] + }, + "use_name": false, + "use_never": false, + "pvptalent": { + "multi": [] + } + }, + "trigger": { + "unit": "target", + "use_percenthealth": false, + "unevent": "auto", + "events": "PLAYER_ENTERING_WORLD", + "use_unit": true, + "type": "status", + "custom_type": "status", + "custom_hide": "timed", + "check": "event" + }, + "selfPoint": "LEFT", + "untrigger": { + "unit": "target" + }, + "width": 15.316210746765, + "height": 9.8461561203003, + "fontSize": 10, + "url": "https://wago.io/V1NFD3AxM/1", + "version": 1, + "semver": "1.0.0" + }, + { + "yOffset": -211, + "outline": "None", + "id": "Target HP Shadow", + "additional_triggers": [], + "font": "bignoodle", + "regionType": "text", + "activeTriggerMode": 0, + "init_completed": 1, + "numTriggers": 1, + "frameStrata": 4, + "displayText": "%c", + "xOffset": -150, + "customText": "function() + if UnitIsDead("target") then + return "0" + end + + local health = UnitHealth("target") + if health >= 1000000 then + health = string.format("%.1fm", health / 1000000) -- 2.4m + elseif health >= 10000 then + health = string.format("%dk", health / 1000) -- 24k, 240k + elseif health >= 1000 then + health = string.format("%.1fk", health / 1000) -- 2.4k + end + + if UnitIsDead("target") then + return "0" + end + + local targethp = string.format("%.f", (UnitHealth("target")/UnitHealthMax("target"))*100) + + return string.format("%s | %s", targethp, health) + end", + "trigger": { + "unit": "target", + "use_percenthealth": false, + "unevent": "auto", + "events": "PLAYER_ENTERING_WORLD", + "use_unit": true, + "type": "status", + "custom_type": "status", + "custom_hide": "timed", + "check": "event" + }, + "load": { + "use_never": false, + "faction": { + "multi": [] + }, + "class": { + "single": "HUNTER", + "multi": { + "DRUID": true + } + }, + "talent": { + "multi": [] + }, + "race": { + "multi": [] + }, + "role": { + "multi": [] + }, + "use_name": false, + "difficulty": { + "multi": [] + }, + "pvptalent": { + "multi": [] + } + }, + "width": 15.316210746765, + "color": [ + 0, + 0, + 0 + ], + "untrigger": { + "unit": "target" + }, + "selfPoint": "LEFT", + "height": 9.8461561203003, + "fontSize": 10, + "url": "https://wago.io/V1NFD3AxM/1", + "version": 1, + "semver": "1.0.0" + }, + { + "yOffset": -210, + "outline": "None", + "id": "Target MP", + "additional_triggers": [], + "font": "bignoodle", + "regionType": "text", + "activeTriggerMode": 0, + "init_completed": 1, + "numTriggers": 1, + "frameStrata": 5, + "displayText": "%c", + "xOffset": -318, + "customText": "function() + if UnitIsDead("target") then + return "0" + end + + local power = UnitPower("target") + if power >= 1000000 then + power = string.format("%.1fm", power / 1000000) -- 2.4m + elseif power >= 10000 then + power = string.format("%dk", power / 1000) -- 24k, 240k + elseif power >= 1000 then + power = string.format("%.1fk", power / 1000) -- 2.4k + end + + if UnitIsDead("target") then + return "0" + end + + local powermax = UnitPowerMax("target") + if powermax >= 1000000 then + powermax = string.format("%.1fm", powermax / 1000000) -- 2.4m + elseif powermax >= 10000 then + powermax = string.format("%dk", powermax / 1000) -- 24k, 240k + elseif powermax >= 1000 then + powermax = string.format("%.1fk", powermax / 1000) -- 2.4k + end + return string.format("%s | %s", powermax, power) + end", + "load": { + "use_never": false, + "faction": { + "multi": [] + }, + "class": { + "single": "HUNTER", + "multi": { + "DRUID": true + } + }, + "talent": { + "multi": [] + }, + "race": { + "multi": [] + }, + "role": { + "multi": [] + }, + "use_name": false, + "difficulty": { + "multi": [] + }, + "pvptalent": { + "multi": [] + } + }, + "trigger": { + "unit": "target", + "use_percenthealth": false, + "unevent": "auto", + "custom_hide": "timed", + "events": "PLAYER_ENTERING_WORLD", + "event": "Power", + "use_unit": true, + "custom_type": "status", + "type": "status", + "check": "event" + }, + "width": 13.675245285034, + "untrigger": { + "unit": "target" + }, + "selfPoint": "LEFT", + "height": 9.8461561203003, + "fontSize": 10, + "url": "https://wago.io/V1NFD3AxM/1", + "version": 1, + "semver": "1.0.0" + }, + { + "yOffset": -211, + "outline": "None", + "color": [ + 0, + 0, + 0 + ], + "additional_triggers": [], + "font": "bignoodle", + "regionType": "text", + "activeTriggerMode": 0, + "init_completed": 1, + "numTriggers": 1, + "frameStrata": 4, + "displayText": "%c", + "xOffset": -317, + "customText": "function() + if UnitIsDead("target") then + return "0" + end + + local power = UnitPower("target") + if power >= 1000000 then + power = string.format("%.1fm", power / 1000000) -- 2.4m + elseif power >= 10000 then + power = string.format("%dk", power / 1000) -- 24k, 240k + elseif power >= 1000 then + power = string.format("%.1fk", power / 1000) -- 2.4k + end + + if UnitIsDead("target") then + return "0" + end + + local powermax = UnitPowerMax("target") + if powermax >= 1000000 then + powermax = string.format("%.1fm", powermax / 1000000) -- 2.4m + elseif powermax >= 10000 then + powermax = string.format("%dk", powermax / 1000) -- 24k, 240k + elseif powermax >= 1000 then + powermax = string.format("%.1fk", powermax / 1000) -- 2.4k + end + return string.format("%s | %s", powermax, power) + end", + "id": "Target MP Shadow", + "load": { + "use_never": false, + "faction": { + "multi": [] + }, + "class": { + "single": "HUNTER", + "multi": { + "DRUID": true + } + }, + "talent": { + "multi": [] + }, + "race": { + "multi": [] + }, + "role": { + "multi": [] + }, + "use_name": false, + "difficulty": { + "multi": [] + }, + "pvptalent": { + "multi": [] + } + }, + "trigger": { + "unit": "target", + "use_percenthealth": false, + "unevent": "auto", + "custom_hide": "timed", + "events": "PLAYER_ENTERING_WORLD", + "event": "Power", + "type": "status", + "custom_type": "status", + "use_unit": true, + "check": "event" + }, + "width": 13.675245285034, + "untrigger": { + "unit": "target" + }, + "selfPoint": "LEFT", + "height": 9.8461561203003, + "fontSize": 10, + "url": "https://wago.io/V1NFD3AxM/1", + "version": 1, + "semver": "1.0.0" + }, + { + "yOffset": -210, + "additional_triggers": [], + "regionType": "aurabar", + "activeTriggerMode": 0, + "init_completed": 1, + "texture": "Kait", + "xOffset": -6, + "borderEdge": "1 Pixel", + "height": 12, + "borderSize": 2, + "orientation": "HORIZONTAL_INVERSE", + "id": "Target Health Bar", + "backdropColor": [ + 0.07843137254902, + 0.07843137254902, + 0.07843137254902, + 1 + ], + "backgroundColor": [ + 0.07843137254902, + 0.07843137254902, + 0.07843137254902, + 1 + ], + "barColor": [ + 0.28235294117647, + 0.28235294117647, + 0.28235294117647 + ], + "fontFlags": "OUTLINE", + "borderBackdrop": "Solid", + "borderOffset": 2, + "numTriggers": 1, + "frameStrata": 3, + "icon": false, + "border": true, + "borderColor": [ + 0, + 0, + 0, + 1 + ], + "timer": false, + "text": false, + "borderInset": 2, + "load": { + "use_never": false, + "faction": { + "multi": [] + }, + "class": { + "single": "HUNTER", + "multi": { + "ROGUE": true, + "MONK": true, + "PRIEST": true, + "DEATHKNIGHT": true, + "WARLOCK": true, + "HUNTER": true, + "MAGE": true, + "DRUID": true, + "SHAMAN": true, + "PALADIN": true +} +}, +"talent": { +"multi": [] +}, +"race": { +"multi": [] +}, +"role": { +"multi": [] +}, +"use_name": false, +"difficulty": { +"multi": [] +}, +"name": "Kaitain", +"pvptalent": { +"multi": [] +} +}, +"trigger": { +"unevent": "auto", +"use_spellName": true, +"unit": "target", +"use_unit": true, +"custom_hide": "timed", +"type": "status", +"spellName": 61304 +}, +"stacks": false, +"untrigger": { +"unit": "target", +"spellName": 61304 +}, +"sparkColor": [ +null, +null, +null, +0 +], +"icon_side": "LEFT", +"width": 300, +"url": "https://wago.io/V1NFD3AxM/1", +"version": 1, +"semver": "1.0.0" +}, +{ + "yOffset": -210, + "borderSize": 2, + "id": "Target Health Shadow", + "additional_triggers": [], + "backdropColor": [ + 0.07843137254902, + 0.07843137254902, + 0.07843137254902, + 1 + ], + "regionType": "aurabar", + "backgroundColor": [ + 0.07843137254902, + 0.07843137254902, + 0.07843137254902 + ], + "trigger": { + "spellName": 61304, + "custom_hide": "timed", + "use_spellName": true, + "type": "status", + "unit": "target", + "use_unit": true, + "unevent": "auto" + }, + "fontFlags": "OUTLINE", + "borderBackdrop": "Solid", + "width": 308, + "borderOffset": 2, + "barColor": [ + 0.28235294117647, + 0.28235294117647, + null, + 0 + ], + "numTriggers": 1, + "texture": "Kait", + "frameStrata": 2, + "icon": false, + "text": false, + "xOffset": -6, + "borderInset": 2, + "timer": false, + "stacks": false, + "borderColor": [ + 0, + 0, + 0, + 1 + ], + "load": { + "use_never": false, + "faction": { + "multi": [] + }, + "class": { + "single": "HUNTER", + "multi": { + "MAGE": true, + "MONK": true, + "PRIEST": true, + "DEATHKNIGHT": true, + "WARLOCK": true, + "HUNTER": true, + "ROGUE": true, + "DRUID": true, + "SHAMAN": true, + "PALADIN": true +} +}, +"talent": { +"multi": [] +}, +"race": { +"multi": [] +}, +"role": { +"multi": [] +}, +"use_name": false, +"difficulty": { +"multi": [] +}, +"name": "Kaitain", +"pvptalent": { +"multi": [] +} +}, +"borderEdge": "1 Pixel", +"init_completed": 1, +"untrigger": { +"unit": "target", +"spellName": 61304 +}, +"sparkColor": [ +null, +null, +null, +0 +], +"height": 20, +"activeTriggerMode": 0, +"url": "https://wago.io/V1NFD3AxM/1", +"version": 1, +"semver": "1.0.0" +}, +{ + "yOffset": -210, + "additional_triggers": [], + "regionType": "aurabar", + "animation": { + "main": { + "scalex": 1, + "x": 0, + "duration": "100", + "colorA": 1, + "y": 0, + "colorFunc": "return function(r1, g1, b1, a1, r2, g2, b2, a2) + + local class = UnitClass("target") + local red, green, blue = 1,1,0 + + if class == "Death Knight" then + red, green, blue = 0.77,0.12,0.23 + + elseif class == "Demon Hunter" then + red, green, blue = 0.64,0.19,0.79 + + elseif class == "Druid" then + red, green, blue = 1.00,0.49,0.04 + + elseif class == "Hunter" then + red, green, blue = 0.67,0.83,0.45 + + elseif class == "Mage" then + red, green, blue = 0.41,0.80,0.94 + + elseif class == "Monk" then + red, green, blue = 0,255,150 + + elseif class == "Paladin" then + red, green, blue = 0.96,0.55,0.73 + + elseif class == "Priest" then + red, green, blue = 1.00,1.00,1.00 + + elseif class == "Rogue" then + red, green, blue = 1.00,0.96,0.41 + + elseif class == "Shaman" then + red, green, blue = 0.0,0.44,0.87 + + elseif class == "Warlock" then + red, green, blue = 0.58,0.51,0.79 + + else red, green, blue = 0.78,0.61,0.43 -- Warrior, formatted slightly different. + end + + return red, green, blue, 1 + end + + + + + ", + "scaley": 1, + "duration_type": "relative", + "colorType": "custom", + "rotate": 0, + "colorG": 1, + "alpha": 0, + "type": "custom", + "colorR": 1, + "colorB": 1, + "use_color": true +} +}, +"trigger": { +"unevent": "auto", +"use_unit": true, +"unit": "target", +"event": "Power", +"type": "status", +"custom_hide": "timed", +"use_spellName": true, +"spellName": 61304 +}, +"init_completed": 1, +"texture": "Kait", +"borderColor": [ +0, +0, +0, +1 +], +"borderEdge": "1 Pixel", +"height": 12, +"borderSize": 2, +"orientation": "HORIZONTAL_INVERSE", +"id": "Target Power Bar", +"backdropColor": [ +0.07843137254902, +0.07843137254902, +0.07843137254902, +1 +], +"backgroundColor": [ +0.07843137254902, +0.07843137254902, +0.07843137254902, +1 +], +"barColor": [ +0.28235294117647, +0.28235294117647, +0.28235294117647 +], +"fontFlags": "OUTLINE", +"borderBackdrop": "Solid", +"borderOffset": 2, +"numTriggers": 1, +"frameStrata": 3, +"icon": false, +"activeTriggerMode": 0, +"xOffset": -248, +"timer": false, +"stacks": false, +"borderInset": 2, +"load": { +"use_never": false, +"faction": { +"multi": [] +}, +"class": { +"single": "HUNTER", +"multi": { +"MAGE": true, +"MONK": true, +"PRIEST": true, +"DEATHKNIGHT": true, +"WARLOCK": true, +"HUNTER": true, +"ROGUE": true, +"DRUID": true, +"SHAMAN": true, +"PALADIN": true +} +}, +"talent": { +"multi": [] +}, +"race": { +"multi": [] +}, +"role": { +"multi": [] +}, +"use_name": false, +"difficulty": { +"multi": [] +}, +"name": "Kaitain", +"pvptalent": { +"multi": [] +} +}, +"text": false, +"width": 150, +"untrigger": { +"unit": "target", +"spellName": 61304 +}, +"sparkColor": [ +null, +null, +null, +0 +], +"icon_side": "LEFT", +"border": true, +"url": "https://wago.io/V1NFD3AxM/1", +"version": 1, +"semver": "1.0.0" +}, +{ + "yOffset": -210, + "borderSize": 2, + "id": "Target Power Bar Shadow", + "additional_triggers": [], + "init_completed": 1, + "backdropColor": [ + 0.07843137254902, + 0.07843137254902, + 0.07843137254902, + 1 + ], + "regionType": "aurabar", + "animation": { + "main": { + "scalex": 1, + "x": 0, + "duration": "100", + "y": 0, + "colorFunc": "return function(r1, g1, b1, a1, r2, g2, b2, a2) + + local class = UnitClass("target") + local red, green, blue = 1,1,0 + + if class == "Death Knight" then + red, green, blue = 0.77,0.12,0.23 + + elseif class == "Demon Hunter" then + red, green, blue = 0.64,0.19,0.79 + + elseif class == "Druid" then + red, green, blue = 1.00,0.49,0.04 + + elseif class == "Hunter" then + red, green, blue = 0.67,0.83,0.45 + + elseif class == "Mage" then + red, green, blue = 0.41,0.80,0.94 + + elseif class == "Monk" then + red, green, blue = 0,255,150 + + elseif class == "Paladin" then + red, green, blue = 0.96,0.55,0.73 + + elseif class == "Priest" then + red, green, blue = 1.00,1.00,1.00 + + elseif class == "Rogue" then + red, green, blue = 1.00,0.96,0.41 + + elseif class == "Shaman" then + red, green, blue = 0.0,0.44,0.87 + + elseif class == "Warlock" then + red, green, blue = 0.58,0.51,0.79 + + else red, green, blue = 0.78,0.61,0.43 -- Warrior, formatted slightly different. + end + + return red, green, blue, 1 + end + + + + + ", + "scaley": 1, + "colorR": 1, + "colorType": "custom", + "duration_type": "relative", + "rotate": 0, + "alpha": 0, + "colorG": 1, + "use_color": true, + "colorB": 1, + "colorA": 1 +} +}, +"activeTriggerMode": 0, +"fontFlags": "OUTLINE", +"borderBackdrop": "Solid", +"backgroundColor": [ +0.07843137254902, +0.07843137254902, +0.07843137254902 +], +"borderOffset": 2, +"width": 158, +"numTriggers": 1, +"texture": "Kait", +"frameStrata": 2, +"icon": false, +"borderInset": 2, +"borderColor": [ +0, +0, +0, +1 +], +"borderEdge": "1 Pixel", +"timer": false, +"text": false, +"stacks": false, +"load": { +"use_never": false, +"faction": { +"multi": [] +}, +"class": { +"single": "HUNTER", +"multi": { +"MAGE": true, +"MONK": true, +"PRIEST": true, +"DEATHKNIGHT": true, +"WARLOCK": true, +"HUNTER": true, +"PALADIN": true, +"DRUID": true, +"SHAMAN": true, +"ROGUE": true +} +}, +"talent": { +"multi": [] +}, +"race": { +"multi": [] +}, +"role": { +"multi": [] +}, +"use_name": false, +"difficulty": { +"multi": [] +}, +"name": "Kaitain", +"pvptalent": { +"multi": [] +} +}, +"barColor": [ +0.28235294117647, +0.28235294117647, +0.28235294117647, +0 +], +"xOffset": -248, +"untrigger": { +"unit": "target", +"spellName": 61304 +}, +"sparkColor": [ +null, +null, +null, +0 +], +"height": 20, +"trigger": { +"spellName": 61304, +"custom_hide": "timed", +"use_spellName": true, +"event": "Power", +"type": "status", +"unit": "target", +"use_unit": true, +"unevent": "auto" +}, +"url": "https://wago.io/V1NFD3AxM/1", +"version": 1, +"semver": "1.0.0" +} +], +"d": { +"expanded": false, +"frameStrata": 3, +"version": 1, +"id": "Target Unit Frame", +"additional_triggers": [], +"regionType": "group", +"activeTriggerMode": 0, +"selfPoint": "BOTTOMLEFT", +"anchorPoint": "BOTTOM", +"url": "https://wago.io/V1NFD3AxM/1", +"load": { +"difficulty": { +"multi": [] +}, +"use_class": false, +"role": { +"multi": [] +}, +"race": { +"multi": [] +}, +"faction": { +"multi": [] +}, +"talent": { +"multi": [] +}, +"pvptalent": { +"multi": [] +} +}, +"yOffset": 680, +"numTriggers": 1, +"semver": "1.0.0" +}, +"v": 1421, +"a": [], +"wagoID": "V1NFD3AxM" } \ No newline at end of file diff --git a/FreshShit/RayOfHope/1/display.lua b/WeakAuras/Projects/RayOfHope/1/display.lua similarity index 100% rename from FreshShit/RayOfHope/1/display.lua rename to WeakAuras/Projects/RayOfHope/1/display.lua diff --git a/FreshShit/RayOfHope/2/display.lua b/WeakAuras/Projects/RayOfHope/2/display.lua similarity index 100% rename from FreshShit/RayOfHope/2/display.lua rename to WeakAuras/Projects/RayOfHope/2/display.lua diff --git a/FreshShit/RayOfHope/export b/WeakAuras/Projects/RayOfHope/export similarity index 100% rename from FreshShit/RayOfHope/export rename to WeakAuras/Projects/RayOfHope/export diff --git a/FreshShit/RayOfHope/init.lua b/WeakAuras/Projects/RayOfHope/init.lua similarity index 100% rename from FreshShit/RayOfHope/init.lua rename to WeakAuras/Projects/RayOfHope/init.lua diff --git a/FreshShit/RayOfHope/trigger1.lua b/WeakAuras/Projects/RayOfHope/trigger1.lua similarity index 100% rename from FreshShit/RayOfHope/trigger1.lua rename to WeakAuras/Projects/RayOfHope/trigger1.lua diff --git a/FreshShit/RayOfHope/trigger2.lua b/WeakAuras/Projects/RayOfHope/trigger2.lua similarity index 100% rename from FreshShit/RayOfHope/trigger2.lua rename to WeakAuras/Projects/RayOfHope/trigger2.lua diff --git a/Complete Projects/Legion/RedpilledFoFDildos.lua b/WeakAuras/Projects/RedpilledFoFDildos.lua similarity index 97% rename from Complete Projects/Legion/RedpilledFoFDildos.lua rename to WeakAuras/Projects/RedpilledFoFDildos.lua index 023cc0c..eab2fef 100644 --- a/Complete Projects/Legion/RedpilledFoFDildos.lua +++ b/WeakAuras/Projects/RedpilledFoFDildos.lua @@ -1,44 +1,44 @@ ---TSU ---COMBAT_LOG_EVENT_UNFILTERED -function(allstates, e, ...) - for k, v in pairs(allstates) do - v.show = false - v.changed = true - end - local se = select(2, ...) - local pname = UnitName("player") - if se == "SPELL_AURA_APPLIED" or se == "SPELL_AURA_APPLIED_DOSE" then - local caster, target, aura = select(5, ...), select(9, ...), select(13, ...) - --print(caster, target, aura, pname) - if caster == pname and target == pname and aura == "Fingers of Frost" then - aura_env.stacks = aura_env.stacks + 1 - --print("1", aura_env.stacks) - end - elseif (se == "SPELL_AURA_REMOVED" or se == "SPELL_AURA_REMOVED_DOSE") and GetTime() - aura_env.cast > 2 then - local caster, target, aura = select(5, ...), select(9, ...), select(13, ...) - --print(caster, target, aura) - if caster == pname and target == pname and aura == "Fingers of Frost" then - aura_env.stacks = aura_env.stacks - 1 - --print("2", aura_env.stacks) - end - elseif se == "SPELL_CAST_SUCCESS" then - local caster, spell = select(5, ...), select(13, ...) - if caster == pname and spell == "Ice Lance" and aura_env.stacks > 0 then - aura_env.stacks = aura_env.stacks - 1 - aura_env.cast = GetTime() - --print("3", aura_env.stacks) - end - end - for i = 1, aura_env.stacks do - allstates[i] = { - show = true, - changed = true, - } - end - --DevTools_Dump(allstates) - return true -end - ---INIT -aura_env.stacks = 0 -aura_env.cast = 0 +--TSU +--COMBAT_LOG_EVENT_UNFILTERED +function(allstates, e, ...) + for k, v in pairs(allstates) do + v.show = false + v.changed = true + end + local se = select(2, ...) + local pname = UnitName("player") + if se == "SPELL_AURA_APPLIED" or se == "SPELL_AURA_APPLIED_DOSE" then + local caster, target, aura = select(5, ...), select(9, ...), select(13, ...) + --print(caster, target, aura, pname) + if caster == pname and target == pname and aura == "Fingers of Frost" then + aura_env.stacks = aura_env.stacks + 1 + --print("1", aura_env.stacks) + end + elseif (se == "SPELL_AURA_REMOVED" or se == "SPELL_AURA_REMOVED_DOSE") and GetTime() - aura_env.cast > 2 then + local caster, target, aura = select(5, ...), select(9, ...), select(13, ...) + --print(caster, target, aura) + if caster == pname and target == pname and aura == "Fingers of Frost" then + aura_env.stacks = aura_env.stacks - 1 + --print("2", aura_env.stacks) + end + elseif se == "SPELL_CAST_SUCCESS" then + local caster, spell = select(5, ...), select(13, ...) + if caster == pname and spell == "Ice Lance" and aura_env.stacks > 0 then + aura_env.stacks = aura_env.stacks - 1 + aura_env.cast = GetTime() + --print("3", aura_env.stacks) + end + end + for i = 1, aura_env.stacks do + allstates[i] = { + show = true, + changed = true, + } + end + --DevTools_Dump(allstates) + return true +end + +--INIT +aura_env.stacks = 0 +aura_env.cast = 0 diff --git a/Complete Projects/Legion/Rejuv.lua b/WeakAuras/Projects/Rejuv.lua similarity index 97% rename from Complete Projects/Legion/Rejuv.lua rename to WeakAuras/Projects/Rejuv.lua index f398996..53038a3 100644 --- a/Complete Projects/Legion/Rejuv.lua +++ b/WeakAuras/Projects/Rejuv.lua @@ -1,66 +1,66 @@ ---UPDATE_MOUSEOVER_UNIT -function() - return true -end - ---DISPLAY -function() - if UnitBuff("mouseover", "Rejuvenation (Germination)") then - local caster = select(8, UnitBuff("mouseover", "Rejuvenation (Germination)")) - if caster == "player" then - local amount = select(17, UnitBuff("mouseover", "Rejuvenation (Germination)")) - local exp = select(7, UnitBuff("mouseover", "Rejuvenation (Germination)")) - local dur = select(6, UnitBuff("mouseover", "Rejuvenation (Germination)")) - local remDur = exp - GetTime() - return aura_env.hexgrad(dur - remDur, 0, dur) .. aura_env.shorten(amount) .. "\124r" - end - end -end - ---INIT -aura_env.hexgrad = function(val, min, max) - local function tohex(input) - local output = string.format("%x", input * 255) - return output - end - local function grad(c, min, max) - c = (((max - c) / (max - min)) * 1) - if c > 0.5 then - c = 1 - (2 * (c - 0.5)) - return c, 1, 0, 1 - else - c = c * 2 - return 1, c, 0, 1 - end - end - local color1, color2, color3, color4 = 0, 0, 0, 0 - color1, color2, color3, color4 = grad(val, min, max) - color1, color2, color3, color4 = tohex(color1), tohex(color2), tohex(color3), tohex(color4) - color1, color2, color3, color4 = tostring(color1), tostring(color2), tostring(color3), tostring(color4) - if string.len(color1) == 1 then color1 = "0" .. color1 end - if string.len(color2) == 1 then color2 = "0" .. color2 end - if string.len(color3) == 1 then color3 = "0" .. color3 end - if string.len(color4) == 1 then color4 = "0" .. color4 end - local color = "\124c" .. color4 .. color1 .. color2 .. color3 - return color -end -aura_env.shorten = function(val) - local function round(var, n) - if (n) then - var = math.floor((var * 10 ^ n) + 0.5) / (10 ^ n) - else - var = math.floor(var + 0.5) - end - return var - end - local n = 2 - if val < 1e3 then - return round(val, n) - elseif val > 1e3 and val < 1e6 then - return round(val / 1e3, n) .. "k" - elseif val > 1e6 and val < 1e9 then - return round(val / 1e6, n) .. "M" - elseif val > 1e9 then - return round(val / 1e9, n) .. "G" - end -end +--UPDATE_MOUSEOVER_UNIT +function() + return true +end + +--DISPLAY +function() + if UnitBuff("mouseover", "Rejuvenation (Germination)") then + local caster = select(8, UnitBuff("mouseover", "Rejuvenation (Germination)")) + if caster == "player" then + local amount = select(17, UnitBuff("mouseover", "Rejuvenation (Germination)")) + local exp = select(7, UnitBuff("mouseover", "Rejuvenation (Germination)")) + local dur = select(6, UnitBuff("mouseover", "Rejuvenation (Germination)")) + local remDur = exp - GetTime() + return aura_env.hexgrad(dur - remDur, 0, dur) .. aura_env.shorten(amount) .. "\124r" + end + end +end + +--INIT +aura_env.hexgrad = function(val, min, max) + local function tohex(input) + local output = string.format("%x", input * 255) + return output + end + local function grad(c, min, max) + c = (((max - c) / (max - min)) * 1) + if c > 0.5 then + c = 1 - (2 * (c - 0.5)) + return c, 1, 0, 1 + else + c = c * 2 + return 1, c, 0, 1 + end + end + local color1, color2, color3, color4 = 0, 0, 0, 0 + color1, color2, color3, color4 = grad(val, min, max) + color1, color2, color3, color4 = tohex(color1), tohex(color2), tohex(color3), tohex(color4) + color1, color2, color3, color4 = tostring(color1), tostring(color2), tostring(color3), tostring(color4) + if string.len(color1) == 1 then color1 = "0" .. color1 end + if string.len(color2) == 1 then color2 = "0" .. color2 end + if string.len(color3) == 1 then color3 = "0" .. color3 end + if string.len(color4) == 1 then color4 = "0" .. color4 end + local color = "\124c" .. color4 .. color1 .. color2 .. color3 + return color +end +aura_env.shorten = function(val) + local function round(var, n) + if (n) then + var = math.floor((var * 10 ^ n) + 0.5) / (10 ^ n) + else + var = math.floor(var + 0.5) + end + return var + end + local n = 2 + if val < 1e3 then + return round(val, n) + elseif val > 1e3 and val < 1e6 then + return round(val / 1e3, n) .. "k" + elseif val > 1e6 and val < 1e9 then + return round(val / 1e6, n) .. "M" + elseif val > 1e9 then + return round(val / 1e9, n) .. "G" + end +end diff --git a/WIP/Reply to MOVE.lua b/WeakAuras/Projects/Reply to MOVE.lua similarity index 95% rename from WIP/Reply to MOVE.lua rename to WeakAuras/Projects/Reply to MOVE.lua index 45476c0..b3a1013 100644 --- a/WIP/Reply to MOVE.lua +++ b/WeakAuras/Projects/Reply to MOVE.lua @@ -1,14 +1,14 @@ -CHAT_MSG_PARTY, CHAT_MSG_PARTY_LEADER -function(_,msg,source) - local responses = - { - "" - } - if source ~= UnitName("player") then - msg:lower() - if msg:match("move") then - local id = math.random(1, #responses) - SendChatMessage(responses[id], "PARTY") - end - end +CHAT_MSG_PARTY, CHAT_MSG_PARTY_LEADER +function(_,msg,source) + local responses = + { + "" + } + if source ~= UnitName("player") then + msg:lower() + if msg:match("move") then + local id = math.random(1, #responses) + SendChatMessage(responses[id], "PARTY") + end + end end \ No newline at end of file diff --git a/Complete Projects/Legion/Reputation for Beloved.lua b/WeakAuras/Projects/Reputation for Beloved.lua similarity index 96% rename from Complete Projects/Legion/Reputation for Beloved.lua rename to WeakAuras/Projects/Reputation for Beloved.lua index fe24b37..460ea78 100644 --- a/Complete Projects/Legion/Reputation for Beloved.lua +++ b/WeakAuras/Projects/Reputation for Beloved.lua @@ -1,29 +1,29 @@ -DISPLAY -function() - local repIndex = 0 - local repName = aura_env.repName - local repColor = "|cFF00FF00" - for i = 1, GetNumFactions() do - local name,_,_,_,repmax,rep = GetFactionInfo(i) - if name == repName then - repIndex = i - end - end - local name,_,_,_,repmax,rep = GetFactionInfo(repIndex) - if math.floor(GetTime() - aura_env.repTime) > 30 then - repColor = "|cFFFF0000" - end - return name .. " " .. rep .. "/" .. repmax .. " +" .. aura_env.repChange .. " " .. repColor .. math.floor(GetTime() - aura_env.repTime) -end - -CHAT_MSG_COMBAT_FACTION_CHANGE -function(_,msg) - local name,change = msg:match("Reputation with ([%a+%s*%p*]+) increased by (%d+)") - aura_env.repName = name - aura_env.repChange = change - aura_env.repTime = GetTime() -end - -aura_env.repName = "" -aura_env.repChange = 0 +DISPLAY +function() + local repIndex = 0 + local repName = aura_env.repName + local repColor = "|cFF00FF00" + for i = 1, GetNumFactions() do + local name,_,_,_,repmax,rep = GetFactionInfo(i) + if name == repName then + repIndex = i + end + end + local name,_,_,_,repmax,rep = GetFactionInfo(repIndex) + if math.floor(GetTime() - aura_env.repTime) > 30 then + repColor = "|cFFFF0000" + end + return name .. " " .. rep .. "/" .. repmax .. " +" .. aura_env.repChange .. " " .. repColor .. math.floor(GetTime() - aura_env.repTime) +end + +CHAT_MSG_COMBAT_FACTION_CHANGE +function(_,msg) + local name,change = msg:match("Reputation with ([%a+%s*%p*]+) increased by (%d+)") + aura_env.repName = name + aura_env.repChange = change + aura_env.repTime = GetTime() +end + +aura_env.repName = "" +aura_env.repChange = 0 aura_env.repTime = GetTime() \ No newline at end of file diff --git a/Complete Projects/Legion/Reputations for Insane.lua b/WeakAuras/Projects/Reputations for Insane.lua similarity index 98% rename from Complete Projects/Legion/Reputations for Insane.lua rename to WeakAuras/Projects/Reputations for Insane.lua index a293ce2..d2ea734 100644 --- a/Complete Projects/Legion/Reputations for Insane.lua +++ b/WeakAuras/Projects/Reputations for Insane.lua @@ -1,12 +1,12 @@ -function() - local name = {select(1, GetFactionInfo(67)), select(1, GetFactionInfo(68)), select(1, GetFactionInfo(69)), select(1, GetFactionInfo(70)), select(1, GetFactionInfo(48)), select(1, GetFactionInfo(51))} - local rep = {select(6, GetFactionInfo(67)), select(6, GetFactionInfo(68)), select(6, GetFactionInfo(69)), select(6, GetFactionInfo(70)), select(6, GetFactionInfo(48)), select(6, GetFactionInfo(51))} - local repmax = {select(5, GetFactionInfo(67)), select(5, GetFactionInfo(68)), select(5, GetFactionInfo(69)), select(5, GetFactionInfo(70)), select(5, GetFactionInfo(48)), select(5, GetFactionInfo(51))} - local output = "" - for i = 1, 6 do - if rep[i] < 21000 then - output = output .. name[i] .. " " .. rep[i] .. "/" .. repmax[i] .. "\n" - end - end - return output +function() + local name = {select(1, GetFactionInfo(67)), select(1, GetFactionInfo(68)), select(1, GetFactionInfo(69)), select(1, GetFactionInfo(70)), select(1, GetFactionInfo(48)), select(1, GetFactionInfo(51))} + local rep = {select(6, GetFactionInfo(67)), select(6, GetFactionInfo(68)), select(6, GetFactionInfo(69)), select(6, GetFactionInfo(70)), select(6, GetFactionInfo(48)), select(6, GetFactionInfo(51))} + local repmax = {select(5, GetFactionInfo(67)), select(5, GetFactionInfo(68)), select(5, GetFactionInfo(69)), select(5, GetFactionInfo(70)), select(5, GetFactionInfo(48)), select(5, GetFactionInfo(51))} + local output = "" + for i = 1, 6 do + if rep[i] < 21000 then + output = output .. name[i] .. " " .. rep[i] .. "/" .. repmax[i] .. "\n" + end + end + return output end \ No newline at end of file diff --git a/Complete Projects/Legion/Rogue Sniffer 9000/Target Direction.lua b/WeakAuras/Projects/Rogue Sniffer 9000/Target Direction.lua similarity index 97% rename from Complete Projects/Legion/Rogue Sniffer 9000/Target Direction.lua rename to WeakAuras/Projects/Rogue Sniffer 9000/Target Direction.lua index a0ca9e6..a62dc74 100644 --- a/Complete Projects/Legion/Rogue Sniffer 9000/Target Direction.lua +++ b/WeakAuras/Projects/Rogue Sniffer 9000/Target Direction.lua @@ -1,80 +1,80 @@ -CHAT_MSG_SYSTEM -function(_,msg) - if string.match(msg, "X:") and not string.match(msg, "ZoneX:") then - aura_env.tX = string.match(msg, "X: [%-*(%d+)%.*]+") or 0 - aura_env.tY = string.match(msg, "Y: [%-*(%d+)%.*]+") or 0 - aura_env.tX = string.match(aura_env.tX, "[%-*(%d+)%.*]+") - aura_env.tY = string.match(aura_env.tY, "[%-*(%d+)%.*]+") - end -end - -CHAT_MSG_WHISPER -function(_,msg,sender) - sender = string.match(sender, "%a+") - if sender == UnitName("player") and msg ~= "trackon" and msg ~= "trackoff" and msg ~= "acquiretarget" then - aura_env.target = string.match(msg, "%a+") - print(aura_env.target) - end - if msg == "trackon" and aura_env.enable == 0 and sender == UnitName("player") then - aura_env.enable = 1 - print(aura_env.enable, aura_env.target) - end - if msg == "trackoff" and aura_env.enable == 1 and sender == UnitName("player") then - aura_env.enable = 0 - print(aura_env.enable, aura_env.target) - end - if msg == "acquiretarget" and sender == UnitName("player") then - aura_env.target = UnitName("target") - print(aura_env.enable, aura_env.target) - end -end - -EVERY FRAME -function() - if aura_env.enable == 1 and aura_env.target ~= nil then - local tt = math.floor((GetTime() - aura_env.startTime) * 10) - if tt ~= aura_env.lastTime and tt % aura_env.tickRate == 0 then - print(aura_env.target) - aura_env.lastTime = tt - SendChatMessage(".gps " .. aura_env.target, "say") - end - end -end - -EVERY FRAME -function() - local function range (val, min, max, max2) - val = 1 - (((max - val) / (max - min)) * max2) - return val - end - aura_env.pX = UnitPosition("player") or 0 - aura_env.pY = select(2,UnitPosition("player")) or 0 - local X = aura_env.pX - aura_env.tX - local Y = aura_env.pY - aura_env.tY - local playerFace = GetPlayerFacing() or 0 - local playerA = math.floor(playerFace * 100) - playerA = range(playerA, 0, 630, 360) - 1 - playerA = - playerA - playerA = playerA - 90 - if playerA < 0 then playerA = playerA + 360 end - aura_env.hyp = math.sqrt((math.abs(X^2)) + (math.abs(Y^2))) - aura_env.angle = math.deg(math.atan2(X,Y)) - if aura_env.angle < 0 then aura_env.angle = aura_env.angle + 360 end - aura_env.angle = aura_env.angle - playerA -end - -ANIMATION -function() - return - aura_env.angle -end - -INIT -aura_env.pX = UnitPosition("player") or 0 -aura_env.pY = select(2,UnitPosition("player")) or 0 -aura_env.tX = UnitPosition("player") or 0 -aura_env.tY = select(2,UnitPosition("player")) or 0 -aura_env.angle = 0 -aura_env.target = "" -aura_env.enable = 0 -aura_env.tickRate = 5 +CHAT_MSG_SYSTEM +function(_,msg) + if string.match(msg, "X:") and not string.match(msg, "ZoneX:") then + aura_env.tX = string.match(msg, "X: [%-*(%d+)%.*]+") or 0 + aura_env.tY = string.match(msg, "Y: [%-*(%d+)%.*]+") or 0 + aura_env.tX = string.match(aura_env.tX, "[%-*(%d+)%.*]+") + aura_env.tY = string.match(aura_env.tY, "[%-*(%d+)%.*]+") + end +end + +CHAT_MSG_WHISPER +function(_,msg,sender) + sender = string.match(sender, "%a+") + if sender == UnitName("player") and msg ~= "trackon" and msg ~= "trackoff" and msg ~= "acquiretarget" then + aura_env.target = string.match(msg, "%a+") + print(aura_env.target) + end + if msg == "trackon" and aura_env.enable == 0 and sender == UnitName("player") then + aura_env.enable = 1 + print(aura_env.enable, aura_env.target) + end + if msg == "trackoff" and aura_env.enable == 1 and sender == UnitName("player") then + aura_env.enable = 0 + print(aura_env.enable, aura_env.target) + end + if msg == "acquiretarget" and sender == UnitName("player") then + aura_env.target = UnitName("target") + print(aura_env.enable, aura_env.target) + end +end + +EVERY FRAME +function() + if aura_env.enable == 1 and aura_env.target ~= nil then + local tt = math.floor((GetTime() - aura_env.startTime) * 10) + if tt ~= aura_env.lastTime and tt % aura_env.tickRate == 0 then + print(aura_env.target) + aura_env.lastTime = tt + SendChatMessage(".gps " .. aura_env.target, "say") + end + end +end + +EVERY FRAME +function() + local function range (val, min, max, max2) + val = 1 - (((max - val) / (max - min)) * max2) + return val + end + aura_env.pX = UnitPosition("player") or 0 + aura_env.pY = select(2,UnitPosition("player")) or 0 + local X = aura_env.pX - aura_env.tX + local Y = aura_env.pY - aura_env.tY + local playerFace = GetPlayerFacing() or 0 + local playerA = math.floor(playerFace * 100) + playerA = range(playerA, 0, 630, 360) - 1 + playerA = - playerA + playerA = playerA - 90 + if playerA < 0 then playerA = playerA + 360 end + aura_env.hyp = math.sqrt((math.abs(X^2)) + (math.abs(Y^2))) + aura_env.angle = math.deg(math.atan2(X,Y)) + if aura_env.angle < 0 then aura_env.angle = aura_env.angle + 360 end + aura_env.angle = aura_env.angle - playerA +end + +ANIMATION +function() + return - aura_env.angle +end + +INIT +aura_env.pX = UnitPosition("player") or 0 +aura_env.pY = select(2,UnitPosition("player")) or 0 +aura_env.tX = UnitPosition("player") or 0 +aura_env.tY = select(2,UnitPosition("player")) or 0 +aura_env.angle = 0 +aura_env.target = "" +aura_env.enable = 0 +aura_env.tickRate = 5 aura_env.startTime = GetTime() \ No newline at end of file diff --git a/Complete Projects/Legion/Rogue Sniffer 9000/Target Distance.lua b/WeakAuras/Projects/Rogue Sniffer 9000/Target Distance.lua similarity index 97% rename from Complete Projects/Legion/Rogue Sniffer 9000/Target Distance.lua rename to WeakAuras/Projects/Rogue Sniffer 9000/Target Distance.lua index 7a384d1..08c351b 100644 --- a/Complete Projects/Legion/Rogue Sniffer 9000/Target Distance.lua +++ b/WeakAuras/Projects/Rogue Sniffer 9000/Target Distance.lua @@ -1,43 +1,43 @@ -DISPLAY -function() - return aura_env.hyp .. "\n" .. aura_env.vertiDista -end - -EVERY FRAME -function() - aura_env.pX = UnitPosition("player") or 0 - aura_env.pY = select(2,UnitPosition("player")) or 0 - aura_env.pZ = select(3,UnitPosition("player")) or 0 - print(aura_env.pZ, aura_env.tZ) - local ajdX = aura_env.pX - aura_env.tX - local ajdY = aura_env.pY - aura_env.tY - aura_env.tX = math.floor(aura_env.tX * 100) / 100 - aura_env.tY = math.floor(aura_env.tY * 100) / 100 - aura_env.pX = math.floor(aura_env.pX * 100) / 100 - aura_env.pY = math.floor(aura_env.pY * 100) / 100 - aura_env.hyp = math.floor((math.sqrt((ajdX * ajdX) + (ajdY * ajdY)))) - aura_env.vertiDista = math.floor(aura_env.pZ - aura_env.tZ) -end - -CHAT_MSG_SYSTEM -function(_,msg) - if string.match(msg, "X:") and not string.match(msg, "ZoneX:") then - aura_env.tX = msg:match("X: [%-*(%d+)%.*]+") or 0 - aura_env.tY = msg:match("Y: [%-*(%d+)%.*]+") or 0 - aura_env.tZ = msg:match("Z: [%-*(%d+)%.*]+") or 0 - aura_env.tX = aura_env.tX:match("[%-*(%d+)%.*]+") - aura_env.tY = aura_env.tY:match("[%-*(%d+)%.*]+") - aura_env.tZ = aura_env.tZ:match("[%-*(%d+)%.*]+") - print(aura_env.tX, aura_env.tY, aura_env.tZ) - end -end - -INIT -aura_env.hyp = 0 -aura_env.tX = 0 -aura_env.tY = 0 -aura_env.tZ = 0 -aura_env.pX = 0 -aura_env.pY = 0 -aura_env.pZ = 0 +DISPLAY +function() + return aura_env.hyp .. "\n" .. aura_env.vertiDista +end + +EVERY FRAME +function() + aura_env.pX = UnitPosition("player") or 0 + aura_env.pY = select(2,UnitPosition("player")) or 0 + aura_env.pZ = select(3,UnitPosition("player")) or 0 + print(aura_env.pZ, aura_env.tZ) + local ajdX = aura_env.pX - aura_env.tX + local ajdY = aura_env.pY - aura_env.tY + aura_env.tX = math.floor(aura_env.tX * 100) / 100 + aura_env.tY = math.floor(aura_env.tY * 100) / 100 + aura_env.pX = math.floor(aura_env.pX * 100) / 100 + aura_env.pY = math.floor(aura_env.pY * 100) / 100 + aura_env.hyp = math.floor((math.sqrt((ajdX * ajdX) + (ajdY * ajdY)))) + aura_env.vertiDista = math.floor(aura_env.pZ - aura_env.tZ) +end + +CHAT_MSG_SYSTEM +function(_,msg) + if string.match(msg, "X:") and not string.match(msg, "ZoneX:") then + aura_env.tX = msg:match("X: [%-*(%d+)%.*]+") or 0 + aura_env.tY = msg:match("Y: [%-*(%d+)%.*]+") or 0 + aura_env.tZ = msg:match("Z: [%-*(%d+)%.*]+") or 0 + aura_env.tX = aura_env.tX:match("[%-*(%d+)%.*]+") + aura_env.tY = aura_env.tY:match("[%-*(%d+)%.*]+") + aura_env.tZ = aura_env.tZ:match("[%-*(%d+)%.*]+") + print(aura_env.tX, aura_env.tY, aura_env.tZ) + end +end + +INIT +aura_env.hyp = 0 +aura_env.tX = 0 +aura_env.tY = 0 +aura_env.tZ = 0 +aura_env.pX = 0 +aura_env.pY = 0 +aura_env.pZ = 0 aura_env.vertiDista = 0 \ No newline at end of file diff --git a/Complete Projects/Legion/Rogue Sniffer 9000/Target Zone.lua b/WeakAuras/Projects/Rogue Sniffer 9000/Target Zone.lua similarity index 96% rename from Complete Projects/Legion/Rogue Sniffer 9000/Target Zone.lua rename to WeakAuras/Projects/Rogue Sniffer 9000/Target Zone.lua index f5c6e86..cc34e2b 100644 --- a/Complete Projects/Legion/Rogue Sniffer 9000/Target Zone.lua +++ b/WeakAuras/Projects/Rogue Sniffer 9000/Target Zone.lua @@ -1,19 +1,19 @@ -DISPLAY -function() - return string.format("%s\n%s\n%s", aura_env.map, aura_env.zone, aura_env.area) -end - -CHAT_MSG_SYSTEM -function(_,msg) - if string.match(msg, "Zone:") then - aura_env.map = msg:match("Map: %d+ %(([%a%d%s'$%-:]+)%)") - aura_env.zone = msg:match("Zone: %d+ %(([%a%d%s'$%-:]+)%)") - aura_env.area = msg:match("Area: %d+ %(([%a%d%s'$%-:]+)%)") - print(aura_env.map, aura_env.zone, aura_env.area) - end -end - -INIT -aura_env.map = "" -aura_env.zone = "" +DISPLAY +function() + return string.format("%s\n%s\n%s", aura_env.map, aura_env.zone, aura_env.area) +end + +CHAT_MSG_SYSTEM +function(_,msg) + if string.match(msg, "Zone:") then + aura_env.map = msg:match("Map: %d+ %(([%a%d%s'$%-:]+)%)") + aura_env.zone = msg:match("Zone: %d+ %(([%a%d%s'$%-:]+)%)") + aura_env.area = msg:match("Area: %d+ %(([%a%d%s'$%-:]+)%)") + print(aura_env.map, aura_env.zone, aura_env.area) + end +end + +INIT +aura_env.map = "" +aura_env.zone = "" aura_env.area = "" \ No newline at end of file diff --git a/Complete Projects/Legion/Rogue Stealth.lua b/WeakAuras/Projects/Rogue Stealth.lua similarity index 96% rename from Complete Projects/Legion/Rogue Stealth.lua rename to WeakAuras/Projects/Rogue Stealth.lua index 9324a14..4da97b9 100644 --- a/Complete Projects/Legion/Rogue Stealth.lua +++ b/WeakAuras/Projects/Rogue Stealth.lua @@ -1,39 +1,39 @@ -function() - local output = "" - local buff = 0 - if IsInRaid() == false then - for i = 1, GetNumGroupMembers() do - if UnitClass("party" .. i) == "Rogue" then - buff = 0 - for j = 1, 40 do - if UnitBuff("party" .. i, j) == "Stealth" then - output = output .. "|cFF00FF00" .. UnitName("party" .. i) .. "\n" - buff = 1 - break - end - end - if buff == 0 then - output = output .. "|cFFFF0000" .. UnitName("party" .. i) .. "\n" - end - end - end - return output - else - for i = 1, GetNumGroupMembers() do - if UnitClass("raid" .. i) == "Rogue" then - buff = 0 - for j = 1, 40 do - if UnitBuff("raid" .. i, j) == "Stealth" then - output = output .. "|cFF00FF00" .. UnitName("raid" .. i) .. "\n" - buff = 1 - break - end - end - if buff == 0 then - output = output .. "|cFFFF0000" .. UnitName("raid" .. i) .. "\n" - end - end - end - return output - end -end +function() + local output = "" + local buff = 0 + if IsInRaid() == false then + for i = 1, GetNumGroupMembers() do + if UnitClass("party" .. i) == "Rogue" then + buff = 0 + for j = 1, 40 do + if UnitBuff("party" .. i, j) == "Stealth" then + output = output .. "|cFF00FF00" .. UnitName("party" .. i) .. "\n" + buff = 1 + break + end + end + if buff == 0 then + output = output .. "|cFFFF0000" .. UnitName("party" .. i) .. "\n" + end + end + end + return output + else + for i = 1, GetNumGroupMembers() do + if UnitClass("raid" .. i) == "Rogue" then + buff = 0 + for j = 1, 40 do + if UnitBuff("raid" .. i, j) == "Stealth" then + output = output .. "|cFF00FF00" .. UnitName("raid" .. i) .. "\n" + buff = 1 + break + end + end + if buff == 0 then + output = output .. "|cFFFF0000" .. UnitName("raid" .. i) .. "\n" + end + end + end + return output + end +end diff --git a/FreshShit/RogueBullshit/Cooldowns b/WeakAuras/Projects/RogueBullshit/Cooldowns similarity index 100% rename from FreshShit/RogueBullshit/Cooldowns rename to WeakAuras/Projects/RogueBullshit/Cooldowns diff --git a/FreshShit/RogueBullshit/Mouse b/WeakAuras/Projects/RogueBullshit/Mouse similarity index 100% rename from FreshShit/RogueBullshit/Mouse rename to WeakAuras/Projects/RogueBullshit/Mouse diff --git a/Complete Projects/Legion/RuneDinger.lua b/WeakAuras/Projects/RuneDinger.lua similarity index 95% rename from Complete Projects/Legion/RuneDinger.lua rename to WeakAuras/Projects/RuneDinger.lua index 4d7117e..fb4e662 100644 --- a/Complete Projects/Legion/RuneDinger.lua +++ b/WeakAuras/Projects/RuneDinger.lua @@ -1,30 +1,30 @@ ---EVERY FRAME -function() - local runeAmount = 0 - for i = 1, 6 do - local start, duration, runeReady = GetRuneCooldown(i) - if runeReady == true then - runeAmount = runeAmount + 1 - end - end - if runeAmount ~= aura_env.runeAmount then - aura_env.time = (GetTime() * 1000) + 250 - aura_env.runeAmount = runeAmount - return true - end - aura_env.runeAmount = runeAmount - if aura_env.time > GetTime() * 1000 then - return true - else - return false - end -end - ---DISPLAY -function() - return aura_env.runeAmount -end - ---INIT -aura_env.time = GetTime() -aura_env.runeAmount = 0 +--EVERY FRAME +function() + local runeAmount = 0 + for i = 1, 6 do + local start, duration, runeReady = GetRuneCooldown(i) + if runeReady == true then + runeAmount = runeAmount + 1 + end + end + if runeAmount ~= aura_env.runeAmount then + aura_env.time = (GetTime() * 1000) + 250 + aura_env.runeAmount = runeAmount + return true + end + aura_env.runeAmount = runeAmount + if aura_env.time > GetTime() * 1000 then + return true + else + return false + end +end + +--DISPLAY +function() + return aura_env.runeAmount +end + +--INIT +aura_env.time = GetTime() +aura_env.runeAmount = 0 diff --git a/Complete Projects/Legion/SaveCombatLog.lua b/WeakAuras/Projects/SaveCombatLog.lua similarity index 96% rename from Complete Projects/Legion/SaveCombatLog.lua rename to WeakAuras/Projects/SaveCombatLog.lua index cbdc431..9b9981d 100644 --- a/Complete Projects/Legion/SaveCombatLog.lua +++ b/WeakAuras/Projects/SaveCombatLog.lua @@ -1,13 +1,13 @@ ---COMBAT_LOG_EVENT_UNFILTERED -function(...) - local subevent = select(3, ...) - CombatLogSaveDavey[#CombatLogSaveDavey + 1] = {} - CombatLogSaveDavey[#CombatLogSaveDavey][subevent] = {} - for i = 1, 40 do - local tempvar = select(i, ...) - if tempvar ~= nil then - tempvar = tostring(tempvar) - CombatLogSaveDavey[#CombatLogSaveDavey][subevent][i] = tempvar - end - end +--COMBAT_LOG_EVENT_UNFILTERED +function(...) + local subevent = select(3, ...) + CombatLogSaveDavey[#CombatLogSaveDavey + 1] = {} + CombatLogSaveDavey[#CombatLogSaveDavey][subevent] = {} + for i = 1, 40 do + local tempvar = select(i, ...) + if tempvar ~= nil then + tempvar = tostring(tempvar) + CombatLogSaveDavey[#CombatLogSaveDavey][subevent][i] = tempvar + end + end end \ No newline at end of file diff --git a/NewAge/ScrollingText/export b/WeakAuras/Projects/ScrollingText/export similarity index 100% rename from NewAge/ScrollingText/export rename to WeakAuras/Projects/ScrollingText/export diff --git a/Complete Projects/Legion/Sea-Star Proc.lua b/WeakAuras/Projects/Sea-Star Proc.lua similarity index 96% rename from Complete Projects/Legion/Sea-Star Proc.lua rename to WeakAuras/Projects/Sea-Star Proc.lua index 07b53b8..f892875 100644 --- a/Complete Projects/Legion/Sea-Star Proc.lua +++ b/WeakAuras/Projects/Sea-Star Proc.lua @@ -1,40 +1,40 @@ ---[[ -[02:14 PM] [Virag's DT]: 14 - Light of Dawn -[02:14 PM] [Virag's DT]: 6 - Pinkiepiie -[02:14 PM] [Virag's DT]: 3 - SPELL_CAST_SUCCESS -[02:15 PM] [Virag's DT]: 14 - Ocean's Embrace -[02:15 PM] [Virag's DT]: 6 - Pinkiepiie -[02:15 PM] [Virag's DT]: 3 - SPELL_AURA_APPLIED -[02:15 PM] [Virag's DT]: 1 - COMBAT_LOG_EVENT_UNFILTERED -]]-- - ---COMBAT_LOG_EVENT_UNFILTERED -function(...) - local name = select(6, ...) - if name == UnitName("player") then - local subevent = select(3, ...) - if subevent == "SPELL_CAST_SUCCESS" then - local sname = select(14, ...) - if sname == "Light of Dawn" then - aura_env.LoD = aura_env.LoD + 1 - CustomTrash["SeaStar"]["Casts"] = CustomTrash["SeaStar"]["Casts"] + 1 - end - end - if subevent == "SPELL_AURA_APPLIED" then - local sname = select(14, ...) - if sname == "Ocean's Embrace" then - aura_env.proc = aura_env.proc + 1 - CustomTrash["SeaStar"]["Procs"] = CustomTrash["SeaStar"]["Procs"] + 1 - end - end - end -end - ---DISPLAY -function() - return aura_env.proc .. "/" .. aura_env.LoD -end - ---INIT -aura_env.LoD = CustomTrash["SeaStar"]["Casts"] +--[[ +[02:14 PM] [Virag's DT]: 14 - Light of Dawn +[02:14 PM] [Virag's DT]: 6 - Pinkiepiie +[02:14 PM] [Virag's DT]: 3 - SPELL_CAST_SUCCESS +[02:15 PM] [Virag's DT]: 14 - Ocean's Embrace +[02:15 PM] [Virag's DT]: 6 - Pinkiepiie +[02:15 PM] [Virag's DT]: 3 - SPELL_AURA_APPLIED +[02:15 PM] [Virag's DT]: 1 - COMBAT_LOG_EVENT_UNFILTERED +]]-- + +--COMBAT_LOG_EVENT_UNFILTERED +function(...) + local name = select(6, ...) + if name == UnitName("player") then + local subevent = select(3, ...) + if subevent == "SPELL_CAST_SUCCESS" then + local sname = select(14, ...) + if sname == "Light of Dawn" then + aura_env.LoD = aura_env.LoD + 1 + CustomTrash["SeaStar"]["Casts"] = CustomTrash["SeaStar"]["Casts"] + 1 + end + end + if subevent == "SPELL_AURA_APPLIED" then + local sname = select(14, ...) + if sname == "Ocean's Embrace" then + aura_env.proc = aura_env.proc + 1 + CustomTrash["SeaStar"]["Procs"] = CustomTrash["SeaStar"]["Procs"] + 1 + end + end + end +end + +--DISPLAY +function() + return aura_env.proc .. "/" .. aura_env.LoD +end + +--INIT +aura_env.LoD = CustomTrash["SeaStar"]["Casts"] aura_env.proc = CustomTrash["SeaStar"]["Procs"] \ No newline at end of file diff --git a/FreshShit/SephuzBar/event.lua b/WeakAuras/Projects/SephuzBar/event.lua similarity index 95% rename from FreshShit/SephuzBar/event.lua rename to WeakAuras/Projects/SephuzBar/event.lua index bd9e6b7..9957fc2 100644 --- a/FreshShit/SephuzBar/event.lua +++ b/WeakAuras/Projects/SephuzBar/event.lua @@ -1,27 +1,27 @@ --- COMBAT_LOG_EVENT_UNFILTERED --- For some reason the non lua version does not work (with status > event > spell aura applied...) -function(e, ...) - local subevent, err = CLEUParser.GetSubevent(...) - if err ~= nil then - -- print(err) - return - end - - if subevent == "SPELL_AURA_APPLIED" then - local spellid, err = CLEUParser.GetSpellId(...) - if err ~= nil then - -- print(err) - return - end - - local target, err = CLEUParser.GetDestName(...) - if err ~= nil then - -- print(err) - return - end - -- print(target, spellid) - if spellid == 208052 and UnitName("player") == target then - return true - end - end -end +-- COMBAT_LOG_EVENT_UNFILTERED +-- For some reason the non lua version does not work (with status > event > spell aura applied...) +function(e, ...) + local subevent, err = CLEUParser.GetSubevent(...) + if err ~= nil then + -- print(err) + return + end + + if subevent == "SPELL_AURA_APPLIED" then + local spellid, err = CLEUParser.GetSpellId(...) + if err ~= nil then + -- print(err) + return + end + + local target, err = CLEUParser.GetDestName(...) + if err ~= nil then + -- print(err) + return + end + -- print(target, spellid) + if spellid == 208052 and UnitName("player") == target then + return true + end + end +end diff --git a/FreshShit/SephuzBar/export b/WeakAuras/Projects/SephuzBar/export similarity index 100% rename from FreshShit/SephuzBar/export rename to WeakAuras/Projects/SephuzBar/export diff --git a/FreshShit/ShardCounter/display.lua b/WeakAuras/Projects/ShardCounter/display.lua similarity index 95% rename from FreshShit/ShardCounter/display.lua rename to WeakAuras/Projects/ShardCounter/display.lua index 32f9b84..0388715 100644 --- a/FreshShit/ShardCounter/display.lua +++ b/WeakAuras/Projects/ShardCounter/display.lua @@ -1,3 +1,3 @@ -function() - return aura_env.Display +function() + return aura_env.Display end \ No newline at end of file diff --git a/FreshShit/ShardCounter/event.lua b/WeakAuras/Projects/ShardCounter/event.lua similarity index 96% rename from FreshShit/ShardCounter/event.lua rename to WeakAuras/Projects/ShardCounter/event.lua index 6c91326..aa2d6c1 100644 --- a/FreshShit/ShardCounter/event.lua +++ b/WeakAuras/Projects/ShardCounter/event.lua @@ -1,7 +1,7 @@ --- TICKER_500 -function() - aura_env.SoulShardStack:CleanOld() - aura_env.AgonyStack:CleanOld() - aura_env.UpdateDisplay() - aura_env.SoulShards = UnitPower("player", 7) -end +-- TICKER_500 +function() + aura_env.SoulShardStack:CleanOld() + aura_env.AgonyStack:CleanOld() + aura_env.UpdateDisplay() + aura_env.SoulShards = UnitPower("player", 7) +end diff --git a/FreshShit/ShardCounter/event2.lua b/WeakAuras/Projects/ShardCounter/event2.lua similarity index 97% rename from FreshShit/ShardCounter/event2.lua rename to WeakAuras/Projects/ShardCounter/event2.lua index 70c0bfc..0ee4f3d 100644 --- a/FreshShit/ShardCounter/event2.lua +++ b/WeakAuras/Projects/ShardCounter/event2.lua @@ -1,14 +1,14 @@ --- UNIT_POWER -function(e, unit, power) - if unit ~= "player" then return end - if power ~= "SOUL_SHARDS" then return end - local soulShards = UnitPower("player", 7) - if soulShards == aura_env.SoulShards then return end - if soulShards < aura_env.SoulShards then - aura_env.SoulShards = soulShards - return - end - aura_env.SoulShards = soulShards - aura_env.SoulShardStack:Push(time()) - WeakAuras.ScanEvents("PLAY_SOUND", "Interface\\Sounds\\quack.ogg") +-- UNIT_POWER +function(e, unit, power) + if unit ~= "player" then return end + if power ~= "SOUL_SHARDS" then return end + local soulShards = UnitPower("player", 7) + if soulShards == aura_env.SoulShards then return end + if soulShards < aura_env.SoulShards then + aura_env.SoulShards = soulShards + return + end + aura_env.SoulShards = soulShards + aura_env.SoulShardStack:Push(time()) + WeakAuras.ScanEvents("PLAY_SOUND", "Interface\\Sounds\\quack.ogg") end \ No newline at end of file diff --git a/FreshShit/ShardCounter/event3.lua b/WeakAuras/Projects/ShardCounter/event3.lua similarity index 97% rename from FreshShit/ShardCounter/event3.lua rename to WeakAuras/Projects/ShardCounter/event3.lua index 8985e5d..6b5b291 100644 --- a/FreshShit/ShardCounter/event3.lua +++ b/WeakAuras/Projects/ShardCounter/event3.lua @@ -1,14 +1,14 @@ --- COMBAT_LOG_EVENT_UNFILTERED -function(e, ...) - local caster, err = CLEUParser.GetSourceName(...) - if err then return end - if caster ~= aura_env.PlayerName then return end - local subevent, err = CLEUParser.GetSubevent(...) - if err then return end - if subevent ~= "SPELL_PERIODIC_DAMAGE" then return end - local spellID, err = CLEUParser.GetSpellId(...) - if err then return end - if spellID == 980 then - aura_env.AgonyStack:Push(time()) - end +-- COMBAT_LOG_EVENT_UNFILTERED +function(e, ...) + local caster, err = CLEUParser.GetSourceName(...) + if err then return end + if caster ~= aura_env.PlayerName then return end + local subevent, err = CLEUParser.GetSubevent(...) + if err then return end + if subevent ~= "SPELL_PERIODIC_DAMAGE" then return end + local spellID, err = CLEUParser.GetSpellId(...) + if err then return end + if spellID == 980 then + aura_env.AgonyStack:Push(time()) + end end \ No newline at end of file diff --git a/FreshShit/ShardCounter/event5.lua b/WeakAuras/Projects/ShardCounter/event5.lua similarity index 96% rename from FreshShit/ShardCounter/event5.lua rename to WeakAuras/Projects/ShardCounter/event5.lua index 788ab32..e8fb0c1 100644 --- a/FreshShit/ShardCounter/event5.lua +++ b/WeakAuras/Projects/ShardCounter/event5.lua @@ -1,7 +1,7 @@ --- PLAYER_REGEN_DISABLED -function() - if aura_env.config.resetOnCombat then - aura_env.AgonyStack:CleanOld(0) - aura_env.SoulShardStack:CleanOld(0) - end +-- PLAYER_REGEN_DISABLED +function() + if aura_env.config.resetOnCombat then + aura_env.AgonyStack:CleanOld(0) + aura_env.SoulShardStack:CleanOld(0) + end end \ No newline at end of file diff --git a/FreshShit/ShardCounter/export b/WeakAuras/Projects/ShardCounter/export similarity index 100% rename from FreshShit/ShardCounter/export rename to WeakAuras/Projects/ShardCounter/export diff --git a/FreshShit/ShardCounter/init.lua b/WeakAuras/Projects/ShardCounter/init.lua similarity index 96% rename from FreshShit/ShardCounter/init.lua rename to WeakAuras/Projects/ShardCounter/init.lua index e827276..84a0021 100644 --- a/FreshShit/ShardCounter/init.lua +++ b/WeakAuras/Projects/ShardCounter/init.lua @@ -1,52 +1,52 @@ ----@class Stack ----@field maxSize number ----@field values table -aura_env.Stack = { - ---@param maxSize number - ---@return Stack - new = function(maxSize) - local self = setmetatable({}, { - __index = aura_env.Stack, - }) - self.maxSize = maxSize - self.values = {} - return self - end, - ---@param self Stack - ---@param value number - Push = function(self, value) - table.insert(self.values, 0, value) - if #self.values > self.maxSize then table.remove(self.values, #self.values) end - end, - ---@param self Stack - ---@return number - PerSecond = function(self) - local first = self.values[#self.values] - local last = time() - - if first and last then return #self.values / (math.max(last - first, 1)) end - return 0 - end, - ---@param self Stack - ---@param threshold number? - CleanOld = function(self, threshold) - local timeThresh = time() - (threshold or aura_env.config.combatMemoryTime) - -- print(string.format("Clean %d %d", #self.values, timeThresh)) - for i = #self.values, 1, -1 do - if self.values[i] < timeThresh then table.remove(self.values, i) end - end - -- print(string.format("Clean after %d", #self.values)) - end, -} - -aura_env.SoulShardStack = aura_env.Stack.new(aura_env.config.soulShardStackMaxSize) -aura_env.AgonyStack = aura_env.Stack.new(aura_env.config.agonyStackMaxSize) -aura_env.Display = "" -aura_env.SoulShards = 0 -aura_env.PlayerName = UnitName("player") - -aura_env.UpdateDisplay = function() - local shards = string.format("%-8s %-7.2f/m", "Shards: ", aura_env.SoulShardStack:PerSecond() * 60) - local agony = string.format("%-8s %-7.2f/m", "Agony: ", aura_env.AgonyStack:PerSecond() * 60) - aura_env.Display = string.format("%s\n%s", shards, agony) -end +---@class Stack +---@field maxSize number +---@field values table +aura_env.Stack = { + ---@param maxSize number + ---@return Stack + new = function(maxSize) + local self = setmetatable({}, { + __index = aura_env.Stack, + }) + self.maxSize = maxSize + self.values = {} + return self + end, + ---@param self Stack + ---@param value number + Push = function(self, value) + table.insert(self.values, 0, value) + if #self.values > self.maxSize then table.remove(self.values, #self.values) end + end, + ---@param self Stack + ---@return number + PerSecond = function(self) + local first = self.values[#self.values] + local last = time() + + if first and last then return #self.values / (math.max(last - first, 1)) end + return 0 + end, + ---@param self Stack + ---@param threshold number? + CleanOld = function(self, threshold) + local timeThresh = time() - (threshold or aura_env.config.combatMemoryTime) + -- print(string.format("Clean %d %d", #self.values, timeThresh)) + for i = #self.values, 1, -1 do + if self.values[i] < timeThresh then table.remove(self.values, i) end + end + -- print(string.format("Clean after %d", #self.values)) + end, +} + +aura_env.SoulShardStack = aura_env.Stack.new(aura_env.config.soulShardStackMaxSize) +aura_env.AgonyStack = aura_env.Stack.new(aura_env.config.agonyStackMaxSize) +aura_env.Display = "" +aura_env.SoulShards = 0 +aura_env.PlayerName = UnitName("player") + +aura_env.UpdateDisplay = function() + local shards = string.format("%-8s %-7.2f/m", "Shards: ", aura_env.SoulShardStack:PerSecond() * 60) + local agony = string.format("%-8s %-7.2f/m", "Agony: ", aura_env.AgonyStack:PerSecond() * 60) + aura_env.Display = string.format("%s\n%s", shards, agony) +end diff --git a/Complete Projects/Legion/Shield proc.lua b/WeakAuras/Projects/Shield proc.lua similarity index 95% rename from Complete Projects/Legion/Shield proc.lua rename to WeakAuras/Projects/Shield proc.lua index 3ac1892..ebbf2cd 100644 --- a/Complete Projects/Legion/Shield proc.lua +++ b/WeakAuras/Projects/Shield proc.lua @@ -1,27 +1,27 @@ ---COMBAT_LOG_EVENT_UNFILTERED -function(...) - local subevent = select(3, ...) - if subevent == "SPELL_CAST_SUCCESS" then - local caster = select(6, ...) - local spell = select(14, ...) - if caster == UnitName("player") and spell == "Hammer of the Righteous" then - aura_env.hammers = aura_env.hammers + 1 - end - end -end - ---SPELL_ACTIVATION_OVERLAY_GLOW_SHOW -function(_,ID) - if ID == 31935 then - aura_env.shields = aura_env.shields + 1 - end -end - ---DISPLAY -function() - return aura_env.shields / aura_env.hammers -end - ---INIT -aura_env.hammers = 0 +--COMBAT_LOG_EVENT_UNFILTERED +function(...) + local subevent = select(3, ...) + if subevent == "SPELL_CAST_SUCCESS" then + local caster = select(6, ...) + local spell = select(14, ...) + if caster == UnitName("player") and spell == "Hammer of the Righteous" then + aura_env.hammers = aura_env.hammers + 1 + end + end +end + +--SPELL_ACTIVATION_OVERLAY_GLOW_SHOW +function(_,ID) + if ID == 31935 then + aura_env.shields = aura_env.shields + 1 + end +end + +--DISPLAY +function() + return aura_env.shields / aura_env.hammers +end + +--INIT +aura_env.hammers = 0 aura_env.shields = 0 \ No newline at end of file diff --git a/Complete Projects/Legion/Shin Thing.lua b/WeakAuras/Projects/Shin Thing.lua similarity index 97% rename from Complete Projects/Legion/Shin Thing.lua rename to WeakAuras/Projects/Shin Thing.lua index 74ab949..f30de4d 100644 --- a/Complete Projects/Legion/Shin Thing.lua +++ b/WeakAuras/Projects/Shin Thing.lua @@ -1,15 +1,15 @@ ---EVERY FRAME TRIGGER -function() - local buffs = {"Greater Blessing of Kings", "Greater Blessing of Wisdom"} --Define buffs to look for - for k,v in ipairs(buffs) do --Go through array looking for each buff - if UnitBuff("player", v) then --If it finds the buff then - aura_env.icon = select(3, UnitBuff("player", v)) --Gets the icon and stores it in a protected variable - return true --Returns true to show aura - end - end -end - ---ICON INFO -function() - return aura_env.icon --Returns icon stored previously +--EVERY FRAME TRIGGER +function() + local buffs = {"Greater Blessing of Kings", "Greater Blessing of Wisdom"} --Define buffs to look for + for k,v in ipairs(buffs) do --Go through array looking for each buff + if UnitBuff("player", v) then --If it finds the buff then + aura_env.icon = select(3, UnitBuff("player", v)) --Gets the icon and stores it in a protected variable + return true --Returns true to show aura + end + end +end + +--ICON INFO +function() + return aura_env.icon --Returns icon stored previously end \ No newline at end of file diff --git a/Complete Projects/Legion/Skinning Skill.lua b/WeakAuras/Projects/Skinning Skill.lua similarity index 95% rename from Complete Projects/Legion/Skinning Skill.lua rename to WeakAuras/Projects/Skinning Skill.lua index db3b94a..157b083 100644 --- a/Complete Projects/Legion/Skinning Skill.lua +++ b/WeakAuras/Projects/Skinning Skill.lua @@ -1,11 +1,11 @@ -DISPLAY -function() - local profSkill = select(3, GetProfessionInfo(6)) - local maxSkill = select(4, GetProfessionInfo(6)) - return profSkill .. "/" .. maxSkill -end - -CHAT_MSG_SKILL -function() - return true +DISPLAY +function() + local profSkill = select(3, GetProfessionInfo(6)) + local maxSkill = select(4, GetProfessionInfo(6)) + return profSkill .. "/" .. maxSkill +end + +CHAT_MSG_SKILL +function() + return true end \ No newline at end of file diff --git a/Complete Projects/Legion/SoTR Counter.lua b/WeakAuras/Projects/SoTR Counter.lua similarity index 95% rename from Complete Projects/Legion/SoTR Counter.lua rename to WeakAuras/Projects/SoTR Counter.lua index 7fa1729..54497af 100644 --- a/Complete Projects/Legion/SoTR Counter.lua +++ b/WeakAuras/Projects/SoTR Counter.lua @@ -1,25 +1,25 @@ -EVERY FRAME TRIGGER -function() - local charges = GetSpellCharges("Shield of the Righteous") - if charges ~= aura_env.oldcharges then - aura_env.time = (GetTime() * 1000) + 250 - aura_env.oldcharges = charges - return true - end - aura_env.oldcharges = charges - if aura_env.time > GetTime() * 1000 then - return true - else - return false - end -end - -DISPLAY -function() - local charges = GetSpellCharges("Shield of the Righteous") - return charges -end - -INIT -aura_env.time = GetTime() +EVERY FRAME TRIGGER +function() + local charges = GetSpellCharges("Shield of the Righteous") + if charges ~= aura_env.oldcharges then + aura_env.time = (GetTime() * 1000) + 250 + aura_env.oldcharges = charges + return true + end + aura_env.oldcharges = charges + if aura_env.time > GetTime() * 1000 then + return true + else + return false + end +end + +DISPLAY +function() + local charges = GetSpellCharges("Shield of the Righteous") + return charges +end + +INIT +aura_env.time = GetTime() aura_env.oldcharges = 0 \ No newline at end of file diff --git a/LegionWA/SoTR Counter/Event.lua b/WeakAuras/Projects/SoTR Counter/Event.lua similarity index 96% rename from LegionWA/SoTR Counter/Event.lua rename to WeakAuras/Projects/SoTR Counter/Event.lua index 82928e4..976fe42 100644 --- a/LegionWA/SoTR Counter/Event.lua +++ b/WeakAuras/Projects/SoTR Counter/Event.lua @@ -1,8 +1,8 @@ --- SPELL_UPDATE_CHARGES -function(e) - local charges = aura_env.getCharges() - if (charges ~= aura_env.currentCharges) then - aura_env.currentCharges = charges - return true - end +-- SPELL_UPDATE_CHARGES +function(e) + local charges = aura_env.getCharges() + if (charges ~= aura_env.currentCharges) then + aura_env.currentCharges = charges + return true + end end \ No newline at end of file diff --git a/LegionWA/SoTR Counter/Export b/WeakAuras/Projects/SoTR Counter/Export similarity index 100% rename from LegionWA/SoTR Counter/Export rename to WeakAuras/Projects/SoTR Counter/Export diff --git a/LegionWA/SoTR Counter/Init.lua b/WeakAuras/Projects/SoTR Counter/Init.lua similarity index 97% rename from LegionWA/SoTR Counter/Init.lua rename to WeakAuras/Projects/SoTR Counter/Init.lua index a2501a6..cbb61f0 100644 --- a/LegionWA/SoTR Counter/Init.lua +++ b/WeakAuras/Projects/SoTR Counter/Init.lua @@ -1,3 +1,3 @@ -aura_env.getCharges = function() return select(1, GetSpellCharges(53600)) end - -aura_env.currentCharges = 0 +aura_env.getCharges = function() return select(1, GetSpellCharges(53600)) end + +aura_env.currentCharges = 0 diff --git a/LegionWA/SoTR Counter/Text.lua b/WeakAuras/Projects/SoTR Counter/Text.lua similarity index 95% rename from LegionWA/SoTR Counter/Text.lua rename to WeakAuras/Projects/SoTR Counter/Text.lua index ef31c66..8a218ed 100644 --- a/LegionWA/SoTR Counter/Text.lua +++ b/WeakAuras/Projects/SoTR Counter/Text.lua @@ -1,3 +1,3 @@ -function() - return aura_env.getCharges() +function() + return aura_env.getCharges() end \ No newline at end of file diff --git a/Complete Projects/Legion/SoTR Mitigation.lua b/WeakAuras/Projects/SoTR Mitigation.lua similarity index 95% rename from Complete Projects/Legion/SoTR Mitigation.lua rename to WeakAuras/Projects/SoTR Mitigation.lua index 09ec82c..c97a8ef 100644 --- a/Complete Projects/Legion/SoTR Mitigation.lua +++ b/WeakAuras/Projects/SoTR Mitigation.lua @@ -1,55 +1,55 @@ ---[[ -[08:58 PM] Dump: value=UnitBuff("player","Shield of the Righteous") -[08:58 PM] [1]="Shield of the Righteous", -[08:58 PM] [2]="", -[08:58 PM] [3]=236265, -[08:58 PM] [4]=0, -[08:58 PM] [6]=4.5, -[08:58 PM] [7]=34675.812, -[08:58 PM] [8]="player", -[08:58 PM] [9]=false, -[08:58 PM] [10]=true, -[08:58 PM] [11]=132403, -[08:58 PM] [12]=false, -[08:58 PM] [13]=false, -[08:58 PM] [14]=true, -[08:58 PM] [15]=false, -[08:58 PM] [16]=1, -[08:58 PM] [17]=-60 - - -01:05 PM] [Virag's DT]: 1 - COMBAT_LOG_EVENT_UNFILTERED -[01:05 PM] [Virag's DT]: 3 - SPELL_AURA_APPLIED -[01:05 PM] [Virag's DT]: 6 - Pinkiepiie -[01:05 PM] [Virag's DT]: 14 - Shield of the Righteous -[01:05 PM] [Virag's DT]: 16 - BUFF -]] - ---EVERY FRAME -function() - if UnitBuff("player", "Shield of the Righteous") then - return true - else - aura_env.mitigation = 0 - return false - end -end - ---COMBAT_LOG_EVENT_UNFILTERED -function(...) - local e = select(3, ...) - if e == "SPELL_AURA_APPLIED" then - local caster = select(6, ...) - local name = select(14, ...) - if caster == UnitName("player") and name == "Shield of the Righteous" then - aura_env.mitigation = abs(select(17, UnitBuff("player", "Shield of the Righteous"))) - end - end -end - ---DISPLAY -function() - if aura_env.mitigation then - return aura_env.mitigation .. "%" - end +--[[ +[08:58 PM] Dump: value=UnitBuff("player","Shield of the Righteous") +[08:58 PM] [1]="Shield of the Righteous", +[08:58 PM] [2]="", +[08:58 PM] [3]=236265, +[08:58 PM] [4]=0, +[08:58 PM] [6]=4.5, +[08:58 PM] [7]=34675.812, +[08:58 PM] [8]="player", +[08:58 PM] [9]=false, +[08:58 PM] [10]=true, +[08:58 PM] [11]=132403, +[08:58 PM] [12]=false, +[08:58 PM] [13]=false, +[08:58 PM] [14]=true, +[08:58 PM] [15]=false, +[08:58 PM] [16]=1, +[08:58 PM] [17]=-60 + + +01:05 PM] [Virag's DT]: 1 - COMBAT_LOG_EVENT_UNFILTERED +[01:05 PM] [Virag's DT]: 3 - SPELL_AURA_APPLIED +[01:05 PM] [Virag's DT]: 6 - Pinkiepiie +[01:05 PM] [Virag's DT]: 14 - Shield of the Righteous +[01:05 PM] [Virag's DT]: 16 - BUFF +]] + +--EVERY FRAME +function() + if UnitBuff("player", "Shield of the Righteous") then + return true + else + aura_env.mitigation = 0 + return false + end +end + +--COMBAT_LOG_EVENT_UNFILTERED +function(...) + local e = select(3, ...) + if e == "SPELL_AURA_APPLIED" then + local caster = select(6, ...) + local name = select(14, ...) + if caster == UnitName("player") and name == "Shield of the Righteous" then + aura_env.mitigation = abs(select(17, UnitBuff("player", "Shield of the Righteous"))) + end + end +end + +--DISPLAY +function() + if aura_env.mitigation then + return aura_env.mitigation .. "%" + end end \ No newline at end of file diff --git a/LegionWA/SoTR Texture/Export b/WeakAuras/Projects/SoTR Texture/Export similarity index 100% rename from LegionWA/SoTR Texture/Export rename to WeakAuras/Projects/SoTR Texture/Export diff --git a/LegionWA/SoTR Texture/Init.lua b/WeakAuras/Projects/SoTR Texture/Init.lua similarity index 95% rename from LegionWA/SoTR Texture/Init.lua rename to WeakAuras/Projects/SoTR Texture/Init.lua index 85f0704..27d5f4b 100644 --- a/LegionWA/SoTR Texture/Init.lua +++ b/WeakAuras/Projects/SoTR Texture/Init.lua @@ -1,6 +1,6 @@ -aura_env.findAura = function(LFname) - for i = 1, 40 do - local name = UnitAura("player", i) - if name == LFname then return i end - end -end +aura_env.findAura = function(LFname) + for i = 1, 40 do + local name = UnitAura("player", i) + if name == LFname then return i end + end +end diff --git a/LegionWA/SoTR Texture/Text.lua b/WeakAuras/Projects/SoTR Texture/Text.lua similarity index 98% rename from LegionWA/SoTR Texture/Text.lua rename to WeakAuras/Projects/SoTR Texture/Text.lua index 256a89f..5567842 100644 --- a/LegionWA/SoTR Texture/Text.lua +++ b/WeakAuras/Projects/SoTR Texture/Text.lua @@ -1,3 +1,3 @@ -function() - return -select(17, UnitAura("player", aura_env.findAura("Shield of the Righteous"))) .. "%" +function() + return -select(17, UnitAura("player", aura_env.findAura("Shield of the Righteous"))) .. "%" end \ No newline at end of file diff --git a/WIP/Some Premade Documentation.lua b/WeakAuras/Projects/Some Premade Documentation.lua similarity index 97% rename from WIP/Some Premade Documentation.lua rename to WeakAuras/Projects/Some Premade Documentation.lua index 11510e3..b5ca285 100644 --- a/WIP/Some Premade Documentation.lua +++ b/WeakAuras/Projects/Some Premade Documentation.lua @@ -1,2977 +1,2977 @@ -------------------------------------------------------- -----------Constants -------------------------------------------------------- -MAX_LFG_LIST_APPLICATIONS = 5 -MAX_LFG_LIST_SEARCH_AUTOCOMPLETE_ENTRIES = 6 -MAX_LFG_LIST_GROUP_DROPDOWN_ENTRIES = 10 -LFG_LIST_DELISTED_FONT_COLOR = { r = 0.3, g = 0.3, b = 0.3 } -LFG_LIST_COMMENT_FONT_COLOR = { r = 0.6, g = 0.6, b = 0.6 } - -ACTIVITY_RETURN_VALUES = { - fullName = 1, - shortName = 2, - categoryID = 3, - groupID = 4, - itemLevel = 5, - filters = 6, - minLevel = 7, - maxPlayers = 8, - displayType = 9, - orderIndex = 10, - useHonorLevel = 11, -} - ---Hard-coded values. Should probably make these part of the DB, but it gets a little more complicated with the per-expansion textures -LFG_LIST_CATEGORY_TEXTURES = { - [1] = "questing", - [2] = "dungeons", - [3] = "raids", --Prefix for expansion - [4] = "arenas", - [5] = "scenarios", - [6] = "custom", -- Prefix for "-pve" or "-pvp" - [7] = "skirmishes", - [8] = "battlegrounds", - [9] = "ratedbgs", - [10] = "ashran", -} - -LFG_LIST_PER_EXPANSION_TEXTURES = { - [0] = "classic", - [1] = "bc", - [2] = "wrath", - [3] = "cataclysm", - [4] = "mists", - [5] = "warlords", - [6] = "legion", -} - -LFG_LIST_GROUP_DATA_ATLASES = { - --Roles - TANK = "groupfinder-icon-role-large-tank", - HEALER = "groupfinder-icon-role-large-heal", - DAMAGER = "groupfinder-icon-role-large-dps", -} - ---Fill out classes -for i = 1, #CLASS_SORT_ORDER do - LFG_LIST_GROUP_DATA_ATLASES[CLASS_SORT_ORDER[i]] = "groupfinder-icon-class-" .. string.lower(CLASS_SORT_ORDER[i]) -end - -LFG_LIST_GROUP_DATA_ROLE_ORDER = { "TANK", "HEALER", "DAMAGER" } -LFG_LIST_GROUP_DATA_CLASS_ORDER = CLASS_SORT_ORDER - -StaticPopupDialogs["LFG_LIST_INVITING_CONVERT_TO_RAID"] = { - text = LFG_LIST_CONVERT_TO_RAID_WARNING, - button1 = INVITE, - button2 = CANCEL, - OnAccept = function(self, applicantID) - ConvertToRaid() - C_LFGList.InviteApplicant(applicantID) - end, - timeout = 0, - whileDead = 1, - hideOnEscape = 1, -} - -------------------------------------------------------- -----------Base Frame -------------------------------------------------------- -LFG_LIST_EDIT_BOX_TAB_CATEGORIES = {} -function LFGListFrame_OnLoad(self) - self:RegisterEvent("PARTY_LEADER_CHANGED") - self:RegisterEvent("GROUP_ROSTER_UPDATE") - self:RegisterEvent("PLAYER_SPECIALIZATION_CHANGED") - self:RegisterEvent("PLAYER_ROLES_ASSIGNED") - self:RegisterEvent("LFG_LIST_AVAILABILITY_UPDATE") - self:RegisterEvent("LFG_LIST_ACTIVE_ENTRY_UPDATE") - self:RegisterEvent("LFG_LIST_ENTRY_CREATION_FAILED") - self:RegisterEvent("LFG_LIST_SEARCH_RESULTS_RECEIVED") - self:RegisterEvent("LFG_LIST_SEARCH_RESULT_UPDATED") - self:RegisterEvent("LFG_LIST_SEARCH_FAILED") - self:RegisterEvent("LFG_LIST_APPLICANT_LIST_UPDATED") - self:RegisterEvent("LFG_LIST_APPLICANT_UPDATED") - self:RegisterEvent("LFG_LIST_ENTRY_EXPIRED_TOO_MANY_PLAYERS") - self:RegisterEvent("LFG_LIST_ENTRY_EXPIRED_TIMEOUT") - self:RegisterEvent("LFG_LIST_APPLICATION_STATUS_UPDATED") - self:RegisterEvent("VARIABLES_LOADED") - self:RegisterEvent("ADDON_LOADED") - self:RegisterEvent("UNIT_CONNECTION") - for i = 1, #LFG_LIST_ACTIVE_QUEUE_MESSAGE_EVENTS do - self:RegisterEvent(LFG_LIST_ACTIVE_QUEUE_MESSAGE_EVENTS[i]) - end - LFGListFrame_SetBaseFilters(self, LE_LFG_LIST_FILTER_PVE) - LFGListFrame_SetActivePanel(self, self.NothingAvailable) - - self.EventsInBackground = { - LFG_LIST_SEARCH_FAILED = { self.SearchPanel }, - } -end - -function LFGListFrame_OnEvent(self, event, ...) - if event == "LFG_LIST_AVAILABILITY_UPDATE" then - LFGListFrame_FixPanelValid(self) - elseif event == "LFG_LIST_ACTIVE_ENTRY_UPDATE" then - local createdNew = ... - LFGListFrame_FixPanelValid(self) --If our current panel isn't valid, change it. - if C_LFGList.GetActiveEntryInfo() then self.EntryCreation.WorkingCover:Hide() end - if createdNew then PlaySound("PVPEnterQueue") end - elseif event == "LFG_LIST_ENTRY_CREATION_FAILED" then - self.EntryCreation.WorkingCover:Hide() - elseif event == "LFG_LIST_APPLICANT_LIST_UPDATED" then - local hasNewPending, hasNewPendingWithData = ... - if hasNewPending and hasNewPendingWithData and LFGListUtil_IsEntryEmpowered() then - local isLeader = UnitIsGroupLeader("player", LE_PARTY_CATEGORY_HOME) - local autoAccept = select(9, C_LFGList.GetActiveEntryInfo()) - local numPings = nil - if not isLeader then numPings = 6 end - --Non-leaders don't get another ping until they open the panel or we reset the count to 0 - if isLeader or not self.stopAssistPings then - if autoAccept then - --Check if we would be auto-inviting more people if we were in a raid - if - not IsInRaid(LE_PARTY_CATEGORY_HOME) - and GetNumGroupMembers(LE_PARTY_CATEGORY_HOME) - + C_LFGList.GetNumInvitedApplicantMembers() - + C_LFGList.GetNumPendingApplicantMembers() - > (MAX_PARTY_MEMBERS + 1) - then - if self.displayedAutoAcceptConvert then - QueueStatusMinimapButton_SetGlowLock( - QueueStatusMinimapButton, - "lfglist-applicant", - true, - numPings - ) - self.stopAssistPings = true - else - self.displayedAutoAcceptConvert = true - StaticPopup_Show("LFG_LIST_AUTO_ACCEPT_CONVERT_TO_RAID") - end - end - elseif not self:IsVisible() then - QueueStatusMinimapButton_SetGlowLock(QueueStatusMinimapButton, "lfglist-applicant", true, numPings) - self.stopAssistPings = true - end - end - end - elseif event == "LFG_LIST_APPLICANT_UPDATED" then - local numApps, numActiveApps = C_LFGList.GetNumApplicants() - if numActiveApps == 0 then - QueueStatusMinimapButton_SetGlowLock(QueueStatusMinimapButton, "lfglist-applicant", false) - self.stopAssistPings = false - end - elseif event == "LFG_LIST_ENTRY_EXPIRED_TOO_MANY_PLAYERS" then - if UnitIsGroupLeader("player", LE_PARTY_CATEGORY_HOME) then - StaticPopup_Show("LFG_LIST_ENTRY_EXPIRED_TOO_MANY_PLAYERS") - end - elseif event == "LFG_LIST_ENTRY_EXPIRED_TIMEOUT" then - if UnitIsGroupLeader("player", LE_PARTY_CATEGORY_HOME) then - StaticPopup_Show("LFG_LIST_ENTRY_EXPIRED_TIMEOUT") - end - elseif event == "LFG_LIST_APPLICATION_STATUS_UPDATED" then - local id, newStatus, oldStatus = ... - if newStatus == "declined" then - local info = ChatTypeInfo["SYSTEM"] - local id, activity, name = C_LFGList.GetSearchResultInfo(id) - DEFAULT_CHAT_FRAME:AddMessage(string.format(LFG_LIST_APP_DECLINED_MESSAGE, name), info.r, info.g, info.b) - elseif newStatus == "timedout" then - local info = ChatTypeInfo["SYSTEM"] - local id, activity, name = C_LFGList.GetSearchResultInfo(id) - DEFAULT_CHAT_FRAME:AddMessage(string.format(LFG_LIST_APP_TIMED_OUT_MESSAGE, name), info.r, info.g, info.b) - end - elseif event == "VARIABLES_LOADED" or event == "ADDON_LOADED" then - if not GetCVarBitfield("closedInfoFrames", LE_FRAME_TUTORIAL_LFG_LIST) and UnitLevel("player") >= 90 then - PremadeGroupsPvETutorialAlert:Show() - if PremadeGroupsPvPTutorialAlert then PremadeGroupsPvPTutorialAlert:Show() end - end - elseif event == "GROUP_ROSTER_UPDATE" then - if not IsInGroup(LE_PARTY_CATEGORY_HOME) then self.displayedAutoAcceptConvert = false end - end - - --Dispatch the event to our currently active panel - local onEvent = self.activePanel and self.activePanel:GetScript("OnEvent") - if onEvent then onEvent(self.activePanel, event, ...) end - - --Dispatch the event to any panels that want the event in the background - local bg = self.EventsInBackground[event] - if bg then - for i = 1, #bg do - if bg[i] ~= self.activePanel then bg[i]:GetScript("OnEvent")(bg[i], event, ...) end - end - end -end - -function LFGListFrame_OnShow(self) - LFGListFrame_FixPanelValid(self) - C_LFGList.RequestAvailableActivities() - self.stopAssistPings = false - QueueStatusMinimapButton_SetGlowLock(QueueStatusMinimapButton, "lfglist-applicant", false) - PlaySound("igCharacterInfoOpen") -end - -function LFGListFrame_SetActivePanel(self, panel) - if self.activePanel then self.activePanel:Hide() end - self.activePanel = panel - self.activePanel:Show() -end - -function LFGListFrame_IsPanelValid(self, panel) - local listed = C_LFGList.GetActiveEntryInfo() - - --If we're listed, make sure we're either viewing applicants or editing our group - if - listed - and panel ~= self.ApplicationViewer - and not (panel == self.EntryCreation and LFGListEntryCreation_IsEditMode(self.EntryCreation)) - then - return false - end - - --If we're not listed, we can't be viewing applicants or editing our group - if - not listed - and ( - panel == self.ApplicationViewer - or (panel == self.EntryCreation and LFGListEntryCreation_IsEditMode(self.EntryCreation)) - ) - then - return false - end - - --Make sure we aren't creating a new entry with different baseFilters - if panel == self.EntryCreation then - if - not LFGListEntryCreation_IsEditMode(self.EntryCreation) - and self.baseFilters ~= self.EntryCreation.baseFilters - then - return false - end - end - - --Make sure we aren't searching with different baseFilters - if panel == self.SearchPanel then - if self.baseFilters ~= self.SearchPanel.preferredFilters then return false end - end - - --If we're a trial account, we can only see the NothingAvailable and ApplicationViewer - if IsRestrictedAccount() then - if panel ~= self.NothingAvailable and panel ~= self.ApplicationViewer then return false end - end - - --If we don't have any available activities, say so - if #C_LFGList.GetAvailableCategories(self.baseFilters) == 0 then - if panel == self.CategorySelection then return false end - else - if panel == self.NothingAvailable and not IsRestrictedAccount() then return false end - end - - return true -end - -function LFGListFrame_GetBestPanel(self) - local listed = C_LFGList.GetActiveEntryInfo() - - if listed then - return self.ApplicationViewer - elseif IsRestrictedAccount() then - return self.NothingAvailable - elseif #C_LFGList.GetAvailableCategories(self.baseFilters) == 0 then - return self.NothingAvailable - else - return self.CategorySelection - end -end - -function LFGListFrame_FixPanelValid(self) - if not LFGListFrame_IsPanelValid(self, self.activePanel) then - LFGListFrame_SetActivePanel(self, LFGListFrame_GetBestPanel(self)) - end -end - -function LFGListFrame_SetBaseFilters(self, filters) - self.baseFilters = filters - - --If we need to change panels, do so - LFGListFrame_FixPanelValid(self) - - --Update the current panel - if self.activePanel and self.activePanel.updateAll then self.activePanel.updateAll(self.activePanel) end -end - -------------------------------------------------------- -----------Nothing available frame -------------------------------------------------------- -function LFGListNothingAvailable_OnEvent(self, event, ...) - --Note: events are dispatched from the base frame. Add RegisterEvent there. - if event == "LFG_LIST_AVAILABILITY_UPDATE" then LFGListNothingAvailable_Update(self) end -end - -function LFGListNothingAvailable_Update(self) - if IsRestrictedAccount() then - self.Label:SetText(ERR_RESTRICTED_ACCOUNT_LFG_LIST_TRIAL) - elseif C_LFGList.HasActivityList() then - self.Label:SetText(NO_LFG_LIST_AVAILABLE) - else - self.Label:SetText(LFG_LIST_LOADING) - end -end - -------------------------------------------------------- -----------Category selection -------------------------------------------------------- -function LFGListCategorySelection_OnLoad(self) LFGListCategorySelection_UpdateNavButtons(self) end - -function LFGListCategorySelection_OnEvent(self, event, ...) - --Note: events are dispatched from the base frame. Add RegisterEvent there. - if event == "LFG_LIST_AVAILABILITY_UPDATE" then LFGListCategorySelection_UpdateCategoryButtons(self) end - - if tContains(LFG_LIST_ACTIVE_QUEUE_MESSAGE_EVENTS, event) then LFGListCategorySelection_UpdateNavButtons(self) end -end - -function LFGListCategorySelection_OnShow(self) - LFGListCategorySelection_UpdateCategoryButtons(self) - LFGListCategorySelection_UpdateNavButtons(self) -end - -function LFGListCategorySelection_UpdateCategoryButtons(self) - local baseFilters = self:GetParent().baseFilters - local categories = C_LFGList.GetAvailableCategories(baseFilters) - - local nextBtn = 1 - local hasSelected = false - - --Update category buttons - for i = 1, #categories do - local isSelected = false - local categoryID = categories[i] - local name, separateRecommended = C_LFGList.GetCategoryInfo(categoryID) - - if separateRecommended then - nextBtn, isSelected = - LFGListCategorySelection_AddButton(self, nextBtn, categoryID, LE_LFG_LIST_FILTER_RECOMMENDED) - hasSelected = hasSelected or isSelected - nextBtn, isSelected = - LFGListCategorySelection_AddButton(self, nextBtn, categoryID, LE_LFG_LIST_FILTER_NOT_RECOMMENDED) - else - nextBtn, isSelected = LFGListCategorySelection_AddButton(self, nextBtn, categoryID, 0) - end - - hasSelected = hasSelected or isSelected - end - - --Hide any extra buttons - for i = nextBtn, #self.CategoryButtons do - self.CategoryButtons[i]:Hide() - end - - --If the selected item isn't in the list, deselect it - if self.selectedCategory and not hasSelected then LFGListCategorySelection_SelectCategory(self, nil, nil) end -end - -function LFGListCategorySelection_AddButton(self, btnIndex, categoryID, filters) - --Check that we have activities with this filter - local baseFilters = self:GetParent().baseFilters - local allFilters = bit.bor(baseFilters, filters) - - if filters ~= 0 and #C_LFGList.GetAvailableActivities(categoryID, nil, allFilters) == 0 then - return btnIndex, false - end - - local name, separateRecommended = C_LFGList.GetCategoryInfo(categoryID) - - local button = self.CategoryButtons[btnIndex] - if not button then - self.CategoryButtons[btnIndex] = CreateFrame("BUTTON", nil, self, "LFGListCategoryTemplate") - self.CategoryButtons[btnIndex]:SetPoint("TOP", self.CategoryButtons[btnIndex - 1], "BOTTOM", 0, -3) - button = self.CategoryButtons[btnIndex] - end - - button:SetText(LFGListUtil_GetDecoratedCategoryName(name, filters, true)) - button.categoryID = categoryID - button.filters = filters - - local atlasName = nil - if bit.band(allFilters, LE_LFG_LIST_FILTER_RECOMMENDED) ~= 0 then - atlasName = "groupfinder-button-" - .. (LFG_LIST_CATEGORY_TEXTURES[categoryID] or "raids") - .. "-" - .. LFG_LIST_PER_EXPANSION_TEXTURES[LFGListUtil_GetCurrentExpansion()] - elseif bit.band(allFilters, LE_LFG_LIST_FILTER_NOT_RECOMMENDED) ~= 0 then - atlasName = "groupfinder-button-" - .. (LFG_LIST_CATEGORY_TEXTURES[categoryID] or "raids") - .. "-" - .. LFG_LIST_PER_EXPANSION_TEXTURES[math.max(0, LFGListUtil_GetCurrentExpansion() - 1)] - else - atlasName = "groupfinder-button-" .. (LFG_LIST_CATEGORY_TEXTURES[categoryID] or "questing") - end - - local suffix = "" - if bit.band(allFilters, LE_LFG_LIST_FILTER_PVE) ~= 0 then - suffix = "-pve" - elseif bit.band(allFilters, LE_LFG_LIST_FILTER_PVP) ~= 0 then - suffix = "-pvp" - end - - --Try with the suffix and then without it - if not button.Icon:SetAtlas(atlasName .. suffix) then button.Icon:SetAtlas(atlasName) end - - local selected = self.selectedCategory == categoryID and self.selectedFilters == filters - button.SelectedTexture:SetShown(selected) - button:Show() - - return btnIndex + 1, selected -end - -function LFGListCategorySelection_SelectCategory(self, categoryID, filters) - self.selectedCategory = categoryID - self.selectedFilters = filters - LFGListCategorySelection_UpdateCategoryButtons(self) - LFGListCategorySelection_UpdateNavButtons(self) -end - -function LFGListCategorySelection_UpdateNavButtons(self) - local findEnabled, startEnabled = true, true - self.FindGroupButton.tooltip = nil - self.StartGroupButton.tooltip = nil - - --Check if the user needs to select a category - if not self.selectedCategory then - findEnabled = false - self.FindGroupButton.tooltip = LFG_LIST_SELECT_A_CATEGORY - startEnabled = false - self.StartGroupButton.tooltip = LFG_LIST_SELECT_A_CATEGORY - end - - --Check if the user can't start a group due to not being a leader - if IsInGroup(LE_PARTY_CATEGORY_HOME) and not UnitIsGroupLeader("player", LE_PARTY_CATEGORY_HOME) then - startEnabled = false - self.StartGroupButton.tooltip = LFG_LIST_NOT_LEADER - end - - --Check if the player is currently in some incompatible queue - local messageStart = LFGListUtil_GetActiveQueueMessage(false) - if messageStart then - startEnabled = false - self.StartGroupButton.tooltip = messageStart - end - - self.FindGroupButton:SetEnabled(findEnabled) - self.StartGroupButton:SetEnabled(startEnabled) -end - -function LFGListCategorySelectionStartGroupButton_OnClick(self) - local panel = self:GetParent() - if not panel.selectedCategory then return end - - PlaySound("igMainMenuOptionCheckBoxOn") - - local baseFilters = panel:GetParent().baseFilters - - local entryCreation = panel:GetParent().EntryCreation - - LFGListEntryCreation_Show(entryCreation, baseFilters, panel.selectedCategory, panel.selectedFilters) -end - -function LFGListCategorySelectionFindGroupButton_OnClick(self) - local panel = self:GetParent() - if not panel.selectedCategory then return end - - PlaySound("igMainMenuOptionCheckBoxOn") - - local baseFilters = panel:GetParent().baseFilters - - local searchPanel = panel:GetParent().SearchPanel - LFGListSearchPanel_Clear(searchPanel) - LFGListSearchPanel_SetCategory(searchPanel, panel.selectedCategory, panel.selectedFilters, baseFilters) - LFGListSearchPanel_DoSearch(searchPanel) - LFGListFrame_SetActivePanel(panel:GetParent(), searchPanel) -end - ---The individual category buttons -function LFGListCategorySelectionButton_OnClick(self) - local panel = self:GetParent() - PlaySound("igMainMenuOptionCheckBoxOn") - LFGListCategorySelection_SelectCategory(panel, self.categoryID, self.filters) -end - -------------------------------------------------------- -----------List Entry Creation -------------------------------------------------------- -function LFGListEntryCreation_OnLoad(self) - self.Name.Instructions:SetText(LFG_LIST_ENTER_NAME) - self.Description.EditBox:SetScript("OnEnterPressed", nop) - LFGListUtil_SetUpDropDown( - self, - self.CategoryDropDown, - LFGListEntryCreation_PopulateCategories, - LFGListEntryCreation_OnCategorySelected - ) - LFGListUtil_SetUpDropDown( - self, - self.GroupDropDown, - LFGListEntryCreation_PopulateGroups, - LFGListEntryCreation_OnGroupSelected - ) - LFGListUtil_SetUpDropDown( - self, - self.ActivityDropDown, - LFGListEntryCreation_PopulateActivities, - LFGListEntryCreation_OnActivitySelected - ) - LFGListEntryCreation_SetBaseFilters(self, 0) -end - -function LFGListEntryCreation_OnEvent(self, event, ...) - if event == "GROUP_ROSTER_UPDATE" then - LFGListEntryCreation_UpdateValidState(self) - elseif tContains(LFG_LIST_ACTIVE_QUEUE_MESSAGE_EVENTS, event) then - LFGListEntryCreation_UpdateValidState(self) - end -end - -function LFGListEntryCreation_OnShow(self) LFGListEntryCreation_UpdateValidState(self) end - -function LFGListEntryCreation_Show(self, baseFilters, selectedCategory, selectedFilters) - --If this was what the player selected last time, just leave it filled out with the same info. - --Also don't save it for categories that try to set it to the current area. - local _, _, _, preferCurrentArea = C_LFGList.GetCategoryInfo(selectedCategory) - local keepOldData = not preferCurrentArea - and self.selectedCategory == selectedCategory - and baseFilters == self.baseFilters - and self.selectedFilters == selectedFilters - LFGListEntryCreation_SetBaseFilters(self, baseFilters) - if not keepOldData then - LFGListEntryCreation_Clear(self) - LFGListEntryCreation_Select(self, selectedFilters, selectedCategory) - end - LFGListEntryCreation_SetEditMode(self, false) - - LFGListEntryCreation_UpdateValidState(self) - - LFGListFrame_SetActivePanel(self:GetParent(), self) - self.Name:SetFocus() -end - -function LFGListEntryCreation_Clear(self) - --Clear selections - self.selectedCategory = nil - self.selectedGroup = nil - self.selectedActivity = nil - self.selectedFilters = nil - - --Reset widgets - self.Name:SetText("") - self.ItemLevel.CheckButton:SetChecked(false) - self.ItemLevel.EditBox:SetText("") - self.HonorLevel.CheckButton:SetChecked(false) - self.HonorLevel.EditBox:SetText("") - self.VoiceChat.CheckButton:SetChecked(false) - self.VoiceChat.EditBox:SetText("") - self.Description.EditBox:SetText("") - - self.ActivityFinder:Hide() -end - -function LFGListEntryCreation_ClearFocus(self) - self.Name:ClearFocus() - self.ItemLevel.EditBox:ClearFocus() - self.HonorLevel.EditBox:ClearFocus() - self.VoiceChat.EditBox:ClearFocus() - self.Description.EditBox:ClearFocus() -end - ---This function accepts any or all of categoryID, groupId, and activityID -function LFGListEntryCreation_Select(self, filters, categoryID, groupID, activityID) - filters, categoryID, groupID, activityID = - LFGListUtil_AugmentWithBest(bit.bor(self.baseFilters, filters or 0), categoryID, groupID, activityID) - self.selectedCategory = categoryID - self.selectedGroup = groupID - self.selectedActivity = activityID - self.selectedFilters = filters - - --Update the category dropdown - local categoryName, _, autoChoose = C_LFGList.GetCategoryInfo(categoryID) - UIDropDownMenu_SetText(self.CategoryDropDown, LFGListUtil_GetDecoratedCategoryName(categoryName, filters, false)) - - --Update the activity dropdown - local _, shortName, _, _, iLevel, _, _, _, _, _, useHonorLevel = C_LFGList.GetActivityInfo(activityID) - UIDropDownMenu_SetText(self.ActivityDropDown, shortName) - - --Update the group dropdown. If the group dropdown is showing an activity, hide the activity dropdown - local groupName = C_LFGList.GetActivityGroupInfo(groupID) - UIDropDownMenu_SetText(self.GroupDropDown, groupName or shortName) - self.ActivityDropDown:SetShown(groupName and not autoChoose) - self.GroupDropDown:SetShown(not autoChoose) - - --Update the recommended item level box - if iLevel ~= 0 then - self.ItemLevel.EditBox.Instructions:SetFormattedText(LFG_LIST_RECOMMENDED_ILVL, iLevel) - else - self.ItemLevel.EditBox.Instructions:SetText(LFG_LIST_ITEM_LEVEL_INSTR_SHORT) - end - - if useHonorLevel then - self.HonorLevel:Show() - self.VoiceChat:SetPoint("TOPLEFT", self.HonorLevel, "BOTTOMLEFT", 0, -5) - else - self.HonorLevel:Hide() - self.VoiceChat:SetPoint("TOPLEFT", self.ItemLevel, "BOTTOMLEFT", 0, -5) - end - - LFGListRequirement_Validate(self.ItemLevel, self.ItemLevel.EditBox:GetText()) - if useHonorLevel then LFGListRequirement_Validate(self.HonorLevel, self.HonorLevel.EditBox:GetText()) end - LFGListEntryCreation_UpdateValidState(self) -end - -function LFGListEntryCreation_PopulateCategories(self, dropDown, info) - local categories = C_LFGList.GetAvailableCategories(self.baseFilters) - for i = 1, #categories do - local categoryID = categories[i] - local name, separateRecommended = C_LFGList.GetCategoryInfo(categoryID) - if separateRecommended then - LFGListEntryCreation_AddCategoryEntry(self, info, categoryID, name, LE_LFG_LIST_FILTER_RECOMMENDED) - LFGListEntryCreation_AddCategoryEntry(self, info, categoryID, name, LE_LFG_LIST_FILTER_NOT_RECOMMENDED) - else - LFGListEntryCreation_AddCategoryEntry(self, info, categoryID, name, 0) - end - end -end - -function LFGListEntryCreation_AddCategoryEntry(self, info, categoryID, name, filters) - if filters ~= 0 and #C_LFGList.GetAvailableActivities(categoryID, nil, filters) == 0 then return end - - info.text = LFGListUtil_GetDecoratedCategoryName(name, filters, false) - info.value = categoryID - info.arg1 = filters - info.checked = (self.selectedCategory == categoryID and self.selectedFilters == filters) - info.isRadio = true - UIDropDownMenu_AddButton(info) -end - -function LFGListEntryCreation_OnCategorySelected(self, categoryID, filters) - LFGListEntryCreation_Select(self, filters, categoryID, nil, nil) -end - -function LFGListEntryCreation_PopulateGroups(self, dropDown, info) - if not self.selectedCategory then - --We don't have a category, so we can't fill out groups. - return - end - - local useMore = false - - --Start out displaying everything - local groups = - C_LFGList.GetAvailableActivityGroups(self.selectedCategory, bit.bor(self.baseFilters, self.selectedFilters)) - local activities = - C_LFGList.GetAvailableActivities(self.selectedCategory, 0, bit.bor(self.baseFilters, self.selectedFilters)) - if self.selectedFilters == 0 then - --We don't bother filtering if we have less than 5 items anyway - if #groups + #activities > 5 then - --Try just displaying the recommended - local filters = bit.bor(self.selectedFilters, self.baseFilters, LE_LFG_LIST_FILTER_RECOMMENDED) - local recGroups = C_LFGList.GetAvailableActivityGroups(self.selectedCategory, filters) - local recActivities = C_LFGList.GetAvailableActivities(self.selectedCategory, 0, filters) - - --If we have some recommended, just display those - if #recGroups + #recActivities > 0 then - --If we still have just as many, we don't need to display more - useMore = #recGroups ~= #groups or #recActivities ~= #activities - groups = recGroups - activities = recActivities - end - end - end - - local groupOrder = groups[1] and select(2, C_LFGList.GetActivityGroupInfo(groups[1])) - local activityOrder = activities[1] and select(10, C_LFGList.GetActivityInfo(activities[1])) - - local groupIndex, activityIndex = 1, 1 - - --Start merging - for i = 1, MAX_LFG_LIST_GROUP_DROPDOWN_ENTRIES do - if not groupOrder and not activityOrder then break end - - if activityOrder and (not groupOrder or activityOrder < groupOrder) then - local activityID = activities[activityIndex] - local name = select(ACTIVITY_RETURN_VALUES.shortName, C_LFGList.GetActivityInfo(activityID)) - - info.text = name - info.value = activityID - info.arg1 = "activity" - info.checked = (self.selectedActivity == activityID) - info.isRadio = true - UIDropDownMenu_AddButton(info) - - activityIndex = activityIndex + 1 - activityOrder = activities[activityIndex] - and select(10, C_LFGList.GetActivityInfo(activities[activityIndex])) - else - local groupID = groups[groupIndex] - local name = C_LFGList.GetActivityGroupInfo(groupID) - - info.text = name - info.value = groupID - info.arg1 = "group" - info.checked = (self.selectedGroup == groupID) - info.isRadio = true - UIDropDownMenu_AddButton(info) - - groupIndex = groupIndex + 1 - groupOrder = groups[groupIndex] and select(2, C_LFGList.GetActivityGroupInfo(groups[groupIndex])) - end - end - - if #activities + #groups > MAX_LFG_LIST_GROUP_DROPDOWN_ENTRIES then useMore = true end - - if useMore then - info.text = LFG_LIST_MORE - info.value = nil - info.arg1 = "more" - info.notCheckable = true - info.checked = false - info.isRadio = false - UIDropDownMenu_AddButton(info) - end -end - -function LFGListEntryCreation_OnGroupSelected(self, id, buttonType) - if buttonType == "activity" then - LFGListEntryCreation_Select(self, nil, nil, nil, id) - elseif buttonType == "group" then - LFGListEntryCreation_Select(self, self.selectedFilters, self.selectedCategory, id, nil) - elseif buttonType == "more" then - LFGListEntryCreationActivityFinder_Show( - self.ActivityFinder, - self.selectedCategory, - nil, - bit.bor(self.baseFilters, self.selectedFilters) - ) - end -end - -function LFGListEntryCreation_PopulateActivities(self, dropDown, info) - local useMore = self.selectedFilters == 0 - - local filters = bit.bor(self.baseFilters, self.selectedFilters) - - --Start out displaying everything - local activities = C_LFGList.GetAvailableActivities(self.selectedCategory, self.selectedGroup, filters) - - --If we're displaying more than 5, see if we can just display recommended - if useMore then - if #activities > 5 then - filters = bit.bor(filters, LE_LFG_LIST_FILTER_RECOMMENDED) - local recActivities = C_LFGList.GetAvailableActivities(self.selectedCategory, self.selectedGroup, filters) - - useMore = #recActivities ~= #activities - if #recActivities > 0 then - activities = recActivities - else - --Just display up to 5 non-recommended activities - for i = #activities, 5, -1 do - activities[i] = nil - end - end - else - useMore = false - end - end - - for i = 1, #activities do - local activityID = activities[i] - local shortName = select(ACTIVITY_RETURN_VALUES.shortName, C_LFGList.GetActivityInfo(activityID)) - - info.text = shortName - info.value = activityID - info.arg1 = "activity" - info.checked = (self.selectedActivity == activityID) - info.isRadio = true - UIDropDownMenu_AddButton(info) - end - - if useMore then - info.text = LFG_LIST_MORE - info.value = nil - info.arg1 = "more" - info.notCheckable = true - info.checked = false - info.isRadio = false - UIDropDownMenu_AddButton(info) - end -end - -function LFGListEntryCreation_OnActivitySelected(self, activityID, buttonType) - if buttonType == "activity" then - LFGListEntryCreation_Select(self, nil, nil, nil, activityID) - elseif buttonType == "more" then - LFGListEntryCreationActivityFinder_Show( - self.ActivityFinder, - self.selectedCategory, - self.selectedGroup, - bit.bor(self.baseFilters, self.selectedFilters) - ) - end -end - -function LFGListEntryCreation_GetSanitizedName(self) return string.match(self.Name:GetText(), "^%s*(.-)%s*$") end - -function LFGListEntryCreation_ListGroup(self) - local name = LFGListEntryCreation_GetSanitizedName(self) - local iLevel = tonumber(self.ItemLevel.EditBox:GetText()) or 0 - local honorLevel = tonumber(self.HonorLevel.EditBox:GetText()) or 0 - - if LFGListEntryCreation_IsEditMode(self) then - local autoAccept = select(9, C_LFGList.GetActiveEntryInfo()) - C_LFGList.UpdateListing( - self.selectedActivity, - name, - iLevel, - honorLevel, - self.VoiceChat.EditBox:GetText(), - self.Description.EditBox:GetText(), - autoAccept - ) - LFGListFrame_SetActivePanel(self:GetParent(), self:GetParent().ApplicationViewer) - else - if - C_LFGList.CreateListing( - self.selectedActivity, - name, - iLevel, - honorLevel, - self.VoiceChat.EditBox:GetText(), - self.Description.EditBox:GetText(), - false - ) - then - self.WorkingCover:Show() - LFGListEntryCreation_ClearFocus(self) - end - end -end - -function LFGListEntryCreation_UpdateValidState(self) - local errorText - local maxPlayers, _, _, useHonorLevel = - select(ACTIVITY_RETURN_VALUES.maxPlayers, C_LFGList.GetActivityInfo(self.selectedActivity)) - if maxPlayers > 0 and GetNumGroupMembers(LE_PARTY_CATEGORY_HOME) >= maxPlayers then - errorText = string.format(LFG_LIST_TOO_MANY_FOR_ACTIVITY, maxPlayers) - elseif LFGListEntryCreation_GetSanitizedName(self) == "" then - errorText = LFG_LIST_MUST_HAVE_NAME - elseif self.ItemLevel.warningText then - errorText = self.ItemLevel.warningText - elseif useHonorLevel and self.HonorLevel.warningText then - errorText = self.HonorLevel.warningText - else - errorText = LFGListUtil_GetActiveQueueMessage(false) - end - - self.ListGroupButton:SetEnabled(not errorText) - self.ListGroupButton.errorText = errorText -end - -function LFGListEntryCreation_SetBaseFilters(self, baseFilters) self.baseFilters = baseFilters end - -function LFGListEntryCreation_SetEditMode(self, editMode) - self.editMode = editMode - if editMode then - local active, activityID, ilvl, honorLevel, name, comment, voiceChat = C_LFGList.GetActiveEntryInfo() - assert(active) - - --Update the dropdowns - LFGListEntryCreation_Select(self, nil, nil, nil, activityID) - UIDropDownMenu_DisableDropDown(self.CategoryDropDown) - UIDropDownMenu_DisableDropDown(self.GroupDropDown) - UIDropDownMenu_DisableDropDown(self.ActivityDropDown) - - --Update edit boxes - self.Name:SetText(name) - self.ItemLevel.EditBox:SetText(ilvl ~= 0 and ilvl or "") - self.HonorLevel.EditBox:SetText(honorLevel ~= 0 and honorLevel or "") - self.VoiceChat.EditBox:SetText(voiceChat) - self.Description.EditBox:SetText(comment) - - self.ListGroupButton:SetText(DONE_EDITING) - else - UIDropDownMenu_EnableDropDown(self.CategoryDropDown) - UIDropDownMenu_EnableDropDown(self.GroupDropDown) - UIDropDownMenu_EnableDropDown(self.ActivityDropDown) - self.ListGroupButton:SetText(LIST_GROUP) - end -end - -function LFGListEntryCreation_IsEditMode(self) return self.editMode end - -function LFGListEntryCreationCancelButton_OnClick(self) - local panel = self:GetParent() - PlaySound("igMainMenuOptionCheckBoxOn") - if LFGListEntryCreation_IsEditMode(panel) then - LFGListFrame_SetActivePanel(panel:GetParent(), panel:GetParent().ApplicationViewer) - else - LFGListFrame_SetActivePanel(panel:GetParent(), panel:GetParent().CategorySelection) - end -end - -function LFGListEntryCreationListGroupButton_OnClick(self) - PlaySound("igMainMenuOptionCheckBoxOn") - LFGListEntryCreation_ListGroup(self:GetParent()) -end - -function LFGListEntryCreationActivityFinder_OnLoad(self) - self.Dialog.ScrollFrame.update = function() LFGListEntryCreationActivityFinder_Update(self) end - self.Dialog.ScrollFrame.scrollBar.doNotHide = true - HybridScrollFrame_CreateButtons(self.Dialog.ScrollFrame, "LFGListEntryCreationActivityListTemplate") - - self.matchingActivities = {} -end - -function LFGListEntryCreationActivityFinder_Show(self, categoryID, groupID, filters) - self.Dialog.EntryBox:SetText("") - self.categoryID = categoryID - self.groupID = groupID - self.filters = filters - self.selectedActivity = nil - LFGListEntryCreationActivityFinder_UpdateMatching(self) - self:Show() - self.Dialog.EntryBox:SetFocus() -end - -function LFGListEntryCreationActivityFinder_UpdateMatching(self) - self.matchingActivities = - C_LFGList.GetAvailableActivities(self.categoryID, self.groupID, self.filters, self.Dialog.EntryBox:GetText()) - LFGListUtil_SortActivitiesByRelevancy(self.matchingActivities) - if not self.selectedActivity or not tContains(self.matchingActivities, self.selectedActivity) then - self.selectedActivity = self.matchingActivities[1] - end - LFGListEntryCreationActivityFinder_Update(self) -end - -function LFGListEntryCreationActivityFinder_Update(self) - local actitivities = self.matchingActivities - - local offset = HybridScrollFrame_GetOffset(self.Dialog.ScrollFrame) - - for i = 1, #self.Dialog.ScrollFrame.buttons do - local button = self.Dialog.ScrollFrame.buttons[i] - local idx = i + offset - local id = actitivities[idx] - if id then - button:SetText((C_LFGList.GetActivityInfo(id))) - button.activityID = id - button.Selected:SetShown(self.selectedActivity == id) - if self.selectedActivity == id then - button:LockHighlight() - else - button:UnlockHighlight() - end - button:Show() - else - button:Hide() - end - end - HybridScrollFrame_Update( - self.Dialog.ScrollFrame, - self.Dialog.ScrollFrame.buttons[1]:GetHeight() * #actitivities, - self.Dialog.ScrollFrame:GetHeight() - ) -end - -function LFGListEntryCreationActivityFinder_Accept(self) - if self.selectedActivity then - LFGListEntryCreation_Select(self:GetParent(), nil, nil, nil, self.selectedActivity) - end - self:Hide() -end - -function LFGListEntryCreationActivityFinder_Cancel(self) self:Hide() end - -function LFGListEntryCreationActivityFinder_Select(self, activityID) - self.selectedActivity = activityID - LFGListEntryCreationActivityFinder_Update(self) -end - -------------------------------------------------------- -----------Application Viewing -------------------------------------------------------- -function LFGListApplicationViewer_OnLoad(self) - self.ScrollFrame.update = function() LFGListApplicationViewer_UpdateResults(self) end - self.ScrollFrame.dynamic = function(offset) return LFGListApplicationViewer_GetScrollOffset(self, offset) end - self.ScrollFrame.scrollBar.doNotHide = true - self.NameColumnHeader:Disable() - self.RoleColumnHeader:Disable() - self.ItemLevelColumnHeader:Disable() - HybridScrollFrame_CreateButtons(self.ScrollFrame, "LFGListApplicantTemplate") -end - -function LFGListApplicationViewer_OnEvent(self, event, ...) - if event == "LFG_LIST_ACTIVE_ENTRY_UPDATE" then - LFGListApplicationViewer_UpdateInfo(self) - elseif event == "PARTY_LEADER_CHANGED" then - LFGListApplicationViewer_UpdateAvailability(self) - LFGListApplicationViewer_UpdateInfo(self) - elseif event == "LFG_LIST_APPLICANT_LIST_UPDATED" then - LFGListApplicationViewer_UpdateResultList(self) - LFGListApplicationViewer_UpdateResults(self) - elseif event == "LFG_LIST_APPLICANT_UPDATED" then - --If we can't make changes, we just remove people immediately - local id = ... - if not LFGListUtil_IsEntryEmpowered() then C_LFGList.RemoveApplicant(id) end - - --Update whether we can invite people - LFGListApplicationViewer_UpdateInviteState(self) - elseif event == "GROUP_ROSTER_UPDATE" then - LFGListApplicationViewer_UpdateAvailability(self) - LFGListApplicationViewer_UpdateGroupData(self) - LFGListApplicationViewer_UpdateInviteState(self) - LFGListApplicationViewer_UpdateInfo(self) - elseif event == "PLAYER_ROLES_ASSIGNED" then - LFGListApplicationViewer_UpdateGroupData(self) - end -end - -function LFGListApplicationViewer_OnShow(self) - C_LFGList.RefreshApplicants() - LFGListApplicationViewer_UpdateResultList(self) - LFGListApplicationViewer_UpdateResults(self) - LFGListApplicationViewer_UpdateInfo(self) - LFGListApplicationViewer_UpdateAvailability(self) - LFGListApplicationViewer_UpdateGroupData(self) -end - -function LFGListApplicationViewer_UpdateGroupData(self) - local active, activityID = C_LFGList.GetActiveEntryInfo() - if not active then return end - - local data = GetGroupMemberCounts() - data.DAMAGER = data.DAMAGER + data.NOROLE --People without a role count as damage - data.NOROLE = 0 - LFGListGroupDataDisplay_Update(self.DataDisplay, activityID, data) -end - -function LFGListApplicationViewer_UpdateInfo(self) - local active, activityID, ilvl, honorLevel, name, comment, voiceChat, duration, autoAccept = - C_LFGList.GetActiveEntryInfo() - local fullName, shortName, categoryID, groupID, iLevel, filters, minLevel, maxPlayers, displayType = - C_LFGList.GetActivityInfo(activityID) - local _, separateRecommended = C_LFGList.GetCategoryInfo(categoryID) - assert(active) - self.EntryName:SetWidth(0) - self.EntryName:SetText(name) - self.DescriptionFrame.activityName = C_LFGList.GetActivityInfo(activityID) - self.DescriptionFrame.comment = comment - if comment == "" then - self.DescriptionFrame.Text:SetText(self.DescriptionFrame.activityName) - else - self.DescriptionFrame.Text:SetFormattedText( - "%s |cff888888- %s|r", - self.DescriptionFrame.activityName, - self.DescriptionFrame.comment - ) - end - - local hasRestrictions = false - if ilvl == 0 then - self.ItemLevel:SetText("") - else - self.ItemLevel:SetFormattedText(LFG_LIST_ITEM_LEVEL_CURRENT, ilvl) - end - - if voiceChat == "" then - self.VoiceChatFrame.tooltip = nil - self.VoiceChatFrame:Hide() - else - self.VoiceChatFrame.tooltip = voiceChat - self.VoiceChatFrame:Show() - end - - if self.EntryName:GetWidth() > 290 then self.EntryName:SetWidth(290) end - - --Set the background - local atlasName = nil - if separateRecommended and bit.band(filters, LE_LFG_LIST_FILTER_RECOMMENDED) ~= 0 then - atlasName = "groupfinder-background-" - .. (LFG_LIST_CATEGORY_TEXTURES[categoryID] or "raids") - .. "-" - .. LFG_LIST_PER_EXPANSION_TEXTURES[LFGListUtil_GetCurrentExpansion()] - elseif separateRecommended and bit.band(filters, LE_LFG_LIST_FILTER_NOT_RECOMMENDED) ~= 0 then - atlasName = "groupfinder-background-" - .. (LFG_LIST_CATEGORY_TEXTURES[categoryID] or "raids") - .. "-" - .. LFG_LIST_PER_EXPANSION_TEXTURES[math.max(0, LFGListUtil_GetCurrentExpansion() - 1)] - else - atlasName = "groupfinder-background-" .. (LFG_LIST_CATEGORY_TEXTURES[categoryID] or "questing") - end - - local suffix = "" - if bit.band(filters, LE_LFG_LIST_FILTER_PVE) ~= 0 then - suffix = "-pve" - elseif bit.band(filters, LE_LFG_LIST_FILTER_PVP) ~= 0 then - suffix = "-pvp" - end - - --Try with the suffix and then without it - if not self.InfoBackground:SetAtlas(atlasName .. suffix) then self.InfoBackground:SetAtlas(atlasName) end - - --Update the AutoAccept button - self.AutoAcceptButton:SetChecked(autoAccept) - if UnitIsGroupLeader("player", LE_PARTY_CATEGORY_HOME) then - self.AutoAcceptButton:Show() - self.AutoAcceptButton:Enable() - self.AutoAcceptButton.Label:SetFontObject(GameFontHighlightSmall) - elseif UnitIsGroupAssistant("player", LE_PARTY_CATEGORY_HOME) then - self.AutoAcceptButton:Show() - self.AutoAcceptButton:Disable() - self.AutoAcceptButton.Label:SetFontObject(GameFontDisableSmall) - else - self.AutoAcceptButton:SetShown(autoAccept) - self.AutoAcceptButton:Disable() - self.AutoAcceptButton.Label:SetFontObject(GameFontDisableSmall) - end -end - -function LFGListApplicationViewer_UpdateAvailability(self) - if UnitIsGroupLeader("player", LE_PARTY_CATEGORY_HOME) then - self.RemoveEntryButton:Show() - self.EditButton:Show() - else - self.RemoveEntryButton:Hide() - self.EditButton:Hide() - end - - if IsRestrictedAccount() then - self.EditButton:Disable() - self.EditButton.tooltip = ERR_RESTRICTED_ACCOUNT_LFG_LIST_TRIAL - else - self.EditButton:Enable() - self.EditButton.tooltip = nil - end - - local empowered = LFGListUtil_IsEntryEmpowered() - self.UnempoweredCover:SetShown(not empowered) - self.ScrollFrame.NoApplicants:SetShown(empowered and (not self.applicants or #self.applicants == 0)) -end - -function LFGListApplicationViewer_UpdateResultList(self) - self.applicants = C_LFGList.GetApplicants() - - --Filter applicants. Don't worry about order. - LFGListUtil_FilterApplicants(self.applicants) - - --Sort applicants - LFGListUtil_SortApplicants(self.applicants) - - --Cache off the group sizes for the scroll frame and the total height - local totalHeight = 0 - self.applicantSizes = {} - for i = 1, #self.applicants do - local _, _, _, numMembers = C_LFGList.GetApplicantInfo(self.applicants[i]) - self.applicantSizes[i] = numMembers - totalHeight = totalHeight + LFGListApplicationViewerUtil_GetButtonHeight(numMembers) - end - self.totalApplicantHeight = totalHeight - - LFGListApplicationViewer_UpdateAvailability(self) -end - -function LFGListApplicationViewer_UpdateInviteState(self) - local active, activityID, ilvl, honorLevel, name, comment, voiceChat = C_LFGList.GetActiveEntryInfo() - if not active then return end - - local numAllowed = select(ACTIVITY_RETURN_VALUES.maxPlayers, C_LFGList.GetActivityInfo(activityID)) - if numAllowed == 0 then numAllowed = MAX_RAID_MEMBERS end - - local currentCount = GetNumGroupMembers(LE_PARTY_CATEGORY_HOME) - local numInvited = C_LFGList.GetNumInvitedApplicantMembers() - - local buttons = self.ScrollFrame.buttons - for i = 1, #buttons do - local button = buttons[i] - if button.applicantID then - if button.numMembers + currentCount > numAllowed then - button.InviteButton:Disable() - button.InviteButton.tooltip = LFG_LIST_GROUP_TOO_FULL - elseif button.numMembers + currentCount + numInvited > numAllowed then - button.InviteButton:Disable() - button.InviteButton.tooltip = LFG_LIST_INVITED_APP_FILLS_GROUP - else - button.InviteButton:Enable() - button.InviteButton.tooltip = nil - end - - --If our mouse is already over the button, update the tooltip - if button.InviteButton:IsMouseOver() then - if button.InviteButton.tooltip then - button.InviteButton:GetScript("OnEnter")(button.InviteButton) - else - GameTooltip:Hide() - end - end - end - end -end - -function LFGListApplicationViewer_UpdateResults(self) - local offset = HybridScrollFrame_GetOffset(self.ScrollFrame) - local buttons = self.ScrollFrame.buttons - - --If the mouse is over something in this frame, update it - local mouseover = GetMouseFocus() - local mouseoverParent = mouseover and mouseover:GetParent() - local parentParent = mouseoverParent and mouseoverParent:GetParent() - if mouseoverParent == self.ScrollFrame or parentParent == self.ScrollFrame then - --Just hide the tooltip. We should show it again inside the update function. - GameTooltip:Hide() - end - - for i = 1, #buttons do - local button = buttons[i] - local idx = i + offset - local id = self.applicants[idx] - - if id then - button.applicantID = id - LFGListApplicationViewer_UpdateApplicant(button, id) - button.Background:SetAlpha(idx % 2 == 0 and 0.1 or 0.05) - button:Show() - else - button.applicantID = nil - button:Hide() - end - end - HybridScrollFrame_Update(self.ScrollFrame, self.totalApplicantHeight, self.ScrollFrame:GetHeight()) - LFGListApplicationViewer_UpdateInviteState(self) -end - -function LFGListApplicationViewer_UpdateApplicant(button, id) - local id, status, pendingStatus, numMembers, isNew = C_LFGList.GetApplicantInfo(id) - button:SetHeight(LFGListApplicationViewerUtil_GetButtonHeight(numMembers)) - - --Update individual members - for i = 1, numMembers do - local member = button.Members[i] - if not member then - member = CreateFrame("BUTTON", nil, button, "LFGListApplicantMemberTemplate") - member:SetPoint("TOPLEFT", button.Members[i - 1], "BOTTOMLEFT", 0, 0) - button.Members[i] = member - end - LFGListApplicationViewer_UpdateApplicantMember(member, id, i, status, pendingStatus) - member:Show() - end - - --Hide extra member buttons - for i = numMembers + 1, #button.Members do - button.Members[i]:Hide() - end - - --Update the Invite and Decline buttons based on group size - if numMembers > 1 then - button.DeclineButton:SetHeight(36) - button.InviteButton:SetHeight(36) - button.InviteButton:SetFormattedText(LFG_LIST_INVITE_GROUP, numMembers) - else - button.DeclineButton:SetHeight(22) - button.InviteButton:SetHeight(22) - button.InviteButton:SetText(INVITE) - end - - if pendingStatus or status == "applied" then - button.Status:Hide() - elseif status == "invited" then - button.Status:Show() - button.Status:SetText(LFG_LIST_APP_INVITED) - button.Status:SetTextColor(GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b) - elseif status == "failed" or status == "cancelled" then - button.Status:Show() - button.Status:SetText(LFG_LIST_APP_CANCELLED) - button.Status:SetTextColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b) - elseif status == "declined" then - button.Status:Show() - button.Status:SetText(LFG_LIST_APP_DECLINED) - button.Status:SetTextColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b) - elseif status == "timedout" then - button.Status:Show() - button.Status:SetText(LFG_LIST_APP_TIMED_OUT) - button.Status:SetTextColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b) - elseif status == "inviteaccepted" then - button.Status:Show() - button.Status:SetText(LFG_LIST_APP_INVITE_ACCEPTED) - button.Status:SetTextColor(GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b) - elseif status == "invitedeclined" then - button.Status:Show() - button.Status:SetText(LFG_LIST_APP_INVITE_DECLINED) - button.Status:SetTextColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b) - end - - button.numMembers = numMembers - button.InviteButton:SetShown(not pendingStatus and status == "applied" and LFGListUtil_IsEntryEmpowered()) - button.DeclineButton:SetShown(not pendingStatus and status ~= "invited" and LFGListUtil_IsEntryEmpowered()) - button.DeclineButton.isAck = (status ~= "applied" and status ~= "invited") - button.Spinner:SetShown(pendingStatus) -end - -function LFGListApplicationViewer_UpdateApplicantMember(member, appID, memberIdx, status, pendingStatus) - local grayedOut = not pendingStatus - and ( - status == "failed" - or status == "cancelled" - or status == "declined" - or status == "invitedeclined" - or status == "timedout" - ) - local noTouchy = (status == "invited" or status == "inviteaccepted" or status == "invitedeclined") - - local name, class, localizedClass, level, itemLevel, honorLevel, tank, healer, damage, assignedRole, relationship = - C_LFGList.GetApplicantMemberInfo(appID, memberIdx) - - member.memberIdx = memberIdx - - member.Name:SetWidth(0) - if name then - local displayName = Ambiguate(name, "short") - if memberIdx > 1 then - member.Name:SetText(" " .. displayName) - else - member.Name:SetText(displayName) - end - - local classTextColor = grayedOut and GRAY_FONT_COLOR or RAID_CLASS_COLORS[class] - member.Name:SetTextColor(classTextColor.r, classTextColor.g, classTextColor.b) - else - --We might still be requesting the name and class from the server. - member.Name:SetText("") - end - - member.FriendIcon:SetShown(relationship) - member.FriendIcon.relationship = relationship - member.FriendIcon.Icon:SetDesaturated(grayedOut) - member.FriendIcon:SetAlpha(grayedOut and 0.5 or 1.0) - - --Adjust name width depending on whether we have the friend icon - local nameLength = 100 - if relationship then nameLength = nameLength - 22 end - if member.Name:GetWidth() > nameLength then member.Name:SetWidth(nameLength) end - - --Update the roles. - if grayedOut then - member.RoleIcon1:Hide() - member.RoleIcon2:Hide() - else - local role1 = tank and "TANK" or (healer and "HEALER" or (damage and "DAMAGER")) - local role2 = (tank and healer and "HEALER") or ((tank or healer) and damage and "DAMAGER") - member.RoleIcon1:GetNormalTexture():SetAtlas(LFG_LIST_GROUP_DATA_ATLASES[role1]) - member.RoleIcon1:GetHighlightTexture():SetAtlas(LFG_LIST_GROUP_DATA_ATLASES[role1]) - if role2 then - member.RoleIcon2:GetNormalTexture():SetAtlas(LFG_LIST_GROUP_DATA_ATLASES[role2]) - member.RoleIcon2:GetHighlightTexture():SetAtlas(LFG_LIST_GROUP_DATA_ATLASES[role2]) - end - member.RoleIcon1:SetEnabled(not noTouchy and role1 ~= assignedRole) - member.RoleIcon1:SetAlpha(role1 == assignedRole and 1 or 0.3) - member.RoleIcon1:Show() - member.RoleIcon2:SetEnabled(not noTouchy and role2 ~= assignedRole) - member.RoleIcon2:SetAlpha(role2 == assignedRole and 1 or 0.3) - member.RoleIcon2:SetShown(role2) - member.RoleIcon1.role = role1 - member.RoleIcon2.role = role2 - end - - member.ItemLevel:SetShown(not grayedOut) - member.ItemLevel:SetText(math.floor(itemLevel)) - - local mouseFocus = GetMouseFocus() - if mouseFocus == member then - LFGListApplicantMember_OnEnter(member) - elseif mouseFocus == member.FriendIcon then - member.FriendIcon:GetScript("OnEnter")(member.FriendIcon) - end -end - -function LFGListApplicationViewer_GetScrollOffset(self, offset) - local acum = 0 - for i = 1, #self.applicantSizes do - local height = LFGListApplicationViewerUtil_GetButtonHeight(self.applicantSizes[i]) - acum = acum + height - if acum > offset then return i - 1, height + offset - acum end - end - - --We're scrolled completely off the bottom - return #self.applicantSizes, 0 -end - -function LFGListApplicationViewerUtil_GetButtonHeight(numApplicants) return 20 * numApplicants + 6 end - -function LFGListApplicationViewerEditButton_OnClick(self) - PlaySound("igMainMenuOptionCheckBoxOn") - - local panel = self:GetParent() - local entryCreation = panel:GetParent().EntryCreation - LFGListEntryCreation_SetEditMode(entryCreation, true) - LFGListFrame_SetActivePanel(panel:GetParent(), entryCreation) -end - ---Applicant members -function LFGListApplicantMember_OnEnter(self) - local applicantID = self:GetParent().applicantID - local memberIdx = self.memberIdx - - local active, activityID = C_LFGList.GetActiveEntryInfo() - if not active then return end - - local useHonorLevel = select(11, C_LFGList.GetActivityInfo(activityID)) - local id, status, pendingStatus, numMembers, isNew, comment = C_LFGList.GetApplicantInfo(applicantID) - local name, class, localizedClass, level, itemLevel, honorLevel, tank, healer, damage, assignedRole = - C_LFGList.GetApplicantMemberInfo(applicantID, memberIdx) - - GameTooltip:SetOwner(self, "ANCHOR_NONE") - GameTooltip:SetPoint("BOTTOMLEFT", self, "TOPLEFT", 105, 0) - if name then - local classTextColor = RAID_CLASS_COLORS[class] - GameTooltip:SetText(name, classTextColor.r, classTextColor.g, classTextColor.b) - GameTooltip:AddLine(string.format(UNIT_TYPE_LEVEL_TEMPLATE, level, localizedClass), 1, 1, 1) - else - GameTooltip:SetText(" ") --Just make it empty until we get the name update - end - GameTooltip:AddLine(string.format(LFG_LIST_ITEM_LEVEL_CURRENT, itemLevel), 1, 1, 1) - if useHonorLevel then GameTooltip:AddLine(string.format(LFG_LIST_HONOR_LEVEL_CURRENT_PVP, honorLevel), 1, 1, 1) end - if comment and comment ~= "" then - GameTooltip:AddLine(" ") - GameTooltip:AddLine( - string.format(LFG_LIST_COMMENT_FORMAT, comment), - LFG_LIST_COMMENT_FONT_COLOR.r, - LFG_LIST_COMMENT_FONT_COLOR.g, - LFG_LIST_COMMENT_FONT_COLOR.b, - true - ) - end - - --Add statistics - local stats = C_LFGList.GetApplicantMemberStats(applicantID, memberIdx) - local lastTitle = nil - - --Tank proving ground - if stats[23690] and stats[23690] > 0 then - LFGListUtil_AppendStatistic(LFG_LIST_PROVING_TANK_GOLD, nil, LFG_LIST_PROVING_GROUND_TITLE, lastTitle) - lastTitle = LFG_LIST_PROVING_GROUND_TITLE - elseif stats[23687] and stats[23687] > 0 then - LFGListUtil_AppendStatistic(LFG_LIST_PROVING_TANK_SILVER, nil, LFG_LIST_PROVING_GROUND_TITLE, lastTitle) - lastTitle = LFG_LIST_PROVING_GROUND_TITLE - elseif stats[23684] and stats[23684] > 0 then - LFGListUtil_AppendStatistic(LFG_LIST_PROVING_TANK_BRONZE, nil, LFG_LIST_PROVING_GROUND_TITLE, lastTitle) - lastTitle = LFG_LIST_PROVING_GROUND_TITLE - end - - --Healer proving ground - if stats[23691] and stats[23691] > 0 then - LFGListUtil_AppendStatistic(LFG_LIST_PROVING_HEALER_GOLD, nil, LFG_LIST_PROVING_GROUND_TITLE, lastTitle) - lastTitle = LFG_LIST_PROVING_GROUND_TITLE - elseif stats[23688] and stats[23688] > 0 then - LFGListUtil_AppendStatistic(LFG_LIST_PROVING_HEALER_SILVER, nil, LFG_LIST_PROVING_GROUND_TITLE, lastTitle) - lastTitle = LFG_LIST_PROVING_GROUND_TITLE - elseif stats[23685] and stats[23685] > 0 then - LFGListUtil_AppendStatistic(LFG_LIST_PROVING_HEALER_BRONZE, nil, LFG_LIST_PROVING_GROUND_TITLE, lastTitle) - lastTitle = LFG_LIST_PROVING_GROUND_TITLE - end - - --Damage proving ground - if stats[23689] and stats[23689] > 0 then - LFGListUtil_AppendStatistic(LFG_LIST_PROVING_DAMAGER_GOLD, nil, LFG_LIST_PROVING_GROUND_TITLE, lastTitle) - lastTitle = LFG_LIST_PROVING_GROUND_TITLE - elseif stats[23686] and stats[23686] > 0 then - LFGListUtil_AppendStatistic(LFG_LIST_PROVING_DAMAGER_SILVER, nil, LFG_LIST_PROVING_GROUND_TITLE, lastTitle) - lastTitle = LFG_LIST_PROVING_GROUND_TITLE - elseif stats[23683] and stats[23683] > 0 then - LFGListUtil_AppendStatistic(LFG_LIST_PROVING_DAMAGER_BRONZE, nil, LFG_LIST_PROVING_GROUND_TITLE, lastTitle) - lastTitle = LFG_LIST_PROVING_GROUND_TITLE - end - - GameTooltip:Show() -end - -------------------------------------------------------- -----------Searching -------------------------------------------------------- -function LFGListSearchPanel_OnLoad(self) - self.SearchBox.Instructions:SetText(FILTER) - self.ScrollFrame.update = function() LFGListSearchPanel_UpdateResults(self) end - self.ScrollFrame.scrollBar.doNotHide = true - HybridScrollFrame_CreateButtons(self.ScrollFrame, "LFGListSearchEntryTemplate") - self.SearchBox.clearButton:SetScript("OnClick", function(btn) - SearchBoxTemplateClearButton_OnClick(btn) - LFGListSearchPanel_DoSearch(self) - end) -end - -function LFGListSearchPanel_OnEvent(self, event, ...) - --Note: events are dispatched from the base frame. Add RegisterEvent there. - if event == "LFG_LIST_SEARCH_RESULTS_RECEIVED" then - StaticPopupSpecial_Hide(LFGListApplicationDialog) - self.searching = false - self.searchFailed = false - LFGListSearchPanel_UpdateResultList(self) - LFGListSearchPanel_UpdateResults(self) - elseif event == "LFG_LIST_SEARCH_FAILED" then - self.searching = false - self.searchFailed = true - LFGListSearchPanel_UpdateResultList(self) - LFGListSearchPanel_UpdateResults(self) - elseif event == "LFG_LIST_SEARCH_RESULT_UPDATED" then - local id = ... - if self.selectedResult == id then - LFGListSearchPanel_ValidateSelected(self) - if self.selectedResult ~= id then LFGListSearchPanel_UpdateResults(self) end - end - LFGListSearchPanel_UpdateButtonStatus(self) - elseif event == "LFG_LIST_SEARCH_RESULT_UPDATED" then - LFGListSearchPanel_UpdateButtonStatus(self) - elseif event == "PARTY_LEADER_CHANGED" then - LFGListSearchPanel_UpdateButtonStatus(self) - elseif event == "GROUP_ROSTER_UPDATE" then - LFGListSearchPanel_UpdateButtonStatus(self) - elseif event == "PLAYER_SPECIALIZATION_CHANGED" then - local unit = ... - if unit == "player" then LFGListSearchPanel_UpdateButtonStatus(self) end - elseif event == "UNIT_CONNECTION" then - LFGListSearchPanel_UpdateButtonStatus(self) - end - - if tContains(LFG_LIST_ACTIVE_QUEUE_MESSAGE_EVENTS, event) then LFGListSearchPanel_UpdateButtonStatus(self) end -end - -function LFGListSearchPanel_OnShow(self) - LFGListSearchPanel_UpdateResultList(self) - LFGListSearchPanel_UpdateResults(self) - --LFGListSearchPanel_UpdateButtonStatus(self); --Called by UpdateResults - - local availableLanguages = C_LFGList.GetAvailableLanguageSearchFilter() - local defaultLanguages = C_LFGList.GetDefaultLanguageSearchFilter() - - local canChangeLanguages = false - for i = 1, #availableLanguages do - if not defaultLanguages[availableLanguages[i]] then - canChangeLanguages = true - break - end - end - - if canChangeLanguages then - self.SearchBox:SetWidth(228) - self.FilterButton:Show() - else - self.SearchBox:SetWidth(319) - self.FilterButton:Hide() - end -end - -function LFGListSearchPanel_Clear(self) - C_LFGList.ClearSearchResults() - self.SearchBox:SetText("") - self.selectedResult = nil - LFGListSearchPanel_UpdateResultList(self) - LFGListSearchPanel_UpdateResults(self) -end - -function LFGListSearchPanel_SetCategory(self, categoryID, filters, preferredFilters) - self.categoryID = categoryID - self.filters = filters - self.preferredFilters = preferredFilters - - local name = LFGListUtil_GetDecoratedCategoryName(C_LFGList.GetCategoryInfo(categoryID), filters, false) - self.CategoryName:SetText(name) -end - -function LFGListSearchPanel_DoSearch(self) - local searchText = self.SearchBox:GetText() - local languages = C_LFGList.GetLanguageSearchFilter() - C_LFGList.Search(self.categoryID, searchText, self.filters, self.preferredFilters, languages) - self.searching = true - self.searchFailed = false - self.selectedResult = nil - LFGListSearchPanel_UpdateResultList(self) - LFGListSearchPanel_UpdateResults(self) -end - -function LFGListSearchPanel_CreateGroupInstead(self) - LFGListEntryCreation_Show(self:GetParent().EntryCreation, self.preferredFilters, self.categoryID, self.filters) -end - -function LFGListSearchPanel_UpdateResultList(self) - self.totalResults, self.results = C_LFGList.GetSearchResults() - self.applications = C_LFGList.GetApplications() - LFGListUtil_SortSearchResults(self.results) -end - -function LFGListSearchPanel_ValidateSelected(self) - if self.selectedResult and not LFGListSearchPanelUtil_CanSelectResult(self.selectedResult) then - self.selectedResult = nil - end -end - -function LFGListSearchPanelUtil_CanSelectResult(resultID) - local _, appStatus, pendingStatus, appDuration = C_LFGList.GetApplicationInfo(resultID) - local id, activityID, name, comment, voiceChat, iLvl, honorLevel, age, numBNetFriends, numCharFriends, numGuildMates, isDelisted = - C_LFGList.GetSearchResultInfo(resultID) - if appStatus ~= "none" or pendingStatus or isDelisted then return false end - return true -end - -function LFGListSearchPanel_UpdateResults(self) - local offset = HybridScrollFrame_GetOffset(self.ScrollFrame) - local buttons = self.ScrollFrame.buttons - - --If we have an application selected, deselect it. - LFGListSearchPanel_ValidateSelected(self) - - if self.searching then - self.SearchingSpinner:Show() - self.ScrollFrame.NoResultsFound:Hide() - self.ScrollFrame.StartGroupButton:Hide() - for i = 1, #buttons do - buttons[i]:Hide() - end - else - self.SearchingSpinner:Hide() - local results = self.results - local apps = self.applications - - for i = 1, #buttons do - local button = buttons[i] - local idx = i + offset - local result = (idx <= #apps) and apps[idx] or results[idx - #apps] - - if result then - button.resultID = result - LFGListSearchEntry_Update(button) - button:Show() - else - button.resultID = nil - button:Hide() - end - end - - local totalHeight = buttons[1]:GetHeight() * (#results + #apps) - - --Reanchor the errors to not overlap applications - if totalHeight < self.ScrollFrame:GetHeight() then - self.ScrollFrame.NoResultsFound:SetPoint("TOP", self.ScrollFrame, "TOP", 0, -totalHeight - 27) - end - self.ScrollFrame.NoResultsFound:SetShown(self.totalResults == 0) - self.ScrollFrame.StartGroupButton:SetShown(self.totalResults == 0 and not self.searchFailed) - self.ScrollFrame.NoResultsFound:SetText( - self.searchFailed and LFG_LIST_SEARCH_FAILED or LFG_LIST_NO_RESULTS_FOUND - ) - - HybridScrollFrame_Update(self.ScrollFrame, totalHeight, self.ScrollFrame:GetHeight()) - end - LFGListSearchPanel_UpdateButtonStatus(self) -end - -function LFGListSearchPanel_SelectResult(self, resultID) - self.selectedResult = resultID - LFGListSearchPanel_UpdateResults(self) -end - -function LFGListSearchPanel_UpdateButtonStatus(self) - --Update the SignUpButton - local resultID = self.selectedResult - local numApplications, numActiveApplications = C_LFGList.GetNumApplications() - local messageApply = LFGListUtil_GetActiveQueueMessage(true) - local availTank, availHealer, availDPS = C_LFGList.GetAvailableRoles() - if messageApply then - self.SignUpButton:Disable() - self.SignUpButton.tooltip = messageApply - elseif not LFGListUtil_IsAppEmpowered() then - self.SignUpButton:Disable() - self.SignUpButton.tooltip = LFG_LIST_APP_UNEMPOWERED - elseif IsInGroup(LE_PARTY_CATEGORY_HOME) and C_LFGList.IsCurrentlyApplying() then - self.SignUpButton:Disable() - self.SignUpButton.tooltip = LFG_LIST_APP_CURRENTLY_APPLYING - elseif numActiveApplications >= MAX_LFG_LIST_APPLICATIONS then - self.SignUpButton:Disable() - self.SignUpButton.tooltip = string.format(LFG_LIST_HIT_MAX_APPLICATIONS, MAX_LFG_LIST_APPLICATIONS) - elseif GetNumGroupMembers(LE_PARTY_CATEGORY_HOME) > MAX_PARTY_MEMBERS + 1 then - self.SignUpButton:Disable() - self.SignUpButton.tooltip = LFG_LIST_MAX_MEMBERS - elseif not (availTank or availHealer or availDPS) then - self.SignUpButton:Disable() - self.SignUpButton.tooltip = LFG_LIST_MUST_CHOOSE_SPEC - elseif GroupHasOfflineMember(LE_PARTY_CATEGORY_HOME) then - self.SignUpButton:Disable() - self.SignUpButton.tooltip = LFG_LIST_OFFLINE_MEMBER - elseif resultID then - self.SignUpButton:Enable() - self.SignUpButton.tooltip = nil - else - self.SignUpButton:Disable() - self.SignUpButton.tooltip = LFG_LIST_SELECT_A_SEARCH_RESULT - end - - --Update the StartGroupButton - if IsInGroup(LE_PARTY_CATEGORY_HOME) and not UnitIsGroupLeader("player", LE_PARTY_CATEGORY_HOME) then - self.ScrollFrame.StartGroupButton:Disable() - self.ScrollFrame.StartGroupButton.tooltip = LFG_LIST_NOT_LEADER - else - local messageStart = LFGListUtil_GetActiveQueueMessage(false) - if messageStart then - self.ScrollFrame.StartGroupButton:Disable() - self.ScrollFrame.StartGroupButton.tooltip = messageStart - else - self.ScrollFrame.StartGroupButton:Enable() - self.ScrollFrame.StartGroupButton.tooltip = nil - end - end -end - -function LFGListSearchPanel_SignUp(self) LFGListApplicationDialog_Show(LFGListApplicationDialog, self.selectedResult) end - -function LFGListSearchPanelSearchBox_OnEnterPressed(self) - local parent = self:GetParent() - if parent.AutoCompleteFrame:IsShown() and parent.AutoCompleteFrame.selected then - self:SetText((C_LFGList.GetActivityInfo(parent.AutoCompleteFrame.selected))) - end - - LFGListSearchPanel_DoSearch(self:GetParent()) - self:ClearFocus() -end - -function LFGListSearchPanelSearchBox_OnTabPressed(self) - if IsShiftKeyDown() then - LFGListSearchPanel_AutoCompleteAdvance(self:GetParent(), -1) - else - LFGListSearchPanel_AutoCompleteAdvance(self:GetParent(), 1) - end -end - -function LFGListSearchPanelSearchBox_OnArrowPressed(self, key) - if key == "UP" then - LFGListSearchPanel_AutoCompleteAdvance(self:GetParent(), -1) - elseif key == "DOWN" then - LFGListSearchPanel_AutoCompleteAdvance(self:GetParent(), 1) - end -end - -function LFGListSearchPanelSearchBox_OnTextChanged(self) - SearchBoxTemplate_OnTextChanged(self) - LFGListSearchPanel_UpdateAutoComplete(self:GetParent()) -end - -function LFGListSearchAutoCompleteButton_OnClick(self) - local panel = self:GetParent():GetParent() - PlaySound("igMainMenuOptionCheckBoxOn") - panel.SearchBox:SetText((C_LFGList.GetActivityInfo(self.activityID))) - LFGListSearchPanel_DoSearch(panel) - panel.SearchBox:ClearFocus() -end - -function LFGListSearchPanel_AutoCompleteAdvance(self, offset) - local selected = self.AutoCompleteFrame.selected - - --Find the index of the current selection and how many results we have displayed - local idx = nil - local numDisplayed = 0 - for i = 1, #self.AutoCompleteFrame.Results do - local btn = self.AutoCompleteFrame.Results[i] - if btn:IsShown() and btn.activityID then - numDisplayed = i - if btn.activityID == selected then idx = i end - else - break - end - end - - local newIndex = nil - if not idx then - --We had nothing selected, advance from the front or back - if offset > 0 then - newIndex = offset - else - newIndex = numDisplayed + 1 + offset - end - else - --Advance from our old location - newIndex = ((idx - 1 + offset + numDisplayed) % numDisplayed) + 1 - end - - self.AutoCompleteFrame.selected = self.AutoCompleteFrame.Results[newIndex].activityID - LFGListSearchPanel_UpdateAutoComplete(self) -end - -function LFGListSearchPanel_UpdateAutoComplete(self) - local text = self.SearchBox:GetText() - if text == "" or not self.SearchBox:HasFocus() then - self.AutoCompleteFrame:Hide() - self.AutoCompleteFrame.selected = nil - return - end - - --Choose the autocomplete results - local matchingActivities = C_LFGList.GetAvailableActivities(self.categoryID, nil, self.filters, text) - LFGListUtil_SortActivitiesByRelevancy(matchingActivities) - - local numResults = math.min(#matchingActivities, MAX_LFG_LIST_SEARCH_AUTOCOMPLETE_ENTRIES) - - if numResults == 0 then - self.AutoCompleteFrame:Hide() - self.AutoCompleteFrame.selected = nil - return - end - - --Update the buttons - local foundSelected = false - for i = 1, numResults do - local id = matchingActivities[i] - - local button = self.AutoCompleteFrame.Results[i] - if not button then - button = CreateFrame("BUTTON", nil, self.AutoCompleteFrame, "LFGListSearchAutoCompleteButtonTemplate") - button:SetPoint("TOPLEFT", self.AutoCompleteFrame.Results[i - 1], "BOTTOMLEFT", 0, 0) - button:SetPoint("TOPRIGHT", self.AutoCompleteFrame.Results[i - 1], "BOTTOMRIGHT", 0, 0) - self.AutoCompleteFrame.Results[i] = button - end - - if i == numResults and numResults < #matchingActivities then - --This is just a "x more" button - button:SetFormattedText(LFG_LIST_AND_MORE, #matchingActivities - numResults + 1) - button:Disable() - button.Selected:Hide() - button.activityID = nil - else - --This is an actual activity - button:SetText((C_LFGList.GetActivityInfo(id))) - button:Enable() - button.activityID = id - - if id == self.AutoCompleteFrame.selected then - button.Selected:Show() - foundSelected = true - else - button.Selected:Hide() - end - end - button:Show() - end - - if not foundSelected then self.selected = nil end - - --Hide unused buttons - for i = numResults + 1, #self.AutoCompleteFrame.Results do - self.AutoCompleteFrame.Results[i]:Hide() - end - - --Update the frames height and show it - self.AutoCompleteFrame:SetHeight(numResults * self.AutoCompleteFrame.Results[1]:GetHeight() + 8) - self.AutoCompleteFrame:Show() -end - -function LFGListSearchEntry_OnLoad(self) - self:RegisterEvent("LFG_LIST_SEARCH_RESULT_UPDATED") - self:RegisterEvent("LFG_ROLE_CHECK_UPDATE") - self:RegisterForClicks("LeftButtonUp", "RightButtonUp") -end - -function LFGListSearchEntry_Update(self) - local resultID = self.resultID - local _, appStatus, pendingStatus, appDuration = C_LFGList.GetApplicationInfo(resultID) - local isApplication = (appStatus ~= "none" or pendingStatus) - local isAppFinished = LFGListUtil_IsStatusInactive(appStatus) or LFGListUtil_IsStatusInactive(pendingStatus) - - --Update visibility based on whether we're an application or not - self.isApplication = isApplication - self.ApplicationBG:SetShown(isApplication and not isAppFinished) - self.ResultBG:SetShown(not isApplication or isAppFinished) - self.DataDisplay:SetShown(not isApplication) - self.CancelButton:SetShown(isApplication and pendingStatus ~= "applied") - self.CancelButton:SetEnabled(LFGListUtil_IsAppEmpowered()) - self.CancelButton.Icon:SetDesaturated(not LFGListUtil_IsAppEmpowered()) - self.CancelButton.tooltip = (not LFGListUtil_IsAppEmpowered()) and LFG_LIST_APP_UNEMPOWERED - self.Spinner:SetShown(pendingStatus == "applied") - - if pendingStatus == "applied" and C_LFGList.GetRoleCheckInfo() then - self.PendingLabel:SetText(LFG_LIST_ROLE_CHECK) - self.PendingLabel:SetTextColor(NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b) - self.PendingLabel:Show() - self.ExpirationTime:Hide() - self.CancelButton:Hide() - elseif pendingStatus == "cancelled" or appStatus == "cancelled" or appStatus == "failed" then - self.PendingLabel:SetText(LFG_LIST_APP_CANCELLED) - self.PendingLabel:SetTextColor(RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b) - self.PendingLabel:Show() - self.ExpirationTime:Hide() - self.CancelButton:Hide() - elseif appStatus == "declined" then - self.PendingLabel:SetText(LFG_LIST_APP_DECLINED) - self.PendingLabel:SetTextColor(RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b) - self.PendingLabel:Show() - self.ExpirationTime:Hide() - self.CancelButton:Hide() - elseif appStatus == "timedout" then - self.PendingLabel:SetText(LFG_LIST_APP_TIMED_OUT) - self.PendingLabel:SetTextColor(RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b) - self.PendingLabel:Show() - self.ExpirationTime:Hide() - self.CancelButton:Hide() - elseif appStatus == "invited" then - self.PendingLabel:SetText(LFG_LIST_APP_INVITED) - self.PendingLabel:SetTextColor(GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b) - self.PendingLabel:Show() - self.ExpirationTime:Hide() - self.CancelButton:Hide() - elseif appStatus == "inviteaccepted" then - self.PendingLabel:SetText(LFG_LIST_APP_INVITE_ACCEPTED) - self.PendingLabel:SetTextColor(GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b) - self.PendingLabel:Show() - self.ExpirationTime:Hide() - self.CancelButton:Hide() - elseif appStatus == "invitedeclined" then - self.PendingLabel:SetText(LFG_LIST_APP_INVITE_DECLINED) - self.PendingLabel:SetTextColor(RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b) - self.PendingLabel:Show() - self.ExpirationTime:Hide() - self.CancelButton:Hide() - elseif isApplication and pendingStatus ~= "applied" then - self.PendingLabel:SetText(LFG_LIST_PENDING) - self.PendingLabel:SetTextColor(GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b) - self.PendingLabel:Show() - self.ExpirationTime:Show() - self.CancelButton:Show() - else - self.PendingLabel:Hide() - self.ExpirationTime:Hide() - self.CancelButton:Hide() - end - - --Center justify if we're on more than one line - if self.PendingLabel:GetHeight() > 15 then - self.PendingLabel:SetJustifyH("CENTER") - else - self.PendingLabel:SetJustifyH("RIGHT") - end - - --Change the anchor of the label depending on whether we have the expiration time - if self.ExpirationTime:IsShown() then - self.PendingLabel:SetPoint("RIGHT", self.ExpirationTime, "LEFT", -3, 0) - else - self.PendingLabel:SetPoint("RIGHT", self.ExpirationTime, "RIGHT", -3, 0) - end - - self.expiration = GetTime() + appDuration - - local panel = self:GetParent():GetParent():GetParent() - - local id, activityID, name, comment, voiceChat, iLvl, honorLevel, age, numBNetFriends, numCharFriends, numGuildMates, isDelisted = - C_LFGList.GetSearchResultInfo(resultID) - local activityName = C_LFGList.GetActivityInfo(activityID) - - self.resultID = resultID - self.Selected:SetShown(panel.selectedResult == resultID and not isApplication and not isDelisted) - self.Highlight:SetShown(panel.selectedResult ~= resultID and not isApplication and not isDelisted) - local nameColor = NORMAL_FONT_COLOR - local activityColor = GRAY_FONT_COLOR - if isDelisted or isAppFinished then - nameColor = LFG_LIST_DELISTED_FONT_COLOR - activityColor = LFG_LIST_DELISTED_FONT_COLOR - elseif numBNetFriends > 0 or numCharFriends > 0 or numGuildMates > 0 then - nameColor = BATTLENET_FONT_COLOR - end - self.Name:SetWidth(0) - self.Name:SetText(name) - self.Name:SetTextColor(nameColor.r, nameColor.g, nameColor.b) - self.ActivityName:SetText(activityName) - self.ActivityName:SetTextColor(activityColor.r, activityColor.g, activityColor.b) - self.VoiceChat:SetShown(voiceChat ~= "") - self.VoiceChat.tooltip = voiceChat - - local displayData = C_LFGList.GetSearchResultMemberCounts(resultID) - LFGListGroupDataDisplay_Update(self.DataDisplay, activityID, displayData, isDelisted) - - local nameWidth = isApplication and 165 or 176 - if voiceChat ~= "" then nameWidth = nameWidth - 22 end - if self.Name:GetWidth() > nameWidth then self.Name:SetWidth(nameWidth) end - self.ActivityName:SetWidth(nameWidth) - - local mouseFocus = GetMouseFocus() - if mouseFocus == self then LFGListSearchEntry_OnEnter(self) end - if mouseFocus == self.VoiceChat then mouseFocus:GetScript("OnEnter")(mouseFocus) end - - if isApplication then - self:SetScript("OnUpdate", LFGListSearchEntry_UpdateExpiration) - LFGListSearchEntry_UpdateExpiration(self) - else - self:SetScript("OnUpdate", nil) - end -end - -function LFGListSearchEntry_UpdateExpiration(self) - local duration = 0 - local now = GetTime() - if self.expiration and self.expiration > now then duration = self.expiration - now end - - local minutes = math.floor(duration / 60) - local seconds = duration % 60 - self.ExpirationTime:SetFormattedText("%d:%.2d", minutes, seconds) -end - -function LFGListSearchEntry_OnEvent(self, event, ...) - if event == "LFG_LIST_SEARCH_RESULT_UPDATED" then - local id = ... - if id == self.resultID then LFGListSearchEntry_Update(self) end - elseif event == "LFG_ROLE_CHECK_UPDATE" then - if self.resultID then LFGListSearchEntry_Update(self) end - end -end - -function LFGListSearchEntry_OnClick(self, button) - local scrollFrame = self:GetParent():GetParent() - if button == "RightButton" then - PlaySound("igMainMenuOptionCheckBoxOn") - EasyMenu(LFGListUtil_GetSearchEntryMenu(self.resultID), LFGListFrameDropDown, self, 0, -2, "MENU") - elseif - scrollFrame:GetParent().selectedResult ~= self.resultID - and LFGListSearchPanelUtil_CanSelectResult(self.resultID) - then - PlaySound("igMainMenuOptionCheckBoxOn") - LFGListSearchPanel_SelectResult(scrollFrame:GetParent(), self.resultID) - end -end - -function LFGListSearchEntry_OnEnter(self) - local resultID = self.resultID - local id, activityID, name, comment, voiceChat, iLvl, honorLevel, age, numBNetFriends, numCharFriends, numGuildMates, isDelisted, leaderName, numMembers = - C_LFGList.GetSearchResultInfo(resultID) - local activityName, shortName, categoryID, groupID, minItemLevel, filters, minLevel, maxPlayers, displayType, _, useHonorLevel = - C_LFGList.GetActivityInfo(activityID) - local memberCounts = C_LFGList.GetSearchResultMemberCounts(resultID) - GameTooltip:SetOwner(self, "ANCHOR_RIGHT", 25, 0) - GameTooltip:SetText(name, 1, 1, 1, true) - GameTooltip:AddLine(activityName) - if comment ~= "" then - GameTooltip:AddLine( - string.format(LFG_LIST_COMMENT_FORMAT, comment), - LFG_LIST_COMMENT_FONT_COLOR.r, - LFG_LIST_COMMENT_FONT_COLOR.g, - LFG_LIST_COMMENT_FONT_COLOR.b, - true - ) - end - GameTooltip:AddLine(" ") - if iLvl > 0 then GameTooltip:AddLine(string.format(LFG_LIST_TOOLTIP_ILVL, iLvl)) end - if useHonorLevel and honorLevel > 0 then - GameTooltip:AddLine(string.format(LFG_LIST_TOOLTIP_HONOR_LEVEL, honorLevel)) - end - if voiceChat ~= "" then - GameTooltip:AddLine(string.format(LFG_LIST_TOOLTIP_VOICE_CHAT, voiceChat), nil, nil, nil, true) - end - if iLvl > 0 or (useHonorLevel and honorLevel > 0) or voiceChat ~= "" then GameTooltip:AddLine(" ") end - - if leaderName then GameTooltip:AddLine(string.format(LFG_LIST_TOOLTIP_LEADER, leaderName)) end - if age > 0 then - GameTooltip:AddLine(string.format(LFG_LIST_TOOLTIP_AGE, SecondsToTime(age, false, false, 1, false))) - end - - if leaderName or age > 0 then GameTooltip:AddLine(" ") end - - if displayType == LE_LFG_LIST_DISPLAY_TYPE_CLASS_ENUMERATE then - GameTooltip:AddLine(string.format(LFG_LIST_TOOLTIP_MEMBERS_SIMPLE, numMembers)) - for i = 1, numMembers do - local role, class, classLocalized = C_LFGList.GetSearchResultMemberInfo(resultID, i) - local classColor = RAID_CLASS_COLORS[class] or NORMAL_FONT_COLOR - GameTooltip:AddLine( - string.format(LFG_LIST_TOOLTIP_CLASS_ROLE, classLocalized, _G[role]), - classColor.r, - classColor.g, - classColor.b - ) - end - else - GameTooltip:AddLine( - string.format( - LFG_LIST_TOOLTIP_MEMBERS, - numMembers, - memberCounts.TANK, - memberCounts.HEALER, - memberCounts.DAMAGER - ) - ) - end - - if numBNetFriends + numCharFriends + numGuildMates > 0 then - GameTooltip:AddLine(" ") - GameTooltip:AddLine(LFG_LIST_TOOLTIP_FRIENDS_IN_GROUP) - GameTooltip:AddLine(LFGListSearchEntryUtil_GetFriendList(resultID), 1, 1, 1, true) - end - - local completedEncounters = C_LFGList.GetSearchResultEncounterInfo(resultID) - if completedEncounters and #completedEncounters > 0 then - GameTooltip:AddLine(" ") - GameTooltip:AddLine(LFG_LIST_BOSSES_DEFEATED) - for i = 1, #completedEncounters do - GameTooltip:AddLine(completedEncounters[i], RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b) - end - end - - if isDelisted then - GameTooltip:AddLine(" ") - GameTooltip:AddLine(LFG_LIST_ENTRY_DELISTED, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, true) - end - - GameTooltip:Show() -end - -function LFGListSearchEntryUtil_GetFriendList(resultID) - local list = "" - local bNetFriends, charFriends, guildMates = C_LFGList.GetSearchResultFriends(resultID) - local displayedFirst = false - - --BNet friends - for i = 1, #bNetFriends do - if displayedFirst then - list = list .. PLAYER_LIST_DELIMITER - else - displayedFirst = true - end - list = list .. FRIENDS_BNET_NAME_COLOR_CODE .. bNetFriends[i] .. FONT_COLOR_CODE_CLOSE - end - - --Character friends - for i = 1, #charFriends do - if displayedFirst then - list = list .. PLAYER_LIST_DELIMITER - else - displayedFirst = true - end - list = list .. FRIENDS_WOW_NAME_COLOR_CODE .. charFriends[i] .. FONT_COLOR_CODE_CLOSE - end - - --Guild mates - for i = 1, #guildMates do - if displayedFirst then - list = list .. PLAYER_LIST_DELIMITER - else - displayedFirst = true - end - list = list .. RGBTableToColorCode(ChatTypeInfo.GUILD) .. guildMates[i] .. FONT_COLOR_CODE_CLOSE - end - return list -end - -------------------------------------------------------- -----------Application dialog functions -------------------------------------------------------- -function LFGListApplicationDialog_OnLoad(self) - self:RegisterEvent("LFG_ROLE_UPDATE") - self.Description.EditBox:SetScript("OnEnterPressed", nop) - self.hideOnEscape = true -end - -function LFGListApplicationDialog_OnEvent(self, event) - if event == "LFG_ROLE_UPDATE" then LFGListApplicationDialog_UpdateRoles(self) end -end - -function LFGListApplicationDialog_Show(self, resultID) - self.resultID = resultID - self.Description.EditBox:SetText("") - LFGListApplicationDialog_UpdateRoles(self) - StaticPopupSpecial_Show(self) -end - -function LFGListApplicationDialog_UpdateRoles(self) - local availTank, availHealer, availDPS = C_LFGList.GetAvailableRoles() - - local avail1, avail2 - if availTank then avail1 = self.TankButton end - if availHealer then - if avail1 then - avail2 = self.HealerButton - else - avail1 = self.HealerButton - end - end - if availDPS then - if avail1 then - avail2 = self.DamagerButton - else - avail1 = self.DamagerButton - end - end - - self.TankButton:SetShown(availTank) - self.HealerButton:SetShown(availHealer) - self.DamagerButton:SetShown(availDPS) - - if avail2 then - avail1:ClearAllPoints() - avail1:SetPoint("TOPRIGHT", self, "TOP", -5, -35) - avail2:ClearAllPoints() - avail2:SetPoint("TOPLEFT", self, "TOP", 5, -35) - elseif avail1 then - avail1:ClearAllPoints() - avail1:SetPoint("TOP", self, "TOP", 0, -35) - end - - local _, tank, healer, dps = GetLFGRoles() - self.TankButton.CheckButton:SetChecked(tank) - self.HealerButton.CheckButton:SetChecked(healer) - self.DamagerButton.CheckButton:SetChecked(dps) - - LFGListApplicationDialog_UpdateValidState(self) -end - -function LFGListApplicationDialog_UpdateValidState(self) - if - (self.TankButton:IsShown() and self.TankButton.CheckButton:GetChecked()) - or (self.HealerButton:IsShown() and self.HealerButton.CheckButton:GetChecked()) - or (self.DamagerButton:IsShown() and self.DamagerButton.CheckButton:GetChecked()) - then - self.SignUpButton:Enable() - self.SignUpButton.errorText = nil - else - self.SignUpButton:Disable() - self.SignUpButton.errorText = LFG_LIST_MUST_SELECT_ROLE - end -end - -function LFGListRoleButtonCheckButton_OnClick(self) - if self:GetChecked() then - PlaySound("igMainMenuOptionCheckBoxOn") - else - PlaySound("igMainMenuOptionCheckBoxOff") - end - - local dialog = self:GetParent():GetParent() - local leader, tank, healer, dps = GetLFGRoles() - SetLFGRoles( - leader, - dialog.TankButton.CheckButton:GetChecked(), - dialog.HealerButton.CheckButton:GetChecked(), - dialog.DamagerButton.CheckButton:GetChecked() - ) -end - -------------------------------------------------------- -----------Invite dialog functions -------------------------------------------------------- -function LFGListInviteDialog_OnLoad(self) - self:RegisterEvent("LFG_LIST_SEARCH_RESULTS_RECEIVED") - self:RegisterEvent("LFG_LIST_SEARCH_RESULT_UPDATED") - self:RegisterEvent("LFG_LIST_JOINED_GROUP") - self:RegisterEvent("PARTY_LEADER_CHANGED") - self:RegisterEvent("UNIT_CONNECTION") -end - -function LFGListInviteDialog_OnEvent(self, event, ...) - if event == "LFG_LIST_SEARCH_RESULTS_RECEIVED" then - LFGListInviteDialog_CheckPending(self) - elseif event == "LFG_LIST_SEARCH_RESULT_UPDATED" then - local id = ... - local _, status, pendingStatus = C_LFGList.GetApplicationInfo(id) - - local empowered = LFGListUtil_IsAppEmpowered() - if self.resultID == id and not self.informational and (status ~= "invited" or not empowered) then - --Check if we need to hide the panel - StaticPopupSpecial_Hide(self) - LFGListInviteDialog_CheckPending(self) - elseif status == "invited" and not pendingStatus then - --Check if we need to show this result - LFGListInviteDialog_CheckPending(self) - end - elseif event == "PARTY_LEADER_CHANGED" then - --Check if we need to hide the current panel - if not LFGListUtil_IsAppEmpowered() and self:IsShown() and not self.informational then - StaticPopupSpecial_Hide(self) - end - - --Check if we need to show any panels - LFGListInviteDialog_CheckPending(self) - elseif event == "LFG_LIST_JOINED_GROUP" then - if not LFGListUtil_IsAppEmpowered() then - --Show the informational dialog, regardless of whether we already had something up - local id = ... - StaticPopupSpecial_Hide(self) - LFGListInviteDialog_Show(self, id) - end - elseif event == "UNIT_CONNECTION" then - LFGListInviteDialog_UpdateOfflineNotice(self) - end -end - -function LFGListInviteDialog_CheckPending(self) - --If we're already showing one, don't replace it - if self:IsShown() then return end - - --If we're not empowered to make changes to applications, don't pop up anything. - if not LFGListUtil_IsAppEmpowered() then return end - - local apps = C_LFGList.GetApplications() - for i = 1, #apps do - local id, status, pendingStatus = C_LFGList.GetApplicationInfo(apps[i]) - if status == "invited" and not pendingStatus then - LFGListInviteDialog_Show(self, apps[i]) - return - end - end -end - -function LFGListInviteDialog_Show(self, resultID) - local id, activityID, name, comment, voiceChat, iLvl, honorLevel, age, numBNetFriends, numCharFriends, numGuildMates, isDelisted = - C_LFGList.GetSearchResultInfo(resultID) - local activityName = C_LFGList.GetActivityInfo(activityID) - local _, status, _, _, role = C_LFGList.GetApplicationInfo(resultID) - - local informational = (status ~= "invited") - assert(not informational or status == "inviteaccepted") - - self.resultID = resultID - self.GroupName:SetText(name) - self.ActivityName:SetText(activityName) - self.Role:SetText(_G[role]) - self.RoleIcon:SetTexCoord(GetTexCoordsForRole(role)) - self.Label:SetText(informational and LFG_LIST_JOINED_GROUP_NOTICE or LFG_LIST_INVITED_TO_GROUP) - - self.informational = informational - self.AcceptButton:SetShown(not informational) - self.DeclineButton:SetShown(not informational) - self.AcknowledgeButton:SetShown(informational) - - if not informational and GroupHasOfflineMember(LE_PARTY_CATEGORY_HOME) then - self:SetHeight(250) - self.OfflineNotice:Show() - LFGListInviteDialog_UpdateOfflineNotice(self) - else - self:SetHeight(210) - self.OfflineNotice:Hide() - end - - StaticPopupSpecial_Show(self) - - PlaySound("ReadyCheck") - FlashClientIcon() -end - -function LFGListInviteDialog_UpdateOfflineNotice(self) - if GroupHasOfflineMember(LE_PARTY_CATEGORY_HOME) then - self.OfflineNotice:SetText(LFG_LIST_OFFLINE_MEMBER_NOTICE) - self.OfflineNotice:SetFontObject(GameFontRed) - else - self.OfflineNotice:SetText(LFG_LIST_OFFLINE_MEMBER_NOTICE_GONE) - self.OfflineNotice:SetFontObject(GameFontGreen) - end -end - -function LFGListInviteDialog_Accept(self) - C_LFGList.AcceptInvite(self.resultID) - StaticPopupSpecial_Hide(self) - LFGListInviteDialog_CheckPending(self) -end - -function LFGListInviteDialog_Decline(self) - C_LFGList.DeclineInvite(self.resultID) - StaticPopupSpecial_Hide(self) - LFGListInviteDialog_CheckPending(self) -end - -function LFGListInviteDialog_Acknowledge(self) - StaticPopupSpecial_Hide(self) - LFGListInviteDialog_CheckPending(self) -end - -------------------------------------------------------- -----------Group Data Display functions -------------------------------------------------------- -function LFGListGroupDataDisplay_Update(self, activityID, displayData, disabled) - local fullName, shortName, categoryID, groupID, iLevel, filters, minLevel, maxPlayers, displayType = - C_LFGList.GetActivityInfo(activityID) - if displayType == LE_LFG_LIST_DISPLAY_TYPE_ROLE_COUNT then - self.RoleCount:Show() - self.Enumerate:Hide() - self.PlayerCount:Hide() - LFGListGroupDataDisplayRoleCount_Update(self.RoleCount, displayData, disabled) - elseif displayType == LE_LFG_LIST_DISPLAY_TYPE_ROLE_ENUMERATE then - self.RoleCount:Hide() - self.Enumerate:Show() - self.PlayerCount:Hide() - LFGListGroupDataDisplayEnumerate_Update( - self.Enumerate, - maxPlayers, - displayData, - disabled, - LFG_LIST_GROUP_DATA_ROLE_ORDER - ) - elseif displayType == LE_LFG_LIST_DISPLAY_TYPE_CLASS_ENUMERATE then - self.RoleCount:Hide() - self.Enumerate:Show() - self.PlayerCount:Hide() - LFGListGroupDataDisplayEnumerate_Update( - self.Enumerate, - maxPlayers, - displayData, - disabled, - LFG_LIST_GROUP_DATA_CLASS_ORDER - ) - elseif displayType == LE_LFG_LIST_DISPLAY_TYPE_PLAYER_COUNT then - self.RoleCount:Hide() - self.Enumerate:Hide() - self.PlayerCount:Show() - LFGListGroupDataDisplayPlayerCount_Update(self.PlayerCount, displayData, disabled) - elseif displayType == LE_LFG_LIST_DISPLAY_TYPE_HIDE_ALL then - self.RoleCount:Hide() - self.Enumerate:Hide() - self.PlayerCount:Hide() - else - GMError("Unknown display type") - self.RoleCount:Hide() - self.Enumerate:Hide() - self.PlayerCount:Hide() - end -end - -function LFGListGroupDataDisplayRoleCount_Update(self, displayData, disabled) - self.TankCount:SetText(displayData.TANK) - self.HealerCount:SetText(displayData.HEALER) - self.DamagerCount:SetText(displayData.DAMAGER) - - --Update for the disabled state - local r = disabled and LFG_LIST_DELISTED_FONT_COLOR.r or HIGHLIGHT_FONT_COLOR.r - local g = disabled and LFG_LIST_DELISTED_FONT_COLOR.g or HIGHLIGHT_FONT_COLOR.g - local b = disabled and LFG_LIST_DELISTED_FONT_COLOR.b or HIGHLIGHT_FONT_COLOR.b - self.TankCount:SetTextColor(r, g, b) - self.HealerCount:SetTextColor(r, g, b) - self.DamagerCount:SetTextColor(r, g, b) - self.TankIcon:SetDesaturated(disabled) - self.HealerIcon:SetDesaturated(disabled) - self.DamagerIcon:SetDesaturated(disabled) - self.TankIcon:SetAlpha(disabled and 0.5 or 0.70) - self.HealerIcon:SetAlpha(disabled and 0.5 or 0.70) - self.DamagerIcon:SetAlpha(disabled and 0.5 or 0.70) -end - -function LFGListGroupDataDisplayEnumerate_Update(self, numPlayers, displayData, disabled, iconOrder) - --Show/hide the required icons - for i = 1, #self.Icons do - if i > numPlayers then - self.Icons[i]:Hide() - else - self.Icons[i]:Show() - self.Icons[i]:SetDesaturated(disabled) - self.Icons[i]:SetAlpha(disabled and 0.5 or 1.0) - end - end - - --Note that icons are numbered from right to left - local iconIndex = numPlayers - for i = 1, #iconOrder do - for j = 1, displayData[iconOrder[i]] do - self.Icons[iconIndex]:SetAtlas(LFG_LIST_GROUP_DATA_ATLASES[iconOrder[i]], false) - iconIndex = iconIndex - 1 - if iconIndex < 1 then return end - end - end - - for i = 1, iconIndex do - self.Icons[i]:SetAtlas("groupfinder-icon-emptyslot", false) - end -end - -function LFGListGroupDataDisplayPlayerCount_Update(self, displayData, disabled) - local numPlayers = displayData.TANK + displayData.HEALER + displayData.DAMAGER + displayData.NOROLE - - local color = disabled and LFG_LIST_DELISTED_FONT_COLOR or HIGHLIGHT_FONT_COLOR - self.Count:SetText(numPlayers) - self.Count:SetTextColor(color.r, color.g, color.b) - self.Icon:SetDesaturated(disabled) - self.Icon:SetAlpha(disabled and 0.5 or 1) -end - -------------------------------------------------------- -----------Edit Box functions -------------------------------------------------------- -function LFGListEditBox_AddToTabCategory(self, tabCategory) - self.tabCategory = tabCategory - local cat = LFG_LIST_EDIT_BOX_TAB_CATEGORIES[tabCategory] - if not cat then - cat = {} - LFG_LIST_EDIT_BOX_TAB_CATEGORIES[tabCategory] = cat - end - self.tabCategoryIndex = #cat + 1 - cat[self.tabCategoryIndex] = self -end - -function LFGListEditBox_OnTabPressed(self) - if self.tabCategory then - local offset = IsShiftKeyDown() and -1 or 1 - local cat = LFG_LIST_EDIT_BOX_TAB_CATEGORIES[self.tabCategory] - if cat then - --It's times like this when I wish Lua was 0-based... - cat[((self.tabCategoryIndex - 1 + offset + #cat) % #cat) + 1]:SetFocus() - end - end -end - -------------------------------------------------------- -----------Requirement functions -------------------------------------------------------- -function LFGListRequirement_Validate(self, text) - if self.validateFunc then - self.warningText = self:validateFunc(text) - self.WarningFrame:SetShown(self.warningText) - self.CheckButton:SetShown(not self.warningText) - end - LFGListEntryCreation_UpdateValidState(self:GetParent()) -end - -------------------------------------------------------- -----------Utility functions -------------------------------------------------------- -function LFGListUtil_AugmentWithBest(filters, categoryID, groupID, activityID) - local myNumMembers = math.max(GetNumGroupMembers(LE_PARTY_CATEGORY_HOME), 1) - local myItemLevel = GetAverageItemLevel() - if not activityID then - --Find the best activity by iLevel and recommended flag - local activities = C_LFGList.GetAvailableActivities(categoryID, groupID, filters) - local bestItemLevel, bestRecommended, bestCurrentArea, bestMinLevel, bestMaxPlayers - for i = 1, #activities do - local fullName, shortName, categoryID, groupID, iLevel, filters, minLevel, maxPlayers, displayType, orderIndex, useHonorLevel = - C_LFGList.GetActivityInfo(activities[i]) - local isRecommended = bit.band(filters, LE_LFG_LIST_FILTER_RECOMMENDED) ~= 0 - local currentArea = C_LFGList.GetActivityInfoExpensive(activities[i]) - - local usedItemLevel = myItemLevel - local isBetter = false - if not activityID then - isBetter = true - elseif currentArea ~= bestCurrentArea then - isBetter = currentArea - elseif bestRecommended ~= isRecommended then - isBetter = isRecommended - elseif bestMinLevel ~= minLevel then - isBetter = minLevel > bestMinLevel - elseif iLevel ~= bestItemLevel then - isBetter = (iLevel > bestItemLevel and iLevel <= usedItemLevel) - or (iLevel <= usedItemLevel and bestItemLevel > usedItemLevel) - or (iLevel < bestItemLevel and iLevel > usedItemLevel) - elseif (myNumMembers < maxPlayers) ~= (myNumMembers < bestMaxPlayers) then - isBetter = myNumMembers < maxPlayers - end - - if isBetter then - activityID = activities[i] - bestItemLevel = iLevel - bestRecommended = isRecommended - bestCurrentArea = currentArea - bestMinLevel = minLevel - bestMaxPlayers = maxPlayers - end - end - end - - assert(activityID) - - --Update the categoryID and groupID with what we get from the activity - categoryID, groupID, _, filters = select(ACTIVITY_RETURN_VALUES.categoryID, C_LFGList.GetActivityInfo(activityID)) - - --Update the filters if needed - local _, separateRecommended = C_LFGList.GetCategoryInfo(categoryID) - if separateRecommended then - if bit.band(filters, LE_LFG_LIST_FILTER_RECOMMENDED) == 0 then - filters = LE_LFG_LIST_FILTER_NOT_RECOMMENDED - else - filters = LE_LFG_LIST_FILTER_RECOMMENDED - end - else - filters = 0 - end - - return filters, categoryID, groupID, activityID -end - -function LFGListUtil_SetUpDropDown(context, dropdown, populateFunc, onClickFunc) - local onClick = function(self, ...) onClickFunc(context, self.value, ...) end - local initialize = function(self) - local info = UIDropDownMenu_CreateInfo() - info.func = onClick - populateFunc(context, dropdown, info) - end - dropdown:SetScript("OnShow", function(self) - UIDropDownMenu_SetWidth(self, dropdown:GetWidth() - 50) - UIDropDownMenu_Initialize(self, initialize) - end) - UIDropDownMenu_JustifyText(dropdown, "LEFT") - UIDropDownMenu_SetAnchor(dropdown, -20, 7, "TOPRIGHT", dropdown, "BOTTOMRIGHT") -end - -function LFGListUtil_ValidateLevelReq(self, text) - local myItemLevel = GetAverageItemLevel() - if text ~= "" and tonumber(text) > myItemLevel then return LFG_LIST_ILVL_ABOVE_YOURS end -end - -function LFGListUtil_ValidateHonorLevelReq(self, text) - local myHonorLevel = UnitHonorLevel("player") - if text ~= "" and tonumber(text) > myHonorLevel then return LFG_LIST_HONOR_LEVEL_ABOVE_YOURS end -end - -function LFGListUtil_GetCurrentExpansion() - for i = 0, #MAX_PLAYER_LEVEL_TABLE do - if UnitLevel("player") <= MAX_PLAYER_LEVEL_TABLE[i] then return i end - end - - --We're higher than the highest level. Weird. - return #MAX_PLAYER_LEVEL_TABLE -end - -function LFGListUtil_GetDecoratedCategoryName(categoryName, filter, useColors) - if filter == 0 then return categoryName end - - local colorStart = "" - local colorEnd = "" - if useColors then - colorStart = "|cffffffff" - colorEnd = "|r" - end - - local extraName = "" - if filter == LE_LFG_LIST_FILTER_NOT_RECOMMENDED then - extraName = LFG_LIST_LEGACY - elseif filter == LE_LFG_LIST_FILTER_RECOMMENDED then - local exp = LFGListUtil_GetCurrentExpansion() - extraName = _G["EXPANSION_NAME" .. exp] - end - - return string.format(LFG_LIST_CATEGORY_FORMAT, categoryName, colorStart, extraName, colorEnd) -end - -function LFGListUtil_SortSearchResultsCB(id1, id2) - local id1, activityID1, name1, comment1, voiceChat1, iLvl1, honorLevel1, age1, numBNetFriends1, numCharFriends1, numGuildMates1, isDelisted1 = - C_LFGList.GetSearchResultInfo(id1) - local id2, activityID2, name2, comment2, voiceChat2, iLvl2, honorLevel2, age2, numBNetFriends2, numCharFriends2, numGuildMates2, isDelisted2 = - C_LFGList.GetSearchResultInfo(id2) - - --If one has more friends, do that one first - if numBNetFriends1 ~= numBNetFriends2 then return numBNetFriends1 > numBNetFriends2 end - - if numCharFriends1 ~= numCharFriends2 then return numCharFriends1 > numCharFriends2 end - - if numGuildMates1 ~= numGuildMates2 then return numGuildMates1 > numGuildMates2 end - - --If we aren't sorting by anything else, just go by ID - return id1 < id2 -end - -function LFGListUtil_SortSearchResults(results) table.sort(results, LFGListUtil_SortSearchResultsCB) end - -function LFGListUtil_FilterApplicants(applicants) - --[[for i=#applicants, 1, -1 do - local id, status, pendingStatus, numMembers, isNew = C_LFGList.GetApplicantInfo(applicants[i]); - if ( status ~= "applied" and status ~= "invited" ) then - --Remove this applicant. Don't worry about order. - applicants[i] = applicants[#applicants]; - applicants[#applicants] = nil; - end - end--]] -end - -function LFGListUtil_SortApplicantsCB(id1, id2) - local _, _, _, _, isNew1, _, orderID1 = C_LFGList.GetApplicantInfo(id1) - local _, _, _, _, isNew2, _, orderID2 = C_LFGList.GetApplicantInfo(id2) - - --New items go to the bottom - if isNew1 ~= isNew2 then return isNew2 end - - return orderID1 < orderID2 -end - -function LFGListUtil_SortApplicants(applicants) table.sort(applicants, LFGListUtil_SortApplicantsCB) end - -function LFGListUtil_IsAppEmpowered() - return not IsInGroup(LE_PARTY_CATEGORY_HOME) or UnitIsGroupLeader("player", LE_PARTY_CATEGORY_HOME) -end - -function LFGListUtil_IsEntryEmpowered() - return UnitIsGroupLeader("player", LE_PARTY_CATEGORY_HOME) or UnitIsGroupAssistant("player", LE_PARTY_CATEGORY_HOME) -end - -function LFGListUtil_AppendStatistic(label, value, title, lastTitle) - if title ~= lastTitle then - GameTooltip:AddLine(" ") - GameTooltip:AddLine(title, 1, 1, 1) - end - - GameTooltip:AddLine(string.format(label, value)) -end - -local LFG_LIST_SEARCH_ENTRY_MENU = { - { - text = nil, --Group name goes here - isTitle = true, - notCheckable = true, - }, - { - text = WHISPER_LEADER, - func = function(_, name) ChatFrame_SendTell(name) end, - notCheckable = true, - arg1 = nil, --Leader name goes here - disabled = nil, --Disabled if we don't have a leader name yet or you haven't applied - tooltipWhileDisabled = 1, - tooltipOnButton = 1, - tooltipTitle = nil, --The title to display on mouseover - tooltipText = nil, --The text to display on mouseover - }, - { - text = LFG_LIST_REPORT_GROUP_FOR, - hasArrow = true, - notCheckable = true, - menuList = { - { - text = LFG_LIST_BAD_NAME, - func = function(_, id) C_LFGList.ReportSearchResult(id, "lfglistname") end, - arg1 = nil, --Search result ID goes here - notCheckable = true, - }, - { - text = LFG_LIST_BAD_DESCRIPTION, - func = function(_, id) C_LFGList.ReportSearchResult(id, "lfglistcomment") end, - arg1 = nil, --Search reuslt ID goes here - notCheckable = true, - disabled = nil, --Disabled if the description is just an empty string - }, - { - text = LFG_LIST_BAD_VOICE_CHAT_COMMENT, - func = function(_, id) C_LFGList.ReportSearchResult(id, "lfglistvoicechat") end, - arg1 = nil, --Search reuslt ID goes here - notCheckable = true, - disabled = nil, --Disabled if the description is just an empty string - }, - { - text = LFG_LIST_BAD_LEADER_NAME, - func = function(_, id) C_LFGList.ReportSearchResult(id, "badplayername") end, - arg1 = nil, --Search reuslt ID goes here - notCheckable = true, - disabled = nil, --Disabled if we don't have a name for the leader - }, - }, - }, - { - text = CANCEL, - notCheckable = true, - }, -} - -function LFGListUtil_GetSearchEntryMenu(resultID) - local id, activityID, name, comment, voiceChat, iLvl, honorLevel, age, numBNetFriends, numCharFriends, numGuildMates, isDelisted, leaderName = - C_LFGList.GetSearchResultInfo(resultID) - local _, appStatus, pendingStatus, appDuration = C_LFGList.GetApplicationInfo(resultID) - LFG_LIST_SEARCH_ENTRY_MENU[1].text = name - LFG_LIST_SEARCH_ENTRY_MENU[2].arg1 = leaderName - local applied = (appStatus == "applied" or appStatus == "invited") - LFG_LIST_SEARCH_ENTRY_MENU[2].disabled = not leaderName or not applied - LFG_LIST_SEARCH_ENTRY_MENU[2].tooltipTitle = (not applied) and WHISPER - LFG_LIST_SEARCH_ENTRY_MENU[2].tooltipText = (not applied) and LFG_LIST_MUST_SIGN_UP_TO_WHISPER - LFG_LIST_SEARCH_ENTRY_MENU[3].menuList[1].arg1 = resultID - LFG_LIST_SEARCH_ENTRY_MENU[3].menuList[2].arg1 = resultID - LFG_LIST_SEARCH_ENTRY_MENU[3].menuList[2].disabled = (comment == "") - LFG_LIST_SEARCH_ENTRY_MENU[3].menuList[3].arg1 = resultID - LFG_LIST_SEARCH_ENTRY_MENU[3].menuList[3].disabled = (voiceChat == "") - LFG_LIST_SEARCH_ENTRY_MENU[3].menuList[4].arg1 = resultID - LFG_LIST_SEARCH_ENTRY_MENU[3].menuList[4].disabled = not leaderName - return LFG_LIST_SEARCH_ENTRY_MENU -end - -local LFG_LIST_APPLICANT_MEMBER_MENU = { - { - text = nil, --Player name goes here - isTitle = true, - notCheckable = true, - }, - { - text = WHISPER, - func = function(_, name) ChatFrame_SendTell(name) end, - notCheckable = true, - arg1 = nil, --Player name goes here - disabled = nil, --Disabled if we don't have a name yet - }, - { - text = LFG_LIST_REPORT_FOR, - hasArrow = true, - notCheckable = true, - menuList = { - { - text = LFG_LIST_BAD_PLAYER_NAME, - notCheckable = true, - func = function(_, id, memberIdx) C_LFGList.ReportApplicant(id, "badplayername", memberIdx) end, - arg1 = nil, --Applicant ID goes here - arg2 = nil, --Applicant Member index goes here - }, - { - text = LFG_LIST_BAD_DESCRIPTION, - notCheckable = true, - func = function(_, id) C_LFGList.ReportApplicant(id, "lfglistappcomment") end, - arg1 = nil, --Applicant ID goes here - }, - }, - }, - { - text = IGNORE_PLAYER, - notCheckable = true, - func = function(_, name, applicantID) - AddIgnore(name) - C_LFGList.DeclineApplicant(applicantID) - end, - arg1 = nil, --Player name goes here - arg2 = nil, --Applicant ID goes here - disabled = nil, --Disabled if we don't have a name yet - }, - { - text = CANCEL, - notCheckable = true, - }, -} - -function LFGListUtil_GetApplicantMemberMenu(applicantID, memberIdx) - local name, class, localizedClass, level, itemLevel, honorLevel, tank, healer, damage, assignedRole = - C_LFGList.GetApplicantMemberInfo(applicantID, memberIdx) - local id, status, pendingStatus, numMembers, isNew, comment = C_LFGList.GetApplicantInfo(applicantID) - LFG_LIST_APPLICANT_MEMBER_MENU[1].text = name or " " - LFG_LIST_APPLICANT_MEMBER_MENU[2].arg1 = name - LFG_LIST_APPLICANT_MEMBER_MENU[2].disabled = not name or (status ~= "applied" and status ~= "invited") - LFG_LIST_APPLICANT_MEMBER_MENU[3].menuList[1].arg1 = applicantID - LFG_LIST_APPLICANT_MEMBER_MENU[3].menuList[1].arg2 = memberIdx - LFG_LIST_APPLICANT_MEMBER_MENU[3].menuList[2].arg1 = applicantID - LFG_LIST_APPLICANT_MEMBER_MENU[3].menuList[2].disabled = (comment == "") - LFG_LIST_APPLICANT_MEMBER_MENU[4].arg1 = name - LFG_LIST_APPLICANT_MEMBER_MENU[4].arg2 = applicantID - LFG_LIST_APPLICANT_MEMBER_MENU[4].disabled = not name - return LFG_LIST_APPLICANT_MEMBER_MENU -end - -function LFGListUtil_InitializeLangaugeFilter(dropdown) - local info = UIDropDownMenu_CreateInfo() - local languages = C_LFGList.GetAvailableLanguageSearchFilter() - local enabled = C_LFGList.GetLanguageSearchFilter() - local defaults = C_LFGList.GetDefaultLanguageSearchFilter() - local entry = UIDropDownMenu_CreateInfo() - for i = 1, #languages do - local lang = languages[i] - entry.text = _G["LFG_LIST_LANGUAGE_" .. string.upper(lang)] - entry.checked = enabled[lang] or defaults[lang] - entry.disabled = defaults[lang] - entry.isNotRadio = true - entry.keepShownOnClick = true - entry.func = function(self, _, _, checked) - enabled[lang] = checked - C_LFGList.SaveLanguageSearchFilter(enabled) - end - UIDropDownMenu_AddButton(entry) - end -end - -function LFGListUtil_OpenBestWindow(toggle) - local func = toggle and PVEFrame_ToggleFrame or PVEFrame_ShowFrame - local active, activityID, ilvl, honorLevel, name, comment, voiceChat = C_LFGList.GetActiveEntryInfo() - if active then - --Open to the window of our active activity - local fullName, shortName, categoryID, groupID, iLevel, filters = C_LFGList.GetActivityInfo(activityID) - - if bit.band(filters, LE_LFG_LIST_FILTER_PVE) ~= 0 then - func("GroupFinderFrame", "LFGListPVEStub") - else - func("PVPUIFrame", "LFGListPVPStub") - end - else - --Open to the last window we had open - if bit.band(LFGListFrame.baseFilters, LE_LFG_LIST_FILTER_PVE) ~= 0 then - func("GroupFinderFrame", "LFGListPVEStub") - else - func("PVPUIFrame", "LFGListPVPStub") - end - end -end - -function LFGListUtil_SortActivitiesByRelevancyCB(id1, id2) - local fullName1, _, _, _, iLevel1, _, minLevel1 = C_LFGList.GetActivityInfo(id1) - local fullName2, _, _, _, iLevel2, _, minLevel2 = C_LFGList.GetActivityInfo(id2) - - if minLevel1 ~= minLevel2 then - return minLevel1 > minLevel2 - elseif iLevel1 ~= iLevel2 then - local myILevel = GetAverageItemLevel() - - if (iLevel1 <= myILevel) ~= (iLevel2 <= myILevel) then - --If one is below our item level and the other above, choose the one we meet - return iLevel1 < myILevel - else - --If both are above or both are below, choose the one closest to our iLevel - return math.abs(iLevel1 - myILevel) < math.abs(iLevel2 - myILevel) - end - else - return strcmputf8i(fullName1, fullName2) < 0 - end -end - -function LFGListUtil_SortActivitiesByRelevancy(activities) - table.sort(activities, LFGListUtil_SortActivitiesByRelevancyCB) -end - -LFG_LIST_ACTIVE_QUEUE_MESSAGE_EVENTS = { - "LFG_LIST_ACTIVE_ENTRY_UPDATE", - "LFG_LIST_SEARCH_RESULT_UPDATED", - "PVP_ROLE_CHECK_UPDATED", - "UPDATE_BATTLEFIELD_STATUS", - "LFG_UPDATE", - "LFG_ROLE_CHECK_UPDATE", - "LFG_PROPOSAL_UPDATE", - "LFG_PROPOSAL_FAILED", - "LFG_PROPOSAL_SUCCEEDED", - "LFG_PROPOSAL_SHOW", - "LFG_QUEUE_STATUS_UPDATE", -} - -function LFGListUtil_GetActiveQueueMessage(isApplication) - --Check for applications if we're trying to list - if not isApplication and select(2, C_LFGList.GetNumApplications()) > 0 then - return CANNOT_DO_THIS_WITH_LFGLIST_APP - end - - --Check for listings if we have an application - if isApplication and C_LFGList.GetActiveEntryInfo() then return CANNOT_DO_THIS_WHILE_LFGLIST_LISTED end - - --Check all LFG categories - for category = 1, NUM_LE_LFG_CATEGORYS do - local mode = GetLFGMode(category) - if mode then - if mode == "lfgparty" then - return CANNOT_DO_THIS_IN_LFG_PARTY - elseif mode == "rolecheck" or (mode and not isApplication) then - return CANNOT_DO_THIS_IN_PVE_QUEUE - end - end - end - - --Check PvP role check - local inProgress, _, _, _, _, isBattleground = GetLFGRoleUpdate() - if inProgress then - return isBattleground and CANNOT_DO_THIS_WHILE_PVP_QUEUING or CANNOT_DO_THIS_WHILE_PVE_QUEUING - end - - for i = 1, GetMaxBattlefieldID() do - local status, mapName, teamSize, registeredMatch, suspend = GetBattlefieldStatus(i) - if status and status ~= "none" then return CANNOT_DO_THIS_IN_BATTLEGROUND end - end -end - -local LFG_LIST_INACTIVE_STATUSES = { - cancelled = true, - failed = true, - declined = true, - timedout = true, - invitedeclined = true, -} - -function LFGListUtil_IsStatusInactive(status) return LFG_LIST_INACTIVE_STATUSES[status] end - -function LFGListUtil_SetAutoAccept(autoAccept) - local active, activityID, iLevel, honorLevel, name, comment, voiceChat, expiration, oldAutoAccept = - C_LFGList.GetActiveEntryInfo() - if not active then - --If we're not listed, we can't change the value. - return - end - - C_LFGList.UpdateListing(activityID, name, iLevel, honorLevel, voiceChat, comment, autoAccept) -end +------------------------------------------------------- +----------Constants +------------------------------------------------------- +MAX_LFG_LIST_APPLICATIONS = 5 +MAX_LFG_LIST_SEARCH_AUTOCOMPLETE_ENTRIES = 6 +MAX_LFG_LIST_GROUP_DROPDOWN_ENTRIES = 10 +LFG_LIST_DELISTED_FONT_COLOR = { r = 0.3, g = 0.3, b = 0.3 } +LFG_LIST_COMMENT_FONT_COLOR = { r = 0.6, g = 0.6, b = 0.6 } + +ACTIVITY_RETURN_VALUES = { + fullName = 1, + shortName = 2, + categoryID = 3, + groupID = 4, + itemLevel = 5, + filters = 6, + minLevel = 7, + maxPlayers = 8, + displayType = 9, + orderIndex = 10, + useHonorLevel = 11, +} + +--Hard-coded values. Should probably make these part of the DB, but it gets a little more complicated with the per-expansion textures +LFG_LIST_CATEGORY_TEXTURES = { + [1] = "questing", + [2] = "dungeons", + [3] = "raids", --Prefix for expansion + [4] = "arenas", + [5] = "scenarios", + [6] = "custom", -- Prefix for "-pve" or "-pvp" + [7] = "skirmishes", + [8] = "battlegrounds", + [9] = "ratedbgs", + [10] = "ashran", +} + +LFG_LIST_PER_EXPANSION_TEXTURES = { + [0] = "classic", + [1] = "bc", + [2] = "wrath", + [3] = "cataclysm", + [4] = "mists", + [5] = "warlords", + [6] = "legion", +} + +LFG_LIST_GROUP_DATA_ATLASES = { + --Roles + TANK = "groupfinder-icon-role-large-tank", + HEALER = "groupfinder-icon-role-large-heal", + DAMAGER = "groupfinder-icon-role-large-dps", +} + +--Fill out classes +for i = 1, #CLASS_SORT_ORDER do + LFG_LIST_GROUP_DATA_ATLASES[CLASS_SORT_ORDER[i]] = "groupfinder-icon-class-" .. string.lower(CLASS_SORT_ORDER[i]) +end + +LFG_LIST_GROUP_DATA_ROLE_ORDER = { "TANK", "HEALER", "DAMAGER" } +LFG_LIST_GROUP_DATA_CLASS_ORDER = CLASS_SORT_ORDER + +StaticPopupDialogs["LFG_LIST_INVITING_CONVERT_TO_RAID"] = { + text = LFG_LIST_CONVERT_TO_RAID_WARNING, + button1 = INVITE, + button2 = CANCEL, + OnAccept = function(self, applicantID) + ConvertToRaid() + C_LFGList.InviteApplicant(applicantID) + end, + timeout = 0, + whileDead = 1, + hideOnEscape = 1, +} + +------------------------------------------------------- +----------Base Frame +------------------------------------------------------- +LFG_LIST_EDIT_BOX_TAB_CATEGORIES = {} +function LFGListFrame_OnLoad(self) + self:RegisterEvent("PARTY_LEADER_CHANGED") + self:RegisterEvent("GROUP_ROSTER_UPDATE") + self:RegisterEvent("PLAYER_SPECIALIZATION_CHANGED") + self:RegisterEvent("PLAYER_ROLES_ASSIGNED") + self:RegisterEvent("LFG_LIST_AVAILABILITY_UPDATE") + self:RegisterEvent("LFG_LIST_ACTIVE_ENTRY_UPDATE") + self:RegisterEvent("LFG_LIST_ENTRY_CREATION_FAILED") + self:RegisterEvent("LFG_LIST_SEARCH_RESULTS_RECEIVED") + self:RegisterEvent("LFG_LIST_SEARCH_RESULT_UPDATED") + self:RegisterEvent("LFG_LIST_SEARCH_FAILED") + self:RegisterEvent("LFG_LIST_APPLICANT_LIST_UPDATED") + self:RegisterEvent("LFG_LIST_APPLICANT_UPDATED") + self:RegisterEvent("LFG_LIST_ENTRY_EXPIRED_TOO_MANY_PLAYERS") + self:RegisterEvent("LFG_LIST_ENTRY_EXPIRED_TIMEOUT") + self:RegisterEvent("LFG_LIST_APPLICATION_STATUS_UPDATED") + self:RegisterEvent("VARIABLES_LOADED") + self:RegisterEvent("ADDON_LOADED") + self:RegisterEvent("UNIT_CONNECTION") + for i = 1, #LFG_LIST_ACTIVE_QUEUE_MESSAGE_EVENTS do + self:RegisterEvent(LFG_LIST_ACTIVE_QUEUE_MESSAGE_EVENTS[i]) + end + LFGListFrame_SetBaseFilters(self, LE_LFG_LIST_FILTER_PVE) + LFGListFrame_SetActivePanel(self, self.NothingAvailable) + + self.EventsInBackground = { + LFG_LIST_SEARCH_FAILED = { self.SearchPanel }, + } +end + +function LFGListFrame_OnEvent(self, event, ...) + if event == "LFG_LIST_AVAILABILITY_UPDATE" then + LFGListFrame_FixPanelValid(self) + elseif event == "LFG_LIST_ACTIVE_ENTRY_UPDATE" then + local createdNew = ... + LFGListFrame_FixPanelValid(self) --If our current panel isn't valid, change it. + if C_LFGList.GetActiveEntryInfo() then self.EntryCreation.WorkingCover:Hide() end + if createdNew then PlaySound("PVPEnterQueue") end + elseif event == "LFG_LIST_ENTRY_CREATION_FAILED" then + self.EntryCreation.WorkingCover:Hide() + elseif event == "LFG_LIST_APPLICANT_LIST_UPDATED" then + local hasNewPending, hasNewPendingWithData = ... + if hasNewPending and hasNewPendingWithData and LFGListUtil_IsEntryEmpowered() then + local isLeader = UnitIsGroupLeader("player", LE_PARTY_CATEGORY_HOME) + local autoAccept = select(9, C_LFGList.GetActiveEntryInfo()) + local numPings = nil + if not isLeader then numPings = 6 end + --Non-leaders don't get another ping until they open the panel or we reset the count to 0 + if isLeader or not self.stopAssistPings then + if autoAccept then + --Check if we would be auto-inviting more people if we were in a raid + if + not IsInRaid(LE_PARTY_CATEGORY_HOME) + and GetNumGroupMembers(LE_PARTY_CATEGORY_HOME) + + C_LFGList.GetNumInvitedApplicantMembers() + + C_LFGList.GetNumPendingApplicantMembers() + > (MAX_PARTY_MEMBERS + 1) + then + if self.displayedAutoAcceptConvert then + QueueStatusMinimapButton_SetGlowLock( + QueueStatusMinimapButton, + "lfglist-applicant", + true, + numPings + ) + self.stopAssistPings = true + else + self.displayedAutoAcceptConvert = true + StaticPopup_Show("LFG_LIST_AUTO_ACCEPT_CONVERT_TO_RAID") + end + end + elseif not self:IsVisible() then + QueueStatusMinimapButton_SetGlowLock(QueueStatusMinimapButton, "lfglist-applicant", true, numPings) + self.stopAssistPings = true + end + end + end + elseif event == "LFG_LIST_APPLICANT_UPDATED" then + local numApps, numActiveApps = C_LFGList.GetNumApplicants() + if numActiveApps == 0 then + QueueStatusMinimapButton_SetGlowLock(QueueStatusMinimapButton, "lfglist-applicant", false) + self.stopAssistPings = false + end + elseif event == "LFG_LIST_ENTRY_EXPIRED_TOO_MANY_PLAYERS" then + if UnitIsGroupLeader("player", LE_PARTY_CATEGORY_HOME) then + StaticPopup_Show("LFG_LIST_ENTRY_EXPIRED_TOO_MANY_PLAYERS") + end + elseif event == "LFG_LIST_ENTRY_EXPIRED_TIMEOUT" then + if UnitIsGroupLeader("player", LE_PARTY_CATEGORY_HOME) then + StaticPopup_Show("LFG_LIST_ENTRY_EXPIRED_TIMEOUT") + end + elseif event == "LFG_LIST_APPLICATION_STATUS_UPDATED" then + local id, newStatus, oldStatus = ... + if newStatus == "declined" then + local info = ChatTypeInfo["SYSTEM"] + local id, activity, name = C_LFGList.GetSearchResultInfo(id) + DEFAULT_CHAT_FRAME:AddMessage(string.format(LFG_LIST_APP_DECLINED_MESSAGE, name), info.r, info.g, info.b) + elseif newStatus == "timedout" then + local info = ChatTypeInfo["SYSTEM"] + local id, activity, name = C_LFGList.GetSearchResultInfo(id) + DEFAULT_CHAT_FRAME:AddMessage(string.format(LFG_LIST_APP_TIMED_OUT_MESSAGE, name), info.r, info.g, info.b) + end + elseif event == "VARIABLES_LOADED" or event == "ADDON_LOADED" then + if not GetCVarBitfield("closedInfoFrames", LE_FRAME_TUTORIAL_LFG_LIST) and UnitLevel("player") >= 90 then + PremadeGroupsPvETutorialAlert:Show() + if PremadeGroupsPvPTutorialAlert then PremadeGroupsPvPTutorialAlert:Show() end + end + elseif event == "GROUP_ROSTER_UPDATE" then + if not IsInGroup(LE_PARTY_CATEGORY_HOME) then self.displayedAutoAcceptConvert = false end + end + + --Dispatch the event to our currently active panel + local onEvent = self.activePanel and self.activePanel:GetScript("OnEvent") + if onEvent then onEvent(self.activePanel, event, ...) end + + --Dispatch the event to any panels that want the event in the background + local bg = self.EventsInBackground[event] + if bg then + for i = 1, #bg do + if bg[i] ~= self.activePanel then bg[i]:GetScript("OnEvent")(bg[i], event, ...) end + end + end +end + +function LFGListFrame_OnShow(self) + LFGListFrame_FixPanelValid(self) + C_LFGList.RequestAvailableActivities() + self.stopAssistPings = false + QueueStatusMinimapButton_SetGlowLock(QueueStatusMinimapButton, "lfglist-applicant", false) + PlaySound("igCharacterInfoOpen") +end + +function LFGListFrame_SetActivePanel(self, panel) + if self.activePanel then self.activePanel:Hide() end + self.activePanel = panel + self.activePanel:Show() +end + +function LFGListFrame_IsPanelValid(self, panel) + local listed = C_LFGList.GetActiveEntryInfo() + + --If we're listed, make sure we're either viewing applicants or editing our group + if + listed + and panel ~= self.ApplicationViewer + and not (panel == self.EntryCreation and LFGListEntryCreation_IsEditMode(self.EntryCreation)) + then + return false + end + + --If we're not listed, we can't be viewing applicants or editing our group + if + not listed + and ( + panel == self.ApplicationViewer + or (panel == self.EntryCreation and LFGListEntryCreation_IsEditMode(self.EntryCreation)) + ) + then + return false + end + + --Make sure we aren't creating a new entry with different baseFilters + if panel == self.EntryCreation then + if + not LFGListEntryCreation_IsEditMode(self.EntryCreation) + and self.baseFilters ~= self.EntryCreation.baseFilters + then + return false + end + end + + --Make sure we aren't searching with different baseFilters + if panel == self.SearchPanel then + if self.baseFilters ~= self.SearchPanel.preferredFilters then return false end + end + + --If we're a trial account, we can only see the NothingAvailable and ApplicationViewer + if IsRestrictedAccount() then + if panel ~= self.NothingAvailable and panel ~= self.ApplicationViewer then return false end + end + + --If we don't have any available activities, say so + if #C_LFGList.GetAvailableCategories(self.baseFilters) == 0 then + if panel == self.CategorySelection then return false end + else + if panel == self.NothingAvailable and not IsRestrictedAccount() then return false end + end + + return true +end + +function LFGListFrame_GetBestPanel(self) + local listed = C_LFGList.GetActiveEntryInfo() + + if listed then + return self.ApplicationViewer + elseif IsRestrictedAccount() then + return self.NothingAvailable + elseif #C_LFGList.GetAvailableCategories(self.baseFilters) == 0 then + return self.NothingAvailable + else + return self.CategorySelection + end +end + +function LFGListFrame_FixPanelValid(self) + if not LFGListFrame_IsPanelValid(self, self.activePanel) then + LFGListFrame_SetActivePanel(self, LFGListFrame_GetBestPanel(self)) + end +end + +function LFGListFrame_SetBaseFilters(self, filters) + self.baseFilters = filters + + --If we need to change panels, do so + LFGListFrame_FixPanelValid(self) + + --Update the current panel + if self.activePanel and self.activePanel.updateAll then self.activePanel.updateAll(self.activePanel) end +end + +------------------------------------------------------- +----------Nothing available frame +------------------------------------------------------- +function LFGListNothingAvailable_OnEvent(self, event, ...) + --Note: events are dispatched from the base frame. Add RegisterEvent there. + if event == "LFG_LIST_AVAILABILITY_UPDATE" then LFGListNothingAvailable_Update(self) end +end + +function LFGListNothingAvailable_Update(self) + if IsRestrictedAccount() then + self.Label:SetText(ERR_RESTRICTED_ACCOUNT_LFG_LIST_TRIAL) + elseif C_LFGList.HasActivityList() then + self.Label:SetText(NO_LFG_LIST_AVAILABLE) + else + self.Label:SetText(LFG_LIST_LOADING) + end +end + +------------------------------------------------------- +----------Category selection +------------------------------------------------------- +function LFGListCategorySelection_OnLoad(self) LFGListCategorySelection_UpdateNavButtons(self) end + +function LFGListCategorySelection_OnEvent(self, event, ...) + --Note: events are dispatched from the base frame. Add RegisterEvent there. + if event == "LFG_LIST_AVAILABILITY_UPDATE" then LFGListCategorySelection_UpdateCategoryButtons(self) end + + if tContains(LFG_LIST_ACTIVE_QUEUE_MESSAGE_EVENTS, event) then LFGListCategorySelection_UpdateNavButtons(self) end +end + +function LFGListCategorySelection_OnShow(self) + LFGListCategorySelection_UpdateCategoryButtons(self) + LFGListCategorySelection_UpdateNavButtons(self) +end + +function LFGListCategorySelection_UpdateCategoryButtons(self) + local baseFilters = self:GetParent().baseFilters + local categories = C_LFGList.GetAvailableCategories(baseFilters) + + local nextBtn = 1 + local hasSelected = false + + --Update category buttons + for i = 1, #categories do + local isSelected = false + local categoryID = categories[i] + local name, separateRecommended = C_LFGList.GetCategoryInfo(categoryID) + + if separateRecommended then + nextBtn, isSelected = + LFGListCategorySelection_AddButton(self, nextBtn, categoryID, LE_LFG_LIST_FILTER_RECOMMENDED) + hasSelected = hasSelected or isSelected + nextBtn, isSelected = + LFGListCategorySelection_AddButton(self, nextBtn, categoryID, LE_LFG_LIST_FILTER_NOT_RECOMMENDED) + else + nextBtn, isSelected = LFGListCategorySelection_AddButton(self, nextBtn, categoryID, 0) + end + + hasSelected = hasSelected or isSelected + end + + --Hide any extra buttons + for i = nextBtn, #self.CategoryButtons do + self.CategoryButtons[i]:Hide() + end + + --If the selected item isn't in the list, deselect it + if self.selectedCategory and not hasSelected then LFGListCategorySelection_SelectCategory(self, nil, nil) end +end + +function LFGListCategorySelection_AddButton(self, btnIndex, categoryID, filters) + --Check that we have activities with this filter + local baseFilters = self:GetParent().baseFilters + local allFilters = bit.bor(baseFilters, filters) + + if filters ~= 0 and #C_LFGList.GetAvailableActivities(categoryID, nil, allFilters) == 0 then + return btnIndex, false + end + + local name, separateRecommended = C_LFGList.GetCategoryInfo(categoryID) + + local button = self.CategoryButtons[btnIndex] + if not button then + self.CategoryButtons[btnIndex] = CreateFrame("BUTTON", nil, self, "LFGListCategoryTemplate") + self.CategoryButtons[btnIndex]:SetPoint("TOP", self.CategoryButtons[btnIndex - 1], "BOTTOM", 0, -3) + button = self.CategoryButtons[btnIndex] + end + + button:SetText(LFGListUtil_GetDecoratedCategoryName(name, filters, true)) + button.categoryID = categoryID + button.filters = filters + + local atlasName = nil + if bit.band(allFilters, LE_LFG_LIST_FILTER_RECOMMENDED) ~= 0 then + atlasName = "groupfinder-button-" + .. (LFG_LIST_CATEGORY_TEXTURES[categoryID] or "raids") + .. "-" + .. LFG_LIST_PER_EXPANSION_TEXTURES[LFGListUtil_GetCurrentExpansion()] + elseif bit.band(allFilters, LE_LFG_LIST_FILTER_NOT_RECOMMENDED) ~= 0 then + atlasName = "groupfinder-button-" + .. (LFG_LIST_CATEGORY_TEXTURES[categoryID] or "raids") + .. "-" + .. LFG_LIST_PER_EXPANSION_TEXTURES[math.max(0, LFGListUtil_GetCurrentExpansion() - 1)] + else + atlasName = "groupfinder-button-" .. (LFG_LIST_CATEGORY_TEXTURES[categoryID] or "questing") + end + + local suffix = "" + if bit.band(allFilters, LE_LFG_LIST_FILTER_PVE) ~= 0 then + suffix = "-pve" + elseif bit.band(allFilters, LE_LFG_LIST_FILTER_PVP) ~= 0 then + suffix = "-pvp" + end + + --Try with the suffix and then without it + if not button.Icon:SetAtlas(atlasName .. suffix) then button.Icon:SetAtlas(atlasName) end + + local selected = self.selectedCategory == categoryID and self.selectedFilters == filters + button.SelectedTexture:SetShown(selected) + button:Show() + + return btnIndex + 1, selected +end + +function LFGListCategorySelection_SelectCategory(self, categoryID, filters) + self.selectedCategory = categoryID + self.selectedFilters = filters + LFGListCategorySelection_UpdateCategoryButtons(self) + LFGListCategorySelection_UpdateNavButtons(self) +end + +function LFGListCategorySelection_UpdateNavButtons(self) + local findEnabled, startEnabled = true, true + self.FindGroupButton.tooltip = nil + self.StartGroupButton.tooltip = nil + + --Check if the user needs to select a category + if not self.selectedCategory then + findEnabled = false + self.FindGroupButton.tooltip = LFG_LIST_SELECT_A_CATEGORY + startEnabled = false + self.StartGroupButton.tooltip = LFG_LIST_SELECT_A_CATEGORY + end + + --Check if the user can't start a group due to not being a leader + if IsInGroup(LE_PARTY_CATEGORY_HOME) and not UnitIsGroupLeader("player", LE_PARTY_CATEGORY_HOME) then + startEnabled = false + self.StartGroupButton.tooltip = LFG_LIST_NOT_LEADER + end + + --Check if the player is currently in some incompatible queue + local messageStart = LFGListUtil_GetActiveQueueMessage(false) + if messageStart then + startEnabled = false + self.StartGroupButton.tooltip = messageStart + end + + self.FindGroupButton:SetEnabled(findEnabled) + self.StartGroupButton:SetEnabled(startEnabled) +end + +function LFGListCategorySelectionStartGroupButton_OnClick(self) + local panel = self:GetParent() + if not panel.selectedCategory then return end + + PlaySound("igMainMenuOptionCheckBoxOn") + + local baseFilters = panel:GetParent().baseFilters + + local entryCreation = panel:GetParent().EntryCreation + + LFGListEntryCreation_Show(entryCreation, baseFilters, panel.selectedCategory, panel.selectedFilters) +end + +function LFGListCategorySelectionFindGroupButton_OnClick(self) + local panel = self:GetParent() + if not panel.selectedCategory then return end + + PlaySound("igMainMenuOptionCheckBoxOn") + + local baseFilters = panel:GetParent().baseFilters + + local searchPanel = panel:GetParent().SearchPanel + LFGListSearchPanel_Clear(searchPanel) + LFGListSearchPanel_SetCategory(searchPanel, panel.selectedCategory, panel.selectedFilters, baseFilters) + LFGListSearchPanel_DoSearch(searchPanel) + LFGListFrame_SetActivePanel(panel:GetParent(), searchPanel) +end + +--The individual category buttons +function LFGListCategorySelectionButton_OnClick(self) + local panel = self:GetParent() + PlaySound("igMainMenuOptionCheckBoxOn") + LFGListCategorySelection_SelectCategory(panel, self.categoryID, self.filters) +end + +------------------------------------------------------- +----------List Entry Creation +------------------------------------------------------- +function LFGListEntryCreation_OnLoad(self) + self.Name.Instructions:SetText(LFG_LIST_ENTER_NAME) + self.Description.EditBox:SetScript("OnEnterPressed", nop) + LFGListUtil_SetUpDropDown( + self, + self.CategoryDropDown, + LFGListEntryCreation_PopulateCategories, + LFGListEntryCreation_OnCategorySelected + ) + LFGListUtil_SetUpDropDown( + self, + self.GroupDropDown, + LFGListEntryCreation_PopulateGroups, + LFGListEntryCreation_OnGroupSelected + ) + LFGListUtil_SetUpDropDown( + self, + self.ActivityDropDown, + LFGListEntryCreation_PopulateActivities, + LFGListEntryCreation_OnActivitySelected + ) + LFGListEntryCreation_SetBaseFilters(self, 0) +end + +function LFGListEntryCreation_OnEvent(self, event, ...) + if event == "GROUP_ROSTER_UPDATE" then + LFGListEntryCreation_UpdateValidState(self) + elseif tContains(LFG_LIST_ACTIVE_QUEUE_MESSAGE_EVENTS, event) then + LFGListEntryCreation_UpdateValidState(self) + end +end + +function LFGListEntryCreation_OnShow(self) LFGListEntryCreation_UpdateValidState(self) end + +function LFGListEntryCreation_Show(self, baseFilters, selectedCategory, selectedFilters) + --If this was what the player selected last time, just leave it filled out with the same info. + --Also don't save it for categories that try to set it to the current area. + local _, _, _, preferCurrentArea = C_LFGList.GetCategoryInfo(selectedCategory) + local keepOldData = not preferCurrentArea + and self.selectedCategory == selectedCategory + and baseFilters == self.baseFilters + and self.selectedFilters == selectedFilters + LFGListEntryCreation_SetBaseFilters(self, baseFilters) + if not keepOldData then + LFGListEntryCreation_Clear(self) + LFGListEntryCreation_Select(self, selectedFilters, selectedCategory) + end + LFGListEntryCreation_SetEditMode(self, false) + + LFGListEntryCreation_UpdateValidState(self) + + LFGListFrame_SetActivePanel(self:GetParent(), self) + self.Name:SetFocus() +end + +function LFGListEntryCreation_Clear(self) + --Clear selections + self.selectedCategory = nil + self.selectedGroup = nil + self.selectedActivity = nil + self.selectedFilters = nil + + --Reset widgets + self.Name:SetText("") + self.ItemLevel.CheckButton:SetChecked(false) + self.ItemLevel.EditBox:SetText("") + self.HonorLevel.CheckButton:SetChecked(false) + self.HonorLevel.EditBox:SetText("") + self.VoiceChat.CheckButton:SetChecked(false) + self.VoiceChat.EditBox:SetText("") + self.Description.EditBox:SetText("") + + self.ActivityFinder:Hide() +end + +function LFGListEntryCreation_ClearFocus(self) + self.Name:ClearFocus() + self.ItemLevel.EditBox:ClearFocus() + self.HonorLevel.EditBox:ClearFocus() + self.VoiceChat.EditBox:ClearFocus() + self.Description.EditBox:ClearFocus() +end + +--This function accepts any or all of categoryID, groupId, and activityID +function LFGListEntryCreation_Select(self, filters, categoryID, groupID, activityID) + filters, categoryID, groupID, activityID = + LFGListUtil_AugmentWithBest(bit.bor(self.baseFilters, filters or 0), categoryID, groupID, activityID) + self.selectedCategory = categoryID + self.selectedGroup = groupID + self.selectedActivity = activityID + self.selectedFilters = filters + + --Update the category dropdown + local categoryName, _, autoChoose = C_LFGList.GetCategoryInfo(categoryID) + UIDropDownMenu_SetText(self.CategoryDropDown, LFGListUtil_GetDecoratedCategoryName(categoryName, filters, false)) + + --Update the activity dropdown + local _, shortName, _, _, iLevel, _, _, _, _, _, useHonorLevel = C_LFGList.GetActivityInfo(activityID) + UIDropDownMenu_SetText(self.ActivityDropDown, shortName) + + --Update the group dropdown. If the group dropdown is showing an activity, hide the activity dropdown + local groupName = C_LFGList.GetActivityGroupInfo(groupID) + UIDropDownMenu_SetText(self.GroupDropDown, groupName or shortName) + self.ActivityDropDown:SetShown(groupName and not autoChoose) + self.GroupDropDown:SetShown(not autoChoose) + + --Update the recommended item level box + if iLevel ~= 0 then + self.ItemLevel.EditBox.Instructions:SetFormattedText(LFG_LIST_RECOMMENDED_ILVL, iLevel) + else + self.ItemLevel.EditBox.Instructions:SetText(LFG_LIST_ITEM_LEVEL_INSTR_SHORT) + end + + if useHonorLevel then + self.HonorLevel:Show() + self.VoiceChat:SetPoint("TOPLEFT", self.HonorLevel, "BOTTOMLEFT", 0, -5) + else + self.HonorLevel:Hide() + self.VoiceChat:SetPoint("TOPLEFT", self.ItemLevel, "BOTTOMLEFT", 0, -5) + end + + LFGListRequirement_Validate(self.ItemLevel, self.ItemLevel.EditBox:GetText()) + if useHonorLevel then LFGListRequirement_Validate(self.HonorLevel, self.HonorLevel.EditBox:GetText()) end + LFGListEntryCreation_UpdateValidState(self) +end + +function LFGListEntryCreation_PopulateCategories(self, dropDown, info) + local categories = C_LFGList.GetAvailableCategories(self.baseFilters) + for i = 1, #categories do + local categoryID = categories[i] + local name, separateRecommended = C_LFGList.GetCategoryInfo(categoryID) + if separateRecommended then + LFGListEntryCreation_AddCategoryEntry(self, info, categoryID, name, LE_LFG_LIST_FILTER_RECOMMENDED) + LFGListEntryCreation_AddCategoryEntry(self, info, categoryID, name, LE_LFG_LIST_FILTER_NOT_RECOMMENDED) + else + LFGListEntryCreation_AddCategoryEntry(self, info, categoryID, name, 0) + end + end +end + +function LFGListEntryCreation_AddCategoryEntry(self, info, categoryID, name, filters) + if filters ~= 0 and #C_LFGList.GetAvailableActivities(categoryID, nil, filters) == 0 then return end + + info.text = LFGListUtil_GetDecoratedCategoryName(name, filters, false) + info.value = categoryID + info.arg1 = filters + info.checked = (self.selectedCategory == categoryID and self.selectedFilters == filters) + info.isRadio = true + UIDropDownMenu_AddButton(info) +end + +function LFGListEntryCreation_OnCategorySelected(self, categoryID, filters) + LFGListEntryCreation_Select(self, filters, categoryID, nil, nil) +end + +function LFGListEntryCreation_PopulateGroups(self, dropDown, info) + if not self.selectedCategory then + --We don't have a category, so we can't fill out groups. + return + end + + local useMore = false + + --Start out displaying everything + local groups = + C_LFGList.GetAvailableActivityGroups(self.selectedCategory, bit.bor(self.baseFilters, self.selectedFilters)) + local activities = + C_LFGList.GetAvailableActivities(self.selectedCategory, 0, bit.bor(self.baseFilters, self.selectedFilters)) + if self.selectedFilters == 0 then + --We don't bother filtering if we have less than 5 items anyway + if #groups + #activities > 5 then + --Try just displaying the recommended + local filters = bit.bor(self.selectedFilters, self.baseFilters, LE_LFG_LIST_FILTER_RECOMMENDED) + local recGroups = C_LFGList.GetAvailableActivityGroups(self.selectedCategory, filters) + local recActivities = C_LFGList.GetAvailableActivities(self.selectedCategory, 0, filters) + + --If we have some recommended, just display those + if #recGroups + #recActivities > 0 then + --If we still have just as many, we don't need to display more + useMore = #recGroups ~= #groups or #recActivities ~= #activities + groups = recGroups + activities = recActivities + end + end + end + + local groupOrder = groups[1] and select(2, C_LFGList.GetActivityGroupInfo(groups[1])) + local activityOrder = activities[1] and select(10, C_LFGList.GetActivityInfo(activities[1])) + + local groupIndex, activityIndex = 1, 1 + + --Start merging + for i = 1, MAX_LFG_LIST_GROUP_DROPDOWN_ENTRIES do + if not groupOrder and not activityOrder then break end + + if activityOrder and (not groupOrder or activityOrder < groupOrder) then + local activityID = activities[activityIndex] + local name = select(ACTIVITY_RETURN_VALUES.shortName, C_LFGList.GetActivityInfo(activityID)) + + info.text = name + info.value = activityID + info.arg1 = "activity" + info.checked = (self.selectedActivity == activityID) + info.isRadio = true + UIDropDownMenu_AddButton(info) + + activityIndex = activityIndex + 1 + activityOrder = activities[activityIndex] + and select(10, C_LFGList.GetActivityInfo(activities[activityIndex])) + else + local groupID = groups[groupIndex] + local name = C_LFGList.GetActivityGroupInfo(groupID) + + info.text = name + info.value = groupID + info.arg1 = "group" + info.checked = (self.selectedGroup == groupID) + info.isRadio = true + UIDropDownMenu_AddButton(info) + + groupIndex = groupIndex + 1 + groupOrder = groups[groupIndex] and select(2, C_LFGList.GetActivityGroupInfo(groups[groupIndex])) + end + end + + if #activities + #groups > MAX_LFG_LIST_GROUP_DROPDOWN_ENTRIES then useMore = true end + + if useMore then + info.text = LFG_LIST_MORE + info.value = nil + info.arg1 = "more" + info.notCheckable = true + info.checked = false + info.isRadio = false + UIDropDownMenu_AddButton(info) + end +end + +function LFGListEntryCreation_OnGroupSelected(self, id, buttonType) + if buttonType == "activity" then + LFGListEntryCreation_Select(self, nil, nil, nil, id) + elseif buttonType == "group" then + LFGListEntryCreation_Select(self, self.selectedFilters, self.selectedCategory, id, nil) + elseif buttonType == "more" then + LFGListEntryCreationActivityFinder_Show( + self.ActivityFinder, + self.selectedCategory, + nil, + bit.bor(self.baseFilters, self.selectedFilters) + ) + end +end + +function LFGListEntryCreation_PopulateActivities(self, dropDown, info) + local useMore = self.selectedFilters == 0 + + local filters = bit.bor(self.baseFilters, self.selectedFilters) + + --Start out displaying everything + local activities = C_LFGList.GetAvailableActivities(self.selectedCategory, self.selectedGroup, filters) + + --If we're displaying more than 5, see if we can just display recommended + if useMore then + if #activities > 5 then + filters = bit.bor(filters, LE_LFG_LIST_FILTER_RECOMMENDED) + local recActivities = C_LFGList.GetAvailableActivities(self.selectedCategory, self.selectedGroup, filters) + + useMore = #recActivities ~= #activities + if #recActivities > 0 then + activities = recActivities + else + --Just display up to 5 non-recommended activities + for i = #activities, 5, -1 do + activities[i] = nil + end + end + else + useMore = false + end + end + + for i = 1, #activities do + local activityID = activities[i] + local shortName = select(ACTIVITY_RETURN_VALUES.shortName, C_LFGList.GetActivityInfo(activityID)) + + info.text = shortName + info.value = activityID + info.arg1 = "activity" + info.checked = (self.selectedActivity == activityID) + info.isRadio = true + UIDropDownMenu_AddButton(info) + end + + if useMore then + info.text = LFG_LIST_MORE + info.value = nil + info.arg1 = "more" + info.notCheckable = true + info.checked = false + info.isRadio = false + UIDropDownMenu_AddButton(info) + end +end + +function LFGListEntryCreation_OnActivitySelected(self, activityID, buttonType) + if buttonType == "activity" then + LFGListEntryCreation_Select(self, nil, nil, nil, activityID) + elseif buttonType == "more" then + LFGListEntryCreationActivityFinder_Show( + self.ActivityFinder, + self.selectedCategory, + self.selectedGroup, + bit.bor(self.baseFilters, self.selectedFilters) + ) + end +end + +function LFGListEntryCreation_GetSanitizedName(self) return string.match(self.Name:GetText(), "^%s*(.-)%s*$") end + +function LFGListEntryCreation_ListGroup(self) + local name = LFGListEntryCreation_GetSanitizedName(self) + local iLevel = tonumber(self.ItemLevel.EditBox:GetText()) or 0 + local honorLevel = tonumber(self.HonorLevel.EditBox:GetText()) or 0 + + if LFGListEntryCreation_IsEditMode(self) then + local autoAccept = select(9, C_LFGList.GetActiveEntryInfo()) + C_LFGList.UpdateListing( + self.selectedActivity, + name, + iLevel, + honorLevel, + self.VoiceChat.EditBox:GetText(), + self.Description.EditBox:GetText(), + autoAccept + ) + LFGListFrame_SetActivePanel(self:GetParent(), self:GetParent().ApplicationViewer) + else + if + C_LFGList.CreateListing( + self.selectedActivity, + name, + iLevel, + honorLevel, + self.VoiceChat.EditBox:GetText(), + self.Description.EditBox:GetText(), + false + ) + then + self.WorkingCover:Show() + LFGListEntryCreation_ClearFocus(self) + end + end +end + +function LFGListEntryCreation_UpdateValidState(self) + local errorText + local maxPlayers, _, _, useHonorLevel = + select(ACTIVITY_RETURN_VALUES.maxPlayers, C_LFGList.GetActivityInfo(self.selectedActivity)) + if maxPlayers > 0 and GetNumGroupMembers(LE_PARTY_CATEGORY_HOME) >= maxPlayers then + errorText = string.format(LFG_LIST_TOO_MANY_FOR_ACTIVITY, maxPlayers) + elseif LFGListEntryCreation_GetSanitizedName(self) == "" then + errorText = LFG_LIST_MUST_HAVE_NAME + elseif self.ItemLevel.warningText then + errorText = self.ItemLevel.warningText + elseif useHonorLevel and self.HonorLevel.warningText then + errorText = self.HonorLevel.warningText + else + errorText = LFGListUtil_GetActiveQueueMessage(false) + end + + self.ListGroupButton:SetEnabled(not errorText) + self.ListGroupButton.errorText = errorText +end + +function LFGListEntryCreation_SetBaseFilters(self, baseFilters) self.baseFilters = baseFilters end + +function LFGListEntryCreation_SetEditMode(self, editMode) + self.editMode = editMode + if editMode then + local active, activityID, ilvl, honorLevel, name, comment, voiceChat = C_LFGList.GetActiveEntryInfo() + assert(active) + + --Update the dropdowns + LFGListEntryCreation_Select(self, nil, nil, nil, activityID) + UIDropDownMenu_DisableDropDown(self.CategoryDropDown) + UIDropDownMenu_DisableDropDown(self.GroupDropDown) + UIDropDownMenu_DisableDropDown(self.ActivityDropDown) + + --Update edit boxes + self.Name:SetText(name) + self.ItemLevel.EditBox:SetText(ilvl ~= 0 and ilvl or "") + self.HonorLevel.EditBox:SetText(honorLevel ~= 0 and honorLevel or "") + self.VoiceChat.EditBox:SetText(voiceChat) + self.Description.EditBox:SetText(comment) + + self.ListGroupButton:SetText(DONE_EDITING) + else + UIDropDownMenu_EnableDropDown(self.CategoryDropDown) + UIDropDownMenu_EnableDropDown(self.GroupDropDown) + UIDropDownMenu_EnableDropDown(self.ActivityDropDown) + self.ListGroupButton:SetText(LIST_GROUP) + end +end + +function LFGListEntryCreation_IsEditMode(self) return self.editMode end + +function LFGListEntryCreationCancelButton_OnClick(self) + local panel = self:GetParent() + PlaySound("igMainMenuOptionCheckBoxOn") + if LFGListEntryCreation_IsEditMode(panel) then + LFGListFrame_SetActivePanel(panel:GetParent(), panel:GetParent().ApplicationViewer) + else + LFGListFrame_SetActivePanel(panel:GetParent(), panel:GetParent().CategorySelection) + end +end + +function LFGListEntryCreationListGroupButton_OnClick(self) + PlaySound("igMainMenuOptionCheckBoxOn") + LFGListEntryCreation_ListGroup(self:GetParent()) +end + +function LFGListEntryCreationActivityFinder_OnLoad(self) + self.Dialog.ScrollFrame.update = function() LFGListEntryCreationActivityFinder_Update(self) end + self.Dialog.ScrollFrame.scrollBar.doNotHide = true + HybridScrollFrame_CreateButtons(self.Dialog.ScrollFrame, "LFGListEntryCreationActivityListTemplate") + + self.matchingActivities = {} +end + +function LFGListEntryCreationActivityFinder_Show(self, categoryID, groupID, filters) + self.Dialog.EntryBox:SetText("") + self.categoryID = categoryID + self.groupID = groupID + self.filters = filters + self.selectedActivity = nil + LFGListEntryCreationActivityFinder_UpdateMatching(self) + self:Show() + self.Dialog.EntryBox:SetFocus() +end + +function LFGListEntryCreationActivityFinder_UpdateMatching(self) + self.matchingActivities = + C_LFGList.GetAvailableActivities(self.categoryID, self.groupID, self.filters, self.Dialog.EntryBox:GetText()) + LFGListUtil_SortActivitiesByRelevancy(self.matchingActivities) + if not self.selectedActivity or not tContains(self.matchingActivities, self.selectedActivity) then + self.selectedActivity = self.matchingActivities[1] + end + LFGListEntryCreationActivityFinder_Update(self) +end + +function LFGListEntryCreationActivityFinder_Update(self) + local actitivities = self.matchingActivities + + local offset = HybridScrollFrame_GetOffset(self.Dialog.ScrollFrame) + + for i = 1, #self.Dialog.ScrollFrame.buttons do + local button = self.Dialog.ScrollFrame.buttons[i] + local idx = i + offset + local id = actitivities[idx] + if id then + button:SetText((C_LFGList.GetActivityInfo(id))) + button.activityID = id + button.Selected:SetShown(self.selectedActivity == id) + if self.selectedActivity == id then + button:LockHighlight() + else + button:UnlockHighlight() + end + button:Show() + else + button:Hide() + end + end + HybridScrollFrame_Update( + self.Dialog.ScrollFrame, + self.Dialog.ScrollFrame.buttons[1]:GetHeight() * #actitivities, + self.Dialog.ScrollFrame:GetHeight() + ) +end + +function LFGListEntryCreationActivityFinder_Accept(self) + if self.selectedActivity then + LFGListEntryCreation_Select(self:GetParent(), nil, nil, nil, self.selectedActivity) + end + self:Hide() +end + +function LFGListEntryCreationActivityFinder_Cancel(self) self:Hide() end + +function LFGListEntryCreationActivityFinder_Select(self, activityID) + self.selectedActivity = activityID + LFGListEntryCreationActivityFinder_Update(self) +end + +------------------------------------------------------- +----------Application Viewing +------------------------------------------------------- +function LFGListApplicationViewer_OnLoad(self) + self.ScrollFrame.update = function() LFGListApplicationViewer_UpdateResults(self) end + self.ScrollFrame.dynamic = function(offset) return LFGListApplicationViewer_GetScrollOffset(self, offset) end + self.ScrollFrame.scrollBar.doNotHide = true + self.NameColumnHeader:Disable() + self.RoleColumnHeader:Disable() + self.ItemLevelColumnHeader:Disable() + HybridScrollFrame_CreateButtons(self.ScrollFrame, "LFGListApplicantTemplate") +end + +function LFGListApplicationViewer_OnEvent(self, event, ...) + if event == "LFG_LIST_ACTIVE_ENTRY_UPDATE" then + LFGListApplicationViewer_UpdateInfo(self) + elseif event == "PARTY_LEADER_CHANGED" then + LFGListApplicationViewer_UpdateAvailability(self) + LFGListApplicationViewer_UpdateInfo(self) + elseif event == "LFG_LIST_APPLICANT_LIST_UPDATED" then + LFGListApplicationViewer_UpdateResultList(self) + LFGListApplicationViewer_UpdateResults(self) + elseif event == "LFG_LIST_APPLICANT_UPDATED" then + --If we can't make changes, we just remove people immediately + local id = ... + if not LFGListUtil_IsEntryEmpowered() then C_LFGList.RemoveApplicant(id) end + + --Update whether we can invite people + LFGListApplicationViewer_UpdateInviteState(self) + elseif event == "GROUP_ROSTER_UPDATE" then + LFGListApplicationViewer_UpdateAvailability(self) + LFGListApplicationViewer_UpdateGroupData(self) + LFGListApplicationViewer_UpdateInviteState(self) + LFGListApplicationViewer_UpdateInfo(self) + elseif event == "PLAYER_ROLES_ASSIGNED" then + LFGListApplicationViewer_UpdateGroupData(self) + end +end + +function LFGListApplicationViewer_OnShow(self) + C_LFGList.RefreshApplicants() + LFGListApplicationViewer_UpdateResultList(self) + LFGListApplicationViewer_UpdateResults(self) + LFGListApplicationViewer_UpdateInfo(self) + LFGListApplicationViewer_UpdateAvailability(self) + LFGListApplicationViewer_UpdateGroupData(self) +end + +function LFGListApplicationViewer_UpdateGroupData(self) + local active, activityID = C_LFGList.GetActiveEntryInfo() + if not active then return end + + local data = GetGroupMemberCounts() + data.DAMAGER = data.DAMAGER + data.NOROLE --People without a role count as damage + data.NOROLE = 0 + LFGListGroupDataDisplay_Update(self.DataDisplay, activityID, data) +end + +function LFGListApplicationViewer_UpdateInfo(self) + local active, activityID, ilvl, honorLevel, name, comment, voiceChat, duration, autoAccept = + C_LFGList.GetActiveEntryInfo() + local fullName, shortName, categoryID, groupID, iLevel, filters, minLevel, maxPlayers, displayType = + C_LFGList.GetActivityInfo(activityID) + local _, separateRecommended = C_LFGList.GetCategoryInfo(categoryID) + assert(active) + self.EntryName:SetWidth(0) + self.EntryName:SetText(name) + self.DescriptionFrame.activityName = C_LFGList.GetActivityInfo(activityID) + self.DescriptionFrame.comment = comment + if comment == "" then + self.DescriptionFrame.Text:SetText(self.DescriptionFrame.activityName) + else + self.DescriptionFrame.Text:SetFormattedText( + "%s |cff888888- %s|r", + self.DescriptionFrame.activityName, + self.DescriptionFrame.comment + ) + end + + local hasRestrictions = false + if ilvl == 0 then + self.ItemLevel:SetText("") + else + self.ItemLevel:SetFormattedText(LFG_LIST_ITEM_LEVEL_CURRENT, ilvl) + end + + if voiceChat == "" then + self.VoiceChatFrame.tooltip = nil + self.VoiceChatFrame:Hide() + else + self.VoiceChatFrame.tooltip = voiceChat + self.VoiceChatFrame:Show() + end + + if self.EntryName:GetWidth() > 290 then self.EntryName:SetWidth(290) end + + --Set the background + local atlasName = nil + if separateRecommended and bit.band(filters, LE_LFG_LIST_FILTER_RECOMMENDED) ~= 0 then + atlasName = "groupfinder-background-" + .. (LFG_LIST_CATEGORY_TEXTURES[categoryID] or "raids") + .. "-" + .. LFG_LIST_PER_EXPANSION_TEXTURES[LFGListUtil_GetCurrentExpansion()] + elseif separateRecommended and bit.band(filters, LE_LFG_LIST_FILTER_NOT_RECOMMENDED) ~= 0 then + atlasName = "groupfinder-background-" + .. (LFG_LIST_CATEGORY_TEXTURES[categoryID] or "raids") + .. "-" + .. LFG_LIST_PER_EXPANSION_TEXTURES[math.max(0, LFGListUtil_GetCurrentExpansion() - 1)] + else + atlasName = "groupfinder-background-" .. (LFG_LIST_CATEGORY_TEXTURES[categoryID] or "questing") + end + + local suffix = "" + if bit.band(filters, LE_LFG_LIST_FILTER_PVE) ~= 0 then + suffix = "-pve" + elseif bit.band(filters, LE_LFG_LIST_FILTER_PVP) ~= 0 then + suffix = "-pvp" + end + + --Try with the suffix and then without it + if not self.InfoBackground:SetAtlas(atlasName .. suffix) then self.InfoBackground:SetAtlas(atlasName) end + + --Update the AutoAccept button + self.AutoAcceptButton:SetChecked(autoAccept) + if UnitIsGroupLeader("player", LE_PARTY_CATEGORY_HOME) then + self.AutoAcceptButton:Show() + self.AutoAcceptButton:Enable() + self.AutoAcceptButton.Label:SetFontObject(GameFontHighlightSmall) + elseif UnitIsGroupAssistant("player", LE_PARTY_CATEGORY_HOME) then + self.AutoAcceptButton:Show() + self.AutoAcceptButton:Disable() + self.AutoAcceptButton.Label:SetFontObject(GameFontDisableSmall) + else + self.AutoAcceptButton:SetShown(autoAccept) + self.AutoAcceptButton:Disable() + self.AutoAcceptButton.Label:SetFontObject(GameFontDisableSmall) + end +end + +function LFGListApplicationViewer_UpdateAvailability(self) + if UnitIsGroupLeader("player", LE_PARTY_CATEGORY_HOME) then + self.RemoveEntryButton:Show() + self.EditButton:Show() + else + self.RemoveEntryButton:Hide() + self.EditButton:Hide() + end + + if IsRestrictedAccount() then + self.EditButton:Disable() + self.EditButton.tooltip = ERR_RESTRICTED_ACCOUNT_LFG_LIST_TRIAL + else + self.EditButton:Enable() + self.EditButton.tooltip = nil + end + + local empowered = LFGListUtil_IsEntryEmpowered() + self.UnempoweredCover:SetShown(not empowered) + self.ScrollFrame.NoApplicants:SetShown(empowered and (not self.applicants or #self.applicants == 0)) +end + +function LFGListApplicationViewer_UpdateResultList(self) + self.applicants = C_LFGList.GetApplicants() + + --Filter applicants. Don't worry about order. + LFGListUtil_FilterApplicants(self.applicants) + + --Sort applicants + LFGListUtil_SortApplicants(self.applicants) + + --Cache off the group sizes for the scroll frame and the total height + local totalHeight = 0 + self.applicantSizes = {} + for i = 1, #self.applicants do + local _, _, _, numMembers = C_LFGList.GetApplicantInfo(self.applicants[i]) + self.applicantSizes[i] = numMembers + totalHeight = totalHeight + LFGListApplicationViewerUtil_GetButtonHeight(numMembers) + end + self.totalApplicantHeight = totalHeight + + LFGListApplicationViewer_UpdateAvailability(self) +end + +function LFGListApplicationViewer_UpdateInviteState(self) + local active, activityID, ilvl, honorLevel, name, comment, voiceChat = C_LFGList.GetActiveEntryInfo() + if not active then return end + + local numAllowed = select(ACTIVITY_RETURN_VALUES.maxPlayers, C_LFGList.GetActivityInfo(activityID)) + if numAllowed == 0 then numAllowed = MAX_RAID_MEMBERS end + + local currentCount = GetNumGroupMembers(LE_PARTY_CATEGORY_HOME) + local numInvited = C_LFGList.GetNumInvitedApplicantMembers() + + local buttons = self.ScrollFrame.buttons + for i = 1, #buttons do + local button = buttons[i] + if button.applicantID then + if button.numMembers + currentCount > numAllowed then + button.InviteButton:Disable() + button.InviteButton.tooltip = LFG_LIST_GROUP_TOO_FULL + elseif button.numMembers + currentCount + numInvited > numAllowed then + button.InviteButton:Disable() + button.InviteButton.tooltip = LFG_LIST_INVITED_APP_FILLS_GROUP + else + button.InviteButton:Enable() + button.InviteButton.tooltip = nil + end + + --If our mouse is already over the button, update the tooltip + if button.InviteButton:IsMouseOver() then + if button.InviteButton.tooltip then + button.InviteButton:GetScript("OnEnter")(button.InviteButton) + else + GameTooltip:Hide() + end + end + end + end +end + +function LFGListApplicationViewer_UpdateResults(self) + local offset = HybridScrollFrame_GetOffset(self.ScrollFrame) + local buttons = self.ScrollFrame.buttons + + --If the mouse is over something in this frame, update it + local mouseover = GetMouseFocus() + local mouseoverParent = mouseover and mouseover:GetParent() + local parentParent = mouseoverParent and mouseoverParent:GetParent() + if mouseoverParent == self.ScrollFrame or parentParent == self.ScrollFrame then + --Just hide the tooltip. We should show it again inside the update function. + GameTooltip:Hide() + end + + for i = 1, #buttons do + local button = buttons[i] + local idx = i + offset + local id = self.applicants[idx] + + if id then + button.applicantID = id + LFGListApplicationViewer_UpdateApplicant(button, id) + button.Background:SetAlpha(idx % 2 == 0 and 0.1 or 0.05) + button:Show() + else + button.applicantID = nil + button:Hide() + end + end + HybridScrollFrame_Update(self.ScrollFrame, self.totalApplicantHeight, self.ScrollFrame:GetHeight()) + LFGListApplicationViewer_UpdateInviteState(self) +end + +function LFGListApplicationViewer_UpdateApplicant(button, id) + local id, status, pendingStatus, numMembers, isNew = C_LFGList.GetApplicantInfo(id) + button:SetHeight(LFGListApplicationViewerUtil_GetButtonHeight(numMembers)) + + --Update individual members + for i = 1, numMembers do + local member = button.Members[i] + if not member then + member = CreateFrame("BUTTON", nil, button, "LFGListApplicantMemberTemplate") + member:SetPoint("TOPLEFT", button.Members[i - 1], "BOTTOMLEFT", 0, 0) + button.Members[i] = member + end + LFGListApplicationViewer_UpdateApplicantMember(member, id, i, status, pendingStatus) + member:Show() + end + + --Hide extra member buttons + for i = numMembers + 1, #button.Members do + button.Members[i]:Hide() + end + + --Update the Invite and Decline buttons based on group size + if numMembers > 1 then + button.DeclineButton:SetHeight(36) + button.InviteButton:SetHeight(36) + button.InviteButton:SetFormattedText(LFG_LIST_INVITE_GROUP, numMembers) + else + button.DeclineButton:SetHeight(22) + button.InviteButton:SetHeight(22) + button.InviteButton:SetText(INVITE) + end + + if pendingStatus or status == "applied" then + button.Status:Hide() + elseif status == "invited" then + button.Status:Show() + button.Status:SetText(LFG_LIST_APP_INVITED) + button.Status:SetTextColor(GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b) + elseif status == "failed" or status == "cancelled" then + button.Status:Show() + button.Status:SetText(LFG_LIST_APP_CANCELLED) + button.Status:SetTextColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b) + elseif status == "declined" then + button.Status:Show() + button.Status:SetText(LFG_LIST_APP_DECLINED) + button.Status:SetTextColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b) + elseif status == "timedout" then + button.Status:Show() + button.Status:SetText(LFG_LIST_APP_TIMED_OUT) + button.Status:SetTextColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b) + elseif status == "inviteaccepted" then + button.Status:Show() + button.Status:SetText(LFG_LIST_APP_INVITE_ACCEPTED) + button.Status:SetTextColor(GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b) + elseif status == "invitedeclined" then + button.Status:Show() + button.Status:SetText(LFG_LIST_APP_INVITE_DECLINED) + button.Status:SetTextColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b) + end + + button.numMembers = numMembers + button.InviteButton:SetShown(not pendingStatus and status == "applied" and LFGListUtil_IsEntryEmpowered()) + button.DeclineButton:SetShown(not pendingStatus and status ~= "invited" and LFGListUtil_IsEntryEmpowered()) + button.DeclineButton.isAck = (status ~= "applied" and status ~= "invited") + button.Spinner:SetShown(pendingStatus) +end + +function LFGListApplicationViewer_UpdateApplicantMember(member, appID, memberIdx, status, pendingStatus) + local grayedOut = not pendingStatus + and ( + status == "failed" + or status == "cancelled" + or status == "declined" + or status == "invitedeclined" + or status == "timedout" + ) + local noTouchy = (status == "invited" or status == "inviteaccepted" or status == "invitedeclined") + + local name, class, localizedClass, level, itemLevel, honorLevel, tank, healer, damage, assignedRole, relationship = + C_LFGList.GetApplicantMemberInfo(appID, memberIdx) + + member.memberIdx = memberIdx + + member.Name:SetWidth(0) + if name then + local displayName = Ambiguate(name, "short") + if memberIdx > 1 then + member.Name:SetText(" " .. displayName) + else + member.Name:SetText(displayName) + end + + local classTextColor = grayedOut and GRAY_FONT_COLOR or RAID_CLASS_COLORS[class] + member.Name:SetTextColor(classTextColor.r, classTextColor.g, classTextColor.b) + else + --We might still be requesting the name and class from the server. + member.Name:SetText("") + end + + member.FriendIcon:SetShown(relationship) + member.FriendIcon.relationship = relationship + member.FriendIcon.Icon:SetDesaturated(grayedOut) + member.FriendIcon:SetAlpha(grayedOut and 0.5 or 1.0) + + --Adjust name width depending on whether we have the friend icon + local nameLength = 100 + if relationship then nameLength = nameLength - 22 end + if member.Name:GetWidth() > nameLength then member.Name:SetWidth(nameLength) end + + --Update the roles. + if grayedOut then + member.RoleIcon1:Hide() + member.RoleIcon2:Hide() + else + local role1 = tank and "TANK" or (healer and "HEALER" or (damage and "DAMAGER")) + local role2 = (tank and healer and "HEALER") or ((tank or healer) and damage and "DAMAGER") + member.RoleIcon1:GetNormalTexture():SetAtlas(LFG_LIST_GROUP_DATA_ATLASES[role1]) + member.RoleIcon1:GetHighlightTexture():SetAtlas(LFG_LIST_GROUP_DATA_ATLASES[role1]) + if role2 then + member.RoleIcon2:GetNormalTexture():SetAtlas(LFG_LIST_GROUP_DATA_ATLASES[role2]) + member.RoleIcon2:GetHighlightTexture():SetAtlas(LFG_LIST_GROUP_DATA_ATLASES[role2]) + end + member.RoleIcon1:SetEnabled(not noTouchy and role1 ~= assignedRole) + member.RoleIcon1:SetAlpha(role1 == assignedRole and 1 or 0.3) + member.RoleIcon1:Show() + member.RoleIcon2:SetEnabled(not noTouchy and role2 ~= assignedRole) + member.RoleIcon2:SetAlpha(role2 == assignedRole and 1 or 0.3) + member.RoleIcon2:SetShown(role2) + member.RoleIcon1.role = role1 + member.RoleIcon2.role = role2 + end + + member.ItemLevel:SetShown(not grayedOut) + member.ItemLevel:SetText(math.floor(itemLevel)) + + local mouseFocus = GetMouseFocus() + if mouseFocus == member then + LFGListApplicantMember_OnEnter(member) + elseif mouseFocus == member.FriendIcon then + member.FriendIcon:GetScript("OnEnter")(member.FriendIcon) + end +end + +function LFGListApplicationViewer_GetScrollOffset(self, offset) + local acum = 0 + for i = 1, #self.applicantSizes do + local height = LFGListApplicationViewerUtil_GetButtonHeight(self.applicantSizes[i]) + acum = acum + height + if acum > offset then return i - 1, height + offset - acum end + end + + --We're scrolled completely off the bottom + return #self.applicantSizes, 0 +end + +function LFGListApplicationViewerUtil_GetButtonHeight(numApplicants) return 20 * numApplicants + 6 end + +function LFGListApplicationViewerEditButton_OnClick(self) + PlaySound("igMainMenuOptionCheckBoxOn") + + local panel = self:GetParent() + local entryCreation = panel:GetParent().EntryCreation + LFGListEntryCreation_SetEditMode(entryCreation, true) + LFGListFrame_SetActivePanel(panel:GetParent(), entryCreation) +end + +--Applicant members +function LFGListApplicantMember_OnEnter(self) + local applicantID = self:GetParent().applicantID + local memberIdx = self.memberIdx + + local active, activityID = C_LFGList.GetActiveEntryInfo() + if not active then return end + + local useHonorLevel = select(11, C_LFGList.GetActivityInfo(activityID)) + local id, status, pendingStatus, numMembers, isNew, comment = C_LFGList.GetApplicantInfo(applicantID) + local name, class, localizedClass, level, itemLevel, honorLevel, tank, healer, damage, assignedRole = + C_LFGList.GetApplicantMemberInfo(applicantID, memberIdx) + + GameTooltip:SetOwner(self, "ANCHOR_NONE") + GameTooltip:SetPoint("BOTTOMLEFT", self, "TOPLEFT", 105, 0) + if name then + local classTextColor = RAID_CLASS_COLORS[class] + GameTooltip:SetText(name, classTextColor.r, classTextColor.g, classTextColor.b) + GameTooltip:AddLine(string.format(UNIT_TYPE_LEVEL_TEMPLATE, level, localizedClass), 1, 1, 1) + else + GameTooltip:SetText(" ") --Just make it empty until we get the name update + end + GameTooltip:AddLine(string.format(LFG_LIST_ITEM_LEVEL_CURRENT, itemLevel), 1, 1, 1) + if useHonorLevel then GameTooltip:AddLine(string.format(LFG_LIST_HONOR_LEVEL_CURRENT_PVP, honorLevel), 1, 1, 1) end + if comment and comment ~= "" then + GameTooltip:AddLine(" ") + GameTooltip:AddLine( + string.format(LFG_LIST_COMMENT_FORMAT, comment), + LFG_LIST_COMMENT_FONT_COLOR.r, + LFG_LIST_COMMENT_FONT_COLOR.g, + LFG_LIST_COMMENT_FONT_COLOR.b, + true + ) + end + + --Add statistics + local stats = C_LFGList.GetApplicantMemberStats(applicantID, memberIdx) + local lastTitle = nil + + --Tank proving ground + if stats[23690] and stats[23690] > 0 then + LFGListUtil_AppendStatistic(LFG_LIST_PROVING_TANK_GOLD, nil, LFG_LIST_PROVING_GROUND_TITLE, lastTitle) + lastTitle = LFG_LIST_PROVING_GROUND_TITLE + elseif stats[23687] and stats[23687] > 0 then + LFGListUtil_AppendStatistic(LFG_LIST_PROVING_TANK_SILVER, nil, LFG_LIST_PROVING_GROUND_TITLE, lastTitle) + lastTitle = LFG_LIST_PROVING_GROUND_TITLE + elseif stats[23684] and stats[23684] > 0 then + LFGListUtil_AppendStatistic(LFG_LIST_PROVING_TANK_BRONZE, nil, LFG_LIST_PROVING_GROUND_TITLE, lastTitle) + lastTitle = LFG_LIST_PROVING_GROUND_TITLE + end + + --Healer proving ground + if stats[23691] and stats[23691] > 0 then + LFGListUtil_AppendStatistic(LFG_LIST_PROVING_HEALER_GOLD, nil, LFG_LIST_PROVING_GROUND_TITLE, lastTitle) + lastTitle = LFG_LIST_PROVING_GROUND_TITLE + elseif stats[23688] and stats[23688] > 0 then + LFGListUtil_AppendStatistic(LFG_LIST_PROVING_HEALER_SILVER, nil, LFG_LIST_PROVING_GROUND_TITLE, lastTitle) + lastTitle = LFG_LIST_PROVING_GROUND_TITLE + elseif stats[23685] and stats[23685] > 0 then + LFGListUtil_AppendStatistic(LFG_LIST_PROVING_HEALER_BRONZE, nil, LFG_LIST_PROVING_GROUND_TITLE, lastTitle) + lastTitle = LFG_LIST_PROVING_GROUND_TITLE + end + + --Damage proving ground + if stats[23689] and stats[23689] > 0 then + LFGListUtil_AppendStatistic(LFG_LIST_PROVING_DAMAGER_GOLD, nil, LFG_LIST_PROVING_GROUND_TITLE, lastTitle) + lastTitle = LFG_LIST_PROVING_GROUND_TITLE + elseif stats[23686] and stats[23686] > 0 then + LFGListUtil_AppendStatistic(LFG_LIST_PROVING_DAMAGER_SILVER, nil, LFG_LIST_PROVING_GROUND_TITLE, lastTitle) + lastTitle = LFG_LIST_PROVING_GROUND_TITLE + elseif stats[23683] and stats[23683] > 0 then + LFGListUtil_AppendStatistic(LFG_LIST_PROVING_DAMAGER_BRONZE, nil, LFG_LIST_PROVING_GROUND_TITLE, lastTitle) + lastTitle = LFG_LIST_PROVING_GROUND_TITLE + end + + GameTooltip:Show() +end + +------------------------------------------------------- +----------Searching +------------------------------------------------------- +function LFGListSearchPanel_OnLoad(self) + self.SearchBox.Instructions:SetText(FILTER) + self.ScrollFrame.update = function() LFGListSearchPanel_UpdateResults(self) end + self.ScrollFrame.scrollBar.doNotHide = true + HybridScrollFrame_CreateButtons(self.ScrollFrame, "LFGListSearchEntryTemplate") + self.SearchBox.clearButton:SetScript("OnClick", function(btn) + SearchBoxTemplateClearButton_OnClick(btn) + LFGListSearchPanel_DoSearch(self) + end) +end + +function LFGListSearchPanel_OnEvent(self, event, ...) + --Note: events are dispatched from the base frame. Add RegisterEvent there. + if event == "LFG_LIST_SEARCH_RESULTS_RECEIVED" then + StaticPopupSpecial_Hide(LFGListApplicationDialog) + self.searching = false + self.searchFailed = false + LFGListSearchPanel_UpdateResultList(self) + LFGListSearchPanel_UpdateResults(self) + elseif event == "LFG_LIST_SEARCH_FAILED" then + self.searching = false + self.searchFailed = true + LFGListSearchPanel_UpdateResultList(self) + LFGListSearchPanel_UpdateResults(self) + elseif event == "LFG_LIST_SEARCH_RESULT_UPDATED" then + local id = ... + if self.selectedResult == id then + LFGListSearchPanel_ValidateSelected(self) + if self.selectedResult ~= id then LFGListSearchPanel_UpdateResults(self) end + end + LFGListSearchPanel_UpdateButtonStatus(self) + elseif event == "LFG_LIST_SEARCH_RESULT_UPDATED" then + LFGListSearchPanel_UpdateButtonStatus(self) + elseif event == "PARTY_LEADER_CHANGED" then + LFGListSearchPanel_UpdateButtonStatus(self) + elseif event == "GROUP_ROSTER_UPDATE" then + LFGListSearchPanel_UpdateButtonStatus(self) + elseif event == "PLAYER_SPECIALIZATION_CHANGED" then + local unit = ... + if unit == "player" then LFGListSearchPanel_UpdateButtonStatus(self) end + elseif event == "UNIT_CONNECTION" then + LFGListSearchPanel_UpdateButtonStatus(self) + end + + if tContains(LFG_LIST_ACTIVE_QUEUE_MESSAGE_EVENTS, event) then LFGListSearchPanel_UpdateButtonStatus(self) end +end + +function LFGListSearchPanel_OnShow(self) + LFGListSearchPanel_UpdateResultList(self) + LFGListSearchPanel_UpdateResults(self) + --LFGListSearchPanel_UpdateButtonStatus(self); --Called by UpdateResults + + local availableLanguages = C_LFGList.GetAvailableLanguageSearchFilter() + local defaultLanguages = C_LFGList.GetDefaultLanguageSearchFilter() + + local canChangeLanguages = false + for i = 1, #availableLanguages do + if not defaultLanguages[availableLanguages[i]] then + canChangeLanguages = true + break + end + end + + if canChangeLanguages then + self.SearchBox:SetWidth(228) + self.FilterButton:Show() + else + self.SearchBox:SetWidth(319) + self.FilterButton:Hide() + end +end + +function LFGListSearchPanel_Clear(self) + C_LFGList.ClearSearchResults() + self.SearchBox:SetText("") + self.selectedResult = nil + LFGListSearchPanel_UpdateResultList(self) + LFGListSearchPanel_UpdateResults(self) +end + +function LFGListSearchPanel_SetCategory(self, categoryID, filters, preferredFilters) + self.categoryID = categoryID + self.filters = filters + self.preferredFilters = preferredFilters + + local name = LFGListUtil_GetDecoratedCategoryName(C_LFGList.GetCategoryInfo(categoryID), filters, false) + self.CategoryName:SetText(name) +end + +function LFGListSearchPanel_DoSearch(self) + local searchText = self.SearchBox:GetText() + local languages = C_LFGList.GetLanguageSearchFilter() + C_LFGList.Search(self.categoryID, searchText, self.filters, self.preferredFilters, languages) + self.searching = true + self.searchFailed = false + self.selectedResult = nil + LFGListSearchPanel_UpdateResultList(self) + LFGListSearchPanel_UpdateResults(self) +end + +function LFGListSearchPanel_CreateGroupInstead(self) + LFGListEntryCreation_Show(self:GetParent().EntryCreation, self.preferredFilters, self.categoryID, self.filters) +end + +function LFGListSearchPanel_UpdateResultList(self) + self.totalResults, self.results = C_LFGList.GetSearchResults() + self.applications = C_LFGList.GetApplications() + LFGListUtil_SortSearchResults(self.results) +end + +function LFGListSearchPanel_ValidateSelected(self) + if self.selectedResult and not LFGListSearchPanelUtil_CanSelectResult(self.selectedResult) then + self.selectedResult = nil + end +end + +function LFGListSearchPanelUtil_CanSelectResult(resultID) + local _, appStatus, pendingStatus, appDuration = C_LFGList.GetApplicationInfo(resultID) + local id, activityID, name, comment, voiceChat, iLvl, honorLevel, age, numBNetFriends, numCharFriends, numGuildMates, isDelisted = + C_LFGList.GetSearchResultInfo(resultID) + if appStatus ~= "none" or pendingStatus or isDelisted then return false end + return true +end + +function LFGListSearchPanel_UpdateResults(self) + local offset = HybridScrollFrame_GetOffset(self.ScrollFrame) + local buttons = self.ScrollFrame.buttons + + --If we have an application selected, deselect it. + LFGListSearchPanel_ValidateSelected(self) + + if self.searching then + self.SearchingSpinner:Show() + self.ScrollFrame.NoResultsFound:Hide() + self.ScrollFrame.StartGroupButton:Hide() + for i = 1, #buttons do + buttons[i]:Hide() + end + else + self.SearchingSpinner:Hide() + local results = self.results + local apps = self.applications + + for i = 1, #buttons do + local button = buttons[i] + local idx = i + offset + local result = (idx <= #apps) and apps[idx] or results[idx - #apps] + + if result then + button.resultID = result + LFGListSearchEntry_Update(button) + button:Show() + else + button.resultID = nil + button:Hide() + end + end + + local totalHeight = buttons[1]:GetHeight() * (#results + #apps) + + --Reanchor the errors to not overlap applications + if totalHeight < self.ScrollFrame:GetHeight() then + self.ScrollFrame.NoResultsFound:SetPoint("TOP", self.ScrollFrame, "TOP", 0, -totalHeight - 27) + end + self.ScrollFrame.NoResultsFound:SetShown(self.totalResults == 0) + self.ScrollFrame.StartGroupButton:SetShown(self.totalResults == 0 and not self.searchFailed) + self.ScrollFrame.NoResultsFound:SetText( + self.searchFailed and LFG_LIST_SEARCH_FAILED or LFG_LIST_NO_RESULTS_FOUND + ) + + HybridScrollFrame_Update(self.ScrollFrame, totalHeight, self.ScrollFrame:GetHeight()) + end + LFGListSearchPanel_UpdateButtonStatus(self) +end + +function LFGListSearchPanel_SelectResult(self, resultID) + self.selectedResult = resultID + LFGListSearchPanel_UpdateResults(self) +end + +function LFGListSearchPanel_UpdateButtonStatus(self) + --Update the SignUpButton + local resultID = self.selectedResult + local numApplications, numActiveApplications = C_LFGList.GetNumApplications() + local messageApply = LFGListUtil_GetActiveQueueMessage(true) + local availTank, availHealer, availDPS = C_LFGList.GetAvailableRoles() + if messageApply then + self.SignUpButton:Disable() + self.SignUpButton.tooltip = messageApply + elseif not LFGListUtil_IsAppEmpowered() then + self.SignUpButton:Disable() + self.SignUpButton.tooltip = LFG_LIST_APP_UNEMPOWERED + elseif IsInGroup(LE_PARTY_CATEGORY_HOME) and C_LFGList.IsCurrentlyApplying() then + self.SignUpButton:Disable() + self.SignUpButton.tooltip = LFG_LIST_APP_CURRENTLY_APPLYING + elseif numActiveApplications >= MAX_LFG_LIST_APPLICATIONS then + self.SignUpButton:Disable() + self.SignUpButton.tooltip = string.format(LFG_LIST_HIT_MAX_APPLICATIONS, MAX_LFG_LIST_APPLICATIONS) + elseif GetNumGroupMembers(LE_PARTY_CATEGORY_HOME) > MAX_PARTY_MEMBERS + 1 then + self.SignUpButton:Disable() + self.SignUpButton.tooltip = LFG_LIST_MAX_MEMBERS + elseif not (availTank or availHealer or availDPS) then + self.SignUpButton:Disable() + self.SignUpButton.tooltip = LFG_LIST_MUST_CHOOSE_SPEC + elseif GroupHasOfflineMember(LE_PARTY_CATEGORY_HOME) then + self.SignUpButton:Disable() + self.SignUpButton.tooltip = LFG_LIST_OFFLINE_MEMBER + elseif resultID then + self.SignUpButton:Enable() + self.SignUpButton.tooltip = nil + else + self.SignUpButton:Disable() + self.SignUpButton.tooltip = LFG_LIST_SELECT_A_SEARCH_RESULT + end + + --Update the StartGroupButton + if IsInGroup(LE_PARTY_CATEGORY_HOME) and not UnitIsGroupLeader("player", LE_PARTY_CATEGORY_HOME) then + self.ScrollFrame.StartGroupButton:Disable() + self.ScrollFrame.StartGroupButton.tooltip = LFG_LIST_NOT_LEADER + else + local messageStart = LFGListUtil_GetActiveQueueMessage(false) + if messageStart then + self.ScrollFrame.StartGroupButton:Disable() + self.ScrollFrame.StartGroupButton.tooltip = messageStart + else + self.ScrollFrame.StartGroupButton:Enable() + self.ScrollFrame.StartGroupButton.tooltip = nil + end + end +end + +function LFGListSearchPanel_SignUp(self) LFGListApplicationDialog_Show(LFGListApplicationDialog, self.selectedResult) end + +function LFGListSearchPanelSearchBox_OnEnterPressed(self) + local parent = self:GetParent() + if parent.AutoCompleteFrame:IsShown() and parent.AutoCompleteFrame.selected then + self:SetText((C_LFGList.GetActivityInfo(parent.AutoCompleteFrame.selected))) + end + + LFGListSearchPanel_DoSearch(self:GetParent()) + self:ClearFocus() +end + +function LFGListSearchPanelSearchBox_OnTabPressed(self) + if IsShiftKeyDown() then + LFGListSearchPanel_AutoCompleteAdvance(self:GetParent(), -1) + else + LFGListSearchPanel_AutoCompleteAdvance(self:GetParent(), 1) + end +end + +function LFGListSearchPanelSearchBox_OnArrowPressed(self, key) + if key == "UP" then + LFGListSearchPanel_AutoCompleteAdvance(self:GetParent(), -1) + elseif key == "DOWN" then + LFGListSearchPanel_AutoCompleteAdvance(self:GetParent(), 1) + end +end + +function LFGListSearchPanelSearchBox_OnTextChanged(self) + SearchBoxTemplate_OnTextChanged(self) + LFGListSearchPanel_UpdateAutoComplete(self:GetParent()) +end + +function LFGListSearchAutoCompleteButton_OnClick(self) + local panel = self:GetParent():GetParent() + PlaySound("igMainMenuOptionCheckBoxOn") + panel.SearchBox:SetText((C_LFGList.GetActivityInfo(self.activityID))) + LFGListSearchPanel_DoSearch(panel) + panel.SearchBox:ClearFocus() +end + +function LFGListSearchPanel_AutoCompleteAdvance(self, offset) + local selected = self.AutoCompleteFrame.selected + + --Find the index of the current selection and how many results we have displayed + local idx = nil + local numDisplayed = 0 + for i = 1, #self.AutoCompleteFrame.Results do + local btn = self.AutoCompleteFrame.Results[i] + if btn:IsShown() and btn.activityID then + numDisplayed = i + if btn.activityID == selected then idx = i end + else + break + end + end + + local newIndex = nil + if not idx then + --We had nothing selected, advance from the front or back + if offset > 0 then + newIndex = offset + else + newIndex = numDisplayed + 1 + offset + end + else + --Advance from our old location + newIndex = ((idx - 1 + offset + numDisplayed) % numDisplayed) + 1 + end + + self.AutoCompleteFrame.selected = self.AutoCompleteFrame.Results[newIndex].activityID + LFGListSearchPanel_UpdateAutoComplete(self) +end + +function LFGListSearchPanel_UpdateAutoComplete(self) + local text = self.SearchBox:GetText() + if text == "" or not self.SearchBox:HasFocus() then + self.AutoCompleteFrame:Hide() + self.AutoCompleteFrame.selected = nil + return + end + + --Choose the autocomplete results + local matchingActivities = C_LFGList.GetAvailableActivities(self.categoryID, nil, self.filters, text) + LFGListUtil_SortActivitiesByRelevancy(matchingActivities) + + local numResults = math.min(#matchingActivities, MAX_LFG_LIST_SEARCH_AUTOCOMPLETE_ENTRIES) + + if numResults == 0 then + self.AutoCompleteFrame:Hide() + self.AutoCompleteFrame.selected = nil + return + end + + --Update the buttons + local foundSelected = false + for i = 1, numResults do + local id = matchingActivities[i] + + local button = self.AutoCompleteFrame.Results[i] + if not button then + button = CreateFrame("BUTTON", nil, self.AutoCompleteFrame, "LFGListSearchAutoCompleteButtonTemplate") + button:SetPoint("TOPLEFT", self.AutoCompleteFrame.Results[i - 1], "BOTTOMLEFT", 0, 0) + button:SetPoint("TOPRIGHT", self.AutoCompleteFrame.Results[i - 1], "BOTTOMRIGHT", 0, 0) + self.AutoCompleteFrame.Results[i] = button + end + + if i == numResults and numResults < #matchingActivities then + --This is just a "x more" button + button:SetFormattedText(LFG_LIST_AND_MORE, #matchingActivities - numResults + 1) + button:Disable() + button.Selected:Hide() + button.activityID = nil + else + --This is an actual activity + button:SetText((C_LFGList.GetActivityInfo(id))) + button:Enable() + button.activityID = id + + if id == self.AutoCompleteFrame.selected then + button.Selected:Show() + foundSelected = true + else + button.Selected:Hide() + end + end + button:Show() + end + + if not foundSelected then self.selected = nil end + + --Hide unused buttons + for i = numResults + 1, #self.AutoCompleteFrame.Results do + self.AutoCompleteFrame.Results[i]:Hide() + end + + --Update the frames height and show it + self.AutoCompleteFrame:SetHeight(numResults * self.AutoCompleteFrame.Results[1]:GetHeight() + 8) + self.AutoCompleteFrame:Show() +end + +function LFGListSearchEntry_OnLoad(self) + self:RegisterEvent("LFG_LIST_SEARCH_RESULT_UPDATED") + self:RegisterEvent("LFG_ROLE_CHECK_UPDATE") + self:RegisterForClicks("LeftButtonUp", "RightButtonUp") +end + +function LFGListSearchEntry_Update(self) + local resultID = self.resultID + local _, appStatus, pendingStatus, appDuration = C_LFGList.GetApplicationInfo(resultID) + local isApplication = (appStatus ~= "none" or pendingStatus) + local isAppFinished = LFGListUtil_IsStatusInactive(appStatus) or LFGListUtil_IsStatusInactive(pendingStatus) + + --Update visibility based on whether we're an application or not + self.isApplication = isApplication + self.ApplicationBG:SetShown(isApplication and not isAppFinished) + self.ResultBG:SetShown(not isApplication or isAppFinished) + self.DataDisplay:SetShown(not isApplication) + self.CancelButton:SetShown(isApplication and pendingStatus ~= "applied") + self.CancelButton:SetEnabled(LFGListUtil_IsAppEmpowered()) + self.CancelButton.Icon:SetDesaturated(not LFGListUtil_IsAppEmpowered()) + self.CancelButton.tooltip = (not LFGListUtil_IsAppEmpowered()) and LFG_LIST_APP_UNEMPOWERED + self.Spinner:SetShown(pendingStatus == "applied") + + if pendingStatus == "applied" and C_LFGList.GetRoleCheckInfo() then + self.PendingLabel:SetText(LFG_LIST_ROLE_CHECK) + self.PendingLabel:SetTextColor(NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b) + self.PendingLabel:Show() + self.ExpirationTime:Hide() + self.CancelButton:Hide() + elseif pendingStatus == "cancelled" or appStatus == "cancelled" or appStatus == "failed" then + self.PendingLabel:SetText(LFG_LIST_APP_CANCELLED) + self.PendingLabel:SetTextColor(RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b) + self.PendingLabel:Show() + self.ExpirationTime:Hide() + self.CancelButton:Hide() + elseif appStatus == "declined" then + self.PendingLabel:SetText(LFG_LIST_APP_DECLINED) + self.PendingLabel:SetTextColor(RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b) + self.PendingLabel:Show() + self.ExpirationTime:Hide() + self.CancelButton:Hide() + elseif appStatus == "timedout" then + self.PendingLabel:SetText(LFG_LIST_APP_TIMED_OUT) + self.PendingLabel:SetTextColor(RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b) + self.PendingLabel:Show() + self.ExpirationTime:Hide() + self.CancelButton:Hide() + elseif appStatus == "invited" then + self.PendingLabel:SetText(LFG_LIST_APP_INVITED) + self.PendingLabel:SetTextColor(GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b) + self.PendingLabel:Show() + self.ExpirationTime:Hide() + self.CancelButton:Hide() + elseif appStatus == "inviteaccepted" then + self.PendingLabel:SetText(LFG_LIST_APP_INVITE_ACCEPTED) + self.PendingLabel:SetTextColor(GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b) + self.PendingLabel:Show() + self.ExpirationTime:Hide() + self.CancelButton:Hide() + elseif appStatus == "invitedeclined" then + self.PendingLabel:SetText(LFG_LIST_APP_INVITE_DECLINED) + self.PendingLabel:SetTextColor(RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b) + self.PendingLabel:Show() + self.ExpirationTime:Hide() + self.CancelButton:Hide() + elseif isApplication and pendingStatus ~= "applied" then + self.PendingLabel:SetText(LFG_LIST_PENDING) + self.PendingLabel:SetTextColor(GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b) + self.PendingLabel:Show() + self.ExpirationTime:Show() + self.CancelButton:Show() + else + self.PendingLabel:Hide() + self.ExpirationTime:Hide() + self.CancelButton:Hide() + end + + --Center justify if we're on more than one line + if self.PendingLabel:GetHeight() > 15 then + self.PendingLabel:SetJustifyH("CENTER") + else + self.PendingLabel:SetJustifyH("RIGHT") + end + + --Change the anchor of the label depending on whether we have the expiration time + if self.ExpirationTime:IsShown() then + self.PendingLabel:SetPoint("RIGHT", self.ExpirationTime, "LEFT", -3, 0) + else + self.PendingLabel:SetPoint("RIGHT", self.ExpirationTime, "RIGHT", -3, 0) + end + + self.expiration = GetTime() + appDuration + + local panel = self:GetParent():GetParent():GetParent() + + local id, activityID, name, comment, voiceChat, iLvl, honorLevel, age, numBNetFriends, numCharFriends, numGuildMates, isDelisted = + C_LFGList.GetSearchResultInfo(resultID) + local activityName = C_LFGList.GetActivityInfo(activityID) + + self.resultID = resultID + self.Selected:SetShown(panel.selectedResult == resultID and not isApplication and not isDelisted) + self.Highlight:SetShown(panel.selectedResult ~= resultID and not isApplication and not isDelisted) + local nameColor = NORMAL_FONT_COLOR + local activityColor = GRAY_FONT_COLOR + if isDelisted or isAppFinished then + nameColor = LFG_LIST_DELISTED_FONT_COLOR + activityColor = LFG_LIST_DELISTED_FONT_COLOR + elseif numBNetFriends > 0 or numCharFriends > 0 or numGuildMates > 0 then + nameColor = BATTLENET_FONT_COLOR + end + self.Name:SetWidth(0) + self.Name:SetText(name) + self.Name:SetTextColor(nameColor.r, nameColor.g, nameColor.b) + self.ActivityName:SetText(activityName) + self.ActivityName:SetTextColor(activityColor.r, activityColor.g, activityColor.b) + self.VoiceChat:SetShown(voiceChat ~= "") + self.VoiceChat.tooltip = voiceChat + + local displayData = C_LFGList.GetSearchResultMemberCounts(resultID) + LFGListGroupDataDisplay_Update(self.DataDisplay, activityID, displayData, isDelisted) + + local nameWidth = isApplication and 165 or 176 + if voiceChat ~= "" then nameWidth = nameWidth - 22 end + if self.Name:GetWidth() > nameWidth then self.Name:SetWidth(nameWidth) end + self.ActivityName:SetWidth(nameWidth) + + local mouseFocus = GetMouseFocus() + if mouseFocus == self then LFGListSearchEntry_OnEnter(self) end + if mouseFocus == self.VoiceChat then mouseFocus:GetScript("OnEnter")(mouseFocus) end + + if isApplication then + self:SetScript("OnUpdate", LFGListSearchEntry_UpdateExpiration) + LFGListSearchEntry_UpdateExpiration(self) + else + self:SetScript("OnUpdate", nil) + end +end + +function LFGListSearchEntry_UpdateExpiration(self) + local duration = 0 + local now = GetTime() + if self.expiration and self.expiration > now then duration = self.expiration - now end + + local minutes = math.floor(duration / 60) + local seconds = duration % 60 + self.ExpirationTime:SetFormattedText("%d:%.2d", minutes, seconds) +end + +function LFGListSearchEntry_OnEvent(self, event, ...) + if event == "LFG_LIST_SEARCH_RESULT_UPDATED" then + local id = ... + if id == self.resultID then LFGListSearchEntry_Update(self) end + elseif event == "LFG_ROLE_CHECK_UPDATE" then + if self.resultID then LFGListSearchEntry_Update(self) end + end +end + +function LFGListSearchEntry_OnClick(self, button) + local scrollFrame = self:GetParent():GetParent() + if button == "RightButton" then + PlaySound("igMainMenuOptionCheckBoxOn") + EasyMenu(LFGListUtil_GetSearchEntryMenu(self.resultID), LFGListFrameDropDown, self, 0, -2, "MENU") + elseif + scrollFrame:GetParent().selectedResult ~= self.resultID + and LFGListSearchPanelUtil_CanSelectResult(self.resultID) + then + PlaySound("igMainMenuOptionCheckBoxOn") + LFGListSearchPanel_SelectResult(scrollFrame:GetParent(), self.resultID) + end +end + +function LFGListSearchEntry_OnEnter(self) + local resultID = self.resultID + local id, activityID, name, comment, voiceChat, iLvl, honorLevel, age, numBNetFriends, numCharFriends, numGuildMates, isDelisted, leaderName, numMembers = + C_LFGList.GetSearchResultInfo(resultID) + local activityName, shortName, categoryID, groupID, minItemLevel, filters, minLevel, maxPlayers, displayType, _, useHonorLevel = + C_LFGList.GetActivityInfo(activityID) + local memberCounts = C_LFGList.GetSearchResultMemberCounts(resultID) + GameTooltip:SetOwner(self, "ANCHOR_RIGHT", 25, 0) + GameTooltip:SetText(name, 1, 1, 1, true) + GameTooltip:AddLine(activityName) + if comment ~= "" then + GameTooltip:AddLine( + string.format(LFG_LIST_COMMENT_FORMAT, comment), + LFG_LIST_COMMENT_FONT_COLOR.r, + LFG_LIST_COMMENT_FONT_COLOR.g, + LFG_LIST_COMMENT_FONT_COLOR.b, + true + ) + end + GameTooltip:AddLine(" ") + if iLvl > 0 then GameTooltip:AddLine(string.format(LFG_LIST_TOOLTIP_ILVL, iLvl)) end + if useHonorLevel and honorLevel > 0 then + GameTooltip:AddLine(string.format(LFG_LIST_TOOLTIP_HONOR_LEVEL, honorLevel)) + end + if voiceChat ~= "" then + GameTooltip:AddLine(string.format(LFG_LIST_TOOLTIP_VOICE_CHAT, voiceChat), nil, nil, nil, true) + end + if iLvl > 0 or (useHonorLevel and honorLevel > 0) or voiceChat ~= "" then GameTooltip:AddLine(" ") end + + if leaderName then GameTooltip:AddLine(string.format(LFG_LIST_TOOLTIP_LEADER, leaderName)) end + if age > 0 then + GameTooltip:AddLine(string.format(LFG_LIST_TOOLTIP_AGE, SecondsToTime(age, false, false, 1, false))) + end + + if leaderName or age > 0 then GameTooltip:AddLine(" ") end + + if displayType == LE_LFG_LIST_DISPLAY_TYPE_CLASS_ENUMERATE then + GameTooltip:AddLine(string.format(LFG_LIST_TOOLTIP_MEMBERS_SIMPLE, numMembers)) + for i = 1, numMembers do + local role, class, classLocalized = C_LFGList.GetSearchResultMemberInfo(resultID, i) + local classColor = RAID_CLASS_COLORS[class] or NORMAL_FONT_COLOR + GameTooltip:AddLine( + string.format(LFG_LIST_TOOLTIP_CLASS_ROLE, classLocalized, _G[role]), + classColor.r, + classColor.g, + classColor.b + ) + end + else + GameTooltip:AddLine( + string.format( + LFG_LIST_TOOLTIP_MEMBERS, + numMembers, + memberCounts.TANK, + memberCounts.HEALER, + memberCounts.DAMAGER + ) + ) + end + + if numBNetFriends + numCharFriends + numGuildMates > 0 then + GameTooltip:AddLine(" ") + GameTooltip:AddLine(LFG_LIST_TOOLTIP_FRIENDS_IN_GROUP) + GameTooltip:AddLine(LFGListSearchEntryUtil_GetFriendList(resultID), 1, 1, 1, true) + end + + local completedEncounters = C_LFGList.GetSearchResultEncounterInfo(resultID) + if completedEncounters and #completedEncounters > 0 then + GameTooltip:AddLine(" ") + GameTooltip:AddLine(LFG_LIST_BOSSES_DEFEATED) + for i = 1, #completedEncounters do + GameTooltip:AddLine(completedEncounters[i], RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b) + end + end + + if isDelisted then + GameTooltip:AddLine(" ") + GameTooltip:AddLine(LFG_LIST_ENTRY_DELISTED, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, true) + end + + GameTooltip:Show() +end + +function LFGListSearchEntryUtil_GetFriendList(resultID) + local list = "" + local bNetFriends, charFriends, guildMates = C_LFGList.GetSearchResultFriends(resultID) + local displayedFirst = false + + --BNet friends + for i = 1, #bNetFriends do + if displayedFirst then + list = list .. PLAYER_LIST_DELIMITER + else + displayedFirst = true + end + list = list .. FRIENDS_BNET_NAME_COLOR_CODE .. bNetFriends[i] .. FONT_COLOR_CODE_CLOSE + end + + --Character friends + for i = 1, #charFriends do + if displayedFirst then + list = list .. PLAYER_LIST_DELIMITER + else + displayedFirst = true + end + list = list .. FRIENDS_WOW_NAME_COLOR_CODE .. charFriends[i] .. FONT_COLOR_CODE_CLOSE + end + + --Guild mates + for i = 1, #guildMates do + if displayedFirst then + list = list .. PLAYER_LIST_DELIMITER + else + displayedFirst = true + end + list = list .. RGBTableToColorCode(ChatTypeInfo.GUILD) .. guildMates[i] .. FONT_COLOR_CODE_CLOSE + end + return list +end + +------------------------------------------------------- +----------Application dialog functions +------------------------------------------------------- +function LFGListApplicationDialog_OnLoad(self) + self:RegisterEvent("LFG_ROLE_UPDATE") + self.Description.EditBox:SetScript("OnEnterPressed", nop) + self.hideOnEscape = true +end + +function LFGListApplicationDialog_OnEvent(self, event) + if event == "LFG_ROLE_UPDATE" then LFGListApplicationDialog_UpdateRoles(self) end +end + +function LFGListApplicationDialog_Show(self, resultID) + self.resultID = resultID + self.Description.EditBox:SetText("") + LFGListApplicationDialog_UpdateRoles(self) + StaticPopupSpecial_Show(self) +end + +function LFGListApplicationDialog_UpdateRoles(self) + local availTank, availHealer, availDPS = C_LFGList.GetAvailableRoles() + + local avail1, avail2 + if availTank then avail1 = self.TankButton end + if availHealer then + if avail1 then + avail2 = self.HealerButton + else + avail1 = self.HealerButton + end + end + if availDPS then + if avail1 then + avail2 = self.DamagerButton + else + avail1 = self.DamagerButton + end + end + + self.TankButton:SetShown(availTank) + self.HealerButton:SetShown(availHealer) + self.DamagerButton:SetShown(availDPS) + + if avail2 then + avail1:ClearAllPoints() + avail1:SetPoint("TOPRIGHT", self, "TOP", -5, -35) + avail2:ClearAllPoints() + avail2:SetPoint("TOPLEFT", self, "TOP", 5, -35) + elseif avail1 then + avail1:ClearAllPoints() + avail1:SetPoint("TOP", self, "TOP", 0, -35) + end + + local _, tank, healer, dps = GetLFGRoles() + self.TankButton.CheckButton:SetChecked(tank) + self.HealerButton.CheckButton:SetChecked(healer) + self.DamagerButton.CheckButton:SetChecked(dps) + + LFGListApplicationDialog_UpdateValidState(self) +end + +function LFGListApplicationDialog_UpdateValidState(self) + if + (self.TankButton:IsShown() and self.TankButton.CheckButton:GetChecked()) + or (self.HealerButton:IsShown() and self.HealerButton.CheckButton:GetChecked()) + or (self.DamagerButton:IsShown() and self.DamagerButton.CheckButton:GetChecked()) + then + self.SignUpButton:Enable() + self.SignUpButton.errorText = nil + else + self.SignUpButton:Disable() + self.SignUpButton.errorText = LFG_LIST_MUST_SELECT_ROLE + end +end + +function LFGListRoleButtonCheckButton_OnClick(self) + if self:GetChecked() then + PlaySound("igMainMenuOptionCheckBoxOn") + else + PlaySound("igMainMenuOptionCheckBoxOff") + end + + local dialog = self:GetParent():GetParent() + local leader, tank, healer, dps = GetLFGRoles() + SetLFGRoles( + leader, + dialog.TankButton.CheckButton:GetChecked(), + dialog.HealerButton.CheckButton:GetChecked(), + dialog.DamagerButton.CheckButton:GetChecked() + ) +end + +------------------------------------------------------- +----------Invite dialog functions +------------------------------------------------------- +function LFGListInviteDialog_OnLoad(self) + self:RegisterEvent("LFG_LIST_SEARCH_RESULTS_RECEIVED") + self:RegisterEvent("LFG_LIST_SEARCH_RESULT_UPDATED") + self:RegisterEvent("LFG_LIST_JOINED_GROUP") + self:RegisterEvent("PARTY_LEADER_CHANGED") + self:RegisterEvent("UNIT_CONNECTION") +end + +function LFGListInviteDialog_OnEvent(self, event, ...) + if event == "LFG_LIST_SEARCH_RESULTS_RECEIVED" then + LFGListInviteDialog_CheckPending(self) + elseif event == "LFG_LIST_SEARCH_RESULT_UPDATED" then + local id = ... + local _, status, pendingStatus = C_LFGList.GetApplicationInfo(id) + + local empowered = LFGListUtil_IsAppEmpowered() + if self.resultID == id and not self.informational and (status ~= "invited" or not empowered) then + --Check if we need to hide the panel + StaticPopupSpecial_Hide(self) + LFGListInviteDialog_CheckPending(self) + elseif status == "invited" and not pendingStatus then + --Check if we need to show this result + LFGListInviteDialog_CheckPending(self) + end + elseif event == "PARTY_LEADER_CHANGED" then + --Check if we need to hide the current panel + if not LFGListUtil_IsAppEmpowered() and self:IsShown() and not self.informational then + StaticPopupSpecial_Hide(self) + end + + --Check if we need to show any panels + LFGListInviteDialog_CheckPending(self) + elseif event == "LFG_LIST_JOINED_GROUP" then + if not LFGListUtil_IsAppEmpowered() then + --Show the informational dialog, regardless of whether we already had something up + local id = ... + StaticPopupSpecial_Hide(self) + LFGListInviteDialog_Show(self, id) + end + elseif event == "UNIT_CONNECTION" then + LFGListInviteDialog_UpdateOfflineNotice(self) + end +end + +function LFGListInviteDialog_CheckPending(self) + --If we're already showing one, don't replace it + if self:IsShown() then return end + + --If we're not empowered to make changes to applications, don't pop up anything. + if not LFGListUtil_IsAppEmpowered() then return end + + local apps = C_LFGList.GetApplications() + for i = 1, #apps do + local id, status, pendingStatus = C_LFGList.GetApplicationInfo(apps[i]) + if status == "invited" and not pendingStatus then + LFGListInviteDialog_Show(self, apps[i]) + return + end + end +end + +function LFGListInviteDialog_Show(self, resultID) + local id, activityID, name, comment, voiceChat, iLvl, honorLevel, age, numBNetFriends, numCharFriends, numGuildMates, isDelisted = + C_LFGList.GetSearchResultInfo(resultID) + local activityName = C_LFGList.GetActivityInfo(activityID) + local _, status, _, _, role = C_LFGList.GetApplicationInfo(resultID) + + local informational = (status ~= "invited") + assert(not informational or status == "inviteaccepted") + + self.resultID = resultID + self.GroupName:SetText(name) + self.ActivityName:SetText(activityName) + self.Role:SetText(_G[role]) + self.RoleIcon:SetTexCoord(GetTexCoordsForRole(role)) + self.Label:SetText(informational and LFG_LIST_JOINED_GROUP_NOTICE or LFG_LIST_INVITED_TO_GROUP) + + self.informational = informational + self.AcceptButton:SetShown(not informational) + self.DeclineButton:SetShown(not informational) + self.AcknowledgeButton:SetShown(informational) + + if not informational and GroupHasOfflineMember(LE_PARTY_CATEGORY_HOME) then + self:SetHeight(250) + self.OfflineNotice:Show() + LFGListInviteDialog_UpdateOfflineNotice(self) + else + self:SetHeight(210) + self.OfflineNotice:Hide() + end + + StaticPopupSpecial_Show(self) + + PlaySound("ReadyCheck") + FlashClientIcon() +end + +function LFGListInviteDialog_UpdateOfflineNotice(self) + if GroupHasOfflineMember(LE_PARTY_CATEGORY_HOME) then + self.OfflineNotice:SetText(LFG_LIST_OFFLINE_MEMBER_NOTICE) + self.OfflineNotice:SetFontObject(GameFontRed) + else + self.OfflineNotice:SetText(LFG_LIST_OFFLINE_MEMBER_NOTICE_GONE) + self.OfflineNotice:SetFontObject(GameFontGreen) + end +end + +function LFGListInviteDialog_Accept(self) + C_LFGList.AcceptInvite(self.resultID) + StaticPopupSpecial_Hide(self) + LFGListInviteDialog_CheckPending(self) +end + +function LFGListInviteDialog_Decline(self) + C_LFGList.DeclineInvite(self.resultID) + StaticPopupSpecial_Hide(self) + LFGListInviteDialog_CheckPending(self) +end + +function LFGListInviteDialog_Acknowledge(self) + StaticPopupSpecial_Hide(self) + LFGListInviteDialog_CheckPending(self) +end + +------------------------------------------------------- +----------Group Data Display functions +------------------------------------------------------- +function LFGListGroupDataDisplay_Update(self, activityID, displayData, disabled) + local fullName, shortName, categoryID, groupID, iLevel, filters, minLevel, maxPlayers, displayType = + C_LFGList.GetActivityInfo(activityID) + if displayType == LE_LFG_LIST_DISPLAY_TYPE_ROLE_COUNT then + self.RoleCount:Show() + self.Enumerate:Hide() + self.PlayerCount:Hide() + LFGListGroupDataDisplayRoleCount_Update(self.RoleCount, displayData, disabled) + elseif displayType == LE_LFG_LIST_DISPLAY_TYPE_ROLE_ENUMERATE then + self.RoleCount:Hide() + self.Enumerate:Show() + self.PlayerCount:Hide() + LFGListGroupDataDisplayEnumerate_Update( + self.Enumerate, + maxPlayers, + displayData, + disabled, + LFG_LIST_GROUP_DATA_ROLE_ORDER + ) + elseif displayType == LE_LFG_LIST_DISPLAY_TYPE_CLASS_ENUMERATE then + self.RoleCount:Hide() + self.Enumerate:Show() + self.PlayerCount:Hide() + LFGListGroupDataDisplayEnumerate_Update( + self.Enumerate, + maxPlayers, + displayData, + disabled, + LFG_LIST_GROUP_DATA_CLASS_ORDER + ) + elseif displayType == LE_LFG_LIST_DISPLAY_TYPE_PLAYER_COUNT then + self.RoleCount:Hide() + self.Enumerate:Hide() + self.PlayerCount:Show() + LFGListGroupDataDisplayPlayerCount_Update(self.PlayerCount, displayData, disabled) + elseif displayType == LE_LFG_LIST_DISPLAY_TYPE_HIDE_ALL then + self.RoleCount:Hide() + self.Enumerate:Hide() + self.PlayerCount:Hide() + else + GMError("Unknown display type") + self.RoleCount:Hide() + self.Enumerate:Hide() + self.PlayerCount:Hide() + end +end + +function LFGListGroupDataDisplayRoleCount_Update(self, displayData, disabled) + self.TankCount:SetText(displayData.TANK) + self.HealerCount:SetText(displayData.HEALER) + self.DamagerCount:SetText(displayData.DAMAGER) + + --Update for the disabled state + local r = disabled and LFG_LIST_DELISTED_FONT_COLOR.r or HIGHLIGHT_FONT_COLOR.r + local g = disabled and LFG_LIST_DELISTED_FONT_COLOR.g or HIGHLIGHT_FONT_COLOR.g + local b = disabled and LFG_LIST_DELISTED_FONT_COLOR.b or HIGHLIGHT_FONT_COLOR.b + self.TankCount:SetTextColor(r, g, b) + self.HealerCount:SetTextColor(r, g, b) + self.DamagerCount:SetTextColor(r, g, b) + self.TankIcon:SetDesaturated(disabled) + self.HealerIcon:SetDesaturated(disabled) + self.DamagerIcon:SetDesaturated(disabled) + self.TankIcon:SetAlpha(disabled and 0.5 or 0.70) + self.HealerIcon:SetAlpha(disabled and 0.5 or 0.70) + self.DamagerIcon:SetAlpha(disabled and 0.5 or 0.70) +end + +function LFGListGroupDataDisplayEnumerate_Update(self, numPlayers, displayData, disabled, iconOrder) + --Show/hide the required icons + for i = 1, #self.Icons do + if i > numPlayers then + self.Icons[i]:Hide() + else + self.Icons[i]:Show() + self.Icons[i]:SetDesaturated(disabled) + self.Icons[i]:SetAlpha(disabled and 0.5 or 1.0) + end + end + + --Note that icons are numbered from right to left + local iconIndex = numPlayers + for i = 1, #iconOrder do + for j = 1, displayData[iconOrder[i]] do + self.Icons[iconIndex]:SetAtlas(LFG_LIST_GROUP_DATA_ATLASES[iconOrder[i]], false) + iconIndex = iconIndex - 1 + if iconIndex < 1 then return end + end + end + + for i = 1, iconIndex do + self.Icons[i]:SetAtlas("groupfinder-icon-emptyslot", false) + end +end + +function LFGListGroupDataDisplayPlayerCount_Update(self, displayData, disabled) + local numPlayers = displayData.TANK + displayData.HEALER + displayData.DAMAGER + displayData.NOROLE + + local color = disabled and LFG_LIST_DELISTED_FONT_COLOR or HIGHLIGHT_FONT_COLOR + self.Count:SetText(numPlayers) + self.Count:SetTextColor(color.r, color.g, color.b) + self.Icon:SetDesaturated(disabled) + self.Icon:SetAlpha(disabled and 0.5 or 1) +end + +------------------------------------------------------- +----------Edit Box functions +------------------------------------------------------- +function LFGListEditBox_AddToTabCategory(self, tabCategory) + self.tabCategory = tabCategory + local cat = LFG_LIST_EDIT_BOX_TAB_CATEGORIES[tabCategory] + if not cat then + cat = {} + LFG_LIST_EDIT_BOX_TAB_CATEGORIES[tabCategory] = cat + end + self.tabCategoryIndex = #cat + 1 + cat[self.tabCategoryIndex] = self +end + +function LFGListEditBox_OnTabPressed(self) + if self.tabCategory then + local offset = IsShiftKeyDown() and -1 or 1 + local cat = LFG_LIST_EDIT_BOX_TAB_CATEGORIES[self.tabCategory] + if cat then + --It's times like this when I wish Lua was 0-based... + cat[((self.tabCategoryIndex - 1 + offset + #cat) % #cat) + 1]:SetFocus() + end + end +end + +------------------------------------------------------- +----------Requirement functions +------------------------------------------------------- +function LFGListRequirement_Validate(self, text) + if self.validateFunc then + self.warningText = self:validateFunc(text) + self.WarningFrame:SetShown(self.warningText) + self.CheckButton:SetShown(not self.warningText) + end + LFGListEntryCreation_UpdateValidState(self:GetParent()) +end + +------------------------------------------------------- +----------Utility functions +------------------------------------------------------- +function LFGListUtil_AugmentWithBest(filters, categoryID, groupID, activityID) + local myNumMembers = math.max(GetNumGroupMembers(LE_PARTY_CATEGORY_HOME), 1) + local myItemLevel = GetAverageItemLevel() + if not activityID then + --Find the best activity by iLevel and recommended flag + local activities = C_LFGList.GetAvailableActivities(categoryID, groupID, filters) + local bestItemLevel, bestRecommended, bestCurrentArea, bestMinLevel, bestMaxPlayers + for i = 1, #activities do + local fullName, shortName, categoryID, groupID, iLevel, filters, minLevel, maxPlayers, displayType, orderIndex, useHonorLevel = + C_LFGList.GetActivityInfo(activities[i]) + local isRecommended = bit.band(filters, LE_LFG_LIST_FILTER_RECOMMENDED) ~= 0 + local currentArea = C_LFGList.GetActivityInfoExpensive(activities[i]) + + local usedItemLevel = myItemLevel + local isBetter = false + if not activityID then + isBetter = true + elseif currentArea ~= bestCurrentArea then + isBetter = currentArea + elseif bestRecommended ~= isRecommended then + isBetter = isRecommended + elseif bestMinLevel ~= minLevel then + isBetter = minLevel > bestMinLevel + elseif iLevel ~= bestItemLevel then + isBetter = (iLevel > bestItemLevel and iLevel <= usedItemLevel) + or (iLevel <= usedItemLevel and bestItemLevel > usedItemLevel) + or (iLevel < bestItemLevel and iLevel > usedItemLevel) + elseif (myNumMembers < maxPlayers) ~= (myNumMembers < bestMaxPlayers) then + isBetter = myNumMembers < maxPlayers + end + + if isBetter then + activityID = activities[i] + bestItemLevel = iLevel + bestRecommended = isRecommended + bestCurrentArea = currentArea + bestMinLevel = minLevel + bestMaxPlayers = maxPlayers + end + end + end + + assert(activityID) + + --Update the categoryID and groupID with what we get from the activity + categoryID, groupID, _, filters = select(ACTIVITY_RETURN_VALUES.categoryID, C_LFGList.GetActivityInfo(activityID)) + + --Update the filters if needed + local _, separateRecommended = C_LFGList.GetCategoryInfo(categoryID) + if separateRecommended then + if bit.band(filters, LE_LFG_LIST_FILTER_RECOMMENDED) == 0 then + filters = LE_LFG_LIST_FILTER_NOT_RECOMMENDED + else + filters = LE_LFG_LIST_FILTER_RECOMMENDED + end + else + filters = 0 + end + + return filters, categoryID, groupID, activityID +end + +function LFGListUtil_SetUpDropDown(context, dropdown, populateFunc, onClickFunc) + local onClick = function(self, ...) onClickFunc(context, self.value, ...) end + local initialize = function(self) + local info = UIDropDownMenu_CreateInfo() + info.func = onClick + populateFunc(context, dropdown, info) + end + dropdown:SetScript("OnShow", function(self) + UIDropDownMenu_SetWidth(self, dropdown:GetWidth() - 50) + UIDropDownMenu_Initialize(self, initialize) + end) + UIDropDownMenu_JustifyText(dropdown, "LEFT") + UIDropDownMenu_SetAnchor(dropdown, -20, 7, "TOPRIGHT", dropdown, "BOTTOMRIGHT") +end + +function LFGListUtil_ValidateLevelReq(self, text) + local myItemLevel = GetAverageItemLevel() + if text ~= "" and tonumber(text) > myItemLevel then return LFG_LIST_ILVL_ABOVE_YOURS end +end + +function LFGListUtil_ValidateHonorLevelReq(self, text) + local myHonorLevel = UnitHonorLevel("player") + if text ~= "" and tonumber(text) > myHonorLevel then return LFG_LIST_HONOR_LEVEL_ABOVE_YOURS end +end + +function LFGListUtil_GetCurrentExpansion() + for i = 0, #MAX_PLAYER_LEVEL_TABLE do + if UnitLevel("player") <= MAX_PLAYER_LEVEL_TABLE[i] then return i end + end + + --We're higher than the highest level. Weird. + return #MAX_PLAYER_LEVEL_TABLE +end + +function LFGListUtil_GetDecoratedCategoryName(categoryName, filter, useColors) + if filter == 0 then return categoryName end + + local colorStart = "" + local colorEnd = "" + if useColors then + colorStart = "|cffffffff" + colorEnd = "|r" + end + + local extraName = "" + if filter == LE_LFG_LIST_FILTER_NOT_RECOMMENDED then + extraName = LFG_LIST_LEGACY + elseif filter == LE_LFG_LIST_FILTER_RECOMMENDED then + local exp = LFGListUtil_GetCurrentExpansion() + extraName = _G["EXPANSION_NAME" .. exp] + end + + return string.format(LFG_LIST_CATEGORY_FORMAT, categoryName, colorStart, extraName, colorEnd) +end + +function LFGListUtil_SortSearchResultsCB(id1, id2) + local id1, activityID1, name1, comment1, voiceChat1, iLvl1, honorLevel1, age1, numBNetFriends1, numCharFriends1, numGuildMates1, isDelisted1 = + C_LFGList.GetSearchResultInfo(id1) + local id2, activityID2, name2, comment2, voiceChat2, iLvl2, honorLevel2, age2, numBNetFriends2, numCharFriends2, numGuildMates2, isDelisted2 = + C_LFGList.GetSearchResultInfo(id2) + + --If one has more friends, do that one first + if numBNetFriends1 ~= numBNetFriends2 then return numBNetFriends1 > numBNetFriends2 end + + if numCharFriends1 ~= numCharFriends2 then return numCharFriends1 > numCharFriends2 end + + if numGuildMates1 ~= numGuildMates2 then return numGuildMates1 > numGuildMates2 end + + --If we aren't sorting by anything else, just go by ID + return id1 < id2 +end + +function LFGListUtil_SortSearchResults(results) table.sort(results, LFGListUtil_SortSearchResultsCB) end + +function LFGListUtil_FilterApplicants(applicants) + --[[for i=#applicants, 1, -1 do + local id, status, pendingStatus, numMembers, isNew = C_LFGList.GetApplicantInfo(applicants[i]); + if ( status ~= "applied" and status ~= "invited" ) then + --Remove this applicant. Don't worry about order. + applicants[i] = applicants[#applicants]; + applicants[#applicants] = nil; + end + end--]] +end + +function LFGListUtil_SortApplicantsCB(id1, id2) + local _, _, _, _, isNew1, _, orderID1 = C_LFGList.GetApplicantInfo(id1) + local _, _, _, _, isNew2, _, orderID2 = C_LFGList.GetApplicantInfo(id2) + + --New items go to the bottom + if isNew1 ~= isNew2 then return isNew2 end + + return orderID1 < orderID2 +end + +function LFGListUtil_SortApplicants(applicants) table.sort(applicants, LFGListUtil_SortApplicantsCB) end + +function LFGListUtil_IsAppEmpowered() + return not IsInGroup(LE_PARTY_CATEGORY_HOME) or UnitIsGroupLeader("player", LE_PARTY_CATEGORY_HOME) +end + +function LFGListUtil_IsEntryEmpowered() + return UnitIsGroupLeader("player", LE_PARTY_CATEGORY_HOME) or UnitIsGroupAssistant("player", LE_PARTY_CATEGORY_HOME) +end + +function LFGListUtil_AppendStatistic(label, value, title, lastTitle) + if title ~= lastTitle then + GameTooltip:AddLine(" ") + GameTooltip:AddLine(title, 1, 1, 1) + end + + GameTooltip:AddLine(string.format(label, value)) +end + +local LFG_LIST_SEARCH_ENTRY_MENU = { + { + text = nil, --Group name goes here + isTitle = true, + notCheckable = true, + }, + { + text = WHISPER_LEADER, + func = function(_, name) ChatFrame_SendTell(name) end, + notCheckable = true, + arg1 = nil, --Leader name goes here + disabled = nil, --Disabled if we don't have a leader name yet or you haven't applied + tooltipWhileDisabled = 1, + tooltipOnButton = 1, + tooltipTitle = nil, --The title to display on mouseover + tooltipText = nil, --The text to display on mouseover + }, + { + text = LFG_LIST_REPORT_GROUP_FOR, + hasArrow = true, + notCheckable = true, + menuList = { + { + text = LFG_LIST_BAD_NAME, + func = function(_, id) C_LFGList.ReportSearchResult(id, "lfglistname") end, + arg1 = nil, --Search result ID goes here + notCheckable = true, + }, + { + text = LFG_LIST_BAD_DESCRIPTION, + func = function(_, id) C_LFGList.ReportSearchResult(id, "lfglistcomment") end, + arg1 = nil, --Search reuslt ID goes here + notCheckable = true, + disabled = nil, --Disabled if the description is just an empty string + }, + { + text = LFG_LIST_BAD_VOICE_CHAT_COMMENT, + func = function(_, id) C_LFGList.ReportSearchResult(id, "lfglistvoicechat") end, + arg1 = nil, --Search reuslt ID goes here + notCheckable = true, + disabled = nil, --Disabled if the description is just an empty string + }, + { + text = LFG_LIST_BAD_LEADER_NAME, + func = function(_, id) C_LFGList.ReportSearchResult(id, "badplayername") end, + arg1 = nil, --Search reuslt ID goes here + notCheckable = true, + disabled = nil, --Disabled if we don't have a name for the leader + }, + }, + }, + { + text = CANCEL, + notCheckable = true, + }, +} + +function LFGListUtil_GetSearchEntryMenu(resultID) + local id, activityID, name, comment, voiceChat, iLvl, honorLevel, age, numBNetFriends, numCharFriends, numGuildMates, isDelisted, leaderName = + C_LFGList.GetSearchResultInfo(resultID) + local _, appStatus, pendingStatus, appDuration = C_LFGList.GetApplicationInfo(resultID) + LFG_LIST_SEARCH_ENTRY_MENU[1].text = name + LFG_LIST_SEARCH_ENTRY_MENU[2].arg1 = leaderName + local applied = (appStatus == "applied" or appStatus == "invited") + LFG_LIST_SEARCH_ENTRY_MENU[2].disabled = not leaderName or not applied + LFG_LIST_SEARCH_ENTRY_MENU[2].tooltipTitle = (not applied) and WHISPER + LFG_LIST_SEARCH_ENTRY_MENU[2].tooltipText = (not applied) and LFG_LIST_MUST_SIGN_UP_TO_WHISPER + LFG_LIST_SEARCH_ENTRY_MENU[3].menuList[1].arg1 = resultID + LFG_LIST_SEARCH_ENTRY_MENU[3].menuList[2].arg1 = resultID + LFG_LIST_SEARCH_ENTRY_MENU[3].menuList[2].disabled = (comment == "") + LFG_LIST_SEARCH_ENTRY_MENU[3].menuList[3].arg1 = resultID + LFG_LIST_SEARCH_ENTRY_MENU[3].menuList[3].disabled = (voiceChat == "") + LFG_LIST_SEARCH_ENTRY_MENU[3].menuList[4].arg1 = resultID + LFG_LIST_SEARCH_ENTRY_MENU[3].menuList[4].disabled = not leaderName + return LFG_LIST_SEARCH_ENTRY_MENU +end + +local LFG_LIST_APPLICANT_MEMBER_MENU = { + { + text = nil, --Player name goes here + isTitle = true, + notCheckable = true, + }, + { + text = WHISPER, + func = function(_, name) ChatFrame_SendTell(name) end, + notCheckable = true, + arg1 = nil, --Player name goes here + disabled = nil, --Disabled if we don't have a name yet + }, + { + text = LFG_LIST_REPORT_FOR, + hasArrow = true, + notCheckable = true, + menuList = { + { + text = LFG_LIST_BAD_PLAYER_NAME, + notCheckable = true, + func = function(_, id, memberIdx) C_LFGList.ReportApplicant(id, "badplayername", memberIdx) end, + arg1 = nil, --Applicant ID goes here + arg2 = nil, --Applicant Member index goes here + }, + { + text = LFG_LIST_BAD_DESCRIPTION, + notCheckable = true, + func = function(_, id) C_LFGList.ReportApplicant(id, "lfglistappcomment") end, + arg1 = nil, --Applicant ID goes here + }, + }, + }, + { + text = IGNORE_PLAYER, + notCheckable = true, + func = function(_, name, applicantID) + AddIgnore(name) + C_LFGList.DeclineApplicant(applicantID) + end, + arg1 = nil, --Player name goes here + arg2 = nil, --Applicant ID goes here + disabled = nil, --Disabled if we don't have a name yet + }, + { + text = CANCEL, + notCheckable = true, + }, +} + +function LFGListUtil_GetApplicantMemberMenu(applicantID, memberIdx) + local name, class, localizedClass, level, itemLevel, honorLevel, tank, healer, damage, assignedRole = + C_LFGList.GetApplicantMemberInfo(applicantID, memberIdx) + local id, status, pendingStatus, numMembers, isNew, comment = C_LFGList.GetApplicantInfo(applicantID) + LFG_LIST_APPLICANT_MEMBER_MENU[1].text = name or " " + LFG_LIST_APPLICANT_MEMBER_MENU[2].arg1 = name + LFG_LIST_APPLICANT_MEMBER_MENU[2].disabled = not name or (status ~= "applied" and status ~= "invited") + LFG_LIST_APPLICANT_MEMBER_MENU[3].menuList[1].arg1 = applicantID + LFG_LIST_APPLICANT_MEMBER_MENU[3].menuList[1].arg2 = memberIdx + LFG_LIST_APPLICANT_MEMBER_MENU[3].menuList[2].arg1 = applicantID + LFG_LIST_APPLICANT_MEMBER_MENU[3].menuList[2].disabled = (comment == "") + LFG_LIST_APPLICANT_MEMBER_MENU[4].arg1 = name + LFG_LIST_APPLICANT_MEMBER_MENU[4].arg2 = applicantID + LFG_LIST_APPLICANT_MEMBER_MENU[4].disabled = not name + return LFG_LIST_APPLICANT_MEMBER_MENU +end + +function LFGListUtil_InitializeLangaugeFilter(dropdown) + local info = UIDropDownMenu_CreateInfo() + local languages = C_LFGList.GetAvailableLanguageSearchFilter() + local enabled = C_LFGList.GetLanguageSearchFilter() + local defaults = C_LFGList.GetDefaultLanguageSearchFilter() + local entry = UIDropDownMenu_CreateInfo() + for i = 1, #languages do + local lang = languages[i] + entry.text = _G["LFG_LIST_LANGUAGE_" .. string.upper(lang)] + entry.checked = enabled[lang] or defaults[lang] + entry.disabled = defaults[lang] + entry.isNotRadio = true + entry.keepShownOnClick = true + entry.func = function(self, _, _, checked) + enabled[lang] = checked + C_LFGList.SaveLanguageSearchFilter(enabled) + end + UIDropDownMenu_AddButton(entry) + end +end + +function LFGListUtil_OpenBestWindow(toggle) + local func = toggle and PVEFrame_ToggleFrame or PVEFrame_ShowFrame + local active, activityID, ilvl, honorLevel, name, comment, voiceChat = C_LFGList.GetActiveEntryInfo() + if active then + --Open to the window of our active activity + local fullName, shortName, categoryID, groupID, iLevel, filters = C_LFGList.GetActivityInfo(activityID) + + if bit.band(filters, LE_LFG_LIST_FILTER_PVE) ~= 0 then + func("GroupFinderFrame", "LFGListPVEStub") + else + func("PVPUIFrame", "LFGListPVPStub") + end + else + --Open to the last window we had open + if bit.band(LFGListFrame.baseFilters, LE_LFG_LIST_FILTER_PVE) ~= 0 then + func("GroupFinderFrame", "LFGListPVEStub") + else + func("PVPUIFrame", "LFGListPVPStub") + end + end +end + +function LFGListUtil_SortActivitiesByRelevancyCB(id1, id2) + local fullName1, _, _, _, iLevel1, _, minLevel1 = C_LFGList.GetActivityInfo(id1) + local fullName2, _, _, _, iLevel2, _, minLevel2 = C_LFGList.GetActivityInfo(id2) + + if minLevel1 ~= minLevel2 then + return minLevel1 > minLevel2 + elseif iLevel1 ~= iLevel2 then + local myILevel = GetAverageItemLevel() + + if (iLevel1 <= myILevel) ~= (iLevel2 <= myILevel) then + --If one is below our item level and the other above, choose the one we meet + return iLevel1 < myILevel + else + --If both are above or both are below, choose the one closest to our iLevel + return math.abs(iLevel1 - myILevel) < math.abs(iLevel2 - myILevel) + end + else + return strcmputf8i(fullName1, fullName2) < 0 + end +end + +function LFGListUtil_SortActivitiesByRelevancy(activities) + table.sort(activities, LFGListUtil_SortActivitiesByRelevancyCB) +end + +LFG_LIST_ACTIVE_QUEUE_MESSAGE_EVENTS = { + "LFG_LIST_ACTIVE_ENTRY_UPDATE", + "LFG_LIST_SEARCH_RESULT_UPDATED", + "PVP_ROLE_CHECK_UPDATED", + "UPDATE_BATTLEFIELD_STATUS", + "LFG_UPDATE", + "LFG_ROLE_CHECK_UPDATE", + "LFG_PROPOSAL_UPDATE", + "LFG_PROPOSAL_FAILED", + "LFG_PROPOSAL_SUCCEEDED", + "LFG_PROPOSAL_SHOW", + "LFG_QUEUE_STATUS_UPDATE", +} + +function LFGListUtil_GetActiveQueueMessage(isApplication) + --Check for applications if we're trying to list + if not isApplication and select(2, C_LFGList.GetNumApplications()) > 0 then + return CANNOT_DO_THIS_WITH_LFGLIST_APP + end + + --Check for listings if we have an application + if isApplication and C_LFGList.GetActiveEntryInfo() then return CANNOT_DO_THIS_WHILE_LFGLIST_LISTED end + + --Check all LFG categories + for category = 1, NUM_LE_LFG_CATEGORYS do + local mode = GetLFGMode(category) + if mode then + if mode == "lfgparty" then + return CANNOT_DO_THIS_IN_LFG_PARTY + elseif mode == "rolecheck" or (mode and not isApplication) then + return CANNOT_DO_THIS_IN_PVE_QUEUE + end + end + end + + --Check PvP role check + local inProgress, _, _, _, _, isBattleground = GetLFGRoleUpdate() + if inProgress then + return isBattleground and CANNOT_DO_THIS_WHILE_PVP_QUEUING or CANNOT_DO_THIS_WHILE_PVE_QUEUING + end + + for i = 1, GetMaxBattlefieldID() do + local status, mapName, teamSize, registeredMatch, suspend = GetBattlefieldStatus(i) + if status and status ~= "none" then return CANNOT_DO_THIS_IN_BATTLEGROUND end + end +end + +local LFG_LIST_INACTIVE_STATUSES = { + cancelled = true, + failed = true, + declined = true, + timedout = true, + invitedeclined = true, +} + +function LFGListUtil_IsStatusInactive(status) return LFG_LIST_INACTIVE_STATUSES[status] end + +function LFGListUtil_SetAutoAccept(autoAccept) + local active, activityID, iLevel, honorLevel, name, comment, voiceChat, expiration, oldAutoAccept = + C_LFGList.GetActiveEntryInfo() + if not active then + --If we're not listed, we can't change the value. + return + end + + C_LFGList.UpdateListing(activityID, name, iLevel, honorLevel, voiceChat, comment, autoAccept) +end diff --git a/WIP/Some next gen shit.lua b/WeakAuras/Projects/Some next gen shit.lua similarity index 99% rename from WIP/Some next gen shit.lua rename to WeakAuras/Projects/Some next gen shit.lua index 8c51569..04b6c4b 100644 --- a/WIP/Some next gen shit.lua +++ b/WeakAuras/Projects/Some next gen shit.lua @@ -1,60 +1,60 @@ -/run if not IsQuestFlaggedCompleted(39399) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 54.3 81.0 Akrrilo"); end -/run if not IsQuestFlaggedCompleted(38430) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 53.0 40.6 Argosh the Destroyer"); end -/run if not IsQuestFlaggedCompleted(38609) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 34.9 47.1 Belgork"); end -/run if not IsQuestFlaggedCompleted(38262) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 23.8 51.9 Bilkor the Thrower"); end -/run if not IsQuestFlaggedCompleted(38696) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 50.0 74.0 Bleeding Hollow Horror"); end -/run if not IsQuestFlaggedCompleted(38266) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 21.2 42.2 Bloodhunter Zulk"); end -/run if not IsQuestFlaggedCompleted(38209) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 40.7 69.8 Bramblefell"); end -/run if not IsQuestFlaggedCompleted(38589) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 57.4 67.9 Broodlord Ixkor"); end -/run if not IsQuestFlaggedCompleted(38820) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 48.0 57.2 Captain Grok'mar"); end -/run if not IsQuestFlaggedCompleted(38756) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 35.6 79.9 Captain Ironbeard"); end -/run if not IsQuestFlaggedCompleted(38031) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 30.9 68.3 Ceraxas"); end -/run if not IsQuestFlaggedCompleted(37990) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 44.4 37.3 Cindral the Wildfire"); end -/run if not IsQuestFlaggedCompleted(38746) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 15.2 54.5 Commander Krag'goth"); end -/run if not IsQuestFlaggedCompleted(38749) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 51.0 46.0 Commander Org'mok"); end -/run if not IsQuestFlaggedCompleted(38265) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 23.5 46.8 Dorg the Bloody"); end -/run if not IsQuestFlaggedCompleted(38736) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 19.8 53.6 Driss Vile"); end -/run if not IsQuestFlaggedCompleted(38264) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 25.1 46.6 Drivnul"); end -/run if not IsQuestFlaggedCompleted(38411) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 49.5 36.5 Executor Riloth"); end -/run if not IsQuestFlaggedCompleted(39379) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 54.3 81.0 Eyepiercer"); end -/run if not IsQuestFlaggedCompleted(38775) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 28.7 51.0 Felbore"); end -/run if not IsQuestFlaggedCompleted(38634) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 45.8 47.0 Felsmith Damorka"); end -/run if not IsQuestFlaggedCompleted(38211) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 52.0 26.4 Felspark"); end -/run if not IsQuestFlaggedCompleted(38604) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 63.2 80.0 Gloomtalon"); end -/run if not IsQuestFlaggedCompleted(38764) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 34.5 78.3 Glub'glok"); end -/run if not IsQuestFlaggedCompleted(38709) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 33.3 35.8 Gorabosh"); end -/run if not IsQuestFlaggedCompleted(38400) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 47.5 42.3 Grand Warlock Nethekurse"); end -/run if not IsQuestFlaggedCompleted(38750) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 15.9 59.7 Grannok"); end -/run if not IsQuestFlaggedCompleted(39046) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 39.6 32.6 Harbormaster Korak"); end -/run if not IsQuestFlaggedCompleted(38026) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 31.5 73.5 Imp-Master Valessa"); end -/run if not IsQuestFlaggedCompleted(38030) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 26 8 76.1 Jax'zor"); end -/run if not IsQuestFlaggedCompleted(38605) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 52.0 83.8 Krell the Serene"); end -/run if not IsQuestFlaggedCompleted(38825) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 39.6 68.4 Kris'kar the Unredeemed"); end -/run if not IsQuestFlaggedCompleted(38029) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 32.5 74.0 Lady Oran"); end -/run if not IsQuestFlaggedCompleted(38726) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 52.4 62.5 Magwia"); end -/run if not IsQuestFlaggedCompleted(38032) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 25.5 79.2 Mistress Thavra"); end -/run if not IsQuestFlaggedCompleted(38580) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 53.0 20.0 Overlord Ma'gruth"); end -/run if not IsQuestFlaggedCompleted(38557) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 53.6 21.6 Painmistress Selora"); end -/run if not IsQuestFlaggedCompleted(38282) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 16.8 48.8 Podlord Wakkawam"); end -/run if not IsQuestFlaggedCompleted(38457) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 56.7 24.7 Putre'thar"); end -/run if not IsQuestFlaggedCompleted(38034) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 16.8 44.7 Rasthe"); end -/run if not IsQuestFlaggedCompleted(38496) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 26.3 54.9 Relgor"); end -/run if not IsQuestFlaggedCompleted(39400) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 54.3 81.0 Rendarr"); end -/run if not IsQuestFlaggedCompleted(38631) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 43.0 73.9 Rendrak"); end -/run if not IsQuestFlaggedCompleted(38263) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 20.5 49.8 Rogond the Tracker"); end -/run if not IsQuestFlaggedCompleted(37953) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 43.0 36.9 Sergeant Mor'grak"); end -/run if not IsQuestFlaggedCompleted(38812) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 49.7 61.2 Shadowthrash"); end -/run if not IsQuestFlaggedCompleted(38600) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 62.2 73.0 Soulslicer"); end -/run if not IsQuestFlaggedCompleted(38700) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 65.2 37.0 Steelsnout"); end -/run if not IsQuestFlaggedCompleted(38628) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 40.5 79.2 Sylissa"); end -/run if not IsQuestFlaggedCompleted(38752) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 16.1 57.4 Szirek the Twisted"); end -/run if not IsQuestFlaggedCompleted(38597) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 48.9 73.5 The Blackfang"); end -/run if not IsQuestFlaggedCompleted(38654) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 34.9 72.5 The Goreclaw"); end -/run if not IsQuestFlaggedCompleted(38751) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 13.0 57.0 The Iron Houndmaster"); end -/run if not IsQuestFlaggedCompleted(38632) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 37.0 72.0 The Night Haunter"); end -/run if not IsQuestFlaggedCompleted(38747) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 13.4 58.6 Tho'gar Gorefist"); end -/run if not IsQuestFlaggedCompleted(38620) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 34.1 44 3 Thromma the Gutslicer"); end -/run if not IsQuestFlaggedCompleted(37937) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 27.6 32.8 Varyx the Damned"); end -/run if not IsQuestFlaggedCompleted(38579) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 60.0 21.2 Xanzith the Everlasting"); end -/run if not IsQuestFlaggedCompleted(38207) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 48.4 28.6 Zeter'el"); end +/run if not IsQuestFlaggedCompleted(39399) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 54.3 81.0 Akrrilo"); end +/run if not IsQuestFlaggedCompleted(38430) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 53.0 40.6 Argosh the Destroyer"); end +/run if not IsQuestFlaggedCompleted(38609) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 34.9 47.1 Belgork"); end +/run if not IsQuestFlaggedCompleted(38262) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 23.8 51.9 Bilkor the Thrower"); end +/run if not IsQuestFlaggedCompleted(38696) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 50.0 74.0 Bleeding Hollow Horror"); end +/run if not IsQuestFlaggedCompleted(38266) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 21.2 42.2 Bloodhunter Zulk"); end +/run if not IsQuestFlaggedCompleted(38209) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 40.7 69.8 Bramblefell"); end +/run if not IsQuestFlaggedCompleted(38589) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 57.4 67.9 Broodlord Ixkor"); end +/run if not IsQuestFlaggedCompleted(38820) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 48.0 57.2 Captain Grok'mar"); end +/run if not IsQuestFlaggedCompleted(38756) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 35.6 79.9 Captain Ironbeard"); end +/run if not IsQuestFlaggedCompleted(38031) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 30.9 68.3 Ceraxas"); end +/run if not IsQuestFlaggedCompleted(37990) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 44.4 37.3 Cindral the Wildfire"); end +/run if not IsQuestFlaggedCompleted(38746) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 15.2 54.5 Commander Krag'goth"); end +/run if not IsQuestFlaggedCompleted(38749) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 51.0 46.0 Commander Org'mok"); end +/run if not IsQuestFlaggedCompleted(38265) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 23.5 46.8 Dorg the Bloody"); end +/run if not IsQuestFlaggedCompleted(38736) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 19.8 53.6 Driss Vile"); end +/run if not IsQuestFlaggedCompleted(38264) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 25.1 46.6 Drivnul"); end +/run if not IsQuestFlaggedCompleted(38411) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 49.5 36.5 Executor Riloth"); end +/run if not IsQuestFlaggedCompleted(39379) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 54.3 81.0 Eyepiercer"); end +/run if not IsQuestFlaggedCompleted(38775) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 28.7 51.0 Felbore"); end +/run if not IsQuestFlaggedCompleted(38634) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 45.8 47.0 Felsmith Damorka"); end +/run if not IsQuestFlaggedCompleted(38211) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 52.0 26.4 Felspark"); end +/run if not IsQuestFlaggedCompleted(38604) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 63.2 80.0 Gloomtalon"); end +/run if not IsQuestFlaggedCompleted(38764) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 34.5 78.3 Glub'glok"); end +/run if not IsQuestFlaggedCompleted(38709) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 33.3 35.8 Gorabosh"); end +/run if not IsQuestFlaggedCompleted(38400) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 47.5 42.3 Grand Warlock Nethekurse"); end +/run if not IsQuestFlaggedCompleted(38750) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 15.9 59.7 Grannok"); end +/run if not IsQuestFlaggedCompleted(39046) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 39.6 32.6 Harbormaster Korak"); end +/run if not IsQuestFlaggedCompleted(38026) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 31.5 73.5 Imp-Master Valessa"); end +/run if not IsQuestFlaggedCompleted(38030) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 26 8 76.1 Jax'zor"); end +/run if not IsQuestFlaggedCompleted(38605) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 52.0 83.8 Krell the Serene"); end +/run if not IsQuestFlaggedCompleted(38825) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 39.6 68.4 Kris'kar the Unredeemed"); end +/run if not IsQuestFlaggedCompleted(38029) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 32.5 74.0 Lady Oran"); end +/run if not IsQuestFlaggedCompleted(38726) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 52.4 62.5 Magwia"); end +/run if not IsQuestFlaggedCompleted(38032) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 25.5 79.2 Mistress Thavra"); end +/run if not IsQuestFlaggedCompleted(38580) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 53.0 20.0 Overlord Ma'gruth"); end +/run if not IsQuestFlaggedCompleted(38557) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 53.6 21.6 Painmistress Selora"); end +/run if not IsQuestFlaggedCompleted(38282) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 16.8 48.8 Podlord Wakkawam"); end +/run if not IsQuestFlaggedCompleted(38457) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 56.7 24.7 Putre'thar"); end +/run if not IsQuestFlaggedCompleted(38034) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 16.8 44.7 Rasthe"); end +/run if not IsQuestFlaggedCompleted(38496) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 26.3 54.9 Relgor"); end +/run if not IsQuestFlaggedCompleted(39400) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 54.3 81.0 Rendarr"); end +/run if not IsQuestFlaggedCompleted(38631) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 43.0 73.9 Rendrak"); end +/run if not IsQuestFlaggedCompleted(38263) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 20.5 49.8 Rogond the Tracker"); end +/run if not IsQuestFlaggedCompleted(37953) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 43.0 36.9 Sergeant Mor'grak"); end +/run if not IsQuestFlaggedCompleted(38812) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 49.7 61.2 Shadowthrash"); end +/run if not IsQuestFlaggedCompleted(38600) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 62.2 73.0 Soulslicer"); end +/run if not IsQuestFlaggedCompleted(38700) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 65.2 37.0 Steelsnout"); end +/run if not IsQuestFlaggedCompleted(38628) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 40.5 79.2 Sylissa"); end +/run if not IsQuestFlaggedCompleted(38752) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 16.1 57.4 Szirek the Twisted"); end +/run if not IsQuestFlaggedCompleted(38597) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 48.9 73.5 The Blackfang"); end +/run if not IsQuestFlaggedCompleted(38654) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 34.9 72.5 The Goreclaw"); end +/run if not IsQuestFlaggedCompleted(38751) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 13.0 57.0 The Iron Houndmaster"); end +/run if not IsQuestFlaggedCompleted(38632) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 37.0 72.0 The Night Haunter"); end +/run if not IsQuestFlaggedCompleted(38747) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 13.4 58.6 Tho'gar Gorefist"); end +/run if not IsQuestFlaggedCompleted(38620) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 34.1 44 3 Thromma the Gutslicer"); end +/run if not IsQuestFlaggedCompleted(37937) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 27.6 32.8 Varyx the Damned"); end +/run if not IsQuestFlaggedCompleted(38579) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 60.0 21.2 Xanzith the Everlasting"); end +/run if not IsQuestFlaggedCompleted(38207) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 48.4 28.6 Zeter'el"); end /run if not IsQuestFlaggedCompleted(39045) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 37.0 32.8 Zoug the Heavy"); end \ No newline at end of file diff --git a/Complete Projects/Legion/Soul Leech.lua b/WeakAuras/Projects/Soul Leech.lua similarity index 96% rename from Complete Projects/Legion/Soul Leech.lua rename to WeakAuras/Projects/Soul Leech.lua index 088def2..b24c822 100644 --- a/Complete Projects/Legion/Soul Leech.lua +++ b/WeakAuras/Projects/Soul Leech.lua @@ -1,20 +1,20 @@ -DISPLAY -function() - local max_absorb = math.floor(UnitHealthMax("player") / 5) - local absorb = select(17, UnitBuff("player", "Soul Leech")) or 0 - return math.floor((absorb / max_absorb) * 100) -end - -TRIGGER -function() - local buff = UnitBuff("player", "Soul Leech") or 0 - if buff ~= nil then return true else return false end -end - -DURATION_TRIGGER -function() - local max_absorb = math.floor(UnitHealthMax("player") / 5) - local absorb = select(17, UnitBuff("player", "Soul Leech")) or 0 - local percentage = math.floor((absorb / max_absorb) * 100) - return percentage, 100, true +DISPLAY +function() + local max_absorb = math.floor(UnitHealthMax("player") / 5) + local absorb = select(17, UnitBuff("player", "Soul Leech")) or 0 + return math.floor((absorb / max_absorb) * 100) +end + +TRIGGER +function() + local buff = UnitBuff("player", "Soul Leech") or 0 + if buff ~= nil then return true else return false end +end + +DURATION_TRIGGER +function() + local max_absorb = math.floor(UnitHealthMax("player") / 5) + local absorb = select(17, UnitBuff("player", "Soul Leech")) or 0 + local percentage = math.floor((absorb / max_absorb) * 100) + return percentage, 100, true end \ No newline at end of file diff --git a/FreshShit/Sounds/Bababooey.ogg b/WeakAuras/Projects/Sounds/Bababooey.ogg similarity index 100% rename from FreshShit/Sounds/Bababooey.ogg rename to WeakAuras/Projects/Sounds/Bababooey.ogg diff --git a/FreshShit/Sounds/Bing.ogg b/WeakAuras/Projects/Sounds/Bing.ogg similarity index 100% rename from FreshShit/Sounds/Bing.ogg rename to WeakAuras/Projects/Sounds/Bing.ogg diff --git a/FreshShit/Sounds/Bing2.ogg b/WeakAuras/Projects/Sounds/Bing2.ogg similarity index 100% rename from FreshShit/Sounds/Bing2.ogg rename to WeakAuras/Projects/Sounds/Bing2.ogg diff --git a/FreshShit/Sounds/Bong.ogg b/WeakAuras/Projects/Sounds/Bong.ogg similarity index 100% rename from FreshShit/Sounds/Bong.ogg rename to WeakAuras/Projects/Sounds/Bong.ogg diff --git a/FreshShit/Sounds/BonusDucks.ogg b/WeakAuras/Projects/Sounds/BonusDucks.ogg similarity index 100% rename from FreshShit/Sounds/BonusDucks.ogg rename to WeakAuras/Projects/Sounds/BonusDucks.ogg diff --git a/FreshShit/Sounds/Boom2.ogg b/WeakAuras/Projects/Sounds/Boom2.ogg similarity index 100% rename from FreshShit/Sounds/Boom2.ogg rename to WeakAuras/Projects/Sounds/Boom2.ogg diff --git a/FreshShit/Sounds/Boom3.ogg b/WeakAuras/Projects/Sounds/Boom3.ogg similarity index 100% rename from FreshShit/Sounds/Boom3.ogg rename to WeakAuras/Projects/Sounds/Boom3.ogg diff --git a/FreshShit/Sounds/Boom4.ogg b/WeakAuras/Projects/Sounds/Boom4.ogg similarity index 100% rename from FreshShit/Sounds/Boom4.ogg rename to WeakAuras/Projects/Sounds/Boom4.ogg diff --git a/FreshShit/Sounds/BoomVery.ogg b/WeakAuras/Projects/Sounds/BoomVery.ogg similarity index 100% rename from FreshShit/Sounds/BoomVery.ogg rename to WeakAuras/Projects/Sounds/BoomVery.ogg diff --git a/FreshShit/Sounds/China.ogg b/WeakAuras/Projects/Sounds/China.ogg similarity index 100% rename from FreshShit/Sounds/China.ogg rename to WeakAuras/Projects/Sounds/China.ogg diff --git a/FreshShit/Sounds/China2.ogg b/WeakAuras/Projects/Sounds/China2.ogg similarity index 100% rename from FreshShit/Sounds/China2.ogg rename to WeakAuras/Projects/Sounds/China2.ogg diff --git a/FreshShit/Sounds/China3.ogg b/WeakAuras/Projects/Sounds/China3.ogg similarity index 100% rename from FreshShit/Sounds/China3.ogg rename to WeakAuras/Projects/Sounds/China3.ogg diff --git a/FreshShit/Sounds/China4.ogg b/WeakAuras/Projects/Sounds/China4.ogg similarity index 100% rename from FreshShit/Sounds/China4.ogg rename to WeakAuras/Projects/Sounds/China4.ogg diff --git a/FreshShit/Sounds/China5.ogg b/WeakAuras/Projects/Sounds/China5.ogg similarity index 100% rename from FreshShit/Sounds/China5.ogg rename to WeakAuras/Projects/Sounds/China5.ogg diff --git a/FreshShit/Sounds/China6.ogg b/WeakAuras/Projects/Sounds/China6.ogg similarity index 100% rename from FreshShit/Sounds/China6.ogg rename to WeakAuras/Projects/Sounds/China6.ogg diff --git a/FreshShit/Sounds/Cloak.ogg b/WeakAuras/Projects/Sounds/Cloak.ogg similarity index 100% rename from FreshShit/Sounds/Cloak.ogg rename to WeakAuras/Projects/Sounds/Cloak.ogg diff --git a/FreshShit/Sounds/Conga.ogg b/WeakAuras/Projects/Sounds/Conga.ogg similarity index 100% rename from FreshShit/Sounds/Conga.ogg rename to WeakAuras/Projects/Sounds/Conga.ogg diff --git a/FreshShit/Sounds/Dead.ogg b/WeakAuras/Projects/Sounds/Dead.ogg similarity index 100% rename from FreshShit/Sounds/Dead.ogg rename to WeakAuras/Projects/Sounds/Dead.ogg diff --git a/FreshShit/Sounds/Domination.ogg b/WeakAuras/Projects/Sounds/Domination.ogg similarity index 100% rename from FreshShit/Sounds/Domination.ogg rename to WeakAuras/Projects/Sounds/Domination.ogg diff --git a/FreshShit/Sounds/FortressReel.ogg b/WeakAuras/Projects/Sounds/FortressReel.ogg similarity index 100% rename from FreshShit/Sounds/FortressReel.ogg rename to WeakAuras/Projects/Sounds/FortressReel.ogg diff --git a/FreshShit/Sounds/FortressReelLoop.ogg b/WeakAuras/Projects/Sounds/FortressReelLoop.ogg similarity index 100% rename from FreshShit/Sounds/FortressReelLoop.ogg rename to WeakAuras/Projects/Sounds/FortressReelLoop.ogg diff --git a/FreshShit/Sounds/Gaben.ogg b/WeakAuras/Projects/Sounds/Gaben.ogg similarity index 100% rename from FreshShit/Sounds/Gaben.ogg rename to WeakAuras/Projects/Sounds/Gaben.ogg diff --git a/FreshShit/Sounds/GetFucked.ogg b/WeakAuras/Projects/Sounds/GetFucked.ogg similarity index 100% rename from FreshShit/Sounds/GetFucked.ogg rename to WeakAuras/Projects/Sounds/GetFucked.ogg diff --git a/FreshShit/Sounds/HL2ButtonClick.ogg b/WeakAuras/Projects/Sounds/HL2ButtonClick.ogg similarity index 100% rename from FreshShit/Sounds/HL2ButtonClick.ogg rename to WeakAuras/Projects/Sounds/HL2ButtonClick.ogg diff --git a/FreshShit/Sounds/HL2ButtonRelease.ogg b/WeakAuras/Projects/Sounds/HL2ButtonRelease.ogg similarity index 100% rename from FreshShit/Sounds/HL2ButtonRelease.ogg rename to WeakAuras/Projects/Sounds/HL2ButtonRelease.ogg diff --git a/FreshShit/Sounds/HL2ButtonRollover.ogg b/WeakAuras/Projects/Sounds/HL2ButtonRollover.ogg similarity index 100% rename from FreshShit/Sounds/HL2ButtonRollover.ogg rename to WeakAuras/Projects/Sounds/HL2ButtonRollover.ogg diff --git a/FreshShit/Sounds/Hitsound.ogg b/WeakAuras/Projects/Sounds/Hitsound.ogg similarity index 100% rename from FreshShit/Sounds/Hitsound.ogg rename to WeakAuras/Projects/Sounds/Hitsound.ogg diff --git a/FreshShit/Sounds/Hitsound2.ogg b/WeakAuras/Projects/Sounds/Hitsound2.ogg similarity index 100% rename from FreshShit/Sounds/Hitsound2.ogg rename to WeakAuras/Projects/Sounds/Hitsound2.ogg diff --git a/FreshShit/Sounds/Hitsound3.ogg b/WeakAuras/Projects/Sounds/Hitsound3.ogg similarity index 100% rename from FreshShit/Sounds/Hitsound3.ogg rename to WeakAuras/Projects/Sounds/Hitsound3.ogg diff --git a/FreshShit/Sounds/Hitsound4.ogg b/WeakAuras/Projects/Sounds/Hitsound4.ogg similarity index 100% rename from FreshShit/Sounds/Hitsound4.ogg rename to WeakAuras/Projects/Sounds/Hitsound4.ogg diff --git a/FreshShit/Sounds/Hitsound5.ogg b/WeakAuras/Projects/Sounds/Hitsound5.ogg similarity index 100% rename from FreshShit/Sounds/Hitsound5.ogg rename to WeakAuras/Projects/Sounds/Hitsound5.ogg diff --git a/FreshShit/Sounds/HitsoundBap.ogg b/WeakAuras/Projects/Sounds/HitsoundBap.ogg similarity index 100% rename from FreshShit/Sounds/HitsoundBap.ogg rename to WeakAuras/Projects/Sounds/HitsoundBap.ogg diff --git a/FreshShit/Sounds/HitsoundBell.ogg b/WeakAuras/Projects/Sounds/HitsoundBell.ogg similarity index 100% rename from FreshShit/Sounds/HitsoundBell.ogg rename to WeakAuras/Projects/Sounds/HitsoundBell.ogg diff --git a/FreshShit/Sounds/HitsoundBoom.ogg b/WeakAuras/Projects/Sounds/HitsoundBoom.ogg similarity index 100% rename from FreshShit/Sounds/HitsoundBoom.ogg rename to WeakAuras/Projects/Sounds/HitsoundBoom.ogg diff --git a/FreshShit/Sounds/HitsoundBubble.ogg b/WeakAuras/Projects/Sounds/HitsoundBubble.ogg similarity index 100% rename from FreshShit/Sounds/HitsoundBubble.ogg rename to WeakAuras/Projects/Sounds/HitsoundBubble.ogg diff --git a/FreshShit/Sounds/HitsoundCOD.ogg b/WeakAuras/Projects/Sounds/HitsoundCOD.ogg similarity index 100% rename from FreshShit/Sounds/HitsoundCOD.ogg rename to WeakAuras/Projects/Sounds/HitsoundCOD.ogg diff --git a/FreshShit/Sounds/HitsoundCasino1.ogg b/WeakAuras/Projects/Sounds/HitsoundCasino1.ogg similarity index 100% rename from FreshShit/Sounds/HitsoundCasino1.ogg rename to WeakAuras/Projects/Sounds/HitsoundCasino1.ogg diff --git a/FreshShit/Sounds/HitsoundCasino2.ogg b/WeakAuras/Projects/Sounds/HitsoundCasino2.ogg similarity index 100% rename from FreshShit/Sounds/HitsoundCasino2.ogg rename to WeakAuras/Projects/Sounds/HitsoundCasino2.ogg diff --git a/FreshShit/Sounds/HitsoundCasino3.ogg b/WeakAuras/Projects/Sounds/HitsoundCasino3.ogg similarity index 100% rename from FreshShit/Sounds/HitsoundCasino3.ogg rename to WeakAuras/Projects/Sounds/HitsoundCasino3.ogg diff --git a/FreshShit/Sounds/HitsoundDing.ogg b/WeakAuras/Projects/Sounds/HitsoundDing.ogg similarity index 100% rename from FreshShit/Sounds/HitsoundDing.ogg rename to WeakAuras/Projects/Sounds/HitsoundDing.ogg diff --git a/FreshShit/Sounds/HitsoundDuck.ogg b/WeakAuras/Projects/Sounds/HitsoundDuck.ogg similarity index 100% rename from FreshShit/Sounds/HitsoundDuck.ogg rename to WeakAuras/Projects/Sounds/HitsoundDuck.ogg diff --git a/FreshShit/Sounds/HitsoundHardbass.ogg b/WeakAuras/Projects/Sounds/HitsoundHardbass.ogg similarity index 100% rename from FreshShit/Sounds/HitsoundHardbass.ogg rename to WeakAuras/Projects/Sounds/HitsoundHardbass.ogg diff --git a/FreshShit/Sounds/HitsoundMinecraft.ogg b/WeakAuras/Projects/Sounds/HitsoundMinecraft.ogg similarity index 100% rename from FreshShit/Sounds/HitsoundMinecraft.ogg rename to WeakAuras/Projects/Sounds/HitsoundMinecraft.ogg diff --git a/FreshShit/Sounds/HitsoundNootNoot.ogg b/WeakAuras/Projects/Sounds/HitsoundNootNoot.ogg similarity index 100% rename from FreshShit/Sounds/HitsoundNootNoot.ogg rename to WeakAuras/Projects/Sounds/HitsoundNootNoot.ogg diff --git a/FreshShit/Sounds/HitsoundOra.ogg b/WeakAuras/Projects/Sounds/HitsoundOra.ogg similarity index 100% rename from FreshShit/Sounds/HitsoundOra.ogg rename to WeakAuras/Projects/Sounds/HitsoundOra.ogg diff --git a/FreshShit/Sounds/HitsoundQuake.ogg b/WeakAuras/Projects/Sounds/HitsoundQuake.ogg similarity index 100% rename from FreshShit/Sounds/HitsoundQuake.ogg rename to WeakAuras/Projects/Sounds/HitsoundQuake.ogg diff --git a/FreshShit/Sounds/HitsoundRS.ogg b/WeakAuras/Projects/Sounds/HitsoundRS.ogg similarity index 100% rename from FreshShit/Sounds/HitsoundRS.ogg rename to WeakAuras/Projects/Sounds/HitsoundRS.ogg diff --git a/FreshShit/Sounds/HitsoundRing.ogg b/WeakAuras/Projects/Sounds/HitsoundRing.ogg similarity index 100% rename from FreshShit/Sounds/HitsoundRing.ogg rename to WeakAuras/Projects/Sounds/HitsoundRing.ogg diff --git a/FreshShit/Sounds/HitsoundSans.ogg b/WeakAuras/Projects/Sounds/HitsoundSans.ogg similarity index 100% rename from FreshShit/Sounds/HitsoundSans.ogg rename to WeakAuras/Projects/Sounds/HitsoundSans.ogg diff --git a/FreshShit/Sounds/HitsoundSqueak.ogg b/WeakAuras/Projects/Sounds/HitsoundSqueak.ogg similarity index 100% rename from FreshShit/Sounds/HitsoundSqueak.ogg rename to WeakAuras/Projects/Sounds/HitsoundSqueak.ogg diff --git a/FreshShit/Sounds/HitsoundTin.ogg b/WeakAuras/Projects/Sounds/HitsoundTin.ogg similarity index 100% rename from FreshShit/Sounds/HitsoundTin.ogg rename to WeakAuras/Projects/Sounds/HitsoundTin.ogg diff --git a/FreshShit/Sounds/HitsoundUltrakill.ogg b/WeakAuras/Projects/Sounds/HitsoundUltrakill.ogg similarity index 100% rename from FreshShit/Sounds/HitsoundUltrakill.ogg rename to WeakAuras/Projects/Sounds/HitsoundUltrakill.ogg diff --git a/FreshShit/Sounds/ItsOverJerma.ogg b/WeakAuras/Projects/Sounds/ItsOverJerma.ogg similarity index 100% rename from FreshShit/Sounds/ItsOverJerma.ogg rename to WeakAuras/Projects/Sounds/ItsOverJerma.ogg diff --git a/FreshShit/Sounds/KillsoundHardbass.ogg b/WeakAuras/Projects/Sounds/KillsoundHardbass.ogg similarity index 100% rename from FreshShit/Sounds/KillsoundHardbass.ogg rename to WeakAuras/Projects/Sounds/KillsoundHardbass.ogg diff --git a/FreshShit/Sounds/KillsoundLego.ogg b/WeakAuras/Projects/Sounds/KillsoundLego.ogg similarity index 100% rename from FreshShit/Sounds/KillsoundLego.ogg rename to WeakAuras/Projects/Sounds/KillsoundLego.ogg diff --git a/FreshShit/Sounds/KillsoundRing.ogg b/WeakAuras/Projects/Sounds/KillsoundRing.ogg similarity index 100% rename from FreshShit/Sounds/KillsoundRing.ogg rename to WeakAuras/Projects/Sounds/KillsoundRing.ogg diff --git a/FreshShit/Sounds/KillsoundUltrakill.ogg b/WeakAuras/Projects/Sounds/KillsoundUltrakill.ogg similarity index 100% rename from FreshShit/Sounds/KillsoundUltrakill.ogg rename to WeakAuras/Projects/Sounds/KillsoundUltrakill.ogg diff --git a/FreshShit/Sounds/KillsoundYoda.ogg b/WeakAuras/Projects/Sounds/KillsoundYoda.ogg similarity index 100% rename from FreshShit/Sounds/KillsoundYoda.ogg rename to WeakAuras/Projects/Sounds/KillsoundYoda.ogg diff --git a/FreshShit/Sounds/MGSSpot.ogg b/WeakAuras/Projects/Sounds/MGSSpot.ogg similarity index 100% rename from FreshShit/Sounds/MGSSpot.ogg rename to WeakAuras/Projects/Sounds/MGSSpot.ogg diff --git a/FreshShit/Sounds/MedicGaming.ogg b/WeakAuras/Projects/Sounds/MedicGaming.ogg similarity index 100% rename from FreshShit/Sounds/MedicGaming.ogg rename to WeakAuras/Projects/Sounds/MedicGaming.ogg diff --git a/FreshShit/Sounds/MedicGangsterParadise.ogg b/WeakAuras/Projects/Sounds/MedicGangsterParadise.ogg similarity index 100% rename from FreshShit/Sounds/MedicGangsterParadise.ogg rename to WeakAuras/Projects/Sounds/MedicGangsterParadise.ogg diff --git a/FreshShit/Sounds/MeetTheSniper.ogg b/WeakAuras/Projects/Sounds/MeetTheSniper.ogg similarity index 100% rename from FreshShit/Sounds/MeetTheSniper.ogg rename to WeakAuras/Projects/Sounds/MeetTheSniper.ogg diff --git a/FreshShit/Sounds/Nemesis.ogg b/WeakAuras/Projects/Sounds/Nemesis.ogg similarity index 100% rename from FreshShit/Sounds/Nemesis.ogg rename to WeakAuras/Projects/Sounds/Nemesis.ogg diff --git a/FreshShit/Sounds/OOF.ogg b/WeakAuras/Projects/Sounds/OOF.ogg similarity index 100% rename from FreshShit/Sounds/OOF.ogg rename to WeakAuras/Projects/Sounds/OOF.ogg diff --git a/FreshShit/Sounds/OhNo.ogg b/WeakAuras/Projects/Sounds/OhNo.ogg similarity index 100% rename from FreshShit/Sounds/OhNo.ogg rename to WeakAuras/Projects/Sounds/OhNo.ogg diff --git a/FreshShit/Sounds/POOT.ogg b/WeakAuras/Projects/Sounds/POOT.ogg similarity index 100% rename from FreshShit/Sounds/POOT.ogg rename to WeakAuras/Projects/Sounds/POOT.ogg diff --git a/FreshShit/Sounds/Piss.ogg b/WeakAuras/Projects/Sounds/Piss.ogg similarity index 100% rename from FreshShit/Sounds/Piss.ogg rename to WeakAuras/Projects/Sounds/Piss.ogg diff --git a/FreshShit/Sounds/Revenge.ogg b/WeakAuras/Projects/Sounds/Revenge.ogg similarity index 100% rename from FreshShit/Sounds/Revenge.ogg rename to WeakAuras/Projects/Sounds/Revenge.ogg diff --git a/FreshShit/Sounds/StarScream.ogg b/WeakAuras/Projects/Sounds/StarScream.ogg similarity index 100% rename from FreshShit/Sounds/StarScream.ogg rename to WeakAuras/Projects/Sounds/StarScream.ogg diff --git a/FreshShit/Sounds/TheOnlyThingTheyFearIsYou.ogg b/WeakAuras/Projects/Sounds/TheOnlyThingTheyFearIsYou.ogg similarity index 100% rename from FreshShit/Sounds/TheOnlyThingTheyFearIsYou.ogg rename to WeakAuras/Projects/Sounds/TheOnlyThingTheyFearIsYou.ogg diff --git a/FreshShit/Sounds/TheOnlyThingTheyFearIsYou_Fried.ogg b/WeakAuras/Projects/Sounds/TheOnlyThingTheyFearIsYou_Fried.ogg similarity index 100% rename from FreshShit/Sounds/TheOnlyThingTheyFearIsYou_Fried.ogg rename to WeakAuras/Projects/Sounds/TheOnlyThingTheyFearIsYou_Fried.ogg diff --git a/FreshShit/Sounds/Uncloak.ogg b/WeakAuras/Projects/Sounds/Uncloak.ogg similarity index 100% rename from FreshShit/Sounds/Uncloak.ogg rename to WeakAuras/Projects/Sounds/Uncloak.ogg diff --git a/FreshShit/Sounds/WeAreNumberOne.ogg b/WeakAuras/Projects/Sounds/WeAreNumberOne.ogg similarity index 100% rename from FreshShit/Sounds/WeAreNumberOne.ogg rename to WeakAuras/Projects/Sounds/WeAreNumberOne.ogg diff --git a/FreshShit/Sounds/WeAreNumberOneFried.ogg b/WeakAuras/Projects/Sounds/WeAreNumberOneFried.ogg similarity index 100% rename from FreshShit/Sounds/WeAreNumberOneFried.ogg rename to WeakAuras/Projects/Sounds/WeAreNumberOneFried.ogg diff --git a/FreshShit/Sounds/WindowsXPError.ogg b/WeakAuras/Projects/Sounds/WindowsXPError.ogg similarity index 100% rename from FreshShit/Sounds/WindowsXPError.ogg rename to WeakAuras/Projects/Sounds/WindowsXPError.ogg diff --git a/FreshShit/Sounds/YouveGotMail.ogg b/WeakAuras/Projects/Sounds/YouveGotMail.ogg similarity index 100% rename from FreshShit/Sounds/YouveGotMail.ogg rename to WeakAuras/Projects/Sounds/YouveGotMail.ogg diff --git a/FreshShit/Sounds/bckp.tar.gz b/WeakAuras/Projects/Sounds/bckp.tar.gz similarity index 100% rename from FreshShit/Sounds/bckp.tar.gz rename to WeakAuras/Projects/Sounds/bckp.tar.gz diff --git a/FreshShit/Sounds/output.ogg b/WeakAuras/Projects/Sounds/output.ogg similarity index 100% rename from FreshShit/Sounds/output.ogg rename to WeakAuras/Projects/Sounds/output.ogg diff --git a/FreshShit/Sounds/wav/Bing.wav b/WeakAuras/Projects/Sounds/wav/Bing.wav similarity index 100% rename from FreshShit/Sounds/wav/Bing.wav rename to WeakAuras/Projects/Sounds/wav/Bing.wav diff --git a/FreshShit/Sounds/wav/Bing2.wav b/WeakAuras/Projects/Sounds/wav/Bing2.wav similarity index 100% rename from FreshShit/Sounds/wav/Bing2.wav rename to WeakAuras/Projects/Sounds/wav/Bing2.wav diff --git a/FreshShit/Sounds/wav/Bong.wav b/WeakAuras/Projects/Sounds/wav/Bong.wav similarity index 100% rename from FreshShit/Sounds/wav/Bong.wav rename to WeakAuras/Projects/Sounds/wav/Bong.wav diff --git a/FreshShit/Sounds/wav/BonusDucks.wav b/WeakAuras/Projects/Sounds/wav/BonusDucks.wav similarity index 100% rename from FreshShit/Sounds/wav/BonusDucks.wav rename to WeakAuras/Projects/Sounds/wav/BonusDucks.wav diff --git a/FreshShit/Sounds/wav/Boom2.wav b/WeakAuras/Projects/Sounds/wav/Boom2.wav similarity index 100% rename from FreshShit/Sounds/wav/Boom2.wav rename to WeakAuras/Projects/Sounds/wav/Boom2.wav diff --git a/FreshShit/Sounds/wav/Boom4.wav b/WeakAuras/Projects/Sounds/wav/Boom4.wav similarity index 100% rename from FreshShit/Sounds/wav/Boom4.wav rename to WeakAuras/Projects/Sounds/wav/Boom4.wav diff --git a/FreshShit/Sounds/wav/BoomVery.wav b/WeakAuras/Projects/Sounds/wav/BoomVery.wav similarity index 100% rename from FreshShit/Sounds/wav/BoomVery.wav rename to WeakAuras/Projects/Sounds/wav/BoomVery.wav diff --git a/FreshShit/Sounds/wav/China.wav b/WeakAuras/Projects/Sounds/wav/China.wav similarity index 100% rename from FreshShit/Sounds/wav/China.wav rename to WeakAuras/Projects/Sounds/wav/China.wav diff --git a/FreshShit/Sounds/wav/China2.wav b/WeakAuras/Projects/Sounds/wav/China2.wav similarity index 100% rename from FreshShit/Sounds/wav/China2.wav rename to WeakAuras/Projects/Sounds/wav/China2.wav diff --git a/FreshShit/Sounds/wav/China4.wav b/WeakAuras/Projects/Sounds/wav/China4.wav similarity index 100% rename from FreshShit/Sounds/wav/China4.wav rename to WeakAuras/Projects/Sounds/wav/China4.wav diff --git a/FreshShit/Sounds/wav/China6.wav b/WeakAuras/Projects/Sounds/wav/China6.wav similarity index 100% rename from FreshShit/Sounds/wav/China6.wav rename to WeakAuras/Projects/Sounds/wav/China6.wav diff --git a/FreshShit/Sounds/wav/Dead.wav b/WeakAuras/Projects/Sounds/wav/Dead.wav similarity index 100% rename from FreshShit/Sounds/wav/Dead.wav rename to WeakAuras/Projects/Sounds/wav/Dead.wav diff --git a/FreshShit/Sounds/wav/Domination.wav b/WeakAuras/Projects/Sounds/wav/Domination.wav similarity index 100% rename from FreshShit/Sounds/wav/Domination.wav rename to WeakAuras/Projects/Sounds/wav/Domination.wav diff --git a/FreshShit/Sounds/wav/FortressReel.wav b/WeakAuras/Projects/Sounds/wav/FortressReel.wav similarity index 100% rename from FreshShit/Sounds/wav/FortressReel.wav rename to WeakAuras/Projects/Sounds/wav/FortressReel.wav diff --git a/FreshShit/Sounds/wav/FortressReelLoop.wav b/WeakAuras/Projects/Sounds/wav/FortressReelLoop.wav similarity index 100% rename from FreshShit/Sounds/wav/FortressReelLoop.wav rename to WeakAuras/Projects/Sounds/wav/FortressReelLoop.wav diff --git a/FreshShit/Sounds/wav/GetFucked.wav b/WeakAuras/Projects/Sounds/wav/GetFucked.wav similarity index 100% rename from FreshShit/Sounds/wav/GetFucked.wav rename to WeakAuras/Projects/Sounds/wav/GetFucked.wav diff --git a/FreshShit/Sounds/wav/HL2ButtonClick.wav b/WeakAuras/Projects/Sounds/wav/HL2ButtonClick.wav similarity index 100% rename from FreshShit/Sounds/wav/HL2ButtonClick.wav rename to WeakAuras/Projects/Sounds/wav/HL2ButtonClick.wav diff --git a/FreshShit/Sounds/wav/HL2ButtonRollover.wav b/WeakAuras/Projects/Sounds/wav/HL2ButtonRollover.wav similarity index 100% rename from FreshShit/Sounds/wav/HL2ButtonRollover.wav rename to WeakAuras/Projects/Sounds/wav/HL2ButtonRollover.wav diff --git a/FreshShit/Sounds/wav/Hitsound.wav b/WeakAuras/Projects/Sounds/wav/Hitsound.wav similarity index 100% rename from FreshShit/Sounds/wav/Hitsound.wav rename to WeakAuras/Projects/Sounds/wav/Hitsound.wav diff --git a/FreshShit/Sounds/wav/Hitsound3.wav b/WeakAuras/Projects/Sounds/wav/Hitsound3.wav similarity index 100% rename from FreshShit/Sounds/wav/Hitsound3.wav rename to WeakAuras/Projects/Sounds/wav/Hitsound3.wav diff --git a/FreshShit/Sounds/wav/Hitsound4.wav b/WeakAuras/Projects/Sounds/wav/Hitsound4.wav similarity index 100% rename from FreshShit/Sounds/wav/Hitsound4.wav rename to WeakAuras/Projects/Sounds/wav/Hitsound4.wav diff --git a/FreshShit/Sounds/wav/Hitsound5.wav b/WeakAuras/Projects/Sounds/wav/Hitsound5.wav similarity index 100% rename from FreshShit/Sounds/wav/Hitsound5.wav rename to WeakAuras/Projects/Sounds/wav/Hitsound5.wav diff --git a/FreshShit/Sounds/wav/HitsoundBap.wav b/WeakAuras/Projects/Sounds/wav/HitsoundBap.wav similarity index 100% rename from FreshShit/Sounds/wav/HitsoundBap.wav rename to WeakAuras/Projects/Sounds/wav/HitsoundBap.wav diff --git a/FreshShit/Sounds/wav/HitsoundBoom.wav b/WeakAuras/Projects/Sounds/wav/HitsoundBoom.wav similarity index 100% rename from FreshShit/Sounds/wav/HitsoundBoom.wav rename to WeakAuras/Projects/Sounds/wav/HitsoundBoom.wav diff --git a/FreshShit/Sounds/wav/HitsoundBubble.wav b/WeakAuras/Projects/Sounds/wav/HitsoundBubble.wav similarity index 100% rename from FreshShit/Sounds/wav/HitsoundBubble.wav rename to WeakAuras/Projects/Sounds/wav/HitsoundBubble.wav diff --git a/FreshShit/Sounds/wav/HitsoundCasino3.wav b/WeakAuras/Projects/Sounds/wav/HitsoundCasino3.wav similarity index 100% rename from FreshShit/Sounds/wav/HitsoundCasino3.wav rename to WeakAuras/Projects/Sounds/wav/HitsoundCasino3.wav diff --git a/FreshShit/Sounds/wav/HitsoundDuck.wav b/WeakAuras/Projects/Sounds/wav/HitsoundDuck.wav similarity index 100% rename from FreshShit/Sounds/wav/HitsoundDuck.wav rename to WeakAuras/Projects/Sounds/wav/HitsoundDuck.wav diff --git a/FreshShit/Sounds/wav/HitsoundHardbass.wav b/WeakAuras/Projects/Sounds/wav/HitsoundHardbass.wav similarity index 100% rename from FreshShit/Sounds/wav/HitsoundHardbass.wav rename to WeakAuras/Projects/Sounds/wav/HitsoundHardbass.wav diff --git a/FreshShit/Sounds/wav/HitsoundMinecraft.wav b/WeakAuras/Projects/Sounds/wav/HitsoundMinecraft.wav similarity index 100% rename from FreshShit/Sounds/wav/HitsoundMinecraft.wav rename to WeakAuras/Projects/Sounds/wav/HitsoundMinecraft.wav diff --git a/FreshShit/Sounds/wav/HitsoundOra.wav b/WeakAuras/Projects/Sounds/wav/HitsoundOra.wav similarity index 100% rename from FreshShit/Sounds/wav/HitsoundOra.wav rename to WeakAuras/Projects/Sounds/wav/HitsoundOra.wav diff --git a/FreshShit/Sounds/wav/HitsoundSqueak.wav b/WeakAuras/Projects/Sounds/wav/HitsoundSqueak.wav similarity index 100% rename from FreshShit/Sounds/wav/HitsoundSqueak.wav rename to WeakAuras/Projects/Sounds/wav/HitsoundSqueak.wav diff --git a/FreshShit/Sounds/wav/HitsoundUltrakill.wav b/WeakAuras/Projects/Sounds/wav/HitsoundUltrakill.wav similarity index 100% rename from FreshShit/Sounds/wav/HitsoundUltrakill.wav rename to WeakAuras/Projects/Sounds/wav/HitsoundUltrakill.wav diff --git a/FreshShit/Sounds/wav/KillsoundHardbass.wav b/WeakAuras/Projects/Sounds/wav/KillsoundHardbass.wav similarity index 100% rename from FreshShit/Sounds/wav/KillsoundHardbass.wav rename to WeakAuras/Projects/Sounds/wav/KillsoundHardbass.wav diff --git a/FreshShit/Sounds/wav/KillsoundLego.wav b/WeakAuras/Projects/Sounds/wav/KillsoundLego.wav similarity index 100% rename from FreshShit/Sounds/wav/KillsoundLego.wav rename to WeakAuras/Projects/Sounds/wav/KillsoundLego.wav diff --git a/FreshShit/Sounds/wav/KillsoundUltrakill.wav b/WeakAuras/Projects/Sounds/wav/KillsoundUltrakill.wav similarity index 100% rename from FreshShit/Sounds/wav/KillsoundUltrakill.wav rename to WeakAuras/Projects/Sounds/wav/KillsoundUltrakill.wav diff --git a/FreshShit/Sounds/wav/MeetTheSniper.wav b/WeakAuras/Projects/Sounds/wav/MeetTheSniper.wav similarity index 100% rename from FreshShit/Sounds/wav/MeetTheSniper.wav rename to WeakAuras/Projects/Sounds/wav/MeetTheSniper.wav diff --git a/FreshShit/Sounds/wav/Nemesis.wav b/WeakAuras/Projects/Sounds/wav/Nemesis.wav similarity index 100% rename from FreshShit/Sounds/wav/Nemesis.wav rename to WeakAuras/Projects/Sounds/wav/Nemesis.wav diff --git a/FreshShit/Sounds/wav/OOF.wav b/WeakAuras/Projects/Sounds/wav/OOF.wav similarity index 100% rename from FreshShit/Sounds/wav/OOF.wav rename to WeakAuras/Projects/Sounds/wav/OOF.wav diff --git a/FreshShit/Sounds/wav/OhNo.wav b/WeakAuras/Projects/Sounds/wav/OhNo.wav similarity index 100% rename from FreshShit/Sounds/wav/OhNo.wav rename to WeakAuras/Projects/Sounds/wav/OhNo.wav diff --git a/FreshShit/Sounds/wav/POOT.wav b/WeakAuras/Projects/Sounds/wav/POOT.wav similarity index 100% rename from FreshShit/Sounds/wav/POOT.wav rename to WeakAuras/Projects/Sounds/wav/POOT.wav diff --git a/FreshShit/Sounds/wav/Piss.wav b/WeakAuras/Projects/Sounds/wav/Piss.wav similarity index 100% rename from FreshShit/Sounds/wav/Piss.wav rename to WeakAuras/Projects/Sounds/wav/Piss.wav diff --git a/FreshShit/Sounds/wav/Revenge.wav b/WeakAuras/Projects/Sounds/wav/Revenge.wav similarity index 100% rename from FreshShit/Sounds/wav/Revenge.wav rename to WeakAuras/Projects/Sounds/wav/Revenge.wav diff --git a/FreshShit/Sounds/wav/Uncloak.wav b/WeakAuras/Projects/Sounds/wav/Uncloak.wav similarity index 100% rename from FreshShit/Sounds/wav/Uncloak.wav rename to WeakAuras/Projects/Sounds/wav/Uncloak.wav diff --git a/FreshShit/Sounds/wav/WeAreNumberOne.wav b/WeakAuras/Projects/Sounds/wav/WeAreNumberOne.wav similarity index 100% rename from FreshShit/Sounds/wav/WeAreNumberOne.wav rename to WeakAuras/Projects/Sounds/wav/WeAreNumberOne.wav diff --git a/FreshShit/Sounds/wav/WeAreNumberOneFried.wav b/WeakAuras/Projects/Sounds/wav/WeAreNumberOneFried.wav similarity index 100% rename from FreshShit/Sounds/wav/WeAreNumberOneFried.wav rename to WeakAuras/Projects/Sounds/wav/WeAreNumberOneFried.wav diff --git a/Complete Projects/Legion/Spam Begone.lua b/WeakAuras/Projects/Spam Begone.lua similarity index 96% rename from Complete Projects/Legion/Spam Begone.lua rename to WeakAuras/Projects/Spam Begone.lua index 01f9af6..bd1b403 100644 --- a/Complete Projects/Legion/Spam Begone.lua +++ b/WeakAuras/Projects/Spam Begone.lua @@ -1,43 +1,43 @@ -CHAT_MSG_CHANNEL -function(_,msg,sender,_,channel) - sender = string.match(sender, "%a+") - msg = string.lower(msg, "%u", "%l") - local ignore = 1 - local filter = {"%[fuck", "baby", "thunderfury", "anal"} - if channel == "1. global_en" then - for i = 1, table.getn(filter) do - if string.match(msg, filter[i]) then - local _,friendson = GetNumFriends() - for j = 1, friendson do - if sender == GetFriendInfo(j) then - ignore = 0 - break - end - end - if ignore == 1 then - if not IsIgnored(sender) then - AddIgnore(sender) - print("IGNORING " .. sender .. " because of |cFFFF7F7F" .. msg) - aura_env.ignoreList[aura_env.pointer] = sender - aura_env.pointer = aura_env.pointer + 1 - end - end - end - end - end -end - -DISPLAY -function() - local output = "" - for k,v in pairs(aura_env.ignoreList) do - output = output .. v .. "\n" - end - return output -end - -INIT -aura_env.ignoreList = {} -aura_env.pointer = 1 - -/run for i = 1, GetNumGuildMembers() do local name = GetGuildRosterInfo(i); name = string.match(name, "%a+"); DelIgnore(name) end +CHAT_MSG_CHANNEL +function(_,msg,sender,_,channel) + sender = string.match(sender, "%a+") + msg = string.lower(msg, "%u", "%l") + local ignore = 1 + local filter = {"%[fuck", "baby", "thunderfury", "anal"} + if channel == "1. global_en" then + for i = 1, table.getn(filter) do + if string.match(msg, filter[i]) then + local _,friendson = GetNumFriends() + for j = 1, friendson do + if sender == GetFriendInfo(j) then + ignore = 0 + break + end + end + if ignore == 1 then + if not IsIgnored(sender) then + AddIgnore(sender) + print("IGNORING " .. sender .. " because of |cFFFF7F7F" .. msg) + aura_env.ignoreList[aura_env.pointer] = sender + aura_env.pointer = aura_env.pointer + 1 + end + end + end + end + end +end + +DISPLAY +function() + local output = "" + for k,v in pairs(aura_env.ignoreList) do + output = output .. v .. "\n" + end + return output +end + +INIT +aura_env.ignoreList = {} +aura_env.pointer = 1 + +/run for i = 1, GetNumGuildMembers() do local name = GetGuildRosterInfo(i); name = string.match(name, "%a+"); DelIgnore(name) end diff --git a/Complete Projects/Legion/Spell Charges/01.lua b/WeakAuras/Projects/Spell Charges/01.lua similarity index 96% rename from Complete Projects/Legion/Spell Charges/01.lua rename to WeakAuras/Projects/Spell Charges/01.lua index 882ab87..ee063d8 100644 --- a/Complete Projects/Legion/Spell Charges/01.lua +++ b/WeakAuras/Projects/Spell Charges/01.lua @@ -1,18 +1,18 @@ -function() -- 0 - 1 CHARGE - local charges, max, cdstart, cddur = GetSpellCharges(aura_env.spell) - cdstart = cdstart * 1000 - cddur = cddur * 1000 - if exptime then - exptime = exptime * 1000 - end - local time = GetTime() * 1000 - if charges >= 1 then --FULL CHARGES RETURNS FULL BAR - return 1, 1, 1 - end - if charges == 0 then --CHARGE 1 RECHARGING RETURNS COOLDOWN - local cd = time - cdstart - return cd, cddur, 1 - end -end - +function() -- 0 - 1 CHARGE + local charges, max, cdstart, cddur = GetSpellCharges(aura_env.spell) + cdstart = cdstart * 1000 + cddur = cddur * 1000 + if exptime then + exptime = exptime * 1000 + end + local time = GetTime() * 1000 + if charges >= 1 then --FULL CHARGES RETURNS FULL BAR + return 1, 1, 1 + end + if charges == 0 then --CHARGE 1 RECHARGING RETURNS COOLDOWN + local cd = time - cdstart + return cd, cddur, 1 + end +end + aura_env.spell= "Judgment" \ No newline at end of file diff --git a/Complete Projects/Legion/Spell Charges/12.lua b/WeakAuras/Projects/Spell Charges/12.lua similarity index 96% rename from Complete Projects/Legion/Spell Charges/12.lua rename to WeakAuras/Projects/Spell Charges/12.lua index 4f87c1f..c2836c0 100644 --- a/Complete Projects/Legion/Spell Charges/12.lua +++ b/WeakAuras/Projects/Spell Charges/12.lua @@ -1,21 +1,21 @@ -function() -- 1 - 2 CHARGE - local charges, max, cdstart, cddur = GetSpellCharges(aura_env.spell) - cdstart = cdstart * 1000 - cddur = cddur * 1000 - if exptime then - exptime = exptime * 1000 - end - local time = GetTime() * 1000 - if charges >= 2 then --FULL CHARGES RETURNS FULL BAR - return 1, 1, 1 - end - if charges == 1 then --CHARGE 2 RECHARGING RETURNS COOLDOWN - local cd = time - cdstart - return cd, cddur, 1 - end - if charges < 1 then --CHARGE 1 RECHARGING RETURNS 0 - return 0, 1, 1 - end -end - +function() -- 1 - 2 CHARGE + local charges, max, cdstart, cddur = GetSpellCharges(aura_env.spell) + cdstart = cdstart * 1000 + cddur = cddur * 1000 + if exptime then + exptime = exptime * 1000 + end + local time = GetTime() * 1000 + if charges >= 2 then --FULL CHARGES RETURNS FULL BAR + return 1, 1, 1 + end + if charges == 1 then --CHARGE 2 RECHARGING RETURNS COOLDOWN + local cd = time - cdstart + return cd, cddur, 1 + end + if charges < 1 then --CHARGE 1 RECHARGING RETURNS 0 + return 0, 1, 1 + end +end + aura_env.spell= "Judgment" \ No newline at end of file diff --git a/Complete Projects/Legion/Spell Charges/23.lua b/WeakAuras/Projects/Spell Charges/23.lua similarity index 96% rename from Complete Projects/Legion/Spell Charges/23.lua rename to WeakAuras/Projects/Spell Charges/23.lua index 08cd20d..82b173f 100644 --- a/Complete Projects/Legion/Spell Charges/23.lua +++ b/WeakAuras/Projects/Spell Charges/23.lua @@ -1,21 +1,21 @@ -function() -- 2 - 3 CHARGE - local charges, max, cdstart, cddur = GetSpellCharges(aura_env.spell) - cdstart = cdstart * 1000 - cddur = cddur * 1000 - if exptime then - exptime = exptime * 1000 - end - local time = GetTime() * 1000 - if charges >= 3 then --FULL CHARGES RETURNS FULL BAR - return 1, 1, 1 - end - if charges == 2 then --CHARGE 2 RECHARGING RETURNS COOLDOWN - local cd = time - cdstart - return cd, cddur, 1 - end - if charges < 2 then --CHARGE 1 RECHARGING RETURNS 0 - return 0, 1, 1 - end -end - +function() -- 2 - 3 CHARGE + local charges, max, cdstart, cddur = GetSpellCharges(aura_env.spell) + cdstart = cdstart * 1000 + cddur = cddur * 1000 + if exptime then + exptime = exptime * 1000 + end + local time = GetTime() * 1000 + if charges >= 3 then --FULL CHARGES RETURNS FULL BAR + return 1, 1, 1 + end + if charges == 2 then --CHARGE 2 RECHARGING RETURNS COOLDOWN + local cd = time - cdstart + return cd, cddur, 1 + end + if charges < 2 then --CHARGE 1 RECHARGING RETURNS 0 + return 0, 1, 1 + end +end + aura_env.spell= "Judgment" \ No newline at end of file diff --git a/FreshShit/Spotter/event.lua b/WeakAuras/Projects/Spotter/event.lua similarity index 96% rename from FreshShit/Spotter/event.lua rename to WeakAuras/Projects/Spotter/event.lua index a4d4d85..2285873 100644 --- a/FreshShit/Spotter/event.lua +++ b/WeakAuras/Projects/Spotter/event.lua @@ -1,24 +1,24 @@ --- NAME_PLATE_UNIT_ADDED NAME_PLATE_UNIT_REMOVED -function(event, unit) - local name = UnitName(unit) - if name and UnitIsPlayer(unit) then - local race = UnitRace(unit) - local doNotify = true - if aura_env.config.allyOnly then - doNotify = false - if aura_env.raceMap[race] == "Alliance" then - doNotify = true - end - end - -- Stinkies overwrite allyOnly - if aura_env.config.stinkyOnly then - doNotify = false - if WeakAurasSaved.Cyka.stinkies[name] then - doNotify = true - end - end - if doNotify then - aura_env.NotifySpotted(name, race) - end - end +-- NAME_PLATE_UNIT_ADDED NAME_PLATE_UNIT_REMOVED +function(event, unit) + local name = UnitName(unit) + if name and UnitIsPlayer(unit) then + local race = UnitRace(unit) + local doNotify = true + if aura_env.config.allyOnly then + doNotify = false + if aura_env.raceMap[race] == "Alliance" then + doNotify = true + end + end + -- Stinkies overwrite allyOnly + if aura_env.config.stinkyOnly then + doNotify = false + if WeakAurasSaved.Cyka.stinkies[name] then + doNotify = true + end + end + if doNotify then + aura_env.NotifySpotted(name, race) + end + end end \ No newline at end of file diff --git a/FreshShit/Spotter/export b/WeakAuras/Projects/Spotter/export similarity index 100% rename from FreshShit/Spotter/export rename to WeakAuras/Projects/Spotter/export diff --git a/FreshShit/Spotter/init.lua b/WeakAuras/Projects/Spotter/init.lua similarity index 96% rename from FreshShit/Spotter/init.lua rename to WeakAuras/Projects/Spotter/init.lua index 2afaa47..c8fb4e7 100644 --- a/FreshShit/Spotter/init.lua +++ b/WeakAuras/Projects/Spotter/init.lua @@ -1,55 +1,55 @@ ----@class Message ----@field message string ----@field channel string ----@field data string - ----@type Message[] -aura_env.messageQueue = {} - ----@type table -aura_env.raceMap = { - ["Orc"] = "Horde", - ["Undead"] = "Horde", - ["Tauren"] = "Horde", - ["Troll"] = "Horde", - ["Blood Elf"] = "Horde", - ["Goblin"] = "Horde", - ["Human"] = "Alliance", - ["Dwarf"] = "Alliance", - ["Night Elf"] = "Alliance", - ["Gnome"] = "Alliance", - ["Draenei"] = "Alliance", - ["Worgen"] = "Alliance", - ["Vulpera"] = "Horde", - ["Nightborne"] = "Horde", - ["Zandalari Troll"] = "Horde", - ["Kul Tiran"] = "Alliance", - ["Dark Iron Dwarf"] = "Alliance", - ["Void Elf"] = "Alliance", - ["Lightforged Draenei"] = "Alliance", - ["Mechagnome"] = "Alliance", - ["Mag'har Orc"] = "Horde", -} - -local throttleTimer = aura_env.config.throttle or 10 -local throttleMap = {} - ----@param playerName string ----@param race string ----@return nil -aura_env.NotifySpotted = function(playerName, race) - local now = GetTime() - local throttleTime = throttleMap[playerName] or 0 - if now - throttleTime < throttleTimer then return end - throttleMap[playerName] = now - - local zone = aura_env.config.zone - if not zone or zone == "" then zone = GetZoneText() .. " " .. GetSubZoneText() end - - local message = { - channel = "CHANNEL", - data = aura_env.config.channel, - message = string.format("I see %s at %s!", playerName, zone), - } - table.insert(WeakAurasSaved.Cyka.MessageQueue, message) -end +---@class Message +---@field message string +---@field channel string +---@field data string + +---@type Message[] +aura_env.messageQueue = {} + +---@type table +aura_env.raceMap = { + ["Orc"] = "Horde", + ["Undead"] = "Horde", + ["Tauren"] = "Horde", + ["Troll"] = "Horde", + ["Blood Elf"] = "Horde", + ["Goblin"] = "Horde", + ["Human"] = "Alliance", + ["Dwarf"] = "Alliance", + ["Night Elf"] = "Alliance", + ["Gnome"] = "Alliance", + ["Draenei"] = "Alliance", + ["Worgen"] = "Alliance", + ["Vulpera"] = "Horde", + ["Nightborne"] = "Horde", + ["Zandalari Troll"] = "Horde", + ["Kul Tiran"] = "Alliance", + ["Dark Iron Dwarf"] = "Alliance", + ["Void Elf"] = "Alliance", + ["Lightforged Draenei"] = "Alliance", + ["Mechagnome"] = "Alliance", + ["Mag'har Orc"] = "Horde", +} + +local throttleTimer = aura_env.config.throttle or 10 +local throttleMap = {} + +---@param playerName string +---@param race string +---@return nil +aura_env.NotifySpotted = function(playerName, race) + local now = GetTime() + local throttleTime = throttleMap[playerName] or 0 + if now - throttleTime < throttleTimer then return end + throttleMap[playerName] = now + + local zone = aura_env.config.zone + if not zone or zone == "" then zone = GetZoneText() .. " " .. GetSubZoneText() end + + local message = { + channel = "CHANNEL", + data = aura_env.config.channel, + message = string.format("I see %s at %s!", playerName, zone), + } + table.insert(WeakAurasSaved.Cyka.MessageQueue, message) +end diff --git a/FreshShit/SpySatellite/event.lua b/WeakAuras/Projects/SpySatellite/event.lua similarity index 94% rename from FreshShit/SpySatellite/event.lua rename to WeakAuras/Projects/SpySatellite/event.lua index 43415f3..ccf5d31 100644 --- a/FreshShit/SpySatellite/event.lua +++ b/WeakAuras/Projects/SpySatellite/event.lua @@ -1,4 +1,4 @@ --- COMBAT_LOG_EVENT_UNFILTERED -function(e, ...) - +-- COMBAT_LOG_EVENT_UNFILTERED +function(e, ...) + end \ No newline at end of file diff --git a/FreshShit/SpySatellite/event2.lua b/WeakAuras/Projects/SpySatellite/event2.lua similarity index 96% rename from FreshShit/SpySatellite/event2.lua rename to WeakAuras/Projects/SpySatellite/event2.lua index 51f0d94..c28eba2 100644 --- a/FreshShit/SpySatellite/event2.lua +++ b/WeakAuras/Projects/SpySatellite/event2.lua @@ -1,10 +1,10 @@ ---NAME_PLATE_UNIT_ADDED -function(e, unit) - if not UnitIsPlayer(unit) then return end - local name = UnitName(unit) - local health = UnitHealth(unit) - local player = aura_env.GetPlayer(name) - player.health = health - player:QueryIfNecessary() - WeakAurasSaved.Cyka.Players[name] = player +--NAME_PLATE_UNIT_ADDED +function(e, unit) + if not UnitIsPlayer(unit) then return end + local name = UnitName(unit) + local health = UnitHealth(unit) + local player = aura_env.GetPlayer(name) + player.health = health + player:QueryIfNecessary() + WeakAurasSaved.Cyka.Players[name] = player end \ No newline at end of file diff --git a/FreshShit/SpySatellite/event3.lua b/WeakAuras/Projects/SpySatellite/event3.lua similarity index 96% rename from FreshShit/SpySatellite/event3.lua rename to WeakAuras/Projects/SpySatellite/event3.lua index dd03a18..f14fb4c 100644 --- a/FreshShit/SpySatellite/event3.lua +++ b/WeakAuras/Projects/SpySatellite/event3.lua @@ -1,13 +1,13 @@ --- WHO_LIST_UPDATE -function() - for i = 1, GetNumWhoResults() do - local name, guild, level, race, class, zone = GetWhoInfo(i) - print(string.format("Got player info for %s", name)) - local player = aura_env.GetPlayer(name) - player.guild = guild - player.race = race - WeakAurasSaved.Cyka.Players[name] = player - player.whoQueued = false - aura_env.whoQueued = false - end +-- WHO_LIST_UPDATE +function() + for i = 1, GetNumWhoResults() do + local name, guild, level, race, class, zone = GetWhoInfo(i) + print(string.format("Got player info for %s", name)) + local player = aura_env.GetPlayer(name) + player.guild = guild + player.race = race + WeakAurasSaved.Cyka.Players[name] = player + player.whoQueued = false + aura_env.whoQueued = false + end end \ No newline at end of file diff --git a/FreshShit/SpySatellite/init.lua b/WeakAuras/Projects/SpySatellite/init.lua similarity index 97% rename from FreshShit/SpySatellite/init.lua rename to WeakAuras/Projects/SpySatellite/init.lua index 9e88f70..0bf54b0 100644 --- a/FreshShit/SpySatellite/init.lua +++ b/WeakAuras/Projects/SpySatellite/init.lua @@ -1,102 +1,102 @@ ----@class aura_env ----@field config table ----@field whoQueued boolean ----@field GetPlayer fun(name: string): Player - -local channelname = aura_env.config.channelname or "lAKDJjZfNgobMblAangc" -aura_env.whoQueued = false - -if not WeakAurasSaved.Cyka then WeakAurasSaved.Cyka = {} end -if not WeakAurasSaved.Cyka.RaceCache then WeakAurasSaved.Cyka.RaceCache = {} end - -aura_env.GetPlayer = function(name) - local player = WeakAurasSaved.Cyka.RaceCache[name] or Player.new(name) - WeakAurasSaved.Cyka.RaceCache[name] = player - return player -end - ----@class Player ----@field name string ----@field guild string|nil ----@field race string|nil ----@field health number ----@field whoQueued boolean -Player = { - ---@param name string - ---@return Player - new = function(name) - local self = setmetatable({}, { - __index = Player, - }) - self.name = name - self.whoQueued = false - self.health = 0 - return self - end, - QueryIfNecessary = function(self) - if self.whoQueued then return end - if self.race ~= nil then return end - self:QueryWho() - end, - QueryWho = function(self) - if aura_env.whoQueued then - print(string.format("There is already a who query queued, waiting for player %s", self.name)) - C_Timer.After(0.5, function() self:QueryWho() end) - return - end - if self.whoQueued then - print(string.format("Player %s is already queued", self.name)) - return - end - local query = string.format('n-"%s"', self.name) - print(string.format("Queueing who query for player %s: %s", self.name, query)) - self.whoQueued = true - aura_env.whoQueued = true - SendWho(query) - end, -} - ---[09:01 PM] Dump: value=GetChannelList() ---[09:01 PM] [1]=1, ---[09:01 PM] [2]="world_en", ---[09:01 PM] [3]=2, ---[09:01 PM] [4]="world_ru", ---[09:01 PM] [5]=3, ---[09:01 PM] [6]="world_hc", ---[09:01 PM] [7]=6, ---[09:01 PM] [8]="lAKDJjZfNgobMblAangc" --- --- zoneChannel, channelName = JoinPermanentChannel("name" [, "password" [, chatFrameIndex [, enableVoice]]]) --- ---[09:03 PM] Dump: value=GetChannelDisplayInfo(6) ---[09:03 PM] [1]="world_hc", ---[09:03 PM] [2]=false, ---[09:03 PM] [4]=3, ---[09:03 PM] [5]=1258, ---[09:03 PM] [6]=true, ---[09:03 PM] [7]="CHANNEL_CATEGORY_CUSTOM", ---[09:03 PM] [8]=false --- --- channelCount = GetNumDisplayChannels() --- --- --- SendChatMessage("text" [, "chatType" [, languageIndex [, "channel"]]]) ---Arguments: --- text - Message to be sent (up to 255 characters) (string) --- chatType - Channel on which to send the message (defaults to SAY if omitted) (string) --- CHANNEL - Message to a server or custom chat channel (sent with /1, /2, etc in the default UI); requires channel number for channel argument --- DND - Enables Away-From-Keyboard status for the player, with text as the custom message seen by others attempting to whisper the player --- EMOTE - Custom text emotes visible to nearby players (sent with /e in the default UI) --- GUILD - Messages to guild members (sent with /g in the default UI) --- INSTANCE_CHAT - Messages to a LFG/LFR instance group (sent with /i in the default UI) --- OFFICER - Messages to guild officers (sent with /o in the default UI) --- PARTY - Messages to party members (sent with /p in the default UI) --- RAID - Messages to raid members (sent with /ra in the default UI) --- RAID_WARNING - Warning to raid members (sent with /rw in the default UI) --- SAY - Speech to nearby players (sent with /s in the default UI) --- WHISPER - Message to a specific character (sent with /w in the default UI); requires name of the character for channel argument --- YELL - Yell to not-so-nearby players (sent with /y in the default UI) --- languageIndex - Language in which to send the message; defaults to Common (for Alliance players) or Orcish (for Horde players) if omitted. Language indices can be retrieved from GetLanguageByIndex(). (number) --- channel - If chatType is WHISPER, name of the target character; if chatType is CHANNEL, number identifying the target channel; ignored otherwise (string) --- --- language = GetDefaultLanguage() +---@class aura_env +---@field config table +---@field whoQueued boolean +---@field GetPlayer fun(name: string): Player + +local channelname = aura_env.config.channelname or "lAKDJjZfNgobMblAangc" +aura_env.whoQueued = false + +if not WeakAurasSaved.Cyka then WeakAurasSaved.Cyka = {} end +if not WeakAurasSaved.Cyka.RaceCache then WeakAurasSaved.Cyka.RaceCache = {} end + +aura_env.GetPlayer = function(name) + local player = WeakAurasSaved.Cyka.RaceCache[name] or Player.new(name) + WeakAurasSaved.Cyka.RaceCache[name] = player + return player +end + +---@class Player +---@field name string +---@field guild string|nil +---@field race string|nil +---@field health number +---@field whoQueued boolean +Player = { + ---@param name string + ---@return Player + new = function(name) + local self = setmetatable({}, { + __index = Player, + }) + self.name = name + self.whoQueued = false + self.health = 0 + return self + end, + QueryIfNecessary = function(self) + if self.whoQueued then return end + if self.race ~= nil then return end + self:QueryWho() + end, + QueryWho = function(self) + if aura_env.whoQueued then + print(string.format("There is already a who query queued, waiting for player %s", self.name)) + C_Timer.After(0.5, function() self:QueryWho() end) + return + end + if self.whoQueued then + print(string.format("Player %s is already queued", self.name)) + return + end + local query = string.format('n-"%s"', self.name) + print(string.format("Queueing who query for player %s: %s", self.name, query)) + self.whoQueued = true + aura_env.whoQueued = true + SendWho(query) + end, +} + +--[09:01 PM] Dump: value=GetChannelList() +--[09:01 PM] [1]=1, +--[09:01 PM] [2]="world_en", +--[09:01 PM] [3]=2, +--[09:01 PM] [4]="world_ru", +--[09:01 PM] [5]=3, +--[09:01 PM] [6]="world_hc", +--[09:01 PM] [7]=6, +--[09:01 PM] [8]="lAKDJjZfNgobMblAangc" +-- +-- zoneChannel, channelName = JoinPermanentChannel("name" [, "password" [, chatFrameIndex [, enableVoice]]]) +-- +--[09:03 PM] Dump: value=GetChannelDisplayInfo(6) +--[09:03 PM] [1]="world_hc", +--[09:03 PM] [2]=false, +--[09:03 PM] [4]=3, +--[09:03 PM] [5]=1258, +--[09:03 PM] [6]=true, +--[09:03 PM] [7]="CHANNEL_CATEGORY_CUSTOM", +--[09:03 PM] [8]=false +-- +-- channelCount = GetNumDisplayChannels() +-- +-- +-- SendChatMessage("text" [, "chatType" [, languageIndex [, "channel"]]]) +--Arguments: +-- text - Message to be sent (up to 255 characters) (string) +-- chatType - Channel on which to send the message (defaults to SAY if omitted) (string) +-- CHANNEL - Message to a server or custom chat channel (sent with /1, /2, etc in the default UI); requires channel number for channel argument +-- DND - Enables Away-From-Keyboard status for the player, with text as the custom message seen by others attempting to whisper the player +-- EMOTE - Custom text emotes visible to nearby players (sent with /e in the default UI) +-- GUILD - Messages to guild members (sent with /g in the default UI) +-- INSTANCE_CHAT - Messages to a LFG/LFR instance group (sent with /i in the default UI) +-- OFFICER - Messages to guild officers (sent with /o in the default UI) +-- PARTY - Messages to party members (sent with /p in the default UI) +-- RAID - Messages to raid members (sent with /ra in the default UI) +-- RAID_WARNING - Warning to raid members (sent with /rw in the default UI) +-- SAY - Speech to nearby players (sent with /s in the default UI) +-- WHISPER - Message to a specific character (sent with /w in the default UI); requires name of the character for channel argument +-- YELL - Yell to not-so-nearby players (sent with /y in the default UI) +-- languageIndex - Language in which to send the message; defaults to Common (for Alliance players) or Orcish (for Horde players) if omitted. Language indices can be retrieved from GetLanguageByIndex(). (number) +-- channel - If chatType is WHISPER, name of the target character; if chatType is CHANNEL, number identifying the target channel; ignored otherwise (string) +-- +-- language = GetDefaultLanguage() diff --git a/FreshShit/StinkyDetector/event.lua b/WeakAuras/Projects/StinkyDetector/event.lua similarity index 95% rename from FreshShit/StinkyDetector/event.lua rename to WeakAuras/Projects/StinkyDetector/event.lua index fa5785f..9a31fb6 100644 --- a/FreshShit/StinkyDetector/event.lua +++ b/WeakAuras/Projects/StinkyDetector/event.lua @@ -1,29 +1,29 @@ --- COMBAT_LOG_EVENT_UNFILTERED ----@param e string -function(e, ...) - local detected = false - local stinky = "" - - local source, err = CLEUParser.GetSourceName(...) - if not err then - if aura_env.stinkies[source] then - stinky = source - detected = true - end - end - if not detected then - local destination, err = CLEUParser.GetDestName(...) - if not err then - if aura_env.stinkies[destination] then - stinky = destination - detected = true - end - end - end - - if detected then - aura_env.StinkyDetected(stinky) - end - - return true +-- COMBAT_LOG_EVENT_UNFILTERED +---@param e string +function(e, ...) + local detected = false + local stinky = "" + + local source, err = CLEUParser.GetSourceName(...) + if not err then + if aura_env.stinkies[source] then + stinky = source + detected = true + end + end + if not detected then + local destination, err = CLEUParser.GetDestName(...) + if not err then + if aura_env.stinkies[destination] then + stinky = destination + detected = true + end + end + end + + if detected then + aura_env.StinkyDetected(stinky) + end + + return true end \ No newline at end of file diff --git a/FreshShit/StinkyDetector/event2.lua b/WeakAuras/Projects/StinkyDetector/event2.lua similarity index 96% rename from FreshShit/StinkyDetector/event2.lua rename to WeakAuras/Projects/StinkyDetector/event2.lua index a522fa7..b50a2eb 100644 --- a/FreshShit/StinkyDetector/event2.lua +++ b/WeakAuras/Projects/StinkyDetector/event2.lua @@ -1,44 +1,44 @@ --- TICKER_1000 ----@param allstates allstates ----@param e string ----@param prefix string ----@param msg string -function(allstates, e, prefix, msg, ...) - for i = 1, 40 do - if UnitIsPlayer("nameplate" .. i) then - local name = UnitName("nameplate" .. i) - if aura_env.stinkies[name] then - aura_env.StinkyDetected(name) - end - end - end - - local ttl = aura_env.config.ttl or 10 - for stinky, data in pairs(aura_env.detectedStinkies) do - local elapsed = GetTime() - data.seen - if allstates[stinky] then - if elapsed > ttl then - allstates[stinky].show = false - allstates[stinky].changed = true - aura_env.detectedStinkies[stinky] = nil - else - allstates[stinky].progress = string.format("%20ss", string.format("%.1f", elapsed)) - allstates[stinky].changed = true - end - else - allstates[stinky] = { - show = true, - changed = true, - name = string.format("%-20s", stinky), - progressType = "timed", - duration = ttl, - expirationTime = GetTime() + ttl, - autohide = true, - index = GetTime(), - progress = string.format("%20ss", string.format("%.1f", elapsed)) - } - end - end - - return true -end +-- TICKER_1000 +---@param allstates allstates +---@param e string +---@param prefix string +---@param msg string +function(allstates, e, prefix, msg, ...) + for i = 1, 40 do + if UnitIsPlayer("nameplate" .. i) then + local name = UnitName("nameplate" .. i) + if aura_env.stinkies[name] then + aura_env.StinkyDetected(name) + end + end + end + + local ttl = aura_env.config.ttl or 10 + for stinky, data in pairs(aura_env.detectedStinkies) do + local elapsed = GetTime() - data.seen + if allstates[stinky] then + if elapsed > ttl then + allstates[stinky].show = false + allstates[stinky].changed = true + aura_env.detectedStinkies[stinky] = nil + else + allstates[stinky].progress = string.format("%20ss", string.format("%.1f", elapsed)) + allstates[stinky].changed = true + end + else + allstates[stinky] = { + show = true, + changed = true, + name = string.format("%-20s", stinky), + progressType = "timed", + duration = ttl, + expirationTime = GetTime() + ttl, + autohide = true, + index = GetTime(), + progress = string.format("%20ss", string.format("%.1f", elapsed)) + } + end + end + + return true +end diff --git a/FreshShit/StinkyDetector/export b/WeakAuras/Projects/StinkyDetector/export similarity index 100% rename from FreshShit/StinkyDetector/export rename to WeakAuras/Projects/StinkyDetector/export diff --git a/FreshShit/StinkyDetector/init.lua b/WeakAuras/Projects/StinkyDetector/init.lua similarity index 96% rename from FreshShit/StinkyDetector/init.lua rename to WeakAuras/Projects/StinkyDetector/init.lua index 0c8e012..68823f1 100644 --- a/FreshShit/StinkyDetector/init.lua +++ b/WeakAuras/Projects/StinkyDetector/init.lua @@ -1,40 +1,40 @@ ----@class aura_env ----@field config table ----@field stinkies table ----@field detectedStinkies table ----@field StinkyDetected fun(name: string) -aura_env.stinkies = {} -aura_env.detectedStinkies = {} - ----@param input string ----@param deliminer string ----@return string[], string|nil -local function StrSplit(input, deliminer) - if not deliminer then return {}, "deliminer is nil" end - if not input then return {}, "input is nil" end - local parts = {} - for part in string.gmatch(input, "([^" .. deliminer .. "]+)") do - table.insert(parts, strtrim(part)) - end - return parts, nil -end - -local stinkies = StrSplit(aura_env.config.stinkies, ",") -for _, name in ipairs(stinkies) do - aura_env.stinkies[name] = true -end - -aura_env.StinkyDetected = function(name) - local now = GetTime() - local existing = aura_env.detectedStinkies[name] - if not existing then - aura_env.detectedStinkies[name] = { seen = now, muteUntil = 0 } - else - existing.seen = now - end - if existing.muteUntil < now then - print(existing.muteUntil, now) - PlaySoundFile("Interface\\Sounds\\Domination.ogg", "Master") - end - aura_env.detectedStinkies[name].muteUntil = now + aura_env.config.alertThrottle -end +---@class aura_env +---@field config table +---@field stinkies table +---@field detectedStinkies table +---@field StinkyDetected fun(name: string) +aura_env.stinkies = {} +aura_env.detectedStinkies = {} + +---@param input string +---@param deliminer string +---@return string[], string|nil +local function StrSplit(input, deliminer) + if not deliminer then return {}, "deliminer is nil" end + if not input then return {}, "input is nil" end + local parts = {} + for part in string.gmatch(input, "([^" .. deliminer .. "]+)") do + table.insert(parts, strtrim(part)) + end + return parts, nil +end + +local stinkies = StrSplit(aura_env.config.stinkies, ",") +for _, name in ipairs(stinkies) do + aura_env.stinkies[name] = true +end + +aura_env.StinkyDetected = function(name) + local now = GetTime() + local existing = aura_env.detectedStinkies[name] + if not existing then + aura_env.detectedStinkies[name] = { seen = now, muteUntil = 0 } + else + existing.seen = now + end + if existing.muteUntil < now then + print(existing.muteUntil, now) + PlaySoundFile("Interface\\Sounds\\Domination.ogg", "Master") + end + aura_env.detectedStinkies[name].muteUntil = now + aura_env.config.alertThrottle +end diff --git a/FreshShit/StinkyDetector/macro b/WeakAuras/Projects/StinkyDetector/macro similarity index 92% rename from FreshShit/StinkyDetector/macro rename to WeakAuras/Projects/StinkyDetector/macro index d04596c..b5ade84 100644 --- a/FreshShit/StinkyDetector/macro +++ b/WeakAuras/Projects/StinkyDetector/macro @@ -1,19 +1,19 @@ -/targetenemy -/tar Redb -/tar Курл -/tar Rien -/tar Unwa -/tar Лови -/tar Koro -/tar Pizd -/tar Joul -/tar Ratt -/tar Ramá -/tar Аста -/tar Bles -/tar Шпек -/tar Pask -/tar Oaks -/tar Пала -/tar Empa +/targetenemy +/tar Redb +/tar Курл +/tar Rien +/tar Unwa +/tar Лови +/tar Koro +/tar Pizd +/tar Joul +/tar Ratt +/tar Ramá +/tar Аста +/tar Bles +/tar Шпек +/tar Pask +/tar Oaks +/tar Пала +/tar Empa /tar Bunk \ No newline at end of file diff --git a/FreshShit/StinkyDetector/trigger.lua b/WeakAuras/Projects/StinkyDetector/trigger.lua similarity index 93% rename from FreshShit/StinkyDetector/trigger.lua rename to WeakAuras/Projects/StinkyDetector/trigger.lua index 4a9a664..cc2f257 100644 --- a/FreshShit/StinkyDetector/trigger.lua +++ b/WeakAuras/Projects/StinkyDetector/trigger.lua @@ -1,3 +1,3 @@ -function(t) - return t[3] +function(t) + return t[3] end \ No newline at end of file diff --git a/WIP/Swelter.lua b/WeakAuras/Projects/Swelter.lua similarity index 96% rename from WIP/Swelter.lua rename to WeakAuras/Projects/Swelter.lua index 1bd9ac3..4b11c92 100644 --- a/WIP/Swelter.lua +++ b/WeakAuras/Projects/Swelter.lua @@ -1,30 +1,30 @@ -COMBAT_LOG_EVENT_UNFILTERED -function(...) - local event = select(3, ...) - aura_env.spell = select(14, ...) - aura_env.target = select(10, ...) - if aura_env.target == UnitName("player") and aura_env.spell == "Swelter" and event == "SPELL_AURA_APPLIED" then - aura_env.startTime = GetTime() - end -end - -DURATION -function() - print(GetTime() - aura_env.startTime) - if UnitBuff("player", "Swelter") then - print("STEP TWO") - return GetTime() - aura_env.startTime, 3, 1 - elseif - GetTime() - aura_env.startTime <= 10 then - print("STEP THREE") - return GetTime() - aura_env.startTime, 10, 1 - end - if GetTime() - aura_env.startTime > 10 then - print("STEP FOUR") - return 1, 1, 1 - end -end - -aura_env.spell = "" -aura_env.target = "" +COMBAT_LOG_EVENT_UNFILTERED +function(...) + local event = select(3, ...) + aura_env.spell = select(14, ...) + aura_env.target = select(10, ...) + if aura_env.target == UnitName("player") and aura_env.spell == "Swelter" and event == "SPELL_AURA_APPLIED" then + aura_env.startTime = GetTime() + end +end + +DURATION +function() + print(GetTime() - aura_env.startTime) + if UnitBuff("player", "Swelter") then + print("STEP TWO") + return GetTime() - aura_env.startTime, 3, 1 + elseif + GetTime() - aura_env.startTime <= 10 then + print("STEP THREE") + return GetTime() - aura_env.startTime, 10, 1 + end + if GetTime() - aura_env.startTime > 10 then + print("STEP FOUR") + return 1, 1, 1 + end +end + +aura_env.spell = "" +aura_env.target = "" aura_env.startTime = 0 \ No newline at end of file diff --git a/WIP/TODO.lua b/WeakAuras/Projects/TODO.lua similarity index 96% rename from WIP/TODO.lua rename to WeakAuras/Projects/TODO.lua index ea52295..8b3e86b 100644 --- a/WIP/TODO.lua +++ b/WeakAuras/Projects/TODO.lua @@ -1,34 +1,34 @@ -"TODO" -make raid loot work somehow; filo register with table.insert remove - -string.byte() *H M M M M M M* - -TSU for rep bars - -"More difficult than expected" -sang for hp<2% or smth OR sort by HP % - -"Done maybe?" -tank alerts like in 7.1.5 but without focus using GroupRoleAssigned with neat list for debuffs :> --Done maybe - -dargul timer for shield - -"Done" -judmgnet of light on focus -macro for cast and focus if no focus -aura for judgment code -use ilterendi - -average melee hit during combat - -last n melee color by average -- using tohex maybe and maybe color function - -Arcway trinket auras for stacks and shield by using aura triggers for spell ids and 2 auras - -prydaz for time and absorb (with absorb % and abs) - -SPAWN TIMERS for herberino by using timer for herbs on cooldown (in seperate array) then insert into waypoint array - -rework last n melee hits with proper filo register - +"TODO" +make raid loot work somehow; filo register with table.insert remove + +string.byte() *H M M M M M M* + +TSU for rep bars + +"More difficult than expected" +sang for hp<2% or smth OR sort by HP % + +"Done maybe?" +tank alerts like in 7.1.5 but without focus using GroupRoleAssigned with neat list for debuffs :> --Done maybe + +dargul timer for shield + +"Done" +judmgnet of light on focus +macro for cast and focus if no focus +aura for judgment code +use ilterendi + +average melee hit during combat + +last n melee color by average -- using tohex maybe and maybe color function + +Arcway trinket auras for stacks and shield by using aura triggers for spell ids and 2 auras + +prydaz for time and absorb (with absorb % and abs) + +SPAWN TIMERS for herberino by using timer for herbs on cooldown (in seperate array) then insert into waypoint array + +rework last n melee hits with proper filo register + make a proper judgment/hotp bar thing with code \ No newline at end of file diff --git a/Complete Projects/Legion/TSU - DAI SPELL.lua b/WeakAuras/Projects/TSU - DAI SPELL.lua similarity index 96% rename from Complete Projects/Legion/TSU - DAI SPELL.lua rename to WeakAuras/Projects/TSU - DAI SPELL.lua index 03f016a..ef67533 100644 --- a/Complete Projects/Legion/TSU - DAI SPELL.lua +++ b/WeakAuras/Projects/TSU - DAI SPELL.lua @@ -1,57 +1,57 @@ - ---COMBAT_LOG_EVENT_UNFILTERED ---TSU -function(allstates, e, ...) - if e and e == "COMBAT_LOG_EVENT_UNFILTERED" then - local se = select(2, ...) - local t = debugprofilestop() - if se and se == "SPELL_DAMAGE" then - local casterGUID = select(4, ...) - local spell = select(13, ...) - local damage = select(15, ...) - local sid = select(12, ...) - if casterGUID and spell and sid and damage and casterGUID == UnitGUID("player") and aura_env.spells[spell] then - if not allstates[t] then - allstates[t] = { - show = true, - changed = true, - icon = select(3, GetSpellInfo(sid)), - progressType = "timed", - duration = debugprofilestop(), - expirationTime = GetTime() + 2.5, - autoHide = true, - damage = damage, - } - print(spell, sid, damage) - return true - end - end - end - end -end - ---INIT -aura_env.spells = { - ["Judgment"] = true, - ["Mark of the Hidden Satyr"] = true, -} -aura_env.shorten = function(val) - local function round(var, n) - if n then - var = math.floor((var * 10 ^ n) + 0.5) / (10 ^ n) - else - var = math.floor(var + 0.5) - end - return var - end - local n = 2 - if val < 1e3 then - return round(val, n) - elseif val > 1e3 and val < 1e6 then - return round(val / 1e3, n) .. "k" - elseif val > 1e6 and val < 1e9 then - return round(val / 1e6, n) .. "M" - elseif val > 1e9 then - return round(val / 1e9, n) .. "G" - end -end + +--COMBAT_LOG_EVENT_UNFILTERED +--TSU +function(allstates, e, ...) + if e and e == "COMBAT_LOG_EVENT_UNFILTERED" then + local se = select(2, ...) + local t = debugprofilestop() + if se and se == "SPELL_DAMAGE" then + local casterGUID = select(4, ...) + local spell = select(13, ...) + local damage = select(15, ...) + local sid = select(12, ...) + if casterGUID and spell and sid and damage and casterGUID == UnitGUID("player") and aura_env.spells[spell] then + if not allstates[t] then + allstates[t] = { + show = true, + changed = true, + icon = select(3, GetSpellInfo(sid)), + progressType = "timed", + duration = debugprofilestop(), + expirationTime = GetTime() + 2.5, + autoHide = true, + damage = damage, + } + print(spell, sid, damage) + return true + end + end + end + end +end + +--INIT +aura_env.spells = { + ["Judgment"] = true, + ["Mark of the Hidden Satyr"] = true, +} +aura_env.shorten = function(val) + local function round(var, n) + if n then + var = math.floor((var * 10 ^ n) + 0.5) / (10 ^ n) + else + var = math.floor(var + 0.5) + end + return var + end + local n = 2 + if val < 1e3 then + return round(val, n) + elseif val > 1e3 and val < 1e6 then + return round(val / 1e3, n) .. "k" + elseif val > 1e6 and val < 1e9 then + return round(val / 1e6, n) .. "M" + elseif val > 1e9 then + return round(val / 1e9, n) .. "G" + end +end diff --git a/Complete Projects/Legion/TSU - EnemyPlayerHealth - CLEV.lua b/WeakAuras/Projects/TSU - EnemyPlayerHealth - CLEV.lua similarity index 96% rename from Complete Projects/Legion/TSU - EnemyPlayerHealth - CLEV.lua rename to WeakAuras/Projects/TSU - EnemyPlayerHealth - CLEV.lua index 813bc11..0094ff5 100644 --- a/Complete Projects/Legion/TSU - EnemyPlayerHealth - CLEV.lua +++ b/WeakAuras/Projects/TSU - EnemyPlayerHealth - CLEV.lua @@ -1,153 +1,153 @@ ---TSU ---COMBAT_LOG_EVENT_UNFILTERED NAME_PLATE_UNIT_ADDED NAME_PLATE_UNIT_REMOVED -function(allstates, e, unit, ...) - if e == "NAME_PLATE_UNIT_ADDED" then - if UnitIsPlayer(unit) then - --if UnitIsEnemy("player", unit) then - local hp = UnitHealth(unit) - local maxHp = UnitHealthMax(unit) - local hppp = aura_env.round(hp / maxHp * 100, 2) - local shortHP = aura_env.shorten(hp) - local shortmaxHP = aura_env.shorten(maxHp) - local name = UnitName(unit) - local class = UnitClass(unit) - allstates[unit] = - { - changed = true, - show = true, - resort = true, - progressType = "static", - value = hp, - total = maxHp, - index = hppp, - name = name, - hppp = hppp, - shortHP = shortHP, - shortmaxHP = shortmaxHP, - class = class, - } - return true - --end - end - elseif e == "NAME_PLATE_UNIT_REMOVED" then - if UnitIsPlayer(unit) then - --if UnitIsEnemy("player", unit) then - if allstates[unit] then - allstates[unit].show = false - allstates[unit].changed = true - return true - end - --end - end - elseif e == "COMBAT_LOG_EVENT_UNFILTERED" then - local se = select(1, ...) - if se == "SPELL_DAMAGE" or se == "SPELL_DAMAGE_PERIODIC" or se == "SPELL_HEAL" or se == "SPELL_HEAL_PERIODIC" then - local clogname = select(4, ...) - clogname = clogname:gsub("%-.+", "") - local unit = "nameplate" - for k,v in pairs(allstates) do - if allstates[k].name == clogname then - for i = 1, 40 do - local nplname = UnitName("nameplate" .. i) - if nplname == clogname then - unit = unit .. i - break - end - end - break - end - end - if UnitIsPlayer(unit) then - --if UnitIsEnemy("player", unit) then - if allstates[unit] then - local hp = UnitHealth(unit) - local maxHp = UnitHealthMax(unit) - local shortHP = aura_env.shorten(hp) - local shortmaxHP = aura_env.shorten(maxHp) - allstates[unit].value = hp - allstates[unit].total = maxHP - allstates[unit].shortHP = shortHP - allstates[unit].shortmaxHP = shortmaxHP - allstates[unit].show = true - allstates[unit].changed = true - return true - end - --end - end - end - end - end - ---ANIMATION -function() - if aura_env.statee then - return aura_env.classColor(aura_env.statee.class) - end -end - ---INIT -aura_env.round = function(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var -end -aura_env.shorten = function(val) - local function round(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var - end - local n = 2 - if val < 1e3 then - return round(val, n) - elseif val > 1e3 and val < 1e6 then - return round(val / 1e3, n) .. "k" - elseif val > 1e6 and val < 1e9 then - return round(val / 1e6, n) .. "M" - elseif val > 1e9 then - return round(val / 1e9, n) .. "G" - end -end -aura_env.classColor = function(class) - if class == "Death Knight" then return 0.77, 0.12, 0.23, 1 elseif - class == "Demon Hunter" then return 0.64, 0.19, 0.79, 1 elseif - class == "Druid" then return 1, 0.49, 0.04, 1 elseif - class == "Hunter" then return 0.67, 0.83, 0.45, 1 elseif - class == "Mage" then return 0.25, 0.78, 0.92, 1 elseif - class == "Monk" then return 0, 1, 0.59, 1 elseif - class == "Paladin" then return 0.96, 0.55, 0.73, 1 elseif - class == "Priest" then return 1, 1, 1, 1 elseif - class == "Rogue" then return 1, 0.96, 0.41, 1 elseif - class == "Shaman" then return 0, 0.44, 0.87, 1 elseif - class == "Warlock" then return 0.53, 0.53, 0.93, 1 elseif - class == "Warrior" then return 0.78, 0.61, 0.43, 1 else - return 1, 1, 1, 1 end -end -aura_env.round = function(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var -end -aura_env.grad = function(c) - --c expected as [0, 1] - if c > 0.5 then - c = 1 - (2 * (c - 0.5)) - return c, 1, 0, 1 - else - c = c * 2 - return 1, c, 0, 1 - end -end -aura_env.range = function(val, min, max, max2) - val = 1 - (((max - val) / (max - min)) * max2) - return val +--TSU +--COMBAT_LOG_EVENT_UNFILTERED NAME_PLATE_UNIT_ADDED NAME_PLATE_UNIT_REMOVED +function(allstates, e, unit, ...) + if e == "NAME_PLATE_UNIT_ADDED" then + if UnitIsPlayer(unit) then + --if UnitIsEnemy("player", unit) then + local hp = UnitHealth(unit) + local maxHp = UnitHealthMax(unit) + local hppp = aura_env.round(hp / maxHp * 100, 2) + local shortHP = aura_env.shorten(hp) + local shortmaxHP = aura_env.shorten(maxHp) + local name = UnitName(unit) + local class = UnitClass(unit) + allstates[unit] = + { + changed = true, + show = true, + resort = true, + progressType = "static", + value = hp, + total = maxHp, + index = hppp, + name = name, + hppp = hppp, + shortHP = shortHP, + shortmaxHP = shortmaxHP, + class = class, + } + return true + --end + end + elseif e == "NAME_PLATE_UNIT_REMOVED" then + if UnitIsPlayer(unit) then + --if UnitIsEnemy("player", unit) then + if allstates[unit] then + allstates[unit].show = false + allstates[unit].changed = true + return true + end + --end + end + elseif e == "COMBAT_LOG_EVENT_UNFILTERED" then + local se = select(1, ...) + if se == "SPELL_DAMAGE" or se == "SPELL_DAMAGE_PERIODIC" or se == "SPELL_HEAL" or se == "SPELL_HEAL_PERIODIC" then + local clogname = select(4, ...) + clogname = clogname:gsub("%-.+", "") + local unit = "nameplate" + for k,v in pairs(allstates) do + if allstates[k].name == clogname then + for i = 1, 40 do + local nplname = UnitName("nameplate" .. i) + if nplname == clogname then + unit = unit .. i + break + end + end + break + end + end + if UnitIsPlayer(unit) then + --if UnitIsEnemy("player", unit) then + if allstates[unit] then + local hp = UnitHealth(unit) + local maxHp = UnitHealthMax(unit) + local shortHP = aura_env.shorten(hp) + local shortmaxHP = aura_env.shorten(maxHp) + allstates[unit].value = hp + allstates[unit].total = maxHP + allstates[unit].shortHP = shortHP + allstates[unit].shortmaxHP = shortmaxHP + allstates[unit].show = true + allstates[unit].changed = true + return true + end + --end + end + end + end + end + +--ANIMATION +function() + if aura_env.statee then + return aura_env.classColor(aura_env.statee.class) + end +end + +--INIT +aura_env.round = function(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var +end +aura_env.shorten = function(val) + local function round(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var + end + local n = 2 + if val < 1e3 then + return round(val, n) + elseif val > 1e3 and val < 1e6 then + return round(val / 1e3, n) .. "k" + elseif val > 1e6 and val < 1e9 then + return round(val / 1e6, n) .. "M" + elseif val > 1e9 then + return round(val / 1e9, n) .. "G" + end +end +aura_env.classColor = function(class) + if class == "Death Knight" then return 0.77, 0.12, 0.23, 1 elseif + class == "Demon Hunter" then return 0.64, 0.19, 0.79, 1 elseif + class == "Druid" then return 1, 0.49, 0.04, 1 elseif + class == "Hunter" then return 0.67, 0.83, 0.45, 1 elseif + class == "Mage" then return 0.25, 0.78, 0.92, 1 elseif + class == "Monk" then return 0, 1, 0.59, 1 elseif + class == "Paladin" then return 0.96, 0.55, 0.73, 1 elseif + class == "Priest" then return 1, 1, 1, 1 elseif + class == "Rogue" then return 1, 0.96, 0.41, 1 elseif + class == "Shaman" then return 0, 0.44, 0.87, 1 elseif + class == "Warlock" then return 0.53, 0.53, 0.93, 1 elseif + class == "Warrior" then return 0.78, 0.61, 0.43, 1 else + return 1, 1, 1, 1 end +end +aura_env.round = function(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var +end +aura_env.grad = function(c) + --c expected as [0, 1] + if c > 0.5 then + c = 1 - (2 * (c - 0.5)) + return c, 1, 0, 1 + else + c = c * 2 + return 1, c, 0, 1 + end +end +aura_env.range = function(val, min, max, max2) + val = 1 - (((max - val) / (max - min)) * max2) + return val end \ No newline at end of file diff --git a/Complete Projects/Legion/TSU - EnemyPlayerHealth.lua b/WeakAuras/Projects/TSU - EnemyPlayerHealth.lua similarity index 96% rename from Complete Projects/Legion/TSU - EnemyPlayerHealth.lua rename to WeakAuras/Projects/TSU - EnemyPlayerHealth.lua index 5f544fb..6a3cc25 100644 --- a/Complete Projects/Legion/TSU - EnemyPlayerHealth.lua +++ b/WeakAuras/Projects/TSU - EnemyPlayerHealth.lua @@ -1,143 +1,143 @@ ---TSU ---UNIT_HEALTH NAME_PLATE_UNIT_ADDED NAME_PLATE_UNIT_REMOVED -function(allstates, e, unit) - if e == "NAME_PLATE_UNIT_ADDED" then - if UnitExists(unit) then - if UnitIsPlayer(unit) then - if UnitIsEnemy("player", unit) then - local hp = UnitHealth(unit) - local maxHp = UnitHealthMax(unit) - local hppp = aura_env.round(hp / maxHp * 100, 2) - local shortHP = aura_env.shorten(hp) - local shortmaxHP = aura_env.shorten(maxHp) - local name = UnitName(unit) - local class = select(3, UnitClass(unit)) - local r, g, b, a = aura_env.classColor(class) - allstates[unit] = - { - changed = true, - show = true, - resort = true, - progressType = "static", - value = hp, - total = maxHp, - index = hppp, - name = name, - hppp = hppp, - shortHP = shortHP, - shortmaxHP = shortmaxHP, - r = r, g = g, b = b, a = a, - } - return true - end - end - end - elseif e == "NAME_PLATE_UNIT_REMOVED" then - if UnitExists(unit) then - if UnitIsPlayer(unit) then - if UnitIsEnemy("player", unit) then - if allstates[unit] then - allstates[unit].show = false - allstates[unit].changed = true - return true - end - end - end - end - elseif e == "UNIT_HEALTH" then - if UnitExists(unit) then - if UnitIsPlayer(unit) then - if UnitIsEnemy("player", unit) then - if allstates[unit] then - local hp = UnitHealth(unit) - local maxHp = UnitHealthMax(unit) - local shortHP = aura_env.shorten(hp) - local shortmaxHP = aura_env.shorten(maxHp) - print(hp, maxHp) - allstates[unit].value = hp - allstates[unit].total = maxHP - allstates[unit].shortHP = shortHP - allstates[unit].shortmaxHP = shortmaxHP - allstates[unit].show = true - allstates[unit].changed = true - return true - end - end - end - end - end -end - ---ANIMATION -function() - if aura_env.statee then - return aura_env.statee.r, aura_env.statee.g, aura_env.statee.b, aura_env.statee.a - end -end - ---INIT -aura_env.round = function(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var -end -aura_env.shorten = function(val) - local function round(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var - end - local n = 2 - if val < 1e3 then - return round(val, n) - elseif val > 1e3 and val < 1e6 then - return round(val / 1e3, n) .. "k" - elseif val > 1e6 and val < 1e9 then - return round(val / 1e6, n) .. "M" - elseif val > 1e9 then - return round(val / 1e9, n) .. "G" - end -end -aura_env.classColor = function(class) - if class == "1" then return 0.78, 0.61, 0.43, 1 elseif - class == "2" then return 0.96, 0.55, 0.73, 1 elseif - class == "3" then return 0.67, 0.83, 0.45, 1 elseif - class == "4" then return 1, 0.96, 0.41, 1 elseif - class == "5" then return 1, 1, 1, 1 elseif - class == "6" then return 0.77, 0.12, 0.23, 1 elseif - class == "7" then return 0, 0.44, 0.87, 1 elseif - class == "8" then return 0.25, 0.78, 0.92, 1 elseif - class == "9" then return 0.53, 0.53, 0.93, 1 elseif - class == "10" then return 0, 1, 0.59, 1 elseif - class == "11" then return 1, 0.49, 0.04, 1 elseif - class == "12" then return 0.64, 0.19, 0.79, 1 else - return 1, 1, 1, 1 end -end -aura_env.round = function(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var -end -aura_env.grad = function(c) - --c expected as [0, 1] - if c > 0.5 then - c = 1 - (2 * (c - 0.5)) - return c, 1, 0, 1 - else - c = c * 2 - return 1, c, 0, 1 - end -end -aura_env.range = function(val, min, max, max2) - val = 1 - (((max - val) / (max - min)) * max2) - return val +--TSU +--UNIT_HEALTH NAME_PLATE_UNIT_ADDED NAME_PLATE_UNIT_REMOVED +function(allstates, e, unit) + if e == "NAME_PLATE_UNIT_ADDED" then + if UnitExists(unit) then + if UnitIsPlayer(unit) then + if UnitIsEnemy("player", unit) then + local hp = UnitHealth(unit) + local maxHp = UnitHealthMax(unit) + local hppp = aura_env.round(hp / maxHp * 100, 2) + local shortHP = aura_env.shorten(hp) + local shortmaxHP = aura_env.shorten(maxHp) + local name = UnitName(unit) + local class = select(3, UnitClass(unit)) + local r, g, b, a = aura_env.classColor(class) + allstates[unit] = + { + changed = true, + show = true, + resort = true, + progressType = "static", + value = hp, + total = maxHp, + index = hppp, + name = name, + hppp = hppp, + shortHP = shortHP, + shortmaxHP = shortmaxHP, + r = r, g = g, b = b, a = a, + } + return true + end + end + end + elseif e == "NAME_PLATE_UNIT_REMOVED" then + if UnitExists(unit) then + if UnitIsPlayer(unit) then + if UnitIsEnemy("player", unit) then + if allstates[unit] then + allstates[unit].show = false + allstates[unit].changed = true + return true + end + end + end + end + elseif e == "UNIT_HEALTH" then + if UnitExists(unit) then + if UnitIsPlayer(unit) then + if UnitIsEnemy("player", unit) then + if allstates[unit] then + local hp = UnitHealth(unit) + local maxHp = UnitHealthMax(unit) + local shortHP = aura_env.shorten(hp) + local shortmaxHP = aura_env.shorten(maxHp) + print(hp, maxHp) + allstates[unit].value = hp + allstates[unit].total = maxHP + allstates[unit].shortHP = shortHP + allstates[unit].shortmaxHP = shortmaxHP + allstates[unit].show = true + allstates[unit].changed = true + return true + end + end + end + end + end +end + +--ANIMATION +function() + if aura_env.statee then + return aura_env.statee.r, aura_env.statee.g, aura_env.statee.b, aura_env.statee.a + end +end + +--INIT +aura_env.round = function(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var +end +aura_env.shorten = function(val) + local function round(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var + end + local n = 2 + if val < 1e3 then + return round(val, n) + elseif val > 1e3 and val < 1e6 then + return round(val / 1e3, n) .. "k" + elseif val > 1e6 and val < 1e9 then + return round(val / 1e6, n) .. "M" + elseif val > 1e9 then + return round(val / 1e9, n) .. "G" + end +end +aura_env.classColor = function(class) + if class == "1" then return 0.78, 0.61, 0.43, 1 elseif + class == "2" then return 0.96, 0.55, 0.73, 1 elseif + class == "3" then return 0.67, 0.83, 0.45, 1 elseif + class == "4" then return 1, 0.96, 0.41, 1 elseif + class == "5" then return 1, 1, 1, 1 elseif + class == "6" then return 0.77, 0.12, 0.23, 1 elseif + class == "7" then return 0, 0.44, 0.87, 1 elseif + class == "8" then return 0.25, 0.78, 0.92, 1 elseif + class == "9" then return 0.53, 0.53, 0.93, 1 elseif + class == "10" then return 0, 1, 0.59, 1 elseif + class == "11" then return 1, 0.49, 0.04, 1 elseif + class == "12" then return 0.64, 0.19, 0.79, 1 else + return 1, 1, 1, 1 end +end +aura_env.round = function(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var +end +aura_env.grad = function(c) + --c expected as [0, 1] + if c > 0.5 then + c = 1 - (2 * (c - 0.5)) + return c, 1, 0, 1 + else + c = c * 2 + return 1, c, 0, 1 + end +end +aura_env.range = function(val, min, max, max2) + val = 1 - (((max - val) / (max - min)) * max2) + return val end \ No newline at end of file diff --git a/Complete Projects/Legion/TSU - Explosives.lua b/WeakAuras/Projects/TSU - Explosives.lua similarity index 95% rename from Complete Projects/Legion/TSU - Explosives.lua rename to WeakAuras/Projects/TSU - Explosives.lua index 7493e8b..0281e44 100644 --- a/Complete Projects/Legion/TSU - Explosives.lua +++ b/WeakAuras/Projects/TSU - Explosives.lua @@ -1,87 +1,87 @@ ---TSU ---EVERY FRAME -function(allstates) - for _,v in pairs(allstates) do - v.show = false - v.changed = true - end - for i = 1, 40 do - unit = "nameplate" .. i - if UnitExists(unit) then - local name = UnitName(unit) - if name == "Fel Explosives" then - if UnitCastingInfo(unit) then - local _,_,_,_,startTime,endTime = UnitCastingInfo(unit) - local remainingTime = math.floor(endTime - (GetTime() * 1000)) - local castTime = endTime - startTime - --local hps = aura_env.shorten(UnitHealth(unit)) - --local maxhps = aura_env.shorten(UnitHealthMax(unit)) - local hp = UnitHealth(unit) - local maxhp = UnitHealthMax(unit) - local hpp = math.floor((hp / maxhp) * 100) - allstates[unit] = - { - changed = true, - show = true, - resort = true, - progressType = "static", - value = remainingTime, - total = castTime, - index = remainingTime, - one = "", - two = "", - hp = hp, - maxhp = maxhp, - hpp = hpp, - } - end - end - end - end - return true -end - ---ANIMATION -function() - if aura_env.statee then - local c = aura_env.range(aura_env.statee.hp, 0, aura_env.statee.maxhp, 1) - print(aura_env.grad(c)) - return aura_env.grad(c) - end -end - ---INIT -aura_env.shorten = function(val) - local function round(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var - end - local n = 2 - if val < 1e3 then - return round(val, n) - elseif val > 1e3 and val < 1e6 then - return round(val / 1e3, n) .. "k" - elseif val > 1e6 and val < 1e9 then - return round(val / 1e6, n) .. "M" - elseif val > 1e9 then - return round(val / 1e9, n) .. "G" - end -end -aura_env.grad = function(c) - --c expected as [0, 1] - if c > 0.5 then - c = 1 - (2 * (c - 0.5)) - return c, 1, 0, 1 - else - c = c * 2 - return 1, c, 0, 1 - end -end -aura_env.range = function(val, min, max, max2) - val = 1 - (((max - val) / (max - min)) * max2) - return val +--TSU +--EVERY FRAME +function(allstates) + for _,v in pairs(allstates) do + v.show = false + v.changed = true + end + for i = 1, 40 do + unit = "nameplate" .. i + if UnitExists(unit) then + local name = UnitName(unit) + if name == "Fel Explosives" then + if UnitCastingInfo(unit) then + local _,_,_,_,startTime,endTime = UnitCastingInfo(unit) + local remainingTime = math.floor(endTime - (GetTime() * 1000)) + local castTime = endTime - startTime + --local hps = aura_env.shorten(UnitHealth(unit)) + --local maxhps = aura_env.shorten(UnitHealthMax(unit)) + local hp = UnitHealth(unit) + local maxhp = UnitHealthMax(unit) + local hpp = math.floor((hp / maxhp) * 100) + allstates[unit] = + { + changed = true, + show = true, + resort = true, + progressType = "static", + value = remainingTime, + total = castTime, + index = remainingTime, + one = "", + two = "", + hp = hp, + maxhp = maxhp, + hpp = hpp, + } + end + end + end + end + return true +end + +--ANIMATION +function() + if aura_env.statee then + local c = aura_env.range(aura_env.statee.hp, 0, aura_env.statee.maxhp, 1) + print(aura_env.grad(c)) + return aura_env.grad(c) + end +end + +--INIT +aura_env.shorten = function(val) + local function round(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var + end + local n = 2 + if val < 1e3 then + return round(val, n) + elseif val > 1e3 and val < 1e6 then + return round(val / 1e3, n) .. "k" + elseif val > 1e6 and val < 1e9 then + return round(val / 1e6, n) .. "M" + elseif val > 1e9 then + return round(val / 1e9, n) .. "G" + end +end +aura_env.grad = function(c) + --c expected as [0, 1] + if c > 0.5 then + c = 1 - (2 * (c - 0.5)) + return c, 1, 0, 1 + else + c = c * 2 + return 1, c, 0, 1 + end +end +aura_env.range = function(val, min, max, max2) + val = 1 - (((max - val) / (max - min)) * max2) + return val end \ No newline at end of file diff --git a/Complete Projects/Legion/TSU - GroupConcordance.lua b/WeakAuras/Projects/TSU - GroupConcordance.lua similarity index 96% rename from Complete Projects/Legion/TSU - GroupConcordance.lua rename to WeakAuras/Projects/TSU - GroupConcordance.lua index 5fa4b3f..a32149e 100644 --- a/Complete Projects/Legion/TSU - GroupConcordance.lua +++ b/WeakAuras/Projects/TSU - GroupConcordance.lua @@ -1,110 +1,110 @@ ---TSU ---EVERY FRAME -function(allstates) - for _,v in pairs(allstates) do - v.show = false - v.changed = true - end - - for i = 1, GetNumGroupMembers() do - local unit = "raid" .. i - local class = UnitClass(unit) - local buff = UnitBuff(unit, "Concordance of the Legionfall") - if buff then - local exptime = select(7, UnitBuff(unit, "Concordance of the Legionfall")) - local amount = select(17, UnitBuff(unit, "Concordance of the Legionfall")) - local dur = 10 - local cur = exptime - GetTime() - local rem = dur - cur - local name = UnitName(unit) - allstates[unit] = - { - changed = true, - show = true, - resort = true, - progressType = "timed", - value = rem, - total = dur, - index = i, - class = class, - val = amount, - name = name, - } - end - end - return true -end - ---ANIMATION -function() - if aura_env.statee then - return aura_env.classColor(aura_env.statee.class) - end -end - ---INIT -aura_env.round = function(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var -end -aura_env.shorten = function(val) - local function round(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var - end - local n = 2 - if val < 1e3 then - return round(val, n) - elseif val > 1e3 and val < 1e6 then - return round(val / 1e3, n) .. "k" - elseif val > 1e6 and val < 1e9 then - return round(val / 1e6, n) .. "M" - elseif val > 1e9 then - return round(val / 1e9, n) .. "G" - end -end -aura_env.classColor = function(class) - if class == "Death Knight" then return 0.77, 0.12, 0.23, 1 elseif - class == "Demon Hunter" then return 0.64, 0.19, 0.79, 1 elseif - class == "Druid" then return 1, 0.49, 0.04, 1 elseif - class == "Hunter" then return 0.67, 0.83, 0.45, 1 elseif - class == "Mage" then return 0.25, 0.78, 0.92, 1 elseif - class == "Monk" then return 0, 1, 0.59, 1 elseif - class == "Paladin" then return 0.96, 0.55, 0.73, 1 elseif - class == "Priest" then return 1, 1, 1, 1 elseif - class == "Rogue" then return 1, 0.96, 0.41, 1 elseif - class == "Shaman" then return 0, 0.44, 0.87, 1 elseif - class == "Warlock" then return 0.53, 0.53, 0.93, 1 elseif - class == "Warrior" then return 0.78, 0.61, 0.43, 1 else - return 1, 1, 1, 1 end -end -aura_env.round = function(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var -end -aura_env.grad = function(c) - --c expected as [0, 1] - if c > 0.5 then - c = 1 - (2 * (c - 0.5)) - return c, 1, 0, 1 - else - c = c * 2 - return 1, c, 0, 1 - end -end -aura_env.range = function(val, min, max, max2) - val = 1 - (((max - val) / (max - min)) * max2) - return val +--TSU +--EVERY FRAME +function(allstates) + for _,v in pairs(allstates) do + v.show = false + v.changed = true + end + + for i = 1, GetNumGroupMembers() do + local unit = "raid" .. i + local class = UnitClass(unit) + local buff = UnitBuff(unit, "Concordance of the Legionfall") + if buff then + local exptime = select(7, UnitBuff(unit, "Concordance of the Legionfall")) + local amount = select(17, UnitBuff(unit, "Concordance of the Legionfall")) + local dur = 10 + local cur = exptime - GetTime() + local rem = dur - cur + local name = UnitName(unit) + allstates[unit] = + { + changed = true, + show = true, + resort = true, + progressType = "timed", + value = rem, + total = dur, + index = i, + class = class, + val = amount, + name = name, + } + end + end + return true +end + +--ANIMATION +function() + if aura_env.statee then + return aura_env.classColor(aura_env.statee.class) + end +end + +--INIT +aura_env.round = function(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var +end +aura_env.shorten = function(val) + local function round(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var + end + local n = 2 + if val < 1e3 then + return round(val, n) + elseif val > 1e3 and val < 1e6 then + return round(val / 1e3, n) .. "k" + elseif val > 1e6 and val < 1e9 then + return round(val / 1e6, n) .. "M" + elseif val > 1e9 then + return round(val / 1e9, n) .. "G" + end +end +aura_env.classColor = function(class) + if class == "Death Knight" then return 0.77, 0.12, 0.23, 1 elseif + class == "Demon Hunter" then return 0.64, 0.19, 0.79, 1 elseif + class == "Druid" then return 1, 0.49, 0.04, 1 elseif + class == "Hunter" then return 0.67, 0.83, 0.45, 1 elseif + class == "Mage" then return 0.25, 0.78, 0.92, 1 elseif + class == "Monk" then return 0, 1, 0.59, 1 elseif + class == "Paladin" then return 0.96, 0.55, 0.73, 1 elseif + class == "Priest" then return 1, 1, 1, 1 elseif + class == "Rogue" then return 1, 0.96, 0.41, 1 elseif + class == "Shaman" then return 0, 0.44, 0.87, 1 elseif + class == "Warlock" then return 0.53, 0.53, 0.93, 1 elseif + class == "Warrior" then return 0.78, 0.61, 0.43, 1 else + return 1, 1, 1, 1 end +end +aura_env.round = function(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var +end +aura_env.grad = function(c) + --c expected as [0, 1] + if c > 0.5 then + c = 1 - (2 * (c - 0.5)) + return c, 1, 0, 1 + else + c = c * 2 + return 1, c, 0, 1 + end +end +aura_env.range = function(val, min, max, max2) + val = 1 - (((max - val) / (max - min)) * max2) + return val end \ No newline at end of file diff --git a/Complete Projects/Legion/TSU - HealerMana.lua b/WeakAuras/Projects/TSU - HealerMana.lua similarity index 96% rename from Complete Projects/Legion/TSU - HealerMana.lua rename to WeakAuras/Projects/TSU - HealerMana.lua index 38e37e4..728fa8d 100644 --- a/Complete Projects/Legion/TSU - HealerMana.lua +++ b/WeakAuras/Projects/TSU - HealerMana.lua @@ -1,100 +1,100 @@ ---TSU ---UNIT_POWER -function(allstates) - for _,v in pairs(allstates) do - v.show = false - v.changed = true - end - - for k,v in pairs(aura_env.healerList) do - local unit = k - local name = v - local mana = UnitPower(unit) - local maxMana = UnitPowerMax(unit) - local shortMana = aura_env.shorten(mana, 0) - local class = UnitClass(unit) - allstates[unit] = - { - changed = true, - show = true, - resort = true, - progressType = "static", - value = mana, - total = maxMana, - index = mana, - name = name, - shortMana = shortMana, - class = class, - } - end - return true -end - ---ANIMATION -function() - if aura_env.statee then - return aura_env.classColor(aura_env.statee.class) - end -end - ---PLAYER_REGEN_DISABLED GROUP_JOINED GROUP_ROSTER_UPDATE -function() - aura_env.healerList = {} - if IsInRaid() then - for i = 1, GetNumGroupMembers() do - local unit = "raid" .. i - --print(UnitGroupRolesAssigned(unit)) - if UnitGroupRolesAssigned(unit) == "HEALER" then - aura_env.healerList[unit] = UnitName(unit) - print("Found " .. UnitGroupRolesAssigned(unit) .. " " .. UnitName(unit) .. " on ID " .. i) - end - end - else - for i = 1, GetNumGroupMembers() do - local unit = "party" .. i - --print(UnitGroupRolesAssigned(unit)) - if UnitGroupRolesAssigned(unit) == "HEALER" then - aura_env.healerList[unit] = UnitName(unit) - print("Found " .. UnitGroupRolesAssigned(unit) .. " " .. UnitName(unit) .. " on ID " .. i) - end - end - end -end - ---INIT -aura_env.shorten = function(val) - local function round(var, n) - if (n) then - var = math.floor((var * 10^n) + 0.5) / (10^n) - else - var = math.floor(var+0.5) - end - return var - end - local n = 2 - if val < 1e3 then - return round(val, n) - elseif val > 1e3 and val < 1e6 then - return round(val / 1e3, n) .. "k" - elseif val > 1e6 and val < 1e9 then - return round(val / 1e6, n) .. "M" - elseif val > 1e9 then - return round(val / 1e9, n) .. "G" - end -end -aura_env.healerList = {} -aura_env.classColor = function(class) - if class == "Death Knight" then return 0.77, 0.12, 0.23, 1 elseif - class == "Demon Hunter" then return 0.64, 0.19, 0.79, 1 elseif - class == "Druid" then return 1, 0.49, 0.04, 1 elseif - class == "Hunter" then return 0.67, 0.83, 0.45, 1 elseif - class == "Mage" then return 0.25, 0.78, 0.92, 1 elseif - class == "Monk" then return 0, 1, 0.59, 1 elseif - class == "Paladin" then return 0.96, 0.55, 0.73, 1 elseif - class == "Priest" then return 1, 1, 1, 1 elseif - class == "Rogue" then return 1, 0.96, 0.41, 1 elseif - class == "Shaman" then return 0, 0.44, 0.87, 1 elseif - class == "Warlock" then return 0.53, 0.53, 0.93, 1 elseif - class == "Warrior" then return 0.78, 0.61, 0.43, 1 else - return 1, 1, 1, 1 end +--TSU +--UNIT_POWER +function(allstates) + for _,v in pairs(allstates) do + v.show = false + v.changed = true + end + + for k,v in pairs(aura_env.healerList) do + local unit = k + local name = v + local mana = UnitPower(unit) + local maxMana = UnitPowerMax(unit) + local shortMana = aura_env.shorten(mana, 0) + local class = UnitClass(unit) + allstates[unit] = + { + changed = true, + show = true, + resort = true, + progressType = "static", + value = mana, + total = maxMana, + index = mana, + name = name, + shortMana = shortMana, + class = class, + } + end + return true +end + +--ANIMATION +function() + if aura_env.statee then + return aura_env.classColor(aura_env.statee.class) + end +end + +--PLAYER_REGEN_DISABLED GROUP_JOINED GROUP_ROSTER_UPDATE +function() + aura_env.healerList = {} + if IsInRaid() then + for i = 1, GetNumGroupMembers() do + local unit = "raid" .. i + --print(UnitGroupRolesAssigned(unit)) + if UnitGroupRolesAssigned(unit) == "HEALER" then + aura_env.healerList[unit] = UnitName(unit) + print("Found " .. UnitGroupRolesAssigned(unit) .. " " .. UnitName(unit) .. " on ID " .. i) + end + end + else + for i = 1, GetNumGroupMembers() do + local unit = "party" .. i + --print(UnitGroupRolesAssigned(unit)) + if UnitGroupRolesAssigned(unit) == "HEALER" then + aura_env.healerList[unit] = UnitName(unit) + print("Found " .. UnitGroupRolesAssigned(unit) .. " " .. UnitName(unit) .. " on ID " .. i) + end + end + end +end + +--INIT +aura_env.shorten = function(val) + local function round(var, n) + if (n) then + var = math.floor((var * 10^n) + 0.5) / (10^n) + else + var = math.floor(var+0.5) + end + return var + end + local n = 2 + if val < 1e3 then + return round(val, n) + elseif val > 1e3 and val < 1e6 then + return round(val / 1e3, n) .. "k" + elseif val > 1e6 and val < 1e9 then + return round(val / 1e6, n) .. "M" + elseif val > 1e9 then + return round(val / 1e9, n) .. "G" + end +end +aura_env.healerList = {} +aura_env.classColor = function(class) + if class == "Death Knight" then return 0.77, 0.12, 0.23, 1 elseif + class == "Demon Hunter" then return 0.64, 0.19, 0.79, 1 elseif + class == "Druid" then return 1, 0.49, 0.04, 1 elseif + class == "Hunter" then return 0.67, 0.83, 0.45, 1 elseif + class == "Mage" then return 0.25, 0.78, 0.92, 1 elseif + class == "Monk" then return 0, 1, 0.59, 1 elseif + class == "Paladin" then return 0.96, 0.55, 0.73, 1 elseif + class == "Priest" then return 1, 1, 1, 1 elseif + class == "Rogue" then return 1, 0.96, 0.41, 1 elseif + class == "Shaman" then return 0, 0.44, 0.87, 1 elseif + class == "Warlock" then return 0.53, 0.53, 0.93, 1 elseif + class == "Warrior" then return 0.78, 0.61, 0.43, 1 else + return 1, 1, 1, 1 end end \ No newline at end of file diff --git a/Complete Projects/Legion/TSU - Item Monitor.lua b/WeakAuras/Projects/TSU - Item Monitor.lua similarity index 97% rename from Complete Projects/Legion/TSU - Item Monitor.lua rename to WeakAuras/Projects/TSU - Item Monitor.lua index d093553..8e1d6a3 100644 --- a/Complete Projects/Legion/TSU - Item Monitor.lua +++ b/WeakAuras/Projects/TSU - Item Monitor.lua @@ -1,38 +1,38 @@ ---REMOVE_ITEM_SHOW ADD_ITEM_SHOW -function(allstates, e, what, howmuch) - if e == "ADD_ITEM_SHOW" then - if what then - --Get info about item - local icon = 0 - local name = GetItemInfo(what) - --Save icon to databases - if not WeakAurasSaved.CustomTrash.IconDatabase[name] then icon = select(10, GetItemInfo(name)) else icon = WeakAurasSaved.CustomTrash.IconDatabase[name] end - if name and icon and not WeakAurasSaved.CustomTrash.IconDatabase[name] then WeakAurasSaved.CustomTrash.IconDatabase[name] = icon; print("Adding|cff78cb00 ", name, " |rto the icon database") end - --Get ID for tooltip - local indexid = #allstates + 1 - local ID - if WeakAurasSaved.CustomTrash.IDDatabase[name] then ID = WeakAurasSaved.CustomTrash.IDDatabase[name] end - allstates[indexid] = - { - show = true, - changed = true, - index = GetTime(), - resort = true, - icon = icon, - name = what, - amount = howmuch, - } - if ID then - allstates[indexid].itemId = ID - end - C_Timer.After(5, function() WeakAuras.ScanEvents("REMOVE_ITEM_SHOW", indexid) end) - return true - end - elseif e == "REMOVE_ITEM_SHOW" then - if allstates[what] then - allstates[what].show = false - allstates[what].changed = true - return true - end - end +--REMOVE_ITEM_SHOW ADD_ITEM_SHOW +function(allstates, e, what, howmuch) + if e == "ADD_ITEM_SHOW" then + if what then + --Get info about item + local icon = 0 + local name = GetItemInfo(what) + --Save icon to databases + if not WeakAurasSaved.CustomTrash.IconDatabase[name] then icon = select(10, GetItemInfo(name)) else icon = WeakAurasSaved.CustomTrash.IconDatabase[name] end + if name and icon and not WeakAurasSaved.CustomTrash.IconDatabase[name] then WeakAurasSaved.CustomTrash.IconDatabase[name] = icon; print("Adding|cff78cb00 ", name, " |rto the icon database") end + --Get ID for tooltip + local indexid = #allstates + 1 + local ID + if WeakAurasSaved.CustomTrash.IDDatabase[name] then ID = WeakAurasSaved.CustomTrash.IDDatabase[name] end + allstates[indexid] = + { + show = true, + changed = true, + index = GetTime(), + resort = true, + icon = icon, + name = what, + amount = howmuch, + } + if ID then + allstates[indexid].itemId = ID + end + C_Timer.After(5, function() WeakAuras.ScanEvents("REMOVE_ITEM_SHOW", indexid) end) + return true + end + elseif e == "REMOVE_ITEM_SHOW" then + if allstates[what] then + allstates[what].show = false + allstates[what].changed = true + return true + end + end end \ No newline at end of file diff --git a/Complete Projects/Legion/TSU - Jana do a spell.lua b/WeakAuras/Projects/TSU - Jana do a spell.lua similarity index 96% rename from Complete Projects/Legion/TSU - Jana do a spell.lua rename to WeakAuras/Projects/TSU - Jana do a spell.lua index 82bb615..e773b79 100644 --- a/Complete Projects/Legion/TSU - Jana do a spell.lua +++ b/WeakAuras/Projects/TSU - Jana do a spell.lua @@ -1,65 +1,65 @@ ---TSU ---COMBAT_LOG_EVENT_UNFILTERED CHECK_ALLSTATES -function(allstates, e, ...) - if not aura_env.ticker then - aura_env.ticker = C_Timer.NewTicker(0.05, function() - WeakAuras.ScanEvents("CHECK_ALLSTATES") - end) - end - if e == "COMBAT_LOG_EVENT_UNFILTERED" then - local t = select(1, ...) - local se = select(2, ...) - if se == "SPELL_CAST_SUCCESS" then - local casterguid = select(4, ...) - local spell = select(13, ...) - if casterguid == UnitGUID("player") and aura_env.spells[spell] then - local icon = select(3, GetSpellInfo(spell)) - allstates[t] = { - show = true, - changed = true, - icon = icon, - resort = true, - index = GetTime(), - time = GetTime(), - } - return true - end - end - elseif e == "CHECK_ALLSTATES" then - for k, v in pairs(allstates) do - if GetTime() - v.time >= aura_env.timer then - allstates[k] = { - show = false, - changed = true, - } - end - end - return true - end -end - ---PLAYER_SPELLBOOK_UPDATE -function() - local index = 1 - while GetSpellBookItemName(index, "spell") do - local name = GetSpellInfo(index, "spell") - local id = select(7, GetSpellInfo(index, "spell")) - if IsPlayerSpell(id) == true then - aura_env.spells[name] = id - end - index = index + 1 - end -end - ---INIT -aura_env.spells = {} -aura_env.timer = 3 -local index = 1 -while GetSpellBookItemName(index, "spell") do - local name = GetSpellInfo(index, "spell") - local id = select(7, GetSpellInfo(index, "spell")) - if IsPlayerSpell(id) == true then - aura_env.spells[name] = id - end - index = index + 1 -end +--TSU +--COMBAT_LOG_EVENT_UNFILTERED CHECK_ALLSTATES +function(allstates, e, ...) + if not aura_env.ticker then + aura_env.ticker = C_Timer.NewTicker(0.05, function() + WeakAuras.ScanEvents("CHECK_ALLSTATES") + end) + end + if e == "COMBAT_LOG_EVENT_UNFILTERED" then + local t = select(1, ...) + local se = select(2, ...) + if se == "SPELL_CAST_SUCCESS" then + local casterguid = select(4, ...) + local spell = select(13, ...) + if casterguid == UnitGUID("player") and aura_env.spells[spell] then + local icon = select(3, GetSpellInfo(spell)) + allstates[t] = { + show = true, + changed = true, + icon = icon, + resort = true, + index = GetTime(), + time = GetTime(), + } + return true + end + end + elseif e == "CHECK_ALLSTATES" then + for k, v in pairs(allstates) do + if GetTime() - v.time >= aura_env.timer then + allstates[k] = { + show = false, + changed = true, + } + end + end + return true + end +end + +--PLAYER_SPELLBOOK_UPDATE +function() + local index = 1 + while GetSpellBookItemName(index, "spell") do + local name = GetSpellInfo(index, "spell") + local id = select(7, GetSpellInfo(index, "spell")) + if IsPlayerSpell(id) == true then + aura_env.spells[name] = id + end + index = index + 1 + end +end + +--INIT +aura_env.spells = {} +aura_env.timer = 3 +local index = 1 +while GetSpellBookItemName(index, "spell") do + local name = GetSpellInfo(index, "spell") + local id = select(7, GetSpellInfo(index, "spell")) + if IsPlayerSpell(id) == true then + aura_env.spells[name] = id + end + index = index + 1 +end diff --git a/Complete Projects/Legion/TSU - PlayerEvaluator.lua b/WeakAuras/Projects/TSU - PlayerEvaluator.lua similarity index 97% rename from Complete Projects/Legion/TSU - PlayerEvaluator.lua rename to WeakAuras/Projects/TSU - PlayerEvaluator.lua index 82ff5ab..fabf25a 100644 --- a/Complete Projects/Legion/TSU - PlayerEvaluator.lua +++ b/WeakAuras/Projects/TSU - PlayerEvaluator.lua @@ -1,78 +1,78 @@ ---NAME_PLATE_UNIT_ADDED NAME_PLATE_UNIT_REMOVED ---TSU -function(allstates, e, unit) - if e == "NAME_PLATE_UNIT_ADDED" then - if UnitExists(unit) then - if UnitIsPlayer(unit) then - local name = UnitName(unit) - allstates[unit] = { - show = true, - changed = true, - unit = unit, - name = name, - guild = GetGuildInfo(unit), - rank = select(2, GetGuildInfo(unit)), - } - return true - end - end - elseif e == "NAME_PLATE_UNIT_REMOVED" then - if allstates[unit] then - allstates[unit] = { - show = false, - changed = true, - } - return true - end - end -end - ---ON SHOW -if aura_env.statee.unit then - if aura_env.statee.name ~= UnitName(aura_env.statee.unit) then return end - local guild, rank = GetGuildInfo(aura_env.statee.unit) - if not guild or not rank then return end - if not aura_env.region.text then - local text = aura_env.region:CreateFontString(nil, "OVERLAY") - aura_env.region.text = text - end - aura_env.region:SetHeight(128) - aura_env.region:SetWidth(512) - aura_env.region.text:SetFont("Interface\\AddOns\\SharedMedia_MyMedia\\font\\iosevka-fixed-medium.ttf", 14, "OUTLINE") - aura_env.region.text:SetText(guild .. "\n" .. rank) - aura_env.region.text:SetJustifyH("CENTER") - aura_env.region.text:SetJustifyV("CENTER") - if not aura_env.region.texture then - local texture = aura_env.region:CreateTexture(nil, "OVERLAY") - aura_env.region.texture = texture - end - aura_env.region.texture:SetTexture("Interface\\Addons\\WeakAuras\\PowerAurasMedia\\Auras\\Aura22") - aura_env.region.texture:SetHeight(192) - aura_env.region.texture:SetWidth(192) - local plate = C_NamePlate.GetNamePlateForUnit(aura_env.statee.unit) - - if guild == "Indecisive" then - aura_env.region.texture:SetVertexColor(1, 0.85, 0, 1) - elseif guild == "Warforged" then - aura_env.region.texture:SetVertexColor(0.75, 0.75, 0.75, 1) - elseif guild == "Sideway" then - aura_env.region.texture:SetVertexColor(0.8, 0.5, 0.2, 1) - end - - if plate then - aura_env.region.texture:ClearAllPoints() - aura_env.region.texture:SetPoint("CENTER", plate, "TOP", 0, -16) - aura_env.region.texture:Show() - aura_env.region.text:ClearAllPoints() - aura_env.region.text:SetPoint("CENTER", plate, "CENTER", 0, 16) - aura_env.region.text:Show() - end -end - ---ON HIDE -if aura_env.region.text then - aura_env.region.text:Hide() -end -if aura_env.region.texture then - aura_env.region.texture:Hide() +--NAME_PLATE_UNIT_ADDED NAME_PLATE_UNIT_REMOVED +--TSU +function(allstates, e, unit) + if e == "NAME_PLATE_UNIT_ADDED" then + if UnitExists(unit) then + if UnitIsPlayer(unit) then + local name = UnitName(unit) + allstates[unit] = { + show = true, + changed = true, + unit = unit, + name = name, + guild = GetGuildInfo(unit), + rank = select(2, GetGuildInfo(unit)), + } + return true + end + end + elseif e == "NAME_PLATE_UNIT_REMOVED" then + if allstates[unit] then + allstates[unit] = { + show = false, + changed = true, + } + return true + end + end +end + +--ON SHOW +if aura_env.statee.unit then + if aura_env.statee.name ~= UnitName(aura_env.statee.unit) then return end + local guild, rank = GetGuildInfo(aura_env.statee.unit) + if not guild or not rank then return end + if not aura_env.region.text then + local text = aura_env.region:CreateFontString(nil, "OVERLAY") + aura_env.region.text = text + end + aura_env.region:SetHeight(128) + aura_env.region:SetWidth(512) + aura_env.region.text:SetFont("Interface\\AddOns\\SharedMedia_MyMedia\\font\\iosevka-fixed-medium.ttf", 14, "OUTLINE") + aura_env.region.text:SetText(guild .. "\n" .. rank) + aura_env.region.text:SetJustifyH("CENTER") + aura_env.region.text:SetJustifyV("CENTER") + if not aura_env.region.texture then + local texture = aura_env.region:CreateTexture(nil, "OVERLAY") + aura_env.region.texture = texture + end + aura_env.region.texture:SetTexture("Interface\\Addons\\WeakAuras\\PowerAurasMedia\\Auras\\Aura22") + aura_env.region.texture:SetHeight(192) + aura_env.region.texture:SetWidth(192) + local plate = C_NamePlate.GetNamePlateForUnit(aura_env.statee.unit) + + if guild == "Indecisive" then + aura_env.region.texture:SetVertexColor(1, 0.85, 0, 1) + elseif guild == "Warforged" then + aura_env.region.texture:SetVertexColor(0.75, 0.75, 0.75, 1) + elseif guild == "Sideway" then + aura_env.region.texture:SetVertexColor(0.8, 0.5, 0.2, 1) + end + + if plate then + aura_env.region.texture:ClearAllPoints() + aura_env.region.texture:SetPoint("CENTER", plate, "TOP", 0, -16) + aura_env.region.texture:Show() + aura_env.region.text:ClearAllPoints() + aura_env.region.text:SetPoint("CENTER", plate, "CENTER", 0, 16) + aura_env.region.text:Show() + end +end + +--ON HIDE +if aura_env.region.text then + aura_env.region.text:Hide() +end +if aura_env.region.texture then + aura_env.region.texture:Hide() end \ No newline at end of file diff --git a/Complete Projects/Legion/TSU - RepBars.lua b/WeakAuras/Projects/TSU - RepBars.lua similarity index 95% rename from Complete Projects/Legion/TSU - RepBars.lua rename to WeakAuras/Projects/TSU - RepBars.lua index 3477866..3b21cb3 100644 --- a/Complete Projects/Legion/TSU - RepBars.lua +++ b/WeakAuras/Projects/TSU - RepBars.lua @@ -1,48 +1,48 @@ ---TSU ---CHAT_MSG_COMBAT_FACTION_CHANGE -function(allstates,event,msg) - for _,v in pairs(allstates) do - v.show = false - v.changed = true - end - - for k,v in ipairs(aura_env.reps) do - local name,_,_,_,repmax,rep = GetFactionInfo(i) - allstates[unit] = - { - changed = true, - show = true, - resort = true, - progressType = "static", - value = rep, - total = repmax, - index = rep, - name = repname, - } - end - return true -end - ---CHAT_MSG_COMBAT_FACTION_CHANGE -function(_,msg) - local repname,change = msg:match("Reputation with ([%a+%s*%p*]+) increased by (%d+)") - for i = 1, GetNumFactions() do - local name,_,_,_,repmax,rep = GetFactionInfo(i) - if name == repName then - local repIndex = i - end - end - local isfound = 0 - for k,v in ipairs(aura_env.reps) do - if v == name then - isfound = 1 - break - end - end - if isfound == 0 then - table.insert(aura_env.reps, name) - end -end - ---INIT +--TSU +--CHAT_MSG_COMBAT_FACTION_CHANGE +function(allstates,event,msg) + for _,v in pairs(allstates) do + v.show = false + v.changed = true + end + + for k,v in ipairs(aura_env.reps) do + local name,_,_,_,repmax,rep = GetFactionInfo(i) + allstates[unit] = + { + changed = true, + show = true, + resort = true, + progressType = "static", + value = rep, + total = repmax, + index = rep, + name = repname, + } + end + return true +end + +--CHAT_MSG_COMBAT_FACTION_CHANGE +function(_,msg) + local repname,change = msg:match("Reputation with ([%a+%s*%p*]+) increased by (%d+)") + for i = 1, GetNumFactions() do + local name,_,_,_,repmax,rep = GetFactionInfo(i) + if name == repName then + local repIndex = i + end + end + local isfound = 0 + for k,v in ipairs(aura_env.reps) do + if v == name then + isfound = 1 + break + end + end + if isfound == 0 then + table.insert(aura_env.reps, name) + end +end + +--INIT aura_env.reps = {} \ No newline at end of file diff --git a/Complete Projects/Legion/TSU - Shitty kara trinket.lua b/WeakAuras/Projects/TSU - Shitty kara trinket.lua similarity index 96% rename from Complete Projects/Legion/TSU - Shitty kara trinket.lua rename to WeakAuras/Projects/TSU - Shitty kara trinket.lua index 4ad8e0a..9b23500 100644 --- a/Complete Projects/Legion/TSU - Shitty kara trinket.lua +++ b/WeakAuras/Projects/TSU - Shitty kara trinket.lua @@ -1,59 +1,59 @@ ---TSU ---EVERY FRAME -function(allstates) - for _,v in pairs(allstates) do - v.show = false - v.changed = true - end - - for i = 1, GetNumGroupMembers() do - local unit = "raid" .. i - local class = UnitClass(unit) - local buff = UnitBuff(unit, "Guardian's Familiar") - if buff then - local amount = select(17, UnitBuff(unit, "Guardian's Familiar")) - local maxval = 0 - if amount > maxval then - maxval = amount - end - local name = UnitName(unit) - allstates[unit] = - { - changed = true, - show = true, - resort = true, - progressType = "static", - value = amount, - total = maxval, - index = amount, - class = class, - name = name, - } - end - end - return true -end - ---ANIMATION -function() - if aura_env.statee then - return aura_env.classColor(aura_env.statee.class) - end -end - ---INIT -aura_env.classColor = function(class) - if class == "Death Knight" then return 0.77, 0.12, 0.23, 1 elseif - class == "Demon Hunter" then return 0.64, 0.19, 0.79, 1 elseif - class == "Druid" then return 1, 0.49, 0.04, 1 elseif - class == "Hunter" then return 0.67, 0.83, 0.45, 1 elseif - class == "Mage" then return 0.25, 0.78, 0.92, 1 elseif - class == "Monk" then return 0, 1, 0.59, 1 elseif - class == "Paladin" then return 0.96, 0.55, 0.73, 1 elseif - class == "Priest" then return 1, 1, 1, 1 elseif - class == "Rogue" then return 1, 0.96, 0.41, 1 elseif - class == "Shaman" then return 0, 0.44, 0.87, 1 elseif - class == "Warlock" then return 0.53, 0.53, 0.93, 1 elseif - class == "Warrior" then return 0.78, 0.61, 0.43, 1 else - return 1, 1, 1, 1 end +--TSU +--EVERY FRAME +function(allstates) + for _,v in pairs(allstates) do + v.show = false + v.changed = true + end + + for i = 1, GetNumGroupMembers() do + local unit = "raid" .. i + local class = UnitClass(unit) + local buff = UnitBuff(unit, "Guardian's Familiar") + if buff then + local amount = select(17, UnitBuff(unit, "Guardian's Familiar")) + local maxval = 0 + if amount > maxval then + maxval = amount + end + local name = UnitName(unit) + allstates[unit] = + { + changed = true, + show = true, + resort = true, + progressType = "static", + value = amount, + total = maxval, + index = amount, + class = class, + name = name, + } + end + end + return true +end + +--ANIMATION +function() + if aura_env.statee then + return aura_env.classColor(aura_env.statee.class) + end +end + +--INIT +aura_env.classColor = function(class) + if class == "Death Knight" then return 0.77, 0.12, 0.23, 1 elseif + class == "Demon Hunter" then return 0.64, 0.19, 0.79, 1 elseif + class == "Druid" then return 1, 0.49, 0.04, 1 elseif + class == "Hunter" then return 0.67, 0.83, 0.45, 1 elseif + class == "Mage" then return 0.25, 0.78, 0.92, 1 elseif + class == "Monk" then return 0, 1, 0.59, 1 elseif + class == "Paladin" then return 0.96, 0.55, 0.73, 1 elseif + class == "Priest" then return 1, 1, 1, 1 elseif + class == "Rogue" then return 1, 0.96, 0.41, 1 elseif + class == "Shaman" then return 0, 0.44, 0.87, 1 elseif + class == "Warlock" then return 0.53, 0.53, 0.93, 1 elseif + class == "Warrior" then return 0.78, 0.61, 0.43, 1 else + return 1, 1, 1, 1 end end \ No newline at end of file diff --git a/Complete Projects/Legion/TSU - Spell Alert.lua b/WeakAuras/Projects/TSU - Spell Alert.lua similarity index 96% rename from Complete Projects/Legion/TSU - Spell Alert.lua rename to WeakAuras/Projects/TSU - Spell Alert.lua index a51833f..9a8836a 100644 --- a/Complete Projects/Legion/TSU - Spell Alert.lua +++ b/WeakAuras/Projects/TSU - Spell Alert.lua @@ -1,494 +1,494 @@ ---Add raid frame glow for target of spellcast ---COMBAT_LOG_EVENT_UNFILTERED REMOVE_GUID NAME_PLATE_UNIT_ADDED NAME_PLATE_UNIT_REMOVED -function(allstates, e, ...) - if e == "COMBAT_LOG_EVENT_UNFILTERED" then - local se = select(2, ...) - if se == "SPELL_CAST_START" or se == "SPELL_CAST_SUCCESS" then - local spell = select(13, ...) - if aura_env.spells[spell] then - local ID = select(7, GetSpellInfo(aura_env.spells[spell].ID)) - if ID == aura_env.spells[spell].ID then - local castTime = select(4, GetSpellInfo(aura_env.spells[spell].ID)) - local GUID = select(4, ...) - if GUID then allstates[GUID] = {} end - if allstates[GUID].timer then allstates[GUID].timer:Cancel() end - if castTime > 1000 and se == "SPELL_CAST_START" then - if allstates[GUID].timer then allstates[GUID].timer:Cancel() end - allstates[GUID].changed = true - allstates[GUID].show = true - allstates[GUID].showTime = GetTime() - allstates[GUID].ID = aura_env.spells[spell].ID - allstates[GUID].ins = aura_env.spells[spell].ins - allstates[GUID].GUID = GUID - allstates[GUID].progressType = "timed" - allstates[GUID].expirationTime = GetTime() + castTime / 1000 - allstates[GUID].duration = castTime / 1000 - allstates[GUID].timer = C_Timer.NewTimer(castTime / 1000, function() WeakAuras.ScanEvents("REMOVE_GUID", GUID); end) - allstates[GUID].text = aura_env.spells[spell].ins - return true - elseif castTime == 0 and se == "SPELL_CAST_SUCCESS" then - if allstates[GUID].timer then allstates[GUID].timer:Cancel() end - allstates[GUID].changed = true - allstates[GUID].show = true - allstates[GUID].showTime = GetTime() - allstates[GUID].ID = aura_env.spells[spell].ID - allstates[GUID].ins = aura_env.spells[spell].ins - allstates[GUID].GUID = GUID - allstates[GUID].expirationTime = GetTime() + 2 - allstates[GUID].timer = C_Timer.NewTimer(2, function() WeakAuras.ScanEvents("REMOVE_GUID", GUID); end) - allstates[GUID].text = aura_env.spells[spell].ins - return true - end - end - end - elseif se == "SPELL_CAST_FAILED" then - local spell = select(13, ...) - if aura_env.spells[spell] then - local ID = select(7, GetSpellInfo(aura_env.spells[spell].ID)) - if ID == aura_env.spells[spell].ID then - local GUID = select(4, ...) - if allstates[GUID].timer then allstates[GUID].timer:Cancel() end - --WeakAuras.ScanEvents("REMOVE_GUID", GUID) - local rem = aura_env.round(allstates[GUID].expirationTime - GetTime(), 1) - local maxrem = allstates[GUID].expirationTime - allstates[GUID].showTime - allstates[GUID].changed = true - allstates[GUID].show = true - allstates[GUID].progressType = "static" - allstates[GUID].value = rem - allstates[GUID].total = maxrem - allstates[GUID].interrupted = true - allstates[GUID].timer = C_Timer.NewTimer(1, function() WeakAuras.ScanEvents("REMOVE_GUID", GUID) end) - return true - end - end - elseif se == "UNIT_DIED" then - local GUID = select(8, ...) - if allstates[GUID] and allstates[GUID].expirationTime and not allstates[GUID].interrupted then - local rem = allstates[GUID].expirationTime - GetTime() - local maxrem = allstates[GUID].expirationTime - allstates[GUID].showTime - allstates[GUID].changed = true - allstates[GUID].show = true - allstates[GUID].progressType = "static" - allstates[GUID].value = rem - allstates[GUID].total = maxrem - allstates[GUID].interrupted = true - allstates[GUID].timer = C_Timer.NewTimer(1, function() WeakAuras.ScanEvents("REMOVE_GUID", GUID) end) - return true - end - end - elseif e == "REMOVE_GUID" then - local GUID = select(1, ...) - if allstates[GUID] then - allstates[GUID].show = false - allstates[GUID].changed = true - return true - end - end -end - ---ANIMATION -function() - if aura_env.statee and aura_env.statee.interrupted then return 0, 1, 0, 1 end -end - ---ON SHOW -PlaySoundFile("Interface\\AddOns\\WeakAuras\\Media\\Sounds\\RobotBlip.ogg", "Master") - ---INIT -aura_env.spells = { - ["Hateful Charge"] = { - ["ID"] = 224188, - ["ins"] = "Hateful Charge - Intercept", - }, - ["Growing Paranoia"] = { - ["ID"] = 200289, - ["ins"] = "Growing Paranoia - Avoid", - }, - ["Waking Nightmare"] = { - ["ID"] = 200243, - ["ins"] = "Waking Nightmare - Stack", - }, - ["Static Nova"] = { - ["ID"] = 193597, - ["ins"] = "Static Nova - Run to island", - }, - ["Focused Lightning"] = { - ["ID"] = 193611, - ["ins"] = "Focused Lightning - Run from island", - }, - ["Scent Of Blood"] = { - ["ID"] = 196838, - ["ins"] = "Scent Of Blood - Prepare for Claw Frenzy", - }, - ["Celerity Zone"] = { - ["ID"] = 211037, - ["ins"] = "Celerity Zone - Get 50% haste", - }, - ["Sap Soul"] = { - ["ID"] = 200905, - ["ins"] = "Sap Soul - Manage", - }, - ["Meteor"] = { - ["ID"] = 196249, - ["ins"] = "Meteor - Stack", - }, - ["Fissure"] = { - ["ID"] = 192522, - ["ins"] = "Fissure - Yoink lava", - }, - ["Lava Wreath"] = { - ["ID"] = 192631, - ["ins"] = "Lava Wreath - Yoink lava", - }, - ["Knockdown Kick"] = { - ["ID"] = 214989, - ["ins"] = "Knockdown Kick - Beware", - }, - ["Knife Dance"] = { - ["ID"] = 200291, - ["ins"] = "Knife Dance - Beware", - }, - ["Mana Fang"] = { - ["ID"] = 209516, - ["ins"] = "Mana Fang - Beware", - }, - ["Frantic Rip"] = { - ["ID"] = 200620, - ["ins"] = "Frantic Rip - Beware", - }, - ["Grievous Tear"] = { - ["ID"] = 196376, - ["ins"] = "Grievous Tear - Beware", - }, - ["Nightmare Bolt"] = { - ["ID"] = 212834, - ["ins"] = "Nightmare Bolt - Beware", - }, - ["Rising Fury"] = { - ["ID"] = 195944, - ["ins"] = "Rising Fury - Beware", - }, - ["Ravenous Leap"] = { - ["ID"] = 197556, - ["ins"] = "Ravenous Leap - Beware", - }, - ["Lantern Of Darkness"] = { - ["ID"] = 192019, - ["ins"] = "Lantern Of Darkness - Beware", - }, - ["Shatter"] = { - ["ID"] = 188114, - ["ins"] = "Shatter - Beware", - }, - ["Prophecies Of Doom"] = { - ["ID"] = 211771, - ["ins"] = "Prophecies Of Doom - Beware", - }, - ["Quarantine"] = { - ["ID"] = 195791, - ["ins"] = "Quarantine - Beware", - }, - ["Deepening Shadows"] = { - ["ID"] = 213583, - ["ins"] = "Deepening Shadows - Beware", - }, - ["Maddening Roar"] = { - ["ID"] = 200580, - ["ins"] = "Maddening Roar - CC", - }, - ["Spray Sand"] = { - ["ID"] = 196129, - ["ins"] = "Spray Sand - CC", - }, - ["Drain"] = { - ["ID"] = 202658, - ["ins"] = "Drain - CC", - }, - ["Dark Mending"] = { - ["ID"] = 225573, - ["ins"] = "Dark Mending - Interrupt", - }, - ["Hinder"] = { - ["ID"] = 215204, - ["ins"] = "Hinder - Interrupt", - }, - ["Drain Magic"] = { - ["ID"] = 209485, - ["ins"] = "Drain Magic - Interrupt", - }, - ["Charging Station"] = { - ["ID"] = 225100, - ["ins"] = "Charging Station - Interrupt", - }, - ["Unnerving Screech"] = { - ["ID"] = 200631, - ["ins"] = "Unnerving Screech - Interrupt", - }, - ["Tormenting Eye"] = { - ["ID"] = 204243, - ["ins"] = "Tormenting Eye - Interrupt", - }, - ["Blood Metamorphosis"] = { - ["ID"] = 225562, - ["ins"] = "Blood Metamorphosis - Interrupt", - }, - ["Restoration"] = { - ["ID"] = 197502, - ["ins"] = "Restoration - Interrupt", - }, - ["Arcane Rebound"] = { - ["ID"] = 196028, - ["ins"] = "Arcane Rebound - Interrupt", - }, - ["Polymorph:Fish"] = { - ["ID"] = 197105, - ["ins"] = "Polymorph:Fish - Interrupt", - }, - ["Aqua Spout"] = { - ["ID"] = 196027, - ["ins"] = "Aqua Spout - Interrupt", - }, - ["Shattered Rune"] = { - ["ID"] = 198962, - ["ins"] = "Shattered Rune - Interrupt", - }, - ["Etch"] = { - ["ID"] = 198959, - ["ins"] = "Etch - Interrupt", - }, - ["Unruly Yell"] = { - ["ID"] = 199726, - ["ins"] = "Unruly Yell - Interrupt", - }, - ["Surge"] = { - ["ID"] = 198750, - ["ins"] = "Surge - Interrupt", - }, - ["Void Snap"] = { - ["ID"] = 194266, - ["ins"] = "Void Snap - Interrupt", - }, - ["Bound"] = { - ["ID"] = 193585, - ["ins"] = "Bound - Interrupt", - }, - ["Demonic Ascension"] = { - ["ID"] = 226285, - ["ins"] = "Demonic Ascension - Interrupt", - }, - ["Nightmares"] = { - ["ID"] = 193069, - ["ins"] = "Nightmares - Interrupt", - }, - ["Bonebreaking Strike"] = { - ["ID"] = 200261, - ["ins"] = "Bonebreaking Strike - Avoid", - }, - ["Ravens Dive"] = { - ["ID"] = 214001, - ["ins"] = "Ravens Dive - Avoid", - }, - ["Quelling Strike"] = { - ["ID"] = 209027, - ["ins"] = "Quelling Strike - Avoid", - }, - ["Wild Detonation"] = { - ["ID"] = 209477, - ["ins"] = "Wild Detonation - Avoid", - }, - ["Charged Blast"] = { - ["ID"] = 212031, - ["ins"] = "Charged Blast - Avoid", - }, - ["Charged Smash"] = { - ["ID"] = 209495, - ["ins"] = "Charged Smash - Avoid", - }, - ["Fel Detonation"] = { - ["ID"] = 211464, - ["ins"] = "Fel Detonation - Avoid", - }, - ["Star Shower"] = { - ["ID"] = 200658, - ["ins"] = "Star Shower - Avoid", - }, - ["Nightfall"] = { - ["ID"] = 198408, - ["ins"] = "Nightfall - Avoid", - }, - ["Dread Inferno"] = { - ["ID"] = 201400, - ["ins"] = "Dread Inferno - Avoid", - }, - ["Thunderstrike"] = { - ["ID"] = 198605, - ["ins"] = "Thunderstrike - Avoid", - }, - ["Felblaze Rush"] = { - ["ID"] = 193659, - ["ins"] = "Felblaze Rush - Avoid", - }, - ["Deceptive Strike"] = { - ["ID"] = 199250, - ["ins"] = "Deceptive Strike - Avoid", - }, - ["Cosmic Scythe"] = { - ["ID"] = 194216, - ["ins"] = "Cosmic Scythe - Avoid", - }, - ["Strike Of The Mountain"] = { - ["ID"] = 198475, - ["ins"] = "Strike Of The Mountain - Avoid", - }, - ["Spiked Tongue"] = { - ["ID"] = 199176, - ["ins"] = "Spiked Tongue - Avoid", - }, - ["Magma Wave"] = { - ["ID"] = 200404, - ["ins"] = "Magma Wave - Avoid", - }, - ["Shadow Slash"] = { - ["ID"] = 212030, - ["ins"] = "Shadow Slash - Avoid", - }, - ["Blink Strikes"] = { - ["ID"] = 199811, - ["ins"] = "Blink Strikes - Avoid", - }, - ["Nether Venom"] = { - ["ID"] = 200040, - ["ins"] = "Nether Venom - Avoid", - }, - ["Unstable Mana"] = { - ["ID"] = 220871, - ["ins"] = "Unstable Mana - Avoid", - }, - ["Lingering Gaze"] = { - ["ID"] = 194945, - ["ins"] = "Lingering Gaze - Avoid", - }, - ["Soul Blade"] = { - ["ID"] = 200084, - ["ins"] = "Soul Blade - Use Mitigation", - }, - ["Strike Down"] = { - ["ID"] = 225732, - ["ins"] = "Strike Down - Use Mitigation", - }, - ["Vengeful Shear"] = { - ["ID"] = 197418, - ["ins"] = "Vengeful Shear - Use Mitigation", - }, - ["Brutal Assault"] = { - ["ID"] = 201139, - ["ins"] = "Brutal Assault - Use Mitigation", - }, - ["Indigestion"] = { - ["ID"] = 200913, - ["ins"] = "Indigestion - Use Mitigation", - }, - ["Brutal Haymaker"] = { - ["ID"] = 198245, - ["ins"] = "Brutal Haymaker - Use Mitigation", - }, - ["Coup De Grace"] = { - ["ID"] = 214003, - ["ins"] = "Coup De Grace - Use Mitigation", - }, - ["Primal Rampage"] = { - ["ID"] = 198376, - ["ins"] = "Primal Rampage - Use Mitigation", - }, - ["Breath Of Corruption"] = { - ["ID"] = 191326, - ["ins"] = "Breath Of Corruption - Use Mitigation", - }, - ["Feed On The Weak"] = { - ["ID"] = 200238, - ["ins"] = "Feed On The Weak - Use Mitigation", - }, - ["Crashing Wave"] = { - ["ID"] = 191900, - ["ins"] = "Crashing Wave - Use Mitigation", - }, - ["Lightning Breath"] = { - ["ID"] = 198888, - ["ins"] = "Lightning Breath - Use Mitigation", - }, - ["Penetrating Shot"] = { - ["ID"] = 199210, - ["ins"] = "Penetrating Shot - Use Mitigation", - }, - ["Shield Of Light"] = { - ["ID"] = 192018, - ["ins"] = "Shield Of Light - Use Mitigation", - }, - ["Fire Blast"] = { - ["ID"] = 202365, - ["ins"] = "Fire Blast - Use Mitigation", - }, - ["Flare"] = { - ["ID"] = 202408, - ["ins"] = "Flare - Use Mitigation", - }, - ["Dark Slash"] = { - ["ID"] = 193211, - ["ins"] = "Dark Slash - Use Mitigation", - }, - ["Bile Breath"] = { - ["ID"] = 194099, - ["ins"] = "Bile Breath - Use Mitigation", - }, - ["Piercing Shards"] = { - ["ID"] = 226296, - ["ins"] = "Piercing Shards - Use Mitigation", - }, - ["Razor Shards"] = { - ["ID"] = 188169, - ["ins"] = "Razor Shards - Use Mitigation", - }, - ["Sunder"] = { - ["ID"] = 198496, - ["ins"] = "Sunder - Use Mitigation", - }, - ["Molten Crash"] = { - ["ID"] = 200732, - ["ins"] = "Molten Crash - Use Mitigation", - }, - ["Flame Breath"] = { - ["ID"] = 226420, - ["ins"] = "Flame Breath - Use Mitigation", - }, - ["Hatred"] = { - ["ID"] = 190836, - ["ins"] = "Hatred - Use Mitigation", - }, - ["a Mothers Love"] = { - ["ID"] = 194064, - ["ins"] = "a Mothers Love - Use Mitigation", - }, -} -aura_env.classColor = function(class) -if class == "Death Knight" then return "|cFFC41F3B" elseif -class == "Demon Hunter" then return "|cFFA330C9" elseif -class == "Druid" then return "|cFFFF7D0A" elseif -class == "Hunter" then return "|cFFABD473" elseif -class == "Mage" then return "|cFF40C7EB" elseif -class == "Monk" then return "|cFF00FF96" elseif -class == "Paladin" then return "|cFFF58CBA" elseif -class == "Priest" then return "|cFFFFFFFF" elseif -class == "Rogue" then return "|cFFFFF569" elseif -class == "Shaman" then return "|cFF0070DE" elseif -class == "Warlock" then return "|cFF8787ED" elseif -class == "Warrior" then return "|cFFC79C6E" else -return "|cFFFFFFFF" end -end -aura_env.round = function(var, n) - if (n) then - var = math.floor((var * 10 ^ n) + 0.5) / (10 ^ n) - else - var = math.floor(var + 0.5) - end - return var +--Add raid frame glow for target of spellcast +--COMBAT_LOG_EVENT_UNFILTERED REMOVE_GUID NAME_PLATE_UNIT_ADDED NAME_PLATE_UNIT_REMOVED +function(allstates, e, ...) + if e == "COMBAT_LOG_EVENT_UNFILTERED" then + local se = select(2, ...) + if se == "SPELL_CAST_START" or se == "SPELL_CAST_SUCCESS" then + local spell = select(13, ...) + if aura_env.spells[spell] then + local ID = select(7, GetSpellInfo(aura_env.spells[spell].ID)) + if ID == aura_env.spells[spell].ID then + local castTime = select(4, GetSpellInfo(aura_env.spells[spell].ID)) + local GUID = select(4, ...) + if GUID then allstates[GUID] = {} end + if allstates[GUID].timer then allstates[GUID].timer:Cancel() end + if castTime > 1000 and se == "SPELL_CAST_START" then + if allstates[GUID].timer then allstates[GUID].timer:Cancel() end + allstates[GUID].changed = true + allstates[GUID].show = true + allstates[GUID].showTime = GetTime() + allstates[GUID].ID = aura_env.spells[spell].ID + allstates[GUID].ins = aura_env.spells[spell].ins + allstates[GUID].GUID = GUID + allstates[GUID].progressType = "timed" + allstates[GUID].expirationTime = GetTime() + castTime / 1000 + allstates[GUID].duration = castTime / 1000 + allstates[GUID].timer = C_Timer.NewTimer(castTime / 1000, function() WeakAuras.ScanEvents("REMOVE_GUID", GUID); end) + allstates[GUID].text = aura_env.spells[spell].ins + return true + elseif castTime == 0 and se == "SPELL_CAST_SUCCESS" then + if allstates[GUID].timer then allstates[GUID].timer:Cancel() end + allstates[GUID].changed = true + allstates[GUID].show = true + allstates[GUID].showTime = GetTime() + allstates[GUID].ID = aura_env.spells[spell].ID + allstates[GUID].ins = aura_env.spells[spell].ins + allstates[GUID].GUID = GUID + allstates[GUID].expirationTime = GetTime() + 2 + allstates[GUID].timer = C_Timer.NewTimer(2, function() WeakAuras.ScanEvents("REMOVE_GUID", GUID); end) + allstates[GUID].text = aura_env.spells[spell].ins + return true + end + end + end + elseif se == "SPELL_CAST_FAILED" then + local spell = select(13, ...) + if aura_env.spells[spell] then + local ID = select(7, GetSpellInfo(aura_env.spells[spell].ID)) + if ID == aura_env.spells[spell].ID then + local GUID = select(4, ...) + if allstates[GUID].timer then allstates[GUID].timer:Cancel() end + --WeakAuras.ScanEvents("REMOVE_GUID", GUID) + local rem = aura_env.round(allstates[GUID].expirationTime - GetTime(), 1) + local maxrem = allstates[GUID].expirationTime - allstates[GUID].showTime + allstates[GUID].changed = true + allstates[GUID].show = true + allstates[GUID].progressType = "static" + allstates[GUID].value = rem + allstates[GUID].total = maxrem + allstates[GUID].interrupted = true + allstates[GUID].timer = C_Timer.NewTimer(1, function() WeakAuras.ScanEvents("REMOVE_GUID", GUID) end) + return true + end + end + elseif se == "UNIT_DIED" then + local GUID = select(8, ...) + if allstates[GUID] and allstates[GUID].expirationTime and not allstates[GUID].interrupted then + local rem = allstates[GUID].expirationTime - GetTime() + local maxrem = allstates[GUID].expirationTime - allstates[GUID].showTime + allstates[GUID].changed = true + allstates[GUID].show = true + allstates[GUID].progressType = "static" + allstates[GUID].value = rem + allstates[GUID].total = maxrem + allstates[GUID].interrupted = true + allstates[GUID].timer = C_Timer.NewTimer(1, function() WeakAuras.ScanEvents("REMOVE_GUID", GUID) end) + return true + end + end + elseif e == "REMOVE_GUID" then + local GUID = select(1, ...) + if allstates[GUID] then + allstates[GUID].show = false + allstates[GUID].changed = true + return true + end + end +end + +--ANIMATION +function() + if aura_env.statee and aura_env.statee.interrupted then return 0, 1, 0, 1 end +end + +--ON SHOW +PlaySoundFile("Interface\\AddOns\\WeakAuras\\Media\\Sounds\\RobotBlip.ogg", "Master") + +--INIT +aura_env.spells = { + ["Hateful Charge"] = { + ["ID"] = 224188, + ["ins"] = "Hateful Charge - Intercept", + }, + ["Growing Paranoia"] = { + ["ID"] = 200289, + ["ins"] = "Growing Paranoia - Avoid", + }, + ["Waking Nightmare"] = { + ["ID"] = 200243, + ["ins"] = "Waking Nightmare - Stack", + }, + ["Static Nova"] = { + ["ID"] = 193597, + ["ins"] = "Static Nova - Run to island", + }, + ["Focused Lightning"] = { + ["ID"] = 193611, + ["ins"] = "Focused Lightning - Run from island", + }, + ["Scent Of Blood"] = { + ["ID"] = 196838, + ["ins"] = "Scent Of Blood - Prepare for Claw Frenzy", + }, + ["Celerity Zone"] = { + ["ID"] = 211037, + ["ins"] = "Celerity Zone - Get 50% haste", + }, + ["Sap Soul"] = { + ["ID"] = 200905, + ["ins"] = "Sap Soul - Manage", + }, + ["Meteor"] = { + ["ID"] = 196249, + ["ins"] = "Meteor - Stack", + }, + ["Fissure"] = { + ["ID"] = 192522, + ["ins"] = "Fissure - Yoink lava", + }, + ["Lava Wreath"] = { + ["ID"] = 192631, + ["ins"] = "Lava Wreath - Yoink lava", + }, + ["Knockdown Kick"] = { + ["ID"] = 214989, + ["ins"] = "Knockdown Kick - Beware", + }, + ["Knife Dance"] = { + ["ID"] = 200291, + ["ins"] = "Knife Dance - Beware", + }, + ["Mana Fang"] = { + ["ID"] = 209516, + ["ins"] = "Mana Fang - Beware", + }, + ["Frantic Rip"] = { + ["ID"] = 200620, + ["ins"] = "Frantic Rip - Beware", + }, + ["Grievous Tear"] = { + ["ID"] = 196376, + ["ins"] = "Grievous Tear - Beware", + }, + ["Nightmare Bolt"] = { + ["ID"] = 212834, + ["ins"] = "Nightmare Bolt - Beware", + }, + ["Rising Fury"] = { + ["ID"] = 195944, + ["ins"] = "Rising Fury - Beware", + }, + ["Ravenous Leap"] = { + ["ID"] = 197556, + ["ins"] = "Ravenous Leap - Beware", + }, + ["Lantern Of Darkness"] = { + ["ID"] = 192019, + ["ins"] = "Lantern Of Darkness - Beware", + }, + ["Shatter"] = { + ["ID"] = 188114, + ["ins"] = "Shatter - Beware", + }, + ["Prophecies Of Doom"] = { + ["ID"] = 211771, + ["ins"] = "Prophecies Of Doom - Beware", + }, + ["Quarantine"] = { + ["ID"] = 195791, + ["ins"] = "Quarantine - Beware", + }, + ["Deepening Shadows"] = { + ["ID"] = 213583, + ["ins"] = "Deepening Shadows - Beware", + }, + ["Maddening Roar"] = { + ["ID"] = 200580, + ["ins"] = "Maddening Roar - CC", + }, + ["Spray Sand"] = { + ["ID"] = 196129, + ["ins"] = "Spray Sand - CC", + }, + ["Drain"] = { + ["ID"] = 202658, + ["ins"] = "Drain - CC", + }, + ["Dark Mending"] = { + ["ID"] = 225573, + ["ins"] = "Dark Mending - Interrupt", + }, + ["Hinder"] = { + ["ID"] = 215204, + ["ins"] = "Hinder - Interrupt", + }, + ["Drain Magic"] = { + ["ID"] = 209485, + ["ins"] = "Drain Magic - Interrupt", + }, + ["Charging Station"] = { + ["ID"] = 225100, + ["ins"] = "Charging Station - Interrupt", + }, + ["Unnerving Screech"] = { + ["ID"] = 200631, + ["ins"] = "Unnerving Screech - Interrupt", + }, + ["Tormenting Eye"] = { + ["ID"] = 204243, + ["ins"] = "Tormenting Eye - Interrupt", + }, + ["Blood Metamorphosis"] = { + ["ID"] = 225562, + ["ins"] = "Blood Metamorphosis - Interrupt", + }, + ["Restoration"] = { + ["ID"] = 197502, + ["ins"] = "Restoration - Interrupt", + }, + ["Arcane Rebound"] = { + ["ID"] = 196028, + ["ins"] = "Arcane Rebound - Interrupt", + }, + ["Polymorph:Fish"] = { + ["ID"] = 197105, + ["ins"] = "Polymorph:Fish - Interrupt", + }, + ["Aqua Spout"] = { + ["ID"] = 196027, + ["ins"] = "Aqua Spout - Interrupt", + }, + ["Shattered Rune"] = { + ["ID"] = 198962, + ["ins"] = "Shattered Rune - Interrupt", + }, + ["Etch"] = { + ["ID"] = 198959, + ["ins"] = "Etch - Interrupt", + }, + ["Unruly Yell"] = { + ["ID"] = 199726, + ["ins"] = "Unruly Yell - Interrupt", + }, + ["Surge"] = { + ["ID"] = 198750, + ["ins"] = "Surge - Interrupt", + }, + ["Void Snap"] = { + ["ID"] = 194266, + ["ins"] = "Void Snap - Interrupt", + }, + ["Bound"] = { + ["ID"] = 193585, + ["ins"] = "Bound - Interrupt", + }, + ["Demonic Ascension"] = { + ["ID"] = 226285, + ["ins"] = "Demonic Ascension - Interrupt", + }, + ["Nightmares"] = { + ["ID"] = 193069, + ["ins"] = "Nightmares - Interrupt", + }, + ["Bonebreaking Strike"] = { + ["ID"] = 200261, + ["ins"] = "Bonebreaking Strike - Avoid", + }, + ["Ravens Dive"] = { + ["ID"] = 214001, + ["ins"] = "Ravens Dive - Avoid", + }, + ["Quelling Strike"] = { + ["ID"] = 209027, + ["ins"] = "Quelling Strike - Avoid", + }, + ["Wild Detonation"] = { + ["ID"] = 209477, + ["ins"] = "Wild Detonation - Avoid", + }, + ["Charged Blast"] = { + ["ID"] = 212031, + ["ins"] = "Charged Blast - Avoid", + }, + ["Charged Smash"] = { + ["ID"] = 209495, + ["ins"] = "Charged Smash - Avoid", + }, + ["Fel Detonation"] = { + ["ID"] = 211464, + ["ins"] = "Fel Detonation - Avoid", + }, + ["Star Shower"] = { + ["ID"] = 200658, + ["ins"] = "Star Shower - Avoid", + }, + ["Nightfall"] = { + ["ID"] = 198408, + ["ins"] = "Nightfall - Avoid", + }, + ["Dread Inferno"] = { + ["ID"] = 201400, + ["ins"] = "Dread Inferno - Avoid", + }, + ["Thunderstrike"] = { + ["ID"] = 198605, + ["ins"] = "Thunderstrike - Avoid", + }, + ["Felblaze Rush"] = { + ["ID"] = 193659, + ["ins"] = "Felblaze Rush - Avoid", + }, + ["Deceptive Strike"] = { + ["ID"] = 199250, + ["ins"] = "Deceptive Strike - Avoid", + }, + ["Cosmic Scythe"] = { + ["ID"] = 194216, + ["ins"] = "Cosmic Scythe - Avoid", + }, + ["Strike Of The Mountain"] = { + ["ID"] = 198475, + ["ins"] = "Strike Of The Mountain - Avoid", + }, + ["Spiked Tongue"] = { + ["ID"] = 199176, + ["ins"] = "Spiked Tongue - Avoid", + }, + ["Magma Wave"] = { + ["ID"] = 200404, + ["ins"] = "Magma Wave - Avoid", + }, + ["Shadow Slash"] = { + ["ID"] = 212030, + ["ins"] = "Shadow Slash - Avoid", + }, + ["Blink Strikes"] = { + ["ID"] = 199811, + ["ins"] = "Blink Strikes - Avoid", + }, + ["Nether Venom"] = { + ["ID"] = 200040, + ["ins"] = "Nether Venom - Avoid", + }, + ["Unstable Mana"] = { + ["ID"] = 220871, + ["ins"] = "Unstable Mana - Avoid", + }, + ["Lingering Gaze"] = { + ["ID"] = 194945, + ["ins"] = "Lingering Gaze - Avoid", + }, + ["Soul Blade"] = { + ["ID"] = 200084, + ["ins"] = "Soul Blade - Use Mitigation", + }, + ["Strike Down"] = { + ["ID"] = 225732, + ["ins"] = "Strike Down - Use Mitigation", + }, + ["Vengeful Shear"] = { + ["ID"] = 197418, + ["ins"] = "Vengeful Shear - Use Mitigation", + }, + ["Brutal Assault"] = { + ["ID"] = 201139, + ["ins"] = "Brutal Assault - Use Mitigation", + }, + ["Indigestion"] = { + ["ID"] = 200913, + ["ins"] = "Indigestion - Use Mitigation", + }, + ["Brutal Haymaker"] = { + ["ID"] = 198245, + ["ins"] = "Brutal Haymaker - Use Mitigation", + }, + ["Coup De Grace"] = { + ["ID"] = 214003, + ["ins"] = "Coup De Grace - Use Mitigation", + }, + ["Primal Rampage"] = { + ["ID"] = 198376, + ["ins"] = "Primal Rampage - Use Mitigation", + }, + ["Breath Of Corruption"] = { + ["ID"] = 191326, + ["ins"] = "Breath Of Corruption - Use Mitigation", + }, + ["Feed On The Weak"] = { + ["ID"] = 200238, + ["ins"] = "Feed On The Weak - Use Mitigation", + }, + ["Crashing Wave"] = { + ["ID"] = 191900, + ["ins"] = "Crashing Wave - Use Mitigation", + }, + ["Lightning Breath"] = { + ["ID"] = 198888, + ["ins"] = "Lightning Breath - Use Mitigation", + }, + ["Penetrating Shot"] = { + ["ID"] = 199210, + ["ins"] = "Penetrating Shot - Use Mitigation", + }, + ["Shield Of Light"] = { + ["ID"] = 192018, + ["ins"] = "Shield Of Light - Use Mitigation", + }, + ["Fire Blast"] = { + ["ID"] = 202365, + ["ins"] = "Fire Blast - Use Mitigation", + }, + ["Flare"] = { + ["ID"] = 202408, + ["ins"] = "Flare - Use Mitigation", + }, + ["Dark Slash"] = { + ["ID"] = 193211, + ["ins"] = "Dark Slash - Use Mitigation", + }, + ["Bile Breath"] = { + ["ID"] = 194099, + ["ins"] = "Bile Breath - Use Mitigation", + }, + ["Piercing Shards"] = { + ["ID"] = 226296, + ["ins"] = "Piercing Shards - Use Mitigation", + }, + ["Razor Shards"] = { + ["ID"] = 188169, + ["ins"] = "Razor Shards - Use Mitigation", + }, + ["Sunder"] = { + ["ID"] = 198496, + ["ins"] = "Sunder - Use Mitigation", + }, + ["Molten Crash"] = { + ["ID"] = 200732, + ["ins"] = "Molten Crash - Use Mitigation", + }, + ["Flame Breath"] = { + ["ID"] = 226420, + ["ins"] = "Flame Breath - Use Mitigation", + }, + ["Hatred"] = { + ["ID"] = 190836, + ["ins"] = "Hatred - Use Mitigation", + }, + ["a Mothers Love"] = { + ["ID"] = 194064, + ["ins"] = "a Mothers Love - Use Mitigation", + }, +} +aura_env.classColor = function(class) +if class == "Death Knight" then return "|cFFC41F3B" elseif +class == "Demon Hunter" then return "|cFFA330C9" elseif +class == "Druid" then return "|cFFFF7D0A" elseif +class == "Hunter" then return "|cFFABD473" elseif +class == "Mage" then return "|cFF40C7EB" elseif +class == "Monk" then return "|cFF00FF96" elseif +class == "Paladin" then return "|cFFF58CBA" elseif +class == "Priest" then return "|cFFFFFFFF" elseif +class == "Rogue" then return "|cFFFFF569" elseif +class == "Shaman" then return "|cFF0070DE" elseif +class == "Warlock" then return "|cFF8787ED" elseif +class == "Warrior" then return "|cFFC79C6E" else +return "|cFFFFFFFF" end +end +aura_env.round = function(var, n) + if (n) then + var = math.floor((var * 10 ^ n) + 0.5) / (10 ^ n) + else + var = math.floor(var + 0.5) + end + return var end \ No newline at end of file diff --git a/Complete Projects/Legion/TSU - Spells.lua b/WeakAuras/Projects/TSU - Spells.lua similarity index 97% rename from Complete Projects/Legion/TSU - Spells.lua rename to WeakAuras/Projects/TSU - Spells.lua index ddb2d1e..60a2a81 100644 --- a/Complete Projects/Legion/TSU - Spells.lua +++ b/WeakAuras/Projects/TSU - Spells.lua @@ -1,399 +1,399 @@ ---[[ -TODO: -Add interrupts / stuns / breaks by looking at friendly spells cast on the GUID's -Add support for default UI (!!!) -Mob deaths remove namepaltes, handle glow maybe? -Rework for GetSpellInfo instead of GetCastingInfo - if no namepalte found GetSpellinfo!!!!!! BIG IQ -Watch for damage on avengers instead of cast -]] - ---TSU ---COMBAT_LOG_EVENT_UNFILTERED HIDE_ALLSTATES_CAST NAME_PLATE_UNIT_REMOVED NAME_PLATE_UNIT_ADDED -function(allstates, e, ...) - local scan = false - local casterGUID, caster, spell, se, interrupted = false - if e == "COMBAT_LOG_EVENT_UNFILTERED" then - se = select(2, ...) - if se == "SPELL_CAST_START" or se == "SPELL_CAST_SUCCESS" then - local casterFlags = select(6, ...) - if (bit.band(casterFlags, 0x00000840) == 0x00000840) == true then --Hostile NPC - casterGUID = select(4, ...) - caster = select(5, ...) - spell = select(13, ...) - scan = true - end - elseif e == "SPELL_CAST_FAILED" then - if (bit.band(casterFlags, 0x00000840) == 0x00000840) == true then --Hostile NPC - casterGUID = select(4, ...) - if allstates[casterGUID] then - allstates[casterGUID].show = true - allstates[casterGUID].changed = true - allstates[casterGUID].progressType = "static" - allstates[casterGUID].value = 1 - allstates[casterGUID].total = 1 - C_Timer.After(1.5, function() WeakAuras.ScanEvents("HIDE_ALLSTATES_CAST", casterGUID) end) - end - end - end - elseif e == "HIDE_ALLSTATES_CAST" then - local casterGUID = ... - if allstates[casterGUID] then - allstates[casterGUID].show = false - allstates[casterGUID].changed = true - return true - end - elseif e == "NAME_PLATE_UNIT_REMOVED" then - local u = ... - local uGUID = UnitGUID(u) - --print(uGUID, "nameplate removed") - if allstates[uGUID] then - aura_env.glow(u, 0) - end - elseif e == "NAME_PLATE_UNIT_ADDED" then - local u = ... - local uGUID = UnitGUID(u) - --print(uGUID, "nameplate added") - if allstates[uGUID] then - aura_env.glow(u, 1) - end - end - if scan == true then - for i = 1, 40 do - local unit = "nameplate" .. i - if UnitExists(unit) then - local unitGUID = UnitGUID(unit) - if unitGUID == casterGUID then - if se and (se == "SPELL_CAST_START" or se == "SPELL_CAST_SUCCESS") then - if UnitCastingInfo(unit) then - if aura_env.spells[spell] then - local _, _, _, texture, startTime, endTime = UnitCastingInfo(unit) - local remainingTime = math.floor(endTime - (GetTime() * 1000)) - local castTime = endTime - startTime - local castTimeDisplay = math.floor((castTime / 1000) * 10) / 10 - local castDisplay = math.floor((remainingTime / 1000) * 10) / 10 - local target = select(9, ...) - print(select(8, ...), select(9, ...), select(10, ...)) - --print(endTime / 1000, castTimeDisplay, GetTime()) - --print(unit) - --print("Adding", casterGUID, "to allstates") - if castTime > 1000 then - allstates[casterGUID] = { - changed = true, - show = true, - resort = true, - index = remainingTime, - icon = texture, - - progressType = "timed", - expirationTime = endTime / 1000, - duration = castTimeDisplay, - autoHide = true, - - name = caster, - spell = spell, - unitGUID = unitGUID, - castDisplay = castDisplay, - castTimeDisplay = castTimeDisplay, - unit = unit, - } - if aura_env.instructions[spell] ~= true then - allstates[casterGUID].instruction = aura_env.instructions[spell] - else - allstates[casterGUID].instruction = "" - end - end - end - end - elseif se == "SPELL_CAST_SUCCESS" then - if aura_env.spells[spell] then - if not allstates[casterGUID] then - allstates[casterGUID] = { - changed = true, - show = true, - resort = true, - index = 0, - icon = texture, - - progressType = "static", - value = 0, - total = 1, - - name = caster, - spell = spell, - unitGUID = unitGUID, - unit = unit, - } - if aura_env.instructions[spell] ~= true then - allstates[casterGUID].instruction = aura_env.instructions[spell] - else - allstates[casterGUID].instruction = "" - end - C_Timer.After(1, function() WeakAuras.ScanEvents("HIDE_ALLSTATES_CAST", casterGUID) end) - end - end - end - end - else - break - end - end - return true - end -end - ---[[ -DisplayText -Left: %total -Right: %castDisplay / %castTimeDisplay -]] - ---ON SHOW? -PlaySoundFile("Interface\\AddOns\\WeakAuras\\Media\\Sounds\\RobotBlip.ogg", "Master") -if aura_env.statee.unit then - aura_env.glow(aura_env.statee.unit, 1) -end - ---ON HIDE -if aura_env.statee.unit then - aura_env.glow(aura_env.statee.unit, 0) -end - ---INIT -aura_env.spells = { - --["Emblazoned Swipe"] = true, - ["Surge"] = true, - ["Stygian Blast"] = true, - ["Fragment of Despair"] = true, - ["Ruinous Strike"] = true, - ["Howling Dark "] = true, - - ["Dark Mending"] = true, - ["Sacrifice Soul"] = true, - ["Arrow Barrage"] = true, - ["Knife Dance"] = true, - ["Bonebreaking Strike"] = true, - ["Brutal Assault"] = true, - ["Indigestion"] = true, - ["Coup de Grace"] = true, - ["Raven's Dive"] = true, - - ["Shadow Wall"] = true, - ["Demonic Mending"] = true, - ["Devour Magic"] = true, - ["Shadow Wave"] = true, - ["Lumbering Crash"] = true, - ["Vile Roots"] = true, - ["Alluring Aroma"] = true, - ["Blistering Rain"] = true, - ["Floral Fulmination"] = true, - ["Throw Arcane Tome"] = true, - ["Throw Frost Tome"] = true, - ["Throw Silence Tome"] = true, - ["Summon Monstrosity"] = true, - ["Blinding Glare"] = true, - ["Stifling Satire"] = true, - ["Beguiling Biography"] = true, - ["Chaotic Energy"] = true, - - ["Hinder"] = true, - ["Quelling Strike"] = true, - ["Nightfall Orb"] = true, - ["Seal Magic"] = true, - ["Suppress"] = true, - ["Charging Station"] = true, - ["Bewitch"] = true, - ["Fel Detonation"] = true, - - ["Unnerving Screech"] = true, - ["Star Shower"] = true, - ["Maddening Roar"] = true, - ["Tormenting Eye"] = true, - - ["Storm"] = true, - ["Arc Lightning"] = true, - ["Mighty Slam"] = true, - ["Thundering Stomp"] = true, - ["Rejuvenating Waters"] = true, - ["Lightning Prod"] = true, - ["Restoration"] = true, - ["Polymorph: Fish"] = true, - - ["Etch"] = true, - ["Holy Radiance"] = true, - ["Cleansing Flames"] = true, - ["Unruly Yell"] = true, - - ["Soul Leech"] = true, - ["Terrifying Wail"] = true, - ["Pennies From Heaven"] = true, - ["Spotlight"] = true, --Kite away - ["Poetry Slam"] = true, --Interrupt - ["Final Curtainaw"] = true, --Run ay - ["Flashlight "] = true, --Face away - ["Shadow Rejuvenation"] = true, - ["Oath of Fealty"] = true, - - ["Unstable Energy"] = true, - ["Fel Bomb"] = true, - - ["Bone Chilling Scream"] = true, - ["Void Snap"] = true, - ["Brackwater Barrage"] = true, - ["Corrupted Bellow"] = true, - - ["Stone Gaze"] = true, - ["Piercing Shards"] = true, - ["Shatter"] = true, - ["Stone Bolt"] = true, - - ["Decimate"] = true, - ["Dread Screech"] = true, - ["Howling Dark"] = true, - ["Eternal Twilight"] = true, - ["Fragment of Despair"] = true, - - ["Prophecies of Doom"] = true, - ["Siphon Essence"] = true, - ["Torment"] = true, - ["Demonic Ascension"] = true, - ["Arcane Reconstitution"] = true, - ["Devour"] = true, - - ["Nightmares"] = true, - ["Unleash Fury"] = true, - ["Drain"] = true, - ["Scorching"] = true, - ["Meteor"] = true, - ["Detonate"] = true, - - ["Surge"] = true, - ["Stygian Blast"] = true, - ["Fragment of Despair"] = true, - ["Ruinous Strike"] = true, - ["Howling Dark"] = true, - ["Blood Assault"] = true, - ["Dread Screech"] = true, - ["Void Trap"] = true, - ["Ravaging Darkness"] = true, -} -aura_env.instructions = { - --["Emblazoned Swipe"] = "TEST", - - ["Dark Mending"] = "Interrupt", - ["Sacrifice Soul"] = true, - ["Arrow Barrage"] = true, - ["Knife Dance"] = true, - ["Bonebreaking Strike"] = "Dodge", - ["Brutal Assault"] = true, - ["Indigestion"] = true, - ["Coup de Grace"] = true, - ["Raven's Dive"] = "Dodge", - - ["Shadow Wall"] = true, - ["Demonic Mending"] = "Interrupt", - ["Devour Magic"] = true, - ["Shadow Wave"] = true, - ["Lumbering Crash"] = "Stun", - ["Vile Roots"] = true, - ["Alluring Aroma"] = "Stun", - ["Blistering Rain"] = "Stun", - ["Floral Fulmination"] = true, - ["Throw Arcane Tome"] = "Dodge", - ["Throw Frost Tome"] = "Dodge", - ["Throw Silence Tome"] = "Dodge", - ["Summon Monstrosity"] = "Stun/Kill", - ["Blinding Glare"] = "Face away", - ["Stifling Satire"] = true, - ["Beguiling Biography"] = true, - ["Chaotic Energy"] = true, - - ["Hinder"] = "Interrupt", - ["Quelling Strike"] = "Dodge", - ["Nightfall Orb"] = "Interrupt", - ["Seal Magic"] = "Interrupt", - ["Suppress"] = "Interrupt", - ["Charging Station"] = "Interrupt", - ["Bewitch"] = "Interrupt", - ["Fel Detonation"] = true, - - ["Unnerving Screech"] = "Interrupt", - ["Star Shower"] = "Interrupt", - ["Maddening Roar"] = true, - ["Tormenting Eye"] = true, - - ["Storm"] = "Interrupt", - ["Arc Lightning"] = "Interrupt", - ["Mighty Slam"] = "Stun", - ["Thundering Stomp"] = "Interrupt", - ["Rejuvenating Waters"] = "Interrupt", - ["Lightning Prod"] = "Interrupt", - ["Restoration"] = "Interrupt", - ["Polymorph: Fish"] = "Interrupt", - - ["Etch"] = "Interrupt", - ["Holy Radiance"] = "Interrupt", - ["Cleansing Flames"] = true, - ["Unruly Yell"] = "Interrupt", - - ["Soul Leech"] = "Interrupt", - ["Terrifying Wail"] = "Interrupt", - ["Pennies From Heaven"] = true, - ["Spotlight"] = "Move", --Kite away - ["Poetry Slam"] = "Interrupt", --Interrupt - ["Final Curtainaw"] = "Move", --Run ay - ["Flashlight "] = "Face away", --Face away - ["Shadow Rejuvenation"] = true, - ["Oath of Fealty"] = true, - - ["Unstable Energy"] = true, - ["Fel Bomb"] = "Soak", - - ["Bone Chilling Scream"] = "Interrupt", - ["Void Snap"] = "Interrupt", - ["Brackwater Barrage"] = "Dodge", - ["Corrupted Bellow"] = true, - - ["Stone Gaze"] = "Interrupt", - ["Piercing Shards"] = true, - ["Shatter"] = true, - ["Stone Bolt"] = "Interrupt", - - ["Decimate"] = true, - ["Dread Screech"] = true, - ["Howling Dark"] = true, - ["Eternal Twilight"] = true, - ["Fragment of Despair"] = true, - - ["Prophecies of Doom"] = "Stun", - ["Siphon Essence"] = true, - ["Torment"] = true, - ["Demonic Ascension"] = "Interrupt", - ["Arcane Reconstitution"] = true, - ["Devour"] = true, - - ["Nightmares"] = true, - ["Unleash Fury"] = true, - ["Drain"] = true, - ["Scorching"] = true, - ["Meteor"] = true, - ["Detonate"] = true, - - ["Surge"] = "Interrupt", - ["Stygian Blast"] = "Interrupt", - ["Fragment of Despair"] = "Soak", - ["Ruinous Strike"] = "Dodge", - ["Howling Dark"] = "Interrupt", - ["Blood Assault"] = "Stun", - ["Dread Screech"] = "Interrupt", - ["Void Trap"] = true, - ["Ravaging Darkness"] = true, -} -aura_env.glow = function(unit, s) - local nameplate = C_NamePlate.GetNamePlateForUnit(unit) - if nameplate and s == 1 then - ActionButton_ShowOverlayGlow(nameplate.UnitFrame.HealthBar) - else - ActionButton_HideOverlayGlow(nameplate.UnitFrame.HealthBar) - end -end +--[[ +TODO: +Add interrupts / stuns / breaks by looking at friendly spells cast on the GUID's +Add support for default UI (!!!) +Mob deaths remove namepaltes, handle glow maybe? +Rework for GetSpellInfo instead of GetCastingInfo + if no namepalte found GetSpellinfo!!!!!! BIG IQ +Watch for damage on avengers instead of cast +]] + +--TSU +--COMBAT_LOG_EVENT_UNFILTERED HIDE_ALLSTATES_CAST NAME_PLATE_UNIT_REMOVED NAME_PLATE_UNIT_ADDED +function(allstates, e, ...) + local scan = false + local casterGUID, caster, spell, se, interrupted = false + if e == "COMBAT_LOG_EVENT_UNFILTERED" then + se = select(2, ...) + if se == "SPELL_CAST_START" or se == "SPELL_CAST_SUCCESS" then + local casterFlags = select(6, ...) + if (bit.band(casterFlags, 0x00000840) == 0x00000840) == true then --Hostile NPC + casterGUID = select(4, ...) + caster = select(5, ...) + spell = select(13, ...) + scan = true + end + elseif e == "SPELL_CAST_FAILED" then + if (bit.band(casterFlags, 0x00000840) == 0x00000840) == true then --Hostile NPC + casterGUID = select(4, ...) + if allstates[casterGUID] then + allstates[casterGUID].show = true + allstates[casterGUID].changed = true + allstates[casterGUID].progressType = "static" + allstates[casterGUID].value = 1 + allstates[casterGUID].total = 1 + C_Timer.After(1.5, function() WeakAuras.ScanEvents("HIDE_ALLSTATES_CAST", casterGUID) end) + end + end + end + elseif e == "HIDE_ALLSTATES_CAST" then + local casterGUID = ... + if allstates[casterGUID] then + allstates[casterGUID].show = false + allstates[casterGUID].changed = true + return true + end + elseif e == "NAME_PLATE_UNIT_REMOVED" then + local u = ... + local uGUID = UnitGUID(u) + --print(uGUID, "nameplate removed") + if allstates[uGUID] then + aura_env.glow(u, 0) + end + elseif e == "NAME_PLATE_UNIT_ADDED" then + local u = ... + local uGUID = UnitGUID(u) + --print(uGUID, "nameplate added") + if allstates[uGUID] then + aura_env.glow(u, 1) + end + end + if scan == true then + for i = 1, 40 do + local unit = "nameplate" .. i + if UnitExists(unit) then + local unitGUID = UnitGUID(unit) + if unitGUID == casterGUID then + if se and (se == "SPELL_CAST_START" or se == "SPELL_CAST_SUCCESS") then + if UnitCastingInfo(unit) then + if aura_env.spells[spell] then + local _, _, _, texture, startTime, endTime = UnitCastingInfo(unit) + local remainingTime = math.floor(endTime - (GetTime() * 1000)) + local castTime = endTime - startTime + local castTimeDisplay = math.floor((castTime / 1000) * 10) / 10 + local castDisplay = math.floor((remainingTime / 1000) * 10) / 10 + local target = select(9, ...) + print(select(8, ...), select(9, ...), select(10, ...)) + --print(endTime / 1000, castTimeDisplay, GetTime()) + --print(unit) + --print("Adding", casterGUID, "to allstates") + if castTime > 1000 then + allstates[casterGUID] = { + changed = true, + show = true, + resort = true, + index = remainingTime, + icon = texture, + + progressType = "timed", + expirationTime = endTime / 1000, + duration = castTimeDisplay, + autoHide = true, + + name = caster, + spell = spell, + unitGUID = unitGUID, + castDisplay = castDisplay, + castTimeDisplay = castTimeDisplay, + unit = unit, + } + if aura_env.instructions[spell] ~= true then + allstates[casterGUID].instruction = aura_env.instructions[spell] + else + allstates[casterGUID].instruction = "" + end + end + end + end + elseif se == "SPELL_CAST_SUCCESS" then + if aura_env.spells[spell] then + if not allstates[casterGUID] then + allstates[casterGUID] = { + changed = true, + show = true, + resort = true, + index = 0, + icon = texture, + + progressType = "static", + value = 0, + total = 1, + + name = caster, + spell = spell, + unitGUID = unitGUID, + unit = unit, + } + if aura_env.instructions[spell] ~= true then + allstates[casterGUID].instruction = aura_env.instructions[spell] + else + allstates[casterGUID].instruction = "" + end + C_Timer.After(1, function() WeakAuras.ScanEvents("HIDE_ALLSTATES_CAST", casterGUID) end) + end + end + end + end + else + break + end + end + return true + end +end + +--[[ +DisplayText +Left: %total +Right: %castDisplay / %castTimeDisplay +]] + +--ON SHOW? +PlaySoundFile("Interface\\AddOns\\WeakAuras\\Media\\Sounds\\RobotBlip.ogg", "Master") +if aura_env.statee.unit then + aura_env.glow(aura_env.statee.unit, 1) +end + +--ON HIDE +if aura_env.statee.unit then + aura_env.glow(aura_env.statee.unit, 0) +end + +--INIT +aura_env.spells = { + --["Emblazoned Swipe"] = true, + ["Surge"] = true, + ["Stygian Blast"] = true, + ["Fragment of Despair"] = true, + ["Ruinous Strike"] = true, + ["Howling Dark "] = true, + + ["Dark Mending"] = true, + ["Sacrifice Soul"] = true, + ["Arrow Barrage"] = true, + ["Knife Dance"] = true, + ["Bonebreaking Strike"] = true, + ["Brutal Assault"] = true, + ["Indigestion"] = true, + ["Coup de Grace"] = true, + ["Raven's Dive"] = true, + + ["Shadow Wall"] = true, + ["Demonic Mending"] = true, + ["Devour Magic"] = true, + ["Shadow Wave"] = true, + ["Lumbering Crash"] = true, + ["Vile Roots"] = true, + ["Alluring Aroma"] = true, + ["Blistering Rain"] = true, + ["Floral Fulmination"] = true, + ["Throw Arcane Tome"] = true, + ["Throw Frost Tome"] = true, + ["Throw Silence Tome"] = true, + ["Summon Monstrosity"] = true, + ["Blinding Glare"] = true, + ["Stifling Satire"] = true, + ["Beguiling Biography"] = true, + ["Chaotic Energy"] = true, + + ["Hinder"] = true, + ["Quelling Strike"] = true, + ["Nightfall Orb"] = true, + ["Seal Magic"] = true, + ["Suppress"] = true, + ["Charging Station"] = true, + ["Bewitch"] = true, + ["Fel Detonation"] = true, + + ["Unnerving Screech"] = true, + ["Star Shower"] = true, + ["Maddening Roar"] = true, + ["Tormenting Eye"] = true, + + ["Storm"] = true, + ["Arc Lightning"] = true, + ["Mighty Slam"] = true, + ["Thundering Stomp"] = true, + ["Rejuvenating Waters"] = true, + ["Lightning Prod"] = true, + ["Restoration"] = true, + ["Polymorph: Fish"] = true, + + ["Etch"] = true, + ["Holy Radiance"] = true, + ["Cleansing Flames"] = true, + ["Unruly Yell"] = true, + + ["Soul Leech"] = true, + ["Terrifying Wail"] = true, + ["Pennies From Heaven"] = true, + ["Spotlight"] = true, --Kite away + ["Poetry Slam"] = true, --Interrupt + ["Final Curtainaw"] = true, --Run ay + ["Flashlight "] = true, --Face away + ["Shadow Rejuvenation"] = true, + ["Oath of Fealty"] = true, + + ["Unstable Energy"] = true, + ["Fel Bomb"] = true, + + ["Bone Chilling Scream"] = true, + ["Void Snap"] = true, + ["Brackwater Barrage"] = true, + ["Corrupted Bellow"] = true, + + ["Stone Gaze"] = true, + ["Piercing Shards"] = true, + ["Shatter"] = true, + ["Stone Bolt"] = true, + + ["Decimate"] = true, + ["Dread Screech"] = true, + ["Howling Dark"] = true, + ["Eternal Twilight"] = true, + ["Fragment of Despair"] = true, + + ["Prophecies of Doom"] = true, + ["Siphon Essence"] = true, + ["Torment"] = true, + ["Demonic Ascension"] = true, + ["Arcane Reconstitution"] = true, + ["Devour"] = true, + + ["Nightmares"] = true, + ["Unleash Fury"] = true, + ["Drain"] = true, + ["Scorching"] = true, + ["Meteor"] = true, + ["Detonate"] = true, + + ["Surge"] = true, + ["Stygian Blast"] = true, + ["Fragment of Despair"] = true, + ["Ruinous Strike"] = true, + ["Howling Dark"] = true, + ["Blood Assault"] = true, + ["Dread Screech"] = true, + ["Void Trap"] = true, + ["Ravaging Darkness"] = true, +} +aura_env.instructions = { + --["Emblazoned Swipe"] = "TEST", + + ["Dark Mending"] = "Interrupt", + ["Sacrifice Soul"] = true, + ["Arrow Barrage"] = true, + ["Knife Dance"] = true, + ["Bonebreaking Strike"] = "Dodge", + ["Brutal Assault"] = true, + ["Indigestion"] = true, + ["Coup de Grace"] = true, + ["Raven's Dive"] = "Dodge", + + ["Shadow Wall"] = true, + ["Demonic Mending"] = "Interrupt", + ["Devour Magic"] = true, + ["Shadow Wave"] = true, + ["Lumbering Crash"] = "Stun", + ["Vile Roots"] = true, + ["Alluring Aroma"] = "Stun", + ["Blistering Rain"] = "Stun", + ["Floral Fulmination"] = true, + ["Throw Arcane Tome"] = "Dodge", + ["Throw Frost Tome"] = "Dodge", + ["Throw Silence Tome"] = "Dodge", + ["Summon Monstrosity"] = "Stun/Kill", + ["Blinding Glare"] = "Face away", + ["Stifling Satire"] = true, + ["Beguiling Biography"] = true, + ["Chaotic Energy"] = true, + + ["Hinder"] = "Interrupt", + ["Quelling Strike"] = "Dodge", + ["Nightfall Orb"] = "Interrupt", + ["Seal Magic"] = "Interrupt", + ["Suppress"] = "Interrupt", + ["Charging Station"] = "Interrupt", + ["Bewitch"] = "Interrupt", + ["Fel Detonation"] = true, + + ["Unnerving Screech"] = "Interrupt", + ["Star Shower"] = "Interrupt", + ["Maddening Roar"] = true, + ["Tormenting Eye"] = true, + + ["Storm"] = "Interrupt", + ["Arc Lightning"] = "Interrupt", + ["Mighty Slam"] = "Stun", + ["Thundering Stomp"] = "Interrupt", + ["Rejuvenating Waters"] = "Interrupt", + ["Lightning Prod"] = "Interrupt", + ["Restoration"] = "Interrupt", + ["Polymorph: Fish"] = "Interrupt", + + ["Etch"] = "Interrupt", + ["Holy Radiance"] = "Interrupt", + ["Cleansing Flames"] = true, + ["Unruly Yell"] = "Interrupt", + + ["Soul Leech"] = "Interrupt", + ["Terrifying Wail"] = "Interrupt", + ["Pennies From Heaven"] = true, + ["Spotlight"] = "Move", --Kite away + ["Poetry Slam"] = "Interrupt", --Interrupt + ["Final Curtainaw"] = "Move", --Run ay + ["Flashlight "] = "Face away", --Face away + ["Shadow Rejuvenation"] = true, + ["Oath of Fealty"] = true, + + ["Unstable Energy"] = true, + ["Fel Bomb"] = "Soak", + + ["Bone Chilling Scream"] = "Interrupt", + ["Void Snap"] = "Interrupt", + ["Brackwater Barrage"] = "Dodge", + ["Corrupted Bellow"] = true, + + ["Stone Gaze"] = "Interrupt", + ["Piercing Shards"] = true, + ["Shatter"] = true, + ["Stone Bolt"] = "Interrupt", + + ["Decimate"] = true, + ["Dread Screech"] = true, + ["Howling Dark"] = true, + ["Eternal Twilight"] = true, + ["Fragment of Despair"] = true, + + ["Prophecies of Doom"] = "Stun", + ["Siphon Essence"] = true, + ["Torment"] = true, + ["Demonic Ascension"] = "Interrupt", + ["Arcane Reconstitution"] = true, + ["Devour"] = true, + + ["Nightmares"] = true, + ["Unleash Fury"] = true, + ["Drain"] = true, + ["Scorching"] = true, + ["Meteor"] = true, + ["Detonate"] = true, + + ["Surge"] = "Interrupt", + ["Stygian Blast"] = "Interrupt", + ["Fragment of Despair"] = "Soak", + ["Ruinous Strike"] = "Dodge", + ["Howling Dark"] = "Interrupt", + ["Blood Assault"] = "Stun", + ["Dread Screech"] = "Interrupt", + ["Void Trap"] = true, + ["Ravaging Darkness"] = true, +} +aura_env.glow = function(unit, s) + local nameplate = C_NamePlate.GetNamePlateForUnit(unit) + if nameplate and s == 1 then + ActionButton_ShowOverlayGlow(nameplate.UnitFrame.HealthBar) + else + ActionButton_HideOverlayGlow(nameplate.UnitFrame.HealthBar) + end +end diff --git a/WIP/Tank Stack Alerts(UNTESTED).lua b/WeakAuras/Projects/Tank Stack Alerts(UNTESTED).lua similarity index 95% rename from WIP/Tank Stack Alerts(UNTESTED).lua rename to WeakAuras/Projects/Tank Stack Alerts(UNTESTED).lua index f9857cb..bb173da 100644 --- a/WIP/Tank Stack Alerts(UNTESTED).lua +++ b/WeakAuras/Projects/Tank Stack Alerts(UNTESTED).lua @@ -1,76 +1,76 @@ ---DISPLAY -function() - return aura_env.stacks -end - ---EVERY FRAME TRIGGER -function() - if aura_env.tank ~= "" then - for k,v in pairs(aura_env.spells) do - if UnitDebuff("target", k) ~= nil then - local _,_,_,stacks,_,dur,exptime = UnitDebuff("target", k) - if v > 1 and stacks > v then - aura_env.stacks = stacks - aura_env.exptime = exptime - aura_env.dur = dur - return true - end - if v == 1 then - aura_env.exptime = exptime - aura_env.dur = dur - return true - end - if v == 0 then - local _,_,starttime,exptime = UnitCastingInfo("boss1") - aura_env.exptime = exptime - aura_env.dur = exptime - starttime - return true - end - end - end - end -end - ---GROUP_ROSTER_UPDATE -function() - aura_env.tank = "" - for i = 1, GetNumGroupMembers() do --Find other tank - if UnitGroupRolesAssigned("raid" .. i) == "TANK" and UnitName("raid" .. i) ~= UnitName("player") then - aura_env.tank = UnitName("raid" .. i) - print(aura_env.tank, i) - end - end -end - ---DURATION TRIGGER -function() - print(aura_env.dur, aura_env.exptime) - return aura_env.dur, aura_env.exptime, 1 -end - ---INIT -aura_env.tank = "" -aura_env.stacks = 0 -aura_env.exptime = 0 -aura_env.spells = -{ - --NH - ["Arcane Slash"] = 2, - ["Annihilate"] = 2, - ["Feast of Blood"] = 1, - ["Recursive Strikes"] = 7, - ["Gravitational Pull"] = 1, - ["Ablating Explosion"] = 1, - ["Bonds of Fel"] = 0, - ["Empowered Bonds of Fel"] = 0, - --ToS - ["Burning Armor"] = 1, - ["Jagged Abrasion"] = 5, - ["Judgment of Light"] = 1, -} -for i = 1, GetNumGroupMembers() do --Find other tank - if UnitGroupRolesAssigned("raid" .. i) == "TANK" and UnitName("raid" .. i) ~= UnitName("player") then - aura_env.tank = UnitName("raid" .. i) - print(aura_env.tank, i) - end +--DISPLAY +function() + return aura_env.stacks +end + +--EVERY FRAME TRIGGER +function() + if aura_env.tank ~= "" then + for k,v in pairs(aura_env.spells) do + if UnitDebuff("target", k) ~= nil then + local _,_,_,stacks,_,dur,exptime = UnitDebuff("target", k) + if v > 1 and stacks > v then + aura_env.stacks = stacks + aura_env.exptime = exptime + aura_env.dur = dur + return true + end + if v == 1 then + aura_env.exptime = exptime + aura_env.dur = dur + return true + end + if v == 0 then + local _,_,starttime,exptime = UnitCastingInfo("boss1") + aura_env.exptime = exptime + aura_env.dur = exptime - starttime + return true + end + end + end + end +end + +--GROUP_ROSTER_UPDATE +function() + aura_env.tank = "" + for i = 1, GetNumGroupMembers() do --Find other tank + if UnitGroupRolesAssigned("raid" .. i) == "TANK" and UnitName("raid" .. i) ~= UnitName("player") then + aura_env.tank = UnitName("raid" .. i) + print(aura_env.tank, i) + end + end +end + +--DURATION TRIGGER +function() + print(aura_env.dur, aura_env.exptime) + return aura_env.dur, aura_env.exptime, 1 +end + +--INIT +aura_env.tank = "" +aura_env.stacks = 0 +aura_env.exptime = 0 +aura_env.spells = +{ + --NH + ["Arcane Slash"] = 2, + ["Annihilate"] = 2, + ["Feast of Blood"] = 1, + ["Recursive Strikes"] = 7, + ["Gravitational Pull"] = 1, + ["Ablating Explosion"] = 1, + ["Bonds of Fel"] = 0, + ["Empowered Bonds of Fel"] = 0, + --ToS + ["Burning Armor"] = 1, + ["Jagged Abrasion"] = 5, + ["Judgment of Light"] = 1, +} +for i = 1, GetNumGroupMembers() do --Find other tank + if UnitGroupRolesAssigned("raid" .. i) == "TANK" and UnitName("raid" .. i) ~= UnitName("player") then + aura_env.tank = UnitName("raid" .. i) + print(aura_env.tank, i) + end end \ No newline at end of file diff --git a/Complete Projects/Legion/Target TTD.lua b/WeakAuras/Projects/Target TTD.lua similarity index 96% rename from Complete Projects/Legion/Target TTD.lua rename to WeakAuras/Projects/Target TTD.lua index ccb8bd0..3270439 100644 --- a/Complete Projects/Legion/Target TTD.lua +++ b/WeakAuras/Projects/Target TTD.lua @@ -1,43 +1,43 @@ ---GAVE UP ---COMBAT_LOG_EVENT_UNFILTERED -function(e, ...) - local se = select(2, ...) - if se and (se == "SPELL_DAMAGE" or se == "SPELL_PERIODIC_DAMAGE" or se == "SWING_DAMAGE") then - local targetguid = select(8, ...) - local hit = select(15, ...) - if se == "SWING_DAMAGE" then - hit = select(12, ...) - end - if targetguid and hit and targetguid == UnitGUID("target") then - aura_env.hitTable[#aura_env.hitTable + 1] = hit - aura_env.hitTimerTable[#aura_env.hitTimerTable + 1] = debugprofilestop() - end - end - return true -end - ---DISPLAY -function() - local totalDamage = 0 - if UnitExists("target") then - local thp, tmhp = UnitHealth("target"), UnitHealthMax("target") - for k, v in ipairs(aura_env.hitTable) do - totalDamage = totalDamage + v - end - return thp / (totalDamage / aura_env.lifespan) - end -end - ---EVERY_FRAME -function() - if aura_env.hitTimerTable[1] and debugprofilestop() - aura_env.hitTimerTable[1] > aura_env.lifespan then - table.remove(aura_env.hitTimerTable, 1) - table.remove(aura_env.hitTable, 1) - return true - end -end - ---INIT -aura_env.hitTable = {} -aura_env.hitTimerTable = {} -aura_env.lifespan = 5000 +--GAVE UP +--COMBAT_LOG_EVENT_UNFILTERED +function(e, ...) + local se = select(2, ...) + if se and (se == "SPELL_DAMAGE" or se == "SPELL_PERIODIC_DAMAGE" or se == "SWING_DAMAGE") then + local targetguid = select(8, ...) + local hit = select(15, ...) + if se == "SWING_DAMAGE" then + hit = select(12, ...) + end + if targetguid and hit and targetguid == UnitGUID("target") then + aura_env.hitTable[#aura_env.hitTable + 1] = hit + aura_env.hitTimerTable[#aura_env.hitTimerTable + 1] = debugprofilestop() + end + end + return true +end + +--DISPLAY +function() + local totalDamage = 0 + if UnitExists("target") then + local thp, tmhp = UnitHealth("target"), UnitHealthMax("target") + for k, v in ipairs(aura_env.hitTable) do + totalDamage = totalDamage + v + end + return thp / (totalDamage / aura_env.lifespan) + end +end + +--EVERY_FRAME +function() + if aura_env.hitTimerTable[1] and debugprofilestop() - aura_env.hitTimerTable[1] > aura_env.lifespan then + table.remove(aura_env.hitTimerTable, 1) + table.remove(aura_env.hitTable, 1) + return true + end +end + +--INIT +aura_env.hitTable = {} +aura_env.hitTimerTable = {} +aura_env.lifespan = 5000 diff --git a/Complete Projects/Legion/Taunt God.lua b/WeakAuras/Projects/Taunt God.lua similarity index 98% rename from Complete Projects/Legion/Taunt God.lua rename to WeakAuras/Projects/Taunt God.lua index a86e878..888de24 100644 --- a/Complete Projects/Legion/Taunt God.lua +++ b/WeakAuras/Projects/Taunt God.lua @@ -1,60 +1,60 @@ ---COMBAT_LOG_EVENT_UNFILTERED UPDATE_TAUNT_GOD -function(...) - local e = select(1, ...) - if e == "COMBAT_LOG_EVENT_UNFILTERED" then - local spellName = select(14, ...) - if (spellName == "Taunt" - or spellName == "Provoke" - or spellName == "Dark Command" - or spellName == "Torment" - or spellName == "Hand of Reckoning" - or spellName == "Growl") - and subEvent == "SPELL_CAST_SUCCESS" then - local target = select(10, ...) - local source = select(6, ...) - local subEvent = select(3, ...) - aura_env.spellName = spellName - aura_env.caster = source - aura_env.target = target - aura_env.cast_time = GetTime() - if aura_env.ticker then aura_env.ticker:Cancel() end - if not aura_env.ticker then aura_env.ticker = C_Timer.NewTicker(1, function() WeakAuras.ScanEvents("UPDATE_TAUNT_GOD") end) - return true - else - return false - end - end - elseif e == "UPDATE_TAUNT_GOD" then - return true - end -end - ---DISPLAY -function() - local source_class = UnitClass(aura_env.caster) - local source_class_color = "|cFFFFFFFF" - local time_color = "|cFFFFFFFF" - local target_color = "|cFFFFFFFF" - if aura_env.spellName == "Taunt" - or aura_env.spellName == "Provoke" - or aura_env.spellName == "Hand of Reckoning" - or aura_env.spellName == "Dark Command" - or aura_env.spellName == "Torment" - or aura_env.spellName == "Growl" - then cooldown_time = aura_env.cast_time + 8 else cooldown_time = 0 end - if (cooldown_time / GetTime()) < 1 then time_color = "|cFF00FF00" else time_color = "|cFFFF0000" end - if source_class == "Death Knight" then source_class_color = "|cFFC41F3B" - elseif source_class == "Demon Hunter" then source_class_color = "|cFFA330C9" - elseif source_class == "Druid" then source_class_color = "|cFFFF7D0A" - elseif source_class == "Hunter" then source_class_color = "|cFFABD473" - elseif source_class == "Mage" then source_class_color = "|cFF40C7EB" - elseif source_class == "Monk" then source_class_color = "|cFF00FF96" - elseif source_class == "Paladin" then source_class_color = "|cFFF58CBA" - elseif source_class == "Priest" then source_class_color = "|cFFFFFFFF" - elseif source_class == "Rogue" then source_class_color = "|cFFFFF569" - elseif source_class == "Shaman" then source_class_color = "|cFF0070DE" - elseif source_class == "Warlock" then source_class_color = "|cFF8787ED" - elseif source_class == "Warrior" then source_class_color = "|cFFC79C6E" end - if aura_env.target == UnitName("target") then target_color = "|cFF00FF00" else target_color = "|cFFFF0000" end - return source_class_color .. aura_env.caster .. "\n" .. target_color .. aura_env.target .. "\n" .. source_class_color .. aura_env.spellName .. "\n" .. time_color .. math.floor(GetTime() - aura_env.cast_time) -end +--COMBAT_LOG_EVENT_UNFILTERED UPDATE_TAUNT_GOD +function(...) + local e = select(1, ...) + if e == "COMBAT_LOG_EVENT_UNFILTERED" then + local spellName = select(14, ...) + if (spellName == "Taunt" + or spellName == "Provoke" + or spellName == "Dark Command" + or spellName == "Torment" + or spellName == "Hand of Reckoning" + or spellName == "Growl") + and subEvent == "SPELL_CAST_SUCCESS" then + local target = select(10, ...) + local source = select(6, ...) + local subEvent = select(3, ...) + aura_env.spellName = spellName + aura_env.caster = source + aura_env.target = target + aura_env.cast_time = GetTime() + if aura_env.ticker then aura_env.ticker:Cancel() end + if not aura_env.ticker then aura_env.ticker = C_Timer.NewTicker(1, function() WeakAuras.ScanEvents("UPDATE_TAUNT_GOD") end) + return true + else + return false + end + end + elseif e == "UPDATE_TAUNT_GOD" then + return true + end +end + +--DISPLAY +function() + local source_class = UnitClass(aura_env.caster) + local source_class_color = "|cFFFFFFFF" + local time_color = "|cFFFFFFFF" + local target_color = "|cFFFFFFFF" + if aura_env.spellName == "Taunt" + or aura_env.spellName == "Provoke" + or aura_env.spellName == "Hand of Reckoning" + or aura_env.spellName == "Dark Command" + or aura_env.spellName == "Torment" + or aura_env.spellName == "Growl" + then cooldown_time = aura_env.cast_time + 8 else cooldown_time = 0 end + if (cooldown_time / GetTime()) < 1 then time_color = "|cFF00FF00" else time_color = "|cFFFF0000" end + if source_class == "Death Knight" then source_class_color = "|cFFC41F3B" + elseif source_class == "Demon Hunter" then source_class_color = "|cFFA330C9" + elseif source_class == "Druid" then source_class_color = "|cFFFF7D0A" + elseif source_class == "Hunter" then source_class_color = "|cFFABD473" + elseif source_class == "Mage" then source_class_color = "|cFF40C7EB" + elseif source_class == "Monk" then source_class_color = "|cFF00FF96" + elseif source_class == "Paladin" then source_class_color = "|cFFF58CBA" + elseif source_class == "Priest" then source_class_color = "|cFFFFFFFF" + elseif source_class == "Rogue" then source_class_color = "|cFFFFF569" + elseif source_class == "Shaman" then source_class_color = "|cFF0070DE" + elseif source_class == "Warlock" then source_class_color = "|cFF8787ED" + elseif source_class == "Warrior" then source_class_color = "|cFFC79C6E" end + if aura_env.target == UnitName("target") then target_color = "|cFF00FF00" else target_color = "|cFFFF0000" end + return source_class_color .. aura_env.caster .. "\n" .. target_color .. aura_env.target .. "\n" .. source_class_color .. aura_env.spellName .. "\n" .. time_color .. math.floor(GetTime() - aura_env.cast_time) +end diff --git a/Complete Projects/Legion/Taunt.lua b/WeakAuras/Projects/Taunt.lua similarity index 97% rename from Complete Projects/Legion/Taunt.lua rename to WeakAuras/Projects/Taunt.lua index 72ef528..88c304e 100644 --- a/Complete Projects/Legion/Taunt.lua +++ b/WeakAuras/Projects/Taunt.lua @@ -1,58 +1,58 @@ -COMBAT_LOG_EVENT_UNFILTERED -function(...) - local spellName = select(14, ...) - local target = select(10, ...) - local source = select(6, ...) - local subEvent = select(3, ...) - if (spellName == "Taunt" - or spellName == "Provoke" - or spellName == "Dark Command" - or spellName == "Torment" - or spellName == "Hand of Reckoning" - or spellName == "Growl") - and subEvent == "SPELL_CAST_SUCCESS" then - aura_env.spellName = spellName - aura_env.caster = source - aura_env.target = target - aura_env.cast_time = GetTime() - return true - else - return false - end -end - -DISPLAY -function() - local source_class = UnitClass(aura_env.caster) - local source_class_color = "|cFFFFFFFF" - local time_color = "|cFFFFFFFF" - local target_color = "|cFFFFFFFF" - if aura_env.spellName == "Taunt" - or aura_env.spellName == "Provoke" - or aura_env.spellName == "Hand of Reckoning" - or aura_env.spellName == "Dark Command" - or aura_env.spellName == "Torment" - or aura_env.spellName == "Growl" - then cooldown_time = aura_env.cast_time + 8 end - if (cooldown_time / GetTime()) < 1 then time_color = "|cFF00FF00" else time_color = "|cFFFF0000" end - if source_class == "Death Knight" then source_class_color = "|cFFC41F3B" - elseif source_class == "Demon Hunter" then source_class_color = "|cFFA330C9" - elseif source_class == "Druid" then source_class_color = "|cFFFF7D0A" - elseif source_class == "Hunter" then source_class_color = "|cFFABD473" - elseif source_class == "Mage" then source_class_color = "|cFF40C7EB" - elseif source_class == "Monk" then source_class_color = "|cFF00FF96" - elseif source_class == "Paladin" then source_class_color = "|cFFF58CBA" - elseif source_class == "Priest" then source_class_color = "|cFFFFFFFF" - elseif source_class == "Rogue" then source_class_color = "|cFFFFF569" - elseif source_class == "Shaman" then source_class_color = "|cFF0070DE" - elseif source_class == "Warlock" then source_class_color = "|cFF8787ED" - elseif source_class == "Warrior" then source_class_color = "|cFFC79C6E" end - if aura_env.target == UnitName("target") then target_color = "|cFF00FF00" else target_color = "|cFFFF0000" end - return "|cFF0000FF------------------------------- \n" .. source_class_color .. aura_env.caster .. "\n" .. target_color .. aura_env.target .. "\n" .. source_class_color .. aura_env.spellName .. "\n" .. time_color .. math.floor(GetTime() - aura_env.cast_time) .. "\n|cFF0000FF-------------------------------" -end - -INIT -aura_env.target = "" -aura_env.cast_time = 0 -aura_env.spellName = "" -aura_env.caster = "" +COMBAT_LOG_EVENT_UNFILTERED +function(...) + local spellName = select(14, ...) + local target = select(10, ...) + local source = select(6, ...) + local subEvent = select(3, ...) + if (spellName == "Taunt" + or spellName == "Provoke" + or spellName == "Dark Command" + or spellName == "Torment" + or spellName == "Hand of Reckoning" + or spellName == "Growl") + and subEvent == "SPELL_CAST_SUCCESS" then + aura_env.spellName = spellName + aura_env.caster = source + aura_env.target = target + aura_env.cast_time = GetTime() + return true + else + return false + end +end + +DISPLAY +function() + local source_class = UnitClass(aura_env.caster) + local source_class_color = "|cFFFFFFFF" + local time_color = "|cFFFFFFFF" + local target_color = "|cFFFFFFFF" + if aura_env.spellName == "Taunt" + or aura_env.spellName == "Provoke" + or aura_env.spellName == "Hand of Reckoning" + or aura_env.spellName == "Dark Command" + or aura_env.spellName == "Torment" + or aura_env.spellName == "Growl" + then cooldown_time = aura_env.cast_time + 8 end + if (cooldown_time / GetTime()) < 1 then time_color = "|cFF00FF00" else time_color = "|cFFFF0000" end + if source_class == "Death Knight" then source_class_color = "|cFFC41F3B" + elseif source_class == "Demon Hunter" then source_class_color = "|cFFA330C9" + elseif source_class == "Druid" then source_class_color = "|cFFFF7D0A" + elseif source_class == "Hunter" then source_class_color = "|cFFABD473" + elseif source_class == "Mage" then source_class_color = "|cFF40C7EB" + elseif source_class == "Monk" then source_class_color = "|cFF00FF96" + elseif source_class == "Paladin" then source_class_color = "|cFFF58CBA" + elseif source_class == "Priest" then source_class_color = "|cFFFFFFFF" + elseif source_class == "Rogue" then source_class_color = "|cFFFFF569" + elseif source_class == "Shaman" then source_class_color = "|cFF0070DE" + elseif source_class == "Warlock" then source_class_color = "|cFF8787ED" + elseif source_class == "Warrior" then source_class_color = "|cFFC79C6E" end + if aura_env.target == UnitName("target") then target_color = "|cFF00FF00" else target_color = "|cFFFF0000" end + return "|cFF0000FF------------------------------- \n" .. source_class_color .. aura_env.caster .. "\n" .. target_color .. aura_env.target .. "\n" .. source_class_color .. aura_env.spellName .. "\n" .. time_color .. math.floor(GetTime() - aura_env.cast_time) .. "\n|cFF0000FF-------------------------------" +end + +INIT +aura_env.target = "" +aura_env.cast_time = 0 +aura_env.spellName = "" +aura_env.caster = "" diff --git a/Complete Projects/Legion/Titanguard.lua b/WeakAuras/Projects/Titanguard.lua similarity index 96% rename from Complete Projects/Legion/Titanguard.lua rename to WeakAuras/Projects/Titanguard.lua index c05504b..f9cb0ee 100644 --- a/Complete Projects/Legion/Titanguard.lua +++ b/WeakAuras/Projects/Titanguard.lua @@ -1,86 +1,86 @@ ---COMBAT_LOG_EVENT_UNFILTERED -function(e, ...) - local se = select(2, ...) - if se == "SPELL_AURA_APPLIED" then - local caster, target, buff = select(5, ...), select(9, ...), select(13, ...) - if caster == UnitName("player") and target == UnitName("player") and buff == "Bulwark of Flame" then - WeakAuras.ScanEvents("FUCKAGE_BEGIN") - C_Timer.After(3, function() WeakAuras.ScanEvents("FUCKAGE_STOP") end) - end - end -end - ---FUCKAGE_BEGIN FUCKAGE_STOP -function(e) - if e == "FUCKAGE_BEGIN" then - aura_env.fuckage = 1 - if UnitBuff("player", "Bulwark of Flame") then - local absorb = select(17, UnitBuff("player", "Bulwark of Flame")) - absorb = tonumber(absorb) - aura_env.maxAbsorb = absorb - end - elseif e == "FUCKAGE_STOP" then - aura_env.fuckage = 0 - end -end - ---EVERY FRAME TRIGGER -function() - if aura_env.fuckage == 1 then - return true - else - return false - end -end - ---EVERY FRAME DURATION -function() - if aura_env.fuckage == 1 then - if UnitBuff("player", "Bulwark of Flame") then - local absorb = select(17, UnitBuff("player", "Bulwark of Flame")) - absorb = tonumber(absorb) - if absorb > aura_env.maxAbsorb then - aura_env.maxAbsorb = absorb - end - aura_env.absorb = absorb - return absorb, aura_env.maxAbsorb, 1 - end - else - return 0, 0, 0 - end -end - ---NAME INFO -function() - return aura_env.shorten(aura_env.maxAbsorb) -end - ---STACKS -function() - return aura_env.shorten(aura_env.absorb) -end - ---INIT -aura_env.maxAbsorb = 0 -aura_env.fuckage = 0 -aura_env.absorb = 0 -aura_env.shorten = function(val) - local function round(var, n) - if (n) then - var = math.floor((var * 10 ^ n) + 0.5) / (10 ^ n) - else - var = math.floor(var + 0.5) - end - return var - end - local n = 2 - if val < 1e3 then - return round(val, n) - elseif val > 1e3 and val < 1e6 then - return round(val / 1e3, n) .. "k" - elseif val > 1e6 and val < 1e9 then - return round(val / 1e6, n) .. "M" - elseif val > 1e9 then - return round(val / 1e9, n) .. "G" - end -end +--COMBAT_LOG_EVENT_UNFILTERED +function(e, ...) + local se = select(2, ...) + if se == "SPELL_AURA_APPLIED" then + local caster, target, buff = select(5, ...), select(9, ...), select(13, ...) + if caster == UnitName("player") and target == UnitName("player") and buff == "Bulwark of Flame" then + WeakAuras.ScanEvents("FUCKAGE_BEGIN") + C_Timer.After(3, function() WeakAuras.ScanEvents("FUCKAGE_STOP") end) + end + end +end + +--FUCKAGE_BEGIN FUCKAGE_STOP +function(e) + if e == "FUCKAGE_BEGIN" then + aura_env.fuckage = 1 + if UnitBuff("player", "Bulwark of Flame") then + local absorb = select(17, UnitBuff("player", "Bulwark of Flame")) + absorb = tonumber(absorb) + aura_env.maxAbsorb = absorb + end + elseif e == "FUCKAGE_STOP" then + aura_env.fuckage = 0 + end +end + +--EVERY FRAME TRIGGER +function() + if aura_env.fuckage == 1 then + return true + else + return false + end +end + +--EVERY FRAME DURATION +function() + if aura_env.fuckage == 1 then + if UnitBuff("player", "Bulwark of Flame") then + local absorb = select(17, UnitBuff("player", "Bulwark of Flame")) + absorb = tonumber(absorb) + if absorb > aura_env.maxAbsorb then + aura_env.maxAbsorb = absorb + end + aura_env.absorb = absorb + return absorb, aura_env.maxAbsorb, 1 + end + else + return 0, 0, 0 + end +end + +--NAME INFO +function() + return aura_env.shorten(aura_env.maxAbsorb) +end + +--STACKS +function() + return aura_env.shorten(aura_env.absorb) +end + +--INIT +aura_env.maxAbsorb = 0 +aura_env.fuckage = 0 +aura_env.absorb = 0 +aura_env.shorten = function(val) + local function round(var, n) + if (n) then + var = math.floor((var * 10 ^ n) + 0.5) / (10 ^ n) + else + var = math.floor(var + 0.5) + end + return var + end + local n = 2 + if val < 1e3 then + return round(val, n) + elseif val > 1e3 and val < 1e6 then + return round(val / 1e3, n) .. "k" + elseif val > 1e6 and val < 1e9 then + return round(val / 1e6, n) .. "M" + elseif val > 1e9 then + return round(val / 1e9, n) .. "G" + end +end diff --git a/WIP/ToDissect.lua b/WeakAuras/Projects/ToDissect.lua similarity index 97% rename from WIP/ToDissect.lua rename to WeakAuras/Projects/ToDissect.lua index c76cc77..2b6fe2f 100644 --- a/WIP/ToDissect.lua +++ b/WeakAuras/Projects/ToDissect.lua @@ -1,564 +1,564 @@ -if select(2, UnitClass("player")) ~= "DRUID" then return end -local damageTable = {} -local updateInterval = 0.1 -local eventIndex = 0 -local playerGUID -local timeElapsed = 0 -local damageTP5S = 0 -local idFR = 22842 -local anouncedHealing = 0 - -local lowTransparency = 0.7 -local mediumTransparency = 0.5 -local highTransparency = 0.3 - -settingsFR = {} - -local frenzyRegenFrame = CreateFrame("Frame", "frenzyRegenFrame", UIParent) -frenzyRegenFrame:SetSize(100, 26) -frenzyRegenFrame:ClearAllPoints() -frenzyRegenFrame:SetPoint("CENTER", UIParent) -frenzyRegenFrame:SetBackdrop({ - bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", - tile = true, - tileSize = 16, - edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", - edgeSize = 12, - insets = { left = 3, right = 3, top = 3, bottom = 3 }, -}) -frenzyRegenFrame:SetBackdropColor(0, 0, 0, 0.4) -frenzyRegenFrame:SetBackdropBorderColor(0, 0, 0, 1) - -frenzyRegenFrame:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED") -frenzyRegenFrame:RegisterEvent("ADDON_LOADED") -frenzyRegenFrame:RegisterEvent("ACTIVE_TALENT_GROUP_CHANGED") -frenzyRegenFrame:RegisterEvent("UPDATE_SHAPESHIFT_FORM") -frenzyRegenFrame:RegisterEvent("PLAYER_REGEN_DISABLED") -frenzyRegenFrame:RegisterEvent("PLAYER_REGEN_ENABLED") -frenzyRegenFrame:RegisterEvent("ARTIFACT_UPDATE") -frenzyRegenFrame:RegisterEvent("PET_BATTLE_CLOSE") -frenzyRegenFrame:RegisterEvent("PET_BATTLE_OPENING_START") - -frenzyRegenFrame:EnableMouse(true) -frenzyRegenFrame:SetMovable(true) -frenzyRegenFrame:RegisterForDrag("LeftButton") -frenzyRegenFrame:SetScript("OnDragStart", frenzyRegenFrame.StartMoving) -frenzyRegenFrame:SetScript("OnDragStop", function(self) - self:StopMovingOrSizing() - settingsFR.XPos = self:GetLeft() - settingsFR.YPos = self:GetBottom() -end) - -frenzyRegenFrame.damageTakenBar = CreateFrame("StatusBar", nil, frenzyRegenFrame) -frenzyRegenFrame.damageTakenBar:SetPoint("TOPLEFT", 3, -3) -frenzyRegenFrame.damageTakenBar:SetPoint("TOPRIGHT", -3, -3) -frenzyRegenFrame.damageTakenBar:SetHeight(20) -frenzyRegenFrame.damageTakenBar:SetStatusBarTexture("Interface\\TargetingFrame\\UI-StatusBar") -frenzyRegenFrame.damageTakenBar:GetStatusBarTexture():SetHorizTile(false) -frenzyRegenFrame.damageTakenBar:GetStatusBarTexture():SetVertTile(false) -frenzyRegenFrame.damageTakenBar:SetMinMaxValues(0, 100) -frenzyRegenFrame.damageTakenBar:SetStatusBarColor(0, 0.65, 0) - -frenzyRegenFrame.damageTakenBar.bg = frenzyRegenFrame.damageTakenBar:CreateTexture(nil, "BACKGROUND") -frenzyRegenFrame.damageTakenBar.bg:SetTexture("Interface\\TARGETINGFRAME\\UI-StatusBar") -frenzyRegenFrame.damageTakenBar.bg:SetAllPoints(true) -frenzyRegenFrame.damageTakenBar.bg:SetVertexColor(0, 0.35, 0) - -frenzyRegenFrame.damageTakenBar.value = frenzyRegenFrame.damageTakenBar:CreateFontString(nil, "OVERLAY") -frenzyRegenFrame.damageTakenBar.value:SetPoint("CENTER", frenzyRegenFrame.damageTakenBar, "CENTER", 4, 0) -frenzyRegenFrame.damageTakenBar.value:SetFont("Fonts\\FRIZQT__.TTF", 16, "OUTLINE") -frenzyRegenFrame.damageTakenBar.value:SetJustifyH("LEFT") -frenzyRegenFrame.damageTakenBar.value:SetShadowOffset(1, -1) -frenzyRegenFrame.damageTakenBar.value:SetTextColor(0, 1, 0) - -function frenzyRegenFrame:getShortNumber(num) - if settingsFR.shortNumFlag then - if not num then - return 0 - elseif num >= 1e6 then - return format("%.1fM", num / 1e6) - elseif num >= 1e3 then - return format("%.1fK", num / 1e3) - else - return format("%d", num) - end - else - return format("%d", num) - end -end - -function frenzyRegenFrame:countHealing() - maxHP = UnitHealthMax("player") - - versatilityBonus = GetCombatRatingBonus(CR_VERSATILITY_DAMAGE_DONE) - + GetVersatilityBonus(CR_VERSATILITY_DAMAGE_DONE) - expectedHealing = math.max(maxHP * 0.05, damageTP5S * 0.5) * (1 + versatilityBonus / 100) - legendaryHealing = 0 - - if IsEquippedItem(137025) and settingsFR.legendaryFlag then -- Skysec's Hold - legendaryHealing = maxHP * 0.12 * (1 + versatilityBonus / 100) - end - - local t18set = { 124246, 124255, 124261, 124267, 124272 } - local t18items = 0 - for i = 1, 5, 1 do - if IsEquippedItem(t18set[i]) then t18items = t18items + 1 end - end - isT18eq = t18items > 1 - - local idx = 1 - repeat - local name, _, _, _, _, _, _, _, _, _, spellID = UnitAura("player", idx, nil, "PLAYER|HELPFUL|CANCELABLE") - if spellID and spellID == 213680 then -- Guardian of Elune - expectedHealing = expectedHealing * 1.2 - elseif isT18eq and spellID and spellID == 192081 then -- Ironfur id - expectedHealing = expectedHealing * 1.2 - elseif spellID and spellID == 47788 then -- Guardian Spirit - expectedHealing = expectedHealing * 1.4 - elseif spellID and spellID == 64844 then -- Divine Hymn - expectedHealing = expectedHealing * 1.1 - elseif spellID and spellID == 116849 then -- Life Cocoon - expectedHealing = expectedHealing * 1.5 - elseif spellID and spellID == 199368 then -- Legacy of the Ravencrest - expectedHealing = expectedHealing * 4 - end - idx = idx + 1 - until name == nil - - if IsEquippedItem(128821) then expectedHealing = expectedHealing * (1 + settingsFR.artifactBonus) end - - ratioHP = (expectedHealing + legendaryHealing) / maxHP * 100 - anouncedHealing = format("Self healing %d%% over 3 sec", ratioHP) - - charges, maxcharges = GetSpellCharges(idFR) - if settingsFR.statusTypeFlag == 1 then - frenzyRegenFrame.damageTakenBar:SetValue(charges * 100 / maxcharges) - else - frenzyRegenFrame.damageTakenBar:SetValue(ratioHP) - end - - if settingsFR.displayFlag == 0 then - frenzyRegenFrame.damageTakenBar.value:SetText(self:getShortNumber(expectedHealing + legendaryHealing)) - anouncedHealing = format("Self healing %s over 3 sec", self:getShortNumber(expectedHealing + legendaryHealing)) - elseif settingsFR.displayFlag == 1 then - frenzyRegenFrame.damageTakenBar.value:SetText(self:getShortNumber(expectedHealing / 6)) - else - if settingsFR.displayFlag == 2 then frenzyRegenFrame.damageTakenBar.value:SetText(format("%d%%", ratioHP)) end - end - - if settingsFR.showValueOnlyFlag then - transparency = 0 - frenzyRegenFrame:SetBackdropColor(0, 0, 0, 0) - frenzyRegenFrame:SetBackdropBorderColor(0, 0, 0, 0) - else - transparency = settingsFR.transparencyFlag - frenzyRegenFrame:SetBackdropColor(0, 0, 0, 0.4) - frenzyRegenFrame:SetBackdropBorderColor(0, 0, 0, 1) - end - start = GetSpellCooldown(idFR) - if start ~= 0 and settingsFR.greyOutFlag then - frenzyRegenFrame.damageTakenBar:SetStatusBarColor(0.212, 0.212, 0.212, transparency) - frenzyRegenFrame.damageTakenBar.bg:SetVertexColor(0.1, 0.1, 0.1, transparency) - frenzyRegenFrame.damageTakenBar.value:SetTextColor(0.5, 0.5, 0.5, settingsFR.transparencyFlag) - else - frenzyRegenFrame.damageTakenBar:SetStatusBarColor(0, 0.65, 0, transparency / 1.5) - if charges < maxcharges and settingsFR.statusTypeFlag == 1 then - frenzyRegenFrame.damageTakenBar:SetStatusBarColor(0.6, 0.65, 0, transparency / 1.5) - end - frenzyRegenFrame.damageTakenBar.bg:SetVertexColor(0, 0.35, 0, transparency) - frenzyRegenFrame.damageTakenBar.value:SetTextColor(0, 1, 0, settingsFR.transparencyFlag) - end -end - -function frenzyRegenFrame:updateVisibility() - if IsPlayerSpell(idFR) then - self:Show() - else - self:Hide() - return - end - if C_PetBattles.IsInBattle() then - self:Hide() - return - else - self:Show() - end - if settingsFR.hideOutOfBearFlag then - if GetShapeshiftFormID() == 5 then - self:Show() - else - self:Hide() - return - end - end - if settingsFR.hideOutOfCombatFlag then - if UnitAffectingCombat("player") then - self:Show() - else - self:Hide() - end - end - if settingsFR.ignoreMouseFlag and UnitAffectingCombat("player") then - frenzyRegenFrame:EnableMouse(false) - else - frenzyRegenFrame:EnableMouse(true) - end -end - -function frenzyRegenFrame:initFlags() - if settingsFR.displayFlag == nil then settingsFR.displayFlag = 0 end - if settingsFR.greyOutFlag == nil then settingsFR.greyOutFlag = true end - if settingsFR.movableFlag == nil then settingsFR.movableFlag = true end - if settingsFR.shortNumFlag == nil then settingsFR.shortNumFlag = true end - if settingsFR.hideOutOfCombatFlag == nil then settingsFR.hideOutOfCombatFlag = false end - if settingsFR.hideOutOfBearFlag == nil then settingsFR.hideOutOfBearFlag = false end - if settingsFR.legendaryFlag == nil then settingsFR.legendaryFlag = false end - if settingsFR.artifactBonus == nil then settingsFR.artifactBonus = 0 end - if settingsFR.transparencyFlag == nil then settingsFR.transparencyFlag = 1 end - if settingsFR.ignoreMouseFlag == nil then settingsFR.ignoreMouseFlag = false end - if settingsFR.announceFlag == nil then settingsFR.announceFlag = false end - if settingsFR.announceChannel == nil then settingsFR.announceChannel = "SAY" end - if settingsFR.statusTypeFlag == nil then settingsFR.statusTypeFlag = 0 end - if settingsFR.showValueOnlyFlag == nil then settingsFR.showValueOnlyFlag = false end -end - -function frenzyRegenFrame:updateArtifactBonus() - if IsEquippedItem(128821) then - local powers = C_ArtifactUI.GetPowers() - if powers ~= nil then - for i = 1, #powers do - local id, _, rank = C_ArtifactUI.GetPowerInfo(powers[i]) - if id == 200400 then -- Wildflesh id - settingsFR.artifactBonus = rank * 0.05 - end - end - end - end -end - -frenzyRegenFrame:SetScript("OnEvent", function(self, event, ...) - if event == "ADDON_LOADED" then - playerGUID = UnitGUID("player") - if settingsFR.XPos then - frenzyRegenFrame:ClearAllPoints() - frenzyRegenFrame:SetPoint("BOTTOMLEFT", settingsFR.XPos, settingsFR.YPos) - end - frenzyRegenFrame:initFlags() - if not settingsFR.movableFlag then frenzyRegenFrame:SetMovable(false) end - frenzyRegenFrame:updateVisibility() - elseif self:IsShown() and event == "COMBAT_LOG_EVENT_UNFILTERED" then - local _, eventType, _, sourceGUID, _, _, _, destGUID = ... - if settingsFR.announceFlag and sourceGUID == playerGUID and eventType == "SPELL_CAST_SUCCESS" then - local spellId = select(12, ...) - if spellId == idFR then -- Frenzied Regeneration - SendChatMessage(anouncedHealing, settingsFR.announceChannel, "Common") - end - end - if destGUID == playerGUID then - eventIndex = eventIndex + 1 - if eventType == "SWING_DAMAGE" then - local _, _, _, _, _, _, _, _, _, _, _, amount, _, _, _, _, absorbed = ... - if absorbed == nil then absorbed = 0 end - damageTable[eventIndex] = { time(), amount + absorbed } - elseif - eventType == "SPELL_DAMAGE" - or eventType == "SPELL_PERIODIC_DAMAGE" - or eventType == "RANGE_DAMAGE" - then - local _, _, _, _, _, _, _, _, _, _, _, _, _, _, amount, _, _, _, _, absorbed = ... - if absorbed == nil then absorbed = 0 end - damageTable[eventIndex] = { time(), amount + absorbed } - end - end - elseif - event == "ACTIVE_TALENT_GROUP_CHANGED" - or event == "UPDATE_SHAPESHIFT_FORM" - or event == "PLAYER_REGEN_DISABLED" - or event == "PLAYER_REGEN_ENABLED" - or event == "PET_BATTLE_CLOSE" - or event == "PET_BATTLE_OPENING_START" - then - frenzyRegenFrame:updateVisibility() - elseif event == "ARTIFACT_UPDATE" then - frenzyRegenFrame:updateArtifactBonus() - end -end) - -frenzyRegenFrame:SetScript("OnUpdate", function(self, elapsed) - timeElapsed = timeElapsed + elapsed - if timeElapsed >= updateInterval then - local t = time() - 5 - for k, v in pairs(damageTable) do - if v[1] <= t then - damageTable[k] = nil - else - damageTP5S = damageTP5S + v[2] - end - end - self:countHealing() - damageTP5S = 0 - timeElapsed = 0 - end -end) - -local dropDown = CreateFrame("Frame", "FRContextMenu", frenzyRegenFrame, "UIDropDownMenuTemplate") -UIDropDownMenu_Initialize(dropDown, function(self, level, menuList) - local info = UIDropDownMenu_CreateInfo() - if (level or 1) == 1 then - info.text = " Frame settings" - info.notCheckable = true - info.hasArrow = true - info.value = "position_submenu" - UIDropDownMenu_AddButton(info) - info.text = " Transparency" - info.value = "position_submenu2" - UIDropDownMenu_AddButton(info) - info.text = " Status bar shows..." - info.value = "position_submenu3" - UIDropDownMenu_AddButton(info) - info.text = " Announce healing..." - info.value = "position_submenu4" - UIDropDownMenu_AddButton(info) - info.hasArrow = false - info.isTitle = true - info.icon = "Interface\\Common\\UI-TooltipDivider-Transparent" - info.tSizeX = 0 - info.tSizeY = 8 - info.text = "" - info.iconOnly = true - info.iconInfo = { tFitDropDownSizeX = true } - UIDropDownMenu_AddButton(info) - info = UIDropDownMenu_CreateInfo() - info.notCheckable = false - info.hasArrow = false - info.text = "Show total heal" - info.func = function() settingsFR.displayFlag = 0 end - info.checked = function() return settingsFR.displayFlag == 0 end - UIDropDownMenu_AddButton(info) - info.text = "Show heal per tick" - info.func = function() settingsFR.displayFlag = 1 end - info.checked = function() return settingsFR.displayFlag == 1 end - UIDropDownMenu_AddButton(info) - info.text = "Show % of HP" - info.func = function() settingsFR.displayFlag = 2 end - info.checked = function() return settingsFR.displayFlag == 2 end - UIDropDownMenu_AddButton(info) - elseif level == 2 then - if UIDROPDOWNMENU_MENU_VALUE == "position_submenu" then - info.text = "Block position" - info.func = function() - frenzyRegenFrame:SetMovable(not frenzyRegenFrame:IsMovable()) - settingsFR.movableFlag = frenzyRegenFrame:IsMovable() - end - info.checked = function() return not frenzyRegenFrame:IsMovable() end - info.isNotRadio = true - UIDropDownMenu_AddButton(info, level) - end - if UIDROPDOWNMENU_MENU_VALUE == "position_submenu" then - info.text = "Ignore clicks in combat" - info.func = function() - settingsFR.ignoreMouseFlag = not settingsFR.ignoreMouseFlag - frenzyRegenFrame:updateVisibility() - end - info.checked = function() return settingsFR.ignoreMouseFlag end - UIDropDownMenu_AddButton(info, level) - end - if UIDROPDOWNMENU_MENU_VALUE == "position_submenu" then - info.hasArrow = false - info.isTitle = true - info.notCheckable = true - info.icon = "Interface\\Common\\UI-TooltipDivider-Transparent" - info.tSizeX = 0 - info.tSizeY = 8 - info.text = "" - info.iconOnly = true - info.iconInfo = { tFitDropDownSizeX = true } - UIDropDownMenu_AddButton(info, level) - end - if UIDROPDOWNMENU_MENU_VALUE == "position_submenu" then - info = UIDropDownMenu_CreateInfo() - info.notCheckable = false - info.isNotRadio = true - info.text = "Grey-out if FR's on cd" - info.func = function() settingsFR.greyOutFlag = not settingsFR.greyOutFlag end - info.checked = function() return settingsFR.greyOutFlag end - UIDropDownMenu_AddButton(info, level) - end - if UIDROPDOWNMENU_MENU_VALUE == "position_submenu" then - info.text = "Short numbers format" - info.func = function() settingsFR.shortNumFlag = not settingsFR.shortNumFlag end - info.checked = function() return settingsFR.shortNumFlag end - UIDropDownMenu_AddButton(info, level) - end - if UIDROPDOWNMENU_MENU_VALUE == "position_submenu" then - info.hasArrow = false - info.isTitle = true - info.notCheckable = true - info.icon = "Interface\\Common\\UI-TooltipDivider-Transparent" - info.tSizeX = 0 - info.tSizeY = 8 - info.text = "" - info.iconOnly = true - info.iconInfo = { tFitDropDownSizeX = true } - UIDropDownMenu_AddButton(info, level) - end - if UIDROPDOWNMENU_MENU_VALUE == "position_submenu" then - info = UIDropDownMenu_CreateInfo() - info.notCheckable = false - info.isNotRadio = true - info.text = "Include Skysec's Hold" - info.func = function() settingsFR.legendaryFlag = not settingsFR.legendaryFlag end - info.checked = function() return settingsFR.legendaryFlag end - UIDropDownMenu_AddButton(info, level) - end - if UIDROPDOWNMENU_MENU_VALUE == "position_submenu" then - info.hasArrow = false - info.isTitle = true - info.notCheckable = true - info.icon = "Interface\\Common\\UI-TooltipDivider-Transparent" - info.tSizeX = 0 - info.tSizeY = 8 - info.text = "" - info.iconOnly = true - info.iconInfo = { tFitDropDownSizeX = true } - UIDropDownMenu_AddButton(info, level) - end - if UIDROPDOWNMENU_MENU_VALUE == "position_submenu" then - info = UIDropDownMenu_CreateInfo() - info.notCheckable = false - info.text = "Hide when not in Bear form" - info.func = function() - settingsFR.hideOutOfBearFlag = not settingsFR.hideOutOfBearFlag - frenzyRegenFrame:updateVisibility() - print("To turn off this setting type '/frshow bear'") - end - info.checked = function() return settingsFR.hideOutOfBearFlag end - info.isNotRadio = true - UIDropDownMenu_AddButton(info, level) - end - if UIDROPDOWNMENU_MENU_VALUE == "position_submenu" then - info.text = "Hide when out of combat" - info.func = function() - settingsFR.hideOutOfCombatFlag = not settingsFR.hideOutOfCombatFlag - frenzyRegenFrame:updateVisibility() - print("To turn off this setting type '/frshow combat'") - end - info.checked = function() return settingsFR.hideOutOfCombatFlag end - UIDropDownMenu_AddButton(info, level) - end - if UIDROPDOWNMENU_MENU_VALUE == "position_submenu2" then - info.text = "Show value only" - info.func = function() settingsFR.showValueOnlyFlag = not settingsFR.showValueOnlyFlag end - info.checked = function() return settingsFR.showValueOnlyFlag end - info.isNotRadio = true - UIDropDownMenu_AddButton(info, level) - end - if UIDROPDOWNMENU_MENU_VALUE == "position_submenu2" then - info.hasArrow = false - info.isTitle = true - info.notCheckable = true - info.icon = "Interface\\Common\\UI-TooltipDivider-Transparent" - info.tSizeX = 0 - info.tSizeY = 8 - info.text = "" - info.iconOnly = true - info.iconInfo = { tFitDropDownSizeX = true } - UIDropDownMenu_AddButton(info, level) - end - if UIDROPDOWNMENU_MENU_VALUE == "position_submenu2" then - info = UIDropDownMenu_CreateInfo() - info.text = "OFF" - info.notCheckable = false - info.func = function() settingsFR.transparencyFlag = 1 end - info.checked = function() return settingsFR.transparencyFlag == 1 end - info.isNotRadio = false - UIDropDownMenu_AddButton(info, level) - end - if UIDROPDOWNMENU_MENU_VALUE == "position_submenu2" then - info.text = "Low" - info.func = function() settingsFR.transparencyFlag = lowTransparency end - info.checked = function() return settingsFR.transparencyFlag == lowTransparency end - UIDropDownMenu_AddButton(info, level) - end - if UIDROPDOWNMENU_MENU_VALUE == "position_submenu2" then - info.text = "Medium" - info.func = function() settingsFR.transparencyFlag = mediumTransparency end - info.checked = function() return settingsFR.transparencyFlag == mediumTransparency end - UIDropDownMenu_AddButton(info, level) - end - if UIDROPDOWNMENU_MENU_VALUE == "position_submenu2" then - info.text = "High" - info.func = function() settingsFR.transparencyFlag = highTransparency end - info.checked = function() return settingsFR.transparencyFlag == highTransparency end - UIDropDownMenu_AddButton(info, level) - end - if UIDROPDOWNMENU_MENU_VALUE == "position_submenu3" then - info.text = "% of HP" - info.func = function() settingsFR.statusTypeFlag = 0 end - info.checked = function() return settingsFR.statusTypeFlag == 0 end - UIDropDownMenu_AddButton(info, level) - end - if UIDROPDOWNMENU_MENU_VALUE == "position_submenu3" then - info.text = "Number of charges" - info.func = function() settingsFR.statusTypeFlag = 1 end - info.checked = function() return settingsFR.statusTypeFlag == 1 end - UIDropDownMenu_AddButton(info, level) - end - if UIDROPDOWNMENU_MENU_VALUE == "position_submenu4" then - info.text = "OFF" - info.func = function() settingsFR.announceFlag = false end - info.checked = function() return not settingsFR.announceFlag end - UIDropDownMenu_AddButton(info, level) - end - if UIDROPDOWNMENU_MENU_VALUE == "position_submenu4" then - info.text = "/Say" - info.func = function() - settingsFR.announceChannel = "SAY" - settingsFR.announceFlag = true - end - info.checked = function() return settingsFR.announceFlag and settingsFR.announceChannel == "SAY" end - UIDropDownMenu_AddButton(info, level) - end - if UIDROPDOWNMENU_MENU_VALUE == "position_submenu4" then - info.text = "/Yell" - info.func = function() - settingsFR.announceChannel = "YELL" - settingsFR.announceFlag = true - end - info.checked = function() return settingsFR.announceFlag and settingsFR.announceChannel == "YELL" end - UIDropDownMenu_AddButton(info, level) - end - if UIDROPDOWNMENU_MENU_VALUE == "position_submenu4" then - info.text = "/Party" - info.func = function() - settingsFR.announceChannel = "PARTY" - settingsFR.announceFlag = true - end - info.checked = function() return settingsFR.announceFlag and settingsFR.announceChannel == "PARTY" end - UIDropDownMenu_AddButton(info, level) - end - if UIDROPDOWNMENU_MENU_VALUE == "position_submenu4" then - info.text = "/Raid" - info.func = function() - settingsFR.announceChannel = "RAID" - settingsFR.announceFlag = true - end - info.checked = function() return settingsFR.announceFlag and settingsFR.announceChannel == "RAID" end - UIDropDownMenu_AddButton(info, level) - end - end -end) - -frenzyRegenFrame:SetScript("OnMouseDown", function(self, button) - if button == "RightButton" then ToggleDropDownMenu(1, nil, dropDown, "cursor", 3, -3) end -end) - -SLASH_FRENZYREGEN1 = "/frshow" -function SlashCmdList.FRENZYREGEN(msg, editbox) - if msg == "bear" then - settingsFR.hideOutOfBearFlag = not settingsFR.hideOutOfBearFlag - elseif msg == "combat" then - settingsFR.hideOutOfCombatFlag = not settingsFR.hideOutOfCombatFlag - end - frenzyRegenFrame:updateVisibility() -end +if select(2, UnitClass("player")) ~= "DRUID" then return end +local damageTable = {} +local updateInterval = 0.1 +local eventIndex = 0 +local playerGUID +local timeElapsed = 0 +local damageTP5S = 0 +local idFR = 22842 +local anouncedHealing = 0 + +local lowTransparency = 0.7 +local mediumTransparency = 0.5 +local highTransparency = 0.3 + +settingsFR = {} + +local frenzyRegenFrame = CreateFrame("Frame", "frenzyRegenFrame", UIParent) +frenzyRegenFrame:SetSize(100, 26) +frenzyRegenFrame:ClearAllPoints() +frenzyRegenFrame:SetPoint("CENTER", UIParent) +frenzyRegenFrame:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + tile = true, + tileSize = 16, + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + edgeSize = 12, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, +}) +frenzyRegenFrame:SetBackdropColor(0, 0, 0, 0.4) +frenzyRegenFrame:SetBackdropBorderColor(0, 0, 0, 1) + +frenzyRegenFrame:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED") +frenzyRegenFrame:RegisterEvent("ADDON_LOADED") +frenzyRegenFrame:RegisterEvent("ACTIVE_TALENT_GROUP_CHANGED") +frenzyRegenFrame:RegisterEvent("UPDATE_SHAPESHIFT_FORM") +frenzyRegenFrame:RegisterEvent("PLAYER_REGEN_DISABLED") +frenzyRegenFrame:RegisterEvent("PLAYER_REGEN_ENABLED") +frenzyRegenFrame:RegisterEvent("ARTIFACT_UPDATE") +frenzyRegenFrame:RegisterEvent("PET_BATTLE_CLOSE") +frenzyRegenFrame:RegisterEvent("PET_BATTLE_OPENING_START") + +frenzyRegenFrame:EnableMouse(true) +frenzyRegenFrame:SetMovable(true) +frenzyRegenFrame:RegisterForDrag("LeftButton") +frenzyRegenFrame:SetScript("OnDragStart", frenzyRegenFrame.StartMoving) +frenzyRegenFrame:SetScript("OnDragStop", function(self) + self:StopMovingOrSizing() + settingsFR.XPos = self:GetLeft() + settingsFR.YPos = self:GetBottom() +end) + +frenzyRegenFrame.damageTakenBar = CreateFrame("StatusBar", nil, frenzyRegenFrame) +frenzyRegenFrame.damageTakenBar:SetPoint("TOPLEFT", 3, -3) +frenzyRegenFrame.damageTakenBar:SetPoint("TOPRIGHT", -3, -3) +frenzyRegenFrame.damageTakenBar:SetHeight(20) +frenzyRegenFrame.damageTakenBar:SetStatusBarTexture("Interface\\TargetingFrame\\UI-StatusBar") +frenzyRegenFrame.damageTakenBar:GetStatusBarTexture():SetHorizTile(false) +frenzyRegenFrame.damageTakenBar:GetStatusBarTexture():SetVertTile(false) +frenzyRegenFrame.damageTakenBar:SetMinMaxValues(0, 100) +frenzyRegenFrame.damageTakenBar:SetStatusBarColor(0, 0.65, 0) + +frenzyRegenFrame.damageTakenBar.bg = frenzyRegenFrame.damageTakenBar:CreateTexture(nil, "BACKGROUND") +frenzyRegenFrame.damageTakenBar.bg:SetTexture("Interface\\TARGETINGFRAME\\UI-StatusBar") +frenzyRegenFrame.damageTakenBar.bg:SetAllPoints(true) +frenzyRegenFrame.damageTakenBar.bg:SetVertexColor(0, 0.35, 0) + +frenzyRegenFrame.damageTakenBar.value = frenzyRegenFrame.damageTakenBar:CreateFontString(nil, "OVERLAY") +frenzyRegenFrame.damageTakenBar.value:SetPoint("CENTER", frenzyRegenFrame.damageTakenBar, "CENTER", 4, 0) +frenzyRegenFrame.damageTakenBar.value:SetFont("Fonts\\FRIZQT__.TTF", 16, "OUTLINE") +frenzyRegenFrame.damageTakenBar.value:SetJustifyH("LEFT") +frenzyRegenFrame.damageTakenBar.value:SetShadowOffset(1, -1) +frenzyRegenFrame.damageTakenBar.value:SetTextColor(0, 1, 0) + +function frenzyRegenFrame:getShortNumber(num) + if settingsFR.shortNumFlag then + if not num then + return 0 + elseif num >= 1e6 then + return format("%.1fM", num / 1e6) + elseif num >= 1e3 then + return format("%.1fK", num / 1e3) + else + return format("%d", num) + end + else + return format("%d", num) + end +end + +function frenzyRegenFrame:countHealing() + maxHP = UnitHealthMax("player") + + versatilityBonus = GetCombatRatingBonus(CR_VERSATILITY_DAMAGE_DONE) + + GetVersatilityBonus(CR_VERSATILITY_DAMAGE_DONE) + expectedHealing = math.max(maxHP * 0.05, damageTP5S * 0.5) * (1 + versatilityBonus / 100) + legendaryHealing = 0 + + if IsEquippedItem(137025) and settingsFR.legendaryFlag then -- Skysec's Hold + legendaryHealing = maxHP * 0.12 * (1 + versatilityBonus / 100) + end + + local t18set = { 124246, 124255, 124261, 124267, 124272 } + local t18items = 0 + for i = 1, 5, 1 do + if IsEquippedItem(t18set[i]) then t18items = t18items + 1 end + end + isT18eq = t18items > 1 + + local idx = 1 + repeat + local name, _, _, _, _, _, _, _, _, _, spellID = UnitAura("player", idx, nil, "PLAYER|HELPFUL|CANCELABLE") + if spellID and spellID == 213680 then -- Guardian of Elune + expectedHealing = expectedHealing * 1.2 + elseif isT18eq and spellID and spellID == 192081 then -- Ironfur id + expectedHealing = expectedHealing * 1.2 + elseif spellID and spellID == 47788 then -- Guardian Spirit + expectedHealing = expectedHealing * 1.4 + elseif spellID and spellID == 64844 then -- Divine Hymn + expectedHealing = expectedHealing * 1.1 + elseif spellID and spellID == 116849 then -- Life Cocoon + expectedHealing = expectedHealing * 1.5 + elseif spellID and spellID == 199368 then -- Legacy of the Ravencrest + expectedHealing = expectedHealing * 4 + end + idx = idx + 1 + until name == nil + + if IsEquippedItem(128821) then expectedHealing = expectedHealing * (1 + settingsFR.artifactBonus) end + + ratioHP = (expectedHealing + legendaryHealing) / maxHP * 100 + anouncedHealing = format("Self healing %d%% over 3 sec", ratioHP) + + charges, maxcharges = GetSpellCharges(idFR) + if settingsFR.statusTypeFlag == 1 then + frenzyRegenFrame.damageTakenBar:SetValue(charges * 100 / maxcharges) + else + frenzyRegenFrame.damageTakenBar:SetValue(ratioHP) + end + + if settingsFR.displayFlag == 0 then + frenzyRegenFrame.damageTakenBar.value:SetText(self:getShortNumber(expectedHealing + legendaryHealing)) + anouncedHealing = format("Self healing %s over 3 sec", self:getShortNumber(expectedHealing + legendaryHealing)) + elseif settingsFR.displayFlag == 1 then + frenzyRegenFrame.damageTakenBar.value:SetText(self:getShortNumber(expectedHealing / 6)) + else + if settingsFR.displayFlag == 2 then frenzyRegenFrame.damageTakenBar.value:SetText(format("%d%%", ratioHP)) end + end + + if settingsFR.showValueOnlyFlag then + transparency = 0 + frenzyRegenFrame:SetBackdropColor(0, 0, 0, 0) + frenzyRegenFrame:SetBackdropBorderColor(0, 0, 0, 0) + else + transparency = settingsFR.transparencyFlag + frenzyRegenFrame:SetBackdropColor(0, 0, 0, 0.4) + frenzyRegenFrame:SetBackdropBorderColor(0, 0, 0, 1) + end + start = GetSpellCooldown(idFR) + if start ~= 0 and settingsFR.greyOutFlag then + frenzyRegenFrame.damageTakenBar:SetStatusBarColor(0.212, 0.212, 0.212, transparency) + frenzyRegenFrame.damageTakenBar.bg:SetVertexColor(0.1, 0.1, 0.1, transparency) + frenzyRegenFrame.damageTakenBar.value:SetTextColor(0.5, 0.5, 0.5, settingsFR.transparencyFlag) + else + frenzyRegenFrame.damageTakenBar:SetStatusBarColor(0, 0.65, 0, transparency / 1.5) + if charges < maxcharges and settingsFR.statusTypeFlag == 1 then + frenzyRegenFrame.damageTakenBar:SetStatusBarColor(0.6, 0.65, 0, transparency / 1.5) + end + frenzyRegenFrame.damageTakenBar.bg:SetVertexColor(0, 0.35, 0, transparency) + frenzyRegenFrame.damageTakenBar.value:SetTextColor(0, 1, 0, settingsFR.transparencyFlag) + end +end + +function frenzyRegenFrame:updateVisibility() + if IsPlayerSpell(idFR) then + self:Show() + else + self:Hide() + return + end + if C_PetBattles.IsInBattle() then + self:Hide() + return + else + self:Show() + end + if settingsFR.hideOutOfBearFlag then + if GetShapeshiftFormID() == 5 then + self:Show() + else + self:Hide() + return + end + end + if settingsFR.hideOutOfCombatFlag then + if UnitAffectingCombat("player") then + self:Show() + else + self:Hide() + end + end + if settingsFR.ignoreMouseFlag and UnitAffectingCombat("player") then + frenzyRegenFrame:EnableMouse(false) + else + frenzyRegenFrame:EnableMouse(true) + end +end + +function frenzyRegenFrame:initFlags() + if settingsFR.displayFlag == nil then settingsFR.displayFlag = 0 end + if settingsFR.greyOutFlag == nil then settingsFR.greyOutFlag = true end + if settingsFR.movableFlag == nil then settingsFR.movableFlag = true end + if settingsFR.shortNumFlag == nil then settingsFR.shortNumFlag = true end + if settingsFR.hideOutOfCombatFlag == nil then settingsFR.hideOutOfCombatFlag = false end + if settingsFR.hideOutOfBearFlag == nil then settingsFR.hideOutOfBearFlag = false end + if settingsFR.legendaryFlag == nil then settingsFR.legendaryFlag = false end + if settingsFR.artifactBonus == nil then settingsFR.artifactBonus = 0 end + if settingsFR.transparencyFlag == nil then settingsFR.transparencyFlag = 1 end + if settingsFR.ignoreMouseFlag == nil then settingsFR.ignoreMouseFlag = false end + if settingsFR.announceFlag == nil then settingsFR.announceFlag = false end + if settingsFR.announceChannel == nil then settingsFR.announceChannel = "SAY" end + if settingsFR.statusTypeFlag == nil then settingsFR.statusTypeFlag = 0 end + if settingsFR.showValueOnlyFlag == nil then settingsFR.showValueOnlyFlag = false end +end + +function frenzyRegenFrame:updateArtifactBonus() + if IsEquippedItem(128821) then + local powers = C_ArtifactUI.GetPowers() + if powers ~= nil then + for i = 1, #powers do + local id, _, rank = C_ArtifactUI.GetPowerInfo(powers[i]) + if id == 200400 then -- Wildflesh id + settingsFR.artifactBonus = rank * 0.05 + end + end + end + end +end + +frenzyRegenFrame:SetScript("OnEvent", function(self, event, ...) + if event == "ADDON_LOADED" then + playerGUID = UnitGUID("player") + if settingsFR.XPos then + frenzyRegenFrame:ClearAllPoints() + frenzyRegenFrame:SetPoint("BOTTOMLEFT", settingsFR.XPos, settingsFR.YPos) + end + frenzyRegenFrame:initFlags() + if not settingsFR.movableFlag then frenzyRegenFrame:SetMovable(false) end + frenzyRegenFrame:updateVisibility() + elseif self:IsShown() and event == "COMBAT_LOG_EVENT_UNFILTERED" then + local _, eventType, _, sourceGUID, _, _, _, destGUID = ... + if settingsFR.announceFlag and sourceGUID == playerGUID and eventType == "SPELL_CAST_SUCCESS" then + local spellId = select(12, ...) + if spellId == idFR then -- Frenzied Regeneration + SendChatMessage(anouncedHealing, settingsFR.announceChannel, "Common") + end + end + if destGUID == playerGUID then + eventIndex = eventIndex + 1 + if eventType == "SWING_DAMAGE" then + local _, _, _, _, _, _, _, _, _, _, _, amount, _, _, _, _, absorbed = ... + if absorbed == nil then absorbed = 0 end + damageTable[eventIndex] = { time(), amount + absorbed } + elseif + eventType == "SPELL_DAMAGE" + or eventType == "SPELL_PERIODIC_DAMAGE" + or eventType == "RANGE_DAMAGE" + then + local _, _, _, _, _, _, _, _, _, _, _, _, _, _, amount, _, _, _, _, absorbed = ... + if absorbed == nil then absorbed = 0 end + damageTable[eventIndex] = { time(), amount + absorbed } + end + end + elseif + event == "ACTIVE_TALENT_GROUP_CHANGED" + or event == "UPDATE_SHAPESHIFT_FORM" + or event == "PLAYER_REGEN_DISABLED" + or event == "PLAYER_REGEN_ENABLED" + or event == "PET_BATTLE_CLOSE" + or event == "PET_BATTLE_OPENING_START" + then + frenzyRegenFrame:updateVisibility() + elseif event == "ARTIFACT_UPDATE" then + frenzyRegenFrame:updateArtifactBonus() + end +end) + +frenzyRegenFrame:SetScript("OnUpdate", function(self, elapsed) + timeElapsed = timeElapsed + elapsed + if timeElapsed >= updateInterval then + local t = time() - 5 + for k, v in pairs(damageTable) do + if v[1] <= t then + damageTable[k] = nil + else + damageTP5S = damageTP5S + v[2] + end + end + self:countHealing() + damageTP5S = 0 + timeElapsed = 0 + end +end) + +local dropDown = CreateFrame("Frame", "FRContextMenu", frenzyRegenFrame, "UIDropDownMenuTemplate") +UIDropDownMenu_Initialize(dropDown, function(self, level, menuList) + local info = UIDropDownMenu_CreateInfo() + if (level or 1) == 1 then + info.text = " Frame settings" + info.notCheckable = true + info.hasArrow = true + info.value = "position_submenu" + UIDropDownMenu_AddButton(info) + info.text = " Transparency" + info.value = "position_submenu2" + UIDropDownMenu_AddButton(info) + info.text = " Status bar shows..." + info.value = "position_submenu3" + UIDropDownMenu_AddButton(info) + info.text = " Announce healing..." + info.value = "position_submenu4" + UIDropDownMenu_AddButton(info) + info.hasArrow = false + info.isTitle = true + info.icon = "Interface\\Common\\UI-TooltipDivider-Transparent" + info.tSizeX = 0 + info.tSizeY = 8 + info.text = "" + info.iconOnly = true + info.iconInfo = { tFitDropDownSizeX = true } + UIDropDownMenu_AddButton(info) + info = UIDropDownMenu_CreateInfo() + info.notCheckable = false + info.hasArrow = false + info.text = "Show total heal" + info.func = function() settingsFR.displayFlag = 0 end + info.checked = function() return settingsFR.displayFlag == 0 end + UIDropDownMenu_AddButton(info) + info.text = "Show heal per tick" + info.func = function() settingsFR.displayFlag = 1 end + info.checked = function() return settingsFR.displayFlag == 1 end + UIDropDownMenu_AddButton(info) + info.text = "Show % of HP" + info.func = function() settingsFR.displayFlag = 2 end + info.checked = function() return settingsFR.displayFlag == 2 end + UIDropDownMenu_AddButton(info) + elseif level == 2 then + if UIDROPDOWNMENU_MENU_VALUE == "position_submenu" then + info.text = "Block position" + info.func = function() + frenzyRegenFrame:SetMovable(not frenzyRegenFrame:IsMovable()) + settingsFR.movableFlag = frenzyRegenFrame:IsMovable() + end + info.checked = function() return not frenzyRegenFrame:IsMovable() end + info.isNotRadio = true + UIDropDownMenu_AddButton(info, level) + end + if UIDROPDOWNMENU_MENU_VALUE == "position_submenu" then + info.text = "Ignore clicks in combat" + info.func = function() + settingsFR.ignoreMouseFlag = not settingsFR.ignoreMouseFlag + frenzyRegenFrame:updateVisibility() + end + info.checked = function() return settingsFR.ignoreMouseFlag end + UIDropDownMenu_AddButton(info, level) + end + if UIDROPDOWNMENU_MENU_VALUE == "position_submenu" then + info.hasArrow = false + info.isTitle = true + info.notCheckable = true + info.icon = "Interface\\Common\\UI-TooltipDivider-Transparent" + info.tSizeX = 0 + info.tSizeY = 8 + info.text = "" + info.iconOnly = true + info.iconInfo = { tFitDropDownSizeX = true } + UIDropDownMenu_AddButton(info, level) + end + if UIDROPDOWNMENU_MENU_VALUE == "position_submenu" then + info = UIDropDownMenu_CreateInfo() + info.notCheckable = false + info.isNotRadio = true + info.text = "Grey-out if FR's on cd" + info.func = function() settingsFR.greyOutFlag = not settingsFR.greyOutFlag end + info.checked = function() return settingsFR.greyOutFlag end + UIDropDownMenu_AddButton(info, level) + end + if UIDROPDOWNMENU_MENU_VALUE == "position_submenu" then + info.text = "Short numbers format" + info.func = function() settingsFR.shortNumFlag = not settingsFR.shortNumFlag end + info.checked = function() return settingsFR.shortNumFlag end + UIDropDownMenu_AddButton(info, level) + end + if UIDROPDOWNMENU_MENU_VALUE == "position_submenu" then + info.hasArrow = false + info.isTitle = true + info.notCheckable = true + info.icon = "Interface\\Common\\UI-TooltipDivider-Transparent" + info.tSizeX = 0 + info.tSizeY = 8 + info.text = "" + info.iconOnly = true + info.iconInfo = { tFitDropDownSizeX = true } + UIDropDownMenu_AddButton(info, level) + end + if UIDROPDOWNMENU_MENU_VALUE == "position_submenu" then + info = UIDropDownMenu_CreateInfo() + info.notCheckable = false + info.isNotRadio = true + info.text = "Include Skysec's Hold" + info.func = function() settingsFR.legendaryFlag = not settingsFR.legendaryFlag end + info.checked = function() return settingsFR.legendaryFlag end + UIDropDownMenu_AddButton(info, level) + end + if UIDROPDOWNMENU_MENU_VALUE == "position_submenu" then + info.hasArrow = false + info.isTitle = true + info.notCheckable = true + info.icon = "Interface\\Common\\UI-TooltipDivider-Transparent" + info.tSizeX = 0 + info.tSizeY = 8 + info.text = "" + info.iconOnly = true + info.iconInfo = { tFitDropDownSizeX = true } + UIDropDownMenu_AddButton(info, level) + end + if UIDROPDOWNMENU_MENU_VALUE == "position_submenu" then + info = UIDropDownMenu_CreateInfo() + info.notCheckable = false + info.text = "Hide when not in Bear form" + info.func = function() + settingsFR.hideOutOfBearFlag = not settingsFR.hideOutOfBearFlag + frenzyRegenFrame:updateVisibility() + print("To turn off this setting type '/frshow bear'") + end + info.checked = function() return settingsFR.hideOutOfBearFlag end + info.isNotRadio = true + UIDropDownMenu_AddButton(info, level) + end + if UIDROPDOWNMENU_MENU_VALUE == "position_submenu" then + info.text = "Hide when out of combat" + info.func = function() + settingsFR.hideOutOfCombatFlag = not settingsFR.hideOutOfCombatFlag + frenzyRegenFrame:updateVisibility() + print("To turn off this setting type '/frshow combat'") + end + info.checked = function() return settingsFR.hideOutOfCombatFlag end + UIDropDownMenu_AddButton(info, level) + end + if UIDROPDOWNMENU_MENU_VALUE == "position_submenu2" then + info.text = "Show value only" + info.func = function() settingsFR.showValueOnlyFlag = not settingsFR.showValueOnlyFlag end + info.checked = function() return settingsFR.showValueOnlyFlag end + info.isNotRadio = true + UIDropDownMenu_AddButton(info, level) + end + if UIDROPDOWNMENU_MENU_VALUE == "position_submenu2" then + info.hasArrow = false + info.isTitle = true + info.notCheckable = true + info.icon = "Interface\\Common\\UI-TooltipDivider-Transparent" + info.tSizeX = 0 + info.tSizeY = 8 + info.text = "" + info.iconOnly = true + info.iconInfo = { tFitDropDownSizeX = true } + UIDropDownMenu_AddButton(info, level) + end + if UIDROPDOWNMENU_MENU_VALUE == "position_submenu2" then + info = UIDropDownMenu_CreateInfo() + info.text = "OFF" + info.notCheckable = false + info.func = function() settingsFR.transparencyFlag = 1 end + info.checked = function() return settingsFR.transparencyFlag == 1 end + info.isNotRadio = false + UIDropDownMenu_AddButton(info, level) + end + if UIDROPDOWNMENU_MENU_VALUE == "position_submenu2" then + info.text = "Low" + info.func = function() settingsFR.transparencyFlag = lowTransparency end + info.checked = function() return settingsFR.transparencyFlag == lowTransparency end + UIDropDownMenu_AddButton(info, level) + end + if UIDROPDOWNMENU_MENU_VALUE == "position_submenu2" then + info.text = "Medium" + info.func = function() settingsFR.transparencyFlag = mediumTransparency end + info.checked = function() return settingsFR.transparencyFlag == mediumTransparency end + UIDropDownMenu_AddButton(info, level) + end + if UIDROPDOWNMENU_MENU_VALUE == "position_submenu2" then + info.text = "High" + info.func = function() settingsFR.transparencyFlag = highTransparency end + info.checked = function() return settingsFR.transparencyFlag == highTransparency end + UIDropDownMenu_AddButton(info, level) + end + if UIDROPDOWNMENU_MENU_VALUE == "position_submenu3" then + info.text = "% of HP" + info.func = function() settingsFR.statusTypeFlag = 0 end + info.checked = function() return settingsFR.statusTypeFlag == 0 end + UIDropDownMenu_AddButton(info, level) + end + if UIDROPDOWNMENU_MENU_VALUE == "position_submenu3" then + info.text = "Number of charges" + info.func = function() settingsFR.statusTypeFlag = 1 end + info.checked = function() return settingsFR.statusTypeFlag == 1 end + UIDropDownMenu_AddButton(info, level) + end + if UIDROPDOWNMENU_MENU_VALUE == "position_submenu4" then + info.text = "OFF" + info.func = function() settingsFR.announceFlag = false end + info.checked = function() return not settingsFR.announceFlag end + UIDropDownMenu_AddButton(info, level) + end + if UIDROPDOWNMENU_MENU_VALUE == "position_submenu4" then + info.text = "/Say" + info.func = function() + settingsFR.announceChannel = "SAY" + settingsFR.announceFlag = true + end + info.checked = function() return settingsFR.announceFlag and settingsFR.announceChannel == "SAY" end + UIDropDownMenu_AddButton(info, level) + end + if UIDROPDOWNMENU_MENU_VALUE == "position_submenu4" then + info.text = "/Yell" + info.func = function() + settingsFR.announceChannel = "YELL" + settingsFR.announceFlag = true + end + info.checked = function() return settingsFR.announceFlag and settingsFR.announceChannel == "YELL" end + UIDropDownMenu_AddButton(info, level) + end + if UIDROPDOWNMENU_MENU_VALUE == "position_submenu4" then + info.text = "/Party" + info.func = function() + settingsFR.announceChannel = "PARTY" + settingsFR.announceFlag = true + end + info.checked = function() return settingsFR.announceFlag and settingsFR.announceChannel == "PARTY" end + UIDropDownMenu_AddButton(info, level) + end + if UIDROPDOWNMENU_MENU_VALUE == "position_submenu4" then + info.text = "/Raid" + info.func = function() + settingsFR.announceChannel = "RAID" + settingsFR.announceFlag = true + end + info.checked = function() return settingsFR.announceFlag and settingsFR.announceChannel == "RAID" end + UIDropDownMenu_AddButton(info, level) + end + end +end) + +frenzyRegenFrame:SetScript("OnMouseDown", function(self, button) + if button == "RightButton" then ToggleDropDownMenu(1, nil, dropDown, "cursor", 3, -3) end +end) + +SLASH_FRENZYREGEN1 = "/frshow" +function SlashCmdList.FRENZYREGEN(msg, editbox) + if msg == "bear" then + settingsFR.hideOutOfBearFlag = not settingsFR.hideOutOfBearFlag + elseif msg == "combat" then + settingsFR.hideOutOfCombatFlag = not settingsFR.hideOutOfCombatFlag + end + frenzyRegenFrame:updateVisibility() +end diff --git a/Complete Projects/Legion/Trinket Equip.lua b/WeakAuras/Projects/Trinket Equip.lua similarity index 97% rename from Complete Projects/Legion/Trinket Equip.lua rename to WeakAuras/Projects/Trinket Equip.lua index 71a381d..03e030c 100644 --- a/Complete Projects/Legion/Trinket Equip.lua +++ b/WeakAuras/Projects/Trinket Equip.lua @@ -1,62 +1,62 @@ ---Trigger on combat ---Check bag for amount ---Maybe grey out if no trinket? ---Maybe make equipped glow :? ---Or fuck with opacity ---Make two rows ---PLAYER_REGEN_DISABLED PLAYER_REGEN_ENABLED -function(e) - if e == "PLAYER_REGEN_ENABLED" then - local row = 1 - for k, v in ipairs(aura_env.daiTrinket) do - if not WeakAurasSaved.CustomTrash.TrinketFuckery.Buttons[k] or not WeakAurasSaved.CustomTrash.TrinketFuckery.Buttons[k][0] then - --Frame does not exist, create new frame - local iname = GetItemInfo(v) - local icon = GetItemIcon(v) - WeakAurasSaved.CustomTrash.TrinketFuckery.Buttons[k] = CreateFrame("Button", nil, aura_env.region, "SecureActionButtonTemplate") - WeakAurasSaved.CustomTrash.TrinketFuckery.Buttons[k]:SetAttribute("type", "macro") - WeakAurasSaved.CustomTrash.TrinketFuckery.Buttons[k]:SetAttribute("macrotext", format("/equip %s", iname)) - WeakAurasSaved.CustomTrash.TrinketFuckery.Buttons[k]:RegisterForClicks("LeftButtonDown") - print(k, "at", ((k - 1) * aura_env.size) - ((row - 1) * 8 * aura_env.size), - row * aura_env.size) - WeakAurasSaved.CustomTrash.TrinketFuckery.Buttons[k]:SetPoint("CENTER", aura_env.region, "CENTER", ((k - 1) * aura_env.size) - ((row - 1) * 8 * aura_env.size), - row * aura_env.size) - WeakAurasSaved.CustomTrash.TrinketFuckery.Buttons[k]:SetNormalTexture(icon) - WeakAurasSaved.CustomTrash.TrinketFuckery.Buttons[k]:SetSize(aura_env.size, aura_env.size) - WeakAurasSaved.CustomTrash.TrinketFuckery.Buttons[k]:Show() - if k % 8 == 0 then row = row + 1 end - else - WeakAurasSaved.CustomTrash.TrinketFuckery.Buttons[k]:Show() - end - end - elseif e == "PLAYER_REGEN_DISABLED" then - for k, v in ipairs(aura_env.daiTrinket) do - if WeakAurasSaved.CustomTrash.TrinketFuckery.Buttons[k] and WeakAurasSaved.CustomTrash.TrinketFuckery.Buttons[k][0] then - WeakAurasSaved.CustomTrash.TrinketFuckery.Buttons[k]:Hide() - end - end - end -end - ---INIT -if not WeakAurasSaved.CustomTrash then WeakAurasSaved.CustomTrash = {} end -if not WeakAurasSaved.CustomTrash.TrinketFuckery then WeakAurasSaved.CustomTrash.TrinketFuckery = {} end -if not WeakAurasSaved.CustomTrash.TrinketFuckery.Buttons then WeakAurasSaved.CustomTrash.TrinketFuckery.Buttons = {} end -aura_env.size = 48 -aura_env.daiTrinket = { - 137400, --Coagulated Nightwell Residue - 151978, --Smoldering Titanguard - 151956, --Garothi Feedback Circuit - 151957, --Ishkar's Felshield Emitter - 147023, --Leviathan's Hunger - 152645, --Eye of Dogs - 151975, --Apocalypse Drive - 151977, --Diima's Glacial Aegis - 137315, --Writhing Heart of Darkness - 151976, --Riftworld Codex - 147024, --Reliquary of the Damned - 137344, --Talisman of the Shaper - 151964, --Seeping Scourgewing - 136978, --Ember of Nulification - 152289, --Highfather's Machination - 151969, --Terminus Signaling Beacon -} +--Trigger on combat +--Check bag for amount +--Maybe grey out if no trinket? +--Maybe make equipped glow :? +--Or fuck with opacity +--Make two rows +--PLAYER_REGEN_DISABLED PLAYER_REGEN_ENABLED +function(e) + if e == "PLAYER_REGEN_ENABLED" then + local row = 1 + for k, v in ipairs(aura_env.daiTrinket) do + if not WeakAurasSaved.CustomTrash.TrinketFuckery.Buttons[k] or not WeakAurasSaved.CustomTrash.TrinketFuckery.Buttons[k][0] then + --Frame does not exist, create new frame + local iname = GetItemInfo(v) + local icon = GetItemIcon(v) + WeakAurasSaved.CustomTrash.TrinketFuckery.Buttons[k] = CreateFrame("Button", nil, aura_env.region, "SecureActionButtonTemplate") + WeakAurasSaved.CustomTrash.TrinketFuckery.Buttons[k]:SetAttribute("type", "macro") + WeakAurasSaved.CustomTrash.TrinketFuckery.Buttons[k]:SetAttribute("macrotext", format("/equip %s", iname)) + WeakAurasSaved.CustomTrash.TrinketFuckery.Buttons[k]:RegisterForClicks("LeftButtonDown") + print(k, "at", ((k - 1) * aura_env.size) - ((row - 1) * 8 * aura_env.size), - row * aura_env.size) + WeakAurasSaved.CustomTrash.TrinketFuckery.Buttons[k]:SetPoint("CENTER", aura_env.region, "CENTER", ((k - 1) * aura_env.size) - ((row - 1) * 8 * aura_env.size), - row * aura_env.size) + WeakAurasSaved.CustomTrash.TrinketFuckery.Buttons[k]:SetNormalTexture(icon) + WeakAurasSaved.CustomTrash.TrinketFuckery.Buttons[k]:SetSize(aura_env.size, aura_env.size) + WeakAurasSaved.CustomTrash.TrinketFuckery.Buttons[k]:Show() + if k % 8 == 0 then row = row + 1 end + else + WeakAurasSaved.CustomTrash.TrinketFuckery.Buttons[k]:Show() + end + end + elseif e == "PLAYER_REGEN_DISABLED" then + for k, v in ipairs(aura_env.daiTrinket) do + if WeakAurasSaved.CustomTrash.TrinketFuckery.Buttons[k] and WeakAurasSaved.CustomTrash.TrinketFuckery.Buttons[k][0] then + WeakAurasSaved.CustomTrash.TrinketFuckery.Buttons[k]:Hide() + end + end + end +end + +--INIT +if not WeakAurasSaved.CustomTrash then WeakAurasSaved.CustomTrash = {} end +if not WeakAurasSaved.CustomTrash.TrinketFuckery then WeakAurasSaved.CustomTrash.TrinketFuckery = {} end +if not WeakAurasSaved.CustomTrash.TrinketFuckery.Buttons then WeakAurasSaved.CustomTrash.TrinketFuckery.Buttons = {} end +aura_env.size = 48 +aura_env.daiTrinket = { + 137400, --Coagulated Nightwell Residue + 151978, --Smoldering Titanguard + 151956, --Garothi Feedback Circuit + 151957, --Ishkar's Felshield Emitter + 147023, --Leviathan's Hunger + 152645, --Eye of Dogs + 151975, --Apocalypse Drive + 151977, --Diima's Glacial Aegis + 137315, --Writhing Heart of Darkness + 151976, --Riftworld Codex + 147024, --Reliquary of the Damned + 137344, --Talisman of the Shaper + 151964, --Seeping Scourgewing + 136978, --Ember of Nulification + 152289, --Highfather's Machination + 151969, --Terminus Signaling Beacon +} WeakAuras.ScanEvents("PLAYER_REGEN_ENABLED") \ No newline at end of file diff --git a/Complete Projects/Legion/TrinketTest.lua b/WeakAuras/Projects/TrinketTest.lua similarity index 96% rename from Complete Projects/Legion/TrinketTest.lua rename to WeakAuras/Projects/TrinketTest.lua index 78f301c..f1d40cd 100644 --- a/Complete Projects/Legion/TrinketTest.lua +++ b/WeakAuras/Projects/TrinketTest.lua @@ -1,26 +1,26 @@ ---COMBAT_LOG_EVENT_UNFILTERED ---Made to test DHT tank trinket -function(e, ...) - local se = select(2, ...) - if se == "SWING_DAMAGE" then - local dmg = select(12, ...) - local crit = select(18, ...) - local target = select(9, ...) - print(dmg, target, crit) - if crit == false and target == UnitName("player") then - aura_env.swings = aura_env.swings + 1 - aura_env.totaldmg = aura_env.totaldmg + dmg - return true - end - end -end - ---DISPLAY -function() - return aura_env.swings .. "\n" .. aura_env.totaldmg .. "\n" .. aura_env.totaldmg / aura_env.swings -end - ---INIT -aura_env.totaldmg = 0 -aura_env.averagedmg = 0 +--COMBAT_LOG_EVENT_UNFILTERED +--Made to test DHT tank trinket +function(e, ...) + local se = select(2, ...) + if se == "SWING_DAMAGE" then + local dmg = select(12, ...) + local crit = select(18, ...) + local target = select(9, ...) + print(dmg, target, crit) + if crit == false and target == UnitName("player") then + aura_env.swings = aura_env.swings + 1 + aura_env.totaldmg = aura_env.totaldmg + dmg + return true + end + end +end + +--DISPLAY +function() + return aura_env.swings .. "\n" .. aura_env.totaldmg .. "\n" .. aura_env.totaldmg / aura_env.swings +end + +--INIT +aura_env.totaldmg = 0 +aura_env.averagedmg = 0 aura_env.swings = 0 \ No newline at end of file diff --git a/FreshShit/UwowLadderboardScraper/event.lua b/WeakAuras/Projects/UwowLadderboardScraper/event.lua similarity index 96% rename from FreshShit/UwowLadderboardScraper/event.lua rename to WeakAuras/Projects/UwowLadderboardScraper/event.lua index e70203d..dcf5beb 100644 --- a/FreshShit/UwowLadderboardScraper/event.lua +++ b/WeakAuras/Projects/UwowLadderboardScraper/event.lua @@ -1,29 +1,29 @@ --- TICKER_10000 -function() - if not InterfaceGUI then return end - if not InterfaceGUI.Cashe_1 then return end - for k, v in pairs(InterfaceGUI.Cashe_1) do - if v.UIMSG_BEST_RUNS then - local bestRuns = v.UIMSG_BEST_RUNS - for i = 1, #bestRuns, 5 do - local challengeId = bestRuns[i] - local roleMask = bestRuns[i + 1] - -- print(roleMask) - local stars = bestRuns[i + 2] - local keyLvl = bestRuns[i + 3] - local score = bestRuns[i + 4] - - if challengeId and challengeId > 0 and roleMask and roleMask > 0 and keyLvl and keyLvl > 0 then - local dungeonName = aura_env.challengeNameMap[challengeId] or "???" - local key = aura_env.Key.new( - dungeonName, - "isDps", - string.rep("+", stars) .. keyLvl, - "???", - score) - key:register() - end - end - end - end -end +-- TICKER_10000 +function() + if not InterfaceGUI then return end + if not InterfaceGUI.Cashe_1 then return end + for k, v in pairs(InterfaceGUI.Cashe_1) do + if v.UIMSG_BEST_RUNS then + local bestRuns = v.UIMSG_BEST_RUNS + for i = 1, #bestRuns, 5 do + local challengeId = bestRuns[i] + local roleMask = bestRuns[i + 1] + -- print(roleMask) + local stars = bestRuns[i + 2] + local keyLvl = bestRuns[i + 3] + local score = bestRuns[i + 4] + + if challengeId and challengeId > 0 and roleMask and roleMask > 0 and keyLvl and keyLvl > 0 then + local dungeonName = aura_env.challengeNameMap[challengeId] or "???" + local key = aura_env.Key.new( + dungeonName, + "isDps", + string.rep("+", stars) .. keyLvl, + "???", + score) + key:register() + end + end + end + end +end diff --git a/FreshShit/UwowLadderboardScraper/init.lua b/WeakAuras/Projects/UwowLadderboardScraper/init.lua similarity index 96% rename from FreshShit/UwowLadderboardScraper/init.lua rename to WeakAuras/Projects/UwowLadderboardScraper/init.lua index 7790117..b79f705 100644 --- a/FreshShit/UwowLadderboardScraper/init.lua +++ b/WeakAuras/Projects/UwowLadderboardScraper/init.lua @@ -1,89 +1,89 @@ -aura_env.challengeNameMap = { - [165] = "Graimrail Depot", - [166] = "Shadowmoon Burial Grounds", - [197] = "Eye of Azshara", - [198] = "Darkheart Thicket", - [199] = "Black Rook Hold", - [200] = "Halls of Valor", - [206] = "Neltharion's Lair", - [207] = "Vault of the Wardens", - [208] = "Maw of Souls", - [209] = "The Arcway", - [210] = "Court of Stars", - [227] = "Return to Karazhan: Lower", - [233] = "Cathedral of Eternal Night", - [234] = "Return to Karazhan: Upper", - [239] = "Seat of the Triumvirate", -} - ----@class Key ----@field name string ----@field role string ----@field level string ----@field time string ----@field score number -aura_env.Key = { - ---@return Key - ---@param name string - ---@param role string - ---@param level string - ---@param time string - ---@param score string - new = function(name, role, level, time, score) - local self = setmetatable({}, { - __index = Key, - __tostring = function(self) - local score = self.score - local keyLevel = tonumber(self.level:match("%d+$")) or 0 - - local formattedScore, err = aura_env.ScoreColorer.Interpolate(self.score) - if not err then - score = string.format( - "|cff%02x%02x%02x%d|r", - formattedScore.r * 255, - formattedScore.g * 255, - formattedScore.b * 255, - self.score - ) - end - - local formattedLevel, err = aura_env.KeyLevel.Interpolate(keyLevel) - if not err then - level = string.format( - "|cff%02x%02x%02x%s|r", - formattedLevel.r * 255, - formattedLevel.g * 255, - formattedLevel.b * 255, - self.level - ) - end - - return string.format("%-30s %-8s %-8s %-10s %-10s", self.name, self.role, level, self.time, score) - end, - }) - self.name = name - self.role = role - self.level = level - self.time = time - self.score = tonumber(score) or 0 - return self - end, - ---@return string - hash = function(self) return table.concat({ self.name, self.role, self.level, self.time, self.score }, "/") end, - - ---@param self Key - ---@param other Key - ---@return boolean - compareTo = function(self, other) - if not self then return true end - if not other then return false end - if self.name <= other.name then return true end - return false - end, - ---@param self Key - register = function(self) - if not WeakAurasSaved.Cyka then WeakAurasSaved.Cyka = {} end - if not WeakAurasSaved.Cyka.MData then WeakAurasSaved.Cyka.MData = {} end - WeakAurasSaved.Cyka.MData[self:hash()] = self - end, -} +aura_env.challengeNameMap = { + [165] = "Graimrail Depot", + [166] = "Shadowmoon Burial Grounds", + [197] = "Eye of Azshara", + [198] = "Darkheart Thicket", + [199] = "Black Rook Hold", + [200] = "Halls of Valor", + [206] = "Neltharion's Lair", + [207] = "Vault of the Wardens", + [208] = "Maw of Souls", + [209] = "The Arcway", + [210] = "Court of Stars", + [227] = "Return to Karazhan: Lower", + [233] = "Cathedral of Eternal Night", + [234] = "Return to Karazhan: Upper", + [239] = "Seat of the Triumvirate", +} + +---@class Key +---@field name string +---@field role string +---@field level string +---@field time string +---@field score number +aura_env.Key = { + ---@return Key + ---@param name string + ---@param role string + ---@param level string + ---@param time string + ---@param score string + new = function(name, role, level, time, score) + local self = setmetatable({}, { + __index = Key, + __tostring = function(self) + local score = self.score + local keyLevel = tonumber(self.level:match("%d+$")) or 0 + + local formattedScore, err = aura_env.ScoreColorer.Interpolate(self.score) + if not err then + score = string.format( + "|cff%02x%02x%02x%d|r", + formattedScore.r * 255, + formattedScore.g * 255, + formattedScore.b * 255, + self.score + ) + end + + local formattedLevel, err = aura_env.KeyLevel.Interpolate(keyLevel) + if not err then + level = string.format( + "|cff%02x%02x%02x%s|r", + formattedLevel.r * 255, + formattedLevel.g * 255, + formattedLevel.b * 255, + self.level + ) + end + + return string.format("%-30s %-8s %-8s %-10s %-10s", self.name, self.role, level, self.time, score) + end, + }) + self.name = name + self.role = role + self.level = level + self.time = time + self.score = tonumber(score) or 0 + return self + end, + ---@return string + hash = function(self) return table.concat({ self.name, self.role, self.level, self.time, self.score }, "/") end, + + ---@param self Key + ---@param other Key + ---@return boolean + compareTo = function(self, other) + if not self then return true end + if not other then return false end + if self.name <= other.name then return true end + return false + end, + ---@param self Key + register = function(self) + if not WeakAurasSaved.Cyka then WeakAurasSaved.Cyka = {} end + if not WeakAurasSaved.Cyka.MData then WeakAurasSaved.Cyka.MData = {} end + WeakAurasSaved.Cyka.MData[self:hash()] = self + end, +} diff --git a/Complete Projects/Legion/Valentine's Charms.lua b/WeakAuras/Projects/Valentine's Charms.lua similarity index 96% rename from Complete Projects/Legion/Valentine's Charms.lua rename to WeakAuras/Projects/Valentine's Charms.lua index 168b7fa..8271a8d 100644 --- a/Complete Projects/Legion/Valentine's Charms.lua +++ b/WeakAuras/Projects/Valentine's Charms.lua @@ -1,15 +1,15 @@ ---DURATION -function() - local charms = math.floor(GetItemCount(49655) / 10) - local tokens = GetItemCount(49927) - local total = charms + tokens - return total, 270, 1 -end - ---NAME -function() - local charms = math.floor(GetItemCount(49655) / 10) - local tokens = GetItemCount(49927) - local total = charms + tokens - return total +--DURATION +function() + local charms = math.floor(GetItemCount(49655) / 10) + local tokens = GetItemCount(49927) + local total = charms + tokens + return total, 270, 1 +end + +--NAME +function() + local charms = math.floor(GetItemCount(49655) / 10) + local tokens = GetItemCount(49927) + local total = charms + tokens + return total end \ No newline at end of file diff --git a/Complete Projects/Legion/Visp Bogec.lua b/WeakAuras/Projects/Visp Bogec.lua similarity index 97% rename from Complete Projects/Legion/Visp Bogec.lua rename to WeakAuras/Projects/Visp Bogec.lua index 6e4667d..8a94a7d 100644 --- a/Complete Projects/Legion/Visp Bogec.lua +++ b/WeakAuras/Projects/Visp Bogec.lua @@ -1,116 +1,116 @@ ---COMBAT_LOG_EVENT_UNFILTERED GROUP_ROSTER_UPDATE -function(allstates, e, ...) - local aura_env = aura_env - local restoreState = function(name, state, dur, pclass) - if allstates[name .. state] then - allstates[name .. state] = { - -- Playername .. spellname - show = true, - changed = true, - index = name, - resort = true, - name = aura_env.classColor(pclass) .. name .. "\124r", - icon = GetSpellTexture(state), - progressType = "static", - value = dur, - total = dur, - } - return true - end - end - if e == "COMBAT_LOG_EVENT_UNFILTERED" then - local se = select(2, ...) - if se == "SPELL_CAST_SUCCESS" then - local name = select(5, ...) - local spellID = select(12, ...) - if aura_env.classSpells[select(3, UnitClass(name))] and aura_env.classSpells[select(3, UnitClass(name))][spellID] then -- Player should probably be tracked - --print(name, spell) - --DevTools_Dump(allstates) - if allstates[name .. select(1, GetSpellInfo(spellID))] then - --print("YEET") - local pclass = select(3, UnitClass(name)) - local dur = aura_env.classSpells[select(3, UnitClass(name))][spellID] - allstates[name .. select(1, GetSpellInfo(spellID))] = { - show = true, - changed = true, - index = name, - resort = true, - name = aura_env.classColor(select(3, UnitClass(name))) .. name .. "\124r", - icon = GetSpellTexture(spellID), - progressType = "timed", - expirationTime = GetTime() + aura_env.classSpells[select(3, UnitClass(name))][spellID], - duration = dur, - ticker = C_Timer.After(dur - dur / 3, function() restoreState(name, spellID, dur, pclass) end)} - return true - end - end - end - elseif e == "GROUP_ROSTER_UPDATE" then - aura_env.groupMembers = {} - for k, v in pairs(allstates) do - v.show = false - v.changed = true - end - for i = 1, GetNumGroupMembers() do - if IsInRaid() == true then - aura_env.groupMembers[UnitName("raid" .. i)] = select(3, UnitClass("raid" .. i)) - end - end - for k, v in pairs(aura_env.groupMembers) do - if aura_env.classSpells[v] then - for k2, v2 in pairs(aura_env.classSpells[v]) do - allstates[k .. select(1, GetSpellInfo(k2))] = { - -- Playername .. spellname - show = true, - changed = true, - index = k, - class = v, - resort = true, - name = aura_env.classColor(v) .. k .. "\124r", - icon = GetSpellTexture(k2), - progressType = "static", - value = v2, - total = v2, - } - end - end - end - end - return true -end - ---INIT -aura_env.groupMembers = {} -aura_env.classSpells = { - -- Form [SpellID] = spellcooldown, - [2] = {-- Paladin - [31821] = 180, - }, - [11] = {--Druid - - }, - [5] = {-- Priest - - }, - [7] = {-- Shaman - - }, - [10] = {-- Monk - - }, -} -aura_env.classColor = function(class) - if class == 6 then return "\124cFFC41F3B" elseif - class == 12 then return "\124cFFA330C9" elseif - class == 11 then return "\124cFFFF7D0A" elseif - class == 3 then return "\124cFFABD473" elseif - class == 8 then return "\124cFF40C7EB" elseif - class == 10 then return "\124cFF00FF96" elseif - class == 2 then return "\124cFFF58CBA" elseif - class == 5 then return "\124cFFFFFFFF" elseif - class == 4 then return "\124cFFFFF569" elseif - class == 7 then return "\124cFF0070DE" elseif - class == 9 then return "\124cFF8787ED" elseif - class == 1 then return "\124cFFC79C6E" else - return "\124cFF000000" end -end +--COMBAT_LOG_EVENT_UNFILTERED GROUP_ROSTER_UPDATE +function(allstates, e, ...) + local aura_env = aura_env + local restoreState = function(name, state, dur, pclass) + if allstates[name .. state] then + allstates[name .. state] = { + -- Playername .. spellname + show = true, + changed = true, + index = name, + resort = true, + name = aura_env.classColor(pclass) .. name .. "\124r", + icon = GetSpellTexture(state), + progressType = "static", + value = dur, + total = dur, + } + return true + end + end + if e == "COMBAT_LOG_EVENT_UNFILTERED" then + local se = select(2, ...) + if se == "SPELL_CAST_SUCCESS" then + local name = select(5, ...) + local spellID = select(12, ...) + if aura_env.classSpells[select(3, UnitClass(name))] and aura_env.classSpells[select(3, UnitClass(name))][spellID] then -- Player should probably be tracked + --print(name, spell) + --DevTools_Dump(allstates) + if allstates[name .. select(1, GetSpellInfo(spellID))] then + --print("YEET") + local pclass = select(3, UnitClass(name)) + local dur = aura_env.classSpells[select(3, UnitClass(name))][spellID] + allstates[name .. select(1, GetSpellInfo(spellID))] = { + show = true, + changed = true, + index = name, + resort = true, + name = aura_env.classColor(select(3, UnitClass(name))) .. name .. "\124r", + icon = GetSpellTexture(spellID), + progressType = "timed", + expirationTime = GetTime() + aura_env.classSpells[select(3, UnitClass(name))][spellID], + duration = dur, + ticker = C_Timer.After(dur - dur / 3, function() restoreState(name, spellID, dur, pclass) end)} + return true + end + end + end + elseif e == "GROUP_ROSTER_UPDATE" then + aura_env.groupMembers = {} + for k, v in pairs(allstates) do + v.show = false + v.changed = true + end + for i = 1, GetNumGroupMembers() do + if IsInRaid() == true then + aura_env.groupMembers[UnitName("raid" .. i)] = select(3, UnitClass("raid" .. i)) + end + end + for k, v in pairs(aura_env.groupMembers) do + if aura_env.classSpells[v] then + for k2, v2 in pairs(aura_env.classSpells[v]) do + allstates[k .. select(1, GetSpellInfo(k2))] = { + -- Playername .. spellname + show = true, + changed = true, + index = k, + class = v, + resort = true, + name = aura_env.classColor(v) .. k .. "\124r", + icon = GetSpellTexture(k2), + progressType = "static", + value = v2, + total = v2, + } + end + end + end + end + return true +end + +--INIT +aura_env.groupMembers = {} +aura_env.classSpells = { + -- Form [SpellID] = spellcooldown, + [2] = {-- Paladin + [31821] = 180, + }, + [11] = {--Druid + + }, + [5] = {-- Priest + + }, + [7] = {-- Shaman + + }, + [10] = {-- Monk + + }, +} +aura_env.classColor = function(class) + if class == 6 then return "\124cFFC41F3B" elseif + class == 12 then return "\124cFFA330C9" elseif + class == 11 then return "\124cFFFF7D0A" elseif + class == 3 then return "\124cFFABD473" elseif + class == 8 then return "\124cFF40C7EB" elseif + class == 10 then return "\124cFF00FF96" elseif + class == 2 then return "\124cFFF58CBA" elseif + class == 5 then return "\124cFFFFFFFF" elseif + class == 4 then return "\124cFFFFF569" elseif + class == 7 then return "\124cFF0070DE" elseif + class == 9 then return "\124cFF8787ED" elseif + class == 1 then return "\124cFFC79C6E" else + return "\124cFF000000" end +end diff --git a/Complete Projects/Legion/Warlock Artifact.lua b/WeakAuras/Projects/Warlock Artifact.lua similarity index 96% rename from Complete Projects/Legion/Warlock Artifact.lua rename to WeakAuras/Projects/Warlock Artifact.lua index 2073783..0b7f3ef 100644 --- a/Complete Projects/Legion/Warlock Artifact.lua +++ b/WeakAuras/Projects/Warlock Artifact.lua @@ -1,17 +1,17 @@ -DISPLAY -function() - local souls = select(4, UnitBuff("player", "Tormented Souls")) or 0 - return souls -end - -TRIGGER -function() - local buff = UnitBuff("player", "Tormented Souls") or 0 - if buff ~= nil then return true else return false end -end - -DURATION_TRIGGER -function() - local souls = select(4, UnitBuff("player", "Tormented Souls")) or 0 - return souls, 12, true +DISPLAY +function() + local souls = select(4, UnitBuff("player", "Tormented Souls")) or 0 + return souls +end + +TRIGGER +function() + local buff = UnitBuff("player", "Tormented Souls") or 0 + if buff ~= nil then return true else return false end +end + +DURATION_TRIGGER +function() + local souls = select(4, UnitBuff("player", "Tormented Souls")) or 0 + return souls, 12, true end \ No newline at end of file diff --git a/FreshShit/WarlockDispelMaster/event.lua b/WeakAuras/Projects/WarlockDispelMaster/event.lua similarity index 96% rename from FreshShit/WarlockDispelMaster/event.lua rename to WeakAuras/Projects/WarlockDispelMaster/event.lua index 9ed7de6..3f6309a 100644 --- a/FreshShit/WarlockDispelMaster/event.lua +++ b/WeakAuras/Projects/WarlockDispelMaster/event.lua @@ -1,16 +1,16 @@ --- TICKER_200 -function() - for _, unit in ipairs(aura_env.Units) do - if UnitExists(unit) and not UnitIsDeadOrGhost(unit) and aura_env.HasDispellableDebuff(unit) then - local unitName = UnitName(unit) - local frame = aura_env.GetFrameFromName(unitName) - if frame == nil then - print("Frame not found for " .. unitName) - -- Unexpected behavior, bail! - return - end - -- print("Dispel " .. unitName) - aura_env.MakeFrameGlow(frame) - end - end +-- TICKER_200 +function() + for _, unit in ipairs(aura_env.Units) do + if UnitExists(unit) and not UnitIsDeadOrGhost(unit) and aura_env.HasDispellableDebuff(unit) then + local unitName = UnitName(unit) + local frame = aura_env.GetFrameFromName(unitName) + if frame == nil then + print("Frame not found for " .. unitName) + -- Unexpected behavior, bail! + return + end + -- print("Dispel " .. unitName) + aura_env.MakeFrameGlow(frame) + end + end end \ No newline at end of file diff --git a/FreshShit/WarlockDispelMaster/event2.lua b/WeakAuras/Projects/WarlockDispelMaster/event2.lua similarity index 95% rename from FreshShit/WarlockDispelMaster/event2.lua rename to WeakAuras/Projects/WarlockDispelMaster/event2.lua index 53336c4..07856ca 100644 --- a/FreshShit/WarlockDispelMaster/event2.lua +++ b/WeakAuras/Projects/WarlockDispelMaster/event2.lua @@ -1,4 +1,4 @@ --- TICKER_1000 -function() - aura_env.SetupPartyCache() +-- TICKER_1000 +function() + aura_env.SetupPartyCache() end \ No newline at end of file diff --git a/FreshShit/WarlockDispelMaster/export b/WeakAuras/Projects/WarlockDispelMaster/export similarity index 100% rename from FreshShit/WarlockDispelMaster/export rename to WeakAuras/Projects/WarlockDispelMaster/export diff --git a/FreshShit/WarlockDispelMaster/init.lua b/WeakAuras/Projects/WarlockDispelMaster/init.lua similarity index 96% rename from FreshShit/WarlockDispelMaster/init.lua rename to WeakAuras/Projects/WarlockDispelMaster/init.lua index 2f815e6..f22f8bc 100644 --- a/FreshShit/WarlockDispelMaster/init.lua +++ b/WeakAuras/Projects/WarlockDispelMaster/init.lua @@ -1,76 +1,76 @@ -LCG = LibStub("LibCustomGlow-1.0") ----@table -aura_env.BusyFrames = {} - -aura_env.Units = { - "player", - "party1", - "party2", - "party3", - "party4", - "party5", -} - ----@param unit string ----@return boolean, nil|string -aura_env.HasDispellableDebuff = function(unit) - for i = 1, 20 do - local debuff, _, _, _, type = UnitDebuff(unit, i) - if debuff == nil then return false, nil end - if type == "Magic" then return true, nil end - end - - return false, nil -end - ----@param frame Frame ----@return string, nil|string -aura_env.GetNameFromFrame = function(frame) - if frame == nil then return "", "Frame is nil" end - ---@diagnostic disable-next-line: undefined-field - if frame.Name == nil then return "", "Frame.Name is nil" end - ---@diagnostic disable-next-line: undefined-field - local name = frame.Name:GetText() - if name == nil then return "", "Frame.Name.GetText is nil" end - return name, nil -end - ----@param name string ----@return Frame|nil -aura_env.GetFrameFromName = function(name) return aura_env.PartyCache[name] end - ----@param name string ----@return string ----@return number -aura_env.RemoveNamePadding = function(name) return string.gsub(name, "|c%w%w%w%w%w%w%w%w", "", 1) end - -aura_env.MakeFrameGlow = function(frame) - local frameName = frame:GetName() - if frame ~= nil and aura_env.BusyFrames[frameName] == nil then - ---@type Frame - ---@diagnostic disable-next-line: undefined-field - local healthBar = frame.Health - if healthBar ~= nil then - LCG.PixelGlow_Start(healthBar, { 1, 1, 0, 1 }, 16, 0.35, 8, 4) - aura_env.BusyFrames[frameName] = true - local aura_env = aura_env - C_Timer.After(1, function() - LCG.PixelGlow_Stop(healthBar) - aura_env.BusyFrames[frameName] = nil - end) - end - end -end - -aura_env.PartyCache = {} -aura_env.SetupPartyCache = function() - for i = 1, 5 do - -- /dump _G[string.format("ElvUF_RaidGroup1UnitButton%d", 1)].Name:GetText() - local raidFrame = _G[string.format("ElvUF_RaidGroup1UnitButton%d", i + 1)] - local name, err = aura_env.GetNameFromFrame(raidFrame) - if err == nil then - name = aura_env.RemoveNamePadding(name) - aura_env.PartyCache[name] = raidFrame - end - end -end +LCG = LibStub("LibCustomGlow-1.0") +---@table +aura_env.BusyFrames = {} + +aura_env.Units = { + "player", + "party1", + "party2", + "party3", + "party4", + "party5", +} + +---@param unit string +---@return boolean, nil|string +aura_env.HasDispellableDebuff = function(unit) + for i = 1, 20 do + local debuff, _, _, _, type = UnitDebuff(unit, i) + if debuff == nil then return false, nil end + if type == "Magic" then return true, nil end + end + + return false, nil +end + +---@param frame Frame +---@return string, nil|string +aura_env.GetNameFromFrame = function(frame) + if frame == nil then return "", "Frame is nil" end + ---@diagnostic disable-next-line: undefined-field + if frame.Name == nil then return "", "Frame.Name is nil" end + ---@diagnostic disable-next-line: undefined-field + local name = frame.Name:GetText() + if name == nil then return "", "Frame.Name.GetText is nil" end + return name, nil +end + +---@param name string +---@return Frame|nil +aura_env.GetFrameFromName = function(name) return aura_env.PartyCache[name] end + +---@param name string +---@return string +---@return number +aura_env.RemoveNamePadding = function(name) return string.gsub(name, "|c%w%w%w%w%w%w%w%w", "", 1) end + +aura_env.MakeFrameGlow = function(frame) + local frameName = frame:GetName() + if frame ~= nil and aura_env.BusyFrames[frameName] == nil then + ---@type Frame + ---@diagnostic disable-next-line: undefined-field + local healthBar = frame.Health + if healthBar ~= nil then + LCG.PixelGlow_Start(healthBar, { 1, 1, 0, 1 }, 16, 0.35, 8, 4) + aura_env.BusyFrames[frameName] = true + local aura_env = aura_env + C_Timer.After(1, function() + LCG.PixelGlow_Stop(healthBar) + aura_env.BusyFrames[frameName] = nil + end) + end + end +end + +aura_env.PartyCache = {} +aura_env.SetupPartyCache = function() + for i = 1, 5 do + -- /dump _G[string.format("ElvUF_RaidGroup1UnitButton%d", 1)].Name:GetText() + local raidFrame = _G[string.format("ElvUF_RaidGroup1UnitButton%d", i + 1)] + local name, err = aura_env.GetNameFromFrame(raidFrame) + if err == nil then + name = aura_env.RemoveNamePadding(name) + aura_env.PartyCache[name] = raidFrame + end + end +end diff --git a/FreshShit/WhoSniffer/allstates.lua b/WeakAuras/Projects/WhoSniffer/allstates.lua similarity index 98% rename from FreshShit/WhoSniffer/allstates.lua rename to WeakAuras/Projects/WhoSniffer/allstates.lua index 6bd8751..1d58930 100644 --- a/FreshShit/WhoSniffer/allstates.lua +++ b/WeakAuras/Projects/WhoSniffer/allstates.lua @@ -1,22 +1,22 @@ ----@meta - ----[Source](https://github.com/WeakAuras/WeakAuras2/wiki/Trigger-State-Updater-%28TSU%29) ----@class state ----@field changed boolean Informs WeakAuras that the states values have changed. Always set this to true for states that were changed. ----@field show boolean Controls whether the display is visible. Note, that states that have show set to false are automatically removed. ----@field name string The name, returned by %n ----@field icon number|string IconID or TexturePath, used in icons and progress bars ----@field texture number|string IconID or TexturePath, used in textures ----@field stacks number The stack count, returned by %s ----@field index number|string Sets the order the output will display in a dynamic group (if sorting is set to "none" on the group). Strings or numbers are fine but DO NOT MIX TYPES! ----@field progressType string "timed" or "static" ----@field expirationTime number Use with "timed" progressType; relative to GetTime() ----@field duration number Use with "timed" progressType; total duration of the bar in seconds ----@field value number Use with "static" progressType ----@field maxValue number Use with "static" progressType ----@field autoHide boolean Set to true to make the display automatically hide at the end of the "timed" progress. autoHide can also be used along with the "static" progressType by defining a duration and expirationTime along with the static value and total. While the static values will be displayed, the timed values will set the Hide time for the clone. ----@field paused boolean Set to true (and set a remaining value) to pause a "timed" progress. Set to false (and recalculate the expirationTime value) to resume. ----@field remaining number Only used with paused, gives WA the info needed to show paused progress at the current point. -state = {} - ----@alias allstates table +---@meta + +---[Source](https://github.com/WeakAuras/WeakAuras2/wiki/Trigger-State-Updater-%28TSU%29) +---@class state +---@field changed boolean Informs WeakAuras that the states values have changed. Always set this to true for states that were changed. +---@field show boolean Controls whether the display is visible. Note, that states that have show set to false are automatically removed. +---@field name string The name, returned by %n +---@field icon number|string IconID or TexturePath, used in icons and progress bars +---@field texture number|string IconID or TexturePath, used in textures +---@field stacks number The stack count, returned by %s +---@field index number|string Sets the order the output will display in a dynamic group (if sorting is set to "none" on the group). Strings or numbers are fine but DO NOT MIX TYPES! +---@field progressType string "timed" or "static" +---@field expirationTime number Use with "timed" progressType; relative to GetTime() +---@field duration number Use with "timed" progressType; total duration of the bar in seconds +---@field value number Use with "static" progressType +---@field maxValue number Use with "static" progressType +---@field autoHide boolean Set to true to make the display automatically hide at the end of the "timed" progress. autoHide can also be used along with the "static" progressType by defining a duration and expirationTime along with the static value and total. While the static values will be displayed, the timed values will set the Hide time for the clone. +---@field paused boolean Set to true (and set a remaining value) to pause a "timed" progress. Set to false (and recalculate the expirationTime value) to resume. +---@field remaining number Only used with paused, gives WA the info needed to show paused progress at the current point. +state = {} + +---@alias allstates table diff --git a/FreshShit/WhoSniffer/event.lua b/WeakAuras/Projects/WhoSniffer/event.lua similarity index 96% rename from FreshShit/WhoSniffer/event.lua rename to WeakAuras/Projects/WhoSniffer/event.lua index 30bb01e..0aa6ede 100644 --- a/FreshShit/WhoSniffer/event.lua +++ b/WeakAuras/Projects/WhoSniffer/event.lua @@ -1,64 +1,64 @@ --- WHO_LIST_UPDATE -function() - for i = 1, GetNumWhoResults() do - local name, guild, level, race, class, zone = GetWhoInfo(i) - if not aura_env.ignored[name] then - ---@type WHOQuery - local query = aura_env.lastQuery - if not query then - print("No query wtf?") - return - end - ---@type WHOFilter[] - local filters = query.filters - for _, filter in pairs(filters) do - if not filter(name, guild, level, race, class, zone) then - --print("Filter failed", filter, name, guild, level, race, class, - -- zone) - return - end - end - - local timestamp = date("%Y-%m-%dT%H:%M:%S") - local player = aura_env.stinkies[name] - if not player then - player = Player.new(name, guild, race, class, zone) - local existing = WeakAurasSaved.Cyka.WhoSniffer[name] - - if not existing then WeakAurasSaved.Cyka.WhoSniffer[name] = {} - else - player.lastSeen = existing.lastSeen or "never" - player.firstSeen = existing.firstSeen or "never" - player.seenCount = existing.seenCount or 0 - end - if player.firstSeen == "never" then - player.firstSeen = timestamp - end - - local stinky = WeakAurasSaved.Cyka.stinkies[name] - if stinky then - PlaySoundFile("Interface\\Sounds\\Domination.ogg", "Master") - else - PlaySoundFile("Interface\\Sounds\\Cloak.ogg", "Master") - end - - aura_env.Notify(player) - player.lastSeen = timestamp - player.seenCount = player.seenCount + 1 - WeakAurasSaved.Cyka.WhoSniffer[name] = player - end - player.lastSeenInternal = GetTime() - if player.zone ~= zone then - aura_env.NotifyZoneChanged(player, zone) - end - player.zone = zone - player.lastSeen = timestamp - aura_env.stinkies[name] = player - end - end - -- Turns out WA cannot do this ( - -- aura_env.UpdateMacro() - _G["FriendsFrameCloseButton"]:Click() -end - --- /run WeakAurasSaved.Cyka.WhoSniffer = {} +-- WHO_LIST_UPDATE +function() + for i = 1, GetNumWhoResults() do + local name, guild, level, race, class, zone = GetWhoInfo(i) + if not aura_env.ignored[name] then + ---@type WHOQuery + local query = aura_env.lastQuery + if not query then + print("No query wtf?") + return + end + ---@type WHOFilter[] + local filters = query.filters + for _, filter in pairs(filters) do + if not filter(name, guild, level, race, class, zone) then + --print("Filter failed", filter, name, guild, level, race, class, + -- zone) + return + end + end + + local timestamp = date("%Y-%m-%dT%H:%M:%S") + local player = aura_env.stinkies[name] + if not player then + player = Player.new(name, guild, race, class, zone) + local existing = WeakAurasSaved.Cyka.WhoSniffer[name] + + if not existing then WeakAurasSaved.Cyka.WhoSniffer[name] = {} + else + player.lastSeen = existing.lastSeen or "never" + player.firstSeen = existing.firstSeen or "never" + player.seenCount = existing.seenCount or 0 + end + if player.firstSeen == "never" then + player.firstSeen = timestamp + end + + local stinky = WeakAurasSaved.Cyka.stinkies[name] + if stinky then + PlaySoundFile("Interface\\Sounds\\Domination.ogg", "Master") + else + PlaySoundFile("Interface\\Sounds\\Cloak.ogg", "Master") + end + + aura_env.Notify(player) + player.lastSeen = timestamp + player.seenCount = player.seenCount + 1 + WeakAurasSaved.Cyka.WhoSniffer[name] = player + end + player.lastSeenInternal = GetTime() + if player.zone ~= zone then + aura_env.NotifyZoneChanged(player, zone) + end + player.zone = zone + player.lastSeen = timestamp + aura_env.stinkies[name] = player + end + end + -- Turns out WA cannot do this ( + -- aura_env.UpdateMacro() + _G["FriendsFrameCloseButton"]:Click() +end + +-- /run WeakAurasSaved.Cyka.WhoSniffer = {} diff --git a/FreshShit/WhoSniffer/event2.lua b/WeakAuras/Projects/WhoSniffer/event2.lua similarity index 96% rename from FreshShit/WhoSniffer/event2.lua rename to WeakAuras/Projects/WhoSniffer/event2.lua index f21e952..c0df2a5 100644 --- a/FreshShit/WhoSniffer/event2.lua +++ b/WeakAuras/Projects/WhoSniffer/event2.lua @@ -1,33 +1,33 @@ --- TICKER_500 ----@type allstates allstates -function(allstates) - local now = GetTime() - for k, v in pairs(aura_env.stinkies) do - local ago = now - v.lastSeenInternal - if ago > aura_env.ttl then - allstates[k] = { show = false, changed = true } - aura_env.stinkies[k] = nil - PlaySoundFile("Interface\\Sounds\\Uncloak.ogg", "Master") - aura_env.NotifyGone(v) - else - if allstates[k] then - allstates[k].ago = string.format("%6.1fs", ago) - allstates[k].name = v:ToString() - allstates[k].changed = true - else - allstates[k] = { - show = true, - changed = true, - name = v:ToString(), - progressType = "timed", - duration = aura_env.ttl, - expirationTime = GetTime() + aura_env.ttl, - autohide = true, - index = ago, - ago = string.format("%6.1fs", ago), - } - end - end - end - return true -end +-- TICKER_500 +---@type allstates allstates +function(allstates) + local now = GetTime() + for k, v in pairs(aura_env.stinkies) do + local ago = now - v.lastSeenInternal + if ago > aura_env.ttl then + allstates[k] = { show = false, changed = true } + aura_env.stinkies[k] = nil + PlaySoundFile("Interface\\Sounds\\Uncloak.ogg", "Master") + aura_env.NotifyGone(v) + else + if allstates[k] then + allstates[k].ago = string.format("%6.1fs", ago) + allstates[k].name = v:ToString() + allstates[k].changed = true + else + allstates[k] = { + show = true, + changed = true, + name = v:ToString(), + progressType = "timed", + duration = aura_env.ttl, + expirationTime = GetTime() + aura_env.ttl, + autohide = true, + index = ago, + ago = string.format("%6.1fs", ago), + } + end + end + end + return true +end diff --git a/FreshShit/WhoSniffer/event3.lua b/WeakAuras/Projects/WhoSniffer/event3.lua similarity index 96% rename from FreshShit/WhoSniffer/event3.lua rename to WeakAuras/Projects/WhoSniffer/event3.lua index 6669021..e67ceda 100644 --- a/FreshShit/WhoSniffer/event3.lua +++ b/WeakAuras/Projects/WhoSniffer/event3.lua @@ -1,14 +1,14 @@ --- TICKER_1000 -function() - if aura_env.queryPending then return end - if WeakAuras.IsOptionsOpen() then return end - SetWhoToUI(1) - ---@type WHOQuery - local query = aura_env.whoQueries[aura_env.whoQueryIdx] - aura_env.lastQuery = query - SendWho(query.query) - aura_env.whoQueryIdx = aura_env.whoQueryIdx + 1 - if aura_env.whoQueryIdx > #aura_env.whoQueries then - aura_env.whoQueryIdx = 1 - end +-- TICKER_1000 +function() + if aura_env.queryPending then return end + if WeakAuras.IsOptionsOpen() then return end + SetWhoToUI(1) + ---@type WHOQuery + local query = aura_env.whoQueries[aura_env.whoQueryIdx] + aura_env.lastQuery = query + SendWho(query.query) + aura_env.whoQueryIdx = aura_env.whoQueryIdx + 1 + if aura_env.whoQueryIdx > #aura_env.whoQueries then + aura_env.whoQueryIdx = 1 + end end \ No newline at end of file diff --git a/FreshShit/WhoSniffer/event4.lua b/WeakAuras/Projects/WhoSniffer/event4.lua similarity index 96% rename from FreshShit/WhoSniffer/event4.lua rename to WeakAuras/Projects/WhoSniffer/event4.lua index e955648..316f98c 100644 --- a/FreshShit/WhoSniffer/event4.lua +++ b/WeakAuras/Projects/WhoSniffer/event4.lua @@ -1,17 +1,17 @@ --- CHAT_MSG_WHISPER ----@type event string ----@type msg string ----@type sender string -function(event, msg, sender) - if msg == "who" then - for _, player in pairs(aura_env.stinkies) do - local msg = aura_env.MakeNotifyMessage(player) - local message = { - channel = "WHISPER", - data = sender, - message = msg - } - table.insert(WeakAurasSaved.Cyka.MessageQueue, message) - end - end +-- CHAT_MSG_WHISPER +---@type event string +---@type msg string +---@type sender string +function(event, msg, sender) + if msg == "who" then + for _, player in pairs(aura_env.stinkies) do + local msg = aura_env.MakeNotifyMessage(player) + local message = { + channel = "WHISPER", + data = sender, + message = msg + } + table.insert(WeakAurasSaved.Cyka.MessageQueue, message) + end + end end \ No newline at end of file diff --git a/FreshShit/WhoSniffer/event5.lua b/WeakAuras/Projects/WhoSniffer/event5.lua similarity index 95% rename from FreshShit/WhoSniffer/event5.lua rename to WeakAuras/Projects/WhoSniffer/event5.lua index 894bbca..01b5d67 100644 --- a/FreshShit/WhoSniffer/event5.lua +++ b/WeakAuras/Projects/WhoSniffer/event5.lua @@ -1,26 +1,26 @@ --- CHAT_MSG_CHANNEL ----@type event string ----@type msg string ----@type sender string -function(event, msg, sender, ...) - local channelId = select(6, ...) - local channelName = aura_env.GetChannelName(channelId) - if not channelName then - return - end - if channelName ~= aura_env.config.channel then - return - end - - if msg == "who" then - for _, player in pairs(aura_env.stinkies) do - local msg = aura_env.MakeNotifyMessage(player) - local message = { - channel = "CHANNEL", - data = aura_env.config.channel, - message = msg - } - table.insert(WeakAurasSaved.Cyka.MessageQueue, message) - end - end -end +-- CHAT_MSG_CHANNEL +---@type event string +---@type msg string +---@type sender string +function(event, msg, sender, ...) + local channelId = select(6, ...) + local channelName = aura_env.GetChannelName(channelId) + if not channelName then + return + end + if channelName ~= aura_env.config.channel then + return + end + + if msg == "who" then + for _, player in pairs(aura_env.stinkies) do + local msg = aura_env.MakeNotifyMessage(player) + local message = { + channel = "CHANNEL", + data = aura_env.config.channel, + message = msg + } + table.insert(WeakAurasSaved.Cyka.MessageQueue, message) + end + end +end diff --git a/FreshShit/WhoSniffer/export b/WeakAuras/Projects/WhoSniffer/export similarity index 100% rename from FreshShit/WhoSniffer/export rename to WeakAuras/Projects/WhoSniffer/export diff --git a/FreshShit/WhoSniffer/init.lua b/WeakAuras/Projects/WhoSniffer/init.lua similarity index 96% rename from FreshShit/WhoSniffer/init.lua rename to WeakAuras/Projects/WhoSniffer/init.lua index e24dde2..2d6aaaf 100644 --- a/FreshShit/WhoSniffer/init.lua +++ b/WeakAuras/Projects/WhoSniffer/init.lua @@ -1,325 +1,325 @@ -if not WeakAurasSaved.Cyka then WeakAurasSaved.Cyka = {} end -if not WeakAurasSaved.Cyka.WhoSniffer then WeakAurasSaved.Cyka.WhoSniffer = {} end - -aura_env.ignored = { "Maritza", "Goodbones" } - ----@class aura_env ----@field raceMap table ----@field stinkies table ----@field classColors table ----@field whoQueries table ----@field ttl number ----@field messageQueue Message[] ----@field UpdateMacro fun() ----@field Notify fun(Player) ----@field NotifyGone fun(Player) ----@field queryPending boolean ----@field lastQuery WHOQuery - ----@param input string ----@return number -local function utf8len(input) - if not input then return 0 end - local len = 0 - local i = 1 - local n = #input - while i <= n do - local c = input:byte(i) - if c >= 0 and c <= 127 then - i = i + 1 - elseif c >= 194 and c <= 223 then - i = i + 2 - elseif c >= 224 and c <= 239 then - i = i + 3 - elseif c >= 240 and c <= 244 then - i = i + 4 - else - i = i + 1 - end - len = len + 1 - end - return len -end ----@param input string ----@param targetLength number ----@param left boolean ----@return string -local function padString(input, targetLength, left) - left = left or false - local len = utf8len(input) - if len < targetLength then - if left then - input = input .. string.rep(" ", targetLength - len) - else - input = string.rep(" ", targetLength - len) .. input - end - end - return input -end - ----@class WHOQuery ----@field query string ----@field filters WHOFilter[] -WHOQuery = { - ---@param query string - ---@param filters WHOFilter[] - ---@return WHOQuery - new = function(query, filters) - local self = setmetatable({}, { - __index = WHOQuery, - }) - self.query = query - self.filters = filters - return self - end, -} - ----@alias WHOFilter fun(name: string, guild: string, level: number, race: string, class: string, zone: string): boolean ----@type WHOFilter -local NotSiegeOfOrgrimmarFilter = function(name, guild, level, race, class, zone) - if not zone then return false end - return zone ~= "Siege of Orgrimmar" -end ----@type WHOFilter -local AllianceFilter = function(name, guild, level, race, class, zone) - if not race then return false end - if not aura_env.raceMap[race] then return false end - return aura_env.raceMap[race] == "Alliance" -end - ----@class Message ----@field message string ----@field channel string ----@field data string - -if not WeakAurasSaved.Cyka.MessageQueue then WeakAurasSaved.Cyka.MessageQueue = {} end -aura_env.whoQueryIdx = 1 ----@type table -aura_env.whoQueries = {} -aura_env.whoQueries[1] = WHOQuery.new('g-"БеспредеЛ"', {}) -aura_env.whoQueries[2] = WHOQuery.new( - 'z-"Orgrimmar" z-"Durotar" z-"Valley of Trials" z-"Echo Isles" r-"Human" r-"Dwarf" r-"Night Elf"', - { NotSiegeOfOrgrimmarFilter, AllianceFilter } -) -aura_env.whoQueries[3] = WHOQuery.new( - 'z-"Orgrimmar" z-"Durotar" z-"Valley of Trials" z-"Echo Isles" r-"Gnome" r-"Draenei" r-"Worgen"', - { NotSiegeOfOrgrimmarFilter, AllianceFilter } -) -aura_env.whoQueries[4] = WHOQuery.new( - 'z-"Orgrimmar" z-"Durotar" z-"Valley of Trials" z-"Echo Isles" r-"Kul Tiran" r-"Dark Iron Dwarf" r-"Void Elf"', - { NotSiegeOfOrgrimmarFilter, AllianceFilter } -) -aura_env.whoQueries[5] = WHOQuery.new( - 'z-"Orgrimmar" z-"Durotar" z-"Valley of Trials" z-"Echo Isles" r-"Lightforged Draenei" r-"Mechagnome"', - { NotSiegeOfOrgrimmarFilter, AllianceFilter } -) -aura_env.whoQueries[6] = WHOQuery.new("Kekv Demonboo Dotmada Firobot Verminal", {}) -aura_env.queryPending = false -aura_env.ttl = #aura_env.whoQueries * 2 -aura_env.lastQuery = nil - ----@type table -aura_env.raceMap = { - ["Orc"] = "Horde", - ["Undead"] = "Horde", - ["Tauren"] = "Horde", - ["Troll"] = "Horde", - ["Blood Elf"] = "Horde", - ["Goblin"] = "Horde", - ["Human"] = "Alliance", - ["Dwarf"] = "Alliance", - ["Night Elf"] = "Alliance", - ["Gnome"] = "Alliance", - ["Draenei"] = "Alliance", - ["Worgen"] = "Alliance", - ["Vulpera"] = "Horde", - ["Nightborne"] = "Horde", - ["Zandalari Troll"] = "Horde", - ["Kul Tiran"] = "Alliance", - ["Dark Iron Dwarf"] = "Alliance", - ["Void Elf"] = "Alliance", - ["Lightforged Draenei"] = "Alliance", - ["Mechagnome"] = "Alliance", - ["Mag'har Orc"] = "Horde", -} - ----@type table -aura_env.stinkies = {} - ----@class Player ----@field name string ----@field guild string ----@field race string ----@field class string ----@field zone string ----@field lastSeenInternal number ----@field lastSeen string ----@field firstSeen string ----@field seenCount number -Player = { - ---@param name string - ---@param guild string - ---@param race string - ---@param class string - ---@param zone string - ---@return Player - new = function(name, guild, race, class, zone) - local self = setmetatable({}, { - __index = Player, - }) - self.name = name - self.guild = guild - self.race = race - self.class = class - self.zone = zone - self.lastSeenInternal = GetTime() - self.lastSeen = "never" - self.firstSeen = "never" - self.seenCount = 0 - return self - end, - ToString = function(self) - local out = string.format( - "%s %s %s\nFirst: %s Last: %s Seen: %3d", - padString(self.name, 16, true), - padString(self.guild, 26, false), - padString(self.zone, 26, false), - padString(self.firstSeen, 10, true), - padString(self.lastSeen, 10, true), - self.seenCount - ) - return string.format("|cFF%s%s|r", aura_env.classColors[self.class], out) - end, -} - ----@type table -aura_env.classColors = { - ["Warrior"] = "C69B6D", - ["Paladin"] = "F48CBA", - ["Hunter"] = "AAD372", - ["Rogue"] = "FFF468", - ["Priest"] = "FFFFFF", - ["Death Knight"] = "C41E3A", - ["Shaman"] = "0070DD", - ["Mage"] = "3FC7EB", - ["Warlock"] = "8788EE", - ["Monk"] = "00FF98", - ["Druid"] = "FF7C0A", - ["Demon Hunter"] = "A330C9", -} - ----@param input string ----@param deliminer string ----@return string[], string|nil -local function StrSplit(input, deliminer) - if not deliminer then return {}, "deliminer is nil" end - if not input then return {}, "input is nil" end - local parts = {} - for part in string.gmatch(input, "([^" .. deliminer .. "]+)") do - table.insert(parts, strtrim(part)) - end - return parts, nil -end - ----@type string[] -local toNotify = StrSplit(aura_env.config.notify, ",") -for i, part in ipairs(toNotify) do - toNotify[i] = strtrim(part) -end ----@type table -local notifyFor = {} -local notifyForD = StrSplit(aura_env.config.notifyFor, ",") -for i, part in ipairs(notifyForD) do - notifyFor[part] = true -end - ----@param player Player ----@return string -aura_env.MakeNotifyMessage = function(player) - return string.format( - "%s of class %s and guild %s in %s, first seen: %s, last seen: %s, times seen: %d", - player.name, - player.class, - player.guild, - player.zone, - player.firstSeen, - player.lastSeen, - player.seenCount - ) -end ----@param msg string -local NotifyAll = function(msg) - for _, rec in ipairs(toNotify) do - ---@type Message - local message = { - channel = "WHISPER", - data = rec, - message = msg, - } - table.insert(WeakAurasSaved.Cyka.MessageQueue, message) - end -end ----@param msg string -local NotifyChannel = function(msg) - local message = { - channel = "CHANNEL", - data = aura_env.config.channel, - message = msg, - } - table.insert(WeakAurasSaved.Cyka.MessageQueue, message) -end - ----@param player Player ----@return nil -aura_env.Notify = function(player) - if not notifyFor[player.zone] then return end - local msg = aura_env.MakeNotifyMessage(player) - NotifyAll(msg) - aura_env.NotifyChannel(player) -end - ----@param player Player ----@param newzone string ----@return nil -aura_env.NotifyZoneChanged = function(player, newzone) - if not notifyFor[newzone] then return end - local msg = - string.format("%s of class %s and guild %s moved to %s", player.name, player.class, player.guild, newzone) - NotifyAll(msg) - NotifyChannel(msg) -end - ----@param player Player ----@return nil -aura_env.NotifyGone = function(player) - if not notifyFor[player.zone] then return end - local msg = - string.format("%s of class %s and guild %s left %s", player.name, player.class, player.guild, player.zone) - NotifyAll(msg) - aura_env.NotifyChannelGone(player) -end - ----@param player Player ----@return nil -aura_env.NotifyChannel = function(player) - local msg = aura_env.MakeNotifyMessage(player) - NotifyChannel(msg) -end - ----@param player Player ----@return nil -aura_env.NotifyChannelGone = function(player) - local msg = - string.format("%s of class %s and guild %s left %s", player.name, player.class, player.guild, player.zone) - NotifyChannel(msg) -end - -aura_env.GetChannelName = function(channelId) - local channels = { GetChannelList() } - for i = 1, #channels, 2 do - local id = channels[i] - local name = channels[i + 1] - if id == channelId then return name end - end - return nil -end +if not WeakAurasSaved.Cyka then WeakAurasSaved.Cyka = {} end +if not WeakAurasSaved.Cyka.WhoSniffer then WeakAurasSaved.Cyka.WhoSniffer = {} end + +aura_env.ignored = { "Maritza", "Goodbones" } + +---@class aura_env +---@field raceMap table +---@field stinkies table +---@field classColors table +---@field whoQueries table +---@field ttl number +---@field messageQueue Message[] +---@field UpdateMacro fun() +---@field Notify fun(Player) +---@field NotifyGone fun(Player) +---@field queryPending boolean +---@field lastQuery WHOQuery + +---@param input string +---@return number +local function utf8len(input) + if not input then return 0 end + local len = 0 + local i = 1 + local n = #input + while i <= n do + local c = input:byte(i) + if c >= 0 and c <= 127 then + i = i + 1 + elseif c >= 194 and c <= 223 then + i = i + 2 + elseif c >= 224 and c <= 239 then + i = i + 3 + elseif c >= 240 and c <= 244 then + i = i + 4 + else + i = i + 1 + end + len = len + 1 + end + return len +end +---@param input string +---@param targetLength number +---@param left boolean +---@return string +local function padString(input, targetLength, left) + left = left or false + local len = utf8len(input) + if len < targetLength then + if left then + input = input .. string.rep(" ", targetLength - len) + else + input = string.rep(" ", targetLength - len) .. input + end + end + return input +end + +---@class WHOQuery +---@field query string +---@field filters WHOFilter[] +WHOQuery = { + ---@param query string + ---@param filters WHOFilter[] + ---@return WHOQuery + new = function(query, filters) + local self = setmetatable({}, { + __index = WHOQuery, + }) + self.query = query + self.filters = filters + return self + end, +} + +---@alias WHOFilter fun(name: string, guild: string, level: number, race: string, class: string, zone: string): boolean +---@type WHOFilter +local NotSiegeOfOrgrimmarFilter = function(name, guild, level, race, class, zone) + if not zone then return false end + return zone ~= "Siege of Orgrimmar" +end +---@type WHOFilter +local AllianceFilter = function(name, guild, level, race, class, zone) + if not race then return false end + if not aura_env.raceMap[race] then return false end + return aura_env.raceMap[race] == "Alliance" +end + +---@class Message +---@field message string +---@field channel string +---@field data string + +if not WeakAurasSaved.Cyka.MessageQueue then WeakAurasSaved.Cyka.MessageQueue = {} end +aura_env.whoQueryIdx = 1 +---@type table +aura_env.whoQueries = {} +aura_env.whoQueries[1] = WHOQuery.new('g-"БеспредеЛ"', {}) +aura_env.whoQueries[2] = WHOQuery.new( + 'z-"Orgrimmar" z-"Durotar" z-"Valley of Trials" z-"Echo Isles" r-"Human" r-"Dwarf" r-"Night Elf"', + { NotSiegeOfOrgrimmarFilter, AllianceFilter } +) +aura_env.whoQueries[3] = WHOQuery.new( + 'z-"Orgrimmar" z-"Durotar" z-"Valley of Trials" z-"Echo Isles" r-"Gnome" r-"Draenei" r-"Worgen"', + { NotSiegeOfOrgrimmarFilter, AllianceFilter } +) +aura_env.whoQueries[4] = WHOQuery.new( + 'z-"Orgrimmar" z-"Durotar" z-"Valley of Trials" z-"Echo Isles" r-"Kul Tiran" r-"Dark Iron Dwarf" r-"Void Elf"', + { NotSiegeOfOrgrimmarFilter, AllianceFilter } +) +aura_env.whoQueries[5] = WHOQuery.new( + 'z-"Orgrimmar" z-"Durotar" z-"Valley of Trials" z-"Echo Isles" r-"Lightforged Draenei" r-"Mechagnome"', + { NotSiegeOfOrgrimmarFilter, AllianceFilter } +) +aura_env.whoQueries[6] = WHOQuery.new("Kekv Demonboo Dotmada Firobot Verminal", {}) +aura_env.queryPending = false +aura_env.ttl = #aura_env.whoQueries * 2 +aura_env.lastQuery = nil + +---@type table +aura_env.raceMap = { + ["Orc"] = "Horde", + ["Undead"] = "Horde", + ["Tauren"] = "Horde", + ["Troll"] = "Horde", + ["Blood Elf"] = "Horde", + ["Goblin"] = "Horde", + ["Human"] = "Alliance", + ["Dwarf"] = "Alliance", + ["Night Elf"] = "Alliance", + ["Gnome"] = "Alliance", + ["Draenei"] = "Alliance", + ["Worgen"] = "Alliance", + ["Vulpera"] = "Horde", + ["Nightborne"] = "Horde", + ["Zandalari Troll"] = "Horde", + ["Kul Tiran"] = "Alliance", + ["Dark Iron Dwarf"] = "Alliance", + ["Void Elf"] = "Alliance", + ["Lightforged Draenei"] = "Alliance", + ["Mechagnome"] = "Alliance", + ["Mag'har Orc"] = "Horde", +} + +---@type table +aura_env.stinkies = {} + +---@class Player +---@field name string +---@field guild string +---@field race string +---@field class string +---@field zone string +---@field lastSeenInternal number +---@field lastSeen string +---@field firstSeen string +---@field seenCount number +Player = { + ---@param name string + ---@param guild string + ---@param race string + ---@param class string + ---@param zone string + ---@return Player + new = function(name, guild, race, class, zone) + local self = setmetatable({}, { + __index = Player, + }) + self.name = name + self.guild = guild + self.race = race + self.class = class + self.zone = zone + self.lastSeenInternal = GetTime() + self.lastSeen = "never" + self.firstSeen = "never" + self.seenCount = 0 + return self + end, + ToString = function(self) + local out = string.format( + "%s %s %s\nFirst: %s Last: %s Seen: %3d", + padString(self.name, 16, true), + padString(self.guild, 26, false), + padString(self.zone, 26, false), + padString(self.firstSeen, 10, true), + padString(self.lastSeen, 10, true), + self.seenCount + ) + return string.format("|cFF%s%s|r", aura_env.classColors[self.class], out) + end, +} + +---@type table +aura_env.classColors = { + ["Warrior"] = "C69B6D", + ["Paladin"] = "F48CBA", + ["Hunter"] = "AAD372", + ["Rogue"] = "FFF468", + ["Priest"] = "FFFFFF", + ["Death Knight"] = "C41E3A", + ["Shaman"] = "0070DD", + ["Mage"] = "3FC7EB", + ["Warlock"] = "8788EE", + ["Monk"] = "00FF98", + ["Druid"] = "FF7C0A", + ["Demon Hunter"] = "A330C9", +} + +---@param input string +---@param deliminer string +---@return string[], string|nil +local function StrSplit(input, deliminer) + if not deliminer then return {}, "deliminer is nil" end + if not input then return {}, "input is nil" end + local parts = {} + for part in string.gmatch(input, "([^" .. deliminer .. "]+)") do + table.insert(parts, strtrim(part)) + end + return parts, nil +end + +---@type string[] +local toNotify = StrSplit(aura_env.config.notify, ",") +for i, part in ipairs(toNotify) do + toNotify[i] = strtrim(part) +end +---@type table +local notifyFor = {} +local notifyForD = StrSplit(aura_env.config.notifyFor, ",") +for i, part in ipairs(notifyForD) do + notifyFor[part] = true +end + +---@param player Player +---@return string +aura_env.MakeNotifyMessage = function(player) + return string.format( + "%s of class %s and guild %s in %s, first seen: %s, last seen: %s, times seen: %d", + player.name, + player.class, + player.guild, + player.zone, + player.firstSeen, + player.lastSeen, + player.seenCount + ) +end +---@param msg string +local NotifyAll = function(msg) + for _, rec in ipairs(toNotify) do + ---@type Message + local message = { + channel = "WHISPER", + data = rec, + message = msg, + } + table.insert(WeakAurasSaved.Cyka.MessageQueue, message) + end +end +---@param msg string +local NotifyChannel = function(msg) + local message = { + channel = "CHANNEL", + data = aura_env.config.channel, + message = msg, + } + table.insert(WeakAurasSaved.Cyka.MessageQueue, message) +end + +---@param player Player +---@return nil +aura_env.Notify = function(player) + if not notifyFor[player.zone] then return end + local msg = aura_env.MakeNotifyMessage(player) + NotifyAll(msg) + aura_env.NotifyChannel(player) +end + +---@param player Player +---@param newzone string +---@return nil +aura_env.NotifyZoneChanged = function(player, newzone) + if not notifyFor[newzone] then return end + local msg = + string.format("%s of class %s and guild %s moved to %s", player.name, player.class, player.guild, newzone) + NotifyAll(msg) + NotifyChannel(msg) +end + +---@param player Player +---@return nil +aura_env.NotifyGone = function(player) + if not notifyFor[player.zone] then return end + local msg = + string.format("%s of class %s and guild %s left %s", player.name, player.class, player.guild, player.zone) + NotifyAll(msg) + aura_env.NotifyChannelGone(player) +end + +---@param player Player +---@return nil +aura_env.NotifyChannel = function(player) + local msg = aura_env.MakeNotifyMessage(player) + NotifyChannel(msg) +end + +---@param player Player +---@return nil +aura_env.NotifyChannelGone = function(player) + local msg = + string.format("%s of class %s and guild %s left %s", player.name, player.class, player.guild, player.zone) + NotifyChannel(msg) +end + +aura_env.GetChannelName = function(channelId) + local channels = { GetChannelList() } + for i = 1, #channels, 2 do + local id = channels[i] + local name = channels[i + 1] + if id == channelId then return name end + end + return nil +end diff --git a/FreshShit/WhoSniffer/plan.lua b/WeakAuras/Projects/WhoSniffer/plan.lua similarity index 100% rename from FreshShit/WhoSniffer/plan.lua rename to WeakAuras/Projects/WhoSniffer/plan.lua diff --git a/FreshShit/_Autoruns/event.lua b/WeakAuras/Projects/_Autoruns/event.lua similarity index 97% rename from FreshShit/_Autoruns/event.lua rename to WeakAuras/Projects/_Autoruns/event.lua index fa09ff3..ba458c7 100644 --- a/FreshShit/_Autoruns/event.lua +++ b/WeakAuras/Projects/_Autoruns/event.lua @@ -1,5 +1,5 @@ ---PLAYER_ENTERING_WORLD -function(e) - SetCVar("cameraYawMoveSpeed", aura_env.config.speed) - SetCVar("cameraPitchMoveSpeed", aura_env.config.speed) +--PLAYER_ENTERING_WORLD +function(e) + SetCVar("cameraYawMoveSpeed", aura_env.config.speed) + SetCVar("cameraPitchMoveSpeed", aura_env.config.speed) end \ No newline at end of file diff --git a/FreshShit/_Autoruns/export b/WeakAuras/Projects/_Autoruns/export similarity index 100% rename from FreshShit/_Autoruns/export rename to WeakAuras/Projects/_Autoruns/export diff --git a/Complete Projects/Legion/_Big ass hammer thing.lua b/WeakAuras/Projects/_Big ass hammer thing.lua similarity index 97% rename from Complete Projects/Legion/_Big ass hammer thing.lua rename to WeakAuras/Projects/_Big ass hammer thing.lua index babb8f9..c0d0a87 100644 --- a/Complete Projects/Legion/_Big ass hammer thing.lua +++ b/WeakAuras/Projects/_Big ass hammer thing.lua @@ -1,29 +1,29 @@ ---COMBAT_LOG_EVENT_UNFILTERED -function() - myTooltip = CreateFrame("GameTooltip", "MyTooltip", UIParent, "GameTooltipTemplate") - if aura_env.owner == 0 then - myTooltip:SetOwner(UIParent, "ANCHOR_NONE") - myTooltip:SetSpellByID(213757) - aura_env.owner = 1 - end - local text = _G["MyTooltipTextLeft4"]:GetText() - local time = text:match("after (%d%.?%d*) sec") - if not time then - text = _G["MyTooltipTextLeft5"]:GetText() - time = text:match("after (%d%.?%d*) sec") - end - if time then - time = time + GetTime() - local judgtime = select(7, UnitDebuff("target", "Judgment", _, "PLAYER")) or 0 - local gcds, gcdd = GetSpellCooldown(203539) or 0, 0 - if gcdd > 0 then aura_env.gcd = gcdd end - if gcds > 0 then time = time + (gcdd - (GetTime() - gcds)) end - if judgtime == 0 and aura_env.gcd > 0 then judgtime = GetTime() + aura_env.gcd end - print(time, judgtime) - if judgtime < time then return true else return false end - end -end - ---INIT -aura_env.gcd = 0 +--COMBAT_LOG_EVENT_UNFILTERED +function() + myTooltip = CreateFrame("GameTooltip", "MyTooltip", UIParent, "GameTooltipTemplate") + if aura_env.owner == 0 then + myTooltip:SetOwner(UIParent, "ANCHOR_NONE") + myTooltip:SetSpellByID(213757) + aura_env.owner = 1 + end + local text = _G["MyTooltipTextLeft4"]:GetText() + local time = text:match("after (%d%.?%d*) sec") + if not time then + text = _G["MyTooltipTextLeft5"]:GetText() + time = text:match("after (%d%.?%d*) sec") + end + if time then + time = time + GetTime() + local judgtime = select(7, UnitDebuff("target", "Judgment", _, "PLAYER")) or 0 + local gcds, gcdd = GetSpellCooldown(203539) or 0, 0 + if gcdd > 0 then aura_env.gcd = gcdd end + if gcds > 0 then time = time + (gcdd - (GetTime() - gcds)) end + if judgtime == 0 and aura_env.gcd > 0 then judgtime = GetTime() + aura_env.gcd end + print(time, judgtime) + if judgtime < time then return true else return false end + end +end + +--INIT +aura_env.gcd = 0 aura_env.owner = 0 \ No newline at end of file diff --git a/FreshShit/_GlobalSoundPlayer/event.lua b/WeakAuras/Projects/_GlobalSoundPlayer/event.lua similarity index 97% rename from FreshShit/_GlobalSoundPlayer/event.lua rename to WeakAuras/Projects/_GlobalSoundPlayer/event.lua index 8446f55..d682d15 100644 --- a/FreshShit/_GlobalSoundPlayer/event.lua +++ b/WeakAuras/Projects/_GlobalSoundPlayer/event.lua @@ -1,7 +1,7 @@ --- PLAY_SOUND -function(e, file) - local success = PlaySoundFile(file, "Master") - if not success then - if aura_env.debug then print(string.format("Failed to play sound file at %s", file)) end - end +-- PLAY_SOUND +function(e, file) + local success = PlaySoundFile(file, "Master") + if not success then + if aura_env.debug then print(string.format("Failed to play sound file at %s", file)) end + end end \ No newline at end of file diff --git a/Complete Projects/Legion/_GlobalTicker.lua b/WeakAuras/Projects/_GlobalTicker.lua similarity index 97% rename from Complete Projects/Legion/_GlobalTicker.lua rename to WeakAuras/Projects/_GlobalTicker.lua index 9e73e28..b78019e 100644 --- a/Complete Projects/Legion/_GlobalTicker.lua +++ b/WeakAuras/Projects/_GlobalTicker.lua @@ -1,11 +1,11 @@ ---PLAYER_REGEN_DISABLED PLAYER_REGEN_ENABLED -function() - if not WeakAurasSaved.GlobalTicker._callback then - WeakAurasSaved.GlobalTicker = C_Timer.NewTicker(0.2, function() WeakAuras.ScanEvents("GLOBAL_TICKER") end) - end -end - ---INIT -if not WeakAurasSaved.GlobalTicker._callback then - WeakAurasSaved.GlobalTicker = C_Timer.NewTicker(0.2, function() WeakAuras.ScanEvents("GLOBAL_TICKER") end) -end +--PLAYER_REGEN_DISABLED PLAYER_REGEN_ENABLED +function() + if not WeakAurasSaved.GlobalTicker._callback then + WeakAurasSaved.GlobalTicker = C_Timer.NewTicker(0.2, function() WeakAuras.ScanEvents("GLOBAL_TICKER") end) + end +end + +--INIT +if not WeakAurasSaved.GlobalTicker._callback then + WeakAurasSaved.GlobalTicker = C_Timer.NewTicker(0.2, function() WeakAuras.ScanEvents("GLOBAL_TICKER") end) +end diff --git a/FreshShit/_GlobalTickers/event.lua b/WeakAuras/Projects/_GlobalTickers/event.lua similarity index 97% rename from FreshShit/_GlobalTickers/event.lua rename to WeakAuras/Projects/_GlobalTickers/event.lua index 14597de..6d84dd2 100644 --- a/FreshShit/_GlobalTickers/event.lua +++ b/WeakAuras/Projects/_GlobalTickers/event.lua @@ -1,14 +1,14 @@ --- PLAYER_ENTERING_WORLD GUILD_ROSTER_UPDATE -function(e) - for interval, ticker in pairs(aura_env.Tickers) do - if ticker == 0 then - if aura_env.Debug then print("Creating ticker") end - local tickerEvent = string.format("TICKER_%d", interval) - aura_env.Tickers[interval] = C_Timer.NewTicker(interval / 1000, function() - WeakAuras.ScanEvents(tickerEvent) - end) - else - if aura_env.Debug then print("Ticker already exists") end - end - end +-- PLAYER_ENTERING_WORLD GUILD_ROSTER_UPDATE +function(e) + for interval, ticker in pairs(aura_env.Tickers) do + if ticker == 0 then + if aura_env.Debug then print("Creating ticker") end + local tickerEvent = string.format("TICKER_%d", interval) + aura_env.Tickers[interval] = C_Timer.NewTicker(interval / 1000, function() + WeakAuras.ScanEvents(tickerEvent) + end) + else + if aura_env.Debug then print("Ticker already exists") end + end + end end \ No newline at end of file diff --git a/FreshShit/_GlobalTickers/export b/WeakAuras/Projects/_GlobalTickers/export similarity index 100% rename from FreshShit/_GlobalTickers/export rename to WeakAuras/Projects/_GlobalTickers/export diff --git a/FreshShit/_GlobalTickers/init.lua b/WeakAuras/Projects/_GlobalTickers/init.lua similarity index 93% rename from FreshShit/_GlobalTickers/init.lua rename to WeakAuras/Projects/_GlobalTickers/init.lua index 912f39c..525d396 100644 --- a/FreshShit/_GlobalTickers/init.lua +++ b/WeakAuras/Projects/_GlobalTickers/init.lua @@ -1,10 +1,10 @@ -aura_env.Debug = false -aura_env.Tickers = { - [100] = 0, - [200] = 0, - [500] = 0, - [1000] = 0, - [5000] = 0, - [10000] = 0, - [60000] = 0, -} +aura_env.Debug = false +aura_env.Tickers = { + [100] = 0, + [200] = 0, + [500] = 0, + [1000] = 0, + [5000] = 0, + [10000] = 0, + [60000] = 0, +} diff --git a/FreshShit/_ReactiveValue/event.lua b/WeakAuras/Projects/_ReactiveValue/event.lua similarity index 96% rename from FreshShit/_ReactiveValue/event.lua rename to WeakAuras/Projects/_ReactiveValue/event.lua index 1b73b31..c7df21e 100644 --- a/FreshShit/_ReactiveValue/event.lua +++ b/WeakAuras/Projects/_ReactiveValue/event.lua @@ -1,681 +1,681 @@ --- PLAYER_ENTERING_WORLD -function(e) - if ReactiveValue then return end - - ---@diagnostic disable: missing-return - local function dumpTable(table, depth) - if (depth > 200) then - print("Error: Depth > 200 in dumpTable()") - return - end - for k, v in pairs(table) do - if (type(v) == "table") then - print(string.rep(" ", depth) .. k .. ":") - dumpTable(v, depth + 1) - else - print(string.rep(" ", depth) .. k .. ": ", v) - end - end - end - - local metadata = { - ---@param self ReactiveValue - ---@param other ReactiveValue - ---@return ReactiveValue|nil - __add = function(self, other) - local otherType = type(other) - if otherType == "table" and other._type and other._type == self._type and other._value then - return self._value + other._value - end - if otherType == "string" and self._type == otherType then - return self._value .. other - end - if otherType == "number" and self._type == otherType then - return self._value + other - end - return nil - end, - ---@param self ReactiveValue - ---@param other ReactiveValue - ---@return ReactiveValue|nil - __mul = function(self, other) - local otherType = type(other) - if otherType == "table" and other._type and other._type == self._type and other._value then - return self._value * other._value - end - if otherType == "number" and self._type == otherType then - return self._value * other - end - return nil - end, - ---@param self ReactiveValue - ---@param other ReactiveValue - ---@return ReactiveValue|nil - __sub = function(self, other) - local otherType = type(other) - if otherType == "table" and other._type and other._type == self._type and other._value then - return self._value - other._value - end - if otherType == "number" and self._type == otherType then - return self._value - other - end - return nil - end, - ---@param self ReactiveValue - ---@param other ReactiveValue - ---@return ReactiveValue|nil - __div = function(self, other) - local otherType = type(other) - if otherType == "table" and other._type and other._type == self._type and other._value then - return self._value / other._value - end - if otherType == "number" and self._type == otherType then - return self._value / other - end - return nil - end, - ---@param self ReactiveValue - ---@param other ReactiveValue - ---@return ReactiveValue|nil - __mod = function(self, other) - local otherType = type(other) - if otherType == "table" and other._type and other._type == self._type and other._value then - return self._value % other._value - end - if otherType == "number" and self._type == otherType then - return self._value % other - end - return nil - end, - ---@param self ReactiveValue - ---@param other ReactiveValue - ---@return ReactiveValue|nil - __pow = function(self, other) - local otherType = type(other) - if otherType == "table" and other._type and other._type == self._type and other._value then - return self._value ^ other._value - end - if otherType == "number" and self._type == otherType then - return self._value ^ other - end - return nil - end, - ---@param self ReactiveValue - ---@param other ReactiveValue - ---@return boolean - __eq = function(self, other) - local otherType = type(other) - if otherType == "table" and other._type and other._type == self._type and other._value then - return self._value == other._value - end - return self._value == other - end, - ---@param self ReactiveValue - ---@param other ReactiveValue - ---@return boolean - __lt = function(self, other) - local otherType = type(other) - if otherType == "table" and other._type and other._type == self._type and other._value then - return self._value < other._value - end - return self._value < other - end, - ---@param self ReactiveValue - ---@param other ReactiveValue - ---@return boolean - __le = function(self, other) - local otherType = type(other) - if otherType == "table" and other._type and other._type == self._type and other._value then - return self._value <= other._value - end - return self._value <= other - end, - ---@param self ReactiveValue - ---@param other ReactiveValue - ---@return boolean - __gt = function(self, other) - local otherType = type(other) - if otherType == "table" and other._type and other._type == self._type and other._value then - return self._value > other._value - end - return self._value > other - end, - ---@param self ReactiveValue - ---@param other ReactiveValue - ---@return boolean - __ge = function(self, other) - local otherType = type(other) - if otherType == "table" and other._type and other._type == self._type and other._value then - return self._value >= other._value - end - return self._value >= other - end, - ---@param self ReactiveValue - ---@return number - __len = function(self) - if self._type == "table" then - return #self._value - end - if self._type == "string" then - return string.len(self._value) - end - return 0 - end, - ---@param self ReactiveValue - ---@return string - __tostring = function(self) - return tostring(self._value) - end, - ---@param self ReactiveValue - ---@param key string - ---@param value any - ---@return nil - __newindex = function(self, key, value) - local setupComplete = rawget(self, "_setupComplete") - if setupComplete == nil or setupComplete == false then - rawset(self, key, value) - return - end - if self._type ~= "table" then - rawset(self, key, value) - return - end - - self._value[key] = value - local ChangedKey = { key } - - -- If the value being assigned is a ReactiveValue - -- Then listen to changes on it as well - -- And propagate those changes upwards - if self._recursive and getmetatable(value) == getmetatable(self) then - self:_setupListeners(key, value) - end - - self:_notify() - self:_notifyFieldChanged(ChangedKey) - self:_notifyAnyFieldChanged(ChangedKey) - end, - ---@param self ReactiveValue - ---@param key string - ---@return any|nil - __index = function(self, key) - local value = rawget(self, key) - if value ~= nil then - return value - end - if rawget(self, "_type") ~= "table" then - return nil - end - local innerTable = rawget(self, "_value") - if innerTable ~= nil then - return rawget(innerTable, key) - end - return nil - end - -- __index = ReactiveValue - } - - --- Sadly I could not get @generic to play nice with this class - --- I think it's not ready yet, there are issues on github describing similar problems and it is marked as WIP... - --- Guess I'll have to live without it for now and specify type of a RV in #type - - ---## A type safe value that can be listened to for changes - ---### **Always use RV:set() for setting primitive values** - --- Supports primitive values and tables
- --- Tables can be listened to for changes on any field or a specific field
- ---### Example usage (value):
- --- ```lua - --- local test = ReactiveValue.new(1) - --- test:onChange(function(value) - --- print("test changed to " .. value) - --- end) - --- test:set(2) - --- test:set(test + 3) - --- ``` - ---### Example usage (table):
- --- ```lua - --- local test = ReactiveValue.new({1, 2, 3}) - --- test:onAnyFieldChange(function(field, value) - --- print(string.format("test.%s changed to %s", table.concat(field, "."), value)) - --- end) - --- test[1] = 4 -- test.1 changed to 4 - --- test[4] = {1, 2, 3} -- test.4 changed to - --- test[4][1] = 14 -- No log(!!) because test[4] is a table and not a ReactiveValue - --- ``` - ---### To trigger a callback for `test[4][1]` in the previous example do:
- --- ```lua - --- local test = ReactiveValue.new({1, 2, 3}, true) - --- test:onAnyFieldChange(function(field, value) - --- print(string.format("test.%s changed to %s", table.concat(field, "."), value)) - --- end) - --- test[1] = 4 -- test.1 changed to 4 - --- test[4] = {1, 2, 3} -- test.4 changed to
- --- test[4][1] = 14 -- test.4.1 changed to 14 - --- ``` - ---### To listen to a specific field of a table do:
- --- ```lua - --- local test = ReactiveValue.new({1, 2, 3}, true) - --- test:onFieldChange("1", function(value) - --- print("test.1 changed to " .. value) - --- end) - --- test[1] = 4 -- test.1 changed to 4 - --- test[4] = {1, 2, 3} -- Does not trigger callback - -- ``` - ---@class ReactiveValue - ---@field _listeners table - ---@field _fieldListeners table> - ---@field _anyFieldListeners table> - ---@field _oneTimeListeners table - ---@field _value any - ---@field _type string - ---@field _recursive boolean? - ReactiveValue = { - ---#### Get the underlying value of a ReactiveValue - ---@param self ReactiveValue - ---@return any - get = function(self) end, - - ---### Set the underlying value of a ReactiveValue triggering listener callbacks - ---@param self ReactiveValue - ---@param newValue any - set = function(self, newValue) end, - - ---## EVENT - ---### Register a listener that is triggered whenever the underlying value changes - --- Returns a function that can be called to undo the callback - ---@param self ReactiveValue - ---@param callback fun(value: any, type: string) - ---@return fun(): nil - onChange = function(self, callback) end, - - ---## EVENT - ---### Register a listener that is triggered whenever a specific field of a table changes - --- Returns a function that can be called to undo the callback - ---@param self ReactiveValue - ---@param field string - ---@param callback fun(field: string[], value: any, type: string) - ---@return fun(): nil - onFieldChange = function(self, field, callback) end, - - ---## EVENT - ---### Register a listener that is triggered whenever any field of a table changes - --- Returns a function that can be called to undo the callback - ---@param self ReactiveValue - ---@param callback fun(field: string[], value: any, type: string) - ---@param depth number? How deep to listen for changes - ---@return fun(): nil - onAnyFieldChange = function(self, callback, depth) end, - - ---## EVENT - ---### Register a listener that is triggered ONCE whenever the underlying value changes - --- Returns a function that can be called to undo the callback - ---@param self ReactiveValue - ---@param callback fun(value: any, type: string) - ---@return fun(): nil - once = function(self, callback) end, - ---### Setup listeners for all fields of a table recursively - --- This is used to ensure that listeners are notified recursively - - ---@param self ReactiveValue - _setupAllListenersRecursively = function(self) end, - ---### Setup listeners for a specific field of a table recursively - --- This is used to ensure that listeners are notified recursively - - ---@param self ReactiveValue - _setupListeners = function(self, key, value, recursive) end, - - ---### Notify listeners that the underlying value has changed - ---@param self ReactiveValue - ---@return nil - ---#### Event contains: - --- 2. value: any - The new value of the changed field - --- 3. type: string - The type of the new value of the changed field - _notify = function(self) end, - - ---### Notify listeners that a specific field of the underlying value has changed - ---#### Event contains: - --- 1. field: table - A list of keys that lead to the changed field - --- 2. value: any - The new value of the changed field - --- 3. type: string - The type of the new value of the changed field - ---@param self ReactiveValue - _notifyFieldChanged = function(self, field) end, - - ---### Notify listeners that any field of the underlying value has changed - ---#### Event contains: - --- 1. field: table - A list of keys that lead to the changed field - --- 2. value: any - The new value of the changed field - --- 3. type: string - The type of the new value of the changed field - _notifyAnyFieldChanged = function(self, field) end, - } - ---### Constructor - ---@param initialValue any - ---@param recursive boolean? - ---@return ReactiveValue - ReactiveValue.new = function(initialValue, recursive) - local self = setmetatable({}, metadata) - self._listeners = {} - self._fieldListeners = {} - self._anyFieldListeners = {} - self._oneTimeListeners = {} - self._value = initialValue - self._type = type(initialValue) - self._recursive = recursive or false - - ---@return any - self.get = function(self) - return self._value - end - ---@param newValue any - self.set = function(self, newValue) - if self._value == newValue then - return - end - if type(newValue) ~= self._type then - error("Expected " .. self._type .. ", got " .. type(newValue)) - return - end - self._value = newValue - self:_notify() - end - self.onChange = function(self, callback) - if type(callback) ~= "function" then - error("Expected function, got " .. type(callback)) - return function() end - end - self._listeners[callback] = true - return function() - self._listeners[callback] = nil - end - end - self.onFieldChange = function(self, field, callback) - if type(callback) ~= "function" then - error("Expected function, got " .. type(callback)) - return function() end - end - if self._fieldListeners[field] == nil then - self._fieldListeners[field] = {} - end - self._fieldListeners[field][callback] = true - return function() - self._fieldListeners[field][callback] = nil - end - end - self.onAnyFieldChange = function(self, callback, depth) - depth = depth or 99999 - if type(callback) ~= "function" then - error("Expected function, got " .. type(callback)) - return function() end - end - if self._anyFieldListeners[depth] == nil then - self._anyFieldListeners[depth] = {} - end - self._anyFieldListeners[depth][callback] = true - return function() - self._anyFieldListeners[depth][callback] = nil - end - end - self.once = function(self, callback) - if type(callback) ~= "function" then - error("Expected function, got " .. type(callback)) - return function() end - end - self._oneTimeListeners[callback] = true - return function() - self._oneTimeListeners[callback] = nil - end - end - - self._setupAllListenersRecursively = function(self) - if self._type ~= "table" then - return - end - for key, value in pairs(self._value) do - self:_setupListeners(key, value, true) - end - end - ---@param key string - ---@param value any - ---@param recursive boolean? - self._setupListeners = function(self, key, value, recursive) - recursive = recursive or false - if self._type ~= "table" then - return - end - if getmetatable(value) ~= getmetatable(self) then - return - end - value._recursive = true - if value._type == "table" then - value:onAnyFieldChange(function(key2) - ChangedKey = { key, table.unpack(key2) } - self:_notifyFieldChanged(ChangedKey) - self:_notifyAnyFieldChanged(ChangedKey) - end) - else - value:onChange(function(newVal) - ChangedKey = { key } - self:_notifyFieldChanged(ChangedKey) - self:_notifyAnyFieldChanged(ChangedKey) - end) - end - - if recursive then - value:_setupAllListenersRecursively() - end - end - - if recursive then - self:_setupAllListenersRecursively() - end - - self._notify = function(self) - for listener, _ in pairs(self._oneTimeListeners) do - -- task.spawn(listener, self._value, self._type) - listener(self._value, self._type) - self._oneTimeListeners[listener] = nil - end - for listener, _ in pairs(self._listeners) do - -- task.spawn(listener, self._value, self._type) - listener(self._value, self._type) - end - end - -- TODO: Maybe implement some sort of regex here or something... - -- Such as listening to *.field1 or something - -- But this (having to loop over listeners and evaluate some condition) would tank performance - -- Compared to a simple lookup - -- So I'm not going to do anything about it for now, until I figure out a better way - ---@param field table A list of keys that lead to the changed field - ---@return nil - self._notifyFieldChanged = function(self, field) - local value = self._value - for _, key in ipairs(field) do - value = value[key] - end - - local strfield = table.concat(field, ".") - if self._fieldListeners[strfield] == nil then - return - end - for listener, _ in pairs(self._fieldListeners[strfield]) do - -- task.spawn(listener, value, type(value)) - listener(value, type(value)) - end - end - ---@param self ReactiveValue - ---@param field table A list of keys that lead to the changed field - ---@return nil - self._notifyAnyFieldChanged = function(self, field) - local value = self._value - for _, key in ipairs(field) do - value = value[key] - end - local keyDepth = #field - for listenerDepth, listeners in pairs(self._anyFieldListeners) do - if listenerDepth >= keyDepth then - for listener, _ in pairs(listeners) do - -- The reason this also returns type(value) is so that clients don't have to compute type(value) - -- I assume some of them might want to do it so computing it once is probably better than having every client compute it for themselves - -- task.spawn(listener, field, value, type(value)) - listener(field, value, type(value)) - end - end - end - end - - self._setupComplete = true - return self - end - - _G["ReactiveValue"] = ReactiveValue - - -- S -- begintest - -- S local invocations = 0 - -- S -- Integer example - -- S local test = ReactiveValue.new(1) - -- S test:onChange(function(value) - -- S invocations = invocations + 1 - -- S print("test changed to " .. value) - -- S end) - -- S test:set(2) - -- S assert(invocations == 1) - -- S - -- S invocations = 0 - -- String example - -- S test = ReactiveValue.new("test") - -- S test:onChange(function(value) - -- S invocations = invocations + 1 - -- S print("test changed to " .. value) - -- S end) - -- S test:set("test2") - -- S assert(invocations == 1) - -- S - -- S -- Type safety example - -- S local res, err = pcall(test.set, test, 1) - -- S assert(res == false) - -- S assert(err:find("Expected string, got number")) - -- S - -- S -- Table example - -- S invocations = 0 - -- S test = ReactiveValue.new({1, 2, 3}) - -- S local clbk = test:onChange(function(value) - -- S invocations = invocations + 1 - -- S print("test changed to") - -- S dumpTable(value, 0) - -- S end) - -- S test:set({1, 2, 3, 4}) - -- S assert(invocations == 1) - -- S - -- S -- Callback removal example - -- S clbk() - -- S - -- S invocations = 0 - -- S -- Any field change example - -- S clbk = test:onAnyFieldChange(function(field, value) - -- S invocations = invocations + 1 - -- S print("test." .. table.concat(field, ".") .. " changed to " .. tostring(value)) - -- S end) - -- S test.Pero = 1 - -- S test.Pero = nil - -- S assert(invocations == 2) - -- S clbk() - -- S - -- S invocations = 0 - -- S -- Field change example - -- S test:onFieldChange("Pero", function(value) - -- S invocations = invocations + 1 - -- S print("test.Pero changed to " .. value) - -- S end) - -- S test.Pero = 2 - -- S assert(invocations == 1) - -- S - -- S invocations = 0 - -- S -- One time listener example - -- S test:once(function(value) - -- S invocations = invocations + 1 - -- S print("test changed to") - -- S dumpTable(value, 0) - -- S end) - -- S test:set({3, 2, 1}) - -- S assert(invocations == 1) - -- S - -- S invocations = 0 - -- S -- Table push example - -- S test = ReactiveValue.new({}) - -- S test:onChange(function(value) - -- S invocations = invocations + 1 - -- S print("test changed to") - -- S dumpTable(value, 0) - -- S end) - -- S test:onAnyFieldChange(function(field, value) - -- S invocations = invocations + 1 - -- S print("test." .. table.concat(field, ".") .. " changed to " .. value) - -- S end) - -- S test[#test + 1] = 4 - -- S assert(invocations == 2) - -- S - -- S invocations = 0 - -- S test = ReactiveValue.new({ - -- S name = "pero", - -- S coins = ReactiveValue.new(1) - -- S }) - -- S test.coins:onChange(function(value) - -- S invocations = invocations + 1 - -- S print("test.coins changed to " .. value) - -- S end) - -- S test.coins:set(2) - -- S assert(invocations == 1) - -- S - -- S invocations = 0 - -- S test = ReactiveValue.new({ - -- S name = "pero", - -- S coins = ReactiveValue.new(1) - -- S }, true) - -- S test:onAnyFieldChange(function(field, value) - -- S invocations = invocations + 1 - -- S print("test." .. table.concat(field, ".") .. " changed to " .. tostring(value)) - -- S end) - -- S test.coins:set(2) - -- S test.pero2 = ReactiveValue.new({}) - -- S test.pero2.coins = ReactiveValue.new(1) - -- S test.pero2.coins:set(2) - -- S assert(invocations == 4) - -- S - -- S invocations = 0 - -- S test = ReactiveValue.new({ - -- S name = "pero", - -- S coins = ReactiveValue.new({ - -- S value = ReactiveValue.new(1) - -- S }) - -- S }, true) - -- S test:onAnyFieldChange(function(field, value) - -- S invocations = invocations + 1 - -- S print("test." .. table.concat(field, ".") .. " changed to " .. tostring(value)) - -- S end) - -- S test.coins.value:set(2) - -- S assert(invocations == 1) - -- S - -- S invocations = 0 - -- S test = ReactiveValue.new({}, true) - -- S test.coins = ReactiveValue.new({}) - -- S test.coins.value = ReactiveValue.new(1) - -- S test:onAnyFieldChange(function(field, value) - -- S invocations = invocations + 1 - -- S print("test." .. table.concat(field, ".") .. " changed to " .. tostring(value)) - -- S end) - -- S test.coins.value:set(3) - -- S assert(invocations == 1) - --S - --S invocations = 0 - --S test = ReactiveValue.new({}, true) - --S test:onAnyFieldChange(function(field, value) - --S invocations = invocations + 1 - --S print("test." .. table.concat(field, ".") .. " changed to " .. tostring(value)) - --S end, 1) - --S test.test2 = ReactiveValue.new({}, true) - --S test.test2.test3 = ReactiveValue.new(1) - --S assert(invocations == 1) - --S - -- S -- endtest - - -- return ReactiveValue +-- PLAYER_ENTERING_WORLD +function(e) + if ReactiveValue then return end + + ---@diagnostic disable: missing-return + local function dumpTable(table, depth) + if (depth > 200) then + print("Error: Depth > 200 in dumpTable()") + return + end + for k, v in pairs(table) do + if (type(v) == "table") then + print(string.rep(" ", depth) .. k .. ":") + dumpTable(v, depth + 1) + else + print(string.rep(" ", depth) .. k .. ": ", v) + end + end + end + + local metadata = { + ---@param self ReactiveValue + ---@param other ReactiveValue + ---@return ReactiveValue|nil + __add = function(self, other) + local otherType = type(other) + if otherType == "table" and other._type and other._type == self._type and other._value then + return self._value + other._value + end + if otherType == "string" and self._type == otherType then + return self._value .. other + end + if otherType == "number" and self._type == otherType then + return self._value + other + end + return nil + end, + ---@param self ReactiveValue + ---@param other ReactiveValue + ---@return ReactiveValue|nil + __mul = function(self, other) + local otherType = type(other) + if otherType == "table" and other._type and other._type == self._type and other._value then + return self._value * other._value + end + if otherType == "number" and self._type == otherType then + return self._value * other + end + return nil + end, + ---@param self ReactiveValue + ---@param other ReactiveValue + ---@return ReactiveValue|nil + __sub = function(self, other) + local otherType = type(other) + if otherType == "table" and other._type and other._type == self._type and other._value then + return self._value - other._value + end + if otherType == "number" and self._type == otherType then + return self._value - other + end + return nil + end, + ---@param self ReactiveValue + ---@param other ReactiveValue + ---@return ReactiveValue|nil + __div = function(self, other) + local otherType = type(other) + if otherType == "table" and other._type and other._type == self._type and other._value then + return self._value / other._value + end + if otherType == "number" and self._type == otherType then + return self._value / other + end + return nil + end, + ---@param self ReactiveValue + ---@param other ReactiveValue + ---@return ReactiveValue|nil + __mod = function(self, other) + local otherType = type(other) + if otherType == "table" and other._type and other._type == self._type and other._value then + return self._value % other._value + end + if otherType == "number" and self._type == otherType then + return self._value % other + end + return nil + end, + ---@param self ReactiveValue + ---@param other ReactiveValue + ---@return ReactiveValue|nil + __pow = function(self, other) + local otherType = type(other) + if otherType == "table" and other._type and other._type == self._type and other._value then + return self._value ^ other._value + end + if otherType == "number" and self._type == otherType then + return self._value ^ other + end + return nil + end, + ---@param self ReactiveValue + ---@param other ReactiveValue + ---@return boolean + __eq = function(self, other) + local otherType = type(other) + if otherType == "table" and other._type and other._type == self._type and other._value then + return self._value == other._value + end + return self._value == other + end, + ---@param self ReactiveValue + ---@param other ReactiveValue + ---@return boolean + __lt = function(self, other) + local otherType = type(other) + if otherType == "table" and other._type and other._type == self._type and other._value then + return self._value < other._value + end + return self._value < other + end, + ---@param self ReactiveValue + ---@param other ReactiveValue + ---@return boolean + __le = function(self, other) + local otherType = type(other) + if otherType == "table" and other._type and other._type == self._type and other._value then + return self._value <= other._value + end + return self._value <= other + end, + ---@param self ReactiveValue + ---@param other ReactiveValue + ---@return boolean + __gt = function(self, other) + local otherType = type(other) + if otherType == "table" and other._type and other._type == self._type and other._value then + return self._value > other._value + end + return self._value > other + end, + ---@param self ReactiveValue + ---@param other ReactiveValue + ---@return boolean + __ge = function(self, other) + local otherType = type(other) + if otherType == "table" and other._type and other._type == self._type and other._value then + return self._value >= other._value + end + return self._value >= other + end, + ---@param self ReactiveValue + ---@return number + __len = function(self) + if self._type == "table" then + return #self._value + end + if self._type == "string" then + return string.len(self._value) + end + return 0 + end, + ---@param self ReactiveValue + ---@return string + __tostring = function(self) + return tostring(self._value) + end, + ---@param self ReactiveValue + ---@param key string + ---@param value any + ---@return nil + __newindex = function(self, key, value) + local setupComplete = rawget(self, "_setupComplete") + if setupComplete == nil or setupComplete == false then + rawset(self, key, value) + return + end + if self._type ~= "table" then + rawset(self, key, value) + return + end + + self._value[key] = value + local ChangedKey = { key } + + -- If the value being assigned is a ReactiveValue + -- Then listen to changes on it as well + -- And propagate those changes upwards + if self._recursive and getmetatable(value) == getmetatable(self) then + self:_setupListeners(key, value) + end + + self:_notify() + self:_notifyFieldChanged(ChangedKey) + self:_notifyAnyFieldChanged(ChangedKey) + end, + ---@param self ReactiveValue + ---@param key string + ---@return any|nil + __index = function(self, key) + local value = rawget(self, key) + if value ~= nil then + return value + end + if rawget(self, "_type") ~= "table" then + return nil + end + local innerTable = rawget(self, "_value") + if innerTable ~= nil then + return rawget(innerTable, key) + end + return nil + end + -- __index = ReactiveValue + } + + --- Sadly I could not get @generic to play nice with this class + --- I think it's not ready yet, there are issues on github describing similar problems and it is marked as WIP... + --- Guess I'll have to live without it for now and specify type of a RV in #type + + ---## A type safe value that can be listened to for changes + ---### **Always use RV:set() for setting primitive values** + --- Supports primitive values and tables
+ --- Tables can be listened to for changes on any field or a specific field
+ ---### Example usage (value):
+ --- ```lua + --- local test = ReactiveValue.new(1) + --- test:onChange(function(value) + --- print("test changed to " .. value) + --- end) + --- test:set(2) + --- test:set(test + 3) + --- ``` + ---### Example usage (table):
+ --- ```lua + --- local test = ReactiveValue.new({1, 2, 3}) + --- test:onAnyFieldChange(function(field, value) + --- print(string.format("test.%s changed to %s", table.concat(field, "."), value)) + --- end) + --- test[1] = 4 -- test.1 changed to 4 + --- test[4] = {1, 2, 3} -- test.4 changed to
+ --- test[4][1] = 14 -- No log(!!) because test[4] is a table and not a ReactiveValue + --- ``` + ---### To trigger a callback for `test[4][1]` in the previous example do:
+ --- ```lua + --- local test = ReactiveValue.new({1, 2, 3}, true) + --- test:onAnyFieldChange(function(field, value) + --- print(string.format("test.%s changed to %s", table.concat(field, "."), value)) + --- end) + --- test[1] = 4 -- test.1 changed to 4 + --- test[4] = {1, 2, 3} -- test.4 changed to
+ --- test[4][1] = 14 -- test.4.1 changed to 14 + --- ``` + ---### To listen to a specific field of a table do:
+ --- ```lua + --- local test = ReactiveValue.new({1, 2, 3}, true) + --- test:onFieldChange("1", function(value) + --- print("test.1 changed to " .. value) + --- end) + --- test[1] = 4 -- test.1 changed to 4 + --- test[4] = {1, 2, 3} -- Does not trigger callback + -- ``` + ---@class ReactiveValue + ---@field _listeners table + ---@field _fieldListeners table> + ---@field _anyFieldListeners table> + ---@field _oneTimeListeners table + ---@field _value any + ---@field _type string + ---@field _recursive boolean? + ReactiveValue = { + ---#### Get the underlying value of a ReactiveValue + ---@param self ReactiveValue + ---@return any + get = function(self) end, + + ---### Set the underlying value of a ReactiveValue triggering listener callbacks + ---@param self ReactiveValue + ---@param newValue any + set = function(self, newValue) end, + + ---## EVENT + ---### Register a listener that is triggered whenever the underlying value changes + --- Returns a function that can be called to undo the callback + ---@param self ReactiveValue + ---@param callback fun(value: any, type: string) + ---@return fun(): nil + onChange = function(self, callback) end, + + ---## EVENT + ---### Register a listener that is triggered whenever a specific field of a table changes + --- Returns a function that can be called to undo the callback + ---@param self ReactiveValue + ---@param field string + ---@param callback fun(field: string[], value: any, type: string) + ---@return fun(): nil + onFieldChange = function(self, field, callback) end, + + ---## EVENT + ---### Register a listener that is triggered whenever any field of a table changes + --- Returns a function that can be called to undo the callback + ---@param self ReactiveValue + ---@param callback fun(field: string[], value: any, type: string) + ---@param depth number? How deep to listen for changes + ---@return fun(): nil + onAnyFieldChange = function(self, callback, depth) end, + + ---## EVENT + ---### Register a listener that is triggered ONCE whenever the underlying value changes + --- Returns a function that can be called to undo the callback + ---@param self ReactiveValue + ---@param callback fun(value: any, type: string) + ---@return fun(): nil + once = function(self, callback) end, + ---### Setup listeners for all fields of a table recursively + --- This is used to ensure that listeners are notified recursively + + ---@param self ReactiveValue + _setupAllListenersRecursively = function(self) end, + ---### Setup listeners for a specific field of a table recursively + --- This is used to ensure that listeners are notified recursively + + ---@param self ReactiveValue + _setupListeners = function(self, key, value, recursive) end, + + ---### Notify listeners that the underlying value has changed + ---@param self ReactiveValue + ---@return nil + ---#### Event contains: + --- 2. value: any - The new value of the changed field + --- 3. type: string - The type of the new value of the changed field + _notify = function(self) end, + + ---### Notify listeners that a specific field of the underlying value has changed + ---#### Event contains: + --- 1. field: table - A list of keys that lead to the changed field + --- 2. value: any - The new value of the changed field + --- 3. type: string - The type of the new value of the changed field + ---@param self ReactiveValue + _notifyFieldChanged = function(self, field) end, + + ---### Notify listeners that any field of the underlying value has changed + ---#### Event contains: + --- 1. field: table - A list of keys that lead to the changed field + --- 2. value: any - The new value of the changed field + --- 3. type: string - The type of the new value of the changed field + _notifyAnyFieldChanged = function(self, field) end, + } + ---### Constructor + ---@param initialValue any + ---@param recursive boolean? + ---@return ReactiveValue + ReactiveValue.new = function(initialValue, recursive) + local self = setmetatable({}, metadata) + self._listeners = {} + self._fieldListeners = {} + self._anyFieldListeners = {} + self._oneTimeListeners = {} + self._value = initialValue + self._type = type(initialValue) + self._recursive = recursive or false + + ---@return any + self.get = function(self) + return self._value + end + ---@param newValue any + self.set = function(self, newValue) + if self._value == newValue then + return + end + if type(newValue) ~= self._type then + error("Expected " .. self._type .. ", got " .. type(newValue)) + return + end + self._value = newValue + self:_notify() + end + self.onChange = function(self, callback) + if type(callback) ~= "function" then + error("Expected function, got " .. type(callback)) + return function() end + end + self._listeners[callback] = true + return function() + self._listeners[callback] = nil + end + end + self.onFieldChange = function(self, field, callback) + if type(callback) ~= "function" then + error("Expected function, got " .. type(callback)) + return function() end + end + if self._fieldListeners[field] == nil then + self._fieldListeners[field] = {} + end + self._fieldListeners[field][callback] = true + return function() + self._fieldListeners[field][callback] = nil + end + end + self.onAnyFieldChange = function(self, callback, depth) + depth = depth or 99999 + if type(callback) ~= "function" then + error("Expected function, got " .. type(callback)) + return function() end + end + if self._anyFieldListeners[depth] == nil then + self._anyFieldListeners[depth] = {} + end + self._anyFieldListeners[depth][callback] = true + return function() + self._anyFieldListeners[depth][callback] = nil + end + end + self.once = function(self, callback) + if type(callback) ~= "function" then + error("Expected function, got " .. type(callback)) + return function() end + end + self._oneTimeListeners[callback] = true + return function() + self._oneTimeListeners[callback] = nil + end + end + + self._setupAllListenersRecursively = function(self) + if self._type ~= "table" then + return + end + for key, value in pairs(self._value) do + self:_setupListeners(key, value, true) + end + end + ---@param key string + ---@param value any + ---@param recursive boolean? + self._setupListeners = function(self, key, value, recursive) + recursive = recursive or false + if self._type ~= "table" then + return + end + if getmetatable(value) ~= getmetatable(self) then + return + end + value._recursive = true + if value._type == "table" then + value:onAnyFieldChange(function(key2) + ChangedKey = { key, table.unpack(key2) } + self:_notifyFieldChanged(ChangedKey) + self:_notifyAnyFieldChanged(ChangedKey) + end) + else + value:onChange(function(newVal) + ChangedKey = { key } + self:_notifyFieldChanged(ChangedKey) + self:_notifyAnyFieldChanged(ChangedKey) + end) + end + + if recursive then + value:_setupAllListenersRecursively() + end + end + + if recursive then + self:_setupAllListenersRecursively() + end + + self._notify = function(self) + for listener, _ in pairs(self._oneTimeListeners) do + -- task.spawn(listener, self._value, self._type) + listener(self._value, self._type) + self._oneTimeListeners[listener] = nil + end + for listener, _ in pairs(self._listeners) do + -- task.spawn(listener, self._value, self._type) + listener(self._value, self._type) + end + end + -- TODO: Maybe implement some sort of regex here or something... + -- Such as listening to *.field1 or something + -- But this (having to loop over listeners and evaluate some condition) would tank performance + -- Compared to a simple lookup + -- So I'm not going to do anything about it for now, until I figure out a better way + ---@param field table A list of keys that lead to the changed field + ---@return nil + self._notifyFieldChanged = function(self, field) + local value = self._value + for _, key in ipairs(field) do + value = value[key] + end + + local strfield = table.concat(field, ".") + if self._fieldListeners[strfield] == nil then + return + end + for listener, _ in pairs(self._fieldListeners[strfield]) do + -- task.spawn(listener, value, type(value)) + listener(value, type(value)) + end + end + ---@param self ReactiveValue + ---@param field table A list of keys that lead to the changed field + ---@return nil + self._notifyAnyFieldChanged = function(self, field) + local value = self._value + for _, key in ipairs(field) do + value = value[key] + end + local keyDepth = #field + for listenerDepth, listeners in pairs(self._anyFieldListeners) do + if listenerDepth >= keyDepth then + for listener, _ in pairs(listeners) do + -- The reason this also returns type(value) is so that clients don't have to compute type(value) + -- I assume some of them might want to do it so computing it once is probably better than having every client compute it for themselves + -- task.spawn(listener, field, value, type(value)) + listener(field, value, type(value)) + end + end + end + end + + self._setupComplete = true + return self + end + + _G["ReactiveValue"] = ReactiveValue + + -- S -- begintest + -- S local invocations = 0 + -- S -- Integer example + -- S local test = ReactiveValue.new(1) + -- S test:onChange(function(value) + -- S invocations = invocations + 1 + -- S print("test changed to " .. value) + -- S end) + -- S test:set(2) + -- S assert(invocations == 1) + -- S + -- S invocations = 0 + -- String example + -- S test = ReactiveValue.new("test") + -- S test:onChange(function(value) + -- S invocations = invocations + 1 + -- S print("test changed to " .. value) + -- S end) + -- S test:set("test2") + -- S assert(invocations == 1) + -- S + -- S -- Type safety example + -- S local res, err = pcall(test.set, test, 1) + -- S assert(res == false) + -- S assert(err:find("Expected string, got number")) + -- S + -- S -- Table example + -- S invocations = 0 + -- S test = ReactiveValue.new({1, 2, 3}) + -- S local clbk = test:onChange(function(value) + -- S invocations = invocations + 1 + -- S print("test changed to") + -- S dumpTable(value, 0) + -- S end) + -- S test:set({1, 2, 3, 4}) + -- S assert(invocations == 1) + -- S + -- S -- Callback removal example + -- S clbk() + -- S + -- S invocations = 0 + -- S -- Any field change example + -- S clbk = test:onAnyFieldChange(function(field, value) + -- S invocations = invocations + 1 + -- S print("test." .. table.concat(field, ".") .. " changed to " .. tostring(value)) + -- S end) + -- S test.Pero = 1 + -- S test.Pero = nil + -- S assert(invocations == 2) + -- S clbk() + -- S + -- S invocations = 0 + -- S -- Field change example + -- S test:onFieldChange("Pero", function(value) + -- S invocations = invocations + 1 + -- S print("test.Pero changed to " .. value) + -- S end) + -- S test.Pero = 2 + -- S assert(invocations == 1) + -- S + -- S invocations = 0 + -- S -- One time listener example + -- S test:once(function(value) + -- S invocations = invocations + 1 + -- S print("test changed to") + -- S dumpTable(value, 0) + -- S end) + -- S test:set({3, 2, 1}) + -- S assert(invocations == 1) + -- S + -- S invocations = 0 + -- S -- Table push example + -- S test = ReactiveValue.new({}) + -- S test:onChange(function(value) + -- S invocations = invocations + 1 + -- S print("test changed to") + -- S dumpTable(value, 0) + -- S end) + -- S test:onAnyFieldChange(function(field, value) + -- S invocations = invocations + 1 + -- S print("test." .. table.concat(field, ".") .. " changed to " .. value) + -- S end) + -- S test[#test + 1] = 4 + -- S assert(invocations == 2) + -- S + -- S invocations = 0 + -- S test = ReactiveValue.new({ + -- S name = "pero", + -- S coins = ReactiveValue.new(1) + -- S }) + -- S test.coins:onChange(function(value) + -- S invocations = invocations + 1 + -- S print("test.coins changed to " .. value) + -- S end) + -- S test.coins:set(2) + -- S assert(invocations == 1) + -- S + -- S invocations = 0 + -- S test = ReactiveValue.new({ + -- S name = "pero", + -- S coins = ReactiveValue.new(1) + -- S }, true) + -- S test:onAnyFieldChange(function(field, value) + -- S invocations = invocations + 1 + -- S print("test." .. table.concat(field, ".") .. " changed to " .. tostring(value)) + -- S end) + -- S test.coins:set(2) + -- S test.pero2 = ReactiveValue.new({}) + -- S test.pero2.coins = ReactiveValue.new(1) + -- S test.pero2.coins:set(2) + -- S assert(invocations == 4) + -- S + -- S invocations = 0 + -- S test = ReactiveValue.new({ + -- S name = "pero", + -- S coins = ReactiveValue.new({ + -- S value = ReactiveValue.new(1) + -- S }) + -- S }, true) + -- S test:onAnyFieldChange(function(field, value) + -- S invocations = invocations + 1 + -- S print("test." .. table.concat(field, ".") .. " changed to " .. tostring(value)) + -- S end) + -- S test.coins.value:set(2) + -- S assert(invocations == 1) + -- S + -- S invocations = 0 + -- S test = ReactiveValue.new({}, true) + -- S test.coins = ReactiveValue.new({}) + -- S test.coins.value = ReactiveValue.new(1) + -- S test:onAnyFieldChange(function(field, value) + -- S invocations = invocations + 1 + -- S print("test." .. table.concat(field, ".") .. " changed to " .. tostring(value)) + -- S end) + -- S test.coins.value:set(3) + -- S assert(invocations == 1) + --S + --S invocations = 0 + --S test = ReactiveValue.new({}, true) + --S test:onAnyFieldChange(function(field, value) + --S invocations = invocations + 1 + --S print("test." .. table.concat(field, ".") .. " changed to " .. tostring(value)) + --S end, 1) + --S test.test2 = ReactiveValue.new({}, true) + --S test.test2.test3 = ReactiveValue.new(1) + --S assert(invocations == 1) + --S + -- S -- endtest + + -- return ReactiveValue end \ No newline at end of file diff --git a/FreshShit/_ReactiveValue/export b/WeakAuras/Projects/_ReactiveValue/export similarity index 100% rename from FreshShit/_ReactiveValue/export rename to WeakAuras/Projects/_ReactiveValue/export diff --git a/FreshShit/_Shared/CLEUParser.lua b/WeakAuras/Projects/_Shared/CLEUParser.lua similarity index 96% rename from FreshShit/_Shared/CLEUParser.lua rename to WeakAuras/Projects/_Shared/CLEUParser.lua index 220e5f3..b555ae4 100644 --- a/FreshShit/_Shared/CLEUParser.lua +++ b/WeakAuras/Projects/_Shared/CLEUParser.lua @@ -1,1283 +1,1283 @@ ----PLAYER_ENTERING_WORLD GUILD_ROSTER_UPDATE -function() - CLEUEventInfo = { - ["GENERIC"] = { - ["timestamp"] = 1, - ["subevent"] = 2, - ["hideCaster"] = 3, - ["sourceGUID"] = 4, - ["sourceName"] = 5, - ["sourceFlags"] = 6, - ["sourceRaidFlags"] = 7, - ["destGUID"] = 8, - ["destName"] = 9, - ["destFlags"] = 10, - ["destRaidFlags"] = 11 - }, - ["GENERIC_SPELL"] = { - ["spellId"] = 12, - ["spellName"] = 13, - ["spellSchool"] = 14 - }, - ["GENERIC_DAMAGE"] = { - ["amount"] = 15, - ["overkill"] = 16, - ["school"] = 17, - ["resisted"] = 18, - ["blocked"] = 19, - ["absorbed"] = 20, - ["critical"] = 21, - ["glancing"] = 22, - ["crushing"] = 23, - ["isOffHand"] = 24 - }, - ["GENERIC_MISSED"] = { - ["missType"] = 15, - ["isOffHand"] = 16, - ["amountMissed"] = 17, - ["critical"] = 18 - }, - ["GENERIC_HEAL"] = { - ["amount"] = 15, - ["overhealing"] = 16, - ["absorbed"] = 17, - ["critical"] = 18 - }, - ["GENERIC_HEAL_ABSORBED"] = { - ["extraGUID"] = 15, - ["extraName"] = 17, - ["extraFlags"] = 17, - ["extraRaidFlags"] = 18, - ["extraSpellID"] = 19, - ["extraSpellName"] = 20, - ["extraSchool"] = 21, - ["absorbedAmount"] = 22, - ["totalAmount"] = 23 - }, - ["GENERIC_ENERGIZE"] = { - ["amount"] = 15, - ["overEnergize"] = 16, - ["powerType"] = 17 - }, - ["GENERIC_DRAIN"] = { - ["amount"] = 15, - ["powerType"] = 16, - ["extraAmount"] = 17 - }, - ["GENERIC_LEECH"] = { - ["amount"] = 15, - ["powerType"] = 16, - ["extraAmount"] = 17 - }, - ["GENERIC_INTERRUPT"] = { - ["extraSpellId"] = 15, - ["extraSpellName"] = 16, - ["extraSchool"] = 17 - }, - ["GENERIC_DISPEL"] = { - ["extraSpellId"] = 15, - ["extraSpellName"] = 16, - ["extraSchool"] = 17, - ["auraType"] = 18 - }, - ["GENERIC_DISPEL_FAILED"] = { - ["extraSpellId"] = 15, - ["extraSpellName"] = 16, - ["extraSchool"] = 17 - }, - ["GENERIC_STOLEN"] = { - ["extraSpellId"] = 15, - ["extraSpellName"] = 16, - ["extraSchool"] = 17, - ["auraType"] = 18 - }, - ["GENERIC_EXTRA_ATTACKS"] = { ["amount"] = 15 }, - ["GENERIC_AURA_APPLIED"] = { ["auraType"] = 15, ["amount"] = 16 }, - ["GENERIC_AURA_REMOVED"] = { ["auraType"] = 15, ["amount"] = 16 }, - ["GENERIC_AURA_APPLIED_DOSE"] = { ["auraType"] = 15, ["amount"] = 16 }, - ["GENERIC_AURA_REMOVED_DOSE"] = { ["auraType"] = 15, ["amount"] = 16 }, - ["GENERIC_AURA_REFRESH"] = { ["auraType"] = 15 }, - ["GENERIC_AURA_BROKEN"] = { ["auraType"] = 15 }, - ["GENERIC_AURA_BROKEN_SPELL"] = { - ["extraSpellId"] = 15, - ["extraSpellName"] = 16, - ["extraSchool"] = 17, - ["auraType"] = 18 - }, - ["GENERIC_CAST_START"] = {}, - ["GENERIC_CAST_SUCCESS"] = {}, - ["GENERIC_CAST_FAILED"] = {} - } - - CLEUEventInfo["SWING_DAMAGE"] = CLEUEventInfo["GENERIC_DAMAGE"] - CLEUEventInfo["SWING_MISSED"] = CLEUEventInfo["GENERIC_MISSED"] - CLEUEventInfo["SWING_HEAL"] = CLEUEventInfo["GENERIC_HEAL"] - CLEUEventInfo["SWING_HEAL_ABSORBED"] = - CLEUEventInfo["GENERIC_HEAL_ABSORBED"] - CLEUEventInfo["SWING_ENERGIZE"] = CLEUEventInfo["GENERIC_ENERGIZE"] - CLEUEventInfo["SWING_DRAIN"] = CLEUEventInfo["GENERIC_DRAIN"] - CLEUEventInfo["SWING_LEECH"] = CLEUEventInfo["GENERIC_LEECH"] - CLEUEventInfo["SWING_INTERRUPT"] = CLEUEventInfo["GENERIC_INTERRUPT"] - CLEUEventInfo["SWING_DISPEL"] = CLEUEventInfo["GENERIC_DISPEL"] - CLEUEventInfo["SWING_DISPEL_FAILED"] = - CLEUEventInfo["GENERIC_DISPEL_FAILED"] - CLEUEventInfo["SWING_STOLEN"] = CLEUEventInfo["GENERIC_STOLEN"] - CLEUEventInfo["SWING_EXTRA_ATTACKS"] = - CLEUEventInfo["GENERIC_EXTRA_ATTACKS"] - CLEUEventInfo["SWING_AURA_APPLIED"] = CLEUEventInfo["GENERIC_AURA_APPLIED"] - CLEUEventInfo["SWING_AURA_REMOVED"] = CLEUEventInfo["GENERIC_AURA_REMOVED"] - CLEUEventInfo["SWING_AURA_APPLIED_DOSE"] = - CLEUEventInfo["GENERIC_AURA_APPLIED_DOSE"] - CLEUEventInfo["SWING_AURA_REMOVED_DOSE"] = - CLEUEventInfo["GENERIC_AURA_REMOVED_DOSE"] - CLEUEventInfo["SWING_AURA_REFRESH"] = CLEUEventInfo["GENERIC_AURA_REFRESH"] - CLEUEventInfo["SWING_AURA_BROKEN"] = CLEUEventInfo["GENERIC_AURA_BROKEN"] - CLEUEventInfo["SWING_AURA_BROKEN_SPELL"] = - CLEUEventInfo["GENERIC_AURA_BROKEN_SPELL"] - CLEUEventInfo["SWING_CAST_START"] = CLEUEventInfo["GENERIC_CAST_START"] - CLEUEventInfo["SWING_CAST_SUCCESS"] = CLEUEventInfo["GENERIC_CAST_SUCCESS"] - CLEUEventInfo["SWING_CAST_FAILED"] = CLEUEventInfo["GENERIC_CAST_FAILED"] - - CLEUEventInfo["RANGE_DAMAGE"] = CLEUEventInfo["GENERIC_DAMAGE"] - CLEUEventInfo["RANGE_MISSED"] = CLEUEventInfo["GENERIC_MISSED"] - CLEUEventInfo["RANGE_HEAL"] = CLEUEventInfo["GENERIC_HEAL"] - CLEUEventInfo["RANGE_HEAL_ABSORBED"] = - CLEUEventInfo["GENERIC_HEAL_ABSORBED"] - CLEUEventInfo["RANGE_ENERGIZE"] = CLEUEventInfo["GENERIC_ENERGIZE"] - CLEUEventInfo["RANGE_DRAIN"] = CLEUEventInfo["GENERIC_DRAIN"] - CLEUEventInfo["RANGE_LEECH"] = CLEUEventInfo["GENERIC_LEECH"] - CLEUEventInfo["RANGE_INTERRUPT"] = CLEUEventInfo["GENERIC_INTERRUPT"] - CLEUEventInfo["RANGE_DISPEL"] = CLEUEventInfo["GENERIC_DISPEL"] - CLEUEventInfo["RANGE_DISPEL_FAILED"] = - CLEUEventInfo["GENERIC_DISPEL_FAILED"] - CLEUEventInfo["RANGE_STOLEN"] = CLEUEventInfo["GENERIC_STOLEN"] - CLEUEventInfo["RANGE_EXTRA_ATTACKS"] = - CLEUEventInfo["GENERIC_EXTRA_ATTACKS"] - CLEUEventInfo["RANGE_AURA_APPLIED"] = CLEUEventInfo["GENERIC_AURA_APPLIED"] - CLEUEventInfo["RANGE_AURA_REMOVED"] = CLEUEventInfo["GENERIC_AURA_REMOVED"] - CLEUEventInfo["RANGE_AURA_APPLIED_DOSE"] = - CLEUEventInfo["GENERIC_AURA_APPLIED_DOSE"] - CLEUEventInfo["RANGE_AURA_REMOVED_DOSE"] = - CLEUEventInfo["GENERIC_AURA_REMOVED_DOSE"] - CLEUEventInfo["RANGE_AURA_REFRESH"] = CLEUEventInfo["GENERIC_AURA_REFRESH"] - CLEUEventInfo["RANGE_AURA_BROKEN"] = CLEUEventInfo["GENERIC_AURA_BROKEN"] - CLEUEventInfo["RANGE_AURA_BROKEN_SPELL"] = - CLEUEventInfo["GENERIC_AURA_BROKEN_SPELL"] - CLEUEventInfo["RANGE_CAST_START"] = CLEUEventInfo["GENERIC_CAST_START"] - CLEUEventInfo["RANGE_CAST_SUCCESS"] = CLEUEventInfo["GENERIC_CAST_SUCCESS"] - CLEUEventInfo["RANGE_CAST_FAILED"] = CLEUEventInfo["GENERIC_CAST_FAILED"] - - CLEUEventInfo["SPELL_DAMAGE"] = CLEUEventInfo["GENERIC_DAMAGE"] - CLEUEventInfo["SPELL_MISSED"] = CLEUEventInfo["GENERIC_MISSED"] - CLEUEventInfo["SPELL_HEAL"] = CLEUEventInfo["GENERIC_HEAL"] - CLEUEventInfo["SPELL_HEAL_ABSORBED"] = - CLEUEventInfo["GENERIC_HEAL_ABSORBED"] - CLEUEventInfo["SPELL_ENERGIZE"] = CLEUEventInfo["GENERIC_ENERGIZE"] - CLEUEventInfo["SPELL_DRAIN"] = CLEUEventInfo["GENERIC_DRAIN"] - CLEUEventInfo["SPELL_LEECH"] = CLEUEventInfo["GENERIC_LEECH"] - CLEUEventInfo["SPELL_INTERRUPT"] = CLEUEventInfo["GENERIC_INTERRUPT"] - CLEUEventInfo["SPELL_DISPEL"] = CLEUEventInfo["GENERIC_DISPEL"] - CLEUEventInfo["SPELL_DISPEL_FAILED"] = - CLEUEventInfo["GENERIC_DISPEL_FAILED"] - CLEUEventInfo["SPELL_STOLEN"] = CLEUEventInfo["GENERIC_STOLEN"] - CLEUEventInfo["SPELL_EXTRA_ATTACKS"] = - CLEUEventInfo["GENERIC_EXTRA_ATTACKS"] - CLEUEventInfo["SPELL_AURA_APPLIED"] = CLEUEventInfo["GENERIC_AURA_APPLIED"] - CLEUEventInfo["SPELL_AURA_REMOVED"] = CLEUEventInfo["GENERIC_AURA_REMOVED"] - CLEUEventInfo["SPELL_AURA_APPLIED_DOSE"] = - CLEUEventInfo["GENERIC_AURA_APPLIED_DOSE"] - CLEUEventInfo["SPELL_AURA_REMOVED_DOSE"] = - CLEUEventInfo["GENERIC_AURA_REMOVED_DOSE"] - CLEUEventInfo["SPELL_AURA_REFRESH"] = CLEUEventInfo["GENERIC_AURA_REFRESH"] - CLEUEventInfo["SPELL_AURA_BROKEN"] = CLEUEventInfo["GENERIC_AURA_BROKEN"] - CLEUEventInfo["SPELL_AURA_BROKEN_SPELL"] = - CLEUEventInfo["GENERIC_AURA_BROKEN_SPELL"] - CLEUEventInfo["SPELL_CAST_START"] = CLEUEventInfo["GENERIC_CAST_START"] - CLEUEventInfo["SPELL_CAST_SUCCESS"] = CLEUEventInfo["GENERIC_CAST_SUCCESS"] - CLEUEventInfo["SPELL_CAST_FAILED"] = CLEUEventInfo["GENERIC_CAST_FAILED"] - - CLEUEventInfo["SPELL_PERIODIC_DAMAGE"] = CLEUEventInfo["GENERIC_DAMAGE"] - CLEUEventInfo["SPELL_PERIODIC_MISSED"] = CLEUEventInfo["GENERIC_MISSED"] - CLEUEventInfo["SPELL_PERIODIC_HEAL"] = CLEUEventInfo["GENERIC_HEAL"] - CLEUEventInfo["SPELL_PERIODIC_HEAL_ABSORBED"] = - CLEUEventInfo["GENERIC_HEAL_ABSORBED"] - CLEUEventInfo["SPELL_PERIODIC_ENERGIZE"] = CLEUEventInfo["GENERIC_ENERGIZE"] - CLEUEventInfo["SPELL_PERIODIC_DRAIN"] = CLEUEventInfo["GENERIC_DRAIN"] - CLEUEventInfo["SPELL_PERIODIC_LEECH"] = CLEUEventInfo["GENERIC_LEECH"] - CLEUEventInfo["SPELL_PERIODIC_INTERRUPT"] = - CLEUEventInfo["GENERIC_INTERRUPT"] - CLEUEventInfo["SPELL_PERIODIC_DISPEL"] = CLEUEventInfo["GENERIC_DISPEL"] - CLEUEventInfo["SPELL_PERIODIC_DISPEL_FAILED"] = - CLEUEventInfo["GENERIC_DISPEL_FAILED"] - CLEUEventInfo["SPELL_PERIODIC_STOLEN"] = CLEUEventInfo["GENERIC_STOLEN"] - CLEUEventInfo["SPELL_PERIODIC_EXTRA_ATTACKS"] = - CLEUEventInfo["GENERIC_EXTRA_ATTACKS"] - CLEUEventInfo["SPELL_PERIODIC_AURA_APPLIED"] = - CLEUEventInfo["GENERIC_AURA_APPLIED"] - CLEUEventInfo["SPELL_PERIODIC_AURA_REMOVED"] = - CLEUEventInfo["GENERIC_AURA_REMOVED"] - CLEUEventInfo["SPELL_PERIODIC_AURA_APPLIED_DOSE"] = - CLEUEventInfo["GENERIC_AURA_APPLIED_DOSE"] - CLEUEventInfo["SPELL_PERIODIC_AURA_REMOVED_DOSE"] = - CLEUEventInfo["GENERIC_AURA_REMOVED_DOSE"] - CLEUEventInfo["SPELL_PERIODIC_AURA_REFRESH"] = - CLEUEventInfo["GENERIC_AURA_REFRESH"] - CLEUEventInfo["SPELL_PERIODIC_AURA_BROKEN"] = - CLEUEventInfo["GENERIC_AURA_BROKEN"] - CLEUEventInfo["SPELL_PERIODIC_AURA_BROKEN_SPELL"] = - CLEUEventInfo["GENERIC_AURA_BROKEN_SPELL"] - CLEUEventInfo["SPELL_PERIODIC_CAST_START"] = - CLEUEventInfo["GENERIC_CAST_START"] - CLEUEventInfo["SPELL_PERIODIC_CAST_SUCCESS"] = - CLEUEventInfo["GENERIC_CAST_SUCCESS"] - CLEUEventInfo["SPELL_PERIODIC_CAST_FAILED"] = - CLEUEventInfo["GENERIC_CAST_FAILED"] - - ---@class CLEUParser - CLEUParser = { - ---@param ... any - ---@return number, nil|string - GetTimestamp = function(...) - local val = select(CLEUEventInfo["GENERIC"]["timestamp"], ...) - if val == nil then - return 0, "Timestamp is nil or missing" - end - if type(val) ~= "number" then - return 0, "Timestamp is not a number" - end - return val, nil - end, - ---@param ... any - ---@return string, nil|string - GetSubevent = function(...) - local val = select(CLEUEventInfo["GENERIC"]["subevent"], ...) - if val == nil then - return "", "Subevent is nil or missing" - end - if type(val) ~= "string" then - return "", "Subevent is not a string" - end - return val, nil - end, - ---@param ... any - ---@return boolean, nil|string - GetHideCaster = function(...) - local val = select(CLEUEventInfo["GENERIC"]["hideCaster"], ...) - if val == nil then - return false, "HideCaster is nil or missing" - end - if type(val) ~= "boolean" then - return false, "HideCaster is not a boolean" - end - return val, nil - end, - ---@param ... any - ---@return string, nil|string - GetSourceGUID = function(...) - local val = select(CLEUEventInfo["GENERIC"]["sourceGUID"], ...) - if val == nil then - return "", "SourceGUID is nil or missing" - end - if type(val) ~= "string" then - return "", "SourceGUID is not a string" - end - return val, nil - end, - ---@param ... any - ---@return string, nil|string - GetSourceName = function(...) - local val = select(CLEUEventInfo["GENERIC"]["sourceName"], ...) - if val == nil then - return "", "SourceName is nil or missing" - end - if type(val) ~= "string" then - return "", "SourceName is not a string" - end - return val, nil - end, - ---@param ... any - ---@return number, nil|string - GetSourceFlags = function(...) - local val = select(CLEUEventInfo["GENERIC"]["sourceFlags"], ...) - if val == nil then - return 0, "SourceFlags is nil or missing" - end - if type(val) ~= "number" then - return 0, "SourceFlags is not a number" - end - return val, nil - end, - ---@param ... any - ---@return number, nil|string - GetSourceRaidFlags = function(...) - local val = select(CLEUEventInfo["GENERIC"]["sourceRaidFlags"], ...) - if val == nil then - return 0, "SourceRaidFlags is nil or missing" - end - if type(val) ~= "number" then - return 0, "SourceRaidFlags is not a number" - end - return val, nil - end, - ---@param ... any - ---@return string, nil|string - GetDestGUID = function(...) - local val = select(CLEUEventInfo["GENERIC"]["destGUID"], ...) - if val == nil then - return "", "DestGUID is nil or missing" - end - if type(val) ~= "string" then - return "", "DestGUID is not a string" - end - return val, nil - end, - ---@param ... any - ---@return string, nil|string - GetDestName = function(...) - local val = select(CLEUEventInfo["GENERIC"]["destName"], ...) - if val == nil then - return "", "DestName is nil or missing" - end - if type(val) ~= "string" then - return "", "DestName is not a string" - end - return val, nil - end, - ---@param ... any - ---@return number, nil|string - GetDestFlags = function(...) - local val = select(CLEUEventInfo["GENERIC"]["destFlags"], ...) - if val == nil then - return 0, "DestFlags is nil or missing" - end - if type(val) ~= "number" then - return 0, "DestFlags is not a number" - end - return val, nil - end, - ---@param ... any - ---@return number, nil|string - GetDestRaidFlags = function(...) - local val = select(CLEUEventInfo["GENERIC"]["destRaidFlags"], ...) - if val == nil then - return 0, "DestRaidFlags is nil or missing" - end - if type(val) ~= "number" then - return 0, "DestRaidFlags is not a number" - end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - ---@param ... any - ---@return number, nil|string - GetSpellId = function(...) - local val = select(CLEUEventInfo["GENERIC_SPELL"]["spellId"], ...) - if val == nil then return 0, "SpellId is nil or missing" end - if type(val) ~= "number" then - return 0, "SpellId is not a number" - end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - ---@param ... any - ---@return string, nil|string - GetSpellName = function(...) - local val = select(CLEUEventInfo["GENERIC_SPELL"]["spellName"], ...) - if val == nil then - return "", "SpellName is nil or missing" - end - if type(val) ~= "string" then - return "", "SpellName is not a string" - end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - ---@param ... any - ---@return number, nil|string - GetSpellSchool = function(...) - local val = select(CLEUEventInfo["GENERIC_SPELL"]["spellSchool"], - ...) - if val == nil then - return 0, "SpellSchool is nil or missing" - end - if type(val) ~= "number" then - return 0, "SpellSchool is not a number" - end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - --- |_HEAL| - --- |_ENERGIZE| - --- |_DRAIN| - --- |_LEECH| - --- |_EXTRA_ATTACKS| - --- |_AURA_APPLIED| - --- |_AURA_REMOVED| - --- |_AURA_APPLIED_DOSE| - --- |_AURA_REMOVED_DOSE| - ---@param ... any - ---@return number, nil|string - GetAmount = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then - return 0, - string.format("Failed getting subevent due to: %s", err) - end - local val = select(CLEUEventInfo[subevent]["amount"], ...) - if val == nil then return 0, "Amount is nil or missing" end - if type(val) ~= "number" then - return 0, "Amount is not a number" - end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - ---@param ... any - ---@return number, nil|string - GetOverkill = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then - return 0, - string.format("Failed getting subevent due to: %s", err) - end - if not CLEUEventInfo[subevent] then - return 0, "Subevent is not a valid event" - end - if not CLEUEventInfo[subevent]["overkill"] then - return 0, "Overkill is nil or missing" - end - local val = select(CLEUEventInfo[subevent]["overkill"], ...) - if val == nil then return 0, "Overkill is nil or missing" end - if type(val) ~= "number" then - return 0, "Overkill is not a number" - end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - ---@param ... any - ---@return number, nil|string - GetSchool = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then - return 0, - string.format("Failed getting subevent due to: %s", err) - end - local val = select(CLEUEventInfo[subevent]["school"], ...) - if val == nil then return 0, "School is nil or missing" end - if type(val) ~= "number" then - return 0, "School is not a number" - end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - --- - --- Apparently this is allowed to be nil? - ---@param ... any - ---@return boolean, nil|string - GetResisted = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then - return false, - string.format("Failed getting subevent due to: %s", err) - end - local val = select(CLEUEventInfo[subevent]["resisted"], ...) - if val == nil then - return false, "Resisted is nil or missing" - end - if type(val) ~= "boolean" then - return false, "Resisted is not a boolean" - end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - --- - --- Apparently this is allowed to be nil? - ---@param ... any - ---@return boolean, nil|string - GetBlocked = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then - return false, - string.format("Failed getting subevent due to: %s", err) - end - local val = select(CLEUEventInfo[subevent]["blocked"], ...) - if val == nil then - return false, "Blocked is nil or missing" - end - if type(val) ~= "boolean" then - return false, "Blocked is not a boolean" - end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - --- |_HEAL| - --- - --- Apparently this is allowed to be nil? - ---@param ... any - ---@return boolean, nil|string - GetAbsorbed = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then - return false, - string.format("Failed getting subevent due to: %s", err) - end - local val = select(CLEUEventInfo[subevent]["absorbed"], ...) - if val == nil then - return false, "Absorbed is nil or missing" - end - if type(val) ~= "boolean" then - return false, "Absorbed is not a boolean" - end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - --- |_MISSED| - --- |_HEAL| - ---@param ... any - ---@return boolean, nil|string - GetCritical = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then - return false, - string.format("Failed getting subevent due to: %s", err) - end - local val = select(CLEUEventInfo[subevent]["critical"], ...) - if val == nil then - return false, "Critical is nil or missing" - end - if type(val) ~= "boolean" then - return false, "Critical is not a boolean" - end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - ---@param ... any - ---@return boolean, nil|string - GetGlancing = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then - return false, - string.format("Failed getting subevent due to: %s", err) - end - local val = select(CLEUEventInfo[subevent]["glancing"], ...) - if val == nil then - return false, "Glancing is nil or missing" - end - if type(val) ~= "boolean" then - return false, "Glancing is not a boolean" - end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - ---@param ... any - ---@return boolean, nil|string - GetCrushing = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then - return false, - string.format("Failed getting subevent due to: %s", err) - end - local val = select(CLEUEventInfo[subevent]["crushing"], ...) - if val == nil then - return false, "Crushing is nil or missing" - end - if type(val) ~= "boolean" then - return false, "Crushing is not a boolean" - end - return val, nil - end, - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DAMAGE| - --- |_MISSED| - ---@param ... any - ---@return boolean, nil|string - GetIsOffHand = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then - return false, - string.format("Failed getting subevent due to: %s", err) - end - local val = select(CLEUEventInfo[subevent]["isOffHand"], ...) - if val == nil then - return false, "IsOffHand is nil or missing" - end - if type(val) ~= "boolean" then - return false, "IsOffHand is not a boolean" - end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_MISSED| - --- - --- return type is unconfirmed! - ---@param ... any - ---@return string, nil|string - GetMissType = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then - return "", - string.format("Failed getting subevent due to: %s", err) - end - local val = select(CLEUEventInfo[subevent]["missType"], ...) - if val == nil then - return "", "MissType is nil or missing" - end - if type(val) ~= "string" then - return "", "MissType is not a string" - end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_MISSED| - ---@param ... any - ---@return number, nil|string - --- - --- return type is unconfirmed! - GetAmountMissed = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then - return 0, - string.format("Failed getting subevent due to: %s", err) - end - local val = select(CLEUEventInfo[subevent]["amountMissed"], ...) - if val == nil then - return 0, "AmountMissed is nil or missing" - end - if type(val) ~= "number" then - return 0, "AmountMissed is not a number" - end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_HEAL| - --- - --- return type is unconfirmed! - ---@param ... any - ---@return number, nil|string - GetOverhealing = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then - return 0, - string.format("Failed getting subevent due to: %s", err) - end - local val = select(CLEUEventInfo[subevent]["overhealing"], ...) - if val == nil then - return 0, "Overhealing is nil or missing" - end - if type(val) ~= "number" then - return 0, "Overhealing is not a number" - end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_HEAL_ABSORBED| - ---@param ... any - ---@return string, nil|string - GetExtraGUID = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then - return "", - string.format("Failed getting subevent due to: %s", err) - end - local val = select(CLEUEventInfo[subevent]["extraGUID"], ...) - if val == nil then - return "", "ExtraGUID is nil or missing" - end - if type(val) ~= "string" then - return "", "ExtraGUID is not a string" - end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_HEAL_ABSORBED| - ---@param ... any - ---@return string, nil|string - GetExtraName = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then - return "", - string.format("Failed getting subevent due to: %s", err) - end - local val = select(CLEUEventInfo[subevent]["extraName"], ...) - if val == nil then - return "", "ExtraName is nil or missing" - end - if type(val) ~= "string" then - return "", "ExtraName is not a string" - end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_HEAL_ABSORBED| - ---@param ... any - ---@return number, nil|string - GetExtraFlags = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then - return 0, - string.format("Failed getting subevent due to: %s", err) - end - local val = select(CLEUEventInfo[subevent]["extraFlags"], ...) - if val == nil then - return 0, "ExtraFlags is nil or missing" - end - if type(val) ~= "number" then - return 0, "ExtraFlags is not a number" - end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_HEAL_ABSORBED| - ---@param ... any - ---@return number, nil|string - GetExtraRaidFlags = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then - return 0, - string.format("Failed getting subevent due to: %s", err) - end - local val = select(CLEUEventInfo[subevent]["extraRaidFlags"], ...) - if val == nil then - return 0, "ExtraRaidFlags is nil or missing" - end - if type(val) ~= "number" then - return 0, "ExtraRaidFlags is not a number" - end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_HEAL_ABSORBED| - --- - --- WARNING! Different from "GetExtraSpellId" (capital ID!)
- --- This is the doing of Blizzard, not me.
- ---@see CLEUParser.GetExtraSpellId - ---@param ... any - ---@return number, nil|string - GetExtraSpellID = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then - return 0, - string.format("Failed getting subevent due to: %s", err) - end - local val = select(CLEUEventInfo[subevent]["extraSpellID"], ...) - if val == nil then - return 0, "ExtraSpellID is nil or missing" - end - if type(val) ~= "number" then - return 0, "ExtraSpellID is not a number" - end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_HEAL_ABSORBED| - --- |_INTERRUPT| - --- |_DISPEL| - --- |_DISPEL_FAILED| - --- |_STOLEN| - --- |_AURA_BROKEN_SPELL| - ---@param ... any - ---@return string, nil|string - GetExtraSpellName = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then - return "", - string.format("Failed getting subevent due to: %s", err) - end - local val = select(CLEUEventInfo[subevent]["extraSpellName"], ...) - if val == nil then - return "", "extraSpellName is nil or missing" - end - if type(val) ~= "string" then - return "", "extraSpellName is not a string" - end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_HEAL_ABSORBED| - --- |_INTERRUPT| - --- |_DISPEL| - --- |_DISPEL_FAILED| - --- |_STOLEN| - --- |_AURA_BROKEN_SPELL| - ---@param ... any - ---@return number, nil|string - GetExtraSchool = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then - return 0, - string.format("Failed getting subevent due to: %s", err) - end - local val = select(CLEUEventInfo[subevent]["extraSchool"], ...) - if val == nil then - return 0, "ExtraSchool is nil or missing" - end - if type(val) ~= "number" then - return 0, "ExtraSchool is not a number" - end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_HEAL_ABSORBED| - ---@param ... any - ---@return number, nil|string - GetAbsorbedAmount = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then - return 0, - string.format("Failed getting subevent due to: %s", err) - end - local val = select(CLEUEventInfo[subevent]["absorbedAmount"], ...) - if val == nil then - return 0, "AbsorbedAmount is nil or missing" - end - if type(val) ~= "number" then - return 0, "AbsorbedAmount is not a number" - end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_ENERGIZE| - ---@param ... any - ---@return number, nil|string - GetOverEnergize = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then - return 0, - string.format("Failed getting subevent due to: %s", err) - end - local val = select(CLEUEventInfo[subevent]["overEnergize"], ...) - if val == nil then - return 0, "OverEnergize is nil or missing" - end - if type(val) ~= "number" then - return 0, "OverEnergize is not a number" - end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_ENERGIZE| - --- |_DRAIN| - --- |_LEECH| - --- - --- return type is unconfirmed! - ---@param ... any - ---@return number, nil|string - GetPowerType = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then - return 0, - string.format("Failed getting subevent due to: %s", err) - end - local val = select(CLEUEventInfo[subevent]["powerType"], ...) - if val == nil then - return 0, "PowerType is nil or missing" - end - if type(val) ~= "number" then - return 0, "PowerType is not a number" - end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DRAIN| - --- |_LEECH| - ---@param ... any - ---@return number, nil|string - GetExtraAmount = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then - return 0, - string.format("Failed getting subevent due to: %s", err) - end - local val = select(CLEUEventInfo[subevent]["extraAmount"], ...) - if val == nil then - return 0, "ExtraAmount is nil or missing" - end - if type(val) ~= "number" then - return 0, "ExtraAmount is not a number" - end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_INTERRUPT| - --- |_DISPEL| - --- |_DISPEL_FAILED| - --- |_STOLEN| - --- |_AURA_BROKEN_SPELL| - --- - --- WARNING! Different from "GetExtraSpellID" (capital ID!)
- --- This is the doing of Blizzard, not me.
- ---@see CLEUParser.GetExtraSpellID - ---@param ... any - ---@return number, nil|string - GetExtraSpellId = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then - return 0, - string.format("Failed getting subevent due to: %s", err) - end - local val = select(CLEUEventInfo[subevent]["extraSpellId"], ...) - if val == nil then - return 0, "ExtraSpellId is nil or missing" - end - if type(val) ~= "number" then - return 0, "ExtraSpellId is not a number" - end - return val, nil - end, - - --- Specific to subevents prefixed by: - --- |Prefix| - --- |-----| - --- |RANGE| - --- |SWING| - --- |SPELL| - --- |SPELL_PERIODIC| - --- |SPELL_BUILDING| - --- - --- And suffixed by: - --- |Suffix| - --- |------| - --- |_DISPEL| - --- |_STOLEN| - --- |_AURA_APPLIED| - --- |_AURA_REMOVED| - --- |_AURA_APPLIED_DOSE| - --- |_AURA_REMOVED_DOSE| - --- |_AURA_REFRESH| - --- |_AURA_BROKEN| - --- |_AURA_BROKEN_SPELL| - ---@param ... any - ---@return number, nil|string - GetExtraAuraType = function(...) - local subevent, err = CLEUParser.GetSubevent(...) - if err then - return 0, - string.format("Failed getting subevent due to: %s", err) - end - local val = select(CLEUEventInfo[subevent]["auraType"], ...) - if val == nil then return 0, "AuraType is nil or missing" end - if type(val) ~= "number" then - return 0, "AuraType is not a number" - end - return val, nil - end - } -end +---PLAYER_ENTERING_WORLD GUILD_ROSTER_UPDATE +function() + CLEUEventInfo = { + ["GENERIC"] = { + ["timestamp"] = 1, + ["subevent"] = 2, + ["hideCaster"] = 3, + ["sourceGUID"] = 4, + ["sourceName"] = 5, + ["sourceFlags"] = 6, + ["sourceRaidFlags"] = 7, + ["destGUID"] = 8, + ["destName"] = 9, + ["destFlags"] = 10, + ["destRaidFlags"] = 11 + }, + ["GENERIC_SPELL"] = { + ["spellId"] = 12, + ["spellName"] = 13, + ["spellSchool"] = 14 + }, + ["GENERIC_DAMAGE"] = { + ["amount"] = 15, + ["overkill"] = 16, + ["school"] = 17, + ["resisted"] = 18, + ["blocked"] = 19, + ["absorbed"] = 20, + ["critical"] = 21, + ["glancing"] = 22, + ["crushing"] = 23, + ["isOffHand"] = 24 + }, + ["GENERIC_MISSED"] = { + ["missType"] = 15, + ["isOffHand"] = 16, + ["amountMissed"] = 17, + ["critical"] = 18 + }, + ["GENERIC_HEAL"] = { + ["amount"] = 15, + ["overhealing"] = 16, + ["absorbed"] = 17, + ["critical"] = 18 + }, + ["GENERIC_HEAL_ABSORBED"] = { + ["extraGUID"] = 15, + ["extraName"] = 17, + ["extraFlags"] = 17, + ["extraRaidFlags"] = 18, + ["extraSpellID"] = 19, + ["extraSpellName"] = 20, + ["extraSchool"] = 21, + ["absorbedAmount"] = 22, + ["totalAmount"] = 23 + }, + ["GENERIC_ENERGIZE"] = { + ["amount"] = 15, + ["overEnergize"] = 16, + ["powerType"] = 17 + }, + ["GENERIC_DRAIN"] = { + ["amount"] = 15, + ["powerType"] = 16, + ["extraAmount"] = 17 + }, + ["GENERIC_LEECH"] = { + ["amount"] = 15, + ["powerType"] = 16, + ["extraAmount"] = 17 + }, + ["GENERIC_INTERRUPT"] = { + ["extraSpellId"] = 15, + ["extraSpellName"] = 16, + ["extraSchool"] = 17 + }, + ["GENERIC_DISPEL"] = { + ["extraSpellId"] = 15, + ["extraSpellName"] = 16, + ["extraSchool"] = 17, + ["auraType"] = 18 + }, + ["GENERIC_DISPEL_FAILED"] = { + ["extraSpellId"] = 15, + ["extraSpellName"] = 16, + ["extraSchool"] = 17 + }, + ["GENERIC_STOLEN"] = { + ["extraSpellId"] = 15, + ["extraSpellName"] = 16, + ["extraSchool"] = 17, + ["auraType"] = 18 + }, + ["GENERIC_EXTRA_ATTACKS"] = { ["amount"] = 15 }, + ["GENERIC_AURA_APPLIED"] = { ["auraType"] = 15, ["amount"] = 16 }, + ["GENERIC_AURA_REMOVED"] = { ["auraType"] = 15, ["amount"] = 16 }, + ["GENERIC_AURA_APPLIED_DOSE"] = { ["auraType"] = 15, ["amount"] = 16 }, + ["GENERIC_AURA_REMOVED_DOSE"] = { ["auraType"] = 15, ["amount"] = 16 }, + ["GENERIC_AURA_REFRESH"] = { ["auraType"] = 15 }, + ["GENERIC_AURA_BROKEN"] = { ["auraType"] = 15 }, + ["GENERIC_AURA_BROKEN_SPELL"] = { + ["extraSpellId"] = 15, + ["extraSpellName"] = 16, + ["extraSchool"] = 17, + ["auraType"] = 18 + }, + ["GENERIC_CAST_START"] = {}, + ["GENERIC_CAST_SUCCESS"] = {}, + ["GENERIC_CAST_FAILED"] = {} + } + + CLEUEventInfo["SWING_DAMAGE"] = CLEUEventInfo["GENERIC_DAMAGE"] + CLEUEventInfo["SWING_MISSED"] = CLEUEventInfo["GENERIC_MISSED"] + CLEUEventInfo["SWING_HEAL"] = CLEUEventInfo["GENERIC_HEAL"] + CLEUEventInfo["SWING_HEAL_ABSORBED"] = + CLEUEventInfo["GENERIC_HEAL_ABSORBED"] + CLEUEventInfo["SWING_ENERGIZE"] = CLEUEventInfo["GENERIC_ENERGIZE"] + CLEUEventInfo["SWING_DRAIN"] = CLEUEventInfo["GENERIC_DRAIN"] + CLEUEventInfo["SWING_LEECH"] = CLEUEventInfo["GENERIC_LEECH"] + CLEUEventInfo["SWING_INTERRUPT"] = CLEUEventInfo["GENERIC_INTERRUPT"] + CLEUEventInfo["SWING_DISPEL"] = CLEUEventInfo["GENERIC_DISPEL"] + CLEUEventInfo["SWING_DISPEL_FAILED"] = + CLEUEventInfo["GENERIC_DISPEL_FAILED"] + CLEUEventInfo["SWING_STOLEN"] = CLEUEventInfo["GENERIC_STOLEN"] + CLEUEventInfo["SWING_EXTRA_ATTACKS"] = + CLEUEventInfo["GENERIC_EXTRA_ATTACKS"] + CLEUEventInfo["SWING_AURA_APPLIED"] = CLEUEventInfo["GENERIC_AURA_APPLIED"] + CLEUEventInfo["SWING_AURA_REMOVED"] = CLEUEventInfo["GENERIC_AURA_REMOVED"] + CLEUEventInfo["SWING_AURA_APPLIED_DOSE"] = + CLEUEventInfo["GENERIC_AURA_APPLIED_DOSE"] + CLEUEventInfo["SWING_AURA_REMOVED_DOSE"] = + CLEUEventInfo["GENERIC_AURA_REMOVED_DOSE"] + CLEUEventInfo["SWING_AURA_REFRESH"] = CLEUEventInfo["GENERIC_AURA_REFRESH"] + CLEUEventInfo["SWING_AURA_BROKEN"] = CLEUEventInfo["GENERIC_AURA_BROKEN"] + CLEUEventInfo["SWING_AURA_BROKEN_SPELL"] = + CLEUEventInfo["GENERIC_AURA_BROKEN_SPELL"] + CLEUEventInfo["SWING_CAST_START"] = CLEUEventInfo["GENERIC_CAST_START"] + CLEUEventInfo["SWING_CAST_SUCCESS"] = CLEUEventInfo["GENERIC_CAST_SUCCESS"] + CLEUEventInfo["SWING_CAST_FAILED"] = CLEUEventInfo["GENERIC_CAST_FAILED"] + + CLEUEventInfo["RANGE_DAMAGE"] = CLEUEventInfo["GENERIC_DAMAGE"] + CLEUEventInfo["RANGE_MISSED"] = CLEUEventInfo["GENERIC_MISSED"] + CLEUEventInfo["RANGE_HEAL"] = CLEUEventInfo["GENERIC_HEAL"] + CLEUEventInfo["RANGE_HEAL_ABSORBED"] = + CLEUEventInfo["GENERIC_HEAL_ABSORBED"] + CLEUEventInfo["RANGE_ENERGIZE"] = CLEUEventInfo["GENERIC_ENERGIZE"] + CLEUEventInfo["RANGE_DRAIN"] = CLEUEventInfo["GENERIC_DRAIN"] + CLEUEventInfo["RANGE_LEECH"] = CLEUEventInfo["GENERIC_LEECH"] + CLEUEventInfo["RANGE_INTERRUPT"] = CLEUEventInfo["GENERIC_INTERRUPT"] + CLEUEventInfo["RANGE_DISPEL"] = CLEUEventInfo["GENERIC_DISPEL"] + CLEUEventInfo["RANGE_DISPEL_FAILED"] = + CLEUEventInfo["GENERIC_DISPEL_FAILED"] + CLEUEventInfo["RANGE_STOLEN"] = CLEUEventInfo["GENERIC_STOLEN"] + CLEUEventInfo["RANGE_EXTRA_ATTACKS"] = + CLEUEventInfo["GENERIC_EXTRA_ATTACKS"] + CLEUEventInfo["RANGE_AURA_APPLIED"] = CLEUEventInfo["GENERIC_AURA_APPLIED"] + CLEUEventInfo["RANGE_AURA_REMOVED"] = CLEUEventInfo["GENERIC_AURA_REMOVED"] + CLEUEventInfo["RANGE_AURA_APPLIED_DOSE"] = + CLEUEventInfo["GENERIC_AURA_APPLIED_DOSE"] + CLEUEventInfo["RANGE_AURA_REMOVED_DOSE"] = + CLEUEventInfo["GENERIC_AURA_REMOVED_DOSE"] + CLEUEventInfo["RANGE_AURA_REFRESH"] = CLEUEventInfo["GENERIC_AURA_REFRESH"] + CLEUEventInfo["RANGE_AURA_BROKEN"] = CLEUEventInfo["GENERIC_AURA_BROKEN"] + CLEUEventInfo["RANGE_AURA_BROKEN_SPELL"] = + CLEUEventInfo["GENERIC_AURA_BROKEN_SPELL"] + CLEUEventInfo["RANGE_CAST_START"] = CLEUEventInfo["GENERIC_CAST_START"] + CLEUEventInfo["RANGE_CAST_SUCCESS"] = CLEUEventInfo["GENERIC_CAST_SUCCESS"] + CLEUEventInfo["RANGE_CAST_FAILED"] = CLEUEventInfo["GENERIC_CAST_FAILED"] + + CLEUEventInfo["SPELL_DAMAGE"] = CLEUEventInfo["GENERIC_DAMAGE"] + CLEUEventInfo["SPELL_MISSED"] = CLEUEventInfo["GENERIC_MISSED"] + CLEUEventInfo["SPELL_HEAL"] = CLEUEventInfo["GENERIC_HEAL"] + CLEUEventInfo["SPELL_HEAL_ABSORBED"] = + CLEUEventInfo["GENERIC_HEAL_ABSORBED"] + CLEUEventInfo["SPELL_ENERGIZE"] = CLEUEventInfo["GENERIC_ENERGIZE"] + CLEUEventInfo["SPELL_DRAIN"] = CLEUEventInfo["GENERIC_DRAIN"] + CLEUEventInfo["SPELL_LEECH"] = CLEUEventInfo["GENERIC_LEECH"] + CLEUEventInfo["SPELL_INTERRUPT"] = CLEUEventInfo["GENERIC_INTERRUPT"] + CLEUEventInfo["SPELL_DISPEL"] = CLEUEventInfo["GENERIC_DISPEL"] + CLEUEventInfo["SPELL_DISPEL_FAILED"] = + CLEUEventInfo["GENERIC_DISPEL_FAILED"] + CLEUEventInfo["SPELL_STOLEN"] = CLEUEventInfo["GENERIC_STOLEN"] + CLEUEventInfo["SPELL_EXTRA_ATTACKS"] = + CLEUEventInfo["GENERIC_EXTRA_ATTACKS"] + CLEUEventInfo["SPELL_AURA_APPLIED"] = CLEUEventInfo["GENERIC_AURA_APPLIED"] + CLEUEventInfo["SPELL_AURA_REMOVED"] = CLEUEventInfo["GENERIC_AURA_REMOVED"] + CLEUEventInfo["SPELL_AURA_APPLIED_DOSE"] = + CLEUEventInfo["GENERIC_AURA_APPLIED_DOSE"] + CLEUEventInfo["SPELL_AURA_REMOVED_DOSE"] = + CLEUEventInfo["GENERIC_AURA_REMOVED_DOSE"] + CLEUEventInfo["SPELL_AURA_REFRESH"] = CLEUEventInfo["GENERIC_AURA_REFRESH"] + CLEUEventInfo["SPELL_AURA_BROKEN"] = CLEUEventInfo["GENERIC_AURA_BROKEN"] + CLEUEventInfo["SPELL_AURA_BROKEN_SPELL"] = + CLEUEventInfo["GENERIC_AURA_BROKEN_SPELL"] + CLEUEventInfo["SPELL_CAST_START"] = CLEUEventInfo["GENERIC_CAST_START"] + CLEUEventInfo["SPELL_CAST_SUCCESS"] = CLEUEventInfo["GENERIC_CAST_SUCCESS"] + CLEUEventInfo["SPELL_CAST_FAILED"] = CLEUEventInfo["GENERIC_CAST_FAILED"] + + CLEUEventInfo["SPELL_PERIODIC_DAMAGE"] = CLEUEventInfo["GENERIC_DAMAGE"] + CLEUEventInfo["SPELL_PERIODIC_MISSED"] = CLEUEventInfo["GENERIC_MISSED"] + CLEUEventInfo["SPELL_PERIODIC_HEAL"] = CLEUEventInfo["GENERIC_HEAL"] + CLEUEventInfo["SPELL_PERIODIC_HEAL_ABSORBED"] = + CLEUEventInfo["GENERIC_HEAL_ABSORBED"] + CLEUEventInfo["SPELL_PERIODIC_ENERGIZE"] = CLEUEventInfo["GENERIC_ENERGIZE"] + CLEUEventInfo["SPELL_PERIODIC_DRAIN"] = CLEUEventInfo["GENERIC_DRAIN"] + CLEUEventInfo["SPELL_PERIODIC_LEECH"] = CLEUEventInfo["GENERIC_LEECH"] + CLEUEventInfo["SPELL_PERIODIC_INTERRUPT"] = + CLEUEventInfo["GENERIC_INTERRUPT"] + CLEUEventInfo["SPELL_PERIODIC_DISPEL"] = CLEUEventInfo["GENERIC_DISPEL"] + CLEUEventInfo["SPELL_PERIODIC_DISPEL_FAILED"] = + CLEUEventInfo["GENERIC_DISPEL_FAILED"] + CLEUEventInfo["SPELL_PERIODIC_STOLEN"] = CLEUEventInfo["GENERIC_STOLEN"] + CLEUEventInfo["SPELL_PERIODIC_EXTRA_ATTACKS"] = + CLEUEventInfo["GENERIC_EXTRA_ATTACKS"] + CLEUEventInfo["SPELL_PERIODIC_AURA_APPLIED"] = + CLEUEventInfo["GENERIC_AURA_APPLIED"] + CLEUEventInfo["SPELL_PERIODIC_AURA_REMOVED"] = + CLEUEventInfo["GENERIC_AURA_REMOVED"] + CLEUEventInfo["SPELL_PERIODIC_AURA_APPLIED_DOSE"] = + CLEUEventInfo["GENERIC_AURA_APPLIED_DOSE"] + CLEUEventInfo["SPELL_PERIODIC_AURA_REMOVED_DOSE"] = + CLEUEventInfo["GENERIC_AURA_REMOVED_DOSE"] + CLEUEventInfo["SPELL_PERIODIC_AURA_REFRESH"] = + CLEUEventInfo["GENERIC_AURA_REFRESH"] + CLEUEventInfo["SPELL_PERIODIC_AURA_BROKEN"] = + CLEUEventInfo["GENERIC_AURA_BROKEN"] + CLEUEventInfo["SPELL_PERIODIC_AURA_BROKEN_SPELL"] = + CLEUEventInfo["GENERIC_AURA_BROKEN_SPELL"] + CLEUEventInfo["SPELL_PERIODIC_CAST_START"] = + CLEUEventInfo["GENERIC_CAST_START"] + CLEUEventInfo["SPELL_PERIODIC_CAST_SUCCESS"] = + CLEUEventInfo["GENERIC_CAST_SUCCESS"] + CLEUEventInfo["SPELL_PERIODIC_CAST_FAILED"] = + CLEUEventInfo["GENERIC_CAST_FAILED"] + + ---@class CLEUParser + CLEUParser = { + ---@param ... any + ---@return number, nil|string + GetTimestamp = function(...) + local val = select(CLEUEventInfo["GENERIC"]["timestamp"], ...) + if val == nil then + return 0, "Timestamp is nil or missing" + end + if type(val) ~= "number" then + return 0, "Timestamp is not a number" + end + return val, nil + end, + ---@param ... any + ---@return string, nil|string + GetSubevent = function(...) + local val = select(CLEUEventInfo["GENERIC"]["subevent"], ...) + if val == nil then + return "", "Subevent is nil or missing" + end + if type(val) ~= "string" then + return "", "Subevent is not a string" + end + return val, nil + end, + ---@param ... any + ---@return boolean, nil|string + GetHideCaster = function(...) + local val = select(CLEUEventInfo["GENERIC"]["hideCaster"], ...) + if val == nil then + return false, "HideCaster is nil or missing" + end + if type(val) ~= "boolean" then + return false, "HideCaster is not a boolean" + end + return val, nil + end, + ---@param ... any + ---@return string, nil|string + GetSourceGUID = function(...) + local val = select(CLEUEventInfo["GENERIC"]["sourceGUID"], ...) + if val == nil then + return "", "SourceGUID is nil or missing" + end + if type(val) ~= "string" then + return "", "SourceGUID is not a string" + end + return val, nil + end, + ---@param ... any + ---@return string, nil|string + GetSourceName = function(...) + local val = select(CLEUEventInfo["GENERIC"]["sourceName"], ...) + if val == nil then + return "", "SourceName is nil or missing" + end + if type(val) ~= "string" then + return "", "SourceName is not a string" + end + return val, nil + end, + ---@param ... any + ---@return number, nil|string + GetSourceFlags = function(...) + local val = select(CLEUEventInfo["GENERIC"]["sourceFlags"], ...) + if val == nil then + return 0, "SourceFlags is nil or missing" + end + if type(val) ~= "number" then + return 0, "SourceFlags is not a number" + end + return val, nil + end, + ---@param ... any + ---@return number, nil|string + GetSourceRaidFlags = function(...) + local val = select(CLEUEventInfo["GENERIC"]["sourceRaidFlags"], ...) + if val == nil then + return 0, "SourceRaidFlags is nil or missing" + end + if type(val) ~= "number" then + return 0, "SourceRaidFlags is not a number" + end + return val, nil + end, + ---@param ... any + ---@return string, nil|string + GetDestGUID = function(...) + local val = select(CLEUEventInfo["GENERIC"]["destGUID"], ...) + if val == nil then + return "", "DestGUID is nil or missing" + end + if type(val) ~= "string" then + return "", "DestGUID is not a string" + end + return val, nil + end, + ---@param ... any + ---@return string, nil|string + GetDestName = function(...) + local val = select(CLEUEventInfo["GENERIC"]["destName"], ...) + if val == nil then + return "", "DestName is nil or missing" + end + if type(val) ~= "string" then + return "", "DestName is not a string" + end + return val, nil + end, + ---@param ... any + ---@return number, nil|string + GetDestFlags = function(...) + local val = select(CLEUEventInfo["GENERIC"]["destFlags"], ...) + if val == nil then + return 0, "DestFlags is nil or missing" + end + if type(val) ~= "number" then + return 0, "DestFlags is not a number" + end + return val, nil + end, + ---@param ... any + ---@return number, nil|string + GetDestRaidFlags = function(...) + local val = select(CLEUEventInfo["GENERIC"]["destRaidFlags"], ...) + if val == nil then + return 0, "DestRaidFlags is nil or missing" + end + if type(val) ~= "number" then + return 0, "DestRaidFlags is not a number" + end + return val, nil + end, + + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + ---@param ... any + ---@return number, nil|string + GetSpellId = function(...) + local val = select(CLEUEventInfo["GENERIC_SPELL"]["spellId"], ...) + if val == nil then return 0, "SpellId is nil or missing" end + if type(val) ~= "number" then + return 0, "SpellId is not a number" + end + return val, nil + end, + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + ---@param ... any + ---@return string, nil|string + GetSpellName = function(...) + local val = select(CLEUEventInfo["GENERIC_SPELL"]["spellName"], ...) + if val == nil then + return "", "SpellName is nil or missing" + end + if type(val) ~= "string" then + return "", "SpellName is not a string" + end + return val, nil + end, + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + ---@param ... any + ---@return number, nil|string + GetSpellSchool = function(...) + local val = select(CLEUEventInfo["GENERIC_SPELL"]["spellSchool"], + ...) + if val == nil then + return 0, "SpellSchool is nil or missing" + end + if type(val) ~= "number" then + return 0, "SpellSchool is not a number" + end + return val, nil + end, + + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_DAMAGE| + --- |_HEAL| + --- |_ENERGIZE| + --- |_DRAIN| + --- |_LEECH| + --- |_EXTRA_ATTACKS| + --- |_AURA_APPLIED| + --- |_AURA_REMOVED| + --- |_AURA_APPLIED_DOSE| + --- |_AURA_REMOVED_DOSE| + ---@param ... any + ---@return number, nil|string + GetAmount = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then + return 0, + string.format("Failed getting subevent due to: %s", err) + end + local val = select(CLEUEventInfo[subevent]["amount"], ...) + if val == nil then return 0, "Amount is nil or missing" end + if type(val) ~= "number" then + return 0, "Amount is not a number" + end + return val, nil + end, + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_DAMAGE| + ---@param ... any + ---@return number, nil|string + GetOverkill = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then + return 0, + string.format("Failed getting subevent due to: %s", err) + end + if not CLEUEventInfo[subevent] then + return 0, "Subevent is not a valid event" + end + if not CLEUEventInfo[subevent]["overkill"] then + return 0, "Overkill is nil or missing" + end + local val = select(CLEUEventInfo[subevent]["overkill"], ...) + if val == nil then return 0, "Overkill is nil or missing" end + if type(val) ~= "number" then + return 0, "Overkill is not a number" + end + return val, nil + end, + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_DAMAGE| + ---@param ... any + ---@return number, nil|string + GetSchool = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then + return 0, + string.format("Failed getting subevent due to: %s", err) + end + local val = select(CLEUEventInfo[subevent]["school"], ...) + if val == nil then return 0, "School is nil or missing" end + if type(val) ~= "number" then + return 0, "School is not a number" + end + return val, nil + end, + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_DAMAGE| + --- + --- Apparently this is allowed to be nil? + ---@param ... any + ---@return boolean, nil|string + GetResisted = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then + return false, + string.format("Failed getting subevent due to: %s", err) + end + local val = select(CLEUEventInfo[subevent]["resisted"], ...) + if val == nil then + return false, "Resisted is nil or missing" + end + if type(val) ~= "boolean" then + return false, "Resisted is not a boolean" + end + return val, nil + end, + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_DAMAGE| + --- + --- Apparently this is allowed to be nil? + ---@param ... any + ---@return boolean, nil|string + GetBlocked = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then + return false, + string.format("Failed getting subevent due to: %s", err) + end + local val = select(CLEUEventInfo[subevent]["blocked"], ...) + if val == nil then + return false, "Blocked is nil or missing" + end + if type(val) ~= "boolean" then + return false, "Blocked is not a boolean" + end + return val, nil + end, + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_DAMAGE| + --- |_HEAL| + --- + --- Apparently this is allowed to be nil? + ---@param ... any + ---@return boolean, nil|string + GetAbsorbed = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then + return false, + string.format("Failed getting subevent due to: %s", err) + end + local val = select(CLEUEventInfo[subevent]["absorbed"], ...) + if val == nil then + return false, "Absorbed is nil or missing" + end + if type(val) ~= "boolean" then + return false, "Absorbed is not a boolean" + end + return val, nil + end, + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_DAMAGE| + --- |_MISSED| + --- |_HEAL| + ---@param ... any + ---@return boolean, nil|string + GetCritical = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then + return false, + string.format("Failed getting subevent due to: %s", err) + end + local val = select(CLEUEventInfo[subevent]["critical"], ...) + if val == nil then + return false, "Critical is nil or missing" + end + if type(val) ~= "boolean" then + return false, "Critical is not a boolean" + end + return val, nil + end, + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_DAMAGE| + ---@param ... any + ---@return boolean, nil|string + GetGlancing = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then + return false, + string.format("Failed getting subevent due to: %s", err) + end + local val = select(CLEUEventInfo[subevent]["glancing"], ...) + if val == nil then + return false, "Glancing is nil or missing" + end + if type(val) ~= "boolean" then + return false, "Glancing is not a boolean" + end + return val, nil + end, + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_DAMAGE| + ---@param ... any + ---@return boolean, nil|string + GetCrushing = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then + return false, + string.format("Failed getting subevent due to: %s", err) + end + local val = select(CLEUEventInfo[subevent]["crushing"], ...) + if val == nil then + return false, "Crushing is nil or missing" + end + if type(val) ~= "boolean" then + return false, "Crushing is not a boolean" + end + return val, nil + end, + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_DAMAGE| + --- |_MISSED| + ---@param ... any + ---@return boolean, nil|string + GetIsOffHand = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then + return false, + string.format("Failed getting subevent due to: %s", err) + end + local val = select(CLEUEventInfo[subevent]["isOffHand"], ...) + if val == nil then + return false, "IsOffHand is nil or missing" + end + if type(val) ~= "boolean" then + return false, "IsOffHand is not a boolean" + end + return val, nil + end, + + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_MISSED| + --- + --- return type is unconfirmed! + ---@param ... any + ---@return string, nil|string + GetMissType = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then + return "", + string.format("Failed getting subevent due to: %s", err) + end + local val = select(CLEUEventInfo[subevent]["missType"], ...) + if val == nil then + return "", "MissType is nil or missing" + end + if type(val) ~= "string" then + return "", "MissType is not a string" + end + return val, nil + end, + + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_MISSED| + ---@param ... any + ---@return number, nil|string + --- + --- return type is unconfirmed! + GetAmountMissed = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then + return 0, + string.format("Failed getting subevent due to: %s", err) + end + local val = select(CLEUEventInfo[subevent]["amountMissed"], ...) + if val == nil then + return 0, "AmountMissed is nil or missing" + end + if type(val) ~= "number" then + return 0, "AmountMissed is not a number" + end + return val, nil + end, + + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_HEAL| + --- + --- return type is unconfirmed! + ---@param ... any + ---@return number, nil|string + GetOverhealing = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then + return 0, + string.format("Failed getting subevent due to: %s", err) + end + local val = select(CLEUEventInfo[subevent]["overhealing"], ...) + if val == nil then + return 0, "Overhealing is nil or missing" + end + if type(val) ~= "number" then + return 0, "Overhealing is not a number" + end + return val, nil + end, + + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_HEAL_ABSORBED| + ---@param ... any + ---@return string, nil|string + GetExtraGUID = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then + return "", + string.format("Failed getting subevent due to: %s", err) + end + local val = select(CLEUEventInfo[subevent]["extraGUID"], ...) + if val == nil then + return "", "ExtraGUID is nil or missing" + end + if type(val) ~= "string" then + return "", "ExtraGUID is not a string" + end + return val, nil + end, + + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_HEAL_ABSORBED| + ---@param ... any + ---@return string, nil|string + GetExtraName = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then + return "", + string.format("Failed getting subevent due to: %s", err) + end + local val = select(CLEUEventInfo[subevent]["extraName"], ...) + if val == nil then + return "", "ExtraName is nil or missing" + end + if type(val) ~= "string" then + return "", "ExtraName is not a string" + end + return val, nil + end, + + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_HEAL_ABSORBED| + ---@param ... any + ---@return number, nil|string + GetExtraFlags = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then + return 0, + string.format("Failed getting subevent due to: %s", err) + end + local val = select(CLEUEventInfo[subevent]["extraFlags"], ...) + if val == nil then + return 0, "ExtraFlags is nil or missing" + end + if type(val) ~= "number" then + return 0, "ExtraFlags is not a number" + end + return val, nil + end, + + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_HEAL_ABSORBED| + ---@param ... any + ---@return number, nil|string + GetExtraRaidFlags = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then + return 0, + string.format("Failed getting subevent due to: %s", err) + end + local val = select(CLEUEventInfo[subevent]["extraRaidFlags"], ...) + if val == nil then + return 0, "ExtraRaidFlags is nil or missing" + end + if type(val) ~= "number" then + return 0, "ExtraRaidFlags is not a number" + end + return val, nil + end, + + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_HEAL_ABSORBED| + --- + --- WARNING! Different from "GetExtraSpellId" (capital ID!)
+ --- This is the doing of Blizzard, not me.
+ ---@see CLEUParser.GetExtraSpellId + ---@param ... any + ---@return number, nil|string + GetExtraSpellID = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then + return 0, + string.format("Failed getting subevent due to: %s", err) + end + local val = select(CLEUEventInfo[subevent]["extraSpellID"], ...) + if val == nil then + return 0, "ExtraSpellID is nil or missing" + end + if type(val) ~= "number" then + return 0, "ExtraSpellID is not a number" + end + return val, nil + end, + + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_HEAL_ABSORBED| + --- |_INTERRUPT| + --- |_DISPEL| + --- |_DISPEL_FAILED| + --- |_STOLEN| + --- |_AURA_BROKEN_SPELL| + ---@param ... any + ---@return string, nil|string + GetExtraSpellName = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then + return "", + string.format("Failed getting subevent due to: %s", err) + end + local val = select(CLEUEventInfo[subevent]["extraSpellName"], ...) + if val == nil then + return "", "extraSpellName is nil or missing" + end + if type(val) ~= "string" then + return "", "extraSpellName is not a string" + end + return val, nil + end, + + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_HEAL_ABSORBED| + --- |_INTERRUPT| + --- |_DISPEL| + --- |_DISPEL_FAILED| + --- |_STOLEN| + --- |_AURA_BROKEN_SPELL| + ---@param ... any + ---@return number, nil|string + GetExtraSchool = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then + return 0, + string.format("Failed getting subevent due to: %s", err) + end + local val = select(CLEUEventInfo[subevent]["extraSchool"], ...) + if val == nil then + return 0, "ExtraSchool is nil or missing" + end + if type(val) ~= "number" then + return 0, "ExtraSchool is not a number" + end + return val, nil + end, + + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_HEAL_ABSORBED| + ---@param ... any + ---@return number, nil|string + GetAbsorbedAmount = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then + return 0, + string.format("Failed getting subevent due to: %s", err) + end + local val = select(CLEUEventInfo[subevent]["absorbedAmount"], ...) + if val == nil then + return 0, "AbsorbedAmount is nil or missing" + end + if type(val) ~= "number" then + return 0, "AbsorbedAmount is not a number" + end + return val, nil + end, + + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_ENERGIZE| + ---@param ... any + ---@return number, nil|string + GetOverEnergize = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then + return 0, + string.format("Failed getting subevent due to: %s", err) + end + local val = select(CLEUEventInfo[subevent]["overEnergize"], ...) + if val == nil then + return 0, "OverEnergize is nil or missing" + end + if type(val) ~= "number" then + return 0, "OverEnergize is not a number" + end + return val, nil + end, + + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_ENERGIZE| + --- |_DRAIN| + --- |_LEECH| + --- + --- return type is unconfirmed! + ---@param ... any + ---@return number, nil|string + GetPowerType = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then + return 0, + string.format("Failed getting subevent due to: %s", err) + end + local val = select(CLEUEventInfo[subevent]["powerType"], ...) + if val == nil then + return 0, "PowerType is nil or missing" + end + if type(val) ~= "number" then + return 0, "PowerType is not a number" + end + return val, nil + end, + + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_DRAIN| + --- |_LEECH| + ---@param ... any + ---@return number, nil|string + GetExtraAmount = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then + return 0, + string.format("Failed getting subevent due to: %s", err) + end + local val = select(CLEUEventInfo[subevent]["extraAmount"], ...) + if val == nil then + return 0, "ExtraAmount is nil or missing" + end + if type(val) ~= "number" then + return 0, "ExtraAmount is not a number" + end + return val, nil + end, + + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_INTERRUPT| + --- |_DISPEL| + --- |_DISPEL_FAILED| + --- |_STOLEN| + --- |_AURA_BROKEN_SPELL| + --- + --- WARNING! Different from "GetExtraSpellID" (capital ID!)
+ --- This is the doing of Blizzard, not me.
+ ---@see CLEUParser.GetExtraSpellID + ---@param ... any + ---@return number, nil|string + GetExtraSpellId = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then + return 0, + string.format("Failed getting subevent due to: %s", err) + end + local val = select(CLEUEventInfo[subevent]["extraSpellId"], ...) + if val == nil then + return 0, "ExtraSpellId is nil or missing" + end + if type(val) ~= "number" then + return 0, "ExtraSpellId is not a number" + end + return val, nil + end, + + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_DISPEL| + --- |_STOLEN| + --- |_AURA_APPLIED| + --- |_AURA_REMOVED| + --- |_AURA_APPLIED_DOSE| + --- |_AURA_REMOVED_DOSE| + --- |_AURA_REFRESH| + --- |_AURA_BROKEN| + --- |_AURA_BROKEN_SPELL| + ---@param ... any + ---@return number, nil|string + GetExtraAuraType = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then + return 0, + string.format("Failed getting subevent due to: %s", err) + end + local val = select(CLEUEventInfo[subevent]["auraType"], ...) + if val == nil then return 0, "AuraType is nil or missing" end + if type(val) ~= "number" then + return 0, "AuraType is not a number" + end + return val, nil + end + } +end diff --git a/FreshShit/_Shared/Colorer.lua b/WeakAuras/Projects/_Shared/Colorer.lua similarity index 96% rename from FreshShit/_Shared/Colorer.lua rename to WeakAuras/Projects/_Shared/Colorer.lua index 30a7554..3b8ba02 100644 --- a/FreshShit/_Shared/Colorer.lua +++ b/WeakAuras/Projects/_Shared/Colorer.lua @@ -1,64 +1,64 @@ ----@alias Color {r: number, g: number, b: number} ----@class Colorer ----@field colors table ----@field breakpoints table -Colorer = { - --- Make sure colors and breakpoints always have the same number of entries! VERY IMPORTANT! - ---@type table - colors = { - { r = 0.62, g = 0.62, b = 0.62 }, -- Grey - { r = 1, g = 1, b = 1 }, -- White - { r = 0.12, g = 1, b = 0 }, -- Green - { r = 0, g = 0.44, b = 0.87 }, -- Blue - { r = 0.64, g = 0.21, b = 0.93 }, -- Purple - { r = 1, g = 0.5, b = 0 }, -- Orange - { r = 0.9, g = 0.8, b = 0.5 }, -- Light Gold - { r = 0, g = 0.8, b = 1.0 }, -- Blizzard Blue - }, - breakpoints = { -999, -10, -5, -2, 2, 5, 10, 999 }, - - ---@param value number - ---@return Color, nil|string - Interpolate = function(value) - local color = { r = 0, g = 0, b = 0 } - - ---@type table> - local bracket = { { 0, 0 }, { 1, 1 } } - for i = 1, #Colorer.breakpoints do - if value < Colorer.breakpoints[i] then - bracket[2] = { i, Colorer.breakpoints[i] } - break - end - bracket[1] = { i, Colorer.breakpoints[i] } - end - - ---@type Color - local startColor = Colorer.colors[bracket[1][1]] - ---@type Color - local endColor = Colorer.colors[bracket[2][1]] - - local fraction = (value - bracket[1][2]) / (bracket[2][2] - bracket[1][2]) - - for k, v in pairs(startColor) do - color[k] = Colorer.lerp(v, endColor[k], fraction) - end - - return color, nil - end, - - ---@param color Color - ---@return string - RGBToHex = function(color) - local r = math.floor(color.r * 255) - local g = math.floor(color.g * 255) - local b = math.floor(color.b * 255) - return string.format("%02x%02x%02x", r, g, b) - end, - - ---@param a number - ---@param b number - ---@param t number - ---@return number - lerp = function(a, b, t) return a * (1 - t) + b * t end, -} -setmetatable(Colorer, { __index = Colorer }) +---@alias Color {r: number, g: number, b: number} +---@class Colorer +---@field colors table +---@field breakpoints table +Colorer = { + --- Make sure colors and breakpoints always have the same number of entries! VERY IMPORTANT! + ---@type table + colors = { + { r = 0.62, g = 0.62, b = 0.62 }, -- Grey + { r = 1, g = 1, b = 1 }, -- White + { r = 0.12, g = 1, b = 0 }, -- Green + { r = 0, g = 0.44, b = 0.87 }, -- Blue + { r = 0.64, g = 0.21, b = 0.93 }, -- Purple + { r = 1, g = 0.5, b = 0 }, -- Orange + { r = 0.9, g = 0.8, b = 0.5 }, -- Light Gold + { r = 0, g = 0.8, b = 1.0 }, -- Blizzard Blue + }, + breakpoints = { -999, -10, -5, -2, 2, 5, 10, 999 }, + + ---@param value number + ---@return Color, nil|string + Interpolate = function(value) + local color = { r = 0, g = 0, b = 0 } + + ---@type table> + local bracket = { { 0, 0 }, { 1, 1 } } + for i = 1, #Colorer.breakpoints do + if value < Colorer.breakpoints[i] then + bracket[2] = { i, Colorer.breakpoints[i] } + break + end + bracket[1] = { i, Colorer.breakpoints[i] } + end + + ---@type Color + local startColor = Colorer.colors[bracket[1][1]] + ---@type Color + local endColor = Colorer.colors[bracket[2][1]] + + local fraction = (value - bracket[1][2]) / (bracket[2][2] - bracket[1][2]) + + for k, v in pairs(startColor) do + color[k] = Colorer.lerp(v, endColor[k], fraction) + end + + return color, nil + end, + + ---@param color Color + ---@return string + RGBToHex = function(color) + local r = math.floor(color.r * 255) + local g = math.floor(color.g * 255) + local b = math.floor(color.b * 255) + return string.format("%02x%02x%02x", r, g, b) + end, + + ---@param a number + ---@param b number + ---@param t number + ---@return number + lerp = function(a, b, t) return a * (1 - t) + b * t end, +} +setmetatable(Colorer, { __index = Colorer }) diff --git a/FreshShit/_Shared/Messenger.lua b/WeakAuras/Projects/_Shared/Messenger.lua similarity index 97% rename from FreshShit/_Shared/Messenger.lua rename to WeakAuras/Projects/_Shared/Messenger.lua index 58aad8a..539ce92 100644 --- a/FreshShit/_Shared/Messenger.lua +++ b/WeakAuras/Projects/_Shared/Messenger.lua @@ -1,79 +1,79 @@ --- TICKER_200 -function() - if not WeakAurasSaved.Cyka then WeakAurasSaved.Cyka = {} end - if not WeakAurasSaved.Cyka.MessageQueue then WeakAurasSaved.Cyka.MessageQueue = {} end - - ---@type Message - local message = WeakAurasSaved.Cyka.MessageQueue[1] - if not message then return end - if not message.message or message.message == "" then return end - if not message.channel or message.channel == "" then return end - - -- Map channel names to ids - if message.channel == "CHANNEL" and message.data and string.match(message.data, "%D") then - print("Channel presented as string:", message.data) - local channelId = aura_env.channelIdMap[message.data] - if not channelId then - print("Channel not found, scanning") - aura_env.ScanChannels() - channelId = aura_env.channelIdMap[message.data] - end - if not channelId then - print("Channel not joined, joining") - channelId = aura_env.FindOrJoinChannel(message.data) - end - print("Channel resolved to id", channelId) - message.data = channelId - end - - table.remove(WeakAurasSaved.Cyka.MessageQueue, 1) - SendChatMessage(message.message, message.channel, nil, message.data) -end - ---INIT ----@type table -aura_env.channelIdMap = {} -aura_env.FindOrJoinChannel = function(channelName, password) - local function GetChannelId(channelName) - local channels = {GetChannelList()} - for i = 1, #channels, 2 do - local id = channels[i] - local name = channels[i + 1] - if name == channelName then - return id - end - end - end - - local channelId = GetChannelId(channelName) - if not channelId then - print("Channel", channelName, "not found, joining") - if password then - JoinPermanentChannel(channelName, password) - else - JoinPermanentChannel(channelName) - end - end - channelId = GetChannelId(channelName) - aura_env.channelIdMap[channelName] = channelId - return channelId -end -aura_env.ScanChannels = function() - local channels = {GetChannelList()} - for i = 1, #channels, 2 do - local id = channels[i] - local name = channels[i + 1] - aura_env.channelIdMap[name] = id - end -end -local channelId = aura_env.FindOrJoinChannel(aura_env.config.channel, aura_env.config.channelPassword) -print("Channel", aura_env.config.channel, "resolved to id", channelId) ---aura_env.iterator = 0 ---WeakAurasSaved.Cyka.MessageQueue = {} ---for i = 1, 100 do --- table.insert(WeakAurasSaved.Cyka.MessageQueue, { --- channel = "CHANNEL", --- data = aura_env.channelId, --- message = "TEST" .. i --- }) ---end +-- TICKER_200 +function() + if not WeakAurasSaved.Cyka then WeakAurasSaved.Cyka = {} end + if not WeakAurasSaved.Cyka.MessageQueue then WeakAurasSaved.Cyka.MessageQueue = {} end + + ---@type Message + local message = WeakAurasSaved.Cyka.MessageQueue[1] + if not message then return end + if not message.message or message.message == "" then return end + if not message.channel or message.channel == "" then return end + + -- Map channel names to ids + if message.channel == "CHANNEL" and message.data and string.match(message.data, "%D") then + print("Channel presented as string:", message.data) + local channelId = aura_env.channelIdMap[message.data] + if not channelId then + print("Channel not found, scanning") + aura_env.ScanChannels() + channelId = aura_env.channelIdMap[message.data] + end + if not channelId then + print("Channel not joined, joining") + channelId = aura_env.FindOrJoinChannel(message.data) + end + print("Channel resolved to id", channelId) + message.data = channelId + end + + table.remove(WeakAurasSaved.Cyka.MessageQueue, 1) + SendChatMessage(message.message, message.channel, nil, message.data) +end + +--INIT +---@type table +aura_env.channelIdMap = {} +aura_env.FindOrJoinChannel = function(channelName, password) + local function GetChannelId(channelName) + local channels = {GetChannelList()} + for i = 1, #channels, 2 do + local id = channels[i] + local name = channels[i + 1] + if name == channelName then + return id + end + end + end + + local channelId = GetChannelId(channelName) + if not channelId then + print("Channel", channelName, "not found, joining") + if password then + JoinPermanentChannel(channelName, password) + else + JoinPermanentChannel(channelName) + end + end + channelId = GetChannelId(channelName) + aura_env.channelIdMap[channelName] = channelId + return channelId +end +aura_env.ScanChannels = function() + local channels = {GetChannelList()} + for i = 1, #channels, 2 do + local id = channels[i] + local name = channels[i + 1] + aura_env.channelIdMap[name] = id + end +end +local channelId = aura_env.FindOrJoinChannel(aura_env.config.channel, aura_env.config.channelPassword) +print("Channel", aura_env.config.channel, "resolved to id", channelId) +--aura_env.iterator = 0 +--WeakAurasSaved.Cyka.MessageQueue = {} +--for i = 1, 100 do +-- table.insert(WeakAurasSaved.Cyka.MessageQueue, { +-- channel = "CHANNEL", +-- data = aura_env.channelId, +-- message = "TEST" .. i +-- }) +--end diff --git a/FreshShit/_Shared/Messenger_Export b/WeakAuras/Projects/_Shared/Messenger_Export similarity index 100% rename from FreshShit/_Shared/Messenger_Export rename to WeakAuras/Projects/_Shared/Messenger_Export diff --git a/FreshShit/__Ascension/Cooldowner/display.lua b/WeakAuras/Projects/__Ascension/Cooldowner/display.lua similarity index 94% rename from FreshShit/__Ascension/Cooldowner/display.lua rename to WeakAuras/Projects/__Ascension/Cooldowner/display.lua index ebe76b6..cade883 100644 --- a/FreshShit/__Ascension/Cooldowner/display.lua +++ b/WeakAuras/Projects/__Ascension/Cooldowner/display.lua @@ -1,6 +1,6 @@ -function() - if not aura_env.scanned then - aura_env.lookup() - end - return aura_env.keybind +function() + if not aura_env.scanned then + aura_env.lookup() + end + return aura_env.keybind end \ No newline at end of file diff --git a/FreshShit/__Ascension/Cooldowner/init.lua b/WeakAuras/Projects/__Ascension/Cooldowner/init.lua similarity index 96% rename from FreshShit/__Ascension/Cooldowner/init.lua rename to WeakAuras/Projects/__Ascension/Cooldowner/init.lua index 9b1ef82..6639c60 100644 --- a/FreshShit/__Ascension/Cooldowner/init.lua +++ b/WeakAuras/Projects/__Ascension/Cooldowner/init.lua @@ -1,55 +1,55 @@ -aura_env.keybind = "" -aura_env.scanned = false -aura_env.bars = { - "ElvUI_Bar1", - "ElvUI_Bar2", - "ElvUI_Bar3", - "ElvUI_Bar4", - "ElvUI_Bar5", - "ElvUI_Bar6", - "ElvUI_Bar7", - "ElvUI_Bar8", - "ElvUI_Bar9", - "ElvUI_Bar10", -} - -aura_env.lookup = function() - local spellid = 0 - if not aura_env.states or aura_env.states == nil then - print("No states") - return - end - - local triggerInfo = aura_env.states[2] - if not triggerInfo then triggerInfo = aura_env.states[1] end - if triggerInfo then spellid = triggerInfo.trigger.spellName end - if spellid == 0 then return end - - for _, bar in pairs(aura_env.bars) do - for i = 1, 12 do - local button = _G[bar .. "Button" .. i] - local slot = button:GetAttribute("action") - if slot then - local type, _, _, id = GetActionInfo(slot) - if type == "spell" then - if id == spellid then - local bindid = button.keyBoundTarget - local keybind = GetBindingKey(bindid) - aura_env.keybind = keybind - break - end - end - end - end - end - - if aura_env.keybind then - aura_env.keybind = string.gsub(aura_env.keybind, "BUTTON", "B") - aura_env.keybind = string.gsub(aura_env.keybind, "SHIFT%-", "S") - aura_env.keybind = string.gsub(aura_env.keybind, "CTRL%-", "C") - aura_env.keybind = string.gsub(aura_env.keybind, "ALT%-", "A") - aura_env.keybind = string.gsub(aura_env.keybind, "SPACE", "Spb") - end - - aura_env.scanned = true -end +aura_env.keybind = "" +aura_env.scanned = false +aura_env.bars = { + "ElvUI_Bar1", + "ElvUI_Bar2", + "ElvUI_Bar3", + "ElvUI_Bar4", + "ElvUI_Bar5", + "ElvUI_Bar6", + "ElvUI_Bar7", + "ElvUI_Bar8", + "ElvUI_Bar9", + "ElvUI_Bar10", +} + +aura_env.lookup = function() + local spellid = 0 + if not aura_env.states or aura_env.states == nil then + print("No states") + return + end + + local triggerInfo = aura_env.states[2] + if not triggerInfo then triggerInfo = aura_env.states[1] end + if triggerInfo then spellid = triggerInfo.trigger.spellName end + if spellid == 0 then return end + + for _, bar in pairs(aura_env.bars) do + for i = 1, 12 do + local button = _G[bar .. "Button" .. i] + local slot = button:GetAttribute("action") + if slot then + local type, _, _, id = GetActionInfo(slot) + if type == "spell" then + if id == spellid then + local bindid = button.keyBoundTarget + local keybind = GetBindingKey(bindid) + aura_env.keybind = keybind + break + end + end + end + end + end + + if aura_env.keybind then + aura_env.keybind = string.gsub(aura_env.keybind, "BUTTON", "B") + aura_env.keybind = string.gsub(aura_env.keybind, "SHIFT%-", "S") + aura_env.keybind = string.gsub(aura_env.keybind, "CTRL%-", "C") + aura_env.keybind = string.gsub(aura_env.keybind, "ALT%-", "A") + aura_env.keybind = string.gsub(aura_env.keybind, "SPACE", "Spb") + end + + aura_env.scanned = true +end diff --git a/FreshShit/__Ascension/TooltipItemInfo/export b/WeakAuras/Projects/__Ascension/TooltipItemInfo/export similarity index 100% rename from FreshShit/__Ascension/TooltipItemInfo/export rename to WeakAuras/Projects/__Ascension/TooltipItemInfo/export diff --git a/FreshShit/__Ascension/TooltipItemInfo/init.lua b/WeakAuras/Projects/__Ascension/TooltipItemInfo/init.lua similarity index 97% rename from FreshShit/__Ascension/TooltipItemInfo/init.lua rename to WeakAuras/Projects/__Ascension/TooltipItemInfo/init.lua index 8611eef..7109509 100644 --- a/FreshShit/__Ascension/TooltipItemInfo/init.lua +++ b/WeakAuras/Projects/__Ascension/TooltipItemInfo/init.lua @@ -1,21 +1,21 @@ -if not _G.tooltipItemInfoHooked then - local function iteminfo(self, bag, slot) - local itemLink = GetContainerItemLink(bag, slot) - if itemLink then - local _, _, _, ilvl, reqLevel, class, subclass, maxStack, equipSlot = GetItemInfo(itemLink) - self:AddLine("") - self:AddLine("Req Level: " .. reqLevel) - self:AddLine("Item Level: " .. ilvl) - self:AddLine("Class: " .. class) - self:AddLine("Subclass: " .. subclass) - self:AddLine("Max Stack: " .. maxStack) - self:AddLine("Equip Slot: " .. equipSlot) - end - self:Show() - end - - -- hooksecurefunc(GameTooltip, "SetInventoryItem", iteminfo) - hooksecurefunc(GameTooltip, "SetBagItem", iteminfo) - - _G.tooltipItemInfoHooked = true -end +if not _G.tooltipItemInfoHooked then + local function iteminfo(self, bag, slot) + local itemLink = GetContainerItemLink(bag, slot) + if itemLink then + local _, _, _, ilvl, reqLevel, class, subclass, maxStack, equipSlot = GetItemInfo(itemLink) + self:AddLine("") + self:AddLine("Req Level: " .. reqLevel) + self:AddLine("Item Level: " .. ilvl) + self:AddLine("Class: " .. class) + self:AddLine("Subclass: " .. subclass) + self:AddLine("Max Stack: " .. maxStack) + self:AddLine("Equip Slot: " .. equipSlot) + end + self:Show() + end + + -- hooksecurefunc(GameTooltip, "SetInventoryItem", iteminfo) + hooksecurefunc(GameTooltip, "SetBagItem", iteminfo) + + _G.tooltipItemInfoHooked = true +end diff --git a/FreshShit/__Ascension/TotemTicker/event.lua b/WeakAuras/Projects/__Ascension/TotemTicker/event.lua similarity index 97% rename from FreshShit/__Ascension/TotemTicker/event.lua rename to WeakAuras/Projects/__Ascension/TotemTicker/event.lua index e44469c..7bfca1f 100644 --- a/FreshShit/__Ascension/TotemTicker/event.lua +++ b/WeakAuras/Projects/__Ascension/TotemTicker/event.lua @@ -1,23 +1,23 @@ ---- CLEU:SPELL_SUMMON:UNIT_DIED TOTEM_TICK -function(event, name) - if event == "TOTEM_TICK" and name == aura_env.totem then - --print(aura_env.totem .. " Tick") - if aura_env.alive then - WeakAuras.timer:ScheduleTimer(WeakAuras.ScanEvents, 3, "TOTEM_TICK", aura_env.totem) - end - return true - end - --print(arg2, arg7, aura_env.totem) - if arg2 == "SPELL_SUMMON" and arg7 == aura_env.totem then - --print(aura_env.totem .. " Summoned") - WeakAuras.timer:ScheduleTimer(WeakAuras.ScanEvents, 3, "TOTEM_TICK", aura_env.totem) - aura_env.alive = true - return true - end - if arg2 == "UNIT_DIED" and arg7 == aura_env.totem then - --print(aura_env.totem .. " Died") - aura_env.alive = false - return false - end - return false +--- CLEU:SPELL_SUMMON:UNIT_DIED TOTEM_TICK +function(event, name) + if event == "TOTEM_TICK" and name == aura_env.totem then + --print(aura_env.totem .. " Tick") + if aura_env.alive then + WeakAuras.timer:ScheduleTimer(WeakAuras.ScanEvents, 3, "TOTEM_TICK", aura_env.totem) + end + return true + end + --print(arg2, arg7, aura_env.totem) + if arg2 == "SPELL_SUMMON" and arg7 == aura_env.totem then + --print(aura_env.totem .. " Summoned") + WeakAuras.timer:ScheduleTimer(WeakAuras.ScanEvents, 3, "TOTEM_TICK", aura_env.totem) + aura_env.alive = true + return true + end + if arg2 == "UNIT_DIED" and arg7 == aura_env.totem then + --print(aura_env.totem .. " Died") + aura_env.alive = false + return false + end + return false end \ No newline at end of file diff --git a/FreshShit/__Ascension/TotemTicker/init.lua b/WeakAuras/Projects/__Ascension/TotemTicker/init.lua similarity index 97% rename from FreshShit/__Ascension/TotemTicker/init.lua rename to WeakAuras/Projects/__Ascension/TotemTicker/init.lua index fcfb800..5b17282 100644 --- a/FreshShit/__Ascension/TotemTicker/init.lua +++ b/WeakAuras/Projects/__Ascension/TotemTicker/init.lua @@ -1,2 +1,2 @@ -aura_env.alive = false -aura_env.totem = aura_env.config.totem or "Tremor Totem" +aura_env.alive = false +aura_env.totem = aura_env.config.totem or "Tremor Totem" diff --git a/FreshShit/__Ascension/__Other/buffs b/WeakAuras/Projects/__Ascension/__Other/buffs similarity index 100% rename from FreshShit/__Ascension/__Other/buffs rename to WeakAuras/Projects/__Ascension/__Other/buffs diff --git a/FreshShit/__Ascension/__Other/cooldowns b/WeakAuras/Projects/__Ascension/__Other/cooldowns similarity index 100% rename from FreshShit/__Ascension/__Other/cooldowns rename to WeakAuras/Projects/__Ascension/__Other/cooldowns diff --git a/FreshShit/__Ascension/__Other/cursoricons b/WeakAuras/Projects/__Ascension/__Other/cursoricons similarity index 100% rename from FreshShit/__Ascension/__Other/cursoricons rename to WeakAuras/Projects/__Ascension/__Other/cursoricons diff --git a/FreshShit/__Ascension/__Other/procs b/WeakAuras/Projects/__Ascension/__Other/procs similarity index 100% rename from FreshShit/__Ascension/__Other/procs rename to WeakAuras/Projects/__Ascension/__Other/procs diff --git a/FreshShit/hekilidisplay b/WeakAuras/Projects/hekilidisplay similarity index 100% rename from FreshShit/hekilidisplay rename to WeakAuras/Projects/hekilidisplay diff --git a/WA snippets/Add Strings.lua b/WeakAuras/Snippets/Add Strings.lua similarity index 94% rename from WA snippets/Add Strings.lua rename to WeakAuras/Snippets/Add Strings.lua index 0259bbd..d3650e9 100644 --- a/WA snippets/Add Strings.lua +++ b/WeakAuras/Snippets/Add Strings.lua @@ -1,9 +1,9 @@ -aura_env.addtostring = function(s, ...) - local i = 1 - while select(i, ...) do - s = s .. select(i, ...) .. " " - i = i + 1 - end - s = s .. "\n" - return s -end +aura_env.addtostring = function(s, ...) + local i = 1 + while select(i, ...) do + s = s .. select(i, ...) .. " " + i = i + 1 + end + s = s .. "\n" + return s +end diff --git a/WA snippets/Adding text.lua b/WeakAuras/Snippets/Adding text.lua similarity index 98% rename from WA snippets/Adding text.lua rename to WeakAuras/Snippets/Adding text.lua index d0708d2..8a6e8a0 100644 --- a/WA snippets/Adding text.lua +++ b/WeakAuras/Snippets/Adding text.lua @@ -1,11 +1,11 @@ -function(expirationTime, duration, progress, formatedDuration, name, icon, stacks) - if not aura_env.region.text3 then - local text3 = aura_env.region:CreateFontString(nil, "OVERLAY") - aura_env.region.text3 = text3 - aura_env.region.text3:SetFont(aura_env.region.stacks:GetFont()) - aura_env.region.text3:SetTextColor(1, 1, 1, 1) - aura_env.region.text3:SetPoint("BOTTOMRIGHT", aura_env.region, "BOTTOMRIGHT", -1, 1) - aura_env.region.text3:Show() - end - aura_env.region.text3:SetText(progress) -end +function(expirationTime, duration, progress, formatedDuration, name, icon, stacks) + if not aura_env.region.text3 then + local text3 = aura_env.region:CreateFontString(nil, "OVERLAY") + aura_env.region.text3 = text3 + aura_env.region.text3:SetFont(aura_env.region.stacks:GetFont()) + aura_env.region.text3:SetTextColor(1, 1, 1, 1) + aura_env.region.text3:SetPoint("BOTTOMRIGHT", aura_env.region, "BOTTOMRIGHT", -1, 1) + aura_env.region.text3:Show() + end + aura_env.region.text3:SetText(progress) +end diff --git a/WA snippets/Anchor to nameplate.lua b/WeakAuras/Snippets/Anchor to nameplate.lua similarity index 97% rename from WA snippets/Anchor to nameplate.lua rename to WeakAuras/Snippets/Anchor to nameplate.lua index 4731d60..48802c0 100644 --- a/WA snippets/Anchor to nameplate.lua +++ b/WeakAuras/Snippets/Anchor to nameplate.lua @@ -1,5 +1,5 @@ -local plate = C_NamePlate.GetNamePlateForUnit("target") -if plate then - aura_env.region:ClearAllPoints() - aura_env.region:SetPoint("BOTTOM", plate, "BOTTOM", 0, 0) -end +local plate = C_NamePlate.GetNamePlateForUnit("target") +if plate then + aura_env.region:ClearAllPoints() + aura_env.region:SetPoint("BOTTOM", plate, "BOTTOM", 0, 0) +end diff --git a/WA snippets/Buttons.lua b/WeakAuras/Snippets/Buttons.lua similarity index 98% rename from WA snippets/Buttons.lua rename to WeakAuras/Snippets/Buttons.lua index d6ef84c..29a3e2b 100644 --- a/WA snippets/Buttons.lua +++ b/WeakAuras/Snippets/Buttons.lua @@ -1,9 +1,9 @@ -function() - local r = WeakAuras.regions['julijatest'].region - local b = CreateFrame("Button", "WEAK AURA NAME HERE", r, "SecureActionButtonTemplate") --Does some crazy shit - b:SetAllPoints() --No idea - b:SetAttribute("unit", "player") --Target I guess? - b:SetAttribute("macro", "DN") --What do // sub macro for spell - b:SetAttribute("type", "macro") --What do again....? // sub macro for spell -end +function() + local r = WeakAuras.regions['julijatest'].region + local b = CreateFrame("Button", "WEAK AURA NAME HERE", r, "SecureActionButtonTemplate") --Does some crazy shit + b:SetAllPoints() --No idea + b:SetAttribute("unit", "player") --Target I guess? + b:SetAttribute("macro", "DN") --What do // sub macro for spell + b:SetAttribute("type", "macro") --What do again....? // sub macro for spell +end --Goes with PLAYER_ENTERING_WORLD And only with it otherwise doesn't properly load for some reason \ No newline at end of file diff --git a/WA snippets/C_Timer.lua b/WeakAuras/Snippets/C_Timer.lua similarity index 98% rename from WA snippets/C_Timer.lua rename to WeakAuras/Snippets/C_Timer.lua index cd1c6dd..b60befe 100644 --- a/WA snippets/C_Timer.lua +++ b/WeakAuras/Snippets/C_Timer.lua @@ -1 +1 @@ -/ script C_Timer.After(15, function() SendChatMessage("lol", "PARTY"); end) +/ script C_Timer.After(15, function() SendChatMessage("lol", "PARTY"); end) diff --git a/WA snippets/Class Colors.lua b/WeakAuras/Snippets/Class Colors.lua similarity index 96% rename from WA snippets/Class Colors.lua rename to WeakAuras/Snippets/Class Colors.lua index 6b1ce77..7ee6aa2 100644 --- a/WA snippets/Class Colors.lua +++ b/WeakAuras/Snippets/Class Colors.lua @@ -1,90 +1,90 @@ -aura_env.classColor = function(class) - if class == 6 then - return "\124cFFC41F3B" - elseif class == 12 then - return "\124cFFA330C9" - elseif class == 11 then - return "\124cFFFF7D0A" - elseif class == 3 then - return "\124cFFABD473" - elseif class == 8 then - return "\124cFF40C7EB" - elseif class == 10 then - return "\124cFF00FF96" - elseif class == 2 then - return "\124cFFF58CBA" - elseif class == 5 then - return "\124cFFFFFFFF" - elseif class == 4 then - return "\124cFFFFF569" - elseif class == 7 then - return "\124cFF0070DE" - elseif class == 9 then - return "\124cFF8787ED" - elseif class == 1 then - return "\124cFFC79C6E" - else - return "\124cFFFFFFFF" - end -end - -aura_env.classColor = function(name) - local class = UnitClass(name) or "" - if class == "Death Knight" then - return 0.77, 0.12, 0.23, 1 - elseif class == "Demon Hunter" then - return 0.64, 0.19, 0.79, 1 - elseif class == "Druid" then - return 1, 0.49, 0.04, 1 - elseif class == "Hunter" then - return 0.67, 0.83, 0.45, 1 - elseif class == "Mage" then - return 0.25, 0.78, 0.92, 1 - elseif class == "Monk" then - return 0, 1, 0.59, 1 - elseif class == "Paladin" then - return 0.96, 0.55, 0.73, 1 - elseif class == "Priest" then - return 1, 1, 1, 1 - elseif class == "Rogue" then - return 1, 0.96, 0.41, 1 - elseif class == "Shaman" then - return 0, 0.44, 0.87, 1 - elseif class == "Warlock" then - return 0.53, 0.53, 0.93, 1 - elseif class == "Warrior" then - return 0.78, 0.61, 0.43, 1 - else - return 0, 0, 0, 0 - end -end - -aura_env.classColor = function(class) - if class == 1 then - return 0.78, 0.61, 0.43, 1 - elseif class == 2 then - return 0.96, 0.55, 0.73, 1 - elseif class == 3 then - return 0.67, 0.83, 0.45, 1 - elseif class == 4 then - return 1, 0.96, 0.41, 1 - elseif class == 5 then - return 1, 1, 1, 1 - elseif class == 6 then - return 0.77, 0.12, 0.23, 1 - elseif class == 7 then - return 0, 0.44, 0.87, 1 - elseif class == 8 then - return 0.25, 0.78, 0.92, 1 - elseif class == 9 then - return 0.53, 0.53, 0.93, 1 - elseif class == 10 then - return 0, 1, 0.59, 1 - elseif class == 11 then - return 1, 0.49, 0.04, 1 - elseif class == 12 then - return 0.64, 0.19, 0.79, 1 - else - return 1, 1, 1, 1 - end -end +aura_env.classColor = function(class) + if class == 6 then + return "\124cFFC41F3B" + elseif class == 12 then + return "\124cFFA330C9" + elseif class == 11 then + return "\124cFFFF7D0A" + elseif class == 3 then + return "\124cFFABD473" + elseif class == 8 then + return "\124cFF40C7EB" + elseif class == 10 then + return "\124cFF00FF96" + elseif class == 2 then + return "\124cFFF58CBA" + elseif class == 5 then + return "\124cFFFFFFFF" + elseif class == 4 then + return "\124cFFFFF569" + elseif class == 7 then + return "\124cFF0070DE" + elseif class == 9 then + return "\124cFF8787ED" + elseif class == 1 then + return "\124cFFC79C6E" + else + return "\124cFFFFFFFF" + end +end + +aura_env.classColor = function(name) + local class = UnitClass(name) or "" + if class == "Death Knight" then + return 0.77, 0.12, 0.23, 1 + elseif class == "Demon Hunter" then + return 0.64, 0.19, 0.79, 1 + elseif class == "Druid" then + return 1, 0.49, 0.04, 1 + elseif class == "Hunter" then + return 0.67, 0.83, 0.45, 1 + elseif class == "Mage" then + return 0.25, 0.78, 0.92, 1 + elseif class == "Monk" then + return 0, 1, 0.59, 1 + elseif class == "Paladin" then + return 0.96, 0.55, 0.73, 1 + elseif class == "Priest" then + return 1, 1, 1, 1 + elseif class == "Rogue" then + return 1, 0.96, 0.41, 1 + elseif class == "Shaman" then + return 0, 0.44, 0.87, 1 + elseif class == "Warlock" then + return 0.53, 0.53, 0.93, 1 + elseif class == "Warrior" then + return 0.78, 0.61, 0.43, 1 + else + return 0, 0, 0, 0 + end +end + +aura_env.classColor = function(class) + if class == 1 then + return 0.78, 0.61, 0.43, 1 + elseif class == 2 then + return 0.96, 0.55, 0.73, 1 + elseif class == 3 then + return 0.67, 0.83, 0.45, 1 + elseif class == 4 then + return 1, 0.96, 0.41, 1 + elseif class == 5 then + return 1, 1, 1, 1 + elseif class == 6 then + return 0.77, 0.12, 0.23, 1 + elseif class == 7 then + return 0, 0.44, 0.87, 1 + elseif class == 8 then + return 0.25, 0.78, 0.92, 1 + elseif class == 9 then + return 0.53, 0.53, 0.93, 1 + elseif class == 10 then + return 0, 1, 0.59, 1 + elseif class == 11 then + return 1, 0.49, 0.04, 1 + elseif class == 12 then + return 0.64, 0.19, 0.79, 1 + else + return 1, 1, 1, 1 + end +end diff --git a/WA snippets/Click Buttons.lua b/WeakAuras/Snippets/Click Buttons.lua similarity index 96% rename from WA snippets/Click Buttons.lua rename to WeakAuras/Snippets/Click Buttons.lua index e6f9810..9f00d5e 100644 --- a/WA snippets/Click Buttons.lua +++ b/WeakAuras/Snippets/Click Buttons.lua @@ -1,3 +1,3 @@ -function() - StaticPopup1Button1:Click("LeftButton") +function() + StaticPopup1Button1:Click("LeftButton") end \ No newline at end of file diff --git a/WA snippets/Color Gradient.lua b/WeakAuras/Snippets/Color Gradient.lua similarity index 96% rename from WA snippets/Color Gradient.lua rename to WeakAuras/Snippets/Color Gradient.lua index c9f2a2e..eb9c36f 100644 --- a/WA snippets/Color Gradient.lua +++ b/WeakAuras/Snippets/Color Gradient.lua @@ -1,59 +1,59 @@ -aura_env.grad = function(c) - --c expected as [0, 1] - if c > 0.5 then - c = 1 - (2 * (c - 0.5)) - return c, 1, 0, 1 - else - c = c * 2 - return 1, c, 0, 1 - end -end - -local function hexgrad(val, min, max) - local function tohex(input) - local output = string.format("%x", input * 255) - return output - end - local function grad(c, min, max) - c = (((max - c) / (max - min)) * 1) - if c > 0.5 then - c = 1 - (2 * (c - 0.5)) - return c, 1, 0, 1 - else - c = c * 2 - return 1, c, 0, 1 - end - end - local color1, color2, color3, color4 = 0, 0, 0, 0 - color1, color2, color3, color4 = grad(val, min, max) - color1, color2, color3, color4 = tohex(color1), tohex(color2), tohex(color3), tohex(color4) - color1, color2, color3, color4 = tostring(color1), tostring(color2), tostring(color3), tostring(color4) - if string.len(color1) == 1 then color1 = "0" .. color1 end - if string.len(color2) == 1 then color2 = "0" .. color2 end - if string.len(color3) == 1 then color3 = "0" .. color3 end - if string.len(color4) == 1 then color4 = "0" .. color4 end - local color = "\124c" .. color4 .. color1 .. color2 .. color3 - return color -end - -local function RGBtoHex(rgb) - local hexadecimal = "FF" - for key, value in pairs(rgb) do - local hex = "" - - while value > 0 do - local index = math.fmod(value, 16) + 1 - value = math.floor(value / 16) - hex = string.sub("0123456789ABCDEF", index, index) .. hex - end - - if string.len(hex) == 0 then - hex = "00" - elseif string.len(hex) == 1 then - hex = "0" .. hex - end - - hexadecimal = hexadecimal .. hex - end - return hexadecimal -end +aura_env.grad = function(c) + --c expected as [0, 1] + if c > 0.5 then + c = 1 - (2 * (c - 0.5)) + return c, 1, 0, 1 + else + c = c * 2 + return 1, c, 0, 1 + end +end + +local function hexgrad(val, min, max) + local function tohex(input) + local output = string.format("%x", input * 255) + return output + end + local function grad(c, min, max) + c = (((max - c) / (max - min)) * 1) + if c > 0.5 then + c = 1 - (2 * (c - 0.5)) + return c, 1, 0, 1 + else + c = c * 2 + return 1, c, 0, 1 + end + end + local color1, color2, color3, color4 = 0, 0, 0, 0 + color1, color2, color3, color4 = grad(val, min, max) + color1, color2, color3, color4 = tohex(color1), tohex(color2), tohex(color3), tohex(color4) + color1, color2, color3, color4 = tostring(color1), tostring(color2), tostring(color3), tostring(color4) + if string.len(color1) == 1 then color1 = "0" .. color1 end + if string.len(color2) == 1 then color2 = "0" .. color2 end + if string.len(color3) == 1 then color3 = "0" .. color3 end + if string.len(color4) == 1 then color4 = "0" .. color4 end + local color = "\124c" .. color4 .. color1 .. color2 .. color3 + return color +end + +local function RGBtoHex(rgb) + local hexadecimal = "FF" + for key, value in pairs(rgb) do + local hex = "" + + while value > 0 do + local index = math.fmod(value, 16) + 1 + value = math.floor(value / 16) + hex = string.sub("0123456789ABCDEF", index, index) .. hex + end + + if string.len(hex) == 0 then + hex = "00" + elseif string.len(hex) == 1 then + hex = "0" .. hex + end + + hexadecimal = hexadecimal .. hex + end + return hexadecimal +end diff --git a/WA snippets/Date and Time.lua b/WeakAuras/Snippets/Date and Time.lua similarity index 97% rename from WA snippets/Date and Time.lua rename to WeakAuras/Snippets/Date and Time.lua index e4de7ae..52ed231 100644 --- a/WA snippets/Date and Time.lua +++ b/WeakAuras/Snippets/Date and Time.lua @@ -1,35 +1,35 @@ -aura_env.getDate = function() - local date = date() - local year = date:match("%d%d%/%d%d/(%d%d)") + 2000 --01/07/(19) 14:36:42 - local month = date:match("(%d%d)") --(01)/07/19 14:36:42 - local day = date:match("%d%d%/(%d%d)") --01/(07)/19 14:36:42 - --Remove first place zeros - if day:find("0") == 1 then day = day:gsub("0", "") end - if month:find("0") == 1 then month = month:gsub("0", "") end - local localdate = day .. "." .. month .. "." .. year - return localdate -end - -aura_env.getTime = function() - local date = date() - local localtime = date:match("%d%d%/%d%d%/%d%d%s(%d%d%p%d%d%p%d%d)") - return localtime -end - -local function getDate() - local date = date() - local year = date:match("%d%d%/%d%d/(%d%d)") + 2000 --01/07/(19) 14:36:42 - local month = date:match("(%d%d)") --(01)/07/19 14:36:42 - local day = date:match("%d%d%/(%d%d)") --01/(07)/19 14:36:42 - --Remove first place zeros - if day:find("0") == 1 then day = day:gsub("0", "") end - if month:find("0") == 1 then month = month:gsub("0", "") end - local localdate = day .. "." .. month .. "." .. year - return localdate -end - -local function getTime() - local date = date() - local localtime = date:match("%d%d%/%d%d%/%d%d%s(%d%d%p%d%d%p%d%d)") - return localtime -end +aura_env.getDate = function() + local date = date() + local year = date:match("%d%d%/%d%d/(%d%d)") + 2000 --01/07/(19) 14:36:42 + local month = date:match("(%d%d)") --(01)/07/19 14:36:42 + local day = date:match("%d%d%/(%d%d)") --01/(07)/19 14:36:42 + --Remove first place zeros + if day:find("0") == 1 then day = day:gsub("0", "") end + if month:find("0") == 1 then month = month:gsub("0", "") end + local localdate = day .. "." .. month .. "." .. year + return localdate +end + +aura_env.getTime = function() + local date = date() + local localtime = date:match("%d%d%/%d%d%/%d%d%s(%d%d%p%d%d%p%d%d)") + return localtime +end + +local function getDate() + local date = date() + local year = date:match("%d%d%/%d%d/(%d%d)") + 2000 --01/07/(19) 14:36:42 + local month = date:match("(%d%d)") --(01)/07/19 14:36:42 + local day = date:match("%d%d%/(%d%d)") --01/(07)/19 14:36:42 + --Remove first place zeros + if day:find("0") == 1 then day = day:gsub("0", "") end + if month:find("0") == 1 then month = month:gsub("0", "") end + local localdate = day .. "." .. month .. "." .. year + return localdate +end + +local function getTime() + local date = date() + local localtime = date:match("%d%d%/%d%d%/%d%d%s(%d%d%p%d%d%p%d%d)") + return localtime +end diff --git a/WA snippets/DefStack.lua b/WeakAuras/Snippets/DefStack.lua similarity index 95% rename from WA snippets/DefStack.lua rename to WeakAuras/Snippets/DefStack.lua index ab68c0a..10e35f8 100644 --- a/WA snippets/DefStack.lua +++ b/WeakAuras/Snippets/DefStack.lua @@ -1,6 +1,6 @@ -aura_env.stackDef = function(def1, def2) - local x = 1 - def1 - local y = 1 - def2 - local var = x * y - return 1 - var -end +aura_env.stackDef = function(def1, def2) + local x = 1 - def1 + local y = 1 - def2 + local var = x * y + return 1 - var +end diff --git a/WA snippets/Find Aura ID.lua b/WeakAuras/Snippets/Find Aura ID.lua similarity index 94% rename from WA snippets/Find Aura ID.lua rename to WeakAuras/Snippets/Find Aura ID.lua index 0d2a838..456c23c 100644 --- a/WA snippets/Find Aura ID.lua +++ b/WeakAuras/Snippets/Find Aura ID.lua @@ -1,10 +1,10 @@ -aura_env.auraID = function(spell) - for i = 1, 40 do - local name = UnitBuff("player", i) - if name then - if name == spell then return i end - else - break - end - end -end +aura_env.auraID = function(spell) + for i = 1, 40 do + local name = UnitBuff("player", i) + if name then + if name == spell then return i end + else + break + end + end +end diff --git a/WA snippets/FormatTime.lua b/WeakAuras/Snippets/FormatTime.lua similarity index 95% rename from WA snippets/FormatTime.lua rename to WeakAuras/Snippets/FormatTime.lua index 4687bb3..f00ec38 100644 --- a/WA snippets/FormatTime.lua +++ b/WeakAuras/Snippets/FormatTime.lua @@ -1,11 +1,11 @@ -local function formatTime(time) - local res, m, s = time, 0, 0 - while res >= 60 do - m = m + 1 - res = res - 60 - end - s = res - if s < 10 then s = string.format("0%d", s) end - if type(s) ~= "string" then tostring(s) end - return string.format("%d:%s", m, s) -end +local function formatTime(time) + local res, m, s = time, 0, 0 + while res >= 60 do + m = m + 1 + res = res - 60 + end + s = res + if s < 10 then s = string.format("0%d", s) end + if type(s) ~= "string" then tostring(s) end + return string.format("%d:%s", m, s) +end diff --git a/WA snippets/Functions.lua b/WeakAuras/Snippets/Functions.lua similarity index 96% rename from WA snippets/Functions.lua rename to WeakAuras/Snippets/Functions.lua index 0aaf934..8a6aaf0 100644 --- a/WA snippets/Functions.lua +++ b/WeakAuras/Snippets/Functions.lua @@ -1,3 +1,3 @@ -local function name(arguments) end - -aura_env.name = function(arguments) end +local function name(arguments) end + +aura_env.name = function(arguments) end diff --git a/WA snippets/Get Item Link from chat link.lua b/WeakAuras/Snippets/Get Item Link from chat link.lua similarity index 97% rename from WA snippets/Get Item Link from chat link.lua rename to WeakAuras/Snippets/Get Item Link from chat link.lua index 4473421..0ca9a77 100644 --- a/WA snippets/Get Item Link from chat link.lua +++ b/WeakAuras/Snippets/Get Item Link from chat link.lua @@ -1,4 +1,4 @@ -for itemLink in msg:gmatch("|%x+|Hitem:.-|h.-|h|r") do - itemID = itemLink:match("item:(%d+):") - icon = select(10, GetItemInfo(itemLink)) -end +for itemLink in msg:gmatch("|%x+|Hitem:.-|h.-|h|r") do + itemID = itemLink:match("item:(%d+):") + icon = select(10, GetItemInfo(itemLink)) +end diff --git a/WA snippets/GetSpellWithCooldown.lua b/WeakAuras/Snippets/GetSpellWithCooldown.lua similarity index 96% rename from WA snippets/GetSpellWithCooldown.lua rename to WeakAuras/Snippets/GetSpellWithCooldown.lua index 803f976..881d8e0 100644 --- a/WA snippets/GetSpellWithCooldown.lua +++ b/WeakAuras/Snippets/GetSpellWithCooldown.lua @@ -1,35 +1,35 @@ ---INIT -local i = 1 -while true do - local spellName, spellSubName = GetSpellBookItemName(i, BOOKTYPE_SPELL) - local type, ID = GetSpellBookItemInfo(i, BOOKTYPE_SPELL) - if not spellName then - do - break - end - end - - if spellName:match("Mastery:") then break end - if spellName ~= "Revive Battle Pets" and spellName ~= "Mobile Banking" then - if (GetSpellBaseCooldown(ID) or 0) > 20000 then print(spellName, ID, GetSpellBaseCooldown(ID) / 1000) end - end - - i = i + 1 -end - -for row = 1, 7 do - for column = 1, 3 do - local ID = select(6, GetTalentInfo(row, column, 1)) - local spellName = select(2, GetTalentInfo(row, column, 1)) - if GetSpellBaseCooldown(ID) > 20000 then print(spellName, ID, GetSpellBaseCooldown(ID) / 1000) end - end -end -for row = 1, 7 do - for column = 1, 3 do - local ID = select(6, GetPvpTalentInfo(row, column, 1)) - if ID then - local spellName = select(2, GetPvpTalentInfo(row, column, 1)) - if GetSpellBaseCooldown(ID) > 20000 then print(spellName, ID, GetSpellBaseCooldown(ID) / 1000) end - end - end -end +--INIT +local i = 1 +while true do + local spellName, spellSubName = GetSpellBookItemName(i, BOOKTYPE_SPELL) + local type, ID = GetSpellBookItemInfo(i, BOOKTYPE_SPELL) + if not spellName then + do + break + end + end + + if spellName:match("Mastery:") then break end + if spellName ~= "Revive Battle Pets" and spellName ~= "Mobile Banking" then + if (GetSpellBaseCooldown(ID) or 0) > 20000 then print(spellName, ID, GetSpellBaseCooldown(ID) / 1000) end + end + + i = i + 1 +end + +for row = 1, 7 do + for column = 1, 3 do + local ID = select(6, GetTalentInfo(row, column, 1)) + local spellName = select(2, GetTalentInfo(row, column, 1)) + if GetSpellBaseCooldown(ID) > 20000 then print(spellName, ID, GetSpellBaseCooldown(ID) / 1000) end + end +end +for row = 1, 7 do + for column = 1, 3 do + local ID = select(6, GetPvpTalentInfo(row, column, 1)) + if ID then + local spellName = select(2, GetPvpTalentInfo(row, column, 1)) + if GetSpellBaseCooldown(ID) > 20000 then print(spellName, ID, GetSpellBaseCooldown(ID) / 1000) end + end + end +end diff --git a/WA snippets/Hashing.lua b/WeakAuras/Snippets/Hashing.lua similarity index 97% rename from WA snippets/Hashing.lua rename to WeakAuras/Snippets/Hashing.lua index a4cce31..854ce5d 100644 --- a/WA snippets/Hashing.lua +++ b/WeakAuras/Snippets/Hashing.lua @@ -1,101 +1,101 @@ -local function tonum(cchar) - if cchar == ":" then return 58 end - if cchar == "-" then return 45 end - if cchar == "!" then return 32 end - if cchar == "," then return 44 end - - if cchar == "0" then return 48 end - if cchar == "1" then return 49 end - if cchar == "2" then return 50 end - if cchar == "3" then return 51 end - if cchar == "4" then return 52 end - if cchar == "5" then return 53 end - if cchar == "6" then return 54 end - if cchar == "7" then return 55 end - if cchar == "8" then return 56 end - if cchar == "9" then return 57 end - - if cchar == "A" then return 65 end - if cchar == "B" then return 66 end - if cchar == "C" then return 67 end - if cchar == "D" then return 68 end - if cchar == "E" then return 69 end - if cchar == "F" then return 70 end - if cchar == "G" then return 71 end - if cchar == "H" then return 72 end - if cchar == "I" then return 73 end - if cchar == "J" then return 74 end - if cchar == "K" then return 75 end - if cchar == "L" then return 76 end - if cchar == "M" then return 77 end - if cchar == "N" then return 78 end - if cchar == "O" then return 79 end - if cchar == "P" then return 80 end - if cchar == "Q" then return 81 end - if cchar == "R" then return 82 end - if cchar == "S" then return 83 end - if cchar == "T" then return 84 end - if cchar == "U" then return 85 end - if cchar == "V" then return 86 end - if cchar == "W" then return 87 end - if cchar == "X" then return 88 end - if cchar == "Y" then return 89 end - if cchar == "Z" then return 90 end - - if cchar == "a" then return 97 end - if cchar == "b" then return 98 end - if cchar == "c" then return 99 end - if cchar == "d" then return 100 end - if cchar == "e" then return 101 end - if cchar == "f" then return 102 end - if cchar == "g" then return 103 end - if cchar == "h" then return 104 end - if cchar == "i" then return 105 end - if cchar == "j" then return 106 end - if cchar == "k" then return 107 end - if cchar == "l" then return 108 end - if cchar == "m" then return 109 end - if cchar == "n" then return 110 end - if cchar == "o" then return 111 end - if cchar == "p" then return 112 end - if cchar == "q" then return 113 end - if cchar == "r" then return 114 end - if cchar == "s" then return 115 end - if cchar == "t" then return 116 end - if cchar == "u" then return 117 end - if cchar == "v" then return 118 end - if cchar == "w" then return 119 end - if cchar == "x" then return 120 end - if cchar == "y" then return 121 end - if cchar == "z" then return 122 end -end -local function findcollision(hash_table, array) - local collisions = 0 - for k, v in ipairs(hash_table) do - for i = 1, table.getn(hash_table) do - if i ~= k then - if hash_table[i] == hash_table[k] then - collisions = collisions + 1 - print(hash_table[i], hash_table[k], i, k, array[i], array[k]) - end - end - end - end - return collisions -end -aura_env.tohash = function(tempvar) - local charTable = {} - local hash = 0 - for char in tempvar:gmatch("%a") do - charTable[#charTable + 1] = char - hash = hash + tonum(char) - hash = hash / table.getn(charTable) - end - hash = math.floor(hash * 10000) - return hash - --print(aura_env.spellarray[hash], hash) -end -aura_env.checkbase = function(spell) - if aura_env.spellarray[aura_env.tohash(spell)] == nil then return 0 end - if aura_env.spellarray[aura_env.tohash(spell)] == spell then return 1 end -end +local function tonum(cchar) + if cchar == ":" then return 58 end + if cchar == "-" then return 45 end + if cchar == "!" then return 32 end + if cchar == "," then return 44 end + + if cchar == "0" then return 48 end + if cchar == "1" then return 49 end + if cchar == "2" then return 50 end + if cchar == "3" then return 51 end + if cchar == "4" then return 52 end + if cchar == "5" then return 53 end + if cchar == "6" then return 54 end + if cchar == "7" then return 55 end + if cchar == "8" then return 56 end + if cchar == "9" then return 57 end + + if cchar == "A" then return 65 end + if cchar == "B" then return 66 end + if cchar == "C" then return 67 end + if cchar == "D" then return 68 end + if cchar == "E" then return 69 end + if cchar == "F" then return 70 end + if cchar == "G" then return 71 end + if cchar == "H" then return 72 end + if cchar == "I" then return 73 end + if cchar == "J" then return 74 end + if cchar == "K" then return 75 end + if cchar == "L" then return 76 end + if cchar == "M" then return 77 end + if cchar == "N" then return 78 end + if cchar == "O" then return 79 end + if cchar == "P" then return 80 end + if cchar == "Q" then return 81 end + if cchar == "R" then return 82 end + if cchar == "S" then return 83 end + if cchar == "T" then return 84 end + if cchar == "U" then return 85 end + if cchar == "V" then return 86 end + if cchar == "W" then return 87 end + if cchar == "X" then return 88 end + if cchar == "Y" then return 89 end + if cchar == "Z" then return 90 end + + if cchar == "a" then return 97 end + if cchar == "b" then return 98 end + if cchar == "c" then return 99 end + if cchar == "d" then return 100 end + if cchar == "e" then return 101 end + if cchar == "f" then return 102 end + if cchar == "g" then return 103 end + if cchar == "h" then return 104 end + if cchar == "i" then return 105 end + if cchar == "j" then return 106 end + if cchar == "k" then return 107 end + if cchar == "l" then return 108 end + if cchar == "m" then return 109 end + if cchar == "n" then return 110 end + if cchar == "o" then return 111 end + if cchar == "p" then return 112 end + if cchar == "q" then return 113 end + if cchar == "r" then return 114 end + if cchar == "s" then return 115 end + if cchar == "t" then return 116 end + if cchar == "u" then return 117 end + if cchar == "v" then return 118 end + if cchar == "w" then return 119 end + if cchar == "x" then return 120 end + if cchar == "y" then return 121 end + if cchar == "z" then return 122 end +end +local function findcollision(hash_table, array) + local collisions = 0 + for k, v in ipairs(hash_table) do + for i = 1, table.getn(hash_table) do + if i ~= k then + if hash_table[i] == hash_table[k] then + collisions = collisions + 1 + print(hash_table[i], hash_table[k], i, k, array[i], array[k]) + end + end + end + end + return collisions +end +aura_env.tohash = function(tempvar) + local charTable = {} + local hash = 0 + for char in tempvar:gmatch("%a") do + charTable[#charTable + 1] = char + hash = hash + tonum(char) + hash = hash / table.getn(charTable) + end + hash = math.floor(hash * 10000) + return hash + --print(aura_env.spellarray[hash], hash) +end +aura_env.checkbase = function(spell) + if aura_env.spellarray[aura_env.tohash(spell)] == nil then return 0 end + if aura_env.spellarray[aura_env.tohash(spell)] == spell then return 1 end +end diff --git a/WA snippets/IconPrint b/WeakAuras/Snippets/IconPrint similarity index 97% rename from WA snippets/IconPrint rename to WeakAuras/Snippets/IconPrint index ddb5d54..0133516 100644 --- a/WA snippets/IconPrint +++ b/WeakAuras/Snippets/IconPrint @@ -1,2 +1,2 @@ -"\124T%s:0\124t" +"\124T%s:0\124t" Where %s is icon ID \ No newline at end of file diff --git a/WA snippets/Jump God.lua b/WeakAuras/Snippets/Jump God.lua similarity index 98% rename from WA snippets/Jump God.lua rename to WeakAuras/Snippets/Jump God.lua index 2f1e439..a66967c 100644 --- a/WA snippets/Jump God.lua +++ b/WeakAuras/Snippets/Jump God.lua @@ -1 +1 @@ -hooksecurefunc("JumpOrAscendStart", function() DEFAULT_CHAT_FRAME:AddMessage("Jump") end) +hooksecurefunc("JumpOrAscendStart", function() DEFAULT_CHAT_FRAME:AddMessage("Jump") end) diff --git a/WA snippets/NameplateGlow.lua b/WeakAuras/Snippets/NameplateGlow.lua similarity index 97% rename from WA snippets/NameplateGlow.lua rename to WeakAuras/Snippets/NameplateGlow.lua index 7900cf9..3d5a03d 100644 --- a/WA snippets/NameplateGlow.lua +++ b/WeakAuras/Snippets/NameplateGlow.lua @@ -1,8 +1,8 @@ -aura_env.glow = function(unit, s) - local nameplate = C_NamePlate.GetNamePlateForUnit(unit) - if nameplate and s == 1 then - ActionButton_ShowOverlayGlow(nameplate.UnitFrame.HealthBar) - else - ActionButton_HideOverlayGlow(nameplate.UnitFrame.HealthBar) - end -end +aura_env.glow = function(unit, s) + local nameplate = C_NamePlate.GetNamePlateForUnit(unit) + if nameplate and s == 1 then + ActionButton_ShowOverlayGlow(nameplate.UnitFrame.HealthBar) + else + ActionButton_HideOverlayGlow(nameplate.UnitFrame.HealthBar) + end +end diff --git a/WA snippets/New Texture and Anchor.lua b/WeakAuras/Snippets/New Texture and Anchor.lua similarity index 97% rename from WA snippets/New Texture and Anchor.lua rename to WeakAuras/Snippets/New Texture and Anchor.lua index adf8cfb..2861375 100644 --- a/WA snippets/New Texture and Anchor.lua +++ b/WeakAuras/Snippets/New Texture and Anchor.lua @@ -1,17 +1,17 @@ ---INIT -if not aura_env.region.texture then - local texture = aura_env.region:CreateTexture(nil, "OVERLAY") - aura_env.region.texture = texture -end -aura_env.region:SetHeight(128) -aura_env.region:SetWidth(128) -aura_env.region.texture:SetTexture("Interface\\Addons\\WeakAuras\\PowerAurasMedia\\Auras\\Aura51") -aura_env.region.texture:SetHeight(128) -aura_env.region.texture:SetWidth(128) -aura_env.region.texture:SetAllPoints(aura_env.region) -aura_env.region.texture:Show() -local plate = C_NamePlate.GetNamePlateForUnit("target") -if plate then - aura_env.region.texture:ClearAllPoints() - aura_env.region.texture:SetPoint("BOTTOM", plate, "BOTTOM", 0, 0) -end +--INIT +if not aura_env.region.texture then + local texture = aura_env.region:CreateTexture(nil, "OVERLAY") + aura_env.region.texture = texture +end +aura_env.region:SetHeight(128) +aura_env.region:SetWidth(128) +aura_env.region.texture:SetTexture("Interface\\Addons\\WeakAuras\\PowerAurasMedia\\Auras\\Aura51") +aura_env.region.texture:SetHeight(128) +aura_env.region.texture:SetWidth(128) +aura_env.region.texture:SetAllPoints(aura_env.region) +aura_env.region.texture:Show() +local plate = C_NamePlate.GetNamePlateForUnit("target") +if plate then + aura_env.region.texture:ClearAllPoints() + aura_env.region.texture:SetPoint("BOTTOM", plate, "BOTTOM", 0, 0) +end diff --git a/WA snippets/Print Table.lua b/WeakAuras/Snippets/Print Table.lua similarity index 95% rename from WA snippets/Print Table.lua rename to WeakAuras/Snippets/Print Table.lua index c547e4d..69a4d03 100644 --- a/WA snippets/Print Table.lua +++ b/WeakAuras/Snippets/Print Table.lua @@ -1,15 +1,15 @@ -local function printTable(table, n) - if not n then n = 0 end - for k, v in pairs(table) do - local printText = "" - for i = 1, n do - printText = printText .. " " - end - printText = printText .. "[" .. k .. "] = " .. tostring(v) - print(printText) - if type(v) == "table" then - n = n + 1 - printTable(v, n) - end - end -end +local function printTable(table, n) + if not n then n = 0 end + for k, v in pairs(table) do + local printText = "" + for i = 1, n do + printText = printText .. " " + end + printText = printText .. "[" .. k .. "] = " .. tostring(v) + print(printText) + if type(v) == "table" then + n = n + 1 + printTable(v, n) + end + end +end diff --git a/WA snippets/Reading Tooltips.lua b/WeakAuras/Snippets/Reading Tooltips.lua similarity index 97% rename from WA snippets/Reading Tooltips.lua rename to WeakAuras/Snippets/Reading Tooltips.lua index ccb3487..7afdb99 100644 --- a/WA snippets/Reading Tooltips.lua +++ b/WeakAuras/Snippets/Reading Tooltips.lua @@ -1,11 +1,11 @@ --- somewhere in your addon's initialization -local myTooltip = CreateFrame("GameTooltip", "MyAddOnTooltip", UIParent, "GameTooltipTemplate") -myTooltip:SetOwner(UIParent, "ANCHOR_NONE") - --- later, when you want to look at a tooltip -myTooltip:SetUnitBuff("player", index of buff) -for i = 1, myTooltip:NumLines() do - local textLeft = _G["MyAddOnTooltipTextLeft"..i]:GetText() - local textRight = _G["MyAddOnTooltipTextRight"..i]:GetText() - -- do a :match or whatever to look for pertinent text -end +-- somewhere in your addon's initialization +local myTooltip = CreateFrame("GameTooltip", "MyAddOnTooltip", UIParent, "GameTooltipTemplate") +myTooltip:SetOwner(UIParent, "ANCHOR_NONE") + +-- later, when you want to look at a tooltip +myTooltip:SetUnitBuff("player", index of buff) +for i = 1, myTooltip:NumLines() do + local textLeft = _G["MyAddOnTooltipTextLeft"..i]:GetText() + local textRight = _G["MyAddOnTooltipTextRight"..i]:GetText() + -- do a :match or whatever to look for pertinent text +end diff --git a/WA snippets/Registers.lua b/WeakAuras/Snippets/Registers.lua similarity index 95% rename from WA snippets/Registers.lua rename to WeakAuras/Snippets/Registers.lua index e02f7d5..dbb277f 100644 --- a/WA snippets/Registers.lua +++ b/WeakAuras/Snippets/Registers.lua @@ -1,84 +1,84 @@ -registers = { - ["filostack"] = {}, - ["fifostack"] = {}, - ["lifostack"] = {}, - ["lilostack"] = {}, - ["filo"] = { - ["push"] = function(var) - if not var then return false end - registers.filostack[#registers.filostack + 1] = var - return true - end, - ["pop"] = function() - local var = registers.filostack[#registers.filostack] - if not var then return false end - registers.filostack[#registers.filostack] = nil - return var - end, - }, - ["fifo"] = { - ["push"] = function(var) - if not var then return false end - registers.fifostack[#registers.fifostack + 1] = var - return true - end, - ["pop"] = function() - local var = registers.fifostack[1] - if not var then return false end - registers.fifostack[1] = nil - for i = 1, #registers.fifostack do - registers.fifostack[i] = registers.fifostack[i + 1] - registers.fifostack[i + 1] = nil - end - return var - end, - }, - ["lifo"] = { - ["push"] = function(var) - if not var then return false end - for i = 1, #registers.lifostack do - registers.lifostack[i + 1] = registers.lifostack[i] - end - registers.lifostack[1] = var - return true - end, - ["pop"] = function() - local var = #registers.lifostack - if not var then return false end - registers.lifostack[#registers.lifostack] = nil - return var - end, - }, -} - -print("lifo") -print("") -for i = 1, 10 do - print("push") - print(registers.lifo.push(i)) -end -print("") -for k, v in ipairs(registers.lifostack) do - print(v) -end -print("") -for i = 1, #registers.lifostack do - print("pop") - print(registers.lifo.pop()) -end -print("") -print("lilo") -print("") -for i = 1, 4 do - print("push") - print(registers.lilo.push(i)) -end -print("") -for k, v in ipairs(registers.lilostack) do - print(v) -end -print("") -for i = 1, #registers.lilostack do - print("pop") - print(registers.lilo.pop()) -end +registers = { + ["filostack"] = {}, + ["fifostack"] = {}, + ["lifostack"] = {}, + ["lilostack"] = {}, + ["filo"] = { + ["push"] = function(var) + if not var then return false end + registers.filostack[#registers.filostack + 1] = var + return true + end, + ["pop"] = function() + local var = registers.filostack[#registers.filostack] + if not var then return false end + registers.filostack[#registers.filostack] = nil + return var + end, + }, + ["fifo"] = { + ["push"] = function(var) + if not var then return false end + registers.fifostack[#registers.fifostack + 1] = var + return true + end, + ["pop"] = function() + local var = registers.fifostack[1] + if not var then return false end + registers.fifostack[1] = nil + for i = 1, #registers.fifostack do + registers.fifostack[i] = registers.fifostack[i + 1] + registers.fifostack[i + 1] = nil + end + return var + end, + }, + ["lifo"] = { + ["push"] = function(var) + if not var then return false end + for i = 1, #registers.lifostack do + registers.lifostack[i + 1] = registers.lifostack[i] + end + registers.lifostack[1] = var + return true + end, + ["pop"] = function() + local var = #registers.lifostack + if not var then return false end + registers.lifostack[#registers.lifostack] = nil + return var + end, + }, +} + +print("lifo") +print("") +for i = 1, 10 do + print("push") + print(registers.lifo.push(i)) +end +print("") +for k, v in ipairs(registers.lifostack) do + print(v) +end +print("") +for i = 1, #registers.lifostack do + print("pop") + print(registers.lifo.pop()) +end +print("") +print("lilo") +print("") +for i = 1, 4 do + print("push") + print(registers.lilo.push(i)) +end +print("") +for k, v in ipairs(registers.lilostack) do + print(v) +end +print("") +for i = 1, #registers.lilostack do + print("pop") + print(registers.lilo.pop()) +end diff --git a/WA snippets/Round.lua b/WeakAuras/Snippets/Round.lua similarity index 95% rename from WA snippets/Round.lua rename to WeakAuras/Snippets/Round.lua index dcb8538..b0d35a7 100644 --- a/WA snippets/Round.lua +++ b/WeakAuras/Snippets/Round.lua @@ -1,8 +1,8 @@ -aura_env.round = function(var, n) - if n then - var = math.floor((var * 10 ^ n) + 0.5) / (10 ^ n) - else - var = math.floor(var + 0.5) - end - return var -end +aura_env.round = function(var, n) + if n then + var = math.floor((var * 10 ^ n) + 0.5) / (10 ^ n) + else + var = math.floor(var + 0.5) + end + return var +end diff --git a/WA snippets/Shorten Number.lua b/WeakAuras/Snippets/Shorten Number.lua similarity index 95% rename from WA snippets/Shorten Number.lua rename to WeakAuras/Snippets/Shorten Number.lua index a02db57..cab902d 100644 --- a/WA snippets/Shorten Number.lua +++ b/WeakAuras/Snippets/Shorten Number.lua @@ -1,20 +1,20 @@ -aura_env.shorten = function(val) - local function round(var, n) - if n then - var = math.floor((var * 10 ^ n) + 0.5) / (10 ^ n) - else - var = math.floor(var + 0.5) - end - return var - end - local n = 2 - if val < 1e3 then - return round(val, n) - elseif val > 1e3 and val < 1e6 then - return round(val / 1e3, n) .. "k" - elseif val > 1e6 and val < 1e9 then - return round(val / 1e6, n) .. "M" - elseif val > 1e9 then - return round(val / 1e9, n) .. "G" - end -end +aura_env.shorten = function(val) + local function round(var, n) + if n then + var = math.floor((var * 10 ^ n) + 0.5) / (10 ^ n) + else + var = math.floor(var + 0.5) + end + return var + end + local n = 2 + if val < 1e3 then + return round(val, n) + elseif val > 1e3 and val < 1e6 then + return round(val / 1e3, n) .. "k" + elseif val > 1e6 and val < 1e9 then + return round(val / 1e6, n) .. "M" + elseif val > 1e9 then + return round(val / 1e9, n) .. "G" + end +end diff --git a/WA snippets/Size to range.lua b/WeakAuras/Snippets/Size to range.lua similarity index 96% rename from WA snippets/Size to range.lua rename to WeakAuras/Snippets/Size to range.lua index 4f00d6b..66b0884 100644 --- a/WA snippets/Size to range.lua +++ b/WeakAuras/Snippets/Size to range.lua @@ -1,4 +1,4 @@ -aura_env.range = function(val, min, max, max2) - val = 1 - (((max - val) / (max - min)) * max2) - return val -end +aura_env.range = function(val, min, max, max2) + val = 1 - (((max - val) / (max - min)) * max2) + return val +end diff --git a/WA snippets/TableSort.lua b/WeakAuras/Snippets/TableSort.lua similarity index 95% rename from WA snippets/TableSort.lua rename to WeakAuras/Snippets/TableSort.lua index 450df5f..157e37c 100644 --- a/WA snippets/TableSort.lua +++ b/WeakAuras/Snippets/TableSort.lua @@ -1,22 +1,22 @@ -local function sortArray(array) - local lastMax = 1000 - local maxv, maxk = 0, 0 - local temparray = {} - for k, v in ipairs(array) do - temparray[k] = v - end - local sorted = {} - for k, v in ipairs(array) do - maxv, maxk = 0, 0 - for k2, v2 in ipairs(temparray) do - if lastMax and v2 > maxv and v2 <= lastMax then - maxv = v2 - maxk = k2 - end - end - sorted[k] = maxv - table.remove(temparray, maxk) - lastMax = maxv - end - return sorted -end +local function sortArray(array) + local lastMax = 1000 + local maxv, maxk = 0, 0 + local temparray = {} + for k, v in ipairs(array) do + temparray[k] = v + end + local sorted = {} + for k, v in ipairs(array) do + maxv, maxk = 0, 0 + for k2, v2 in ipairs(temparray) do + if lastMax and v2 > maxv and v2 <= lastMax then + maxv = v2 + maxk = k2 + end + end + sorted[k] = maxv + table.remove(temparray, maxk) + lastMax = maxv + end + return sorted +end diff --git a/WA snippets/Talent IDs.lua b/WeakAuras/Snippets/Talent IDs.lua similarity index 96% rename from WA snippets/Talent IDs.lua rename to WeakAuras/Snippets/Talent IDs.lua index cf06920..39fc2a1 100644 --- a/WA snippets/Talent IDs.lua +++ b/WeakAuras/Snippets/Talent IDs.lua @@ -1,46 +1,46 @@ -[12:15 AM] 22428 -[12:15 AM] Holy Shield -[12:15 AM] 22558 -[12:15 AM] Blessed Hammer -[12:15 AM] 22430 -[12:15 AM] Consecrated Hammer -[12:15 AM] 22431 -[12:15 AM] First Avenger -[12:15 AM] 22604 -[12:15 AM] Bastion of Light -[12:15 AM] 22594 -[12:15 AM] Crusader's Judgment -[12:15 AM] 22179 -[12:15 AM] Fist of Justice -[12:15 AM] 22180 -[12:15 AM] Repentance -[12:15 AM] 21811 -[12:15 AM] Blinding Light -[12:15 AM] 22433 -[12:15 AM] Blessing of Spellwarding -[12:15 AM] 22434 -[12:15 AM] Cavalier -[12:15 AM] 22435 -[12:15 AM] Retribution Aura -[12:15 AM] 22705 -[12:15 AM] Hand of the Protector -[12:15 AM] 21795 -[12:15 AM] Knight Templar -[12:15 AM] 17601 -[12:15 AM] Final Stand -[12:15 AM] 22564 -[12:15 AM] Aegis of Light -[12:15 AM] 22438 -[12:15 AM] Consecrated Ground -[12:15 AM] 22484 -[12:15 AM] Judgment of Light -[12:15 AM] 21201 -[12:15 AM] Righteous Protector -[12:15 AM] 21202 -[12:15 AM] Seraphim -[12:15 AM] 22645 -[12:15 AM] Last Defender - -/run for row = 1, 7 do for column = 1, 3 do local tempvar = select(1, GetTalentInfo(row, column, 1)); print(tempvar); tempvar = select(2, GetTalentInfo(row, column, 1)); print(tempvar) end end - +[12:15 AM] 22428 +[12:15 AM] Holy Shield +[12:15 AM] 22558 +[12:15 AM] Blessed Hammer +[12:15 AM] 22430 +[12:15 AM] Consecrated Hammer +[12:15 AM] 22431 +[12:15 AM] First Avenger +[12:15 AM] 22604 +[12:15 AM] Bastion of Light +[12:15 AM] 22594 +[12:15 AM] Crusader's Judgment +[12:15 AM] 22179 +[12:15 AM] Fist of Justice +[12:15 AM] 22180 +[12:15 AM] Repentance +[12:15 AM] 21811 +[12:15 AM] Blinding Light +[12:15 AM] 22433 +[12:15 AM] Blessing of Spellwarding +[12:15 AM] 22434 +[12:15 AM] Cavalier +[12:15 AM] 22435 +[12:15 AM] Retribution Aura +[12:15 AM] 22705 +[12:15 AM] Hand of the Protector +[12:15 AM] 21795 +[12:15 AM] Knight Templar +[12:15 AM] 17601 +[12:15 AM] Final Stand +[12:15 AM] 22564 +[12:15 AM] Aegis of Light +[12:15 AM] 22438 +[12:15 AM] Consecrated Ground +[12:15 AM] 22484 +[12:15 AM] Judgment of Light +[12:15 AM] 21201 +[12:15 AM] Righteous Protector +[12:15 AM] 21202 +[12:15 AM] Seraphim +[12:15 AM] 22645 +[12:15 AM] Last Defender + +/run for row = 1, 7 do for column = 1, 3 do local tempvar = select(1, GetTalentInfo(row, column, 1)); print(tempvar); tempvar = select(2, GetTalentInfo(row, column, 1)); print(tempvar) end end + /run local tempvar = ""; for i = 1, 40 do tempvar = select(i, GetTalentInfoByID(22430)); if tempvar ~= nil then print(tempvar, i) end end \ No newline at end of file diff --git a/WA snippets/Text Frame.lua b/WeakAuras/Snippets/Text Frame.lua similarity index 97% rename from WA snippets/Text Frame.lua rename to WeakAuras/Snippets/Text Frame.lua index badf826..abfea52 100644 --- a/WA snippets/Text Frame.lua +++ b/WeakAuras/Snippets/Text Frame.lua @@ -1,8 +1,8 @@ -aura_env.f1 = CreateFrame("Frame", nil, UIParent) -aura_env.f1:SetWidth(100) -aura_env.f1:SetHeight(100) -aura_env.f1:SetPoint("CENTER", 0, 100) -aura_env.f1.text = aura_env.f1:CreateFontString(nil, "ARTWORK") -aura_env.f1.text:SetFont("Fonts\\ARIALN.ttf", 26, "OUTLINE") -aura_env.f1.text:SetPoint("CENTER", 0, 0) -aura_env.f1:Hide() +aura_env.f1 = CreateFrame("Frame", nil, UIParent) +aura_env.f1:SetWidth(100) +aura_env.f1:SetHeight(100) +aura_env.f1:SetPoint("CENTER", 0, 100) +aura_env.f1.text = aura_env.f1:CreateFontString(nil, "ARTWORK") +aura_env.f1.text:SetFont("Fonts\\ARIALN.ttf", 26, "OUTLINE") +aura_env.f1.text:SetPoint("CENTER", 0, 0) +aura_env.f1:Hide() diff --git a/WA snippets/Timed Hide.lua b/WeakAuras/Snippets/Timed Hide.lua similarity index 97% rename from WA snippets/Timed Hide.lua rename to WeakAuras/Snippets/Timed Hide.lua index be2b92b..a495664 100644 --- a/WA snippets/Timed Hide.lua +++ b/WeakAuras/Snippets/Timed Hide.lua @@ -1,3 +1,3 @@ -aura_env.region:Show() -local aura_env = aura_env -C_Timer.After(1, function() aura_env.region:Hide() end) +aura_env.region:Show() +local aura_env = aura_env +C_Timer.After(1, function() aura_env.region:Hide() end) diff --git a/WA snippets/ToHex.lua b/WeakAuras/Snippets/ToHex.lua similarity index 96% rename from WA snippets/ToHex.lua rename to WeakAuras/Snippets/ToHex.lua index 4cc7955..3e21040 100644 --- a/WA snippets/ToHex.lua +++ b/WeakAuras/Snippets/ToHex.lua @@ -1,5 +1,5 @@ -local function tohex(input) - local output = string.format("%x", input * 256) - return output - +local function tohex(input) + local output = string.format("%x", input * 256) + return output + \ No newline at end of file diff --git a/WA snippets/UnitBuff.lua b/WeakAuras/Snippets/UnitBuff.lua similarity index 95% rename from WA snippets/UnitBuff.lua rename to WeakAuras/Snippets/UnitBuff.lua index b2bda16..efbce02 100644 --- a/WA snippets/UnitBuff.lua +++ b/WeakAuras/Snippets/UnitBuff.lua @@ -1,10 +1,10 @@ -aura_env.CUnitBuff = function(spell) - for i = 1, 40 do - local name = UnitBuff("player", i) - if name then - if name == spell then return UnitBuff("player", i) end - else - break - end - end -end +aura_env.CUnitBuff = function(spell) + for i = 1, 40 do + local name = UnitBuff("player", i) + if name then + if name == spell then return UnitBuff("player", i) end + else + break + end + end +end diff --git a/WA snippets/UnitDebuffC.lua b/WeakAuras/Snippets/UnitDebuffC.lua similarity index 95% rename from WA snippets/UnitDebuffC.lua rename to WeakAuras/Snippets/UnitDebuffC.lua index 611da16..3d5d1b1 100644 --- a/WA snippets/UnitDebuffC.lua +++ b/WeakAuras/Snippets/UnitDebuffC.lua @@ -1,20 +1,20 @@ -aura_env.UnitDebuffC = function(unit, spell) - for i = 1, 40 do - local name = UnitDebuff(unit, i) - if name then - if name == spell then return UnitDebuff(unit, i) end - else - return nil - end - end -end -aura_env.UnitBuffC = function(unit, spell) - for i = 1, 40 do - local name = UnitBuff(unit, i) - if name then - if name == spell then return UnitBuff(unit, i) end - else - return nil - end - end -end +aura_env.UnitDebuffC = function(unit, spell) + for i = 1, 40 do + local name = UnitDebuff(unit, i) + if name then + if name == spell then return UnitDebuff(unit, i) end + else + return nil + end + end +end +aura_env.UnitBuffC = function(unit, spell) + for i = 1, 40 do + local name = UnitBuff(unit, i) + if name then + if name == spell then return UnitBuff(unit, i) end + else + return nil + end + end +end diff --git a/WA snippets/Weakaurs Useful Shit.lua b/WeakAuras/Snippets/Weakaurs Useful Shit.lua similarity index 98% rename from WA snippets/Weakaurs Useful Shit.lua rename to WeakAuras/Snippets/Weakaurs Useful Shit.lua index 6fa0874..ede5842 100644 --- a/WA snippets/Weakaurs Useful Shit.lua +++ b/WeakAuras/Snippets/Weakaurs Useful Shit.lua @@ -1,3 +1,3 @@ -/ run local f, x = CreateFrame("frame", nil, UIParent); f:SetScript("OnUpdate", function() if GameTooltipTextLeft1:GetText():match("Angellianna") then PlaySound(11466, "master", true); if not x then Screenshot(); x = true; end end end) - ---debugprofilestop() for accurate time like os.clock +/ run local f, x = CreateFrame("frame", nil, UIParent); f:SetScript("OnUpdate", function() if GameTooltipTextLeft1:GetText():match("Angellianna") then PlaySound(11466, "master", true); if not x then Screenshot(); x = true; end end end) + +--debugprofilestop() for accurate time like os.clock diff --git a/WA snippets/wow this works.lua b/WeakAuras/Snippets/wow this works.lua similarity index 97% rename from WA snippets/wow this works.lua rename to WeakAuras/Snippets/wow this works.lua index 359a78f..5bd8e7e 100644 --- a/WA snippets/wow this works.lua +++ b/WeakAuras/Snippets/wow this works.lua @@ -1,7 +1,7 @@ -function() - if not aura_env.tooltip then aura_env.tooltip = CreateFrame("GameTooltip", "tooltip1", UIParent, "GameTooltipTemplate") end - aura_env.tooltip:SetOwner(ElvUF_RaidGroup1UnitButton1, "ANCHOR_NONE") - --tooltip1:SetUnit("raid" .. 2) - local text = _G["tooltip1TextLeft1"]:GetText() - print(text) -end +function() + if not aura_env.tooltip then aura_env.tooltip = CreateFrame("GameTooltip", "tooltip1", UIParent, "GameTooltipTemplate") end + aura_env.tooltip:SetOwner(ElvUF_RaidGroup1UnitButton1, "ANCHOR_NONE") + --tooltip1:SetUnit("raid" .. 2) + local text = _G["tooltip1TextLeft1"]:GetText() + print(text) +end diff --git a/scratch.lua b/scratch.lua deleted file mode 100644 index e8e498d..0000000 --- a/scratch.lua +++ /dev/null @@ -1 +0,0 @@ -print(string.gsub("SHIFT-Y", "SHIFT%-", "S"))

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