From 01b612a50b6efacd2ce3863a80249a73c8c68a03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Majdand=C5=BEi=C4=87?= Date: Sun, 3 Mar 2024 13:50:12 +0100 Subject: [PATCH] Add new code snippets --- .vscode/settings.json | 208 + AttackSpeedTest.lua | 55 + .../BFA Freakz/Grand Crusader Proc.lua | 16 + Complete Projects/BFA Freakz/RareAlert.lua | 34 + .../BFA/Adding text to texture.lua | 10 + Complete Projects/BFA/Anna Arrow.lua | 27 + Complete Projects/BFA/Anna Trade.lua | 22 + Complete Projects/BFA/Autoloot.lua | 531 ++ .../BFA/Azerite Power Energize.lua | 27 + Complete Projects/BFA/Block Ratio.lua | 64 + .../BFA/Block and Absorb Melee.lua | 162 + Complete Projects/BFA/CD.lua | 89 + Complete Projects/BFA/CD2.lua | 50 + Complete Projects/BFA/Chat Macro | 15 + Complete Projects/BFA/Combat.lua | 20 + Complete Projects/BFA/Cooldown Gradient.lua | 27 + Complete Projects/BFA/Deepcoral Bud Glow.lua | 17 + Complete Projects/BFA/Dodge Bog.lua | 19 + .../BFA/Drop Track/BAQS/BAQ farm.lua | 40 + .../BFA/Drop Track/BAQS/BAQ nameplate.lua | 40 + .../Follower Garbage/Garbage Nameplate.lua | 51 + .../Drop Track/Follower Garbage/Garbage.lua | 51 + .../Drop Track/STONES/Stone nameplates.lua | 80 + .../BFA/Drop Track/STONES/Stone.lua | 80 + Complete Projects/BFA/Global Debug.lua | 33 + Complete Projects/BFA/Guild Spam.lua | 25 + .../BFA/Icon Database Update.lua | 38 + Complete Projects/BFA/Ignite.lua | 28 + Complete Projects/BFA/Ignor Pain ALERT.lua | 79 + Complete Projects/BFA/Ignore Pain.lua | 65 + Complete Projects/BFA/Kindling.lua | 24 + Complete Projects/BFA/Loot List.lua | 34 + Complete Projects/BFA/Map.lua | 121 + Complete Projects/BFA/Mob Highlight.lua | 108 + Complete Projects/BFA/Null Barrier.lua | 67 + Complete Projects/BFA/Quest Fuckery.lua | 20 + Complete Projects/BFA/Rare Tracc.lua | 100 + .../BFA/Reset Custom Variable.lua | 4 + Complete Projects/BFA/SCT ABANDONED.lua | 42 + .../BFA/Saved/TSU - Combat HP Bars | 1 + Complete Projects/BFA/Saved/Warrior CDs | 1 + Complete Projects/BFA/Saved/Warrior Rage | 1 + Complete Projects/BFA/Second Wind.lua | 22 + Complete Projects/BFA/SetupChat.lua | 132 + Complete Projects/BFA/Shield Block.lua | 110 + Complete Projects/BFA/Slabhide Farm.lua | 54 + Complete Projects/BFA/Stat Recap.lua | 77 + Complete Projects/BFA/Stun Counter.lua | 160 + Complete Projects/BFA/Stun Recap.lua | 137 + .../BFA/TSU - Combat HP Bars.lua | 106 + Complete Projects/BFA/TSU - Enemy Health.lua | 121 + .../BFA/TSU - Enemy Nameplates Maybe.lua | 58 + Complete Projects/BFA/TSU - Herb Icons.lua | 64 + Complete Projects/BFA/TSU - Loot Window.lua | 371 + Complete Projects/BFA/TSU - Loot.lua | 58 + Complete Projects/BFA/TSU - Spell Alert.lua | 731 ++ Complete Projects/BFA/Tank Taunt UNTESTED.lua | 69 + .../BFA/Taunt Cunt UNFINISHED.lua | 33 + Complete Projects/BFA/Taunterino.lua | 62 + Complete Projects/BFA/UnitDebuff.lua | 58 + Complete Projects/BFA/Vaultbot Beep.lua | 33 + .../CTRL c to copy wowhead link to quest.lua | 72 + Complete Projects/BFA/Whoa/Events.lua | 1 + .../BFA/Whoa/Nnoga's Hide Guild Chat.lua | 45 + Complete Projects/BFA/Withdraw Guild Bank.lua | 45 + Complete Projects/BFA/__GOOD SHIT | 1 + .../Classic/Warrior Heroic Strike.lua | 7 + Complete Projects/Classic/Warrior Rage.lua | 36 + .../Fivver Stuff/Aura Uptime.lua | 199 + .../Fivver Stuff/Buff Me Daddy.lua | 127 + .../FO1B8D1F40B6 - Conductive Ink.lua | 357 + .../FO1F38C4D1A8 - Magus Portals.lua | 87 + .../FO2BF89E3995 - Warrior Stuff.lua | 84 + .../FO2C01B46B55 - Monk Tutor.lua | 81 + .../FO3BCAB05F84 - Magus Portals.lua | 54 + .../Fivver Stuff/FO3BE740D804 - BG Q.lua | 12 + .../FO3BE740D804 - Magus Portals.lua | 277 + .../FO4DBEE93B84 - Raid Scan Frames.lua | 234 + .../Fivver Stuff/FO4DBEE93B84 - Raid Scan.lua | 223 + .../FO5A22680021 - Druid Stuff.lua | 71 + .../FO815D7649125 - Swing Timer.lua | 105 + .../FO815F92E76D5 - Combat Timer.lua | 103 + .../Fivver Stuff/Fiverr - Conductive Ink.lua | 65 + .../Fivver Stuff/Fiverr - Conductive Ink2.lua | 290 + .../Fivver - DK Festering Wounds.lua | 76 + .../Fivver Stuff/Fivver Druid Stuff.lua | 119 + .../Fivver Stuff/Fivver Loot Logging.lua | 203 + .../Fivver Stuff/RaidTranqShot.lua | 49 + .../GeneralStuff.txt | 1 + .../Instructions.txt | 40 + .../Other stuff.lua | 67 + .../Spellbook Cooldowns.lua | 43 + .../Spellbook Scan.lua | 87 + .../SpellbookCooldowns.txt | 1 + .../Talent Cooldowns.lua | 31 + .../Talent Scan.lua | 17 + .../TalentCooldowns.txt | 1 + Complete Projects/Legion/ABS.lua | 239 + Complete Projects/Legion/Achiv Inspector.lua | 318 + Complete Projects/Legion/Active Seeds.lua | 9 + .../Legion/AntorusQuestlineThing.lua | 305 + .../Legion/AutoAttackInterval.lua | 56 + Complete Projects/Legion/Autoloot.lua | 698 ++ .../Legion/Average Raid Health.lua | 40 + Complete Projects/Legion/Ben Paralytic.lua | 25 + .../Legion/Boat Fish (Draenor).lua | 17 + .../BossHpNameplate(VERY INEFFICIENT!!).lua | 275 + Complete Projects/Legion/Bulwark of Order.lua | 67 + Complete Projects/Legion/Buttons.lua | 40 + Complete Projects/Legion/CachedNPCLevels.lua | 32 + Complete Projects/Legion/Celestial Map.lua | 33 + Complete Projects/Legion/Chat !.lua | 44 + Complete Projects/Legion/Chat.lua | 48 + Complete Projects/Legion/ChatFilter.lua | 135 + Complete Projects/Legion/ClassMissChance.lua | 95 + .../Legion/CombatLogFindClass.lua | 105 + Complete Projects/Legion/Concordance.lua | 9 + .../Legion/CooldownAnnouncer.lua | 116 + Complete Projects/Legion/Cross Char Quota.lua | 66 + Complete Projects/Legion/DAI KEY 2.lua | 44 + Complete Projects/Legion/DAI KEY.lua | 79 + .../Legion/DK Bone Shield Stacks.lua | 26 + Complete Projects/Legion/DPS HPS.lua | 51 + .../Legion/Dangerous Spells!.lua | 18 + Complete Projects/Legion/DavyStone.lua | 76 + Complete Projects/Legion/DavyStone2.lua | 411 + Complete Projects/Legion/DeathTrack.lua | 64 + Complete Projects/Legion/Delete Items.lua | 14 + Complete Projects/Legion/DickRiderCounter.lua | 30 + .../Legion/Divine Purpose Procs.lua | 33 + Complete Projects/Legion/Drums.lua | 28 + Complete Projects/Legion/EHP.lua | 694 ++ .../Legion/Easter Achiv Bullshit.lua | 55 + Complete Projects/Legion/ElwynnForestSpam.lua | 116 + .../Legion/Emote on Friendlies.lua | 131 + Complete Projects/Legion/Emotebot.lua | 45 + Complete Projects/Legion/Fevered Carapace.lua | 28 + Complete Projects/Legion/Fish.lua | 9 + Complete Projects/Legion/Focus Thing.lua | 30 + Complete Projects/Legion/Friendlist.lua | 29 + Complete Projects/Legion/Full House.lua | 10 + .../Legion/GMCommandsResearch(.add).lua | 66 + Complete Projects/Legion/GPS.lua | 23 + Complete Projects/Legion/GUIDSniffer.lua | 5001 +++++++++++++ .../Legion/Glowing Raid Frames.lua | 148 + Complete Projects/Legion/Group Breakdown.lua | 76 + Complete Projects/Legion/GuildRecap.lua | 39 + Complete Projects/Legion/GuildWave.lua | 24 + .../Legion/Hammers n Shields.lua | 23 + Complete Projects/Legion/HealerDispels.lua | 76 + Complete Projects/Legion/Herb Counter 2.0.lua | 34 + Complete Projects/Legion/Herb Counter.lua | 37 + Complete Projects/Legion/Herb Quota.lua | 63 + .../Legion/Herb Sniffer/0.5/Direction.lua | 65 + .../Legion/Herb Sniffer/0.5/Distance.lua | 14 + .../Herb Sniffer/0.5/Herb Arrays Legion.lua | 6582 +++++++++++++++++ .../Legion/Herb Sniffer/2.0/Direction.lua | 1337 ++++ .../Legion/Herb Sniffer/Direction.lua | 67 + .../Legion/Herb Sniffer/Distance.lua | 14 + .../Herb Sniffer/Herb Arrays Legion.lua | 82 + .../Herb Sniffer/Herb Arrays/All Ores.lua | 2625 +++++++ .../Herb Sniffer/Herb Arrays/ArgusWeed.lua | 77 + .../Herb Arrays/Herbalism/Aethril.lua | 933 +++ .../Herb Arrays/Herbalism/Azshara's Veil.lua | 519 ++ .../Herb Arrays/Herbalism/Cinderbloom.lua | 453 ++ .../Herb Arrays/Herbalism/Dreamleaf.lua | 1233 +++ .../Herb Arrays/Herbalism/Fel Herbs.lua | 321 + .../Herb Arrays/Herbalism/Fjarnskaggl.lua | 1233 +++ .../Herb Arrays/Herbalism/Foxflower.lua | 1234 +++ .../Herbalism/Icecap And Silversage.lua | 855 +++ .../Herb Arrays/Herbalism/Icecap.lua | 453 ++ .../Herb Arrays/Herbalism/Roses.lua | 1233 +++ .../Herb Arrays/Herbalism/Silversage.lua | 297 + .../Mining/Cobalt - Dragonblight.lua | 327 + .../Mining/Cobalt - Howling Fjord.lua | 527 ++ .../Mining/Cobalt - Rich - Zul'Drak.lua | 219 + .../Herb Arrays/Mining/Cobalt - Zul'Drak.lua | 513 ++ .../Felslate/Felslate Seam(Highmountain).lua | 555 ++ .../Felslate/Felslate Seam(Suramar).lua | 555 ++ .../Mining/Felslate/Felslate Total.lua | 1035 +++ .../Herb Arrays/Mining/Felslate/Felslate.lua | 513 ++ .../Mining/Leystone/Leystone Deposit.lua | 423 ++ .../Mining/Leystone/Leystone Total.lua | 1557 ++++ .../Mining/Leystone/Rich Leystone Deposit.lua | 1233 +++ .../Herb Arrays/Mining/Titanium.lua | 453 ++ .../Herb Arrays/Misc/Anna dogs.lua | 435 ++ .../Herb Arrays/Noblegarden/Durotar.lua | 153 + .../Noblegarden/Eversong Woods.lua | 153 + .../Herb Arrays/Noblegarden/Mulgore.lua | 153 + .../Noblegarden/Tirisfal Glades.lua | 153 + .../Herb Arrays/Noblegarden/Waypoints | 167 + .../Herb Arrays/Skinning/Some apes.lua | 279 + .../Legion/Herb Sniffer/Herb Arrays/Thing | 5 + Complete Projects/Legion/Highfathers.lua | 39 + .../Legion/HoTP heal bars/1.0/HP1.lua | 48 + .../Legion/HoTP heal bars/1.0/HP2.lua | 76 + .../Legion/HoTP heal bars/2.0/HP1 2.0.lua | 79 + .../Legion/HoTP heal bars/2.0/HP2 2.0.lua | 69 + .../Legion/HoTP heal bars/3.0/AAAAAA.txt | 4 + .../Legion/HoTP heal bars/3.0/HP1 3.0.lua | 77 + .../Legion/HoTP heal bars/3.0/HP2 3.0.lua | 10 + Complete Projects/Legion/Holy Shield.lua | 76 + Complete Projects/Legion/HowDead.lua | 71 + Complete Projects/Legion/Ignore Alliance.lua | 8 + Complete Projects/Legion/Ilterendi Uptime.lua | 20 + Complete Projects/Legion/Init.lua | 4 + .../Legion/Innervate on Whisper.lua | 67 + Complete Projects/Legion/InspectIlvl.lua | 21 + Complete Projects/Legion/Ironfur.lua | 44 + Complete Projects/Legion/JanaPullTimer.lua | 47 + ...gment of Light DebuffConsumedPerSecond.lua | 52 + .../Legion/Judgment of Light.lua | 41 + .../Legion/Judgment of Light/AP.lua | 17 + .../Legion/Judgment of Light/Background.lua | 25 + .../Legion/Judgment of Light/CODE.txt | 1 + .../Legion/Judgment of Light/Current AP.lua | 25 + Complete Projects/Legion/Juked.lua | 129 + Complete Projects/Legion/KeyGlow.lua | 42 + .../Legion/Kill - Wipe counter.lua | 33 + Complete Projects/Legion/KoSList.lua | 33 + Complete Projects/Legion/Last n Melee.lua | 94 + Complete Projects/Legion/Last n Spells.lua | 93 + Complete Projects/Legion/Leggo Sniffer.lua | 33 + Complete Projects/Legion/List the bois.lua | 96 + Complete Projects/Legion/Loot Filter.lua | 353 + .../Legion/Maiden Color Assignment.lua | 76 + Complete Projects/Legion/Members Alive.lua | 37 + Complete Projects/Legion/Misdirect God.lua | 42 + Complete Projects/Legion/Misdirect.lua | 48 + Complete Projects/Legion/Mistress Fuckery.lua | 79 + Complete Projects/Legion/Mitigation.lua | 183 + Complete Projects/Legion/Mob Kill Counter.lua | 16 + .../Legion/NameplateAchivTest.lua | 6 + Complete Projects/Legion/Necrotic Rot.lua | 69 + .../Legion/Nightwell Energy/Background.lua | 25 + .../Legion/Nightwell Energy/CODE.txt | 1 + .../Legion/Nightwell Energy/Shield.lua | 31 + .../Legion/Nightwell Energy/Stacks.lua | 17 + .../Legion/Nightwell Energy/Text.lua | 39 + .../Legion/Nightwell Energy/Todo | 2 + Complete Projects/Legion/OneSecondTicker.lua | 6 + Complete Projects/Legion/PPM.lua | 62 + Complete Projects/Legion/Premade Groups.lua | 63 + Complete Projects/Legion/Prydaz.lua | 52 + Complete Projects/Legion/PrydazOLD.lua | 20 + Complete Projects/Legion/PrydazTimer.lua | 29 + Complete Projects/Legion/PullTimer.lua | 45 + Complete Projects/Legion/QuestSyncer.lua | 400 + Complete Projects/Legion/Raid Frame Glow.lua | 173 + Complete Projects/Legion/Raid Rolls.lua | 31 + .../Legion/Raid loot DOESNT WORK.lua | 60 + Complete Projects/Legion/RaidCDs.lua | 149 + .../Legion/RaidCooldownAlert.lua | 18 + Complete Projects/Legion/RaiderlosSA 2.0.lua | 12 + Complete Projects/Legion/RaiderlosSA.lua | 57 + .../Legion/RedpilledFoFDildos.lua | 44 + Complete Projects/Legion/Rejuv.lua | 66 + .../Legion/Reputation for Beloved.lua | 29 + .../Legion/Reputations for Insane.lua | 12 + .../Rogue Sniffer 9000/Target Direction.lua | 80 + .../Rogue Sniffer 9000/Target Distance.lua | 43 + .../Legion/Rogue Sniffer 9000/Target Zone.lua | 19 + Complete Projects/Legion/Rogue Stealth.lua | 39 + Complete Projects/Legion/RuneDinger.lua | 30 + Complete Projects/Legion/SaveCombatLog.lua | 13 + Complete Projects/Legion/Sea-Star Proc.lua | 40 + Complete Projects/Legion/Shield proc.lua | 27 + Complete Projects/Legion/Shin Thing.lua | 15 + Complete Projects/Legion/Skinning Skill.lua | 11 + Complete Projects/Legion/SoTR Counter.lua | 25 + Complete Projects/Legion/SoTR Mitigation.lua | 55 + Complete Projects/Legion/Soul Leech.lua | 20 + Complete Projects/Legion/Spam Begone.lua | 43 + Complete Projects/Legion/Spell Charges/01.lua | 18 + Complete Projects/Legion/Spell Charges/12.lua | 21 + Complete Projects/Legion/Spell Charges/23.lua | 21 + Complete Projects/Legion/TSU - DAI SPELL.lua | 57 + .../Legion/TSU - EnemyPlayerHealth - CLEV.lua | 153 + .../Legion/TSU - EnemyPlayerHealth.lua | 143 + Complete Projects/Legion/TSU - Explosives.lua | 87 + .../Legion/TSU - GroupConcordance.lua | 110 + Complete Projects/Legion/TSU - HealerMana.lua | 100 + .../Legion/TSU - Item Monitor.lua | 38 + .../Legion/TSU - Jana do a spell.lua | 65 + .../Legion/TSU - PlayerEvaluator.lua | 78 + Complete Projects/Legion/TSU - RepBars.lua | 48 + .../Legion/TSU - Shitty kara trinket.lua | 59 + .../Legion/TSU - Spell Alert.lua | 494 ++ Complete Projects/Legion/TSU - Spells.lua | 399 + Complete Projects/Legion/Target TTD.lua | 43 + Complete Projects/Legion/Taunt God.lua | 60 + Complete Projects/Legion/Taunt.lua | 58 + Complete Projects/Legion/Titanguard.lua | 86 + Complete Projects/Legion/Trinket Equip.lua | 62 + Complete Projects/Legion/TrinketTest.lua | 26 + .../Legion/Valentine's Charms.lua | 15 + Complete Projects/Legion/Visp Bogec.lua | 116 + Complete Projects/Legion/Warlock Artifact.lua | 17 + .../Legion/_Big ass hammer thing.lua | 29 + Complete Projects/Legion/_GlobalTicker.lua | 11 + Complete Projects/trash/Button | 11 + Complete Projects/trash/Cunting shit 2.lua | 38 + Complete Projects/trash/Cunting shit.lua | 31 + Favorite Colors | 10 + Metadata for userdata!!.txt | 1 + ModelResearch.lua | 24 + README.txt | 9 + Random Trash/Account with herbalism dudu.txt | 6 + .../Asakawa debuffs on nameplate non tsu.lua | 45 + Random Trash/GM Chat | 128 + Random Trash/Glowy Nameplate.lua | 177 + Random Trash/Hashing/1.lua | 117 + Random Trash/Hashing/2.lua | 143 + Random Trash/Herbs/Aethril.txt | 150 + Random Trash/Herbs/Dreamleaf.txt | 200 + Random Trash/Herbs/Fjarnskaggl.txt | 200 + Random Trash/Herbs/Foxflower.txt | 199 + Random Trash/Herbs/Icecap.txt | 84 + Random Trash/Herbs/Mountain Silversage.txt | 53 + Random Trash/Herbs/Starlight Rose.txt | 200 + Random Trash/Herbs/_How2Find.txt | 2 + .../Interesting Shit/BARS QUESTIONMARK.lua | 132 + Random Trash/Interesting Shit/SeaStar.lua | 134 + Random Trash/Some stuff.lua | 17 + Random Trash/Spells of some sort.txt | 770 ++ Random Trash/TomTom/2.lua | 51 + Random Trash/TomTom/3.lua | 68 + Random Trash/TomTom/TomTom.lua | 1411 ++++ Random Trash/idk/idk.lua | 65 + Random Trash/idk/idk2.lua | 89 + Random Trash/idk/idk3.lua | 1333 ++++ Sort Array.lua | 19 + WA codes/BossHpNameplate (WA CODE).txt | 1 + WA codes/Bulwark of Order (WA CODE).txt | 1 + WA codes/Dumpy Fuckery(WA CODE).txt | 1 + WA codes/HoTP Heal bars(WA CODE).txt | 1 + WA codes/Holy Pala Crap (WA CODE).txt | 1 + WA codes/Hunter Focus (WA CODE).txt | 1 + WA codes/Icey bog(WA CODE).txt | 1 + WA codes/JulijaButtons(WA CODE).txt | 1 + WA codes/Necrotic Rot(WA CODE).txt | 1 + WA codes/Neki Bog(WA CODE).txt | 1 + WA codes/Prot Pala Crap (WA CODE).txt | 1 + WA codes/Prot pala CD popups (WA CODE).txt | 1 + WA codes/Prot pala CDS (WA CODE).txt | 1 + WA codes/Prydaz (WA CODE).txt | 1 + WA codes/Prydaz Bars (WA CODE).txt | 1 + WA codes/Random Number Crap (WA CODE).txt | 1 + WA codes/Rogue Sniffer 9000(WA CODE).txt | 1 + WA codes/Trinket procs (WA CODE).txt | 1 + WA snippets/Add Strings.lua | 10 + WA snippets/Adding text.lua | 11 + WA snippets/Anchor to nameplate.lua | 5 + WA snippets/Buttons.lua | 9 + WA snippets/C_Timer.lua | 1 + WA snippets/Class Colors.lua | 48 + WA snippets/Click Buttons.lua | 3 + WA snippets/Color Gradient.lua | 60 + WA snippets/Date and Time.lua | 43 + WA snippets/DefStack.lua | 6 + WA snippets/Find Aura ID.lua | 12 + WA snippets/FormatTime.lua | 13 + WA snippets/Functions.lua | 5 + WA snippets/Get Item Link from chat link.lua | 5 + WA snippets/GetSpellWithCooldown.lua | 41 + WA snippets/Hashing.lua | 101 + WA snippets/IconPrint | 2 + WA snippets/Jump God.lua | 3 + WA snippets/NameplateGlow.lua | 8 + WA snippets/New Texture and Anchor.lua | 17 + WA snippets/Print Table.lua | 15 + WA snippets/Reading Tooltips.lua | 11 + WA snippets/Registers.lua | 84 + WA snippets/Round.lua | 8 + WA snippets/Shorten Number.lua | 20 + WA snippets/Size to range.lua | 4 + WA snippets/TableSort.lua | 22 + WA snippets/Talent IDs.lua | 46 + WA snippets/Text Frame.lua | 8 + WA snippets/Timed Hide.lua | 3 + WA snippets/ToHex.lua | 5 + WA snippets/UnitBuff.lua | 12 + WA snippets/UnitDebuffC.lua | 25 + WA snippets/Weakaurs Useful Shit.lua | 3 + WA snippets/wow this works.lua | 7 + WHOA MOMMA.lua | 39 + WIP/Atrigan Interrupt/Display.lua | 26 + WIP/Atrigan Interrupt/INIT.lua | 40 + WIP/Atrigan Interrupt/Libs.lua | 28 + WIP/Atrigan Interrupt/Trigger1.lua | 18 + WIP/Atrigan Interrupt/Trigger2.lua | 40 + WIP/Atrigan Interrupt/Trigger3.lua | 15 + WIP/Block.lua | 40 + WIP/Dargul Timer(UNTESTED).lua | 13 + WIP/Hydra Shot 2.lua | 70 + WIP/Hydra Shot.lua | 50 + WIP/Icey AP/C AP.lua | 5 + WIP/Icey AP/Cast AP.lua | 27 + WIP/Icey AP/Pred AP.lua | 5 + WIP/Last n spells cast.lua | 30 + WIP/Nameplate HP Sort.lua | 44 + WIP/Premade Automation.lua | 16 + WIP/Reply to MOVE.lua | 14 + WIP/Some Premade Documentation.lua | 2962 ++++++++ WIP/Some next gen shit.lua | 60 + WIP/Swelter.lua | 30 + WIP/TODO.lua | 34 + WIP/Tank Stack Alerts(UNTESTED).lua | 76 + WIP/ToDissect.lua | 568 ++ 409 files changed, 65292 insertions(+) create mode 100644 .vscode/settings.json create mode 100644 AttackSpeedTest.lua create mode 100644 Complete Projects/BFA Freakz/Grand Crusader Proc.lua create mode 100644 Complete Projects/BFA Freakz/RareAlert.lua create mode 100644 Complete Projects/BFA/Adding text to texture.lua create mode 100644 Complete Projects/BFA/Anna Arrow.lua create mode 100644 Complete Projects/BFA/Anna Trade.lua create mode 100644 Complete Projects/BFA/Autoloot.lua create mode 100644 Complete Projects/BFA/Azerite Power Energize.lua create mode 100644 Complete Projects/BFA/Block Ratio.lua create mode 100644 Complete Projects/BFA/Block and Absorb Melee.lua create mode 100644 Complete Projects/BFA/CD.lua create mode 100644 Complete Projects/BFA/CD2.lua create mode 100644 Complete Projects/BFA/Chat Macro create mode 100644 Complete Projects/BFA/Combat.lua create mode 100644 Complete Projects/BFA/Cooldown Gradient.lua create mode 100644 Complete Projects/BFA/Deepcoral Bud Glow.lua create mode 100644 Complete Projects/BFA/Dodge Bog.lua create mode 100644 Complete Projects/BFA/Drop Track/BAQS/BAQ farm.lua create mode 100644 Complete Projects/BFA/Drop Track/BAQS/BAQ nameplate.lua create mode 100644 Complete Projects/BFA/Drop Track/Follower Garbage/Garbage Nameplate.lua create mode 100644 Complete Projects/BFA/Drop Track/Follower Garbage/Garbage.lua create mode 100644 Complete Projects/BFA/Drop Track/STONES/Stone nameplates.lua create mode 100644 Complete Projects/BFA/Drop Track/STONES/Stone.lua create mode 100644 Complete Projects/BFA/Global Debug.lua create mode 100644 Complete Projects/BFA/Guild Spam.lua create mode 100644 Complete Projects/BFA/Icon Database Update.lua create mode 100644 Complete Projects/BFA/Ignite.lua create mode 100644 Complete Projects/BFA/Ignor Pain ALERT.lua create mode 100644 Complete Projects/BFA/Ignore Pain.lua create mode 100644 Complete Projects/BFA/Kindling.lua create mode 100644 Complete Projects/BFA/Loot List.lua create mode 100644 Complete Projects/BFA/Map.lua create mode 100644 Complete Projects/BFA/Mob Highlight.lua create mode 100644 Complete Projects/BFA/Null Barrier.lua create mode 100644 Complete Projects/BFA/Quest Fuckery.lua create mode 100644 Complete Projects/BFA/Rare Tracc.lua create mode 100644 Complete Projects/BFA/Reset Custom Variable.lua create mode 100644 Complete Projects/BFA/SCT ABANDONED.lua create mode 100644 Complete Projects/BFA/Saved/TSU - Combat HP Bars create mode 100644 Complete Projects/BFA/Saved/Warrior CDs create mode 100644 Complete Projects/BFA/Saved/Warrior Rage create mode 100644 Complete Projects/BFA/Second Wind.lua create mode 100644 Complete Projects/BFA/SetupChat.lua create mode 100644 Complete Projects/BFA/Shield Block.lua create mode 100644 Complete Projects/BFA/Slabhide Farm.lua create mode 100644 Complete Projects/BFA/Stat Recap.lua create mode 100644 Complete Projects/BFA/Stun Counter.lua create mode 100644 Complete Projects/BFA/Stun Recap.lua create mode 100644 Complete Projects/BFA/TSU - Combat HP Bars.lua create mode 100644 Complete Projects/BFA/TSU - Enemy Health.lua create mode 100644 Complete Projects/BFA/TSU - Enemy Nameplates Maybe.lua create mode 100644 Complete Projects/BFA/TSU - Herb Icons.lua create mode 100644 Complete Projects/BFA/TSU - Loot Window.lua create mode 100644 Complete Projects/BFA/TSU - Loot.lua create mode 100644 Complete Projects/BFA/TSU - Spell Alert.lua create mode 100644 Complete Projects/BFA/Tank Taunt UNTESTED.lua create mode 100644 Complete Projects/BFA/Taunt Cunt UNFINISHED.lua create mode 100644 Complete Projects/BFA/Taunterino.lua create mode 100644 Complete Projects/BFA/UnitDebuff.lua create mode 100644 Complete Projects/BFA/Vaultbot Beep.lua create mode 100644 Complete Projects/BFA/Whoa/CTRL c to copy wowhead link to quest.lua create mode 100644 Complete Projects/BFA/Whoa/Events.lua create mode 100644 Complete Projects/BFA/Whoa/Nnoga's Hide Guild Chat.lua create mode 100644 Complete Projects/BFA/Withdraw Guild Bank.lua create mode 100644 Complete Projects/BFA/__GOOD SHIT create mode 100644 Complete Projects/Classic/Warrior Heroic Strike.lua create mode 100644 Complete Projects/Classic/Warrior Rage.lua create mode 100644 Complete Projects/Fivver Stuff/Aura Uptime.lua create mode 100644 Complete Projects/Fivver Stuff/Buff Me Daddy.lua create mode 100644 Complete Projects/Fivver Stuff/FO1B8D1F40B6 - Conductive Ink.lua create mode 100644 Complete Projects/Fivver Stuff/FO1F38C4D1A8 - Magus Portals.lua create mode 100644 Complete Projects/Fivver Stuff/FO2BF89E3995 - Warrior Stuff.lua create mode 100644 Complete Projects/Fivver Stuff/FO2C01B46B55 - Monk Tutor.lua create mode 100644 Complete Projects/Fivver Stuff/FO3BCAB05F84 - Magus Portals.lua create mode 100644 Complete Projects/Fivver Stuff/FO3BE740D804 - BG Q.lua create mode 100644 Complete Projects/Fivver Stuff/FO3BE740D804 - Magus Portals.lua create mode 100644 Complete Projects/Fivver Stuff/FO4DBEE93B84 - Raid Scan Frames.lua create mode 100644 Complete Projects/Fivver Stuff/FO4DBEE93B84 - Raid Scan.lua create mode 100644 Complete Projects/Fivver Stuff/FO5A22680021 - Druid Stuff.lua create mode 100644 Complete Projects/Fivver Stuff/FO815D7649125 - Swing Timer.lua create mode 100644 Complete Projects/Fivver Stuff/FO815F92E76D5 - Combat Timer.lua create mode 100644 Complete Projects/Fivver Stuff/Fiverr - Conductive Ink.lua create mode 100644 Complete Projects/Fivver Stuff/Fiverr - Conductive Ink2.lua create mode 100644 Complete Projects/Fivver Stuff/Fivver - DK Festering Wounds.lua create mode 100644 Complete Projects/Fivver Stuff/Fivver Druid Stuff.lua create mode 100644 Complete Projects/Fivver Stuff/Fivver Loot Logging.lua create mode 100644 Complete Projects/Fivver Stuff/RaidTranqShot.lua create mode 100644 Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/GeneralStuff.txt create mode 100644 Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Instructions.txt create mode 100644 Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Other stuff.lua create mode 100644 Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Spellbook Cooldowns.lua create mode 100644 Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Spellbook Scan.lua create mode 100644 Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/SpellbookCooldowns.txt create mode 100644 Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Talent Cooldowns.lua create mode 100644 Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Talent Scan.lua create mode 100644 Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/TalentCooldowns.txt create mode 100644 Complete Projects/Legion/ABS.lua create mode 100644 Complete Projects/Legion/Achiv Inspector.lua create mode 100644 Complete Projects/Legion/Active Seeds.lua create mode 100644 Complete Projects/Legion/AntorusQuestlineThing.lua create mode 100644 Complete Projects/Legion/AutoAttackInterval.lua create mode 100644 Complete Projects/Legion/Autoloot.lua create mode 100644 Complete Projects/Legion/Average Raid Health.lua create mode 100644 Complete Projects/Legion/Ben Paralytic.lua create mode 100644 Complete Projects/Legion/Boat Fish (Draenor).lua create mode 100644 Complete Projects/Legion/BossHpNameplate(VERY INEFFICIENT!!).lua create mode 100644 Complete Projects/Legion/Bulwark of Order.lua create mode 100644 Complete Projects/Legion/Buttons.lua create mode 100644 Complete Projects/Legion/CachedNPCLevels.lua create mode 100644 Complete Projects/Legion/Celestial Map.lua create mode 100644 Complete Projects/Legion/Chat !.lua create mode 100644 Complete Projects/Legion/Chat.lua create mode 100644 Complete Projects/Legion/ChatFilter.lua create mode 100644 Complete Projects/Legion/ClassMissChance.lua create mode 100644 Complete Projects/Legion/CombatLogFindClass.lua create mode 100644 Complete Projects/Legion/Concordance.lua create mode 100644 Complete Projects/Legion/CooldownAnnouncer.lua create mode 100644 Complete Projects/Legion/Cross Char Quota.lua create mode 100644 Complete Projects/Legion/DAI KEY 2.lua create mode 100644 Complete Projects/Legion/DAI KEY.lua create mode 100644 Complete Projects/Legion/DK Bone Shield Stacks.lua create mode 100644 Complete Projects/Legion/DPS HPS.lua create mode 100644 Complete Projects/Legion/Dangerous Spells!.lua create mode 100644 Complete Projects/Legion/DavyStone.lua create mode 100644 Complete Projects/Legion/DavyStone2.lua create mode 100644 Complete Projects/Legion/DeathTrack.lua create mode 100644 Complete Projects/Legion/Delete Items.lua create mode 100644 Complete Projects/Legion/DickRiderCounter.lua create mode 100644 Complete Projects/Legion/Divine Purpose Procs.lua create mode 100644 Complete Projects/Legion/Drums.lua create mode 100644 Complete Projects/Legion/EHP.lua create mode 100644 Complete Projects/Legion/Easter Achiv Bullshit.lua create mode 100644 Complete Projects/Legion/ElwynnForestSpam.lua create mode 100644 Complete Projects/Legion/Emote on Friendlies.lua create mode 100644 Complete Projects/Legion/Emotebot.lua create mode 100644 Complete Projects/Legion/Fevered Carapace.lua create mode 100644 Complete Projects/Legion/Fish.lua create mode 100644 Complete Projects/Legion/Focus Thing.lua create mode 100644 Complete Projects/Legion/Friendlist.lua create mode 100644 Complete Projects/Legion/Full House.lua create mode 100644 Complete Projects/Legion/GMCommandsResearch(.add).lua create mode 100644 Complete Projects/Legion/GPS.lua create mode 100644 Complete Projects/Legion/GUIDSniffer.lua create mode 100644 Complete Projects/Legion/Glowing Raid Frames.lua create mode 100644 Complete Projects/Legion/Group Breakdown.lua create mode 100644 Complete Projects/Legion/GuildRecap.lua create mode 100644 Complete Projects/Legion/GuildWave.lua create mode 100644 Complete Projects/Legion/Hammers n Shields.lua create mode 100644 Complete Projects/Legion/HealerDispels.lua create mode 100644 Complete Projects/Legion/Herb Counter 2.0.lua create mode 100644 Complete Projects/Legion/Herb Counter.lua create mode 100644 Complete Projects/Legion/Herb Quota.lua create mode 100644 Complete Projects/Legion/Herb Sniffer/0.5/Direction.lua create mode 100644 Complete Projects/Legion/Herb Sniffer/0.5/Distance.lua create mode 100644 Complete Projects/Legion/Herb Sniffer/0.5/Herb Arrays Legion.lua create mode 100644 Complete Projects/Legion/Herb Sniffer/2.0/Direction.lua create mode 100644 Complete Projects/Legion/Herb Sniffer/Direction.lua create mode 100644 Complete Projects/Legion/Herb Sniffer/Distance.lua create mode 100644 Complete Projects/Legion/Herb Sniffer/Herb Arrays Legion.lua create mode 100644 Complete Projects/Legion/Herb Sniffer/Herb Arrays/All Ores.lua create mode 100644 Complete Projects/Legion/Herb Sniffer/Herb Arrays/ArgusWeed.lua create mode 100644 Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Aethril.lua create mode 100644 Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Azshara's Veil.lua create mode 100644 Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Cinderbloom.lua create mode 100644 Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Dreamleaf.lua create mode 100644 Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Fel Herbs.lua create mode 100644 Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Fjarnskaggl.lua create mode 100644 Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Foxflower.lua create mode 100644 Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Icecap And Silversage.lua create mode 100644 Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Icecap.lua create mode 100644 Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Roses.lua create mode 100644 Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Silversage.lua create mode 100644 Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Cobalt - Dragonblight.lua create mode 100644 Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Cobalt - Howling Fjord.lua create mode 100644 Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Cobalt - Rich - Zul'Drak.lua create mode 100644 Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Cobalt - Zul'Drak.lua create mode 100644 Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate Seam(Highmountain).lua create mode 100644 Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate Seam(Suramar).lua create mode 100644 Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate Total.lua create mode 100644 Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate.lua create mode 100644 Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Leystone/Leystone Deposit.lua create mode 100644 Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Leystone/Leystone Total.lua create mode 100644 Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Leystone/Rich Leystone Deposit.lua create mode 100644 Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Titanium.lua create mode 100644 Complete Projects/Legion/Herb Sniffer/Herb Arrays/Misc/Anna dogs.lua create mode 100644 Complete Projects/Legion/Herb Sniffer/Herb Arrays/Noblegarden/Durotar.lua create mode 100644 Complete Projects/Legion/Herb Sniffer/Herb Arrays/Noblegarden/Eversong Woods.lua create mode 100644 Complete Projects/Legion/Herb Sniffer/Herb Arrays/Noblegarden/Mulgore.lua create mode 100644 Complete Projects/Legion/Herb Sniffer/Herb Arrays/Noblegarden/Tirisfal Glades.lua create mode 100644 Complete Projects/Legion/Herb Sniffer/Herb Arrays/Noblegarden/Waypoints create mode 100644 Complete Projects/Legion/Herb Sniffer/Herb Arrays/Skinning/Some apes.lua create mode 100644 Complete Projects/Legion/Herb Sniffer/Herb Arrays/Thing create mode 100644 Complete Projects/Legion/Highfathers.lua create mode 100644 Complete Projects/Legion/HoTP heal bars/1.0/HP1.lua create mode 100644 Complete Projects/Legion/HoTP heal bars/1.0/HP2.lua create mode 100644 Complete Projects/Legion/HoTP heal bars/2.0/HP1 2.0.lua create mode 100644 Complete Projects/Legion/HoTP heal bars/2.0/HP2 2.0.lua create mode 100644 Complete Projects/Legion/HoTP heal bars/3.0/AAAAAA.txt create mode 100644 Complete Projects/Legion/HoTP heal bars/3.0/HP1 3.0.lua create mode 100644 Complete Projects/Legion/HoTP heal bars/3.0/HP2 3.0.lua create mode 100644 Complete Projects/Legion/Holy Shield.lua create mode 100644 Complete Projects/Legion/HowDead.lua create mode 100644 Complete Projects/Legion/Ignore Alliance.lua create mode 100644 Complete Projects/Legion/Ilterendi Uptime.lua create mode 100644 Complete Projects/Legion/Init.lua create mode 100644 Complete Projects/Legion/Innervate on Whisper.lua create mode 100644 Complete Projects/Legion/InspectIlvl.lua create mode 100644 Complete Projects/Legion/Ironfur.lua create mode 100644 Complete Projects/Legion/JanaPullTimer.lua create mode 100644 Complete Projects/Legion/Judgment of Light DebuffConsumedPerSecond.lua create mode 100644 Complete Projects/Legion/Judgment of Light.lua create mode 100644 Complete Projects/Legion/Judgment of Light/AP.lua create mode 100644 Complete Projects/Legion/Judgment of Light/Background.lua create mode 100644 Complete Projects/Legion/Judgment of Light/CODE.txt create mode 100644 Complete Projects/Legion/Judgment of Light/Current AP.lua create mode 100644 Complete Projects/Legion/Juked.lua create mode 100644 Complete Projects/Legion/KeyGlow.lua create mode 100644 Complete Projects/Legion/Kill - Wipe counter.lua create mode 100644 Complete Projects/Legion/KoSList.lua create mode 100644 Complete Projects/Legion/Last n Melee.lua create mode 100644 Complete Projects/Legion/Last n Spells.lua create mode 100644 Complete Projects/Legion/Leggo Sniffer.lua create mode 100644 Complete Projects/Legion/List the bois.lua create mode 100644 Complete Projects/Legion/Loot Filter.lua create mode 100644 Complete Projects/Legion/Maiden Color Assignment.lua create mode 100644 Complete Projects/Legion/Members Alive.lua create mode 100644 Complete Projects/Legion/Misdirect God.lua create mode 100644 Complete Projects/Legion/Misdirect.lua create mode 100644 Complete Projects/Legion/Mistress Fuckery.lua create mode 100644 Complete Projects/Legion/Mitigation.lua create mode 100644 Complete Projects/Legion/Mob Kill Counter.lua create mode 100644 Complete Projects/Legion/NameplateAchivTest.lua create mode 100644 Complete Projects/Legion/Necrotic Rot.lua create mode 100644 Complete Projects/Legion/Nightwell Energy/Background.lua create mode 100644 Complete Projects/Legion/Nightwell Energy/CODE.txt create mode 100644 Complete Projects/Legion/Nightwell Energy/Shield.lua create mode 100644 Complete Projects/Legion/Nightwell Energy/Stacks.lua create mode 100644 Complete Projects/Legion/Nightwell Energy/Text.lua create mode 100644 Complete Projects/Legion/Nightwell Energy/Todo create mode 100644 Complete Projects/Legion/OneSecondTicker.lua create mode 100644 Complete Projects/Legion/PPM.lua create mode 100644 Complete Projects/Legion/Premade Groups.lua create mode 100644 Complete Projects/Legion/Prydaz.lua create mode 100644 Complete Projects/Legion/PrydazOLD.lua create mode 100644 Complete Projects/Legion/PrydazTimer.lua create mode 100644 Complete Projects/Legion/PullTimer.lua create mode 100644 Complete Projects/Legion/QuestSyncer.lua create mode 100644 Complete Projects/Legion/Raid Frame Glow.lua create mode 100644 Complete Projects/Legion/Raid Rolls.lua create mode 100644 Complete Projects/Legion/Raid loot DOESNT WORK.lua create mode 100644 Complete Projects/Legion/RaidCDs.lua create mode 100644 Complete Projects/Legion/RaidCooldownAlert.lua create mode 100644 Complete Projects/Legion/RaiderlosSA 2.0.lua create mode 100644 Complete Projects/Legion/RaiderlosSA.lua create mode 100644 Complete Projects/Legion/RedpilledFoFDildos.lua create mode 100644 Complete Projects/Legion/Rejuv.lua create mode 100644 Complete Projects/Legion/Reputation for Beloved.lua create mode 100644 Complete Projects/Legion/Reputations for Insane.lua create mode 100644 Complete Projects/Legion/Rogue Sniffer 9000/Target Direction.lua create mode 100644 Complete Projects/Legion/Rogue Sniffer 9000/Target Distance.lua create mode 100644 Complete Projects/Legion/Rogue Sniffer 9000/Target Zone.lua create mode 100644 Complete Projects/Legion/Rogue Stealth.lua create mode 100644 Complete Projects/Legion/RuneDinger.lua create mode 100644 Complete Projects/Legion/SaveCombatLog.lua create mode 100644 Complete Projects/Legion/Sea-Star Proc.lua create mode 100644 Complete Projects/Legion/Shield proc.lua create mode 100644 Complete Projects/Legion/Shin Thing.lua create mode 100644 Complete Projects/Legion/Skinning Skill.lua create mode 100644 Complete Projects/Legion/SoTR Counter.lua create mode 100644 Complete Projects/Legion/SoTR Mitigation.lua create mode 100644 Complete Projects/Legion/Soul Leech.lua create mode 100644 Complete Projects/Legion/Spam Begone.lua create mode 100644 Complete Projects/Legion/Spell Charges/01.lua create mode 100644 Complete Projects/Legion/Spell Charges/12.lua create mode 100644 Complete Projects/Legion/Spell Charges/23.lua create mode 100644 Complete Projects/Legion/TSU - DAI SPELL.lua create mode 100644 Complete Projects/Legion/TSU - EnemyPlayerHealth - CLEV.lua create mode 100644 Complete Projects/Legion/TSU - EnemyPlayerHealth.lua create mode 100644 Complete Projects/Legion/TSU - Explosives.lua create mode 100644 Complete Projects/Legion/TSU - GroupConcordance.lua create mode 100644 Complete Projects/Legion/TSU - HealerMana.lua create mode 100644 Complete Projects/Legion/TSU - Item Monitor.lua create mode 100644 Complete Projects/Legion/TSU - Jana do a spell.lua create mode 100644 Complete Projects/Legion/TSU - PlayerEvaluator.lua create mode 100644 Complete Projects/Legion/TSU - RepBars.lua create mode 100644 Complete Projects/Legion/TSU - Shitty kara trinket.lua create mode 100644 Complete Projects/Legion/TSU - Spell Alert.lua create mode 100644 Complete Projects/Legion/TSU - Spells.lua create mode 100644 Complete Projects/Legion/Target TTD.lua create mode 100644 Complete Projects/Legion/Taunt God.lua create mode 100644 Complete Projects/Legion/Taunt.lua create mode 100644 Complete Projects/Legion/Titanguard.lua create mode 100644 Complete Projects/Legion/Trinket Equip.lua create mode 100644 Complete Projects/Legion/TrinketTest.lua create mode 100644 Complete Projects/Legion/Valentine's Charms.lua create mode 100644 Complete Projects/Legion/Visp Bogec.lua create mode 100644 Complete Projects/Legion/Warlock Artifact.lua create mode 100644 Complete Projects/Legion/_Big ass hammer thing.lua create mode 100644 Complete Projects/Legion/_GlobalTicker.lua create mode 100644 Complete Projects/trash/Button create mode 100644 Complete Projects/trash/Cunting shit 2.lua create mode 100644 Complete Projects/trash/Cunting shit.lua create mode 100644 Favorite Colors create mode 100644 Metadata for userdata!!.txt create mode 100644 ModelResearch.lua create mode 100644 README.txt create mode 100644 Random Trash/Account with herbalism dudu.txt create mode 100644 Random Trash/Asakawa debuffs on nameplate non tsu.lua create mode 100644 Random Trash/GM Chat create mode 100644 Random Trash/Glowy Nameplate.lua create mode 100644 Random Trash/Hashing/1.lua create mode 100644 Random Trash/Hashing/2.lua create mode 100644 Random Trash/Herbs/Aethril.txt create mode 100644 Random Trash/Herbs/Dreamleaf.txt create mode 100644 Random Trash/Herbs/Fjarnskaggl.txt create mode 100644 Random Trash/Herbs/Foxflower.txt create mode 100644 Random Trash/Herbs/Icecap.txt create mode 100644 Random Trash/Herbs/Mountain Silversage.txt create mode 100644 Random Trash/Herbs/Starlight Rose.txt create mode 100644 Random Trash/Herbs/_How2Find.txt create mode 100644 Random Trash/Interesting Shit/BARS QUESTIONMARK.lua create mode 100644 Random Trash/Interesting Shit/SeaStar.lua create mode 100644 Random Trash/Some stuff.lua create mode 100644 Random Trash/Spells of some sort.txt create mode 100644 Random Trash/TomTom/2.lua create mode 100644 Random Trash/TomTom/3.lua create mode 100644 Random Trash/TomTom/TomTom.lua create mode 100644 Random Trash/idk/idk.lua create mode 100644 Random Trash/idk/idk2.lua create mode 100644 Random Trash/idk/idk3.lua create mode 100644 Sort Array.lua create mode 100644 WA codes/BossHpNameplate (WA CODE).txt create mode 100644 WA codes/Bulwark of Order (WA CODE).txt create mode 100644 WA codes/Dumpy Fuckery(WA CODE).txt create mode 100644 WA codes/HoTP Heal bars(WA CODE).txt create mode 100644 WA codes/Holy Pala Crap (WA CODE).txt create mode 100644 WA codes/Hunter Focus (WA CODE).txt create mode 100644 WA codes/Icey bog(WA CODE).txt create mode 100644 WA codes/JulijaButtons(WA CODE).txt create mode 100644 WA codes/Necrotic Rot(WA CODE).txt create mode 100644 WA codes/Neki Bog(WA CODE).txt create mode 100644 WA codes/Prot Pala Crap (WA CODE).txt create mode 100644 WA codes/Prot pala CD popups (WA CODE).txt create mode 100644 WA codes/Prot pala CDS (WA CODE).txt create mode 100644 WA codes/Prydaz (WA CODE).txt create mode 100644 WA codes/Prydaz Bars (WA CODE).txt create mode 100644 WA codes/Random Number Crap (WA CODE).txt create mode 100644 WA codes/Rogue Sniffer 9000(WA CODE).txt create mode 100644 WA codes/Trinket procs (WA CODE).txt create mode 100644 WA snippets/Add Strings.lua create mode 100644 WA snippets/Adding text.lua create mode 100644 WA snippets/Anchor to nameplate.lua create mode 100644 WA snippets/Buttons.lua create mode 100644 WA snippets/C_Timer.lua create mode 100644 WA snippets/Class Colors.lua create mode 100644 WA snippets/Click Buttons.lua create mode 100644 WA snippets/Color Gradient.lua create mode 100644 WA snippets/Date and Time.lua create mode 100644 WA snippets/DefStack.lua create mode 100644 WA snippets/Find Aura ID.lua create mode 100644 WA snippets/FormatTime.lua create mode 100644 WA snippets/Functions.lua create mode 100644 WA snippets/Get Item Link from chat link.lua create mode 100644 WA snippets/GetSpellWithCooldown.lua create mode 100644 WA snippets/Hashing.lua create mode 100644 WA snippets/IconPrint create mode 100644 WA snippets/Jump God.lua create mode 100644 WA snippets/NameplateGlow.lua create mode 100644 WA snippets/New Texture and Anchor.lua create mode 100644 WA snippets/Print Table.lua create mode 100644 WA snippets/Reading Tooltips.lua create mode 100644 WA snippets/Registers.lua create mode 100644 WA snippets/Round.lua create mode 100644 WA snippets/Shorten Number.lua create mode 100644 WA snippets/Size to range.lua create mode 100644 WA snippets/TableSort.lua create mode 100644 WA snippets/Talent IDs.lua create mode 100644 WA snippets/Text Frame.lua create mode 100644 WA snippets/Timed Hide.lua create mode 100644 WA snippets/ToHex.lua create mode 100644 WA snippets/UnitBuff.lua create mode 100644 WA snippets/UnitDebuffC.lua create mode 100644 WA snippets/Weakaurs Useful Shit.lua create mode 100644 WA snippets/wow this works.lua create mode 100644 WHOA MOMMA.lua create mode 100644 WIP/Atrigan Interrupt/Display.lua create mode 100644 WIP/Atrigan Interrupt/INIT.lua create mode 100644 WIP/Atrigan Interrupt/Libs.lua create mode 100644 WIP/Atrigan Interrupt/Trigger1.lua create mode 100644 WIP/Atrigan Interrupt/Trigger2.lua create mode 100644 WIP/Atrigan Interrupt/Trigger3.lua create mode 100644 WIP/Block.lua create mode 100644 WIP/Dargul Timer(UNTESTED).lua create mode 100644 WIP/Hydra Shot 2.lua create mode 100644 WIP/Hydra Shot.lua create mode 100644 WIP/Icey AP/C AP.lua create mode 100644 WIP/Icey AP/Cast AP.lua create mode 100644 WIP/Icey AP/Pred AP.lua create mode 100644 WIP/Last n spells cast.lua create mode 100644 WIP/Nameplate HP Sort.lua create mode 100644 WIP/Premade Automation.lua create mode 100644 WIP/Reply to MOVE.lua create mode 100644 WIP/Some Premade Documentation.lua create mode 100644 WIP/Some next gen shit.lua create mode 100644 WIP/Swelter.lua create mode 100644 WIP/TODO.lua create mode 100644 WIP/Tank Stack Alerts(UNTESTED).lua create mode 100644 WIP/ToDissect.lua diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..991b6df --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,208 @@ +{ + "Lua.diagnostics.globals": [ + "StaticPopup1Button1", + "SelectGossipOption", + "PLAYER", + "ChatConfigChatSettingsLeftCheckBox1Check", + "ChatConfigChatSettingsLeftCheckBox2Check", + "ChatConfigChatSettingsLeftCheckBox3Check", + "ChatConfigChatSettingsLeftCheckBox4Check", + "ChatConfigChatSettingsLeftCheckBox5Check", + "ChatConfigChatSettingsLeftCheckBox6Check", + "ChatConfigChatSettingsLeftCheckBox7Check", + "ChatConfigChatSettingsLeftCheckBox8Check", + "ChatConfigChatSettingsLeftCheckBox9Check", + "ChatConfigChatSettingsLeftCheckBox10Check", + "ChatConfigChatSettingsLeftCheckBox11Check", + "ChatConfigChatSettingsLeftCheckBox12Check", + "ChatConfigChatSettingsLeftCheckBox13Check", + "ChatConfigChatSettingsLeftCheckBox14Check", + "ChatConfigChatSettingsLeftCheckBox15Check", + "ChatConfigChatSettingsLeftCheckBox16Check", + "StaticPopupDialogs", + "StaticPopup_Show", + "CommunitiesFrame", + "COMMUNITIES_FRAME_DISPLAY_MODES", + "CommunitiesFrameInset", + "ActionButton_HideOverlayGlow", + "ActionButton_ShowOverlayGlow", + "message", + "InspectUnit", + "FriendsFrameCloseButton", + "DISPLAY", + "HP", + "NAME", + "ANIMATION", + "SHOW", + "SlashCmdList", + "ChatFrame_AddMessageEventFilter", + "ChatFrame_GetMessageEventFilters", + "ChatFrame_RemoveMessageEventFilter", + "CR_VERSATILITY_DAMAGE_DONE", + "CHAT_MSG_WHISPER", + "CHAT_MSG_TEXT_EMOTE", + "HIDE", + "CR_VERSATILITY_DAMAGE_TAKEN", + "COLOR", + "CHAT_MSG_LOOT", + "CHAT_MSG_SYSTEM", + "CHAT_MSG_SKILL", + "AuctionHouseFrame", + "CompactRaidFrameContainer", + "ChatFrame1", + "UIDropDownMenu_Initialize", + "UIDropDownMenu_AddButton", + "ToggleDropDownMenu", + "WorldMapFrame", + "RegisterUnitWatch", + "UnitFrame_OnEnter", + "BOOKTYPE_SPELL", + "DEFAULT_CHAT_FRAME", + "GameTooltipTextLeft1", + "CHAT_MSG_PARTY", + "CHAT_MSG_PARTY_LEADER", + "LFG_LIST_CONVERT_TO_RAID_WARNING", + "INVITE", + "CANCEL", + "UIDropDownMenu_SetText", + "HybridScrollFrame_CreateButtons", + "HybridScrollFrame_Update", + "SearchBoxTemplate_OnTextChanged", + "NORMAL_FONT_COLOR", + "GRAY_FONT_COLOR", + "StaticPopupSpecial_Show", + "StaticPopupSpecial_Hide", + "UIDropDownMenu_JustifyText", + "UIDropDownMenu_SetAnchor", + "NUM_LE_LFG_CATEGORYS", + "LFG_LIST_ENTER_NAME", + "nop", + "FILTER", + "LFGListApplicationDialog", + "LFG_LIST_APP_UNEMPOWERED", + "HIGHLIGHT_FONT_COLOR", + "WHISPER", + "LFG_LIST_MUST_SIGN_UP_TO_WHISPER", + "PVEFrame_ShowFrame", + "LFG_LIST_SELECT_A_CATEGORY", + "LFG_LIST_NOT_LEADER", + "LFG_LIST_MORE", + "LFG_LIST_MUST_HAVE_NAME", + "UIDropDownMenu_DisableDropDown", + "UIDropDownMenu_EnableDropDown", + "HybridScrollFrame_GetOffset", + "ERR_RESTRICTED_ACCOUNT_LFG_LIST_TRIAL", + "MAX_RAID_MEMBERS", + "LFG_LIST_PROVING_GROUND_TITLE", + "LFG_LIST_APP_CURRENTLY_APPLYING", + "LFG_LIST_MAX_MEMBERS", + "LFG_LIST_MUST_CHOOSE_SPEC", + "LFG_LIST_OFFLINE_MEMBER", + "LFG_LIST_SELECT_A_SEARCH_RESULT", + "BATTLENET_FONT_COLOR", + "EasyMenu", + "LFG_LIST_MUST_SELECT_ROLE", + "LFG_LIST_INVITED_TO_GROUP", + "GMError", + "LFG_LIST_ILVL_ABOVE_YOURS", + "LFG_LIST_HONOR_LEVEL_ABOVE_YOURS", + "LFG_LIST_LEGACY", + "LFG_LIST_CATEGORY_FORMAT", + "WHISPER_LEADER", + "LFG_LIST_REPORT_GROUP_FOR", + "LFG_LIST_REPORT_FOR", + "IGNORE_PLAYER", + "UIDropDownMenu_CreateInfo", + "PVEFrame_ToggleFrame", + "CANNOT_DO_THIS_WITH_LFGLIST_APP", + "CANNOT_DO_THIS_WHILE_LFGLIST_LISTED", + "NO_LFG_LIST_AVAILABLE", + "LFG_LIST_LOADING", + "LFG_LIST_RECOMMENDED_ILVL", + "LFG_LIST_ITEM_LEVEL_INSTR_SHORT", + "DONE_EDITING", + "LIST_GROUP", + "LFG_LIST_ITEM_LEVEL_CURRENT", + "GameFontHighlightSmall", + "GameFontDisableSmall", + "LE_PARTY_CATEGORY_HOME", + "LFG_LIST_INVITE_GROUP", + "LFG_LIST_APP_INVITED", + "LFG_LIST_APP_CANCELLED", + "LFG_LIST_APP_DECLINED", + "LFG_LIST_APP_TIMED_OUT", + "LFG_LIST_APP_INVITE_ACCEPTED", + "LFG_LIST_APP_INVITE_DECLINED", + "LFG_LIST_PROVING_TANK_GOLD", + "LFG_LIST_PROVING_TANK_SILVER", + "LFG_LIST_PROVING_TANK_BRONZE", + "LFG_LIST_PROVING_HEALER_GOLD", + "LFG_LIST_PROVING_HEALER_SILVER", + "LFG_LIST_PROVING_HEALER_BRONZE", + "LFG_LIST_PROVING_DAMAGER_GOLD", + "LFG_LIST_PROVING_DAMAGER_SILVER", + "LFG_LIST_PROVING_DAMAGER_BRONZE", + "SearchBoxTemplateClearButton_OnClick", + "LFG_LIST_ROLE_CHECK", + "LFG_LIST_PENDING", + "LFGListFrameDropDown", + "LE_LFG_LIST_DISPLAY_TYPE_CLASS_ENUMERATE", + "LFG_LIST_TOOLTIP_FRIENDS_IN_GROUP", + "LFG_LIST_BOSSES_DEFEATED", + "LFG_LIST_ENTRY_DELISTED", + "FRIENDS_BNET_NAME_COLOR_CODE", + "FRIENDS_WOW_NAME_COLOR_CODE", + "LFG_LIST_JOINED_GROUP_NOTICE", + "LFG_LIST_OFFLINE_MEMBER_NOTICE", + "GameFontRed", + "LFG_LIST_OFFLINE_MEMBER_NOTICE_GONE", + "GameFontGreen", + "LE_LFG_LIST_DISPLAY_TYPE_ROLE_COUNT", + "LE_LFG_LIST_DISPLAY_TYPE_ROLE_ENUMERATE", + "LE_LFG_LIST_DISPLAY_TYPE_PLAYER_COUNT", + "LE_LFG_LIST_DISPLAY_TYPE_HIDE_ALL", + "UIDropDownMenu_SetWidth", + "GetLFGMode", + "CANNOT_DO_THIS_WHILE_PVE_QUEUING", + "CANNOT_DO_THIS_IN_BATTLEGROUND", + "GREEN_FONT_COLOR", + "LFG_LIST_NO_RESULTS_FOUND", + "MAX_PARTY_MEMBERS", + "LFG_LIST_AND_MORE", + "RED_FONT_COLOR", + "PLAYER_LIST_DELIMITER", + "FONT_COLOR_CODE_CLOSE", + "RGBTableToColorCode", + "ChatFrame_SendTell", + "CANNOT_DO_THIS_WHILE_PVP_QUEUING", + "ChatTypeInfo", + "LFG_LIST_TOO_MANY_FOR_ACTIVITY", + "LFG_LIST_GROUP_TOO_FULL", + "LFG_LIST_INVITED_APP_FILLS_GROUP", + "UNIT_TYPE_LEVEL_TEMPLATE", + "LFG_LIST_HONOR_LEVEL_CURRENT_PVP", + "LFG_LIST_COMMENT_FORMAT", + "LFG_LIST_SEARCH_FAILED", + "LFG_LIST_HIT_MAX_APPLICATIONS", + "LFG_LIST_TOOLTIP_ILVL", + "LFG_LIST_TOOLTIP_HONOR_LEVEL", + "LFG_LIST_TOOLTIP_VOICE_CHAT", + "LFG_LIST_TOOLTIP_LEADER", + "LFG_LIST_TOOLTIP_AGE", + "LFG_LIST_TOOLTIP_MEMBERS_SIMPLE", + "LFG_LIST_TOOLTIP_MEMBERS", + "CANNOT_DO_THIS_IN_LFG_PARTY", + "CANNOT_DO_THIS_IN_PVE_QUEUE", + "LFG_LIST_TOOLTIP_CLASS_ROLE", + "LFG_LIST_BAD_NAME", + "LFG_LIST_BAD_DESCRIPTION", + "LFG_LIST_BAD_VOICE_CHAT_COMMENT", + "LFG_LIST_BAD_LEADER_NAME", + "LFG_LIST_APP_DECLINED_MESSAGE", + "LFG_LIST_APP_TIMED_OUT_MESSAGE", + "LE_FRAME_TUTORIAL_LFG_LIST", + "LFGListFrame", + "aura_env" + ], + "Lua.diagnostics.disable": ["duplicate-set-field"] +} diff --git a/AttackSpeedTest.lua b/AttackSpeedTest.lua new file mode 100644 index 0000000..5b076ac --- /dev/null +++ b/AttackSpeedTest.lua @@ -0,0 +1,55 @@ +--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 \ No newline at end of file diff --git a/Complete Projects/BFA Freakz/Grand Crusader Proc.lua b/Complete Projects/BFA Freakz/Grand Crusader Proc.lua new file mode 100644 index 0000000..af55f9f --- /dev/null +++ b/Complete Projects/BFA Freakz/Grand Crusader Proc.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/BFA Freakz/RareAlert.lua b/Complete Projects/BFA Freakz/RareAlert.lua new file mode 100644 index 0000000..40b9497 --- /dev/null +++ b/Complete Projects/BFA Freakz/RareAlert.lua @@ -0,0 +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") +endee \ No newline at end of file diff --git a/Complete Projects/BFA/Adding text to texture.lua b/Complete Projects/BFA/Adding text to texture.lua new file mode 100644 index 0000000..af733b2 --- /dev/null +++ b/Complete Projects/BFA/Adding text to texture.lua @@ -0,0 +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() diff --git a/Complete Projects/BFA/Anna Arrow.lua b/Complete Projects/BFA/Anna Arrow.lua new file mode 100644 index 0000000..6148f4f --- /dev/null +++ b/Complete Projects/BFA/Anna Arrow.lua @@ -0,0 +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, +} \ No newline at end of file diff --git a/Complete Projects/BFA/Anna Trade.lua b/Complete Projects/BFA/Anna Trade.lua new file mode 100644 index 0000000..2be18d2 --- /dev/null +++ b/Complete Projects/BFA/Anna Trade.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/BFA/Autoloot.lua b/Complete Projects/BFA/Autoloot.lua new file mode 100644 index 0000000..f463d2d --- /dev/null +++ b/Complete Projects/BFA/Autoloot.lua @@ -0,0 +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, + }, +} diff --git a/Complete Projects/BFA/Azerite Power Energize.lua b/Complete Projects/BFA/Azerite Power Energize.lua new file mode 100644 index 0000000..b71a60e --- /dev/null +++ b/Complete Projects/BFA/Azerite Power Energize.lua @@ -0,0 +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 +aura_env.amount = 0 \ No newline at end of file diff --git a/Complete Projects/BFA/Block Ratio.lua b/Complete Projects/BFA/Block Ratio.lua new file mode 100644 index 0000000..b79ebac --- /dev/null +++ b/Complete Projects/BFA/Block Ratio.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/BFA/Block and Absorb Melee.lua b/Complete Projects/BFA/Block and Absorb Melee.lua new file mode 100644 index 0000000..24063c3 --- /dev/null +++ b/Complete Projects/BFA/Block and Absorb Melee.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/BFA/CD.lua b/Complete Projects/BFA/CD.lua new file mode 100644 index 0000000..e3589f7 --- /dev/null +++ b/Complete Projects/BFA/CD.lua @@ -0,0 +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") +aura_env.region.text2:Show() \ No newline at end of file diff --git a/Complete Projects/BFA/CD2.lua b/Complete Projects/BFA/CD2.lua new file mode 100644 index 0000000..debe9e1 --- /dev/null +++ b/Complete Projects/BFA/CD2.lua @@ -0,0 +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") +aura_env.region.text2:Show() \ No newline at end of file diff --git a/Complete Projects/BFA/Chat Macro b/Complete Projects/BFA/Chat Macro new file mode 100644 index 0000000..5503018 --- /dev/null +++ b/Complete Projects/BFA/Chat Macro @@ -0,0 +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 + +/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/Complete Projects/BFA/Combat.lua new file mode 100644 index 0000000..8351930 --- /dev/null +++ b/Complete Projects/BFA/Combat.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/BFA/Cooldown Gradient.lua b/Complete Projects/BFA/Cooldown Gradient.lua new file mode 100644 index 0000000..aa33b2c --- /dev/null +++ b/Complete Projects/BFA/Cooldown Gradient.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/BFA/Deepcoral Bud Glow.lua b/Complete Projects/BFA/Deepcoral Bud Glow.lua new file mode 100644 index 0000000..20c91db --- /dev/null +++ b/Complete Projects/BFA/Deepcoral Bud Glow.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/BFA/Dodge Bog.lua b/Complete Projects/BFA/Dodge Bog.lua new file mode 100644 index 0000000..c9256d7 --- /dev/null +++ b/Complete Projects/BFA/Dodge Bog.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/BFA/Drop Track/BAQS/BAQ farm.lua b/Complete Projects/BFA/Drop Track/BAQS/BAQ farm.lua new file mode 100644 index 0000000..ec8ccfd --- /dev/null +++ b/Complete Projects/BFA/Drop Track/BAQS/BAQ farm.lua @@ -0,0 +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, +} \ No newline at end of file diff --git a/Complete Projects/BFA/Drop Track/BAQS/BAQ nameplate.lua b/Complete Projects/BFA/Drop Track/BAQS/BAQ nameplate.lua new file mode 100644 index 0000000..8056c59 --- /dev/null +++ b/Complete Projects/BFA/Drop Track/BAQS/BAQ nameplate.lua @@ -0,0 +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, +} \ No newline at end of file diff --git a/Complete Projects/BFA/Drop Track/Follower Garbage/Garbage Nameplate.lua b/Complete Projects/BFA/Drop Track/Follower Garbage/Garbage Nameplate.lua new file mode 100644 index 0000000..8019d8b --- /dev/null +++ b/Complete Projects/BFA/Drop Track/Follower Garbage/Garbage Nameplate.lua @@ -0,0 +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, +} \ No newline at end of file diff --git a/Complete Projects/BFA/Drop Track/Follower Garbage/Garbage.lua b/Complete Projects/BFA/Drop Track/Follower Garbage/Garbage.lua new file mode 100644 index 0000000..d78c46f --- /dev/null +++ b/Complete Projects/BFA/Drop Track/Follower Garbage/Garbage.lua @@ -0,0 +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, +} \ No newline at end of file diff --git a/Complete Projects/BFA/Drop Track/STONES/Stone nameplates.lua b/Complete Projects/BFA/Drop Track/STONES/Stone nameplates.lua new file mode 100644 index 0000000..70431fc --- /dev/null +++ b/Complete Projects/BFA/Drop Track/STONES/Stone nameplates.lua @@ -0,0 +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, +} \ No newline at end of file diff --git a/Complete Projects/BFA/Drop Track/STONES/Stone.lua b/Complete Projects/BFA/Drop Track/STONES/Stone.lua new file mode 100644 index 0000000..4d5bf9d --- /dev/null +++ b/Complete Projects/BFA/Drop Track/STONES/Stone.lua @@ -0,0 +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, +} \ No newline at end of file diff --git a/Complete Projects/BFA/Global Debug.lua b/Complete Projects/BFA/Global Debug.lua new file mode 100644 index 0000000..d21813a --- /dev/null +++ b/Complete Projects/BFA/Global Debug.lua @@ -0,0 +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 +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/Complete Projects/BFA/Guild Spam.lua new file mode 100644 index 0000000..21caa1f --- /dev/null +++ b/Complete Projects/BFA/Guild Spam.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/BFA/Icon Database Update.lua b/Complete Projects/BFA/Icon Database Update.lua new file mode 100644 index 0000000..54edfdf --- /dev/null +++ b/Complete Projects/BFA/Icon Database Update.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/BFA/Ignite.lua b/Complete Projects/BFA/Ignite.lua new file mode 100644 index 0000000..7d4a206 --- /dev/null +++ b/Complete Projects/BFA/Ignite.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/BFA/Ignor Pain ALERT.lua b/Complete Projects/BFA/Ignor Pain ALERT.lua new file mode 100644 index 0000000..9aea6e6 --- /dev/null +++ b/Complete Projects/BFA/Ignor Pain ALERT.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/BFA/Ignore Pain.lua b/Complete Projects/BFA/Ignore Pain.lua new file mode 100644 index 0000000..48997b4 --- /dev/null +++ b/Complete Projects/BFA/Ignore Pain.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/BFA/Kindling.lua b/Complete Projects/BFA/Kindling.lua new file mode 100644 index 0000000..3eb2a71 --- /dev/null +++ b/Complete Projects/BFA/Kindling.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/BFA/Loot List.lua b/Complete Projects/BFA/Loot List.lua new file mode 100644 index 0000000..38b2c5b --- /dev/null +++ b/Complete Projects/BFA/Loot List.lua @@ -0,0 +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 +aura_env.loot = {} \ No newline at end of file diff --git a/Complete Projects/BFA/Map.lua b/Complete Projects/BFA/Map.lua new file mode 100644 index 0000000..fa37846 --- /dev/null +++ b/Complete Projects/BFA/Map.lua @@ -0,0 +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") +aura_env.region.text:Show() \ No newline at end of file diff --git a/Complete Projects/BFA/Mob Highlight.lua b/Complete Projects/BFA/Mob Highlight.lua new file mode 100644 index 0000000..55bc367 --- /dev/null +++ b/Complete Projects/BFA/Mob Highlight.lua @@ -0,0 +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.state.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.state.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/Complete Projects/BFA/Null Barrier.lua new file mode 100644 index 0000000..84efb55 --- /dev/null +++ b/Complete Projects/BFA/Null Barrier.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/BFA/Quest Fuckery.lua b/Complete Projects/BFA/Quest Fuckery.lua new file mode 100644 index 0000000..929848e --- /dev/null +++ b/Complete Projects/BFA/Quest Fuckery.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/BFA/Rare Tracc.lua b/Complete Projects/BFA/Rare Tracc.lua new file mode 100644 index 0000000..56e3623 --- /dev/null +++ b/Complete Projects/BFA/Rare Tracc.lua @@ -0,0 +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 +WeakAuras.ScanEvents("NEW_ID") \ No newline at end of file diff --git a/Complete Projects/BFA/Reset Custom Variable.lua b/Complete Projects/BFA/Reset Custom Variable.lua new file mode 100644 index 0000000..308908d --- /dev/null +++ b/Complete Projects/BFA/Reset Custom Variable.lua @@ -0,0 +1,4 @@ +--PLAYER_ALIVE +function() + WeakAurasSaved["CustomTrash"] = "" +end \ No newline at end of file diff --git a/Complete Projects/BFA/SCT ABANDONED.lua b/Complete Projects/BFA/SCT ABANDONED.lua new file mode 100644 index 0000000..7623d4b --- /dev/null +++ b/Complete Projects/BFA/SCT ABANDONED.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/BFA/Saved/TSU - Combat HP Bars b/Complete Projects/BFA/Saved/TSU - Combat HP Bars new file mode 100644 index 0000000..7e490c1 --- /dev/null +++ b/Complete Projects/BFA/Saved/TSU - Combat HP Bars @@ -0,0 +1 @@ +!nR1cZjoYr4)lu1wfo3AcpmE9E3TPkSbwWblCqI15UZrWG0amhcjIE4xPw(TNU7rsiK5LmEtLI1EfZm9x)y6E6w9y9s6A6QE6QLluQsHs6QZ1vnX)bJYCn6WTN4pvxPY5f1vFQ74XECFDLtRue(6ZrF9SlGVnXvyQ98cUUAV66QUopQUGzW1vaihXmMnX1jWgawXXgwcZWx4y7rS2N56dp4RRowyl8MkFgEuok8SVRyYeUlUCfsCdhaF0Kpky8yjJB1OZTn73bMN(klWLvgyWcULvBtpjUEbJ4pWT9vbQepPRo4QAQAdu1Q1dalazQ6cl2Za4Q2S58qQisagWzwG1igKBD5eiQ32OthCDb2RenFPWB4yfm3ELXWLzkc80vkJMqpU14BDei2ADVfezlXeBD1RAOO1OhzBiWuGLA5WOnLap(adlMNN(is3mWbNhy5lImxYztpQN4fE6bHHz2I5mFobMbZkCdZX1eTaYnlx(eyZsAInFgSkcdC3CbqHdS1PAlxLJpd3ujHvIk(Te7WQMWgco4a5(Jh3WXg2xc3Uiya4MZe2h(QJ9zoS1tBi2Gez73eCcDaLSxT6T7RIEC(CxBM13apnspkDEKLiYrhhXsmhCsuQcS2fCqaFrMpJSAcW9wtT)YHk1UPXTDQP1y5Ww3UC4x71T)TeFhlMi9NWGL7eMyKvv0Azm1XTjcN0kREvVgnuqpyFyIUlIcwqpmKl95D)7DpZ2S1LtqSCEuxTE37uq)bYn7Simd9TI8NqlIijyE8oK6mkzqABBszlsgR4yoaA3zHYCzAt1yMNk6uPuQ8gfv5sAAXM4f5kfFKrXTiHs79vowoUsodReyh(7k0Vpdh0p0DJRXFcEwPRsdW8dAhQi4)pWibcLiekriuAfcjI9I5o71SU5fxuPy1l(u1INDoCqxLI6JpT6zPfhtUhZhDaLrsOTsQQ)2AbVhF8QVy(62NTODWwBnZ)mWZNBYnVrqwMKbY4HJG6gTlHt7dgZax09B2ZwcC7chPPdAHAkCzx5yYp9shlZ4Tw5uUIxwo8FeWmXiHLd1ICw0VmuC3iemRftLXnjdmqoEaAxcd8)KmW0a9cpc6gGl6Q16R1vcyOxAX3CMedWo6mFBN7dN6hMFa1wZ0PrIoxsxTuCIKRMY8xo8gUNhBcFTmnswfDgg6JhSWeDRsLhlsKwE94aBkBAEMLfrG3hxoKd)eCYYRxou(rmggB5WV8LLdZbhn9Bn6nas591gAdUQvnLV2OEULd9NYTxrr0hxo4uydZ6gWxnl3YJNeZ(kT1g0QrToATaKCCtnJwREnQPnOtBixB)BRdhnUv(HOgSTjJ(y5a5QWf5YrdjWhiAMB4NVkO39bZFDUptyXn1OvOk8dO9G85K7k5iZZj7Nbm7ze8hmMBhsuXqyA8KWZ3lpS0HmBtGMFgsvAmnFo0laGYNNlAkj73TPiLepDrS8kRwj)UKPuepN90RO)g2tzbIfHaGNVmGB)qbkLs(84W)1qoaQ3Fz5WsflcwSsho0O9jw4uGVKf5cQbzcx6QmMboV7NWO9R2E4VZhacBojk4(dTPKevk(yih222lYXbQ)rW)cPDVe8F2)sI(4n15Xy55JhoDgtz2t4MVfsJ3xWhYaD4XKeDbzGOhywbsUnDrgiZhsnyrKrEGzGsHTj)jIYfzIoV0bcWoJRp3gIeojlcE0jq4dzIUvEM0JzGwxowy)BXvyHRZeGApmlkrFo0rxyK7aW477FjBoxu6pBmgCTbtN9clyFavX(akDvVg309B7iNis76bXYJdsowH0ru)sQ5JJuPZJ(LuAx2e4A1RVhX12XFJY8otxfKXKp)4Yh)dmV8(YpNLKWVljJFhtk))GKZVljPp6K1)4tA)MtE)gsIFSjZFhsQFSj3pQK8hzY(JpP)XM8)DUiGJTyG3JIco(IdEpksidflKTIg2zXdzOYc8lCSr30B67PRM4nJLDgCdfA86jOe6WrzB(LNxoCJVdVUQXuUXS4UmSZEDh2OHPcSxjHnUqo23yUc2ilUh2DHeNAf79LBKJJvYDRe(vVAUvHq5SdMpIYhF933uZYPBf4bUMCqQjokNwQO82a2qVz))5MmJDt101zrB7MUy3VcBVg2smpWvF2Z1J6k0i6kcCCt0E3)CXV7v6Uh7DLwChrtId2sTv9wt2E1U9160g7c6Q24U7MOwSq14gPDPf4XkBA2LDAOuFL4FanIDkxmzk2B8QPB6i7Pi1(vczOorTcUCXD0b8WBI4YONAyI9lt2mzs21IAAzB0fzmZGFFntZU2E3FhNnRgyL9U)gUPGDF4k9Ux9FhWC5dAgyzD3ub2Anj2HTj88ex0vXW2j7rrj9A)1wABRp)rOCzOPdSLwIxEH5cPF1GycFXIqrUvclMmIdfT(HT5lQDFMcpS(vCQE06v)aKn5dlhE6YHFGcQ(quFypGgMs(kHk4zPAx6QgO2syAYTb7BJVHTdFd3sNQPZGWwpEzYMq(gRlFvErSKQcyXcq1IyrCHifxby0Byfx5k1l7FMu98flCoawXWFGQwPxyARRgxxHQjxnEGnOzZdBi7OTCBKBt7xVEAzDRrDL9bMlWf7u9InV9jB7DkaccRzXFAHXwoGeNNgJklF53rk)jsdoHQApF4GR9YIheSWq)ebZ1BmxwuItKYRPzsxgtAn1kbuHEerZcWrVRXRnhhOz5DZ8SBZuMmx7SUG1mFBCLrVYeXOYR7G8aoZVcQeVY(6mFKH1kLHnQPbeu)TqOOxPDf4NFWGtgtacjtgwOaKqFwUDXTZFf3(Cw525j52n7KBzg7pNe7VMBd1WrzYtFlVpkVcu6VacwGVdLshp88aofwy)auadDfHjoEVdFmE6oCURJRakxl82IA1Tx7FVRIwToPU4w5nxjl1lXvyHc3dHLUbJsLKHJaVcvi7LVo4kiKZrFBB3Yzug)TnFKMb10VG76)CI7qvEHLachIWAplwulUhrn04(Qcr2Uiu5aebkJkSdajP)1VeXp1szryAEw1YLkFEXlkwUYN(8N(Cz0gvzJcyIB5oYeLe0IRCFYaOR0APgF8IzQAjX)uFwbSsvmey1QLbg(rxu9loqUrSYI1)tOO8zYPFalePmYq9)7 \ No newline at end of file diff --git a/Complete Projects/BFA/Saved/Warrior CDs b/Complete Projects/BFA/Saved/Warrior CDs new file mode 100644 index 0000000..336fa32 --- /dev/null +++ b/Complete Projects/BFA/Saved/Warrior CDs @@ -0,0 +1 @@ +!TZ12YjUUs0VMtvZ8WzkWHC7rcHmd1MauyYK9CEWjcJWOjglgBryipKV9tljB8nzWMBbsrvPsiGSKCFz1l1DBmkB0Zq3Zqx7BL1(2zg6Jn0hW)bExKRztSJfBKrRZUOKH(FBpCOhMz06)Qvc(35l(3YNFfmAhZru3ouIdZqVw9w9Q3fM4jitSrly09rMVy5sN6aZElQdgUatgH64jwFgYLbVaUYHehI3i5RHxkFx41mxILf2Lp8wI9S)BWF5aC)Pdh2B(eyw)r9MDU7HMWNl(x0uxKgFFGTTBmWtoVEt7JFf7W0HRI8xd9NQvvV3t69Q2fMSP8fvFInAom56oOXy)RsCjWcGr2GizXK0XflMe9o1B2KpUPoHBnMCZBsTNo2rxkmkBO7IgqM6z0sih9W2d9fBnRFhxUBtSCIidziXSXLI2uKq1m1d)KPnYZJlhMIf3GM8py8uBgjqMjhbx(sCSSHr9y1UDB0UBIH5rEdN8AzCfkzmIHn6dJWezl359PUd4YfPk0fBbQqPGFWCqwrm564jWvqbfQUJyuMuNHelPquoPWffvTRpa0s838jPsZddxYaVaDOywGRDmI4K)rVWqkFJxOLCGDKd7oWYKc3JDREBJh05MHmSRdY(NG5hFN3Q85bcIaxaq1y5sgiLeDVfwDxWWb0nigsi3iGz)Jixxc199NRDRhF80zWyB89F0tEXpsgWD1opWv6o(uiNr9ADRxVf3AMbFq7jbooCRn(mpPYvtqoFXE6zG7RlLjLWcdgYyWCMpPWYfAaYLaKOZIhUPyK9J6P2WX)MJlCcD8W)LP5BW2RDh5Bu(ok4pXnKAv(cHbp1vEf8F0e)(mXVRW)nlc8rPmWomPu7b0zo6ZiGm4g4nM6XOJ7bR2dtgWTm1N6)3GHwFGLyKe4(J)x42YYMoRMy3WTJzeZxMFRV9a)De3m89UHEBVziBqy(cgpPk3FI1LpmX1f6IgS7eY9MDMznHq7019x(IHAWubMPJfqfnAP3426G6XLA5I98aOctI0eQI)4tmRl2o3zJSaJK2p0RzJwWumctSgbcRkLwouihya1h8(6FpDGqwyHDWUet9r0zTbufp4VvTNHM7LeQBjOOGBbdWRwbWjS0Iz8gvWM18vrV)ChFPX7p)fDoS8xZclfGxq2IH0cMoWxbzBphqYahi35Y1ZBXNEtkq(fFuRRVSYfA8Bx)9c4grdHfm0llNmWB18fFZMNIl2UjjW(seRCSeWIpUEHlAJo22ovHWFVIflwWnaFDLAHAcK7(Y4xbctUJBCzalMKgawnhH9uVmjIEfx1dl83542pzcU9cqaH8auzmYeHdGY4NjuxXI4Ash3N4GVxUNK7MM0zyVvf)vLzOIOQ6diE)EQJ)DhYzUKqXR4EYHjm)LinPdAEZojG5Bu6ybCMWZUUdQVnEaFTuaBlC0JbwaU6s0coIL82V)ugJ60(vSlONIGZgIvjMMiR0mzmKkLwScRehoAmCbUjW)yYizuRfRys4Of4uHq((WFRC9eJZq))mjcHYsHq4C49BjElUJeReaFCNVB7nClepaoY1NBchhobYGYa2jJiNzqwU8NpXrPTqCaLGNy9oKzWumk1XibiJKa(QaeyeOlUK6vKlHRpm0PobW4831EAGhM5iKJfoCAKF2nIiFtWUS5XuASiqKPxqTOlih1OWlLqb6ViNTE3vLYEPAv6BNhD1KElSqQ((t1nYnYQ9iweTih8Q2LKMuB8SWGjQzeln1kL(C5JDLApQi22zz)hXJkFJo0JkxJNLnSuAMK7zsEj5NSmEEzeVEBq4loxZcs7lgdSeK9A4WGdKawQcyD4UAkBLu(sqWlcdWZ1QCHcspXP85tEDdz6LHWE508uqatSxbNblCbP2frjetdxT79cn8sP2LKVPk1aBBr1ltsXhh89c5jfLiJ4GH)Pwp2pP32KuD2gW1lVSPuHLKj9M1NxysYMbeLuqgmFr(YIySp9qZ8D7dwG6)kc77aAIkOlZvnkbwItPmjvXeSQJsTpdsIbjGqrIdoX6AhZ6kZ8WeSXoIsG1sZ6D0ON7KO)jINgjWs0C9KNi9XJ8MiuF1xbhn3IKqNYLU88lRKd6jPyjLkOFmcmByO)4cO1iCFGaQiH7Zq9U0eoL)4)(6g2HB2DsIiV2z0nmCEAY95mE2AZ2p5PP2xuycIF2nRZVen(2UKhtwNZkzOxvcY0mvsgap7uZRG7suYCrP44ZkjRSWLJBYuuuuW)Htrjaqm7Zuhn5Izr0tqeT3V(XF60yc9pdDpLfRt8Pwh(uX4gZXRYlhQOosNsC1EoXvXlgXN7YsUQc7viMQQynMGWAtKhdo6idXBMLvXADzSHIsPv76lpFzzpkK2AinZnKVQYY(vGIrgvoW2eoSzLYQa19hx1i)0KIQ0CAf8dOwoFXs7XrFD(2ROK5UsBfGrx8e0KxcxzvMYvxB2fPGAPvLu)UePBkh7jrFJefaPaNTiJs9UIkwQ4Sob5x4e5PDm5jZ8u(VZp0yuLv)tTnlk1rwZhPpIGTh8(ZpISTlsQQU6YYPiOKMnuS47r5V8XLrQmelRFtgTLYivmfXbEEPwV8qLoI0(pHuf7m479oSAFLwQq(tFajIAdY0uekmzFkpobMYzZXjGyJz(40ehGubFT8KZQaMmcUPDnR241)3VUVr9MXlUMQtSFG3y5NyzTZl5xO9fSDU44RJQ(yR1xXlLwbPzLM0tcgw3IhtDr2K32kD8t5Y8hzPJVo(zVN(KK8RuPgo074N19564qobUQJBhpU6UMfyYKLSV45Lkh9bNhLtl4ReZXETrAVv3A3s(7VPcn8r1ovkosqIM0pS2KCwDAXOkVC6DzYMLlRvIjNdcHRQdQI7zMvtuPIN3PoQ6WQJQU8yj3vfbRmIxz(oZE2NRBN3O4hYh8zFfVq9jclABeSxYOGc4VTYdTvsexZ1Q6iX63LSEWV8d2SYimbrJQSYgErCkG3FUlEOn2uEoNuPmyr8UL3Wlxm8nTownAn93FpwWKTw1Pp4BNsfcZ8NUATZUwR0QYv6(8bN9typvMwbDCLg7t8T2ZDC1vhcjZkZAcMGWKYyXhzN9ozWN98PU)iRYAUkvzrIvTShYpyhB(Ymuac6wOnQQCX1xC1UTnQoaBZNLCgFLFFXCgQI2pB7D)GgEBTU(jS5M3cT7tiBV1JhBgjeSyvoRiu61uuNo(DEi1x1h7tw5SfEbzFoYLKrLI3(pfRWehuX7xmDjJ2FKfJps6qGFD9HAwu2gfL6yRtFyu3XV)8naB(c)mPvsza0D6tHwbchL4loLCsutb(HASSpGUu5uUVs3qRhPP9Ad6OMnOvGZQamXlOsTAfOGk5TFzIcZS0c8S8eE9DQ5dTTF4l)lQCSW(QoN2H8b5)SeyFzflPCPprp)57PSMM)urUgnKYQEsF(b2LsmF)5My0KnOzuU48kv2nnJYg8GsFKLtMSEqnuEAPDnXdLCN27DbBwFTK2OZ)49tYxip8p0T730Gg63xzN0leX7Mbnvpo)HyJXPXUKYPkJHVYAALNoKql9xKmXXgst(Dv9arUEQ4v)vq4g9aVEkQ)U(48WN9kmrv04sjJ))d \ No newline at end of file diff --git a/Complete Projects/BFA/Saved/Warrior Rage b/Complete Projects/BFA/Saved/Warrior Rage new file mode 100644 index 0000000..f0192d0 --- /dev/null +++ b/Complete Projects/BFA/Saved/Warrior Rage @@ -0,0 +1 @@ +!TZv8Vjoow4)xQ0j1kTTccTDNkD7jbu4kZXaDiW25wTciKyGSnKWMeANo)a)TFVNtCIDIdyOq3z2RIQwiX25z73777ZpB6WYd7pupyOU2fL1UOYq9fd1TWFGRoXW8rlFVL19C88Hl0Pm9hn6VRq)9Ld7u6IRggcf2Z3I4xlUkd1R5y)TVz4BTECFppNqB4sFT70PbKqOkSIpCc7DnSMrgQ3XZf(TpzMTNB)xwcVFMV3QLScPB)nc8yVEOUXQW5E(DxgcfmamTedqjB1WKvp9Gqd)WOgW21o(DtH3gmN(E4tH(2ZMr8dIA1(jxaFRfzYQPtJm17A0((MdAd3N(rJv(gAWdyjXXPLvSrgSAc5jIBOoul7VouFu9Q69hP3VApOXCnwqYuU79j0YPFFJ2qltVg8KigoHZhQVcTy9LogVawti(5utlmY4n9CNApJ1bdj(Ugo)k0zG(p0BUcEsMgo4Gk8oIZ079SXhqTU9739tTB0eSkBWD4bdFFBp)1JRTYXjyo(unCnHzG4YxVrN(n6bdC(qxagFmcnOnzuHAIxnAmsVEVgn6WMSy(dxXUqlx6NldvDf(Cx627ZFzI799QBHnM9cdCIJFElEW2L64ybd5ybgfDXac07HrEWaxyy7QEPtM)vR8rdZw2CoJoEg0qiy23e)7IvqiaZHY0Xiii3vdqN7mxeU8lSbPZ1kvIw7u)qYxd1YmdGxRCtpWdJgRODjxy35v04BVFUubZIMqaRL3ZU6pBdD0Af44yUki0BrF45nyPLrimISk(VS6tJPXQdJo4F3uG0QaYOzexIVTP(CVN7sRG4f0dG)w15zJxckmazdXJGht4QamijokcWq8IEWgtc88N8jplQ5YfggxY6XDO1JV33BMpjiy94t1Xa7ZYeecyxgo070bAfWSMBtCamqDhJfrpRGKBwBNahsRxhTk3OPL6pouVCutdXDMpInl(bQzvllQWggsdziJpr6hvE6asNZltD7G2KbKdG2psilRIo3H9qBaVeh8HGZydxJjoel0U(Eoc2Iea(h(Odm0zM5498MPsktPgWoOKoTggb20Xyg4V1Dq)2T60yO(CI9S5qG31xMIpGZuMElMyeg7o8krlKWlsbsFGuTzRZ65QvAfhgbyCbpB4yfB01HlbJYlO(8T6O362grJerXttwfg6529jIp4Rh3kkmgviha9zY8oMKydBTb5LhqHw2r(CShL88eHkdcTnF8LBzbwtYZOr71d1)hlJRF0B)MN3cQSgg0hclERDqQNpI1uJ7zouVPV93wp(ZRmSWghKjfZ1kczKmxL1BYWz58it6zBlqma1TYC7JEIccGjZaQdp4iM6Zpjz2vIdHavxeoU5Cca8WbOJM1tg(2y)FOUNldafVQZkcZuMB4oJK2mr3dgLwckij(HVievg5Hd9P96bwsXhi15imv9uCZevgk0pW4yAhrdEzIbPivScZp7d)SeO3dl7SavZgyL5iE2dQ4c40fjyvHsMJbpdFC)5RCbDMRhx3Xy52jKt5CVUYLv2cdTujm54Lf0ACWyNLQqtcjTCg4c4f55o5yGvR0PmWkv(W8Qfkgc6TLRor)mkF(yrCRkBkp8TeY(9LhxunahJsknZ(tpxmhMuEBo26uo8qP81BHonpDoh9Dru1jC5C87m6BM0bKNodusw1mkVuyQ(Sop07dZ8BoR5Q2BKwwuf(7uXIuXvyuXzD0aVlZhdItFKM0iNOIexXO8q9cx(QKseNpLtLOXeLOXeL4Ij8agpc6PbTD3ID9lsYkghnsbXdsecmXG3aBE5vAL1UU0hkPv5NVbEnC65xvrUrlIYkDmha(m8FmAy6)shNeWhPaGBfEmW2Dg6Q8q1E9A1TNI4L2l2wY(Igrw45foNPriMeUQ1FaYJiweRpztHf4XSW82bdAmpcgQXkFmM9XxCSrxdQtMaMjDKOpRGTq(4PgMKFVUbGc5oRMH)VpO15PF6CDScX1J(qWEKyBMc(sbjkDZx9(Tq)QbDITjf6)kKw2ILkIpJyW2sBwGygDDOSQ5iSvqif1suNxUexiM)L4YEV3ZOEpEjLfiqCjwsQfqtJPGeooPGI6i3QuU0wTaXSss46UQq775eIWY(Fl3M(OxzSphDEihVAm6zHmXI579YyVDQkpQBFg86eoyA0rnhIRfDWuV6T3kFFjka4vmTYXcsMiBRiyDZAcGAFHFZkQjBZkI1kvPujXDPGz89qOFyuk2(h0VBmCEGnEHET(33fVvl4wD4AT5ovPOLLaT7D2wweieQtJFfH5JUwSQ1kLsLSqVXdrgz5sSzkfqoSSdWyfexOhTzJs6boDLIjGWs9mWrdHolT7RSciMy7kxLfD24Ru1wP6HOpffmEpFBi2ogL5UU9A9BD70VA78jQNRx2Mmf7KUcISPER9lAyCVvuCEL3mnfsKtRB5nkc1h9qIFN(6pIuFJiUpDreG86X)Y6XL4Vm8Mw3sV80vU0N2Pu42Zw)X1JJEnf3MiBAzk)tRhFzP1JT8sVn7LJNPHZ6Xi8mTSdalRgaXE6jra0Na11(S81ZEkRsHZjU5VF(Y9lqRtnYTvf2lFcWH7IDIclkGhL)MeNasXvzIpX4rjvswlHgVDKLJJFB2SzMRRTZwAE6hGFDK1uQ9MOPe)akRWpcw4V)cmf5e3QIrvrkpg6irSKeacUG44G(yiKmWkNEsRzUE(qe79GYMt4QggoG1rECqCJYbzbESeZWtlF9pjhxP1TNjbzHfhf3q5IAw)XnWORUs586DZPwMtXRO0wLKLglWJHQxqowLk7nQoJMtvMGExw8SdjZOxCXf5Nudi8J9vGHzXIHtIbXWXNqfUpQ6GEvhv9(7B3QXTNSEmsCiRe9A0Sxd97ozloajujSP)lZzdzQHjSymmboP156cRcA(jLpMVcZmCIF1zGNd4KWr6i6pVny89m2i7lzu47x8WsFaZ)0mT3zj3xrQMmRMtCXzr(wjRJqNDLOC1dT2hJRpiGQE3pvRA)rT7(VhbkE70F0GonB1gOJAaJyd60Q)O7AuTD)7YS8Yyx6OyIyBrP9ziDHJswNx8M(u06F3yqMG5L5a9uKLjfZGHriA3IX7YS9ksTDwCUWagRdPMzMD68hEsGFkx8eCLYY8Yf9BFZ62jMBMOEjKxySeBowM9XAQq)vewNIMA3KSbPa1r8Mkao2sZocSyR)G(OFcLb5(I08LuzhZwY3hBE1oLTeA28(pD9A9TgdEWDGHSLHAUTCKSTuUin1jYwE9oL7b2A1PZhXPyyNZhtsgs2uIv2YzhKlFnSK6KpTkfNAtCgGpMtsguYNrJmj)41Kkf3c2OIIsTdF6OYMyL8PGknHx7BAP5Y5cFUYuoVk5s4NyovU6iKtLRpKzuj(SVY7zDCxRCr3PsH3599PzV2NgvGnvB)y(tc5bNV8N1o17pvED05cMpqlP0CUHpUFQB(uZkkvmZ(MuS2tPNQfHfIYF6uV66RO7VlApJWnZ1iegv0)x)ISTjsuwRQhp(mlQvLZeeBacvDxWH0TgOr7XTEOGeoJtz3jRSRJp5O)OWgiDGp9p)iQwAIm1s8h5fPPRpsN0K3M9ssC3DuoZzPmYYKGXuvPD1Hst0gu(KtLuEHo8NdvAubSShjkKYOhQ4tEXEVDtkK2rzsMyktlqPek2y3o7rPFhkkJOBm1r12r1ZcYNalTFR6vBpQvh4T671rRnbvdhCqe2OZrJUwXNXMJMoK0tUt2Xewct4mazF5SY2i(SAhRLyF1YkQffxFjOv84CsHoxRivO5dYExU57YnvuUjpf4(k08qCmF4vAozN25IcYTQIBPrE1K)ZCQjf0IP8xLkQy1)QLtMp3U7YxfobDMYvX)xHsZVVpftsvAMLOyVzC41Zjp5DkkEu5K4LOYDN0JKOCoJ(MD70PQWXJQCHNZk1oFucNMPTD0Nuv04(CQOYi5vUQvjYN12H8qTJFlQtxArMvOKrLQIlZ5ntJA5)oQrv6cuPzlQ(vglQU4MB(TpJIZ78ZhjfO)WR)89JG(7AnLFqz2ZeBkvp1bqcQ8eAQ65ENteA5B(qLsx(Q1DsLNyswg(6(hnqMSjlCsdExP57knpCkn)W7knpeknRtdwPzO9)7LyMK(tMyZdVet(oYFHYjVkCsJpE6IP38mDd1)WX4lPWRkzM7e8W7ko)HuXPCASJHetvrAFD7K(w3p3Ipx2z2i78Q7oCz6CJ6GZ9p3Qnj997pfNt24bri9)KgB4)8DVVp6Y1CsPnM(fpVblDFP8NClGDzRkkZOGtzHJ72oUUdYjsohIYoCHzLUC8oSHkl(Ix0MMevLf8nV81S76zp5Ispfszu7w8I43W2QNOZpzzcCse3RV9Mhd9HL)7I(qLs5ZUVSsAB)eyfxQH9JH)V) \ No newline at end of file diff --git a/Complete Projects/BFA/Second Wind.lua b/Complete Projects/BFA/Second Wind.lua new file mode 100644 index 0000000..5a756c1 --- /dev/null +++ b/Complete Projects/BFA/Second Wind.lua @@ -0,0 +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 +aura_env.lasthit = 0 \ No newline at end of file diff --git a/Complete Projects/BFA/SetupChat.lua b/Complete Projects/BFA/SetupChat.lua new file mode 100644 index 0000000..95ae374 --- /dev/null +++ b/Complete Projects/BFA/SetupChat.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/BFA/Shield Block.lua b/Complete Projects/BFA/Shield Block.lua new file mode 100644 index 0000000..2478707 --- /dev/null +++ b/Complete Projects/BFA/Shield Block.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/BFA/Slabhide Farm.lua b/Complete Projects/BFA/Slabhide Farm.lua new file mode 100644 index 0000000..994c4e0 --- /dev/null +++ b/Complete Projects/BFA/Slabhide Farm.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/BFA/Stat Recap.lua b/Complete Projects/BFA/Stat Recap.lua new file mode 100644 index 0000000..4529f79 --- /dev/null +++ b/Complete Projects/BFA/Stat Recap.lua @@ -0,0 +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 +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/Complete Projects/BFA/Stun Counter.lua new file mode 100644 index 0000000..93e80b3 --- /dev/null +++ b/Complete Projects/BFA/Stun Counter.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/BFA/Stun Recap.lua b/Complete Projects/BFA/Stun Recap.lua new file mode 100644 index 0000000..4ccd3d3 --- /dev/null +++ b/Complete Projects/BFA/Stun Recap.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/BFA/TSU - Combat HP Bars.lua b/Complete Projects/BFA/TSU - Combat HP Bars.lua new file mode 100644 index 0000000..b5b8eae --- /dev/null +++ b/Complete Projects/BFA/TSU - Combat HP Bars.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/BFA/TSU - Enemy Health.lua b/Complete Projects/BFA/TSU - Enemy Health.lua new file mode 100644 index 0000000..6b9b98b --- /dev/null +++ b/Complete Projects/BFA/TSU - Enemy Health.lua @@ -0,0 +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.state then + -- print(aura_env.state.class) + return aura_env.classColor(aura_env.state.class) + end +end \ No newline at end of file diff --git a/Complete Projects/BFA/TSU - Enemy Nameplates Maybe.lua b/Complete Projects/BFA/TSU - Enemy Nameplates Maybe.lua new file mode 100644 index 0000000..6598cd9 --- /dev/null +++ b/Complete Projects/BFA/TSU - Enemy Nameplates Maybe.lua @@ -0,0 +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.state.unit) +local aura_env = aura_env +local unit = aura_env.state.unit +LCG.PixelGlow_Start(nameplate, {aura_env.classColor(aura_env.state.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/Complete Projects/BFA/TSU - Herb Icons.lua new file mode 100644 index 0000000..1971507 --- /dev/null +++ b/Complete Projects/BFA/TSU - Herb Icons.lua @@ -0,0 +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", +} +WeakAuras.ScanEvents("UPDATE") \ No newline at end of file diff --git a/Complete Projects/BFA/TSU - Loot Window.lua b/Complete Projects/BFA/TSU - Loot Window.lua new file mode 100644 index 0000000..79a2c1d --- /dev/null +++ b/Complete Projects/BFA/TSU - Loot Window.lua @@ -0,0 +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.state.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/Complete Projects/BFA/TSU - Loot.lua new file mode 100644 index 0000000..6c597cc --- /dev/null +++ b/Complete Projects/BFA/TSU - Loot.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/BFA/TSU - Spell Alert.lua b/Complete Projects/BFA/TSU - Spell Alert.lua new file mode 100644 index 0000000..f6d6b60 --- /dev/null +++ b/Complete Projects/BFA/TSU - Spell Alert.lua @@ -0,0 +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.state.ins +if aura_env.state.target then output = output .. " > " .. aura_env.state.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.state.unit, true) +LCG.PixelGlow_Start(nameplate, {1, 1, 0, 1}, 100, 0, 200, 4, 0, -4) +local GUID = aura_env.state.GUID + +--ON HIDE +local LCG = LibStub("LibCustomGlow-1.0") +local nameplate = C_NamePlate.GetNamePlateForUnit(aura_env.state.unit, true) +if nameplate then + LCG.PixelGlow_Stop(nameplate) +end + +--ANIMATION +function() + if aura_env.state and aura_env.state.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/Complete Projects/BFA/Tank Taunt UNTESTED.lua new file mode 100644 index 0000000..2ef3bfc --- /dev/null +++ b/Complete Projects/BFA/Tank Taunt UNTESTED.lua @@ -0,0 +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, + +} \ No newline at end of file diff --git a/Complete Projects/BFA/Taunt Cunt UNFINISHED.lua b/Complete Projects/BFA/Taunt Cunt UNFINISHED.lua new file mode 100644 index 0000000..87bcd73 --- /dev/null +++ b/Complete Projects/BFA/Taunt Cunt UNFINISHED.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/BFA/Taunterino.lua b/Complete Projects/BFA/Taunterino.lua new file mode 100644 index 0000000..55f6416 --- /dev/null +++ b/Complete Projects/BFA/Taunterino.lua @@ -0,0 +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 diff --git a/Complete Projects/BFA/UnitDebuff.lua b/Complete Projects/BFA/UnitDebuff.lua new file mode 100644 index 0000000..93455da --- /dev/null +++ b/Complete Projects/BFA/UnitDebuff.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/BFA/Vaultbot Beep.lua b/Complete Projects/BFA/Vaultbot Beep.lua new file mode 100644 index 0000000..23b27a2 --- /dev/null +++ b/Complete Projects/BFA/Vaultbot Beep.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/BFA/Whoa/CTRL c to copy wowhead link to quest.lua b/Complete Projects/BFA/Whoa/CTRL c to copy wowhead link to quest.lua new file mode 100644 index 0000000..b1fdef3 --- /dev/null +++ b/Complete Projects/BFA/Whoa/CTRL c to copy wowhead link to quest.lua @@ -0,0 +1,72 @@ +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/Complete Projects/BFA/Whoa/Events.lua new file mode 100644 index 0000000..b3d4420 --- /dev/null +++ b/Complete Projects/BFA/Whoa/Events.lua @@ -0,0 +1 @@ +UNIT_POWER_FREQUENT:player UNIT_SPELLCAST_START:player UNIT_SPELLCAST_STOP:player UNIT_DISPLAYPOWER:player UNIT_MAXPOWER:player LOAD \ No newline at end of file diff --git a/Complete Projects/BFA/Whoa/Nnoga's Hide Guild Chat.lua b/Complete Projects/BFA/Whoa/Nnoga's Hide Guild Chat.lua new file mode 100644 index 0000000..4356139 --- /dev/null +++ b/Complete Projects/BFA/Whoa/Nnoga's Hide Guild Chat.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/BFA/Withdraw Guild Bank.lua b/Complete Projects/BFA/Withdraw Guild Bank.lua new file mode 100644 index 0000000..422481e --- /dev/null +++ b/Complete Projects/BFA/Withdraw Guild Bank.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/BFA/__GOOD SHIT b/Complete Projects/BFA/__GOOD SHIT new file mode 100644 index 0000000..7460f59 --- /dev/null +++ b/Complete Projects/BFA/__GOOD SHIT @@ -0,0 +1 @@ +/script ChatFrame1:AddMessage("frame name: " .. GetMouseFocus():GetName()) \ No newline at end of file diff --git a/Complete Projects/Classic/Warrior Heroic Strike.lua b/Complete Projects/Classic/Warrior Heroic Strike.lua new file mode 100644 index 0000000..2e547c9 --- /dev/null +++ b/Complete Projects/Classic/Warrior Heroic Strike.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/Classic/Warrior Rage.lua b/Complete Projects/Classic/Warrior Rage.lua new file mode 100644 index 0000000..86e17a9 --- /dev/null +++ b/Complete Projects/Classic/Warrior Rage.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/Aura Uptime.lua b/Complete Projects/Fivver Stuff/Aura Uptime.lua new file mode 100644 index 0000000..c6c8772 --- /dev/null +++ b/Complete Projects/Fivver Stuff/Aura Uptime.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/Buff Me Daddy.lua b/Complete Projects/Fivver Stuff/Buff Me Daddy.lua new file mode 100644 index 0000000..c3f2aa4 --- /dev/null +++ b/Complete Projects/Fivver Stuff/Buff Me Daddy.lua @@ -0,0 +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)) +end \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/FO1B8D1F40B6 - Conductive Ink.lua b/Complete Projects/Fivver Stuff/FO1B8D1F40B6 - Conductive Ink.lua new file mode 100644 index 0000000..9987ac7 --- /dev/null +++ b/Complete Projects/Fivver Stuff/FO1B8D1F40B6 - Conductive Ink.lua @@ -0,0 +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.state then + return aura_env.classColor(aura_env.state.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.state.caster == "Total" then + return aura_env.shorten(aura_env.state.value) .. " - " .. aura_env.state.stacks .. " - " .. aura_env.state.percent .. "%" + else + if aura_env.state.crit == true then + return aura_env.state.stacks .. " - " .. aura_env.shorten(aura_env.state.value) .. "(C)" + else + return aura_env.state.stacks .. " - " .. aura_env.shorten(aura_env.state.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/Complete Projects/Fivver Stuff/FO1F38C4D1A8 - Magus Portals.lua new file mode 100644 index 0000000..2c8a245 --- /dev/null +++ b/Complete Projects/Fivver Stuff/FO1F38C4D1A8 - Magus Portals.lua @@ -0,0 +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", +} \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/FO2BF89E3995 - Warrior Stuff.lua b/Complete Projects/Fivver Stuff/FO2BF89E3995 - Warrior Stuff.lua new file mode 100644 index 0000000..134a837 --- /dev/null +++ b/Complete Projects/Fivver Stuff/FO2BF89E3995 - Warrior Stuff.lua @@ -0,0 +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 = "" +WeakAuras.ScanEvents("UNIT_STATS") \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/FO2C01B46B55 - Monk Tutor.lua b/Complete Projects/Fivver Stuff/FO2C01B46B55 - Monk Tutor.lua new file mode 100644 index 0000000..024906d --- /dev/null +++ b/Complete Projects/Fivver Stuff/FO2C01B46B55 - Monk Tutor.lua @@ -0,0 +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 +aura_env.people = {} \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/FO3BCAB05F84 - Magus Portals.lua b/Complete Projects/Fivver Stuff/FO3BCAB05F84 - Magus Portals.lua new file mode 100644 index 0000000..ecd56e8 --- /dev/null +++ b/Complete Projects/Fivver Stuff/FO3BCAB05F84 - Magus Portals.lua @@ -0,0 +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 +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/Complete Projects/Fivver Stuff/FO3BE740D804 - BG Q.lua new file mode 100644 index 0000000..f2dac6a --- /dev/null +++ b/Complete Projects/Fivver Stuff/FO3BE740D804 - BG Q.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/FO3BE740D804 - Magus Portals.lua b/Complete Projects/Fivver Stuff/FO3BE740D804 - Magus Portals.lua new file mode 100644 index 0000000..3965457 --- /dev/null +++ b/Complete Projects/Fivver Stuff/FO3BE740D804 - Magus Portals.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/FO4DBEE93B84 - Raid Scan Frames.lua b/Complete Projects/Fivver Stuff/FO4DBEE93B84 - Raid Scan Frames.lua new file mode 100644 index 0000000..c859ce6 --- /dev/null +++ b/Complete Projects/Fivver Stuff/FO4DBEE93B84 - Raid Scan Frames.lua @@ -0,0 +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") +aura_env.randomFrame.text4:Show() \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/FO4DBEE93B84 - Raid Scan.lua b/Complete Projects/Fivver Stuff/FO4DBEE93B84 - Raid Scan.lua new file mode 100644 index 0000000..e11243f --- /dev/null +++ b/Complete Projects/Fivver Stuff/FO4DBEE93B84 - Raid Scan.lua @@ -0,0 +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 +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/Complete Projects/Fivver Stuff/FO5A22680021 - Druid Stuff.lua new file mode 100644 index 0000000..eaeca6b --- /dev/null +++ b/Complete Projects/Fivver Stuff/FO5A22680021 - Druid Stuff.lua @@ -0,0 +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, +} \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/FO815D7649125 - Swing Timer.lua b/Complete Projects/Fivver Stuff/FO815D7649125 - Swing Timer.lua new file mode 100644 index 0000000..e2bbe02 --- /dev/null +++ b/Complete Projects/Fivver Stuff/FO815D7649125 - Swing Timer.lua @@ -0,0 +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 +WeakAurasSaved.CustomTrash.swingtwo = 0 \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/FO815F92E76D5 - Combat Timer.lua b/Complete Projects/Fivver Stuff/FO815F92E76D5 - Combat Timer.lua new file mode 100644 index 0000000..c540235 --- /dev/null +++ b/Complete Projects/Fivver Stuff/FO815F92E76D5 - Combat Timer.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/Fiverr - Conductive Ink.lua b/Complete Projects/Fivver Stuff/Fiverr - Conductive Ink.lua new file mode 100644 index 0000000..07c7f4a --- /dev/null +++ b/Complete Projects/Fivver Stuff/Fiverr - Conductive Ink.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/Fiverr - Conductive Ink2.lua b/Complete Projects/Fivver Stuff/Fiverr - Conductive Ink2.lua new file mode 100644 index 0000000..31e481c --- /dev/null +++ b/Complete Projects/Fivver Stuff/Fiverr - Conductive Ink2.lua @@ -0,0 +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.state then + return aura_env.classColor(aura_env.state.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.state.caster == "Total" then + return aura_env.shorten(aura_env.state.damage) .. " - " .. aura_env.state.stacks .. " - " .. aura_env.state.percent .. "%" + else + return aura_env.shorten(aura_env.state.damage) .. " - " .. aura_env.state.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/Complete Projects/Fivver Stuff/Fivver - DK Festering Wounds.lua new file mode 100644 index 0000000..c99c5d5 --- /dev/null +++ b/Complete Projects/Fivver Stuff/Fivver - DK Festering Wounds.lua @@ -0,0 +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 +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/Complete Projects/Fivver Stuff/Fivver Druid Stuff.lua new file mode 100644 index 0000000..684e9f8 --- /dev/null +++ b/Complete Projects/Fivver Stuff/Fivver Druid Stuff.lua @@ -0,0 +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}, + } +end \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/Fivver Loot Logging.lua b/Complete Projects/Fivver Stuff/Fivver Loot Logging.lua new file mode 100644 index 0000000..1c10d25 --- /dev/null +++ b/Complete Projects/Fivver Stuff/Fivver Loot Logging.lua @@ -0,0 +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 +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/Complete Projects/Fivver Stuff/RaidTranqShot.lua new file mode 100644 index 0000000..7b8de87 --- /dev/null +++ b/Complete Projects/Fivver Stuff/RaidTranqShot.lua @@ -0,0 +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 +aura_env.playerList = {} \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/GeneralStuff.txt b/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/GeneralStuff.txt new file mode 100644 index 0000000..5e0afe9 --- /dev/null +++ b/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/GeneralStuff.txt @@ -0,0 +1 @@ +d0KZPbqicrPwKuLCjPkYOus6ukPSkPa0RiefZsjKBjH0Uuj1ViezyQWXKOLPs8mcPPbuUMuOTjHY3ujPXrO05usyEsvuDpLu1(KQOCqjelKq1dvImrPk1fvIAJecFukGAKkjkNujuReOAMsO6MsbTtf(PkLHQeSuPk8uktvPUQkj2Qua5ReIswlHOAUsbAVI)QIgmQomrlwQQhdvtgWLPAZa5ZsLrlbNMKvRKiVMqXSj1THYUr53qgUu64kjQwoONlPPJCDfTDc8DvQgVu05jO1RKk3xka2VQoLzhtMDOy1yxUgSRlVAmSyaXaYog07ui2wyRhRdIMTXK4KsGVHQUoh2qeGNrrlpI5nBLmahi9JbOQR0KHtkbEmPwhtbetKDdrmX8CJMGa98gyiA2gt4nqGQoLrrlpoIXMyBOQRZH1mkJvDnOfqkgft8B79Tgw8LfXoMgjbYogj1oJUKDmSPMuzhkumsQDgLDmSPMuzhkuSz1pX1YAn9JbL4E2XWMAsLDOqXGiTNDmSPMuzhkuSwbTKu7mk7yytnPYouOyGK4KcXYog2utQSdfkgGceif(utcZog2utQSdfkuOy4zNrz2XiVjvkceJm168me9igGQUstgoPe4XKmHXeEdeOQtzu0gpIjXjLaFdvDDoSHiapJJyeu115WSJHpRec7SGcWJrkmhigjS1JvjjnRXMmxGZOyYjHInR(zTa6(nwepwT116HeZZOSSXYglJ5cCgfBjesdGUZE(cquh0R1NVQ16A9AXGUuBTUwpKyESE4m)UI198gQQuSz1pRTUwpKyEepwTa6(nwSAb09BSLqina6ol2S6NtMII4Xan16kUKfXdfdWRsAcLKhXJ1crDqVwxa64QQcXYaSyK3KkxaPyuSLwESxUhXk4QUcugGj2yAKei7yKu7m6s2XWMAsLDOqXiP2zu2XWMAsLDOqXauGaPWNAsy2XWMAsLDOqXGsCp7yytnPYouOyTcAjP2zu2XWMAsLDOqXGiTNDmSPMuzhkumqsCsHyzhdBQjv2Hcfk2KrqvxNdZowTa6(nwSAb09BSLqina6olwT116HeZZOSSXYgldfdhPrWSZaSmoUgSRECCCCCrSfR84IOHI18giqvNY4cyXytSnu115WAgLXGENcX2cB9ykCelg5nPsrGyuSIGJRaCgj1pFbOxvaodxyS7kaQqgGj2yK3KkJ1tTXuaX6HZ87kw3ZBOQspFPEhtYuyssHyzhRssiLDSwOxDkwF0KH792XLcdfdtQyzhRf6vNIj1TfKlm1vpumqkMQwi7yTqV6uS(Ojd37TJlfgkumjaGIuiMuFsqvxNdRzhkMIjWHvpIhtXu0zLKqYbYOmgoIbOifIvZoJYSJHxWXft2XiOQRZHzCetGeQK91EmeBjesdGUZIjqQNEgLHIHxqY68A2zuMDmbs90J4XAHOwhscJb4vjnHsYdLXLSJjqQNE2zuMrzgxYOmdrZOmdWIikMyVCvrVScWoAuSG1yJhngqfTrrdfRfIADijmgosJGHcfkumCesdGUZI4HY4s2XiVjvkceJm168meTyXMmcQ66Cy2XQfq3VXIvlGUFJ1dxcimwT116HeZZOSSXYgldftItkb(gQ66CydraEghXiVjvUmt2x7aPFmjtHjjfILDSkjHu2XAHE1PyDq09yKWwpwl0RofkgMuXYogjS1J1c9QtXAHE1PysDBb5ctD1dfdKIPQfYowl0RofRpAYW9E74sHHcfJGQUohMDSz1pNmffXJrcB9yvssZASARR1djMNrzzJLnwgBw9ZAb09BSiEmxGZOylHqAa0D2ZxaI6GET(8vTwxRxlg0LAR116HeZJ1dN53vSUN3qvLInR(zT116HeZJ4XMmxGZOyYjHIvlGUFJfRwaD)gRhUeqym8zLqyNfuaEmsH5aXan16kUKfXdfRfI6GETUa0XvvfILbyXiVjvUasXOylT8yVCpIPrsGSJrsTZOlzhdBQjv2HcfJKANrzhdBQjv2HcfdqbcKcFQjHzhdBQjv2HcfdkX9SJHn1Kk7qHI1kOLKANrzhdBQjv2HcfdI0E2XWMAsLDOqXajXjfILDmSPMuzhkuOyK3KkfbIrXkcoUcWzKu)8fGEvb4mCHXumboS6r8yqVtHyBHTEmfoIfRtJUhXJ18giqvNYq0lXiVjvgRNAJjbauKcXK6tcQ66Cyn7qXuaX6HZ87kw3ZBOQspFGwQ3Xau1vAYWjLapMKjmgBITHQUohwZOmMWBGavDkJI24rmftrNvscjhiJYy4igGIuiwn7mkZogEbhxmzhJGQUohMXrmbsOs2x7XqSLqina6olMaPE6zugkgEbjRZRzNrz2Xei1tpIhRfIADijmgGxL0ekjpugxYoMaPE6zNrzgLzCjJYmenJYmalIOyI9Yvf9Yka7OrXcwJnE0yav0gfnuSwiQ1HKWy4incgkuOqXWrina6olIhkdrZog5nPsrGyKPwNNHOhXWrAem7malI4QGb2kk2ke9QIDfI2yXoefSaQOncwOytgbvDDom7y1cO73yXQfq3VXwcH0aO7Sy1wxRhsmpJYvukwrVAOysCsjW3qvxNdBicWZ4igbvDDom7yZQFozkkIhR26A9qI5zuUIsXk6vJrcB9yvssZASz1pRfq3VXI4XCboJITecPbq3zpFbiQd616Zx1ADTETyqxQTwxRhsmp2Y1QZW9NlceJInR(zT116HeZJ4XMmxGZOyYjHIvlGUFJfRwaD)gBjesdGUZIHpRec7SGcWJrkmhigOPwxXLSiEOyaEvstOK8iESwiQd616cqhxvviwgGfJ8Mu5cifJIT0YJ9Y9iwbx1vGYamXgtJKazhJKANrxYog2utQSdfkgj1oJYog2utQSdfkgGceif(utcZog2utQSdfkguI7zhdBQjv2HcfRvqlj1oJYog2utQSdfkgeP9SJHn1Kk7qHIbsItkel7yytnPYouOqXau1vAYWjLapMKjmg5nPsrGyuSIGJRaCgj1pFbOxvaodxymftGdREepg07ui2wyRhtHJyXAEdeOQtzu0lGfJ8MuzSEQnMeaqrketQpjOQRZH1SdftYuyssHyzhRssiLDSwOxDkwF0KH792XLcdfdtQyzhRf6vNIj1TfKlm1vpumqkMQwi7yTqV6uS(Ojd37TJlfgkumfqSLRvNH7pxeig98L6DS7kaQqgGj2ycVbcu1PmkAJhXytSnu115WAgLXumfDwjjKCGmkJHJyaksHy1SZOm7y4fCCXKDmcQ66CyghXeiHkzFThdXwcH0aO7SycK6PNrzOy4fKSoVMDgLzhtGup9iESwiQ1HKWyaEvstOK8qzCj7ycK6PNDgLzuMXLmkZq0mkZaSiIIj2lxv0lRaSJgflyn24rJburBu0qXAHOwhscJHJ0iyOqHcfdhH0aO7SiEOmal7yK3KkfbIrMADEgxal2KrqvxNdZowTa6(nwSAb09BSE4saHXQTUwpKyEgLROuSIE1qXK4KsGVHQUoh2qeGNXrmYBsLlZK91oq6hJGQUohMDm8zLqyNfuaEmsH5aXiHTESkjPzn2K5cCgftojuSz1pRfq3VXI4XQTUwpKyEgLROuSIE1yUaNrXwcH0aO7SNVae1b9A95RATUwVwmOl1wRR1djMhB5A1z4(ZfbIrXMv)S26A9qI5r8y1cO73yXQfq3VX6HlbegBw9Zjtrr8yGMADfxYI4HI1crDqVwxa64QQcXYaSyK3KkxaPyuSLwESxUhX0ijq2XiP2z0LSJHn1Kk7qHIrsTZOSJHn1Kk7qHIbOabsHp1KWSJHn1Kk7qHIbL4E2XWMAsLDOqXAf0ssTZOSJHn1Kk7qHIbsItkel7yytnPYouOyqK2Zog2utQSdfkumjtHjjfILDSkjHu2XiHTESwOxDkwl0RofRdIUhkgMuXYowl0RoftQBlixyQREOyGumvTq2XAHE1Py9rtgU3BhxkmuOyaQ6knz4KsGhtYegR5nqGQoLrrf9sm2eBdvDDoSMrzmO3PqSTWwpMchXIrEtQueigfRi44kaNrs9Zxa6vfGZWfgJ8MuzSEQnMci2Y1QZW9NlceJE(aTuVJjbauKcXK6tcQ66Cyn7qXeEdeOQtzu0gpIPycCy1J4XumfDwjjKCGmkJHJyaksHy1SZOm7y4fCCXKDmcQ66CyghXeiHkzFThdXwcH0aO7SycK6PNrzOy4fKSoVMDgLzhtGup9iESwiQ1HKWyaEvstOK8qzCj7ycK6PNDgLzuMXLmkZq0mkZaSiIIj2lxv0lRaSJgflyn24rJburBu0qXAHOwhscJHJ0iyOqHcfdhH0aO7SiEOmAm7yK3KkfbIrMADEgxalMWBGavDkJI24rmjoPe4BOQRZHneb4zCeJGQUohMDm8zLqyNfuaEmsH5aXiHTESkjPznwT116HeZZOSSyftShXMmxGZOyYjHInR(zTa6(nwepMlWzuSLqina6o75larDqVwF(QwRR1Rfd6sT16A9qI5X2fMmah(CrGWN1NVDzSz1pRTUwpKyEepwTa6(nwSAb09BSLqina6ol2S6NtMII4Xan16kUKfXdfRfI6GETUa0XvvfILbyXiVjvUasXOylT8yVCpIvWvDfOmatSX0ijq2XiP2z0LSJHn1Kk7qHIrsTZOSJHn1Kk7qHIbOabsHp1KWSJHn1Kk7qHIbL4E2XWMAsLDOqXAf0ssTZOSJHn1Kk7qHIbrAp7yytnPYouOyGK4KcXYog2utQSdfkumCKgbZodWIiUkyGTIITcrVQyxHOnwSdrblGkAJGfk2KrqvxNdZowTa6(nwSAb09BSLqina6olwT116HeZZOSSyftShHIXMyBOQRZH1mUed6DkeBlS1JPWrSyK3KkfbIrXkcoUcWzKu)8fGEvb4mCHXURaOczaMyJrEtQmwp1gtbeBxyYaC4ZfbcFwF(2LpFPEhtYuyssHyzhRssiLDSwOxDkwF0KH792XLcdfdtQyzhRf6vNIj1TfKlm1vpumqkMQwi7yTqV6uS(Ojd37TJlfgkumjaGIuiMuFsqvxNdRzNrz2XiOQRZHzhJe26XKtOm2KPOyTAPqhgBYCboJIjNekwT116fduZoum0D2nMwyepMlWzuSvMl1uHy1zFxGZOfGoivZy2clx8IhtXe4WQhXJXKyEn7mkJTlmzao85IaHpRpF7YqXMv)CYuuepwD23f4mYMGaPAg7CPIy7tBxKESJb49NGaTf26Xwzlx8feXvkEOytgbvDDom7qHcfR5nqGQoLrrfBXIPycCy1J4Xau1vAYWjLapMKjmMIPOZkjHKdKrzmCedqrkeRMDgLzhdVGJlMSJrqvxNdZ4iMajuj7R9yi2siKgaDNftGup9mkdfdVGK151SZOm7ycK6PhXJ1crToKegdWRsAcLKhkJlzhtGup9SZOmJYmUKrzgIMrzgGfrumXE5QIEzfGD0OybRXgpAmGkAJIgkwle16qsymCKgbdfkuOy4iKgaDNfXJb4vjnHsYJ4HYOyzhJ8MuPiqmYuRZZ4cyXeEdeOQtzu0gpIjXjLaFdvDDoSHiapJJyeu115WSJnR(5KPOiESARR1djMNrzzXkMypIrcB9yvssZASz1pRfq3VXI4XCboJITecPbq3zpFbiQd616Zx1ADTETyqxQTwxRhsmp2UWKb4WNlce(S(8TlJnR(zT116HeZJ4XMmxGZOyYjHIvlGUFJfRwaD)gRhUeqym8zLqyNfuaEmsH5aXan16kUKfXdfRfI6GETUa0XvvfILbyXiVjvUasXOylT8yVCpIvWvDfOmatSX0ijq2XiP2z0LSJHn1Kk7qHIrsTZOSJHn1Kk7qHIbOabsHp1KWSJHn1Kk7qHIbL4E2XWMAsLDOqXAf0ssTZOSJHn1Kk7qHIbrAp7yytnPYouOyGK4KcXYog2utQSdfkumjtHjjfILDSkjHu2XAHE1PyDq09yKWwpwl0RofkgMuXYowl0RoftQBlixyQREOyGumvTq2XAHE1Py9rtgU3BhxkmuOyK3KkxMj7RDG0pg5nPsrGyuSIGJRaCgj1pFbOxvaodxymftGdREepg07ui2wyRhtHJyXau1vAYWjLapMKjmg5nPYy9uBmjaGIuiMuFsqvxNdRzNrz2XiOQRZHzhJe26XKtOmwD23f4mYMGaPAg7CPIy7tBxKESJHUZUX0cJ4XCboJITYCPMkeRo77cCgTa0bPAgZwy5Ix8y1wxRxmqn7qXysmVMDgLX2fMmah(CrGWN1NVDzOytMII1QLcDymaV)eeOTWwp2kB5IVGiUsXdfBYiOQRZHzhkuOykGy7ctgGdFUiq4Z6Z3U85d0s9o2DfavidWeBSM3abQ6ugfvSflgBITHQUohwZ4sSjJGQUohMDSAb09BSy1cO73y9WLacJvBDTEiX8mkllwXe7rOykMIoRKesoqgLXWrmafPqSA2zuMDm8coUyYogbvDDomJYycKqLSV2JvlGUhtGup9mkdfdVGK151SZOm7ycK6PhXJ1crToKegRtJUhkuOqXWrina6olIhkJRMDmYBsLIaXitTopJlGfdhPrWSZaSiIRcgyROyRq0Rk2viAJf7quWcOI2iyHIj8giqvNYOOnEetItkb(gQ66CydraEghXiOQRZHzhBw9Zjtrr8y1wxRhsmpJYYgbRXJyKWwpwLK0SgBw9ZAb09BSiEmxGZOylHqAa0D2ZxaI6GET(8vTwxRxlg0LAR116HeZJ1BNqnJnR(zT116HeZJ4XMmxGZOyYjHIvlGUFJfRwaD)gBjesdGUZIHpRec7SGcWJrkmhigOPwxXLSiEOyTquh0R1fGoUQQqSmalg5nPYfqkgfBPLh7L7rScUQRaLbyInMgjbYogj1oJUKDmSPMuzhkumsQDgLDmSPMuzhkumafiqk8PMeMDmSPMuzhkumOe3Zog2utQSdfkwRGwsQDgLDmSPMuzhkumis7zhdBQjv2HcfdKeNuiw2XWMAsLDOqHIb4vjnHsYJ4XiVjvkceJIveCCfGZiP(5la9QcWz4cJbOQR0KHtkbEmjtymftGdREepg07ui2wyRhtHJyXAEdeOQtzi2IfJ8MuzSEQnMeaqrketQpjOQRZH1SdftYuyssHyzhRssiLDSwOxDkwF0KH792XLcdfdtQyzhRf6vNIj1TfKlm1vpumqkMQwi7yTqV6uS(Ojd37TJlfgkumfqSE7eQ5ZxQ3XURaOczaMyJnzeu115WSJvlGUFJfRwaD)gBjesdGUZIvBDTEiX8mklBeSgpcfJnX2qvxNdRzugtXu0zLKqYbYOmgoIbOifIvZoJYSJHxWXft2XiOQRZHzCetGeQK91EmeBjesdGUZIjqQNEgLHIHxqY68A2zuMDmbs90J4XAHOwhscJb4vjnHsYdLXLSJjqQNE2zuMrzgxYOmdrZOmdWIikMyVCvrVScWoAuSG1yJhngqfTrrdfRfIADijmgosJGHcfkumCesdGUZI4HYqSzhJ8MuPiqmYuRZZ4cyXeEdeOQtzu0gpIjXjLaFdvDDoSHiapJJysMctskel7yvscPSJrcB9yTqV6uSwOxDkwheDpummPILDSwOxDkMu3wqUWux9qXaPyQAHSJ1c9QtX6JMmCV3oUuyOqXiOQRZHzhJe26XQKKM1y1wxRhsmpJYYgbRXJytMlWzum5KqXMv)SwaD)glIhdFwje2zbfGhJuyoqmxGZOylHqAa0D2ZxaI6GET(8vTwxRxlg0LAR116HeZJ1BNqnJnR(zT116HeZJ4XQfq3VXIvlGUFJ1dxcim2S6NtMII4Xan16kUKfXdfRfI6GETUa0XvvfILbyXiVjvUasXOylT8yVCpIvWvDfOmatSX0ijq2XiP2z0LSJHn1Kk7qHIrsTZOSJHn1Kk7qHIbOabsHp1KWSJHn1Kk7qHIbL4E2XWMAsLDOqXAf0ssTZOSJHn1Kk7qHIbsItkel7yytnPYouOyqK2Zog2utQSdfkumYBsLlZK91oq6hdqvxPjdNuc8ysMWyK3KkfbIrXkcoUcWzKu)8fGEvb4mCHXMmcQ66Cy2XQfq3VXIvlGUFJ1dxcimwT116HeZZOSSrWA8ium2eBdvDDoSMrzmO3PqSTWwpMchXI18giqvNYqSfl2DfavidWeBmYBsLX6P2ykGy92juZNpql17ysaafPqmP(KGQUohwZoumftGdREepMIPOZkjHKdKrzmCedqrkeRMDgLzhdVGJlMSJrqvxNdZOmMajuj7R9y1cO7Xei1tpJYqXWlizDEn7mkZoMaPE6r8yTquRdjHX60O7HcfkumCesdGUZI4HYyfzhRfbjOurICecl9Jjbeiz4EepggcW1NTsQqSARR1vrctvRkTFExkWpbPG(5kjb8RXUeJGQUohMDmsyRhRssAwJnR(5KPOiEm8zLqyNfuaEmsH5aXCboJITa6UdJ1IU7qsyRNXrSjZf4mkMCsOyZQF2IU7qsyRhXdfddb46ZkDsnZOOxoIvWvDfOme9iMgjbYogj1oJUKDmSPMuzhkumsQDgLDmSPMuzhkumafiqk8PMeMDmSPMuzhkumOe3Zog2utQSdfkwRGwsQDgLDmSPMuzhkumis7zhdBQjv2HcfdKeNuiw2XWMAsLDOqHIv9v(0z4EgLnEed6DkeBlS1JHHaCDmjoPe4BOQRZHneb4zu0YJyyiaxFwPtOWmklblMciwdrmX88gkzYyyiaxFkmJIwgdeuI5gbLKmdrJXMyBOQRZH1mkJbOQR0KHtkbEmPwhtXu0zLKqYbYOmugLhzhBwD4PWmoInRo8SzghX6JGaoCjKgbZoJYmoY4sghziAghzawgLHIvLy(2BstOhXJjXjfIvZoMIPOSJbGoXNvcHfXJHpRecl2dUCcLNotW11cii5SNV(NdAYWjfITQaPETh8N)8N)CncxQFoOjdNui2ZHOjdyvbs4IEoBTh8N)8N)8N)8N)CfONVkBTNtfC2d(ZF(ZF(ZF(ZF(ZF(ZFUaj85R)5ysQW1G0ieC1vfiHpVb85LhFdaBTNlY88JRBCTNlspF1YJVbGT2d(ZF(ZF(ZF(ZFURR(d(ZF(ZF(ZF(ZF(ZF(ZFUaj85R)5ysQW1G0ieCvbsOiZX1nU2d(ZF(ZF(ZF(ZFUZaEWF(ZF(ZF(ZF(ZHonHSNlqcFWF(ZF(ZDgWd(ZF(ZFUgHl1pN981)8lp4p)5p)5kqpxGu)8E(ZlDrFovWzp4p)5p)5p)5p)5qNMq2ZHOjdyvbs9IEoBTh8N)8N)CxxDfONlqQFEp75LUOpxYaEUaP(598Nx6f75ubN9G)8N)8N)8N)8NdDAczphIMmGvfi1pxKEEPl6IEoBTNF91pVxIPxp4p)5p)5UU6kqpxGu)8E2Zl9I9Cjd45cK6N3ZFEPVINtfC2d(ZF(ZF(ZF(ZFo0PjK9CiAYawvGu)Cr65LEXw0ZzR98RV(59QH96b)5p)5p31vxb65cK6N3ZEEPVINtfC2d(ZF(ZF(ZF(ZFo0PjK9CiAYawvGu)Cr65L(kw0ZzR98RV(59QbUxp4p)5p)5od4b3zaHcfdeIrIql7QXUDLDXx8y5yTiibLksKJqyPFS(s4sincMDgLzCekgerssHyzCeRfI6GETUa0XvvfILXrmnscKDmsQDgDj7yytnPYouOyKu7mk7yytnPYouOyakqGu4tnjm7yytnPYouOyqjUNDmSPMuzhkuSwbTKu7mk7yytnPYouOyqK2Zog2utQSdfkgijoPqSSJHn1Kk7qHcfddb46ZwjviMZeOGigMZOQivjjSksYkbrysgUdpbbrRZzvXiSpQ5r51yxIHdrTNnZ44AWkJPyk6Sssi5azugR6R8PZW9mklVAmqiO3brtgW2BstOhB7nPj0RnO16ADrWjLajPqSBcCOwkS2GlJRvTv)0MSyvCP2ZOmMciwdrmX88gkzYNFjwfdHOclarDqVwJ4XWHO2moUgSYyvsIlMA6hddb46ZkDoRza2rmmeGRpxxghXiVjnHEmddHOcXiVjjceJIveCCfGZiP(5la9QcWz4cJ1hbbC4nqGQoLHOxIHJWAHETM(XifMdfbIrXkcoUcWzKu)8fGEvb4mCHXWqaU(SsNWMzC5QhXKaaksHys9jbvDDoSMDOy91odOHiapM4fF5rVJrkmhAQ15zCbSy9L4IPdIMmGBGavDkJlXu4iw6hddb46ZkDsRlJJyaEvstOKCXL4IPdIMmG0pgGQUstgoPe4XKmHXWNvcHT9MuShCqtgoPqSvx7b)5p)5pxJWL6NJjzYNV(NFfMIwaD3HR2RwTuOd71Ap4p)5p)5AeUu)Cmztmjt(81)8RWu0cO7oSHYMR2RwTuOd71Ap4p)5p)5qNMq2ZReuX6UgecIjPv7vpDnOEQN61IE(QysM85I0ZXKnXKm5ApVb85LhhR9G7mGytgbvDDom7y4ZkHWIfkggcW1lUEfMIs)yyiaxF2mJJysCsjW3qvxNdBicWZOOLhXa8QKMqj5Iab9oiAYas)yK3Km168mUawmqiO3brtgWsincMDgLzuMXLmkZq0mkZaSmkdfZzafH1P9meTyhXiOQRZHzhJe26XWNvcHfdFwje2jjS1J5cCgfdFwjewVNqjPqSyp4GMmCsHyRU2d(ZF(ZFUgHl1phtYKpF9p)kmfTa6UdxTxTAPqh2R1EWF(ZF(Z1iCP(5yYMysM85R)5xHPOfq3DydLnxTxTAPqh2R1EWF(ZF(ZHonHSNJjBIjzYNx0NJjzYf9CmztmjtUONx(G7mGy4ZkHWgsmp2doOjdNui2QR9G)8N)8NRr4s9ZXKm5Zx)ZVctrlGU7Wv7vRwk0H9ATh8N)8N)CncxQFoMSjMKjF(6F(vykAb0Dh2qzZv7vRwk0H9ATh8N)8N)COtti75YjuE6mbxxlGGKZwftYKR9G7mGy4ZkHWI9GdAYWjfIT6Ap4p)5p)5qNMq2Zj40FWDgqmxGZOASRmw8(CHBISwUhXWNvcHDwqb4XWNvcHfkMeqGKH7PFmmeGRpR0jjmJJyyiaxFwPtQzgf9YrmboSQqSmUedqvB1sHBVjvChefRNWJrkmhkcTSRg72v2fFXJLJvWvDfOmeTmwFjUy6GOjdy7nPj0JT9M0e61g0ADTUi4KsGKui2nboulfwBWLX1Q2QFAtwS(sCXaarTlH0iy2zuMXrgxY4idrZ4idWYOmuS(sCX0brtgWsincMDgGLXrOyyiaxFwPtOWmklblwLKqQiSoTNXrmmfeIGPFmmeGRpR0jCDzCet2Qs)yK3KeHw2vJD7k7IV4XYXau1wTu42Bs9q1vGI1tSy4qu7PWmoUgSYyyiaxFkmJJyGGsm3iOKKziAmO3PqSTWwpMCcL9LWy9rqahUyw1Pme9igBITHQUohwZOmgcQCgjjfIfBLDRhlwKFBSlsXpx8ObA5EylhkJYYSJnRo8uyghXMvhE2mJJycVbcu1PmkAzS(iiGdxcPrWSZOmJJmUKXrgIMXrgGLrzOyvjMV9M0e6r8yqejjF7nPyfFzrSJbcXirOLD1y3UYU4lESCmmeGRpBLuHyotGcIyyoJQIuLKWQijReeHjz4o8eeeToNvfJW(OMhLxJDjwFjCjKgbZoJYmocfdIijPqSmoIHdrTNcZ44AWkJb9ofITf26XKtOSVegR6R8PZW9mklVAmqiO3brtgW2BstOhB7nPj0RnO16ADrWjLajPqSBcCOwkS2GlJRvTv)0MSyvCP2ZOmwfdHOclarDqVwJ4XWHO2moUgSYyvsIlMA6hddb46ZkDoRza2rmftrNvscjhiJYySj2gQ66CynJYyK3KMqpMHHquHyyiaxFUUmoIHJWAHETM(XWqaU(SsNWMzC5QhXURaOczC5aSyaQ6knz4KsGhtYegRpcc4WfZQoLHOhXArqckvKihHWs)ykGyneXeZZBOKjFUOX6RDgqdraEmXl(YJEhddb46ZkDsRlJJy9L4IPdIMmGBGavDkJlXMmcQ66Cy2XWNvcHflummeGRxC9kmfL(Xa8QKMqj5IlXfthenzaPFmjoPe4BOQRZHneb4zu0YJyaEvstOKCrGGEhenzaPFmNbuewN2Zq0IDeddb46ZkDscZ4iMeqGKH7PFmcQ66Cy2XiHTEm8zLqyXMv)CYuuepMlWzun2vglEFUWnrwl3JyUaNrXwQGKEEd9Av25XWNvcH17juskelgOjdNui2QR9GdDAczpVCrpVCrpV8b3zaXAr3DijS1Z4ig(SsiSyp4GMmCsHyRU2d(ZF(ZFo0PjK9Cco9hCNbeBYCboJIjNekg(SsiStsyRhZf4mk2S6NTO7oKe26r8y4ZkHWolOa8y4ZkHWcfJ8Mu6hdtbHiy6htGdRkelJlXWqaU(SsNuZmk6LJyvscPIW60EghXifMdt)yyiaxFwPtOWmklblwFjUy6GOjdy7nPj0JT9M0e61g0ADTUi4KsGKui2nboulfwBWLX1Q2QFAtwS(sCXaarTlH0iy2zuMXrgxY4idrZ4idWYOmuS(sCX0brtgWsincMDgGLXrOyfCvxbkdrBmggcW1Nv6eUUmoIjBvPFmqiO3brtgWsincMDgLzuMXLmkZq0mkZaSmkdfddb46ZMzCetHJyPFmjaGIuiMuFsqvxNdRzhkggcW1NcZ4igiOeZnckjzgxIPrsGSJrsTZOlzhdBQjv2HcfJKANrzhdBQjv2HcfdqbcKcFQjHzhdBQjv2HcfdkX9SJHn1Kk7qHI1kOLKANrzhdBQjv2HcfdI0E2XWMAsLDOqXajXjfILDmSPMuzhkuOyiOYzKKuiwSv2TESyr(TXUif)CXJgOL7HTCmCiQ9SzghxdwzS(iiGdVbcu1Pme9sOmkVKDSjJGQUohMDSAb09BSy1cO7frFxkSgR26A9qI5zuw24XHydftItkb(gQ66CydraEgfT8iwlcsqPIe5iew6htciqYW9iEmcQ66Cy2XMv)CYuuepwl6UdjHTEghXMv)SfD3HKWwpIhJe26XQKKM1ytMlWzum5KqXMv)SwaD)glIhZf4mk2siKgaDN98fGOoOxRpFvR1161IbDP2ADTEiX8ylvq98nc26aOyZQFwBDTEiX8iEm8zLqyNfuaEmsH5aXQfq3VXIvlGUxe9DPWASARR1djMNrzzJhhInummeGRpR0j1mJIE5iwbx1vGYOSXyAKei7yKu7m6s2XWMAsLDOqXiP2zu2XWMAsLDOqXauGaPWNAsy2XWMAsLDOqXGsCp7yytnPYouOyTcAjP2zu2XWMAsLDOqXGiTNDmSPMuzhkumqsCsHyzhdBQjv2Hcfkw1x5tNH7zu24rmO3PqSTWwpggcW1XeEdeOQtzi6rmmeGRpR0juygLLGfdqvxPjdNuc8ysTogiOeZnckjzgIgtbeRhiTUmggcW1NcZOm2DfaviJYJJySj2gQ66CynJYynVbcu1PmkAJhXumfDwjjKCGmkJHHaC9zRKkeR26ADvKWfIRrm)exwjhEwjj5NvCP2bUg7sOmkfn7yZQdpfMXrmmeGRxC9kmfL(XMvhE2mJJynVbcu1PmkAJhXeEdeOQtzi6rSQeZ3EtAc9iEmfoIL(XaHyKi0YUASBxzx8fpwowFjCjKgbZoJYmocfdIijPqSmoIPrsGSJrsTZOlzhdBQjv2HcfJKANrzhdBQjv2HcfdqbcKcFQjHzhdBQjv2HcfdkX9SJHn1Kk7qHI1kOLKANrzhdBQjv2HcfdI0E2XWMAsLDOqXajXjfILDmSPMuzhkuOyiOYzKKuiwSv2TESyr(TXUif)CXJgOL7HTCSQVYNod3ZOS8QXQ4sTNrzS(iiGdVbcu1Pme9sSkgcrfwaI6GETgXJHdrTzCCnyLXQKexm10pwFTZaAicWJjEXxE07ySj2gQ66CynJYy9rqahUyw1Pme9ig07ui2wyRhtoHY(syS7kaQqgLhhXiVjnHEmddHOcXiVjjceJIveCCfGZiP(5la9QcWz4cJHJWAHETM(XifMdfbIrXkcoUcWzKu)8fGEvb4mCHXWqaU(SsNWMzC5QhXau1vAYWjLapMKjmgoe1EkmJJRbRmgGQ2QLc3EtQhQUcuSEIfddb46ZwjviMZeOGigMZOQivjjSksYkbrysgUdpbbrRZzvXiSpQ5r51yxIrEtseAzxn2TRSl(Ihlhddb46ZkDsRlJJy9L4IPdIMmGBGavDkJlX6JGaoCjKgbZoJYmoY4sghziAghzawgLHIjBvPFm8zLqyBVjf7bh0KHtkeB11EWF(ZF(Z1iCP(5ysM85R)5xHPOfq3D4Q9Qvlf6WET2d(ZF(ZFUgHl1pht2etYKpF9p)kmfTa6UdBOS5Q9Qvlf6WET2d(ZF(ZFo0PjK98kbvSURbHGysA1E1txdQN6PETONVkMKjFUi9CmztmjtU2ZBaFE5XXAp4odi2KrqvxNdZog(SsiSyHIHHaC9zZmoIjXjLaFdvDDoSHiapJIwEeJ8MKPwNNXfWIb4vjnHsYfbc6Dq0KbK(XCgqryDApdrl2rmmeGRpR0jjmJJysabsgUN(XiOQRZHzhJe26XWNvcHfdFwje2jjS1J5cCgfdFwjewVNqjPqSyp4GMmCsHyRU2d(ZF(ZFUgHl1pxb881)8YJvuk6Lh8N)8N)CfONV46cAPqhATUwVAzzJhhIDTNtfC2ZvapF9pVSSXJdX(CNb8G)8N)8NRr4s9ZXliHDEDrpht2CPcsyNxx0ZRKesl65atOKui2Zx)ZBGDYADTEPcsyNxxvbS2d(ZF(ZFUc0ZXliHDE959S1)8YNtfC2d(ZF(ZF(ZF(ZFo0PjK98Jf98Yf98Yf98Yh8N)8N)CxxDfONJxqc786Zx)6F(XZPco7b)5p)5p)5p)5p3B2QGssHyBfM)81)8kjH0ZfzEoWekjfI9G)8N)8N)8N)8NdDAczphycLKcXw0Z9MTkOKui2wH5p4p)5p)5od4b3zaXWNvcHnKyESyUaNr1y2clx8IFELf6Dr2lFU0TBfV33eznIHpRecl2doOjdNui2QR9G)8N)8NdDAczpNGt)b3zaXWNvcHDwqb4XWNvcHfkg5nP0pgMccrW0pwLKqQiSoTNXrmmeGRpR0juygLLGfddb46ZkDsnZOOxoI1xIlMoiAYawcPrWSZaSmocfJuyom9JrkmhkcTSRg72v2fFXJLJ1xIlgaiQDjKgbZoJYmoY4sghziAghzawgLHI1xIlMoiAYa2EtAc9yBVjnHETbTwxRlcoPeijfIDtGd1sH1gCzCTQT6N2KfRGR6kqzuwSyaQARwkC7nPI7GOy9uBmboSQqSmUedec6Dq0KbSesJGzNrzgLzCjJYmenJYmalJYqXWqaU(SsNW1LXrmaVkPjusU4sCX0brtgq6htItkeRMDmftrzhdaDIpReclIhdFwjewShC5ekpDMGRRfqqYzpF9ph0KHtkeBvbs9Ap4p)5p)5AeUu)CqtgoPqSNdrtgWQcKWf9C2Ap4p)5p)5p)5p)5kqpFv2ApNk4Sh8N)8N)8N)8N)8N)8N)Cbs4Zx)ZXKuHRbPri4QRkqcFEd4Zlp(ga2ApxK55hx34ApxKE(QLhFdaBTh8N)8N)8N)8N)Cxx9h8N)8N)8N)8N)8N)8N)Cbs4Zx)ZXKuHRbPri4QcKqrMJRBCTh8N)8N)8N)8N)CNb8G)8N)8N)8N)8NdDAczpxGe(G)8N)8N7mGh8N)8N)CncxQFo75R)5xEWF(ZF(ZvGEUaP(598Nx6I(CQGZEWF(ZF(ZF(ZF(ZHonHSNdrtgWQcK6f9C2Ap4p)5p)5UU6kqpxGu)8E2ZlDrFUKb8Cbs9Z75pV0l2ZPco7b)5p)5p)5p)5ph60eYEoenzaRkqQFUi98sx0f9C2Ap)6RFEVetVEWF(ZF(ZDD1vGEUaP(59SNx6f75sgWZfi1pVN)8sFfpNk4Sh8N)8N)8N)8N)COtti75q0KbSQaP(5I0Zl9ITONZw75xF9Z7vd71d(ZF(ZFURRUc0Zfi1pVN98sFfpNk4Sh8N)8N)8N)8N)COtti75q0KbSQaP(5I0Zl9vSONZw75xF9Z7vdCVEWF(ZF(ZDgWdUZacfkwlcsqPIe5iew6hJuyo0uRZZ4cyXAHOoOxRlaDCvvHyzCetbeRhiTU85xIHHaC9PWmoIbckXCJGssMHOXaHGEhenzaBVjnHEST3KMqV2GwRR1fbNucKKcXUjWHAPWAdUmUw1w9tBYIHHaC9zLoN1ma7iMIPOZkjHKdKrzmCiQ9SzghxdwzmjaGIuiMuFsqvxNdRzhkggcW1NRlJJqzucw2XWqaUEX1RWuu6hBwD4zZmoI18giqvNYOOnEet4nqGQoLXLveRkX8T3KMqpIhdIij5BVjfR4llIDmqigjcTSRg72v2fFXJLJ1IGeuQirocHL(XWqaU(SvsfI5mbkiIH5mQksvscRIKSsqeMKH7Wtqq06Cwvmc7JAEuEn2Ly9LWLqAem7mkZ4idWIikMOhnEi6kkMORq0RUIvumXgqfTrrdfdIijPqSmoIHdrTNcZ44AWkJ1hbbC4nqGQoLHOxIv9v(0z4EgLLxnwfxQ9mkJHdrTNnZ44AWkJvXqiQWcquh0R1iEmO3PqSTWwpMCcL9LWyvsIlMA6hRV2zaneb4XeV4lp6Dmeu5msskel2k7wpwSi)2yxKIFU4rd0Y9WwoggcW1Nv6CwZaSJyK3KMqpMHHquHy4iSwOxRPFmnscKDmsQDgDj7yytnPYouOyKu7mk7yytnPYouOyakqGu4tnjm7yytnPYouOyqjUNDmSPMuzhkuSwbTKu7mk7yytnPYouOyqK2Zog2utQSdfkgijoPqSSJHn1Kk7qHcfddb46ZkDcBMXLREeRpcc4WfZQoLHOhXKaaksHys9jbvDDoSMDOykCel9JHHaC9zLoP1LXrS(sCX0brtgWnqGQoLXLyyiaxF2mJJyGqqVdIMmGLqAem7mkZOmJlzuMHOzuMbyzugkgGQUstgoPe4XKmHXKTQ0p2KrqvxNdZog(SsiSyHIb4vjnHsYfxIlMoiAYas)yZQdpfMXrmjoPe4BOQRZHneb4zu0YJyaEvstOKCrGGEhenzaPFmNbuewN2Zq0IDetciqYW90pggcW1Nv6KeMXrmYBsPFmboSQqSmUeRGR6kqzuk2yKcZHPFS(sCX0brtgWsincMDgGLXrOy9L4IPdIMmGT3KMqp22BstOxBqR116IGtkbssHy3e4qTuyTbxgxRAR(PnzX6lXfdae1UesJGzNrzghzCjJJmenJJmalJYqXWqaU(SsNqHzuwcwSkjHuryDApJJyyiaxFwPtQzgf9YrmmfeIGPFmcQ66Cy2XiHTEm8zLqyXWNvcHf7bh0KHtkeB11EWF(ZF(ZHonHSNtWP)G7mGyUaNrXwQGKEEd9Av25XMv)CYuuepg(SsiSEpHssHyXanz4KcXwDThCOtti75Ll65Ll65Lp4odiwl6UdjHTEghXCboJQXSfwU4f)8kl07ISx(CPB3kEVVjYAedFwje2jjS1J5cCgfBYCboJIjNek2S6NTO7oKe26r8y4ZkHWolOa8y4ZkHWcfddb46ZkDcxxghX6JGaoCjKgbZoJYmoY4sghziAghzawgLHIPaI1dKwx(CrJHHaC9PWmoIbckXCJGssMXLy3vauHmkpUedhIAZ44AWkJbcb9oiAYa2EtAc9yBVjnHETbTwxRlcoPeijfIDtGd1sH1gCzCTQT6N2KfJnX2qvxNdRzugtXu0zLKqYbYOmggcW1NRlJJqzu2y2Xau1vAYWjLapMuRJj8giqvNYq0JyTiibLksKJqyPFmjGajd3J4XWqaU(SsNuZmk6LJyfCvxbkJYgJPrsGSJrsTZOlzhdBQjv2HcfJKANrzhdBQjv2HcfdqbcKcFQjHzhdBQjv2HcfdkX9SJHn1Kk7qHI1kOLKANrzhdBQjv2HcfdI0E2XWMAsLDOqXajXjfILDmSPMuzhkuOyvFLpDgUNrzJhXWqaU(SvsfIvBDTUks4cX1iMFIlRKdpRKK8ZkUu7axJDjg07ui2wyRhddb46ysCsjW3qvxNdBicWZOOLhXMmcQ66Cy2XQfq3VXIvlGUxe9DPWASARR1djMNrzzJhhInuSM3abQ6ugnEeddb46ZkDcfMrzjyXURaOczuECetbeRhiT(smmeGRpfMrzmqqjMBeusYmengBITHQUohwZOmMIPOZkjHKdKrzmcQ66Cy2XAr3DijS1Z4i2S6NTO7oKe26r8yKWwpwLK0SgBYCboJIjNek2S6N1cO73yr8y1wxRhsmpJYYgpoeBmxGZOylHqAa0D2ZxaI6GET(8vTwxRxlg0LAR116HeZJTub1Z3iyRdGInR(zT116HeZJ4XQfq3VXIvlGUxe9DPWAm8zLqyNfuaEmsH5aXMv)CYuuepuOmklw2XiVjjcTSRg72v2fFXJLJjBvPFSM3abQ6ugnEet4nqGQoLHOhXQsmF7nPj0J4Xu4iw6hdeIrIql7QXUDLDXx8y5yTiibLksKJqyPFS(s4sincMDgLzCekwle1b9ADbOJRQkelJJyyiaxFUUmoIHdrTNcZ44AWkJjbauKcXK6tcQ66Cyn7qXWHO2ZMzCCnyLXqqLZijPqSyRSB9yXI8BJDrk(5Ihnql3dB5yvFLpDgUNrz5vJvXLApJYyvmeIkSae1b9AnIhd6DkeBlS1JjNqzFjmwLK4IPM(X6RDgqdraEmXl(YJEhdec6Dq0KbS9M0e6X2EtAc9AdATUwxeCsjqske7MahQLcRn4Y4AvB1pTjlg5nPj0Jzyievig5njrGyuSIGJRaCgj1pFbOxvaodxyS(iiGdVbcu1Pme9smCewl0R10pMgjbYogj1oJUKDmSPMuzhkumsQDgLDmSPMuzhkumafiqk8PMeMDmSPMuzhkumOe3Zog2utQSdfkwRGwsQDgLDmSPMuzhkumis7zhdBQjv2HcfdKeNuiw2XWMAsLDOqHIrkmhkceJIveCCfGZiP(5la9QcWz4cJHHaC9zLoHnZ4YvpIPaI1dKwF55xI1hbbC4IzvNYq0JyyiaxF2kPcXCMafeXWCgvfPkjHvrswjictYWD4jiiADoRkgH9rnpkVg7smsH5qtTopJlGfdIijPqSmoIjXjfIvZoMIPOSJbGoXNvcHfXJHpRecl2dUCcLNotW11cii5SNV(NdAYWjfITQaPETh8N)8N)CncxQFoOjdNui2ZHOjdyvbs4IEoBTh8N)8N)8N)8N)CfONVkBTNtfC2d(ZF(ZF(ZF(ZF(ZF(ZFUaj85R)5ysQW1G0ieC1vfiHpVb85LhFdaBTNlY88JRBCTNlspF1YJVbGT2d(ZF(ZF(ZF(ZFURR(d(ZF(ZF(ZF(ZF(ZF(ZFUaj85R)5ysQW1G0ieCvbsOiZX1nU2d(ZF(ZF(ZF(ZFUZaEWF(ZF(ZF(ZF(ZHonHSNlqcFWF(ZF(ZDgWd(ZF(ZFUgHl1pN981)8lp4p)5p)5kqpxGu)8E(ZlDrFovWzp4p)5p)5p)5p)5qNMq2ZHOjdyvbs9IEoBTh8N)8N)CxxDfONlqQFEp75LUOpxYaEUaP(598Nx6f75ubN9G)8N)8N)8N)8NdDAczphIMmGvfi1pxKEEPl6IEoBTNF91pVxIPxp4p)5p)5UU6kqpxGu)8E2Zl9I9Cjd45cK6N3ZFEPVINtfC2d(ZF(ZF(ZF(ZFo0PjK9CiAYawvGu)Cr65LEXw0ZzR98RV(59QH96b)5p)5p31vxb65cK6N3ZEEPVINtfC2d(ZF(ZF(ZF(ZFo0PjK9CiAYawvGu)Cr65L(kw0ZzR98RV(59QbUxp4p)5p)5od4b3zaHcfddb46ZkDsRlJJy9L4IPdIMmGBGavDkJlX6JGaoCjKgbZoJYmoY4sghziAghzawgLHIb4vjnHsYfxIlMoiAYas)yaQ6knz4KsGhtYegddb46fxVctrPFm8zLqyBVjf7bh0KHtkeB11EWF(ZF(Z1iCP(5ysM85R)5xHPOfq3D4Q9Qvlf6WET2d(ZF(ZFUgHl1pht2etYKpF9p)kmfTa6UdBOS5Q9Qvlf6WET2d(ZF(ZFo0PjK98kbvSURbHGysA1E1txdQN6PETONVkMKjFUi9CmztmjtU2ZBaFE5XXAp4odi2S6WtHzCeddb46ZMzCeJ8MKPwNNXfWIjXjLaFdvDDoSHiapJIwEedWRsAcLKlce07GOjdi9JHHaC9zLojHzCeZzafH1P9meTyhXKacKmCp9JrqvxNdZogjS1JHpReclg(SsiStsyRhZf4mkg(SsiSEpHssHyXEWbnz4KcXwDTh8N)8N)CncxQFUc45R)5LhROu0lp4p)5p)5kqpFX1f0sHo0ADTE1YYgpoe7ApNk4SNRaE(6FEzzJhhI95od4b)5p)5pxJWL6NJxqc786IEoMS5sfKWoVUONxjjKw0ZbMqjPqSNV(N3a7K16A9sfKWoVUQcyTh8N)8N)CfONJxqc786Z7zR)5xEovWzp4p)5p)5p)5p)5qNMq2Zpw0Zlx0Zlx0ZlFWF(ZF(ZDD1vGEoEbjSZRpF9R)5LpNk4Sh8N)8N)8N)8N)CVzRckjfITvy(Zx)ZRKespxK55atOKui2d(ZF(ZF(ZF(ZFo0PjK9CGjuskeBrp3B2QGssHyBfM)G)8N)8N76QRa9C8csyNxFEp)5LpNk4Sh8N)8N)8N)8N)COtti75Ll65Ll65Ll65Lp4p)5p)5od4b3zaXWNvcHnKyESy4ZkHWI9GdAYWjfIT6Ap4p)5p)5qNMq2Zj40FWDgqmxGZOAmBHLlEXpVYc9Ui7Lpx62TI37BISgXWNvcHDwqb4XWNvcHfkg5nP0pMahwviwgxIbOQTAPWT3KkUdII1tTXWqaU(SsNuZmk6LJyfCvxbkJYIfJuyom9JrkmhkcTSRg72v2fFXJLJ1xIlgaiQDjKgbZoJYmoY4sghziAghzawgLHI1xIlMoiAYa2EtAc9yBVjnHETbTwxRlcoPeijfIDtGd1sH1gCzCTQT6N2KfRVexmDq0KbSesJGzNbyzCekggcW1Nv6ekmJYsWIvjjKkcRt7zCedtbHiy6hdec6Dq0KbSesJGzNrzgLzCjJYmenJYmalJYqXWqaU(SsNW1LXrSz1HNnZ4i2KrqvxNdZog(SsiSyHIbOQTAPWT3K6HQRafRNyXWqaU(uyghXabLyUrqjjZq0y3vauHmkpoIHHaC9zLoN1ma7igoe1MXX1GvgJnX2qvxNdRzugtXu0zLKqYbYOmugLxn7yZQdpfMXrmzRk9J18giqvNYOXJycVbcu1PmUSIyGqqVdIMmGLqAem7mkZOmJlzuMHOzuMbyzugkwvI5BVjnHEepgersY3EtkwXxwe7ykCel9JbcXirOLD1y3UYU4lESCSweKGsfjYriS0pwFjCjKgbZoJYmoYaSiIIj6rJhIUIIj6ke9QRyfftSburBu0qXGisskelJJyAKei7yKu7m6s2XWMAsLDOqXiP2zu2XWMAsLDOqXauGaPWNAsy2XWMAsLDOqXGsCp7yytnPYouOyTcAjP2zu2XWMAsLDOqXGiTNDmSPMuzhkumqsCsHyzhdBQjv2HcfkggcW1NRlJJyvFLpDgUNrz5vJvXLApJYyvmeIkSae1b9AnIhd6DkeBlS1JjNqzFjmwLK4IPM(XWqaU(SsNZAgGDetXu0zLKqYbYOmgBITHQUohwZOmgie07GOjdy7nPj0JT9M0e61g0ADTUi4KsGKui2nboulfwBWLX1Q2QFAtwmYBstOhZWqiQqmCewl0R10pgoe1MXX1Gvgddb46ZkDcBMXLREe7UcGkKr5XLy4qu7PWmoUgSYyaQ6knz4KsGhtYegtbeRhiT(YZfnggcW1Nv6KwxghX6JGaoCjKgbZoJYmoY4sghziAghzawgLHInzeu115WSJHpReclwOyyiaxV46vykk9Jb4vjnHsYfxIlMoiAYas)ysCsjW3qvxNdBicWZOOLhXa8QKMqj5Iab9oiAYas)yodOiSoTNHOf7igbvDDom7yKWwpg(SsiSyZQFozkkIhZf4mQgZwy5Ix8ZRSqVlYE5ZLUDR49(MiRrmxGZOylvqspVHETk78y4ZkHW69ekjfIfd0KHtkeB11EWHonHSNxUONxUONx(G7mGyTO7oKe26zCedFwjewShCqtgoPqSvx7b)5p)5ph60eYEobN(dUZaInzUaNrXKtcfdFwje2jjS1J5cCgfBw9Zw0DhscB9iEm8zLqyNfuaEm8zLqyHIjbeiz4E6hddb46ZkDscZ4ig5nP0pgMccrW0pggcW1Nv6KAMrrVCetGdRkelJlXQKesfH1P9moIvWvDfOmkfBmmeGRpR0juygLLGfRVexmDq0KbS9M0e6X2EtAc9AdATUwxeCsjqske7MahQLcRn4Y4AvB1pTjlwFjUyaGO2LqAem7mkZ4iJlzCKHOzCKbyzugkwFjUy6GOjdyjKgbZodWY4iumsH5W0pggcW1Nv6eUUmoInRo8SzghXWqaU(SzghXWqaU(SvsfI5mbkiIH5mQksvscRIKSsqeMKH7Wtqq06Cwvmc7JAEuEn2LysaafPqmP(KGQUohwZoummeGRpfMXrmqqjMBeusYmUeRVexmDq0KbCdeOQtzCjwFTZaAicWJjEXxE07yiOYzKKuiwSv2TESyr(TXUif)CXJgOL7HTCmCiQ9SzghxdwzS(iiGdxmR6ugIEeRpcc4WBGavDkdrVekJsXMDmjoPe4BOQRZHneb4zu0YJysMctskel7yysfl7yTqV6umPUTGCHPU6XiHTESwOxDkuOyAKei7yKu7m6s2XWMAsLDOqXMv)K5cCyepgj1oJYog2utQSdfkgGceif(utcZog2utQSdfkguI7zhdBQjv2HcfRvqlj1oJYog2utQSdfkgeP9SJHn1Kk7qHIbsItkel7yytnPYouOqXiOQRZHzhJe26XQKKM1ytMlWzum5KqXMv)CYuuepumO3PqSTWwpggcW1XWqaU(CDzu0lXau1vAYWjLapMuRJPaITlOyDphtkSVhddb46tHrefTyIE04HORaSRkwrlfBXeBJburBu0ySj2gQ66CynJYykMIoRKesoqgLXWqaU(SvsfIvBDTUksyiMyobHG4ET1H(jc2)ASlHcftqgLGDPmuca \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Instructions.txt b/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Instructions.txt new file mode 100644 index 0000000..33aa5d6 --- /dev/null +++ b/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Instructions.txt @@ -0,0 +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") + +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/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Other stuff.lua new file mode 100644 index 0000000..ba61310 --- /dev/null +++ b/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Other stuff.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Spellbook Cooldowns.lua b/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Spellbook Cooldowns.lua new file mode 100644 index 0000000..822f441 --- /dev/null +++ b/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Spellbook Cooldowns.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Spellbook Scan.lua b/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Spellbook Scan.lua new file mode 100644 index 0000000..d0e0bbb --- /dev/null +++ b/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Spellbook Scan.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/SpellbookCooldowns.txt b/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/SpellbookCooldowns.txt new file mode 100644 index 0000000..d8153c6 --- /dev/null +++ b/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/SpellbookCooldowns.txt @@ -0,0 +1 @@ +davoKaqikKkTii5sarsJcOCkG0RaIuZck1TOqLDrqdta6yIkwgbONbertJaW1aIeBJcb(geunokeKZbbL3beH5rHK7rO2hquheelua9qrXeHsUir2ifc9rGkJuaCsi0kfXlbQAMuYnbc7uu6NI0qjKLkQ6PuzQc6QeqBLaOVsrnwku1zHaRLcPI3cr1DHOSxa)Luny0HPQftHOEmfzYe1LLAZc0NHiJMconOwnfsvVManBjDBqA3c9Bsz4qQLdvpxIPtY1PuBhk(oeKXlQ05Pqz9uiOEpfICFkKY(vdKdqiGZdecOaCfaNakuaimheoGdkGtgWjdec4qcxdHaCbinpIgDsZgcXcWjdxm6TJMuWyAaNVwbCglnyWsRaYAC5GWmcb48MuWy6qCyKqQXbHMCdK14YjGaUcAVPgiBabCLUguKgCub4SKmIHaodnmsguazbjfqaxvZldec4u(AhvciqiGdQDvbdecOauaoLV2rfqiGdQDvbdecOauao7sRBQ6lfaJmGdxR2aHaoO2vfmqiGcqb4c6nPG1IaHaoO2vfmqiGcqb4qJbTYx7OcieWb1UQGbcbuakaNmCWGWMSRkJbec4GAxvWaHakafGd3BQbcbCqTRkyGqafGcqb48ryOEvdeiGdVrcwlgAm0nGt2yrpuytiHRzJgW15I2hLBzaJmGdwgWz0n0x7OAMrtRkRHqXYuabCrBOH4WiHuJxaYMdGdHGLvgamIiSagqeEoimbacdKccdHJWbjncqygbabnobGraGcWzcieiBoaHaovNRkhJOwu5Gnc3azfqbaGZBsbJPdXHrcPgheAYnq2ac4u4WiHuJdec4ugdDd4mzxuAqbCMSlknO6kJHUbCfLx12OL9QgW1y6OQa4CIKSS0fOiSGekPNjn1cRuZzN5LCsH6zstTWk1CwDqajleWjLx3jsYYYnZKMAHvQ5S6GaswiGtkVUZmIHzcGoisXsYb4mzxuAqbCgNXf6e4jgNX5ejzzPlqrybjusptAQfwPMZoZl5Kc1ZKMAHvQ5S6GaswiGtkVUtKKLLBMjn1cRuZz1bbKSqaNuEDNzedZeaDqKILK7KG2rtkyTiy(ATO8QUG9Sb9K5CoHdo7PyXtu5LCsH6zstTWk1CwDqajleWjLx3jsYYYHAQm0X5jZ5CoNZzqn8Po2ZIYR6jCCI2dJxaZxRfLx1fqNYANmNZ5CoNZ5CwuEvlSyqdHMINb91sdsCYCoNZ5CoNZzr5vTqtg8rKA5P4Pc3UbjozoNZ5Co7O8jZ5C2r5tMZ5eo4mQPMEBCVEhXieQMCpvg640BJ717igHq1K7P4zoZokppzoNt4GZEkw8evM0ulSsnNvheqYcbCs51DMrmmta0brkwsoutLHoEYCoNZ5CchC6TX96DeJqOAY9uS4zaNkdD8K5CoNZ5CoNtVnUxVJyecvtUNIN5CYCoNZ5CoNZjAC4OcmVnUxVJyecvtUb9K5CoNZ5SRL(K5CoNZ5CoNtVnUxVJyecvtUNINb8K5CoNZ5CoNt04WrfyEBCVEhXieQMCd6jZ5CoNZzhLpzoNZokFYCoNWbNrn10BJ717igHf0DTwMkdDCAU9ccXg3xe6m5Jsy6OQagkrwqqGuEDNijlRattbVUafHfKqjuGo7O8jZ5CgudFki2yMWXjApmEbmVnUxVJyewq31Ab0PS2jZ5CoNZzvZKVolkpUc7PSnUxbRfNINGRvo0DTMrtRkRHqrWWa6jZ5CoNZzvZKVoHnPfNINGRvo0DTg25QSXBWee0tMZ5CoNZQMjFDQ0u(Qj5P4j4ALdDxRb6lDgnTQSgcfbddONmNZ5CoN(ATO8QUGCmiBkEAKozoNZ5CoNZ50KbFePwEkEQWTBSpzoNZ5CoNZ5SyqdHMINkC7g7tMZ5CoNZ5CoX7IgUAkEQWTBSpzoNZ5CoNZ5enUgs4DPeAm09u8eLcgAlJc7tMZ5CoNZ5CoHnPfNINWM0IyFYCoNZ5CA0ozoNZ5CoHdo924E9oIriun5Ekw8mGtLHoo91Ar5vDb5yqMq4OCN7u8uPP8vtYZokFYCoNZ5CchCwuEC1eKNbC6JYtzBCVcwlob5zocbPmvg64jZ5CoNZ5CoN(ATO8QUGCmityNlAyCVcwlgcdTNINfLhxnbPNY24EfSw8K5CoNZ5CoNtFTwuEvxqogKju2g3RG1ItXtzBCVcwlEYCoNZ5CoNZjCWzutn91Ar5vDb5yqMqfm0gF6JYtVnUxVJyecvtUNIfpZzQm0XPVwlkVQlihdYeQGH24tXZm6HWqBCHzBekegAJdMSnUxbRfXEg0oAsbRfbd0P52lieBCFrOZKpkHPJQcyOCIKSS0fOiSGekPNjn1cRuZzrb6SJYGo7O8jZ5CoNZ5CoNWbNEBCVEhXieQMCpflEMZuzOJtFTwuEvxqogKjeok35ofplkpUAcspLTX9kyT4SJYNmNZ5CoNDT0NmNZ5CoNZ5CchC6TX96DeJqOAY9uS4zotLHoo91Ar5vDb5yqMq4OCN7u8mGZokFYCoNZ5C2r5tMZ5SJYNmNZjERSXJtfUDFshLbCMm0MeeW1y6OcWzYUO0GQBawUbCkyOTmGlODTwm5JabcOaCOX1qcVlfr4Tj4cSweiRaaWP6Cv5isdoQaCzKYgkLhWzOHrYGciliPac4QAEzGqaNYx7OsabcbCqTRkyGqafGcWP81oQacbCqTRkyGqafGcWjdhmiSj7QYyaHaoO2vfmqiGcqb4W1QnqiGdQDvbdecOauao0yqR81oQacbCqTRkyGqafGcWf0BsbRfbcbCqTRkyGqafGcWH7n1aHaoO2vfmqiGcqbOaCQoxvogrTOcWbXKjy5oQ81Pi8Ual3rtgdWbhX04LgiqahEJeSwm0yOBahSjTiGdHGLvgaYcskGaovNRkhahiv0aoVSmScwl6R6kCyKqQXlaHazZbieWPWHrcPghieWvSnYnMoQeH3bHZfW5ejzzb4ugdDd4mzxuAqbCnMoQkaorwqqGuEDNijlRattbVUafHfKqPPiliiqkVUtKKLvGPPGxxY4ZyjqhIPz1HGfwtrwqqGuEDNijlRattbVUKXNXsGoetZQNxcePcqPPiliiqkVUtKKLvGPPGxxY4ZyjqhIPz1Tq0foZKMAHvQ5S6GaswiGtkVUZmIHzcGUldKS6Giflj3uKfeeiLx3jsYYkW0uWRBoaigkzHOluhcwynfzbbbs51DIKSScmnf86MdaIHswi6c1ZlbIubO0uKfeeiLx3jsYYkW0uWRBoaigkzHOlu3crxiGRyBKBmDu5SdgeoxaNEgiUqDxiK8Haot2fLguaNXzCISGGaP86orswwbMMcEDbkcliHstrwqqGuEDNijlRattbVUKXNXsGoetZQdblSMISGGaP86orswwbMMcEDjJpJLaDiMMvpVeisfGstrwqqGuEDNijlRattbVUKXNXsGoetZQBHOlCMjn1cRuZz1bbKSqaNuEDNzedZeaDxgiz1brkwsUPiliiqkVUtKKLvGPPGx3CaqmuYcrxOoeSWAkYcccKYR7ejzzfyAk41nhaedLSq0fQNxcePcqPPiliiqkVUtKKLvGPPGx3CaqmuYcrxOUfIUWtcAhnPG1IG1ypHwqc0tMZ5eo4mQPMEBCVEhXieQMCpvg640BJ717igHq1K7P4zoZokppzoNt4GZEkw8evM0ulSsnNvheqYcbCs51DMrmmta0DzGKvhePyj5qnvg64jZ5CoNZjCWP3g3R3rmcHQj3tXINbCQm0XtMZ5CoNZ5Co924E9oIriun5EkEMZjZ5CoNZ5CoNOXHJkW824E9oIriun5g0tMZ5CoNZUw6tMZ5CoNZ5Co924E9oIriun5EkEgWtMZ5CoNZ5CorJdhvG5TX96DeJqOAYnONmNZ5CoNDu(K5Co7APHdo7PyXtuISGGaP86orswwbMMcEDbkcliHsOMkdD8K5CoNZ5eo4mQPMMBVGqSX9fNhtllmJDrPbne3xmmvg640C7feInUV48yAzHzSlknOH4(IHP4PrYOn7O8jZ5CoNZjCWzutnn3EbHyJ7lopMwwyg7IsdAiUVyqOdDxRs5AQAxG1ItLHoon3EbHyJ7lopMwwyg7IsdAiUVyqOdDxRs5AQAxG1ItXtJKrB2r5tMZ5CoNt4GZOMAAU9ccXg3xCEmTSWm2fLg0qCFXGqh6UwnBaw1v4IAQm0XP52lieBCFX5X0YcZyxuAqdX9fdcDO7A1SbyvxHlQP4PrAoNZ5CoNZ58K5CoNZ5CoNtKJYiQHRGdAm4isZaXBecfYMIN5G9jZ5CoNZ5CoNihLfCWEMrZKMwefYMIN5G9jZ5CoNZ5CoNihv(gdmgFffYMIN5G9jZ5CoNZ5CoNihLipUVAScCbfYMIN5G9jZ5CoNZPrB2r5tMZ5CoNtVnUxVJyewq31AzkEAKmANmNZ5CoNWbNEBCVEhXieQMCpflEgWPYqhpzoNZ5CoNZ5SQzYxNWr5o3P4zoNmNZ5CoNZ5CIqgGR9eCTYHUR1a10eervdnRhAdgCuUZf7jQc6Uwrb6uw7K5CoNZ5CoNZ5CoRAM81z0dTNINGRvo0DTIymOgyWr5oxSNOkO7AffONmNZ5CoNZ5CoNZzvZKVoHLNINLU2MuGHWXEcUw5q31kIXGAGbhL7CXEIQGURvuGc6jZ5CoNZ5CoNZ5CchCIyru1BSg3HURvWGLbDkw8uHB3tFuEcUw5q31AG(sNrtRkRHqrWGLbDcYZCcyadyaN(O8eSOMAcM52lieBCFX5X0YcZyxuAqdX9fdcDO7Avkxtv7cSwe5rp0gztn8P52lieBCFX5X0YcZyxuAqdX9fdcDO7Avkxtv7cSwe5WYiduqNkdD8K5CoNZ5CoNZ5CoNZ50BJ717igHf0DTwqE0dTr2u8ew(K5CoNZ5CoNZ5Co7O8jZ5CoNZ5CoNZ5CchL7CNINWr5o3ji9mNtMZ5CoNZ5Co7O8jZ5CoNZzxl9jZ5CoNZ5CoNb1WNcInMjCCI2dJxaZC7feInUV48yAzHzSlknOH4(IbHo0DTA2aSQRWffOtzTtMZ5CoNZ5CoNZ5SQzYxNrp0EkEcUw5q31kIXGAGjiONmNZ5CoNZ5CoNZzvZKVoHLNINLU2MuGHWXEcUw5q31kIXGAGjiOGEYCoNZ5CoNZ5CoNWbNWYtFuEIyru1BSg3HURvWGLbDkw8uHB3tLHoEYCoNZ5CoNZ5CoNZ5C6TX96DeJWc6Uwlip6H2iBkEclFYCoNZ5CoNZ5CoNDu(K5CoNZ5CoNZokFYCoNZ5C2r5tMZ5CoNtZTxqi24(IqNjFucthvfWqLxYjfQNjn1cRuZz1bbKSqaNuEDNijllhkqpzoNZUwA4GZEkw8eLiliiqkVUtKKLvGPPGxxY4ZyjqhIPz1HGfwOMkdD8K5CoNZ5eo4eCTYHURveJb1adAbjqNkdD8K5CoNZ5CoNt4GZOMAAU9ccXg3xCEmTSWm2fLg0qCFXGqh6UwLY1u1UaRfro0csiBQm0XP52lieBCFX5X0YcZyxuAqdX9fdcDO7Avkxtv7cSwe5qliHSP4zoZokFYCoNZ5CoNZjAC4Ocmuo0DTonkuypHwqc7jkqE6LLBzuGEYCoNZ5C21sFYCoNZ5CoNZjAC4Ocmuo0DTonkuypHwqc7jkqEcxMWrm(kSmkqpzoNZ5Co7O8jZ5CoNZP52lieBCFrOZKpkHPJQcyOezbbbs51DIKSScmnf86cuewqcLqb6jZ5CoNZP52lieBCFrOZKpkHPJQcyOYl5Kc1ZKMAHvQ5S6GaswiGtkVUtKKLLdfONmNZzxlnCWzpflEIsKfeeiLx3jsYYkW0uWRlz8zSeOdX0S65LarQauc1uzOJNmNZ5CoNWbNGRvo0DTIymOgyqlib6uzOJNmNZ5CoNZ5CchCon3EbHyJ7lopMwwyg7IsdAiUVyqOdDxRs5AQAxG1IihAbjKnvg640C7feInUV48yAzHzSlknOH4(IbHo0DTkLRPQDbwlICOfKq2u8mcxNDT0t04WrfyOCO7ADAuOWEcTGe2tuG8eUmJAQzNRPQTClJcuqIjERSXJZokFYCoNZ5CoNZjAC4Ocmuo0DTonkuypHwqc7jkqEI3q1W0YOa9K5CoNZ5SRL(K5CoNZ5CoNt04WrfyOCO7ADAuOWEcTGe2tuG8eUmHJy8vyzuGEYCoNZ5C2r5tMZ5CoNtZTxqi24(IqNjFucthvfWqjYcccKYR7ejzzfyAk41fOiSGekHc0tMZ5CoNtZTxqi24(IqNjFucthvfWqLxYjfQNjn1cRuZz1bbKSqaNuEDNijllhkqpzoNZUwA4GZEkw8eLiliiqkVUtKKLvGPPGxxY4ZyjqhIPz1Tq0fIAQm0XtMZ5CoNZGA4tbXgZeoor7HXlGzU9ccXg3xCEmTSWm2fLg0qCFXGqh6UwLY1u1UaRfbDkRDYCoNZ5CoNZjAC4OcmbXgdONmNZ5CoNDu(K5Co7APHdo7PyXtuISGGaP86orswwbMMcEDZbaXqjleDH6qWclutLHoEYCoNZ5CchCcUw5q31kIXGAGbTGeOtLHoEYCoNZ5CoNZjCWzutnn3EbHyJ7lopMwwyg7IsdAiUVyqOdDxRMnaR6kCrHCOfKq2uzOJtZTxqi24(IZJPLfMXUO0GgI7lge6q31QzdWQUcxuihAbjKnfpZz2r5tMZ5CoNZ5CorJdhvGHYHUR1PrHc7j0csyprbYtVSClJc0tMZ5CoNZUw6tMZ5CoNZ5CorJdhvGHYHUR1PrHc7j0csyprbYt4YeoIXxHLrb6jZ5CoNZzhLpzoNZ5Con3EbHyJ7lcDM8rjmDuvadLiliiqkVUtKKLvGPPGxxGIWcsOekqpzoNZ5Con3EbHyJ7lcDM8rjmDuvadvEjNuOEM0ulSsnNvheqYcbCs51DIKSSCOa9K5Co7APHdo7PyXtuISGGaP86orswwbMMcEDZbaXqjleDH65LarQauc1uzOJNmNZ5CoNWbNGRvo0DTIymOgyqlib6uzOJNmNZ5CoNZ5CchCon3EbHyJ7lopMwwyg7IsdAiUVyqOdDxRMnaR6kCrHCOfKq2uzOJtZTxqi24(IZJPLfMXUO0GgI7lge6q31QzdWQUcxuihAbjKnfpJW1zxl9enoCubgkh6UwNgfkSNqliH9efipHlZOMA25AQAl3YOafKyI3kB84SJYNmNZ5CoNZ5CIghoQadLdDxRtJcf2tOfKWEIcKN4nunmTmkqpzoNZ5Co7APpzoNZ5CoNZ5enoCubgkh6UwNgfkSNqliH9efipHlt4igFfwgfONmNZ5CoNDu(K5CoNZ50C7feInUVi0zYhLW0rvbmuISGGaP86orswwbMMcEDbkcliHsOa9K5CoNZ50C7feInUVi0zYhLW0rvbmu5LCsH6zstTWk1CwDqajleWjLx3jsYYYHc0tMZ5SRLgo4SNIfprjYcccKYR7ejzzfyAk41nhaedLSq0fQBHOle1uzOJNmNZ5CoNb1WNcInMjCCI2dJxaZC7feInUV48yAzHzSlknOH4(IbHo0DTA2aSQRWffOtzTtMZ5CoNZ5CorJdhvGji2ya9K5CoNZ5SJYNmNZzhLpPJYaot2fLguDLXq3aUgthvaUgthvaUa0(QYaGZKDrPbv3aSCd4uWqBzafGZoQWHrcPghieqbOauaoyzaxQGtbeWfTHgIdJesnEbiRac4KHlg92rtkymnGZhngGdocR0lkpUQLbYMdGZKMwvwdHIabc48ryOEfSweieWfeocxmaec4ugdDd4qJ3Lwb4qJ3Lwb4mYA2rtnwTjVXauakafGcWHbiBocabmhafaa \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Talent Cooldowns.lua b/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Talent Cooldowns.lua new file mode 100644 index 0000000..db1d56f --- /dev/null +++ b/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Talent Cooldowns.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Talent Scan.lua b/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Talent Scan.lua new file mode 100644 index 0000000..ac0f08c --- /dev/null +++ b/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/Talent Scan.lua @@ -0,0 +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") +end \ No newline at end of file diff --git a/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/TalentCooldowns.txt b/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/TalentCooldowns.txt new file mode 100644 index 0000000..e224afd --- /dev/null +++ b/Complete Projects/Fivver Stuff/Spellbook cooldowns and talent cooldowns/TalentCooldowns.txt @@ -0,0 +1 @@ +d0esnaqiquQfjj1LGQsnkqPtbQ8kqu0SaHBbvf7cQYWujoMKQLPu4zGu10arUgikzBGu5Bcv14GQQZPOcVdQk5EuI9jufhusSqqrpuLKjkP4IqYgvuLpQuQrcsrNusIvQiVurfzMkvUPKK2jLQFQOmuqvlvOYtbMQQCvqk9vvsDwHQ0AbrH3QOs3vrvTxQ(lKAWKdlyXkf9yHmziUSuBgQ8zHYOvQ60sSAqk8AqHzRWTvP2nf)wfdNsz5QQNRKPl66qz7usFxsPXRuY5bjRxrf17brL7dIQ2pAVU)CqWFE6GLd2apiHx947GBhG4ae)5Gy)tToaAolUQazmZ(RYohGuwqdmtuwS2oimgoaQz4WT60TJpBa9xCqiklw73Velw)R6bPD74t9loyzle1U9loy1dCWFkM0b7qnVNd23Ly7tFEZXLlXV(CCb6GoiH)lqhKUCXXHpqc)oyCci(Zbzy0MCd)5GBSrw8NNE6GmmAt6phCJnYI)80thGuWHReHnsO8NdUXgzXFE6Pd(HO2Fo4gBKf)5PNoaxiklhJ)CWn2il(ZtpDGnR2YWOnP)CWn2il(ZtpDW)mA)5GBSrw8NNE6aSvJoAewlFtpDqWuUdz7W0b)ow5yEqzRDacuMWDjk2)GzZb9w2cgKgX30bfehaz)cJ2KuxDodKtTMLdmy3VFjwS(VC71DqTfKCVpV54YL4xh)BCj(qc)XVo(VGFhh(aj87PdI8NBVU)Cq2BL1N3XKGYCUD7BajheIYI1(9lXI1)QEqA3(fhK)sSy93FoiHYw7GiSvEUDqe2kp3O3xqAhKL7gXbT12KlhaGh1UDOHw4RPYdf6RMnBxnZU2ovCOaOEOVA2SD1m7A7ORAf7v2gvCoicBLNBhWjCyMOSCmWggJvgYEbbvdhNOOOOk4OAklwOQoouaup0xnB2UAMDTD0vTI9kBJkUQPY9THItuuuuuuuu4oFk0qqTYq2ufdLTq5VGnmgRmK9cokKdNOOOOOOOOOOOOwziB8w7p1szHcxySA8fNOOOOOOOOOOOOwziB8I2hmXAeklu5hRXxCIIIIIIIIQniCIIIIQniCIIIIQGJYCsQa2pGUnwXldJ2KlQCFBOUUdWOc2pSWdefmOS2MCbB1WVRs8Iko0Vk7qz)HgAHVMkpuvdhvBq4effffUZNcgqyLQyOSfk)fSbSFaDBSIxggTjxWrHC4efffffff14efguRm8tiOqW(HSCmuwO2UtGTEmU6CgiNAnWAfoorrrrrrrrnorHbvj6yOSqTDNaB9y86TsSFdlmGJtuuuuuuuuJtuyq1MWMJMYc1forrrrrrrrvWrTYWpPSyH6cvUVnuTjS5OPSqvNQhRMQnHnhnLfQluTbHtuuuuuuuuHXyLHSxZ168PSqb54efffffffffffv0(GjwJqzHk)yneCIIIIIIIIIIIIAT)ulLfQ8J1qWjkkkkkkkkkkkQFVo)KYcv(XAi4efffffffffffLT)j2VxRhu2AkluvNL7gPAi4efffffffffffvj6yOSqvIogi4efffffffffffvBcBoAkluTjS5OHGtuuuuuuuuqEorrrrrrrrvWrTYWpPIhQlubdcfc2pKLJHkEOQJhKfvUVnCIIIIIIIIIIIIkmgRmK9AUwNpE9w2k)qwoMx5UPSqTYWpPGmPqW(HSCmCIIIIIIIIIIIIkmgRmK9AUwNpEiy)qwogkluiy)qwogorrrrrrrrrrrrfgJvgYEnxRZhVIbP3IYcfc2pKLJHtuuuuuuuuTbHtuuuuTbHtuuuu)oX(gQ8J1CQnioicBLNB0ju2AhSYq2y2qcz7GO9DemCqBTnPdWHngROGXHPNoW2)e73Rf8)oQSkhJBhsoi7TY6WFkM0bxHY(dvCoyFxITpD7q)goyCci(Zbzy0MCd)5GBSrw8NNE6GmmAt6phCJnYI)80thGuWHReHnsO8NdUXgzXFE6Pd(HO2Fo4gBKf)5PNoWMvBzy0M0Fo4gBKf)5PNo4FgT)CWn2il(ZtpDaUquwog)5GBSrw8NNE6PdYERS(8oM0bvIIkiTjddk4)9QG0MiOCGb7(9lXI1)LBFdh87yLJ5bLT2bLOJXb1wqY9UDOFdhK9wzDhGVT5GcIdMbdheqqkz5ycd05Velw)x(ZTx3Foi)LyX6V)CWcBZ2ABs4)nUYwoaapQD7CqcLT2bryR8C7G2ABYLdGFxL4fvCOFv2HY(dn0cFnvEOCWcBZ2ABsagoCLTCa6RQaEObVkX9Cqe2kp3oGt4Wmrz5yGTHG6EfdoorrrrfW(b0TXkEzy0MCrzHcYb55effffUZN6FQLYcvDiOIpfYHtuuuuuuuu4oFQOZa72qzHQoeuqpfYHtuuuuuuuuuuuuJtuyqvqGGYeUBkluB35lmAtwfdUdS)tTqqfDgy3giOQdhNOOOOOOOOOOOOgNOWGA1dkluRE0rjS1Vab12D(cJ2KvXG7atOQsnWwqGdoorrrrrrrrrrrrnorHb1QGqzHA1JokHf6GGA7oFHrBYQyWDGjuvPgyliWbhNOOOOOOOOOOOOk4O2UtGTEmGzy1xDodKtTgyxfe4OIhQlubdc1QhuwSqLFSMk33gorrrrrrrrrrrrrrrrfW(b0TXkEzy0MCnxt4UNpLfQvbHtuuuuuuuuuuuuTbHtuuuuuuuuTbHtuuuuTbHtuuuux3byub7hw4bIcguwBtUGT64qbq9qF1Sz7Qz212rx1k2RSnQ4QgoorrrrDDhGrfSFyHhikyqzTn5c2QJdfa1d9vZMTRMzxBhDvRyVY2OIdnaEu72bQgoorrrrDDhGrfSFyHhikyqzTn5c2QHFxL4fvCObWJA3oyoB2Ccn0cFnvEOQgoo1geheHTYZn6ekBTdARTjDqBTnPdGMDyK7Dqe2kp3O3xqAhKL7gXthGzYFjwS(7pp90thGuwqdmtuwS2oiyGYbfJ1(VAhMoOykj6vg(zJ42R7GOZzGCQ14W0bbt5oKLJXFoaxXuw79NdS97vNoyZdMjQRPJcq5GekBTdS97vNE6PNE6aRU96qAJ6E6o \ No newline at end of file diff --git a/Complete Projects/Legion/ABS.lua b/Complete Projects/Legion/ABS.lua new file mode 100644 index 0000000..d78b1bc --- /dev/null +++ b/Complete Projects/Legion/ABS.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/Achiv Inspector.lua b/Complete Projects/Legion/Achiv Inspector.lua new file mode 100644 index 0000000..0b7ab06 --- /dev/null +++ b/Complete Projects/Legion/Achiv Inspector.lua @@ -0,0 +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] +} +aura_env.output = "" \ No newline at end of file diff --git a/Complete Projects/Legion/Active Seeds.lua b/Complete Projects/Legion/Active Seeds.lua new file mode 100644 index 0000000..bac117b --- /dev/null +++ b/Complete Projects/Legion/Active Seeds.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/Legion/AntorusQuestlineThing.lua b/Complete Projects/Legion/AntorusQuestlineThing.lua new file mode 100644 index 0000000..6fb43cf --- /dev/null +++ b/Complete Projects/Legion/AntorusQuestlineThing.lua @@ -0,0 +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") diff --git a/Complete Projects/Legion/AutoAttackInterval.lua b/Complete Projects/Legion/AutoAttackInterval.lua new file mode 100644 index 0000000..5747304 --- /dev/null +++ b/Complete Projects/Legion/AutoAttackInterval.lua @@ -0,0 +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 = {} +aura_env.lines = 2 \ No newline at end of file diff --git a/Complete Projects/Legion/Autoloot.lua b/Complete Projects/Legion/Autoloot.lua new file mode 100644 index 0000000..b5feea5 --- /dev/null +++ b/Complete Projects/Legion/Autoloot.lua @@ -0,0 +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, + }, +} diff --git a/Complete Projects/Legion/Average Raid Health.lua b/Complete Projects/Legion/Average Raid Health.lua new file mode 100644 index 0000000..4bf3be0 --- /dev/null +++ b/Complete Projects/Legion/Average Raid Health.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/Ben Paralytic.lua b/Complete Projects/Legion/Ben Paralytic.lua new file mode 100644 index 0000000..ba241c2 --- /dev/null +++ b/Complete Projects/Legion/Ben Paralytic.lua @@ -0,0 +1,25 @@ +-- 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/Complete Projects/Legion/Boat Fish (Draenor).lua b/Complete Projects/Legion/Boat Fish (Draenor).lua new file mode 100644 index 0000000..31678a5 --- /dev/null +++ b/Complete Projects/Legion/Boat Fish (Draenor).lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/BossHpNameplate(VERY INEFFICIENT!!).lua b/Complete Projects/Legion/BossHpNameplate(VERY INEFFICIENT!!).lua new file mode 100644 index 0000000..f2b332c --- /dev/null +++ b/Complete Projects/Legion/BossHpNameplate(VERY INEFFICIENT!!).lua @@ -0,0 +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 = "" diff --git a/Complete Projects/Legion/Bulwark of Order.lua b/Complete Projects/Legion/Bulwark of Order.lua new file mode 100644 index 0000000..1168c61 --- /dev/null +++ b/Complete Projects/Legion/Bulwark of Order.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/Buttons.lua b/Complete Projects/Legion/Buttons.lua new file mode 100644 index 0000000..f8612dc --- /dev/null +++ b/Complete Projects/Legion/Buttons.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/CachedNPCLevels.lua b/Complete Projects/Legion/CachedNPCLevels.lua new file mode 100644 index 0000000..4962007 --- /dev/null +++ b/Complete Projects/Legion/CachedNPCLevels.lua @@ -0,0 +1,32 @@ +--GLOBAL_TICKER GET_LEVEL +function(e, ...) + if e == "GET_LEVEL" then + local name = ... + if not aura_env.scanList[name] then + aura_env.scanList[name] = GetTime() + end + end + + for k, v in pairs(aura_env.scanList) do + if GetTime() - v > 30 then + aura_env.scanList[k] = nil + end + end + + for i = 1, 40 do + local u = "nameplate" .. i + if UnitExists(u) then + local uname, level = UnitName(u), UnitLevel(u) + if aura_env.scanList[uname] then + WeakAurasSaved.CustomTrash.CachedLevels[uname] = level + aura_env.scanList[uname] = nil + end + else + break + end + end +end + +--INIT +if not WeakAurasSaved.CustomTrash.CachedLevels then WeakAurasSaved.CustomTrash.CachedLevels = {} end +aura_env.scanList = {} diff --git a/Complete Projects/Legion/Celestial Map.lua b/Complete Projects/Legion/Celestial Map.lua new file mode 100644 index 0000000..ba52974 --- /dev/null +++ b/Complete Projects/Legion/Celestial Map.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/Chat !.lua b/Complete Projects/Legion/Chat !.lua new file mode 100644 index 0000000..6c2ca8b --- /dev/null +++ b/Complete Projects/Legion/Chat !.lua @@ -0,0 +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() diff --git a/Complete Projects/Legion/Chat.lua b/Complete Projects/Legion/Chat.lua new file mode 100644 index 0000000..73bc303 --- /dev/null +++ b/Complete Projects/Legion/Chat.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/Legion/ChatFilter.lua b/Complete Projects/Legion/ChatFilter.lua new file mode 100644 index 0000000..c2973e0 --- /dev/null +++ b/Complete Projects/Legion/ChatFilter.lua @@ -0,0 +1,135 @@ +--[[ +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/Complete Projects/Legion/ClassMissChance.lua b/Complete Projects/Legion/ClassMissChance.lua new file mode 100644 index 0000000..91be314 --- /dev/null +++ b/Complete Projects/Legion/ClassMissChance.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/CombatLogFindClass.lua b/Complete Projects/Legion/CombatLogFindClass.lua new file mode 100644 index 0000000..b3ffa44 --- /dev/null +++ b/Complete Projects/Legion/CombatLogFindClass.lua @@ -0,0 +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, +} diff --git a/Complete Projects/Legion/Concordance.lua b/Complete Projects/Legion/Concordance.lua new file mode 100644 index 0000000..cdbd008 --- /dev/null +++ b/Complete Projects/Legion/Concordance.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/CooldownAnnouncer.lua b/Complete Projects/Legion/CooldownAnnouncer.lua new file mode 100644 index 0000000..6530554 --- /dev/null +++ b/Complete Projects/Legion/CooldownAnnouncer.lua @@ -0,0 +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.state 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.state.class) + end +end diff --git a/Complete Projects/Legion/Cross Char Quota.lua b/Complete Projects/Legion/Cross Char Quota.lua new file mode 100644 index 0000000..97ee737 --- /dev/null +++ b/Complete Projects/Legion/Cross Char Quota.lua @@ -0,0 +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 +aura_env.output = "" \ No newline at end of file diff --git a/Complete Projects/Legion/DAI KEY 2.lua b/Complete Projects/Legion/DAI KEY 2.lua new file mode 100644 index 0000000..9e5641d --- /dev/null +++ b/Complete Projects/Legion/DAI KEY 2.lua @@ -0,0 +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 = "" diff --git a/Complete Projects/Legion/DAI KEY.lua b/Complete Projects/Legion/DAI KEY.lua new file mode 100644 index 0000000..aa696bb --- /dev/null +++ b/Complete Projects/Legion/DAI KEY.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/DK Bone Shield Stacks.lua b/Complete Projects/Legion/DK Bone Shield Stacks.lua new file mode 100644 index 0000000..80a711d --- /dev/null +++ b/Complete Projects/Legion/DK Bone Shield Stacks.lua @@ -0,0 +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 +aura_env.stacks = 0 \ No newline at end of file diff --git a/Complete Projects/Legion/DPS HPS.lua b/Complete Projects/Legion/DPS HPS.lua new file mode 100644 index 0000000..d3306f3 --- /dev/null +++ b/Complete Projects/Legion/DPS HPS.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/Dangerous Spells!.lua b/Complete Projects/Legion/Dangerous Spells!.lua new file mode 100644 index 0000000..32f30dd --- /dev/null +++ b/Complete Projects/Legion/Dangerous Spells!.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/DavyStone.lua b/Complete Projects/Legion/DavyStone.lua new file mode 100644 index 0000000..a581a8f --- /dev/null +++ b/Complete Projects/Legion/DavyStone.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/DavyStone2.lua b/Complete Projects/Legion/DavyStone2.lua new file mode 100644 index 0000000..241aaad --- /dev/null +++ b/Complete Projects/Legion/DavyStone2.lua @@ -0,0 +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 +} diff --git a/Complete Projects/Legion/DeathTrack.lua b/Complete Projects/Legion/DeathTrack.lua new file mode 100644 index 0000000..027a67b --- /dev/null +++ b/Complete Projects/Legion/DeathTrack.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/Legion/Delete Items.lua b/Complete Projects/Legion/Delete Items.lua new file mode 100644 index 0000000..6a90342 --- /dev/null +++ b/Complete Projects/Legion/Delete Items.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/DickRiderCounter.lua b/Complete Projects/Legion/DickRiderCounter.lua new file mode 100644 index 0000000..e4ecc0a --- /dev/null +++ b/Complete Projects/Legion/DickRiderCounter.lua @@ -0,0 +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 = {} diff --git a/Complete Projects/Legion/Divine Purpose Procs.lua b/Complete Projects/Legion/Divine Purpose Procs.lua new file mode 100644 index 0000000..94fd60d --- /dev/null +++ b/Complete Projects/Legion/Divine Purpose Procs.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/Drums.lua b/Complete Projects/Legion/Drums.lua new file mode 100644 index 0000000..0c89b55 --- /dev/null +++ b/Complete Projects/Legion/Drums.lua @@ -0,0 +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 +aura_env.hide = 0 \ No newline at end of file diff --git a/Complete Projects/Legion/EHP.lua b/Complete Projects/Legion/EHP.lua new file mode 100644 index 0000000..819193b --- /dev/null +++ b/Complete Projects/Legion/EHP.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/Easter Achiv Bullshit.lua b/Complete Projects/Legion/Easter Achiv Bullshit.lua new file mode 100644 index 0000000..82f7c25 --- /dev/null +++ b/Complete Projects/Legion/Easter Achiv Bullshit.lua @@ -0,0 +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, +} +aura_env.targets = {} \ No newline at end of file diff --git a/Complete Projects/Legion/ElwynnForestSpam.lua b/Complete Projects/Legion/ElwynnForestSpam.lua new file mode 100644 index 0000000..2a427ac --- /dev/null +++ b/Complete Projects/Legion/ElwynnForestSpam.lua @@ -0,0 +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) diff --git a/Complete Projects/Legion/Emote on Friendlies.lua b/Complete Projects/Legion/Emote on Friendlies.lua new file mode 100644 index 0000000..330bfed --- /dev/null +++ b/Complete Projects/Legion/Emote on Friendlies.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/Emotebot.lua b/Complete Projects/Legion/Emotebot.lua new file mode 100644 index 0000000..9a78d1b --- /dev/null +++ b/Complete Projects/Legion/Emotebot.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/Fevered Carapace.lua b/Complete Projects/Legion/Fevered Carapace.lua new file mode 100644 index 0000000..d44dd9c --- /dev/null +++ b/Complete Projects/Legion/Fevered Carapace.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/Fish.lua b/Complete Projects/Legion/Fish.lua new file mode 100644 index 0000000..407e0b6 --- /dev/null +++ b/Complete Projects/Legion/Fish.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/Legion/Focus Thing.lua b/Complete Projects/Legion/Focus Thing.lua new file mode 100644 index 0000000..94b9cd7 --- /dev/null +++ b/Complete Projects/Legion/Focus Thing.lua @@ -0,0 +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 +aura_env.newfocus = 0 \ No newline at end of file diff --git a/Complete Projects/Legion/Friendlist.lua b/Complete Projects/Legion/Friendlist.lua new file mode 100644 index 0000000..f561d36 --- /dev/null +++ b/Complete Projects/Legion/Friendlist.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/Full House.lua b/Complete Projects/Legion/Full House.lua new file mode 100644 index 0000000..3c9f2d8 --- /dev/null +++ b/Complete Projects/Legion/Full House.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/GMCommandsResearch(.add).lua b/Complete Projects/Legion/GMCommandsResearch(.add).lua new file mode 100644 index 0000000..9e94765 --- /dev/null +++ b/Complete Projects/Legion/GMCommandsResearch(.add).lua @@ -0,0 +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 +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/Complete Projects/Legion/GPS.lua new file mode 100644 index 0000000..f6a01b5 --- /dev/null +++ b/Complete Projects/Legion/GPS.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/GUIDSniffer.lua b/Complete Projects/Legion/GUIDSniffer.lua new file mode 100644 index 0000000..19415c7 --- /dev/null +++ b/Complete Projects/Legion/GUIDSniffer.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/Glowing Raid Frames.lua b/Complete Projects/Legion/Glowing Raid Frames.lua new file mode 100644 index 0000000..730990f --- /dev/null +++ b/Complete Projects/Legion/Glowing Raid Frames.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/Group Breakdown.lua b/Complete Projects/Legion/Group Breakdown.lua new file mode 100644 index 0000000..5e7aed9 --- /dev/null +++ b/Complete Projects/Legion/Group Breakdown.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/GuildRecap.lua b/Complete Projects/Legion/GuildRecap.lua new file mode 100644 index 0000000..901e01a --- /dev/null +++ b/Complete Projects/Legion/GuildRecap.lua @@ -0,0 +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 +aura_env.playerList = {} \ No newline at end of file diff --git a/Complete Projects/Legion/GuildWave.lua b/Complete Projects/Legion/GuildWave.lua new file mode 100644 index 0000000..02e8878 --- /dev/null +++ b/Complete Projects/Legion/GuildWave.lua @@ -0,0 +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 = {} diff --git a/Complete Projects/Legion/Hammers n Shields.lua b/Complete Projects/Legion/Hammers n Shields.lua new file mode 100644 index 0000000..9123752 --- /dev/null +++ b/Complete Projects/Legion/Hammers n Shields.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/Legion/HealerDispels.lua b/Complete Projects/Legion/HealerDispels.lua new file mode 100644 index 0000000..56d5c47 --- /dev/null +++ b/Complete Projects/Legion/HealerDispels.lua @@ -0,0 +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.state then + local class = aura_env.state.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/Complete Projects/Legion/Herb Counter 2.0.lua b/Complete Projects/Legion/Herb Counter 2.0.lua new file mode 100644 index 0000000..31c6beb --- /dev/null +++ b/Complete Projects/Legion/Herb Counter 2.0.lua @@ -0,0 +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 = {} diff --git a/Complete Projects/Legion/Herb Counter.lua b/Complete Projects/Legion/Herb Counter.lua new file mode 100644 index 0000000..833c9cd --- /dev/null +++ b/Complete Projects/Legion/Herb Counter.lua @@ -0,0 +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} +aura_env.herbs = {"Dreamleaf", "Aethril", "Fjarnskaggl", "Foxflower", "Starlight"} \ No newline at end of file diff --git a/Complete Projects/Legion/Herb Quota.lua b/Complete Projects/Legion/Herb Quota.lua new file mode 100644 index 0000000..9b12583 --- /dev/null +++ b/Complete Projects/Legion/Herb Quota.lua @@ -0,0 +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, +} diff --git a/Complete Projects/Legion/Herb Sniffer/0.5/Direction.lua b/Complete Projects/Legion/Herb Sniffer/0.5/Direction.lua new file mode 100644 index 0000000..658204c --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/0.5/Direction.lua @@ -0,0 +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 +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/Complete Projects/Legion/Herb Sniffer/0.5/Distance.lua new file mode 100644 index 0000000..c53f968 --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/0.5/Distance.lua @@ -0,0 +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 \ No newline at end of file diff --git a/Complete Projects/Legion/Herb Sniffer/0.5/Herb Arrays Legion.lua b/Complete Projects/Legion/Herb Sniffer/0.5/Herb Arrays Legion.lua new file mode 100644 index 0000000..ddfb6bd --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/0.5/Herb Arrays Legion.lua @@ -0,0 +1,6582 @@ +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 \ No newline at end of file diff --git a/Complete Projects/Legion/Herb Sniffer/2.0/Direction.lua b/Complete Projects/Legion/Herb Sniffer/2.0/Direction.lua new file mode 100644 index 0000000..cc9a8d7 --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/2.0/Direction.lua @@ -0,0 +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"] +end \ No newline at end of file diff --git a/Complete Projects/Legion/Herb Sniffer/Direction.lua b/Complete Projects/Legion/Herb Sniffer/Direction.lua new file mode 100644 index 0000000..42b3647 --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/Direction.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/Herb Sniffer/Distance.lua b/Complete Projects/Legion/Herb Sniffer/Distance.lua new file mode 100644 index 0000000..12dfc26 --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/Distance.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays Legion.lua b/Complete Projects/Legion/Herb Sniffer/Herb Arrays Legion.lua new file mode 100644 index 0000000..a69c940 --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/Herb Arrays Legion.lua @@ -0,0 +1,82 @@ +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/Complete Projects/Legion/Herb Sniffer/Herb Arrays/All Ores.lua new file mode 100644 index 0000000..5ca6962 --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/All Ores.lua @@ -0,0 +1,2625 @@ +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 \ No newline at end of file diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/ArgusWeed.lua b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/ArgusWeed.lua new file mode 100644 index 0000000..e3d7f26 --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/ArgusWeed.lua @@ -0,0 +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, + }, +} diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Aethril.lua b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Aethril.lua new file mode 100644 index 0000000..fb4fd7a --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Aethril.lua @@ -0,0 +1,933 @@ +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 \ No newline at end of file diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Azshara's Veil.lua b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Azshara's Veil.lua new file mode 100644 index 0000000..9fe12e3 --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Azshara's Veil.lua @@ -0,0 +1,519 @@ +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 \ No newline at end of file diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Cinderbloom.lua b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Cinderbloom.lua new file mode 100644 index 0000000..67f15a8 --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Cinderbloom.lua @@ -0,0 +1,453 @@ +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 \ No newline at end of file diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Dreamleaf.lua b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Dreamleaf.lua new file mode 100644 index 0000000..0d9ffe8 --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Dreamleaf.lua @@ -0,0 +1,1233 @@ +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 \ No newline at end of file diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Fel Herbs.lua b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Fel Herbs.lua new file mode 100644 index 0000000..eb000cb --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Fel Herbs.lua @@ -0,0 +1,321 @@ +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 \ No newline at end of file diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Fjarnskaggl.lua b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Fjarnskaggl.lua new file mode 100644 index 0000000..c9346b5 --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Fjarnskaggl.lua @@ -0,0 +1,1233 @@ +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 \ No newline at end of file diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Foxflower.lua b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Foxflower.lua new file mode 100644 index 0000000..e9e2ff0 --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Foxflower.lua @@ -0,0 +1,1234 @@ +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 \ No newline at end of file diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Icecap And Silversage.lua b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Icecap And Silversage.lua new file mode 100644 index 0000000..92543d0 --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Icecap And Silversage.lua @@ -0,0 +1,855 @@ +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 \ No newline at end of file diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Icecap.lua b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Icecap.lua new file mode 100644 index 0000000..6c0d1af --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Icecap.lua @@ -0,0 +1,453 @@ +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/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Roses.lua new file mode 100644 index 0000000..3e39fc4 --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Roses.lua @@ -0,0 +1,1233 @@ +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 \ No newline at end of file diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Silversage.lua b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Silversage.lua new file mode 100644 index 0000000..e097c8a --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Herbalism/Silversage.lua @@ -0,0 +1,297 @@ +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/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Cobalt - Dragonblight.lua new file mode 100644 index 0000000..1622398 --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Cobalt - Dragonblight.lua @@ -0,0 +1,327 @@ +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 \ No newline at end of file diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Cobalt - Howling Fjord.lua b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Cobalt - Howling Fjord.lua new file mode 100644 index 0000000..d7108df --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Cobalt - Howling Fjord.lua @@ -0,0 +1,527 @@ +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/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Cobalt - Rich - Zul'Drak.lua new file mode 100644 index 0000000..3dd1f91 --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Cobalt - Rich - Zul'Drak.lua @@ -0,0 +1,219 @@ +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 \ No newline at end of file diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Cobalt - Zul'Drak.lua b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Cobalt - Zul'Drak.lua new file mode 100644 index 0000000..95488ae --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Cobalt - Zul'Drak.lua @@ -0,0 +1,513 @@ +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 \ No newline at end of file diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate Seam(Highmountain).lua b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate Seam(Highmountain).lua new file mode 100644 index 0000000..72e89fb --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate Seam(Highmountain).lua @@ -0,0 +1,555 @@ +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 \ No newline at end of file diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate Seam(Suramar).lua b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate Seam(Suramar).lua new file mode 100644 index 0000000..a82c33e --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate Seam(Suramar).lua @@ -0,0 +1,555 @@ +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 \ No newline at end of file diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate Total.lua b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate Total.lua new file mode 100644 index 0000000..3c48f72 --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate Total.lua @@ -0,0 +1,1035 @@ +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 \ No newline at end of file diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate.lua b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate.lua new file mode 100644 index 0000000..c5ed322 --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Felslate/Felslate.lua @@ -0,0 +1,513 @@ +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 \ No newline at end of file diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Leystone/Leystone Deposit.lua b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Leystone/Leystone Deposit.lua new file mode 100644 index 0000000..8adfe9c --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Leystone/Leystone Deposit.lua @@ -0,0 +1,423 @@ +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 \ No newline at end of file diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Leystone/Leystone Total.lua b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Leystone/Leystone Total.lua new file mode 100644 index 0000000..1e1e50d --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Leystone/Leystone Total.lua @@ -0,0 +1,1557 @@ +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/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Leystone/Rich Leystone Deposit.lua new file mode 100644 index 0000000..ffa319b --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Leystone/Rich Leystone Deposit.lua @@ -0,0 +1,1233 @@ +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 \ No newline at end of file diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Titanium.lua b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Titanium.lua new file mode 100644 index 0000000..ee52297 --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Mining/Titanium.lua @@ -0,0 +1,453 @@ +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 \ No newline at end of file diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Misc/Anna dogs.lua b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Misc/Anna dogs.lua new file mode 100644 index 0000000..ddb81f7 --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Misc/Anna dogs.lua @@ -0,0 +1,435 @@ +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 \ No newline at end of file diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Noblegarden/Durotar.lua b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Noblegarden/Durotar.lua new file mode 100644 index 0000000..2a0bd0c --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Noblegarden/Durotar.lua @@ -0,0 +1,153 @@ +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 \ No newline at end of file diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Noblegarden/Eversong Woods.lua b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Noblegarden/Eversong Woods.lua new file mode 100644 index 0000000..be38bc9 --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Noblegarden/Eversong Woods.lua @@ -0,0 +1,153 @@ +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 \ No newline at end of file diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Noblegarden/Mulgore.lua b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Noblegarden/Mulgore.lua new file mode 100644 index 0000000..8b6011c --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Noblegarden/Mulgore.lua @@ -0,0 +1,153 @@ +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 \ No newline at end of file diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Noblegarden/Tirisfal Glades.lua b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Noblegarden/Tirisfal Glades.lua new file mode 100644 index 0000000..b64bdf9 --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Noblegarden/Tirisfal Glades.lua @@ -0,0 +1,153 @@ +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 \ No newline at end of file diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Noblegarden/Waypoints b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Noblegarden/Waypoints new file mode 100644 index 0000000..08ddbf7 --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Noblegarden/Waypoints @@ -0,0 +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 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/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Skinning/Some apes.lua new file mode 100644 index 0000000..1434cde --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Skinning/Some apes.lua @@ -0,0 +1,279 @@ +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 \ No newline at end of file diff --git a/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Thing b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Thing new file mode 100644 index 0000000..76e86cf --- /dev/null +++ b/Complete Projects/Legion/Herb Sniffer/Herb Arrays/Thing @@ -0,0 +1,5 @@ +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/Complete Projects/Legion/Highfathers.lua new file mode 100644 index 0000000..fc867a7 --- /dev/null +++ b/Complete Projects/Legion/Highfathers.lua @@ -0,0 +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 +aura_env.targets = {} \ No newline at end of file diff --git a/Complete Projects/Legion/HoTP heal bars/1.0/HP1.lua b/Complete Projects/Legion/HoTP heal bars/1.0/HP1.lua new file mode 100644 index 0000000..866c6be --- /dev/null +++ b/Complete Projects/Legion/HoTP heal bars/1.0/HP1.lua @@ -0,0 +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) +end \ No newline at end of file diff --git a/Complete Projects/Legion/HoTP heal bars/1.0/HP2.lua b/Complete Projects/Legion/HoTP heal bars/1.0/HP2.lua new file mode 100644 index 0000000..7ff926f --- /dev/null +++ b/Complete Projects/Legion/HoTP heal bars/1.0/HP2.lua @@ -0,0 +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 + diff --git a/Complete Projects/Legion/HoTP heal bars/2.0/HP1 2.0.lua b/Complete Projects/Legion/HoTP heal bars/2.0/HP1 2.0.lua new file mode 100644 index 0000000..440b102 --- /dev/null +++ b/Complete Projects/Legion/HoTP heal bars/2.0/HP1 2.0.lua @@ -0,0 +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 +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/Complete Projects/Legion/HoTP heal bars/2.0/HP2 2.0.lua new file mode 100644 index 0000000..5177d74 --- /dev/null +++ b/Complete Projects/Legion/HoTP heal bars/2.0/HP2 2.0.lua @@ -0,0 +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 +aura_env.missingHealthPercentage = 0 \ No newline at end of file diff --git a/Complete Projects/Legion/HoTP heal bars/3.0/AAAAAA.txt b/Complete Projects/Legion/HoTP heal bars/3.0/AAAAAA.txt new file mode 100644 index 0000000..ee929c1 --- /dev/null +++ b/Complete Projects/Legion/HoTP heal bars/3.0/AAAAAA.txt @@ -0,0 +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 + diff --git a/Complete Projects/Legion/HoTP heal bars/3.0/HP1 3.0.lua b/Complete Projects/Legion/HoTP heal bars/3.0/HP1 3.0.lua new file mode 100644 index 0000000..042ea64 --- /dev/null +++ b/Complete Projects/Legion/HoTP heal bars/3.0/HP1 3.0.lua @@ -0,0 +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, +} diff --git a/Complete Projects/Legion/HoTP heal bars/3.0/HP2 3.0.lua b/Complete Projects/Legion/HoTP heal bars/3.0/HP2 3.0.lua new file mode 100644 index 0000000..6c1b4de --- /dev/null +++ b/Complete Projects/Legion/HoTP heal bars/3.0/HP2 3.0.lua @@ -0,0 +1,10 @@ +--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/Complete Projects/Legion/Holy Shield.lua new file mode 100644 index 0000000..822b0de --- /dev/null +++ b/Complete Projects/Legion/Holy Shield.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/HowDead.lua b/Complete Projects/Legion/HowDead.lua new file mode 100644 index 0000000..7bb72fd --- /dev/null +++ b/Complete Projects/Legion/HowDead.lua @@ -0,0 +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, +} diff --git a/Complete Projects/Legion/Ignore Alliance.lua b/Complete Projects/Legion/Ignore Alliance.lua new file mode 100644 index 0000000..9f3cb05 --- /dev/null +++ b/Complete Projects/Legion/Ignore Alliance.lua @@ -0,0 +1,8 @@ +--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/Complete Projects/Legion/Ilterendi Uptime.lua new file mode 100644 index 0000000..bfc5f07 --- /dev/null +++ b/Complete Projects/Legion/Ilterendi Uptime.lua @@ -0,0 +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 .. "%") diff --git a/Complete Projects/Legion/Init.lua b/Complete Projects/Legion/Init.lua new file mode 100644 index 0000000..c9c1304 --- /dev/null +++ b/Complete Projects/Legion/Init.lua @@ -0,0 +1,4 @@ +PLAYER_ENTERING_WORLD +function() + SetCVar("floatingCombatTextCombatHealing", 1) +end diff --git a/Complete Projects/Legion/Innervate on Whisper.lua b/Complete Projects/Legion/Innervate on Whisper.lua new file mode 100644 index 0000000..5d8e7ee --- /dev/null +++ b/Complete Projects/Legion/Innervate on Whisper.lua @@ -0,0 +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 = "" diff --git a/Complete Projects/Legion/InspectIlvl.lua b/Complete Projects/Legion/InspectIlvl.lua new file mode 100644 index 0000000..b8f3f04 --- /dev/null +++ b/Complete Projects/Legion/InspectIlvl.lua @@ -0,0 +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 +aura_env.time = 0 \ No newline at end of file diff --git a/Complete Projects/Legion/Ironfur.lua b/Complete Projects/Legion/Ironfur.lua new file mode 100644 index 0000000..1909f7d --- /dev/null +++ b/Complete Projects/Legion/Ironfur.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/JanaPullTimer.lua b/Complete Projects/Legion/JanaPullTimer.lua new file mode 100644 index 0000000..603bed6 --- /dev/null +++ b/Complete Projects/Legion/JanaPullTimer.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/Legion/Judgment of Light DebuffConsumedPerSecond.lua b/Complete Projects/Legion/Judgment of Light DebuffConsumedPerSecond.lua new file mode 100644 index 0000000..cbbcb1e --- /dev/null +++ b/Complete Projects/Legion/Judgment of Light DebuffConsumedPerSecond.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/Judgment of Light.lua b/Complete Projects/Legion/Judgment of Light.lua new file mode 100644 index 0000000..d698b85 --- /dev/null +++ b/Complete Projects/Legion/Judgment of Light.lua @@ -0,0 +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 +aura_env.totalstacks = 0 \ No newline at end of file diff --git a/Complete Projects/Legion/Judgment of Light/AP.lua b/Complete Projects/Legion/Judgment of Light/AP.lua new file mode 100644 index 0000000..59abffe --- /dev/null +++ b/Complete Projects/Legion/Judgment of Light/AP.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/Legion/Judgment of Light/Background.lua b/Complete Projects/Legion/Judgment of Light/Background.lua new file mode 100644 index 0000000..763c240 --- /dev/null +++ b/Complete Projects/Legion/Judgment of Light/Background.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/Legion/Judgment of Light/CODE.txt b/Complete Projects/Legion/Judgment of Light/CODE.txt new file mode 100644 index 0000000..4680e4c --- /dev/null +++ b/Complete Projects/Legion/Judgment of Light/CODE.txt @@ -0,0 +1 @@ +dOeLHaGiOIlPKQmkksNIIYRGuQMLsk3IOyxQK8lLuvAyePJrjltj5zkHMgKQRreABkPIVPKknorcNdsjDpIshKOAHqvEOkPMiLQUOkuBKIQpsruJKIGtQczLIyMuQCtrI2Pq)ujyOukhfsjwkujpvXuHYvHuSvkI8viLYyvsvXzvsv1APiuZLIq2R0FHQAWihMWIvIEmQAYOYLv1MvrFwLA0IuNgLvte0RvjMTsDBkSBQ63uz4qYYf8CrnDsxhITdvQVtey8QGZteTErs7hCTkwhrXQ2j3z1vOFL162XOdxhUI1HJLLqepVYW93rS3D(dOeEUNR415WcNN5xBuMu0j83mNhtsuFN7GdbvN8VpT5yETdElGHTqkT7yZX6W46KGWzC7Ffi3jq2XUtRD8igyb299hYnA1rYfopZV2i6sL2z7eCfRJk2VxxvSogiBLvSQv7OI971I1XazRSIvTAh(TiNlwNmZFV)o2KBNC7pkwTds(XNFlY5oAa57eC7VyDmq2kRyvR2bfUrPI971I1XazRSIvTANtbVYC(I1XazRSIvTANGG)lwhdKTYkw1QD4yNNmEKTkzX6yGSvwXQwTAhbVYW9Jfy33FiLoUVrzSKwTdFXA0QyDYOeHlOngNMUrlPDYQG)sEyP(nATQtwf8xYMVf35orN)7KrjcxWLtfkZ5BuANGtf6J9h0oXfIh3HX78fVoNoVA(wCN7SaAWS7O4XDy8op(8UTluSgTA0QXvnA14InA1i6nAvTZsr4A32fkwJwnA14QgL24InkTr0B0QAhUpluKGq)UStgLiCzHZZ8RR)gL2z7eCfRJk2VxxvSogiBLvSQv7OI971I1jZ837VrRu0XazRSIvTAh(TiNlwNmZFV)o2KBNC7pkwTds(Xxf73RfVoi5hF(TiNlEDcU9xSogiBLvSQv7WXopz8iBvYI1XazRSIvTAhu4gLk2VxlwhdKTYkw1QDcc(VyDmq2kRyvR2jJ65lwNmZFV)gT6yGSvwXA0Q4vTANtbVYC(I1XazRSIvTA1okZ4dx72UqXA0QrRgx1OvJl2OvJO3Ov1oi5xoNeIK1N75sjZ3LDc)nZ5XKe13XWX97ozvWFjx86O)bfj8DWBZsnvrGRJ(huZDETJ5bwQaHwqeCbHkacdRJarDfVokZ4dM78AhZdSubcTGi4ccvaegwhXgvArJwDYOeHlx72UqXA0QrRgx1OvJl2OvJO3Ov1o6FqV2TDHI1OvJwnUQrRgxSrRgrVrRQD4yzjeXZRmC)De7DNmkr4sx2zPiCK38GZRfVozuIWfS)GIe(oh51pCk4Ft01ISY834jcMi0CKmxlYkZFJNiiZGseU0rWRmC)yb299hsPJ7BuglPDYOeHl4YPcL58P0X9DKJgSf64cS3RcL58DmHfW1rM4fIyYTRJ(h0HL63O1QoEedSa7((d5gT6y44(n(P2Oe7Ob299hkwhvsuFhEKS6m6WJKvNb(QKO(ozvOi5o8iz1zGFAg33rzgpxhEKS6mShjiuMZ3rgzShn4so2rleHKtepVYCEtndsaciGaIDcKj)6G65zInlvHYCEtndizLfilG00VhsaciGaciGacOTJxSbsUnGKfO8VFE1u0xdi04zQ9)sKZttX50XJKXznGWjbH7249kqUtGSJDNwXXmZaYfaskKaeqabeqabeqBhVydKH4GCBajlqOlfsaciGaciGacOWRibpqYTTgqgIdYTTgqwqcqabeqVNdsaciGaIDcKj)6G65zInlvHYCEtndizLfOvaPPFpKaeqabeqabeqBhVydKCBajlqsHeGaciGaciGaA74fBGmehKBdizbskKaeqabeqabeqNUaqmGKfiR1acDPaX5GeGaciGaciGaciGaci2jqOXZ0JpWYA2uC8cJh1wOpoaD1vaXmdiHNdi04zQ9)sKZttXXlmEuBH(4a0vxbeBnCsq4UnEVcK7ei7y3PvCmdin97HeGaciGaciGaciGaciGaciG2oEXgi52SbKSaL)9ZRMI(AaHgptT)xICEAkoEHXJAl0hhGU6kGyRbeojiC3gVxbYDcKDS70koMzgqUaqsHeGaciGaciGaciGaciGaciGmehKBdizbYqCqUnGq7aHUuibiGaciGaciGaciGaciGaci52aswGKBdi0oqYTzdsaciGaciGaciGaciGEphKaeqabeqabeqVNdsaciGa69CqcqabeqHxrcEGKBBnGmehKBBnGSGK3Z1HhjRoJoNiEEL58MAgKaeqabu4vKGhinG8ajJmITeiKmdKZdjVNdsGeibsGeibsGeibs6WN(5V0bbfNq)QD0)Gw86WJKvNb2FqrdkoH(DqqXj0Vtwz8xK0EKGqzoFx2XWX9B8rj00DYO(9oV(IsSfCmp(l3mphZFVz3Pv8rfEErwVYyvNLc(l3bhIN7A32fkwJwnkTXvnkTXfBuAJO3O0RKy1oPF2DATXvs7OmJpy(wCN7eD(VdJRdEc(l3bhINdOu64(nqR6KrjcxWB)EUu64(oYT3(oi5xoNeIK1N75sP4qx2HJLrTfsI9huCXUtRDwpuDs15mAuAhowg1wij2FqT7p1oRNVtgLiCzHZZ8RRpnkTdJ35XpZ4(o46it2eW6O)b18T4o3j68FNmkr4Ij8S70AJlkTtwf8xYx72UqXA0QrRgx1OvJl2OvJO3Ov1okZ4ddl1VrRvDYOeHlMaJJ79DIhBshJRogoUFJVKnU6QvDodcJF0GqfnUyhLz8HIxhMh3Fi)DzNmkr4I9FwOiHVl7W8mf)Skc6Z1OvNSk4VKn351oMhyPceAbrWfeQaimSQnUQyDwk4VChCiEURDBxOynIEJsR2505vZ3I7CNfqdMDhfpUZsr4A32fkwJwnkTANTtWvSoQy)EDvX6yGSvwXQwTJk2VxlwNmZFV)gTsrhdKTYkw1QD43ICUyDYm)9(7ytUDYT)Oy1oi5hFvSFVw86GKF853ICU41j42FX6yGSvwXQwTdh78KXJSvjlwhdKTYkw1QDqHBuQy)ETyDmq2kRyvR2ji4)I1XazRSIvTANmQNVyDYm)9(B0QJbYwzfRrRIx1QDof8kZ5lwhdKTYkw1Qv7KnConTTG7o85CXRt4VzopMKO(ocKGyPi0jRc(l5USJ(huKW3XKqsBVdizaY2wW8aH2sZ0VdpswDgy)bTZjINxzoVPMbjabeqaTD8InqYTbKSaHgptT5KGpykoO2cj)aoMbKmYyYVcKiRbXgiuoj4daj8CazioaekNe8bibiGacOWRibpqYTbjVNdsGeibsGeibsGKocELH7hlWUV)qkDCFJYyjTJ(h0HL634kPD0a7((dfRJkjQVdpswDgD4rYQZaFvsuFNSkuKChEKS6mWpnJ77OmJNRdpswDg2JeekZ57iJm2JgCjh7OfIqYjINxzoVPMbjabeqaXobYKFDq98mXMLQqzoVPMbKSYcKfqA63djabeqabeqab02Xl2aj3gqYcu(3pVAk6RbeA8m1(FjY5PP4C64rY4Sgq4KGWDB8Efi3jq2XUtR4yMza5cajfsaciGaciGacOTJxSbYqCqUnGKfi0Lcjabeqabeqabu4vKGhidXb52asgGKBBnGmehKBBnGSGeGaciGEphKaeqabe7eit(1b1ZZeBwQcL58MAgqYklqRast)EibiGaciGaciG2oEXgi52aswGKcjabeqabeqab02Xl2azioi3gqYcKuibiGaciGaciGoDbGyajlqwRbe6sbIZbjabeqabeqabeqabeqStGqJNPhFGL1SP44fgpQTqFCa6QRaIzgqcphqOXZu7)LiNNMIJxy8O2c9XbORUci2A4KGWDB8Efi3jq2XUtR4ygqA63djabeqabeqabeqabeqabeqaTD8InqYTzdizbk)7Nxnf91acnEMA)Ve580uC8cJh1wOpoaD1vaXwdiCsq4UnEVcK7ei7y3PvCmZmGCbGKcjabeqabeqabeqabeqabeqazioi3gqYcKH4GCBaH2bcDPqcqabeqabeqabeqabeqabeqYTbKSaj3gqODGKBZgKaeqabeqabeqabeqa9EoibiGaciGaciGEphKaeqabeqabeqHxrcEGmehKBdizasUT1aYqCqUT1aYcsaciGa69CqY756WJKvNruy8DGeiPdpswDgDor88kZ5n1mibiGacOWRibpqAa5bsgzeBjqizgiNhsEphKajqcKajqcKajqcK0Hp9ZFPdckoH(v7O)bTl7W4D(USt6NDNwBCLvhxG9EvOmNVJjSaUoYeVqetUD4Fu0KogxZXD8igyb299hYnA1HJLrTfsI9hu7(tTZ6X3rcyCA6gxj1QdJ35XpZ4(o2DS5yDyCDUgjeEVcKCBaTQJYm(WWs9BCL0oCSmQTqsS)GIl2DATZ657WXYsiINxz4(7i27oNbHXpAqOIgLyhLz8HUSdZZu8ZQiOpxJwvBCXI1r)dQ5BXDUt05)ozvWFjpSu)gTw1jRc(lzZ3I7CNOZ)DKCHZZ8RnkJvNmkr4cUCQqzoFJs7eCQqFS)G2jUq84oNoVA(wCN7SaAWS7O4XDy8op(8UTluSgTA0QXvnA14InA1i6nAvTt(3N2CmV256JJyhJRolfHRDBxOynA1O0gxvZL4IRtkqRO11DL0vPyLerROv07PmsuInUynFDxe91vk6PifsxmfRZ6ATol2tzKOeBe9gTQ2H7Zcfji0Vl7C68ANOCKGiJp2)E8CBUozuIWLfopZVU(BuANTtWvSoQy)EDvX6yGSvwXQwTJk2VxlwNmZFV)gTsrhdKTYkw1QD43ICUyDYm)9(7ytUDYT)Oy1oi5hFvSFVw86GKF853ICU41j42FX6yGSvwXQwTdh78KXJSvjlwhdKTYkw1QDqHBuQy)ETyDmq2kRyvR2ji4)I1XazRSIvTANmQNVyDYm)9(B0QJbYwzfRrRIx1QDof8kZ5lwhdKTYkw1Qv7OmJpCTB7cfRrRgTACvJwnUyJwnIEJwv7KnConTTG7o85CXRds(LZjHiz95EUuY8DzNWFZCEmjr9D0)G2jRc(l5USJ(huKW3XKqsBVdizaY2wW8aH2sZ0VJ(huZDETJ5bwQaHwqeCbHkacdRtQoNrJs7Krjcx6YokZ4dM78AhZdSubcTGi4ccvaegwhXgvArJwDw6cCF4iF(1gTS6O)b9A32fkwJwnA14QgTACXgTAe9gTQ2jJseUSW5z(11NgL2HJLLqepVYW93rS3D4rYQZa7pODKrg7pASzN81pKCI45vMZBQzqcqabeqStGm5xhupptSzPkuMZBQzajRSazbKM(9qcqabeqabeqaTD8InqYTbKSaL)9ZRMI(AaHgptT)xICEAkoNoEKmoRbeojiC3gVxbYDcKDS70koMzgqUaqsHeGaciGaciGak8ksWdKCBqcqabeqVNdsaciGaIDcKj)6G65zInlvHYCEtndizLfOvaPPFpKaeqabeqabeqBhVydKCBajlqsHeGaciGaciGa60faIbKSazTgqOlfiohKaeqabeqabeqabeqaXobcnEME8bwwZMIJxy8O2c9XbORUciMzaj8CaHgptT)xICEAkoEHXJAl0hhGU6kGyRHtcc3TX7vGCNazh7oTIJzaPPFpKaeqabeqabeqabeqabeqab02Xl2aj3MnGKfO8VFE1u0xdi04zQ9)sKZttXXlmEuBH(4a0vxbeBnGWjbH7249kqUtGSJDNwXXmZaYfaskKaeqabeqabeqabeqabeqabKCBajlqYTbeAhi52SbjabeqabeqabeqabeqVNdsaciGaciGacO3Zbjabeqabeqabu4vKGhi52GeGaciGEphK8EUolfHJ8MhCET41rWRmC)yb299hsPJ7BuglPD0)GoSu)gxjTtwf8xYM78AhZdSubcTGi4ccvaegwNLUa3hw48m)AJsSJgy33FOyDujr9DYQqrYDqYp(ITeiKmRbKV41HhjRod8vjr9DYQqrYDq8pUFV2rGOUo8iz1zGFAg33rzgpxNh3Vx7CTZZXuMZN7WN(5V0bbfNq)oi5hFeptlEv7O)bTl7Kvg)fjThjiuMZ3LDCb27vHYC(oMWc46it8crm52H)rrt6yCnh3HJLrTfsI9hu7(tTZ6X3XJyGfy33Fi3OvNmkr4Y1UTluSgTA0QXvnA14InA1i6nAvTJYm(qx2rzgFW8T4o3j68FhgVZ3LDYOeHl4TFpxkDCFh52BFhK8lNtcrY6Z9CPuCOl7C686Ws9BCL0osaJttxZL4IONcPRw3vOBLcjUUsxHEpLb9u0zPG)YDWH45U2TDHI1OvJsBCvJsBCXgL2i6nkTAhowg1wij2Fq7SE8DyCDKBdOvDw6cCFOl7S0f4(WXC3FNOZ)Dwk4VWfCOU2TDHI1OvJwnUQrRgxSrRgrVrPxjXQDw6cCFyyP(nAToDuMXhgwQFJRK2HX784NzCFh7o2CSolDbUpCTB7cfRrRgTACvJwnUyJwnIEJsVsIv7S0f4(aEc(lCbhQo4TzPMQiWbeMZTvgQozuIWft4z3P1gxuANmkr4cAJXPPB0sAhowg1wij2FqXf7oT2z98DYQG)s(A32fkwJwnA14QgTACXgTAe9gTQ2j9ZUtR1CjUoRqRsuk6lUoRJujAT4Qu0tzqpfDYOeHlMaJJ79DIhBshJRozuIWfC5uHYC(u64(oYrd2cDodcJF0GqfnkXozuIWfS)GIe(oh51pCk4Ft01ISY834jcMi0CKmxlYkZFJNiiZGseU0H5X9hYFx2jJseUy)Nfks47YomptXpRIG(CnA1rGOUIx1grVyDKCHZZ8RnkJvNtNxnFlUZDwany2Du84olfHRDBxOynA1O0QD2obxX6OI971vfRJbYwzfRA1oQy)ETyDYm)9(B0kfDmq2kRyvR2HFlY5I1jZ837VJn52j3(JIv7GKF8vX(9AXRds(XNFlY5IxNGB)fRJbYwzfRA1oCSZtgpYwLSyDmq2kRyvR2bfUrPI971I1XazRSIvTANGG)lwhdKTYkw1QDYOE(I1jZ837VrRogiBLvSgTkEvR25uWRmNVyDmq2kRyvRwTt2W5002cU7WNZfVoH)M58ysI67iqcILIqNSk4VK7Yo6FqrcFhtcjT9oGKbiBBbZdeAlnt)ocELH7hlWUV)qkDCFJYyjTJgy33FOyDujr9D4rYQZOdpswDg4RsI67KvHIK7WJKvNb(PzCFhLz8CD4rYQZWEKGqzoFNtepVYCEtndsaciGak8ksWdK1AazTgqwqY75GeibsGKo8iz1z05eXZRmN3uZGeGaciGcVIe8aPbKhizKrSLaHKzGCEi59CqcKajqcKajqcKajqsh(0p)LoiO4e6xTJ(h0USt6NDNwBCrPDCb27vHYC(oMWc46it8crm52H)rrt6yCnh3zPG)YDWH45U2TDHI1i6nkTAhpIbwGDF)HCJwDy8oFx2rcyCA6gxzjTdJ35XpZ4(o2DS5yDyCDWtWF5o4q8CaTQJYm(qx2HJLLqepVYW93rS3DodcJF0GqfnUQdZZu8ZQiOpxJwvR2b3nAH(kRQT \ No newline at end of file diff --git a/Complete Projects/Legion/Judgment of Light/Current AP.lua b/Complete Projects/Legion/Judgment of Light/Current AP.lua new file mode 100644 index 0000000..65a493f --- /dev/null +++ b/Complete Projects/Legion/Judgment of Light/Current AP.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/Legion/Juked.lua b/Complete Projects/Legion/Juked.lua new file mode 100644 index 0000000..8a1e296 --- /dev/null +++ b/Complete Projects/Legion/Juked.lua @@ -0,0 +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 +} diff --git a/Complete Projects/Legion/KeyGlow.lua b/Complete Projects/Legion/KeyGlow.lua new file mode 100644 index 0000000..f02caf6 --- /dev/null +++ b/Complete Projects/Legion/KeyGlow.lua @@ -0,0 +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 = {} diff --git a/Complete Projects/Legion/Kill - Wipe counter.lua b/Complete Projects/Legion/Kill - Wipe counter.lua new file mode 100644 index 0000000..2364fa1 --- /dev/null +++ b/Complete Projects/Legion/Kill - Wipe counter.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/Legion/KoSList.lua b/Complete Projects/Legion/KoSList.lua new file mode 100644 index 0000000..a0ba8f5 --- /dev/null +++ b/Complete Projects/Legion/KoSList.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/Last n Melee.lua b/Complete Projects/Legion/Last n Melee.lua new file mode 100644 index 0000000..0029738 --- /dev/null +++ b/Complete Projects/Legion/Last n Melee.lua @@ -0,0 +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 = {} +aura_env.pointer = 1 \ No newline at end of file diff --git a/Complete Projects/Legion/Last n Spells.lua b/Complete Projects/Legion/Last n Spells.lua new file mode 100644 index 0000000..25b1c6c --- /dev/null +++ b/Complete Projects/Legion/Last n Spells.lua @@ -0,0 +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 = {} +aura_env.pointer = 1 \ No newline at end of file diff --git a/Complete Projects/Legion/Leggo Sniffer.lua b/Complete Projects/Legion/Leggo Sniffer.lua new file mode 100644 index 0000000..f20cfae --- /dev/null +++ b/Complete Projects/Legion/Leggo Sniffer.lua @@ -0,0 +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 + +aura_env.texture = "" \ No newline at end of file diff --git a/Complete Projects/Legion/List the bois.lua b/Complete Projects/Legion/List the bois.lua new file mode 100644 index 0000000..fc0bcd4 --- /dev/null +++ b/Complete Projects/Legion/List the bois.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/Loot Filter.lua b/Complete Projects/Legion/Loot Filter.lua new file mode 100644 index 0000000..ce032bc --- /dev/null +++ b/Complete Projects/Legion/Loot Filter.lua @@ -0,0 +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, + }, +} diff --git a/Complete Projects/Legion/Maiden Color Assignment.lua b/Complete Projects/Legion/Maiden Color Assignment.lua new file mode 100644 index 0000000..7c3c124 --- /dev/null +++ b/Complete Projects/Legion/Maiden Color Assignment.lua @@ -0,0 +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 = {} diff --git a/Complete Projects/Legion/Members Alive.lua b/Complete Projects/Legion/Members Alive.lua new file mode 100644 index 0000000..03e3162 --- /dev/null +++ b/Complete Projects/Legion/Members Alive.lua @@ -0,0 +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 +aura_env.membersAlive = 0 \ No newline at end of file diff --git a/Complete Projects/Legion/Misdirect God.lua b/Complete Projects/Legion/Misdirect God.lua new file mode 100644 index 0000000..b139688 --- /dev/null +++ b/Complete Projects/Legion/Misdirect God.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/Misdirect.lua b/Complete Projects/Legion/Misdirect.lua new file mode 100644 index 0000000..cdddce1 --- /dev/null +++ b/Complete Projects/Legion/Misdirect.lua @@ -0,0 +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 = "" diff --git a/Complete Projects/Legion/Mistress Fuckery.lua b/Complete Projects/Legion/Mistress Fuckery.lua new file mode 100644 index 0000000..675d373 --- /dev/null +++ b/Complete Projects/Legion/Mistress Fuckery.lua @@ -0,0 +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 = "" +aura_env.hpthreshold = {} \ No newline at end of file diff --git a/Complete Projects/Legion/Mitigation.lua b/Complete Projects/Legion/Mitigation.lua new file mode 100644 index 0000000..3d6b073 --- /dev/null +++ b/Complete Projects/Legion/Mitigation.lua @@ -0,0 +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) diff --git a/Complete Projects/Legion/Mob Kill Counter.lua b/Complete Projects/Legion/Mob Kill Counter.lua new file mode 100644 index 0000000..c417467 --- /dev/null +++ b/Complete Projects/Legion/Mob Kill Counter.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/NameplateAchivTest.lua b/Complete Projects/Legion/NameplateAchivTest.lua new file mode 100644 index 0000000..45f6585 --- /dev/null +++ b/Complete Projects/Legion/NameplateAchivTest.lua @@ -0,0 +1,6 @@ +-- /run NotifyInspect("party2") +--INSPECT_READY +function(e, ...) + print(e) + DevTools_Dump(GetInventoryItemLink("party2", 1)) +end \ No newline at end of file diff --git a/Complete Projects/Legion/Necrotic Rot.lua b/Complete Projects/Legion/Necrotic Rot.lua new file mode 100644 index 0000000..40d770a --- /dev/null +++ b/Complete Projects/Legion/Necrotic Rot.lua @@ -0,0 +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 +aura_env.maxDur = 0 \ No newline at end of file diff --git a/Complete Projects/Legion/Nightwell Energy/Background.lua b/Complete Projects/Legion/Nightwell Energy/Background.lua new file mode 100644 index 0000000..763c240 --- /dev/null +++ b/Complete Projects/Legion/Nightwell Energy/Background.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/Legion/Nightwell Energy/CODE.txt b/Complete Projects/Legion/Nightwell Energy/CODE.txt new file mode 100644 index 0000000..279e446 --- /dev/null +++ b/Complete Projects/Legion/Nightwell Energy/CODE.txt @@ -0,0 +1 @@ +daLZZaqiIIclsvfxsbQ(errvJIkYPOIAveff9kqKsZcuPBHs1UuH8lqKyyGWXOsltf8mvLAAeLUMQs2gkbFdLOXPi4CkqzEefLUNQkTpIIkhKilKk8quGjcQ4IOO2OIOpIsiJurOtIsALkQzIs5MGi2PQ8tfWqrroQcewkiQNkmvaxff0wjkYxrjuJfej5SGiPwRcenxqKQ9k9xfPbJCykwSQIhtOjtWLvAZG0NvrJMO60OA1kq61OqZwKBRq7MQ(TknCqz5u65IA6KUoqBxvvFxfQXdQ68kO1tu4(Gif7h66wGgMcuTrUXHJK9ixw2ySHqdHc0qGNhuqVOY)VnmPudJOY)Vaw(55AHKRW2h7Uq0yHhMXlSc1rJHdafAE1((MfGOrEtqz6Y9AdhdaamaKWgZtc0Gl0qMHmJh)uUE8Msib5nZfa3gEWral)8CT5(CBa)aqHMxTp2NqJ01iuGgQjTE9qbAmcMuEbQwTHAsRxlqJrWKYlq1QnetMCUanYC)zABWKeBsWH1x1gcCOq5IGjDybAmcMuEbQwTH9M2c0yemP8cuTAdOgrLF9fOXiys5fOA1gW(dtnP1RfOXiys5fOA1gwJ4wGgJGjLxGQvBaM3PIjto3qTGB1g29KF9adHTnoTxqyvBiwG(ClqJmmJLrwmxqL3NlenYQrKX8KjZzUX763gzyglJq(QgLF99brd7vn6cSWRnEd8yUXhJiJN2lOxGb301wG(C7dI(o0he99DFq0NS9bXrFvTb0RxNmzoZngGHaSX6J5gCXRFQ4nDTfOp3(C77qFU99DFU9jBFUvB8XyzWnDTfOp3(C77qFq0339brFY2NB1gcB2OGwJU9tJmmJLXbGcnVkK6(GOr6Aekqd1KwVEOangbtkVavR2qnP1RfOrM7ptBFUtOXiys5fOp3juhvR2qmzY5c0iZ9NPTbtsSjbhwFvBaM3PIjtoxhnS30wGgJGjLxGQvBynIBbAmcMuEbQwTbS)WutA9AbAmcMuEbQwTbuJOYV(c0yemP8cuTAJmSvSanYC)zA7ZTXiys5fOp36OA1gcCOq5IGjDybAmcMuEbQwTAdLpUwgCtxBb6ZTp3(o0NBFF3NBFY2NB1gG5vsyqbZ6kScqc33pnS7j)6bgcBBmEf2uJSAezmxhn0fEf0UnCK4YqggRqdDHxN861gtA5YaPbbOrWAudsaanYWmwgbw4vq72GvVUwOgXfsNbMSY9NomwiDgYk7mWKvU)0HXYEaZyzSrgMXYy)0q5JRDYRxBmPLldKgeGgbRrniba0WKGj30NBJmmJLrgCtxBb6ZTp3(o0NBFF3NBFY2NB1g6cVYGB6AlqFU9523H(C777(C7t2(CR2idZyzCaOqZRcPQpiAiWZdkOxu5)3gMuQHapdlzgcSWRSTq1gdUVXhJLv)K2RxRJgY4Eh7dIggrL)FbS8ZZ1cjxHTp2DHOHiywVJal8kdHjy0TbimbJUnUw(6vJYV(gtCaiZ6GCGhGeBn0fEn4Yy7Z9qdU))AZB)0Gl0WHrKXt7f0lGeKCf2eshq6qd1YppxBbAicM174uDiSTrwnkyUHiywVJtLZf2gkFCfAikFfzSbimbJUn8MXnxG(CB84NY1J3ucjM9R9Cy1Qn0fEToAiF5NY1(oarJSYfzCiCaTgLF99tdLpU26OHYhx7KjZzUX763g6cVozYCMB8U(TrgMXYOJ06fGKRW2qcoWPbyELeguWSUcRaKyGVFAmEf20uz03xnu(4AdUm2(Cp0GlE91rJmmJLriFvJYVEi5kSnKyiWanmG6ToAWfV(PzUW2aYSYIMiqJSAezmhCzS95EOrgMXY4ex(PCTVVHOrwnImMzWnDTfOp3(C77qFU99DFU9jBFUvBiWZWsMHal8kK5NY1gdoSgzyglJtKliS(gpMLjMHCJXRWMMoSt(LSqi73Ud2xFDycYkllabefk7F52aQ1mUHAnQPVVBKvJiJ5jVETXKwUmqAqaAeSg1GeaqJXRWMMcZOYBKHTPugsXyfn(nl)Qth55mpThnEOHhCeWYppxBUp3gzyglJWzZgf0U9tdUNRtZQXQRqFUv77qbA8XiY4P9c6fyWnDTfOpz7dIQnGE96KjZzUXameGnwFm34JXYGB6AlqFU9br1gPRrOanutA96Hc0yemP8cuTAd1KwVwGgzU)mT95oHgJGjLxG(CNqDuTAdXKjNlqJm3FM2gmjXMeCy9vTbyENkMm5CD0WEtBbAmcMuEbQwTH1iUfOXiys5fOA1gW(dtnP1RfOXiys5fOA1gqnIk)6lqJrWKYlq1QnYWwXc0iZ9NPTp3gJGjLxG(CRJQvBiWHcLlcM0HfOXiys5fOA1QnYJ3RkNj790U5CD0WUN8RhyiSTHb0A(ySnYQrKXC)0qx4vq72qMaLdNlsSJetjd3Jelwox3gIGz9ocSWRnGc6fv(17KZ4msiHesPROjHKeti9lsm0ZvMUhVwN(bwYmCT)4msSZolAvKmz1Asib7E8ArY4fqA0apsWUhVwCgjKqcj7QGwpssmHZRxaNXzCgNXzCgNX5ggrL)FbS8ZZ1cjxHTp2DHOHapdlzgcSWRSTq1gdUyd1YppxBbAOdHTnebZ6DSHiywVJt1HW2gz1OG5gIGz9oovoxyBO8XvOHiywVJWb0Au(13GD2HddHSeaRd8WzOGErLF9o5moJesiHu6kAsinAGxIjK(fjxiWzKqcjKsxrtcjjMq6xKGaNrcjKqc61IehPFrYfUijleijCXzKqcjKqcjKqkDfnjKYW2uIv4G0ViL30kQo56cxKyONRoaHc1PFGLmdx7pWfjUZoJe7SJKW1lZRiXO)EmshlNlkhj7QGwpsg7jsCfjEgNrcjKqcjKqcjouKYW2uIv4G0V)I0bxz)ILhqsLVECgjKqcjKqcjKqcjKqkDfnjKKycPFrkVPvuDsw4Ied9C1biuOo9dSKz4A)bUiXD2zCgjKqcjKqcjKqcjKqYUkO1J0ObEjMqIDKKycUinAGxIj4IKloJesiHesiHesRxaNrcjKqA9c486fAicM174ZmUnWzCUHiywVJnGc6fv(17KZ4msiHes2vbTEKul4Ie7SBshBgMr66X51lGZ4moJZ4moJZ4moJZneLVIm2aeMGr3Qn0fETFAO8X1gCzS9DaIgCpxNMvJvxH(CBO8X12pnKV8t5AFhCB4bhbS8ZZ1M777ghZfu59Dac3g6cVgCzS9DaIgCHgHAezm3GlE9tZCHTbBmpjqdbEgwYmeyHxHm)uU2yW9ne45bf0lQ8)Bdtk1WiiWv(1Bstvl)8CT5c0NBbAOw(55AlqdDiSTHb0AAKHTPeRcno4k7xS8qJm4N9)61aekuo8nMYaPayAaibzGg3J9d4tdRJg7)1RnM4AsQ8gGEU2awYmCTnYGF2)RxzYUq5W3iyIz2yRbyENMHTPeRc1rdVzCB84NY1J3ucjM9R9CydVzCZfOp3gp(PC94nLqIz)AphwTHW(bekuGHW2gtKz2yAsgYwJmSnLyvixG(C77GRSFXYdvBicM174u5CHTHYhxHgqbtPSOXxhvBa6vl)8CTfOA1(ouGgQLFEU2c0qhcBByaTMgzyBkXQqJdUY(flzzJm4N9)61aekuo8nMYaPayAaibzGgc7hqOqbgcBBmrMzJPjziBnUh7hWNgwhn2)RxBmX1Ku5na9CTbSKz4ABKb)S)xVYKDHYHVrWeZSXwdW8ondBtjwfQJgzyBkXQqUavB4nJBUavBW9)xBERJgEZ424XpLRhVPesm7x75WgqbtPSOXxhnebZ6DCQCUW2q5JRq1gGE1YppxBbQwTAdOwZ4gQ1OM((Qbx867NgxlF9Qr5xFJjoaKzDqoWdqITPS(KjMHCWC1((Uan(yez80Eb9cm4MU2c0NS9br1gqVEDYK5m3yagcWgRpMB8XyzWnDTfOp3(GOAJ01iuGgQjTE9qbAmcMuEbQwTbyEN63)RTFAOM061c0iZ9NPTp3j0yemP8c0N7eQJQvBiMm5CbAK5(Z02Gjj2KGdRVQne4qHYfbt6Wc0yemP8cuTAd7nTfOXiys5fOA1gG5DQyYKZ1rdy)HPM061c0yemP8cuTAdRrClqJrWKYlq1QnYWwXc0iZ9NPTp3gJGjLxG(CRJQvBa1iQ8RVangbtkVavRwTrE8Ev5mzVN2nNRJg29KF9adHTnmGwZhJTrwnImM7Ng6cVcA3gYeOC4CrIDKykz4EKyXY562qemR3rGfETbuqVOYVENCgNrcjKqkDfnjKKycPFrIHEUY094160pWsMHR9hNrID2zrRIKjRwtcjy3JxlsgVasJg4rc2941IZiHesizxf06rsIjCE9c4moJZ4moJZ4mo3WiQ8)lGLFEUwi5kS9XUlene4zyjZqGfELTfQ2yWfBOw(55AlqdDiSTHiywVJnebZ6DCQoe22iRgfm3qemR3r4aAnk)6BWo7WHHqwcG1bE4muqVOYVENCgNrcjKqkDfnjKKycPFrccCgjKqcjOxlsCK(fjx4IKSqGKWfNrcjKqcjKqcP0v0KqkdBtjwHds)IuEtRO6KRlCrIHEU6aekuN(bwYmCT)axK4o7msSZoscxVmVIeJ(7XiDSCUOCKSRcA9izSNiXvK4zCgjKqcjKqcjK4qrkdBtjwHds)(lshCL9lwYsKu5RhNrcjKqcjKqcjKqcjKsxrtcjjMq6xKYBAfvNCzjCrIHEU6aekuN(bwYmCT)axK4o7moJesiHesiHesiHesibZY9Qt)4WHdhoC4WHdhoC4WHdhoC4WHdhoC4WHdhiHesi9dshDessm5moJesiHesiHesiHesibZY9QtsmbxKmGwZ01))Ord8oJZiHesiHesiHesiHes2vbTEKmGwZ01))Ord8iXossmbxKmGwZ01))Ord8WfjxCgjKqcjKqcjKwVaoJesiH06fW51l0qemR3XNzCBGZ4Cdr5RiJnaHjy0THiywVJnGc6fv(17KZ4msiHes2vbTEKul4Ie7SBshBgMr66X51lGZ4moJZ4moJZ4moJZnebZ6DCQCUW2q5JRq1g6cV2pnmIk)6ZfOb3Z1c0q4ovemR3X6OHiywVJnyNDwFScGZgqRz66)F0ObEK(fjiQwTHYhxB)04A5Rxnk)6BmXbGmRdYbEasSnL1NmXmKdMBiF5NY1(o42qx41GlJTVdq0GlE99tdJGax5xVjnvT8ZZ1MlqFUfOHA5NNRTan0HW2ggqRPrg2MsSk04GRSFXsw2id(z)VEnaHcLdFJPmqkaMgasqgOX9y)a(0W6OX(F9AJjUMKkVbONRnGLmdxBJm4N9)6vMSluo8ncMyMn2AaM3PzyBkXQqD0idBtjwfYfOp3(o4k7xSKLvB4nJBUa9524XpLRhVPesm7x75WQne2pGqHcme22yImZgttYq2A4nJBJh)uUE8MsiXSFTNdBafmLYIgFD0qemR3XPY5cBdLpUcvBa6vl)8CTfOA1(ouGgQLFEU2c0id(z)VELj7cLdFJGjMzJTg6qyBdrWSEhBS)xVMBWGbGehsatzBaw0uMLjMFatz4BswzdGziZmCAKb)S)xVgGqHYHVXugifatdajid0qemR3XgSZodgasCibmLTbyrtzwMy(bmLHVjzLnaMHmZWbNHc6fv(170rhDKZ4msiHesPROjHug8Z(F9ks)IuEtRO603WfPJo6iNXzKqcjKsxrtcjrtwxls)IuEtRO6elaxKo6OJCgNrcjKqIdfPm4N9)6vK(9xK(jyIz2yBQedHS0ujMyInwzgo)GKXlGKOjRRfPF)fjg656ZmUo9dSKz4A)XzKu5RhNrcjKqcjKqcP0v0KqkdBtjK(fP8Mwr1j3VHlshD0roJZiHesiHesiHehkszyBkH0V)I0bxz)ILSejv(6XzKqcjKqcjKqcjKqcjdO1mD9)pA0aps)IuEtRO6KllHlshD0roJZiHesiHesiHesiHesSZoml3Ro9JKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK0piD0rizaTMPR))rJg4DgNrcjKqcjKqA9c4msiH06fW51l0qemR3XP6qyBJ9)61g7)1RnM4AsQ8gIGz9oovoxyBO8XvOAdqVA5NNRTavRwTbx86NM5cBd2yEsGgc88Gc6fv()THXpSHapdlzgcSWRqMFkxBm4(gkFCTbxgBFhGObuRzCd1AutFF14yUGkVVdq42Gl0iKZ3Kqdp4iGLFEU2CFF3G7560SAS6k0NB1(KTan(yez80Eb9cm4MU2c0NS9br1gqVEDYK5m3yagcWgRpMB8XyzWnDTfOp3(GOAJ01iuGgQjTE9qbAmcMuEbQwTbyEN63)RToAOM061c0iZ9NPTp3j0yemP8c0N7eQJQvBiMm5CbAK5(Z02Gjj2KGdRVQne4qHYfbt6Wc0yemP8cuTAd7nTfOXiys5fOA1gG5DQyYKZ1rdy)HPM061c0yemP8cuTAdRrClqJrWKYlq1QnYWwXc0iZ9NPTp3gJGjLxG(CRJQvBa1iQ8RVangbtkVavRwTrE8Ev5mzVN2nNRJg29KF9adHTnmGwZhJTrwnImM7Ng6cVcA3gYeOC4CrIDKykz4EKyXY562qemR3rGfETbuqVOYVENCgNrcjKqkDfnjKKycPFrIHEUY094160pWsMHR9hNrID2zrRIKjRwtcjy3JxlsgVasJg4rc2941IZiHesizxf06rsIjCE9c4moJZ4moJZ4mo3WiQ8)lGLFEUwi5kS9DOHapdlzgcSWRSTq1gdUyd1YppxBbAicM174uDiSTrwnkyUH3mU5c0NBJh)uUE8MsiXSFTNdR24ESFaFAyD0G7)V28whneLVIm2aeMGr3gzyBkXQqUa9523bxz)ILSSAdrWSEhNkNlSnu(4kuTHUWR9tdLpU2(PX1YxVAu(13yIdazwhKd8aKyBkRpzIzihm3q(YpLR9DWTHUWRbxgBFhGObx867NggbbUYVEtAQA5NNRnxG(Clqd1YppxBbAOdHTnmGwtJm4N9)61aekuo8nMYaPayAaibzGg3J9d4tdRJg7)1RnM4AsQ8gzWp7)1RmzxOC4BemXmBS1G7)V28whnYW2uIvHCb6ZTVdUY(flpuTbONRnGLmdxBdVzCZfOp3gp(PC94nLqIz)AphwTHW(bekuGHW2gtKz2yAsgYw1gGE1YppxBbQwTVdfOHA5NNRTanebZ6DeoGwJYV(gqb9Ik)6DYzCgjKqcj7QGwpsUWfjx4IKloVEHg6qyBdrWSEhBicM17ydOGErLF9o5moJesiHKDvqRhj1cU486fWzCgNXzCgNXzCUrg8Z(F9Aacfkh(gtzGuamnaKGmqdr5RiJnaHjy0THiywVJt1HW2gz1OG5g7)1RnM4AsQ8gzWp7)1RmzxOC4BemXmBSvTbOxT8ZZ1wGQvR2GlE9tZCHTbBmpjqdbEEqb9Ik))2WKsne4zyjZqGfEfY8t5AJb33q5JRn4Yy77aenGAnJBOwJA67RghZfu59Dac3gCHgosgrgrc61IK)I0hqOqB4bhbS8ZZ1M777gCpxNMvJvxH(CR23xfOrgMXYilMlOY7ZfIgz1iYyo4Yy7Z9qdbEgwYmeyHxBm4IngoauO5v7JD3gFUwH1YGB6AlqFU9523H(C777(C7t2(G4OVQ2WEvJUal8AJ3apMBa961jtMZCJbyiaBS(yUbx86NkEtxBb6ZTp3(o0NBFF3NBFY2NB1g5nbLPl3RnyaZpaMHCJpgldUPRTa952he9DOt(13SWegSbJLhG4Weo81GnyYwOS)1x99DNKLFlllHq2jmbi(EcSalDzHVlu2)6R(KTp3Qne2SrbTgD7NgqVETXtc0AYtb2174MeAKHzSmoauO5vHu3hensxJqbAOM061dfOXiys5fOA1gQjTETanYC)zA7ZDcngbtkVa95oH6OA1gIjtoxGgzU)mTnysInj4W6RAdW8ovmzY56OH9M2c0yemP8cuTAdRrClqJrWKYlq1QnG9hMAsRxlqJrWKYlq1QnGAev(1xGgJGjLxGQvBKHTIfOrM7ptBFUngbtkVa95whvR2qGdfkxemPdlqJrWKYlq1QvBO8X1YGB6AlqFU9523H(C777(C7t2(CR2ipEVQCMS3t7MZ1rdW8kjmOGzDfwbiH77Ng29KF9adHTn0fETrwnImM7Ng6cVcA3gYeOC4CrIDKykz4EKyXY562qx41jVETXKwUmqAqaAeSg1GeaqdzCVJ9brJmmJLX(PHYhx7KxV2yslxginiancwJAqcaOHjbtUPp3gzyglJm4MU2c0NBFU9DOp3((Up3(KTp3Qn0fELb301wG(C7ZTVd95233952NS95wTXNRvyTomImkyVWA4iXLHmmwbKaU3KYH1qGNhuqVOY)VnmPudrWSEhbw41gSZoCyiKLayDGhodf0lQ8R3jNXzKqcjKsxrtcjOGErLF9iLLFT66D6Vj5moJesiHesiHesPROjHeuqVOYVEKSxqVGt)nw4IK3zCgjKqcjKqcjKqcjKqIdfjN8oJKkF94msiHesiHesiHesiHesiHes)nwK(fPrJk)iOP716Kt)nwKKzIKleiKgVZibPfjio6lNrcsbjNCHaH04DgNrcjKqcjKqcjKqcjK2uEXzKqcjKqcjKqcjKqcjKqcjK(BSi9lsJgv(rqt3R1P)glKwio6lNXzKqcjKqcjKqcjKqcP1lGZiHesiHesiHesiHes2vbTEK(BS4msiHesiHesiTEbCgjKqcjKqcjKsxrtcjps)I0bCgjKqcjKqcjK4qr6VjHKmlsU73iPYxpoJesiHesiHesiHesizxf06rYEb9co93KGlsENXzKqcjKqcjKqAt5LdfP)MesYCi5UFJKXlG0FtcjzwKCxwajv(6XzKqcjKqcjKqcjKqcj7QGwps2lOxWP)Mesqki5UFdxK8oJ0rhH0pm(doJesiHesiHesBkVCOi93KqsMdj3LfqY4fq6VjHKmlsU7GHKkF94msiHesiHesiHesiHKDvqRhj7f0l40FtcjifKCxwaUi5DgPJocPFGKFWzKqcjKqcjKqAt5LdfP)MesYCi5UdgsQ81JZiHesiHesiHesiHes2vbTEKSxqVGt)njKGuqYDhm4IK3zKo6iK(Hf9doJesiHesiHesRxaNrcjKqA9c4msiHesqVwK4i9lsUWfjzHajHloJesiHesiHesPROjHug2MsSchK(fP8Mwr1jxx4Ied9C1biuOo9dSKz4A)bUiXD2zKyNDKeUEzEfjg93Jr6y5Cr5izxf06rYyprIRiXZ4msiHesiHesiXHIug2MsSchK(9xKo4k7xSKLiPYxpoJesiHesiHesiHesiLUIMessmH0ViL30kQo5Ys4Ied9C1biuOo9dSKz4A)bUiXD2zCgjKqcjKqcjKqcjKqYUkO1JKet4msiHesiHesiTEbCgjKqcjKqcjK4qrkdBtjwHds)(lshCL9lwEajv(6XzKqcjKqcjKqcjKqcP0v0KqsIjK(fP8Mwr1jzHlsm0ZvhGqH60pWsMHR9h4Ie3zNXzKqcjKqcjKqcjKqcj7QGwpssmHZiHesiHesiH06fWzKqcjKwVaoVEHggrL)FbS8ZZ1cjxHTp2DHOHapdlzgcSWRSTq1gdUyJpxRWAz1NxTpx3gz1iYyEYRxBmPLldKgeGgbRrniba0qT8ZZ1wGgG5DQjDSzywTGBD0qemR3XP6qyBJSAuWCdq)(F9AddOEBicM174u5CHTHYhxHg7)1RnyW1lWv(1NBikFfzSbimbJUnaZ7uqpxRJgEZ4MlqFUnE8t56XBkHeZ(1EoSA1g6cV2pnYkxKXHWb0Au(13pnUw(6vJYV(gtCaiZ6GCGhGeBtz9jtmd5G5ggq9whn4()RnV9tJpgrgfSxym4MU2c0NBFU9DOp3((Up3(KTpio6RQnKV8t5AN8lw4WG9feY(nlWcq8L73hMqHYUStOHYhx7KjZzUX763gFUwH1oauO5v77RgzyglJosRxasUcBdj4aNgG5vsyqbZ6kScqIb((Pb0RxdUm2(oarJJ5cQ8o5xSWHb7liK9BwGfG4l3VpmHcLDzhSgFmImEAVGEbgCtxBb6ZTpi67qFq0339brFY2hevBO8X1gCzS9DaIgzyglJtKliS(gpMLjMHCJpxRWA7NgFUwH1YSW524D9BJSAezmpzYCMB8U(TXNRvyTbxgBFUSqdbEgwYmeyHxHm)uU2yW9n4Ix)0mxyBWgZtc0idZyzeYx1O8RVpiAKHzSmoauO5vHu1henYWmwgN4YpLR99nen0fEDYK5m34D9BdU413pnYQrKXmdUPRTa952NBFh6ZTVV7ZTpz7ZTAdDHxdUm2(oardUqdjMq6ashAKHzSmc5RAu(1djxHTHedbgObuRzCd1AutFF1q5JRTFA8Xyz1pP9616OHhCeWYppxBUp3gzyglJWzZgf0U9tdUNRtZQXQRqFUnYWmwgbw4vq72GvVUwOgXfsNbMSY9NomwiDgYk7mWKvU)0HXYEaZyzSAFSqbAa)aqHMxTp3gdhak08Q9XUBdOxVozYCMBmadbyJ1hZn(ySm4MU2c0NBFquTr6Aekqd1KwVEOangbtkVavR2qnP1RfOrM7ptBFUtOXiys5fOp3juhvR2qmzY5c0iZ9NPTbtsSjbhwFvBaM3PIjtoxhnS30wGgJGjLxGQvBynIBbAmcMuEbQwTbS)WutA9AbAmcMuEbQwTbuJOYV(c0yemP8cuTAJmSvSanYC)zA7ZTXiys5fOp36OA1gcCOq5IGjDybAmcMuEbQwTAJ849QYzYEpTBoxhnS7j)6bgcBByaTMpgBJSAezm3pn0fEf0UnKjq5W5Ie7iXuYW9iXILZ1THru5)xal)8CTqYvy7JDxiAOw(55AlqdDiSTHiywVJnebZ6DCQoe22iRgfm3qemR3XPY5cBdLpUcnebZ6DeoGwJYV(gqb9Ik)6DYzCgjKqcj7QGwpsUWfjx4IKloVEbCgNXzCUHiywVJnGc6fv(17KZ4msiHesCOiXqpxDacfQt)alzgU2FGls)84NY1J3ucjM9R9C4poJKkF94msiHesiHesizxf06rsTGlsSZUjDSzygPRhNrcjKqAt5fNrcjKqcjKqcj7QGwpsqnP8IZiHesiHesiH06fWzKqcjKwVaoJesiHeoJesiHeoJesiHeoJesiHeoJesiHeoJesiHeoJesiHeoJesiHeoJesiHeoJesiHeoJesiHeoJesiHeoJesiHeoJesiHeoJZneLVIm2aeMGr3gEZ4MlqFUnE8t56XBkHeZ(1EoSA1g6cV2pnUw(6vJYV(gtCaiZ6GCGhGeBtz9jtmd5G5gYx(PCTVVHOXhJiJN2lOxGb301wG(KTpiQ2Wdocy5NNRn3NBdU413pnoMlOY77Glen4Ix)0mxyBWgZtc0Gl0WHrKXt7f0lG0bKo0q5JRTFAiWZdkOxu5)3gMuQbuRzCd1AutFhAW9CDAwnwDf6ZTA1g)7Zv2dUvBb \ No newline at end of file diff --git a/Complete Projects/Legion/Nightwell Energy/Shield.lua b/Complete Projects/Legion/Nightwell Energy/Shield.lua new file mode 100644 index 0000000..116302a --- /dev/null +++ b/Complete Projects/Legion/Nightwell Energy/Shield.lua @@ -0,0 +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 +aura_env.max = 0 \ No newline at end of file diff --git a/Complete Projects/Legion/Nightwell Energy/Stacks.lua b/Complete Projects/Legion/Nightwell Energy/Stacks.lua new file mode 100644 index 0000000..ff539d6 --- /dev/null +++ b/Complete Projects/Legion/Nightwell Energy/Stacks.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/Legion/Nightwell Energy/Text.lua b/Complete Projects/Legion/Nightwell Energy/Text.lua new file mode 100644 index 0000000..b49dec8 --- /dev/null +++ b/Complete Projects/Legion/Nightwell Energy/Text.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/Legion/Nightwell Energy/Todo b/Complete Projects/Legion/Nightwell Energy/Todo new file mode 100644 index 0000000..5f46088 --- /dev/null +++ b/Complete Projects/Legion/Nightwell Energy/Todo @@ -0,0 +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 diff --git a/Complete Projects/Legion/OneSecondTicker.lua b/Complete Projects/Legion/OneSecondTicker.lua new file mode 100644 index 0000000..f65c524 --- /dev/null +++ b/Complete Projects/Legion/OneSecondTicker.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/PPM.lua b/Complete Projects/Legion/PPM.lua new file mode 100644 index 0000000..5f6b2d7 --- /dev/null +++ b/Complete Projects/Legion/PPM.lua @@ -0,0 +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 +aura_env.expTime = 0 \ No newline at end of file diff --git a/Complete Projects/Legion/Premade Groups.lua b/Complete Projects/Legion/Premade Groups.lua new file mode 100644 index 0000000..a1c9f3c --- /dev/null +++ b/Complete Projects/Legion/Premade Groups.lua @@ -0,0 +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 +aura_env.grouperino = {} \ No newline at end of file diff --git a/Complete Projects/Legion/Prydaz.lua b/Complete Projects/Legion/Prydaz.lua new file mode 100644 index 0000000..296c91b --- /dev/null +++ b/Complete Projects/Legion/Prydaz.lua @@ -0,0 +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 +aura_env.absorb = 0 \ No newline at end of file diff --git a/Complete Projects/Legion/PrydazOLD.lua b/Complete Projects/Legion/PrydazOLD.lua new file mode 100644 index 0000000..e674504 --- /dev/null +++ b/Complete Projects/Legion/PrydazOLD.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/PrydazTimer.lua b/Complete Projects/Legion/PrydazTimer.lua new file mode 100644 index 0000000..812276a --- /dev/null +++ b/Complete Projects/Legion/PrydazTimer.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/PullTimer.lua b/Complete Projects/Legion/PullTimer.lua new file mode 100644 index 0000000..32ee9cc --- /dev/null +++ b/Complete Projects/Legion/PullTimer.lua @@ -0,0 +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 +]] diff --git a/Complete Projects/Legion/QuestSyncer.lua b/Complete Projects/Legion/QuestSyncer.lua new file mode 100644 index 0000000..f85051f --- /dev/null +++ b/Complete Projects/Legion/QuestSyncer.lua @@ -0,0 +1,400 @@ +--DISPLAY +function() + if aura_env.state then + return aura_env.state.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.state.pclass then + return aura_env.classColor(aura_env.state.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/Complete Projects/Legion/Raid Frame Glow.lua b/Complete Projects/Legion/Raid Frame Glow.lua new file mode 100644 index 0000000..d4eb4af --- /dev/null +++ b/Complete Projects/Legion/Raid Frame Glow.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/Raid Rolls.lua b/Complete Projects/Legion/Raid Rolls.lua new file mode 100644 index 0000000..b0d610b --- /dev/null +++ b/Complete Projects/Legion/Raid Rolls.lua @@ -0,0 +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 = "" diff --git a/Complete Projects/Legion/Raid loot DOESNT WORK.lua b/Complete Projects/Legion/Raid loot DOESNT WORK.lua new file mode 100644 index 0000000..170d275 --- /dev/null +++ b/Complete Projects/Legion/Raid loot DOESNT WORK.lua @@ -0,0 +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 = {} +aura_env.itemSubType = {} \ No newline at end of file diff --git a/Complete Projects/Legion/RaidCDs.lua b/Complete Projects/Legion/RaidCDs.lua new file mode 100644 index 0000000..f02caf7 --- /dev/null +++ b/Complete Projects/Legion/RaidCDs.lua @@ -0,0 +1,149 @@ +--DISPLAY +function() + if aura_env.state then + return aura_env.state.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/Complete Projects/Legion/RaidCooldownAlert.lua new file mode 100644 index 0000000..9f6560d --- /dev/null +++ b/Complete Projects/Legion/RaidCooldownAlert.lua @@ -0,0 +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 +aura_env.raidIDs = {} \ No newline at end of file diff --git a/Complete Projects/Legion/RaiderlosSA 2.0.lua b/Complete Projects/Legion/RaiderlosSA 2.0.lua new file mode 100644 index 0000000..645c43e --- /dev/null +++ b/Complete Projects/Legion/RaiderlosSA 2.0.lua @@ -0,0 +1,12 @@ +--COMBAT_LOG_EVENT_UNFILTERED +function(...) + local se = select(3, ...) + if se == "SPELL_CAST_START" or se == "SPELL_CAST_SUCCESS" then + local spell = select(14, ...) + spell = spell:gsub("%s", "_") + local soundfile = "Interface\\Sounds\\" .. spell .. ".ogg" + local success = PlaySoundFile(soundfile, "Master") + end +end + +--INIT diff --git a/Complete Projects/Legion/RaiderlosSA.lua b/Complete Projects/Legion/RaiderlosSA.lua new file mode 100644 index 0000000..7efcd0d --- /dev/null +++ b/Complete Projects/Legion/RaiderlosSA.lua @@ -0,0 +1,57 @@ +--COMBAT_LOG_EVENT_UNFILTERED +function(...) + local se = select(3, ...) + if se == "SPELL_CAST_START" then + local spell = select(14, ...) + if aura_env.spells[spell] == 1 then + if spell == "Shattering Star" then + PlaySoundFile("Interface\\AddOns\\SharedMedia_MyMedia\\sound\\Shattering Star.ogg","Master") + elseif spell == "Infernal Burning" then + PlaySoundFile("Interface\\AddOns\\SharedMedia_MyMedia\\sound\\Infernal Burning.ogg","Master") + elseif spell == "Phangs of Guilt" then + PlaySoundFile("Interface\\AddOns\\SharedMedia_MyMedia\\sound\\Phangs.ogg","Master") + elseif spell == "Hatching" then + PlaySoundFile("Interface\\AddOns\\SharedMedia_MyMedia\\sound\\Hatching.ogg","Master") + elseif spell == "Incorporeal Shot" then + PlaySoundFile("Interface\\AddOns\\SharedMedia_MyMedia\\sound\\Incorporeal Shot.ogg","Master") + elseif spell == "Moon Glaive" then + PlaySoundFile("Interface\\AddOns\\SharedMedia_MyMedia\\sound\\Moon Glaive.ogg","Master") + elseif spell == "Burden of Pain" then + PlaySoundFile("Interface\\AddOns\\SharedMedia_MyMedia\\sound\\Burden.ogg","Master") + end + end + end + if se == "SPELL_CAST_SUCCESS" then + local spell = select(14, ...) + if aura_env.casts[spell] == 1 then + if spell == "Moon Burn" then + PlaySoundFile("Interface\\AddOns\\SharedMedia_MyMedia\\sound\\Moon Burn.ogg","Master") + elseif spell == "Glaive Storm" then + PlaySoundFile("Interface\\AddOns\\SharedMedia_MyMedia\\sound\\Glaive Storm.ogg","Master") + elseif spell == "Lunar Fire" then + PlaySoundFile("Interface\\AddOns\\SharedMedia_MyMedia\\sound\\Lunar Fire.ogg","Master") + elseif spell == "Slicing Tornado" then + PlaySoundFile("Interface\\AddOns\\SharedMedia_MyMedia\\sound\\Slicing Tornado.ogg","Master") + end + end + end +end + +--INIT +aura_env.spells = +{ + ["Shattering Star"] = 1, + ["Infernal Burning"] = 1, + ["Phangs of Guilt"] = 1, + ["Hatching"] = 1, + ["Incorporeal Shot"] = 1, + ["Moon Glaive"] = 1, + ["Burden of Pain"] = 1, +} +aura_env.casts = +{ + ["Moon Burn"] = 1, + ["Glaive Storm"] = 1, + ["Lunar Fire"] = 1, + ["Slicing Tornado"] = 1, +} \ No newline at end of file diff --git a/Complete Projects/Legion/RedpilledFoFDildos.lua b/Complete Projects/Legion/RedpilledFoFDildos.lua new file mode 100644 index 0000000..eab2fef --- /dev/null +++ b/Complete Projects/Legion/RedpilledFoFDildos.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/Rejuv.lua b/Complete Projects/Legion/Rejuv.lua new file mode 100644 index 0000000..53038a3 --- /dev/null +++ b/Complete Projects/Legion/Rejuv.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/Reputation for Beloved.lua b/Complete Projects/Legion/Reputation for Beloved.lua new file mode 100644 index 0000000..460ea78 --- /dev/null +++ b/Complete Projects/Legion/Reputation for Beloved.lua @@ -0,0 +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 +aura_env.repTime = GetTime() \ No newline at end of file diff --git a/Complete Projects/Legion/Reputations for Insane.lua b/Complete Projects/Legion/Reputations for Insane.lua new file mode 100644 index 0000000..d2ea734 --- /dev/null +++ b/Complete Projects/Legion/Reputations for Insane.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/Legion/Rogue Sniffer 9000/Target Direction.lua b/Complete Projects/Legion/Rogue Sniffer 9000/Target Direction.lua new file mode 100644 index 0000000..a62dc74 --- /dev/null +++ b/Complete Projects/Legion/Rogue Sniffer 9000/Target Direction.lua @@ -0,0 +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 +aura_env.startTime = GetTime() \ No newline at end of file diff --git a/Complete Projects/Legion/Rogue Sniffer 9000/Target Distance.lua b/Complete Projects/Legion/Rogue Sniffer 9000/Target Distance.lua new file mode 100644 index 0000000..08c351b --- /dev/null +++ b/Complete Projects/Legion/Rogue Sniffer 9000/Target Distance.lua @@ -0,0 +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 +aura_env.vertiDista = 0 \ No newline at end of file diff --git a/Complete Projects/Legion/Rogue Sniffer 9000/Target Zone.lua b/Complete Projects/Legion/Rogue Sniffer 9000/Target Zone.lua new file mode 100644 index 0000000..cc34e2b --- /dev/null +++ b/Complete Projects/Legion/Rogue Sniffer 9000/Target Zone.lua @@ -0,0 +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 = "" +aura_env.area = "" \ No newline at end of file diff --git a/Complete Projects/Legion/Rogue Stealth.lua b/Complete Projects/Legion/Rogue Stealth.lua new file mode 100644 index 0000000..4da97b9 --- /dev/null +++ b/Complete Projects/Legion/Rogue Stealth.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/RuneDinger.lua b/Complete Projects/Legion/RuneDinger.lua new file mode 100644 index 0000000..fb4e662 --- /dev/null +++ b/Complete Projects/Legion/RuneDinger.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/SaveCombatLog.lua b/Complete Projects/Legion/SaveCombatLog.lua new file mode 100644 index 0000000..9b9981d --- /dev/null +++ b/Complete Projects/Legion/SaveCombatLog.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/Legion/Sea-Star Proc.lua b/Complete Projects/Legion/Sea-Star Proc.lua new file mode 100644 index 0000000..f892875 --- /dev/null +++ b/Complete Projects/Legion/Sea-Star Proc.lua @@ -0,0 +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"] +aura_env.proc = CustomTrash["SeaStar"]["Procs"] \ No newline at end of file diff --git a/Complete Projects/Legion/Shield proc.lua b/Complete Projects/Legion/Shield proc.lua new file mode 100644 index 0000000..ebbf2cd --- /dev/null +++ b/Complete Projects/Legion/Shield proc.lua @@ -0,0 +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 +aura_env.shields = 0 \ No newline at end of file diff --git a/Complete Projects/Legion/Shin Thing.lua b/Complete Projects/Legion/Shin Thing.lua new file mode 100644 index 0000000..f30de4d --- /dev/null +++ b/Complete Projects/Legion/Shin Thing.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/Legion/Skinning Skill.lua b/Complete Projects/Legion/Skinning Skill.lua new file mode 100644 index 0000000..157b083 --- /dev/null +++ b/Complete Projects/Legion/Skinning Skill.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/Legion/SoTR Counter.lua b/Complete Projects/Legion/SoTR Counter.lua new file mode 100644 index 0000000..54497af --- /dev/null +++ b/Complete Projects/Legion/SoTR Counter.lua @@ -0,0 +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() +aura_env.oldcharges = 0 \ No newline at end of file diff --git a/Complete Projects/Legion/SoTR Mitigation.lua b/Complete Projects/Legion/SoTR Mitigation.lua new file mode 100644 index 0000000..c97a8ef --- /dev/null +++ b/Complete Projects/Legion/SoTR Mitigation.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/Legion/Soul Leech.lua b/Complete Projects/Legion/Soul Leech.lua new file mode 100644 index 0000000..b24c822 --- /dev/null +++ b/Complete Projects/Legion/Soul Leech.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/Legion/Spam Begone.lua b/Complete Projects/Legion/Spam Begone.lua new file mode 100644 index 0000000..bd1b403 --- /dev/null +++ b/Complete Projects/Legion/Spam Begone.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/Spell Charges/01.lua b/Complete Projects/Legion/Spell Charges/01.lua new file mode 100644 index 0000000..ee063d8 --- /dev/null +++ b/Complete Projects/Legion/Spell Charges/01.lua @@ -0,0 +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 + +aura_env.spell= "Judgment" \ No newline at end of file diff --git a/Complete Projects/Legion/Spell Charges/12.lua b/Complete Projects/Legion/Spell Charges/12.lua new file mode 100644 index 0000000..c2836c0 --- /dev/null +++ b/Complete Projects/Legion/Spell Charges/12.lua @@ -0,0 +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 + +aura_env.spell= "Judgment" \ No newline at end of file diff --git a/Complete Projects/Legion/Spell Charges/23.lua b/Complete Projects/Legion/Spell Charges/23.lua new file mode 100644 index 0000000..82b173f --- /dev/null +++ b/Complete Projects/Legion/Spell Charges/23.lua @@ -0,0 +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 + +aura_env.spell= "Judgment" \ No newline at end of file diff --git a/Complete Projects/Legion/TSU - DAI SPELL.lua b/Complete Projects/Legion/TSU - DAI SPELL.lua new file mode 100644 index 0000000..ef67533 --- /dev/null +++ b/Complete Projects/Legion/TSU - DAI SPELL.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/TSU - EnemyPlayerHealth - CLEV.lua b/Complete Projects/Legion/TSU - EnemyPlayerHealth - CLEV.lua new file mode 100644 index 0000000..4686b56 --- /dev/null +++ b/Complete Projects/Legion/TSU - EnemyPlayerHealth - CLEV.lua @@ -0,0 +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.state then + return aura_env.classColor(aura_env.state.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/Complete Projects/Legion/TSU - EnemyPlayerHealth.lua new file mode 100644 index 0000000..6e19d70 --- /dev/null +++ b/Complete Projects/Legion/TSU - EnemyPlayerHealth.lua @@ -0,0 +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.state then + return aura_env.state.r, aura_env.state.g, aura_env.state.b, aura_env.state.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/Complete Projects/Legion/TSU - Explosives.lua new file mode 100644 index 0000000..68cb503 --- /dev/null +++ b/Complete Projects/Legion/TSU - Explosives.lua @@ -0,0 +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.state then + local c = aura_env.range(aura_env.state.hp, 0, aura_env.state.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/Complete Projects/Legion/TSU - GroupConcordance.lua new file mode 100644 index 0000000..0070347 --- /dev/null +++ b/Complete Projects/Legion/TSU - GroupConcordance.lua @@ -0,0 +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.state then + return aura_env.classColor(aura_env.state.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/Complete Projects/Legion/TSU - HealerMana.lua new file mode 100644 index 0000000..2742b35 --- /dev/null +++ b/Complete Projects/Legion/TSU - HealerMana.lua @@ -0,0 +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.state then + return aura_env.classColor(aura_env.state.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/Complete Projects/Legion/TSU - Item Monitor.lua new file mode 100644 index 0000000..8e1d6a3 --- /dev/null +++ b/Complete Projects/Legion/TSU - Item Monitor.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/Legion/TSU - Jana do a spell.lua b/Complete Projects/Legion/TSU - Jana do a spell.lua new file mode 100644 index 0000000..e773b79 --- /dev/null +++ b/Complete Projects/Legion/TSU - Jana do a spell.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/TSU - PlayerEvaluator.lua b/Complete Projects/Legion/TSU - PlayerEvaluator.lua new file mode 100644 index 0000000..b95acfc --- /dev/null +++ b/Complete Projects/Legion/TSU - PlayerEvaluator.lua @@ -0,0 +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.state.unit then + if aura_env.state.name ~= UnitName(aura_env.state.unit) then return end + local guild, rank = GetGuildInfo(aura_env.state.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.state.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/Complete Projects/Legion/TSU - RepBars.lua new file mode 100644 index 0000000..3b21cb3 --- /dev/null +++ b/Complete Projects/Legion/TSU - RepBars.lua @@ -0,0 +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 +aura_env.reps = {} \ No newline at end of file diff --git a/Complete Projects/Legion/TSU - Shitty kara trinket.lua b/Complete Projects/Legion/TSU - Shitty kara trinket.lua new file mode 100644 index 0000000..658b750 --- /dev/null +++ b/Complete Projects/Legion/TSU - Shitty kara trinket.lua @@ -0,0 +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.state then + return aura_env.classColor(aura_env.state.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/Complete Projects/Legion/TSU - Spell Alert.lua new file mode 100644 index 0000000..5124a53 --- /dev/null +++ b/Complete Projects/Legion/TSU - Spell Alert.lua @@ -0,0 +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.state and aura_env.state.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/Complete Projects/Legion/TSU - Spells.lua new file mode 100644 index 0000000..ec18945 --- /dev/null +++ b/Complete Projects/Legion/TSU - Spells.lua @@ -0,0 +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.state.unit then + aura_env.glow(aura_env.state.unit, 1) +end + +--ON HIDE +if aura_env.state.unit then + aura_env.glow(aura_env.state.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/Complete Projects/Legion/Target TTD.lua b/Complete Projects/Legion/Target TTD.lua new file mode 100644 index 0000000..3270439 --- /dev/null +++ b/Complete Projects/Legion/Target TTD.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/Taunt God.lua b/Complete Projects/Legion/Taunt God.lua new file mode 100644 index 0000000..888de24 --- /dev/null +++ b/Complete Projects/Legion/Taunt God.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/Taunt.lua b/Complete Projects/Legion/Taunt.lua new file mode 100644 index 0000000..88c304e --- /dev/null +++ b/Complete Projects/Legion/Taunt.lua @@ -0,0 +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 = "" diff --git a/Complete Projects/Legion/Titanguard.lua b/Complete Projects/Legion/Titanguard.lua new file mode 100644 index 0000000..f9cb0ee --- /dev/null +++ b/Complete Projects/Legion/Titanguard.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/Trinket Equip.lua b/Complete Projects/Legion/Trinket Equip.lua new file mode 100644 index 0000000..03e030c --- /dev/null +++ b/Complete Projects/Legion/Trinket Equip.lua @@ -0,0 +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 +} +WeakAuras.ScanEvents("PLAYER_REGEN_ENABLED") \ No newline at end of file diff --git a/Complete Projects/Legion/TrinketTest.lua b/Complete Projects/Legion/TrinketTest.lua new file mode 100644 index 0000000..f1d40cd --- /dev/null +++ b/Complete Projects/Legion/TrinketTest.lua @@ -0,0 +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 +aura_env.swings = 0 \ No newline at end of file diff --git a/Complete Projects/Legion/Valentine's Charms.lua b/Complete Projects/Legion/Valentine's Charms.lua new file mode 100644 index 0000000..8271a8d --- /dev/null +++ b/Complete Projects/Legion/Valentine's Charms.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/Legion/Visp Bogec.lua b/Complete Projects/Legion/Visp Bogec.lua new file mode 100644 index 0000000..8a94a7d --- /dev/null +++ b/Complete Projects/Legion/Visp Bogec.lua @@ -0,0 +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 diff --git a/Complete Projects/Legion/Warlock Artifact.lua b/Complete Projects/Legion/Warlock Artifact.lua new file mode 100644 index 0000000..0b7f3ef --- /dev/null +++ b/Complete Projects/Legion/Warlock Artifact.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/Complete Projects/Legion/_Big ass hammer thing.lua b/Complete Projects/Legion/_Big ass hammer thing.lua new file mode 100644 index 0000000..c0d0a87 --- /dev/null +++ b/Complete Projects/Legion/_Big ass hammer thing.lua @@ -0,0 +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 +aura_env.owner = 0 \ No newline at end of file diff --git a/Complete Projects/Legion/_GlobalTicker.lua b/Complete Projects/Legion/_GlobalTicker.lua new file mode 100644 index 0000000..b78019e --- /dev/null +++ b/Complete Projects/Legion/_GlobalTicker.lua @@ -0,0 +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 diff --git a/Complete Projects/trash/Button b/Complete Projects/trash/Button new file mode 100644 index 0000000..26fdf89 --- /dev/null +++ b/Complete Projects/trash/Button @@ -0,0 +1,11 @@ + + +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 new file mode 100644 index 0000000..61732ae --- /dev/null +++ b/Complete Projects/trash/Cunting shit 2.lua @@ -0,0 +1,38 @@ +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 new file mode 100644 index 0000000..365996e --- /dev/null +++ b/Complete Projects/trash/Cunting shit.lua @@ -0,0 +1,31 @@ +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/Favorite Colors b/Favorite Colors new file mode 100644 index 0000000..ab2da36 --- /dev/null +++ b/Favorite Colors @@ -0,0 +1,10 @@ +78cb00 greenish +3366ff blueish +ff8100 orang +ec32d9 pink +f42069 pinkish +b4da55 greenish +ff005d pinkish + + +/run SetCVar("nameplateOverlapV", 1) \ No newline at end of file diff --git a/Metadata for userdata!!.txt b/Metadata for userdata!!.txt new file mode 100644 index 0000000..6e5fd06 --- /dev/null +++ b/Metadata for userdata!!.txt @@ -0,0 +1 @@ +/dump getmetatable(LFGListApplicationViewerScrollFrameButton3.Member1.Name) \ No newline at end of file diff --git a/ModelResearch.lua b/ModelResearch.lua new file mode 100644 index 0000000..85d1de2 --- /dev/null +++ b/ModelResearch.lua @@ -0,0 +1,24 @@ +--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/README.txt b/README.txt new file mode 100644 index 0000000..1cc2117 --- /dev/null +++ b/README.txt @@ -0,0 +1,9 @@ +apparently when using allstates +state is available in the animations tab (aura_env.state) +also the icon +aura_env.region.icon +aura_env.cloneId does something too maybe +taken from asakawa :) + +aura_env.region:SetDesaturated(true) +easy desaturate \ No newline at end of file diff --git a/Random Trash/Account with herbalism dudu.txt b/Random Trash/Account with herbalism dudu.txt new file mode 100644 index 0000000..f847cc7 --- /dev/null +++ b/Random Trash/Account with herbalism dudu.txt @@ -0,0 +1,6 @@ +sponge bob +sigarezest1 + + +overlordack +stefan2004 \ No newline at end of file diff --git a/Random Trash/Asakawa debuffs on nameplate non tsu.lua b/Random Trash/Asakawa debuffs on nameplate non tsu.lua new file mode 100644 index 0000000..8ec5a5d --- /dev/null +++ b/Random Trash/Asakawa debuffs on nameplate non tsu.lua @@ -0,0 +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.state.unit, aura_env.region) + +aura_env.UpdateClone(aura_env.state.unit, aura_env.region) + +function() + if aura_env.state then + aura_env.UpdateClone(aura_env.state.unit, aura_env.region) + end +end \ No newline at end of file diff --git a/Random Trash/GM Chat b/Random Trash/GM Chat new file mode 100644 index 0000000..562b825 --- /dev/null +++ b/Random Trash/GM Chat @@ -0,0 +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:27 AM] [P] [Kidon]: (880.6) o.o \ No newline at end of file diff --git a/Random Trash/Glowy Nameplate.lua b/Random Trash/Glowy Nameplate.lua new file mode 100644 index 0000000..4fc5139 --- /dev/null +++ b/Random Trash/Glowy Nameplate.lua @@ -0,0 +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.state.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.state.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/Random Trash/Hashing/1.lua new file mode 100644 index 0000000..5525d90 --- /dev/null +++ b/Random Trash/Hashing/1.lua @@ -0,0 +1,117 @@ +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) \ No newline at end of file diff --git a/Random Trash/Hashing/2.lua b/Random Trash/Hashing/2.lua new file mode 100644 index 0000000..054a92a --- /dev/null +++ b/Random Trash/Hashing/2.lua @@ -0,0 +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 +findcollision(hashtable, cc) \ No newline at end of file diff --git a/Random Trash/Herbs/Aethril.txt b/Random Trash/Herbs/Aethril.txt new file mode 100644 index 0000000..ba4e2d6 --- /dev/null +++ b/Random Trash/Herbs/Aethril.txt @@ -0,0 +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 46 61.02 \ No newline at end of file diff --git a/Random Trash/Herbs/Dreamleaf.txt b/Random Trash/Herbs/Dreamleaf.txt new file mode 100644 index 0000000..a669445 --- /dev/null +++ b/Random Trash/Herbs/Dreamleaf.txt @@ -0,0 +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 21.81 69.82 \ No newline at end of file diff --git a/Random Trash/Herbs/Fjarnskaggl.txt b/Random Trash/Herbs/Fjarnskaggl.txt new file mode 100644 index 0000000..c5f6374 --- /dev/null +++ b/Random Trash/Herbs/Fjarnskaggl.txt @@ -0,0 +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 60.84 55.71 \ No newline at end of file diff --git a/Random Trash/Herbs/Foxflower.txt b/Random Trash/Herbs/Foxflower.txt new file mode 100644 index 0000000..e367160 --- /dev/null +++ b/Random Trash/Herbs/Foxflower.txt @@ -0,0 +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 42.5 61.79 \ No newline at end of file diff --git a/Random Trash/Herbs/Icecap.txt b/Random Trash/Herbs/Icecap.txt new file mode 100644 index 0000000..caafd1f --- /dev/null +++ b/Random Trash/Herbs/Icecap.txt @@ -0,0 +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 diff --git a/Random Trash/Herbs/Mountain Silversage.txt b/Random Trash/Herbs/Mountain Silversage.txt new file mode 100644 index 0000000..d37e98e --- /dev/null +++ b/Random Trash/Herbs/Mountain Silversage.txt @@ -0,0 +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 22.41 58.99 \ No newline at end of file diff --git a/Random Trash/Herbs/Starlight Rose.txt b/Random Trash/Herbs/Starlight Rose.txt new file mode 100644 index 0000000..97feabf --- /dev/null +++ b/Random Trash/Herbs/Starlight Rose.txt @@ -0,0 +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 22.84 19.42 \ No newline at end of file diff --git a/Random Trash/Herbs/_How2Find.txt b/Random Trash/Herbs/_How2Find.txt new file mode 100644 index 0000000..c8bebc5 --- /dev/null +++ b/Random Trash/Herbs/_How2Find.txt @@ -0,0 +1,2 @@ +(\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/Random Trash/Interesting Shit/BARS QUESTIONMARK.lua new file mode 100644 index 0000000..b3a3c18 --- /dev/null +++ b/Random Trash/Interesting Shit/BARS QUESTIONMARK.lua @@ -0,0 +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.state then + if aura_env.state.value > 40 then + r,g,b = 1,1,0 + end + if aura_env.state.value > 80 then + r,g,b = 1,0.5,0 + end + if aura_env.state.value > 95 then + r,g,b = 1,0,0 + end + local region = WeakAuras.GetRegion(aura_env.id, aura_env.state.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.state and aura_env.state.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/Random Trash/Interesting Shit/SeaStar.lua new file mode 100644 index 0000000..4050ada --- /dev/null +++ b/Random Trash/Interesting Shit/SeaStar.lua @@ -0,0 +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 + diff --git a/Random Trash/Some stuff.lua b/Random Trash/Some stuff.lua new file mode 100644 index 0000000..a2d6217 --- /dev/null +++ b/Random Trash/Some stuff.lua @@ -0,0 +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 diff --git a/Random Trash/Spells of some sort.txt b/Random Trash/Spells of some sort.txt new file mode 100644 index 0000000..95ca855 --- /dev/null +++ b/Random Trash/Spells of some sort.txt @@ -0,0 +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 +Death from Above 152150 \ No newline at end of file diff --git a/Random Trash/TomTom/2.lua b/Random Trash/TomTom/2.lua new file mode 100644 index 0000000..3fcc160 --- /dev/null +++ b/Random Trash/TomTom/2.lua @@ -0,0 +1,51 @@ +-- 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 \ No newline at end of file diff --git a/Random Trash/TomTom/3.lua b/Random Trash/TomTom/3.lua new file mode 100644 index 0000000..dddbc61 --- /dev/null +++ b/Random Trash/TomTom/3.lua @@ -0,0 +1,68 @@ +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 \ No newline at end of file diff --git a/Random Trash/TomTom/TomTom.lua b/Random Trash/TomTom/TomTom.lua new file mode 100644 index 0000000..d57bfeb --- /dev/null +++ b/Random Trash/TomTom/TomTom.lua @@ -0,0 +1,1411 @@ +--[[-------------------------------------------------------------------------- +-- 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/Random Trash/idk/idk.lua new file mode 100644 index 0000000..beea49e --- /dev/null +++ b/Random Trash/idk/idk.lua @@ -0,0 +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 +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/Random Trash/idk/idk2.lua new file mode 100644 index 0000000..a35b3c7 --- /dev/null +++ b/Random Trash/idk/idk2.lua @@ -0,0 +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" +} \ No newline at end of file diff --git a/Random Trash/idk/idk3.lua b/Random Trash/idk/idk3.lua new file mode 100644 index 0000000..9e14bb3 --- /dev/null +++ b/Random Trash/idk/idk3.lua @@ -0,0 +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" +} \ No newline at end of file diff --git a/Sort Array.lua b/Sort Array.lua new file mode 100644 index 0000000..0a06213 --- /dev/null +++ b/Sort Array.lua @@ -0,0 +1,19 @@ +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/WA codes/BossHpNameplate (WA CODE).txt new file mode 100644 index 0000000..5fd62a5 --- /dev/null +++ b/WA codes/BossHpNameplate (WA CODE).txt @@ -0,0 +1 @@ +devy2bGiixsLO6tQezuKsDksjRIuPWSGYTGQ2Lq5xsQKgMkLJjGLPc6zKQQPPc11iK02KurFtLOmosLsNtsL4EQe2hPsroiuXcvs6HqLAIKQYfvb2OKQ(OscJuOQtsQIvQIEPkKAMcvUjPkTtb9tvsnuvsAPsQWtfzQkvxfQKTsiXxjvQgRkeDwviyTKkf1BvjH5kPsDxvs0Ev8xcXGPomOflj9yLyYc5YaBwG(mHA0sItlLvtQKxtQy2s1Tvk7wIFtYWjfhxfcTCIEUOMUQUobBxLQVti14vsDEjL1RKO3RcjDFviX(rpbM9jLN0HX0FSlBsBtkAsrZ(KGlF7oyx2elgi1RkcmH3MeyTgyjcenRoPmOh8QQw5N0QxVVFTEJ7G63NuTRdgmd(j8qr92KkcB7YMyXazEcdmPw0KwvLZXRH(q6vivcAMuxbJM9j9WoO8Z(K2e6FB2NF(jjKbIS0H58uDss4cy2N0Mq)BZ(8ZpPGWLVPkZ(K2e6FB2NF(jP5UMh2bLF2N0Mq)BZ(8ZpjPQdM9jTj0)2Sp)8tkQfmyBrO)1M9jTj0)2Sp)8ZpjjqCtv2RPbmjXsLGM5N0YSpHbM9j9G1F9DO48KcvfWKYpCrNCQTsWeE4XtsidKISEcVnPOwwthwBhS(N0LVmPAxhmyg8t4HhpPGkjqSujuIWTQRKZ(egycdmHhoHbMq9pHbMWJNWaZpPQkzeqIBvxjN9jmWegycpCcdmH6FcdmHhpH3IjQZpPmCdSdw)csWS6KKQh(GDW6FsXDq97tkOQ813HIZt6ACThNEcpysTfvrKfvxjN9jmWegycpCcdmH6FcdmHhpHbMFsvHsCR6k5SpHbMWBt4Ht4Tju)t4Tj84jmW8tkcKHVGe(GP6KKQh(nvzcVnPGQYpPqCeKWSi7aqzvvpAsznqPoxhmyg8hHj82KwKknIuBcVf74atkOscelvcLODW6xqcM0oy9lib56oPb074S8T7WVPkxFhi7WA56(GLEttgissOmPfPsZeEl2XbMu(Hl6KNQtQAhuI0RkcmPvJ7Gq9nPwP9ISO200bpiAcdmPhS(fKGjjkcv0NIgp9v7WwHw3R0EWKEW6VEv5NuiocsywKDaOSQQhnP8dx0jxVQ8tkehbjmlYoauwv1JMuwduQZuDslQnnsqopvN032aY6vLFsH4iiHzr2bGYQQE0KGDnvGtyGjvvjJas9uYGFcdeysvHl6iwQekrxhmyg8t4Ht6bRFCR6k5SpHbMWat4HtyGju)tyGj84jmW8tkRbk1b3QUso7tyGjmWeE4egyc1)egycpEcdm)KYAGsDUoyWm4pYj82KKaXnvzVMgWKEW6FsrTSMoS2oy9hhi4pPlFzslc5xTTdw)tkOqz5BQI2AXtAAA6UAb2PRQY54A5N(cEstttFu5jnnnnnnnnkPJsQPMuvqy0iCkQnyVgcJgTlB9EdUgHrJ2Blvufegn6OLQSqgHrJWPliBGocJgTQ6HLw(ry0iCeeliry0Od6TmSebqy0Ovi0VueSGWOXJpSjUYxr1J4jnnnnnnnncNnyxmCJwfKoRe6zegnsp9ETmSuGimAuAdMRK10EacJgD0cYl9WUkJWOXJF16iEEstttttttJwbqgPqy0O67WnGOLa4xbHrJWj6ElRK06f0HLiPqgHrJhpUvjEstttttttJwrh2IG9wgHrJUgQtfau(imAK(KGmuQkimAKki9rcV3eYimA841x878KMMMMMMMgDvOuxGCfegnkoyun64Hpyr16imAK(aanvbqzecJgLasnGYlBRry0iDxc)k0QG04SYCfOeIWOXJ)afo8KMMMMMMMgfFTTiyVJWOrXxtQlicJgvpOiRjry0OKoQ7WEecJgDDuTccJgp(4vIcpPPPPPPPPrhHTMuvqy0O4HYQqPQGWOrXd61GimA841RkXtAAAAAAAAuDO0ztjHimAeU6qPsSyegnkekHRHzegnsFqPyPqhHrJhFyC8KMMMMMMMgPN7WsnjcJgHBLm)ToCncJgDKqDGDegnke2V03KqegnsuGLiPkJWOXJhh5IOH14jnnnnnnnnkb7FfGS1ry0i9uoIcTC7vs6DLCduqy0iCYvUKyvFdHrJwrhUsGeHrJWTsgblq66bDenE8IIAx35jnnn9rHN0000D1cStReEncp9f0iepPPPP5jnnnDqLKUrFbDam6JVrhP4jnnnnnnnDqLKwx0xqhaJ(Hv7GyIbFr7QQCoUw(1IosXtAAAAAAAAAAAA84BbPXvP9HWnG2OcCdOPdFaIowm6Mw0xCbDvvohxl)xHUUs6VcOWtAAAAAAAAAAA6wqACvA)bRB5pRnQa3aA6WhGOJfJUPf9xbu4jnnnnnnnnnnnnnnnDliD(LTI4yBWFPI25x2kIJ1vIgi1gxL2hc3aAJkWnGMo8bi6yXOBAPfgD(LTI4yDLObsTRQY54A5)k01vQLw0FfqHN00000000000000000000kHxJWtFbnUkTpeUb0gvGBanD4dq0XIr30IN00000000000000000000vLaOo8KMMMMMMMMMMMMMMMguI4jnnnnnnnnnnnnOeXtAAAAAAAAqjIN0000GsepPPPPLGxqwOvcVgHNNGs0KQcL6PuVuv(z1jLFO8XPiUdMWBtkcKHVGe(GvHl6iwQekrt1jve22LnXIbY8egysWLVDhSlBIfdK6vfbMq8bUnPQWfDelvcLiCR6k5SpHbMWBt4Ht4Tju)t4Tj84jmW8t6bR)uBLGj8WJNuwduQtDOE43uLj82KaLiCkI7Gju)15Tj1wuLP6KEztSyGC2N0xtdyslc5xTnPfH8R2e5RPbmP8dFH8KweYVAtKkTiWK(2giAslc5xTnPGcLLVPkARfpPPPP7QfyNUQkNJRLF6l4jnnn9rLN00000000OKokPMAsvbHrJWPO2G9AimA0US17n4AegnAVTurvqy0OJwQYczegncNUGSb6imA0QQhwA5hHrJWrqSGeHrJoO3YWseaHrJwHq)srWccJgp(WM4kFfvpIN00000000iC2GDXWnAvq6SsONry0i9071YWsbIWOrPnyUswt7bimA0rliV0d7QmcJgp(vRJ45jnnnnnnnnAfazKcHrJQVd3aIwcGFfegncNO7TSssRxqhwIKczegnE84wL4jnnnnnnnnAfDylc2Bzegn6AOovaq5JWOr6tcYqPQGWOrQG0hj8EtiJWOXJxFXVZtAAAAAAAA0vHsDbYvqy0O4Gr1OJh(GfvRJWOr6da0ufaLrimAuci1akVSTgHrJ0Dj8RqRcsJZkZvGsicJgp(du4WtAAAAAAAAu812IG9ocJgfFnPUGimAu9GISMeHrJs6OUd7rimA01r1kimA84Jxjk8KMMMMMMMgDe2AsvbHrJIhkRcLQccJgfpOxdIWOXJxVQepPPPPPPPPr1HsNnLeIWOr4QdLkXIry0OqOeUgMry0i9bLILcDegnE8HXXtAAAAAAAAKEUdl1KimAeUvY836W1imA0rc1b2ry0Oqy)sFtcry0irbwIKQmcJgpECKlIgwJN00000000OeS)vaYwhHrJ0t5ik0YTxjP3vYnqbHrJWjx5sIv9negnAfD4kbsegnc3kzeSaPRh0r04XlkQDDNN0000hfEsttt3vlWoTs41i80xqJq8KMMMMN0000bvs6g9f0bWOp(gDKIN00000000bvsADrFbDam6hwTdIjg8fTRQY54A5xl6ifpPPPPPPPPPPPPXJVfKgxL2hc3aAJkWnGMo8bi6yXOBArFXf0vv5CCT8Ff66kP)kGcpPPPPPPPPPPPPBbPXvP9hSUL)S2OcCdOPdFaIowm6Mw0FfqHN0000000000000000TG05x2kIJTb)LkANFzRiowxjAGuBCvAFiCdOnQa3aA6WhGOJfJUPLwy05x2kIJ1vIgi1UQkNJRL)RqxxPwAr)vafEstttttttttttttttttttlbVGSq)sbapPPPPPPPPPPPPPPPPbLiEstttttttttttdkr8KMMMMMMMguI4jnnnnOeXtqjAsczGicL2pRoPLkGfDMKGMi4dMKqbChu(jbfE18t6bR)P6KQQKra51bdMb)ekQtk)TfDQPpbj8BQYuDsznqPoX3IIaLjfEGOCqDmPOwwthwBhS(RJM4k)KUCntkRbk1r3BrFLjmWTjvb0ex5N6f168W6IOE7y9xN15nrnG(pu3obXFSUDsFBdiRVdfNNuOQaMuqv5tTvcMWdVnPSgOuNv7GsKEvrGjHJ(03KQcx0jsQ0GBvxjN9jmWegycpCcdmH6FcdmHhpH3IjQZpPQWfDelvcLODW6xqcM0oy9lib56oPb074S8T7WVPkxFhi7WA56(GLEttgissOmPVTbKt1jvvjJaYvHl6ejvAM0Q92kxjugrVRu9VPzsRuP2MWBtkQL1Lqz5B3btc27tARjLk5uDsvvYiG8GiXGjfQkGjvvjJaYuBLGjmqDoPSgOuN6q9WVPk6vfbMeo4A)6j1wufrYTiWKI7G63NuvLmciNQtkcKHVGe(G6vsGyPsOenvNuwduQt8GM4k)eQ)BtQRGrZ(KEyhu(zFsBc9Vn7Zp)KIAbd2we6FTzFsBc9Vn7Zp)KKQoy2N0Mq)BZ(8Zpjn318WoO8Z(K2e6FB2NF(jjHlGzFsBc9Vn7Zp)Kccx(MQm7tAtO)TzF(5NFs5hUOtU(ouCEsHQcys5hUOtg3QUso7tyGjmWeE4egyc1)egycpEcdm)K(2gqMARemHhE8KArtAvvohc3atkRbk1zhS(fKGjPNYdKbHlG6g3W83kIxfkRBCPh84gM)wr8Qqj(KgOuNjfuc3aPxcF4eE8KeDl6Rm1lQ3QZ6uuf1B1POESOQF9xN6)Wji(JRltsidKIuBcVnPVTbK4w1vYzFcdmHbMWdNWatO(NWat4XtyG5NuRChiZGP6KYAGsD0hidFbjyQojLSbkp8BQYKI)66qp6MVoChN4M0IuPrK1t4TyhhysqHxnRo)eE4SpjHmqksTj82KYpCrNCQTsWeE4XtsidKISEcVnPOwwthwBhS(N0LVmPmCdSdw)csWS6KGlFtvYZ(KAL2p7tksjYIq(vBZQtAri)QTjbfKqraL7XQQY541qFbDaEcfKqraL7XQQYz9cxhVg6lOdWtOGekcOCpwvvoFvGK(c6aZp)KcQkF9DO48KUgx7XPNWdMug0dEvvR8tA1R33VwVtsQE43uLj82KwKknIuBcVf74atkOscelvcLODW6xqcM0oy9lib56oPb074S8T7WVPkxFhi7WA56(GLEttgissOmjjqCtv2RPbmjOGewfkNu1oOePxveysRg3bH6BsTs7fzrTPPdEq0egyspy9libts3f3H58KEW6VEv5NuiocsywKDaOSQQhnP8dx0jxVQ8tkehbjmlYoauwv1JM0IAtJeKZt1j9TnGSEv5NuiocsywKDaOSQQhnPQWfDelvcLORdgmd(j8WjPe(ERaM014Apo9eEWKwuDLC2NWatyGj8WjmWeQ)jmWeE8egy(j9G1FQTsWeE4TjTiKF12oy9pPGcLLVPkARfpPPPP7QfyNUQkNJRLF6l4jnnn9rLN00000000OKokPMAsvbHrJWPO2G9AimA0US17n4AegnAVTurvqy0OJwQYczegncNUGSb6imA0QQhwA5hHrJWrqSGeHrJoO3YWseaHrJwHq)srWccJgp(WM4kFfvpIN00000000iC2GDXWnAvq6SsONry0i9071YWsbIWOrPnyUswt7bimA0rliV0d7QmcJgp(vRJ45jnnnnnnnnAfazKcHrJQVd3aIwcGFfegncNO7TSssRxqhwIKczegnE84wL4jnnnnnnnnAfDylc2Bzegn6AOovaq5JWOr6tcYqPQGWOrQG0hj8EtiJWOXJxFXVZtAAAAAAAA0vHsDbYvqy0O4Gr1OJh(GfvRJWOr6da0ufaLrimAuci1akVSTgHrJ0Dj8RqRcsJZkZvGsicJgp(du4WtAAAAAAAAu812IG9ocJgfFnPUGimAu9GISMeHrJs6OUd7rimA01r1kimA84Jxjk8KMMMMMMMgDe2AsvbHrJIhkRcLQccJgfpOxdIWOXJxVQepPPPPPPPPr1HsNnLeIWOr4QdLkXIry0OqOeUgMry0i9bLILcDegnE8HXXtAAAAAAAAKEUdl1KimAeUvY836W1imA0rc1b2ry0Oqy)sFtcry0irbwIKQmcJgpECKlIgwJN00000000OeS)vaYwhHrJ0t5ik0YTxjP3vYnqbHrJWjx5sIv9negnAfD4kbsegnc3kzeSaPRh0r04XlkQDDNN0000hfEsttt3vlWoTs41i80xqJq8KMMMMN0000bvs6g9f0bWOp(gDKIN00000000bvsADrFbDam6hwTdIjg8fTRQY54A5xl6ifpPPPPPPPPPPPPXJVfKgxL2hc3aAJkWnGMo8bi6yXOBArFXf0vv5CCT8Ff66kP)kGcpPPPPPPPPPPPPBbPXvP9hSUL)S2OcCdOPdFaIowm6Mw0FfqHN0000000000000000TG05x2kIJTb)LkANFzRiowxjAGuBCvAFiCdOnQa3aA6WhGOJfJUPLwy05x2kIJ1vIgi1UQkNJRL)RqxxPwAr)vafEstttttttttttttttttttdfKqraL7XQQY541qFbnUkTpEaS)v0gvGBanD4dq0XIr30IN00000000000000000000qbjueq5ESQQCwVW1XRH(cACvAF8ay)ROx4ATrf4gqth(aeDSy0nT4jnnnnnnnnnnnnnnnnnnnnuqcfbuUhRQkNVkqsFb9g8RelyxPKARnuqcfbuUhRQkNJxdDDLgkiHIak3JvvLZ6fUoEnArRBqh42nT4jnnnnnnnnnnnnnnnnnnnTs41i80xqVb)kXc2vkP2qbjueq5ESQQCoEn01v6aG6ul6yXOr69YRRi6yXO3GFLyb7kLuBOGekcOCpwvvoRx4641qxxPdaQtTOJfJgPxA80i6yXOHcsOiGY9yvv58vbs6yXOrx(LJ4jnnnnnnnnnnnnnnnnnnnDvjaQdpPPPPPPPPPPPPPPPPbLiEstttttttttttdkr8KMMMMMMMguI4jnnnnOeXtAAAAj4fKfALWRr45jOenPiqg(cs4dwfUOJyPsOenvNuBrvMQtcU8T7GDztSyGuVQiWeIpWTjve22LnXIbY8egysrTSMoS2oy9hhi4pPlFzsGseofXDWeQ)682KcQKaXsLqjc3QUso7tyGjmWeE4egyc1)egycpEcdm)KGL2g8BQYSpPnyRm7t6RPbmPfH8R2MKqgiYIQRKZQtAr1vYvNWatkVa7G1tyGjb7AQaNWBtAr1vsCMWatQ2eEBslQUsUxtdyslc5xTnPfvxjxXegyslQUswhtyGjTO6kz9cLLjjbVGSqhuOS8nvrBT4jnnnDxTa70bfklFtvOLWIyaT23HDm6TwbJEdUgJEdU(qT4jnnnnnnn9DyN(c6a04P1wBT3GRPXtFh21IUUsR9gCnnE6TwrlTO1nO3GRpulEstttttttlbVGSqFh25jnnnnOeXtA6UAb2PxOVGgkiHIak3JvvLZXRHUUsdfKqraL7XQQYz9cxhVgEstVqFbnDaA80l8KMgp(fAWAnGLherdZ0xXnm6axjpPPBbPxO1nrFlMOs)vafEstttVqFbDaA80AFiTUbT2l04PVftu1slEstttlbVGSqVGrhaJ(ggDaEstd6zapPPPPxOVGEHw3G(qEstttlbVGSqhaJEbJ(gnwaEstdkr8euIMKu9WhmH3M06j82KYlWoO2egy(5N0lBIfdKZ(K(AAatAri)QTjTiKF1MivArGj9Tnq0KekG7GYpjOWRM0Iq(vBI810aMu(HVqEslc5xTPpbj8BQYKckuw(MQOTw8KMMMwcEbzHgkiHIak3JvvLZXRbJgkiHIak3JvvLZ6fUoEny0b4jOenPfH8R2MuqHYY3ufT1IN0000D1cStxvLZX1Yp9f8KMMM(OYtAAAAAAAAushLutnPQGWOr4uuBWEnegnAx269gCncJgT3wQOkimA0rlvzHmcJgHtxq2aDegnAv1dlT8JWOr4iiwqIWOrh0BzyjcGWOrRqOFPiybHrJhFytCLVIQhXtAAAAAAAAeoBWUy4gTkiDwj0ZimAKE69AzyPary0O0gmxjRP9aegn6OfKx6HDvgHrJh)Q1r88KMMMMMMMgTcGmsHWOr13HBarlbWVccJgHt09wwjP1lOdlrsHmcJgpECRs8KMMMMMMMgTIoSfb7TmcJgDnuNkaO8ry0i9jbzOuvqy0ivq6JeEVjKry04XRV435jnnnnnnnn6QqPUa5kimAuCWOA0XdFWIQ1ry0i9baAQcGYiegnkbKAaLx2wJWOr6Ue(vOvbPXzL5kqjeHrJh)bkC4jnnnnnnnnk(ABrWEhHrJIVMuxqegnQEqrwtIWOrjDu3H9iegn66OAfegnE8XRefEstttttttJocBnPQGWOrXdLvHsvbHrJIh0Rbry04XRxvIN00000000O6qPZMscry0iC1HsLyXimAuiucxdZimAK(GsXsHocJgp(W44jnnnnnnnnsp3HLAsegnc3kz(BD4Aegn6iH6a7imAuiSFPVjHimAKOalrsvgHrJhpoYfrdRXtAAAAAAAAuc2)kazRJWOr6PCefA52RK07k5gOGWOr4KRCjXQ(gcJgTIoCLajcJgHBLmcwG01d6iA84ff1UUZtAAA6JcpPPPP7QfyNwj8AeE6lOriEstttZtAAA6GkjDJ(c6ay0hFJosXtAAAAAAA6GkjTUOVGoag9dR2bXed(I2vv5CCT8RfDKIN0000000000004X3csJRs7dHBaTrf4gqth(aeDSy0nTOV4c6QQCoUw(VcDDL0FfqHN000000000000TG04Q0(dw3YFwBubUb00HparhlgDtl6VcOWtAAAAAAAAAAAAAAA6wq68lBfXX2G)sfTZVSvehRRenqQnUkTpeUb0gvGBanD4dq0XIr30slm68lBfXX6krdKAxvLZX1Y)vORRulTO)kGcpPPPPPPPPPPPPPPPPPPPPLGxqwOFPaGN0000000000000000GsepPPPPPPPPPPPPbLiEstttttttdkr8KMMMguI4jOenjHmqeHs7NvN0sfWIotsqte8bZpP8dLpofXDWeEBsvanXv(j8WBt6bR)67qX5jDnU2JtpHhmPQWfDelvcLODW6xqcM0oy9lib56oPb074S8T7WVPkxFhi7WA56(GLEttgissOmP8dx0jxFhkopPRX1EC6j8Gj9TnGCQoPTMuQKt1jf1Y6sOS8T7Gjb79j1wufrYTiWKI7G63NueidFbj8b1RKaXsLqjAQoPUcgn7t6HDq5N9jTj0)2Sp)8tkQfmyBrO)1M9jTj0)2Sp)8tsQ6GzFsBc9Vn7Zp)K0CxZd7GYp7tAtO)TzF(5Nuq4Y3uLzFsBc9Vn7Zp)KKWfWSpPnH(3M95NF(jPlH83cwBsXDq97tQfnPvv5C8AMuv4IoILkHseUvDLC2NWat9hlQhg4W68MU92H6)YQlxwD5YMG4fv9pHho1FSOEyGdRZB62BhQ)lRUCz1LlBcIxu1)eQ)P(Jf1ddCyDEt3E7q9Fz1LlRUCztq8IQ(NWJNWBZpPGs4gi9s4dNqrDsIUf9vMq9F72KwKknt4TyhhysFBditTvcMWdpEslsLgrwpH3IDCG5Nq9p7tk)WfDYP2kbt4HhpjHmqkY6j82KIAznDyTDW6Fsx(YKQDDWGzWpH4pEsbvsGyPsOeHBvxjN9jmWegycpCcdmH6FcdmHhpHbMFsz4gyhS(fKGz1jjvp8b7G1)KI7G63Nuv4IoILkHseUvDLC2NWJNWaZpPGQYxFhkopPRX1EC6j8GjLb9Gxv1k)Kw9699R17KQcL4w1vYzFcdmH3MFss1d)MQmH3M0IuPrKAt4TyhhysbvsGyPsOeTdw)csWK2bRFbjix3jnGEhNLVDh(nv567azhwlx3hS0BAYarscLjjbIBQYEnnGjbfKWQq5KYpCrN8uDsv7GsKEvrGjTACheQVj1kTxKf1MMo4brtyGj9G1VGemjDxChMZt6bR)6vLFsH4iiHzr2bGYQQE0KYpCrNC9QYpPqCeKWSi7aqzvvpAslQnnsqopvN032aY6vLFsH4iiHzr2bGYQQE0KQcx0rSujuIUoyWm4NWdNKs47TcysxJR940t4btAr1vYzFcdmHbMWdNWatO(NWat4XtyG5NuBrvMQtAri)QTDW6Fs8KNtkcKHVGe(GvHl6iwQekrt1jbx(2DWUSjwmqQxveycXh42KIAznDyTDW6poqWFsx(YKwKknt4TyhhysGseofXDWeQ)682KEW6p1wjycp84jj6w0xzc1)nD7KEztSyGC2N0xtdyslc5xTnPfH8R2ePslcmPVTbIM0Iq(vBI810aMu(HVqEslc5xTnPGcLLVPkARfpPPPP7QfyNUQkNJRLF6l4jnnn9rLN00000000OKokPMAsvbHrJWPO2G9AimA0US17n4AegnAVTurvqy0OJwQYczegncNUGSb6imA0QQhwA5hHrJWrqSGeHrJoO3YWseaHrJwHq)srWccJgp(WM4kFfvpIN00000000iC2GDXWnAvq6SsONry0i9071YWsbIWOrPnyUswt7bimA0rliV0d7QmcJgp(vRJ45jnnnnnnnnAfazKcHrJQVd3aIwcGFfegncNO7TSssRxqhwIKczegnE84wL4jnnnnnnnnAfDylc2Bzegn6AOovaq5JWOr6tcYqPQGWOrQG0hj8EtiJWOXJxFXVZtAAAAAAAA0vHsDbYvqy0O4Gr1OJh(GfvRJWOr6da0ufaLrimAuci1akVSTgHrJ0Dj8RqRcsJZkZvGsicJgp(du4WtAAAAAAAAu812IG9ocJgfFnPUGimAu9GISMeHrJs6OUd7rimA01r1kimA84Jxjk8KMMMMMMMgDe2AsvbHrJIhkRcLQccJgfpOxdIWOXJxVQepPPPPPPPPr1HsNnLeIWOr4QdLkXIry0OqOeUgMry0i9bLILcDegnE8HXXtAAAAAAAAKEUdl1KimAeUvY836W1imA0rc1b2ry0Oqy)sFtcry0irbwIKQmcJgpECKlIgwJN00000000OeS)vaYwhHrJ0t5ik0YTxjP3vYnqbHrJWjx5sIv9negnAfD4kbsegnc3kzeSaPRh0r04XlkQDDNN0000hfEsttt3vlWoTs41i80xqJq8KMMMMN0000bvs6g9f0bWOp(gDKIN00000000bvsADrFbDam6hwTdIjg8fTRQY54A5xl6ifpPPPPPPPPPPPPXJVfKgxL2hc3aAJkWnGMo8bi6yXOBArFXf0vv5CCT8Ff66kP)kGcpPPPPPPPPPPPPBbPXvP9hSUL)S2OcCdOPdFaIowm6Mw0FfqHN0000000000000000TG05x2kIJTb)LkANFzRiowxjAGuBCvAFiCdOnQa3aA6WhGOJfJUPLwy05x2kIJ1vIgi1UQkNJRL)RqxxPwAr)vafEstttttttttttttttttttlbVGSq)sbapPPPPPPPPPPPPPPPPbLiEstttttttttttdkr8KMMMMMMMguI4jnnnnOeXtqjAsczGicL2pRoPLkGfDMKGMi4dMKqbChu(jbfE18t6bR)P6KArtAvvohVg6dNu(HYhNI4oycVnPVTbKP2kbt4HhpPkGM4k)eEOUDsczGuKAt4TjvfUOJyPsOeTdw)csWK2bRFbjix3jnGEhNLVDh(nv567azhwlx3hS0BAYarscLj1vWOzFspSdk)SpPnH(3M95NFsrTGbBlc9V2SpPnH(3M95NFss4cy2N0Mq)BZ(8Zpjn318WoO8Z(K2e6FB2NF(jjvDWSpPnH(3M95NFsbHlFtvM9jTj0)2Sp)8ZpPTMuQKt1jfbYWxqcFq9kjqSujuIMQtQTOkIKBrGjf3b1VpPOwwxcLLVDhmjyVpPVTbKt1jPlH83cwBsXDq97tkOeUbsVe(Wj84jve22LnXIbY8egyslsLgrwpH3IDCG5NWJN9jLF4Io5uBLGj8YoCs1UoyWm4Nq8bQZjvfUOJyPsOeHBvxjN9j84j828tkOQ813HIZt6ACThNEcpyszqp4vvTYpPvVEF)A9oPQqjUvDLC2NWat4Tju)tyG5NuxbJM9j9WoO8Z(K2e6FB2NF(jf1cgSTi0)AZ(K2e6FB2NF(jjvDWSpPnH(3M95NFsAUR5HDq5N9jTj0)2Sp)8tscxaZ(K2e6FB2NF(jfeU8nvz2N0Mq)BZ(8Zp)KKaXnvzVMgWKGcsyvOCs5hUOtEQoPwP9ISO200bpiAcdmPhS(fKGjP7I7WCEspy9xVQ8tkehbjmlYoauwv1JMKs47TcysxJR940t4btAri)QTDW6FsbfklFtv0wlEsttt3vlWoDvvohxl)0xWtAAA6JkpPPPPPPPPrjDusn1KQccJgHtrTb71qy0ODzR3BW1imA0EBPIQGWOrhTuLfYimAeoDbzd0ry0OvvpS0YpcJgHJGybjcJgDqVLHLiacJgTcH(LIGfegnE8HnXv(kQEepPPPPPPPPr4Sb7IHB0QG0zLqpJWOr6P3RLHLceHrJsBWCLSM2dqy0OJwqEPh2vzegnE8RwhXZtAAAAAAAA0kaYifcJgvFhUbeTea)kimAeor3BzLKwVGoSejfYimA84XTkXtAAAAAAAA0k6WweS3YimA01qDQaGYhHrJ0NeKHsvbHrJubPps49MqgHrJhV(IFNN00000000ORcL6cKRGWOrXbJQrhp8blQwhHrJ0haOPkakJqy0OeqQbuEzBncJgP7s4xHwfKgNvMRaLqegnE8hOWHN00000000O4RTfb7Degnk(AsDbry0O6bfznjcJgL0rDh2Jqy0ORJQvqy04XhVsu4jnnnnnnnn6iS1KQccJgfpuwfkvfegnkEqVgeHrJhVEvjEstttttttJQdLoBkjeHrJWvhkvIfJWOrHqjCnmJWOr6dkflf6imA84dJJN00000000i9ChwQjry0iCRK5V1HRry0OJeQdSJWOrHW(L(MeIWOrIcSejvzegnE84ixenSgpPPPPPPPPrjy)RaKTocJgPNYruOLBVssVRKBGccJgHtUYLeR6BimA0k6WvcKimAeUvYiybsxpOJOXJxuu76opPPPPpk8KMMMURwGDALWRr4PVGgH4jnnnnpPPPPdQK0n6lOdGrF8n6ifpPPPPPPPPdQK06I(c6ay0pSAhetm4lAxvLZX1YVw0rkEstttttttttttJhFlinUkTpeUb0gvGBanD4dq0XIr30I(IlORQY54A5)k01vs)vafEsttttttttttt3csJRs7pyDl)zTrf4gqth(aeDSy0nTO)kGcpPPPPPPPPPPPPPPPPBbPZVSvehBd(lv0o)YwrCSUs0aP24Q0(q4gqBubUb00HparhlgDtlTWOZVSvehRRenqQDvvohxl)xHUUsT0I(Rak8KMMMMMMMMMMMMMMMMMMMUfKgxL2FvLObsTrf4gqth(aeDSy0nTO1nrFJ(Rak8KMMMMMMMMMMMMMMMMMMMMMMMgkiHIak3JvvLZxvjAGK(cACvA)vvIgi1gvGBanD4dq0XIr30IN000000000000000000000000qbjueq5ESQQC(QkrdK6fUM(cACvA)vvIgi1lCT2OcCdOPdFaIowm6Mw8KMMMMMMMMMMMMMMMMMMMMMMMgkiHIak3JvvLZxfiPVGEd(vIfSRusT1gkiHIak3JvvLZxvjAGKUUsdfKqraL7XQQY5RQenqQx4ATO1nOdC7Mw8KMMMMMMMMMMMMMMMMMMMMMMMwj8AeE6lOHcsOiGY9yvv58vvIgiPJfJgD51veDSy0qbjueq5ESQQC(QkrdK6fUMowmAenIowmAOGekcOCpwvvoFvGKowmA0LF5iEstttttttttttttttttttttttxvcG6WtAAAAAAAAAAAAAAAAAAAAqjIN0000000000000000GsepPPPPPPPPPPPPbLiEstttttttdkr8KMMMguI4jnnnTe8cYcTs41i88euIMeC5B3b7YMyXaPEvrGjeFGBt6bR)uBLGjmqDoPx2elgiN9j910aM0Iq(vBtAri)Qn9jiHFtvMuqHYY3ufT1IN0000sWlil0qbjueq5ESQQC(QkrdKy0qbjueq5ESQQC(QkrdK6fUgJoapbLOjTubSOZKe0ebFWKweYVAtKVMgWKYp8fYtAri)QTjfuOS8nvrBT4jnnnDxTa70vv5CCT8tFbpPPPPpQ8KMMMMMMMgL0rj1utQkimAeof1gSxdHrJ2LTEVbxJWOr7TLkQccJgD0svwiJWOr40fKnqhHrJwv9Wsl)imAeocIfKimA0b9wgwIaimA0ke6xkcwqy04Xh2ex5RO6r8KMMMMMMMgHZgSlgUrRcsNvc9mcJgPNEVwgwkqegnkTbZvYAApaHrJoAb5LEyxLry04XVADeppPPPPPPPPrRaiJuimAu9D4gq0sa8RGWOr4eDVLvsA9c6WsKuiJWOXJh3QepPPPPPPPPrROdBrWElJWOrxd1PcakFegnsFsqgkvfegnsfK(iH3BczegnE86l(DEstttttttJUkuQlqUccJgfhmQgD8WhSOADegnsFaGMQaOmcHrJsaPgq5LT1imAKUlHFfAvqACwzUcucry04XFGchEstttttttJIV2weS3ry0O4Rj1feHrJQhuK1KimAush1DypcHrJUoQwbHrJhF8krHN00000000OJWwtQkimAu8qzvOuvqy0O4b9AqegnE86vL4jnnnnnnnnQou6SPKqegncxDOujwmcJgfcLW1WmcJgPpOuSuOJWOXJpmoEstttttttJ0ZDyPMeHrJWTsM)whUgHrJosOoWocJgfc7x6BsicJgjkWsKuLry04XJJCr0WA8KMMMMMMMgLG9Vcq26imAKEkhrHwU9kj9UsUbkimAeo5kxsSQVHWOrROdxjqIWOr4wjJGfiD9GoIgpErrTR78KMMM(OWtAAAAEsttthujPB0xqhaJ(4B0rkEsttttttthujP1f9f0bWOFy1oiMyWx0UQkNJRLFTOJu8KMMMMMMMMMMMgp(wqACvAFiCdOnQa3aA6WhGOJfJUPf9fxqxvLZX1Y)vORRK(Rak8KMMMMMMMMMMMUfKgxL2FW6w(ZAJkWnGMo8bi6yXOBAr)vafEsttttttttttttttt3csNFzRio2g8xQOD(LTI4yDLObsTXvP9HWnG2OcCdOPdFaIowm6MwAHrNFzRiowxjAGu7QQCoUw(VcDDLAPf9xbu4jnnnnnnnnnnnnnnnnnnnDlinUkT)QkrdKAJkWnGMo8bi6yXOBArRBI(g9xbu4jnnnnnnnnnnnnnnnnnnnnnnnTe8cYc9lfa8KMMMMMMMMMMMMMMMMMMMguI4jnnnnnnnnnnnnnnnnOeXtAAAAAAAAAAAAqjIN00000000GsepPPPPbLiEckrtAri)QnrQ0Iat6BBGO5N032aYuBLGj8YoCsIUf9vMq9F72K0Lq(BbRnP4oO(9j9TnGCQoPOwwxcLLVDhmjyVpPIW2USjwmqMNWatcU8nvjp7tQvA)SpPiLilc5xTnRoPfH8R2MeuqcfbuUhRQkNVQs0aj9f0b4juqcfbuUhRQkNVQs0aPEHRPVGoapHcsOiGY9yvv58vbs6lOdm)8tQcOjUYpHbUnPw0KwvLZxvjAGCsrTSMoS2oy9hhi4pPlFzslQUso7tyGjmWeE4egyc1)egycpEcdm)KIAznDyTDW6Fsx(YKckHBG0lHpCcf1j1wuLP68tOOo7tsidKIuBcVnP8dx0jNARemHhE8KeYaPiRNWBtQ21bdMb)eI)WBtkOscelvcLiCR6k5SpHbMWat4HtyGju)tyGj84jmW8tkd3a7G1VGemRojP6HpyhS(NuChu)(KcQkF9DO48KUgx7XPNWdMug0dEvvR8tA1R33VwVtQkuIBvxjN9jmWeEB(jjvp8BQYeEBsDfmA2NKqgisbChiNQt6HDq5N9jTj0)2Sp)8tkQfmyBrO)1M9jTj0)2Sp)8tsQ6GzFsBc9Vn7Zp)K0CxZd7GYp7tAtO)TzF(5Nuq4Y3uLzFsBc9Vn7Zp)KKWfWSpPnH(3M95NF(jfujbILkHs0oy9libtAhS(fKGCDN0a6DCw(2D43uLRVdKDyTCDFWsVPjdejjuM0IuPzcVf74atk)WfDYt1jvTdkr6vfbM0QXDqO(MuR0ErwuBA6GhenHbM0dw)csWK0DXDyopPhS(Rxv(jfIJGeMfzhakRQ6rtArTPrcY5P6K(2gqwVQ8tkehbjmlYoauwv1JMueidFbj8b1RKaXsLqjAQoPQWfDelvcLORdgmd(j8WjPe(ERaM014Apo9eEWK0Lq(BbRnP4oO(9jTivAez9eEl2XbMuulRlHYY3UdMeS3N0Iq(vB7G1)K4jpNueidFbj8bRcx0rSujuIMQtQiSTlBIfdK5jmWKGlF7oyx2elgi1RkcmH4dCBsTfvzQoPhS(tTvcMWdpEsGseofXDWeQ)682KeDl6RmH6)MUDsVSjwmqo7t6RPbmPfH8R2M0Iq(vBI810aMu(HVqEslc5xTjsLweysFBdenjHc4oO8tck8QjTiKF12Kckuw(MQOTw8KMURwGD6QQCoUw(PVGN00hvEstttJs6OKAQjvfegncNIAd2RHWOr7YwV3GRry0O92sfvbHrJoAPklKry0iC6cYgOJWOrRQEyPLFegnchbXcsegn6GEldlraegnAfc9lfblimA84dBIR8vu9iEstttJWzd2fd3OvbPZkHEgHrJ0tVxldlficJgL2G5kznThGWOrhTG8spSRYimA84xToINN0000OvaKrkegnQ(oCdiAja(vqy0iCIU3YkjTEbDyjskKry04XJBvIN0000Ov0HTiyVLry0ORH6ubaLpcJgPpjidLQccJgPcsFKW7nHmcJgpE9f)opPPPPrxfk1fixbHrJIdgvJoE4dwuTocJgPpaqtvaugHWOrjGudO8Y2Aegns3LWVcTkinoRmxbkHimA84pqHdpPPPPrXxBlc27imAu81K6cIWOr1dkYAsegnkPJ6oShHWOrxhvRGWOXJpELOWtAAAA0ryRjvfegnkEOSkuQkimAu8GEnicJgpE9Qs8KMMMgvhkD2usicJgHRouQelgHrJcHs4AygHrJ0hukwk0ry04XhghpPPPPr65oSutIWOr4wjZFRdxJWOrhjuhyhHrJcH9l9njeHrJefyjsQYimA84XrUiAynEstttJsW(xbiBDegnspLJOql3ELKExj3afegncNCLljw13qy0Ov0HReiry0iCRKrWcKUEqhrJhVOO21DEstFu4jpPPdQK0n6lOdGrF8n6ifpPPPPdQK06I(c6ay0pSAhetm4lAxvLZX1YVw0rkEstttttJhFlinUkTpeUb0gvGBanD4dq0XIr30I(IlORQY54A5)k01vs)vafEsttttt3csJRs7pyDl)zTrf4gqth(aeDSy0nTO)kGcpPPPPPPPPBbPZVSvehBd(lv0o)YwrCSUs0aP24Q0(q4gqBubUb00HparhlgDtlTWOZVSvehRRenqQDvvohxl)xHUUsT0I(Rak8KMMMMMMMMMUfKgxL2FvLObsTrf4gqth(aeDSy0nTO1nrFJ(Rak8KMMMMMMMMMMMwcEbzH(LcaEstttttttttdkr8KMMMMMMMguI4jnnnnnnOeXtAAAAqjIN00GsepbLOjTubSOZKe0ebFWKeYarekTFwD(j9G1)uDslsLgrQnH3IDCGj1IM0QQC(QkrdK0hoPkGM4k)egq3oPVTbKP2kbt4HhpPVTbKt1jf1YA6WA7G1FCGG)KUCntQkCrhXsLqjAhS(fKGjTdw)csqUUtAa9oolF7o8BQY13bYoSwUUpyP30KbIKektkQL10H12bR)jD5ltAr1vYzFcdmHbMWdNWatO(NWat4XtyG5NuBrvej3IatkUdQFFsBnPujNQtQkCrhXsLqjc3QUso7t4XtyG5NuqjCdKEj8Ht4Xtsce3uL9AAatckiHvHYjLFO8XPiUdMWBtk)WfDY1Rk)KcXrqcZISdaLvv9O5NW6C2N0dw)13HIZt6ACThNEcpys5hUOto1wjycp84jjKbsrwpH3Mu(Hl6KRVdfNN014Apo9eEWKQDDWGzWpH41)HtkOscelvcLiCR6k5SpHbMWat4HtyGju)tyGj84jmW8tkd3a7G1VGemRoj4Y3uL8SpPwP9Z(KIuISiKF12S6KweYVABsqbjueq5ESfy(pOerFb9nEcfKqraL7XwG5p9q5tFb9nEcfKqraL7XQQYzCdZp9f0i08ZpPGQYxFhkopPRX1EC6j8GjLb9Gxv1k)Kw9699R17KKQh(nvzcVnPUcgn7tsidePaUdKt1j9WoO8Z(K2e6FB2NF(jf1cgSTi0)AZ(K2e6FB2NF(jjvDWSpPnH(3M95NFsAUR5HDq5N9jTj0)2Sp)8tkiC5BQYSpPnH(3M95NFss4cy2N0Mq)BZ(8Zp)KcQKaXsLqjAhS(fKGjTdw)csqUUtAa9oolF7o8BQY13bYoSwUUpyP30KbIKektArQ0mH3IDCGjvTdkr6vfbM0QXDqO(MuR0ErwuBA6GhenHbM0dw)csWK0DXDyopPhS(Rxv(jfIJGeMfzhakRQ6rtArTPrcY5P6K(2gqwVQ8tkehbjmlYoauwv1JM032aYuBLGj8WJNuv4IoILkHs01bdMb)eE4KucFVvat6ACThNEcpysrGm8fKWhuVscelvcLOP6KwKknISEcVf74atAr1vYzFcdmHbMWdNWatO(NWat4XtyG5N0Iq(vB7G1)Kckuw(MQOTw8KMMMURwGD6QQCoUw(PVGN0000hvEstttttttJs6OKAQjvfegncNIAd2RHWOr7YwV3GRry0O92sfvbHrJoAPklKry0iC6cYgOJWOrRQEyPLFegnchbXcsegn6GEldlraegnAfc9lfblimA84dBIR8vu9iEstttttttJWzd2fd3OvbPZkHEgHrJ0tVxldlficJgL2G5kznThGWOrhTG8spSRYimA84xToINN00000000OvaKrkegnQ(oCdiAja(vqy0iCIU3YkjTEbDyjskKry04XJBvIN00000000Ov0HTiyVLry0ORH6ubaLpcJgPpjidLQccJgPcsFKW7nHmcJgpE9f)opPPPPPPPPrxfk1fixbHrJIdgvJoE4dwuTocJgPpaqtvaugHWOrjGudO8Y2Aegns3LWVcTkinoRmxbkHimA84pqHdpPPPPPPPPrXxBlc27imAu81K6cIWOr1dkYAsegnkPJ6oShHWOrxhvRGWOXJpELOWtAAAAAAAA0ryRjvfegnkEOSkuQkimAu8GEnicJgpE9Qs8KMMMMMMMgvhkD2usicJgHRouQelgHrJcHs4AygHrJ0hukwk0ry04XhghpPPPPPPPPr65oSutIWOr4wjZFRdxJWOrhjuhyhHrJcH9l9njeHrJefyjsQYimA84XrUiAynEstttttttJsW(xbiBDegnspLJOql3ELKExj3afegncNCLljw13qy0Ov0HReiry0iCRKrWcKUEqhrJhVOO21DEstttFu4jnnnDxTa70kHxJWtFbncXtAAAAEsttthujPB0xqhaJ(4B0rkEsttttttthujP1f9f0bWOFy1oiMyWx0UQkNJRLFTOJu8KMMMMMMMMMMMUfKgxL2FW6w(ZAJkWnGMo8bi6yXOBAr)vafEsttttttttttttttt3csNFzRio2g8xQOD(LTI4yDLObsTXvP9HWnG2OcCdOPdFaIowm6MwAHrNFzRiowxjAGu7QQCoUw(VcDDLAPf9xbu4jnnnnnnnnnnnnnnnnnnnDlinUkTh3W83kI1tjOsBubUb00HparhlgDtl6VcOWtAAAAAAAAAAAAAAAAAAAAAAAAOGekcOCpwvvoJBy(PVGgxL2JBy(BfX6PeuPnQa3aA6WhGOJfJUPfpPPPPPPPPPPPPPPPPPPPPPPPPHcsOiGY9ylW8FqjI(c6mOdwETRtmACvApUH5VveRNsqL2OcCdOPdFaIowm6MwAXtAAAAAAAAAAAAAAAAAAAAAAAAOGekcOCp2cm)PhkF6lOZGoy51wuXOXvP94gM)wrSEkbvAJkWnGMo8bi6yXOBAPfpPPPPPPPPPPPPPPPPPPPPPPPPvcVgHN(cAOGekcOCpwvvoJBy(PJfJgrJNgrhlg9g8RelyxPKART2qbjueq5ESfy(pOerJNEfGFVTb0wlADd6a3UDtl66kDGB3UPfTUbDGB30IUUsh42nEstttttttttttttttttttttttxvcG6WtAAAAAAAAAAAAAAAAAAAAqjIN0000000000000000GsepPPPPPPPPPPPPbLiEstttttttdkr8KMMMguI4jnnnTe8cYcTs41i88euIMueidFbj8bRcx0rSujuIMQtQiSTlBIfdK5jmWKGlF7oyx2elgi1RkcmH4dCBs5hkFCkI7Gj82KIAznDyTDW6poqWFsx(YKQcx0rSujuIWTQRKZ(egyQ)yr9WahwN30T3ou)xwD5YQlx2eeVOQ)j8WP(Jf1ddCyDEt3E7q9Fz1LlRUCztq8IQ(Nq9p1FSOEyGdRZB62BhQ)lRUCz1LlBcIxu1)eE8eEB(jbkr4ue3btO(RZBts0TOVYeQ)B3MeS02GFtvM9jTbBLzFslQUswhtyGjjKbISO6k5uDslQUsUxtdyslc5xTnjyxtf4eEBsRNWBtQ2eEBslQUsIZegyslQUsUIjmWKwuDLC1jmWKwuDLSEHYYKKGxqwOdkuw(MQOTw8KMMMURwGD6GcLLVPk0syrmGw77Wog9wRGrVbxJrVbxFOw8KMMMMMMM(oStFbDaA80ART2BW104PVd7ArxxP1EdUMgp9wROLw06g0BW1hQfpPPPPPPPPLGxqwOVd78KMMMguI4jnDxTa70l0xqdfKqraL7XQQY541qxxPHcsOiGY9yvv5SEHRJxdpPPxOVGMoanE6fEstJh)cnyTgWYdIOHz6R4ggDGRKN00TG0l06MOVftuP)kGcpPPPPxOVGoanEATpKw3Gw7fA803IjQAPfpPPPPLGxqwOxWOdGrFdJoapPPb9mGN0000l0xqVqRBqFipPPPPLGxqwOdGrVGrFJglapPPbLiEckrtsQE4dMWBtkVa7G1tyGjLxGDqTjmW8ZpPx2elgiN9j910aM0Iq(vBtAri)QnrQ0Iat6BBGOjjua3bLFsqHxnPfH8R2e5RPbmP8dFH8KweYVAtFcs43uLjfuOS8nvrBT4jnnnTe8cYcnuqcfbuUhBbM)dkr04Pxb43BBaT1Iw3GoWTB3WOHcsOiGY9ylW8FqjIgpnuqcfbuUhBbM)0dLpgDaEckrtAri)QTjfuOS8nvrBT4jnnnDxTa70vv5CCT8tFbpPPPPpQ8KMMMMMMMgL0rj1utQkimAeof1gSxdHrJ2LTEVbxJWOr7TLkQccJgD0svwiJWOr40fKnqhHrJwv9Wsl)imAeocIfKimA0b9wgwIaimA0ke6xkcwqy04Xh2ex5RO6r8KMMMMMMMgHZgSlgUrRcsNvc9mcJgPNEVwgwkqegnkTbZvYAApaHrJoAb5LEyxLry04XVADeppPPPPPPPPrRaiJuimAu9D4gq0sa8RGWOr4eDVLvsA9c6WsKuiJWOXJh3QepPPPPPPPPrROdBrWElJWOrxd1PcakFegnsFsqgkvfegnsfK(iH3BczegnE86l(DEstttttttJUkuQlqUccJgfhmQgD8WhSOADegnsFaGMQaOmcHrJsaPgq5LT1imAKUlHFfAvqACwzUcucry04XFGchEstttttttJIV2weS3ry0O4Rj1feHrJQhuK1KimAush1DypcHrJUoQwbHrJhF8krHN00000000OJWwtQkimAu8qzvOuvqy0O4b9AqegnE86vL4jnnnnnnnnQou6SPKqegncxDOujwmcJgfcLW1WmcJgPpOuSuOJWOXJpmoEstttttttJ0ZDyPMeHrJWTsM)whUgHrJosOoWocJgfc7x6BsicJgjkWsKuLry04XJJCr0WA8KMMMMMMMgLG9Vcq26imAKEkhrHwU9kj9UsUbkimAeo5kxsSQVHWOrROdxjqIWOr4wjJGfiD9GoIgpErrTR78KMMM(OWtAAA6UAb2PvcVgHN(cAeIN00008KMMMoOss3OVGoag9X3OJu8KMMMMMMMoOssRl6lOdGr)WQDqmXGVODvvohxl)ArhP4jnnnnnnnnnnnDlinUkT)G1T8N1gvGBanD4dq0XIr30I(Rak8KMMMMMMMMMMMMMMMUfKo)YwrCSn4Vur78lBfXX6krdKAJRs7dHBaTrf4gqth(aeDSy0nT0cJo)YwrCSUs0aP2vv5CCT8Ff66k1sl6VcOWtAAAAAAAAAAAAAAAAAAA6wqACvApUH5VveRNsqL2OcCdOPdFaIowm6Mw0FfqHN000000000000000000000000sWlil0VuaWtAAAAAAAAAAAAAAAAAAAAqjIN0000000000000000GsepPPPPPPPPPPPPbLiEstttttttdkr8KMMMguI4jOenPLkGfDMKGMi4dMKqgiIqP9ZQZpP2IQmvNulAsRQYzCdZ)KwKknIuBcVf74atsxc5VfS2KI7G63NKqgifP2eEBsvanXv(jmWTj9G1FQTsWegOoNuv4IoILkHs0oy9libtAhS(fKGCDN0a6DCw(2D43uLRVdKDyTCDFWsVPjdejjuMuulRPdRTdw)t6YxMuulRlHYY3UdMeS3N032aYP6KAlQIi5weysXDq97tARjLk5uDsbLWnq6LWhoHI6KKaXnvzVMgWKGcsyvOCsTYDGmdMvNu(Hl6KRxv(jfIJGeMfzhakRQ6rZpHx2SpjHmqksTj82KYpCrNCQTsWeE4XtsidKISEcVnPAxhmyg8tiE9xNtkOscelvcLiCR6k5SpHbMWat4HtyGju)tyGj84jmW8tkd3a7G1VGemRojP6HpyhS(NuChu)(KQcx0rSujuIWTQRKZ(eE8egy(jfuv(67qX5jDnU2JtpHhmPmOh8QQw5N0QxVVFTENuvOe3QUso7tyGj828tsQE43uLj82K6ky0SpjHmqKc4oqovN0d7GYp7tAtO)TzF(5NuulyW2Iq)Rn7tAtO)TzF(5NKeUaM9jTj0)2Sp)8tsZDnpSdk)SpPnH(3M95NFsbHlFtvM9jTj0)2Sp)8tsQ6GzFsBc9Vn7Zp)8tk)q5JtrChmH3M0IuPzcVf74atk)WfDYt1jvTdkr6vfbM0QXDqO(MuR0ErwuBA6GhenHbM0dw)csWK0DXDyopPhS(Rxv(jfIJGeMfzhakRQ6rtArTPrcY5P6K(2gqwVQ8tkehbjmlYoauwv1JMueidFbj8b1RKaXsLqjAQoPQWfDelvcLORdgmd(j8WjPe(ERaM014Apo9eEWK(2gqMARemHhE8KwKknISEcVf74atAr1vYzFcdmHbMWdNWatO(NWat4XtyG5N0Iq(vB7G1)K4jpNueidFbj8bRcx0rSujuIMQtQiSTlBIfdK5jmWKGlF7oyx2elgi1RkcmH4dCBsbvsGyPsOeTdw)csWK2bRFbjix3jnGEhNLVDh(nv567azhwlx3hS0BAYarscLjf1YA6WA7G1FCGG)KU8Ljbkr4ue3btO(RZBts0TOVYeQ)B62j9YMyXa5SpPVMgWKweYVABslc5xTjYxtdys5h(c5jTiKF1MivArGj9Tnq0KekG7GYpjOWRM0Iq(vBtkOqz5BQI2AXtAAA6UAb2PRQY54A5N(cEstttFu5jnnnnnnnnkPJsQPMuvqy0iCkQnyVgcJgTlB9EdUgHrJ2Blvufegn6OLQSqgHrJWPliBGocJgTQ6HLw(ry0iCeeliry0Od6TmSebqy0Ovi0VueSGWOXJpSjUYxr1J4jnnnnnnnncNnyxmCJwfKoRe6zegnsp9ETmSuGimAuAdMRK10EacJgD0cYl9WUkJWOXJF16iEEstttttttJwbqgPqy0O67WnGOLa4xbHrJWj6ElRK06f0HLiPqgHrJhpUvjEstttttttJwrh2IG9wgHrJUgQtfau(imAK(KGmuQkimAKki9rcV3eYimA841x878KMMMMMMMgDvOuxGCfegnkoyun64Hpyr16imAK(aanvbqzecJgLasnGYlBRry0iDxc)k0QG04SYCfOeIWOXJ)afo8KMMMMMMMgfFTTiyVJWOrXxtQlicJgvpOiRjry0OKoQ7WEecJgDDuTccJgp(4vIcpPPPPPPPPrhHTMuvqy0O4HYQqPQGWOrXd61GimA841RkXtAAAAAAAAuDO0ztjHimAeU6qPsSyegnkekHRHzegnsFqPyPqhHrJhFyC8KMMMMMMMgPN7WsnjcJgHBLm)ToCncJgDKqDGDegnke2V03KqegnsuGLiPkJWOXJhh5IOH14jnnnnnnnnkb7FfGS1ry0i9uoIcTC7vs6DLCduqy0iCYvUKyvFdHrJwrhUsGeHrJWTsgblq66bDenE8IIAx35jnnn9rHN0000D1cStReEncp9f0iepPPPP5jnnnDqLKUrFbDam6JVrhP4jnnnnnnnDqLKwx0xqhaJ(Hv7GyIbFr7QQCoUw(1IosXtAAAAAAAAAAA6wqACvA)bRB5pRnQa3aA6WhGOJfJUPf9xbu4jnnnnnnnnnnnnnnnDliD(LTI4yBWFPI25x2kIJ1vIgi1gxL2hc3aAJkWnGMo8bi6yXOBAPfgD(LTI4yDLObsTRQY54A5)k01vQLw0FfqHN00000000000000000000TG04Q0ECdZFRiwpLGkTrf4gqth(aeDSy0nTO)kGcpPPPPPPPPPPPPPPPPPPPPPPPPLGxqwOFPaGN00000000000000000000GsepPPPPPPPPPPPPPPPPbLiEstttttttttttdkr8KMMMMMMMguI4jnnnnOeXtqjAslval6mjbnrWhmjHmqeHs7NvNFspy9pvN0IuPrKAt4TyhhysTOjTQkNXnm)0hoPkGM4k)egq3ojDjK)wWAtkUdQFFsFBdiNQtQkCrhXsLqjAhS(fKGjTdw)csqUUtAa9oolF7o8BQY13bYoSwUUpyP30KbIKekt6bR)uBLGj8WJNuulRPdRTdw)t6YxMuulRlHYY3UdMeS3NuBrvej3IatkUdQFFsBnPujNQtQTOkt1jfuc3aPxcF4eE8KKaXnvzVMgWKGcsyvOCs5hUOtUEv5NuiocsywKDaOSQQhn)8t6(eg44ddm)ma diff --git a/WA codes/Bulwark of Order (WA CODE).txt b/WA codes/Bulwark of Order (WA CODE).txt new file mode 100644 index 0000000..c1efd72 --- /dev/null +++ b/WA codes/Bulwark of Order (WA CODE).txt @@ -0,0 +1 @@ +d40vXaGiPsxsQi9jGOWOekNsiTksf9kLcAwkPUfqYUiv5xarmmi6yuPLjv5zsfMgkX1qP02qPW3asnoLcDoHiUNqyFsfrheL0cvsEiektuQOUOsjBKuvFecvgPur4KKkSsQOzQu0nfIANq6NKknuLcSuiu1tvmvsCviKTcef9vukASarPElquXCbc3fiQ0Ev9xQWGjomulMK6XaMmkUSKnReFwPA0cvNwkRgisVgcMnLUnPSBQ63OA4a1XbIswoONly6IUofBhLQVRuQXtsoVuvRxisZhiQA)iF3R8bFLNFcF6Pxh6b6pAFy(WCLpyGSXEPaB77fmYCM6OGYf5NsfySNPy(Qp91Dzju5rbfOz7hyT34EL(GRp7qUb8Nqzx2aEZNFwPRIIUrEZT0x5tJ5ZkJDBmebs4lKOlKPGFyAbqQXdKn2RpyR9J3OPaB77fmCu3pwoM5kFsST85v(OzSz7kpF(bWIdHR8j08726ZgW6MS2zDG(8dtBzPbySz)R8rZyZ2vE(8dedux5JMXMTR885hWSdoX2YNx5JMXMTR885Nfmq24(R8rZyZ2vE(8dKBRR8rZyZ2vE(8JjuoaS4q4tcn1ZNFaUYrDVYNaymeb2SXKXpAVpHedGqyArADu3n(XekOdvhf5hMwaSf3xPuLF6uaY5NawRukvPbwF1h1yae2HCJNbX4wo8kh196ZcB752JnqUrK96a0rcOJeq)fqX2ooAVRplSTNBp2a5gr2RdqhjGosa9xafB74ODC9zHT9C7Xgi3iYEDa6ib0rcO)cOyBhhLLJI85NfUp13I3dF0frkBQd0T(OgdrmULdVYr7Du3NFG8eNnU)Oi)aa5GD0)Oi1Jf3plCyTd5gpJsPknW6Jo8zbxWafiyLHH7dGGnlmcSAG4ai2a(2fKvdehICX0WGGvdehabRgig0S8bw7nUxPp46d2aXQXWpHedGq4Q)O2wEMiZzQpR2Cl0o)P5BPdaUgyBLfZrD)KLQ0aRpS5UfhcFYsvQp3NFuxyFY32RhS2nwm8tamgIGsPknW6Jo8zbxWafiyLHrxFaeSzHrGvdeharKlMggekLQ0aRaigqwgmSCWMXBz9jagdr4R(aW1adRq4Q)KnTcQp3NFuxyFY32RhS2nwm8daKd(Oi1Jf3pnaU)Q)OgdGWoKB8m6USeQ8O9(WnPT5Rp6IiLn1b6wFaGCWouDuK6XI7haULdVYrDpQ7r7Du3J2XrDpklh195hati5AkLQ8ZIXdKnUpwuYjjKqcjwoa2ssiERSmKebjHYwazmxqVMee5B5kZYsSUGT4(fS7As6UYy3gdrGe(cj6czky3OrjHdjbj5KesiHeyLgONenCgxVflNdJfI3kldjGesCrIezus0tps6IqxYz5z(4nAkW2(Ebdh19dtfWPbIZAfgaHDi34zU6pyGSX9HR8jKyyELpmChaMqY1(QpaMqY1(GnqSJYZUEAyvt8wzzijcsq(8tZ3YR8HH7aWesU2x9bWesU2hSbIDuE21tdRAI3kldjrqcYNp)GbYg7LcSTVxWiZzQJI8twQYPfP1rD34hMkGtdeNL(CyTd5gpZv)z7gtg)O9ylYpLNHv)UToAhSbYpwoM5kFsST85v(OzSz7kpF(bWIdHR8j08726ZgW6MS2zDG(8dy2bNyB5ZR8rZyZ2vE(8dtBzPbySz)R8rZyZ2vE(8dKBRR8rZyZ2vE(8taCbCLpHMF3whT3ZplyGSX9x5JMXMTR885htOCeaxaF1htOCayXHWx9bIbQR8rZyZ2vE(85hSVPHZg3FLpA4M)kFa4woeXFu3pyl44yL(GRpHeIB7XZpaClhU6OUFa4woeXDu3pyl44y9nEGpKqcjKaR0a9KSy8azJ7JbgY3HviSMKqIH5AsykBIJsojHesiHesGvAGEscjgMKSHKedmKVdRqGeDsctztCuYjjKqcjLNHCscjFmHYb2coo(Q)K9bxFamHKR9jaGTv)J6(bBbhhFuKF6FuKFa4wouPp46dGjKCTpbaSTuDu3paClhY6rD)aWTCO(gpWhyLgONKfJhiBCFSOKtsiHesSCaSLKfJhiBCpjqSFVIXo2UMeTMFnjAyvRjrdRQxuYjjKqcjKqcjKy5ayljSJTKebjUKaksIflMgwfjGIe2X2OKasijMgwfjGIeTMpAus0jjAyv9IsojHesiHesiHeyLgONe2XwYjjKqcjLNHCscjKqc5KesiHelhaBjP8mknTIKiiju2ciJb61KGiFlxzwwI1fSf3VGDxts3vg72yicKWxirxitb7gnkjCijijNKqcjKuEgLMwrseKuEgLMwrIojXfjsKKtsiHesSCaSLKSPvKebjiUkvAAvSOKOtsCrIej5KesiHelhaBjrdRQZgijrqsOSfqgJnwtcI8TCLzzjwxWwC)c2DnjDxzSBJHiqcFHeDHmfSB0OKWHKGKCscjKqIgwvNnqsIGenSQoBGKOtsCrIej5KesiHelhaBjHXaXzJ7jjcskpJstRibuKKnTICscjKqILdGTKaqseKaX(9kgJbIZg3VMeKRjrdRQZg4AsCJsojHesibuGcGKsf4cilgsWbsa5GCnjUGCjNKqcjK0wibGKojji1JTKKXlp5KesiHesiHesaijcsCjbuKeRhj6KKyaKaksqQhBJgLCscjKqcjKqcjWknqpjaRjXDnjixtIl5KesiHKYgkYjjKqcjKqcjKaqseKaqIojPh5KesiHesiHesGvAGEsCxtcWAsqsYAxYjjKqcjLNHCwEMpqEIZ6Oi)ycLdaULd)QpQokYNp)KW2(EbVYhati5AoI3yQpztRy(eVW2mUdo4cIto8tN8t2hC9bWesU2htOCeVW2m(x9bWesUMJSp46tiXPj8bWesU2NfJhiBCFSOKtsiHesSCaSLe1MLfsIGee5B5kZYsSUGT4(fS7As6UYy3gdrGe(cj6czky3OKWHK0Tl5KesiHK2cjQnllKqG8rqs3UKKXlpjWknqpjj0uKu2qrcSsd0tYc2gkskpd5S8mFamHKRnjgaHWNpaMqY16SbIZg3)zX4bYg3hlk5KesiHelhaBjjeVvwgw14gFsseKekBbKXCb9AsqKVLRmllX6c2I7xWURjP7kJDBmebs4lKOlKPGDJgLCscjKqsBHKq8wzzyvJB8jjDssWgi2r5zxpnSQjERSmKKXlp5KesiHesiHesWgi2r5zxpnSQjERSmKebjH4TYYWQg34tYjjKqcjLNHCscjKqcSsd0tsiERSmSQXn(Cnjyde7O8SRNgw1eVvwM1K4solpZhJVyV85hSj5Fk2lFg(Gy6g5vSQ4ytDrCo2cK5wOkoqeQ(6ytLTq8B15pXlSnJ)b5hG4facFmGzWz9XekhgFl)QNFWmmTSX9yRJe223ly4kp)KnTcoTiToQ7g)asnHST0)ZMBPVYhMwaSf3xPuLBwl5NofGC(jBAfuFlEp8rxePSPoq36Zchw7qUXZGyClhELJ6Eu3J27OUhTJJ6EuwoQ7ZpQXaiSd5gpJsPknW6JsPknWkaIbCzTScKn2XzJ71L9cAX9dGylaBdCOCmg)hMwaKA8azJ96d2A)ycf0r)JI8Jwdc5WR(tdG7DeAm1Nn3sFLpbWyicDIQThppQlB)KLQuFlEp8rxePSPoq36dtla2I7RuQseFBpE(PtdFYMwbV6plqSwnjeN4JYYNgZNvg72yicKWxirxitb79jKyyYQF3whf5NqIbqiOp3NFuxyFY32RhS2nwm85r7DLpzPk13I3dF0frkBQd0T(esmacHPfP1rD34htOGouDuKFw4WAhYnEgeJB5WRCu3J6E0Eh19ODCu3JYYrDF(jG1kLsvAG1x9PbW9x9NfUp13I3dF0frkBQd0T(OgdrmULdVYr7Du3JYYrr(8dKN4SX9hf5hlhZCLpMq5WxSxWR(tITLpVYhnJnBx55ZpawCiCLpHMF3wF2aw3K1oRd0NFaZo4eBlFELpAgB2UYZNFmHYbGfhcF1hi3wx5JMXMTR885higOUYhnJnBx55ZplyGSX9x5JMXMTR885htOCeaxaF1Na4c4kFcn)UToAVNFyAllnaJn7FLpAgB2UYZNp)esmmz1VBRJI8dS2BCVsFW1hSbIvJHFcjgaHWv)rTT8mrMZuFwT5wOD(tZ3shaCnW2klMJ6(jlvPbwFyZDloe(KLQuFUp)OUW(KVTxpyTBSy4haUgyyfcx9NSPvq95(8J6c7t(2E9G1UXIHFaGCWhfPES4(rngaHDi34zqmULdVYrz5OUp)OgdGWoKB8m6USeQ8O9(WnPT5Rp6IiLn1b6wFaGCWouDuK6XI7haULdVYrDpQ7r7Du3J2XrDpklh195hati5AkLQ8ZIXdKnUpwuYjjKqcjwoa2sIgwLdS6ahQMKiirdNX1BXY5WyiY3YorHTz8iJvfRlylUFb7gLeqcjSeLCscjKqILdGTKGvh4q1KebjHYwazmxqVMee5B5kZYsSUGT4(fS7As6cYgZog2aazeijY4DVrJeDbBcDJgLeoKeKKtsiHesGvAGEs0WzC9wSComwmS6ahQMeqcjAyvoWQdCO6OKOtsCrImk5S8mFm(e223l4v(0YsdfRvh1TJESWclp)4nAkW2(Ebdh19dtfWPbIZAfgaHDi34zU6pyGSX9HR8jKyyELpmChaMqY1(QpaMqY1(GnqSJYZUEAyvt8wzzijcsq(8tZ3YR8HH7aWesU2x9bWesU2hSbIDuE21tdRAI3kldjrqcYNp)GbYg7LcSTVxWiZzQJckxKFyQaonqCw6ZH1oKB8mx9NSuLtlsRJ6UXpB3yY4hThB34NYZWQF3whTd2a5haihSJ(hfPES4(bZW0Yg3JTosyBFVGHR88d230WzJ7VYhnCZFLpaClhI4pQ7Naa2wQoQ7htOCaWTC4x9bBbhhFuKFa4wouPp46dGjKCTp9pkYpaClhY6rD)aWTCiI7OUFuDuKFa4wouFJh4djKqcjWknqpjlgpq24(yGH8DyfcRjb6UMKD31KO2Dnjy31Ka7TMK9ERjrDV1KG7fLCscjKqcjKaR0a9KaDjzdjjgyiFhwHaj6KKyWEKaksGUrJUMKDxs2qsIbgY3HviqIojj2Epsafj7UrJUMe1UKSHKedmKVdRqGeDssm19ibuKO2nA01KGDjzdjjgyiFhwHaj6KKy4EKaksWUrJsojHesiP8mKtsi5dKN4SokYpaClhU6OUFcayB1)OUpF(jHT99cELpTS0qXA1rD7OhlSWYhtOCGTBJ7hsOP(QpMq5W4B5x9j7dU(aycjx7dGjKCnhzFW1NqItt4tXE5Zpig3Z0Yg3h(y8f7Lp)Gnj)dGjKCnhXBm1NSPvmFmHYrllnuSw9vFaIxai8XaMbN1hati5AFwmEGSX9XIsojHesiXYbWwsuBwwijcsqKVLRmllX6c2I7xWURjP7kJDBmebs4lKOlKPGDJschss3UKtsiHesAlKO2SSqcbYhbjD7ssgV8KaR0a9KKqtrszdfjWknqpjlyBOiP8mKZYZ88twQYR(tJ5ZkJDBmebs4lKOlKPGD8bKAczBP)Nn3sFLpmTaylUVsPk3SwYpDQNC(jE12JNhTxhFyAbWwCFLsv(PtbiNFuJbqyhYnEgLsvAG1hLsvAGvaed4YAzfiBSJZg3Rl7f0I7haXwa2g4q5ym(pMqbD0)Oi)O1Gqo8Q)0a4EhHgt9zZT0x5t20k4v)jBAfCArADu3n(zbI1QjH4eF0o(W0cGuJhiBSxFWw7NfoS2HCJNrPuLgy9rh(SGlyGceSYWW9bqWMfgbwnqCaeBaF7cYQbIdrUyAyqWQbIdGGvdedAw(esmacb95(8J6c7t(2E9G1UXIHppAhx5tamgIaB2yY4hTJpHedGqyArADu3n(XekOdvhf5N(6USeQ8O964taRvkLQ0aRV6tdG7V6plCFQVfVh(OlIu2uhOB9rngIyClhELJ6EuKhT31FJSaAq3bBWcsKSWcB0Z1f5xafBz5ODCu3NFG8eNnU)Oi)y5yMR8jX2YNx5JMXMTR885Na4c4kFcn)UToAVNFaS4q4kFcn)UT(SbSUjRDwhOp)W0wwAagB2)kF0m2SDLNp)a526kF0m2SDLNp)aXa1v(OzSz7kpF(bm7GtST85v(OzSz7kpF(XekhawCi8vFmHYraCb8vFwWazJ7VYhnJnBx55ZNFw4WAhYnEgLsvAG1hD4ZcUGbkqWkdd3habBwyey1aXbqSb8TliRgioe5IPHbbRgioacwnqmOz5daKd(Oi1Jf3pHedGq4Q)O2wEMiZzQpR2Cl0o)P5BPdaUgyBLfZrD)KLQ0aRpS5UfhcFYsvQp3NFuxyFY32RhS2nwm8tamgIGsPknW6Jo8zbxWafiyLHrxFaeSzHrGvdeharKlMggekLQ0aRaigqwgmSCWMXBz9jagdr4R(aW1adRq4Q)KnTcQp3NFuxyFY32RhS2nwm8tiXaie0N7ZpQlSp5B71dw7glg(rngaHDi34z0Dzju5r79HBsBZxF0frkBQd0T(aR9g3R0hC9bBGy1y4hMkGtdeNL(CyTd5gpZv)bWesUMsPk)Sy8azJ7JfLCscjKqILdGTKeI3kldjrqsOSfqgZf0Rjbr(wUYSSeRlylUFb7UMKURm2TXqeiHVqIUqMc2nAus4qsqsojHesiXYbWws0WQM4TYYqseKGiFl7ef2MXJ1fSf3VGDJsciHe2sojHesiXYbWwsadMKiijwiERSmKasirdRAI3kltus0jj9qsojHesibwPb6jjKWMFxVfoudNX62P90ZDP7Asadok5S8mFyQaonqCwRWaiSd5gpZv)jKyyYQF3whf5hmq2yVuGT99cgzotDuKFAmFwzSBJHiqcFHeDHmfKLpzPkNwKwh1DJFkpdR(DBD0oydKFaGCWo6FuK6XI7hSVPHZg3FLpA4M)kFa4woeXFu3pyl44yL(GRpHeIB7XZpaClhU6OUFa4woeXDu3pyl44y9nEGpKqcjKaR0a9KSy8azJ7JbgY3HviSMKqIH5AsykBIJsojHesiHesGvAGEscjgMKSHKedmKVdRqGeDsctztCuYjjKqcjLNHCscjFmHYb2coo(Q)K9bxFamHKR9jaGTv)J6(bBbhhFuKF6FuKFa4wouPp46dGjKCTpQokYpMq5aGB5WR(da3YH6B8aFGvAGEswmEGSX9XIsojHesiXYbWwswmEGSX9KaX(9kg7y7As0A(1KOHvTMenSQErjNKqcjKqcjKqILdGTKWo2sseK4scOijwSyAyvKaksyhBJsciHKyAyvKaks0A(OrjrNKOHv1lk5KesiHesiHesGvAGEsyhBjNKqcjKuEgYjjKqcjKtsiHesSCaSLKYZO00ksIGKqzlGmgOxtcI8TCLzzjwxWwC)c2DnjDxzSBJHiqcFHeDHmfSB0OKWHKGKCscjKqs5zuAAfjrqs5zuAAfj6KexKirsojHesiXYbWwsYMwrseKG4QuPPvXIsIojXfjsKKtsiHesSCaSLenSQoBGKebjHYwazm2ynjiY3YvMLLyDbBX9ly31K0DLXUngIaj8fs0fYuWUrJschscsYjjKqcjAyvD2ajjcs0WQ6SbsIojXfjsKKtsiHesSCaSLegdeNnUNKiiP8mknTIeqrs20kYjjKqcjwoa2scajrqce73RymgioBC)AsqUMenSQoBGRjXnk5KesiHeqbkaskvGlGSyibhibKdY1K4cYLCscjKqsBHeas6KKGup2ssgV8KtsiHesiHesibGKiiXLeqrsSEKOtsIbqcOibPESnAuYjjKqcjKqcjKaR0a9KaSMe31KGCnjUKtsiHeskBOiNKqcjKqcjKqcajrqcaj6KKEKtsiHesiHesibwPb6jXDnjaRjbjjRDjNKqcjKuEgYz5z(a5joRJI8da3YHSEu3pbaSTuDu3Np)KW2(EbVYhtOCy8T8R(K9bxFamHKR9XekhXlSnJ)vFamHKR5i7dU(esCAcFm(I9YNFWMK)jEHTz8pi)aycjxBsmacHpFamHKR1zdeNnU)ZIXdKnUpwuYjjKqcjwoa2ssiERSmSQXn(KKiiju2ciJ5c61KGiFlxzwwI1fSf3VGDxts3vg72yicKWxirxitb7gnk5KesiHelhaBjrdRAI3kldjrqcI8TStuyBgpwxWwC)c2nkjGesyl5KesiHeyLgONKq8wzzyvJB85As0WQM4TYYSMexYz5z(eVW2mUdo4cIto8tN8dGjKCTplgpq24(yrjNKqcjKy5ayljQnllKebjiY3YvMLLyDbBX9ly31K0DLXUngIaj8fs0fYuWUrjHdjPBxYjjKqcjTfsuBwwiHa5JGKUDjjJxEsGvAGEssOPiPSHIeyLgONKfSnuKuEgYz5z(uSx(m8bX0nYRyvXXM6I4CSfiZTqvCGiu91XMkBH43QZFaIxai8XaMbN1hati5AoI3yQpztRyE(jBAf8Q)OgdGWoKB8mig3YHx5OUxFwyBp3ESbYnISxhGosaDKa6Vak22Xr7D9zHT9C7Xgi3iYEDa6ib0rcO)cOyBhhTJRplSTNBp2a5gr2RdqhjGosa9xafB74OSCuKp)KLQuFlEp8rxePSPoq36t20kO(w8E4JUisztDGU1h1yae2HCJNrPuLgy9rPuLgyfaXaUSwwbYg74SX96YEbT4(bqSfGTbouogJ)Jwdc5WR(tdG7DeAm1Nn3sFLpMqbD0)Oi)W0cGuJhiBSxFWw7NaymeHor12JNh1LTFw4WAhYnEgeJB5WRCu3J6E0Eh19ODCu3JYYrDF(HPfaBX9vkv5NofGC(jBAfCArADu3n(HPfaBX9vkv5M1s(PtbiNFWmmTSX9yRJe223ly4kp)asnHST0)ZMBPVYNfiwRMeIt8rz7NTBmz8J62JTF8gnfyBFVGHJ6(baYb7q1rrQhlUFWazJ7dx5tiXW8kFy4oamHKR9vFamHKR9bBGyhLND90WQM4TYYqseKG85NMVLx5dd3bGjKCTV6dGjKCTpyde7O8SRNgw1eVvwgsIGeKpF(bGB5WRCu3J6E0Eh19ODCu3JYYrDF(8OSCLpHedGqyArADu3n(XekOdvhf5N(6USeQ8O964Zchw7qUXZGyClhELJ6Eu3J27OUhTJJ6EuwoQ7ZpbSwPuQsdS(QpQXaiSd5gpdIXTC4voklh195NfUp13I3dF0frkBQd0T(OgdrmULdVYr7Du3JYYrr(8dKN4SX9hf5haihSJ(hfPES4(jKyyYQF3whf5haih8rrQhlUFcjgaHWv)rTT8mrMZuFwT5wOD(tZ3shaCnW2klMJ6(jlvPbwFyZDloe(KLQuFUp)OUW(KVTxpyTBSy4haUgyyfcx9NSPvq95(8J6c7t(2E9G1UXIHFcjgaHG(CF(rDH9jFBVEWA3yXWpQXaiSd5gpJUllHkpAVpCtAB(6JUisztDGU1hyT34EL(GRpydeRgd)KLQCArADu3n(bWesUMsPk)Sy8azJ7JfLCscjKqILdGTKOHv5aRoWHQjjcs0WzC9wSComgI8TStuyBgpYyvX6c2I7xWUrjbKqclrjNKqcjKy5ayljy1bounjrqsOSfqgZf0Rjbr(wUYSSeRlylUFb7UMKUGSXSJHnaqgbsImE3B0irxWMq3OrjHdjbj5KesiHeyLgONenCgxVflNdJfdRoWHQjbKqIgwLdS6ahQokj6KexKiJsolpZhJpHT99cELpTS0qXA1rD7OhlSWYZpmvaNgioRvyae2HCJN5Q)SWH1oKB8mkLQ0aRp6WNfCbduGGvggUpac2SWiWQbIdGyd4BxqwnqCiYftddcwnqCaeSAGyqZYhmq2yVuGT99cgzotDuq5I8dtlasnEGSXE9bBTFyQaonqCw6ZH1oKB8mx9NYZWQF3whTd2a5NgZNvg72yicKWxirxitbz7hSVPHZg3FLpA4M)kFcayB1)OUFa4woC1rD)aWTCiI)OUFmHYba3YHF1hSfCC8rr(bGB5qwpQ7N(hf5haULdv6dU(aycjx7da3YHiUJ6(r1rr(bGB5q9nEGpKqcjKaR0a9KSy8azJ7JbgY3HviSMeO7As2DxtIA31KGDxtcS3As27TMe19wtcUxuYjjKqcjKqcSsd0tc0LKnKKyGH8DyfcKOtsIb7rcOib6gn6As2DjzdjjgyiFhwHaj6KKy79ibuKS7gn6Asu7sYgssmWq(oScbs0jjXu3JeqrIA3Orxtc2LKnKKyGH8DyfcKOtsIH7rcOib7gnk5KesiHKYZqojHKpqEIZ6Oi)eaW2s1rDF(8tcB77f8kFAzPHI1QJ62rpwyHLpMq5aB3g3pKqt9vFY(GRpaMqY1(aycjxZr2hC9jK40e(ycLJwwAOyT6R(aycjx7ZIXdKnUpwuYjjKqcjwoa2sIAZYcjrqcI8TCLzzjwxWwC)c2DnjDxzSBJHiqcFHeDHmfSBus4qs62LCscjKqsBHe1MLfsiq(iiPBxsY4LNeyLgONKeAkskBOibwPb6jzbBdfjLNHCwEMpgFXE5ZpytY)aeVaq4JbmdoRpf7Lp)GyCptlBCF4Jjuom(w(vFamHKR5iEJP(KnTI55NSuLx9NSPvWPfP1rD34NSPvWR(t8QThppAVo(OgdGWoKB8mkLQ0aRpkLQ0aRaigWL1Ykq2yhNnUxx2lOf3paITaSnWHYXy8F0AqihE1FAaCVJqJP(S5w6R8XekOJ(hf5hMwaSf3xPuLF6uaY5NSuL6BX7Hp6IiLn1b6wFaPMq2w6)zZT0x5tdG7V6pygMw24ES1rcB77fmCLNFyAbWwCFLsvUzTKF6up58ZceRvtcXj(OD8z7gtg)OUD0XhlhZCLpMq5WxSxWR(tITLpVYhnJnBx55ZpawCiCLpHMF3wF2aw3K1oRd0NFwWazJ7VYhnJnBx55ZpMq5aWIdHV6dedux5JMXMTR885hM2YsdWyZ(x5JMXMTR885hWSdoX2YNx5JMXMTR885Na4c4kFcn)UToAVNFmHYraCb8vFGCBDLpAgB2UYZNp)4nAkW2(Ebdh19daKd2HQJIupwC)GbYg3hUYNqIH5v(WWDaycjx7R(aycjx7d2aXokp76PHvnXBLLHKiib5ZpnFlVYhgUdati5AF1hati5AFWgi2r5zxpnSQjERSmKebjiF(8da3YHx5OUh19O9oQ7r74OUhLLJ6(85ZpSFuxw65(8ha diff --git a/WA codes/Dumpy Fuckery(WA CODE).txt b/WA codes/Dumpy Fuckery(WA CODE).txt new file mode 100644 index 0000000..3fde40c --- /dev/null +++ b/WA codes/Dumpy Fuckery(WA CODE).txt @@ -0,0 +1 @@ +deve(bqivsbzraKlbfQ(euivnkujDkufwfuivEfuOmlPaDlvs2fa1VujLmmO0XaXYaWZqvAAsrxtQyBsGVjvQXbfCofPwhuu17ujfyEQKc5EOIAFQKcL)PskOoiQeluQYdrfzIqH4Iks2iQI(iuuzKqHKtkfALsqVuLuOAMsbDtPQyNq1pvedvQKLIk8uIPQWvvjvBfkKYxHIYAvjfnxPa2R4VG0Gv1HrAXOs9yf1Kb1LPSza9zjA0QuNgXQLQsEnuKzJYTbA3u1VL0WLshxLuQLtLNdz6KUUk2UkX3rvnEPQ68sO1lvLA)kDGKreAgrJGIaaGBcyiDhbmcCe4mI4Sss1pk2ArkD1tBe6SsUydhPS0C9PcBb)kiyJy93s9WgC6fbMG6RJFwjxSiuglcYya7Qs8AKEtgJj9PHtXZrecCKRHUgcJCaBlUpMr8LOi(d4Wrklnhk4qIWQu4mIOuM5vaYic4HPKmIgnIszMxZic4HPKmIgnYmJIqzebr8LmlsxC04uYiAeycqGK5dtlMreWdtjzenAexLzzeb8WusgrJgXrNTmIaEykjJOrJ0EPvPmZRzeb8WusgrJgbiDwjvFgrapmLKr0Oroid6mJIqru3XIgnYCgbhsgroE1rklnxgrqTgJHtbTG3S7o8wq0i0zLCXgoszP56tf2co2iQJuwAUmIOfBTiiLQhuKJ3UyEnc9O1ihKbfDx5pXNErSlMxJWPALbx573VlxT0zi0(CvAngJhroid6Xt00lIZOmP1ymCkOfHdARECwKdYGIAngdNcAPxe0DL)eFe0DL)epNQvgCLVpcQ1ymCkOf8MD3H3cImFqAfe6nb2IOeqdoAKBJuERbVj2iSkfoJikLzEfGmIaEykjJOrJOuM51mIaEykjJOrJmZOiugrqeFjZI0fhnoLmIaEykjJiDXrJtjJ0lA0ihKbDMrrO0lIRYSmIaEykjJOrJaKoRKQpJiGhMsYiA0iTxAvkZ8AgrapmLKr0OrC0zlJiGhMsYiA0iWeGajZhMwmJiGhMsYiA0OrawDwPRE8WdRF94Sin6vZbKoBnaxGHREudGzgftC54OOgORkFZXLJJI6JbtOnaxookQb4YXrbaseNvsQ(rXwlsRRw6mesT(1JZIuDeZRuLu9r4c(Oro1WjC6ACmRrzQi(d4Wrklnhk4aeHcdtus1tzqvhPS0COmcoKmIOoszP5YiIwS1IGuQEqrqhUTlMxLdqGK(JaLtCrgqLbx4ye5GmOO7k)j(0lY8bPvqO3eylIsan4i2fZRr4uTYGR8973LRw6meAFUkTgJXJiOd32fZRD5mGK(JiDnvdByeNrzsRXy4uqlch0w94SihKbf1Amgof0sVihVDX8Ae6rRrq3v(t8rq3v(t8Cyu4IroEIgPLrlAUihKb94jA6fb1Amgof0cEZU7WBbrJC8QJuwAUmIGUR8N4JGUR8N45WOWfJGAngdNcAbVz3D4TGOrJgHahHdAREC2(nox9r4tG17G3eBeI)I5qw6fbMG6RJFwjxSiuFXieprHIuQtn4GdjsXjabImn4xbW0aayE7en4aKrKItacezAWVI3MqaCZPJaS6Ssx94H5uLvDzeCiHNnXawEXaVtxawa6aag6aqbb4vD4n4aeEwq3yacgMgcay5TtbtxagkiaVQtNOrOZk5InCKYsZ1NkSf8RGGnI6iLLMlJiAXwlcsP6bf54TlMxJqpAnYbzqr3v(t8Pxe7I51iCQwzWv((97YvlDgcTpxLwJX4rKdYGE8en9I4mktAngdNcArKBkCLpqI5HJCqguuRXy4uql9IGUR8N4JGUR8N45uTYGR89rMpiTcc9MaBrucObhb1Amgof0coVnBYlVrJ4QkvjvFWHaH3i3gP8wdp7gBbyO7UbadD3PzhEbaBNa8QMDhHvPWzerPmZRaKreWdtjzenAeLYmVMreWdtjzenAKzgfHYicI4lzwKU4OXPKreWdtjzePloACkzKErJg5GmOZmkcLErCvMLreWdtjzenAK2lTkLzEnJiGhMsYiA0iaPZkP6Zic4HPKmIgnIJoBzeb8WusgrJgbMaeiz(W0Izeb8WusgrJgns)tacezAWVcdyJaS6Ssx94Hhw)6XzrA0RMdiD2AaUadx9OgaZmkM4YXrrnqxv(MJlhhf1hdMqBaUCCuudWLJJcbGMrCwjP6hfBTiTUAPZqi16xpols1rmVsvs1hbJAchnEnNGp4sdJ4pGdhPS0COGdqecCe5Mcx5d087pdhHcdtus1tzqvhPS0COmcoKmIOoszP5YiIwS1IGuQEqrqhUTlMxLdqGK(JaLtCrgqLbx4ye5GmOO7k)j(0lY8bPvqO3eylIsan4i2fZRr4uTYGR8973LRw6meAFUkTgJXJiOd32fZRD5mGK(JiDnvdByeNrzsRXy4uqlsFiEyUnpS5ICqguuRXy4uql9IC82fZRrOhTgbDx5pXhbDx5pXZPALbx57JC8enslJw0Croid6Xt00lcQ1ymCkOfCiaWl2MyJg54vhPS0Czeb1Amgof0coea4fBtSrJgncFcSEhCiaaaGX2SjafGL3oDWYBKJxDKYsZLreuRXy4uql482SjV8gncmb1xh)SsUyrO(Iri(lMdzPxKzxTfAXGdbW8gH4jkuKsDQbhCirMD1wO9hCSaUGPJgCEZiYXRoszP5YicQ1ymCkOfCiaWl2MyJgby1zLU6XdZPkR6Yi4qcp7gBbnB2nwSy5TBiyOjandWR6WBWbi8ednBca2MqkOtZMn5TdKob4vD4nAe6SsUydhPS0C9PcBbhBe1rklnxgr0ITweKs1dkYXBxmVgHE0AKdYGIUR8N4tVi2fZRr4uTYGR8973LRw6meAFUkTgJXJihKb94jA6fXzuM0Amgof0I0hIhMBZdBUihKbf1Amgof0sViO7k)j(iO7k)jEovRm4kFFK5dsRGqVjWweLaAWrqTgJHtbTGdbaEX2eB0iUQsvs1hCiq4nYTrkV1WZUXwag6UBaWq3DA2HxaW2jaVQz3ryvkCgrukZ8kazeb8WusgrJgrPmZRzeb8WusgrJgzMrrOmIGi(sMfPloACkzeb8Wusgr6IJgNsgPx0Oroid6mJIqPxexLzzeb8WusgrJgP9sRszMxZic4HPKmIgncq6SsQ(mIaEykjJOrJ4OZwgrapmLKr0OrGjabsMpmTygrapmLKr0OrJaS6Ssx94Hhw)6XzrA0RMdiD2AaUadx9OgaZmkM4YXrrnqxv(MJlhhf1hdMqBaUCCuudWLJJcbGMrMD1wOfdoeaZBeqIZvDPxeNvsQ(rXwlsRRw6mesT(1JZIuDeZRuLu9rWOMWrJxZj4dU0qOnIJrBkoKPI4pGdhPS0COGdjcfgMOKQNYGQoszP5qzencboYuxO(sJrqGr4tG17Gdbaaam2MnbOaS82PdwEJatq91XpRKlweQVyK(NaeiY0GJbSri(lMdzPxKItacezAWVI3MqaCZPJq8efksPo1GdoKiZUAl0(dowaxW0rdEZmIuCcqGitd(v8cbdaUdKiGvyJbT)GJfWy7ocyf2yqBP6DeuRXyORv3a7hARJyifk3mdHi(Ykq9CCguKsvB(2qkGbbiI6iLLMlJiEkOHYi4qIWbTvpolAeuRXyncJYi4qcEZU7WBbrJmFqAfe6nb2IOeqdoAewLcNreLYmVcqgrapmLKr0OrukZ8AgrapmLKr0OrMzuekJiiIVKzr6IJgNsgrapmLKrKU4OXPKr6fnAKdYGoZOiu6fXvzwgrapmLKr0OrAV0QuM51mIaEykjJOrJaKoRKQpJiGhMsYiA0io6SLreWdtjzenAeycqGK5dtlMreWdtjzenA0ioRKu9JITweWkSXIqNvYfB4iLLMRpvyl4xbbBeycQVo(zLCXIqzSiGvyJbTVd(vDamKoriWr4G2QhNTpxMvYfQAWraRWgdAXGFfaaE6or8hWHJuwAouWHen4DYic3vhS56rNXeSR2gbV6TihV6iLLMlJiO7k)j(iO7k)jEomkCXiOwJXWPGwW5TztE5nAe6SsUydhPS0C9PcBb)kiyJ0wDQJs0RzTcMEraRWgdAlvVJGAngdDTADedPqzgTTceiLO3qvQR0uOThxlZamiaruhPS0Czerl2ArqkvpOihVDX8Ae6rRroidk6UYFIp9IyxmVgHt1kdUY3VFxUAPZqO95Q0AmgpI4PGgkJGdjch0w94SOrCgLjTgJHtbTiYnfUYhiX8WroidkQ1ymCkOLErqTgJ1imkJGdj4n7UdVfenc6UYFIpc6UYFINdJcxmYbzqpEIMErMpiTcc9MaBrucObhb1Amgof0coVnBYlVrJWQu4mIOuM5vaYic4HPKmIgnIszMxZic4HPKmIgnYmJIqzebr8LmlsxC04uYic4HPKmI0fhnoLmsVOrJCqg0zgfHsViUkZYic4HPKmIgncq6SsQ(mIaEykjJOrJ0EPvPmZRzeb8WusgrJgXrNTmIaEykjJOrJatacKmFyAXmIaEykjJOrJgbzx7J5NTGdPd2ioRKu9JITweWkSXIuCcqGitd(v8ITdGX2jcmb1xh)SsUyrO(IriWrWSgXXC7l3u4kFGMFFaIqHHjkP6PmOQJuwAougbhsgruhPS0Czerl2ArqkvpOiOd32fZRYbiqs)rGYjUidOYGlCmICqgu0DL)eF6fz(G0ki0BcSfrjGgCe7I51iCQwzWv((97YvlDgcTpxLwJX4re0HB7I51UCgqs)rKUMQHnmIZOmP1ymCkOfPpepm3Mh2CroidkQ1ymCkOLEroE7I51i0JwJGUR8N4JGUR8N45WOWfJC8enslJw0Croid6Xt00lcQ1ymCkOfCiaWl2MyJg54vhPS0CzebDx5pXhbDx5pXZHrHlgb1Amgof0coea4fBtSrJgnI)aoCKYsZHcoar6FcqGitd(vqaaBeINOqrk1PgCWHen4fKreURoyZ1JoJjyxTncE1BrkobiqKPb)kEX2bWy7eHoRKl2WrklnxFQWwWVcc2iTvN6Oe9AwRGPxeWkSXG2s17iOwJXqxRwhXqkuMrBRabsvdkbSLoRqXcbWGaerDKYsZLreTyRfbPu9GIC82fZRrOhTg5GmOO7k)j(0lIDX8AeovRm4kF)(D5QLodH2NRsRXy8iYbzqpEIMErCgLjTgJHtbTitDH6lngbbg5GmOOwJXWPGw6fb1AmwJWOmcoKG3S7o8wq0iO7k)j(iO7k)jEomkCXiEkOHYi4qIWbTvpolAeuRXy4uql4a0SaaWq3rMpiTcc9MaBrucObhncRsHZiIszMxbiJiGhMsYiA0ikLzEnJiGhMsYiA0iZmkcLreeXxYSiDXrJtjJiGhMsYisxC04uYi9IgnYbzqNzuek9I4QmlJiGhMsYiA0iTxAvkZ8AgrapmLKr0OrasNvs1NreWdtjzenAehD2Yic4HPKmIgncmbiqY8HPfZic4HPKmIgnAeKDTpMF2coKoyJ4Sss1pk2AraRWglYXRoszP5Yic6UYFIpc6UYFINdJcxmcQ1ymCkOfCaAwaayO7Or6FcqGitdoeaWgHahbZAehZTph0w94SiuyyIsQEkdQ6iLLMdLr0i(d4Wrklnhk4qIatq91XpRKlweQVyeINOqrk1PgCWHen4DNrK(NaeiY0Gdbl2ifNaeiY0GFvtaWgHoRKl2WrklnxFQWwWVcc2iTvN6Oe9AwRGPxeWkSXG2s17iOwJXqxlUREdk6Mc9MuEdyqaIOoszP5YiYbzqPm(0Ii1DS0lcQ1ymCkOfCaAwaayO7iAXwlcsP6bf54TlMxJqpAnYbzqr3v(t8Pxe7I51iCQ6HjkP6rrCgLjTgJHtbTitDH6lngbbg5GmOOwJXWPGw6fb1AmwJWOmcoKG3S7o8wq0iO7k)j(iO7k)jEomkCXihKb94jA6fXtbnugbhseoOT6XzrJmFqAfe6nb2IOeqdoAKBJuERbhsNiSkfoJikLzEfGmIaEykjJOrJOuM51mIaEykjJOrJmZOiugrqeFjZI0fhnoLmIaEykjJiDXrJtjJ0lA0ihKbDMrrO0lIRYSmIaEykjJOrJaKoRKQpJiGhMsYiA0iTxAvkZ8AgrapmLKr0OrC0zlJiGhMsYiA0iWeGajZhMwmJiGhMsYiA0Orq21(y(zl4q6Gnc3vhS5sVioRKu9JITweWkSXIWD1bBoH03wWHGnYXRoszP5Yic6UYFIpc6UYFINdJcxmcQ1ymCkOfCaAwaayO7OraRWgdAFh8MaE6iCxDWMBcqGitdEZiaDuqtuhvPbN3iuyyIsQEkdQ6iLLMdLr0iGvyJbTyWHa4U7eHpbwVdoKoyJqGJi3eJbV)W6xpolI)aoCKYsZHcoKiWeuFD8Zk5IfH6lgH4jkuKsDQbhCirdogYiIA9R8KrlrrMC9rdBeFQi9pbiqKPbhcwSrkobiqKPb)QMaajc30zmv6QhpmNQSQlJG3m4yJgby1R8KrlrrMC9rdBeFQiCtDCQYQUmcoKWtm0S7U5TGMyX2SzbaGfdydWR6uqWbi8edn7UBElOjwSnBwaayXa2a8QofeCEdpXqZU7M3cAIfBZMfaawmGnaVQtbrJWQu4mIOuM5vaYic4HPKmIgnIszMxZic4HPKmIgnYmJIqzebr8LmlsxC04uYic4HPKmI0fhnoLmsVOrJCqg0zgfHsViUkZYic4HPKmIgns7LwLYmVMreWdtjzenAeG0zLu9zeb8WusgrJgXrNTmIaEykjJOrJatacKmFyAXmIaEykjJOrJgXzLKQFuS1Iqpok3uxeKsNXekChb1sDyAy9RhNfzy9RhNHAaP1ymUmRKluLu9tUyogTiQbMAMrArg0(uR(i0Jwd3rGjO(64NvYflcLXIC8QJuwAUmIGUR8N4JGUR85cJpTikcQ1ymCkOfCiDhncDwjxSHJuwAU(uHTGFfeSrGjOwgT4W6xBObuJGXBJOoszP5YiIwS1IGuQEqroE7I51i0JwJCqgu0DL)eF6fXUyEncNQvgCLVF)UC1sNHq7ZvP1ymEe5GmOhprtVioJYKwJXWPGwKUQ8n3(yw1bJ53xUjgdoYbzqrTgJHtbT0lc6UYFIpc6UYNlm(0IOiOwJXWPGwWH0DK5dsRGqVjWweLaAWrJGuYmMkIrooQsQ(0lYTrkV1GdPGikb0CH7iK5QpChb1sDycZiW6DW7eb1sDycJYiL3AW7Gncmb1YOfhw)khKYBncg3hHahrUjgdEFoHrIWNaR3bhshSruRFvi9TfCiDI4pGdhPS0COGdjcXtuOiL6udo4qIGAPomLErd(0zeH7Qd2C9OZyc2vBJGx9wKJxDKYsZLre0DL)eFe0DL)ephgfUyeuRXy4uql4a0SaaWq3rJ0wDQJs0RzTcMEraRWgdAlvVJGAngdDTURSIqBD2mfPqpCBoO3upmGbbiYTrkV1G3eBewLcNreLYmVcqgrapmLKr0OrukZ8AgrapmLKr0OrMzuekJiiIVKzr6IJgNsgrapmLKrKU4OXPKr6fnAKdYGoZOiu6fXvzwgrapmLKr0OrasNvs1NreWdtjzenAK2lTkLzEnJiGhMsYiA0io6SLreWdtjzenAeycqGK5dtlMreWdtjzenA0ii7AFm)SfCiDWgHoRKl2WrklnxFQWwWVcc2ioRKu9JITweWkSXIuCcqGitd(vnXIncmb1xh)SsUyrO(IraRWgdAFh8oaUzNiaDuqtuhvPbN3iuyyIsQEkdQ6iLLMdLr0iGvyJbTyWbaWaeHpbwVdoKoriWr4GctO(zBF16xpoBFir8hWHJuwAouWHeH4jkuKsDQbhCiruhPS0Cze5GmOugFArK6ow6fb1Amgof0coanlaam0DeTyRfbPu9GIC82fZRrOhTg5GmOO7k)j(0lIDX8Aeov9WeLu9OioJYKwJXWPGwKPUq9LgJGaJCqguuRXy4uql9IGAngRryugbhsWB2DhEliAe0DL)eFe0DL)ephgfUyKdYGE8en9I4PGgkJGdjch0w94SOrMpiTcc9MaBrucObhnAWHGnJiCxDWMRhDgtWUABe8Q3IC8QJuwAUmIGUR8N4JGUR8N45WOWfJGAngdNcAbhGMfaag6oAK2QtDuIEnRvW0lcyf2yqBP6DeuRXyOR1DLveARZMPif6HBZb9M6HbmiarUns5Tg8MyJWQu4mIOuM5vaYic4HPKmIgnIszMxZic4HPKmIgnYmJIqzebr8LmlsxC04uYic4HPKmI0fhnoLmsVOrJCqg0zgfHsViUkZYic4HPKmIgns7LwLYmVMreWdtjzenAeG0zLu9zeb8WusgrJgXrNTmIaEykjJOrJatacKmFyAXmIaEykjJOrJgbzx7J5NTGdPd2i0zLCXgoszP56tf2c(vqWgXzLKQFuS1IawHnwKItacezAWVI3oyJatq91XpRKlwekJfbScBmO9DW7a4MDIa0rbnrDuLgCEJqHHjkP6PmOQJuwAougbhsgruhPS0Czez(M6kne0AR5OA1f5ASiAXwlcsP6bfbD42UyEvoabs6pcuoXfzavgCHJrKdYGIUR8N4tVihKbD(M6knu6fXUyEncNQvgCLVF)UC1sNHq7ZvP1ymEebD42UyETlNbK0FePRPAydJ4mktAngdNcAr6QY3C7JzvhmMFFoOWeQF2ICqguuRXy4uql9ImFtDLgkc2ihVDX8Ae6rRrq3v(t8rq3v(t8CQwzWv((ihKb94jA6f54jAKwgTO5IGAngdNcAbhY0n7GD6OroE1rklnxgrq3v(t8rq3v(t8CQwzWv((iOwJXWPGwWHmDZoyNoA0OraRWgdAXGdaGbicFcSEhCiDIqGJWbfMq9Z2(Q1VEC2(aeXFahoszP5qbhGieprHIuQtn4GdjI6iLLMlJihKbLY4tlIu3XsViOwJXWPGwWbOzbaGHUJOfBTiiLQhuKJ3UyEnc9O1ihKbfDx5pXNErSlMxJWPQhMOKQhfXzuM0Amgof0Im1fQV0yeeyKdYGIAngdNcAPxeuRXyncJYi4qcEZU7WBbrJGUR8N4JGUR8N45WOWfJCqg0JNOPxepf0qzeCir4G2QhNfnY8bPvqO3eylIsan4OrdoeizeH7Qd2C9OZyc2vBJGx9wKItacezAWVI3oyJ0wDQJs0RzTcMEraRWgdAlvVJGAngdDTURSIqBD2mfPqpCBoO3upmGbbiYTrkV1G3eBewLcNreLYmVcqgrapmLKr0OrukZ8AgrapmLKr0OrMzuekJiiIVKzr6IJgNsgrapmLKrKU4OXPKr6fnAKdYGoZOiu6fXvzwgrapmLKr0OrasNvs1NreWdtjzenAK2lTkLzEnJiGhMsYiA0io6SLreWdtjzenAeycqGK5dtlMreWdtjzenA0ii7AFm)SfCiDWgHoRKl2WrklnxFQWwWVcc2ioRKu9JITweWkSXIC8QJuwAUmIGUR8N4JGUR8N45WOWfJGAngdNcAbhY0n7GD6OrGjO(64NvYflcLXIawHng0(o4DaCZora6OGMOoQsdoVriWr4GctO(zBF16xpoBFEJawHng0Ibhaadqe(ey9o4q6eHcdtus1tzqvhPS0COmIgXFahoszP5qbhseINOqrk1PgCWHerDKYsZLrKdYGoFtDLgk9ICqg0JNOPxeuRXy4uql4qMUzhSthz(M6kne0AR5OA1fHZCoIwS1IGuQEqroE7I51i0JwJCqgu0DL)eF6fXUyEncNQvgCLVF)UC1sNHq7ZvP1ymEeXzuM0Amgof0I0vLV52hZQoym)(CqHju)Sf5GmOOwJXWPGw6fz(M6knueaIGUR8N4JGUR8N45WOWfJmFqAfe6nb2IOeqdoA0GdbGmIuYQ8tVihV6iLLMlJiOwJXWPGwWHmDZoyNoAe6SsUydhPS0C9PcBb)kiyJqNvs1JYicsPonJiWvOLSk)WDKswLpuGokOfbZmkM4YXrryEoOWeQF22NdJcxmsjRYhkDwjvFe0DLF0OruRFfYuEk3mdoChrDKYsZLrKdYGoFtDLgk9ICqg0JNOPxK5dsRGqVjWweLaAWrMVPUsdbT2AoQwDr4mNJmFtDLgkcKihVDX8Ae6rRroidk6UYFIp9IyxmVgHt1kdUY3VFxUAPZqO95Q0AmgpI4mktAngdNcAr6QY3C7JzvhmMFFoOWeQF2ICqguuRXy4uql9IOfBTiiLQhue0DL)eFe0DL)epNQvgCLVpcQ1ymCkOfCit3Sd2PJg52iL3AW7GncRsHZiIszMxbiJiGhMsYiA0ikLzEnJiGhMsYiA0iZmkcLreeXxYSiDXrJtjJiGhMsYisxC04uYi9IgnYbzqNzuek9I4QmlJiGhMsYiA0iTxAvkZ8AgrapmLKr0OrasNvs1NreWdtjzenAehD2Yic4HPKmIgncmbiqY8HPfZic4HPKmIgnAKItacezAWVQjwSrCwjP6hfBTiK5QpcFcSEhCiyicbochuyc1pB7ZHrHlgHcdtus1tzqvhPS0COmcoKmIOoszP5YiY8n1vAiO1wZr1QlcN5CeTyRfbPu9GIGoCBxmVkhGaj9hbkN4ImGkdUWXiYbzqr3v(t8PxKdYGoFtDLgk9IyxmVgHt1kdUY3VFxUAPZqO95Q0AmgpIGoCBxmV2LZas6pI01unSHrCgLjTgJHtbTiDv5BU9XSQdgZVphuyc1pBroidkQ1ymCkOLErMVPUsdfbGihVDX8Ae6rRrq3v(t8rq3v(t8Cyu4Iroid6Xt00lYXt0iTmArZfb1Amgof0coKPB2b70rJC8QJuwAUmIGUR8N4JGUR8N45WOWfJGAngdNcAbhY0n7GD6OrJgbOJcAI6Okn4aeXFahoszP5qbhGieprHIuQtn4Gdjcmb1xh)SsUyrO(IrdoeEZisjRYp9IuCcqGitd(v82bBe6SsUydhPS0C9PcBb)kiyJqNvs1JYicsPonJiWvOLSk)WDKswLpu6SsQ(iO7k)iLSkFOaDuqlcMzumXLJJIW8CqHju)STphgfUy0OruRFfYuEk3mdoChrDKYsZLrKdYGoFtDLgk9ICqg0JNOPxeuRXy4uql4qMUzhSthz(M6kne0AR5OA1fHZCoY8n1vAOiae54TlMxJqpAnYbzqr3v(t8Pxe7I51iCQwzWv((97YvlDgcTpxLwJX4reNrzsRXy4uqlsxv(MBFmR6GX87ZbfMq9ZwKdYGIAngdNcAPxeTyRfbPu9GIGUR8N4JGUR8N45WOWfJmFqAfe6nb2IOeqdoAKBJuERbVd2iSkfoJikLzEfGmIaEykjJOrJOuM51mIaEykjJOrJmZOiugrqeFjZI0fhnoLmIaEykjJiDXrJtjJ0lA0ihKbDMrrO0lIRYSmIaEykjJOrJaKoRKQpJiGhMsYiA0iTxAvkZ8AgrapmLKr0OrC0zlJiGhMsYiA0iWeGajZhMwmJiGhMsYiA0OroE1rklnxgrq3v(t8rq3v(t8Cyu4IrqTgJHtbTGdz6MDWoD0ioRKu9JITweYC1hHpbwVdoemeHcdtus1tzqvhPS0COmcoKmIOoszP5YiY8n1vAiO1wZr1QlcN5CeTyRfbPu9GIGoCBxmVkhGaj9hbkN4ImGkdUWXiYbzqr3v(t8PxKdYGoFtDLgk9IyxmVgHt1kdUY3VFxUAPZqO95Q0AmgpIGoCBxmV2LZas6pI01unSHrCgLjTgJHtbTiDv5BU9XSQdgZVphuyc1pBroidkQ1ymCkOLErMVPUsdfbGihVDX8Ae6rRrq3v(t8rq3v(t8Cyu4IroEIgPLrlAUihKb94jA6fb1Amgof0coKPB2b70rJC8QJuwAUmIGUR8N4JGUR8N45WOWfJGAngdNcAbhY0n7GD6OrJgHahHdkmH6NT95WOWf3hGiaDuqtuhvPbVze)bC4iLLMdfCaIq8efksPo1GdoKiWeuFD8Zk5IfH6lgn4qAMreul1HjmJaR3bVtKItacezAWVQjwSrCvLQ2W6xJ0WP45iczU6d3raw9kpz0suKjxF0WgXNkc3uhNQSQlJGdj8edn7UBElOjwSnBwaayXa2a8QofeCacpXqZU7M3cAIfBZMfaawmGnaVQtbbN3Wtm0S7U5TGMyX2SzbaGfdydWR6uq0iSkfoJikLzEfGmIaEykjJOrJOuM51mIaEykjJOrJmZOiugrqeFjZI0fhnoLmIaEykjJiDXrJtjJ0lA0ihKbDMrrO0lIRYSmIaEykjJOrJaKoRKQpJiGhMsYiA0iTxAvkZ8AgrapmLKr0OrC0zlJiGhMsYiA0iWeGajZhMwmJiGhMsYiA0OrCwjP6hfBTi0JJYn1fbP0zmHc3rqTuhMgw)6Xzrgw)6XzOgqAngJlZk5cvjv)KlMJrlIAGPMzKwKbTp1Qpc9O1WDeycQVo(zLCXIqzSi0zLCXgoszP56tf2c(vqWgbMGAz0IdRFTHgqncgVnI6iLLMlJiodKs8eFj0AR5OA1f5AuKdYGE8en9I4mqkXt8LrkaBK5dsRGqVjWweLaAWrMVPUsdbT2AoQwDr4mNJOfBTiiLQhuKdYGIUR8N4tVihVDX8Ae6rRrSlMxJWPALbx573VlxT0zi0(CvAngJhrCgLjTgJHtbTiDv5BU9XSQdgZVphuyc1pBroidkQ1ymCkOLEroidQZaPepXxMErq3v(t8rq3v(t8CQwzWv((ihKbD(M6knu6fz(M6knueSrqTgJHtbTGdz6MDWoD0iiLmJPIyKJJQKQp9IOeqZfUJuDeZRuLu9rWOnfhJg5exAyKBJuERbVj2iQ1VYtgTefzY1hnSr8PIqMREOicSfPHtXZreul1HjmkJuERbVd2ihV6iLLMlJiO7k)j(iO7k)jEovRm4kFFeuRXy4uql4qMUzhSthncmb1YOfhw)khKYBncg3hHahHdkmH6NT9HeHB6mMkD1JhMtvw1LrWBgCSrJWNaR3bhsNiQ1VkK(2coKor8hWHJuwAouWHeH4jkuKsDQbhCirqTuhMsVObhsNmIGAPomHzey9o4DIuCcqGitd(v82bBexvPQnS(1inCkEoIqMR(WDeGvVYtgTefzY1hnSr8PIWn1XPkR6Yi4qcpXqZU7M3cAIfBZMfaawmGnaVQtbbhGWtm0S7U5TGMyX2SzbaGfdydWR6uqW5n8edn7UBElOjwSnBwaayXa2a8QofencRsHZiIszMxbiJiGhMsYiA0ikLzEnJiGhMsYiA0iZmkcLreeXxYSiDXrJtjJiGhMsYisxC04uYi9IgnYbzqNzuek9I4QmlJiGhMsYiA0iTxAvkZ8AgrapmLKr0OrasNvs1NreWdtjzenAehD2Yic4HPKmIgncmbiqY8HPfZic4HPKmIgnAeNvsQ(rXwlc94OCtDrqkDgtOWDeul1HPH1VECwKH1VECgQbKwJX4YSsUqvs1p5I5y0IOgyQzgPfzq7tT6JqpAnChbMG6RJFwjxSiuglcDwjxSHJuwAU(uHTGFfeSrGjOwgT4W6xBObuJGXBJOoszP5YiYbzqNVPUsdLEroid6Xt00lIZaPepXxgPaSrqTgJHtbTGdz6MDWoDK5BQR0qqRTMJQvxeoZ5iAXwlcsP6bf5GmOO7k)j(0lYXBxmVgHE0Ae7I51iCQwzWv((97YvlDgcTpxLwJX4reNrzsRXy4uqlsxv(MBFmR6GX87ZbfMq9ZwKdYGIAngdNcAPxK5BQR0qrGebDx5pXhbDx5pXZPALbx57J4mqkXt8LqRTMJQvxKRrroidQZaPepXxMErMpiTcc9MaBrucObhncsjZyQig54OkP6tVi3gP8wdEtSrQoI5vQsQ(iy0MIJrJCIlnmIA9RcPVTGdPteUPZyQ0vpEyovzvxgbVzWXgnczU6HIiWwKgofphrqTuhMWOms5Tg8oyJOw)kpz0suKjxF0WgXNkcmb1YOfhw)khKYBncg3h54vhPS0CzebDx5pXhbDx5pXZPALbx57JGAngdNcAbhY0n7GD6OriWr4GctO(zBFaIWNaR3bhsNikb0CH7iOwQdtPxe)bC4iLLMdfCiriEIcfPuNAWbhs0GdPGmIGAPomHzey9o4DIuCcqGitd(v82bBexvPQnS(1inCkEoIWnDgtLU6XdZPkR6Yi4ndo2Oraw9kpz0suKjxF0WgXNkc3uhNQSQlJGdj8edn7UBElOjwSnBwaayXa2a8QofeCacpXqZU7M3cAIfBZMfaawmGnaVQtbbN3Wtm0S7U5TGMyX2SzbaGfdydWR6uq0iSkfoJikLzEfGmIaEykjJOrJOuM51mIaEykjJOrJmZOiugrqeFjZI0fhnoLmIaEykjJiDXrJtjJ0lA0ihKbDMrrO0lIRYSmIaEykjJOrJaKoRKQpJiGhMsYiA0iTxAvkZ8AgrapmLKr0OrC0zlJiGhMsYiA0iWeGajZhMwmJiGhMsYiA0OrCwjP6hfBTi0JJYn1fbP0zmHc3rqTuhMWigIQhhvT0lc9O1WDeycQVo(zLCXIqzSihV6iLLMlJiO7k)j(iO7k)jEovRm4kFFeuRXy4uql4qMUzhSthncDwjxSHJuwAU(uHTGFfeSrGjOwgT4W6xBObuJGXBJOoszP5YiYbzqPm(0Ii1DS0lYbzqNVPUsdLEroid6Xt00lIZaPepXxgPaSrqTgJHtbTGdz6MDWoDK5BQR0qqRTMJQvxeoZ5ihKb1zGuIN4ltVihKbfDx5pXNEroE7I51i0JwJyxmVgHtvpmrjvpkIZOmP1ymCkOfPRkFZTpMvDWy(95GctO(zlYbzqrTgJHtbT0lIwS1IGuQEqrq3v(t8rq3v(t8CQwzWv((iodKs8eFj0AR5OA1f5AuK5BQR0qrGez(G0ki0BcSfrjGgC0iiLmJPIyKJJQKQp9IOeqZfUJuDeZRuLu9rWOnfhJg5exAye16xfsFBbhsNiK5QhkIaBrA4u8CerT(vEYOLOitU(OHnIpveul1HjmkJuERbVd2iWeulJwCy9RCqkV1iyCFecCeoOWeQF22N3i3gP8wdEtSra6OGMOoQsdoar4tG17GdPteYC1hUJGAPomLEr8hWHJuwAouWHeH4jkuKsDQbhCirqTuhMgw)6Xzrgw)6XzOgqAngJlZk5cvjv)KlMJrlIAGPMzKwKbTp1QpAWH0DgrGjO(64NvYflcLXIuCcqGitd(vnbaBe6SsUydhPS0C9PcBb)kiyJ0wDQJs0RzTcMEraRWgdAlvVJGAngdDT4tDS6mMGIUPWv(azuqdkRYhWGaerDKYsZLrKdYGsz8PfrQ7yPxKdYGoFtDLgk9ICqg0JNOPxeuRXy4uql4qMUzhSthz(M6kne0AR5OA1fHZCoIwS1IGuQEqroidk6UYFIp9IyxmVgHtvpmrjvpkIZOmP1ymCkOfPRkFZTpMvDWy(95GctO(zlYbzqrTgJHtbT0lY8n1vAOiaebDx5pXhbDx5pXZHrHlg54TlMxJqpAnY8bPvqO3eylIsan4OrUns5TgCiDIWQu4mIOuM5vaYic4HPKmIgnIszMxZic4HPKmIgnYmJIqzebr8LmlsxC04uYic4HPKmI0fhnoLmsVOrJCqg0zgfHsViUkZYic4HPKmIgns7LwLYmVMreWdtjzenAeG0zLu9zeb8WusgrJgXrNTmIaEykjJOrJatacKmFyAXmIaEykjJOrJgbzx7J5NTGdPd2iCxDWMl9I4Sss1pk2AraRWglc3vhS5esFBbhc2ihV6iLLMlJiO7k)j(iO7k)jEomkCXiOwJXWPGwWHmDZoyNoAeWkSXG23bVdG7UteURoyZnbiqKPbVzeGokOjQJQ0GZBekmmrjvpLbvDKYsZHYiAeWkSXGwm4qamVDIWNaR3bhshSriWr6Y8u)STVA9RhNfXFahoszP5qbhsK(NaeiY0GFfeSyJq8efksPo1GdoKObhcgYis)tacezAWVccwSroE1rklnxgrq3v(t8rq3v(t8Cyu4IrqTgJHtbTGdz6MDWoD0iGvyJbT)GJfWD6eHoRKl2WrklnxFQWwWVcc2iTvN6Oe9AwRGPxeWkSXG2s17iOwJXqxl0nTcS1rGnOG0(2GcSF(oAlGbbiI6iLLMlJihKbD(M6knu6fb1Amgof0coKPB2b70rMVPUsdbT2AoQwDr4mNJmFtDLgkcaroE7I51i0JwJCqgu0DL)eF6fXUyEncNQvgCLVF)UC1sNHq7ZvP1ymEeXzuM0Amgof0I0vLV52hZQoym)(CqHju)Sf5GmOOwJXWPGw6fb1AmwJWOmcoKGdzAmGTamenc6UYFIpc6UYFINdJcxmINcAOmcoKiDv5BU9Ra3xVT9XiuhM2xiWw0ihKb94jA6fz(G0ki0BcSfrjGgC0i3gP8wdoKoryvkCgrukZ8kazeb8WusgrJgrPmZRzeb8WusgrJgzMrrOmIGi(sMfPloACkzeb8Wusgr6IJgNsgPx0Oroid6mJIqPxehD2Yic4HPKmIgns7LwLYmVMreWdtjzenAeG0zLu9zeb8WusgrJgXvzwgrapmLKr0OrGjabsMpmTygrapmLKr0OrJGSR9X8ZwWH0bBeURoyZLErCwjP6hfBTiGvyJfH7Qd2CcPVTGdbBeURoyZnbiqKPbVzeWkSXG23bhaSra6OGMOoQsdoVriWrKBkCL)(icSTVA9RhNDnCeWkSXGwm4xbbcGXqNi8jW6DWH0bBekmmrjvpLbvDKYsZHYiAe)bC4iLLMdfCirGjO(64NvYflcLXIuCcqGitd(vnbaB0Gdz6mIGAPomHzey9o4DI0)eGarMg8RGGfBKItacezAWVQjaqIWnDgtLU6XdZPkR6Yi4ndo2Oraw9kpz0suKjxF0WgXNkc3uhNQSQlJGdj8edn7UBElOjwSnBwaayXa2a8QofeCacpXqZU7M3cAIfBZMfaawmGnaVQtbbN3Wtm0S7U5TGMyX2SzbaGfdydWR6uq0iSkfoJikLzEfGmIaEykjJOrJOuM51mIaEykjJOrJmZOiugrqeFjZI0fhnoLmIaEykjJiDXrJtjJ0lA0ihKbDMrrO0lIJoBzeb8WusgrJgP9sRszMxZic4HPKmIgncq6SsQ(mIaEykjJOrJ4QmlJiGhMsYiA0iWeGajZhMwmJiGhMsYiA0OrCwjP6hfBTi0JJYn1fbP0zmHc3rqTuhMsViWeuFD8Zk5IfHYyroE1rklnxgrq3v(t8rq3v(CHXNwefb1Amgof0cEZU70eB0i0zLCXgoszP56tf2c(vqWgrT(vH03wWH0jI6iLLMlJiAXwlcsP6bf54TlMxJqpAnYbzqr3v(t8Pxe7I51iCQwzWv((97YvlDgcTpxLwJX4rKdYGE8en9I4mktAngdNcAr6Y8u)Sf5GmOOwJXWPGw6fbDx5pXhbDx5ZfgFAruK5dsRGqVjWweLaAWrqTgJHtbTG3S7onXgncsjZyQig54OkP6tViWeulJwCy9Rn0aQrW4TrUns5TgCiferjGMJNmAjkYKRpAyJ4tfP6iMxPkP6JGrnHJgVMtWhCPHqBehJ2uCitfHmx9H7iQ1VYtgTefzY1hnSr8PIqMREOicSfPHtXZreul1HjmkJuERbVd2ikb0CcPVTGdPtecCKUmp1pB7R3eFze(ey9o4q6Gnc9O1WDeLaAUWDe)bC4iLLMdfCiriEIcfPuNAWbhseul1HPH1VECwKH1VECgQbKwJX4YSsUqvs1p5I5y0IOgyQzgPfzq7tT6JgCaWMrK5dsRGdRFncWJFwjvpx5Xw4(7V)(S6mLTF7(CEFqQEdyqA)CfBdU)19eTpupLRaQLrlAoaXdES)1AFqQEdyqA)CfsdU)19eTpupTp0(5kGAz0IMdq8Gh7Jr3(qWI9AWw4(7V)(otpo)(i1r8Lagy1bsvUcimoGbcOgC)wESpGb8(acJdORbBHMhoYXRoszP5YicQ1ymCkOf8MD3H3cIgP4eGarMg8R4fl2i0zLCXgoszP56tf2c(vqWgbMG6RJFwjxSiuglYTrkV1WZc6UtNMqaadfaagaadDA2maVQ50riWr4G2QhNT)mCe1rklnxgr0ITweKs1dkYXBxmVgHE0AKdYGIUR8N4tVi2fZRr4uTYGR8973LRw6meAFUkTgJXJihKb94jA6fXzuM0Amgof0IWbTvpolYbzqrTgJHtbT0lc6UYFIpc6UYFINt1kdUY3hz(G0ki0BcSfrjGgCeuRXy4uql4n7UdVfencFcSEhEonwSDdzAaaO7onHmneEliaVQd2iTUAPZqOUC2mbrQ(GJnI)aoCKYsZHcoKieprHIuQtn4GdjcRsHZiIszMxbiJiGhMsYiA0ikLzEnJiGhMsYiA0iZmkcLreeXxYSiDXrJtjJOroid6mJIqPxexLzzeb8WusgrJgbiDwjvFgrapmLKr0OrAV0QuM51mIaEykjJOrJ4OZwgrapmLKr0OrGjabsMpmTygrapmLKr0OrJ4Sss1pk2AruRFnAWbasgrqTuhMWmcSEh8orkobiqKPb)QMD6eb1sDyIJQsvs1hCiyaBeGvVYtgTefzY1hnSr8PIWn1XPkR6Yi4qcp7uqhiD6UaSyby6UB2nVaeGx1PtWbi4ybCb8onaq6uagkaGUB2bsW5n4qIgHvPWzerPmZRaKreWdtjzenAeLYmVMreWdtjzenAKzgfHYicI4lzwKU4OXPKreWdtjzePloACkzKErJg5GmOZmkcLErCvMLreWdtjzenAK2lTkLzEnJiGhMsYiA0iaPZkP6Zic4HPKmIgnIJoBzeb8WusgrJgbMaeiz(W0Izeb8WusgrJgnIZkjv)OyRfHECuUPUiiLoJju4ocQL6Wu6fbMG6RJFwjxSiuglcDwjxSHJuwAU(uHTGFfeSrqTuhM4OQuLu99PcBr6dxWVoxAye16xfsFBbhsNiQJuwAUmICqguqQoFBWCC8w6f5GmOhprtViTv(Mtl2AbhBKdYG2w5BoTyRLErMpiTcc9MaBrucObhrl2ArqkvpOihVDX8Ae6rRroidk6UYFIp9IyxmVgPRkFZfXzuM0Amgof0I0vLV52hZQoym)(YnXyWroidkQ1ymCkOLErq3v(t8rq3v(CHXNwefb1Amgof0coKUJgrT(1WDeKsMXurmYXrvs1NErUns5TgCiyJOeqZXtgTefzY1hnSr8PIatqTmAXH1V2qdOgbJ3grjGMlChHmx9H7iOwQdtyugP8wdoKoruRFLNmAjkYKRpAyJ4tfrjGMti9TfCiDIC8QJuwAUmIGUR8N4JGUR85cJpTikcQ1ymCkOfCiDhncbocixW5seGokOjQJQ0GZBe(ey9o482bBeUPZyQ0vpEyovzvxgbVzWHenI)aoCKYsZHcoKieprHIuQtn4Gdjc9O1WD0GdaazebMGAz0IdRFncgFoY8bPvWH1Vgb4XpRKQNR8ylC)93FFwDMY2VDFoVpivVbmiTFUITb3)6EI2hQNYva1YOfnhG4bp2)ATpivVbmiTFUcPb3)6EI2hQN2hA)CfqTmArZbiEWJ9XOBFiyXEnylC)93FFNPhNFFK6i(sadS6aPkxbeghWabudUFlp2hWaEFaHXb01GTqZdhXzLKQFuS1IOw)Ae6SsUydhPS0C9PcBb)kiyJuCcqGitd(vnlaBeycQVo(zLCXIqzSi3gP8wdplO7oD4D6MfGDAaG0DhEliaVQ50r4tG17WZonXag6UGoyalVt3PjKUliaVQz3ruhPS0Czez(G0ki0BcSfrjGgC0ie4i9H6P7JXJ4pGdhPS0COGdjcXtuOiL6udo4qIWQu4mIOuM5vaYic4HPKmIgnIszMxZic4HPKmIgnYmJIqzebr8LmlsxC04uYiAKdYGoZOiu6fXvzwgrapmLKr0OrasNvs1NreWdtjzenAK2lTkLzEnJiGhMsYiA0io6SLreWdtjzenAeycqGK5dtlMreWdtjzenA0ObhaEZicQL6WeMrG17GdqKItacezAWVQztSraw9kpz0suKjxF0WgXNkc3uhNQSQlJGdj8S50n7abGPXIfGcWcW0yBgGx1PzWbi8SGUXaemmneaWYBNcMUamuqaEvNobN3WZMyalVyG3PlalaDaadD4fsaEvNcIgHvPWzerPmZRaKreWdtjzenAeLYmVMreWdtjzenAKzgfHYicI4lzwKU4OXPKreWdtjzePloACkzKErJg5GmOZmkcLErCvMLreWdtjzenAeG0zLu9zeb8WusgrJgP9sRszMxZic4HPKmIgnIJoBzeb8WusgrJgbMaeiz(W0Izeb8WusgrJgnccSw17UC1sNHqPxeNvsQ(rXwlc94OCtDrqkDgtOWDe6rRH7iWeulJwSX5Qpcea6gsNPXgbMG6RJFwjxSiuglY8bPvWH1Vgb4XpRKQNR8ylC)93FFwDMY2h0a52CO958(yotXpGyox902hdKBZH4kp2c3F)93NvNPS9PA1BGMxr7Z59XUfU)(7VpRotz7tzKlgObYT5q7Z59XUfU)(7Vpb4(nIA0ZbLaZva1YOfnhG4X(CMZ7RUJTVEB(TW93F)93F)93hy1TpzFoVpKgCFqdKBZH2hUUfU)(7V)(7V)(7V)(7taUVVQ7FDprBeHrmk8ehM7UIuUcihLadO9bmG3NWJ91BZVfU)(7V)(7V)(7V)(7V)(7VpLrUyGgi3MdTpN3NYixmqdKBZH2hJTpKTW93F)93F)93F)93F)93F)9ja3)6EI27aeixbKJsGb0(agW7tAW9bex0Q3anVciESVEB(TW93F)93F)93F)93F)93F)93F)93NQvVbAEfTpN3NQvVbAEfTpgBFiBH7V)(7V)(7V)(7V)(7V)(7BE4TW93F)93F)93F)93FFZdVfU)(7V)(7V)(MhElC)93FFJHSTW93F)93F)93hy1TpzFoVpKgCFqdKBZH2hUUfU)(7V)(7V)(7V)(7taUVVQ7FDprBeHrmk8ehM7UIuUcOwQtlcO9bmG3NWJ91BZVfU)(7V)(7V)(7V)(7V)(7VpLrUyGgi3MdTpN3NYixmqdKBZH2hJTpKTW93F)93F)93F)93F)93F)9ja3)6EI27aeixbul1Pfb0(agW7tAW9bex0Q3anVciESVEB(TW93F)93F)93F)93F)93F)93F)93NQvVbAEfTpN3NQvVbAEfTpgBFiBH7V)(7V)(7V)(7V)(7V)(7BE4TW93F)93F)93F)93FFZdVfU)(7V)(7V)(MhElC)93FFZdVfU)(7Vpb4(x3t0EhGa5kGAz0IMdqn4(aIlA1BGMxbep2xVn)w4(7V)(7V)(7t1Q3anVI2NZ7t1Q3anVI2hJTpKTW93F)9np8w4(7V)(otpo)(ug5IbAGCBo0wO5HJC8QJuwAUmIGUR8N4JGUR85cJpTikcQ1ymCkOfCiDhncDwjxSHJuwAU(uHTGFfeSruRFvi9TfCiDIOoszP5YiYbzqbP68TbZXXBPxK2kFZPfBTGJnYbzqBR8nNwS1sViOwJXWPGwWH0DK5BBgtroTWu1IOfBTiZhKwbJ4mktAngdNcAr6QY3C7JzvhmMFF5Mym4ihVDX8Ae6rRroidk6UYFIp9ImFqAfmcWJFwjvpx5Xw4(7V)(otpo)(Q7yBHMhElClClClClClmIDX8AKUQ8nxKdYGIAngdNcAPxK5dsRGyKJJQKQpcWJFwjvpx5Xw4(7V)(S6mLTpObYT5q7Z59XCMIFaXCU6PTpgi3MdXvESfU)(7VpRotz7t1Q3anVI2NZ7JDlC)93FFwDMY2NYixmqdKBZH2NZ7JDlC)93FFcW9Be1ONdkbMRaQLrlAoaXJ95mN3xDhBF928BH7V)(7V)(7VpWQBFY(CEFin4(Ggi3MdTpCDlC)93F)93F)93F)93NaCFFv3)6EI2icJyu4jom3DfPCfqokbgq7dyaVpHh7R3MFlC)93F)93F)93F)93F)93FFkJCXanqUnhAFoVpLrUyGgi3MdTpgBFiBH7V)(7V)(7V)(7V)(7V)(7taU)19eT3biqUcihLadO9bmG3N0G7diUOvVbAEfq8yF928BH7V)(7V)(7V)(7V)(7V)(7V)(7VpvREd08kAFoVpvREd08kAFm2(q2c3F)93F)93F)93F)93F)9338WBH7V)(7V)(7V)(7V)(MhElC)93F)93F)9np8w4(7V)(gdzBH7V)(7V)(7VpWQBFY(CEFin4(Ggi3MdTpCDlC)93F)93F)93F)93NaCFFv3)6EI2icJyu4jom3DfPCfqTuNweq7dyaVpHh7R3MFlC)93F)93F)93F)93F)93FFkJCXanqUnhAFoVpLrUyGgi3MdTpgBFiBH7V)(7V)(7V)(7V)(7V)(7taU)19eT3biqUcOwQtlcO9bmG3N0G7diUOvVbAEfq8yF928BH7V)(7V)(7V)(7V)(7V)(7V)(7VpvREd08kAFoVpvREd08kAFm2(q2c3F)93F)93F)93F)93F)9338WBH7V)(7V)(7V)(7V)(MhElC)93F)93F)9np8w4(7V)(MhElC)93FFcW9VUNO9oabYva1YOfnhGAW9bex0Q3anVciESVEB(TW93F)93F)93NQvVbAEfTpN3NQvVbAEfTpgBFiBH7V)(7BE4TW93F)9DMEC(9PA1BGMxrn4(ug5IbAGCBoudUpKTqZdhz(G0kiof0Ia84Nvs1ZvESfU)(7VpRotz7dAGCBo0(CEFmNP4hqmNREA7JbYT5qCLhBH7V)(7ZQZu2(uT6nqZRO958(y3c3F)93NvNPS9PmYfd0a52CO958(y3c3F)93NaC)grn65GsG5kGAz0IMdq8yFoZ59v3X2xVn)w4(7V)(7V)(7dS62NSpN3hsdUpObYT5q7dx3c3F)93F)93F)93F)9ja33x19VUNOnIWigfEIdZDxrkxbKJsGb0(agW7t4X(6T53c3F)93F)93F)93F)93F)93NYixmqdKBZH2NZ7tzKlgObYT5q7JX2hYw4(7V)(7V)(7V)(7V)(7V)(eG7FDpr7DacKRaYrjWaAFad49jn4(aIlA1BGMxbep2xVn)w4(7V)(7V)(7V)(7V)(7V)(7V)(7t1Q3anVI2NZ7t1Q3anVI2hJTpKTW93F)93F)93F)93F)93F)9np8w4(7V)(7V)(7V)(7VV5H3c3F)93F)93FFZdVfU)(7VVXq2w4(7V)(7V)(7dS62NSpN3hsdUpObYT5q7dx3c3F)93F)93F)93F)9ja33x19VUNOnIWigfEIdZDxrkxbul1Pfb0(agW7t4X(6T53c3F)93F)93F)93F)93F)93NYixmqdKBZH2NZ7tzKlgObYT5q7JX2hYw4(7V)(7V)(7V)(7V)(7V)(eG7FDpr7DacKRaQL60IaAFad49jn4(aIlA1BGMxbep2xVn)w4(7V)(7V)(7V)(7V)(7V)(7V)(7t1Q3anVI2NZ7t1Q3anVI2hJTpKTW93F)93F)93F)93F)93F)9np8w4(7V)(7V)(7V)(7VV5H3c3F)93F)93FFZdVfU)(7VV5H3c3F)93NaC)R7jAVdqGCfqTmArZbOgCFaXfT6nqZRaIh7R3MFlC)93F)93F)9PA1BGMxr7Z59PA1BGMxr7JX2hYw4(7V)(MhElC)93FFNPhNFFQw9gO5v0wO5HJmFqAfeQwS1IGuQEqrq3v(t8rq3v(CHXNwef5GmOhprtViZhKwbHEtGTikb0GJgbPKzmveJCCuLu9PxK5kR6YiAeUPZyQ0vpEyovzvxgbhs4zbDky6P70neS82SdgGWlab4vDAgCacplOtbtpDNUHGL3MDWaeEbiaVQtZGZB4zbDky6P70neS82SdgGWlab4vDAg8Mbhs0ikb0C8KrlrrMC9rdBeFQi(d4Wrklnhk4qIGAPomXrvPkP6doemGncFcSEhCE7GncboY422hzZvp8(6nXxUVEt195xDycfrT(vEYOLOitU(OHnIpveLaAoH03wWH0jcQL6WegLrkV1GdPteycQLrloS(voiL3Aem(CeINOqrk1PgCWHeb1sDyk9IGAPomnS(1JZI0Oxnhq6S1aCbgEIh1ayMrXexookQb6JbtOnWW6xpod1aY1(qDgum7MOw0GdqZmIOw)kpz0suKjxF0WgXNksXjabImn4x1Sj2iOwQdtCuvQsQ(GdbdyJWnDgtLU6XdZPkR6Yi4qcplOtbtpDNUHGL3MDWaeE7eGx1PzWbi8SGofm90D6gcwEB2bdq4TtaEvNMbN3WZc6uW0t3PBiy5TzhmaH3ob4vDAg8MbhB0iaRELNmAjkYKRpAyJ4tfHBQJtvw1LrWbi4qcEZWZUbaBNUlaceaG0D3t3neacWR60jAewLcNreLYmVcqgrapmLKr0OrukZ8AgrapmLKr0OrMzuekJiiIVKzr6IJgNsgrapmLKrKU4OXPKr6fnAKdYGoZOiu6fXvzwgrapmLKr0OrAV0QuM51mIaEykjJOrJaKoRKQpJiGhMsYiA0iWeGajZhMwmJiGhMsYiA0io6SLreWdtjzenA0iiWAvV7YvlDgcLErCwjP6hfBTi0JJYn1fbP0zmHc3rOhTgUJatqTmAXgNR(iqaOBiDMgBK5kR6YiAK5dsRGdRFncWJFwjvpx5Xw4(7V)(S6mLTpObYT5q7Z59XCMIFaXCU6PTpgi3MdXvESfU)(7VpRotz7t1Q3anVI2NZ7JDlC)93FFwDMY2NYixmqdKBZH2NZ7JDlC)93FFcW9Be1ONdkbMRaQLrlAoaXJ95mN3xDhBF928BH7V)(7V)(7VpWQBFY(CEFin4(Ggi3MdTpCDlC)93F)93F)93F)93NaCFFv3)6EI2icJyu4jom3DfPCfqokbgq7dyaVpHh7R3MFlC)93F)93F)93F)93F)93FFkJCXanqUnhAFoVpLrUyGgi3MdTpgBFiBH7V)(7V)(7V)(7V)(7V)(7taU)19eT3biqUcihLadO9bmG3N0G7diUOvVbAEfq8yF928BH7V)(7V)(7V)(7V)(7V)(7V)(7VpvREd08kAFoVpvREd08kAFm2(q2c3F)93F)93F)93F)93F)9338WBH7V)(7V)(7V)(7V)(MhElC)93F)93F)9np8w4(7V)(gdzBH7V)(7V)(7VpWQBFY(CEFin4(Ggi3MdTpCDlC)93F)93F)93F)93NaCFFv3)6EI2icJyu4jom3DfPCfqTuNweq7dyaVpHh7R3MFlC)93F)93F)93F)93F)93FFkJCXanqUnhAFoVpLrUyGgi3MdTpgBFiBH7V)(7V)(7V)(7V)(7V)(7taU)19eT3biqUcOwQtlcO9bmG3N0G7diUOvVbAEfq8yF928BH7V)(7V)(7V)(7V)(7V)(7V)(7VpvREd08kAFoVpvREd08kAFm2(q2c3F)93F)93F)93F)93F)9338WBH7V)(7V)(7V)(7V)(MhElC)93F)93F)9np8w4(7V)(MhElC)93FFcW9VUNO9oabYva1YOfnhGAW9bex0Q3anVciESVEB(TW93F)93F)93NQvVbAEfTpN3NQvVbAEfTpgBFiBH7V)(7BE4TW93F)9DMEC(9PmYfd0a52COTqZdh54vhPS0CzebDx5pXhbDx5ZfgFArueuRXy4uql4aGT7PBwq0i0zLCXgoszP56tf2c(vqWgrT(vH03wWH0jI6iLLMlJihKbfKQZ3gmhhVLErAR8nNwS1co2iZhKwbHEtGTikb0GJCqg0JNOPxKdYG2w5BoTyRLErq3v(t8rq3v(CHXNwefrl2ArqkvpOiZhKwbHQfBTiiLQhuKJ3UyEnc9O1ihKbfDx5pXNErSlMxJWPALbx573VlxT0zi0(CvAngJhrCgLjTgJHtbTinKuERy0J2hZCu9oYbzqrTgJHtbT0lY8TnJPiNwyQArqTgJHtbTGda2UNUzbrJOw)A4ocQL6W0W6xpolsJE1CaPZwdWfy4jEudGzgftC54OOgOpgmH2adRF94mudix7d1zqXSBIArqTuhMsVikb0CH7ieprHIuQtn4GdjIsanhpz0suKjxF0WgXNkcXFXCil9Iatq91XpRKlwekJfb1sDycJYiL3AWH0jIsanNq6Bl4q6eb1sDycZiW6DWbicboY422hzZvp8(6nXxUVEt195xDycTpar4tG17GZBhSriZvF4oI)aoCKYsZHcoKObhGozebMG6RJFwjxSiuglsXjabImn4x1K3PJ0wDQJs0RzTcMEraRWgdAlvVJGAngdDTGpUd4bk32DLbBoO8n4sdkfWGae52iL3AWH0jcRsHZiIszMxbiJiGhMsYiA0ikLzEnJiGhMsYiA0iZmkcLreeXxYSiDXrJtjJiGhMsYisxC04uYi9IgnYbzqNzuek9I4OZwgrapmLKr0OrasNvs1NreWdtjzenAK2lTkLzEnJiGhMsYiA0iUkZYic4HPKmIgncmbiqY8HPfZic4HPKmIgnAeKDTpMF2coKoyJ0)eGarMg8RGeH7Qd2CPxeNvsQ(rXwlcyf2yr4U6GnNq6Bl4qWgHoRKl2WrklnxFQWwWVcc2ihV6iLLMlJiO7k)j(iO7k)jEomkCXiOwJXWPGwWHmDZoyNoAeWkSXG23bhaaxqeURoyZnbiqKPbVzekmmrjvpLbvDKYsZHYiAe(ey9o482bBecCe5M49fJawHng0Ib)kEbCNiaDuqtuhvPbN3i(d4Wrklnhk4qIq8efksPo1GdoKiQJuwAUmICqgukJpTisDhl9ICqg05BQR0qPxKdYGE8en9I4PGgkJGdjsxv(MB)kW91BBFmc1HP9fcSfncQ1ymCkOfCit3Sd2PJmFtDLgcAT1CuT6IWzohrl2ArqkvpOiZhKwbHEtGTikb0GJCqgu0DL)eF6fXUyEncNQEyIsQEueNrzsRXy4uqlsxv(MBFmR6GX87ZbfMq9ZwKdYGIAngdNcAPxeuRXyncJYi4qcoKPXa2cWq0iZ3uxPHIaqe0DL)eFe0DL)ephgfUyKJ3UyEnc9O1OrdoafKrK(NaeiY0GdPd2iWeulJwCy9RrW4TBHrMpiTcoS(1iap(zLu9CLhBH7V)(77m9487diaTfAE4TWTWTWTWihV6iLLMlJiOwJXWPGwWbaB3t3SGOrCwjP6hfBTiQ1VgP4eGarMg8RA2Ste6SsUydhPS0C9PcBb)kiyJatq91XpRKlwekJf52iL3AWbOze1rklnxgroidkLXNwePUJLEroE7I51i0JwJOfBTiiLQhuKdYGIUR8N4tViOwJXWPGwWbaB3t3SGi2fZRr4uTYGR8973LRw6meAFUkTgJXJioJYKwJXWPGwKgskVvm6r7JzoQEh5GmOOwJXWPGw6fbDx5pXhbDx5pXZPALbx57JCqg0JNOPxK5dsRGqVjWweLaAWrJqGJaqeGokOjQJQ0G3jcFcSEhE2SdwElGxEB2bla8290DaiaVQ50rAD1sNHqD5SzcIu9bhBe)bC4iLLMdfCirMRSQlJG3m4yJgH4jkuKsDQbhCiryvkCgrukZ8kazeb8WusgrJgrPmZRzeb8WusgrJgzMrrOmIGi(sMfPloACkzenYbzqNzuek9I4QmlJiGhMsYiA0iaPZkP6Zic4HPKmIgns7LwLYmVMreWdtjzenAehD2Yic4HPKmIgncmbiqY8HPfZic4HPKmIgnA0OrUeCinbas0ea \ No newline at end of file diff --git a/WA codes/HoTP Heal bars(WA CODE).txt b/WA codes/HoTP Heal bars(WA CODE).txt new file mode 100644 index 0000000..22fd71c --- /dev/null +++ b/WA codes/HoTP Heal bars(WA CODE).txt @@ -0,0 +1 @@ +duLX3bqiPQuTifLlPkI(KuvsJsvLtPQ0QufHxjOKzHqDlvjTlQOFPksggk6yiyzsvEMQIPPk11qiBJk03qIACQcDoKiTouQY7qPQY8ufPQ7HcTpuQkhej1cvu9qbXevK0frPSrbvFuqPgPQeNuqALe5LOuv1mLQQBIsLDIOFIcgQQQSufjEQstfPUQQQARir0xvf1yLQs5SQIuXBfu0CvfCxbf2l4VuPbRYHHSyuYJfyYe1LjTzf8zjz0sQtty1QIuEnvWSL42sLDJQFtvdxHoUuvILd1ZfA6IUUu2UI47ksnEKKZJewVuvmFKiCFvrQ0(PmqaOHfb0qcBe2EoF7KaLHTdwzyLbAyXALWZPPyuHTc7BJWIcsXeLglQQum78YkqYewLQrexwLH5WsbdddrnbYxj8MjSczy)d7t7grfKDSALsSwK2fQDX0xuyJAz4pVGNWoNbAAgyx)SfonSizzrk8CuXnXIQkfhbAiHfXdQ94WXOoLMIrf2LT(zle6WNc1SJny5ToASOQsXrGKaSfpsgOHnrfLN9aAy7ALua0qcjSjQO8eOHTRvsbqdjKWguqXiqdBuWRkkS)rD)up1qjHe2wuDdkOye2e3uyXOafOHTRvsbqdjKWoGcsHNd0W21kPaOHesyX(Ic0W21kPaOHesyhNmMOIYtGg2UwjfanKqcRSyyqe0kjfanSDTskaAiHesiHnaObscanSXre2HNfYznq2dwQyyyiQjq(6J9GLcgggIAcKV(PhSSqbouH9nUCi(Ihd0ajbGKaq2dijaKFasca5BiCIOSJVDKathjq0BcmD8rIGHxjYriHDWZZWlOQiSm8pD)HsYgSrTm8NxWtyPz4pyzHWH4lEmqdK9asMoPCpce54Jo2JYVjIjL(iq(bc)XpFCKjLF7iZ3FEKYu(nLHHxjIiiHDe7RWAm(hwderHNdKVHT4rYanSTO6oQjluMffybBIkkp7b0W21kPaOHesyBr1LRtumWc2evuEc0W21kPaOHesyBr1DIwlckkWc2GckgbAyJcEvrH9pQ7N6PgkjKWgh1aGg2OGxvuGShKWklggebTssbqdBxRKcGgsiHTfvxoQtbwWI9ffOHTRvsbqdjKWoozmrfLNanSDTskaAiHe2buqk8CGg2UwjfanKqcBlQUXrnaMdlgfOanSDTskaAiHe2wuDdkOyeMdjSyTs450umQWIAyeleg2yIcCicSGvWfPBGVBSOPkdKeGnvQYgwHLs2QNQ3UxT7VcsWT75ArQWMkvz4EEclj1nmk6sRkFUVidllpwwXmmme1eiFdBCeHDaMdBk6uC4EEcl1YtuE2WkSXre2Hq8fpgObscajtGShqYei)aKmHe2aFXJbAiHnOftFhTsvc7qJhKcp)NlXUep(1KSZo7Stmy3ODiUSDJ2zucgTJPDiUSDJ2zucgjyxwRC7WA2WC7gTt5YMKD2zNDynByUD91(QjPCztYKmjtYKmjtYKGffKIjknwuvPy25LvG8vcmHnvQYv0hfijqzytSOQsXanSTO62HYGAvEknUcSGTfv3GAeUsJWCyBr1TXfjmh2yTFAg4WgR9ttDzAefrydAX035wlKvydAX03bBqncxPrx)OIrPhdl7JrytkgvydAX03bBqncxPryjaBlQUXA)0mWH5WIvuzh1sHe1PWU1cTiBNFWUSwTBkIQ6u9TiSbTy67CtkgvyJjkBrydAX03n1ggLcph2HgpifE(VVMKD2zNDfFaQyxqncxPrIDjoMiCsSCdBhJ2f2AUJAPesncxPXFe9XrMm)As2zND2jgSlOgHR0ODp9eSlRvUDynByUDYnmXXeHZWsUHTt5YMKD2zNDIb7cQr4knAh7Jr7iyxwRC7WA2WC7ysmbItCtTt5YMKD2zNDynByUDeiMaXjUPMKYLnjtYKmjtYKmjtYKmjtYKmjtYKmjtYKmjyBr1noQLcjQtH5Wg0IPVd2HgpifE(VVMKD2zNDynByUDjUPMKYLnjtYKmjtYKmjtYKmjtYKmjtYKmjtc2gxNO8ewul9WguRboaBBugLkSTO6I1oKGl4valy1jkpJWgcdSBo10U9Zqy7YgLKnsA3)jdp0(PzBkSnvyJJAPqI6uGKOpoYKjKWghryhyNaJ9yGfS9X77asMo)aRSiowquqRuL9RdjS29KbWk4I0nMiCQYajbyrYYIu45OIBIfvvkoc0qcBTkQQti8hF)(DpIC8rcuMic9E)Ham86Bkf2u0P4WlOQiSSJbsgc5LPWa7yJsq)sOHW(ZW)09hkjBWk4tuCuH5WghryhMxuUm78YkSZ7NnYPcRiWZbwWYcf4Gm2pgIV4XanqsaizcK9asMa5hGKjq(gijajSS8yzfhkpQjqsawwESSIH5WYYJLvmBYvkSZlI(0hew2UqQrPDZBSyvuyfYWU(Ck2fsncxP2rawwESSIxrFuGShSIap3nkKvy7NTWPHnvQYWlOQiSm8pD)HsYgSXre2HxurvDcK96bllpwwXZrboiJ9JWU(Iqg2u0PyGfSYI4tRXdsXefweNcyhWOoDtmkra5hyNwiN1a5JmHLLhlR4q8fpgObscajtGShqYei)aKmbY3ajbiHffKcppc0Wk4IeOHv27g0IPVdMdBqlM(oyFwroqDdJIoXALWZJHjQHrUkFItHCy4eRvcp3jle25qf7TAsRuLnS(BwO8uXdOa9HhM3Y0ZJp8WZVeknBp23EC2xt6zf5a1nmk6eRvcppgMOgg5Q8jofYHHtSwj8CNSqyNSQyVvtALQSH1FZcLNkEafOp8W8wMEE8HhE(LqPz7X(2JZ(AsOgg5Q8joh88KyudJCv(eNdEE6gf9rjg1WixLpX5GNNUdfuv0ogT7zf5a1nmk6eRvcppgMOgg5Q8jofYHHtSwj8CNPsvYEHTMH755VVM0ZkYbQByu0jwReEEmmrnmYv5tCkKddNyTs45otLQK9wnd3ZZFOgg5Q8joh88KyudJCv(eNdEE6gf9rjEgd)t3FOKSn7Rj9SICG6ggfDI1kHNhdtudJCv(eNc5WWjwReEUZuPkzVvZTgj7NMHHHOM)6rSDVs4lKqclV1rJfvvkocKeGTXtSOQsXanSXA)0mWHnw7NM6Y0ikIWg0IPVd2HgpifE(VVMKD2zNDynByUDdOsunjLlBsMKjzsMeSXrTuirDkqs0hhzYesyJJiSd0kvzdRWgkpv8akqFGAzzg4XhEwroqDdJIpWovwGEGwPkByn(W2xAiS6(CTivibYEanSPsvgEbvfHLH)P7pus2GLcgggIAcKV(PhSOGu45rGgwbxKanSYE3Gwm9DWCydAX03b7ZkYbQByu0jwReEEmmrnmYv5tCkKddNyTs45ozHWohQyVvtALQSH1FZcLNkEafOp8W8wMEE8HhE(LqPz7X(2JZ(AspRihOUHrrNyTs45XWe1WixLpXPqomCI1kHN7Kfc7Kvf7TAsRuLnS(BwO8uXdOa9HhM3Y0ZJp8WZVeknBp23EC2xtc1WixLpX5GNNeJAyKRYN4CWZt3OOpkXOgg5Q8joh880DOGQI2XODpRihOUHrrNyTs45XWe1WixLpXPqomCI1kHN7mvQs2lS1mCpp)91KEwroqDdJIoXALWZJHjQHrUkFItHCy4eRvcp3zQuLS3Qz4EE(d1WixLpX5GNNeJAyKRYN4CWZt3OOpkXZy4F6(dLKTzFnPNvKdu3WOOtSwj88yyIAyKRYN4uihgoXALWZDMkvj7TAU1iz)0mmme18xpIT7vcFHesyh88m8cQkcld)t3FOKSbBuld)5f8ewAg(dwwiCi(Ihd0ajbi8hD8rkThL(ibMVjIYFC0rcWWRe9bi7bH7OJmjQhLP03e95nLDKY9EddVs0hG8de(BIOucuktIiIzV3eCKsFKam8krVHe2rSVcRX4FynqefEoq(g2Ihjd0W2IQ7OMSqzwuGfSjQO8ShqdBxRKcGgsiHTfvxUorXalytur5jqdBxRKcGgsiHTfv3jATiOOalydkOyeOHnk4vff2)OUFQNAOKqcBCudaAyJcEvrbYEqcBlQUCuNcSGvwmmicALKcGg2UwjfanKqclgfOanSDTskaAiHe2XjJjQO8eOHTRvsbqdjKWoGcsHNd0W21kPaOHesyBr1noQbWCyX(Ic0W21kPaOHesyBr1nOGIryoKWI1kHNttXOclQHrSqyyJjkWHiWcwbxKUb(UXIMQmqsa2uPkByfwkzREQE7E1U)kib3UNRfPcBQuLH75jSKu3WOOlTQ85(ImSXre2bALQSHvydLNkEafOpqTSmd84dpRihOUHrXhyNklqpqRuLnSgFy7lnewDFUwKkSXre2byoSPOtXH75jSulpr5zdRWYYJLvCO8OMajbyLfXNwJhKIjkSiofWg0IPVJwPkHDOXdsHN)ZLyxIh)As2zND2jgSB0oex2Ur7mkbJ2X0oex2Ur7mkbJeSlRvUDynByUDJ2PCztYo7SZoSMnm3U(AF1KuUSjzsMKjzsMKjzsWIcsXeLglQQum78Ykq(kbMWklIJfef0kvz)6qcRDpzaSjwuvPyGg2wuD7qzqTkpLgxbwW2IQBqncxPryoSTO624IeMdBqTg4aSTrzuQWg0IPVZTwiRWg0IPVd2GAeUsJU(rfJspgw2hJWMumQWg0IPVd2wuDXAhsWf8kGfSTO6gR9tZahMdlwrLDulfsuNc7wl0ISD(b7YA1UPiQQt13IWg0IPVZnPyuHnMOSfHnOftF3uByuk8CyhA8Gu45)(As2zND2v8bOIDb1iCLgj2L4yIWjXYnSDmAxyR5oQLsi1iCLg)r0hhzY8RjzND2zNyWUGAeUsJ2XiJeSlRvUDynByUDYnmXXeHZWsUHTt5YMKD2zNDIb7cQr4knAh7Jr76zxwRC7WA2WC7ysmbItCtTt5YMKD2zNDynByUDeiMaXjUPMKYLnjtYKmjtYKmjtYKmjtYKmjtYKmjtYKmjyBr1noQLcjQtH5WQtuEgHnegy3CQPD7NHW2LnkjBK0U)tgEO9tZ2uyBQW246eLNWIAPh2yTFAg4WgR9ttDzAefrydQr4knclbydAX03b7qJhKcp)3xtYo7SZoSMnm3Ue3uts5YMKjzsMKjzsMKjzsMKjzsMKjzsMKjbBCulfsuNcKe9XrMmHewrGNdSGLfkWbzSFmeFXJbAGKaqYei7bKmbYpajtG8nqsasyfCr6gteovzGKaSPOtXalytrNIdVGQIWYogiziKxMcdSJnkb9lHgc7pd)t3FOKSbBQuLROpkqsGYWghryhMxuUm78YkSZ7NnYPclV1rJfvvkocKeGTpEFhqY05hyJJiSdH4lEmqdKeasMazpGKjq(bizcjSS8yzfhIV4XanqsaizcK9asMa5hGKjq(gijajSS8yzfdZHLLhlRy2KRuyNxe9PpiSSDHuJs7M3yXQOWYYJLvmdddrnbY3WYYJLv8k6JcK9Gve45UrHScB)SfonSizzrk8CuXnXIQkfhbAiHnoIWo8IkQQtGSxpyz5XYkEokWbzSFe21xeYWghryhEwiN1azpyfYWU(Ck2fsncxP21d2bmQt3eJseq(b2PfYznq(ityzHcCOc7BC5q8fpgObscajbGShqsai)aKeaY3q4erzhF7ibMosGO3ey64JebdVsKJqcRGprXrfMdBJNyrvLIbAyJ1(PzGdBS2pn1LPrueHnOftFhSdnEqk88FFnj7SZo7WA2WC7gqLOAskx2KmjtYKmjyJJAPqI6uGKOpoYKjKqcKFaAytLQm8cQkcld)t3FOKSblvmmme1eiFShSuWWWqutG81p9GffKcppc0Wk4IeOHv27g0IPVdMdBqlM(oyFwroqDdJIoXALWZJHjQHrUkFItHCy4eRvcp3jle25qf7TAsRuLnS(BwO8uXdOa9HhM3Y0ZJp8WZVeknBp23EC2xt6zf5a1nmk6eRvcppgMOgg5Q8jofYHHtSwj8CNSqyNSQyVvtALQSH1FZcLNkEafOp8W8wMEE8HhE(LqPz7X(2JZ(AsOgg5Q8joh88KyudJCv(eNdEE6gf9rjg1WixLpX5GNNUdfuv0ogT7zf5a1nmk6eRvcppgMOgg5Q8jofYHHtSwj8CNPsvYEHTMH755VVM0ZkYbQByu0jwReEEmmrnmYv5tCkKddNyTs45otLQK9wnd3ZZFOgg5Q8joh88KyudJCv(eNdEE6gf9rjEgd)t3FOKSn7Rj9SICG6ggfDI1kHNhdtudJCv(eNc5WWjwReEUZuPkzVvZTgj7NMHHHOM)6rSDVs4lKqc7GNNHxqvryz4F6(dLKnyJAz4pVGNWsZWFWYcHdXx8yGgijaH)OJpsP9O0hjW8nru(JJosagELOpazpiChDKjr9OmL(MOpVPSJuU3By4vI(aKFGWFteLsGszserm79MGJu6JeGHxj6nKWoI9vyng)dRbIOWZbY3Ww8izGg2wuDh1KfkZIcSGnrfLN9aAy7ALua0qcjSTO6Y1jkgybBIkkpbAy7ALua0qcjSTO6orRfbffybBqbfJanSrbVQOW(h19t9udLesyJJAaqdBuWRkkq2dsyLfddIGwjPaOHTRvsbqdjKW2IQlh1PalyX(Ic0W21kPaOHesyhNmMOIYtGg2UwjfanKqc7akifEoqdBxRKcGgsiHTfv34OgaZHfJcuGg2UwjfanKqcBlQUbfumcZHewSwj8CAkgvyrnmIfcdBmrboebwWk4I0nW3nw0uLbscWMkvzdRWsjB1t1B3R29xbj429CTivytLQmCppHLK6ggfDPvLp3xKHTpEFhqY05hytrNId3ZtyPwEIYZgwHLLhlR4q5rnbscWklIpTgpiftuyrCkGnOftFhTsvc7qJhKcp)NlXUep(1KSZo7Stmy3ODiUSDJ2zucgTJPDiUSDJ2zucgjyxwRC7WA2WC7gTt5YMKD2zNDynByUD91(QjPCztYKmjtYKmjtYKGffKIjknwuvPy25LvG8vcmHvwehlikOvQY(1Hew7EYaytSOQsXanSTO62HYGAvEknUcSGTfv3GAeUsJWCyBr1TXfjmh2yTFAg4WgR9ttDzAefryJJAPqI6uGKOpoYKjSb1iCLgD9JkgLEmSSpgHnOgHR0iSeGnPyuHnOftFhSTO6gR9tZahMdlwrLDulfsuNc7wl0ISD(b7YA1UPiQQt13IWg0IPVZnPyuHnMOSfHnOftF3uByuk8CyhA8Gu45)(As2zND2v8bOIDb1iCLgj2L4yIWjXYnSDmAxyR5oQLsi1iCLg)r0hhzY8RjzND2zNyWUGAeUsJ2XiJ21ZUSw52H1SH52j3Wehteodl5g2oLlBs2zND2jgSlOgHR0ODmYODFSlRvUDynByUDmjMaXjUP2PCztYo7SZoSMnm3ocetG4e3uts5YMKjzsMKjzsMKjzsMKjzsMKjzsMKjzsMeSTO6gh1sHe1PWCydAX03b7qJhKcp)3xtYo7SZoSMnm3Ue3uts5YMKjzsMKjzsMKjzsMKjzsMKjzsMKjbBJRtuEclQLEydQ1ahGTnkJsf2wuDXAhsWf8kGfS6eLNrydHb2nNAA3(ziSDzJsYgjT7)KHhA)0Snf2MkSbTy67CRfYkSbTy67GewrGNdSGvWfPBmr4uLbscWMIofdSGnfDko8cQkcl7yGKHqEzkmWo2Oe0VeAiS)m8pD)HsYgSSqboiJ9JH4lEmqdKeasMazpGKjq(bizcKVbscqcBCeHDyEr5YSZlRWoVF2iNkS8whnwuvP4iqsawwESSIzyyiQjq(g24ic7aTsv2WkSHYtfpGc0hOwwMbE8HNvKdu3WO4dStLfOhOvQYgwJpS9LgcRUpxlsfwwESSIdXx8yGgijaKmbYEajtG8dqYeiFdKeGewwESSIH5WYYJLvmBYvkSZlI(0hew2UqQrPDZBSyvuyJJiSdH4lEmqdKeasMazpGKjq(bizcjSS8yzfVI(OazpyfbEUBuiRW2pBHtdRqg21NtXUqQr4k1UpWghryhErfv1jq2RhSS8yzfphf4Gm2pc76lczyJJiSdplKZAGShSizzrk8CuXnXIQkfhbAiHDaJ60nXOebKFGDAHCwdKpYewwOahQW(gxoeFXJbAGKaqsai7bKeaYpajbG8neoru2X3osGPJei6nbMo(irWWRe5iKWk4tuCuH5W24jwuvPyGg2yTFAg4WgR9ttDzAefrydAX03b7qJhKcp)3xtYo7SZoSMnm3UbujQMKYLnjtYKmjtc24OwkKOofij6JJmzcjSPsvUI(Oajbkdjq(gOHnoIWo8SqoRbYEWsfdddrnbsk3dwkyyyiQjqsGiyzHcCOc7BC5q8fpgObscajbGShqsai)aKeaY3q4erzhF7ibMosGO3ey64JebdVsKJqc7GNNHxqvryz4F6(dLKnyBrL27lPyeybBuld)5f8e2PeAy)cnSSq4q8fpgObscq4p(MYu(JJVzY89Bh7rGGJWWRereq2dcNiIEKjL(HWhM9O0puMiIOmm8krFaYpq4p64JuApk9rcmFteL)4OJeGHxj6dKWoI9vyng)dRbIOWZbY3Ww8izGg2wuDh1KfkZIcSGnrfLN9aAy7ALua0qcjSTO6Y1jkgybBIkkpbAy7ALua0qcjSTO6orRfbffybBqbfJanSrbVQOW(h19t9udLesyJJAaqdBuWRkkq2dsyBr1LJ6uGfSYIHbrqRKua0W21kPaOHesyX(Ic0W21kPaOHesyhNmMOIYtGg2UwjfanKqc7akifEoqdBxRKcGgsiHTfv34OgaZHfJcuGg2UwjfanKqcBlQUbfumcZHewSwj8CAkgvyrnmIfcdBmrboebwWk4I0nW3nw0uLbscWMkvzdRWsjB1t1B3R29xbj429CTivyz5XYkMHHHOMa5BytrNId3ZtyPwEIYZgwHnoIWoeIV4XanqsaizcK9asMa5hGKjKWklIpTgpiftuyrLcSbTy67OvQsyhA8Gu45)Cj2L4XVMKD2zNDIb7gTdXLTB0oJsWODmTdXLTB0oJsWib7YALBhwZgMB3ODkx2KSZo7SdRzdZTRV2xnjLlBsMKjzsMKjzsMeSOGumrPXIQkfZoVScKVsGjSPsvUI(OajbhHnXIQkfd0WklWAqk8Cy7NHLg2wuD7qzqTkpLgxbwW2IQlIv0JzXoVScZHTfv3gxKWCydQ1ahGTnkJsf2wuDLfynifEomh2wuDXAhsWf8kGfSb1iCLgD9JkgLEmSSpgHnOgHR0iSeGnOftF3uByuk8CyhA8Gu45)(As2zND2v8bOIDb1iCLgj2L4yIWjXYnSDmAxyR5oQLsi1iCLg)1JWhhjQ3xtYo7SZoXGDb1iCLgTJrgjyxwRC7WA2WC7KByIJjcNHLCdBNYLnj7SZo7ed2fuJWvA0o2hJ21ZUSw52H1SH52XKyceN4MANYLnj7SZo7WA2WC7iqmbItCtnjLlBsMKjzsMKjzsMKjzsMKjzsMKjzsMKjzsWg0IPVZnPyuHnMOSfHTfv3yTFAg4WCyBCDIYtyrT0dRor5jSH49fz)0C7(d7RWAmA3VDulLVWgh1sHe1PazpcFCKOEWIvuzh1sHe1PW(cIlBNFWUSwT7pSp1G0JHTfv34OwkKOofMdBqlM(oyhA8Gu45)(As2zND2H1SH52L4MAskx2KmjtYKmjtYKmjtYKmjtYKmjtYKmjydAX035wlKvydAX03bBS2pndCyJ1(PzGhI3xK9tZHTfv3GAeUsJWCytkgvydAX03bRor5ze2qyGDZPM2TFgcBx2OKSrs7(pz4H2pnBtHTPcjSPsvcSGvwehlikOvQY(1Hew7EYayB8elQQumqdBS2pndCyJ1(PzGhI3xK9tZHvwG1Gu45W2pdlnSbTy67GDOXdsHN)7RjzND2zhwZgMB3aQevts5YMKjzsMKjbBCulfsuNcK9i8XrI6bjScUiDJjcNQmqsa24ic7aTsv2WkSHYtfpGc0hOwwMbE8HNvKdu3WO4dStLfOhOvQYgwJpS9LgcRUpxlsf2u0P4WlOQiSSJbsgc5LPWa7yJsq)sOHW(ZW)09hkjBWYBD0yrvLIJazpyJJiSdZlkxMDEzf259Zg5uHLLhlR4q5rnbscWYcf4Gm2pgIV4XanqsaizcK9asMa5hGKjq(gijajSOGu45rGgwbxKanSYE3Gwm9DWCydAX03b7ZkYbQByu0jwReEEmmrnmYv5tCkKddNyTs45ozHWohQyVvtALQSH1FZcLNkEafOp8W8wMEE8HhE(LqPz7X(2JZ(AspRihOUHrrNyTs45XWe1WixLpXPqomCI1kHN7Kfc7Kvf7TAsRuLnS(BwO8uXdOa9HhM3Y0ZJp8WZVeknBp23EC2xtc1WixLpX5GNNeJAyKRYN4CWZt3OOpkXOgg5Q8joh880DOGQI2XODpRihOUHrrNyTs45XWe1WixLpXPqomCI1kHN7mvQs2lS1mCpp)91KEwroqDdJIoXALWZJHjQHrUkFItHCy4eRvcp3zQuLS3Qz4EE(d1WixLpX5GNNeJAyKRYN4CWZt3OOpkXZy4F6(dLKTzFnPNvKdu3WOOtSwj88yyIAyKRYN4uihgoXALWZDMkvj7TAU1iz)0mmme18xpIT7vcFHesyfbEoWcwwESSIH5WYYJLvmBYvkSZlI(0hew2UqQrPDZBSyvuyz5XYkEf9rbYEWIKLfPWZrf3elQQuCeObscanSjwuvPyGgwrQDKOofij8(DpkteSnUor5jSOw6HTXfjSJfefkg2wuDfP2rI6uyoS6eLNWgAQD2XwFPjghvzyBr1TXfjmh2KIrf2yIYwe2yJLor552ggeubRBiuV0Uln1tHg2yJLor55FyDqqfS7FS1F)Wg0IPVZTwiRWMIovgsyB8elQQumqdRi1osuNcKeE)UhLjcsiHewrGN7gfYkS9Zw40WghryhErfv1jqsWryz5XYkEokWbzSFe21xeYWMkvz4fuvewg(NU)qjzdwHmSV4Z)SlKAeUsTRhSS8yzfhIV4XanqsaizcK9asMa5hGKjq(gijajSdyuNUjgLiG8dStlKZAGKYmHnfDkgybRGprXrfMdBGV4XanKW2hVVdiz68dKajranSXre2HNfYznq2dwkyyyiQjqsGiyrbPWZJanScUibAyL9UbTy67G5Wg0IPVd2NvKdu3WOOtSwj88yyIAyKRYN4uihgoXALWZDYcHDouXERM0kvzdR)Mfkpv8akqF4H5Tm984dp88lHsZ2J9ThN91KEwroqDdJIoXALWZJHjQHrUkFItHCy4eRvcp3jle2jRk2B1KwPkBy93Sq5PIhqb6dpmVLPNhF4HNFjuA2ESV94SVMeQHrUkFIZbppjg1WixLpX5GNNUrrFuIrnmYv5tCo45P7qbvfTJr7EwroqDdJIoXALWZJHjQHrUkFItHCy4eRvcp3zQuLSxyRz4EE(7Rj9SICG6ggfDI1kHNhdtudJCv(eNc5WWjwReEUZuPkzVvZW988hQHrUkFIZbppjg1WixLpX5GNNUrrFuINXW)09hkjBZ(AspRihOUHrrNyTs45XWe1WixLpXPqomCI1kHN7mvQs2B1CRrY(PzyyiQ5VEeB3Re(cjKWo45z4fuvewg(NU)qjzdwwiCi(Ihd0ajbi8hFtzk)XX3mz((TJ9iqWry4vIici7bHterpYKs)q4dZEu6hkteruggELOpa5hi8hD8rkThL(ibMVjIYFC0rcWWRe9bsyhX(kSgJ)H1aru45a5BylEKmqdBlQUJAYcLzrbwWMOIYZEanSDTskaAiHe2wuD56efdSGnrfLNanSDTskaAiHe2wuDNO1IGIcSGnOGIrGg2OGxvuy)J6(PEQHscjSXrnaOHnk4vffi7bjSYIHbrqRKua0W21kPaOHesyBr1LJ6uGfSyFrbAy7ALua0qcjSJtgtur5jqdBxRKcGgsiHDafKcphOHTRvsbqdjKW2IQBCudG5WIrbkqdBxRKcGgsiHTfv3GckgH5qclwReEonfJkSOggXcHHnMOahIalyfCr6g47glAQYajbytLQSHvyPKT6P6T7v7(RGeC7EUwKkSPsvgUNNWssDdJIU0QYN7lYWYYJLvmdddrnbY3WMIofhUNNWsT8eLNnScllpwwXHYJAcKeGvweFAnEqkMOWIkfydAX03rRuLWo04bPWZ)5sSlXJFnj7SZo7ed2nAhIlB3ODgLGr7yAhIlB3ODgLGrc2L1k3oSMnm3Ur7uUSjzND2zhwZgMBxFTVAskx2KmjtYKmjtYKmjyrbPyIsJfvvkMDEzfiFLatytLQCf9rbscVHnXIQkfd0W2IQBhkdQv5P04kWc2wuDdQr4kncZHTfv3gxKWCyJ1(PzGdBS2pn1LPrueHnoQLcjQtbsI(4itMWguJWvA01pQyu6XWY(ye2KIrf2Gwm9DWguJWvAewcW2IQBS2pndCyoSyfv2rTuirDkSBTqlY25hSlRv7MIOQovFlcBJRtuEclQLEydAX03n1ggLcph2HgpifE(VVMKD2zNDfFaQyxqncxPrIDjoMiCsSCdBhJ2f2AUJAPesncxPXF9i8XrI691KSZo7StmyxqncxPr7E6jyxwRC7WA2WC7KByIJjcNHLCdBNYLnj7SZo7ed2fuJWvA0o2hJ2rWUSw52H1SH52XKyceN4MANYLnj7SZo7WA2WC7iqmbItCtnj7SZo7mjLlBsMKjzsMKjzsMKjzsMKjzsMKjzsMKjzsMKjzsMKjzsMKjzsMKjzsW2IQBCulfsuNcZHnOftFhSdnEqk88FFnj7SZo7WA2WC7sCtnjLlBsMKjzsMKjzsMKjzsMKjzsMKjzsMeSbTy67CtkgvyJjkBrydQ1ahGTnkJsf2wuDXAhsWf8kGfS6eLNrydHb2nNAA3(ziSDzJsYgjT7)KHhA)0Snf2MkSbTy67CRfYkSbTy67Ge24ic7a7eyShdSGnoIWoeIV4XanqsaizcK9asMa5hGKjKWklIJfef0kvz)6qcRDpzaScUiDJjcNQmqsa2AvuvNq4p((97Eu(nrFE3JOEe5ity413ukSPOtXHxqvryzhdKmeYltHb2XgLG(LqdH9NH)P7pus2GnoIWoqRuLnScBO8uXdOa9bQLLzGhF4zf5a1nmk(a7uzb6bALQSH14dBFPHWQ7Z1IuHnoIWomVOCz25LvyN3pBKtfwwOahKX(Xq8fpgObscajtGShqYei)aKmbY3ajbiHvWNO4OcZHTpEFhqY05hyB8elQQumqdBS2pndCyJ1(PPUmnIIiSbTy67GDOXdsHN)7RjzND2zhwZgMB3aQevts5YMKjzsMKjbBCulfsuNcKe9XrMmHewwESSIdXx8yGgijaKmbYEajtG8dqYeiFdKeGewwESSIH5WYYJLvmBYvkSZlI(0hew2UqQrPDZBSyvuyfbEoWcwwESSIxrFuGShSIap3nkKvy7NTWPHvid7l(8p7cPgHRu7iaBCeHD4fvuvNazVEWYYJLv8CuGdYy)iSRViKHnvQYWlOQiSm8pD)HsYgSizzrk8CuXnXIQkfhbAGKaqdBIfvvkgOHnPyuHnMOSfHnOftFNBsXOcBmrzlcBJRtuEclQLEyBr1vWNO4OcZHTfvxrQDKOofMdBlQUnUiH5W24Ie2XcIcfdRi1osuNcKeE)UhLjcwDIYtydn1o7yRV0eJJQmSb1AGdW2gLrPcBSXsNO88pSoiOc29p26VFyJnw6eLNBByqqfSUHq9s7U0upfAydAX035wlKvytrNkdjSnEIfvvkgOHvKAhjQtbscVF3JYebjKqc7ag1PBIrjci)a70c5Sgij8MjSSqbouH9nUCi(Ihd0ajbGKaq2dijaKFasca5BiCIOSJVDKathjq0BcmD8rIGHxjYriHL36OXIQkfhbYEWMIofdSGeiDeOHnoIWo8SqoRbYEWsfdddrnbYxPCpyPGHHHOMajbIGLLhlR4q8fpgObscajtGShqYei)aKmbY3ajbiHLfkWHkSVXLdXx8yGgijaKeaYEajbG8dqsaiFdHteLD8TJey6ibIEtGPJpsem8krocjSdEEgEbvfHLH)P7pus2GnQLH)8cEcB)SfonSSq4q8fpgObscq4p(MYu(JJVzY89Bh7rGGJWWRereq2dcNiIEKjL(HWhM9O0puMiIOmm8krFaYpq4p64JuApk9rcmFteL)4OJeGHxj6dKWoI9vyng)dRbIOWZbY3Ww8izGg2wuDh1KfkZIcSGnrfLN9aAy7ALua0qcjSTO6Y1jkgybBIkkpbAy7ALua0qcjSTO6orRfbffybBqbfJanSrbVQOW(h19t9udLesyJJAaqdBuWRkkq2dsyBr1LJ6uGfSYIHbrqRKua0W21kPaOHesyXOafOHTRvsbqdjKWoGcsHNd0W21kPaOHesyhNmMOIYtGg2UwjfanKqcBlQUXrnaMdl2xuGg2UwjfanKqcBlQUbfumcZHewSwj8CAkgvyrnmIfcdBmrboebwWk4I0nW3nw0uLbscWMkvzdRWsjB1t1B3R29xbj429CTivyz5XYkMHHHOMa5BytrNId3ZtyPwEIYZgwHnoIWoeIV4XanqsaizcK9asMa5hGKjKWYYJLv8CuGdYy)iSRViKHvweFAnEqkMOWIkfydAX03rRuLWo04bPWZ)5sSlXJFnj7SZo7ed2nAhIlB3ODgLGr7yAhIlB3ODgLGrc2L1k3oSMnm3Ur7uUSjzND2zhwZgMBxFTVAskx2KmjtYKmjtYKmjyrbPyIsJfvvkMDEzfiFLatyLfXXcIcALQSFDiH1UNma2elQQumqdBlQUDOmOwLNsJRalyBr1nOgHR0imh2wuDBCrcZHnOwdCa22OmkvyJJAPqI6uGKOpoYKjSb1iCLgD9JkgLEmSSpgHTfvxS2HeCbVcybBqncxPryjaBlQUXA)0mWH5Wg0IPVBQnmkfEoSdnEqk88FFnj7SZo7k(auXUGAeUsJe7sCmr4Ky5g2ogTlS1Ch1sjKAeUsJ)6r4JJe17RjzND2zNyWUGAeUsJ290tWUSw52H1SH52j3Wehteodl5g2oLlBs2zND2jgSlOgHR0ODSpgTJGDzTYTdRzdZTJjXeioXn1oLlBs2zND2H1SH52rGyceN4MAskx2KmjtYKmjtYKmjtYKmjtYKmjtYKmjtYKGTX1jkpHf1spSyfv2rTuirDkSBTqlY25hSlRv7MIOQovFlcBlQUXrTuirDkmh2Gwm9DWo04bPWZ)91KSZo7SdRzdZTlXn1KuUSjzsMKjzsMKjzsMKjzsMKjzsMKjzsWg0IPVZnPyuHnMOSfHnw7NMboSXA)0uxMgrre2KIrf2Gwm9DWQtuEgHnegy3CQPD7NHW2LnkjBK0U)tgEO9tZ2uyBQWg0IPVZTwiRWg0IPVdsytLQeybBCeHDGDcm2JbwWMkv5k6JcKeCe2u0PyGfScUiDJjcNQmqsa2u0P4WlOQiSSJbsgc5LPWa7yJsq)sOHW(ZW)09hkjBWIcsHNhbAyfCrc0Wk7DdAX03bZHnOftFhSpRihOUHrrNyTs45XWe1WixLpXPqomCI1kHN7Kfc7COI9wnPvQYgw)nluEQ4buG(WdZBz65XhE45xcLMTh7Bpo7Rj9SICG6ggfDI1kHNhdtudJCv(eNc5WWjwReEUtwiStwvS3QjTsv2W6VzHYtfpGc0hEyEltpp(Wdp)sO0S9yF7XzFnjudJCv(eNdEEsmQHrUkFIZbppDJI(OeJAyKRYN4CWZt3HcQkAhJ29SICG6ggfDI1kHNhdtudJCv(eNc5WWjwReEUZuPkzVWwZW9883xt6zf5a1nmk6eRvcppgMOgg5Q8jofYHHtSwj8CNPsvYERMH755pudJCv(eNdEEsmQHrUkFIZbppDJI(OepJH)P7pus2M91KEwroqDdJIoXALWZJHjQHrUkFItHCy4eRvcp3zQuLS3Q5wJK9tZWWquZF9i2Uxj8fsiHnoIWomVOCz25LvyN3pBKtfwwOahKX(Xq8fpgObscajtGShqYei)aKmbY3ajbiHL36OXIQkfhbYEWYYJLvCO8OMajbyz5XYkgMdllpwwXSjxPWoVi6tFqyz7cPgL2nVXIvrHLLhlR4v0hfi7bRiWZDJczf2(zlCAyfYW(Ip)ZUqQr4k1ocojc24ic7WlQOQobscocBQuLHxqvryz4F6(dLKnyrYYIu45OIBIfvvkoc0ajbGg2elQQumqdRi1osuNcKeE)UhLjc2yJLor552ggeubRBiuV0Uln1tHg2wuDfP2rI6uyoS6eLNWgAQD2XwFPjghvzyJnw6eLN)H1bbvWU)Xw)9dBlQUnUiH5WMumQWgtu2IW246eLNWIAPh2gxKWowquOyiHTXtSOQsXanSIu7irDkqs497EuMiiHesyhWOoDtmkra5hyNwiN1ajLzcRiWZbwWghryhOvQYgwHnuEQ4buG(a1YYmWJp8SICG6ggfFGDQSa9aTsv2WA8HTV0qy195ArQWk4tuCuH5W24jwuvPyGg2yTFAg4WgR9ttDzAefrydAX03b7qJhKcp)3xtYo7SZoSMnm3UbujQMKYLnjtYKmjtc24OwkKOofij6JJmzcjS9X77asMo)ajqszGg2gpXIQkfd0Wgh1sHe1PazpcFCKOEqclkiftuASOQsXSZlRa5ReycBIfvvkgOHTfv3GAeUsJWCyBr1TXfjmh24OwkKOofi7r4JJe1d2GAeUsJU(rfJspg2NEytkgvyJjkBryBCDIYtyrT0dBlQUXA)0mWH5WQtuEcBiEFr2pn3U)W(kSgJ29Bh1s5lSyfv2rTuirDkSVG4Y25hSlRv7(d7tni9yyBr1noQLcjQtH5WguJWvAewcWgR9tZah2yTFAg4H49fz)0CydAX035wlKvytrNkdjSJyFfwJX)WAGik8CGKaSdEEclj1nmk6sRkFUVidBTkQQtiCIy6OJerethj6nrF(44NEWWRVFe2Ihjd0W2IQ7OMSqzwuGfSjQO8eOHTRvsbqdjKW2IQ7eTweuuGfSXrnaOHnk4vffi7bjSbfumc0Wgf8QIc7Fu3p1tnusiHTfv3GckgH5WklggebTssbqdBxRKcGgsiHfJcuGg2UwjfanKqc7akifEoqdBxRKcGgsiHTfv34OgaZHDCYyIkkpbAy7ALua0qcjSjQO8ShqdBxRKcGgsiHf7lkqdBxRKcGgsiHe2bppxrFuGKWJWI4b1EC4yuNgog1PW(SICG6ggfzVx85F2fsncxP2zhbNeblwReEonfJkSPsvcRGls3aF3yrtvgijaRqg2q8(ISFAUDEUD1(C0oc29QD1APZUEWklIpTgpiftuyrLcSdyuNUjgLiG8nStlKZAi83o((9NpVPuhFS37EeOSJWWRVPmSuXWWqutG8vcoclfmmme1eiDewERJglQQuCei7bRGls3yIWPkdKeGfjllsHNJkUjwuvP4iqdKeaAytSOQsXanSIu7irDkqs497EuMiyBCDIYtyrT0dBJlsyhlikumS6eLNWgAQD2XwFPjghvzyJnw6eLN)H1bbvWU)Xw)9dBSXsNO8CBddcQG1neQxA3LM6PqdBsXOcBmrzlcBlQUnUiH5W2IQRi1osuNcZHe2gpXIQkfd0WksTJe1PajH3V7rzIGesiHfXdQ94WXOoLMIrf2LT(zle6WNc1SJnibYhbAyPGHHHOMaPJWIcsXeLglQQum78Ykq(kbMWMyrvLIbAyBr1nOgHR0imh2wuDBCrcZHnoQLcjQtbYEe(4ir9GnOgHR0ORFuXO0JHL9XiSjfJkSXeLTiSnUor5jSOw6HTfv3yTFAg4WCy1jkpHneVVi7NMB3FyFfwJr7(TJAP8fwSIk7OwkKOof2xqCz78d2L1QD)H9PgKEmSTO6gh1sHe1PWCydQr4knclbyJ1(PzGdBS2pnd8q8(ISFAoKWoI9vyng)dRbIOWZbscWo45jSKu3WOOlTQ85(ImS1QOQoHWjIPJosermDKO3e95JJF6bdV((rylEKmqdBIkkp7b0W21kPaOHesytur5jqdBxRKcGgsiHTfv3jATiOOalydkOyeOHnk4vff2)OUFQNAOKqcBlQUJAYcLzrbwWgh1aGg2OGxvuGShKW2IQBqbfJWCyX(Ic0W21kPaOHesyhqbPWZbAy7ALua0qcjSTO6gh1ayoSJtgtur5jqdBxRKcGgsiHfJcuGg2UwjfanKqcRSyyqe0kjfanSDTskaAiHesyh88Cf9rbscpclIhu7XHJrDA4yuNc7ZkYbQByuK9EXN)zxi1iCLAND9GfRvcpNMIrf2uPkHvWfPBGVBSOPkdKeGfjllsHNJkUjwuvP4iqdKeaAytSOQsXanSjfJkSXeLTiSXglDIYZTnmiOcw3qOEPDxAQNcnSTO6ksTJe1PWCy1jkpHn0u7SJT(stmoQYWgBS0jkp)dRdcQGD)JT(7h2wuDBCrcZHvKAhjQtbscVF3JYebBJRtuEclQLEyBCrc7ybrHIHe2gpXIQkfd0WksTJe1PajH3V7rzIGesiHvweFAnEqkMOWIkfyhWOoDtmkra5Byr8GApoCmQtPPyuHDzRF2cHo8Pqn7ydwQyyyiQjqsKJW24jwuvPyGg24OwkKOofi7r4JJe1dsy5ToASOQsXrGShScUiDJjcNQmqsawHmSH49fz)0C78C7Q95OD9S7v7Q1sND9GDAHCwdH)2X3V)85nL64J9E3JaLDegE9nLHeiPuGg24ic7WZc5Sgi7blfmmme1eiFLqpyz5XYkoeFXJbAGKaqYei7bKmbYpajtG8nqsasyh88m8cQkcld)t3FOKSblleoeFXJbAGKaqY0jL7rGihF0XEu(nrmP0hbYEajbiHT4rYanSjQO8ShqdBxRKcGgsiHnrfLNanSDTskaAiHe24Oga0Wgf8QIcK9Ge2GckgbAyJcEvrH9pQ7N6PgkjKW2IQBqbfJWCyX(Ic0W21kPaOHesyBr1noQbWCyhNmMOIYtGg2UwjfanKqclgfOanSDTskaAiHe2buqk8CGg2UwjfanKqcRSyyqe0kjfanSDTskaAiHesyXALWZPPyuHf1WiwimSXef4qeybRGls3aF3yrtvgijaBQuLnSclLSvpvVDVA3FfKGB3Z1IuHnvQYW98ewsQByu0Lwv(CFrg24ic7aTsv2WkSHYtfpGc0hOwwMbE8HNvKdu3WO4dStLfOhOvQYgwJpS9LgcRUpxlsf24ic7amh2u0P4W98ewsQByu0Lwv(CFrgwwESSIdLh1eijallpwwXZrboiJ9JWU(Iqgwzr8P14bPyIclQuGnOftFhTsvc7qJhKcp)3xtYo7SZoSMnm3UFZEsNmhCWUNYUN0jZbhM9L9g84ou(7FUiFrrLS(3SXcIcfp7RDpLDeyYKjX29pxKVOOswZoev)MnwquO4zFT7PSJatMm)Y(zskx2otYKGffKIjknwuvPy25LvG8vcmHvwehlikOvQY(1He2Nma2elQQumqdBsXOcBqlM(oydAX035wlKvytrNkdBqlM(o3KIrf2yIYwe2Gwm9DWo04bPWZ)91KSZo7SdRzdZTlXn1KuUSjzsMKjzsWg0IPVBQnmkfEoSdnEqk88FFnj7SZo7k(auXUr7y0Uouw7Sdr1pMeB3)Cr(IIkz9VzJfefkE23V29u21HYANDiQ(rGy7(NlYxuujRzhIQFZgliku8SVFT7jSJatMSFMKD2zNDfFaQyxNigf8k3AfvYA7y0U)5I8ffvYA2HO63SXcIcfp7RDVA3)Cr(IIkz9VzJfefkE2xtYo7SZUIpavSJLDmA3)CroVnm8B2ybrHINrSDZcXZJAagLcpF2xtYo7SZUIpavSJvp7y0U)5ICEBy43SXcIcfpJy7Mr9eLxj4v29mgL1Z(As2zND2v8bOIDS(yhJ29pxKZBdd)MnwquO4zeB3SqQrcUD(b7ORXik4Z(As2zND2v8bOIDSEBhJ29pxKZBdd)MnwquO4zeB3SqlPIvUSGy7cb7NMBNKoTwSZpy3kktuCN3ZN91KSZo7SR4dqf7MO4iYogTlS1meFhluofuk4vZ98w8xitXLsY2uwQPdT)qPF64ovQzh1HnBUtLbs2(As2zND2v8bOID1(C0LfkQU1kQyhJ2X05h7cl7(X057E29e2X05NVMKD2zNDfFaQyxTIkcELBxRKIXIqX2XODeSlSS73efhr29u2rGjZVMKD2zNDIb7yzhJmA3Sq88OgGrPWZNzxwRCtYo7SZo7SZo7Q95OlluuDRvuXogTR2NJUSqr1Twrf7cl7(X05h7Ec7y68ZxtYo7SZoLlBs2zND2jgSJ1h7yKr7MfsnsWTZpyhDngrbFMDzTYnj7SZo7SZo7SRwrfbVYTRvsXyrOy7y0UAfve8k3UwjfJfHITlSSJPtImj7SZo7uUSjzND2zNyWow9SJrgTBg1tuELGxz3ZyuwpZUSw5MKD2zND2zND2vROIGx521kPySiuSDmAxTIkcELBxRKIXIqX2fw2X05hImj7SZo7uUSjzND2zNyWowVTJrgTBwOLuXkxwqSDHG9tZTtsNwl25hSBfLjkUZ75ZSlRvUjzND2zND2zND1kQi4vUDTskglcfBhJ2vROIGx521kPySiuSDHLDmD2ZKSZo7St5YMKD2zNDfFaQyhIv0xAP6wROIGx565fkCR95ODmAxNigf8k3AfvYA7Ec7Q95OlluuDRvuXKSZo7StmyxTIkcELBxRKIXIqX2X(SRNDzTYTRwrfbVYTRvsXyrOy7y0UE2PCztYo7SZUIpavSBqWrf3AfvCrSI(slv7y0oeROV0s1TwrfbVY1Zlu4w7Zr7Ec7QvurWRC7ALumwek2KSZo7SR4dqf7geCuXTwrfxSwqPyIAhJ21HYANdfVh)73GGJkU1kQ4Iyf9LwQ29u29pxKVOOswZoev)MnwquO4zF)(eeyY8RjzND2zxXhGk2vROI7OIduEIQu7y0Uouw7CO494F)geCuXTwrfxeROV0s1UNYUormk4vU1kQK1FT7jSJatMFnj7SZo7E91rSGN)QvuXDuXbkprv6xtYo7SZUIpavSJRtBhJ2nAxyz3GGJkU1kQ4I1ckftutYo7SZoSMnm3oUonXeyYK4e3u2pts5YWg0IPVJe1PWo04bPWZ)91KSZo7SR4dqf7gTJr76qzTZoev)ysSD)Zf5lkQK1)MnwquO4zF)A3tzxhkRD2HO6hbIT7FUiFrrLSMDiQ(nBSGOqXZ((1UNWocmzY(zs2zND2v8bOIDDIyuWRCRvujRTJr7(NlYxuujRzhIQFZgliku8SV29QD)Zf5lkQK1)MnwquO4zFnj7SZo7k(auXow2XOD)Zf582WWVzJfefkEgX2nleppQbyuk88zFnj7SZo7k(auXow9SJr7(NlY5THHFZgliku8mITBg1tuELGxz3Zyuwp7RjzND2zxXhGk2X6JDmA3)CroVnm8B2ybrHINrSDZcPgj425hSJUgJOGp7RjzND2zxXhGk2X6TDmA3)CroVnm8B2ybrHINrSDZcTKkw5YcITleSFAUDs60AXo)GDROmrXDEpF2xtYo7SZUIpavSBIIJi7y0UWwZq8DSq5uqPGxn3ZBXFHmfxkjBtzPMo0(dL(PJ7uPMDuh2S5ovgiz7RjzND2zxXhGk2v7ZrxwOO6wROIDmAhtNFSlSS7htNFC0UNWoMo)81KSZo7SR4dqf7QvurWRC7ALumwek2ogTJGDHLD)MO4iYUNYocmz(1KSZo7Stmyhl7yKr7MfINh1amkfE(m7YALBs2zND2zND2zxTphDzHIQBTIk2XOD1(C0LfkQU1kQyxyz3pMo)y3tyhtNF(As2zND2PCztYo7SZoXGDS(yhJmA3SqQrcUD(b7ORXik4ZSlRvUjzND2zND2zND1kQi4vUDTskglcfBhJ2vROIGx521kPySiuSDHLDmDsKjzND2zNYLnj7SZo7ed2XQNDmYODZOEIYRe8k7EgJY6z2L1k3KSZo7SZo7SZUAfve8k3UwjfJfHITJr7QvurWRC7ALumwek2UWYoMo)qKjzND2zNYLnj7SZo7ed2X6TDmYODZcTKkw5YcITleSFAUDs60AXo)GDROmrXDEpFMDzTYnj7SZo7SZo7SRwrfbVYTRvsXyrOy7y0UAfve8k3UwjfJfHITlSSJPZEMKD2zNDkx2KSZo7SR4dqf7qSI(slv3Afve8kxpVqHBTphTJr76eXOGx5wROswB3tyxTphDzHIQBTIkMKD2zNDIb7QvurWRC7ALumwek2o2ND9SlRvUD1kQi4vUDTskglcfBhJ21ZoLlBs2zND2v8bOIDdcoQ4wROIlIv0xAPAhJ2Hyf9LwQU1kQi4vUEEHc3AFoA3tyxTIkcELBxRKIXIqXMKD2zNDfFaQy3GGJkU1kQ4I1ckftu7y0Uouw7CO494F)geCuXTwrfxeROV0s1UNYU)5I8ffvYA2HO63SXcIcfp773NGatMFnj7SZo7k(auXUAfvChvCGYtuLAhJ21HYANdfVh)73GGJkU1kQ4Iyf9LwQ29u21jIrbVYTwrLS(RDpHDeyY8RjzND2z3RVoIf88xTIkUJkoq5jQs)As2zND2v8bOIDCDA7y0Ur7cl7geCuXTwrfxSwqPyIAs2zND2H1SH52zxmXcELZbpUdL)M9KohMrSDJFTZPt7Mz3m7C60UyIf8kNdEChk)n7jDomJy7460FTZPt7Mz3m7C60UyIf8kNdEChk)nlSEsNdZi2UbbhvCRvuXfRfukMOFnjLldBqTg4aSTrzuQWQtuEgH9FYqPDFHnQ7N(fiHnoIWoeIV4XanqsaizcK9asMa5hGKjKWk4I0nMiCQYajbyRvrvDcKFycBk6uC4fuvewg(NU)qjzdwwOahKX(Xq8fpgObscajtGShqYei)aKmbY3ajbiHL36OXIQkfhbscWYYJLvmdddrnbY3WkKHTV337799(EF)L)SRhSS8yzfdZHLLhlRy2KRuyNxe9PpiSSDHuJs7M3yXQOWYYJLv8k6JcK9GfjllsHNJkUjwuvP4iqdjSIaphybRSiowquqRuLtruvNW(KCyJJiSdVOIQ6ei71d2uPkdVGQIWYW)09hkjBWMIofVI(OajbhHDaJ60nXOebKFGDAHCwdK9E)g2uPkxrFuGKGJqcKeyc0WghryhEwiN1azpyPGHHHOMa5Re6bRiWZbwWo45z4fuvewg(NU)qjzdwwiCi(Ihd0azpiCI6rPp(HOEeXShLF8Xh7rzy4vIEdKFGWjQhL(4hI6reZEu(XhFShLHHxj6nKWw8izGg2evuE2dOHTRvsbqdjKW2IQlxNOyGfSjQO8eOHTRvsbqdjKWgh1aGg2OGxvuGShKWI9ffOHTRvsbqdjKW2IQBqbfJWCyXOafOHTRvsbqdjKW2IQBCudG5WoozmrfLNanSDTskaAiHe2GckgbAyJcEvrH9pQ7N6PgkjKWoGcsHNd0W21kPaOHesyLfddIGwjPaOHTRvsbqdjKqclwReEonfJkSOggXcHHnMOahIalyfCr6g47glAQYajbytLQSHvyPKT6P6T7v7(RGeC7EUwKkSPsvgUNNWssDdJIU0QYN7lYWghryhG5WMIofhUNNWssDdJIU0QYN7lYWYYJLvCO8OMajbyz5XYkEokWbzSFe21xeYWklIpTgpiftuyrLcSbTy67OvQsynPHgpifE(VVMKD2zNDynByUD)M9Kozo4GDpLDpPtMdom7l7n4XDO83)Cr(IIkz9VzJfefkE2x7Ek7iWKjtIT7FUiFrrLSMDiQ(nBSGOqXZ(A3tzhbMmz(L9ZKuUSDMKjblkiftuASOQsXSZlRa5ReycRSiowquqRuL9RdjSpzaSjwuvPyGg2KIrf2Gwm9DWg0IPVZTwiRWMIovg2Gwm9DWo04bPWZ)91KSZo7SdRzdZTlXn1KuUSjzsMKjzsWg0IPVBQnmkfEoSdnEqk88FFnj7SZo7cA4xuujRTJr7gkEp(3V)5I8ffvY6FZgliku8SVp1)Cr(IIkzn7qu9B2ybrHIN997tqGjZVSFMKD2zNDynByUDbn8lkQK1etGjtItCtz)mjLldBqlM(osuNc7qJhKcp)3xtYo7SZUIpavSB0ogTRdL1o7qu9JjX29pxKVOOsw)B2ybrHIN99RDpLDDOS2zhIQFei2U)5I8ffvYA2HO63SXcIcfp77x7Ec7iWKj7NjzND2zxXhGk21jIrbVYTwrLS2ogT7FUiFrrLSMDiQ(nBSGOqXZ(A3R29pxKVOOsw)B2ybrHIN91KSZo7SR4dqf7yzhJ29pxKZBdd)MnwquO4zeB3Sq88OgGrPWZN91KSZo7SR4dqf7y1ZogT7FUiN3gg(nBSGOqXZi2Uzupr5vcELDpJrz9SVMKD2zNDfFaQyhRp2XOD)Zf582WWVzJfefkEgX2nlKAKGBNFWo6AmIc(SVMKD2zNDfFaQyhR32XOD)Zf582WWVzJfefkEgX2nl0sQyLlli2UqW(P52jPtRf78d2TIYef3598zFnj7SZo7k(auXUjkoISJr7cBndX3XcLtbLcE1CpVf)fYuCPKSnLLA6q7pu6NoUtLA2rDyZM7uzGKTVMKD2zNDfFaQyxTphDzHIQBTIk2XODmD(XUWYUFmD(Xr7Ec7y68ZxtYo7SZUIpavSRwrfbVYTRvsXyrOy7y0oc2fw29BIIJi7Ek7iWK5xtYo7SZoXGDSSJrgTBwiEEudWOu45ZSlRvUjzND2zND2zND1(C0LfkQU1kQyhJ2v7ZrxwOO6wROIDHLD)y68JDpHDmD(5RjzND2zNYLnj7SZo7ed2X6JDmYODZcPgj425hSJUgJOGpZUSw5MKD2zND2zND2vROIGx521kPySiuSDmAxTIkcELBxRKIXIqX2fw2X0jrMKD2zNDkx2KSZo7StmyhRE2XiJ2nJ6jkVsWRS7zmkRNzxwRCtYo7SZo7SZo7QvurWRC7ALumwek2ogTRwrfbVYTRvsXyrOy7cl7y68drMKD2zNDkx2KSZo7StmyhR32XiJ2nl0sQyLlli2UqW(P52jPtRf78d2TIYef3598z2L1k3KSZo7SZo7SZUAfve8k3UwjfJfHITJr7QvurWRC7ALumwek2UWYoMo7zs2zND2PCztYo7SZUIpavSdXk6lTuDRvurWRC98cfU1(C0ogTRteJcELBTIkzTDpHD1(C0LfkQU1kQys2zND2jgSRwrfbVYTRvsXyrOy7yF21ZUSw52vROIGx521kPySiuSDmAxp7uUSjzND2zxXhGk2ni4OIBTIkUiwrFPLQDmAhIv0xAP6wROIGx565fkCR95ODpHD1kQi4vUDTskglcfBs2zND2v8bOIDdcoQ4wROIlwlOumrTJr76qzTZHI3J)9BqWrf3AfvCrSI(slv7Ek7(NlYxuujRzhIQFZgliku8SVFFccmz(1KSZo7SR4dqf7QvuXDuXbkprvQDmAxhkRDou8E8VFdcoQ4wROIlIv0xAPA3tzxNigf8k3AfvY6V29e2rGjZVMKD2zNDV(6iwWZF1kQ4oQ4aLNOk9RjzND2zxXhGk2X1PTJr7gTlSSBqWrf3AfvCXAbLIjQjzND2zhwZgMBNDXel4voh84ou(B2t6CygX2n(1oNoTBMDZSZPt7IjwWRCo4XDO83SN05WmITJRt)1oNoTBMDZSZPt7IjwWRCo4XDO83SW6jDomJy7geCuXTwrfxSwqPyI(1KuUmS6eLNry)NmuA3xyJ6(PFb2Gwm9DUjfJkSXeLTiSb1AGdW2gLrPcjSSqboiJ9JH4lEmqdKeasMazpGKjq(bizcKVbscqcBTkQQtG8dtytrNIdVGQIWYW)09hkjBWk4I0nMiCQYajbyNwiN1azV3VHLLhlRy2KRuyNxe9PpiSSDHuJs7M3yXQOWYcf4qf234YH4lEmqdKVbsMqcllpwwXROpkq2d2uPkdVGQIWYW)09hkjBWghryhErfv1jq2RhSPOtXROpkqsWryLfXXcIcALQCkIQ6e2NKdllpwwXH4lEmqdKeasMazpGKjq(bizcKVbscqcRqg2(EFVV337799x(d2bmQt3eJseq(g24ic7qi(Ihd0ajbGKjq2dizcKFasMqcllpwwXmmme1eiFdlV1rJfvvkocKeGnvQYv0hfij4iSXre2bALQSHvydLNkEafOpqTSmd84dpRihOUHrXhyNklqpqRuLnSgFy7lnewDFUwKkKajbcanSdEEUI(OazpMWklIJfef0kvjSpzGjbBqlM(oALQe2HgpifE(VVMKD2zNDynByUDDOS25qX7X)EXt)NlQZ34PDpLDeyApD)81oNoTBMdZmjLldlfmmme1ei)qeSYI4tRXdsXefweNcyrbPyIsJfvvkMDEzfizcBqlM(oALQ8)rzuQWQtuEcRGls3aF3yrtvgijalkifEEeOHnMiCc0Wk7DdAX03bZHnOftFhSV4P)Zf15B80ogTJPj9IN(p3oev2XODmnPx80)5M(evSJr7ycjScUibAyL9UbTy67G5Wg0IPVd2x80)5M(evSJr7yAsV4P)Zf15B80ogTJPj9IN(p3oev2XODmHesyfCr6gteovzGKaSjwuvPyGg2KIrf2Gwm9DWg0IPVZTwiRWMIovg2Gwm9DWo04bPWZ)5sSDUeBxSXITjkpj2oxITZLy7I(goqj2oxITZLy7Cj2oxITZLy7Cj2oxITloQLcjQtj2oxITd15B8Ky7Cj2o3VMKD2zNDIb7(NlYqJ)Zf5VOVHdu78y7MnJy7MnwquO4zFTdXLTloQLcjQtTJrgTB2liUSD(b7YA1U)W(udspEMDiUSDXgl2MO80ogz0Uz7FS1F)UVWg19pZUSw5MKD2zND2zND29IN(pxuNVXt7y0ouNVXttYo7SZoLlBskxgwDIYZiSHWa7MtnTB)me2USrjzJK29FYWdTFA2McBtf2Gwm9DUjfJkS6eLNWo0kLyaIdZHe2Owg(Zl4jSHWgjnBtbwHmSV4P)ZUAfvGDAHCwdH)iL7reL)8HsFtGYmDKYe1dgE99JWo45jSKu3WOOlTQ85(ImS8whnwuvP4iq2dwKSSifEoQ4MyrvLIJanqsaOHnXIQkfd0WMumQWgtu2IW2IQBTIkznmh2gxNO8ewul9WQtuEc7lkQK1WgBS0jkp)dRdcQGD)JT(7h2AfvYAyzcBTIkzTRFuXO0JHL9bBlQUnUiH5WgBS0jkp32WGGkyDdH6L2DPPEk0W24Ie2XcIcfdjSnEIfvvkgOHesiHTwfv1jeoro2JsjI57po6itIi8P3JWWRVPmSfpsgOHnrfLN9aAy7ALua0qcjSjQO8eOHTRvsbqdjKWguqXiqdBuWRkkS)rD)up1qjHe24Oga0Wgf8QIcK9GewzXWGiOvskaAy7ALua0qcjSTO6guqXimhwmkqbAy7ALua0qcjSTO6gh1ayoSJtgtur5jqdBxRKcGgsiHf7lkqdBxRKcGgsiHTfv3aFhlucZHDafKcphOHTRvsbqdjKqclwReEonfJkSPsvcjKWobij8Uhbibaa \ No newline at end of file diff --git a/WA codes/Holy Pala Crap (WA CODE).txt b/WA codes/Holy Pala Crap (WA CODE).txt new file mode 100644 index 0000000..29adb98 --- /dev/null +++ b/WA codes/Holy Pala Crap (WA CODE).txt @@ -0,0 +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 diff --git a/WA codes/Hunter Focus (WA CODE).txt b/WA codes/Hunter Focus (WA CODE).txt new file mode 100644 index 0000000..e01cb77 --- /dev/null +++ b/WA codes/Hunter Focus (WA CODE).txt @@ -0,0 +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 diff --git a/WA codes/Icey bog(WA CODE).txt b/WA codes/Icey bog(WA CODE).txt new file mode 100644 index 0000000..a829813 --- /dev/null +++ b/WA codes/Icey bog(WA CODE).txt @@ -0,0 +1 @@ +defBTaqiefflIu5ssvPprQcnkPQ6uQsSksvGxjvfMfjHBrk2fQq9lefLgMe5yQkltQYZKOAAKuUgjvBtsv(gIcJdvW5KQIUhIQdskTqvP8qejtusvDrvvzJKQ6JOczKOIYjvLQvkHzIkYnvvv7eHFIi1qrLokPkYsLO4PGMkjUkIsBvIs9vur1yrueolIIO1sQI6TKKAUiks3LKK9c9xvjnyLdJYILepgPMmQ6YaBwL8zvQrljDAcRwIsEnIy2s52QIDtXVP0WLklNONRIPt11rY2jvPVlPY4vv58skRNKO3tQc6(ikQ2Vy8dvqidvqhHhe2JJvJJ)ide(GqEeYJkiKxCklkdTl0laHSwdHsWTWAuQ1bq4T0s1HqgTl0lqrkUVbY)T8aKqZxjec(1Xm8aE8nek4rizgYmVtdQL9M9gHhq7IRvyCe(gPvui9)C6p9vqOH6rrkUVbYds8HWMLXJki0znGX7Hki8HQ5cubD0rOZAaJJki8HQ5cubD0riV46sqt18AOccFOAUavqhDekz0aubHpunxGkOJocL2gavq4dvZfOc6OJWo925SgW4OccFOAUavqhDeEXODH1Gki8HQ5cubD0ri1b8kDJDoyf0rhH0Ocs8Hki0b)C9BS7dcjSgacpoJMKJ(n29bHewdaHNoMKKYyDMlSgKOecLwN5afWphHeKM4peEznU(n29bHKMSkC6DI)qOG2AEL22Ssubj(qIpKOhs8HeLJeFiHAiXh6i8XYdAV2X8QieY9poXjiz2cHrAjP6RkvPm8aPI02AV(xdq7sbnNZCG8vOZCah)0dHvysszBwjQGeFiXhs0djkHeLJeLqc1qIp0rip4WCkjZbyfeE6yssi911b4KjrIsiSzz8OccDwdy8EOccFOAUavqhDe6SgW4OccFOAUavqhDeYlUUe0unVgQGWhQMlqf0rhHsgnavq4dvZfOc6OJWo925SgW4OccFOAUavqhDekTnaQGWhQMlqf0rhHxmAxynOccFOAUavqhD0rOlEasszBwjQGeFiXhs0dj(qIYrIpKqnK4dDesDaA5llQJd4b8)lmyfekb3cRrPwhaHpwEqdHhNrtYbFdHo4Ntjbi8TMqLQKj5rOd(56Bnoc1xkuzMEIIXlzoltrbHNoMKeSccDXdqQV14iuFPqLz6jkgVK5Smffe6GFoPSnRevqIpK4dj6HeFir5iXhsOgs8Hoc5fNYIYq7c9cqiR1q4PJjjrb8ZPKae(UXbYlgnGmLuSJlm3VXKKPK9DnKIDCH5(nMudSJjjbHpwEq71FO(QRwj1k)Rpvx9ECqn1uVpRhEPr9siKr7c9cuKI7BG8Flpaj08vcH0uh3(Oa(5KTJN5aes1XZCacTsbW4mxyniKZiDzExptAcfTCcH8ItxJvtb8Z5e4YryFni0q9Oif33a5bj(qiJYT4Bi0LI7BGevqOxRdGqAQJBFqin1XTp1NsYCH1GWlkdTlSM(FjfzzzznlnRLPLBg5zK1iCU26aY(111y1asDVKISSSSMLM1YEy)0YnJ8mYAeoxBDa5)SF9RRRXQbK6EjfzzzzsGtjnzA5QISh2pTCvr2xkag(SSSSuKcesxfqtccP64zoaH0uh3(8QxRdGWJZCQdcPPoU9bHxugAxyn9)skYYYYKaNsAYCjfitJgwRowTtM1KcGHpfPifPifPifPifPaH0uh3(8AvbpaHU4bWJocDWphFdHvy0KClTugEszBwjQGeFirjKOhsucjkhjkHeQHeL4y1rhHhxqtsT6tjzUWAWki84mAso6Bnoc1xkuzMEIIXlzoltrbHU4biX3qOlEas9BS7dcjSgacf8i8ngnj3slLHp7FlpOHWthtsYBnGH)FlpaHARF9ri1bOLVSOooGhW)p7hwbHhNrtYbkujaj(6HqEXPRXQPa(5LrCx1ryF7qyvG4UQJeQvcHvyY3n6lTghFdHNoMKKYyDMlSM)T8aeQLSkKgHNoMKeszBwjQGeFiXhs0dj(qIYrIpKqnK4dDeE6yssi911b4KjqIsiuqBnVEe8aewM35iotbHo4NdfQeGeF9q4PJjjHZaI7QosuEjeECgnjhszBwjQGeFiXhs0dj(qIYrIpKqnK4dDe6IhGekujaj(6HWthtscNl49QiXxjeE6yss4mbppWGqI)k7)kdcVKSha0LmNHeLJW6e8EvKqTsLqOG2AW3qOWOxG8aWki80XKKuFWH5usawbHcJWF94mPd4rIpeQsR9bjkHqwRRkdj(qhj6HkiSgPVUoahj08HWkmAsULwkdpPSnRevqc1qIsOJWlRX1VXUpiK0KvHtVt8hcRWKKY2Ssubj(qIsirpuF1lVECOp7tYOxPECOx9kvQC8sJ6QJeLJ6tgLRgzusnoWHsLZH6rgF1RhEPrD1rhHnlJhvqOZAaJ3dvq4dvZfOc6OJqN1aghvq4dvZfOc6OJqEX1LGMQ51qfe(q1CbQGo6iuYObOccFOAUavqhDe2P3oN1aghvq4dvZfOc6OJqPTbqfe(q1CbQGo6i8Ir7cRbvq4dvZfOc6OJocppwRxLR0ElbNd(gcLGBH1OuRdGqgLKvHjr4Xz0KCWki0b)CkjaHLnv16BZ0KXTXeMmoVQWbiKxCklkdTl0laHSwdH0uh3(Oa(5i8IYq7cRP)xsrwwwwZsZAzA5MrEgzncNRToGSFDDnwnGu3lzA0WrapJDCjRL1zRdiZyg(Sh2VSoBDazkYYYYKaNsAY0YnfadFksrksrksrksbcz0UqVafP4(gi)3YdqcnFLqiV401y1ua)CobUCe2xAe6sX9nqIki0R1bqin1XTpiKM642heErzODH10)lPillltcCkPjZLuGmnAyT6y1ozwtkag(uKIuKIuKIuKIuKcestDC7t9PKmxyni8IYq7cRP)xsrwwwwZsZAzA5MrEgzncNRToGSFDDnwnGu3lzA0WrapJDCjRL1zRdiZyg(Sh2VSoBDazkYYYYAwAwl7H9tl3mYZiRr4CT1bK)Z(1VUUgRgqQ7LuKLLL1S0SwMwU3mH5KrEMgn1hCjmGmTCZUzcdGpRsTSthO1oPillltpmfzzzzzzzzQwhbOUS)TwJovLrE2xjvKISSSSSSSmvRJZyTRS)TwJovLrEwVsQifzzzzzzzzQwN(uTw2)wRrNQYiptTsQifzzzzzzzzQwhNOmmzg0Lcsa6uvg5zF9urkYYYYYYYYuToOTXKzCUK5v1PQmYZ4qkYYYYiZtrwwwwZsZAzvOUUYipJSgH)g11v)66ASAaPovKP7Tg4CeM7m7v2Fnkdq3lzA0OVWWN1t9(Mjm0sa7aYexzDsWby8uKLLL1S0Swgn74cZDg5zK1iCsXoUWC)U5Y2VUUgRgqQ7LmnA4iGND6aTwgnLucmERwwfGWCNrZoEM4kJzQLISSSmXvgn74cZDMxfyY0O59RmVkqc0JNmw2Pd0AzvacZDgn74PilllllllRzPzTSUg1rl3mYZ0YnRpY0Y9MjmhvtZoUWCRQmnA0YZNPLB2ntya8zvQLD6aTwgnLucmERwgn74zUnJMskbgptl3m3MPRtc4f0UUmTCtrwwwwwwwM4kRc11vMxfysrwwwwwwwwwwwM4kJMDCH5oJCYZ0XjkdtMbDPGeGUmRmJMDCH5oJCYZ0bTnMmJZLmVQUmVkWKPrZ7xzaHxfiZoDGwlJDDbODaFwLAzvOUUYeNSkaH5oJMD8mgpFwp17BMBZeUE8KX6YUzcdGpfzzzzzzzzzzzzzzzznlnRL11OoA5MrEMwUz9rMwU3mH5OAA2XfMBvLISSSSSSSSSSSSSSSSUg1rl3mYZEyEvo(QzTY(7AuhTCZ6JmTCVzcZr10SJlm3QktpiReh3t9xY0OHJaEMxfK1t9(MzVY4qMvM91lJz4Zy88zcpZTzCiZkZ(6LISSSSSSSSSSSmGHpfzzzzzzzzadFkYYYYYYYYKaNsAYEy)0YnttwxJ6OLRkYEy)0YvfzFPillldy4trwwwM4kZy9mA2XfM7mVkWKISSSSSSSmjWPKMSh2pTCZ0KPLRkYEy)0YvfzFPillldy4tbWWJqAQJBFiypaeErzODH10)lPilllRzPzTmTCZipJSgHZ1whq2VUUgRgqQ7LmnA4iGNXoUK1Y6S1bKzmdF2d7xwNToGmfzzzznlnRL9W(PLBg5zK1iCU26aY)z)6xxxJvdi19skYYYYAwAwltl3BMWCYiptJM6dUegqMwUz3mHbWNvPw2Pd0ANuKLLLPhMISSSSSSSmvRJaux2)wRrNQYip7RKksrwwwwwwwMQ1XzS2v2)wRrNQYipRxjvKISSSSSSSmvRtFQwl7FR1OtvzKNPwjvKISSSSSSSmvRJtugMmd6sbjaDQkJ8SVEQifzzzzzzzzQwh02yYmoxY8Q6uvg5zCifzzzzK5PilllRzPzTSkuxxzKNrwJWFJ66QFDDnwnGuNkY09wdCocZDM9k7VgLbO7LmnA0xy4Z6PEFZegAjGDazIRSoj4amEkYYYYAwAwlJMDCH5oJ8mYAeoPyhxyUF3Cz7xxxJvdi19sMgnCeWZoDGwlJMskbgVvlRcqyUZOzhptCLXm1srwwwM4kJMDCH5oZRcmzA08(vMxfib6Xtgl70bATSkaH5oJMD8uKLLLLLLL1S0SwwxJ6OLBg5zA5M1hzA5EZeMJQPzhxyUvvMgnA55Z0Yn7Mjma(Sk1YoDGwlJMskbgVvlJMD8m3MrtjLaJNPLBMBZ01jb8cAxxMwUPillllllltCLvH66kZRcmPillllllllllltCLrZoUWCNro5z64eLHjZGUuqcqxMvMrZoUWCNro5z6G2gtMX5sMxvxMxfyY0O59RmGWRcKzNoqRLXUUa0oGpRsTSkuxxzItwfGWCNrZoEgJNpRN69nZTzcxpEYyDz3mHbWNISSSSSSSSSSSSSSSSMLM1Y6AuhTCZiptl3S(itl3BMWCunn74cZTQsrwwwwwwwwwwwwwwwwxJ6OLBg5zpmVkhF1Swz)DnQJwUz9rMwU3mH5OAA2XfMBvLPhKvIJ7P(lzA0WrapZRcY6PEFZSxzCiZkZ(6LXm8zmE(mHN52moKzLzF9srwwwwwwwwwwwgWWNISSSSSSSmGHpfzzzzzzzzsGtjnzDnQJwUPillldy4trwwwM4kZy9mA2XfM7mVkWKISSSSSSSmjWPKMmTCtrwwwgWWNcGHhH0vb0KGqQoEMdqin1XTpV616ai84mN6GqAQJBFETQGhGqx8a4rhHo4NJvqOG2AWki0fpajwbHcJWF94mPd4rIpewfiUR6iHALqyDcEVksOwPpekOTMxpcEac50F6RGqEXPRXQPa(5LrCx1ryFni0fpajuOsas0Recf8iKReWlODaFMwUi8sYEaqxYCgsOgcnupksX9nqEqIpeALcGXzUWAqiNr6Y8UEM0ekA50RVtu2)vg4Fi0b)COqLaKOxj0rIYrfewJ0xxhGJeA(qyfgnj3slLHNu2MvIkiHAirj0r4L1463y3hesAYQWP3j(dHvysszBwjQGeFirjKOhQV6Lxpo0N9jz0Rupo0RELkvoEPrD1rIYr9jJYvJmkPgh4qPY5q9iJV61dV0OU6iHAirjowD0ryZY4rfe6SgW49qfe(q1CbQGo6i0znGXrfe(q1CbQGo6iKxCDjOPAEnubHpunxGkOJocLmAaQGWhQMlqf0rhHD6TZznGXrfe(q1CbQGo6iuABaubHpunxGkOJocVy0UWAqfe(q1CbQGo6OJWZJ16v5kT3sW5GVHqj4wynk16aiKrjzvyseECgnjhSccDWpNscqyztvT(2mnzCBmHjJZRkCac5fNYIYq7c9cqiR1qin1XTpkGFocVOm0UWA6)LuKLLL1S0SwMwUzKNrwJW5ARdi7xxxJvdi19sMgnCeWZyhxYAzD26aYmMHp7H9lRZwhqMISSSmjWPKMmTCtbWWNIuKIuKIuKIuGqgTl0lqrkUVbY)T8aKqZxjeYloDnwnfWpNtGlhH9LgHUuCFdKOcc9ADaestDC7dcPPoU951QcEacDXdGhH0uh3(8QxRdGWJZCQdcPPoU9P(usMlSgeErzODH10)lPilllRzPzTmTCZipJSgHZ1whq2VUUgRgqQ7LmnA4iGNXoUK1Y6S1bKzmdF2d7xwNToGmfzzzznlnRL9W(PLBg5zK1iCU26aY)z)6xxxJvdi19skYYYYKaNsAYEy)0YnttMwUQi7H9tlxvK9LcGHhH0uh3(qWEai8IYq7cRP)xsrwwwwZsZAzA5MrEgzncNRToGSFDDnwnGu3lzA0WrapJDCjRL1zRdiZyg(Sh2VSoBDazkYYYYAwAwl7H9tl3mYZiRr4CT1bK)Z(1VUUgRgqQ7LuKLLL1S0SwMwU3mH5KrEMgn1hCjmGmTCZUzcdGpRsTSthO1oPillltpmfzzzzzzzzQwhbOUS)TwJovLrE2xjvKISSSSSSSmvRJZyTRS)TwJovLrEwVsQifzzzzzzzzQwN(uTw2)wRrNQYiptTsQifzzzzzzzzQwhNOmmzg0Lcsa6uvg5zF9urkYYYYYYYYuToOTXKzCUK5v1PQmYZ4qkYYYYiZtrwwwwZsZAzvOUUYipJSgH)g11v)66ASAaPovKP7Tg4CeM7m7v2Fnkdq3lzA0OVWWN1t9(Mjm0sa7aYexzDsWby8uKLLL1S0Swgn74cZDg5zK1iCsXoUWC)U5Y2VUUgRgqQ7LmnA4iGND6aTwgnLucmERwwfGWCNrZoEM4kJzQLISSSmXvgn74cZDMxfyY0O59RmVkqc0JNmw2Pd0AzvacZDgn74PilllllllRzPzTSUg1rl3mYZ0YnRpY0Y9MjmhvtZoUWCRQmnA0YZNPLB2ntya8zvQLD6aTwgnLucmERwgn74zUnJMskbgptl3m3MPRtc4f0UUmTCtrwwwwwwwM4kRc11vMxfysrwwwwwwwwwwwM4kJMDCH5oJCYZ0XjkdtMbDPGeGUmRmJMDCH5oJCYZ0bTnMmJZLmVQUmVkWKPrZ7xzaHxfiZoDGwlJDDbODaFwLAzvOUUYeNSkaH5oJMD8mgpFwp17BMBZeUE8KX6YUzcdGpfzzzzzzzzzzzzzzzznlnRL11OoA5MrEMwUz9rMwU3mH5OAA2XfMBvLISSSSSSSSSSSSSSSSUg1rl3mYZEyEvo(QzTY(7AuhTCZ6JmTCVzcZr10SJlm3QktpiReh3t9xY0OHJaEMxfK1t9(MzVY4qMvM91lJz4Zy88zcpZTzCiZkZ(6LISSSSSSSSSSSmGHpfzzzzzzzzadFkYYYYYYYYKaNsAY6AuhTCtrwwwgWWNISSSmXvMX6z0SJlm3zEvGjfzzzzzzzzsGtjnzA5MISSSmGHpfadpcPPoU9bHxugAxyn9)skYYYYKaNsAYCjfitJgwRowTtM1KcGHpfPifPifPifPifPaH0vb0KGqQoEMdqhHo4NJvqOd(5qHkbirVsi0fpajwbHvbI7QosOwjeALcGXzUWAqiNr6Y8UEM0ekA50RVtu2)vg4Fi0q9Oif33a5bj(qOG2AE9i4biKt)PVccf8iKuusjW4zA5Iqx8aKqHkbirVsiKxC6ASAkGFEze3vDe2xdcf0wdwbHxs2da6sMZqc1ryDcEVksOwPpekmc)1JZKoGhj(qhjudvq4PJjjHZf8EvK4RecpoJMKduOsas81dH8ItxJvtb8ZryFPrynsFDDaosO5dHvSsEGKu2MvIkiXhs8He9qIpKOCK4djudjkXXQJocLwN5afWphHeKM4pekOTgSccVSgx)g7(Gqstwfo9oXFiuqBnVsBBwjQGeFiXhs0dj(qIYrIpKqnK4dDeEaTlUwHXriP(Jq5VYGWkmjPSnRevqIpKOes0d1x9YRhh6Z(Km6vQhh6vVsLkhV0OU6ir5O(Kr5QrgLuJdCOu5COEKXx96HxAuxDKqnK4dDeYdomNsYCawbHNoMKesFDDaozsKOecBwgpQGqN1agVhQGWhQMlqf0rhHoRbmoQGWhQMlqf0rhH8IRlbnvZRHki8HQ5cubD0rOKrdqfe(q1CbQGo6iStVDoRbmoQGWhQMlqf0rhHsBdGki8HQ5cubD0r4fJ2fwdQGWhQMlqf0rhDe6IhGKu2MvIkiXhs8He9qIpKOCK4djudj(qhHNhR1RYvAVLGZbFdHuhGw(YI64aEa))cdwbHsWTWAuQ1bqOd(5i84mAsoyfe6GFoLeGWYMQA9TzAY42yctgNxv4ae6GFU(wJJq9LcvMPNOy8sMZYuuqyfRKhij911b4iH6i80XKKGvqOlEas9TghH6lfQmtprX4LmNLPOGqwRRkdj(qyfRKhiF3Caos89Hqh8ZjLTzLOcs8HeFirpK4djkhj(qc1qIp0ryfRKhiFJrtcV02HW3AcvQsMKptXABUOdH8ItzrzODHEbiK1AiKM642hfWphHxugAxyn9)skYYYYAwAwltl3mYZiRr4CT1bK9RRRXQbK6EjtJgoc4zSJlzTSoBDazgZWN9W(L1zRditrwwwMe4ustMwUPay4trksrksrksrkqyfM8DJ(sRXX3qiJ2f6fOif33a5)wEasO5RecpDmjjLX6mxyn)B5biulzvinc5fNUgRMc4NZjWLJW(sJqh8ZHcvcqIELq4PJjjHu2MvIkiXhs8He9qIpKOCK4djudj(qhHUuCFdKOccPoGxzT6y1oUKcGVHqQd4vkJWX3qin1XTpVwvWdqOlEa8i0R1bq4Xzo1bHugGEbghHmk3IqAQJBFE1R1bq4Xzo1bHa9cmocjL1WlCH1CqiDvanjiKQJN5a0rOd(5yfeQsR9bjkHWJlOjPw9PKmxynyfeALcGXzUWAqiNr6Y8UEM0ekA50RVtu2)vg4Fi84mAso6Bnoc1xkuzMEIIXlzoltrbHgQhfP4(gipiXhcpDmjjkGFoLeGW3noqEXObKPKIDCH5(nMKmLSVRHuSJlm3VXKAGDmjji0fpajwbHU4bi1VXUpiKWAai80XKK8wdy4)3YdqO26xFesDaA5llQJd4b8)Z(Hvq4L14qHkbir51dHvy0KClTugEszBwjQGeFirjKOhsucjkhjkHeQHeLqhHNoMKKYyDMlSgKOecf8iulxewXk5bsSccRyL8a5F83aesynaewXk5bsOqLaK4REi0fpajuOsas0Recf0wZRhbpaHC6p9vq4Xz0KC0VXUpiKWAai0b)C9BS7dcjSgacpDmjjCgqCx1rIYlHWthtscPVUoaNmbsucH8ItxJvtb8ZlJ4UQJW(Aq4Xz0KCiLTzLOcs8HeFirpK4djkhj(qc1qIp0r4PJjjHZe88adcj(RS)Rmi8sYEaqxYCgsOocRtW7vr9jdoWHVYl1t961NF9kNdQvcV0OghqyvG4UQJ6REP6vp1vVu9uxn1lV86vEp8sJAKbcRWOjHxA7iLTzLOcs8HeFirpK4djkhj(qc1qIsCS6OJqHrVa5bGvq4PJjjP(GdZPKaSccfgH)6XzshWJeFiKr5w8n0rc1rfewJ0xxhGJeA(qyfgnj3slLHNu2MvIkiHAirj0r4L1463y3hesAYQWP3j(dHvysszBwjQGeFirj0ryZY4rfe6SgW49qfe(q1CbQGo6i0znGXrfe(q1CbQGo6iKxCDjOPAEnubHpunxGkOJocLmAaQGWhQMlqf0rhHD6TZznGXrfe(q1CbQGo6iuABaubHpunxGkOJocVy0UWAqfe(q1CbQGo6OJWZJ16v5kT3sW5GVHqj4wynk16aiKrjzvyseECgnjhSccDWpNscqyztvT(2mnzCBmHjJZRkCac5fNYIYq7c9cqiR1qiJ2f6fOif33a5)wEasO5RecDP4(girfe616aiKM642hestDC7ZRvf8ae6IhapcPPoU9P(usMlSgeErzODH10)lPillltcCkPj7tfzFQi7lfadFksrksbcPPoU95vVwhaHhN5uhesxfqtccP64zoaH0uh3(GWlkdTlSM(FjfzzzzsGtjnzUKcKPrdRvhR2jZAsbWWNIuKIuKIuKIuKIuGocDWphRGqx8aKyfewfiUR6iH6LqOvkagN5cRbHCgPlZ76zstOOLtV(orz)xzG)Hqd1JIuCFdKhK4dHcARbRGqbT186rWdqiN(tFfek4r4BmAsULwkdpcVKSha0LmNHe9qyDcEVksO2xjekmc)1JZKoGhj(qhDeQxK4tTEFOJia \ No newline at end of file diff --git a/WA codes/JulijaButtons(WA CODE).txt b/WA codes/JulijaButtons(WA CODE).txt new file mode 100644 index 0000000..846b1b4 --- /dev/null +++ b/WA codes/JulijaButtons(WA CODE).txt @@ -0,0 +1 @@ +dKuUocGie(evvnkfXPuOMfsYTak2fIAyukhdryzaONHistJQk6AuvbBtrs8nKaghvvOZHeOwhsQ3He09auhuLYcvK6HirMisuxeG2iG8rfjPrQsvPtcuTsv0mPQs3uLkTtfYpvPIHcuAPaGNsXuvuxfruBfreFfjKZQiPERkvfZvLQQ7Iei7vP)cKblomKfRQ8yQYKvHllzZuv(ms1OrkNMkRgr61ksmBv52ky3G(TugUkz5q9Ckz6OUUuTDvvFhaA8QuLZtPA(iHA)KxsSZRbTZlVgR1aqY(jzsqbwZWAowZXoVMdNfPDOh7(R1GEV1Gl6UgC2(vTg64w)Anip29xZyhD6f(UTJAhbgsyBn19UqWJ6yNEnUJ1CsY(f8ZBttYZZ3zKzQVn1RXQE(aBZb51m9DMNVZD9lGanVgyFyg7OtVWw7isSMxdDSZRHrVcYaCNxZq)XUDE5LxdJEfK351m0FSBNxE51C485Z51FS9DEnd9h725LxEnyKxTZRzO)y3oV8YRb3E1oVMH(JD78YlVMR)lg9kiVZRzO)y3oV8YRXhYJDn4oVMH(JD78YlVMUvbY7HSS2VLxEnE78oIe78AqES7VMXo60l8DBh1ocmKW2AqESRbT2514GoENxZrdKx3IBd70RXRBXTH1G6yeOc(tUGOVxDOaSInDI6yeOc(tMry6fRaScX1dzVWekGbmKm0XGtzku56HSxyQu8186wuPWim9IPs5cHz7qLjaiTcxkqfNLctRuG9HVcR4Gkn8rHvA(uyALYfcZ2vgQHVcpMkfmYDavMaudRm0WLs9qFnmIlfsg6yWPSLYR1MIs)sHKHogCkRCdSGRqrUP4uyAoiDkuz0DuO8up62DbNskGpcO7mMcvax5Ob9NvyAo4uuCSca2WtXsXxdRmG8WnlfMwRtNgzYKjRyAkG7)FPC4SqFV6qXXk(AyLbKhUzPtuhJavWFYS9RsbyfcRR69iuadyiSUQ3JqPHvigqE4gHcLUzauXa4id4ZGtsauNOogbQG)KHOHsbyfI7lcEO08PW0kfWIBC5XnmHcyaJ5QEpLgw5UipCtbIgkfkDZaOIbWrgWNbNKaOo1PZNcQJrGk4p5cI(E1HcWaRqcfMwb1PIIIIZNcSXkOogbQG)Kz7xf1di2J2ecRR69igRGGhkWgRG6yeOc(tMTFvupGypAtigqE4gXyfMwb1PIIIIIIIYf2b5jeuShqabeq2SzZgGyCdR4pB)Q8xPbviT)CKI(6m3G2igRtffffffffuhJavWFYfe99QdfGvSPtfffLcEOtffffNpfuhJavWFYq0qPamWkeekmTcQtfffffffLlSdYtiOypGaciGSzZMnaX4gwXFiAO8xPbviT)CKI(6m3G2igRtfffLcEOtffffNpfuhJavWFYmctVyfGbwHGqbbpuGnwb1Xiqf8NmB)QOEaXE0MqmG8WnIXkmTcQtfffffffLlSdYtiOypGaciGSzZMnaX4gwXFgHPxS)knOcP9NJu0xN5g0gXyDQOOOuWdDwWJLxEnm2rNEH351W2VQ141T42WA86wCByn(6qp21GtgRtffffNpfuhJavWFYfe99QdfGbwHekmTcQtfffffffLxZd9uWkaRqrfAk36yKfzCr31Gw3h)jT)CKI(6m3G28NcImUO7AqDQOOOOOOO8AEONYNcWkucxiUacJgQjet3zUbjOsH4S)CKIMUZCdsqLcMkfct51X1np21Gt3zUbNRHRhIlIX6urrrrrrrX5tb1Xiqf8NmB)QOEaXE0MqyDvVhXyfMwb1PIIIIIIIIIIIYh1MIV9EGT5GS1KX6urrrrrrrrrrr5JAtX3yg7(6CnHOdDmbvkOogbQG)KzeMEXJ1PIIIIIIIIIIIYh1MIVXm2915AcH1v9EeuPG6yeOc(tgIgQX6urrrrrrrrrrr5JAtX3yg7(6CnHGTFveuPqyDvVhXyDQOOOOOOOuWdDQOOOOOOO48PG6yeOc(tMTFvupGypAtigqE4gXyfMwb1PIIIIIIIIIIIYh1MIV9EGT5GS1KX6urrrrrrrrrrr5JAtX3yg7(6CnHya5HBeuPG6yeOc(tgIgQX6urrrrrrrrrrr5JAtX3yg7(6CnHGTFveuPqmG8WnIX6urrrrrrrPGh6urrrrrrrbxChdvyCV0PIIIs9SkDQOOOOOOOGlUJHk(qpRsNkkkkf8qNf8yn(6VNLhcUtVgVUf3gaX2VQ1u)fKxt9xq2AnG1V3MAabaqaoAgqaa8rtvqu0Daa)s5141T42aiAUJAnSBOowEnETxdVZ7i)ChzJmfWpS8AWngXUgChzBn0khDA8ocG2STgCJrCTtVMxdDSZRHrVcYaCNxZq)XUDE5Lxt3QabR)cVFRHrVcY78Ag6p2TZlV8AoC(8586p2(oVMH(JD78YlVgmYR251m0FSBNxE51C9FXOxb5DEnd9h725LxEn42R251m0FSBNxE514d5XUgCNxZq)XUDE5LxEnW(Wm2rNEHT2raCnhols7qp29xRb9ERzWHXn8(TgCr31GZ2VQ148AW189k4XDBh1AM2VaoIYRXDSgs7phPOVoZnOT1W194oUwZCDpUJlR73CvV3np29JyxdEN)c)q2TUFa9EUlRcKPdxd64WXUge9aXyhD6f2AN3rKyNxdJD0Px4DEnS9RAnwmI7wRPBvGqpaez3IX9ANEnDy9xqEnOo3wt9xqEnuQbpCSRbTwt3Qa1HoENEnw9V6VGmyXLp39wJbSa6x)UgR(x9xq2095ZDV1aIs3mZGmZ3aG510HoEnxpK9cV8A6qg7OtVW78YlV8Aaq3btBhbqB2wZHZ66HSdUxdUJaijDQaq)0pUMdNLhU4ceUXi21G7iBlVJa4oVgKh7(RzSJo9cF32rTJadjSTgKh7AqRDEnoOJ351C0a51T42Wo9A86wCBynOogbQG)Kli67vhkaRytNOogbQG)KzeMEXkaRqC9q2lmHcyadjdDm4uMcvUEi7fMkfFnVUfvkmctVyQuUqy2ouzcasRWLcuXzPW0kfyF4RWkoOsdFuyLMpfMwPCHWSDLHA4RWJPsbJChqLja1WkdnCPup0xdJ4sHKHogCkBP8ATPO0VuizOJbNYk3al4kuKBkofMMdsNcvgDhfkp1JUDxWPKc4Ja6oJPqfWvoAq)zfMMdoffhRaGn8uSu81WkdipCZsHP160PrMmzYkMMc4()xkhol03RouCSIVgwza5HBw6e1Xiqf8NmB)QuawHW6QEpcfWagcRR69iuAyfIbKhUrOqPBgavmaoYa(m4Kea1jQJrGk4pziAOuawH4(IGhknFkmTsbS4gxECdtOagWyUQ3tPHvUlYd3uGOHsHs3maQyaCKb8zWjjaQtD68PG6yeOc(tUGOVxDOamWkKqHPvqDQOOO48PaBScQJrGk4pz2(vr9aI9OnHW6QEpIXki4HcSXkOogbQG)Kz7xf1di2J2eIbKhUrmwHPvqDQOOOOOOOCHDqEcbf7beqabKnB2Sbig3Wk(Z2Vk)vAqfs7phPOVoZnijigRtffffffffuhJavWFYfe99QdfGvSPtfffLcEOtffffNpfuhJavWFYq0qPamWkeekmTcQtfffffffLlSdYtiOypGaciGSzZMnaX4gwXFiAO8xPbviT)CKI(6m3GKGySovuuuk4HovuuuC(uqDmcub)jZim9Ivagyfccfe8qb2yfuhJavWFYS9RI6be7rBcXaYd3igRW0kOovuuuuuuuUWoipHGI9aciGaYMnB2aeJByf)zeMEX(R0GkK2FosrFDMBqsqmwNkkkkf8qNf8y5LxdJD0Px4DEnS9RAnEDlUnSgVUf3garZDuRHDd1XAQ)cYwRbS(92udiaacWrZacaGpAQcIIUda4xkVgVUf3gwJVo0JDn4KX6urrrX5tb1Xiqf8NCbrFV6qbyGviHctRG6urrrrrrr518qpfScWkuuHMYTogzrgx0DnO19XFs7phPOVoZnij8NcImUO7AqDQOOOOOOO8AEONYNcWkucxiUacJgQjet3zUbjOsH4S)CKIMUZCdsqLcMkfct51X1np21Gt3zUbNRHRhIlIX6urrrrrrrX5tb1Xiqf8NmB)QOEaXE0MqyDvVhXyfMwb1PIIIIIIIIIIIYh1MIV9EGT5GS1KX6urrrrrrrrrrr5JAtX3yg7(6CnHOdDmbvkOogbQG)KzeMEXJ1PIIIIIIIIIIIYh1MIVXm2915AcH1v9EeuPG6yeOc(tgIgQX6urrrrrrrrrrr5JAtX3yg7(6CnHGTFveuPqyDvVhXyDQOOOOOOOuWdDQOOOOOOO48PG6yeOc(tMTFvupGypAtigqE4gXyfMwb1PIIIIIIIIIIIYh1MIV9EGT5GS1KX6urrrrrrrrrrr5JAtX3yg7(6CnHya5HBeuPG6yeOc(tgIgQX6urrrrrrrrrrr5JAtX3yg7(6CnHGTFveuPqmG8WnIX6urrrrrrrPGh6urrrrrrrbxChdvyCV0PIIIs9SkDQOOOOOOOGlUJHk(qpRsNkkkkf8qNf8ynEDlUnaITFvRP(liVgF93ZYdb3PxEnholpCXfiCJrSRb3r2wdUXi21G7iBR5WzD9q2b3Rb3raKKovaOF6hxdTYrNgVJaOnBRb3yex70R51qh78Ay0RGma351m0FSBNxE510TkqW6VW73Ay0RG8oVMH(JD78YlVMdNpFoV(JTVZRzO)y3oV8YRbJ8QDEnd9h725LxEnx)xm6vqENxZq)XUDE5LxdU9QDEnd9h725LxEn(qESRb351m0FSBNxE5Lxda6oyA7iaAZ2AgCyCdVFRbx0Dn4S9RAnoVgCnFVcEC32rTMP9lGJO8Aqhho21GOhig7OtVWw78oIe78AySJo9cVZRHTFvRXIrC3AnDRce6bGi7wmUx70RPdR)cYRb152AQ)cYRHsn4HJDnO1AS6F1FbzWIlFU7Tgdyb0V(DnDRcuh64D61y1)Q)cYMUpFU7Tgqu6MzgKz(gamVMo0XR56HSx4LxthYyhD6fENxE5Lxdx3J74AnZ194oUSUFZv9E38y3pIDn4D(l8dz36(b075USkqMoCnUJ1qA)5if91zUbjXA8AVgEN3r(5oYgzkGFy51a7dZyhD6f2AhbW1C4SiTd9y3FTg07T8oIKUZRb5XU)Ag7OtVW3TDu7iWqcBRb5XUg0ANxJd64DEnhnqEDlUnStVgVUf3gwdQJrGk4p5cI(E1HcWk20jQJrGk4pzgHPxScWkexpK9ctOagWqYqhdoLPqLRhYEHPsXxZRBrLcJW0lMkLleMTdvMaG0kCPavCwkmTsb2h(kSIdQ0WhfwP5tHPvkximBxzOg(k8yQuWi3buzcqnSYqdxk1d91WiUuizOJbNYwkVwBkk9lfsg6yWPSYnWcUcf5MItHP5G0PqLr3rHYt9OB3fCkPa(iGUZykubCLJg0FwHP5GtrXXkaydpflfFnSYaYd3SuyAToDAKjtMSIPPaU))LYHZc99QdfhR4RHvgqE4MLorDmcub)jZ2VkfGviSUQ3JqbmGHW6QEpcLgwHya5HBeku6MbqfdGJmGpdojbqDI6yeOc(tgIgkfGviUVi4HsZNctRualUXLh3WekGbmMR69uAyL7I8WnfiAOuO0ndGkgahzaFgCscG6uNoFkOogbQG)Kli67vhkadScjuyAfuNkkkkoFkWgRG6yeOc(tMTFvupGypAtiSUQ3JySccEOaBScQJrGk4pz2(vr9aI9OnHya5HBeJvyAfuNkkkkkkkkxyhKNqqXEabeqazZMnBaIXnSI)S9RYFLguH0(Zrk6RZCdcqIX6urrrrrrrb1Xiqf8NCbrFV6qbyfB6urrrPGh6urrrX5tb1Xiqf8NmenukadScbHctRG6urrrrrrr5c7G8eck2diGaciB2SzdqmUHv8hIgk)vAqfs7phPOVoZniajgRtfffLcEOtffffNpfuhJavWFYmctVyfGbwHGqbbpuGnwb1Xiqf8NmB)QOEaXE0MqmG8WnIXkmTcQtfffffffLlSdYtiOypGaciGSzZMnaX4gwXFgHPxS)knOcP9NJu0xN5geGeJ1PIIIsbp0zbpwE51WyhD6fENxdB)QwJx3IBdRXx)9S8qWD6141T42ai2(vTM6VG8A86wCByn(6qp21GtgRtffffNpfuhJavWFYfe99QdfGbwHekmTcQtfffffffLxZd9uWkaRqrfAk36yKfzCr31Gw3h)jT)CKI(6m3Ga0FkiY4IURb1PIIIIIIIYR5HEkFkaRqjCH4cimAOMqmDN5gKGkfIZ(ZrkA6oZnibvkyQuimLxhx38yxdoDN5gCUgUEiUigRtffffffffNpfuhJavWFYS9RI6be7rBcH1v9EeJvyAfuNkkkkkkkkkkkkFuBk(27b2MdYwtgRtfffffffffffLpQnfFJzS7RZ1eIo0XeuPG6yeOc(tMry6fpwNkkkkkkkkkkkkFuBk(gZy3xNRjewx17rqLcQJrGk4pziAOgRtfffffffffffLpQnfFJzS7RZ1ec2(vrqLcH1v9EeJ1PIIIIIIIsbp0PIIIIIIIIZNcQJrGk4pz2(vr9aI9OnHya5HBeJvyAfuNkkkkkkkkkkkkFuBk(27b2MdYwtgRtfffffffffffLpQnfFJzS7RZ1eIbKhUrqLcQJrGk4pziAOgRtfffffffffffLpQnfFJzS7RZ1ec2(vrqLcXaYd3igRtfffffffLcEOtffffffffCXDmuHX9sNkkkk1ZQ0PIIIIIIIcU4ogQ4d9SkDQOOOuWdDwWJ1u)fKTwdy97TPgqaaeGJMbeaaF0ufefDhaWVuEnEDlUnaIM7Owd7gQJLxZHZYdxCbc3ye7AWDKT1qRC0PX7iaAZ2AWngX1o9AEn0XoVgg9kidWDEnd9h725LxEnDRceS(l8(Tgg9kiVZRzO)y3oV8YR5W5ZNZR)y778Ag6p2TZlV8AWiVANxZq)XUDE5LxZ1)fJEfK351m0FSBNxE51GBVANxZq)XUDE5LxJpKh7AWDEnd9h725LxE51C4SiTd9y3FTg07TgyFyg7OtVWw7iaUgV2RH35DKFUJSrMc4hwEndomUH3V1Gl6UgC2(vTgNxdUMVxbpUB7OwZ0(fWruEnUJ1qA)5if91zUbb4A46EChxRzUUh3XL19BUQ37Mh7(rSRbVZFHFi7w3pGEp3LvbY0HRbDC4yxdIEGySJo9cBTZ7isSZRHXo60l8oVg2(vTglgXDR10TkqOhaISBX4ETtVMoS(liVguNBRP(liVgk1Gho21GwRPBvG6qhVtVgR(x9xqgS4YN7ERXawa9RFxJv)R(liB6(85U3AarPBMzqM5BaW8A6qhVMRhYEHxEnDiJD0Px4DE5LxEnaO7GPTJaOnBRb3ye7AWDKT1C4SUEi7G71G7iassNka0p9JlVJ8ZDEnhols7qp29xRb9ERb5XU)Ag7OtVW3TDu7iWqcBRb5XUg0ANxJd64DEnhnqEDlUnStVgVUf3gwdQJrGk4p5cI(E1HcWk20jQJrGk4pzgHPxScWkexpK9ctOagWqYqhdoLPqLRhYEHPsXxZRBrLcJW0lMkLleMTdvMaG0kCPavCwkmTsb2h(kSIdQ0WhfwP5tHPvkximBxzOg(k8yQuWi3buzcqnSYqdxk1d91WiUuizOJbNYwkVwBkk9lfsg6yWPSYnWcUcf5MItHP5G0PqLr3rHYt9OB3fCkPa(iGUZykubCLJg0FwHP5GtrXXkaydpflfFnSYaYd3SuyAToDAKjtMSIPPaU))LYHZc99QdfhR4RHvgqE4MLorDmcub)jZ2VkfGviSUQ3JqbmGHW6QEpcLgwHya5HBeku6MbqfdGJmGpdojbqDI6yeOc(tgIgkfGviUVi4HsZNctRualUXLh3WekGbmMR69uAyL7I8WnfiAOuO0ndGkgahzaFgCscG6uNoFkOogbQG)Kli67vhkadScjuyAfuNkkkkoFkWgRG6yeOc(tMTFvupGypAtiSUQ3JySccEOaBScQJrGk4pz2(vr9aI9OnHya5HBeJvyAfuNkkkkkkkkxyhKNqqXEabeqazZMnBaIXnSI)S9RYFLguH0(Zrk6RZCdssjgRtffffffffuhJavWFYfe99QdfGvSPtfffLcEOtffffNpfuhJavWFYq0qPamWkeekmTcQtfffffffLlSdYtiOypGaciGSzZMnaX4gwXFiAO8xPbviT)CKI(6m3GKuIX6urrrPGh6urrrX5tb1Xiqf8NmJW0lwbyGviiuqWdfyJvqDmcub)jZ2VkQhqShTjedipCJySctRG6urrrrrrr5c7G8eck2diGaciB2SzdqmUHv8Nry6f7VsdQqA)5if91zUbjPeJ1PIIIsbp0zbpwE51WyhD6fENxdB)QwJx3IBdRXRBXTbq0Ch1Ay3qDSM6VGS1AaRFVn1acaGaC0mGaa4JMQGOO7aa(LYRXRBXTH14Rd9yxdozSovuuuC(uqDmcub)jxq03RouagyfsOW0kOovuuuuuuuEnp0tbRaScfvOPCRJrwKXfDxdADF8N0(Zrk6RZCdss9NcImUO7AqDQOOOOOOO8AEONYNcWkucxiUacJgQjet3zUbjOsH4S)CKIMUZCdsqLcMkfct51X1np21Gt3zUbNRHRhIlIX6urrrrrrrX5tb1Xiqf8NmB)QOEaXE0MqyDvVhXyfMwb1PIIIIIIIIIIIYh1MIV9EGT5GS1KX6urrrrrrrrrrr5JAtX3yg7(6CnHOdDmbvkOogbQG)KzeMEXJ1PIIIIIIIIIIIYh1MIVXm2915AcH1v9EeuPG6yeOc(tgIgQX6urrrrrrrrrrr5JAtX3yg7(6CnHGTFveuPqyDvVhXyDQOOOOOOOuWdDQOOOOOOO48PG6yeOc(tMTFvupGypAtigqE4gXyfMwb1PIIIIIIIIIIIYh1MIV9EGT5GS1KX6urrrrrrrrrrr5JAtX3yg7(6CnHya5HBeuPG6yeOc(tgIgQX6urrrrrrrrrrr5JAtX3yg7(6CnHGTFveuPqmG8WnIX6urrrrrrrPGh6urrrrrrrbxChdvyCV0PIIIs9SkDQOOOOOOOGlUJHk(qpRsNkkkkf8qNf8ynEDlUnaITFvRP(liVgF93ZYdb3PxEn4gJyxdUJSTMdN11dzhCVgChbqs6ubG(PFCn0khDA8ocG2STgCJrCTtVMxdDSZRHrVcYaCNxZq)XUDE5Lxt3QabR)cVFRHrVcY78Ag6p2TZlV8AoC(8586p2(oVMH(JD78YlVgmYR251m0FSBNxE51C9FXOxb5DEnd9h725LxEn42R251m0FSBNxE514d5XUgCNxZq)XUDE5LxEnaO7GPTJaOnBRzWHXn8(TgCr31GZ2VQ148AW189k4XDBh1AM2VaoIYRbDC4yxdIEGySJo9cBTZ7isSZRHXo60l8oVg2(vTglgXDR10TkqOhaISBX4ETtVMoS(liVguNBRP(liVgk1Gho21GwRXQ)v)fKblU85U3AmGfq)6310TkqDOJ3PxJv)R(liB6(85U3AarPBMzqM5BaW8A6qhVMRhYEHxEnDiJD0Px4DE5LxEnCDpUJR1mx3J74Y6(nx17DZJD)i21G35VWpKDR7hqVN7YQaz6W14owdP9NJu0xN5gKKUgyFyg7OtVWw7iaUgV2RH35DKFUJSrMc4hwEnholpCXfiCJrSRb3r2wEh5h251G8y3FnJD0Px472oQDeyiHT1G8yxdATZRXbD8oVMJgiVUf3g2PxJx3IBdRb1Xiqf8NCbrFV6qbyfB6e1Xiqf8NmJW0lwbyfIRhYEHjuadyizOJbNYuOY1dzVWuP4R51TOsHry6ftLYfcZ2HktaqAfUuGkolfMwPa7dFfwXbvA4JcR08PW0kLleMTRmudFfEmvkyK7aQmbOgwzOHlL6H(AyexkKm0XGtzlLxRnfL(LcjdDm4uw5gybxHICtXPW0Cq6uOYO7Oq5PE0T7coLuaFeq3zmfQaUYrd6pRW0CWPO4yfaSHNILIVgwza5HBwkmTwNonYKjtwX0ua3))s5WzH(E1HIJv81WkdipCZsNOogbQG)Kz7xLcWkewx17rOagWqyDvVhHsdRqmG8WncfkDZaOIbWrgWNbNKaOorDmcub)jdrdLcWke3xe8qP5tHPvkGf34YJBycfWagZv9EknSYDrE4Mcenuku6MbqfdGJmGpdojbqDQtNpfuhJavWFYfe99QdfGbwHekmTcQtffffNpfyJvqDmcub)jZ2VkQhqShTjewx17rmwbbpuGnwb1Xiqf8NmB)QOEaXE0MqmG8WnIXkmTcQtfffffffLlSdYtiOypGaciGSzZMnaX4gwXF2(v5VsdQqA)5if91zUb9tIX6urrrrrrrb1Xiqf8NCbrFV6qbyfB6urrrPGh6urrrX5tb1Xiqf8NmenukadScbHctRG6urrrrrrr5c7G8eck2diGaciB2SzdqmUHv8hIgk)vAqfs7phPOVoZnOFsmwNkkkkf8qNkkkkoFkOogbQG)KzeMEXkadScbHccEOaBScQJrGk4pz2(vr9aI9OnHya5HBeJvyAfuNkkkkkkkkxyhKNqqXEabeqazZMnBaIXnSI)mctVy)vAqfs7phPOVoZnOFsmwNkkkkf8qNf8y5LxdJD0Px4DEnS9RAnEDlUnSgVUf3gwJVo0JDn4KX6urrrX5tb1Xiqf8NCbrFV6qbyGviHctRG6urrrrrrr518qpfScWkuuHMYTogzrgx0DnO19XFs7phPOVoZnOF6pfezCr31G6urrrrrrr518qpLpfGvOeUqCbegnutiMUZCdsqLcXz)5ifnDN5gKGkfmvkeMYRJRBESRbNUZCdoxdxpexeJ1PIIIIIIIIZNcQJrGk4pz2(vr9aI9OnHW6QEpIXkmTcQtfffffffffffLpQnfF79aBZbzRjJ1PIIIIIIIIIIIYh1MIVXm2915Acrh6ycQuqDmcub)jZim9IhRtfffffffffffLpQnfFJzS7RZ1ecRR69iOsb1Xiqf8NmenuJ1PIIIIIIIIIIIYh1MIVXm2915AcbB)QiOsHW6QEpIX6urrrrrrrPGh6urrrrrrrX5tb1Xiqf8NmB)QOEaXE0MqmG8WnIXkmTcQtfffffffffffLpQnfF79aBZbzRjJ1PIIIIIIIIIIIYh1MIVXm2915AcXaYd3iOsb1Xiqf8NmenuJ1PIIIIIIIIIIIYh1MIVXm2915AcbB)QiOsHya5HBeJ1PIIIIIIIsbp0PIIIIIIIcU4ogQW4EPtfffL6zv6urrrrrrrbxChdv8HEwLovuuuk4Hol4XA81FplpeCNEnEDlUnaITFvRP(liVM6VGS1AaRFVn1acaGaC0mGaa4JMQGOO7aa(LYRXRBXTbq0Ch1Ay3qDS8AoCwE4Ilq4gJyxdUJSTgALJonEhbqB2wdUXiU2PxZRHo251WOxbzaUZRzO)y3oV8YRPBvGG1FH3V1WOxb5DEnd9h725LxEnhoF(CE9hBFNxZq)XUDE5Lxdg5v78Ag6p2TZlV8AU(Vy0RG8oVMH(JD78YlVgC7v78Ag6p2TZlV8A8H8yxdUZRzO)y3oV8YlVgV2RH35DKFUJSrMc4hwEnW(Wm2rNEHT2raCndomUH3V1Gl6UgC2(vTgNxdUMVxbpUB7OwZ0(fWruEnUJ1qA)5if91zUb9Z1W194oUwZCDpUJlR73CvV3np29JyxdEN)c)q2TUFa9EUlRcKPdxd64WXUge9aXyhD6f2AN3rKyNxdJD0Px4DEnS9RAnwmI7wRPBvGqpaez3IX9ANEnDy9xqEnOo3wt9xqEnuQbpCSRbTwt3Qa1HoENEnw9V6VGmyXLp39wJbSa6x)UgR(x9xq2095ZDV1aIs3mZGmZ3aG510HoEnxpK9cV8A6qg7OtVW78YlV8Aaq3btBhbqB2wZHZI0o0JD)1AqV3AWngXUgChzBnhoRRhYo4En4ocGK0Pca9t)4Y7OPYoVgV2RH35DKFUJSrMc4hwEnip29xZyhD6f(UTJAhbgsyBnip21Gw78ACqhVZR5ObYRBXTHD6141T42WAqDmcub)jxq03RouawXMorDmcub)jZim9IvawH46HSxycfWagsg6yWPmfQC9q2lmvk(AEDlQuyeMEXuPCHWSDOYeaKwHlfOIZsHPvkW(WxHvCqLg(OWknFkmTs5cHz7kd1WxHhtLcg5oGktaQHvgA4sPEOVggXLcjdDm4u2s51AtrPFPqYqhdoLvUbwWvOi3uCkmnhKofQm6okuEQhD7UGtjfWhb0DgtHkGRC0G(ZkmnhCkkowbaB4PyP4RHvgqE4MLctR1PtJmzYKvmnfW9)VuoCwOVxDO4yfFnSYaYd3S0jQJrGk4pz2(vPaScH1v9EekGbmewx17rO0WkedipCJqHs3maQyaCKb8zWjjaQtuhJavWFYq0qPaScX9fbpuA(uyALcyXnU84gMqbmGXCvVNsdRCxKhUPardLcLUzauXa4id4ZGtsauN605tb1Xiqf8NCbrFV6qbyGviHctRG6urrrX5tb2yfuhJavWFYS9RI6be7rBcH1v9EeJvqWdfyJvqDmcub)jZ2VkQhqShTjedipCJySctRG6urrrrrrr5c7G8eck2diGaciB2SzdqmUHv8NTFv(R0GkK2FosrFDMBq)aXyDQOOOOOOOG6yeOc(tUGOVxDOaSInDQOOOuWdDQOOO48PG6yeOc(tgIgkfGbwHGqHPvqDQOOOOOOOCHDqEcbf7beqabKnB2Sbig3Wk(drdL)knOcP9NJu0xN5g0pqmwNkkkkf8qNkkkkoFkOogbQG)KzeMEXkadScbHccEOaBScQJrGk4pz2(vr9aI9OnHya5HBeJvyAfuNkkkkkkkkxyhKNqqXEabeqazZMnBaIXnSI)mctVy)vAqfs7phPOVoZnOFGySovuuuk4Hol4XYlVgg7OtVW78Ay7x1A86wCBynEDlUnaIM7Owd7gQJ1u)fKTwdy97TPgqaaeGJMbeaaF0ufefDhaWVuEnEDlUnSgFDOh7AWjJ1PIIIIZNcQJrGk4p5cI(E1HcWaRqcfMwb1PIIIIIIIYR5HEkyfGvOOcnLBDmYImUO7AqR7J)K2FosrFDMBq)G)uqKXfDxdQtfffffffLxZd9u(uawHs4cXfqy0qnHy6oZnibvkeN9NJu00DMBqcQuWuPqykVoUU5XUgC6oZn4CnC9qCrmwNkkkkkkkkoFkOogbQG)Kz7xf1di2J2ecRR69igRW0kOovuuuuuuuuuuu(O2u8T3dSnhKTMmwNkkkkkkkkkkkkFuBk(gZy3xNRjeDOJjOsb1Xiqf8NmJW0lESovuuuuuuuuuuu(O2u8nMXUVoxtiSUQ3JGkfuhJavWFYq0qnwNkkkkkkkkkkkkFuBk(gZy3xNRjeS9RIGkfcRR69igRtfffffffLcEOtffffffffNpfuhJavWFYS9RI6be7rBcXaYd3igRW0kOovuuuuuuuuuuu(O2u8T3dSnhKTMmwNkkkkkkkkkkkkFuBk(gZy3xNRjedipCJGkfuhJavWFYq0qnwNkkkkkkkkkkkkFuBk(gZy3xNRjeS9RIGkfIbKhUrmwNkkkkkkkkf8qNkkkkkkkk4I7yOcJ7LovuuuQNvPtffffffffCXDmuXh6zv6urrrPGh6SGhRXRBXTbqS9RAn1Fb514R)EwEi4o9YRb3ye7AWDKT1C4SUEi7G71G7iassNka0p9JRHw5OtJ3ra0MT1GBmIRD618AOJDEnm6vqgG78Ag6p2TZlV8A6wfiy9x49Bnm6vqENxZq)XUDE5LxZHZNpNx)X2351m0FSBNxE51GrE1oVMH(JD78YlVMR)lg9kiVZRzO)y3oV8YRb3E1oVMH(JD78YlVgFip21G78Ag6p2TZlV8YR5WzrAh6XU)AnO3BnaO7GPTJaOnBRzWHXn8(TgCr31GZ2VQ148AW189k4XDBh1AM2VaoIYRbDC4yxdIEGySJo9cBTZ7isSZRHXo60l8oVg2(vTglgXDR10TkqOhaISBX4ETtVMoS(liVguNBRP(liVgk1Gho21GwRXQ)v)fKblU85U3AmGfq)6310TkqDOJ3PxJv)R(liB6(85U3AarPBMzqM5BaW8A6qhVMRhYEHxEnDiJD0Px4DE5LxEnCDpUJR1mx3J74Y6(nx17DZJD)i21G35VWpKDR7hqVN7YQaz6W14owdP9NJu0xN5g0pSgyFyg7OtVWw7iaUMdNLhU4ceUXi21G7iBlVJOa78AoCwK2HES7Vwd69wdYJD)1m2rNEHVB7O2rGHe2wdYJDnO1oVgh0X78AoAG86wCByNEnEDlUnSguhJavWFYfe99QdfGvSPtuhJavWFYmctVyfGviUEi7fMqbmGHKHogCktHkxpK9ctLIVMx3IkfgHPxmvkximBhQmbaPv4sbQ4SuyALcSp8vyfhuPHpkSsZNctRuUqy2UYqn8v4XuPGrUdOYeGAyLHgUuQh6RHrCPqYqhdoLTuET2uu6xkKm0XGtzLBGfCfkYnfNctZbPtHkJUJcLN6r3Ul4usb8raDNXuOc4khnO)SctZbNIIJvaWgEkwk(AyLbKhUzPW0AD60itMmzfttbC))lLdNf67vhkowXxdRmG8WnlDI6yeOc(tMTFvkaRqyDvVhHcyadH1v9EeknScXaYd3iuO0ndGkgahzaFgCscG6e1Xiqf8NmenukaRqCFrWdLMpfMwPawCJlpUHjuadymx17P0Wk3f5HBkq0qPqPBgavmaoYa(m4Kea1PoD(uqDmcub)jxq03RouagyfsOW0kOovuuuC(uGnwb1Xiqf8NmB)QOEaXE0MqyDvVhXyfe8qb2yfuhJavWFYS9RI6be7rBcXaYd3igRW0kOovuuuuuuuUWoipHGI9aciGaYMnB2aeJByf)z7xL)knOcP9NJu0xN5gCQqmwNkkkkkkkkOogbQG)Kli67vhkaRytNkkkkf8qNkkkkoFkOogbQG)KHOHsbyGviiuyAfuNkkkkkkkkxyhKNqqXEabeqazZMnBaIXnSI)q0q5VsdQqA)5if91zUbNkeJ1PIIIsbp0PIIIIZNcQJrGk4pzgHPxScWaRqqOGGhkWgRG6yeOc(tMTFvupGypAtigqE4gXyfMwb1PIIIIIIIYf2b5jeuShqabeq2SzZgGyCdR4pJW0l2FLguH0(Zrk6RZCdovigRtfffLcEOZcES8YRHXo60l8oVg2(vTgVUf3gwJV(7z5HG70RXRBXTbqS9RAn1Fb5141T42WA81HESRbNmwNkkkkoFkOogbQG)Kli67vhkadScjuyAfuNkkkkkkkkVMh6PGvawHIk0uU1XilY4IURbTUp(tA)5if91zUbNk(tbrgx0DnOovuuuuuuuEnp0t5tbyfkHlexaHrd1eIP7m3GeuPqC2Fosrt3zUbjOsbtLcHP8646Mh7AWP7m3GZ1W1dXfXyDQOOOOOOO48PG6yeOc(tMTFvupGypAtiSUQ3JySctRG6urrrrrrrrrrr5JAtX3EpW2Cq2AYyDQOOOOOOOOOOO8rTP4BmJDFDUMq0HoMGkfuhJavWFYmctV4X6urrrrrrrrrrr5JAtX3yg7(6CnHW6QEpcQuqDmcub)jdrd1yDQOOOOOOOOOOO8rTP4BmJDFDUMqW2VkcQuiSUQ3JySovuuuuuuuk4HovuuuuuuuC(uqDmcub)jZ2VkQhqShTjedipCJySctRG6urrrrrrrrrrr5JAtX3EpW2Cq2AYyDQOOOOOOOOOOO8rTP4BmJDFDUMqmG8WncQuqDmcub)jdrd1yDQOOOOOOOOOOO8rTP4BmJDFDUMqW2VkcQuigqE4gXyDQOOOOOOOuWdDQOOOOOOOGlUJHkmUx6urrrPEwLovuuuuuuuWf3XqfFONvPtfffLcEOZcESM6VGS1AaRFVn1acaGaC0mGaa4JMQGOO7aa(LYRXRBXTbq0Ch1Ay3qDS8AoCwE4Ilq4gJyxdUJSTgALJonEhbqB2wdUXiU2PxZRHo251WOxbzaUZRzO)y3oV8YRPBvGG1FH3V1WOxb5DEnd9h725LxEnhoF(CE9hBFNxZq)XUDE5Lxdg5v78Ag6p2TZlV8AU(Vy0RG8oVMH(JD78YlVgC7v78Ag6p2TZlV8A8H8yxdUZRzO)y3oV8YlVgyFyg7OtVWw7iaUMbhg3W73AWfDxdoB)QwJZRbxZ3RGh3TDuRzA)c4ikVg3XAiT)CKI(6m3GtL1W194oUwZCDpUJlR73CvV3np29JyxdEN)c)q2TUFa9EUlRcKPdxd64WXUge9aXyhD6f2AN3rKyNxdJD0Px4DEnS9RAnwmI7wRPBvGqpaez3IX9ANEnDy9xqEnOo3wt9xqEnuQbpCSRbTwt3Qa1HoENEnw9V6VGmyXLp39wJbSa6x)UgR(x9xq2095ZDV1aIs3mZGmZ3aG510HoEnxpK9cV8A6qg7OtVW78YlV8Aaq3btBhbqB2wJx71W78oYp3r2itb8dlVgCJrSRb3r2wZHZ66HSdUxdUJaijDQaq)0pU8oYpUZRb5XU)Ag7OtVW3TDu7iWqcBRb5XUg0ANxJd64DEnhnqEDlUnStVgVUf3gwdQJrGk4p5cI(E1HcWk20jQJrGk4pzgHPxScWkexpK9ctOagWqYqhdoLPqLRhYEHPsXxZRBrLcJW0lMkLleMTdvMaG0kCPavCwkmTsb2h(kSIdQ0WhfwP5tHPvkximBxzOg(k8yQuWi3buzcqnSYqdxk1d91WiUuizOJbNYwkVwBkk9lfsg6yWPSYnWcUcf5MItHP5G0PqLr3rHYt9OB3fCkPa(iGUZykubCLJg0FwHP5GtrXXkaydpflfFnSYaYd3SuyAToDAKjtMSIPPaU))LYHZc99QdfhR4RHvgqE4MLorDmcub)jZ2VkfGviSUQ3JqbmGHW6QEpcLgwHya5HBeku6MbqfdGJmGpdojbqDI6yeOc(tgIgkfGviUVi4HsZNctRualUXLh3WekGbmMR69uAyL7I8WnfiAOuO0ndGkgahzaFgCscG6uNoFkOogbQG)Kli67vhkadScjuyAfuNkkkkoFkWgRG6yeOc(tMTFvupGypAtiSUQ3JySccEOaBScQJrGk4pz2(vr9aI9OnHya5HBeJvyAfuNkkkkkkkkxyhKNqqXEabeqazZMnBaIXnSI)S9RYFLguH0(Zrk6RZCdsbigRtffffffffuhJavWFYfe99QdfGvSPtfffLcEOtffffNpfuhJavWFYq0qPamWkeekmTcQtfffffffLlSdYtiOypGaciGSzZMnaX4gwXFiAO8xPbviT)CKI(6m3GuaIX6urrrPGh6urrrX5tb1Xiqf8NmJW0lwbyGviiuqWdfyJvqDmcub)jZ2VkQhqShTjedipCJySctRG6urrrrrrr5c7G8eck2diGaciB2SzdqmUHv8Nry6f7VsdQqA)5if91zUbPaeJ1PIIIsbp0zbpwE51WyhD6fENxdB)QwJx3IBdRXRBXTbq0Ch1Ay3qDSM6VGS1AaRFVn1acaGaC0mGaa4JMQGOO7aa(LYRXRBXTH14Rd9yxdozSovuuuC(uqDmcub)jxq03RouagyfsOW0kOovuuuuuuuEnp0tbRaScfvOPCRJrwKXfDxdADF8N0(Zrk6RZCdsb8NcImUO7AqDQOOOOOOO8AEONYNcWkucxiUacJgQjet3zUbjOsH4S)CKIMUZCdsqLcMkfct51X1np21Gt3zUbNRHRhIlIX6urrrrrrrX5tb1Xiqf8NmB)QOEaXE0MqyDvVhXyfMwb1PIIIIIIIIIIIYh1MIV9EGT5GS1KX6urrrrrrrrrrr5JAtX3yg7(6CnHOdDmbvkOogbQG)KzeMEXJ1PIIIIIIIIIIIYh1MIVXm2915AcH1v9EeuPG6yeOc(tgIgQX6urrrrrrrrrrr5JAtX3yg7(6CnHGTFveuPqyDvVhXyDQOOOOOOOuWdDQOOOOOOO48PG6yeOc(tMTFvupGypAtigqE4gXyfMwb1PIIIIIIIIIIIYh1MIV9EGT5GS1KX6urrrrrrrrrrr5JAtX3yg7(6CnHya5HBeuPG6yeOc(tgIgQX6urrrrrrrrrrr5JAtX3yg7(6CnHGTFveuPqmG8WnIX6urrrrrrrPGh6urrrrrrrbxChdvyCV0PIIIs9SkDQOOOOOOOGlUJHk(qpRsNkkkkf8qNf8ynEDlUnaITFvRP(liVgF93ZYdb3PxEn4gJyxdUJSTMdN11dzhCVgChbqs6ubG(PFCn0khDA8ocG2STgCJrCTtVMxdDSZRHrVcYaCNxZq)XUDE5Lxt3QabR)cVFRHrVcY78Ag6p2TZlV8AoC(8586p2(oVMH(JD78YlVgmYR251m0FSBNxE51C9FXOxb5DEnd9h725LxEn42R251m0FSBNxE514d5XUgCNxZq)XUDE5LxEnETxdVZ7i)ChzJmfWpS8Aaq3btBhbqB2wZGdJB49Bn4IURbNTFvRX51GR57vWJ72oQ1mTFbCeLxd64WXUge9aXyhD6f2AN3rKyNxdJD0Px4DEnS9RAnwmI7wRPBvGqpaez3IX9ANEnDy9xqEnOo3wt9xqEnuQbpCSRbTwJv)R(lidwC5ZDV1yalG(1VRPBvG6qhVtVgR(x9xq2095ZDV1aIs3mZGmZ3aG510HoEnxpK9cV8A6qg7OtVW78YlV8A46EChxRzUUh3XL19BUQ37Mh7(rSRbVZFHFi7w3pGEp3LvbY0HRXDSgs7phPOVoZnifynhols7qp29xRb9ERb2hMXo60lS1ocGR5Wz5HlUaHBmIDn4oY2Y7ik4DEnETxdVZ7i)ChzJmfWpS8AqES7VMXo60l8DBh1ocmKW2AqESRbT2514GoENxZrdKx3IBd70RXRBXTH1G6yeOc(tUGOVxDOaSInDI6yeOc(tMry6fRaScX1dzVWekGbmKm0XGtzku56HSxyQu8186wuPWim9IPs5cHz7qLjaiTcxkqfNLctRuG9HVcR4Gkn8rHvA(uyALYfcZ2vgQHVcpMkfmYDavMaudRm0WLs9qFnmIlfsg6yWPSLYR1MIs)sHKHogCkRCdSGRqrUP4uyAoiDkuz0DuO8up62DbNskGpcO7mMcvax5Ob9NvyAo4uuCSca2WtXsXxdRmG8WnlfMwRtNgzYKjRyAkG7)FPC4SqFV6qXXk(AyLbKhUzPtuhJavWFYS9RsbyfcRR69iuadyiSUQ3JqPHvigqE4gHcLUzauXa4id4ZGtsauNOogbQG)KHOHsbyfI7lcEO08PW0kfWIBC5XnmHcyaJ5QEpLgw5UipCtbIgkfkDZaOIbWrgWNbNKaOo1PZNcQJrGk4p5cI(E1HcWaRqcfMwb1PIIIIZNcSXkOogbQG)Kz7xf1di2J2ecRR69igRGGhkWgRG6yeOc(tMTFvupGypAtigqE4gXyfMwb1PIIIIIIIYf2b5jeuShqabeq2SzZgGyCdR4pB)Q8xPbviT)CKI(6m3G(rIX6urrrrrrrb1Xiqf8NCbrFV6qbyfB6urrrPGh6urrrX5tb1Xiqf8NmenukadScbHctRG6urrrrrrr5c7G8eck2diGaciB2SzdqmUHv8hIgk)vAqfs7phPOVoZnOFKySovuuuk4HovuuuC(uqDmcub)jZim9Ivagyfccfe8qb2yfuhJavWFYS9RI6be7rBcXaYd3igRW0kOovuuuuuuuUWoipHGI9aciGaYMnB2aeJByf)zeMEX(R0GkK2FosrFDMBq)iXyDQOOOuWdDwWJLxEnm2rNEH351W2VQ141T42WA86wCByn(6qp21GtgRtffffNpfuhJavWFYfe99QdfGbwHekmTcQtfffffffLxZd9uWkaRqrfAk36yKfzCr31Gw3h)jT)CKI(6m3G(r)PGiJl6UguNkkkkkkkkVMh6P8PaScLWfIlGWOHAcX0DMBqcQuio7phPOP7m3GeuPGPsHWuEDCDZJDn40DMBW5A46H4IySovuuuuuuuC(uqDmcub)jZ2VkQhqShTjewx17rmwHPvqDQOOOOOOOOOOO8rTP4BVhyBoiBnzSovuuuuuuuuuuu(O2u8nMXUVoxti6qhtqLcQJrGk4pzgHPx8yDQOOOOOOOOOOO8rTP4BmJDFDUMqyDvVhbvkOogbQG)KHOHASovuuuuuuuuuuu(O2u8nMXUVoxtiy7xfbvkewx17rmwNkkkkkkkkf8qNkkkkkkkkoFkOogbQG)Kz7xf1di2J2eIbKhUrmwHPvqDQOOOOOOOOOOO8rTP4BVhyBoiBnzSovuuuuuuuuuuu(O2u8nMXUVoxtigqE4gbvkOogbQG)KHOHASovuuuuuuuuuuu(O2u8nMXUVoxtiy7xfbvkedipCJySovuuuuuuuk4HovuuuuuuuWf3Xqfg3lDQOOOupRsNkkkkkkkk4I7yOIp0ZQ0PIIIsbp0zbpwJV(7z5HG70RXRBXTbqS9RAn1Fb51u)fKTwdy97TPgqaaeGJMbeaaF0ufefDhaWVuEnEDlUnaIM7Owd7gQJLxZHZYdxCbc3ye7AWDKT1qRC0PX7iaAZ2AWngX1o9AEn0XoVgg9kidWDEnd9h725LxEnDRceS(l8(Tgg9kiVZRzO)y3oV8YR5W5ZNZR)y778Ag6p2TZlV8AWiVANxZq)XUDE5LxZ1)fJEfK351m0FSBNxE51GBVANxZq)XUDE5LxJpKh7AWDEnd9h725LxE51a7dZyhD6f2AhbW1C4SiTd9y3FTg07TMbhg3W73AWfDxdoB)QwJZRbxZ3RGh3TDuRzA)c4ikVg3XAiT)CKI(6m3G(X1W194oUwZCDpUJlR73CvV3np29JyxdEN)c)q2TUFa9EUlRcKPdxd64WXUge9aXyhD6f2AN3rKyNxdJD0Px4DEnS9RAnwmI7wRPBvGqpaez3IX9ANEnDy9xqEnOo3wt9xqEnuQbpCSRbTwt3Qa1HoENEnw9V6VGmyXLp39wJbSa6x)UgR(x9xq2095ZDV1aIs3mZGmZ3aG510HoEnxpK9cV8A6qg7OtVW78YlV8Aaq3btBhbqB2wdUXi21G7iBR5WzD9q2b3Rb3raKKovaOF6hxEhrcB78AqES7VMXo60l8DBh1ocmKW2AqESRbT2514GoENxZrdKx3IBd70RXRBXTH1G6yeOc(tUGOVxDOaSInDI6yeOc(tMry6fRaScX1dzVWekGbmKm0XGtzku56HSxyQu8186wuPWim9IPs5cHz7qLjaiTcxkqfNLctRuG9HVcR4Gkn8rHvA(uyALYfcZ2vgQHVcpMkfmYDavMaudRm0WLs9qFnmIlfsg6yWPSLYR1MIs)sHKHogCkRCdSGRqrUP4uyAoiDkuz0DuO8up62DbNskGpcO7mMcvax5Ob9NvyAo4uuCSca2WtXsXxdRmG8WnlfMwRtNgzYKjRyAkG7)FPC4SqFV6qXXk(AyLbKhUzPtuhJavWFYS9RsbyfcRR69iuadyiSUQ3JqPHvigqE4gHcLUzauXa4id4ZGtsauNOogbQG)KHOHsbyfI7lcEO08PW0kfWIBC5XnmHcyaJ5QEpLgw5UipCtbIgkfkDZaOIbWrgWNbNKaOo1PZNcQJrGk4p5cI(E1HcWaRqcfMwb1PIIIIZNcSXkOogbQG)Kz7xf1di2J2ecRR69igRGGhkWgRG6yeOc(tMTFvupGypAtigqE4gXyfMwb1PIIIIIIIYf2b5jeuShqabeq2SzZgGyCdR4pB)Q8xPbviT)CKI(6m3GuWeJ1PIIIIIIIcQJrGk4p5cI(E1HcWk20PIIIsbp0PIIIIZNcQJrGk4pziAOuagyfccfMwb1PIIIIIIIYf2b5jeuShqabeq2SzZgGyCdR4penu(R0GkK2FosrFDMBqkyIX6urrrPGh6urrrX5tb1Xiqf8NmJW0lwbyGviiuqWdfyJvqDmcub)jZ2VkQhqShTjedipCJySctRG6urrrrrrr5c7G8eck2diGaciB2SzdqmUHv8Nry6f7VsdQqA)5if91zUbPGjgRtfffLcEOZcES8YRHXo60l8oVg2(vTgVUf3gwJx3IBdGO5oQ1WUH6yn1FbzR1aw)EBQbeaab4OzabaWhnvbrr3ba8lLxJx3IBdRXxh6XUgCYyDQOOO48PG6yeOc(tUGOVxDOamWkKqHPvqDQOOOOOOO8AEONcwbyfkQqt5whJSiJl6Ug06(4pP9NJu0xN5gKc2FkiY4IURb1PIIIIIIIYR5HEkFkaRqjCH4cimAOMqmDN5gKGkfIZ(ZrkA6oZnibvkyQuimLxhx38yxdoDN5gCUgUEiUigRtffffffffNpfuhJavWFYS9RI6be7rBcH1v9EeJvyAfuNkkkkkkkkkkkkFuBk(27b2MdYwtgRtfffffffffffLpQnfFJzS7RZ1eIo0XeuPG6yeOc(tMry6fpwNkkkkkkkkkkkkFuBk(gZy3xNRjewx17rqLcQJrGk4pziAOgRtfffffffffffLpQnfFJzS7RZ1ec2(vrqLcH1v9EeJ1PIIIIIIIsbp0PIIIIIIIIZNcQJrGk4pz2(vr9aI9OnHya5HBeJvyAfuNkkkkkkkkkkkkFuBk(27b2MdYwtgRtfffffffffffLpQnfFJzS7RZ1eIbKhUrqLcQJrGk4pziAOgRtfffffffffffLpQnfFJzS7RZ1ec2(vrqLcXaYd3igRtfffffffLcEOtffffffffCXDmuHX9sNkkkk1ZQ0PIIIIIIIcU4ogQ4d9SkDQOOOuWdDwWJ141T42ai2(vTM6VG8A81FplpeCNE51GBmIDn4oY2AoCwxpKDW9AWDeajPtfa6N(X1qRC0PX7iaAZ2AWngX1o9AEn0XoVgg9kidWDEnd9h725LxEnDRceS(l8(Tgg9kiVZRzO)y3oV8YR5W5ZNZR)y778Ag6p2TZlV8AWiVANxZq)XUDE5LxZ1)fJEfK351m0FSBNxE51GBVANxZq)XUDE5LxJpKh7AWDEnd9h725LxE51aGUdM2ocG2STMbhg3W73AWfDxdoB)QwJZRbxZ3RGh3TDuRzA)c4ikVg0XHJDni6bIXo60lS1oVJiXoVgg7OtVW78Ay7x1ASye3Twt3QaHEaiYUfJ71o9A6W6VG8AqDUTM6VG8AOudE4yxdATgR(x9xqgS4YN7ERXawa9RFxt3Qa1HoENEnw9V6VGSP7ZN7ERbeLUzMbzMVbaZRPdD8AUEi7fE510Hm2rNEH35LxE51W194oUwZCDpUJlR73CvV3np29JyxdEN)c)q2TUFa9EUlRcKPdxJ7ynK2FosrFDMBqk4141En8oVJ8ZDKnYua)WYRb2hMXo60lS1ocGR5WzrAh6XU)AnO3BnholpCXfiCJrSRb3r2wEhrcsSZRb5XU)Ag7OtVW3TDu7iWqcBRb5XUg0ANxJd64DEnhnqEDlUnStVgVUf3gwdQJrGk4p5cI(E1HcWk20jQJrGk4pzgHPxScWkexpK9ctOagWqYqhdoLPqLRhYEHPsXxZRBrLcJW0lMkLleMTdvMaG0kCPavCwkmTsb2h(kSIdQ0WhfwP5tHPvkximBxzOg(k8yQuWi3buzcqnSYqdxk1d91WiUuizOJbNYwkVwBkk9lfsg6yWPSYnWcUcf5MItHP5G0PqLr3rHYt9OB3fCkPa(iGUZykubCLJg0FwHP5GtrXXkaydpflfFnSYaYd3SuyAToDAKjtMSIPPaU))LYHZc99QdfhR4RHvgqE4MLorDmcub)jZ2VkfGviSUQ3JqbmGHW6QEpcLgwHya5HBeku6MbqfdGJmGpdojbqDI6yeOc(tgIgkfGviUVi4HsZNctRualUXLh3WekGbmMR69uAyL7I8WnfiAOuO0ndGkgahzaFgCscG6uNoFkOogbQG)Kli67vhkadScjuyAfuNkkkkoFkWgRG6yeOc(tMTFvupGypAtiSUQ3JySccEOaBScQJrGk4pz2(vr9aI9OnHya5HBeJvyAfuNkkkkkkkkxyhKNqqXEabeqazZMnBaIXnSI)S9RYFLguH0(Zrk6RZCdscBeJ1PIIIIIIIcQJrGk4p5cI(E1HcWk20PIIIsbp0PIIIIZNcQJrGk4pziAOuagyfccfMwb1PIIIIIIIYf2b5jeuShqabeq2SzZgGyCdR4penu(R0GkK2FosrFDMBqsyJySovuuuk4HovuuuC(uqDmcub)jZim9Ivagyfccfe8qb2yfuhJavWFYS9RI6be7rBcXaYd3igRW0kOovuuuuuuuUWoipHGI9aciGaYMnB2aeJByf)zeMEX(R0GkK2FosrFDMBqsyJySovuuuk4Hol4XYlVgg7OtVW78Ay7x1A86wCByn(6VNLhcUtVgVUf3gaX2VQ1u)fKxJx3IBdRXxh6XUgCYyDQOOO48PG6yeOc(tUGOVxDOamWkKqHPvqDQOOOOOOO8AEONcwbyfkQqt5whJSiJl6Ug06(4pP9NJu0xN5gKe28NcImUO7AqDQOOOOOOO8AEONYNcWkucxiUacJgQjet3zUbjOsH4S)CKIMUZCdsqLcMkfct51X1np21Gt3zUbNRHRhIlIX6urrrrrrrX5tb1Xiqf8NmB)QOEaXE0MqyDvVhXyfMwb1PIIIIIIIIIIIYh1MIV9EGT5GS1KX6urrrrrrrrrrr5JAtX3yg7(6CnHOdDmbvkOogbQG)KzeMEXJ1PIIIIIIIIIIIYh1MIVXm2915AcH1v9EeuPG6yeOc(tgIgQX6urrrrrrrrrrr5JAtX3yg7(6CnHGTFveuPqyDvVhXyDQOOOOOOOuWdDQOOOOOOO48PG6yeOc(tMTFvupGypAtigqE4gXyfMwb1PIIIIIIIIIIIYh1MIV9EGT5GS1KX6urrrrrrrrrrr5JAtX3yg7(6CnHya5HBeuPG6yeOc(tgIgQX6urrrrrrrrrrr5JAtX3yg7(6CnHGTFveuPqmG8WnIX6urrrrrrrPGh6urrrrrrrbxChdvyCV0PIIIs9SkDQOOOOOOOGlUJHk(qpRsNkkkkf8qNf8yn1FbzR1aw)EBQbeaab4OzabaWhnvbrr3ba8lLxJx3IBdGO5oQ1WUH6y51C4S8WfxGWngXUgChzBn0khDA8ocG2STgCJrCTtVMxdDSZRHrVcYaCNxZq)XUDE5Lxt3QabR)cVFRHrVcY78Ag6p2TZlV8AoC(8586p2(oVMH(JD78YlVgmYR251m0FSBNxE51C9FXOxb5DEnd9h725LxEn42R251m0FSBNxE514d5XUgCNxZq)XUDE5LxEnhols7qp29xRb9ERb2hMXo60lS1ocGRXR9A4DEh5N7iBKPa(HLxZGdJB49Bn4IURbNTFvRX51GR57vWJ72oQ1mTFbCeLxJ7ynK2FosrFDMBqsyBnCDpUJR1mx3J74Y6(nx17DZJD)i21G35VWpKDR7hqVN7YQaz6W1GooCSRbrpqm2rNEHT25Dej251WyhD6fENxdB)QwJfJ4U1A6wfi0dar2TyCV2Pxthw)fKxdQZT1u)fKxdLAWdh7AqR10TkqDOJ3PxJv)R(lidwC5ZDV1yalG(1VRXQ)v)fKnDF(C3BnGO0nZmiZ8nayEnDOJxZ1dzVWlVMoKXo60l8oV8YlVga0DW02ra0MT1GBmIDn4oY2AoCwxpKDW9AWDeajPtfa6N(XL3rKaG78AoCwK2HES7Vwd69wdYJD)1m2rNEHVB7O2rGHe2wdYJDnO1oVgh0X78AoAG86wCByNEnEDlUnSguhJavWFYfe99QdfGvSPtuhJavWFYmctVyfGviUEi7fMqbmGHKHogCktHkxpK9ctLIVMx3IkfgHPxmvkximBhQmbaPv4sbQ4SuyALcSp8vyfhuPHpkSsZNctRuUqy2UYqn8v4XuPGrUdOYeGAyLHgUuQh6RHrCPqYqhdoLTuET2uu6xkKm0XGtzLBGfCfkYnfNctZbPtHkJUJcLN6r3Ul4usb8raDNXuOc4khnO)SctZbNIIJvaWgEkwk(AyLbKhUzPW0AD60itMmzfttbC))lLdNf67vhkowXxdRmG8WnlDI6yeOc(tMTFvkaRqyDvVhHcyadH1v9EeknScXaYd3iuO0ndGkgahzaFgCscG6e1Xiqf8NmenukaRqCFrWdLMpfMwPawCJlpUHjuadymx17P0Wk3f5HBkq0qPqPBgavmaoYa(m4Kea1PoD(uqDmcub)jxq03RouagyfsOW0kOovuuuC(uGnwb1Xiqf8NmB)QOEaXE0MqyDvVhXyfe8qb2yfuhJavWFYS9RI6be7rBcXaYd3igRW0kOovuuuuuuuUWoipHGI9aciGaYMnB2aeJByf)z7xL)knOcP9NJu0xN5gKeKGySovuuuuuuuqDmcub)jxq03RouawXMovuuuk4HovuuuC(uqDmcub)jdrdLcWaRqqOW0kOovuuuuuuuUWoipHGI9aciGaYMnB2aeJByf)HOHYFLguH0(Zrk6RZCdscsqmwNkkkkf8qNkkkkoFkOogbQG)KzeMEXkadScbHccEOaBScQJrGk4pz2(vr9aI9OnHya5HBeJvyAfuNkkkkkkkkxyhKNqqXEabeqazZMnBaIXnSI)mctVy)vAqfs7phPOVoZnijibXyDQOOOuWdDwWJLxEnm2rNEH351W2VQ141T42WA86wCBaen3rTg2nuhRP(liBTgW63BtnGaaiahndiaa(OPkik6oaGFP8A86wCByn(6qp21GtgRtffffNpfuhJavWFYfe99QdfGbwHekmTcQtfffffffLxZd9uWkaRqrfAk36yKfzCr31Gw3h)jT)CKI(6m3GKGe(tbrgx0DnOovuuuuuuuEnp0t5tbyfkHlexaHrd1eIP7m3GeuPqC2Fosrt3zUbjOsbtLcHP8646Mh7AWP7m3GZ1W1dXfXyDQOOOOOOO48PG6yeOc(tMTFvupGypAtiSUQ3JySctRG6urrrrrrrrrrr5JAtX3EpW2Cq2AYyDQOOOOOOOOOOO8rTP4BmJDFDUMq0HoMGkfuhJavWFYmctV4X6urrrrrrrrrrr5JAtX3yg7(6CnHW6QEpcQuqDmcub)jdrd1yDQOOOOOOOOOOO8rTP4BmJDFDUMqW2VkcQuiSUQ3JySovuuuuuuuk4HovuuuuuuuC(uqDmcub)jZ2VkQhqShTjedipCJySctRG6urrrrrrrrrrr5JAtX3EpW2Cq2AYyDQOOOOOOOOOOO8rTP4BmJDFDUMqmG8WncQuqDmcub)jdrd1yDQOOOOOOOOOOO8rTP4BmJDFDUMqW2VkcQuigqE4gXyDQOOOOOOOuWdDQOOOOOOOGlUJHkmUx6urrrPEwLovuuuuuuuWf3XqfFONvPtfffLcEOZcESgVUf3gaX2VQ1u)fKxJV(7z5HG70lVgCJrSRb3r2wZHZ66HSdUxdUJaijDQaq)0pUgALJonEhbqB2wdUXiU2PxZRHo251WOxbzaUZRzO)y3oV8YRPBvGG1FH3V1WOxb5DEnd9h725LxEnhoF(CE9hBFNxZq)XUDE5Lxdg5v78Ag6p2TZlV8AU(Vy0RG8oVMH(JD78YlVgC7v78Ag6p2TZlV8A8H8yxdUZRzO)y3oV8YlVga0DW02ra0MT1m4W4gE)wdUO7AWz7x1ACEn4A(Ef84UTJAnt7xahr51GooCSRbrpqm2rNEHT25Dej251WyhD6fENxdB)QwJfJ4U1A6wfi0dar2TyCV2Pxthw)fKxdQZT1u)fKxdLAWdh7AqR1y1)Q)cYGfx(C3BngWcOF97A6wfOo0X70RXQ)v)fKnDF(C3BnGO0nZmiZ8nayEnDOJxZ1dzVWlVMoKXo60l8oV8YlVgUUh3X1AMR7XDCzD)MR69U5XUFe7AW78x4hYU19dO3ZDzvGmD4AChRH0(Zrk6RZCdscsSgyFyg7OtVWw7iaUgV2RH35DKFUJSrMc4hwEnholpCXfiCJrSRb3r2wEhrcs6oVgKh7(RzSJo9cF32rTJadjSTgKh7AqRDEnoOJ351C0a51T42Wo9A86wCBynOogbQG)Kli67vhkaRytNOogbQG)KzeMEXkaRqC9q2lmHcyadjdDm4uMcvUEi7fMkfFnVUfvkmctVyQuUqy2ouzcasRWLcuXzPW0kfyF4RWkoOsdFuyLMpfMwPCHWSDLHA4RWJPsbJChqLja1WkdnCPup0xdJ4sHKHogCkBP8ATPO0VuizOJbNYk3al4kuKBkofMMdsNcvgDhfkp1JUDxWPKc4Ja6oJPqfWvoAq)zfMMdoffhRaGn8uSu81WkdipCZsHP160PrMmzYkMMc4()xkhol03RouCSIVgwza5HBw6e1Xiqf8NmB)QuawHW6QEpcfWagcRR69iuAyfIbKhUrOqPBgavmaoYa(m4Kea1jQJrGk4pziAOuawH4(IGhknFkmTsbS4gxECdtOagWyUQ3tPHvUlYd3uGOHsHs3maQyaCKb8zWjjaQtD68PG6yeOc(tUGOVxDOamWkKqHPvqDQOOO48PaBScQJrGk4pz2(vr9aI9OnHW6QEpIXki4HcSXkOogbQG)Kz7xf1di2J2eIbKhUrmwHPvqDQOOOOOOOCHDqEcbf7beqabKnB2Sbig3Wk(Z2Vk)vAqfs7phPOVoZnijaiXyDQOOOOOOOG6yeOc(tUGOVxDOaSInDQOOOuWdDQOOO48PG6yeOc(tgIgkfGbwHGqHPvqDQOOOOOOOCHDqEcbf7beqabKnB2Sbig3Wk(drdL)knOcP9NJu0xN5gKeaKySovuuuk4HovuuuC(uqDmcub)jZim9Ivagyfccfe8qb2yfuhJavWFYS9RI6be7rBcXaYd3igRW0kOovuuuuuuuUWoipHGI9aciGaYMnB2aeJByf)zeMEX(R0GkK2FosrFDMBqsaqIX6urrrPGh6SGhlV8AySJo9cVZRHTFvRXRBXTH141T42WA81HESRbNmwNkkkkoFkOogbQG)Kli67vhkadScjuyAfuNkkkkkkkkVMh6PGvawHIk0uU1XilY4IURbTUp(tA)5if91zUbjba9NcImUO7AqDQOOOOOOO8AEONYNcWkucxiUacJgQjet3zUbjOsH4S)CKIMUZCdsqLcMkfct51X1np21Gt3zUbNRHRhIlIX6urrrrrrrX5tb1Xiqf8NmB)QOEaXE0MqyDvVhXyfMwb1PIIIIIIIIIIIYh1MIV9EGT5GS1KX6urrrrrrrrrrr5JAtX3yg7(6CnHOdDmbvkOogbQG)KzeMEXJ1PIIIIIIIIIIIYh1MIVXm2915AcH1v9EeuPG6yeOc(tgIgQX6urrrrrrrrrrr5JAtX3yg7(6CnHGTFveuPqyDvVhXyDQOOOOOOOuWdDQOOOOOOO48PG6yeOc(tMTFvupGypAtigqE4gXyfMwb1PIIIIIIIIIIIYh1MIV9EGT5GS1KX6urrrrrrrrrrr5JAtX3yg7(6CnHya5HBeuPG6yeOc(tgIgQX6urrrrrrrrrrr5JAtX3yg7(6CnHGTFveuPqmG8WnIX6urrrrrrrPGh6urrrrrrrbxChdvyCV0PIIIs9SkDQOOOOOOOGlUJHk(qpRsNkkkkf8qNf8yn(6VNLhcUtVgVUf3gaX2VQ1u)fKxt9xq2AnG1V3MAabaqaoAgqaa8rtvqu0Daa)s5141T42aiAUJAnSBOowEnholpCXfiCJrSRb3r2wdTYrNgVJaOnBRb3yex70R51qh78Ay0RGma351m0FSBNxE510TkqW6VW73Ay0RG8oVMH(JD78YlVMdNpFoV(JTVZRzO)y3oV8YRbJ8QDEnd9h725LxEnx)xm6vqENxZq)XUDE5LxdU9QDEnd9h725LxEn(qESRb351m0FSBNxE5LxJx71W78oYp3r2itb8dlVgyFyg7OtVWw7iaUMbhg3W73AWfDxdoB)QwJZRbxZ3RGh3TDuRzA)c4ikVg3XAiT)CKI(6m3GKaGRHR7XDCTM56EChxw3V5QEVBES7hXUg8o)f(HSBD)a69CxwfithUg0XHJDni6bIXo60lS1oVJiXoVgg7OtVW78Ay7x1ASye3Twt3QaHEaiYUfJ71o9A6W6VG8AqDUTM6VG8AOudE4yxdATMUvbQdD8o9AS6F1FbzWIlFU7Tgdyb0V(Dnw9V6VGSP7ZN7ERbeLUzMbzMVbaZRPdD8AUEi7fE510Hm2rNEH35LxE51aGUdM2ocG2STMdNfPDOh7(R1GEV1GBmIDn4oY2AoCwxpKDW9AWDeajPtfa6N(XLxEn)7is4NaKelVl \ No newline at end of file diff --git a/WA codes/Necrotic Rot(WA CODE).txt b/WA codes/Necrotic Rot(WA CODE).txt new file mode 100644 index 0000000..0b8e299 --- /dev/null +++ b/WA codes/Necrotic Rot(WA CODE).txt @@ -0,0 +1 @@ +dSexyaGivPlbsLAuOOtHcRsvu9kqk0SOOULeXUav9lvrQgMsvhtQyzkrEgfrtJIW1aPITbsr9njkY9aW(KkvCqjQwOuP8qqQAIsLCraYgbO(OeLgPef6KuKALs4LsuuZuve3uvKStLYpPizOsuWsbvEkKPIsxvI0wbPiFvQu1yLkvQ3csLmxvr5UGuWEr(RuvdwCyOwmi5XkAYkPlRYMbXNbLrReoTKwTQiLxRe1Svv3Mc7Ms)wkdhqhxQujlhvphOPt11vy7kv(oiLA8svoVQW6bPK9tM6qSecKqlbVjGVtzIqgeALqRelH4hSAZY(a4riy82aiHUEaX21BL6gHWtVU7y5vyWo(t1wpABpHQReA7M8MxNkW1CLLuklVnasi7WGLxHb74G0whc9WuqGaEoT1z)EcbEFiLHw16eQBMIL1up1taeGzj0VHxjwc54)z9Liwczm(ELyjNCc54)zDILqgJVxjwYjNqRviqQZX3FqSeYy89kXso5eIJNhXsiJX3Rel5KtiE7FelHmgFVsSKtoHaUdOJ)N1jwczm(ELyjNCcbbp9AZsSeYy89kXso5eAaE9NFmiibf5KtOjXsBDiwc5xphWFmmqczQszFIP3aeHGcpxggVnSRqF734elTzcARd5ecsZ6a(JHbsitvk7tm9gGieuyo03(noXsBMG22toH(n8kXsih)pRVeXsiJX3Rel5Ktih)pRtSeYy89kXso5eATcbsDo((dILqgJVxjwYjNqC88iwczm(ELyjNCcbChqh)pRtSeYy89kXso5eI3(hXsiJX3Rel5Ktii4PxBwILqgJVxjwYjNCcXpy1ML9bWJq4bhdfMtiqhpxgKGIq(1Zh8JqqtJfD1ukrPm8XvRs3VO6hH8RNd4M1j0w5dogSp7D2U1(ReYRghhWnRtOTYhCmyF27SDR9xj0Afe4h)W0ZMLqMEJfqWb4YHEa9mtd9MAd9mmu1F1F0N3GnU(7oBZOnaH2THDfKqZbO3myVEoHuHki0W68kmyhNyj0Ca6ndcPcvqoHWtVU7y5vyWo(t1wpARKo7je2wnWETzjwczGRwILqZ2VXHJ26qiWj(F9OToec)bUaZ(a4riqNJRWw4eA2(nE50whcnB)gVS0whcH)axGb8WojKIIIcKHD61MLjqEdg)abnRa6yUBwz9(oMHkuuuuuu4Np4wfqhZDfOrfMa5ny8deu55kR33XmuHIIIYzxvHIcHgGxF8h4cmbfH8hapcnhGEZGqGt8)EqBDie(dCbM22tOh02EcnB)gN9bWJqZbO3mi0S9B8UrBDi0S9BCapStcbzyNETzzYqfkkkk)2e)vGmStV2SkCSf2XCh(BwXOAnRyG7zwXa3BjgQqrrrrrrr53M4VYo8xbaLokLOWKjtdCpLsu2H)muE6kmnW9ukrXOAzWq55kg4ElXqfkkkkkkkk8ZhCRYo8xfkkkkNDvfkkkk)2e)v4NHxnofauWdoU)z3b)1dOxnoLsuk75SvJJjdvOOOO8Bt8xzQaGchBHDm5NHxnoZk7nRGhCC)ZUdEdCVUgCZkDyOcfffLPcakDukrzQcfffLskzQC9aEt)wvWGkqx7nR0bAqfkkkkviktLUJYE4Hok(IZQcfffffffLPcakDukrH5skpxH5uPeL9WdDyWqfkkkkkkkk8ZhCRY0SshZk7nR0rfkkkk3h8uHIIIIIIIYubaLPYZvwsfkkkkkkkk8ZhCRshZktZk7vm3rfkkkkNDvfNDLq8MJ9J22tOb41F2(nobfH6rB7jNCc58kmyhNyjK)a4rO5a0BgeAoa9MrF)bWJqGo2hGeAoa9Mrxdo2RnlHuHki0Ca6nJnSXricnhGEZGqqg2PxBwMmuHIIIsfIsP2QxwEBaeU2)alheScZERmFb(Xpo(ldfaaq5TmcOYFcGG7vXxCwvOOOOOOOOuHOuQT6DDqnGaH5RJ5Wo)1SY72n5nVovGR5Vmu8fNvfkkkkkkkkkkkk8ZhCRIZhNkuuuuuuuuo7Qkuuuuo7QkuuuuQquk1w9YYBdGW1(hy5GGvy2BL5lWp(XXFzOaaakVSLVvMFv8fNvfkkkkkkkkvikLARExhudiqy(c8JFC8xZkVB3K386ubUM)YqXxCwvOOOOOOOOOOOOWpFWTkoFCQqrrrrrrr5SRQqrrr5SRQ4SReAU4MltObWvSFeAoa9Mr)f11JqE14wjNq(1ZjOiKxnoobfH8QXXb8hddKqMQu2Ny6narO6SzjOi0IRcBHtBMypHG21vFbTzYo7jKxnooQcToABjtqO1k4tByNED3ri8)tO6kH2UjV51PcCnxzjcbHJnoKZXoM2mjHWtV2SGelHQ2QtSeAT1Foa9MbbfHMdqVzqi8GJ7F2DWd645YGkaOSxf4bh3)S7G)6b0RgNcak7vbEWX9p7o4nW96AWvaqzp5Kti7WGLxHb74G0whcHhEJGIq(1ZrvO1rBlzcYPTLiwc5xphWFmmqczQszFIP3aeHWtV2SGelHQ2QtSeAT1Foa9Mb1ncnhGEZGq4bh3)S7Gh0XZLbvaqzVkWdoU)z3b)1dOxnofau2Rc8GJ7F2DWBG711GRaGYEYjNqqAwhWFmmqczQszFIP3aeH(n8kXsih)pRVeXsiJX3Rel5Ktih)pRtSeYy89kXso5eATcbsDo((dILqgJVxjwYjNqC88iwczm(ELyjNCcbChqh)pRtSeYy89kXso5eI3(hXsiJX3Rel5Ktii4PxBwILqgJVxjwYjNCcXpy1ML9bWJq4bhdfMtiqhpxgKGIq(1Zh8JqqtJfD1ukrPm8XvRs3VO6hH8RNd4M1j0w5dogSp7D2U1(ReceiMVm1nc5vJJd4M1j0w5dogSp7D2U1(ReATcc8JFy6zZsitVXci4aC5qpGEMPHEtTHEggQ6V6p6ZBWgx)DNTz0gGq72WUcsiqGy(YMcceWZ7UPTswIqZ2VXjwYj0Ca6nd2RNtiid70RnltgQqrrrHF(GBvWdoU)z3bpOJNldQIZUsOH15vyWooXsO5a0BgesfQGCcHNED3XYRWGD8NQTE0wjD2ti)65Ok06OTLmbHW2Qb2RnlXsidC1sSeA2(noC0whcboX)RhT1Hq4pWfy2hapcb6CCf2cNqZ2VXlN26qOz734LL26qi8h4cmGh2jHuuuuGmStV2SmbYBW4hiOzfqhZDZkR33XmuHIIIIIc)8b3Qa6yURanQWeiVbJFGGkpxz9(oMHkuuuuo7Qkuui0a86J)axGjOiK)a4rO5a0BgeAaE9NTFJtDJq4pWfyABpHEqB7j0S9BC2hapcnhGEZGq9OT9ecCI)3dARdHMTFJd4HDsiid70RnltgQqrrr53M4VcKHD61MvHJTWoM7WFZkgvRzfdCpZkg4ElXqfkkkkkkkk)2e)v2H)kaO0rPefMmzAG7PuIYo8NHYtxHPbUNsjkgvldgkpxXa3BjgQqrrrrrrrHF(GBv2H)Qqrrr5SRQqrrr53M4Vc)m8QXPaGcEWX9p7o4VEa9QXPuIszpNTACmzOcfffLFBI)ktfau4ylSJj)m8QXzwzVzf8GJ7F2DWBG711GBwPddvOOOOmvaqPJsjktvOOOOusjtLRhWB63Qcgub6AVzLoqdQqrrrPcrzQ0Du2dp0rXxCwvOOOOOOOOmvaqPJsjkmxs55kmNkLOShEOddgQqrrrrrrrHF(GBvMMv6ywzVzLoQqrrr5(GNkuuuuuuuuMkaOmvEUYsQqrrrrrrrHF(GBv6ywzAwzVI5oQqrrr5SRQ4SReI3CSF02EcnB)gVB0whYjNqoVcd2Xjwc5paEeAoa9MbHMdqVz01GJ9AZsiid70RnltgQqrrrPcrPuB1llVnacx7FGLdcwHzVvMVa)4hh)LHcaaO8wgbu5pbqW9Q4loRkuuuuuuuuQquk1w9UoOgqGW81XCyN)Aw5D7M8MxNkW18xgk(IZQcffffffffffff8GJ7F2DWd645YGkaOaE)B6mnHzLsTvVRdQbeimFDmh25VMvE3UjV51PcCn)LbdvOOOOOOOOOOOOGhCC)ZUd(RhqVACkaOaE)B6mltMvk1w9UoOgqGW81XCyN)Aw5D7M8MxNkW18xgmuHIIIIIIIIIIIcEWX9p7o4nW96AWvaqb8(30zcnBwPuB176GAabcZxhZHD(RzL3TBYBEDQaxZFzWqfkkkkkkkkNDvfkkkkNDvfkkkkvikLAREz5Tbq4A)dSCqWkm7TY8f4h)44VmuaaaLx2Y3kZVk(IZQcfffffffLkeLsTvVRdQbeimFb(Xpo(RzL3TBYBEDQaxZFzO4loRkuuuuuuuuuuuuWdoU)z3bpOJNldQaGc49VPZ0eMvk1w9UoOgqGW8f4h)44VMvE3UjV51PcCn)LbdvOOOOOOOOOOOOGhCC)ZUd(RhqVACkaOaE)B6mltMvk1w9UoOgqGW8f4h)44VMvE3UjV51PcCn)LbdvOOOOOOOOOOOOGhCC)ZUdEdCVUgCfauaV)nDMqZMvk1w9UoOgqGW8f4h)44VMvE3UjV51PcCn)LbdvOOOOOOOOC2vvOOOOC2vvOOOOuHOGhCC)ZUdEqhpxguP7OystQ4loRkuuuuuuuuWdoU)z3bpOJNldQaGIjnPkuuuuo7Qkuuuu4Np4wftAsLsuWdoU)z3bpOJNldAwXKM0SshvC2vcnhGEZydBCecYWo9AZYKHkuuuu4Np4wLsuyIhCC)ZUdEqhpxgu55kMKHko7kHMdqVzqiid70RnltgQqrrrPcrPuB1llVnacx7FGLdcwHzVvMVa)4hh)LHcaaO8wgbu5pbqW9Q4loRkuuuuuuuuQquk1w9UoOgqGW81XCyN)Aw5D7M8MxNkW18xgk(IZQcffffffffffff(5dUvX5JtfkkkkkkkkNDvfkkkkNDvfkkkkvikLAREz5Tbq4A)dSCqWkm7TY8f4h)44VmuaaaLx2Y3kZVk(IZQcfffffffLkeLsTvVRdQbeimFb(Xpo(RzL3TBYBEDQaxZFzO4loRkuuuuuuuuuuuu4Np4wfNpovOOOOOOOOC2vvOOOOC2vvC2vcnxCZLj0a4k2pcnhGEZOV)a4riqh7dqcnhGEZO)I66riVACRKtiqGy(YSxpFWpczARFCi459SYxxnLf8zD)HxU8bhd(SN6wR4NXE98b)aFgQ7AG5x)UFr1pcT4QWw40Mj3tiVACCa)XWajKPkL9jMEdqeYomy5vyWooiT1Hq4H3iOieu45YW4THDf6B)gNyPntqB7jNq1zZsqrO6kH2UjV51PcCnNqRvWN2Wo96UJq4)NqRvqGF8d2RNdxf2cNqq3tcbceZxU7RR(cAZeeYRghhvHwhTTKjie0UU6lOntUFpHQ2Q3h0XC)wPToKtoH2rBDmXsDiNia \ No newline at end of file diff --git a/WA codes/Neki Bog(WA CODE).txt b/WA codes/Neki Bog(WA CODE).txt new file mode 100644 index 0000000..ad380dc --- /dev/null +++ b/WA codes/Neki Bog(WA CODE).txt @@ -0,0 +1 @@ +dmKMpaGivLljvQ0OGkDkujZIcUfuWUKQQAyOIJbPwgu1ZKQmnQKUMuv2MQQeFJc15OsX9Gk6GsflKkHEivIMOQqxuvvTrvbFuQQYivvL6KsLSsQYmPsPBkvk7KO(juHHsLGLQQkPNQyQs6QOs9vvvXCHcTxXFvfnyshMslgk9yImzu1LvAZuvFMIgnKCAuwTuvPxdfnBvCBQy3s53Q0WvLoUuPILt45qmDKRlX2Ps13LkvnEkKZRQY6LQk2p4Go1mizW3)U2)OnoJtg(m8PMrSMSBR(7DZykUL3mRrV2g)YhxmJvIyUVvbZ0CfD7YVrMtggFMoD60Pthq7pXT8MPvCQcMP5kqIm6mi7X3fUSgLXfXrTIJU52)FOM5CT8PMHSNTr4tnJt5qSudfkdzpBJsnJt5qSudfktbzFkDSiibBgHvAtnJt5qSudfkJ4E2uZ4uoel1qHY86(lzpBJsnJt5qSudfkJVvIy3wQzCkhILAOqz4z((mPYH(LAgNYHyPgkuOqzKsnYOtnJ)TrpCSMizWb3v32L8)zWAfU8EUIuJm68qFgJhpE8CmMtpoOr7g8UgFm0xVi3lYOdL5CT8PMHSNTr4tnJt5qSudfkdzpBJsnJt5qSudfkdpZ3Njvo0VuZ4uoel1qHYiSsBQzCkhILAOqzED)LSNTrPMXPCiwQHcLrCpBQzCkhILAOqz8Tse72snJt5qSudfkugeN7Lq5cIRPyrqIlMrSMSBR(7DZylclwRidczLWejyZqRrurSz()4o3DbQ8v4KHNH8ES)6s62Im6Eg3ZnCmoJubHUo11ikJFPjrSBdxUapqbfuqz(GYDJrpUyl((4(rwH5sFga9tMzIIWES87hxGsO2g4bkOGckOGckONRK9a6tdpn80WtdpnWxewIDBgwJEzIfXGKfHwbO4euUBm6XfBX3h3pYkmx6ZaOFYmtue2JLF)4c8afuqbfuqbfuMpOsweAfGItCc637X(BfFGsO2g4bkOGckOGckOGckOGkwQiAG6yju9V)5Ef4Ug9YelcOya0(BPkZzXLlUapqbfuqbfuqbDB8GhOGckOBJh82gFgReXCFRcMP5k62LFJmgqZjdjyMMRi1m0V3nJubHUozKki015j97DZGqwQGKrQGqxNhlclXUTm(LMeXUnC5c8afuqbL5dk3ng94IT47J7hzfMl9za0pzMjkc7XYVFCbkHABGhOGckOGckOGEUs2dOpn80Wtdpn80aFryj2Tzyn6LjwedsweAfGItq5UXOhxSfFFC)iRWCPpdG(jZmrrypw(9JlWduqbfuqbfuqz(GkzrOvakoXjOFVh7Vv8bkHABGhOGckOGckOGckOGcQyPIOb6A0ltSiGIbq7VLQmNfxUmakFryj2Tzau0GhOGckOGckOGUnEWduqbf0TXdEBJpJeQvcZmLxElTzKki01jJFPjrSBdxUapqbfuqz(GYDJrpUyl((4(rwH5sFga9tMzIIWES87hxGsO2g4bkOGckOGckOILkIgOKOSGhOGckOGckOGcEGckOGUnEWBB8Gh4bEGh4bEHYqRruWMb1Ymrrr2voziMZkE4ynrYGdURUTl5)Z0kovbZ0CfirgDgSwjmnf3sJ3L3ZvKAKDnYCcLHXNPtNoD60jdpd59y)vxJO)kZefLP7kLHyoRyy9Zg5E4ZWZq63stIyUVzSNtMUNXtOICpoCYWAm6jczf0Yhz0HIm(uZG1kHPP4wA8U8EUIuJSRrMtOm(3g9WXAIKbhCxDBxY)NbRv4Y75ksnYOZd9zmE84XZXyo94GgTBW7A8XqF9ICViJoYUgzoHYCUw(uZq2Z2i8PMXPCiwQHcLHSNTrPMXPCiwQHcLHN57ZKkh6xQzCkhILAOqzewPn1moLdXsnuOmVU)s2Z2OuZ4uoel1qHYiUNn1moLdXsnuOm(wjIDBPMXPCiwQHcfkdIZ9sOCbX1uSiibBgXAYUT6V3nJTiSyTImiKvctKGndTgrfXM5)J7C3fOYxHtgKxRaZ4Iz4ziVh7VUKUTiJUNX9CdhJZyLiM7BvWmnxr3U8BKXaAozibZ0CfPMH(9UzKki01jJubHUopwewIDBz8lnjIDB4Yf4bkOGckZhuUBm6XfBX3h3pYkmx6ZaOFYmtue2JLF)4cuc12apqbfuqbfuqb9CLShqFA4PHNgEA4Pb(IWsSBZWA0ltSigKSi0kafNGYDJrpUyl((4(rwH5sFga9tMzIIWES87hxGhOGckOGckOGY8bvYIqRauCItq)Ep2FR4duc12apqbfuqbfuqbfuqbfuXsfrd0)Ibq5lclXUndGIg8afuqbfuqbf0TXdEGckOGUnEWBB8zKki01jJFPjrSBdxUapqbfuqz(GYDJrpUyl((4(rwH5sFga9tMzIIWES87hxGsO2g4bkOGckOGckOILkIgOKOSGhOGckOGckOGcEGckOGUnEWBB8Gh4bEGh4bEzKqTsyMP8YBPnJubHUopPFVBgeYsfKqzO1ikyZGAzMOOi7kNmeZzfpCSMizWb3v32L8)zKUNRi1qzys3wWMP7z8eQi3JdNmiVwbM)HXtOICFzqETcm)7LzIIISRCYWZq63stIyUVzSNtgI5SIH1pBK7HpdJptNoD60PdO4ZqmNveSzAfNQGzAUcKiJodYRvGPlVNRi1iJop0NX4XJhphJ50JdA0UbVRXhd91lY4JmNqzqETcmRRrurSz6QrRW3kTySdppoAiy8pRfZofHfbJDB5zwmwxJOIyrW40DkwX(8pOy0gkY9sndYRvG5Fy8eQi3xgM0TfSz8Vn6HJ1ejdo4U62UK)pdwRWL3ZvKAKrNh6Zy84XJNJXC6XbnA3G314JH(6f5ErgDKDnYCcL5CT8PMHSNTr4tnJt5qSudfkdzpBJsnJt5qSudfkdpZ3Njvo0VuZ4uoel1qHYiSsBQzCkhILAOqzED)LSNTrPMXPCiwQHcLrCpBQzCkhILAOqz8Tse72snJt5qSudfkugeN7Lq5cIRPyrqc2mI1KDB1FVBgBryXAfzqiReMibBgAnIkInZ)h35UlqLVcNm8mK3J9xxs3wKr3Z4EUHJXzSseZ9TkyMMROBx(nYyanNmKGzAUIuZq)E3msfe66KrQGqxNhlclXUTm(LMeXUnC5c8afuqbvSur0afTb0gqdEBJh8apWd8apWlJubHUoz8lnjIDB4Yf4bkOGckZhuUBm6XfBX3h3pYkmx6ZaOFYmtue2JLF)4cuc12apqbfuqbfuqbvSur0aLeLf8afuqbfuqbfuWduqbf0TXdEBJh8apWd8apWlJubHUopPFVBgeYsfKmsOwjmZuE5T0gkdTgrbBgKxRaZ6AeveBMUA0k8Tslg7WZJJgcg)ZAXStryrWy3wEMfJ11iQiwemoDNIvSp)dkgTzqETcmD59CfPgz05H(mgpE845ymNECqJ2n4Dn(yOVErgFK5ekdQLzIIICFCYqmNv8WXAIKbhCxDBxY)NPvCQcMP5kqIm6meZzfbBggFMoD60Pthq7LHyoRyy9Zg5E4ZG8Afy(3lZeffzx5KHNH0VLMeXCFZypNms3ZvKAOmDpJNqf5EO5KbRvcttXT04D59CfPgzxJm6qHcLX9iJ2v8OdLa \ No newline at end of file diff --git a/WA codes/Prot Pala Crap (WA CODE).txt b/WA codes/Prot Pala Crap (WA CODE).txt new file mode 100644 index 0000000..2efecc4 --- /dev/null +++ b/WA codes/Prot Pala Crap (WA CODE).txt @@ -0,0 +1 @@ +duvLVbGia6susHpjQuAuucNIsYQaa1ROKsMfu0TaQAxIs)caKHHQCmGSmrvpdQyAaQRbu2gkQVbL04aeNdkH1bLO3jQuvnpai19uKSpkPuhefAHkIhkkAIIk5Iqv2OOWhbagjkYjfcReLEPOsvMPOIBcuzNq8tOudfQQLsjvpvQPcPRkezRusrFfqASIkvoROsvP3cfAUksDxOG9Q6Vk0Gr6WiwmQQhtPMmQCzsBwr9zHA0kPttXQbG41qLMTsDBfSBc)wWWvIJlQuSCqpNOPt11fz7cPVdGgpk48uIwVquVxuPQy(aqDFaiz)s(Go6BYrV)w(oFwGZccRVhEZ9M7OVHASjiqTCrFhddPL3eB3evrHM4yfcUaNEeEVvgwicoL78FBj2ZZs1pc4bbmV3eooJBccYE0HM4yfkp693sDpJFWi83tWgffBWLdEzG(2W9gFyWl6cztkk)0ElxnErJOOspS13eH9AaMbKmOOwUOVB8YbVmrZW6mco8ElsdOqtCScLhb07DGWD03ozRcp)rFpK2U5O3V)2jBv4h99qA7MJE)(B7nrkp6BPreV134ZyomMRiqU)oj1r7nrkF7WK(gsS1J(EiTDZrVF)nmS1J(EiTDZrVF)9mX2nbXrFpK2U5O3V)Ej6It2QWp67H02nh9(93CM5zJDA7wE03dPTBo6973V)2(Ohb0rF7kdEgBsS8n2rcnNiqW7ndypplv)iGhi5FBj2ZZs1pc4Xj)B(eBCJHHKGlZWoap6raDeqhj)raDeCocOJa8ZamSYmWmdIhZGadyq8ygiG9zWdgZ3FpheEgBsS8n2rcnNiqW7Tu3Z4hmc)nk24)MpbMzyhGh9i5pcVSynpiWygimNhRadgpSaihbNNbqWbhM5HvGzMhW4aeSIvGX6NbpyGD)9cmedvPeFOABKMG4ia)EhiCh9DsQJlQZN4(wp)3jPok0Ok88FBVjs5rFlnI4T(gFgZHXCfbY93jPoAVjs5N8gsS1J(EiTDZrVF)DsQJYf1(tE7KTk88h99qA7MJE)(BNSvHF03dPTBo697VtsDmQUAS365)wUO2h9T0iI36rYF)nNzE2yN2ULh99qA7MJE)(7LOlozRc)OVhsB3C073FptSDtqC03dPTBo697VtsD0omWN4FYByyRh99qA7MJE)(7KuhfKb98V)woec(k(WqmuLYp5nuJnbbQLl6Bscs4tGVLoXgx55)2im(ODyyzRUYDeqVDLbpb13wZ0AUcff8ff)nXikkqxnU(2vg8mcc)DUcqJeF8Fh5qy4i8YIZB5cbI7N82ndkmJGWFZixuv4jO(wUqG4MzyhGh9iGocVJK)i8ocohH393Cgjassy7MO6BIWY32jPhgqvg83ZjHTBcclgXCeZfRk2Iw0IwuZCrxkkrWv0LIwa4PkkVIseCfDPOfaEkqf1xvrrHQNGIIUuuvWvSfTOfTOq1tqrrZT52IvfCfBXwSfBXwSfBX(My7MOkk0ehRqWf40JaEq8E7kdEBISEeqy9TDyhGh9(BhAIJv4rFNK64aXTxvoRNe65)oj1r7vcmwLFYB7vcmwLVb92oj9WW75KW2nbHfwvSfTOfTOq1tqrrDyslwvWvSfBXwSfBXwSfBXwSfBXwSfBXwSf7B7v1g33PfoIRVDlx032jPhgERrvHlFNj2GBcJOJ5GnayepRjEiOJrcjJiYbfpRJxUElx09gHmOhbmCyMhV32ReySkhdlkK4b4BR9uVtsDeQdeJWiIp)3jHgvf(BsYdVtsDuUgai2Ip5TDs6HHCLGe3eeVNtcB3eewyvXw0Iw0IUd2KDrTxjWyvI5iMsNaDm5sWIovrbaQ3l6EN5kbgRsladhM5XZQITOfTOf1mxu7vcmwLffanOI6RQOOq1tqrr5sqmLob6wlUeSOQGRylArlArnZf1ELaJvzrT2tvuqf1xvrrHQNGIIYdtqy6WKwuvWvSfTOfTOq1tqrrbHjimDyslwvWvSfBXwSfBXwSfBXwSfBXwSfBXwSfBXwSVTtspmm6wUOVLoXtY3qLS7fDVrid67E1OBUIgMlQVQf16M4vxdj57KuhLl6EJqg0p5DsQJjHX)K3Y1aaXw8wUgaiJBasSu(2oj9WW4QHtFBNKEy4(B5cbIl4mqyaE(V5hGCke75zP6hb43jHdnXXk8OVLRbaIT4TCnaqg3aKyP8TDs6HH3ZjHTBcclSQylArlArHQNGIIot2sTyvbxXwSfBXwSVLl6EJqg0JagomZJ393gHXhLob6k3ra9EvnXR(ZaiadmW5bJzGacRGbkpW4a6ZGhyS4TBguygBsS8n4Wgb7mzY6ydo8aWOmfrM5Eyhj0CIabV3I0ak0ehRq5ra9wUqG4ozRcoWf403tYbpKC9MpXgxoyyjZWoap6raDeEhj)r4DeCocVJa8raD)TXoio)3Cg5YMyjQYGNJo7VlQ1W(nanC(6racV38dqofMzyhGh9iGocVJK)i8ocohH3ra(iGU)MFaYPWies1pcO38dqof(jV5hGCkepUy99KTjYrMa5kAMReVOts85V138dqof2MiRhj)BchNXnbbzp6qtCScLh9(BJDqmknC67CWld03YfcexMut8QFK85FZpa5u4eInUCWWY7oSnCVDZGcp)3YfcexGA481JK)TH7DhCRx0mxjWyTOGEpdjdA7qItocoVj2UjiKh9Try8J(MlmANKEy4tEBNKEy4nqvcUmMGezwOgBccjgjjizufrZA4WqwOgBcIS8jWSZXyzRoQYGNGQfagHWv4mXwNE6jj3dc50tduMIafpGK7acGwvSavj4YycsKzHASjiKyKKGKrvenRHddzHASjiYYNaZYpglB1rvg8euTaWieUcNj260tpj5EqiNEAGYueO4bKChqa0QILKGKrven7Cq4yssqYOkIMDoi8rPjYkMKeKmQIOzNdcFCEtILfDQIcuLGlJjirMfQXMGqIrscsgvr0SgomKfQXMGiRRm4yjaq9mcc3cRkwGQeCzmbjYSqn2eesmssqYOkIM1WHHSqn2eezDLbhlB1ZiiClijizufrZoheoMKeKmQIOzNdcFuAISIjGyhj0CIabpaTQybQsWLXeKiZc1ytqiXijbjJQiAwdhgYc1ytqK1vgCSSvVxjCbaI98SuDlYJzrbpiRUF)TrevHs9tElxiqCrvg8euFhHWv4mXwNMrooSfYPbQsWLXeKiNgCkNHmnQYGNGQC6o3KiqDeORgxVFK8h9TCHaXfOgoF9i5FBj2ZZs1pc4Xj)B(biNcZmSdWJEeqhH3rYFeEhbNJW7iaFeq3FBSdIZ)9Cq4zSjXY3yhj0CIabV3sDpJFWi83OyJ)B(eyMHDaE0Ja6zaeMbcwKhlaciEadgwXHzMb9zWdgohj)ZGzM5bwESIfadgoaJvMXAEG)m4bdNJGZZayWWcqybpWaJxEGbXmwaeqFg8Gb893lWqmuLs8HQTrAcIJa87DGWD03jPoUOoFI7B98FNK6OqJQWZ)T9MiLh9T0iI36B8zmhgZvei3FNK6O9MiLFYByyRh99qA7MJE)(7KuhLlQ9N82jBv45p67H02nh9(93ozRc)OVhsB3C073FNK6yuD1yV1Z)TCrTp6BPreV1JK)(7KuhfKb98FVeDXjBv4h99qA7MJE)(7zITBcIJ(EiTDZrVF)DsQJ2Hb(e)tEdj26rFpK2U5O3V)MZmpBStB3YJ(EiTDZrVF)(B5qi4R4ddXqvk)K3qn2eeOwUOVjjiHpb(w6eBCLN)BJW4J2HHLT6k3ra92vg8euFBntR5kuuWxu83eJOOaD146BxzWZii835kans8X)TCHaXfvzWtq9DecxHZeBDAg54WwiNgOkbxgtqICAWPCgY0OkdEcQYP7CtIa1rGUAC9TCHaX9tE7MbfMrq4VzKlQk8euFZpa5uyecP6hb0BoJeajjSDtu9nry5B7K0ddOkd(75KW2nbHfJyoI5IvfBrlArlQzUOlfLi4k6srla8ufLxrjcUIUu0capfOI6RQOOq1tqrrxkQk4k2Iw0IwuO6jOOO52CBXQcUITyl2ITyl2ITyFtSDtuffAIJvi4cC6rapiEV5mYLnXsuLbphD2FxuRH9BhAIJv4rFNK64aXTxvoRNe65)oj1r7vcmwLFY7KuhH6aXimI4Z)TgvfU8DMydUjmIoMd2aGr8SM4HGogjKmIihu8SoE56TCnaqSfVLRbaY4gGelLVDlx032jPhgEBNKEy49Csy7MGWcRk2Iw0IwuO6jOOOomPfRk4k2ITyl2ITyl2ITyl2ITyl2ITyl2I9TCr3BeYGEeWWHzE8EBVsGXQCmSOqIhGVT2t92ELaJv5BqVtcnQk83KKhENK6OCnaqSfFYB7K0dd5kbjUjiEpNe2UjiSWQITOfTOfDhSj7IAVsGXQeZrmLob6yYLGfDQIcauVx09oZvcmwLwagomZJNvfBrlArlQzUO2ReySkl6utbQO(Qkkku9euuuUeetPtGU1IlblQk4k2Iw0IwuZCrTxjWyvwuR9ufnFr9vvuuO6jOOO8WeeMomPfvfCfBrlArlku9euuuqyccthM0IvfCfBXwSfBXwSfBXwSfBXwSfBXwSfBXwSf7B7K0ddJULl6BPt8K8nuj7Er3BeYG(Uxn6MROH5I6RArTUjE11qs(oj1r5IU3iKb9tENK6ysy8p5T9QAJ770chX132jPhggxnC6B7K0dd3FtSDtqip6BJW4h9nxy0oj9WWN82oj9WWBGQeCzmbjYSqn2eesmssqYOkIM1WHHSqn2eez5tGzNJXYwDuLbpbvlamcHRWzITo90tsUheYPNgOmfbkEaj3beaTQybQsWLXeKiZc1ytqiXijbjJQiAwdhgYc1ytqKLpbMLFmw2QJQm4jOAbGriCfotS1PNEsY9Gqo90aLPiqXdi5oGaOvfljbjJQiA25GWXKKGKrven7Cq4JstKvmjjizufrZohe(48Mell6uffOkbxgtqImluJnbHeJKeKmQIOznCyiluJnbrwxzWXsaG6zeeUfwvSavj4YycsKzHASjiKyKKGKrvenRHddzHASjiY6kdow2QNrq4wqsqYOkIMDoiCmjjizufrZohe(O0ezftaXosO5ebcEaAvXcuLGlJjirMfQXMGqIrscsgvr0SgomKfQXMGiRRm4yzREVs4cae75zP6wKhZIcEqwD)(BJW4JsNaDL7iGE7MbfE(VDZGcZytILVbh2iyNjtwhBWHhagLPiYm3d7iHMtei49wUqG4ozRcoWf403tYbpKC9MpXgxoyyjZWoap6raDeEhj)r4DeCocVJa8raD)TrevHs9tEh5qy4i8YIZBaA481JaeEV5hGCk8tEZpa5uiECX67jBtKJmbYv0mxjErNK4ZFRV5hGCke75zP6hb438dqof2MiRhj)Bd37o4wVOzUsGXArZ)2yheJsdN(oh8Ya9TRm4TjY6raH13YfcexMut8QFK85F7kdEgBsS8n2rcnNiqW7n)aKtHti24YbdlV7W2W9MWXzCtqq2Jo0ehRq5rV)MpXg3yyij4YmSdWJEeqhb0rYFeqhbNJa6ia)madRmdmZG4XmiWagepMbcyFg8GX893ZqYG2oK4KJGZBrAafAIJvO8iGENeo0ehRWJ(wUgai2I3Y1aazCdqILY32jPhgEpNe2UjiSWQITOfTOffQEckk6mzl1IvfCfBXwSfBX(wUO7nczqpcy4WmpE3FlxiqCZmSdWJEeqhH3rYFeEhbNJW7(9JGZrFlxiqCbQHZxps(3mG98Su9JaK8VTe75zP6hb84K)n)aKtHzg2b4rpcOJW7i5pcVJGZr4DeGpcO7Vn2bX5)Eoi8m2Ky5BSJeAorGG3BPUNXpye(BuSX)nFcmZWoap6ra9macZablYJfabepGbdR4WmZG(m4bdNJK)zWmZ8alpwXcGbdhGXkZynpWFg8GHZrW5zamyybiSGhyGXlpWGyglacOpdEWa((7fyigQsj(q12inbXra(9oq4o67KuhxuNpX9TE(VtsDuOrv45)2EtKYJ(wAeXB9n(mMdJ5kcK7VtsD0EtKYp5nKyRh99qA7MJE)(7KuhLlQ9N82jBv45p67H02nh9(93ozRc)OVhsB3C073FNK6yuD1yV1Z)TCrTp6BPreV1JK)(BoZ8SXoTDlp67H02nh9(93lrxCYwf(rFpK2U5O3V)EMy7MG4OVhsB3C073FNK6ODyGpX)K3WWwp67H02nh9(93jPokid65F)TCie8v8HHyOkLFYBOgBcculx03KeKWNaFlDInUYZ)Try8r7WWYwDL7iGE7kdEcQVTMP1Cfkk4lk(BIruuGUAC9TRm4zee(7CfGgj(4)oYHWWr4LfN3UzqHzee(Bg5IQcpb138dqofgHqQ(ra9MZibqscB3evFtew(2oj9WaQYG)EojSDtqyXiMJyUyvXw0Iw0IAMl6srjcUIUu0capvr5vuIGROlfTaWtbQO(Qkkku9euu0LIQcUITOfTOffQEckkAUn3wSQGRyl2ITyl2ITyl23eB3evrHM4yfcUaNEeWdI3BoJCztSevzWZrN93f1Ay)2HM4yfE03jPooqC7vLZ6jHE(VtsD0ELaJv5N82TCrFBNKEy4TDs6HH3ZjHTBcclSQylArlArHQNGII6WKwSQGRyl2ITyl2ITyl2ITyl2ITyl2ITyl232RQnUVtlCexFBVsGXQ8nO3Auv4Y3zIn4MWi6yoydagXZAIhc6yKqYiICqXZ64LR32jPhggxnC6B7K0ddVTxjWyvogwuiXdW3w7PENK6iuhigHreF(VtcnQk83KKhENK6OCnaqSfFYB7K0dd5kbjUjiEpNe2UjiSWQITOfTOfDhSj7IAVsGXQeZrmLob6yYLGfDQIcauVx09oZvcmwLwagomZJNvfBrlArlQzUO2ReySkl6utv08f1xvrrHQNGIIYLGykDc0TwCjyrvbxXw0Iw0IAMlQ9kbgRYIo1uffNI6RQOOq1tqrr5HjimDyslQk4k2Iw0IwuO6jOOOGWeeMomPfRk4k2ITyl2ITyl2ITyl2ITyl2ITyl2ITyl232jPhggDlx03sN4j5BOs29IU3iKb9DVA0nxrdZf1x1IADt8QRHK8DsQJYfDVrid6N8oj1XKW4FYB5AaGylElxdaKXnajwkFlx09gHmOhbmCyMhV7VDLbVnrwpciS(2im(O0jqx5ocO3UzqHN)B3mOWm2Ky5BWHnc2zYK1XgC4bGrzkImZ9WosO5ebcEVLleiUt2QGdCbo99KCWdjxV5tSXLdgwYmSdWJEeqhH3rYFeEhbNJW7iaFeq3FBervOu)K38dqofI98Su9Ja8BaA481JaeEV5hGCk8tEZpa5uiECX67jBtKJmbYv0mxjErNK4ZFRVLleiUzg2b4rpcOJW7i5pcVJGZr4D)n)aKtHTjY6rY)MWXzCtqq2Jo0ehRq5rV)2yheJsdN(oh8Ya9nX2nbH8OVncJF03CHr7K0ddFYB7K0ddVbQsWLXeKiZc1ytqiXijbjJQiAwdhgYc1ytqKLpbMDoglB1rvg8euTaWieUcNj260tpj5EqiNEAGYueO4bKChqa0QIfOkbxgtqImluJnbHeJKeKmQIOznCyiluJnbrw(eyw(XyzRoQYGNGQfagHWv4mXwNE6jj3dc50tduMIafpGK7acGwvSKeKmQIOzNdchtscsgvr0SZbHpknrwXKKGKrven7Cq4JZBsSSOtvuGQeCzmbjYSqn2eesmssqYOkIM1WHHSqn2eezDLbhlbaQNrq4wyvXcuLGlJjirMfQXMGqIrscsgvr0SgomKfQXMGiRRm4yzREgbHBbjbjJQiA25GWXKKGKrven7Cq4JstKvmbe7iHMtei4bOvflqvcUmMGezwOgBccjgjjizufrZA4WqwOgBcISUYGJLT69kHlaqSNNLQBrEmlk4bz197VLleiUmPM4v)i5Z)2vg8m2Ky5BSJeAorGG3B(biNcNqSXLdgwE3HTH7TH7DhCRx0mxjWyTO48MpXg3yyij4YmSdWJEeqhb0rYFeqhbNJa6ia)madRmdmZG4XmiWagepMbcyFg8GX893ZqYG2oK4KJGZBrAafAIJvO8iGENeo0ehRWJ(wUgai2I3Y1aazCdqILY32jPhgEpNe2UjiSWQITOfTOffQEckk6mzl1IvfCfBXwSfBX(wUO7nczqpcy4WmpE3FlxiqCrvg8euFhHWv4mXwNMrooSfYPbQsWLXeKiNgCkNHmnQYGNGQC6o3KiqDeORgxVFeGp6B5cbIlqnC(6rY)MbSNNLQFeSM)TLypplv)iGa7n)aKtHzg2b4rpcOJW7i5pcVJGZr4DeGpcO7Vj2UjiKh9Try8J(MlmANKEy4tEBNKEy4nqvcUmMGezwOgBccjgjjizufrZA4WqwOgBcIS8jWSZXyzRoQYGNGQfagHWv4mXwNE6jj3dc50tduMIafpGK7acGwvSavj4YycsKzHASjiKyKKGKrvenRHddzHASjiYYNaZYpglB1rvg8euTaWieUcNj260tpj5EqiNEAGYueO4bKChqa0QILKGKrven7Cq4yssqYOkIMDoi8rPjYkMKeKmQIOzNdcFCEtILfDQIcuLGlJjirMfQXMGqIrscsgvr0SgomKfQXMGiRRm4yjaq9mcc3cRkwGQeCzmbjYSqn2eesmssqYOkIM1WHHSqn2eezDLbhlB1ZiiClijizufrZoheoMKeKmQIOzNdcFuAISIjGyhj0CIabpaTQybQsWLXeKiZc1ytqiXijbjJQiAwdhgYc1ytqK1vgCSSvVxjCbaI98SuDlYJzrbpiRUF)9Cq4zSjXY3yhj0CIabV3jPIgcB3SC(VL6Eg)Gr4VTEeaaMqFZNaZmSdWJEeqpdGamwXkomdmpEadmZ5bbI5pdEWa7i5FgGbgq4Hf4achE5XcCWkyGH1pdEWW5i48macZablYJfabepGbdR4WmZG(m4bdN7VxGHyOkL4dvBJ0eehb437aH7OVtsDCrD(e3365)oj1rHgvHFYB7nrkp6BPreV134ZyomMRiqU)oj1r7nrk)K3qITE03dPTBo697VtsDuUO2FYBNSvHN)OVhsB3C073F7KTk8J(EiTDZrVF)DsQJr1vJ9wp)3Yf1(OVLgr8wps(7VtsDuqg0Z)9s0fNSvHF03dPTBo697VNj2Ujio67H02nh9(93jPoAhg4t8p5nmS1J(EiTDZrVF)nNzE2yN2ULh99qA7MJE)(93YHqWxXhgIHQu(jVHASjiqTCrFtsqcFc8T0j24kp)3gHXhTddlB1vUJa6TRm4jO(2AMwZvOOGVO4Vjgrrb6QX138dqofI98Su9Ja8B3mOWmcc)nJCrvHNG6B5cbIBMHDaE0Ja6i8os(JW7i4CeE3FZzKaijHTBIQVj79B7K0ddOkd(75KW2nbHfJyoI5IvfBrlArlQzUOlfLi4k6srla8ufLxrjcUIUu0capfOI6RQOOq1tqrrxkQk4k2Iw0IwuO6jOOO52CBXQcUITyl2ITyl2ITyFtSDtuffAIJvi4cC6rapiEVDLbVnrwpciMF7qtCScp6BoduTDtq8ohSB03jPooqC7vLZ6jHE(VtsDKWxgG8bxGt)K3jPoAVsGXQ8tERrvHlFNj2GBcJOJ5GnayepRjEiOJrcjJiYbfpRJxUEBNKEyyC1WPVTtspm8wUgai2I3Y1aaXwKziS5cau8oj1roduTDtq8jVTxjWyv(g0B7K0ddVNtcB3eewyvXw0Iw0Icvpbff1HjTyvbxXwSfBXwSfBXwSfBXwSfBXwSfBXwSVTtspmm6wUOVLoXtY32ReySkhdlkK4b4BR9uVDlx032jPhgEdvYUx09gHmOVzIi4kAyUO(Qwu8HbxT9a8DsQJY1aaXw8jVLl6EJqg0JKheomdw(3Auv4VZme2Cbakkk(WqmuLYIArVO7TvVtcnQk83KKhEBNKEyixjiXnbX75KW2nbHfwvSfTOfTO7Gnzxu7vcmwLyoIP0jqhtUeSOtvuaG69IU3zUsGXQ0I8GWHzWYBvXw0Iw0IAMlQ9kbgRYIo1uGkQVQIIcvpbffLlbXu6eOBT4sWIQcUITOfTOf1mxu7vcmwLf1ApvrZxuFvfffQEckkkpmbHPdtArvbxXw0Iw0IcvpbfffeMGW0HjTyvbxXwSfBXwSfBXwSfBXwSfBXwSfBXwSfBX(oj1r5IU3iKb9tENK6ysy8p5T9QAJ770chX13jPoc1bIryeXN)93UYGF(V5tSXnggscUmd7a8Ohb0raDK8hb0rW5iGocWpdWWkZaZmiEmdcmGbXJzGa2NbpymF)TDyhGh9(BJW4JsNaDL7iGElxiqCrvg8euFhHWv4mXwNMrooSfYPbQsWLXeKiNgCkNHmnQYGNGQC6o3KiqDeORgxF7MbfE(VDZGcZytILVbh2iyNjtwhBWHhagLPiYm3d7iHMtei492iIQqP(jVLleiUt2QGdCbo99KCWdjxV5tSXLdgwYmSdWJEeqhH3rYFeEhbNJW7iaFeq3FZpa5uyecP6hb0BaA481JGvEVn2bX5)MFaYPWp5n)aKtH4XfRVNSnroYeixrZCL4fDsIp)T(2W9MPGJFrZCLaJ1IM)n)aKtHTjY6rY)ojCOjowHh9TCnaqSfVLRbaITiZqyZfaO4nNbQ2UjiENd2n6B7K0ddVNtcB3eewyvXw0Iw0IcvpbffDMSLAXQcUITyl2ITyFlx09gHmOhjpiCygS83FBSdIrPHtFNdEzG(wUqG4YKAIx9JaI538dqofoHyJlhmS8UdBd3BxzWZytILVXosO5ebcEVjCCg3eeK9OdnXXkuE0Ja6OVDOjowHh9TB5I(w6epjFNeAuv4Vjjp8wM4RrvHJpuNnm8UXhVCY5DsQJgxhqid6N8wJQc)DeUouu8YnjZYIY9oj1XKW4FYBzIVgvfENMNnm8EmtgB0XgLrRJ(246aczqpciGbopwb7Dsy83lBILk8TDs6HHXvdN(2ndk393jHdnXXk8OVnUoGqg0JacyGZJvWUF)(7zizqBhsCYrW5nNrUSjwIQm45OZ(7IAnSFlsdOqtCScLhj)7ihcdhHxwCUFeWo6BxzWZytILVXosO5ebcEVTe75zP6hbeyV5tSXnggscUmd7a8Ohb0raDK8hb0rW5iGocWpdWWkZaZmiEmdcmGbXJzGa2NbpymF)9Cq4zSjXY3yhj0CIabV38jWmd7a8Ohb0ZaiaJvSIdZaZJhWaZCEqGy(ZGhmWos(NbyGbeEyboGWHxESahScgyy9ZGhmCocopdGWmqWI8ybqaXdyWWkomZmOpdEWW5(7fyigQsj(q12inbXra(9oq4o67KuhxuNpX9TE(VtsDuOrv4N82EtKYJ(wAeXB9n(mMdJ5kcK7VtsD0EtKYp5nKyRh99qA7MJE)(7KuhLlQ9N82jBv45p67H02nh9(93ozRc)OVhsB3C073FNK6yuD1yV1Z)TCrTp6BPreV1JK)(BoZ8SXoTDlp67H02nh9(93lrxCYwf(rFpK2U5O3V)EMy7MG4OVhsB3C073FNK6ODyGpX)K3WWwp67H02nh9(93jPokid65F)TCie8v8HHyOkLFYBOgBcculx03KeKWNaFlDInUYZ)Try8r7WWYwDL7iGE7kdEcQVTMP1Cfkk4lk(BIruuGUAC9TRm4zee(7CfGgj(4)MFaYPqSNNLQFeGF7MbfMrq4VzKlQk8euFZpa5uyecP6hb0BoJeajjSDtu9nzVFBNKEyavzWFpNe2UjiSyeZrmxSQylArlArnZfDPOebxrxkAbGNQO8kkrWv0LIwa4PavuFvfffQEckk6srvbxXw0Iw0Icvpbffn3MBlwvWvSfBXwSfBXwSf7BITBIQOqtCScbxGtpc4bX7TRm4TjY6rab8BhAIJv4rFNK64aXTxvoRNe65)oj1r7vcmwLFYB7vcmwLVb92oj9WW75KW2nbHfwvSfTOfTOq1tqrrDyslwvWvSfBXwSfBXwSfBXwSfBXwSfBXwSf7B7v1g33PfoIRVDlx032jPhgERrvHlFNj2GBcJOJ5GnayepRjEiOJrcjJiYbfpRJxUEBNKEyyC1WPVTtspm82ELaJv5yyrHepaFBTN6DsQJqDGyegr85)2oj9WWOB5I(w6epjFNK6OCnaqSfFYB7K0dd5kbjUjiEpNe2UjiSWQITOfTOfDhSj7IAVsGXQeZrmLob6yYLGfDQIcauVx09oZvcmwLwKheomdwERk2Iw0IwuZCrTxjWyvwua0GkQVQIIcvpbffLlbXu6eOBT4sWIQcUITOfTOf1mxu7vcmwLf1ApvrbvuFvfffQEckkkpmbHPdtArvbxXw0Iw0IcvpbfffeMGW0HjTylArlArlwvWvSfBXwSfBXwSfBXwSfBXwSfBXwSfBXwSfBXwSfBXwSfBXwSfBXwSVtcnQk83KKhEdvYUx09gHmOV7vJU5kAyUO(QwuRBIxDnKKVtsDuUO7nczq)K3jPoMeg)tElxdaeBXB5AaGmUbiXs5B5IU3iKb9iGHdZ84D)TCHaXfCgimap)3YfcexuLbpb13riCfotS1PzKJdBHCAGQeCzmbjYPbNYzitJQm4jOkNUZnjcuhb6QX13eB3eeYJ(2im(rFZfgTtspm8jVTtspm8gOkbxgtqImluJnbHeJKeKmQIOznCyiluJnbrw(ey25ySSvhvzWtq1caJq4kCMyRtp9KK7bHC6PbktrGIhqYDabqRkwGQeCzmbjYSqn2eesmssqYOkIM1WHHSqn2eez5tGz5hJLT6OkdEcQwayecxHZeBD6PNKCpiKtpnqzkcu8asUdiaAvXssqYOkIMDoiCmjjizufrZohe(O0ezftscsgvr0SZbHpoVjXYIovrbQsWLXeKiZc1ytqiXijbjJQiAwdhgYc1ytqK1vgCSeaOEgbHBHvflqvcUmMGezwOgBccjgjjizufrZA4WqwOgBcISUYGJLT6zeeUfKeKmQIOzNdchtscsgvr0SZbHpknrwXeqSJeAorGGhGwvSavj4YycsKzHASjiKyKKGKrvenRHddzHASjiY6kdow2Q3ReUaaXEEwQUf5XSOGhKv3V)ojCOjowHh9TCnaqSfVLRbaY4gGelLVTtspm8EojSDtqyHvfBrlArlku9euu0zYwQfRk4k2ITyl2I9TCr3BeYGEeWWHzE8U)2im(O0jqx5ocO3RQjE1FgabyGbopwbgmCaopy5bJzEFg8aJfVDZGcZytILVbh2iyNjtwhBWHhagLPiYm3d7iHMtei492ndk88FlxiqCNSvbh4cC67j5GhsUElsdOqtCScLhj)7ihcdhHxwCEdqdNVEeqaZ7TH7ntbh)IM5kbgRff0B(biNc)K38dqofIhxS(EY2e5itGCfnZvIx0jj(836BJDqC(V5hGCkSnrwps(3eooJBccYE0HM4yfkp6raD03o0ehRWJ(2TCrFlDINKVLj(Auv4DAE2WW7XmzSrhBugTo67KqJQc)nj5H3jPoAervOu)K3jPoACDaHmOFY7KW4Vx2elv4B7K0ddJULl6BPt8K8TX1beYGEeqadCESc2BnQk83r46qrXl3Kmllk3B7v1g33PfoIRVtsDmjm(N8wM4RrvHJpuNnm8UXhVCY5TDs6HHXvdN(2ndk393jHdnXXk8OVnUoGqg0JacyGZJvWUF)(BJDqmknC67CWld03Cg5YMyjQYGNJo7VlQ1W(TCHaXLj1eV6hjF(3YfcexGA481JK)n)aKtHti24YbdlV7W2W9MpXgxoyyjZWoap6raDeEhj)r4DeCocVJa8raD)9mKmOTdjo5i48MFaYPWmd7a8Ohb0r4DK8hH3rW5i8ocWhb093grufk1p5TCHaXnZWoap6raDeEhj)r4DeCocV73pcZh9TCHaXfOgoF9i5FZa2ZZs1pc4XA(3wI98Su9JacS38dqofMzyhGh9iGocVJK)i8ocohH3ra(iGU)MpXg3yyij4YmSdWJEeqhb0rYFeqhbNJa6ia)madRmdmZG4XmiWagepMbcyFg8GX893ZbHNXMelFJDKqZjce8El19m(bJWFNdEzG(MpbMzyhGh9iGEgabySIvCygyE8agyMZdceZFg8Gb2rY)madmGWdlWbeo8YJf4GvWadRFg8GHZrW5zaeMbcwKhlaciEadgwXHzMb9zWdgo3FVadXqvkXhQ2gPjiocWV3bc3rFNK64I68jUV1Z)DsQJcnQc)K32BIuE03sJiERVXNXCymxrGC)DsQJ2BIu(jVHHTE03dPTBo697VtsDuUO2FYBNSvHN)OVhsB3C073F7KTk8J(EiTDZrVF)DsQJr1vJ9wp)3Yf1(OVLgr8wps(7VtsDuqg0Z)9mX2nbXrFpK2U5O3V)Ej6It2QWp67H02nh9(93jPoAhg4t8p5nKyRh99qA7MJE)(BoZ8SXoTDlp67H02nh9(97VLdHGVIpmedvP8tEd1ytqGA5I(MKGe(e4BPtSXvE(VncJpAhgw2QRChb0BxzWtq9T1mTMRqrbFrXFtmIIc0vJRVJCimCeEzX5TBguygbH)MrUOQWtq9TCHaXnZWoap6raDeEhj)r4DeCocV7V5hGCkCcXgxoyy5Dh2gU3Cgjassy7MO6BYE)2oj9WaQYG)EojSDtqyXiMJyUyvXw0Iw0IAMl6srjcUIUu0capvr5vuIGROlfTaWtbQO(Qkkku9euu0LIQcUITOfTOffQEckkAUn3wSQGRyl2ITyl2ITyl23eB3evrHM4yfcUaNEeWdI3BoJCztSevzWZrN93f1Ay)2HM4yfE03jPooqC7vLZ6jHE(VtsD0ELaJv5N82ELaJv5BqVTtspm8EojSDtqyHvfBrlArlku9euuuhM0IvfCfBXwSfBXwSfBXwSfBXwSfBXwSfBX(wUgai2I3Y1aazCdqILY3jPoc1bIryeXN)BnQkC57mXgCtyeDmhSbaJ4znXdbDmsizeroO4zD8Y1B7K0ddJRgo9TDs6HH32ReySkhdlkK4b4BR9uVDlx032jPhgEBNKEyy0TCrFlDINKVtsDuUgai2Ip5nuj7Er3BeYG(Uxn6MROH5I6RArTUjE11qs(oj0OQWFtsE4TDs6HHCLGe3eeVNtcB3eewyvXw0Iw0IUd2KDrTxjWyvI5iMsNaDm5sWIovrbaQ3l6EN5kbgRslYdchMblVvfBrlArlQzUO2ReySklkaAqf1xvrrHQNGIIYLGykDc0TwCjyrvbxXw0Iw0IAMlQ9kbgRYIATNQOGkQVQIIcvpbffLhMGW0HjTOQGRylArlArHQNGIIcctqy6WKwSQGRyl2ITyl2ITyl2ITyl2ITyl2ITyl2ITyFNK6OCr3BeYG(jVtsDmjm(N82EvTX9DAHJ46B5IU3iKb9iGHdZ84D)TRm4N)B5cbIl4mqyaE(VLleiUOkdEcQVJq4kCMyRtZihh2c50avj4YycsKtdoLZqMgvzWtqvoDNBseOoc0vJRV5hGCke75zP6hb43jHdnXXk8OVLRbaIT4TCnaqg3aKyP8TDs6HH3ZjHTBcclSQylArlArHQNGIIot2sTyvbxXwSfBXwSVLl6EJqg0JagomZJ393gHXhLob6k3ra92ndk88F7MbfMXMelFdoSrWotMSo2GdpamktrKzUh2rcnNiqW7TCHaXDYwfCGlWPVNKdEi56TrevHs9tEZpa5uyecP6hb0BaA481JGvEV5tSXLdgwYmSdWJEeqhH3rYFeEhbNJW7iaFeq3FZpa5u4N8MFaYPq84I13t2MihzcKROzUs8IojXN)wFZpa5uyBISEK8VjCCg3eeK9OdnXXkuE0Ja6OVDOjowHh9TX1beYGEeqadCESc27KqJQc)nj5H3jHXFVSjwQW3Auv4VJW1HIIxUjzwwuU3YeFnQkC8H6SHH3n(4LtoVLj(Auv4DAE2WW7XmzSrhBugTo6B3Yf9T0jEs(oj1XKW4FY7KuhnUoGqg0p5(7KWHM4yfE03gxhqid6rabmW5Xky3VF)TXoigLgo9Do4Lb6BITBcc5rFBeg)OV5cJ2jPhg(K32jPhgEduLGlJjirMfQXMGqIrscsgvr0SgomKfQXMGilFcm7Cmw2QJQm4jOAbGriCfotS1PNEsY9Gqo90aLPiqXdi5oGaOvflqvcUmMGezwOgBccjgjjizufrZA4WqwOgBcIS8jWS8JXYwDuLbpbvlamcHRWzITo90tsUheYPNgOmfbkEaj3beaTQyjjizufrZoheoMKeKmQIOzNdcFuAISIjjbjJQiA25GWhN3KyzrNQOavj4YycsKzHASjiKyKKGKrvenRHddzHASjiY6kdowcaupJGWTWQIfOkbxgtqImluJnbHeJKeKmQIOznCyiluJnbrwxzWXYw9mcc3cscsgvr0SZbHJjjbjJQiA25GWhLMiRyci2rcnNiqWdqRkwGQeCzmbjYSqn2eesmssqYOkIM1WHHSqn2eezDLbhlB17vcxaGypplv3I8ywuWdYQ73FlxiqCzsnXR(raX8BxzWZytILVXosO5ebcEVNHKbTDiXjhbN3gU3mfC8lAMReySwuqzb7TXoio)3I0ak0ehRq5rY)2vg82ez9iGy((rW6rFpheEBISEeqa5ndypplv)iGheZVjc71amdizqZasg03avj4YycsKyjtbh)IM5kbgRfTOGYc27KWHM4yfE03YfDVrid6rYdchMbl)93qn2eeOwUOVDLb)nNrcGKe2UjQ(MS3Vj2UjQIcnXXkeCbo9iGheV3gHXhTddlB1vUJa6nHJZ4MGGShDOjowHYJEeqh9TdnXXk8OVnUoGqg0JacyGZJvWElt81OQW708SHH3JzYyJo2OmAD03jPoACDaHmOFYBnQk83r46qrXl3Kmllk3BzIVgvfo(qD2WW7gF8YjN3jPoMeg)tE7wUOVLoXtY3jHgvf(BsYdVtcJ)EztSuH3FNeo0ehRWJ(246aczqpciGbopwb7(97VnCVZme2CbakkAqu01GVuuqff8fDv3dfn)BhAIJv4rFNK6O9kbgRYp5TCr3BeYGEK8GWHzWY)2ELaJv5yyrHepaFdG(TB5I(w6epjFBNKEyyC1WPVDZGY9oj0OQWFtsE4DsQJY1aaXw8jVtsDmjm(N8wJQc)DMHWMlaqrrXhgIHQuwul6fDVT6nuj7Er3BeYG(MjIGROH5I6RArXhgC12dW3jPokx09gHmOFYB7vcmwLVb9wUgai2I3Y1aaXwKziS5cauC)nryVgGzajdkQLl67gVCWlt0mSoJGdV3ZqYG2oK4KJa8BaA481NbWmdmW4GdWybZajpW5bHvM)m4bgRVxGHyOkL4dvBJ0eehb075GWFNRa0iXh)3I0ak0ehRq5rY)EvnXR(ZamEmZmyGXJzWagmCWHzCY)zWdmqEVdeUJ(2EtKYJ(wAeXB9n(mMdJ5kcK7VtsDCrD(e3365)oj1rHgvHFYBNSvHF03dPTBo697VtsDmQUAS365)wUO2h9T0iI36rYF)nNzE2yN2ULh99qA7MJE)(ByyRh99qA7MJE)(7KuhT3eP8tEdj26rFpK2U5O3V)EMy7MG4OVhsB3C073FNK6OCrT)K3lrxCYwf(rFpK2U5O3V)oj1r7WaFI)jVDYwfE(J(EiTDZrVF)(BlXEEwQ(ry((raYrFpheEBISEeqa5nNrcGKe2UjQ(MS3Vjc71amdizqZasg03avj4YycsKyjtbh)IM5kbgRfTO5FBj2ZZs1pcZVHASjiqTCrF7kd(BgWEEwQ(raJ53eB3evrHM4yfcUaNEeWdI3BJW4J2HHLT6k3ra92HM4yfE03jPoAVsGXQ8tENeAuv4Vjjp8wUO7nczqpsEq4Wmy5FBVsGXQCmSOqIhGVT2t92TCrFlDINKVtsDuUgai2Ip5DsQJjHX)K3Auv4VZme2Cbakkk(WqmuLYIArVO7TvVHkz3l6EJqg03mreCfnmxuFvlk(WGR2Ea(oj1r5IU3iKb9tEBVsGXQ8nO3Y1aaXw8wUgai2ImdHnxaGI7VnCVZme2CbakkAqu01GVu08ff8fDv3dfn)BchNXnbbzp6qtCScLh9iGo6BhAIJv4rF7wUOVLoXtY3jHgvf(BsYdVtcJ)EztSuHV1OQWFhHRdffVCtYSSOCVLj(Auv44d1zddVB8XlNCElt81OQW708SHH3JzYyJo2OmAD03gxhqid6rabmW5XkyVtsDmjm(N8oj1rJRdiKb9tU)ojCOjowHh9TX1beYGEeqadCESc2973Fte2RbygqYGIA5I(UXlh8YendRZi4W79mKmOTdjo5ia)gGgoF9zamZadmo4amwWmqYdCEqyL5pdEGX67fyigQsj(q12inbXra9Eoi835kans8X)TinGcnXXkuEK8Vxvt8Q)maJhZmdgy8ygmGbdhCygN8Fg8adK37aH7OVT3eP8OVLgr8wFJpJ5WyUIa5(BNSvHN)OVhsB3C073FNK6OqJQWp5Tt2QWp67H02nh9(93jPogvxn2B98Flxu7J(wAeXB9i5V)oj1r7nrk)K3WWwp67H02nh9(93CM5zJDA7wE03dPTBo697VHeB9OVhsB3C073FptSDtqC03dPTBo697VtsDuUO2FY7LOlozRc)OVhsB3C073FNK6ODyGpX)K3jPoUOoFI7B98V)ojCOjowHh9TCr3BeYGEK8GWHzWYF)(rWIJ(wUqG4cudNVEK8VTe75zP6hb8GY)MFaYPWmd7a8Ohb0r4DK8hH3rW5i8ocWhb093eB3eeYJ(2im(rFZfgTtspm8jVTtspm8UyjjizufrZcdjbxrNQOZjHTBcclIsGywuHvfBrlArlQzUOwiSQO(Qkk2Iw0Iw0Iw0Iw0OeyrNQOdeFn78oeGwyrucSOaWffeVcaLWQIATkkVSGzvrbGkQfG4vaOewvSfTOfTO6wQfBrlArlArlArlAucSOtv0bIVMDEhcqlIsGwlEzbZQITOfTOfvfCfBrlArlku9euu0OeyXQcUILPak(fDQIwS5(uSfTOfTOyeWjP5zjGyOOtv0ITOfTOfn3NITOfTOfTOfTOffJaMzqivBiXnbbGyOOtvuEzXbZITOfTOfTOfTOffJaYyuveBeXffOqIVcigk6ufLxwCadZITOfTOfTOfTOffJaM5kXiKfnmxu0viXsbGyOOtvuEzbdZITOfTOfTOfTOffJagX2vOk4myw0mHbakkkRcqDx0WCrBZoQchcbbGyOOtvuEzbbgMfTOfTOfBrlArlkakml2Iw0IwumcOdjgphnQUbedfDQIIvml2Iw0IwumcOdjghV5z12nrvHkLaIHIovr5LLhZywSfTOfTOyeWffARcNeRmPKTVcigk6ufLhMfBrlArlkgb0obHQWzsjBFfqmu0Pkkpml2Iw0Iwumc4AWxSUUjUjQYKs2aIHIovr5HzXw0Iw0IIraxd(cJ8LHDYvRRBIBIQmPKnGyOOtvuEywSfTOfTOyeW1GVWiFzyNCLjLSbedfDQIYdZITOfTOffJakuaY4ImStUYKs2(kGyOOtvuEywSfTOfTOyeqHcqRRBIBIQmPKTVcigk6ufLhMfBrlArlkgbCWiLgrmtkz7RaIHIovr5HzXw0Iw0IIrahmsPreZKs2(k(k0wfojwbedfDQIYdZIfa197VNdcpJnjw(g7iHMtei49MpbMzyhGh9i5FgGLhlacoGLhmE5XkqacqYJ1pdEWa(i48malpwaeCalpy8YJvGaeGKhRFg8Gb8937aH7OVDYwfE(J(EiTDZrVF)DsQJcnQcp)3ozRc)OVhsB3C073Flxu7J(wAeXB9i5V)oj1r7nrk)K3CM5zJDA7wE03dPTBo697VHeB9OVhsB3C073FddB9OVhsB3C073FptSDtqC03dPTBo697VT3eP8OVLgr8wFJpJ5WyUIa5(7LOlozRc)OVhsB3C073FNK6OCrT)K7VLdHGVIpmedvP8tEd1ytqGA5I(MKGe(e4BPtSXvE(VLleiU5sLepbjU(jVncJpAhgw2QRChb0BxzWtq9T1mTMRqrbFrXFtmIIc0vJRVDLbpJGWFNRa0iXh)3Yfce3p5TBguygbH)oxbOrIp(V5hGCkmcHu9Ja6nNrcGKe2UjQ(MiS8TDs6HbuLb)9Csy7MGWcRk2Iw0IwuO6jOOOwaO1ilVzClkaurTgz5nJlGwHLZb4aXTiscJZKs2(QfaUSjwQqaTQOaqffepE8WSOrsyCMuY2xbhHblaCztSuHaAvrbGkkiE84zvU)IvfCfTyl23eB3evrHM4yfcUaNEeEV5mYLnXsuLbphD2FBnSF7qtCScp6B7K0ddryheVl25KW2nbHfwvSfTOfTOmfqXhJaUOqBv4KyLjLS9vaXqrNQOKeKmQIOzHHKGZclIKW4mPKTVAbGlBILkeqRkkaurJKW4mPKTVcocdwa4YMyPcb0kRkkaCrbXJhMfLNvfBrlArlktbu8XiG2jiufotkz7RaIHIovrJKW4mPKTVAbGlBILkeqRk2Iw0IwuMcO4JrahmsPreZKs2(k(k0wfojwbedfDQIssqYOkIMfgscolSWIijmotkz7RGJWGfaUSjwQqaTQOGVOrsyCMuY2xTaWLnXsfcOvwvuaOIgjHXzsjBFfCegSaWLnXsfcOvwvua4IcIhpmlAERk2Iw0IwuMcO4JrahmsPreZKs2(kGyOOtv0ijmotkz7RGJWGfaUSjwQqaTQOGVOrsyCMuY2xTaWLnXsfcOvfBrlArl6oyt2fDvjBJigCPTBw2gfw0PkkOSfBrlArl6oyt2fnQcLKIovrbaQNzyGpXToXnI4jbrsArMwF0AIN1BgrJiNiqZ9Dmxmcogba4nMlSrWZQITOfTOfDvjBJigCPTBw2gfw0Pk6Qs2grm4sB3SSnkSOwRIAXQs2grm4sB3SSnkSOaWf1cMcO4JraDiX45Or1nGyOOaWfLPak(yeqhsmoEZZQTBIQcvkbedwzvrTwf1IvLSnIyWL2UzzBuyrbGlQfrvOKuuaOIcIhpRSQylArlArNdWIIlMrlQru0fIbkTGPak(yeWjP5zjGyWQIYfk2Iw0Iw0Iw0IwuZCrJKW4tsZZwa4YMyPcbeZIIRvfTaWtvuHzxuFvffBrlArlArlArlArlArl6Qs2grm4sB3SSnkSOtv0vLSnIyWL2UzzBuyrTwf1IvLSnIyWL2UzzBuyrbGlAuRk2Iw0Iw0Iw0IwuvWvSfTOfTOQGRylArlAr3bBYUOozRcVOtvuPUvB3cq8WSOaa1rjBv4riMdtSmICzr(8aJdpRSQylArlArnZf1jBv4fDQPkQdtAr9vvuSfTOfTOfTOfTORkzBeXGlTDZY2OWIovrxvY2iIbxA7MLTrHf1AvulwvY2iIbxA7MLTrHffaUO8YIJvfBrlArlQk4k2Iw0IwuMcO4Jraxd(I11nXnrvMuYgqmu0PkkVS4uua4IUQKTredU02nlBJclk4bptbaw0HK9ArTgfDn4lfDvjBzr5msOgtGCgrCrhmsPrex0vLS91ITOfTOfLPak(yeW1GVWiFzyNC166M4MOktkzdigk6ufLPak(yeW1GVyDDtCtuLjLSbedffaUOmfqXhJaoyKsJiMjLS9v8vOTkCsScigkk4bptbaw0HK9ArTgfDDPORbFPOa0S3fDvj7Ic1ycKZiIl6GrknI4IUQKTVwSfTOfTOmfqXhJaUg8fg5ld7KRmPKnGyOOtvuscsgvr0SWqsWzbtbu8XiGRbFX66M4MOktkzdigkkaCrzkGIpgbCWiLgrmtkz7RaIbmlkpRk2Iw0IwuMcO4JrafkazCrg2jxzsjBFfqmu0PkkjbjJQiAwyij4SGPak(yeq7eeQcNjLS9vaXqrTwfLPak(yeW1GVWiFzyNCLjLSbedywuEwvSfTOfTOmfqXhJakuaADDtCtuLjLS9vaXqrNQOKeKmQIOzHHKGZcMcO4JraxuOTkCsSYKs2(kGyOOwRIYuafFmc4AWxyKVmStUADDtCtuLjLSbedywuEwvSQG7TDs6HHXvdN(2ndk3B3Yf9TDs6HH32jPhgANyJR89B7K0dd5kbjUjiExSZjHTBcclSQylArlArHQNGIIYuafFmc4IcTvHtIvMuY2xbedywuq84HzrbvSQG7TDs6HbeYG(UyNtcB3eewyvXw0Iw0IcvpbffLPak(yeWffARcNeRmPKTVcigkA2SffWIcyrZMTOmfqXhJakuaADDtCtuLjLS9vaXqrZMTOawuRfGfnB2IssqYOkIMfgscolykGIpgbCn4lmYxg2jxTUUjUjQYKs2aIbmlkpRkwvW9wJQcx(osirGoYeEmMdktVTtspm8EojSDtqyHvfBrlArlku9euuuhM0IvfCfBXwSf7B7v1g33Auv4VTtspmm6wUOVLoXtY7VLleiUOkdEcQVJq4kCMyRtZihh2c50avj4YycsKtdoLZqMgvzWtqvoDNBseOoc0vJRV5hGCke75zP6hb432HDaE07VDZGcZytILVXosO5ebcEVfPbuOjowHYJK)nFInUCWWsMHDaE0Ja6i8os(JW7i4CeEhb4Ja6(BJDqC(VDLbVnrwpciMFZNyJBmmKeCzg2b4rpcWhH3938dqofIhxS(EY2e5itGCfnZvIx0jj(836BchNXnbbzp6qtCScLh9iGo6BhAIJv4rF7wUOVLoXtY3jPos2aKyP0Hj9tENeAuv4Vjjp8wJQc)DMbbNXnbH8DsQJjHX)K3YeFnQkC8H6SHH3n(4LtoVLj(Auv4DAE2WW7XmzSrhBugTo67KW4Vx2elv493jHdnXXk8O3VF)n)aKtHTjY6rY)wUqG4MzyhGh9iGocVJK)i8ocohH3ra(i8U)MZix2elrvgCRBIx93wdXBxzWZytILVXosO5ebcEVLleiUmPM4v)i4a6TH7nt4d6TBguyBISEeqm)MFaYPWjeBC5GHL3DyB4EpdjdA7qItocWVbOHZxpsEGb(9QAIx9JGdV3gHXhLob6k3raD)iG4D03UYGNXMelFJDKqZjce8EBj2ZZs1pc4bL)n)aKtHzg2b4rpcOJW7i5pcVJGZr4DeGpcO7VNdcpJnjw(g7iHMtei49MpbMzyhGh9iGocVJK)iGU)EhiCh9Tt2QWZF03dPTBo697VtsDuOrv45)2jBv4h99qA7MJE)(B7nrkp6BPreV134ZyomMRiqU)wUO2h9T0iI36rYF)DsQJ2BIu(jVHHTE03dPTBo697V5mZZg702T8OVhsB3C073FptSDtqC03dPTBo697VHeB9OVhsB3C073FVeDXjBv4h99qA7MJE)(7KuhLlQ9NC)TCie8v8HHyOkLFYBOgBcculx03KeKWNaFlDInUYZ)Try8r7WWYwDL7iGE7kdEcQVTMP1Cfkk4lk(BIruuGUAC9TRm4zee(BegtqICevvXKWM7TCHaX9tE7MbfMrq4VrymbjYruvftcBU38dqofgHqQ(ra92oj9WaQYG)EojSDtqyHvfBrlArlku9euuula0AKL3mUffaQOwJS8MXfqRWY5aCG4wejHXzsjBF1cax2elviGwvuaOIcIhpEyw0ijmotkz7RGJWGfaUSjwQqaTQOaqffepE8Sk3FXQcUIwSf7BITBIQOqtCScbxGtpcV3o0ehRWJ(2TCrFBNKEy4TDs6HHr3Yf9T0jEs(2oj9WW75KW2nbHfwvSfTOfTOq1tqrrDyslwvW92oj9WqUsqIBcI3f7Csy7MGWcRk2Iw0IwuO6jOOOmfqXhJakuaADDtCtuLjLS9vaXaMffepEywuqfRk4EBNKEyaHmOVFRrvHlFhjKiqhzcpgZbLP32jPhgIWoiExSf7B7v1g33Auv4VTtspmmUA403Uzq5U)2vg8Z)TRm4TjY6raX8B(eBC5GHLmd7a8Ohb0r4DK8hH3rW5i8ocWhb093RQjE1pco8E7MbfMXMelFJDKqZjce8E7MbfE(Vj2UjiKh9Try8J(MlmANKEy48FBNKEy4DXwS3V)gGgoF9i5bg43g7G48FZpa5u4N8MFaYPq84I13t2MihzcKROzUs8IojXN)wFB4EZe(5FZpa5uyBISEK8V5hGCkCcXgxoyy5Dh2gU3UzqHTjY6raX8B5cbIltQjE1ps(8VLleiUa1W5Rhj)BoJCztSevzWTUjE1FBneVLleiUOkdEcQVJq4kCMyRtZihh2c50avj4YycsKtdoLZqMgvzWtqvoDNBseOoc0vJRVjCCg3eeK9OdnXXkuE07V5msaKKW2nr13eHLVNHKbTDiXjhbN3Yfce3md7a8Ohb0r4DK8hH3rW5i8U)wKgqHM4yfkpcO3gHXhLob6k3ra9MFaYPqSNNLQFeGVFeqGo675GWBtK1JKN3BoJCztSevzWFBnSl232jPhgqvg83ZjHTBcclSQylArlArHQNGIIoq81SZ7qaAbtbu8hjdHKWlkaurbXRaqHJvfnB2IciUawSQG7TLypplv)i4a2BoJeajjSDtu9nry5BITBIQOqtCScbxGtpcV32jPhgqvg8iTWrC9Tgvf(BJW4J2HHLT6k3ra9My7MGqE03sNa9J(MlmANKEy4tEBNKEy4ntbu8hjdHKWl6ufLxXYuaf)XbcdfDQIYRyzkGI)OhCYUOtvuE3FBeg)OV5cJ2jPhg(K32jPhgEZuaf)rp4KDrNQO8kwMcO4psgcjHx0PkkVILPak(Jdegk6ufL397VjCCg3eeK9OdnXXkuE0Ja6OVDOjowHh9TB5I(w6epjFNK64Qs2(6N8EvjBFDmSOqIhGVT2V1OQWFZKs2(6BzIVgvfo(qD2WW7gF8YjN3Rkz7RV59ojm(7LnXsf(wM4RrvH3P5zddVhZKXgDSrz06OVtsDmjm(N8oj0OQWFtsE4(7KWHM4yfE073V)wQ7z8dgH)ot8qqXZ6VnCVzkGIFrxvY(nanC(6ZGzScgyadmwGf8yglYdcySM)ZGhmqVNdc)DUcqJeF8FlsdOqtCScLhj)BhAIJv4rF7wUOVTtspm8EoT3sBI4tEBNKEyy0TCrFRrvH)2oj9WW75KW2nbHfJyw0rmlQmXhVOQWXSOJyw0rmlQmKG2kMfDeZIoIzrhXSOJyw0rml6iMfDeZIkx09gHmOyw0rmlkziKeoMfDeZIoAvXw0Iw0IAMlAKegpczKeg3czibT1IgGffqaXSOaUSjwQqaTQOebxrLl6EJqg0Io1uffqMicUIgMlQVQffFyWvBpabSOebxrLj(4fvfErNAQIcyJpE5KZit4XyoawuFvffBrlArlArlArlktbu8hjdHKWl6ufLmescVylArlArvbxXQcU3Auv4Y3zIn4MWi6yoydagXZAIhc6yKqYiICqXZ64LR32jPhggxnC6B3mOC3FVQM4v)zagZ5XcW4bmomZmpWaHtEG8zWdmwFVdeUJ(2jBv45p67H02nh9(93jPok0Ok88F7KTk8J(EiTDZrVF)T9MiLh9T0iI36B8zmhgZvei3Flxu7J(wAeXB9i5V)EMy7MG4OVhsB3C073FNK6O9MiLFYBiXwp67H02nh9(93lrxCYwf(rFpK2U5O3V)oj1r5IA)jVHHTE03dPTBo697VtsD0omWN4FYBoZ8SXoTDlp67H02nh9(97VHASjiqTCrF7kd(97VJEeqaNh09Fa \ No newline at end of file diff --git a/WA codes/Prot pala CD popups (WA CODE).txt b/WA codes/Prot pala CD popups (WA CODE).txt new file mode 100644 index 0000000..629cbd9 --- /dev/null +++ b/WA codes/Prot pala CD popups (WA CODE).txt @@ -0,0 +1 @@ +d4JPYaGAPu52kAxsjABIqDzIzkLI5kLqZgYRLsQBkLKLje(MqeNwYovQ9I2nj7Nu0pfLmmr04KsvEofdvOWGjLmCs1bfvofPqDmrvNtOOfQKAPsjyXcrA5cEiPupv1JHQ1rkWeffMkLMSunDWffIAuKc5zcLUUcBukvvFgkBwK2Uq6JIq(QuknnrP(UuyKKc6Wuz0cvJxjPtkk6wkjUMi48srRukvL)Qe)MQM5PL3rlbEdFeTm2wgj8t(oFNw(GGvELTPUWJf8dDEhourfBOWWKqR8DH7vYNKxwv3P6sNrkFVmTBOWHkQW7qi(QZRDgg(MzLMAeG78jtYRgtBOWWKGH788gbLgdFPa(1zzTz1Q2e52VLh5DDA5bhsuaT8ZbckAjqGFyKfCKZy4HWq4dEKql)CGGIwce4tD4q5v0YphiOOLabE9O6GdjkGw(5abfTeiWJJCgdT8MsHHe(yKRn5YiZnb(ELMw4de0Kw(5abfTeiWhC4cT8ZbckAjqGabECA5opT8oCOIk2qHHjHw57c3RKpjpekmmjql)qjrffWd1u68qtDHxIkkG3Oli02nfUJnFmJnb((i4GYR4t2Ye4LOIc4127rDFdLMA1cIR3utT0ORliKgZpmYIrxqOTBkCnp(Wa(5s8Ql8qnLobEK31PLhCirb0YphiOOLab(HrwWroJHR5doCHw(5abfTeiWN6WHYROLFoqqrlbc86r1bhsuaT8ZbckAjqGp4rcT8ZbckAjqGVxPPf(abnPLFoqqrlbc84iNXqlVPuyiHpg5AtUmYCtGaFqWkVY2ux4lCVIVufSG7N6ibKo355DQA6GYROL3aUaqlVEqmcWN66cb(0svM40Ydn1fE9GyeGxpigb4tDDHab(QZNlQOWKGrtTmXlb15hkiuyysGwEJUGqB3u4o28Xm2eiWVAwPPgb4ELyJGxnM2qHHjbd3557LPDdfourfEhcXdYQG2EKpql3zZDsce4ocA5X9iFGwUZM7Ke4D4qfvSHcdtcTY3fUxjFsEiuyysGwEOPUWlrffW3hbhuEfFYwMaVevuaV2EpQ7BO0uRwqC9MAQLgDDbH0y(Hrwm6ccTDtHR5hkjQOaEOMsN3Oli02nfUJnFmJnbE8Hb8ZL4vx4HAkDc8iVRtlp4qIcOLFoqqrlbc8dJSGJCgdxZhC4cT8ZbckAjqGp1HdLxrl)CGGIwce41JQdoKOaA5Ndeu0sGapoYzm0YBkfgs4JrU2KlJm3e47vAAHpqqtA5Ndeu0sGaFWJeA5Ndeu0sGab(GGvELTPUWx4EfFPkyb3p1rciDUZZ7WHYRm0YBaxaOLV7xWq(gCnpgY3yjn4McFBfxRZncoJgKlQOWKGrtTmXlb15Xq(gloCO8kEtCFdc8PLQmXPLV7xWq(gms5Xq(glPb3u4BR4ADUrWz0GCrffMemAQLjEjOopgY3yXHdLxXhV6cbc8ovnDq5v0YBaxaOLxpigb4tDDHaFAPktCA5HM6cVEqmcWRheJa8PUUqGaFVmTBOWHkQW7qi(QZNlQOWKGrtTmXlb11uRi4xnR0uJaCVsSrWRgtBOWWKGH788dfekmmjqlVrxqOTBkChB(ygBce4bzvqBpYhOL7S5ojbcChlT8oCOIk2qHHjHw57c3RKpjVtvthuEfT8gWfaA51dIra(uxxiWNwQYeNwEOPUWRheJa86bXiaFQRleiWdHcdtc0Ydn1fEjQOa((i4GYR4t2Ye4LOIc4127rDFdLMA1cIR3utT0ORliKgZpmYIrxqOTBkCn)qjrffWd1u68gDbH2UPWD(y2EjJnBE8Hb8ZL4vx4HAkDc8iVRtlp4qIcOLFoqqrlbc8dJSGJCgdxZhC4cT8ZbckAjqGhh5mgA5nLcdj8XixBYLrMBc86r1bhsuaT8ZbckAjqGp1HdLxrl)CGGIwce47vAAHpqqtA5Ndeu0sGaFWJeA5Ndeu0sGab(GGvELTPUWx4EfFPkyb3p1rciDUZZxD(mQOLs0uln0nNsGVxM2nu4qfv4Die)QzLMAeG7yJGxnM2qHHjbd355hkiuyysGwEJUGqB3u4oFmBVKXMnbEqwf02J8bA5oBUtsGa3ztl)QzLMAeG7yJG3HdvuXgkmmj0kFx4EL8j5D4q5vgA5nGla0Y39lyiFdUMhd5BS4WHYR4nX9n4Xq(glPb3u4BR4ADUrWz0GmQOLs0uln0nNsGaFAPktCA57(fmKVbJuEmKVXIdhkVIpE1fEmKVXsAWnf(2kUwNBeCgnixurHjbJMAzIxcQtGaVtvthuEfT8gWfaA51dIra(uxxiWNwQYeNwEOPUWRheJa86bXiaFQRleiWdHcdtc0Ypusurb8qnLop0ux4LOIc4n6ccTDtH78XS9sgB289rWbLxXNSLjWlrffWRT3J6(gkn1QfexVPMAPrxxqinMFyKfJUGqB3u4AE8Hb8ZL4vx4HAkDc8iVRtlp4qIcOLFoqqrlbc84iNXqlVPuyiHpg5AtUmYCtGFyKfCKZy4A(Ghj0YphiOOLab(uhouEfT8ZbckAjqGxpQo4qIcOLFoqqrlbc89knTWhiOjT8ZbckAjqGp4WfA5Ndeu0sGab(GGvELTPUWx4EfFPkyb3p1rciDUZZpuqOWWKaT8gDbH2UPWD(y2EjJnBc8vNpJkAPen1sdDZPe0uRi4X9iFGwUZM7Ke4vJPnuyysWWDE(EzA3qHdvuH3Hq8GSkOTh5d0YD2CNKabUtGwEhourfBOWWKqR8DH7vYNKhcfgMeOLVxbbhkVIpr5YCh5m4hkjQOaEOMsNVpcoO8k(KTmbEjQOaETJ7cyIrtT0oUtHjDn1sJUUGqAm)WilgDbH2UPW18dJS0RGGdLxX18qtDHxIkkG3Oli02nfUJizersEE8Hb8ZL4vx4HAkDc8iVRtlp4qIcOLFoqqrlbc8dJSGJCgdxZhC4cT8ZbckAjqGp1HdLxrl)CGGIwce41JQdoKOaA5Ndeu0sGapoYzm0YBkfgs4JrU2KlJm3e47vAAHpqqtA5Ndeu0sGaFWJeA5Ndeu0sGab(GGvELTPUWx4EfFPkyb3p1rciDUZZ7u10bLxrlVbCbGwE9GyeGp11fc8PLQmXPLhAQl86bXiaVEqmcWN66cbc89Y0UHchQOcVdH4RoF7B0XKPOa(vZkn1ia3ReZi4vJPnuyysWWDE(HccfgMeOLVxbbhkVIpr5YCh5m4n6ccTDtH7isgrKKNapiRcA7r(aTCNn3jjqG7etlFVmTBOWHkQW7qi(HccfgMeOLVxbbhkVIpr5YCh5m4n6ccTDtH7isgrKKNaVdhQOInuyysOv(UW9k5tY7WHYRm0YBaxaOLV7xWq(gCnpgY3yjn4McFBfxRZncoJg0(gDmzkkGhd5BS4WHYR4nX9niWNwQYeNw(UFbd5BWiLhd5BSKgCtHVTIR15gbNrdAFJoMmffWJH8nwC4q5v8XRUqGapekmmjqlFVccouEfFIYL5oYzWpusurb8qnLoFFeCq5v8jBzc8surb8Ah3fWeJMAPDCNct6AQLgDDbH0y(Hrwm6ccTDtHR5hgzPxbbhkVIR5HM6cVevuaVrxqOTBkChrYiIK884dd4NlXRUWd1u6e4rExNwEWHefql)CGGIwce4XroJHwEtPWqcFmY1MCzK5Ma)Wil4iNXW18bpsOLFoqqrlbc8PoCO8kA5Ndeu0sGaVEuDWHefql)CGGIwce47vAAHpqqtA5Ndeu0sGaFWHl0YphiOOLabc8bbR8kBtDHVW9k(svWcUFQJeq6CNNV68TVrhtMIc0uRy5DQA6GYROL3aUaqlVEqmcWN66cb(0svM40Ydn1fE9GyeGxpigb4tDDHabE1yAdfgMemCNNF1SstncW9kXmcEqwf02J8bA5oBUtsGa3rcT89Y0UHchQOcVdH4hkiuyysGw(EfeCO8k(eLlZDKZG3Oli02nfUJiFSjoHiiW7WHkQydfgMeALVlCVs(K8oCO8kdT8gWfaA5n(HQVO7G48zQajK6WLwmxVNLY0ITvCTo3i4mTym8nKqUrWzAL0lxlE)q1nTOg6TXOLEmmEJFO68AQf(Wa(jF3Vy8dvNRjqGhcfgMeOLhAQl8surb8dLevuaputPZ3hbhuEfFYwMaVevuaV2XDbmXOPwAh3PWKUMAPrxxqinMFyKfJUGqB3u4A(Hrw6vqWHYR4A(EfeCO8k(eLlZDKZG3Oli02nfUJiFSjoHi4XhgWpxIxDHhQP0jWJ8UoT8GdjkGw(5abfTeiWJJCgdT8MsHHe(yKRn5YiZnb(HrwWroJHR5dEKql)CGGIwce4tD4q5v0YphiOOLabE9O6GdjkGw(5abfTeiW3R00cFGGM0YphiOOLab(GdxOLFoqqrlbce4dcw5v2M6cFH7v8LQGfC)uhjG05opF151qVng8QX0gkmmjy4op)QzLMAeG7yJG3PQPdkVIwEd4caT86bXiaFQRle4tlvzItlp0ux41dIraE9GyeGp11fce4bzvqBpYhOL7S5ojbcC3E0YpuqOWWKaT89ki4q5v8jkxM7iNbVrxqOTBkChr(ytCcrqG3HdvuXgkmmj0kFx4EL8j5HqHHjbA5HM6cVevua)qjrffWd1u689rWbLxXNSLjWlrffWRDCxatmAQL2XDkmPRPwA01fesJ5hgzXOli02nfUMFyKLEfeCO8kUMVxbbhkVIpr5YCh5m4XhgWpxIxDHhQP05n6ccTDtH7iYhBIticc8iVRtlp4qIcOLFoqqrlbc8dJSGJCgdxZhC4cT8ZbckAjqGp1HdLxrl)CGGIwce41JQdoKOaA5Ndeu0sGapoYzm0YBkfgs4JrU2KlJm3e47vAAHpqqtA5Ndeu0sGaFWJeA5Ndeu0sGab(GGvELTPUWx4EfFPkyb3p1rciDUZZ7WHYRm0YBaxaOLV7xWq(gCnpgY3yjn4McFBfxRZncoJgOHEBm4Xq(gloCO8kEtCFdc8PLQmXPLV7xWq(gms5Xq(glPb3u4BR4ADUrWz0an0BJbpgY3yXHdLxXhV6cbc8RMvAQraUJnc(QZRHEBm0uRi47LPDdfourfEhcXRgtBOWWKGH788ovnDq5v0YBaxaOLxpigb4tDDHaFAPktCA5HM6cVEqmcWRheJa8PUUqGapiRcA7r(aTCNn3jjqG7yslFVmTBOWHkQW7qi(HccfgMeOLVxbbhkVIpr5YCh5m4n6ccTDtH7eInXjtsG3HdvuXgkmmj0kFx4EL8j5HqHHjbA57vqWHYR4tuUm3rod(HsIkkGhQP057JGdkVIpzltGxIkkGx74UaMy0ulTJ7uysxtT0ORliKgZpmYIrxqOTBkCn)Wil9ki4q5vCnp0ux4LOIc4n6ccTDtH7eInXjtYJpmGFUeV6cputPtGh5DDA5bhsuaT8ZbckAjqGFyKfCKZy4A(GdxOLFoqqrlbc84iNXqlVPuyiHpg5AtUmYCtGxpQo4qIcOLFoqqrlbc8PoCO8kA5Ndeu0sGaFVstl8bcAsl)CGGIwce4dEKql)CGGIwceiWheSYRSn1f(c3R4lvbl4(PosaPZDEEhouELHwEd4caT8g)q1x0DqC(mvGesD4slMR3ZszAX2kUwNBeCMwmg(gsi3i4mTs6LRfVFO6Mw8zzBHw6XW4n(HQZRPw4dd4N8D)IXpuDUMab(QZFVTf4xnR0uJaChZi4vJPnuyysWWDEENQMoO8kA5nGla0YRheJa8PUUqGpTuLjoT8qtDHxpigb41dIra(uxxiqGhKvbT9iFGwUZM7KeiWD(K0Y7WHkQydfgMeALVlCVs(K8oCO8kdT8gWfaA57(fmKVbxZJH8nwsdUPW3wX16CJGZOb3BBbEmKVXIdhkVI3e33GaFAPktCA57(fmKVbJuEmKVXsAWnf(2kUwNBeCgn4EBlWJH8nwC4q5v8XRUqGapekmmjqlFVccouEfFIYL5oYzWpusurb8qnLoFFeCq5v8jBzc8surb8Ah3fWeJMAPDCNct6AQLgDDbH0y(Hrwm6ccTDtHR5hgzPxbbhkVIR5HM6cVevuaVrxqOTBkCNqSjozsE8Hb8ZL4vx4HAkDc8iVRtlp4qIcOLFoqqrlbc8dJSGJCgdxZh8iHw(5abfTeiWJJCgdT8MsHHe(yKRn5YiZnbE9O6GdjkGw(5abfTeiWN6WHYROLFoqqrlbc89knTWhiOjT8ZbckAjqGp4WfA5Ndeu0sGab(GGvELTPUWx4EfFPkyb3p1rciDUZZ7u10bLxrlVbCbGwE9GyeGp11fc8PLQmXPLhAQl86bXiaVEqmcWN66cbc8vN)EBlOPwrWpuqOWWKaT89ki4q5v8jkxM7iNbVrxqOTBkCNqSjozsc84EKpql3XYDsUZM7Ke47LPDdfourfEhcXRgtBOWWKGH788RMvAQraUJze8GSkOTh5d0YD2CNKabUZNNw(HccfgMeOLVxbbhkVIpr5YCh5m4n6ccTDtH7isCcrsSe4D4qfvSHcdtcTY3fUxjFsEiuyysGw(EfeCO8k(eLlZDKZGVpcoO8k(KTmb(Hrw6vqWHYR4AEJUGqB3u4oIeNqKelp0ux4LOIc4hkjQOaEOMsNFyKftCFJSuCnVevuaV2EpQ7BO0uRwqC9MAQLgDDbH0y(G4qxxqOTBk8A7vgbp4GYR4hgzXOli02nfUM3e33ilfVjUVrwkT9Eu33qXpmYYqvaxZJpmGFUeV6cputPtGh5DDA5bhsuaT8ZbckAjqGFyKfCKZy4A(Ghj0YphiOOLabECKZyOL3ukmKWhJCTjxgzUjWRhvhCirb0YphiOOLab(uhouEfT8ZbckAjqGVxPPf(abnPLFoqqrlbc8bhUql)CGGIwceiWheSYRSn1f(c3R4lvbl4(PosaPZDE(MzLMAeG7vsC28vNxBVYi4bhuELMAfPOsHX7u10bLxrlVbCbGwE9GyeGp11fc8PLQmXPLhAQl86bXiaVEqmcWN66cbc89Y0UHchQOcVdH4vJPnuyysWWDE(vZkn1ia3XgbpiRcA7r(aTCNn3jjqG78rqlFVmTBOWHkQW7qi(MzLMAeG7vsC28oCOIk2qHHjHw57c3RKpjpekmmjqlp0ux4LOIc4hkjQOaEOMsNVpcoO8k(KTmbEjQOaET9Eu33qPPwTG46n1uln66ccPX8dJSy0feA7McxZpmYsVccouEfxZ3RGGdLxXNOCzUJCg8gDbH2UPWDejoHijwE8Hb8ZL4vx4HAkDc8iVRtlp4qIcOLFoqqrlbc8dJSGJCgdxZhC4cT8ZbckAjqGhh5mgA5nLcdj8XixBYLrMBc86r1bhsuaT8ZbckAjqGp1HdLxrl)CGGIwce47vAAHpqqtA5Ndeu0sGaFWJeA5Ndeu0sGab(GGvELTPUWx4EfFPkyb3p1rciDUZZ7WHYRm0YBaxaOLV7xWq(gCnpgY3yXHdLxXBI7BWJH8nwsdUPW3wX16CJGZObA7vgbp4GYR0uRifvkmc8PLQmXPLV7xWq(gms5Xq(gloCO8k(4vx4Xq(glPb3u4BR4ADUrWz0aT9kJGhCq5vAQvKIkfgbc8RMvAQraUJnc(QZRTxze8GdkVstTIuuPW0uRi4X9iFGwUJL7KCNn3jjWRgtBOWWKGH788ovnDq5v0YBaxaOLxpigb4tDDHaFAPktCA5HM6cVEqmcWRheJa8PUUqGa)qbHcdtc0Y3RGGdLxXNOCzUJCg8gDbH2UPWDejoHijwc8GSkOTh5d0YD2CNKabUZhlT89Y0UHchQOcVdH4BMvAQraUxjXzZ7WHkQydfgMeALVlCVs(K8qOWWKaT89ki4q5v8jkxM7iNbFFeCq5v8jBzc8dJS0RGGdLxX18dJSmufW18gDbH2UPWDcXMqmtGhAQl8surb8dLevuaputPZpmYIjUVrwkUMxIkkGx74UaMy0ulTJ7uysxtT0ORliKgZheh66ccTDtHxBVYi4bhuEf)WilgDbH2UPW18M4(gzP4nX9nYsPT3J6(gkE8Hb8ZL4vx4HAkDc8iVRtlp4qIcOLFoqqrlbc8dJSGJCgdxZhC4cT8ZbckAjqGhh5mgA5nLcdj8XixBYLrMBc86r1bhsuaT8ZbckAjqGp1HdLxrl)CGGIwce47vAAHpqqtA5Ndeu0sGaFWJeA5Ndeu0sGab(GGvELTPUWx4EfFPkyb3p1rciDUZZVAwPPgb4ELyJGV68AOBoLaVAmTHcdtcgUZZ7u10bLxrlVbCbGwE9GyeGp11fc8PLQmXPLhAQl86bXiaVEqmcWN66cbc8dfekmmjqlFVccouEfFIYL5oYzWB0feA7Mc3jeBcXmbc8GSkOTh5d0YD2CNKabUZNnT8nZkn1ia3RK4S5D4qfvSHcdtcTY3fUxjFsEhouELHwEd4caT8D)cgY3GR5Xq(gloCO8kEtCFdEmKVXsAWnf(2kUwNBeCgnqdDZPeiWNwQYeNw(UFbd5BWiLhd5BS4WHYR4JxDHhd5BSKgCtHVTIR15gbNrd0q3Ckbce4HqHHjbA57vqWHYR4tuUm3rod((i4GYR4t2Ye4hgzPxbbhkVIR5n6ccTDtH7eInHyMap0ux4LOIc4hkjQOaEOMsNFyKftCFJSuCnVevuaV2XDbmXOPwAh3PWKUMAPrxxqinMpio01feA7McV2ELrWdoO8k(Hrwm6ccTDtHR5nX9nYsXBI7BKLsBVh19nu8dJSmufW184dd4NlXRUWd1u6e4rExNwEWHefql)CGGIwce4hgzbh5mgUMp4rcT8ZbckAjqGhh5mgA5nLcdj8XixBYLrMBc86r1bhsuaT8ZbckAjqGp1HdLxrl)CGGIwce47vAAHpqqtA5Ndeu0sGaFWHl0YphiOOLabc8bbR8kBtDHVW9k(svWcUFQJeq6CNN3PQPdkVIwEd4caT86bXiaFQRle4tlvzItlp0ux41dIraE9GyeGp11fce4hkiuyysGw(EfeCO8k(eLlZDKZG3Oli02nfUti2eIzce4RoVg6MtjOPwrW3lt7gkCOIk8oeIxnM2qHHjbd355xnR0uJaCVsSrWJ7r(aTCNn3jjWdYQG2EKpql3zZDsce4oFc0YVAwPPgb4ELyJGVzwPPgb4ELeNnVdhQOInuyysOv(UW9k5tYdHcdtc0Y3RGGdLxXNOCzUJCg89rWbLxXNSLjWpmYsVccouEfxZB0feA7Mc3rKm7K5Jjp0ux4LOIc4hkjQOaEOMsNFyKftCFJSuCnVevuaV2XDbmXOPwAh3PWKUMAPrxxqinMpio01feA7McV2ELrWdoO8k(Hrwm6ccTDtHR5nX9nYsXBI7BKLsBVh19nu8dJSmufW184dd4NlXRUWd1u6e4rExNwEWHefql)CGGIwce4hgzbh5mgUMp4rcT8ZbckAjqGhh5mgA5nLcdj8XixBYLrMBc86r1bhsuaT8ZbckAjqGp1HdLxrl)CGGIwce47vAAHpqqtA5Ndeu0sGaFWHl0YphiOOLabc8bbR8kBtDHVW9k(svWcUFQJeq6CNN3PQPdkVIwEd4caT86bXiaFQRle4tlvzItlp0ux41dIraE9GyeGp11fce4Ro)1lLQPMAPHU5uc89Y0UHchQOcVdH4vJPnuyysWWDE(HccfgMeOLVxbbhkVIpr5YCh5m4n6ccTDtH7isMDY8XKapiRcA7r(aTCNn3jjqG78jMw(EzA3qHdvuH3Hq8dfekmmjqlFVccouEfFIYL5oYzWB0feA7Mc3rKm7K5JjbEhourfBOWWKqR8DH7vYNK3PQPdkVIwEd4caT86bXiaFQRle4tlvzItlp0ux41dIraE9GyeGp11fce4HqHHjbA57vqWHYR4tuUm3rod((i4GYR4t2Ye4hgzPxbbhkVIR5hgzzOkGR5n6ccTDtH7isMDY8XKhAQl8surb8dLevuaputPZpmYIjUVrwkUMxIkkGx74UaMy0ulTJ7uysxtT0ORliKgZheh66ccTDtHxBVYi4bhuEf)WilgDbH2UPW18M4(gzP4nX9nYsPT3J6(gkE8Hb8ZL4vx4HAkDc8iVRtlp4qIcOLFoqqrlbc8dJSGJCgdxZhC4cT8ZbckAjqGhh5mgA5nLcdj8XixBYLrMBc86r1bhsuaT8ZbckAjqGp1HdLxrl)CGGIwce47vAAHpqqtA5Ndeu0sGaFWJeA5Ndeu0sGab(GGvELTPUWx4EfFPkyb3p1rciDUZZ7WHYRm0YBaxaOLV7xWq(gCnpgY3yjn4McFBfxRZncoJgC9sPAQPwAOBoLapgY3yXHdLxXBI7BqGpTuLjoT8D)cgY3GrkpgY3yjn4McFBfxRZncoJgOHU5uc8yiFJfhouEfF8QleiWVAwPPgby7FLyMmzKKV9IizKKD7fj5BViIGPRKD7XxD(Rxkvtn1sdDZPe0uRi4X9iFGwUZM7Ke4vJPnuyysWWDE(MzLMAeGT)vYoHKXM4KXgZiIi2yJKijMjMPRKDI5bzvqBpYhOL7S5ojbce4JYD(SJipbsa \ No newline at end of file diff --git a/WA codes/Prot pala CDS (WA CODE).txt b/WA codes/Prot pala CDS (WA CODE).txt new file mode 100644 index 0000000..3cbd014 --- /dev/null +++ b/WA codes/Prot pala CDS (WA CODE).txt @@ -0,0 +1 @@ +dWuYLbqisurTisKUKKs4tskrJssLoLKkMLscULssTlLi9lLi0WiHJrfTmQu9mQumnLuxtcITrIQ(MsunoLGoNKQ06usO3rIkY8KufCpjvrhuu0cLqpucmrLeDrLaBuuOpsIk1ivIYjLuvRujjVujcMjjk3usP2jr(PKIHQeAPkr0tbtvWvLG0wLuf6RskP9I(lvYGjPdl0Iff8yjAYk6Yu2SK8zIA0qPtl1QPsjVwcQzd52k1Uj8BsnCr1XjrLSCQ65ImDvxxHTtf(oumEseNxuA9uPuZNevy)q10jdeImWtirW9L6MLUCcBctctgii71yiSK1x5EzbcZo5wdr5BhgHicriBnvvj7uA1U7ubHy5BhwW3YYMV26PrPv7ubHKHQwu3ItqzliJbcyTwg7zgleL396DD9QOExV29LVWcX9fYQvVE5eq64KbcpImXzGWEGEZappHzxv1Ld0ZYaH9a9MbEEc(yPXaH9a9MbEEcvXY3Abde2d0Bg45jK7i)rKjode2d0Bg45j41iJbc7b6nd88egjZvjkMsmd8e8MCRfHS5gHzwrC3LYE9iNGPK8OyAtMbc9KGYzLZkNlNjckPMQQKDkTANUxieeJDW3YYMprjNeW0ZJLzCD9U8fwilSEDUWLVETcLFTcwT61UZtOKbk5KbcXY3oSGVLLnFT1tJsR2Pcc33YYMNbcpBUri94hjcdH5WeNqCCnHrYCLWQXuJGfjyomXjuGwJMAmcC1f9AzVLs4Q1fYneQoe8web5gcjf3gHfK1Wv1v4QHSEcJK5kLBiKuCBSiHewnMAeesy1yQruGwJMAmccLJ01Bxy7Pr492Mes5gcjf3gLCxr96Uc35jG1AzSNsRvqaPJtgi8iYeNbc7b6nd88eMDvvxoqplde2d0Bg45j41iJbc7b6nd88eYDK)iYeNbc7b6nd88eQILV1cgiShO3mWZtWhlngiShO3mWZZtOslo0UTrPL7obVj3AriBUrOl1ccZo5wdr5BhgHicrOuRrtngblsOf9DvQ35i72Ksojef9o(wlyGq6r)zGqU3s2jKq90qw15ju1IoHLbcpBUri3Bj7eY9wYoHQ4045j0tcliRHRQRWvdz94QfSscX5SFRfrKR7BzzZNyGNGySd(ww28jk5KaMEESuATccTWH5tglsyAP4h(4nwKWnL8c0iTNbk5gkPGsRPKcEEk5odeMDYTgIY3omcreIqS8Tdl4BzzZxB90O0QDQGqu074BTGbcPh9Nbc5ElzNqc1tdzvNNqvl6ewgiK7TKDcvXPr4zZnc5ElzNNNW9TSS5zGWZMBesp(rIWqyomXjehxtyKmxjSAm1iyrcMdtCcfO1OPgJaxDrVw2BPeUADHCdHQdbVfrqUHqsXTrit)0ehxDLwLjMMNWizUs5gcjf3glsiHvJPgbHewnMAefO1OPgJGqk3qiP42OKBCUWcrbHYr66TlS90i8EBtEcyTwg7P0Afeq64KbcpImXzGWEGEZappHzxv1Ld0ZYaH9a9MbEEc(yPXaH9a9MbEEc5oYFezIZaH9a9MbEEcEnYyGWEGEZappHQy5BTGbc7b6nd888eQ0IdTBBuA5UtWBYTweYMBe6sTGql67QuVZr2TjLCsioN9BTiICDFllB(eduYjdeUVLLnpdeE2CJqC4JesJmyomXHrvvRecUkiti4cczUKbcLJ01Bxy7Pr492Me0ye1iqzzrcMdtCclZIOJLGiUTeduYjHm9ttCC1vAvMyAEEcPCdHQ)mXaLCsj34CHfIcEcTWH5tglsinYG5WeFrVv1kHaS4cuMYime9jKJIznpHPLHrvviBUryzlqzlMXcvz8egI7BzzZZapppHEsit)0ehxDLwLjMMhxTGvsOfomFYyrcy65XsP1kiig7GVLLnFIsUtyAP4h(4nwKqPwJMAmcwKWnL8c0iTNbk5gkPGsRPKcEEk5ggielF7Wc(ww281wpnkTANkiCFllBEgiOXiQrGYYIeeXTLyGsojKPFAIJRUsRYetZZtiLBiu9NjgOKtk5gNlSquWtOCKUE7cBpncV32KNawRLXEkTwbbKoozGWJitCgiShO3mWZty2vvD5a9SmqypqVzGNNGxJmgiShO3mWZti3r(JitCgiShO3mWZtWhlngiShO3mWZtOkw(wlyGWEGEZapppHkT4q72gLwU7e8MCRfHS5gHUulielFRfjgiKE0Fgim1UKrAmSibzKgJRkFCBeQvlw4mh(yAfZ0pnXXvxPvzIP5XvZKWu7QCKUEZmqqgPX4kw(wliKWQXWZtOuRrtngblsOf9DvQ35i72Ksojef9o(wlyGq6r)zGqU3s2jKq90qw15ju1IoHLbcpBUri3Bj7eY9wYoHQ4045j0tcz6NM44QR0QmX084QzsioN9BTiICDFllB(ed8eeJDW3YYMprjNeMDYTgIY3omcreIaMEESuATcc3uYlqJ0EgOKBOKckTMsk45P0AgielF7Wc(ww281wpnkTANkiCFllBEgi8S5gH0JFKimeMdtCcXX1egjZvcRgtncwKG5WeNqbAnAQXiWvx0RL9wkHRwxi3qO6qWBreKBiKuCBeuUhr)SJcCvDfUAMIY2ehxDj0c5eHrYCLYneskUnwKqcRgtnccjSAm1ikqRrtngbHuUHqsXTrPfQ8kFHuVekhPR3UW2tJW7Tn5jmTu8dF8glsaR1YypLwRGashNmq4rKjode2d0Bg45jm7QQUCGEwgiShO3mWZtWRrgde2d0Bg45jK7i)rKjode2d0Bg45j4JLgde2d0Bg45juflFRfmqypqVzGNNNqLwCODBJsl3DcEtU1Iq2CJqxQfek1A0uJrWIeArFxL6DoYUnPKtcrrVJV1cgiKE0FgiK7TKDcjupnKvDEcvTOtyzGWZMBeY9wYoHCVLStOkonEEc9KGY9i6NDuGRQRWvpwdxntrzBIJRUeAHCcxTGvsioN9BTiICDFllB(eduYjdeUVLLnpdeE2CJqC4JesJmyomXHrvvRecUkiti4cczUKbcLJ01Bxy7Pr492Me0ye1iqzzrcMdtCclZIOJLGiUTeduYjbL7r0p7OaxvxHRMPOSnXXvxcTqoXtiLBiu9NjgOKtkTqLx5lK6LNqlCy(KXIesJmyomXx0BvTsialUaLPmcdrFc5OywZtyAzyuvfYMBew2cu2IzSqvgpHH4(ww28mWZZtqm2bFllB(eLCNWStU1qu(2HriIqeAHdZNmwKaMEESuATcc3uYlqJ0EgOKBOKckTMsk45PuHWaHy5BhwW3YYMV26PrPv7ubH7BzzZZabngrncuwwKGiUTeduYjbL7r0p7OaxvxHRMPOSnXXvxcTqoXtiLBiu9NjgOKtkTqLx5lK6LNq5iD92f2EAeEVTjpbSwlJ9uATcciDCYaHhrM4mqypqVzGNNWSRQ6Yb6zzGWEGEZappbFS0yGWEGEZappHCh5pImXzGWEGEZappbVgzmqypqVzGNNqvS8TwWaH9a9MbEEEcvAXH2TnkTC3j4n5wlczZncDPwqik6D8TwWaH0J(ZaHCVLStiH6PHSQZtOQfDcldeY9wYoHQ40i8S5gHCVLSZZtOf9DvQ35i72KsojeNZ(TwerUUVLLnFIbEcy65XsP1ki0tck3JOF2rbUQUcx9ynC1mfLTjoU6sOfYjC1mjelFRfjgiKE0Fgim1UKrAmSibzKgJRkFCBeQvlw4mh(yAfvUhr)SJcCvDfU6XA4QzkkBtCC1LqlKt4QzsqgPX4kw(wliKWQXWZtqm2bFllB(eLCsy2j3AikF7WiericLAnAQXiyrc3uYlqJ0EgOKBOKckTMsk45PKYZaHy5BhwW3YYMV26PrPv7ubH7BzzZZaHNn3iKE8JeHHWCyItioUMWizUsy1yQrWIemhM4ekqRrtngbU6IETS3sjC16c5gcvhcElIGCdHKIBJqrKLsTqgxvxHRcXsFx1LgHrYCLYneskUnwKqcRgtnccjSAm1ikqRrtngbHuUHqsXTrjLVExRGq5iD92f2EAeEVTjpbSwlJ9uATcciDCYaHhrM4mqypqVzGNNWSRQ6Yb6zzGWEGEZappbFS0yGWEGEZappHCh5pImXzGWEGEZappbVgzmqypqVzGNNqvS8TwWaH9a9MbEEEcvAXH2TnkTC3j4n5wlczZncDPwqik6D8TwWaH0J(ZaHCVLStiH6PHSQZtOQfDcldeY9wYoHQ40i8S5gHCVLSZZtOf9DvQ35i72KsojmTu8dF8glsONekISuQfY4Q6kCviw67QU0WvlyLeIZz)wlIix33YYMpXaLCYaH7BzzZZaHNn3ieh(iH0idMdtCyuv1kHGRcYecUGqMlzGGiUnxTOstihfZA(ebngrncuwwKG5WeNWYSi6yjiIBlXaLCsOiYsPwiJRQRWvHyPVR6sJNqk3qO6ptmqjNus5R31k4juosxVDHTNgH3BBsOfomFYyrcdrFc5OywZtyKmxPCRSR6sxdrFMbcPrgmhM4l6TQwjeGfxGYugHPLHrvviBUryzlqzlMXcvz8egI7BzzZZapppHw4W8jJfjm7KBneLVDyeIiebXyh8TSS5tuYDcy65XsP1kiuQ1OPgJGfjCtjVans7zGsUHskO0AkPGNNslNbcXY3oSGVLLnFT1tJsR2PccXY3ArIbcPh9NbctTlzKgdlsqgPX4QYh3gHA1IfoZHpMwXIilLAHmUQUcxfIL(UQlnC1mjm1UkhPR3mdeKrAmUILV1ccjSAm88eUVLLnpdeeXTLyGsojuezPulKXv1v4QqS03vDPXtqJruJaLLfjiIBZvlQ0eYrXSMpriLBiu9NjgOKtkP817Af8egjZvk3k7QU01q0NzGq5iD92f2EAeEVTjpbSwlJ9uATcciDCYaHhrM4mqypqVzGNNWSRQ6Yb6zzGWEGEZappbVgzmqypqVzGNNqUJ8hrM4mqypqVzGNNGpwAmqypqVzGNNqvS8TwWaH9a9MbEEEcvAXH2TnkTC3j4n5wlczZncDPwqy2j3AikF7WiericLAnAQXiyrcTOVRs9ohz3MuYjH4C2V1IiY19TSS5tmWtONekISuQfY4Q6kCviw67QU0WvZKGySd(ww28jk5KaMEESuATccrrVJV1cgiKE0FgiK7TKDcjupnKvDEcvTOtyzGWZMBeY9wYoHCVLStOkonEEc3uYlqJ0EgOKBOKckTMsk45P0czGWStU1qu(2HriIqeILVDybFllB(ARNgLwTtfeUVLLnpdeE2CJq6XpsegcZHjoH44AcJK5kHvJPgblsWCyItOaTgn1ye4Ql61YElLWvRlKBiuDi4TicYneskUncfrwk1czCvDfUkKBieMOF2czcJK5kLBiKuCBSiHewnMAeesy1yQruGwJMAmccLJ01Bxy7Pr492Mes5gcjf3gLCxXAfoxipHPLIF4J3yrcyTwg7P0Afeq64KbcpImXzGWEGEZappHzxv1Ld0ZYaH9a9MbEEcEnYyGWEGEZappHCh5pImXzGWEGEZappbFS0yGWEGEZappHQy5BTGbc7b6nd888eQ0IdTBBuA5UtWBYTweYMBe6sTGqPwJMAmcwKql67QuVZr2TjLCsONekISuQfY4Q6kCvi3qimr)SfY4QfSscX5SFRfrKR7BzzZNyGsozGW9TSS5zGG32euSuNesJmyomXHrvvRecUkiti4cczUKbcJKTK2MfjOXiQrGYYIemhM4ewMfrhlbrCBjgOKtcfrwk1czCvDfUkKBieMOF2czEcPrgmhM4l6TQwjeGfxGYugHNn3ieh(iHuUHq1FMyGsoPK7kwRW5c5j4TDn5MpETNq9abrCBUArLMqokM18jcdrFcYE9iNW0YWOQkKn3iSSfOSfZyHQmEcdX9TSS5zGNNNGySd(ww28jk5oHw4W8jJfjGPNhlLwRGqu074BTGbcPh9Nbc5ElzNqc1tdzvNNqvl6ewgi8S5gHCVLSti3Bj7eQItJNNWnL8c0iTNbk5gkPGsRPKcEEkvVmqiw(2Hf8TSS5RTEAuA1ovq4(ww28mqqJruJaLLfjiIBZvlQ0eYrXSMpryi6tq2Rh5es5gcv)zIbk5KsURyTcNlKNGiUTeduYjHIilLAHmUQUcxfYnect0pBHmpHYr66TlS90i8EBtEcyTwg7P0Afeq64KbcpImXzGWEGEZappHzxv1Ld0ZYaH9a9MbEEc(yPXaH9a9MbEEc5oYFezIZaH9a9MbEEcEnYyGWEGEZappHQy5BTGbc7b6nd888eQ0IdTBBuA5UtWBYTweYMBe6sTGql67QuVZr2TjLCsik6D8TwWaH0J(ZaHCVLStiH6PHSQZtOQfDcldeY9wYoHQ40i8S5gHCVLSZZty2j3AikF7Wieric9KqrKLsTqgxvxHRc5gcHj6NTqgxntcX5SFRfrKR7BzzZNyGNaMEESuATccIXo4BzzZNOKtcXY3ArIbcPh9NbctTlzKgdlsqgPX4QYh3gHA1IfoZHpMwXIilLAHmUQUcxfYnect0pBHmUAMeKrAmUILV1ccjSAm88ek1A0uJrWIeUPKxGgP9mqj3qjfuAnLuWZtjNkyGqS8Tdl4BzzZxB90O0QDQGW9TSS5zGWZMBesp(rIWqyomXjehxtyKmxjSAm1iyrcMdtCcfO1OPgJaxDrVw2BPeUADHCdHQdbVfrqUHqsXTrithMqUfY4Q1QpESegjZvk3qiP42yrcjSAm1iiKWQXuJOaTgn1yees5gcjf3gLCJZfUW1ekhPR3UW2tJW7Tn5jG1AzSNsRvqaPJtgi8iYeNbc7b6nd88eMDvvxoqplde2d0Bg45j4JLgde2d0Bg45jK7i)rKjode2d0Bg45j41iJbc7b6nd88eQILV1cgiShO3mWZZtOslo0UTrPL7obVj3AriBUrOl1cctlf)WhVXIeArFxL6DoYUnPKtcrrVJV1cgiKE0FgiK7TKDcjupnKvDEcvTOtyzGqU3s2jufNgHNn3iK7TKDEEcZo5wdr5BhgHicrONeY0HjKBHmUAT6JhlUAbRKqCo73Are56(ww28jgOKtgiCFllBEgi8S5gH4WhjKgzWCyIdJQQwjeCvqMqWfeYCjdekhPR3UW2tJW7TnjOXiQrGYYIemhM4ewMfrhlbrCBjgOKtcz6WeYTqgxTw9XJLNqk3qO6ptmqjNuYnox4cxZtOfomFYyrcPrgmhM4l6TQwjeGfxGYugHHOpHCumR5jmTmmQQczZnclBbkBXmwOkJNWqCFllBEg455j0chMpzSibm98yP0AfeeJDW3YYMprj3juQ1OPgJGfjCtjVans7zGsUHskO0AkPGNNsoDYaHy5BhwW3YYMV26PrPv7ubHOO3X3Abdesp6pdeY9wYoHeQNgYQopHQw0jSmq4zZnc5ElzNqU3s2jufNgppH7BzzZZabngrncuwwKGiUTeduYjHmDyc5wiJRwR(4XYtiLBiu9NjgOKtk5gNlCHR5juosxVDHTNgH3BBYtaR1YypLwRGashNmq4rKjode2d0Bg45jm7QQUCGEwgiShO3mWZtWRrgde2d0Bg45jK7i)rKjode2d0Bg45j4JLgde2d0Bg45juflFRfmqypqVzGNNNqLwCODBJsl3DcEtU1Iq2CJqxQfek1A0uJrWIeArFxL6DoYUnPKtcXY3ArIbcPh9NbctTlzKgdlsqgPX4QYh3gHA1IfoZHpMwXmDyc5wiJRwR(4XIRMjbzKgJRy5BTGqcRgdppHEsithMqUfY4Q1QpES4Qzsqm2bFllB(eLCsatppwkTwbHzNCRHO8TdJqeHieNZ(TwerUUVLLnFIbEc3uYlqJ0EgOKBOKckTMsk45PKt3zGqS8Tdl4BzzZxB90O0QDQGqu074BTGbcPh9Nbc5ElzNqc1tdzvNNqvl6ewgi8S5gHCVLSti3Bj7eQItJNNW9TSS5zGWZMBesp(rIWqyomXjehxtyKmxjSAm1iyrcMdtCcfO1OPgJaxDrVw2BPeUADHCdHQdbVfrqUHqsXTriZHpIRw7y6MplHrYCLYneskUnwKqcRgtnccjSAm1ikqRrtngbHuUHqsXTrj34CHU7Kq5iD92f2EAeEVTjpHPLIF4J3yrcyTwg7P0Afeq64KbcpImXzGWEGEZappHzxv1Ld0ZYaH9a9MbEEcEnYyGWEGEZappHCh5pImXzGWEGEZappbFS0yGWEGEZappHQy5BTGbc7b6nd888eQ0IdTBBuA5UtWBYTweYMBe6sTGqPwJMAmcwKql67QuVZr2TjLCsONeYC4J4Q1oMU5ZIRwWkjig7GVLLnFIsUtatppwkTwbHzNCRHO8TdJqeHi0chMpzSiH4C2V1IiY19TSS5tmqjNmq4(ww28mq4zZncXHpsinYG5WehgvvTsi4QGmHGliK5sgiOXiQrGYYIemhM4ewMfrhlbrCBjgOKtczo8rC1Aht38z5j0chMpzSiHuUHq1FMyGsoPKBCUq3DYtinYG5WeFrVv1kHaS4cuMYime9jKJIznpHPLHrvviBUryzlqzlMXcvz8egI7BzzZZapppHBk5fOrApduYnusbLwtjf88uYPByGqS8Tdl4BzzZxB90O0QDQGqu074BTGbcPh9Nbc5ElzNqc1tdzvNNqvl6ewgiK7TKDcvXPr4zZnc5ElzNNNW9TSS5zGGgJOgbkllsqe3wIbk5KqMdFexT2X0nFwEcPCdHQ)mXaLCsj34CHU7KNq5iD92f2EAeEVTjpbSwlJ9uATcciDCYaHhrM4mqypqVzGNNWSRQ6Yb6zzGWEGEZappbFS0yGWEGEZappHCh5pImXzGWEGEZappbVgzmqypqVzGNNqvS8TwWaH9a9MbEEEcvAXH2TnkTC3j4n5wlczZncDPwqOf9DvQ35i72KsojeNZ(TwerUUVLLnFIbEc9KqMdFexT2X0nFwC1mj0chMpzSibm98yP0AfeMDYTgIY3omcreIGySd(ww28jk5KqS8TwKyGq6r)zGWu7sgPXWIeKrAmUQ8XTrOwTyHZC4JPvmZHpIRw7y6MplUAMeKrAmUILV1ccjSAm88ek1A0uJrWIeUPKxGgP9mqj3qjfuAnLuWZtjNRzGqS8Tdl4BzzZxB90O0QDQGqu074BTGbcPh9Nbc5ElzNqc1tdzvNNqvl6ewgiK7TKDcvXPr4zZnc5ElzNNNW9TSS5zGWZMBesp(rIWqyomXjehxtyKmxjSAm1iyrcMdtCcfO1OPgJaxDrVw2BPeUADHCdHQdbVfrqUHqsXTriK1xlt4QR0qTdZhfLgHrYCLYneskUnwKqcRgtnccjSAm1ikqRrtngbHuUHqsXTrj3vOq5le3juosxVDHTNgH3BBYtaR1YypLwRGashNmq4rKjode2d0Bg45jm7QQUCGEwgiShO3mWZtWhlngiShO3mWZti3r(JitCgiShO3mWZtWRrgde2d0Bg45juflFRfmqypqVzGNNNqLwCODBJsl3DcEtU1Iq2CJqxQfeMwk(HpEJfj0I(Uk17CKDBsjNeIZz)wlIix33YYMpXaLCYaH7BzzZZaHNn3ieh(iHuUHq1FsWDfku(cXDcPrgmhM4WOQQvcbxfKjeCbHmxYabngrncuwwKG5WeNWYSi6yjKgzWCyIVO3QALqawCbktzegI(eYrXSMNWizUs5gcv)jlsqe3gHqwFTmHRUsd1omFuuAeeXTLyGsojeY6RLjC1vAO2H5JIsJNW0YWOQkKn3iSSfOSfZyHQmcPCdHQ)mXaLCsj3vOq5le35j0chMpzSiHQbcLkJcwKNWqCFllBEg455j0tcHS(AzcxDLgQDy(OO0WvlyLeAHdZNmwKaMEESuATccZo5wdr5BhgHicrqm2bFllB(eLCNqPwJMAmcwKWnL8c0iTNbk5gkPGsRPKcEEk5SqyGqS8Tdl4BzzZxB90O0QDQGqu074BTGbcPh9Nbc5ElzNqc1tdzvNNqvl6ewgi8S5gHCVLSti3Bj7eQItJNNW9TSS5zGqk3qO6pj4UcfkFH4obngrncuwwKGiUTeduYjHqwFTmHRUsd1omFuuA8egjZvk3qO6pzrcI42ieY6RLjC1vAO2H5JIsJqk3qO6ptmqjNuYDfku(cXDEcvdekvgfSiHYr66TlS90i8EBtEcyTwg7P0Afeq64KbcpImXzGWEGEZappHzxv1Ld0ZYaH9a9MbEEcEnYyGWEGEZappHCh5pImXzGWEGEZappbFS0yGWEGEZappHQy5BTGbc7b6nd888eQ0IdTBBuA5UtWBYTweYMBe6sTGql67QuVZr2TjLCsOuRrtngblsiw(wlsmqi9O)mqyQDjJ0yyrcYingxXY3AbHewngcYingxv(42iuRwSWzo8X0kgY6RLjC1vAO2H5JIsdxntEEc9KqiRVwMWvxPHAhMpkknC1mjig7GVLLnFIsojm7KBneLVDyeIieHw4W8jJfjGPNhlLwRGWnL8c0iTNbk5gkPGsRPKcEEk5u5zGqS8Tdl4BzzZxB90O0QDQGqu074BTGbcPh9Nbc5ElzNqc1tdzvNNqvl6ewgi8S5gHCVLSti3Bj7eQItJNNW9TSS5zGWZMBesp(rIWqyomXjehxtyKmxjSAm1iyrcMdtCcfO1OPgJaxDrVw2BPeUADHCdHQdbVfrqUHqsXTryzAuwC1mDyczZtyKmxPCdHKIBJfjKWQXuJGqcRgtnIc0A0uJrqOCKUE7cBpncV32Kqk3qiP42OKtffYcvuV8eMwk(HpEJfjG1AzSNsRvqaPJtgi8iYeNbc7b6nd88eMDvvxoqplde2d0Bg45j41iJbc7b6nd88eYDK)iYeNbc7b6nd88e8XsJbc7b6nd88eQILV1cgiShO3mWZZtOslo0UTrPL7obVj3AriBUrOl1ccLAnAQXiyrcTOVRs9ohz3MuYjH4C2V1IiY19TSS5tmqjNmq4(ww28mq4zZncXHpsinYG5WehgvvTsi4QGmHGliK5sgiOXiQrGYYIemhM4ewMfrhlbrCBjgOKtcltJYIRMPdtiBEEcTWH5tglsiLBiu9NjgOKtk5urHSqf1lpH0idMdt8f9wvRecWIlqzkJWq0NqokM18eMwggvvHS5gHLTaLTygluLXtyiUVLLnpd888eeJDW3YYMprj3jm7KBneLVDyeIieHw4W8jJfjGPNhlLwRGqpjSmnklUAMomHS5XvlyLeUPKxGgP9mqj3qjfuAnLuWZtjNlNbcXY3oSGVLLnFT1tJsR2PccrrVJV1cgiKE0FgiK7TKDcjupnKvDEcvTOtyzGWZMBeY9wYoHCVLStOkonEEc33YYMNbcpBUri94hjcdH5WeNqCCnHrYCLWQXuJGfjyomXjuGwJMAmcC1f9AzVLs4Q1fYneQoe8web5gcjf3gHIX0BTaxvxHRQSwg7jmsMRuUHqsXTXIesy1yQrqiHvJPgrbAnAQXiiKYneskUnk5UI1kCtHqOCKUE7cBpncV32KNawRLXEkTwbbKoozGWJitCgiShO3mWZty2vvD5a9SmqypqVzGNNGpwAmqypqVzGNNqUJ8hrM4mqypqVzGNNGxJmgiShO3mWZtOkw(wlyGWEGEZapppHkT4q72gLwU7e8MCRfHS5gHUulimTu8dF8glsOf9DvQ35i72Ksoj0tcfJP3AbUQUcxvzTm2JRwWkjGPNhlLwRGqCo73Are56(ww28jg4j0chMpzSibXyh8TSS5tuYjHzNCRHO8TdJqeHime33YYMNbcPCdHKIBJsURyTc3ui8ek1A0uJrWIeUPKxGgP9mqj3qjfuAnLuWZtjNlKbcXY3oSGVLLnFT1tJsR2PccrrVJV1cgiKE0FgiK7TKDcjupnKvDEcvTOtyzGqU3s2jufNgHNn3iK7TKDEEc33YYMNbcAmIAeOSSibrCBjgOKtcltJYIRMPdtiBEEcPCdHQ)mXaLCsjNkkKfQOE5juosxVDHTNgH3BBYtaR1YypLwRGashNmq4rKjode2d0Bg45jm7QQUCGEwgiShO3mWZtWhlngiShO3mWZti3r(JitCgiShO3mWZtWRrgde2d0Bg45juflFRfmqypqVzGNNNqLwCODBJsl3DcEtU1Iq2CJqxQfeArFxL6DoYUnPKtc9KWY0OS4Qz6WeYMhxntcy65XsP1ki0chMpzSibXyh8TSS5tuYjHzNCRHO8TdJqeHielFRfjgiKE0Fgim1UKrAmSibzKgJRkFCBeQvlw4mh(yAfxMgLfxnthMq284QzsqgPX4kw(wliKWQXWZtOuRrtngbls4MsEbAK2ZaLCdLuqP1usbppLCwVmqiw(2Hf8TSS5RTEAuA1ovqik6D8TwWaH0J(ZaHCVLStiH6PHSQZtOQfDcldeY9wYoHQ40i8S5gHCVLSZZt4(ww28mqOVTLIBJsox7UtNlNWqyomXjehxtyKmx74lXAZLCimwKWizUsy1yQrWIegjZvFBlf3glsWBreKBiKuCBewMgLfxnthMq28egjZvk3qiP42yrcpBUri94hjcjSAm1iiKWQXuJOaTgn1yees5gcjf3gLCQOqwOI6LG5WeNqbAnAQXiWvx0RL9wkHRw36FBxhcLJ01Bxy7Pr492M8eWATm2tP1kiG0XjdeEezIZaH9a9MbEEcZUQQlhONLbc7b6nd88e8XsJbc7b6nd88eYDK)iYeNbc7b6nd88e8AKXaH9a9MbEEcvXY3Abde2d0Bg455juPfhA32O0YDNG3KBTiKn3i0LAbHPLIF4J3yrcTOVRs9ohz3MuYjHEsyr9XvlyLeW0ZJLsRvqioN9BTiICDFllB(eduYjdeUVLLnpdeE2CJqC4JesJmyomXHrvvRecUkiti4cczUKbcLJ01Bxy7Pr492Me0ye1iqzzrcMdtCclZIOJLqAKbZHj(IERQvcbyXfOmLriLBiu9Njg4j0chMpzSibrCBjgOKtclQFRf4Q6kC1f9AKwiBtC1f1ymppHHOpHCumR5jmTmmQQczZnclBbkBXmwOkJNWqCFllBEg455j0chMpzSibXyh8TSS5tuYDcZo5wdr5BhgHicryiUVLLnpde6BBP42OKZ1U705Y5juQ1OPgJGfjCtjVans7zGsUHskO0AkPGNNsURGbcZo5wdr5BhgHicriw(2Hf8TSS5RTEAuA1ovqik6D8TwWaH0J(ZaHCVLStiH6PHSQZtOQfDcldeE2CJqU3s2jK7TKDcvXPXZt4(ww28mqiLBiu9NeC3961DfkpbngrncuwwKGiUTeduYjHf1V1cCvDfU6IEnslKTjU6IAmMNNWizUs5gcv)jlsiLBiu9NjgOKtk5U71R7kuEEcLJ01Bxy7Pr492MeeXTryr9BTaxvxHRUOxJ0czBIRUOgJ5junqOuzuWI8eWATm2tP1kiG0XjdeEezIZaH9a9MbEEcZUQQlhONLbc7b6nd88e8AKXaH9a9MbEEc5oYFezIZaH9a9MbEEc(yPXaH9a9MbEEcvXY3Abde2d0Bg455juPfhA32O0YDNG3KBTiKn3i0LAbHsTgn1yeSiHw03vPENJSBtk5KqS8TwKyGq6r)zGWu7sgPXWIeKrAmUILV1ccjSAmeKrAmUQ8XTrOwTyHZC4JPvCr9XvZKNNqpjSO(4Qzsqm2bFllB(eLCsatppwkTwbHw4W8jJfjeNZ(TwerUUVLLnFIbEc3uYlqJ0EgOKBOKckTMsk45PK7ozGqS8Tdl4BzzZxB90O0QDQGW9TSS5zGqFBlf3gLuqyimhM4eIJRjmsMRewnMAeSiHYr66TlS90i8EBtcMdtCcfO1OPgJaxDrVw2BPeUADxGY1OZ3M44Qas)6qWBreKBiKuCBekISuQfY4Q6kCvi3qimr)SfYe6BBaPpLC6gcpBUri94hjcJK5QVTLIBJfjKWQXuJGqcRgtnIc0A0uJrqyKmxPCdHKIBJfjmsMR(2gq6ZIes5gcjf3gLCxXAfoxipbSwlJ9uATcciDCYaHhrM4mqypqVzGNNWSRQ6Yb6zzGWEGEZappbFS0yGWEGEZappHCh5pImXzGWEGEZappbVgzmqypqVzGNNqvS8TwWaH9a9MbEEEcvAXH2TnkTC3j4n5wlczZncDPwqyAP4h(4nwKql67QuVZr2TjLCsik6D8TwWaH0J(ZaHCVLStiH6PHSQZtOQfDcldeY9wYoHQ40i8S5gHCVLSZZty2j3AikF7Wieric9KqW3IcBhx1jUAbRKqCo73Are56(ww28jgOKtgiCFllBEgi8S5gHYr66nH0idMdtCyuv1kHGRcYecUGqMlzGG5WeNWYSi6yjKgzWCyIVO3QALqawCbktzes5gcv)zIbEcLJ01Bcvdr5BTOU1bFv4Q4Q4Q4QiDzeHR6WqMiHRwpXvlur)IJQQ6Q0CumR5v6kGRQ06rdzIAzcxnJJp8gUk0YyVsRdUQ2JRQaFv4Q4Q4Q4QiDzeHRAkrJRwpXvlur)IJQQ6Q0CumR5v6kGRQuL1oAHmUAbrFmpwAkTo4QApUQc8vHRIRIRIR2v4QomKjs4Q1Z6jUQsRhnKjQLjC1mo(WB4QqlJ9kfxv7XvnLOXvRN1tCvLQS2rlKXvli6J5XstP4QhRjWv92hEbUAveLmCvdLmCvV9HxGRE)WWvnXeFvMysOCKUE76zZncPh)irOeRvwycJ8z8gbrCBjg4jme9jKJIznpHPLHrvviBUryzlqzlMXcvz8egI7BzzZZapppHw4W8jJfjig7GVLLnFIsUtatppwkTwbHH4(ww28mqOVTbK(uYPB4juQ1OPgJGfjCtjVans7zGsUHskO0AkPGNNsU7odekhPR3btjNq1qu(wlQBDWxfUkUkUkUksxgr4QoIOHHRwpXvtgYkFDDU8vaxTqf9loQQQRsZrXSMxPRaUQsvw7OfY4Qfe9X8yPP06uhCvThxvb(QWvXvXvXv7kCvhr0WWvRhWvDAkpU6XAc8vHRIRIRIRIRIRIRIR6Tp8cCvLQCuMXmQqrgZOcfkfxDPlfxnDFlKxAL2VJVUkTwmxckDfWvDerdBj60CtDuoHVkCvCvCvCvdLm8vHRIRIRIRIRIRIRIR6Tp8cCvLQCuMXmQqrgZOcfkfxDPlfxnDFlKxAL2VJVUkTwSu3RQTsxbCvhr0WwIonLVo4Rcxfxfxfx1et8vzIjHH4(ww28mqOVTbK(uYPB4jelF7Wc(ww281wpnkTANkief9o(wlyGq6r)zGqU3s2jKq90qw15ju1IoHLbcpBUri3Bj7eY9wYoHQ4045jCFllBEgi032sXTrjfe0ye1iqzzrc9TnG0NsoDdbrCBjgOKtckRD0czC1cI(yES04juosxVDHTNgH3BBsyimhM4eIJRjmsMRewnMAeSiHrYC132sXTXIegjZvFBdi9zrcJK5kLBiKuCBSiHuUHqsXTrj3vSwHZfsiHvJPgbHewnMAefO1OPgJGG5WeNqbAnAQXiWvx0RL9wkHRw3fOCn68TjoUkG0Voe8web5gcjf3gHIilLAHmUQUcxfYnect0pBHmpHkT4eYGffxJrSuVjpqrpbSwlJ9uATcciDCYaHhrM4mqypqVzGNNWSRQ6Yb6zzGWEGEZappbVgzmqypqVzGNNqUJ8hrM4mqypqVzGNNGpwAmqypqVzGNNqvS8TwWaH9a9MbEEEcvAXH2Tnk5CnHzNYrXSWJLforOwusWBYTweYMBe6sTGqPwJMAmcwKql67QuVZr2TjLCsiw(wlsmqi9O)mqyQDjJ0yyrcYingxv(42iuRwSWzo8X0kg8TOW2XvDIRMjbzKgJRy5BTGqcRgdpHQw0jSmqyQDjJ0yygiiJ0yCv5JBJqTAXcN5WhtRyW3IcBhx1jUAMeKrAmUILV1ccjSAm88espww4ubAXJTyBItOMcna1FLlGqpje8TOW2XvDIRMjH4C2V1IiY19TSS5tmWtqm2bFllB(eLCsatppwkTwbHzNCRHO8TdJquKLq6XYcNwu3ItOynHqn1MWnL8c0iTNbk5gkPGNNsU7ggim7KBneLVDyeIISekhPR3btjNq1qu(wlQBDWxLjMegI7BzzZZaH(2gq6tjNUHNqS8Tdl4BzzZxB90O0QDQGqS8TwKyGq6r)zGWu7sgPXWIeKrAmUQ8XTrOwTyHZC4JPvm4BrHTJR6exntCv3jiJ0yCflFRfesy1y4ju1IoHLbctTlzKgdZabzKgJRy5BTGqcRgdbzKgJRkFCBeQvlw4mh(yAfd(wuy74QoXvZex1DEEc33YYMNbc9TTuCBusbbngrncuwwKGiUTeduYjH6rdzIAzcxnJJp8gUk0YyppH(2gq6tjNUHWizU6BBaPplsOCKUE7cBpncV32KWqyomXjehxtyKmxjSAm1iyrcJK5QVTLIBJfjyomXjuGwJMAmcC1f9AzVLs4Q1DbkxJoFBIJRci9RdbVfrqUHqsXTrOiYsPwiJRQRWvHCdHWe9ZwityKmxPCdHKIBJfjKYneskUnk5UI1kCUqcjSAm1iiKWQXuJOaTgn1ye8eQ0ItidwuCngXs9M8af9eWATm2tP1kiG0XjdeEezIZaH9a9MbEEcZUQQlhONLbc7b6nd88e8XsJbc7b6nd88eYDK)iYeNbc7b6nd88e8AKXaH9a9MbEEcvXY3Abde2d0Bg455juPfhA32OKZ1eMDkhfZcpww4eHAHGG3KBTiKn3i0LAbH0JLfoTOUfNqXAcHAQnHw03vPENJSBtk5Kqu074BTGbcPh9Nbc5ElzNqc1tdzvNNqvl6ewgiK7TKDcvXPr4zZnc5ElzNNNq6XYcNkqlESfBtCc1uObO(RCbeIZz)wlIix33YYMpXapbm98yP0Afe6jHGVff2oUQtC1mXvDNGySd(ww28jk5KqPwJMAmcwKWnL8c0iTNbk5gkPGsRPKcEEk5(Agime33YYMNbc9TnG0NsoxZtiw(2Hf8TSS5RTEAuA1ovqik6D8TwWaH0J(ZaHCVLStiH6PHSQZtOQfDcldeE2CJqU3s2jK7TKDcvXPXZt4(ww28mq4zZncPh)iryimhM4eIJRjmsMRewnMAeSiHYr66TlS90i8EBtcMdtCcfO1OPgJaxDrVw2BPeUADxGY1OZ3M44Qas)6qWBreKBiKuCBekISuQfY4Q6kCvi3qimr)SfYegjZvk3qiP42yrc9TTuCBusbHrYC132sXTXIesy1yQrqiHvJPgrbAnAQXii032asFk5CnHrYC132asFwKqk3qiP42OK7kwRW5c5jmTu8dF8glsaR1YypLwRGashNmq4rKjode2d0Bg45jm7QQUCGEwgiShO3mWZtWRrgde2d0Bg45jK7i)rKjode2d0Bg45j4JLgde2d0Bg45juflFRfmqypqVzGNNNqLwCODBJsl3DcEtU1Iq2CJqxQfek1A0uJrWIeArFxL6DoYUnPKtc9KqW3IcBhx1DC1cwjH4C2V1IiY19TSS5tmqjNmq4(ww28mq4zZncXHpsinYG5WehgvvTsi4QGmHGliK5sgiOXiQrGYYIemhM4ewMfrhlH0idMdt8f9wvRecWIlqzkJqlCy(KXIes5gcv)zIbEcdrFc5OywZtqe3wIbk5Kq9fvMxer4QfOf3hlppHPLHrvviBUryzlqzlMXcvz8egI7BzzZZappLCNbc33YYMNbcpBUrio8rcPrgmhM4WOQQvcbxfKjeCbHmxYaHPLHrvviBUryzzUK1oJfQYiOXiQrGYYIemhM4ewMfrhlH0idMdt8f9wvRecWIlqzkJqk3qO6ptmWtyi6tihfZAEcI42smqjNekgllmkMWYtOfomFYyrcLJ01Bxy7Pr492M8egI7BzzZZappLCddeUVLLnpdeE2CJqC4JesJmyomXHrvvRecUkiti4cczUKbcAmIAeOSSibZHjoHLzr0XsinYG5WeFrVv1kHaS4cuMYi0chMpzSiHuUHq1FMyGsoPK7UxioDJcEcI42smqjNeQhJ7823L4Qzo8rEcdrFc5OywZtyAzyuvfYMBew2cu2IzSqvgpHH4(ww28mWZZtqm2bFllB(eLwtatppwkTwbHzNCRHO8TdJqeHi0chMpzSiHBk5fOrApduYnusbLwtjf88uY9cHbcLJ017GPKtOAikFRf1To4RcxfxfxfxfPlJiCvhr0WWvRN4QjdzLVUox(kGRwOI(fhvv1vP5OywZR0vaxvP1xuzEreHRwGwCFS8kTo1bxv7XvvGVkCvCvCvC1Ucx1renmC16bCvNMYJRESMaFv4Q4Q4Q4Q4Q4Q4Q4QE7dVaxvPkhLzmJkuKXmQqHsXvx6sXvt33c5LwP974RRsRfZLGsxbCvhr0WwIon3uhLt4Rcxfxfxfx1qjdFv4Q4Q4Q4Q4Q4Q4Q4QE7dVaxvPkhLzmJkuKXmQqHsXvx6sXvt33c5LwP974RRsRfl19QAR0vax1renSLOtt5Rd(QWvXvXvXvnXeFvMysiw(2Hf8TSS5RTEAuA1ovqiw(wlsmqi9O)mqyQDjJ0yyrcYingxv(42iuRwSWzo8X0kg8TOW2XvDhxntcYingxXY3AbHewngEEc33YYMNbc9TTuCBusbbngrncuwwKqFBdi9PKZ1eeXTLyGsojuFrL5freUAbAX9XYZtOCKUE7cBpncV32KWizUsy1yQrWIegjZvFBlf3glsWBreKBiKuCBekISuQfY4Q6kCvi3qimr)SfYegjZvk3qiP42yrcPCdHKIBJsURyTcNlKqcRgtnccjSAm1ikqRrtngbHHWCyItioUMG5WeNqbAnAQXiWvx0RL9wkHRw3fOCn68TjoUkG0VoegjZvFBdi9zrEcvAXjKblkUgJyPEtEGIEcyTwg7P0Afeq64KbcpImXzGWEGEZappHzxv1Ld0ZYaH9a9MbEEc(yPXaH9a9MbEEc5oYFezIZaH9a9MbEEcEnYyGWEGEZappHQy5BTGbc7b6nd888eQ0IdTBBuY5AcZoLJIzHhllCIqTOKG3KBTiKn3i0LAbHw03vPENJSBtk5Kq6XYcNwu3ItOynHqn1Mq6XYcNkqlESfBtCc1uObO(RCbeIIEhFRfmqi9O)mqi3Bj7esOEAiR68eQArNWYaHCVLStOkoncpBUri3Bj788e6jHGVff2oUQ74QzsatppwkTwbHzNCRHO8TdJqeHiig7GVLLnFIsojme33YYMNbc9TnG0NsoxZtOuRrtngbls4MsEbAK2ZaLCdLuWZtj3vEgiuosxVdMsoHQHO8Twu36GVkCvCvCvCvKUmIWvDerddxTEIRMmKv(66C5RaUAHk6xCuvvxLMJIznVsxbCvLwFrL5freUAbAX9XYR06uhCvThxvb(QWvXvXvXv7kCvhr0WWvRhWvDAkpU6XAc8vHRIRIRIRIRIRIRIR6Tp8cCvLQCuMXmQqrgZOcfkfxDPlfxnDFlKxAL2VJVUkTwmxckDfWvDerdBj60CtDuoHVkCvCvCvCvdLm8vHRIRIRIRIRIRIRIR6Tp8cCvLQCuMXmQqrgZOcfkfxDPlfxnDFlKxAL2VJVUkTwSu3RQTsxbCvhr0WwIonLVo4Rcxfxfxfx1et8vzIjHy5BhwW3YYMV26PrPv7ubHOO3X3Abdesp6pdeY9wYoHeQNgYQopHQw0jSmq4zZnc5ElzNqU3s2jufNgppH7BzzZZaH(2wkUnkPGGgJOgbkllsqe3wIbk5Kq9yCN3(UexnZHpYtOVTbK(uY5AcElIGCdHKIBJqrKLsTqgxvxHRc5gcHj6NTqMq5iD92f2EAeEVTjHHWCyItioUMWizUsy1yQrWIegjZvFBlf3glsWCyItOaTgn1ye4Ql61YElLWvR7cuUgD(2ehxfq6xhcJK5QVTbK(SiHrYCLYneskUnwKqk3qO6ptmqjNuYD3leNUrbpHuUHqsXTrj3vSwHZfsiHvJPgbHewnMAefO1OPgJGNqLwCczWIIRXiwQ3KhOONawRLXEkTwbbKoozGWJitCgiShO3mWZty2vvD5a9SmqypqVzGNNGxJmgiShO3mWZti3r(JitCgiShO3mWZtWhlngiShO3mWZtOkw(wlyGWEGEZapppHkT4q72gLCUMG3KBTiKn3i0LAbHw03vPENJSBtk5KqPwJMAmcwKWqCFllBEgi032asFk5CnpH0JLfovGw8yl2M4eQPqdq9x5ci0tcbFlkSDCv3XvZex1neILV1Iedesp6pdeMAxYingwKGmsJXvS8TwqiHvJHGmsJXvLpUnc1QflCMdFmTIbFlkSDCv3XvZex1n88eeJDW3YYMprjNeMDYTgIY3omcreIaMEESuATccPhllCArDloHI1ec1uBc3uYlqJ0EgOKtkPGsUtjfuYnusbLwtjf88uY9LZaHYr66DWuYjuneLV1I6wh8vHRIRIRIRI0LreUQJiAy4Q1tC1KHSYxxNlCfWvlur)vAzyuvvxLMJIznVsxbCvLwmwwyumHvP1Po4QApUQc8vHRIRIRIR2v4QoIOHHRwpGR60uEC1J1e4Rcxfxfxfxfxfxfxfx1BF4f4Qkv5OmJzmJzuHcfkukU6sxkUA6(wiV0kTFhFDvATyUeu6kGR6iIg2s0P5M6OCcFv4Q4Q4Q4Qgkz4Rcxfxfxfxfxfxfxfx1BF4f4Qkv5OmJzmJzuHcfkukU6sxkUA6(wiV0kTFhFDvATyPUxvBLUc4QoIOHTeDAkFDWxfUkUkUkUQjM4RYetcXY3oSGVLLnFT1tJsR2PccrrVJV1cgiKE0FgiK7TKDcjupnKvDEcvTOtyzGWZMBeY9wYoHCVLStOkonEEc33YYMNbc9TTuCBusbbngrncuwwKGiUTeduYjHIXYcJIjS8e6BBaPpLCUMG3Iii3qiP42iuezPulKXv1v4QqUHqyI(zlKjuosxVDHTNgH3BBsyimhM4eIJRjmsMRewnMAeSiHrYC132sXTXIemhM4ekqRrtngbU6IETS3sjC16UaLRrNVnXXvbK(1HWizU6BBaPplsyKmxPCdHKIBJfjKYneskUnk5UI1kCUqcjSAm1iiKWQXuJOaTgn1yeeMwggvvHS5gHLL5sw7mwOkJNqLwCczWIIRXiwQ3KhOONawRLXEkTwbbKoozGWJitCgiShO3mWZty2vvD5a9SmqypqVzGNNGxJmgiShO3mWZti3r(JitCgiShO3mWZtWhlngiShO3mWZtOkw(wlyGWEGEZapppHkT4q72gLCUMWSt5Oyw4XYcNiulkj4n5wlczZncDPwqOf9DvQ35i72KsojuQ1OPgJGfjme33YYMNbc9TnG0NsoxZti9yzHtfOfp2ITjoHAk0au)vUac9KqW3IcBhx1DC1mXvDNqS8TwKyGq6r)zGWu7sgPXWIeKrAmUQ8XTrOwTyHZC4JPvm4BrHTJR6oUAM4QUtyQDvosxVzgiiJ0yCflFRfesy1y45jGPNhlLwRGGySd(ww28jk5KWStU1qu(2HriIqespww40I6wCcfRjeQP2eUPKxGgP9mqj3qjf888eCqjNRD3jpja \ No newline at end of file diff --git a/WA codes/Prydaz (WA CODE).txt b/WA codes/Prydaz (WA CODE).txt new file mode 100644 index 0000000..820f835 --- /dev/null +++ b/WA codes/Prydaz (WA CODE).txt @@ -0,0 +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 diff --git a/WA codes/Prydaz Bars (WA CODE).txt b/WA codes/Prydaz Bars (WA CODE).txt new file mode 100644 index 0000000..25cb08d --- /dev/null +++ b/WA codes/Prydaz Bars (WA CODE).txt @@ -0,0 +1 @@ +d004DaqicvXIKiUKecFscjJIK6usWQqLQxjLkZsL0Tqq2LePFHkLggk6yiAzeYZKqnnPKRHGY2KOuFdbACsP4Csi19ujQ9Hkf0brOwik4Hsumrjk5IiKnIs8rvI0irLIoPkHvIcntuj3uQIDQIFsOmuPuAPiO6PuMkKUQuL2kQuOVQseJvcrZfbSxL)IsnyqhgQflfpgIjtIllAZQuFgvnAusNwOvtOQETevZws3MGDtQFJ0WLkhNqvA5Q65enDQUUGTlv13juz8OIZtswVuQA(Osb2pWJCOZWdD(m5mrLwCPeCMWmLzkdDMsuk(bnIh7NZW16Sp5JunQQUCg)tdDZWiESFI(rE(87HQK7qisMZsoDyTsQmgMPsS7Bz67qOIM5mzwVBlnQ9zmigkQy9WfrSGolQmt8iEepINtIuE(rnDMoiG(rE(8L7qoRsXkdDMJRP2h6mHq1JdD(8zkX77isO6Qg6mHq1JdD(8zpTMdDMqO6XHoF(SU(DoUMAFOZecvpo05ZNDJr8ivp0zcHQhh685ZcYKnsflLRz2JrYHotiu94qNpF(8zidDhYHot6yKYLwS95oKTzwqMpBo7WCMsu2vXQqto(SIabW4SB6N8pnOvkdTs)HUd5oK7iAhYDkEhYDATd58zsSqIMC8WNJHz3uTZsfZlNjwVOCDXHOzn4Vm0k9h6oI2HC(SN6yps17WCwLIvg6mhxtTp0zcHQhh685ZuI33rKq1vn0zcHQhh685ZEAnh6mHq1JdD(8zD97CCn1(qNjeQECOZNp7Xi5qNjeQECOZNp7gJ4rQEOZecvpo05ZNpt643jwZxZDyod5PD7WS0wKZKogPC5AM1utTspuLCgdCr0PSMf1rNncvORMEQSd5mp54HpNDj8vSuoZtooluTpRjXANkoDPFYhQ4FM0XiLlzHQ9znjw7uXPl9t(qf)ZqOcDFkLRzMhfYNfQ2N1KyTtfNU0p5dv8pJg8AuNZeRxuUU4q0SGmF2Q2H5meAL(dDhYDi3r0oK7u8oK70AhY5ZuIsXpOr8y)CgUwNHeKovan54ZUdAeps1QlayeabqaeaRueCfafWCyJBK0VbaVmakGDwl9UsPV6E1rNBM4QZApyoQlPRIvLFjfaqUfaBvaWiacGaiawPi4kaIBK0VbaVmakZAI4Qjj4vaSxD0ziCFRUKUkwv(LCfalPiX9XFePOKaypyEDqaafRlilPqbaK(aitaJaiacGa4NE41aOa2zT07kL(QvJBK0Vba5wauaZHnUrs)Mcai3bqsMmlaym1kZusj2dp2tgWiLZ)0GwznZWiESFI(rE(87HQK7WCMsu2vXQqtoox5TpRiqamol1keR5R5ofx2mNH1rbShP6Hotah1dDMebxto7qodHwPpQQUCgsq6uHzseCnvTd5mCTJv8omNXzhMZuTdZzi0k9jEhYzi0k9V0DiNHqR0NW3HCgcTsFwcAKzaiacGa4NE41a4DqJ4rQwD3t5)ukVcGp5vaKN8ka2qEfaXKxbWx0vaKx0vaSr0vaelQaGraeabqaeabWp9WRbWNeaBhaQU7P8FkLai3bq1ViaKqa4twOWvaKNeaBhaQU7P8FkLai3bq18IaqcbG8KfkCfaBibW2bGQ7Ek)NsjaYDauDJiaKqaydzHcxbqmja2oauD3t5)ukbqUdGQXIaqcbGyYcfamcGaiacGPwbWiacGZEQJ9ChMZqOv6ZWoKZcYKncTs)XW85Z8pYZN)qNHeKovGnRrLCMhfsLzibPtfy7Q6Yzsh7b5mxvxodjiDQWSGmzZAIRoRJHzSM4QZ6mMZY(P2LZkJy9WaXOS5sSlLnrCJeDqz37HLl4cLicNOYAgsq6ubZXiLlNndjiDQqzfEShP6z3bnIhPA1famcGaiacGvkcUcGcyoSXns63aGxgafWoRLExP0xDV6OZntC1zThmh1L0vXQYVKcai3cGTkayeabqaeaRueCfaXns63aGxgaLznrC1Ke8ka2Ro6meUVvxsxfRk)sUcGLuK4(4pIuusaShmVoiaGI1fKLuOaasFaKjGraeabqaSsrWvaSlFKu7y(eaVmakGDwl9UsPVA14gj9BaqUfafWCyJBK0VPaaYDaKKjZcagbqaeabWp9WRbWU8rsTJ5ZRaijtMxbq)djGXuRmJ1exDwzt7Yh70Fg3WzibPtfMDh0iEKQvxaWiacGaiawPi4ka2eUVbWldG9QJodH7B1L0vXQYVKRayjfjUp(JifLea7bZRdcaOyDbzjfaq6dGmbmcGaiacGXBaSjCFdGaUbxga1Xka6SMAa8tp8Aa0)qcGzvMa4NE41a4nUktam1kagtTYmewtKYNf6uWEolOZ(P2NHdoDwqMSd6OpgMp7M(j)tdAf0KJh(C2fAp)BmssaIvuOAjbUKexoXHhljqBPIlFIdpw2tQeXeG4WJLeG4WJjyRzrLzT9vPvWTxoZJc5BX2N7q2MzIFq6XBvZ4IiwqN5jhNLkMxotSEr56IdrZ8Oq(SuX8YzI1lkxxCiAMskXE4XEYc9t(Ng0kRzwdgPC(Ng0kOjhp85m0KJh(usaRlRvIr8yFShPAX6NFfRssaIqQXozY2c6zipTJTQDywAlYznyKY5FAqRugAL(dDhYXslctePOYMzBykQycw0eSOj4UjeHv8oIglTimrKIkBMTHPOIjyrtWIMG7MqewX7u8yPfHjIuuzZSnmfvmblAcw0eC3eIWkENw7WC(SicvZwgvYzCrelOZeI)t)1mlIq1RzMhfYFnZuIYUkwfAYXj8ipR(SIqo7t(ivJQQlNHdpUb)ZWkkrps14kB)J885lh6oKdDM)rE(8h6SONchSqUdzXIA1Q1SGo7NAFgo40zbD0N1vXQYFw2p1(Sl8uaajs8gIDDPYmzOj7NAVTFEh5mZAlrCX1mzOj7NA3c33roZyxgInu2gkXeo6mxvxot6ypiNfKj7Go6JHzbzYo6PWblKJH5ZcA)J885p0zrpfoyHChYIf1QvR5ZNp7(XcP5p2X70AM4IkoR7iIWyoZtoUfBFUdzBMPdcOFKNpF5oIMH80o2C2HzPTiN1GrkN)PbTIy33Y03r08Den0zshJuU0ITp3HSnZcY8zZzhMZuIYUkwfAYXNveiagNDt)K)PbTszOv6p0Di3HChr7qUtX7qUtRDiNptIfs0KJh(Cmm7MQDwQyE5mX6fLRloenRb)LHwP)q3r0oK70AhMZN9uh7rQEhMZQuSYqNfKjBD2p)1mZX1u7dDMqO6XHoF(mL49DejuDvdDMqO6XHoF(ShJKdDMqO6XHoF(SU(DoUMAFOZecvpo05ZNDJr8ivp0zcHQhh685ZEAnh6mHq1JdD(85ZKo(DI181ChMZ(Kps1OQ6Yz4WJBW)mPJrkxUMzn1uR0dvjNXaxeDkRzrD0zJqf6QPNk7qoZtoE4ZzxcFflLZ8KJZcv7ZAsS2PItx6N8Hk(NHqf6(ukxZmpkKpluTpRjXANkoDPFYhQ4FwdgPC(Ng0kIDFltFhrZObVg15mX6fLRloentjkf)GgXJ9Zz4ADgcTs)HUd5oK7iAhYDkEhYDATd58zipTBhML2ICgsq6ub0KJp7oOr8ivRUaGraeabqaSsrWvauaZHnUrs)ga8YaOa2zT07kL(Q7vhDUzIRoR9G5OUKUkwv(Luaa5waSvbaJaiacGayLIGRaiUrs)ga8YaOmRjIRMKGxbWE1rNHW9T6s6Qyv5xYvaSKIe3h)rKIscG9G51bbauSUGSKcfaq6dGmbmcGaiacGF6HxdGcyN1sVRu6RwnUrs)gaKBbqbmh24gj9BkaGChajzYSaGXuRmtjLyp8ypzaJuo)tdAL1mtheq)ipF(YDiNHr8y)e9J8853dvj3HqKmNPeLDvSk0KJZvE7ZkcnGXzbz(SvTdZzPwHynFn3P4YM5mXfvCw3reH1MzrLzT9vPvWTxcGIMH1rbShP6Hotah1dDgcTsFg2HCwqMSrOv6pgMXzhMZKi4AYzhYz4AhR4DyodHwPpX7qot1omNHqR0hvvxodjiDQWmeAL(x6oKZqOv6t47qodHwPplbnYmaeabqa8tp8Aa8oOr8ivRU7P8FkLxbWN8kaYtEfaBiVcGyYRa4l6kaYl6ka2i6kaIfvaWiacGaiacGa4NE41a4tcGTdav39u(pLsaK7aO6xeasia8jlu4kaYtcGTdav39u(pLsaK7aOAEraiHaqEYcfUcGnKay7aq1DpL)tPea5oaQUreasiaSHSqHRaiMeaBhaQU7P8FkLai3bq1yraiHaqmzHcagbqaeabWuRayeabWzp1XEUdZzseCnvTd585Z8pYZN)qNf9u4GfYDilwuRwTMf0z)u7ZWbNol7NAF2fEkaGejEdXUUuzwqMSd6OpgM5Q6Yzsh7b5SGmzh9u4GfYXWmKG0PcSznQKZ8OqQmFMNC81mZtoolvmVCMy9IY1fhIMXAg5z13ruXZ8Oq(RzwdgPC(Ng0kOjhp85m0KJh(usaRlRvIr8yFShPAX6NFfRssaIqQXozY2c6zipTJTQDywAlYzcX)P)AM1GrkN)PbTszOv6p0DATd58zreQMTmQKZ4IiwqNfrO61mtjLyp8ypzH(j)tdAL1mlO9pYZN)qNf9u4GfYDilwuRwTMpt8dspERAgxeXc6mSIs0JunUY2)ipF(YHoFMhfY3ITp3HSnZUFSqA(JD8ofp7M(j)tdAf0KJh(C2fAp)BmssaIvuOAjbUKexoXHhljqBPIlFIdpw2tQeXeG4WJLeG4WJjyRzEYXTy7ZDiBZmKN2XMZomlTf5mPJrkxYcv7ZAsS2PItx6N8Hk(NVtXdDMNCCwQyE5mX6fLRloent6yKYLwS95oKTzwqMpBo7WCMsu2vXQqto(SIabW4SB6N8pnOvkdTs)HUd5oK7iAhYDkEhYDATd58zsSqIMC8WNJHz3uTZsfZlNjwVOCDXHOzn4Vm0k9h6oT2H58zp1XEKQ3H5SkfRm0zoUMAFOZecvpo05ZNPeVVJiHQRAOZecvpo05ZN90Ao0zcHQhh685Z66354AQ9Hotiu94qNpF2JrYHotiu94qNpF2ngXJu9qNjeQECOZNpFM0XVtSMVM7WCgYt72HzPTiNjDms5Y1mRPMALEOk5mg4IOtznlQJoBeQqxn9uzhYzEYXdFo7s4RyPCMNCCwOAFwtI1ovC6s)KpuX)mPJrkxYcv7ZAsS2PItx6N8Hk(NHqf6(ukxZmpkKpluTpRjXANkoDPFYhQ4Fgn41OoNjwVOCDXHOzkrP4h0iESFodxRZqOv6p0Di3HChr7qUtX7qUtRDiNptjk7QyvOjhNR82NveiagNHeKovan54ZUdAeps1QlayeabqaeaRueCfafWCyJBK0VbaVmakGDwl9UsPV6E1rNBM4QZApyoQlPRIvLFjfaqUfaBvaWiacGaiawPi4kaIBK0VbaVmakZAI4Qjj4vaSxD0ziCFRUKUkwv(LCfalPiX9XFePOKaypyEDqaafRlilPqbaK(aitaJaiacGa4NE41aOa2zT07kL(QvJBK0Vba5wauaZHnUrs)Mcai3bqsMmlaym1kZusj2dp2tgWiLZ)0GwznZI6(5lZXWmmIh7NOFKNp)EOk5oeIK5mp54wS95oKTzwQviwZxZDkUSzodRJcyps1dDMaoQh6mjcUMC2HCMebxtv7qoJZomNfKjBeAL(JHz4AhR4DyodHwPpQQUCgsq6uHzQ2H5meAL(eVd5meAL(x6oKZqOv6t47qodHwPplbnYmaeabqa8tp8Aa8oOr8ivRU7P8FkLxbWN8kaYtEfaBiVcGyYRa4l6kaYl6ka2i6kaIfvaWiacGaiacGa4NE41a4tcGTdav39u(pLsaK7aO6xeasia8jlu4kaYtcGTdav39u(pLsaK7aOAEraiHaqEYcfUcGnKay7aq1DpL)tPea5oaQUreasiaSHSqHRaiMeaBhaQU7P8FkLai3bq1yraiHaqmzHcagbqaeabWuRayeabWzp1XEUdZzi0k9zyhY5ZN5FKNp)Hot2L16fkZeXKGTiOOzkP07vh9zDvSQ8NPXc5SIe3h)rKIscG9G51bbauSUGCwqMSrQuDEHYyygsq6ub2SgvYzibPtfMHeKovGTRQlNL9tTplOZ(P2N5rHuzwu3pFzogML9tTpRmuHgSdGCr5NfKjBzxwRxOmgML9tTlNvgX6HbIrzZLyxkBI4gj6GYU3dlxWfkreorL1mzxwRxOih6oK7iIjbBrqrZNPXcPCO7qoRiX9XFePOKaypyEDqaafRliNplit2kP07vh91mtgAY(P2TW9DKZm2e3lHtmBIBBB56cIkR5Z8KJVMz30p5FAqRGMC8WNZUq75FJrscqSIcvljWLK4Yjo8yjbAlvC5tC4XYEsLiMaehESKaehEmbBnlQmRTVkTcU9saS4zIFq6XBvZ4IiwqN5rH8Ty7ZDiBZSGmF2Q2H5mLuI9WJ9Kf6N8pnOvwZSgms58pnOvqtoE4ZzOjhp8PKawxwReJ4X(yps1I1p)kwLKaeHuJDYKTf0ZqEAhBv7WS0wKZAWiLZ)0GwPm0k9h6oK7qUtRDiNpti(p9xZSicvZwgvYzCrelOZIiu9AM5rH8xZmSIs0JunUY2)ipF(YHUd5qN5FKNp)Hol6PWblK7qwSOwTAnlOZ(P2NHdoDMm0K9tTBH77iNzSldXgkBdLychDwqh9zDvSQ8NL9tTp7cpfaqIeVHyxxQmtgAY(P2B7N3roZS2sexCnlit2bD0hdZCvD5mPJ9GCwqMSJEkCWc5yygsq6ub2SgvYzEuivMplO9pYZN)qNf9u4GfYDilwuRwTMpF(S7hlKM)yhVtXZexuXzDhregZzFYhPAuvD5mC4Xn4FMoiG(rE(8L7iAgYt7yZzhML2ICwdgPC(Ng0kIDFltFhrZNpR)oKTeroFd \ No newline at end of file diff --git a/WA codes/Random Number Crap (WA CODE).txt b/WA codes/Random Number Crap (WA CODE).txt new file mode 100644 index 0000000..fdc856e --- /dev/null +++ b/WA codes/Random Number Crap (WA CODE).txt @@ -0,0 +1 @@ +dKKyCaqiqvQfjsUeiKpbQsAuKOofjYQKuqVssHMLGCljvzxI4xGGggjCmLklduQNbkY0eu6AGaBtsLVjPQghOqNduY9qj7tqrDqLQAHOu9qqrnrbvCrq0gbQ(OKcmsbfoPGQwPsAMa6MGk7uK6NskAOGQAPGQ4PkMkkUkOGTcQsSxO)sPbtCyelwPkpwOjRexwQndKpRugnaNwIvlOiVgLYSf42K0Ur63OA4G0Yf1ZPy6uDDsTDj57GqnEjLopqz9cQK7lOsTFvJ7qgCiid64yWb2jWus9XrfNfCwqgCwkMWKMg9svJdjiaNCVv4ugWG24SL5AO4qIEPQzYLTTodhFPX01BNcC6AHsOl9cYoo1wtqGmTJPRxyHTcCaRMGazAhtxpydb4y6aqWNxOooSxtgMAchqibNbNYcoWB4n8gEZUMgbCbELFXaO44q1Qm5Y2wNny6D4eWjlidoojOPoYGJQoWlid6OJJ202yaXyWXZ6gNmpOrgCu1bEbzqhDCIbeJbzWXuOBbnoWFFG7hoHpn64aTcQtcAQJm4OQd8cYGo64aIe9cNIm4OQd8cYGo64SuabQe1boyidoQ6aVGmOJoozsSrgCu1bEbzqhD0rhNiYGP3Hm4aIt9PeUAm9U6WzPyGgqaJPR1XbII4e1gNRY0164astJEHtvwPVE5YLl521z6fIotSnTkzaWJSzJ5IBUKKCjfeM6ssYfIotSnTkzaWJSzJeJBUKKCj1LlPUKKCHOZeBtRsga8iBwODo2uNS1xssUKcIGOuxssUK6YLuxssUOsCajGc48SYeDMyBAvYaGhzZsu5AQFbcVStXd3WKsxssUKITuFTPl4K7TcNYag0ghVR1XHe9svZKlBBDgo(sJPvGtHwCBKRcnO9EbtVdhs0lCQbzWX4KSJm4SWTBbCig3dNfUvTngYwJ7HZc3g1gNRISJtuBCUkodaEKnl0ohBQt26lSUO4RdaEKnBKyCZfwxu81bapYMnMlU5cRlk(6aGhzZsu5AQFH1ffOJdOcTyaGm4SWTrTX5Qi74e1gNRIZaGhzZcTZXM6KT(cRlk(6aGhzZgjg3CH1ffFDaWJSzJ5IBUW6IIVoa4r2SevUM6xyDrb64uOfhzWzHBJAJZvr2XjQnoxfhIotSnTkzaWJSzH25ytDYwFH1ffFLOZeBtRsga8iB2iX4MlSUO4ReDMyBAvYaGhzZgZf3CH1ffFLOZeBtRsga8iBwIkxt9lSUOaD0XHSSu8cNscSEUST1zdYGP3Hm445Y2wNrgCCWG24yCIRn4OnTfqtcCai74aOjboalhANjopJtygNUQPooHrtcCa4y071vn1HFUbvQfNb(qceioaAsGdahf4OPDvtDCiANJJ20wnT4i74y071vn1hniqLAXXcZ7pm2HzF4HbhnT44anGawNrhhn1ZLTToJmOJo64y6aqWNxOooWmKPzGeEWPSGtyWda7YaGhz7smxCCG4YIdabVU62f26QtbmwFyewqamcbWc2iO6f26WbeN64azTqZTXaXeWWHQvzYLTToBW0WghaDzdGJGdlfkQ)oybByxFiiS7G1oyQoeu9clSWXZLTToJm4e1gNRAbuwAC8IAVGJdg0gNO24CvCIAJZvToyqBC6QM64e1gNRIdinn6fovzBOl2qxm69GSQPEOl2qxSHUy46CSdDXg6In0fBOl2qxSHUydDXg6IbAheKMO2HUydDHOY1up0fBOl2qxI5IR0xVC5YLcOlWaT4H3ad0IRSHRZX(cpFjvQqxsbnGawNtP0fcD5IbAheKMO2xyX6sQWGha2LbapYwQle6YfJEpiRAQFHfRlPg4djqG2WaY9bM6IdOPF9YLlxUC5YfIotSnTkzaWJSzJeJBUW6crNj2MwLma4r2SrIXnxQXl7(6LlxUC5YLleDMyBAvYaGhzZsu5AQFH1fIkxt9VE5YLlxUC5sb0LyU4xyX6IN19fhqt)6LlxUC5YLlxUC5crNj2MwLma4r2SXCXnxyDHOZeBtRsga8iB2yU4Ml14LDF9YLlxUC5YLMU81lxUC5YLlxi6mX20QKbapYMfANJn1jB9fwxuMOZeBtRsga8iB2yU4Mlq4fIotSnTkzaWJSzJeJBu6sn8Yofk(6LlxUC5YLleDMyBAvYaGhzZcTZXM6KT(cRlQehqcOaopRmrNj2MwLma4r2Sq7CSPozRv6RxUC5stx(AtxWjQnoxDCsKndoG00Ox4uLv6RnD5RFfNO24CvMUwxNBCaPPrVWPkR0xB6corTX5QPjQnoG00Ox4uLv6RnDbNUQPUbhyUMWX((mwG1SgyHeEbY0mwyin4HhidKWdKHdorTX5QHpYP4astJEHtvwPV20LV(v0XjGtwqgCCsqtDKbhvDGxqg0rhNyaXyqgCmf6wqJd83h4(Ht4tJoogODezWXuOBbnMEh64OnTngqmgKDCwkGavI6ahmKbhvDGxqg0rhNmpOrgCu1bEbzqhDC0M2AG2rKDCarIEHtrgCu1bEbzqhDCYKyJm4OQd8cYGo64OnTnYv3J4i74aTcQtcAQJm4OQd8cYGo6OJZsXeM00OxQACiuWqhtdBKbhqCQpLWvJP3vholfd0acymDTooqueNO24CvMUwhhqAA0lCQYk91lxUCj3UotVq0zITPvja5WzJ5IBUKKCjfeM6ssYfIotSnTkbihoBKyCZLKKlPUCj1LKKleDMyBAvcqoCwODo2uNS1xssUKcIGOuxssUK6YLuxssUOsCajGc48SYeDMyBAvcqoCwIkxt9lq4LDkE4gMu6ssYLuSL6RnDbNCVv4ugWG244DToolftystJEPQXHqbdhs0lvntUST1z44lnMwbofAXTrUk0G27fm9oCirVWPgKbhJtYoYGZc3UfWHyCpCIAJZvXbihol0ohBQt26lSUO4Ra5WzJeJBUW6IIVcKdNnMlU5cRlk(kqoCwIkxt9lSUOaNfUvTngYwJ7HZc3g1gNRISJoofAXrgCw42O24CvKDCIAJZvXHOZeBtRsaYHZcTZXM6KT(cRlk(krNj2MwLaKdNnsmU5cRlk(krNj2MwLaKdNnMlU5cRlk(krNj2MwLaKdNLOY1u)cRlkqhhqfAXaazWzHBJAJZvr2XjQnoxfhGC4Sq7CSPozRVW6IIVcKdNnsmU5cRlk(kqoC2yU4MlSUO4Ra5WzjQCn1VW6Ic0rhhpx226mYGJdg0gNO24CvCIAJZvToyqBC6QM64e1gNRoojYMbhqAA0lCQYk91MU81VItuBCUA4JCkoG00Ox4uLv6RnD5RFfNO24C10e1ghqAA0lCQYk91MUGtuBCUkoG00Ox4uLTHUydDXO3dYQM6HUydDXg6IHRZXo0fBOl2qxSHUydDXg6In0fBOlgODqqAIAh6In0fIkxt9qxSHUydDjMlUsF9YLlxkGUad0IhEdmqlUYgUoh7l88LuPcDjf0acyDoLsxi0LlgODqqAIAFHfRlPaw2a4x4GU4a6lWrYoy5uxi0Llg9Eqw1u)clwxsnWhsGaTHbK7dm1fhqt)6LlxUC5YLleDMyBAvcqoC2iX4MlSUq0zITPvja5WzJeJBUuJx291lxUC5YLlxi6mX20QeGC4SevUM6xyDHOY1u)RxUC5YLlxUuaDjMl(fwSU4zDFXb00VE5YLlxUC5YLlxUq0zITPvja5WzJ5IBUW6crNj2MwLaKdNnMlU5snEz3xVC5YLlxUCPPlF9YLlxUC5YfIotSnTkbihol0ohBQt26lSUOmrNj2MwLaKdNnMlU5ceEHOZeBtRsaYHZgjg3O0LA4LDku81lxUC5YLlxi6mX20QeGC4Sq7CSPozRVW6IkXbKakGZZkt0zITPvja5WzH25ytDYwR0xVC5YLMU81MUGtuBCUktxRRZnoG00Ox4uLv6RnDbNUQPUbhyUMWX((mwG1SgyHeEbY0mwyin4HhidKWdKHdorTX5QwaLLghVO2lOJtzbhGC4UeZfhhYYsXlCkjW65Y2wNnidMEhYGJNlBBDgzWXbdAJJXjU2GJ20wanjWbGSJJM2vn1XHODooDvtDCcJMe4aWXO3RRAQd)CdQulod8HeiqCa0KahaokWrtlooqdiG1zCm696QM6JgeOsT4yH59hg7WSp8WGJ20wnT4i74aOjboalhANjopJtygDC0upx226mYGo6OJdy1eeit7y66TRoCaXPooqwl0CBmqmbmCOAvMCzBRZgmnSXbIlloae86QBxyRRofWy9HrybbWiealyJGQxyRdhaDzdGJGdlfkQ)oybByxFiiS7G1oyQoeu9clSWX0bGGpVqDCGzitZaj8GtaNSGm44KGM6idoQ6aVGmOJoogODezWXuOBbnMEh64edigdYGJPq3cACG)(a3pCcFA0XrBABmGymi74SuabQe1boyidoQ6aVGmOJoozEqJm4OQd8cYGo64KjXgzWrvh4fKbD0XbAfuNe0uhzWrvh4fKbD0Xbej6fofzWrvh4fKbD0XrBABKRUhXr2XrBARbAhr2rhDmnmHm4aIt9PeUAm9U6WzPyGgqaJPR1XbII4e1gNRY0164astJEHtvwPVE5YLl521z6fIotSnTkbCoqBmxCZLKKlPGWuxssUq0zITPvjGZbAJeJBUKKCj1LlPUKKCHOZeBtRsaNd0cTZXM6KT(ssYLuqeeL6ssYLuxUK6ssYfvIdibuaNNvMOZeBtRsaNd0su5AQFbcVStXd3WKsxssUKITuFTPl4qIEPQzYLTTodhFPX0kWPqlUnYvHg0EVGP3Hdj6fo1Gm4yCs2rgCw42TaoeJ7HZc3g1gNRISJtuBCUkoGZbAH25ytDYwFH1ffFfCoqBKyCZfwxu8vW5aTXCXnxyDrXxbNd0su5AQFH1ff4SWTQTXq2ACp0XPqloYGZc3g1gNRISJtuBCUkoeDMyBAvc4CGwODo2uNS1xyDrXxj6mX20QeW5aTrIXnxyDrXxj6mX20QeW5aTXCXnxyDrXxj6mX20QeW5aTevUM6xyDrb64aQqlgaidolCBuBCUkYoorTX5Q4aohOfANJn1jB9fwxu8vW5aTrIXnxyDrXxbNd0gZf3CH1ffFfCoqlrLRP(fwxuGo64SumHjnn6LQghcfmCkl4aEaXa4ch0fGLna(LyU4445Y2wNrgCCWG24e1gNRItuBCUQ1bdAJtx1uhNO24C1Xjr2m4astJEHtvwPV20LV(vCIAJZvdFKtXbKMg9cNQSsFTPlF9R4e1gNRMMO24astJEHtvwPV20fCIAJZvXbKMg9cNQSn0fBOlg9Eqw1up0fBOl2qxmCDo2HUydDXg6In0fBOl2qxSHUydDXaTdcstu7qxSHUqu5AQh6In0fBOlXCXv6RxUC5sb0fyGw8WBGbAXv2W15yFHNVKkvOlPGgqaRZPu6cHUCXaTdcstu7lSyDjf4bedGlCqxaw2a4PUqOlxm69GSQP(fwSUKAGpKabAddi3hyQloGM(1lxUC5YLlxi6mX20QeW5aTrIXnxyDHOZeBtRsaNd0gjg3CPgVS7RxUC5YLlxUq0zITPvjGZbAjQCn1VW6crLRP(xVC5YLlxUCPa6smx8lSyDXZ6(IdOPF9YLlxUC5YLlxUCHOZeBtRsaNd0gZf3CH1fIotSnTkbCoqBmxCZLA8YUVE5YLlxUC5stx(6LlxUC5YLleDMyBAvc4CGwODo2uNS1xyDrzIotSnTkbCoqBmxCZfi8crNj2MwLaohOnsmUrPl1Wl7uO4RxUC5YLlxUq0zITPvjGZbAH25ytDYwFH1fvIdibuaNNvMOZeBtRsaNd0cTZXM6KTwPVE5YLlnD5RnDbNO24CvMUwxNBCaPPrVWPkR0xB6coDvtDdoWCnHJ99zSaRznWcj8cKPzSWqAWdpqgiHhidhCIAJZvTaklnoErTxqhhthac(8c1XbMHmndKWdoKLLIx4usG1ZLTToBqgm9oKbhpx226mYGJdg0ghJtCTbhTPTaAsGdazhhanjWby5q7mX5zCcZ40vn1XjmAsGdahJEVUQPo8ZnOsT4mWhsGaXbqtcCa4OahnT44anGawNXXO3RRAQpAqGk1IJfM3FySdZ(WddoAtB10IJSJJM2vn1XHODo64OPEUST1zKbD0rhhWQjiqM2X01dMGnoqCzXbGGxxD7cBD1PagRpmcliagHaybBeu9cBD4aItDCGSwO52yGycy4q1Qm5Y2wNnyAyJdGUSbWrWHLcf1FhSGnSRpee2DWAhmvhcQEHfw4eWjlidoojOPoYGJQoWlid6OJJbAhrgCmf6wqJP3HooXaIXGm4yk0TGgh4VpW9dNWNgDC0M2gdigdYoolfqGkrDGdgYGJQoWlid6OJtMeBKbhvDGxqg0rhNmpOrgCu1bEbzqhDCGwb1jbn1rgCu1bEbzqhDCarIEHtrgCu1bEbzqhDC0M2g5Q7rCKDC0M2AG2rKD0Xj3BfoLbmOnoExRJo64uHP3fwyVdDeb diff --git a/WA codes/Rogue Sniffer 9000(WA CODE).txt b/WA codes/Rogue Sniffer 9000(WA CODE).txt new file mode 100644 index 0000000..d6cf077 --- /dev/null +++ b/WA codes/Rogue Sniffer 9000(WA CODE).txt @@ -0,0 +1 @@ +devIQaGieCjvkFcvPyuiYPqOvjH6vsiZss6wQQYUOKFHQuAyOQoMKYYuvPNHOW0KGCnrGTPQI(MiKgNKkPZjPsToufzEscK7HchucSquL8qjvmrufQlkcAJQuPpkcLrIQOoPKawPkzMsqDtjH2Pi6NsQedvvvTuvQ4Pqnvk1vruQVIQqASsQ6SQu1AfHO3IOK5IQuDxefTxI)ssdgCyPwmIQhJstwIUSWMrrFwKgnPQtlQvlcvVgvbZgvUnj2nKFRIHRQCCufILJ0ZvLPt11Py7KY3Le04LeDEsL1RQcZxec3xsGA)kl1eBb3IT4c(j4FTidRevWkcUuWLITGPrA(GS19fcoLEmFcUz9SwytZPPbTINYqs(xn(coQ8RrLrPWlbxMFjUbX6zTqWnhNGZLc(oNutGrzMmdADZNFnbRRUWK5lCj5V85lyKrXMMttd6tswtWVGJ5)NmYfmVQl221Lkw4eExBbZD6sXwWEZfixSfSIHZZIT4IlyZluz563tixW0MneBbRy48SylU4cMzZ65dsSfSIHZZIT4Il4pTpV5cKl2cwXW5zXwCXfm9WfITGvmCEwSfxCbxMzYmZA4CDITGvmCEwSfxCXfxWSITKSMyl4Y8lXniwpRfcUr6emnsZhKTUVqWEuPBOHGzpChQyljRjj5lj)vUBIwxluTe8ZAjk)cv73eTqjibcZ)sqHKKfsswtCbtoxGkR4PmeCb8yESGBwpRf20CAAqR4PmKK8fCJYkTNpiXwWkDgj2cM9WDO3rswtWMxOspE7HWlb)yBUOsjznbZE4o0cKK1em7H7qtmjznb76(cbZAE(rrWp2Ml0jjRjyZluzpChQqUGBUp9TKKVGRusYxW6KK8fm7H7qT19fcM188JIGPhV9qsYxW0J3EyR7lemR55hfbZE4o07AqScMgUHIgW0Gy98brI4UgmyWGmZbTH2QbsZkJEEJyJbmymO2axFG21GbdgmyWGb0Wnu0a(v5xL)UgmyWGG7f7AWGbdgmyWaA4gkAa)Q8T(nbv5Bv3vhuBxdgmyqGk3vGkfm94Th31GyfmnCdfnGPbX65dIeXDnyWGb0Wnu0G)g0gARginRgLYf7kqLcM9WDO8sswtCXfCgLDv2JYhx4rPKSMGBwpFqpXwWzu2fBbxEuznp)Oi8sWSMNFueCBOTAG0S(QFaJbKnk7)FEzpFqKi8X16ckbIdo0b83vBOTAG0S(UFaJbVGlyDs)wLSrz))Zl75dIeHpUwxqjqK4GdDa)D1gARginlV(bmgq2OS))5L98brIWhxRlOeio4qhWFxTH2QbsZYVFaJbVGlyDs)wLSrz))Zl75dIeHpUwxqjqK4GdDa)D1gARginRgLYfdymG)UAdTvdKML300WhWyabc7Qn0wnqAwbQjNlgWya)D1gARginlpZYd3P9yaJbjyxTH2QbsZ65n1TZkXagdsSWTZkbjIIlUG9Os3qdbxbqEqz2SbVxqz5b94DE0O5Hcm0(X7)FQWGwGH2VkgL5M3lWq7hVxGH2KrceCxwM98b1CQonNMg0NyljRj2c2P500Gk2c219fc(5TBEc28c1MRcBDpNAcHxc(zip0cKJnmzMRuWQ1PaSTk2UG7yl4qlqUGRZbvM98b9e8ZqEOfi)FAWmxPGX)NWcxybBqzxWFCTUGkydk0cKl424hbBEHQbLDHxIlydYP500Gk2IlUK8xXwWonNMguXwWUUVqWSMNFue8ZqEOfihByYmxPGvRtbyBvSDb3XwWHwGCbZZrZ56f8ZqEOfi)FAWmxPGX)NWcxybBqzxWFCTUGkydk0cKl424hbhAbYFcUo8Cb2QveNyQ8O8Cfa)FcVJGnVq1GYUWlbZQpy5bbhAbYfmR55hfvx3xi4qlqUGznp)OiyMgeRNpisQvvEPvFbQmOe31Gbdg8cuzqhWyWZPzuQLs7S6j9cuzqRoGWTUice31GbdgKzo4fOYGoGbJbKnk7jBLGeHpUwxqjqCqJkhO8shSebJbeCAZYdheHbnQCGYlDWsemgqWPnlpCyYKWGgvoq5Loyjcgdi0S8iMmn8MMgoHbU(aTRbdgmyWGbdAdTvdKML300WhWyWZPzuQLs7S6jP8sRoGWTUice31GbdgmyWGbF0mYj1gARginlVPPHtCxdgmyqGk31GbdgKzoq5LoGbJbeCAZYdheHbnQCqBOTAG0ScutoxmGbJb8h0OYbVavg0bmymGSrzpzReKi8X16ckbIdC9bAxdgmyWGbdg0gARginRa1KZfdymO2UgmyWGbdgm4JMroP2qB1aPzfOMCUO6G2qB1aPz5nnnCI7AWGbdcu5UgmyWGmZbkV0bmymGGtBwE4WKjHbnQCqBOTAG0ScutoxmGbJb1g0OYbVavg0bmymGSrzpzReKi8X16ckbIdC9bAxdgmyWGbdg0gARginRa1KZfdymG)UgmyWGbdgm4JMroP2qB1aPzfOMCUO6G2qB1aPz5nnnCI7AWGbdcu5UgmyWGmZbkV0bmymGqZYJyY0WBAA4eg0OYbVavg0bmymGSrzpzReKi8X16ckbIdC9bAxdgmyWGbdg0gARginlVPPHpGXaYgL9KTsqIG300WjqCxdgmyWGbdg8rZiNuBOTAG0ScutoxuDqBOTAG0S8MMgoXDnyWGbbQCxbQuWSMNFuu1Nldb7zLOuCbBqonNMguXwCXLKKHylyNMttdQyl4NH8qlq()0GzUsbJ)pHfUWc219fcM188JIGznp)OiyMgeRNpise31GbdgKzoOn0wnqAwbQjNlgWGXGAdAu5G2qB1aPz5nnn8blrWyakZnW1hODnyWGbdgmya3HT5g4(agduAxVftUZHsIuIfUDwjirCWFdAdTvdKM1ZBQBNvcIdkEqn(e31GbdgmyWGbzMdCFWsemg0gARginlU(52zLyqJkh4(GBdAdTvdKMLNz5H70EmGbJb8h46d0UgmyWGbdgmyWGbd(OzKtQn0wnqAwEttdN4UgmyWGbdgmyWGbdAdTvdKMfx)C7SsmGXa331GbdgmyWGbdgmyaoqL1rF7vmEVonirWk97nGWalRbTH2QbsZYBAA4vhq416iqCxdgmyWGbdgeOYDnyWGbbQCxbQuWpd5HwGCSHjZCLcwTofGTvX2fChBbZQpy5bbB(kBpemR55hfvx3xi4N3U5j4qlqUG55O5C9cM188JIQ(CziypReLIlydYP500Gk2IlUKSqITGDAonnOITGDDFHGznp)Oi4NH8qlqo2WKzUsbRwNcW2Qy7cUJTGdTa5cMNJMZ1l4NH8qlq()0GzUsbJ)pHfUWcUmi3WKPTUVqW8Ccl8)3LSlSGnOSl4pUwxqf87l44QaLpXwCbJAL4j2Ilyw9blpiyZxz7HGznp)OO66(cb)82npbZAE(rrWmniwpFqKiURbdgmG7W2CdyAqSE(GgqBuAmGKwZvDGsgvDGsxz1bkDL)sCxdgmyWGbdgO1CdymO2G)gqIejLUYb)nqR5ioG3oGKsx5G)gOKrejoO4bkDL)sCxdgmyWGbdgqd3qrd0AUDnyWGbbQCxdgmyqBOTAG0S(QFaJbKnk7)FEzpFqKi8X16ckbIdo0b831Gbdg0gARginRV7hWyWl4cwN0VvjBu2))8YE(Gir4JR1fucejo4qhWFxdgmya3HT5gu)agdAdTvdKM1x9d(BqBOTAG0S8631GbdgWDyBUb3pGXG2qB1aPz9D)G)g0gARginl)(DnyWGbCh2MBWhxRlO3TzJbmgKyH)pxRlO3TzZOusehCOd4VRbdgmG7W2Cd(4ADbTGbmgO0UElMCNdL0hxRlO3TzJbfpOgF(e31Gbdg8X16cAbdymG2O0G0hxRlOfuDa)Qd(jzWV6aY4N8jo4Vb121Gbdg8X16cAbdym4VbFCTUGwWUgmyWGpUwxqlyaJbFCTUGwWG)gu3831GbdgKzo4JR1f0cgubnG)axFGg8X16cAbdym4JR1f0cgu0aY4N8heOYDnyWGbTH2QbsZsVUVbmgO0UERhpc1jrsPD9wn5ps1Vk4FjsCqrdiP0UERM8hP7xf8VejsCxdgmyqBOTAG0SAukxmGXaL21BvgPKuAxVv7n6xs1x9EIe31GbdgKzoOn0wnqAwnkLlgubnG)axFGg0gARginRgLYfdymOn0wnqAwnkLlgu0aY4N8heOYDnyWGbTH2QbsZQrPCXagdAdTvdKMvJs5Ib)n4JR1f0c2vGkfmR55hfv95YqWEwjkfxWgKtZPPbvSfxCXfCUuW2nnn8b84mny98bj4kmx66LK1(nbcME82ZhKKKm(jFb70CAAqfBb76(cbZAE(rrWSMNFuuDDFHGdTa5c28cvdk7cVemR55hfbZ0Gy98brsTQYlL4UgmyWGmZbpNMrPwkTZQNKYlT6ac1ZteioOrLdqhFWZPzuQLs7S6jP8sRoGqI8GI65jceh46d0UgmyWGbdgmOn0wnqAwE9dym450mk1sPDw9KuEPvhqOEEAazD7VIjDRSiI3SkMmlIaXbh6a(7AWGbdgmyWG2qB1aPz53pGXGNtZOulL2z1ts5LwDaH75PbK1T)kM0TYIiEZQyYSicehCOd4VRbdgmyWGbdAdTvdKMLx)agdEonJsTuANvpP2qB1aPz51xDabY62Fft6wzreVzvmzwebI7AWGbdgmyWG2qB1aPz53pGXGNtZOulL2z1tQn0wnqAw(9vhqGSU9xXKUvweXBwftMfrG4UgmyWGavURavk4qlq(tW1HNlWwTI4etfFp2oHvuWguOfixWTXpcM188JIQ(CziypReLIlyKrXMMttd6tsMabRpYP6DjzTFtGG5oDPylyZlurHwqfYfS3CbYfBbRy48SylU4cUmZKzM1W56eBbRy48SylU4c28c1FCqHqUGPhUqSfSIHZZIT4Il4pTpV5cKl2cwXW5zXwCXfmZM1ZhKylyfdNNfBXfxW0MneBbRy48SylU4IlUK8xXwWL53hxRZoQ0f8nwbZAE(rXoQ0fmtdI1ZhejI7AWGbdOHBOObTH2QbsZsVUVb7kqLcUz9SwytZPPbTINYqsYxWnRNpONyl4mk7ITGlpQSMNFueEjywZZpkcUn0wnqAw619nGXa(7Qn0wnqAwE9dymG)UAdTvdKMLF)agd4VR2qB1aPz9v)agd4VR2qB1aPz9D)agd4lU4cUrzL2ZhKylyLoJeBbZE4o07ijRjyZluPhV9q4LGzpChkVKK1em7H7qtmjznb76(cbZAE(rrWp2MlQuswtWp2Ml0jjRj4M7tFlj5l4kLK8fSojjFbZE4ouBDFHGznp)Oiy6XBpKK8fS5fQShUdvixWShUd9UgeRGPHBOObmniwpFqKiURbdgmiZCqBOTAG0SYON3i2yadgdQnW1hODnyWGbdgmyanCdfnGFv(v5VRbdgmi4EXUgmyWGbdgmGgUHIguRATQ121GbdgeOYDfOsbtpE7XDniwbtd3qrdyAqSE(GirCxdgqd3qrd(BqBOTAG0SAukxSRavky2d3HwGKSMGPhV9Ww3xiywZZpkIlUGDAonnOITGDDFHGFE7MNGnVqT5QWw3ZPMq4LGnOqlqUGBJFeCOfixW15GkZE(GEc28cvdk7cVemR55hfv95YqWEwjkfxWLXRDdT9qixW0J3E(GKKKXp5lyMhKl4eIYPkTNzfS(iNQ3L7w385NO1Q7F)nrtqHQv31iJFkm)Rq1TGPhV9q4LG5oDPylyZlurHwqfYfS3CbYfBbRy48SylU4cUmZKzM1W56eBbRy48SylU4c28c1FCqHqUG)0(8MlqUylyfdNNfBXfxWmBwpFqITGvmCEwSfxCbtB2qSfSIHZZIT4Ily6HleBbRy48SylU4IlyMhKJZ)iKK1(PGvYu6HkKlyAKMpiBDFHG9OsxWKZfOYkEkdbZRcNWK8ybNrzxL9O8XfEukjRjypQ0n0qWvaKhuMnBW7KB4bT0JgI3Bk9uH)k4CPGTBAA4d4X5N3i2qWL5hln8qLE82ZhKKKVGzsBLa702BjzceCfMlD9sYcvibJmk20CAAqFssYqWL5xIBqSEwleCJ0j4USm75dQ5uDAonnOpXwswtSfStZPPbvSf8ZqEOfi)FAWmxPGX)NWcxyb76(cbZAE(rrWSMNFuemtdI1ZhejI7AWGbdAdTvdKM1x9dymGSrz))Zl75dIeHpUwxqjqCWHoG)UgmyWG2qB1aPz9D)agdEbxW6K(TkzJY()Nx2ZhejcFCTUGsGiXbh6a(7AWGbd4oSn3GoXlRFaJbTH2QbsZ6R(b)nOn0wnqAwE97AWGbd4oSn3GoXlVFaJbTH2QbsZ67(b)nOn0wnqAw(97AWGbdAdTvdKMLx)agduAxVftUZHsQn0wnqAwE9dkEqn(8joG3oOgF(7AWGbdAdTvdKMLF)agduAxVftUZHsQn0wnqAw(9dkEqn(8joG3oOgF(7AWGbdAdTvdKM1x9dymqPD9wm5ohkP2qB1aPz9v)GIhuJpFId4TdQXN)UgmyWG2qB1aPz9D)agduAxVftUZHsQn0wnqAwF3pO4b14ZN4aE7GA85VRbdgmOn0wnqAw619nGXaL21BXK7COKiP0UERhpc1jrQt8Y6hu8GoXlRN4GIgqQt8Y7hu8GoXlVNirIe3vGkf8ZqEOfihByYmxPGvRtbyBvSDb3XwWS6dwEqWMVY2dbZAE(rr119fc(5TBEco0cKlyEoAoxVGznp)OOQpxgc2ZkrP4c2GCAonnOIT4Ilj)vSfStZPPbvSfmR55hfv95YqWEwjkfSR7lemR55hfbhAbYFcUo8Cb2QveNyQ47X2jSIc(zip0cKJnmzMRuWQ1PaSTk2UG7ylywZZpkcMPbX65dIKAvLxkXDnyWGbzMdEonJsTuANvpjLxA1beQNNiqCqJkhGo(GNtZOulL2z1ts5LwDaHe5bf1ZteioW1hODnyWGbdgmyqBOTAG0S86hWyWZPzuQLs7S6jP8sRoGq980aY62Fft6wzreVzvmzwebIdo0b831GbdgmyWGbTH2QbsZYVFaJbpNMrPwkTZQNKYlT6ac3ZtdiRB)vmPBLfr8MvXKzreio4qhWFxdgmyWGbdg0gARginlV(bmg8CAgLAP0oREsTH2QbsZYRV6acK1T)kM0TYIiEZQyYSice31GbdgmyWGbTH2QbsZYVFaJbpNMrPwkTZQNuBOTAG0S87RoGazD7VIjDRSiI3SkMmlIaXDnyWGbbQCxbQuWSMNFuuDDFHGdTa5co0cKlyEoAoxVGFgYdTa5)tdM5kfm()ew4clUGniNMttdQylU4Il4xWX8)tg5cUojmPDcVJ4ssYqSfCz(9X16SJkDbFJvWSMNFuSJkDbZ0Gy98brI4UgmyWaA4gkAWZPzuQfZdvPDseU94D0ThVJU9iuDqBOTAG0Su6VQdAdTvdKM1poOO6G2qB1aPz10OjoyxbQuW6Qlmz(cxs(xIMab3SEwlSP500GwXtzijRj4M1Zh0tSfCgLDXwWLhvwZZpkcVemR55hfb3gARginlL(BaJbeiSR2qB1aPz9JdkgWyabc7Qn0wnqAwnn6bmgqGG4Il4gLvApFqITGv6msSfm7H7qVJKSMGnVqLE82dHxc(X2CrLsYAcM9WDO8sswtWShUdnXKK1eSR7lemR55hfbtpE7HTUVqWSMNFue8JT5cDsYAcU5(03ss(cM9WDOfijRjyDss(cM9WDO26(cbZAE(rrW0J3ECxdIvW0Wnu0aMgeRNpise31Gb0Wnu0G)g0gARginRgLYf7kqLcUsjjFbZE4o07AqScMgUHIgW0Gy98brI4UgmyWGmZbTH2QbsZkJEEJyJbmymO2axFG21GbdgmyWGb0Wnu0a(v5xL)UgmyWGG7f7AWGbdgmyWaA4gkAqTQ1QwBxdgmyqGk3vGkfm94Thss(c28cv2d3HkKlU4c2P500Gk2c219fc(5TBEc28c1MRcBDpNAcHxco0cKl46CqLzpFqpbBEHQbLDHxc2GcTa5cUn(rWSMNFuu1Nldb7zLOuCbxgV2n02dHCbtpE75dsssg)KVGzEqUGtikNQ0EMvW6JCQExU7pt0eKGcv7366p)TU(BDnbfQqcZ)kuIky6XBpeEjyUtxk2c28cvuOfuHCb7nxGCXwWkgopl2IlUGlZmzMznCUoXwWkgopl2IlUGnVq9hhuiKl4pTpV5cKl2cwXW5zXwCXfm9WfITGvmCEwSfxCbtB2qSfSIHZZIT4IlyMnRNpiXwWkgopl2IlU4cM5b548pcjzTFkyLmLEOc5cMgP5dYw3xiypQ0fm5CbQSINYqW8QWjmjpwWzu2vzpkFCHhLsYAc2JkDdneCfa5bLzZg8o5gEql9OH49Mspv4Vcoxky7MMg(Ge5bfcMjTvcStBVLKjqWvyU01l3nb)wOFluIYVU5xiY4NjGFc(PW8VcLab)coM)FYixW1jHjTt4DeCxwM98b1CQonNMg0NyljRj2c2P500Gk2c(zip0cK)pnyMRuW4)tyHlSGDDFHGznp)Oi4qlq(tW1HNlWwTI4etfFp2oHvuWpd5HwGCSHjZCLcwTofGTvX2fChBbZAE(rrWmniwpFqKuRQ8sjURbdgmiZCWZPzuQLs7S6jP8sRoGqI8GcEIaXbU(aTRbdgmyWG2qB1aPzP0Fdym450mk1sPDw9KuEPvhqOI9hpn4wzrdUrISU1fD7vmVPyYSOBejqCxdgmyWGbTH2QbsZsP)gWyWZPzuQLs7S6j1gARginlL(R6ac3irw36IU9kM3umzw0nIeiURbdgmyWG2qB1aPzP0Fdym450mk1k9ziNuBOTAG0Su6VQdiCJeHQdiqG4UgmyWGbdAdTvdKMLs)nGXGNtZOuR0NHCsTH2QbsZsP)QoGWnIeQoGabI7AWGbdgmOn0wnqAw)4GIbmg8CAgLAP0oREskV0QdiKipOGNgCRSOb3irw36IU9kM3umzw0nIeiURbdgmyWG2qB1aPz9JdkgWyWZPzuQLs7S6j1gARginRFCqr1beUrISU1fD7vmVPyYSOBejqCxdgmyWGbTH2QbsZ6hhumGXGNtZOuR0NHCsTH2QbsZ6hhuuDaHBKiuDabce31GbdgmyqBOTAG0S(Xbfdym450mk1k9ziNuBOTAG0S(Xbfvhq4grcvhqGaXDnyWGbdg0gARginRMg9agdEonJsTuANvpjLxA1bekGgnpn4wzrdUrISU1fD7vmVPyYSOBejqCxdgmyWGbTH2QbsZQPrpGXGNtZOulL2z1tQn0wnqAwnn6QdiCJezDRl62RyEtXKzr3isG4UgmyWGbdAdTvdKMvtJEaJbpNMrPwPpd5KAdTvdKMvtJU6ac3irO6aceiURbdgmyWG2qB1aPz10OhWyWZPzuQv6ZqoP2qB1aPz10ORoGWnIeQoGabI7AWGbdgm4JMroP2qB1aPzP0Fvh0gARginRFCqr1bTH2QbsZQPrtCxdgmyqGkhmyxbQuWSMNFuuDDFHGdTa5co0cKlyEoAoxVGznp)OOQpxgc2ZkrP4c2GCAonnOIT4IlUGrgfBAonnOpj5VcUm)sCdI1ZAHGBKobxMFS0Wdv6XBpFqss(IlUG1KK1k0V1exea \ No newline at end of file diff --git a/WA codes/Trinket procs (WA CODE).txt b/WA codes/Trinket procs (WA CODE).txt new file mode 100644 index 0000000..b87c2a3 --- /dev/null +++ b/WA codes/Trinket procs (WA CODE).txt @@ -0,0 +1 @@ +d8tBMaGArcPwVib3MuTlK41KcxwLzksimxsYSLYJr4Msv6xIeQVjr9Cc7uc7LA3a7xvYpfPgMimosQtdAOiPgSQudxICqKKpRuhtv15K0cvfwkIkwmIQwUOEiPONIAzsLwhIctuQctvWKfA6qxuQQUkIk9mr01vYgfjARIes2mj2Uuv(OiHOVIOOPHu(oP0iLQOdt0OvvgViPtIiDleX1qu68sfBtv0FrQ(TI9VdMLoy0SWCxkjPu2SU5O5OdM35rRzYH0uK9myocfPOxace23zw2AMLeiSVlKH79L7DINli5pH5vUz(dXscYifNI1k3df4KItr1zrLwmLK2Bk(3S4AkupqaAofr)PmyUVllGdWf)M)o4(dDkj7ZUvA1Yjv)SC3kTYDTcj0EAUnYOdMrz7aOdM1xne6GrJMJqffiXQHDCWS(QHqhmA0CwsCoywF1qOdgnAwrsGWb4Gz9vdHoy0O5s9vcLTdGoywF1qOdgnAopTZbZ6RgcDWOrZlXrNOjfctEJMZ3goGqNsN5yhGuhsSZZQK5l1ssq8I(Hzy0CidbACOWSwye)Ckj7ZAv9ZKv1jP1njn1QTcj0iR5oPvueh6cs6MiHzWspKH79LfU43CQPvueh6csOr2egnt4Gl(DWSKaH9DHmCVVCVt8CrcZsceoaHdMfOmJoyoo03TrRFyE3gT0LeiCaMfFJwZXHUywGOFyE3gT0vYs9ZmzEsnOALLcYGHBWR3JYR34396DpL5ZSywGOzsb4LvKeNkQIX0aHkQZsKKKusOINfikuP5hu)Om7TzXSar6eFsa4AM7vkWlB0SceafFoywmlq0mPa8YksItfvXyAGqf1zjssskjuXZcefQifOmuM92CCOlMfi6hgnAgZW9(YoywUWHOnGZK38sCKZP7hMjwcC0P)bJNzeQFrZaP(jCWf)Mz4g869O86n(DVE3tz(mA0SYaqZ9NAP8jeALDm)DW9h6c1jm3gz0bZOSDa0bZ6RgcDWOrZrOIcKy1WooywF1qOdgnAopTZbZ6RgcDWOrZksceoahmRVAi0bJgnxQVsOSDa0bZ6RgcDWOrZzjX5Gz9vdHoy0OrZkdazykCUOBxZrOOut2HrjHgcZ9kf4L7yoFB4acDkDMHedWmXmT4Of4hM7KwrrCOli5)VsPwRQlxU2T(SAwGscneAoaucb6hanNMCdmP9OFZAHr8ZfLRuQ1AnP66tAQPrZmmAMHBWR3JYR34396DpL5ZmyPhYW9(Ycx8Bo10kkIdDbj)LRuQ1AnP66tAQPzwgJqeoazJoMH79Lfoy0SaLeAiOEGa0Cin1MXlvuZPnzhCrsxKGsvnTK)jl3LS0Qj6A0Ol66Gzjbc77cz4EF5EN45IeMLeiCachmlqzgDWCCOVBJw)W8UnAPljq4aml(gTMJdDXSar)W8UnAPRKL6NzY8KAq1klfKbd3GxVhLxVXV717EKL7bywmlq0mPa8YksItfvXyAGqf1zjssskjuXZcefQ08dQFuM92SywGiDIpjaCnZ9kf4LnAwbcGIphmlMfiAMuaEzfjXPIQymnqOI6SejjjLeQ4zbIcvKcugkZEBoo0fZce9dJgnJz4EFzhmlx4q0gWzYBEjoY509dZelbo60)GXZmc1VOzGu)eo4IFZmCdE9EuE9g)UxV7rwUhGrJMvgaAU)ulLpHqRSJ5VdU)qxOoH52iJoygLTdGoywF1qOdgnAocvuGeRg2XbZ6RgcDWOrZzjX5Gz9vdHoy0O5s9vcLTdGoywF1qOdgnAwrsGWb4Gz9vdHoy0O580ohmRVAi0bJgnAwzaidtHZfD7AocfLAYomkj0qyUNsbEMZ3goGqNsNziXamtmtloAb(H5oPvueh6cs()RuQ1Q6YLRDRpRMfOKqdHMdaLqG(bqZPj3atAp63Swye)Cr5kLATwtQU(KMAA0mlJrichGSrhZW9(YchmAgS0dz4EFzHl(nNAAffXHUGK)Yvk1ATMuD9jn10mdJMz4g869O86n(DVE3JSCpaZcusOHG6bcqZH0uBgVurnN2KDWf)UibLA9zIYQPL8pz5UKLSUiPlsqPsRM4V(mrz10s(tZOrxK0bZsce23fYW9(Y9oXZfjmljq4aeoywGYm6G54qF3gT(H5DB0sxsGWbyw8nAnhh6IzbI(H5DB0sxjl1pZK5j1GQvwkidgUbVEpkVEJF3R39ewQ0ywmlq0mPa8YksItfvXyAGqf1zjssskjuXZcefQ08dQFuM92SywGiDIpjaCnZ9kf4LnAwbcGIphmlMfiAMuaEzfjXPIQymnqOI6SejjjLeQ4zbIcvKcugkZEBoo0fZce9dJgnJz4EFzhmlx4q0gWzYBEjoY509dZelbo60)GXZmc1VOzGu)eo4IFZmCdE9EuE9g)UxV7jSuPXOrZkdan3FQLYNqOv2X83b3FOluNWCBKrhmJY2bqhmRVAi0bJgnhHkkqIvd74Gz9vdHoy0O580ohmRVAi0bJgnRijq4aCWS(QHqhmA0CP(kHY2bqhmRVAi0bJgnNLeNdM1xne6GrJgnRmaKHPW5IUDnhHIsnzhgLeAimRzgIMZ3goGqNsNziXamlqjHgcQhianhstT5oPvueh6cs()RuQ1Q6YLRDRpRMfOKqdHMdaLqG(bqZPj3atAp63Swye)Cr5kLATwtQU(KMAA0mlJrichGSrhZW9(YchmAgS0dz4EFzHl(nNAAffXHUGK)Yvk1ATMuD9jn10mdJMz4g869O86n(DVE3tyPsJzIzAXrlWpmJxQOMtBYo4IFxKGsT29NSpv)SBzAK93OrxqZbZPMwrrCOli5VCLsTwRjvxFstnnZsce23fYW9(Y9oXZfjmljq4aeoywGYm6G54qF3gT(H5DB0sxsGWbyw8nAnhh6IzbI(H54qNyjWr3K38UnAPRKL6NzY8KAq1klfKrkZJaF9oLdb0SywGOzsb4LvKeNkQIX0aHkQZsKKKusOINfikuP5hu)Om7TzXSar6eFsa4AM7vkWlB0SceafFoywmlq0mPa8YksItfvXyAGqf1zjssskjuXZcefQifOmuM92CCOlMfi6hgnAgZW9(YoywUWHOnGZK3mqQFchCXV5uMhb(6D)aIpjanAEjoY509dZelbo60)GXZmc1VOrZkdan3FQLYNqOv2X83b3FOluNWCBKrhmJY2bqhmRVAi0bJgnhHkkqIvd74Gz9vdHoy0O5SK4CWS(QHqhmA0SIKaHdWbZ6RgcDWOrZL6RekBhaDWS(QHqhmA0CEANdM1xne6GrJgnRmaKHPW5IUDnhHIsnzhgLeAim3RuGxUJ58THdi0P0zgsmaZcusOHG6bcqZH0uBggnNY8iWxVt5qanlqjHgcnhakHa9dGMttUbM0E0Vzzmcr4aKn6ygU3xw4GrZAHr8ZfLRuQ1AnP66tAQPrZmyPhYW9(Ycx8BUtAffXHUGK))kLATQUC5A36ZQzIzAXrlWpmJxQOMtBYo4IKUibLQAAj)twUlzPvt01OrxqwhmljqyFxid37l37epxKWmMH79LDWSCHdrBaNjVzGu)eo4IFZuLjKG717(beFsaA08sCKZP7hMjwcC0P)bJNzeQFrJMvgaAU)ulLpHqRSJ5VdU)qxOoH52iJoygLTdGoywF1qOdgnAocvuGeRg2XbZ6RgcDWOrZ5PDoywF1qOdgnAUuFLqz7aOdM1xne6GrJMvKeiCaoywF1qOdgnAoljohmRVAi0bJgnAwzaidtHZfD7AocfLAYomkj0qyUNsbEMZ3goGqNsNziXamlqjHgcQhianhstTzjbchGWbZcuMrhmhh672O1pmVBJw6sceoaZIVrR54qxmlq0pmVBJw6kzP(zMmpPguTYsbzqvMqcUxVt5qanlMfiAMuaEzfjXPIQymnqOI6SejjjLeQ4zbIcvA(b1pkZEBwmlqKoXNeaUM5ELc8YgnRabqXNdMfZcentkaVSIK4urvmMgiurDwIKKKscv8SarHksbkdLzVnhh6IzbI(HrJMfOKqdHMdaLqG(bqZPj3atAp63SmgHiCaYgDmd37llCWOzy0mvzcj4E9oLdb0Swye)Cr5kLATwtQU(KMAA0mNAAffXHUGK)Yvk1ATMuD9jn10mdw6HmCVVSWf)M7KwrrCOli5)VsPwRQlxU2T(SAMyMwC0c8dZ4LkQ50MSdU43fjOuRptuwnTK)jl3LSK1fjDrckvA1e)1NjkRMwYFAgn6INoyo10kkIdDbj)LRuQ1AnP66tAQPzwsGW(UqgU3xU3jEUiHzjbchGWbZcuMrhmhh672O1pmVBJw6sceoaZIVrR54qxmlq0pmVBJw6kzP(zMmpPguTYsbzKsy(E9oLdb0SywGOzsb4LvKeNkQIX0aHkQZsKKKusOINfikuP5hu)Om7TzXSar6eFsa4AM7vkWlB0SceafFoywmlq0mPa8YksItfvXyAGqf1zjssskjuXZcefQifOmuM92CCOlMfi6hgnAgZW9(YoywUWHOnGZK3mqQFchCXV5ucVCNxV7hq8jbOrZlXroNUFyMyjWrN(hmEMrO(fnAwzaO5(tTu(ecTYoM)o4(dDH6eMBJm6Gzu2oa6Gz9vdHoy0O5iurbsSAyhhmRVAi0bJgnNLeNdM1xne6GrJMvKeiCaoywF1qOdgnAUuFLqz7aOdM1xne6GrJMZt7CWS(QHqhmA0OzLbGmmfox0TR5iuuQj7WOKqdHznZq0C(2Wbe6u6mdjgGzIzAXrlWpmlJrichGSrhZW9(YchmAwGscneAoaucb6hanNMCdmP9OFZWO5ucZ3R3PCiGM1cJ4NlkxPuR1As11N0utJMzWspKH79LfU43CN0kkIdDbj))vk1AvD5Y1U1NvZcusOHG6bcqZH0uBgVurnN2KDWf)UibLAT7pzFQ(z3Y0i7VrJUOSdMLeiSVlKH79L7DINlsywsGWbiCWSaLz0bZXH(UnA9dZXHUywGOFyE3gT0LeiCaMfFJwZIzbIMjfGxwrsCQOkgtdeQOolrsssjHkEwGOqLMFq9JYS3M3TrlDLSu)mtMNudQwzPGmOcSVm5NO817ELc8YDmhh6elbo6M8MfZcePt8jbGRzUxPaVSrZkqau85GzXSarZKcWlRijovufJPbcvuNLijjPKqfplquOIuGYqz2BZXHUywGOFy0Ozmd37l7Gz5chI2aotEZlXroNUFyMyjWrN(hmEMrO(fndK6NWbx8BUhW8(E9EuE9MkW(YKFIsJgnRma0C)PwkFcHwzhZFhC)HUqDcZTrgDWmkBhaDWS(QHqhmA0CeQOajwnSJdM1xne6GrJMZt7CWS(QHqhmA0SIKaHdWbZ6RgcDWOrZL6RekBhaDWS(QHqhmA0CwsCoywF1qOdgnA0SYaqgMcNl621Cekk1KDyusOHWCVsbE5oMZ3goGqNsNziXamtmtloAb(Hzzmcr4aKn6ygU3xw4GrZcusOHqZbGsiq)aO50KBGjTh9BUtAffXHUGK))kLATQUC5A36ZQzy0mvG9Lj)eLVE3RuGxUJzWspKH79LfU43CQPvueh6cs(lxPuR1As11N0utZSwye)Cr5kLATwtQU(KMAA0mlqjHgcQhianhstTz8sf1CAt2bxK0fjOuvtl5FYYDjlTAIUgn6c1oyo10kkIdDbj)LRuQ1AnP66tAQPzwsGW(UqgU3xU3jEUiHzjbchGWbZcuMrhmhh672O1pmVBJw6sceoaZIVrR54qxmlq0pmVBJw6kzP(zMmpPguTYsbzqfyFzYpr5R39ukWZSywGOzsb4LvKeNkQIX0aHkQZsKKKusOINfikuP5hu)Om7TzXSar6eFsa4AM7vkWlB0SceafFoywmlq0mPa8YksItfvXyAGqf1zjssskjuXZcefQifOmuM92CCOlMfi6hgnAgZW9(YoywUWHOnGZK38sCKZP7hMjwcC0P)bJNzeQFrZaP(jCWf)MjtjS969O86n3NSjnA0SYaqZ9NAP8jeALDm)DW9h6c1jm3gz0bZOSDa0bZ6RgcDWOrZrOIcKy1WooywF1qOdgnAoljohmRVAi0bJgnxQVsOSDa0bZ6RgcDWOrZksceoahmRVAi0bJgnNN25Gz9vdHoy0OrZkdazykCUOBxZrOOut2HrjHgcZ9ukWZC(2Wbe6u6mdjgGzIzAXrlWpm3jTII4qxqY)FLsTwvxUCTB9z1SaLeAi0CaOec0paAon5gys7r)MHrZub2xM8tu(6DpLc8mdw6HmCVVSWf)M1cJ4NlkxPuR1As11N0utJMzzmcr4aKn6ygU3xw4GrZcusOHG6bcqZH0uBgVurnN2KDWf)UibLA9zIYQPL8pz5UKLSUiPlsqPsRM4V(mrz10s(tZOrxuDWSKaH9DHmCVVCVt8CrcZsceoaHdMfOmJoyoo03TrRFyE3gT0LeiCaMfFJwZXHUywGOFyE3gT0vYs9ZmzEsnOALLcYGkW(YKFIYxV1mdrZIzbIMjfGxwrsCQOkgtdeQOolrsssjHkEwGOqLMFq9JYS3MfZcePt8jbGRzUxPaVSrZkqau85GzXSarZKcWlRijovufJPbcvuNLijjPKqfplquOIuGYqz2BZXHUywGOFy0Ozmd37l7Gz5chI2aotEZlXroNUFyMyjWrN(hmEMrO(fndK6NWbx8BUNJ22R3JYR3Kc29jZgnAwzaO5(tTu(ecTYoM)o4(dDH6eMBJm6Gzu2oa6Gz9vdHoy0O5iurbsSAyhhmRVAi0bJgnNN25Gz9vdHoy0OzfjbchGdM1xne6GrJMl1xju2oa6Gz9vdHoy0O5SK4CWS(QHqhmA0OzLbGmmfox0TR5iuuQj7WOKqdHznZq0C(2Wbe6u6mdjgGzy0mvG9Lj)eLVERzgIMfOKqdb1deGMdPP2SaLeAi0CaOec0paAon5gys7r)M7KwrrCOli5)VsPwRQlxU2T(SAwgJqeoazJoMH79Lfoy0myPhYW9(Ycx8Bo10kkIdDbj)LRuQ1AnP66tAQPzwlmIFUOCLsTwRjvxFstnnAMjMPfhTa)WmEPIAoTj7Gl(Drck1A3FY(u9ZULPr2FJgDXFchmNAAffXHUGK)Yvk1ATMuD9jn10m3jTII4qxqY)FLsTwvxUCTB9z1SKaH9DHmCVVCVt8CrcZygU3x2bZYfoeTbCM8Mbs9t4Gl(nZt70bqSJrZIsxRrAu4Gl(Dr3U0ssRSrZlXroNUFyMyjWrN(hmEMrO(fnAwzaO5(tTu(ecTYoM)o4(dDH6eMBJm6Gzu2oa6Gz9vdHoy0O5iurbsSAyhhmRVAi0bJgnNLeNdM1xne6GrJMvKeiCaoywF1qOdgnAUuFLqz7aOdM1xne6GrJMZt7CWS(QHqhmA0OzLbGmmfox0TR58THdi0P0zgsmaZYyeIWbiB0XmCVVSWbJMjMPfhTa)WSKaHdq4GzbkZOdMJd9DB06hM3TrlDjbchGzX3O1CCOlMfi6hM3TrlDLSu)mtMNudQwzPGmOcSVm5NO81BnZq0SywGOzsb4LvKeNkQIX0aHkQZsKKKusOINfikuP5hu)Om7TzXSar6eFsa4AM7vkWlB0SceafFoywmlq0mPa8YksItfvXyAGqf1zjssskjuXZcefQifOmuM92CCOlMfi6hgnAwGscneAoaucb6hanNMCdmP9OFZAHr8ZfLRuQ1AnP66tAQPrZmmAoLnPqJxVhLxV5PD6aZGLEid37llCXVzbkj0qq9abO5qAQnJxQOMtBYo4IFxKGsT29NSpv)SBzAK93Orx8)7G5oPvueh6cs()RuQ1Q6YLRDRpRMLeiSVlKH79L7DINlsygZW9(YoywUWHOnGZK38sCKZP7hMjwcC0P)bJNzeQFrZaP(jCWf)M7XOf86DpYsf0OzrPR1inkCWf)UO7pTK06A0OzLbGM7p1s5ti0k7y(7G7p0fQtyUnYOdMrz7aOdM1xne6GrJMJqffiXQHDCWS(QHqhmA0CEANdM1xne6GrJMvKeiCaoywF1qOdgnAUuFLqz7aOdM1xne6GrJMZsIZbZ6RgcDWOrJMvgaYWu4Cr3UMZ3goGqNsNziXamlqjHgcQhianhstTzy0C)79R3831AMfOKqdHMdaLqG(bqZPj3atAp63SmgHiCaYgDmd37llCWOzWspKH79LfU43Swye)Cr5kLATwtQU(KMAA0mNAAffXHUGK)Yvk1ATMuD9jn10mljq4aeoywGYm6G54qF3gT(H5DB0sxsGWbyw8nAnhh6IzbI(H5DB0sxjl1pZK5j1GQvwkidQa7lt(jkF9wZmenlMfiAMuaEzfjXPIQymnqOI6SejjjLeQ4zbIcvA(b1pkZEBwmlqKoXNeaUM5ELc8YgnRabqXNdMfZcentkaVSIK4urvmMgiurDwIKKKscv8SarHksbkdLzVnhh6IzbI(HrJMjMPfhTa)WmEPIAoTj7Gl(Drck1A3FY(u9ZULPr2FJgnAUpx8tR7VrB \ No newline at end of file diff --git a/WA snippets/Add Strings.lua b/WA snippets/Add Strings.lua new file mode 100644 index 0000000..646482d --- /dev/null +++ b/WA snippets/Add Strings.lua @@ -0,0 +1,10 @@ + +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/WA snippets/Adding text.lua new file mode 100644 index 0000000..8a6e8a0 --- /dev/null +++ b/WA snippets/Adding text.lua @@ -0,0 +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 diff --git a/WA snippets/Anchor to nameplate.lua b/WA snippets/Anchor to nameplate.lua new file mode 100644 index 0000000..a5d22a7 --- /dev/null +++ b/WA snippets/Anchor to nameplate.lua @@ -0,0 +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 diff --git a/WA snippets/Buttons.lua b/WA snippets/Buttons.lua new file mode 100644 index 0000000..29a3e2b --- /dev/null +++ b/WA snippets/Buttons.lua @@ -0,0 +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 +--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/WA snippets/C_Timer.lua new file mode 100644 index 0000000..b60befe --- /dev/null +++ b/WA snippets/C_Timer.lua @@ -0,0 +1 @@ +/ script C_Timer.After(15, function() SendChatMessage("lol", "PARTY"); end) diff --git a/WA snippets/Class Colors.lua b/WA snippets/Class Colors.lua new file mode 100644 index 0000000..1a5a118 --- /dev/null +++ b/WA snippets/Class Colors.lua @@ -0,0 +1,48 @@ +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/WA snippets/Click Buttons.lua new file mode 100644 index 0000000..9f00d5e --- /dev/null +++ b/WA snippets/Click Buttons.lua @@ -0,0 +1,3 @@ +function() + StaticPopup1Button1:Click("LeftButton") +end \ No newline at end of file diff --git a/WA snippets/Color Gradient.lua b/WA snippets/Color Gradient.lua new file mode 100644 index 0000000..bfdcaf9 --- /dev/null +++ b/WA snippets/Color Gradient.lua @@ -0,0 +1,60 @@ +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/WA snippets/Date and Time.lua new file mode 100644 index 0000000..f0d5eef --- /dev/null +++ b/WA snippets/Date and Time.lua @@ -0,0 +1,43 @@ +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 \ No newline at end of file diff --git a/WA snippets/DefStack.lua b/WA snippets/DefStack.lua new file mode 100644 index 0000000..be1792d --- /dev/null +++ b/WA snippets/DefStack.lua @@ -0,0 +1,6 @@ +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/WA snippets/Find Aura ID.lua new file mode 100644 index 0000000..2c2c61d --- /dev/null +++ b/WA snippets/Find Aura ID.lua @@ -0,0 +1,12 @@ +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/WA snippets/FormatTime.lua b/WA snippets/FormatTime.lua new file mode 100644 index 0000000..b23f1e9 --- /dev/null +++ b/WA snippets/FormatTime.lua @@ -0,0 +1,13 @@ +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 \ No newline at end of file diff --git a/WA snippets/Functions.lua b/WA snippets/Functions.lua new file mode 100644 index 0000000..382dced --- /dev/null +++ b/WA snippets/Functions.lua @@ -0,0 +1,5 @@ +local function name(arguments) +end + +aura_env.name = function(arguments) +end diff --git a/WA snippets/Get Item Link from chat link.lua b/WA snippets/Get Item Link from chat link.lua new file mode 100644 index 0000000..a3f5533 --- /dev/null +++ b/WA snippets/Get Item Link from chat link.lua @@ -0,0 +1,5 @@ + +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/WA snippets/GetSpellWithCooldown.lua new file mode 100644 index 0000000..a2f6eb8 --- /dev/null +++ b/WA snippets/GetSpellWithCooldown.lua @@ -0,0 +1,41 @@ +--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 \ No newline at end of file diff --git a/WA snippets/Hashing.lua b/WA snippets/Hashing.lua new file mode 100644 index 0000000..fdacd0d --- /dev/null +++ b/WA snippets/Hashing.lua @@ -0,0 +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 \ No newline at end of file diff --git a/WA snippets/IconPrint b/WA snippets/IconPrint new file mode 100644 index 0000000..0133516 --- /dev/null +++ b/WA snippets/IconPrint @@ -0,0 +1,2 @@ +"\124T%s:0\124t" +Where %s is icon ID \ No newline at end of file diff --git a/WA snippets/Jump God.lua b/WA snippets/Jump God.lua new file mode 100644 index 0000000..28eb4f2 --- /dev/null +++ b/WA snippets/Jump God.lua @@ -0,0 +1,3 @@ +hooksecurefunc( "JumpOrAscendStart", function() + DEFAULT_CHAT_FRAME:AddMessage( "Jump" ); +end ); \ No newline at end of file diff --git a/WA snippets/NameplateGlow.lua b/WA snippets/NameplateGlow.lua new file mode 100644 index 0000000..00f072a --- /dev/null +++ b/WA snippets/NameplateGlow.lua @@ -0,0 +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 diff --git a/WA snippets/New Texture and Anchor.lua b/WA snippets/New Texture and Anchor.lua new file mode 100644 index 0000000..4f287ae --- /dev/null +++ b/WA snippets/New Texture and Anchor.lua @@ -0,0 +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 diff --git a/WA snippets/Print Table.lua b/WA snippets/Print Table.lua new file mode 100644 index 0000000..6acd4a2 --- /dev/null +++ b/WA snippets/Print Table.lua @@ -0,0 +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 \ No newline at end of file diff --git a/WA snippets/Reading Tooltips.lua b/WA snippets/Reading Tooltips.lua new file mode 100644 index 0000000..7afdb99 --- /dev/null +++ b/WA snippets/Reading Tooltips.lua @@ -0,0 +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 diff --git a/WA snippets/Registers.lua b/WA snippets/Registers.lua new file mode 100644 index 0000000..96b0650 --- /dev/null +++ b/WA snippets/Registers.lua @@ -0,0 +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 \ No newline at end of file diff --git a/WA snippets/Round.lua b/WA snippets/Round.lua new file mode 100644 index 0000000..dee27d3 --- /dev/null +++ b/WA snippets/Round.lua @@ -0,0 +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 \ No newline at end of file diff --git a/WA snippets/Shorten Number.lua b/WA snippets/Shorten Number.lua new file mode 100644 index 0000000..7673b39 --- /dev/null +++ b/WA snippets/Shorten Number.lua @@ -0,0 +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 diff --git a/WA snippets/Size to range.lua b/WA snippets/Size to range.lua new file mode 100644 index 0000000..096dd08 --- /dev/null +++ b/WA snippets/Size to range.lua @@ -0,0 +1,4 @@ +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/WA snippets/TableSort.lua b/WA snippets/TableSort.lua new file mode 100644 index 0000000..8474b16 --- /dev/null +++ b/WA snippets/TableSort.lua @@ -0,0 +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 diff --git a/WA snippets/Talent IDs.lua b/WA snippets/Talent IDs.lua new file mode 100644 index 0000000..39fc2a1 --- /dev/null +++ b/WA snippets/Talent IDs.lua @@ -0,0 +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 + +/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/WA snippets/Text Frame.lua new file mode 100644 index 0000000..abfea52 --- /dev/null +++ b/WA snippets/Text Frame.lua @@ -0,0 +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() diff --git a/WA snippets/Timed Hide.lua b/WA snippets/Timed Hide.lua new file mode 100644 index 0000000..a495664 --- /dev/null +++ b/WA snippets/Timed Hide.lua @@ -0,0 +1,3 @@ +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/WA snippets/ToHex.lua new file mode 100644 index 0000000..3e21040 --- /dev/null +++ b/WA snippets/ToHex.lua @@ -0,0 +1,5 @@ +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/WA snippets/UnitBuff.lua new file mode 100644 index 0000000..c874d60 --- /dev/null +++ b/WA snippets/UnitBuff.lua @@ -0,0 +1,12 @@ +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/WA snippets/UnitDebuffC.lua new file mode 100644 index 0000000..1d1d749 --- /dev/null +++ b/WA snippets/UnitDebuffC.lua @@ -0,0 +1,25 @@ + +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/WA snippets/Weakaurs Useful Shit.lua new file mode 100644 index 0000000..ede5842 --- /dev/null +++ b/WA snippets/Weakaurs Useful Shit.lua @@ -0,0 +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 diff --git a/WA snippets/wow this works.lua b/WA snippets/wow this works.lua new file mode 100644 index 0000000..5bd8e7e --- /dev/null +++ b/WA snippets/wow this works.lua @@ -0,0 +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 diff --git a/WHOA MOMMA.lua b/WHOA MOMMA.lua new file mode 100644 index 0000000..fc60378 --- /dev/null +++ b/WHOA MOMMA.lua @@ -0,0 +1,39 @@ +--COMBAT_LOG_EVENT_UNFILTERED +function(event, ...) + --local GSA_TYPE = { + -- [COMBATLOG_FILTER_EVERYTHING] = ["Any"], + -- [COMBATLOG_FILTER_FRIENDLY_UNITS] = ["Friendly"], + -- [COMBATLOG_FILTER_HOSTILE_PLAYERS] = ["Hostile player"], + -- [COMBATLOG_FILTER_HOSTILE_UNITS] = ["Hostile unit"], + -- [COMBATLOG_FILTER_NEUTRAL_UNITS] = ["Neutral"], + -- [COMBATLOG_FILTER_ME] = ["Myself"], + -- [COMBATLOG_FILTER_MINE] = ["Mine"], + -- [COMBATLOG_FILTER_MY_PET] = ["My pet"], + -- [COMBATLOG_FILTER_UNKNOWN_UNITS] = "Unknow unit", + --} + local timestamp,event,hideCaster,sourceGUID,sourceName,sourceFlags,sourceFlags2,destGUID,destName,destFlags,destFlags2,spellID,spellName= select ( 1 , ... ) + local desttype = {} + --if not GSA_EVENT[event] then return end + if (destFlags) then + print("owo whats this 111111") + --for k in pairs(GSA_TYPE) do + print("owo whats this 222222") + desttype[#desttype + 1] = CombatLog_Object_IsA(destFlags,k) + print(CombatLog_Object_IsA(destFlags,COMBATLOG_FILTER_ME)) + print("owo whats this 333333") + --log("desttype:"..k.."="..(desttype[k] or "nil")) + --end + else + --for k in pairs(GSA_TYPE) do + print("owo whats this 444444") + desttype[k] = nil + --end + end + --if (event == "SPELL_AURA_APPLIED" and desttype[COMBATLOG_FILTER_HOSTILE_PLAYERS] and (not gsadb.aonlyTF or destuid.target or destuid.focus) and not gsadb.aruaApplied) then + -- self:PlaySpell("auraApplied", spellID, sourceGUID, destGUID); + --elseif (event == "SPELL_AURA_REMOVED" and desttype[COMBATLOG_FILTER_HOSTILE_PLAYERS] and (not gsadb.ronlyTF or destuid.target or destuid.focus) and not gsadb.auraRemoved) then + -- self:PlaySpell("auraRemoved", spellID, sourceGUID, destGUID) + --elseif (event == "SPELL_CAST_START" and sourcetype[COMBATLOG_FILTER_HOSTILE_PLAYERS] and (not gsadb.conlyTF or sourceuid.target or sourceuid.focus) and not gsadb.castStart) then + -- self:PlaySpell("castStart", spellID, sourceGUID, destGUID) + --elseif ((event == "SPELL_CAST_SUCCESS" or event == "SPELL_SUMMON") and sourcetype[COMBATLOG_FILTER_HOSTILE_PLAYERS] and (not gsadb.sonlyTF or sourceuid.target or sourceuid.focus) and not gsadb.castSuccess) then +end \ No newline at end of file diff --git a/WIP/Atrigan Interrupt/Display.lua b/WIP/Atrigan Interrupt/Display.lua new file mode 100644 index 0000000..ddf810f --- /dev/null +++ b/WIP/Atrigan Interrupt/Display.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/WIP/Atrigan Interrupt/INIT.lua b/WIP/Atrigan Interrupt/INIT.lua new file mode 100644 index 0000000..03c38cb --- /dev/null +++ b/WIP/Atrigan Interrupt/INIT.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/WIP/Atrigan Interrupt/Libs.lua b/WIP/Atrigan Interrupt/Libs.lua new file mode 100644 index 0000000..d1fefd5 --- /dev/null +++ b/WIP/Atrigan Interrupt/Libs.lua @@ -0,0 +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:40 PM] [Virags DT]: 18 - 16 \ No newline at end of file diff --git a/WIP/Atrigan Interrupt/Trigger1.lua b/WIP/Atrigan Interrupt/Trigger1.lua new file mode 100644 index 0000000..9f0d54b --- /dev/null +++ b/WIP/Atrigan Interrupt/Trigger1.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/WIP/Atrigan Interrupt/Trigger2.lua b/WIP/Atrigan Interrupt/Trigger2.lua new file mode 100644 index 0000000..e821465 --- /dev/null +++ b/WIP/Atrigan Interrupt/Trigger2.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/WIP/Atrigan Interrupt/Trigger3.lua b/WIP/Atrigan Interrupt/Trigger3.lua new file mode 100644 index 0000000..ed6eb0e --- /dev/null +++ b/WIP/Atrigan Interrupt/Trigger3.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/WIP/Block.lua b/WIP/Block.lua new file mode 100644 index 0000000..8ff0024 --- /dev/null +++ b/WIP/Block.lua @@ -0,0 +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 +aura_env.overallBlock = 0 \ No newline at end of file diff --git a/WIP/Dargul Timer(UNTESTED).lua b/WIP/Dargul Timer(UNTESTED).lua new file mode 100644 index 0000000..2fa98cf --- /dev/null +++ b/WIP/Dargul Timer(UNTESTED).lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/WIP/Hydra Shot 2.lua b/WIP/Hydra Shot 2.lua new file mode 100644 index 0000000..decd84c --- /dev/null +++ b/WIP/Hydra Shot 2.lua @@ -0,0 +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 +aura_env.output = "" \ No newline at end of file diff --git a/WIP/Hydra Shot.lua b/WIP/Hydra Shot.lua new file mode 100644 index 0000000..eac2b4c --- /dev/null +++ b/WIP/Hydra Shot.lua @@ -0,0 +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 + + + diff --git a/WIP/Icey AP/C AP.lua b/WIP/Icey AP/C AP.lua new file mode 100644 index 0000000..c641dda --- /dev/null +++ b/WIP/Icey AP/C AP.lua @@ -0,0 +1,5 @@ +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/WIP/Icey AP/Cast AP.lua new file mode 100644 index 0000000..673a0bb --- /dev/null +++ b/WIP/Icey AP/Cast AP.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/WIP/Icey AP/Pred AP.lua b/WIP/Icey AP/Pred AP.lua new file mode 100644 index 0000000..1e0437b --- /dev/null +++ b/WIP/Icey AP/Pred AP.lua @@ -0,0 +1,5 @@ +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/WIP/Last n spells cast.lua b/WIP/Last n spells cast.lua new file mode 100644 index 0000000..1648ca7 --- /dev/null +++ b/WIP/Last n spells cast.lua @@ -0,0 +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" +aura_env.casterName = "" \ No newline at end of file diff --git a/WIP/Nameplate HP Sort.lua b/WIP/Nameplate HP Sort.lua new file mode 100644 index 0000000..cd7fc9b --- /dev/null +++ b/WIP/Nameplate HP Sort.lua @@ -0,0 +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 +print(output) \ No newline at end of file diff --git a/WIP/Premade Automation.lua b/WIP/Premade Automation.lua new file mode 100644 index 0000000..a48c340 --- /dev/null +++ b/WIP/Premade Automation.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/WIP/Reply to MOVE.lua b/WIP/Reply to MOVE.lua new file mode 100644 index 0000000..b3a1013 --- /dev/null +++ b/WIP/Reply to MOVE.lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/WIP/Some Premade Documentation.lua b/WIP/Some Premade Documentation.lua new file mode 100644 index 0000000..9f97565 --- /dev/null +++ b/WIP/Some Premade Documentation.lua @@ -0,0 +1,2962 @@ +------------------------------------------------------- +----------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/WIP/Some next gen shit.lua new file mode 100644 index 0000000..04b6c4b --- /dev/null +++ b/WIP/Some next gen shit.lua @@ -0,0 +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(39045) then SlashCmdList.TOMTOM_WAY("Tanaan Jungle 37.0 32.8 Zoug the Heavy"); end \ No newline at end of file diff --git a/WIP/Swelter.lua b/WIP/Swelter.lua new file mode 100644 index 0000000..4b11c92 --- /dev/null +++ b/WIP/Swelter.lua @@ -0,0 +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 = "" +aura_env.startTime = 0 \ No newline at end of file diff --git a/WIP/TODO.lua b/WIP/TODO.lua new file mode 100644 index 0000000..8b3e86b --- /dev/null +++ b/WIP/TODO.lua @@ -0,0 +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 + +make a proper judgment/hotp bar thing with code \ No newline at end of file diff --git a/WIP/Tank Stack Alerts(UNTESTED).lua b/WIP/Tank Stack Alerts(UNTESTED).lua new file mode 100644 index 0000000..bb173da --- /dev/null +++ b/WIP/Tank Stack Alerts(UNTESTED).lua @@ -0,0 +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 +end \ No newline at end of file diff --git a/WIP/ToDissect.lua b/WIP/ToDissect.lua new file mode 100644 index 0000000..c3402dc --- /dev/null +++ b/WIP/ToDissect.lua @@ -0,0 +1,568 @@ +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 +