├── .prettierignore ├── src ├── react-app-env.d.ts ├── App.tsx ├── redux │ └── Store.tsx ├── data │ ├── AuraGroups.tsx │ ├── Sockets.tsx │ ├── PresetItemSets.tsx │ └── Races.tsx ├── css │ └── index.css ├── index.tsx ├── components │ ├── CombatLog.tsx │ ├── DpsHistogram.tsx │ ├── Session.tsx │ ├── Main.tsx │ └── RotationSelection.tsx ├── i18n │ └── config.js ├── SimWorker.js ├── scripts │ └── image_existence_check.py └── logo.svg ├── public ├── robots.txt ├── favicon.ico ├── WarlockSim.wasm ├── img │ ├── inv_axe_12.jpg │ ├── inv_belt_01.jpg │ ├── inv_belt_03.jpg │ ├── inv_belt_04.jpg │ ├── inv_belt_07.jpg │ ├── inv_belt_08.jpg │ ├── inv_belt_10.jpg │ ├── inv_belt_12.jpg │ ├── inv_belt_13.jpg │ ├── inv_belt_17.jpg │ ├── inv_belt_23.jpg │ ├── inv_boots_05.jpg │ ├── inv_boots_09.jpg │ ├── inv_bracer_07.jpg │ ├── inv_bracer_09.jpg │ ├── inv_bracer_10.jpg │ ├── inv_bracer_12.jpg │ ├── inv_bracer_13.jpg │ ├── inv_bracer_18.jpg │ ├── inv_bracer_19.jpg │ ├── inv_crown_01.jpg │ ├── inv_drink_04.jpg │ ├── inv_drink_05.jpg │ ├── inv_drink_17.jpg │ ├── inv_gizmo_09.jpg │ ├── inv_helmet_08.jpg │ ├── inv_helmet_14.jpg │ ├── inv_helmet_21.jpg │ ├── inv_helmet_27.jpg │ ├── inv_helmet_30.jpg │ ├── inv_helmet_34.jpg │ ├── inv_helmet_53.jpg │ ├── inv_helmet_62.jpg │ ├── inv_helmet_70.jpg │ ├── inv_helmet_72.jpg │ ├── inv_pants_07.jpg │ ├── inv_pants_08.jpg │ ├── inv_pants_14.jpg │ ├── inv_potion_25.jpg │ ├── inv_potion_26.jpg │ ├── inv_potion_32.jpg │ ├── inv_potion_41.jpg │ ├── inv_potion_45.jpg │ ├── inv_potion_46.jpg │ ├── inv_potion_60.jpg │ ├── inv_potion_75.jpg │ ├── inv_potion_76.jpg │ ├── inv_potion_96.jpg │ ├── inv_scroll_01.jpg │ ├── inv_scroll_02.jpg │ ├── inv_scroll_07.jpg │ ├── inv_staff_08.jpg │ ├── inv_staff_13.jpg │ ├── inv_staff_14.jpg │ ├── inv_staff_15.jpg │ ├── inv_staff_23.jpg │ ├── inv_staff_39.jpg │ ├── inv_staff_40.jpg │ ├── inv_staff_43.jpg │ ├── inv_staff_45.jpg │ ├── inv_staff_47.jpg │ ├── inv_staff_52.jpg │ ├── inv_staff_53.jpg │ ├── inv_staff_54.jpg │ ├── inv_staff_59.jpg │ ├── inv_staff_61.jpg │ ├── inv_staff_74.jpg │ ├── inv_staff_78.jpg │ ├── inv_stone_04.jpg │ ├── inv_stone_15.jpg │ ├── inv_sword_01.jpg │ ├── inv_sword_05.jpg │ ├── inv_sword_109.jpg │ ├── inv_sword_11.jpg │ ├── inv_sword_59.jpg │ ├── inv_sword_65.jpg │ ├── inv_sword_73.jpg │ ├── inv_sword_90.jpg │ ├── inv_wand_05.jpg │ ├── inv_wand_06.jpg │ ├── inv_wand_07.jpg │ ├── inv_wand_09.jpg │ ├── inv_wand_12.jpg │ ├── inv_wand_15.jpg │ ├── inv_wand_16.jpg │ ├── inv_wand_17.jpg │ ├── inv_wand_18.jpg │ ├── inv_wand_19.jpg │ ├── inv_wand_20.jpg │ ├── inv_wand_21.jpg │ ├── inv_wand_23.jpg │ ├── inv_wand_24.jpg │ ├── inv_wand_25.jpg │ ├── inv_helmet_103.jpg │ ├── inv_helmet_116.jpg │ ├── inv_helmet_132.jpg │ ├── inv_misc_orb_02.jpg │ ├── inv_misc_orb_04.jpg │ ├── inv_misc_orb_05.jpg │ ├── inv_potion_105.jpg │ ├── inv_potion_107.jpg │ ├── inv_potion_115.jpg │ ├── inv_potion_136.jpg │ ├── inv_potion_137.jpg │ ├── inv_potion_141.jpg │ ├── inv_potion_145.jpg │ ├── inv_potion_146.jpg │ ├── inv_potion_151.jpg │ ├── inv_potion_155.jpg │ ├── inv_shoulder_01.jpg │ ├── inv_shoulder_02.jpg │ ├── inv_shoulder_18.jpg │ ├── inv_shoulder_19.jpg │ ├── inv_shoulder_22.jpg │ ├── inv_shoulder_23.jpg │ ├── inv_shoulder_24.jpg │ ├── inv_shoulder_25.jpg │ ├── inv_shoulder_32.jpg │ ├── inv_shoulder_36.jpg │ ├── inv_shoulder_68.jpg │ ├── inv_shoulder_82.jpg │ ├── inv_shoulder_96.jpg │ ├── spell_fire_fire.jpg │ ├── UI-EmptySocket-Red.jpg │ ├── ability_trueshot.jpg │ ├── inv-mount_raven_54.jpg │ ├── inv_ammo_firetar.jpg │ ├── inv_boots_cloth_01.jpg │ ├── inv_boots_cloth_02.jpg │ ├── inv_boots_cloth_03.jpg │ ├── inv_boots_cloth_04.jpg │ ├── inv_boots_cloth_05.jpg │ ├── inv_boots_cloth_06.jpg │ ├── inv_boots_cloth_09.jpg │ ├── inv_boots_cloth_10.jpg │ ├── inv_boots_cloth_11.jpg │ ├── inv_boots_cloth_12.jpg │ ├── inv_boots_cloth_14.jpg │ ├── inv_boots_cloth_16.jpg │ ├── inv_boots_cloth_17.jpg │ ├── inv_chest_cloth_02.jpg │ ├── inv_chest_cloth_08.jpg │ ├── inv_chest_cloth_12.jpg │ ├── inv_chest_cloth_17.jpg │ ├── inv_chest_cloth_18.jpg │ ├── inv_chest_cloth_19.jpg │ ├── inv_chest_cloth_25.jpg │ ├── inv_chest_cloth_29.jpg │ ├── inv_chest_cloth_38.jpg │ ├── inv_chest_cloth_42.jpg │ ├── inv_chest_cloth_43.jpg │ ├── inv_chest_cloth_46.jpg │ ├── inv_chest_cloth_48.jpg │ ├── inv_chest_cloth_49.jpg │ ├── inv_chest_cloth_51.jpg │ ├── inv_chest_cloth_68.jpg │ ├── inv_datacrystal01.jpg │ ├── inv_datacrystal06.jpg │ ├── inv_gauntlets_09.jpg │ ├── inv_gauntlets_14.jpg │ ├── inv_gauntlets_15.jpg │ ├── inv_gauntlets_16.jpg │ ├── inv_gauntlets_17.jpg │ ├── inv_gauntlets_19.jpg │ ├── inv_gauntlets_30.jpg │ ├── inv_gauntlets_32.jpg │ ├── inv_gauntlets_49.jpg │ ├── inv_gauntlets_50.jpg │ ├── inv_gauntlets_66.jpg │ ├── inv_misc_book_05.jpg │ ├── inv_misc_book_06.jpg │ ├── inv_misc_book_07.jpg │ ├── inv_misc_book_10.jpg │ ├── inv_misc_cape_05.jpg │ ├── inv_misc_cape_06.jpg │ ├── inv_misc_cape_10.jpg │ ├── inv_misc_cape_11.jpg │ ├── inv_misc_cape_16.jpg │ ├── inv_misc_cape_18.jpg │ ├── inv_misc_cape_19.jpg │ ├── inv_misc_cape_20.jpg │ ├── inv_misc_cape_21.jpg │ ├── inv_misc_drum_02.jpg │ ├── inv_misc_drum_03.jpg │ ├── inv_misc_drum_07.jpg │ ├── inv_misc_fish_16.jpg │ ├── inv_misc_food_49.jpg │ ├── inv_misc_food_53.jpg │ ├── inv_misc_food_63.jpg │ ├── inv_misc_gift_03.jpg │ ├── inv_misc_herb_11.jpg │ ├── inv_misc_pipe_01.jpg │ ├── inv_misc_ribbon_01.jpg │ ├── inv_misc_rune_04.jpg │ ├── inv_pants_cloth_05.jpg │ ├── inv_pants_cloth_09.jpg │ ├── inv_pants_cloth_14.jpg │ ├── inv_pants_cloth_15.jpg │ ├── inv_pants_cloth_16.jpg │ ├── inv_pants_cloth_17.jpg │ ├── inv_pants_cloth_20.jpg │ ├── inv_pants_cloth_21.jpg │ ├── inv_pants_cloth_27.jpg │ ├── inv_pants_cloth_29.jpg │ ├── inv_pants_mail_20.jpg │ ├── inv_staff_medivh.jpg │ ├── spell_arcane_blink.jpg │ ├── spell_fire_burnout.jpg │ ├── spell_fire_volcano.jpg │ ├── spell_shadow_curse.jpg │ ├── talent_arrow_down.jpg │ ├── talent_arrow_right.jpg │ ├── Spell_shadow_misery.jpg │ ├── UI-EmptySocket-Blue.jpg │ ├── UI-EmptySocket-Meta.jpg │ ├── ability_meleedamage.jpg │ ├── inv_boots_fabric_01.jpg │ ├── inv_chest_leather_01.jpg │ ├── inv_gizmo_newgoggles.jpg │ ├── inv_jewelry_ring_09.jpg │ ├── inv_jewelry_ring_11.jpg │ ├── inv_jewelry_ring_15.jpg │ ├── inv_jewelry_ring_16.jpg │ ├── inv_jewelry_ring_23.jpg │ ├── inv_jewelry_ring_24.jpg │ ├── inv_jewelry_ring_31.jpg │ ├── inv_jewelry_ring_35.jpg │ ├── inv_jewelry_ring_37.jpg │ ├── inv_jewelry_ring_38.jpg │ ├── inv_jewelry_ring_39.jpg │ ├── inv_jewelry_ring_40.jpg │ ├── inv_jewelry_ring_42.jpg │ ├── inv_jewelry_ring_44.jpg │ ├── inv_jewelry_ring_45.jpg │ ├── inv_jewelry_ring_54.jpg │ ├── inv_jewelry_ring_55.jpg │ ├── inv_jewelry_ring_56.jpg │ ├── inv_jewelry_ring_57.jpg │ ├── inv_jewelry_ring_60.jpg │ ├── inv_jewelry_ring_61.jpg │ ├── inv_jewelry_ring_62.jpg │ ├── inv_jewelry_ring_63.jpg │ ├── inv_jewelry_ring_65.jpg │ ├── inv_jewelry_ring_68.jpg │ ├── inv_misc_birdbeck_01.jpg │ ├── inv_misc_elvencoins.jpg │ ├── inv_misc_gem_opal_02.jpg │ ├── inv_misc_gem_ruby_01.jpg │ ├── inv_misc_gem_ruby_03.jpg │ ├── inv_pants_leather_05.jpg │ ├── inv_pants_leather_11.jpg │ ├── inv_pants_leather_12.jpg │ ├── inv_qirajidol_night.jpg │ ├── inv_sword_draenei_04.jpg │ ├── inv_weapon_halberd17.jpg │ ├── inv_weapon_halberd19.jpg │ ├── spell_fire_fireball.jpg │ ├── spell_fire_firebolt.jpg │ ├── spell_fire_lavaspawn.jpg │ ├── spell_fire_soulburn.jpg │ ├── spell_holy_holysmite.jpg │ ├── spell_holy_stoicism.jpg │ ├── spell_shadow_requiem.jpg │ ├── UI-EmptySocket-Yellow.jpg │ ├── ability_warrior_cleave.jpg │ ├── ability_warrior_riposte.jpg │ ├── ability_warrior_sunder.jpg │ ├── inv_elemental_mote_mana.jpg │ ├── inv_enchant_voidsphere.jpg │ ├── inv_gizmo_rocketboot_01.jpg │ ├── inv_jewelry_amulet_04.jpg │ ├── inv_jewelry_necklace_01.jpg │ ├── inv_jewelry_necklace_04.jpg │ ├── inv_jewelry_necklace_10.jpg │ ├── inv_jewelry_necklace_12.jpg │ ├── inv_jewelry_necklace_14.jpg │ ├── inv_jewelry_necklace_16.jpg │ ├── inv_jewelry_necklace_17.jpg │ ├── inv_jewelry_necklace_19.jpg │ ├── inv_jewelry_necklace_27.jpg │ ├── inv_jewelry_necklace_28.jpg │ ├── inv_jewelry_necklace_30.jpg │ ├── inv_jewelry_necklace_32.jpg │ ├── inv_jewelry_necklace_34.jpg │ ├── inv_jewelry_necklace_35.jpg │ ├── inv_jewelry_necklace_36.jpg │ ├── inv_jewelry_necklace_40.jpg │ ├── inv_jewelry_talisman_15.jpg │ ├── inv_misc_bag_10_green.jpg │ ├── inv_misc_gem_diamond_02.jpg │ ├── inv_misc_gem_diamond_06.jpg │ ├── inv_misc_gem_diamond_07.jpg │ ├── inv_misc_gem_pearl_01.jpg │ ├── inv_misc_gem_topaz_02.jpg │ ├── inv_misc_head_dragon_01.jpg │ ├── inv_misc_head_troll_01.jpg │ ├── inv_misc_herb_flamecap.jpg │ ├── inv_misc_stonetablet_11.jpg │ ├── inv_offhand_hyjal_d_01.jpg │ ├── inv_sword_2h_blood_c_03.jpg │ ├── inv_trinket_naxxramas06.jpg │ ├── spell_fire_flameshock.jpg │ ├── spell_fire_immolation.jpg │ ├── spell_fire_sealoffire.jpg │ ├── spell_fire_selfdestruct.jpg │ ├── spell_fire_totemofwrath.jpg │ ├── spell_fire_windsofwoe.jpg │ ├── spell_holy_lesserheal02.jpg │ ├── spell_holy_mindvision.jpg │ ├── spell_nature_bloodlust.jpg │ ├── spell_nature_faeriefire.jpg │ ├── spell_nature_lightning.jpg │ ├── spell_nature_moonglow.jpg │ ├── spell_shadow_antishadow.jpg │ ├── spell_shadow_bloodboil.jpg │ ├── spell_shadow_callofbone.jpg │ ├── spell_shadow_chilltouch.jpg │ ├── spell_shadow_contagion.jpg │ ├── spell_shadow_darkritual.jpg │ ├── spell_shadow_deathcoil.jpg │ ├── spell_shadow_deathpact.jpg │ ├── spell_shadow_felarmour.jpg │ ├── spell_shadow_grimward.jpg │ ├── spell_shadow_haunting.jpg │ ├── spell_shadow_lifedrain.jpg │ ├── spell_shadow_manafeed.jpg │ ├── spell_shadow_rainoffire.jpg │ ├── spell_shadow_shadowbolt.jpg │ ├── spell_shadow_shadowfury.jpg │ ├── spell_shadow_shadowpact.jpg │ ├── spell_shadow_siphonmana.jpg │ ├── spell_shadow_summonimp.jpg │ ├── spell_shadow_twilight.jpg │ ├── ability_hunter_snipershot.jpg │ ├── inv_elemental_mote_life01.jpg │ ├── inv_misc_bone_elfskull_01.jpg │ ├── inv_misc_food_86_basilisk.jpg │ ├── inv_misc_gem_bloodgem_02.jpg │ ├── inv_misc_gem_lionseye_01.jpg │ ├── inv_misc_gem_sapphire_01.jpg │ ├── inv_offhand_draenei_a_01.jpg │ ├── inv_offhand_naxxramas_03.jpg │ ├── inv_offhand_sunwell_d_02.jpg │ ├── inv_offhand_zulaman_d_02.jpg │ ├── inv_summerfest_firespirit.jpg │ ├── inv_valentineschocolate02.jpg │ ├── inv_weapon_shortblade_05.jpg │ ├── inv_weapon_shortblade_23.jpg │ ├── inv_weapon_shortblade_26.jpg │ ├── inv_weapon_shortblade_27.jpg │ ├── inv_weapon_shortblade_33.jpg │ ├── inv_weapon_shortblade_37.jpg │ ├── inv_weapon_shortblade_41.jpg │ ├── inv_weapon_shortblade_51.jpg │ ├── inv_weapon_shortblade_52.jpg │ ├── inv_weapon_shortblade_53.jpg │ ├── inv_weapon_shortblade_54.jpg │ ├── inv_weapon_shortblade_58.jpg │ ├── inv_weapon_shortblade_64.jpg │ ├── inv_weapon_shortblade_73.jpg │ ├── inv_weapon_shortblade_78.jpg │ ├── spell_holy_magicalsentry.jpg │ ├── spell_holy_powerinfusion.jpg │ ├── spell_holy_prayerofspirit.jpg │ ├── spell_nature_focusedmind.jpg │ ├── spell_nature_massteleport.jpg │ ├── spell_nature_regeneration.jpg │ ├── spell_nature_removecurse.jpg │ ├── spell_nature_slowingtotem.jpg │ ├── spell_shadow_blackplague.jpg │ ├── spell_shadow_deathscream.jpg │ ├── spell_shadow_enslavedemon.jpg │ ├── spell_shadow_lifedrain02.jpg │ ├── spell_shadow_ragingscream.jpg │ ├── spell_shadow_scourgebuild.jpg │ ├── spell_shadow_soulleech_3.jpg │ ├── Spell_shadow_demonictactics.jpg │ ├── ability_creature_poison_05.jpg │ ├── ability_rogue_findweakness.jpg │ ├── ability_warrior_battleshout.jpg │ ├── ability_warrior_bloodfrenzy.jpg │ ├── inv_jewelry_ring_48naxxramas.jpg │ ├── inv_jewelry_ring_49naxxramas.jpg │ ├── inv_jewelry_ring_50naxxramas.jpg │ ├── inv_jewelry_ring_51naxxramas.jpg │ ├── inv_jewelry_ring_52naxxramas.jpg │ ├── inv_jewelry_ring_53naxxramas.jpg │ ├── inv_jewelry_ring_ahnqiraj_02.jpg │ ├── inv_misc_cape_naxxramas_03.jpg │ ├── inv_misc_gem_bloodstone_01.jpg │ ├── inv_misc_gem_bloodstone_02.jpg │ ├── inv_misc_gem_deepperidot_02.jpg │ ├── inv_misc_gem_deepperidot_03.jpg │ ├── inv_misc_gem_ebondraenite_01.jpg │ ├── inv_misc_gem_ebondraenite_02.jpg │ ├── inv_misc_token_argentdawn3.jpg │ ├── inv_offhand_outlandraid_01.jpg │ ├── inv_summerfest_symbol_high.jpg │ ├── inv_summerfest_symbol_medium.jpg │ ├── inv_valentineperfumebottle.jpg │ ├── inv_wand_1h_stratholme_d_01.jpg │ ├── inv_wand_1h_stratholme_d_02.jpg │ ├── racial_orc_berserkerstrength.jpg │ ├── spell_arcane_arcanetorrent.jpg │ ├── spell_fire_playingwithfire.jpg │ ├── spell_holy_arcaneintellect.jpg │ ├── spell_holy_prayeroffortitude.jpg │ ├── spell_holy_righteousnessaura.jpg │ ├── spell_nature_earthbindtotem.jpg │ ├── spell_nature_manaregentotem.jpg │ ├── spell_nature_unleashedrage.jpg │ ├── spell_shadow_auraofdarkness.jpg │ ├── spell_shadow_burningspirit.jpg │ ├── spell_shadow_corpseexplode.jpg │ ├── spell_shadow_curseofsargeras.jpg │ ├── spell_shadow_fingerofdeath.jpg │ ├── spell_shadow_gathershadows.jpg │ ├── spell_shadow_impphaseshift.jpg │ ├── spell_shadow_metamorphosis.jpg │ ├── spell_shadow_psychicscream.jpg │ ├── spell_shadow_shadetruesight.jpg │ ├── spell_shadow_shadowandflame.jpg │ ├── spell_shadow_shadowembrace.jpg │ ├── spell_shadow_shadowwordpain.jpg │ ├── spell_shadow_summonfelguard.jpg │ ├── spell_shadow_summonsuccubus.jpg │ ├── spell_shadow_unholystrength.jpg │ ├── ability_hunter_mastermarksman.jpg │ ├── ability_rogue_sinistercalling.jpg │ ├── inv_jewelcrafting_dawnstone_03.jpg │ ├── inv_jewelcrafting_lionseye_02.jpg │ ├── inv_jewelcrafting_nightseye_01.jpg │ ├── inv_jewelcrafting_nightseye_03.jpg │ ├── inv_jewelcrafting_pyrestone_02.jpg │ ├── inv_jewelcrafting_rubyserpent.jpg │ ├── inv_jewelcrafting_talasite_01.jpg │ ├── inv_jewelcrafting_talasite_03.jpg │ ├── inv_misc_gem_azuredraenite_02.jpg │ ├── inv_misc_gem_goldendraenite_02.jpg │ ├── inv_misc_ticket_tarot_crusade.jpg │ ├── inv_offhand_outlandraid_03blue.jpg │ ├── spell_arcane_arcaneresilience.jpg │ ├── spell_arcane_teleportorgrimmar.jpg │ ├── spell_nature_invisibilitytotem.jpg │ ├── spell_nature_unyeildingstamina.jpg │ ├── spell_shadow_curseofachimonde.jpg │ ├── spell_shadow_curseofmannoroth.jpg │ ├── spell_shadow_demonicfortitude.jpg │ ├── spell_shadow_netherprotection.jpg │ ├── spell_shadow_seedofdestruction.jpg │ ├── spell_shadow_summonvoidwalker.jpg │ ├── spell_shadow_unsummonbuilding.jpg │ ├── Spell_shadow_painfulafflictions.jpg │ ├── inv_gizmo_elementalblastingpowder.jpg │ ├── inv_jewelcrafting_livingruby_03.jpg │ ├── inv_jewelcrafting_nobletopaz_02.jpg │ ├── inv_jewelcrafting_nobletopaz_03.jpg │ ├── inv_jewelcrafting_starofelune_03.jpg │ ├── inv_jewelry_necklace_29naxxramas.jpg │ ├── inv_jewelry_necklace_30naxxramas.jpg │ ├── inv_jewelry_necklace_ahnqiraj_01.jpg │ ├── inv_jewelry_necklace_ahnqiraj_02.jpg │ ├── inv_jewelry_necklace_ahnqiraj_03.jpg │ ├── inv_jewelry_necklace_ahnqiraj_04.jpg │ ├── inv_misc_gem_flamespessarite_02.jpg │ ├── inv_misc_summerfest_brazierorange.jpg │ ├── inv_offhand_outlandraid_03orange.jpg │ ├── inv_offhand_outlandraid_03white.jpg │ ├── spell_frost_summonwaterelemental.jpg │ ├── spell_holy_greaterblessingofkings.jpg │ ├── spell_shadow_abominationexplosion.jpg │ ├── spell_shadow_shadowworddominate.jpg │ ├── spell_shadow_unstableaffliction_3.jpg │ ├── talent_tree_background_Affliction.jpg │ ├── talent_tree_background_Demonology.jpg │ ├── ability_hunter_ferociousinspiration.jpg │ ├── inv_jewelcrafting_crimsonspinel_02.jpg │ ├── spell_holy_greaterblessingofwisdom.jpg │ ├── spell_magic_greaterblessingofkings.jpg │ ├── talent_tree_background_Destruction.jpg │ ├── Spell_shadow_improvedvampiricembrace.jpg │ ├── inv_jewelcrafting_empyreansapphire_02.jpg │ ├── inv_jewelcrafting_seasprayemerald_02.jpg │ ├── spell_holy_greaterblessingofsalvation.jpg │ └── inv_jewelcrafting_shadowsongamethyst_02.jpg ├── manifest.json └── index.html ├── config-overrides.js ├── cpp ├── WarlockSimulatorTBC │ ├── include │ │ ├── simulation_settings.h │ │ ├── common.h │ │ ├── spell_proc.h │ │ ├── sets.h │ │ ├── rng.h │ │ ├── life_tap.h │ │ ├── on_resist_proc.h │ │ ├── items.h │ │ ├── spell_cast_result.h │ │ ├── mana_potion.h │ │ ├── combat_log_breakdown.h │ │ ├── on_damage_proc.h │ │ ├── embind_constant.h │ │ ├── on_dot_tick_proc.h │ │ ├── mana_over_time.h │ │ ├── on_crit_proc.h │ │ ├── talents.h │ │ ├── pet.h │ │ ├── simulation.h │ │ ├── bindings.h │ │ ├── player.h │ │ ├── stat.h │ │ ├── aura_selection.h │ │ ├── character_stats.h │ │ ├── damage_over_time.h │ │ ├── auras.h │ │ ├── on_hit_proc.h │ │ ├── trinket.h │ │ └── spells.h │ └── src │ │ ├── spell_proc.cc │ │ ├── rng.cc │ │ ├── common.cc │ │ ├── on_resist_proc.cc │ │ ├── on_damage_proc.cc │ │ ├── on_dot_tick_proc.cc │ │ ├── mana_potion.cc │ │ ├── on_crit_proc.cc │ │ ├── mana_over_time.cc │ │ └── life_tap.cc └── WarlockSimulatorTBC.sln ├── .clang-format ├── .prettierrc ├── .github └── workflows │ ├── npm-build.yml │ ├── prettier-lint.yml │ ├── clang-format-lint.yml │ ├── image-existence-check.yml │ └── deployment.yml ├── tsconfig.json ├── README.md ├── Makefile └── package.json /.prettierignore: -------------------------------------------------------------------------------- 1 | public/WarlockSim.js -------------------------------------------------------------------------------- /src/react-app-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /public/WarlockSim.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/WarlockSim.wasm -------------------------------------------------------------------------------- /public/img/inv_axe_12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_axe_12.jpg -------------------------------------------------------------------------------- /public/img/inv_belt_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_belt_01.jpg -------------------------------------------------------------------------------- /public/img/inv_belt_03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_belt_03.jpg -------------------------------------------------------------------------------- /public/img/inv_belt_04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_belt_04.jpg -------------------------------------------------------------------------------- /public/img/inv_belt_07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_belt_07.jpg -------------------------------------------------------------------------------- /public/img/inv_belt_08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_belt_08.jpg -------------------------------------------------------------------------------- /public/img/inv_belt_10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_belt_10.jpg -------------------------------------------------------------------------------- /public/img/inv_belt_12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_belt_12.jpg -------------------------------------------------------------------------------- /public/img/inv_belt_13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_belt_13.jpg -------------------------------------------------------------------------------- /public/img/inv_belt_17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_belt_17.jpg -------------------------------------------------------------------------------- /public/img/inv_belt_23.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_belt_23.jpg -------------------------------------------------------------------------------- /public/img/inv_boots_05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_boots_05.jpg -------------------------------------------------------------------------------- /public/img/inv_boots_09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_boots_09.jpg -------------------------------------------------------------------------------- /public/img/inv_bracer_07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_bracer_07.jpg -------------------------------------------------------------------------------- /public/img/inv_bracer_09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_bracer_09.jpg -------------------------------------------------------------------------------- /public/img/inv_bracer_10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_bracer_10.jpg -------------------------------------------------------------------------------- /public/img/inv_bracer_12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_bracer_12.jpg -------------------------------------------------------------------------------- /public/img/inv_bracer_13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_bracer_13.jpg -------------------------------------------------------------------------------- /public/img/inv_bracer_18.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_bracer_18.jpg -------------------------------------------------------------------------------- /public/img/inv_bracer_19.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_bracer_19.jpg -------------------------------------------------------------------------------- /public/img/inv_crown_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_crown_01.jpg -------------------------------------------------------------------------------- /public/img/inv_drink_04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_drink_04.jpg -------------------------------------------------------------------------------- /public/img/inv_drink_05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_drink_05.jpg -------------------------------------------------------------------------------- /public/img/inv_drink_17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_drink_17.jpg -------------------------------------------------------------------------------- /public/img/inv_gizmo_09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_gizmo_09.jpg -------------------------------------------------------------------------------- /public/img/inv_helmet_08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_helmet_08.jpg -------------------------------------------------------------------------------- /public/img/inv_helmet_14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_helmet_14.jpg -------------------------------------------------------------------------------- /public/img/inv_helmet_21.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_helmet_21.jpg -------------------------------------------------------------------------------- /public/img/inv_helmet_27.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_helmet_27.jpg -------------------------------------------------------------------------------- /public/img/inv_helmet_30.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_helmet_30.jpg -------------------------------------------------------------------------------- /public/img/inv_helmet_34.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_helmet_34.jpg -------------------------------------------------------------------------------- /public/img/inv_helmet_53.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_helmet_53.jpg -------------------------------------------------------------------------------- /public/img/inv_helmet_62.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_helmet_62.jpg -------------------------------------------------------------------------------- /public/img/inv_helmet_70.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_helmet_70.jpg -------------------------------------------------------------------------------- /public/img/inv_helmet_72.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_helmet_72.jpg -------------------------------------------------------------------------------- /public/img/inv_pants_07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_pants_07.jpg -------------------------------------------------------------------------------- /public/img/inv_pants_08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_pants_08.jpg -------------------------------------------------------------------------------- /public/img/inv_pants_14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_pants_14.jpg -------------------------------------------------------------------------------- /public/img/inv_potion_25.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_potion_25.jpg -------------------------------------------------------------------------------- /public/img/inv_potion_26.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_potion_26.jpg -------------------------------------------------------------------------------- /public/img/inv_potion_32.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_potion_32.jpg -------------------------------------------------------------------------------- /public/img/inv_potion_41.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_potion_41.jpg -------------------------------------------------------------------------------- /public/img/inv_potion_45.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_potion_45.jpg -------------------------------------------------------------------------------- /public/img/inv_potion_46.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_potion_46.jpg -------------------------------------------------------------------------------- /public/img/inv_potion_60.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_potion_60.jpg -------------------------------------------------------------------------------- /public/img/inv_potion_75.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_potion_75.jpg -------------------------------------------------------------------------------- /public/img/inv_potion_76.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_potion_76.jpg -------------------------------------------------------------------------------- /public/img/inv_potion_96.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_potion_96.jpg -------------------------------------------------------------------------------- /public/img/inv_scroll_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_scroll_01.jpg -------------------------------------------------------------------------------- /public/img/inv_scroll_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_scroll_02.jpg -------------------------------------------------------------------------------- /public/img/inv_scroll_07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_scroll_07.jpg -------------------------------------------------------------------------------- /public/img/inv_staff_08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_staff_08.jpg -------------------------------------------------------------------------------- /public/img/inv_staff_13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_staff_13.jpg -------------------------------------------------------------------------------- /public/img/inv_staff_14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_staff_14.jpg -------------------------------------------------------------------------------- /public/img/inv_staff_15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_staff_15.jpg -------------------------------------------------------------------------------- /public/img/inv_staff_23.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_staff_23.jpg -------------------------------------------------------------------------------- /public/img/inv_staff_39.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_staff_39.jpg -------------------------------------------------------------------------------- /public/img/inv_staff_40.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_staff_40.jpg -------------------------------------------------------------------------------- /public/img/inv_staff_43.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_staff_43.jpg -------------------------------------------------------------------------------- /public/img/inv_staff_45.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_staff_45.jpg -------------------------------------------------------------------------------- /public/img/inv_staff_47.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_staff_47.jpg -------------------------------------------------------------------------------- /public/img/inv_staff_52.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_staff_52.jpg -------------------------------------------------------------------------------- /public/img/inv_staff_53.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_staff_53.jpg -------------------------------------------------------------------------------- /public/img/inv_staff_54.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_staff_54.jpg -------------------------------------------------------------------------------- /public/img/inv_staff_59.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_staff_59.jpg -------------------------------------------------------------------------------- /public/img/inv_staff_61.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_staff_61.jpg -------------------------------------------------------------------------------- /public/img/inv_staff_74.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_staff_74.jpg -------------------------------------------------------------------------------- /public/img/inv_staff_78.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_staff_78.jpg -------------------------------------------------------------------------------- /public/img/inv_stone_04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_stone_04.jpg -------------------------------------------------------------------------------- /public/img/inv_stone_15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_stone_15.jpg -------------------------------------------------------------------------------- /public/img/inv_sword_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_sword_01.jpg -------------------------------------------------------------------------------- /public/img/inv_sword_05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_sword_05.jpg -------------------------------------------------------------------------------- /public/img/inv_sword_109.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_sword_109.jpg -------------------------------------------------------------------------------- /public/img/inv_sword_11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_sword_11.jpg -------------------------------------------------------------------------------- /public/img/inv_sword_59.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_sword_59.jpg -------------------------------------------------------------------------------- /public/img/inv_sword_65.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_sword_65.jpg -------------------------------------------------------------------------------- /public/img/inv_sword_73.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_sword_73.jpg -------------------------------------------------------------------------------- /public/img/inv_sword_90.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_sword_90.jpg -------------------------------------------------------------------------------- /public/img/inv_wand_05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_wand_05.jpg -------------------------------------------------------------------------------- /public/img/inv_wand_06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_wand_06.jpg -------------------------------------------------------------------------------- /public/img/inv_wand_07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_wand_07.jpg -------------------------------------------------------------------------------- /public/img/inv_wand_09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_wand_09.jpg -------------------------------------------------------------------------------- /public/img/inv_wand_12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_wand_12.jpg -------------------------------------------------------------------------------- /public/img/inv_wand_15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_wand_15.jpg -------------------------------------------------------------------------------- /public/img/inv_wand_16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_wand_16.jpg -------------------------------------------------------------------------------- /public/img/inv_wand_17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_wand_17.jpg -------------------------------------------------------------------------------- /public/img/inv_wand_18.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_wand_18.jpg -------------------------------------------------------------------------------- /public/img/inv_wand_19.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_wand_19.jpg -------------------------------------------------------------------------------- /public/img/inv_wand_20.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_wand_20.jpg -------------------------------------------------------------------------------- /public/img/inv_wand_21.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_wand_21.jpg -------------------------------------------------------------------------------- /public/img/inv_wand_23.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_wand_23.jpg -------------------------------------------------------------------------------- /public/img/inv_wand_24.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_wand_24.jpg -------------------------------------------------------------------------------- /public/img/inv_wand_25.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_wand_25.jpg -------------------------------------------------------------------------------- /public/img/inv_helmet_103.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_helmet_103.jpg -------------------------------------------------------------------------------- /public/img/inv_helmet_116.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_helmet_116.jpg -------------------------------------------------------------------------------- /public/img/inv_helmet_132.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_helmet_132.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_orb_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_orb_02.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_orb_04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_orb_04.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_orb_05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_orb_05.jpg -------------------------------------------------------------------------------- /public/img/inv_potion_105.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_potion_105.jpg -------------------------------------------------------------------------------- /public/img/inv_potion_107.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_potion_107.jpg -------------------------------------------------------------------------------- /public/img/inv_potion_115.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_potion_115.jpg -------------------------------------------------------------------------------- /public/img/inv_potion_136.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_potion_136.jpg -------------------------------------------------------------------------------- /public/img/inv_potion_137.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_potion_137.jpg -------------------------------------------------------------------------------- /public/img/inv_potion_141.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_potion_141.jpg -------------------------------------------------------------------------------- /public/img/inv_potion_145.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_potion_145.jpg -------------------------------------------------------------------------------- /public/img/inv_potion_146.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_potion_146.jpg -------------------------------------------------------------------------------- /public/img/inv_potion_151.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_potion_151.jpg -------------------------------------------------------------------------------- /public/img/inv_potion_155.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_potion_155.jpg -------------------------------------------------------------------------------- /public/img/inv_shoulder_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_shoulder_01.jpg -------------------------------------------------------------------------------- /public/img/inv_shoulder_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_shoulder_02.jpg -------------------------------------------------------------------------------- /public/img/inv_shoulder_18.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_shoulder_18.jpg -------------------------------------------------------------------------------- /public/img/inv_shoulder_19.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_shoulder_19.jpg -------------------------------------------------------------------------------- /public/img/inv_shoulder_22.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_shoulder_22.jpg -------------------------------------------------------------------------------- /public/img/inv_shoulder_23.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_shoulder_23.jpg -------------------------------------------------------------------------------- /public/img/inv_shoulder_24.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_shoulder_24.jpg -------------------------------------------------------------------------------- /public/img/inv_shoulder_25.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_shoulder_25.jpg -------------------------------------------------------------------------------- /public/img/inv_shoulder_32.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_shoulder_32.jpg -------------------------------------------------------------------------------- /public/img/inv_shoulder_36.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_shoulder_36.jpg -------------------------------------------------------------------------------- /public/img/inv_shoulder_68.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_shoulder_68.jpg -------------------------------------------------------------------------------- /public/img/inv_shoulder_82.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_shoulder_82.jpg -------------------------------------------------------------------------------- /public/img/inv_shoulder_96.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_shoulder_96.jpg -------------------------------------------------------------------------------- /public/img/spell_fire_fire.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_fire_fire.jpg -------------------------------------------------------------------------------- /public/img/UI-EmptySocket-Red.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/UI-EmptySocket-Red.jpg -------------------------------------------------------------------------------- /public/img/ability_trueshot.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/ability_trueshot.jpg -------------------------------------------------------------------------------- /public/img/inv-mount_raven_54.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv-mount_raven_54.jpg -------------------------------------------------------------------------------- /public/img/inv_ammo_firetar.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_ammo_firetar.jpg -------------------------------------------------------------------------------- /public/img/inv_boots_cloth_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_boots_cloth_01.jpg -------------------------------------------------------------------------------- /public/img/inv_boots_cloth_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_boots_cloth_02.jpg -------------------------------------------------------------------------------- /public/img/inv_boots_cloth_03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_boots_cloth_03.jpg -------------------------------------------------------------------------------- /public/img/inv_boots_cloth_04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_boots_cloth_04.jpg -------------------------------------------------------------------------------- /public/img/inv_boots_cloth_05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_boots_cloth_05.jpg -------------------------------------------------------------------------------- /public/img/inv_boots_cloth_06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_boots_cloth_06.jpg -------------------------------------------------------------------------------- /public/img/inv_boots_cloth_09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_boots_cloth_09.jpg -------------------------------------------------------------------------------- /public/img/inv_boots_cloth_10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_boots_cloth_10.jpg -------------------------------------------------------------------------------- /public/img/inv_boots_cloth_11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_boots_cloth_11.jpg -------------------------------------------------------------------------------- /public/img/inv_boots_cloth_12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_boots_cloth_12.jpg -------------------------------------------------------------------------------- /public/img/inv_boots_cloth_14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_boots_cloth_14.jpg -------------------------------------------------------------------------------- /public/img/inv_boots_cloth_16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_boots_cloth_16.jpg -------------------------------------------------------------------------------- /public/img/inv_boots_cloth_17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_boots_cloth_17.jpg -------------------------------------------------------------------------------- /public/img/inv_chest_cloth_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_chest_cloth_02.jpg -------------------------------------------------------------------------------- /public/img/inv_chest_cloth_08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_chest_cloth_08.jpg -------------------------------------------------------------------------------- /public/img/inv_chest_cloth_12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_chest_cloth_12.jpg -------------------------------------------------------------------------------- /public/img/inv_chest_cloth_17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_chest_cloth_17.jpg -------------------------------------------------------------------------------- /public/img/inv_chest_cloth_18.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_chest_cloth_18.jpg -------------------------------------------------------------------------------- /public/img/inv_chest_cloth_19.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_chest_cloth_19.jpg -------------------------------------------------------------------------------- /public/img/inv_chest_cloth_25.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_chest_cloth_25.jpg -------------------------------------------------------------------------------- /public/img/inv_chest_cloth_29.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_chest_cloth_29.jpg -------------------------------------------------------------------------------- /public/img/inv_chest_cloth_38.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_chest_cloth_38.jpg -------------------------------------------------------------------------------- /public/img/inv_chest_cloth_42.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_chest_cloth_42.jpg -------------------------------------------------------------------------------- /public/img/inv_chest_cloth_43.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_chest_cloth_43.jpg -------------------------------------------------------------------------------- /public/img/inv_chest_cloth_46.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_chest_cloth_46.jpg -------------------------------------------------------------------------------- /public/img/inv_chest_cloth_48.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_chest_cloth_48.jpg -------------------------------------------------------------------------------- /public/img/inv_chest_cloth_49.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_chest_cloth_49.jpg -------------------------------------------------------------------------------- /public/img/inv_chest_cloth_51.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_chest_cloth_51.jpg -------------------------------------------------------------------------------- /public/img/inv_chest_cloth_68.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_chest_cloth_68.jpg -------------------------------------------------------------------------------- /public/img/inv_datacrystal01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_datacrystal01.jpg -------------------------------------------------------------------------------- /public/img/inv_datacrystal06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_datacrystal06.jpg -------------------------------------------------------------------------------- /public/img/inv_gauntlets_09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_gauntlets_09.jpg -------------------------------------------------------------------------------- /public/img/inv_gauntlets_14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_gauntlets_14.jpg -------------------------------------------------------------------------------- /public/img/inv_gauntlets_15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_gauntlets_15.jpg -------------------------------------------------------------------------------- /public/img/inv_gauntlets_16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_gauntlets_16.jpg -------------------------------------------------------------------------------- /public/img/inv_gauntlets_17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_gauntlets_17.jpg -------------------------------------------------------------------------------- /public/img/inv_gauntlets_19.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_gauntlets_19.jpg -------------------------------------------------------------------------------- /public/img/inv_gauntlets_30.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_gauntlets_30.jpg -------------------------------------------------------------------------------- /public/img/inv_gauntlets_32.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_gauntlets_32.jpg -------------------------------------------------------------------------------- /public/img/inv_gauntlets_49.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_gauntlets_49.jpg -------------------------------------------------------------------------------- /public/img/inv_gauntlets_50.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_gauntlets_50.jpg -------------------------------------------------------------------------------- /public/img/inv_gauntlets_66.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_gauntlets_66.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_book_05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_book_05.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_book_06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_book_06.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_book_07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_book_07.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_book_10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_book_10.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_cape_05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_cape_05.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_cape_06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_cape_06.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_cape_10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_cape_10.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_cape_11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_cape_11.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_cape_16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_cape_16.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_cape_18.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_cape_18.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_cape_19.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_cape_19.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_cape_20.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_cape_20.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_cape_21.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_cape_21.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_drum_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_drum_02.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_drum_03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_drum_03.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_drum_07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_drum_07.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_fish_16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_fish_16.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_food_49.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_food_49.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_food_53.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_food_53.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_food_63.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_food_63.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_gift_03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_gift_03.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_herb_11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_herb_11.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_pipe_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_pipe_01.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_ribbon_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_ribbon_01.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_rune_04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_rune_04.jpg -------------------------------------------------------------------------------- /public/img/inv_pants_cloth_05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_pants_cloth_05.jpg -------------------------------------------------------------------------------- /public/img/inv_pants_cloth_09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_pants_cloth_09.jpg -------------------------------------------------------------------------------- /public/img/inv_pants_cloth_14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_pants_cloth_14.jpg -------------------------------------------------------------------------------- /public/img/inv_pants_cloth_15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_pants_cloth_15.jpg -------------------------------------------------------------------------------- /public/img/inv_pants_cloth_16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_pants_cloth_16.jpg -------------------------------------------------------------------------------- /public/img/inv_pants_cloth_17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_pants_cloth_17.jpg -------------------------------------------------------------------------------- /public/img/inv_pants_cloth_20.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_pants_cloth_20.jpg -------------------------------------------------------------------------------- /public/img/inv_pants_cloth_21.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_pants_cloth_21.jpg -------------------------------------------------------------------------------- /public/img/inv_pants_cloth_27.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_pants_cloth_27.jpg -------------------------------------------------------------------------------- /public/img/inv_pants_cloth_29.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_pants_cloth_29.jpg -------------------------------------------------------------------------------- /public/img/inv_pants_mail_20.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_pants_mail_20.jpg -------------------------------------------------------------------------------- /public/img/inv_staff_medivh.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_staff_medivh.jpg -------------------------------------------------------------------------------- /public/img/spell_arcane_blink.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_arcane_blink.jpg -------------------------------------------------------------------------------- /public/img/spell_fire_burnout.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_fire_burnout.jpg -------------------------------------------------------------------------------- /public/img/spell_fire_volcano.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_fire_volcano.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_curse.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_curse.jpg -------------------------------------------------------------------------------- /public/img/talent_arrow_down.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/talent_arrow_down.jpg -------------------------------------------------------------------------------- /public/img/talent_arrow_right.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/talent_arrow_right.jpg -------------------------------------------------------------------------------- /public/img/Spell_shadow_misery.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/Spell_shadow_misery.jpg -------------------------------------------------------------------------------- /public/img/UI-EmptySocket-Blue.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/UI-EmptySocket-Blue.jpg -------------------------------------------------------------------------------- /public/img/UI-EmptySocket-Meta.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/UI-EmptySocket-Meta.jpg -------------------------------------------------------------------------------- /public/img/ability_meleedamage.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/ability_meleedamage.jpg -------------------------------------------------------------------------------- /public/img/inv_boots_fabric_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_boots_fabric_01.jpg -------------------------------------------------------------------------------- /public/img/inv_chest_leather_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_chest_leather_01.jpg -------------------------------------------------------------------------------- /public/img/inv_gizmo_newgoggles.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_gizmo_newgoggles.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_ring_09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_ring_09.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_ring_11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_ring_11.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_ring_15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_ring_15.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_ring_16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_ring_16.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_ring_23.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_ring_23.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_ring_24.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_ring_24.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_ring_31.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_ring_31.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_ring_35.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_ring_35.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_ring_37.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_ring_37.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_ring_38.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_ring_38.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_ring_39.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_ring_39.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_ring_40.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_ring_40.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_ring_42.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_ring_42.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_ring_44.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_ring_44.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_ring_45.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_ring_45.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_ring_54.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_ring_54.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_ring_55.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_ring_55.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_ring_56.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_ring_56.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_ring_57.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_ring_57.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_ring_60.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_ring_60.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_ring_61.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_ring_61.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_ring_62.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_ring_62.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_ring_63.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_ring_63.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_ring_65.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_ring_65.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_ring_68.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_ring_68.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_birdbeck_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_birdbeck_01.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_elvencoins.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_elvencoins.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_gem_opal_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_gem_opal_02.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_gem_ruby_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_gem_ruby_01.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_gem_ruby_03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_gem_ruby_03.jpg -------------------------------------------------------------------------------- /public/img/inv_pants_leather_05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_pants_leather_05.jpg -------------------------------------------------------------------------------- /public/img/inv_pants_leather_11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_pants_leather_11.jpg -------------------------------------------------------------------------------- /public/img/inv_pants_leather_12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_pants_leather_12.jpg -------------------------------------------------------------------------------- /public/img/inv_qirajidol_night.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_qirajidol_night.jpg -------------------------------------------------------------------------------- /public/img/inv_sword_draenei_04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_sword_draenei_04.jpg -------------------------------------------------------------------------------- /public/img/inv_weapon_halberd17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_weapon_halberd17.jpg -------------------------------------------------------------------------------- /public/img/inv_weapon_halberd19.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_weapon_halberd19.jpg -------------------------------------------------------------------------------- /public/img/spell_fire_fireball.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_fire_fireball.jpg -------------------------------------------------------------------------------- /public/img/spell_fire_firebolt.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_fire_firebolt.jpg -------------------------------------------------------------------------------- /public/img/spell_fire_lavaspawn.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_fire_lavaspawn.jpg -------------------------------------------------------------------------------- /public/img/spell_fire_soulburn.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_fire_soulburn.jpg -------------------------------------------------------------------------------- /public/img/spell_holy_holysmite.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_holy_holysmite.jpg -------------------------------------------------------------------------------- /public/img/spell_holy_stoicism.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_holy_stoicism.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_requiem.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_requiem.jpg -------------------------------------------------------------------------------- /public/img/UI-EmptySocket-Yellow.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/UI-EmptySocket-Yellow.jpg -------------------------------------------------------------------------------- /public/img/ability_warrior_cleave.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/ability_warrior_cleave.jpg -------------------------------------------------------------------------------- /public/img/ability_warrior_riposte.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/ability_warrior_riposte.jpg -------------------------------------------------------------------------------- /public/img/ability_warrior_sunder.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/ability_warrior_sunder.jpg -------------------------------------------------------------------------------- /public/img/inv_elemental_mote_mana.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_elemental_mote_mana.jpg -------------------------------------------------------------------------------- /public/img/inv_enchant_voidsphere.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_enchant_voidsphere.jpg -------------------------------------------------------------------------------- /public/img/inv_gizmo_rocketboot_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_gizmo_rocketboot_01.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_amulet_04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_amulet_04.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_necklace_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_necklace_01.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_necklace_04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_necklace_04.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_necklace_10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_necklace_10.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_necklace_12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_necklace_12.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_necklace_14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_necklace_14.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_necklace_16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_necklace_16.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_necklace_17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_necklace_17.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_necklace_19.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_necklace_19.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_necklace_27.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_necklace_27.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_necklace_28.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_necklace_28.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_necklace_30.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_necklace_30.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_necklace_32.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_necklace_32.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_necklace_34.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_necklace_34.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_necklace_35.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_necklace_35.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_necklace_36.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_necklace_36.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_necklace_40.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_necklace_40.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_talisman_15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_talisman_15.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_bag_10_green.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_bag_10_green.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_gem_diamond_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_gem_diamond_02.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_gem_diamond_06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_gem_diamond_06.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_gem_diamond_07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_gem_diamond_07.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_gem_pearl_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_gem_pearl_01.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_gem_topaz_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_gem_topaz_02.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_head_dragon_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_head_dragon_01.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_head_troll_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_head_troll_01.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_herb_flamecap.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_herb_flamecap.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_stonetablet_11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_stonetablet_11.jpg -------------------------------------------------------------------------------- /public/img/inv_offhand_hyjal_d_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_offhand_hyjal_d_01.jpg -------------------------------------------------------------------------------- /public/img/inv_sword_2h_blood_c_03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_sword_2h_blood_c_03.jpg -------------------------------------------------------------------------------- /public/img/inv_trinket_naxxramas06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_trinket_naxxramas06.jpg -------------------------------------------------------------------------------- /public/img/spell_fire_flameshock.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_fire_flameshock.jpg -------------------------------------------------------------------------------- /public/img/spell_fire_immolation.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_fire_immolation.jpg -------------------------------------------------------------------------------- /public/img/spell_fire_sealoffire.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_fire_sealoffire.jpg -------------------------------------------------------------------------------- /public/img/spell_fire_selfdestruct.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_fire_selfdestruct.jpg -------------------------------------------------------------------------------- /public/img/spell_fire_totemofwrath.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_fire_totemofwrath.jpg -------------------------------------------------------------------------------- /public/img/spell_fire_windsofwoe.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_fire_windsofwoe.jpg -------------------------------------------------------------------------------- /public/img/spell_holy_lesserheal02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_holy_lesserheal02.jpg -------------------------------------------------------------------------------- /public/img/spell_holy_mindvision.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_holy_mindvision.jpg -------------------------------------------------------------------------------- /public/img/spell_nature_bloodlust.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_nature_bloodlust.jpg -------------------------------------------------------------------------------- /public/img/spell_nature_faeriefire.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_nature_faeriefire.jpg -------------------------------------------------------------------------------- /public/img/spell_nature_lightning.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_nature_lightning.jpg -------------------------------------------------------------------------------- /public/img/spell_nature_moonglow.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_nature_moonglow.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_antishadow.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_antishadow.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_bloodboil.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_bloodboil.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_callofbone.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_callofbone.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_chilltouch.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_chilltouch.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_contagion.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_contagion.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_darkritual.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_darkritual.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_deathcoil.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_deathcoil.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_deathpact.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_deathpact.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_felarmour.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_felarmour.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_grimward.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_grimward.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_haunting.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_haunting.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_lifedrain.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_lifedrain.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_manafeed.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_manafeed.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_rainoffire.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_rainoffire.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_shadowbolt.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_shadowbolt.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_shadowfury.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_shadowfury.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_shadowpact.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_shadowpact.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_siphonmana.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_siphonmana.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_summonimp.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_summonimp.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_twilight.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_twilight.jpg -------------------------------------------------------------------------------- /public/img/ability_hunter_snipershot.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/ability_hunter_snipershot.jpg -------------------------------------------------------------------------------- /public/img/inv_elemental_mote_life01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_elemental_mote_life01.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_bone_elfskull_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_bone_elfskull_01.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_food_86_basilisk.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_food_86_basilisk.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_gem_bloodgem_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_gem_bloodgem_02.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_gem_lionseye_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_gem_lionseye_01.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_gem_sapphire_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_gem_sapphire_01.jpg -------------------------------------------------------------------------------- /public/img/inv_offhand_draenei_a_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_offhand_draenei_a_01.jpg -------------------------------------------------------------------------------- /public/img/inv_offhand_naxxramas_03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_offhand_naxxramas_03.jpg -------------------------------------------------------------------------------- /public/img/inv_offhand_sunwell_d_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_offhand_sunwell_d_02.jpg -------------------------------------------------------------------------------- /public/img/inv_offhand_zulaman_d_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_offhand_zulaman_d_02.jpg -------------------------------------------------------------------------------- /public/img/inv_summerfest_firespirit.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_summerfest_firespirit.jpg -------------------------------------------------------------------------------- /public/img/inv_valentineschocolate02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_valentineschocolate02.jpg -------------------------------------------------------------------------------- /public/img/inv_weapon_shortblade_05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_weapon_shortblade_05.jpg -------------------------------------------------------------------------------- /public/img/inv_weapon_shortblade_23.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_weapon_shortblade_23.jpg -------------------------------------------------------------------------------- /public/img/inv_weapon_shortblade_26.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_weapon_shortblade_26.jpg -------------------------------------------------------------------------------- /public/img/inv_weapon_shortblade_27.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_weapon_shortblade_27.jpg -------------------------------------------------------------------------------- /public/img/inv_weapon_shortblade_33.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_weapon_shortblade_33.jpg -------------------------------------------------------------------------------- /public/img/inv_weapon_shortblade_37.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_weapon_shortblade_37.jpg -------------------------------------------------------------------------------- /public/img/inv_weapon_shortblade_41.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_weapon_shortblade_41.jpg -------------------------------------------------------------------------------- /public/img/inv_weapon_shortblade_51.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_weapon_shortblade_51.jpg -------------------------------------------------------------------------------- /public/img/inv_weapon_shortblade_52.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_weapon_shortblade_52.jpg -------------------------------------------------------------------------------- /public/img/inv_weapon_shortblade_53.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_weapon_shortblade_53.jpg -------------------------------------------------------------------------------- /public/img/inv_weapon_shortblade_54.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_weapon_shortblade_54.jpg -------------------------------------------------------------------------------- /public/img/inv_weapon_shortblade_58.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_weapon_shortblade_58.jpg -------------------------------------------------------------------------------- /public/img/inv_weapon_shortblade_64.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_weapon_shortblade_64.jpg -------------------------------------------------------------------------------- /public/img/inv_weapon_shortblade_73.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_weapon_shortblade_73.jpg -------------------------------------------------------------------------------- /public/img/inv_weapon_shortblade_78.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_weapon_shortblade_78.jpg -------------------------------------------------------------------------------- /public/img/spell_holy_magicalsentry.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_holy_magicalsentry.jpg -------------------------------------------------------------------------------- /public/img/spell_holy_powerinfusion.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_holy_powerinfusion.jpg -------------------------------------------------------------------------------- /public/img/spell_holy_prayerofspirit.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_holy_prayerofspirit.jpg -------------------------------------------------------------------------------- /public/img/spell_nature_focusedmind.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_nature_focusedmind.jpg -------------------------------------------------------------------------------- /public/img/spell_nature_massteleport.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_nature_massteleport.jpg -------------------------------------------------------------------------------- /public/img/spell_nature_regeneration.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_nature_regeneration.jpg -------------------------------------------------------------------------------- /public/img/spell_nature_removecurse.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_nature_removecurse.jpg -------------------------------------------------------------------------------- /public/img/spell_nature_slowingtotem.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_nature_slowingtotem.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_blackplague.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_blackplague.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_deathscream.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_deathscream.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_enslavedemon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_enslavedemon.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_lifedrain02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_lifedrain02.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_ragingscream.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_ragingscream.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_scourgebuild.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_scourgebuild.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_soulleech_3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_soulleech_3.jpg -------------------------------------------------------------------------------- /public/img/Spell_shadow_demonictactics.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/Spell_shadow_demonictactics.jpg -------------------------------------------------------------------------------- /public/img/ability_creature_poison_05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/ability_creature_poison_05.jpg -------------------------------------------------------------------------------- /public/img/ability_rogue_findweakness.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/ability_rogue_findweakness.jpg -------------------------------------------------------------------------------- /public/img/ability_warrior_battleshout.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/ability_warrior_battleshout.jpg -------------------------------------------------------------------------------- /public/img/ability_warrior_bloodfrenzy.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/ability_warrior_bloodfrenzy.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_ring_48naxxramas.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_ring_48naxxramas.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_ring_49naxxramas.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_ring_49naxxramas.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_ring_50naxxramas.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_ring_50naxxramas.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_ring_51naxxramas.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_ring_51naxxramas.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_ring_52naxxramas.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_ring_52naxxramas.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_ring_53naxxramas.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_ring_53naxxramas.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_ring_ahnqiraj_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_ring_ahnqiraj_02.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_cape_naxxramas_03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_cape_naxxramas_03.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_gem_bloodstone_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_gem_bloodstone_01.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_gem_bloodstone_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_gem_bloodstone_02.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_gem_deepperidot_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_gem_deepperidot_02.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_gem_deepperidot_03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_gem_deepperidot_03.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_gem_ebondraenite_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_gem_ebondraenite_01.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_gem_ebondraenite_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_gem_ebondraenite_02.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_token_argentdawn3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_token_argentdawn3.jpg -------------------------------------------------------------------------------- /public/img/inv_offhand_outlandraid_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_offhand_outlandraid_01.jpg -------------------------------------------------------------------------------- /public/img/inv_summerfest_symbol_high.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_summerfest_symbol_high.jpg -------------------------------------------------------------------------------- /public/img/inv_summerfest_symbol_medium.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_summerfest_symbol_medium.jpg -------------------------------------------------------------------------------- /public/img/inv_valentineperfumebottle.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_valentineperfumebottle.jpg -------------------------------------------------------------------------------- /public/img/inv_wand_1h_stratholme_d_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_wand_1h_stratholme_d_01.jpg -------------------------------------------------------------------------------- /public/img/inv_wand_1h_stratholme_d_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_wand_1h_stratholme_d_02.jpg -------------------------------------------------------------------------------- /public/img/racial_orc_berserkerstrength.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/racial_orc_berserkerstrength.jpg -------------------------------------------------------------------------------- /public/img/spell_arcane_arcanetorrent.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_arcane_arcanetorrent.jpg -------------------------------------------------------------------------------- /public/img/spell_fire_playingwithfire.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_fire_playingwithfire.jpg -------------------------------------------------------------------------------- /public/img/spell_holy_arcaneintellect.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_holy_arcaneintellect.jpg -------------------------------------------------------------------------------- /public/img/spell_holy_prayeroffortitude.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_holy_prayeroffortitude.jpg -------------------------------------------------------------------------------- /public/img/spell_holy_righteousnessaura.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_holy_righteousnessaura.jpg -------------------------------------------------------------------------------- /public/img/spell_nature_earthbindtotem.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_nature_earthbindtotem.jpg -------------------------------------------------------------------------------- /public/img/spell_nature_manaregentotem.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_nature_manaregentotem.jpg -------------------------------------------------------------------------------- /public/img/spell_nature_unleashedrage.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_nature_unleashedrage.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_auraofdarkness.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_auraofdarkness.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_burningspirit.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_burningspirit.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_corpseexplode.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_corpseexplode.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_curseofsargeras.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_curseofsargeras.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_fingerofdeath.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_fingerofdeath.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_gathershadows.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_gathershadows.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_impphaseshift.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_impphaseshift.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_metamorphosis.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_metamorphosis.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_psychicscream.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_psychicscream.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_shadetruesight.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_shadetruesight.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_shadowandflame.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_shadowandflame.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_shadowembrace.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_shadowembrace.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_shadowwordpain.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_shadowwordpain.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_summonfelguard.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_summonfelguard.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_summonsuccubus.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_summonsuccubus.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_unholystrength.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_unholystrength.jpg -------------------------------------------------------------------------------- /public/img/ability_hunter_mastermarksman.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/ability_hunter_mastermarksman.jpg -------------------------------------------------------------------------------- /public/img/ability_rogue_sinistercalling.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/ability_rogue_sinistercalling.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelcrafting_dawnstone_03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelcrafting_dawnstone_03.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelcrafting_lionseye_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelcrafting_lionseye_02.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelcrafting_nightseye_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelcrafting_nightseye_01.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelcrafting_nightseye_03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelcrafting_nightseye_03.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelcrafting_pyrestone_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelcrafting_pyrestone_02.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelcrafting_rubyserpent.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelcrafting_rubyserpent.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelcrafting_talasite_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelcrafting_talasite_01.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelcrafting_talasite_03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelcrafting_talasite_03.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_gem_azuredraenite_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_gem_azuredraenite_02.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_gem_goldendraenite_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_gem_goldendraenite_02.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_ticket_tarot_crusade.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_ticket_tarot_crusade.jpg -------------------------------------------------------------------------------- /public/img/inv_offhand_outlandraid_03blue.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_offhand_outlandraid_03blue.jpg -------------------------------------------------------------------------------- /public/img/spell_arcane_arcaneresilience.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_arcane_arcaneresilience.jpg -------------------------------------------------------------------------------- /public/img/spell_arcane_teleportorgrimmar.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_arcane_teleportorgrimmar.jpg -------------------------------------------------------------------------------- /public/img/spell_nature_invisibilitytotem.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_nature_invisibilitytotem.jpg -------------------------------------------------------------------------------- /public/img/spell_nature_unyeildingstamina.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_nature_unyeildingstamina.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_curseofachimonde.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_curseofachimonde.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_curseofmannoroth.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_curseofmannoroth.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_demonicfortitude.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_demonicfortitude.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_netherprotection.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_netherprotection.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_seedofdestruction.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_seedofdestruction.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_summonvoidwalker.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_summonvoidwalker.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_unsummonbuilding.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_unsummonbuilding.jpg -------------------------------------------------------------------------------- /public/img/Spell_shadow_painfulafflictions.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/Spell_shadow_painfulafflictions.jpg -------------------------------------------------------------------------------- /public/img/inv_gizmo_elementalblastingpowder.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_gizmo_elementalblastingpowder.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelcrafting_livingruby_03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelcrafting_livingruby_03.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelcrafting_nobletopaz_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelcrafting_nobletopaz_02.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelcrafting_nobletopaz_03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelcrafting_nobletopaz_03.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelcrafting_starofelune_03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelcrafting_starofelune_03.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_necklace_29naxxramas.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_necklace_29naxxramas.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_necklace_30naxxramas.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_necklace_30naxxramas.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_necklace_ahnqiraj_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_necklace_ahnqiraj_01.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_necklace_ahnqiraj_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_necklace_ahnqiraj_02.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_necklace_ahnqiraj_03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_necklace_ahnqiraj_03.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelry_necklace_ahnqiraj_04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelry_necklace_ahnqiraj_04.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_gem_flamespessarite_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_gem_flamespessarite_02.jpg -------------------------------------------------------------------------------- /public/img/inv_misc_summerfest_brazierorange.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_misc_summerfest_brazierorange.jpg -------------------------------------------------------------------------------- /public/img/inv_offhand_outlandraid_03orange.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_offhand_outlandraid_03orange.jpg -------------------------------------------------------------------------------- /public/img/inv_offhand_outlandraid_03white.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_offhand_outlandraid_03white.jpg -------------------------------------------------------------------------------- /public/img/spell_frost_summonwaterelemental.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_frost_summonwaterelemental.jpg -------------------------------------------------------------------------------- /public/img/spell_holy_greaterblessingofkings.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_holy_greaterblessingofkings.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_abominationexplosion.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_abominationexplosion.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_shadowworddominate.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_shadowworddominate.jpg -------------------------------------------------------------------------------- /public/img/spell_shadow_unstableaffliction_3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_shadow_unstableaffliction_3.jpg -------------------------------------------------------------------------------- /public/img/talent_tree_background_Affliction.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/talent_tree_background_Affliction.jpg -------------------------------------------------------------------------------- /public/img/talent_tree_background_Demonology.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/talent_tree_background_Demonology.jpg -------------------------------------------------------------------------------- /public/img/ability_hunter_ferociousinspiration.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/ability_hunter_ferociousinspiration.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelcrafting_crimsonspinel_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelcrafting_crimsonspinel_02.jpg -------------------------------------------------------------------------------- /public/img/spell_holy_greaterblessingofwisdom.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_holy_greaterblessingofwisdom.jpg -------------------------------------------------------------------------------- /public/img/spell_magic_greaterblessingofkings.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_magic_greaterblessingofkings.jpg -------------------------------------------------------------------------------- /public/img/talent_tree_background_Destruction.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/talent_tree_background_Destruction.jpg -------------------------------------------------------------------------------- /public/img/Spell_shadow_improvedvampiricembrace.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/Spell_shadow_improvedvampiricembrace.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelcrafting_empyreansapphire_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelcrafting_empyreansapphire_02.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelcrafting_seasprayemerald_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelcrafting_seasprayemerald_02.jpg -------------------------------------------------------------------------------- /public/img/spell_holy_greaterblessingofsalvation.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/spell_holy_greaterblessingofsalvation.jpg -------------------------------------------------------------------------------- /public/img/inv_jewelcrafting_shadowsongamethyst_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kristoferhh/WarlockSimulatorTBC/HEAD/public/img/inv_jewelcrafting_shadowsongamethyst_02.jpg -------------------------------------------------------------------------------- /config-overrides.js: -------------------------------------------------------------------------------- 1 | module.exports = function override(config, env) { 2 | config.module.rules.push({ 3 | test: /\.worker\.js$/, 4 | use: { loader: 'worker-loader' }, 5 | }) 6 | return config 7 | } 8 | -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/include/simulation_settings.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | struct SimulationSettings { 4 | int iterations; 5 | int min_time; 6 | int max_time; 7 | SimulationType simulation_type; 8 | }; 9 | -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/include/common.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | double Median(std::vector vec); 7 | std::string DoubleToString(double kNum, int kDecimalPlaces = 0); 8 | -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/include/spell_proc.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "spell.h" 3 | 4 | struct SpellProc : Spell { 5 | explicit SpellProc(Entity& entity, std::shared_ptr aura = nullptr); 6 | virtual bool ShouldProc(Spell* spell); 7 | }; 8 | -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/include/sets.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | struct Sets { 4 | int t3; 5 | int spellfire; 6 | int spellstrike; 7 | int oblivion; 8 | int mana_etched; 9 | int twin_stars; 10 | int t4; 11 | int t5; 12 | int t6; 13 | }; -------------------------------------------------------------------------------- /.clang-format: -------------------------------------------------------------------------------- 1 | BasedOnStyle: Google 2 | 3 | ColumnLimit: 120 4 | AlignConsecutiveAssignments: true 5 | AlignArrayOfStructures: Left 6 | AllowShortBlocksOnASingleLine: Empty 7 | AllowShortFunctionsOnASingleLine: Empty 8 | BinPackArguments: true 9 | BinPackParameters: true -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "tabWidth": 2, 3 | "useTabs": false, 4 | "trailingComma": "all", 5 | "semi": false, 6 | "singleQuote": true, 7 | "quoteProps": "as-needed", 8 | "jsxSingleQuote": true, 9 | "bracketSpacing": true, 10 | "bracketSameLine": false, 11 | "arrowParens": "avoid" 12 | } 13 | -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/include/rng.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | struct Rng { 5 | void Seed(uint32_t kSeed); 6 | double Next(); 7 | int Range(int kMin, int kMax); 8 | 9 | private: 10 | std::mt19937 _random_engine; 11 | std::uniform_real_distribution _random{0, 1}; 12 | }; 13 | -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/src/spell_proc.cc: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include "../include/spell_proc.h" 4 | 5 | SpellProc::SpellProc(Entity& entity, std::shared_ptr aura) 6 | : Spell(entity, std::move(aura)) { 7 | is_proc = true; 8 | on_gcd = false; 9 | } 10 | 11 | bool SpellProc::ShouldProc(Spell*) { return true; } -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/src/rng.cc: -------------------------------------------------------------------------------- 1 | #include "../include/rng.h" 2 | 3 | #include 4 | 5 | void Rng::Seed(const uint32_t kSeed) { _random_engine.seed(kSeed); } 6 | 7 | double Rng::Next() { return _random(_random_engine); } 8 | 9 | int Rng::Range(const int kMin, const int kMax) { return static_cast(floor(Next() * (kMax - kMin + 1) + kMin)); } -------------------------------------------------------------------------------- /src/App.tsx: -------------------------------------------------------------------------------- 1 | import './css/App.css' 2 | import Main from './components/Main' 3 | import Sidebar from './components/Sidebar' 4 | import Session from './components/Session' 5 | 6 | export default function App() { 7 | return ( 8 |
9 | 10 |
11 | 12 |
13 | ) 14 | } 15 | -------------------------------------------------------------------------------- /public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "WarlockTBC", 3 | "name": "Warlock TBC DPS Simulator", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | } 10 | ], 11 | "start_url": ".", 12 | "display": "standalone", 13 | "theme_color": "#000000", 14 | "background_color": "#ffffff" 15 | } 16 | -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/include/life_tap.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "spell.h" 3 | 4 | struct LifeTap : Spell { 5 | int mana_return; 6 | double modifier; 7 | 8 | explicit LifeTap(Entity& entity); 9 | [[nodiscard]] double ManaGain() const; 10 | void Cast() override; 11 | }; 12 | 13 | struct DarkPact final : LifeTap { 14 | explicit DarkPact(Entity& entity); 15 | bool Ready() override; 16 | }; 17 | -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/include/on_resist_proc.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "spell_proc.h" 3 | 4 | struct Player; 5 | 6 | struct OnResistProc : SpellProc { 7 | explicit OnResistProc(Player& player, std::shared_ptr aura = nullptr); 8 | void Setup() override; 9 | }; 10 | 11 | struct EyeOfMagtheridon : OnResistProc { 12 | EyeOfMagtheridon(Player& player, const std::shared_ptr& kAura); 13 | }; 14 | -------------------------------------------------------------------------------- /src/redux/Store.tsx: -------------------------------------------------------------------------------- 1 | import { configureStore } from '@reduxjs/toolkit' 2 | import PlayerReducer from './PlayerSlice' 3 | import UiReducer from './UiSlice' 4 | 5 | export const Store = configureStore({ 6 | reducer: { 7 | player: PlayerReducer, 8 | ui: UiReducer, 9 | }, 10 | }) 11 | 12 | export type RootState = ReturnType 13 | export type AppDispatch = typeof Store.dispatch 14 | -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/include/items.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | struct Items { 4 | int head; 5 | int neck; 6 | int shoulders; 7 | int back; 8 | int chest; 9 | int bracers; 10 | int gloves; 11 | int belt; 12 | int legs; 13 | int boots; 14 | int ring_1; 15 | int ring_2; 16 | int trinket_1; 17 | int trinket_2; 18 | int main_hand; 19 | int off_hand; 20 | int two_hand; 21 | int wand; 22 | }; -------------------------------------------------------------------------------- /src/data/AuraGroups.tsx: -------------------------------------------------------------------------------- 1 | import { IAuraGroup, AuraGroup } from '../Types' 2 | 3 | export const AuraGroups: IAuraGroup[] = [ 4 | { heading: AuraGroup.Buffs, type: 'spell', varName: 'buffs' }, 5 | { heading: AuraGroup.Debuffs, type: 'spell', varName: 'debuffs' }, 6 | { heading: AuraGroup.Consumables, type: 'item', varName: 'consumables' }, 7 | { heading: AuraGroup.PetBuffs, type: 'spell', varName: 'petBuffs' }, 8 | ] 9 | -------------------------------------------------------------------------------- /src/css/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', 5 | sans-serif; 6 | -webkit-font-smoothing: antialiased; 7 | -moz-osx-font-smoothing: grayscale; 8 | } 9 | 10 | code { 11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', 12 | monospace; 13 | } 14 | -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/include/spell_cast_result.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | struct SpellCastResult { 4 | bool is_miss; 5 | bool is_crit; 6 | bool is_glancing; 7 | bool is_dodge; 8 | 9 | SpellCastResult(const bool kIsMiss, const bool kIsCrit, const bool kIsGlancing = false, const bool kIsDodge = false) 10 | : is_miss(kIsMiss), 11 | is_crit(kIsCrit), 12 | is_glancing(kIsGlancing), 13 | is_dodge(kIsDodge) { 14 | } 15 | }; 16 | -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/include/mana_potion.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "spell.h" 3 | 4 | struct Player; 5 | 6 | struct ManaPotion : Spell { 7 | explicit ManaPotion(Player& player); 8 | void Cast() override; 9 | }; 10 | 11 | struct SuperManaPotion final : ManaPotion { 12 | explicit SuperManaPotion(Player& player); 13 | }; 14 | 15 | struct DemonicRune final : ManaPotion { 16 | explicit DemonicRune(Player& player); 17 | void Cast() override; 18 | }; 19 | -------------------------------------------------------------------------------- /src/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import ReactDOM from 'react-dom' 3 | import App from './App' 4 | import { Store } from './redux/Store' 5 | import { Provider } from 'react-redux' 6 | import '../node_modules/@fortawesome/fontawesome-free/js/all' 7 | import './i18n/config' 8 | import './css/index.css' 9 | 10 | ReactDOM.render( 11 | 12 | 13 | 14 | 15 | , 16 | document.getElementById('root'), 17 | ) 18 | -------------------------------------------------------------------------------- /src/components/CombatLog.tsx: -------------------------------------------------------------------------------- 1 | import { nanoid } from '@reduxjs/toolkit' 2 | import { useSelector } from 'react-redux' 3 | import { RootState } from '../redux/Store' 4 | 5 | export default function CombatLog() { 6 | const uiState = useSelector((state: RootState) => state.ui) 7 | 8 | return ( 9 |
13 | {uiState.combatLog.data.map(entry => ( 14 |

{entry}

15 | ))} 16 |
17 | ) 18 | } 19 | -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/include/combat_log_breakdown.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | struct CombatLogBreakdown { 5 | std::string name; 6 | uint32_t casts = 0; 7 | uint32_t crits = 0; 8 | uint32_t misses = 0; 9 | double iteration_mana_gain = 0; 10 | double iteration_damage = 0; 11 | uint32_t count = 0; // same as casts but for aura applications 12 | uint32_t dodge = 0; 13 | uint32_t glancing_blows = 0; 14 | double applied_at = 0; 15 | double uptime = 0; 16 | 17 | explicit CombatLogBreakdown(std::string name) 18 | : name(std::move(name)) { 19 | } 20 | }; 21 | -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/include/on_damage_proc.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "spell_proc.h" 3 | 4 | struct Player; 5 | 6 | struct OnDamageProc : SpellProc { 7 | explicit OnDamageProc(Player& player, const std::shared_ptr& kAura = nullptr); 8 | void Setup() override; 9 | }; 10 | 11 | struct ShatteredSunPendantOfAcumenAldor final : OnDamageProc { 12 | ShatteredSunPendantOfAcumenAldor(Player& player, std::shared_ptr aura); 13 | }; 14 | 15 | struct ShatteredSunPendantOfAcumenScryers final : OnDamageProc { 16 | explicit ShatteredSunPendantOfAcumenScryers(Player& player); 17 | }; 18 | -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/include/embind_constant.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | enum class EmbindConstant : int { 4 | kUnused, 5 | kScryers, 6 | kAldor, 7 | kOnCooldown, 8 | kSingleTarget, 9 | kAoe, 10 | kNoIsb, 11 | kHuman, 12 | kGnome, 13 | kOrc, 14 | kUndead, 15 | kBloodElf, 16 | kSimChooses, 17 | kUserChooses, 18 | kImp, 19 | kSuccubus, 20 | kFelhunter, 21 | kFelguard, 22 | kStamina, 23 | kIntellect, 24 | kSpirit, 25 | kSpellPower, 26 | kShadowPower, 27 | kFirePower, 28 | kHitRating, 29 | kCritRating, 30 | kHasteRating, 31 | kMp5, 32 | kNormal, 33 | kPassive, 34 | kAggressive, 35 | }; -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/include/on_dot_tick_proc.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "spell_proc.h" 3 | 4 | struct Player; 5 | 6 | struct OnDotTickProc : SpellProc { 7 | explicit OnDotTickProc(Player& player, const std::shared_ptr& kAura = nullptr); 8 | void Setup() override; 9 | virtual bool ShouldProc(DamageOverTime* spell); 10 | }; 11 | 12 | struct AshtongueTalismanOfShadows final : OnDotTickProc { 13 | AshtongueTalismanOfShadows(Player& player, const std::shared_ptr& kAura); 14 | bool ShouldProc(DamageOverTime* spell) override; 15 | }; 16 | 17 | struct TimbalsFocusingCrystal final : OnDotTickProc { 18 | explicit TimbalsFocusingCrystal(Player& player); 19 | }; 20 | -------------------------------------------------------------------------------- /.github/workflows/npm-build.yml: -------------------------------------------------------------------------------- 1 | name: Npm Build 2 | 3 | on: 4 | pull_request: 5 | 6 | jobs: 7 | build: 8 | runs-on: ubuntu-latest 9 | 10 | steps: 11 | - name: Checkout 12 | uses: actions/checkout@v3 13 | 14 | - if: ${{ env.ACT }} 15 | name: Hack container for local development 16 | run: | 17 | curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - 18 | sudo apt-get install -y nodejs 19 | 20 | - name: Setup Node 21 | uses: actions/setup-node@v3 22 | with: 23 | node-version: '18.x' 24 | 25 | - name: Npm Install & Build 26 | run: | 27 | npm ci 28 | npm run build 29 | -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/src/common.cc: -------------------------------------------------------------------------------- 1 | #include "../include/common.h" 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | double Median(std::vector vec) { 9 | 10 | if (const size_t kSize = vec.size(); kSize > 0) { 11 | std::sort(vec.begin(), vec.end()); 12 | 13 | if (kSize % 2 == 0) { 14 | return (vec[kSize / 2 - 1] + vec[kSize / 2]) / 2; 15 | } 16 | 17 | return vec[kSize / 2]; 18 | } 19 | 20 | return 0; 21 | } 22 | 23 | std::string DoubleToString(const double kNum, const int kDecimalPlaces) { 24 | auto str = std::to_string(kNum); 25 | return str.substr(0, str.find('.') + (kDecimalPlaces > 0 ? kDecimalPlaces + 1 : 0)); 26 | } -------------------------------------------------------------------------------- /src/i18n/config.js: -------------------------------------------------------------------------------- 1 | import i18n from 'i18next' 2 | import { initReactI18next } from 'react-i18next' 3 | import { Languages } from '../Types' 4 | 5 | i18n.use(initReactI18next).init({ 6 | fallbackLng: 'en', 7 | lng: 8 | localStorage.getItem('language') || 9 | (navigator.languages.length > 0 && 10 | navigator.languages[0].split('-').length > 0 && 11 | Languages.find(e => e.iso === navigator.languages[0].split('-')[0]) 12 | ? navigator.languages[0].split('-')[0] 13 | : 'en'), 14 | resources: { 15 | zh: { 16 | translations: require('./locales/zh/translations.json'), 17 | }, 18 | }, 19 | ns: ['translations'], 20 | defaultNS: 'translations', 21 | }) 22 | 23 | export default i18n 24 | -------------------------------------------------------------------------------- /.github/workflows/prettier-lint.yml: -------------------------------------------------------------------------------- 1 | name: TypeScript Lint 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | paths: 8 | - "public/**" 9 | - "src/**" 10 | - ".prettierrc" 11 | 12 | jobs: 13 | format: 14 | runs-on: ubuntu-latest 15 | 16 | permissions: 17 | contents: write 18 | 19 | steps: 20 | - name: Checkout 21 | uses: actions/checkout@v3 22 | with: 23 | ref: ${{ github.head_ref }} 24 | 25 | - name: Prettier Action 26 | uses: creyD/prettier_action@v4.2 27 | with: 28 | prettier_options: "--write **/*.{js,jsx,ts,tsx} --config .prettierrc" 29 | commit_message: "Prettier Fixes" 30 | github_token: ${{ secrets.GITHUB_TOKEN }} 31 | -------------------------------------------------------------------------------- /.github/workflows/clang-format-lint.yml: -------------------------------------------------------------------------------- 1 | name: C++ Lint 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | paths: 8 | - "cpp/**" 9 | - ".clang-format" 10 | 11 | jobs: 12 | format: 13 | runs-on: ubuntu-latest 14 | 15 | permissions: 16 | contents: write 17 | 18 | steps: 19 | - name: Checkout 20 | uses: actions/checkout@v3 21 | 22 | - name: Clang-Format Lint 23 | uses: DoozyX/clang-format-lint-action@v0.13 24 | with: 25 | clangFormatVersion: 13 26 | inplace: True 27 | style: file 28 | 29 | - name: Commit Changes to Git 30 | uses: stefanzweifel/git-auto-commit-action@v4 31 | with: 32 | commit_message: "Clang-Format Fixes" 33 | -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/src/on_resist_proc.cc: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include "../include/on_resist_proc.h" 4 | 5 | #include "../include/player.h" 6 | 7 | OnResistProc::OnResistProc(Player& player, std::shared_ptr aura) 8 | : SpellProc(player, std::move(aura)) { 9 | procs_on_resist = true; 10 | } 11 | 12 | void OnResistProc::Setup() { 13 | SpellProc::Setup(); 14 | 15 | if (procs_on_resist && on_resist_procs_enabled) { 16 | entity.on_resist_procs.push_back(this); 17 | } 18 | } 19 | 20 | EyeOfMagtheridon::EyeOfMagtheridon(Player& player, const std::shared_ptr& kAura) 21 | : OnResistProc(player, kAura) { 22 | name = SpellName::kEyeOfMagtheridon; 23 | proc_chance = 100; 24 | is_item = true; 25 | OnResistProc::Setup(); 26 | } 27 | -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/include/mana_over_time.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "aura.h" 3 | 4 | struct ManaOverTime : Aura { 5 | explicit ManaOverTime(Entity& entity); 6 | void Apply() override; 7 | void Tick(double kTime) override; 8 | void Setup() override; 9 | virtual double GetManaGain() = 0; 10 | }; 11 | 12 | struct DrumsOfRestorationAura final : ManaOverTime { 13 | explicit DrumsOfRestorationAura(Entity& entity); 14 | double GetManaGain() override; 15 | }; 16 | 17 | struct ManaTideTotemAura final : ManaOverTime { 18 | explicit ManaTideTotemAura(Entity& entity); 19 | double GetManaGain() override; 20 | }; 21 | 22 | struct FelEnergyAura final : ManaOverTime { 23 | explicit FelEnergyAura(Entity& entity); 24 | double GetManaGain() override; 25 | }; 26 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es6", 4 | "lib": ["dom", "dom.iterable", "esnext", "WebWorker"], 5 | "types": ["node", "jquery"], 6 | "allowJs": true, 7 | "skipLibCheck": true, 8 | "esModuleInterop": true, 9 | "allowSyntheticDefaultImports": true, 10 | "strict": true, 11 | "forceConsistentCasingInFileNames": true, 12 | "noFallthroughCasesInSwitch": true, 13 | "module": "esnext", 14 | "moduleResolution": "node", 15 | "allowUnusedLabels": false, 16 | "noUnusedLocals": true, 17 | "noUnusedParameters": true, 18 | "allowUnreachableCode": false, 19 | "resolveJsonModule": true, 20 | "isolatedModules": true, 21 | "noEmit": true, 22 | "jsx": "react-jsx" 23 | }, 24 | "include": ["src"] 25 | } 26 | -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/include/on_crit_proc.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "spell_proc.h" 3 | 4 | struct Player; 5 | 6 | struct OnCritProc : SpellProc { 7 | explicit OnCritProc(Player& player, std::shared_ptr aura = nullptr); 8 | void Setup() override; 9 | }; 10 | 11 | struct ImprovedShadowBolt final : OnCritProc { 12 | ImprovedShadowBolt(Player& player, std::shared_ptr aura); 13 | bool ShouldProc(Spell* spell) override; 14 | }; 15 | 16 | struct TheLightningCapacitor final : OnCritProc { 17 | explicit TheLightningCapacitor(Player& player); 18 | void StartCast(double predicted_damage = 0) override; 19 | }; 20 | 21 | struct ShiffarsNexusHorn final : OnCritProc { 22 | ShiffarsNexusHorn(Player& player, std::shared_ptr aura); 23 | }; 24 | 25 | struct SextantOfUnstableCurrents final : OnCritProc { 26 | SextantOfUnstableCurrents(Player& player, std::shared_ptr aura); 27 | }; 28 | -------------------------------------------------------------------------------- /src/components/DpsHistogram.tsx: -------------------------------------------------------------------------------- 1 | import { Bar } from 'react-chartjs-2' 2 | import { useSelector } from 'react-redux' 3 | import { RootState } from '../redux/Store' 4 | 5 | export default function DpsHistogram() { 6 | const histogramState = useSelector((state: RootState) => state.ui.histogram) 7 | 8 | return histogramState.data ? ( 9 | histogramState.data![key], 19 | ), 20 | borderWidth: 1, 21 | borderColor: '#9482C9', 22 | }, 23 | ], 24 | }} 25 | /> 26 | ) : ( 27 |
28 | ) 29 | } 30 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # TBC Warlock Simulator 2 | Warlock DPS simulator for WoW TBCC written in React Typescript, C++ compiled into WebAssembly, and using Redux Toolkit to manage the state of all the components. 3 | 4 | ## Setting up local development 5 | ### Frontend 6 | ```bash 7 | git clone https://github.com/Kristoferhh/WarlockSimulatorTBC.git 8 | cd WarlockSimulatorTBC 9 | npm install 10 | npm start 11 | ``` 12 | ### Backend 13 | [Emscripten SDK to compile the C++ code into WebAssembly](https://emscripten.org/docs/getting_started/downloads.html) 14 | Compile the C++ code by running the `make` command in the root directory of the project 15 | 16 | ## GitHub Pages URL 17 | https://kristoferhh.github.io/WarlockSimulatorTBC 18 | ![image](https://user-images.githubusercontent.com/12117382/140816543-a1656e01-8a63-454e-bf2c-239dc04a1680.png) 19 | ![image](https://user-images.githubusercontent.com/12117382/140816708-08453c89-b39b-477c-b71e-952fe9fe05c0.png) 20 | -------------------------------------------------------------------------------- /src/data/Sockets.tsx: -------------------------------------------------------------------------------- 1 | import { SocketColor, GemColor } from '../Types' 2 | 3 | export const Sockets: { 4 | color: SocketColor 5 | iconName: string 6 | validColors: GemColor[] 7 | }[] = [ 8 | { 9 | color: SocketColor.Meta, 10 | iconName: 'UI-EmptySocket-Meta', 11 | validColors: [GemColor.Meta], 12 | }, 13 | { 14 | color: SocketColor.Red, 15 | iconName: 'UI-EmptySocket-Red', 16 | validColors: [ 17 | GemColor.Red, 18 | GemColor.Orange, 19 | GemColor.Purple, 20 | GemColor.Void, 21 | ], 22 | }, 23 | { 24 | color: SocketColor.Yellow, 25 | iconName: 'UI-EmptySocket-Yellow', 26 | validColors: [ 27 | GemColor.Yellow, 28 | GemColor.Orange, 29 | GemColor.Green, 30 | GemColor.Void, 31 | ], 32 | }, 33 | { 34 | color: SocketColor.Blue, 35 | iconName: 'UI-EmptySocket-Blue', 36 | validColors: [ 37 | GemColor.Blue, 38 | GemColor.Green, 39 | GemColor.Purple, 40 | GemColor.Void, 41 | ], 42 | }, 43 | ] 44 | -------------------------------------------------------------------------------- /.github/workflows/image-existence-check.yml: -------------------------------------------------------------------------------- 1 | name: Image Existence Check 2 | 3 | on: 4 | pull_request: 5 | paths: 6 | - 'src/data/Auras.tsx' 7 | - 'src/data/Gems.tsx' 8 | - 'src/data/Items.tsx' 9 | - 'src/data/Sockets.tsx' 10 | - 'src/data/Spells.tsx' 11 | - 'src/data/Talents.tsx' 12 | - 'src/scripts/image_existence_check.py' 13 | - 'public/img' 14 | 15 | jobs: 16 | check_image_existence: 17 | runs-on: ubuntu-latest 18 | 19 | steps: 20 | - name: Checkout 21 | uses: actions/checkout@v3 22 | 23 | - if: ${{ env.ACT }} 24 | name: Hack container for local development 25 | run: | 26 | curl -fsSL https://deb.nodesource.com/setup_12.x | sudo -E bash - 27 | sudo apt-get install -y nodejs 28 | 29 | - name: Setup Python 30 | uses: actions/setup-python@v3 31 | with: 32 | python-version: '3.x' 33 | 34 | - name: Check existence of icon names 35 | run: python src/scripts/image_existence_check.py 36 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | SOURCE_FILE_PATH = cpp/WarlockSimulatorTBC/src/bindings.cc cpp/WarlockSimulatorTBC/src/spell.cc cpp/WarlockSimulatorTBC/src/entity.cc cpp/WarlockSimulatorTBC/src/on_resist_proc.cc cpp/WarlockSimulatorTBC/src/on_dot_tick_proc.cc cpp/WarlockSimulatorTBC/src/on_damage_proc.cc cpp/WarlockSimulatorTBC/src/on_crit_proc.cc cpp/WarlockSimulatorTBC/src/spell_proc.cc cpp/WarlockSimulatorTBC/src/on_hit_proc.cc cpp/WarlockSimulatorTBC/src/life_tap.cc cpp/WarlockSimulatorTBC/src/stat.cc cpp/WarlockSimulatorTBC/src/rng.cc cpp/WarlockSimulatorTBC/src/mana_over_time.cc cpp/WarlockSimulatorTBC/src/mana_potion.cc cpp/WarlockSimulatorTBC/src/common.cc cpp/WarlockSimulatorTBC/src/player.cc cpp/WarlockSimulatorTBC/src/simulation.cc cpp/WarlockSimulatorTBC/src/aura.cc cpp/WarlockSimulatorTBC/src/damage_over_time.cc cpp/WarlockSimulatorTBC/src/trinket.cc cpp/WarlockSimulatorTBC/src/pet.cc 2 | DEST_FILE_PATH = public/WarlockSim.js 3 | FLAGS = -s EXPORT_NAME="WarlockSim" --bind --no-entry -O2 -s ASSERTIONS=2 -s NO_FILESYSTEM=1 -s MODULARIZE=1 -s ALLOW_MEMORY_GROWTH=1 -std=c++20 4 | 5 | all: $(SOURCE_FILE_PATH) 6 | em++ $(SOURCE_FILE_PATH) -o $(DEST_FILE_PATH) $(FLAGS) -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/include/talents.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | struct Talents { 4 | int suppression; 5 | int improved_corruption; 6 | int improved_life_tap; 7 | int improved_curse_of_agony; 8 | int amplify_curse; 9 | int nightfall; 10 | int empowered_corruption; 11 | int siphon_life; 12 | int shadow_mastery; 13 | int contagion; 14 | int dark_pact; 15 | int unstable_affliction; 16 | 17 | int improved_imp; 18 | int demonic_embrace; 19 | int fel_intellect; 20 | int fel_stamina; 21 | int improved_succubus; 22 | int demonic_aegis; 23 | int unholy_power; 24 | int demonic_sacrifice; 25 | int mana_feed; 26 | int master_demonologist; 27 | int soul_link; 28 | int demonic_knowledge; 29 | int demonic_tactics; 30 | int felguard; 31 | 32 | int improved_shadow_bolt; 33 | int cataclysm; 34 | int bane; 35 | int improved_firebolt; 36 | int improved_lash_of_pain; 37 | int devastation; 38 | int shadowburn; 39 | int improved_searing_pain; 40 | int improved_immolate; 41 | int ruin; 42 | int emberstorm; 43 | int backlash; 44 | int conflagrate; 45 | int shadow_and_flame; 46 | int shadowfury; 47 | }; -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/include/pet.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "entity.h" 3 | 4 | enum class EmbindConstant; 5 | struct Player; 6 | 7 | struct Pet final : Entity, std::enable_shared_from_this { 8 | const double kBaseMeleeSpeed = 2; 9 | PetName pet_name = PetName::kNoName; 10 | PetType pet_type = PetType::kNoPetType; 11 | double glancing_blow_multiplier; 12 | double glancing_blow_chance; 13 | double enemy_damage_reduction_from_armor = 0; 14 | 15 | Pet(Player& player_param, EmbindConstant kSelectedPet); 16 | void Initialize(Simulation* simulation_ptr) override; 17 | void CalculateStatsFromAuras(); 18 | void Setup(); 19 | void Reset() override; 20 | void Tick(double kTime) override; 21 | double GetAttackPower() const; 22 | double GetHastePercent() override; 23 | double GetSpellCritChance(SpellType spell_type = SpellType::kNoSpellType) override; 24 | double GetStamina() override; 25 | double GetIntellect() override; 26 | double GetAgility() const; 27 | double GetStrength() const; 28 | double GetPlayerSpellPower() const; 29 | double GetSpellPower(bool dealing_damage, SpellSchool spell_school) override; 30 | double GetDebuffAttackPower() const; 31 | double CalculateMaxMana(); 32 | double GetDamageModifier(Spell& spell, bool kIsDot) override; 33 | }; 34 | -------------------------------------------------------------------------------- /src/SimWorker.js: -------------------------------------------------------------------------------- 1 | class SimWorker { 2 | constructor( 3 | dpsUpdate, 4 | combatLogVector, 5 | errorCallback, 6 | combatLogUpdate, 7 | combatLogBreakdown, 8 | simulationEnd, 9 | simulationUpdate, 10 | workerParams, 11 | ) { 12 | this.worker = new Worker(`${process.env.PUBLIC_URL}/web.worker.js`) 13 | this.workerParams = workerParams 14 | this.worker.onmessage = function (event) { 15 | const data = event.data.data 16 | switch (event.data.event) { 17 | case 'dpsUpdate': 18 | dpsUpdate(data) 19 | break 20 | case 'errorCallback': 21 | errorCallback(data) 22 | break 23 | case 'combatLogUpdate': 24 | combatLogUpdate(data) 25 | break 26 | case 'end': 27 | simulationEnd(data) 28 | break 29 | case 'update': 30 | simulationUpdate(data) 31 | break 32 | case 'combatLogBreakdown': 33 | combatLogBreakdown(data) 34 | break 35 | case 'combatLogVector': 36 | combatLogVector(data) 37 | break 38 | default: 39 | return 40 | } 41 | } 42 | } 43 | 44 | start() { 45 | this.worker.postMessage(this.workerParams) 46 | } 47 | } 48 | 49 | export { SimWorker } 50 | -------------------------------------------------------------------------------- /src/scripts/image_existence_check.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | 4 | def get_icon_name_from_string(string: str): 5 | start_index = string.find('iconName') + len('iconName: "') 6 | end_index = string.find(',', start_index) - 1 7 | return string[start_index:end_index] 8 | 9 | def assert_icon_image_existence_in_file(file_path: str): 10 | with open(file_path) as f: 11 | for line in f: 12 | if 'iconName' in line and not 'iconName: string' in line: 13 | icon_name = get_icon_name_from_string(line) 14 | assert os.path.isfile(f'./public/img/{icon_name}.jpg'), f'Image for icon `{icon_name}` not found in ./public/img/' 15 | 16 | def auras(): 17 | assert_icon_image_existence_in_file('./src/data/Auras.tsx') 18 | 19 | def gems(): 20 | assert_icon_image_existence_in_file('./src/data/Gems.tsx') 21 | 22 | def items(): 23 | assert_icon_image_existence_in_file('./src/data/Items.tsx') 24 | 25 | def sockets(): 26 | assert_icon_image_existence_in_file('./src/data/Sockets.tsx') 27 | 28 | def spells(): 29 | assert_icon_image_existence_in_file('./src/data/Spells.tsx') 30 | 31 | def talents(): 32 | assert_icon_image_existence_in_file('./src/data/Talents.tsx') 33 | 34 | if __name__ == "__main__": 35 | auras() 36 | gems() 37 | items() 38 | sockets() 39 | spells() 40 | talents() 41 | -------------------------------------------------------------------------------- /src/data/PresetItemSets.tsx: -------------------------------------------------------------------------------- 1 | import { ItemSlot } from '../Types' 2 | 3 | export const PresetItemSets: { 4 | name: string 5 | items: { 6 | [key in ItemSlot]?: { 7 | itemId: number 8 | gemIds?: number[] 9 | enchantId?: number 10 | } 11 | } 12 | }[] = [ 13 | { 14 | name: 'Shadow Destruction Pre-BiS', 15 | items: { 16 | head: { itemId: 28193, gemIds: [24030, 34220] }, 17 | neck: { itemId: 28134 }, 18 | shoulders: { itemId: 21869, gemIds: [31867, 24056], enchantId: 35406 }, 19 | back: { itemId: 23050, enchantId: 25084 }, 20 | chest: { itemId: 21871, gemIds: [31867, 24056], enchantId: 27960 }, 21 | bracer: { itemId: 24250, gemIds: [31867], enchantId: 27917 }, 22 | gloves: { itemId: 27465, gemIds: [24030, 24030], enchantId: 33997 }, 23 | belt: { itemId: 30038, gemIds: [24056, 31867] }, 24 | legs: { itemId: 24262, gemIds: [31867, 24030, 24030], enchantId: 31372 }, 25 | boots: { itemId: 21870, gemIds: [31867, 24056], enchantId: 34008 }, 26 | ring1: { itemId: 28227, enchantId: 27924 }, 27 | ring2: { itemId: 21709, enchantId: 27924 }, 28 | trinket1: { itemId: 29370 }, 29 | trinket2: { itemId: 27683 }, 30 | mainhand: { itemId: 29155, enchantId: 27982 }, 31 | offhand: { itemId: 29273 }, 32 | wand: { itemId: 22821 }, 33 | }, 34 | }, 35 | ] 36 | -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/include/simulation.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | #include 5 | 6 | struct Spell; 7 | struct SimulationSettings; 8 | struct Player; 9 | 10 | struct Simulation { 11 | Player& player; 12 | const SimulationSettings& kSettings; 13 | std::vector dps_vector; 14 | int iteration = 0; 15 | double current_fight_time = 0; 16 | double min_dps = 0; 17 | double max_dps = 0; 18 | 19 | Simulation(Player& player, const SimulationSettings& kSimulationSettings); 20 | void Start(); 21 | void IterationReset(double kFightLength); 22 | void CastNonPlayerCooldowns(double kFightTimeRemaining) const; 23 | void CastNonGcdSpells() const; 24 | void CastGcdSpells(double kFightTimeRemaining) const; 25 | void CastPetSpells() const; 26 | void IterationEnd(double kFightLength, double kDps); 27 | void SimulationEnd(long long kSimulationDuration) const; 28 | double PassTime(double kFightTimeRemaining); 29 | void Tick(double kTime); 30 | void SelectedSpellHandler(const std::shared_ptr& kSpell, 31 | std::map, double>& predicted_damage_of_spells, 32 | double kFightTimeRemaining) const; 33 | void CastSelectedSpell(const std::shared_ptr& kSpell, double kFightTimeRemaining, 34 | double kPredictedDamage = 0) const; 35 | }; 36 | -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/src/on_damage_proc.cc: -------------------------------------------------------------------------------- 1 | #include "../include/on_damage_proc.h" 2 | 3 | #include "../include/entity.h" 4 | #include "../include/player.h" 5 | #include "../include/player_settings.h" 6 | 7 | OnDamageProc::OnDamageProc(Player& player, const std::shared_ptr& kAura) : SpellProc(player, kAura) { 8 | procs_on_damage = true; 9 | } 10 | 11 | void OnDamageProc::Setup() { 12 | SpellProc::Setup(); 13 | 14 | if (procs_on_damage && on_damage_procs_enabled) { 15 | entity.on_damage_procs.push_back(this); 16 | } 17 | } 18 | 19 | ShatteredSunPendantOfAcumenAldor::ShatteredSunPendantOfAcumenAldor(Player& player, std::shared_ptr aura) 20 | : OnDamageProc(player, aura) { 21 | name = SpellName::kShatteredSunPendantOfAcumenAldor; 22 | cooldown = 45; 23 | proc_chance = 15; 24 | is_item = true; 25 | on_damage_procs_enabled = player.settings.exalted_with_shattrath_faction; 26 | OnDamageProc::Setup(); 27 | } 28 | 29 | ShatteredSunPendantOfAcumenScryers::ShatteredSunPendantOfAcumenScryers(Player& player) 30 | : OnDamageProc(player) { 31 | name = SpellName::kShatteredSunPendantOfAcumenScryers; 32 | cooldown = 45; 33 | proc_chance = 15; 34 | min_dmg = 333; 35 | max_dmg = 367; 36 | is_item = true; 37 | does_damage = true; 38 | can_crit = true; 39 | can_miss = true; 40 | on_damage_procs_enabled = player.settings.exalted_with_shattrath_faction; 41 | OnDamageProc::Setup(); 42 | } 43 | -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/src/on_dot_tick_proc.cc: -------------------------------------------------------------------------------- 1 | #include "../include/on_dot_tick_proc.h" 2 | 3 | #include "../include/entity.h" 4 | #include "../include/damage_over_time.h" 5 | #include "../include/player.h" 6 | 7 | OnDotTickProc::OnDotTickProc(Player& player, const std::shared_ptr& kAura) 8 | : SpellProc(player, kAura) { 9 | procs_on_dot_ticks = true; 10 | } 11 | 12 | bool OnDotTickProc::ShouldProc(DamageOverTime*) { return true; } 13 | 14 | void OnDotTickProc::Setup() { 15 | SpellProc::Setup(); 16 | 17 | if (procs_on_dot_ticks && on_dot_tick_procs_enabled) { 18 | entity.on_dot_tick_procs.push_back(this); 19 | } 20 | } 21 | 22 | AshtongueTalismanOfShadows::AshtongueTalismanOfShadows(Player& player, const std::shared_ptr& kAura) 23 | : OnDotTickProc(player, kAura) { 24 | name = SpellName::kAshtongueTalismanOfShadows; 25 | proc_chance = 20; 26 | OnDotTickProc::Setup(); 27 | } 28 | 29 | bool AshtongueTalismanOfShadows::ShouldProc(DamageOverTime* spell) { return spell->name == SpellName::kCorruption; } 30 | 31 | TimbalsFocusingCrystal::TimbalsFocusingCrystal(Player& player) 32 | : OnDotTickProc(player) { 33 | name = SpellName::kTimbalsFocusingCrystal; 34 | cooldown = 15; 35 | proc_chance = 10; 36 | min_dmg = 285; 37 | max_dmg = 475; 38 | does_damage = true; 39 | spell_school = SpellSchool::kShadow; 40 | can_crit = true; 41 | can_miss = true; 42 | OnDotTickProc::Setup(); 43 | } 44 | -------------------------------------------------------------------------------- /.github/workflows/deployment.yml: -------------------------------------------------------------------------------- 1 | name: GitHub Pages Deployment 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | paths: 8 | - 'cpp/**' 9 | - 'public/**' 10 | - 'src/**' 11 | - 'config-overrides.js' 12 | workflow_dispatch: 13 | 14 | jobs: 15 | build: 16 | runs-on: ubuntu-latest 17 | 18 | permissions: 19 | contents: write 20 | 21 | steps: 22 | - name: Checkout 23 | uses: actions/checkout@v3 24 | 25 | - name: Install rsync 26 | run: | 27 | sudo apt-get update 28 | sudo apt-get install -y rsync 29 | 30 | - if: ${{ env.ACT }} 31 | name: Hack container for local development 32 | run: | 33 | curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - 34 | sudo apt-get install -y nodejs 35 | 36 | - name: Setup Node 37 | uses: actions/setup-node@v3 38 | with: 39 | node-version: '18.x' 40 | 41 | - name: Npm Install and Build 42 | run: | 43 | npm ci 44 | git pull 45 | npm --no-git-tag-version version patch 46 | npm run predeploy 47 | 48 | - name: Commit Changes to Git 49 | uses: stefanzweifel/git-auto-commit-action@v4 50 | 51 | - name: Deploy to GitHub Pages 52 | uses: JamesIves/github-pages-deploy-action@v4.3.3 53 | with: 54 | branch: gh-pages 55 | folder: build 56 | token: ${{ secrets.GITHUB_TOKEN }} 57 | -------------------------------------------------------------------------------- /src/components/Session.tsx: -------------------------------------------------------------------------------- 1 | import { useEffect } from 'react' 2 | import { useDispatch, useSelector } from 'react-redux' 3 | import { 4 | getAurasStats, 5 | getBaseStats, 6 | getEnchantsStats, 7 | getGemsStats, 8 | getItemSetCounts, 9 | getItemsStats, 10 | } from '../Common' 11 | import { 12 | setAurasStats, 13 | setBaseStats, 14 | setEnchantsStats, 15 | setGemsStats, 16 | setItemSetCounts, 17 | setItemsStats, 18 | } from '../redux/PlayerSlice' 19 | import { RootState } from '../redux/Store' 20 | import { Race } from '../Types' 21 | 22 | export default function Session() { 23 | const playerStore = useSelector((state: RootState) => state.player) 24 | const dispatch = useDispatch() 25 | 26 | useEffect(() => { 27 | dispatch(setBaseStats(getBaseStats(playerStore.settings.race as Race))) 28 | dispatch(setAurasStats(getAurasStats(playerStore.auras))) 29 | dispatch(setItemsStats(getItemsStats(playerStore.selectedItems))) 30 | dispatch( 31 | setGemsStats( 32 | getGemsStats(playerStore.selectedItems, playerStore.selectedGems), 33 | ), 34 | ) 35 | dispatch( 36 | setEnchantsStats( 37 | getEnchantsStats( 38 | playerStore.selectedItems, 39 | playerStore.selectedEnchants, 40 | ), 41 | ), 42 | ) 43 | dispatch(setItemSetCounts(getItemSetCounts(playerStore.selectedItems))) 44 | ;($('.tablesorter') as any).tablesorter() 45 | // eslint-disable-next-line react-hooks/exhaustive-deps 46 | }, []) 47 | 48 | return
49 | } 50 | -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 17 4 | VisualStudioVersion = 17.1.32127.271 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WarlockSimulatorTBC", "WarlockSimulatorTBC\WarlockSimulatorTBC.vcxproj", "{681AFAA8-7C60-4C38-8CCE-0640E8D401A4}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|x64 = Debug|x64 11 | Debug|x86 = Debug|x86 12 | Release|x64 = Release|x64 13 | Release|x86 = Release|x86 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {681AFAA8-7C60-4C38-8CCE-0640E8D401A4}.Debug|x64.ActiveCfg = Debug|x64 17 | {681AFAA8-7C60-4C38-8CCE-0640E8D401A4}.Debug|x64.Build.0 = Debug|x64 18 | {681AFAA8-7C60-4C38-8CCE-0640E8D401A4}.Debug|x86.ActiveCfg = Debug|Win32 19 | {681AFAA8-7C60-4C38-8CCE-0640E8D401A4}.Debug|x86.Build.0 = Debug|Win32 20 | {681AFAA8-7C60-4C38-8CCE-0640E8D401A4}.Release|x64.ActiveCfg = Release|x64 21 | {681AFAA8-7C60-4C38-8CCE-0640E8D401A4}.Release|x64.Build.0 = Release|x64 22 | {681AFAA8-7C60-4C38-8CCE-0640E8D401A4}.Release|x86.ActiveCfg = Release|Win32 23 | {681AFAA8-7C60-4C38-8CCE-0640E8D401A4}.Release|x86.Build.0 = Release|Win32 24 | EndGlobalSection 25 | GlobalSection(SolutionProperties) = preSolution 26 | HideSolutionNode = FALSE 27 | EndGlobalSection 28 | GlobalSection(ExtensibilityGlobals) = postSolution 29 | SolutionGuid = {36B0B82C-F9D7-4109-9FD4-2BAF36136534} 30 | EndGlobalSection 31 | EndGlobal 32 | -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/include/bindings.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include "player.h" 6 | #include "simulation_settings.h" 7 | 8 | #ifdef EMSCRIPTEN 9 | #include "emscripten.h" 10 | #include "emscripten/bind.h" 11 | #endif 12 | 13 | Player AllocPlayer(PlayerSettings& settings); 14 | PlayerSettings AllocPlayerSettings(AuraSelection& auras, Talents& talents, Sets& sets, CharacterStats& stats, 15 | Items& items); 16 | Items AllocItems(); 17 | AuraSelection AllocAuras(); 18 | Talents AllocTalents(); 19 | Sets AllocSets(); 20 | CharacterStats AllocStats(); 21 | SimulationSettings AllocSimSettings(); 22 | Simulation AllocSim(Player& player, SimulationSettings& simulation_settings); 23 | std::vector AllocRandomSeeds(int kAmountOfSeeds, uint32_t kRandSeed = time(nullptr)); 24 | 25 | void DpsUpdate(double dps); 26 | void ErrorCallback(const char* error_msg); 27 | void PostCombatLogBreakdownVector(const char* name, double mana_gain, double damage); 28 | void PostCombatLogBreakdown(const char* name, uint32_t casts, uint32_t crits, uint32_t misses, uint32_t count, 29 | double uptime, uint32_t dodges, uint32_t glancing_blows); 30 | void CombatLogUpdate(const char* combat_log_entry); 31 | void SimulationUpdate(int iteration, int iteration_amount, double median_dps, int item_id, const char* custom_stat); 32 | void SendSimulationResults(double median_dps, double min_dps, double max_dps, int item_id, int iteration_amount, 33 | int total_fight_duration, const char* custom_stat, long long simulation_duration); 34 | std::string GetExceptionMessage(intptr_t kExceptionPtr); 35 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "homepage": "https://kristoferhh.github.io/WarlockSimulatorTBC", 3 | "name": "warlock-simulator-tbc", 4 | "version": "1.0.74", 5 | "private": true, 6 | "dependencies": { 7 | "@fortawesome/fontawesome-free": "^5.15.4", 8 | "@mui/material": "^5.4.0", 9 | "@reduxjs/toolkit": "^1.7.1", 10 | "@types/chart.js": "^2.9.35", 11 | "@types/node": "^17.0.10", 12 | "@types/react": "^17.0.39", 13 | "@types/react-dom": "^17.0.11", 14 | "chart.js": "^3.7.0", 15 | "gh-pages": "^3.2.3", 16 | "i18next": "^21.6.7", 17 | "nanoid": "^3.2.0", 18 | "react": "^17.0.2", 19 | "react-chartjs-2": "^3.3.0", 20 | "react-dom": "^17.0.2", 21 | "react-i18next": "^11.15.3", 22 | "react-redux": "^7.2.6", 23 | "react-scripts": "^5.0.0", 24 | "typescript": "^4.5.5" 25 | }, 26 | "scripts": { 27 | "predeploy": "npm run build", 28 | "deploy": "gh-pages -d build", 29 | "start": "react-scripts start", 30 | "build": "react-scripts build", 31 | "test": "react-scripts test", 32 | "eject": "react-scripts eject" 33 | }, 34 | "eslintConfig": { 35 | "extends": [ 36 | "react-app", 37 | "react-app/jest" 38 | ] 39 | }, 40 | "browserslist": { 41 | "production": [ 42 | ">0.2%", 43 | "not dead", 44 | "not op_mini all" 45 | ], 46 | "development": [ 47 | "last 1 chrome version", 48 | "last 1 firefox version", 49 | "last 1 safari version" 50 | ] 51 | }, 52 | "devDependencies": { 53 | "@types/jquery": "^3.5.14", 54 | "mini-css-extract-plugin": "2.4.5", 55 | "react-app-rewired": "^2.1.11", 56 | "worker-loader": "^3.0.8" 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /src/data/Races.tsx: -------------------------------------------------------------------------------- 1 | import { Race, StatsCollection } from '../Types' 2 | 3 | export const Races: { name: string; varName: Race; stats: StatsCollection }[] = 4 | [ 5 | { 6 | name: 'Gnome', 7 | varName: Race.Gnome, 8 | stats: { 9 | health: 3310, 10 | mana: 2335, 11 | stamina: 75, 12 | intellect: 136, 13 | spirit: 139, 14 | arcaneResist: 10, 15 | intellectModifier: 1.05, 16 | }, 17 | }, 18 | { 19 | name: 'Human', 20 | varName: Race.Human, 21 | stats: { 22 | health: 3310, 23 | mana: 2335, 24 | stamina: 76, 25 | intellect: 133, 26 | spirit: 139, 27 | spiritModifier: 1.1, 28 | }, 29 | }, 30 | { 31 | name: 'Orc', 32 | varName: Race.Orc, 33 | stats: { 34 | health: 3310, 35 | mana: 2335, 36 | stamina: 78, 37 | intellect: 130, 38 | spirit: 142, 39 | petDamageModifier: 1.05, 40 | }, 41 | }, 42 | { 43 | name: 'Undead', 44 | varName: Race.Undead, 45 | stats: { 46 | health: 3310, 47 | mana: 2335, 48 | stamina: 77, 49 | intellect: 131, 50 | spirit: 144, 51 | shadowResist: 10, 52 | }, 53 | }, 54 | { 55 | name: 'Blood Elf', 56 | varName: Race.BloodElf, 57 | stats: { 58 | health: 3310, 59 | mana: 2335, 60 | stamina: 74, 61 | intellect: 137, 62 | spirit: 138, 63 | fireResist: 5, 64 | frostResist: 5, 65 | shadowResist: 5, 66 | arcaneResist: 5, 67 | natureResist: 5, 68 | }, 69 | }, 70 | ] 71 | -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/include/player.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | #include 5 | 6 | #include "entity.h" 7 | #include "enums.h" 8 | #include "rng.h" 9 | 10 | 11 | struct AuraSelection; 12 | struct Simulation; 13 | struct Aura; 14 | struct Spell; 15 | struct Trinket; 16 | struct PlayerSettings; 17 | struct Items; 18 | struct Sets; 19 | struct Talents; 20 | 21 | struct Player final : Entity { 22 | AuraSelection& selected_auras; 23 | Talents& talents; 24 | Sets& sets; 25 | Items& items; 26 | PlayerSettings& settings; 27 | std::vector trinkets; 28 | std::shared_ptr filler; 29 | std::shared_ptr curse_spell; 30 | std::shared_ptr curse_aura; 31 | std::vector combat_log_entries; 32 | std::string custom_stat; 33 | Rng rng; 34 | double total_fight_duration; 35 | double iteration_damage; 36 | int power_infusions_ready; 37 | 38 | explicit Player(PlayerSettings& settings); 39 | void Initialize(Simulation* simulation_ptr) override; 40 | void Reset() override; 41 | void EndAuras() override; 42 | void ThrowError(const std::string& kError) const; 43 | void CastLifeTapOrDarkPact() const; 44 | void UseCooldowns(double kFightTimeRemaining); 45 | void SendCombatLogEntries() const; 46 | void SendPlayerInfoToCombatLog(); 47 | void Tick(double kTime) override; 48 | double GetSpellPower(bool kDealingDamage, SpellSchool kSchool = SpellSchool::kNoSchool) override; 49 | double GetHastePercent() override; 50 | double GetSpellCritChance(SpellType kSpellType) override; 51 | double FindTimeUntilNextAction() override; 52 | double GetDamageModifier(Spell& spell, bool kIsDot) override; 53 | int GetRand(); 54 | bool RollRng(double kChance); 55 | }; 56 | -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/include/stat.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "enums.h" 3 | 4 | struct Entity; 5 | 6 | struct Stat { 7 | Entity& entity; 8 | double& character_stat; 9 | CalculationType calculation_type = CalculationType::kNoType; 10 | std::string name; 11 | double value; 12 | int combat_log_decimal_places = 0; 13 | 14 | Stat(Entity& entity_param, double& character_stat, double kValue); 15 | void AddStat() const; 16 | void RemoveStat(int kStacks = 1) const; 17 | 18 | private: 19 | void ModifyStat(const std::string& kAction, int kStacks = 1) const; 20 | }; 21 | 22 | struct SpellPower : Stat { 23 | SpellPower(Entity& entity_param, double kValue); 24 | }; 25 | 26 | struct ShadowPower : Stat { 27 | ShadowPower(Entity& entity_param, double kValue); 28 | }; 29 | 30 | struct FirePower : Stat { 31 | FirePower(Entity& entity_param, double kValue); 32 | }; 33 | 34 | struct SpellHasteRating : Stat { 35 | SpellHasteRating(Entity& entity_param, double kValue); 36 | }; 37 | 38 | struct SpellHastePercent : Stat { 39 | SpellHastePercent(Entity& entity_param, double kValue); 40 | }; 41 | 42 | struct MeleeHastePercent : Stat { 43 | MeleeHastePercent(Entity& entity_param, double kValue); 44 | }; 45 | 46 | struct ManaCostModifier : Stat { 47 | ManaCostModifier(Entity& entity_param, double kValue); 48 | }; 49 | 50 | struct SpellCritChance : Stat { 51 | SpellCritChance(Entity& entity_param, double kValue); 52 | }; 53 | 54 | struct SpellCritRating : Stat { 55 | SpellCritRating(Entity& entity_param, double kValue); 56 | }; 57 | 58 | struct AttackPower : Stat { 59 | AttackPower(Entity& entity_param, double kValue); 60 | }; 61 | 62 | struct AttackPowerModifier : Stat { 63 | AttackPowerModifier(Entity& entity_param, double kValue); 64 | }; 65 | -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/include/aura_selection.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | struct AuraSelection { 4 | bool fel_armor; 5 | bool judgement_of_wisdom; 6 | bool mana_spring_totem; 7 | bool wrath_of_air_totem; 8 | bool totem_of_wrath; 9 | bool mark_of_the_wild; 10 | bool prayer_of_spirit; 11 | bool blood_pact; 12 | bool inspiring_presence; 13 | bool moonkin_aura; 14 | bool power_infusion; 15 | bool atiesh_warlock; 16 | bool atiesh_mage; 17 | bool eye_of_the_night; 18 | bool chain_of_the_twilight_owl; 19 | bool jade_pendant_of_blasting; 20 | bool drums_of_battle; 21 | bool drums_of_war; 22 | bool drums_of_restoration; 23 | bool bloodlust; 24 | bool ferocious_inspiration; 25 | bool innervate; 26 | bool mana_tide_totem; 27 | bool airmans_ribbon_of_gallantry; 28 | 29 | bool curse_of_the_elements; 30 | bool shadow_weaving; 31 | bool improved_scorch; 32 | bool misery; 33 | bool judgement_of_the_crusader; 34 | bool vampiric_touch; 35 | bool faerie_fire; 36 | bool sunder_armor; 37 | bool expose_armor; 38 | bool curse_of_recklessness; 39 | bool blood_frenzy; 40 | bool expose_weakness; 41 | bool annihilator; 42 | bool improved_hunters_mark; 43 | 44 | bool super_mana_potion; 45 | bool destruction_potion; 46 | bool demonic_rune; 47 | bool flame_cap; 48 | bool chipped_power_core; 49 | bool cracked_power_core; 50 | 51 | bool pet_blessing_of_kings; 52 | bool pet_blessing_of_wisdom; 53 | bool pet_blessing_of_might; 54 | bool pet_battle_squawk; 55 | bool pet_arcane_intellect; 56 | bool pet_mark_of_the_wild; 57 | bool pet_prayer_of_fortitude; 58 | bool pet_prayer_of_spirit; 59 | bool pet_kiblers_bits; 60 | bool pet_heroic_presence; 61 | bool pet_strength_of_earth_totem; 62 | bool pet_grace_of_air_totem; 63 | bool pet_battle_shout; 64 | bool pet_trueshot_aura; 65 | bool pet_leader_of_the_pack; 66 | bool pet_unleashed_rage; 67 | bool pet_stamina_scroll; 68 | bool pet_intellect_scroll; 69 | bool pet_strength_scroll; 70 | bool pet_agility_scroll; 71 | bool pet_spirit_scroll; 72 | }; -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/include/character_stats.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | struct CharacterStats { 4 | double health; 5 | double mana; 6 | double max_mana; 7 | double stamina; 8 | double intellect; 9 | double spirit; 10 | double spell_power; 11 | double shadow_power; 12 | double fire_power; 13 | double spell_haste_rating; 14 | double spell_hit_rating; 15 | double spell_crit_rating; 16 | double spell_crit_chance; 17 | double spell_hit_chance; 18 | double extra_spell_hit_chance; 19 | double mp5; 20 | double spell_penetration; 21 | double fire_modifier; 22 | double spell_haste_percent; 23 | double shadow_modifier; 24 | double stamina_modifier; 25 | double intellect_modifier; 26 | double spirit_modifier; 27 | double mana_cost_modifier; 28 | double strength; 29 | double agility; 30 | double attack_power; 31 | double melee_crit_chance; 32 | double melee_hit_chance; 33 | double strength_modifier; 34 | double agility_modifier; 35 | double attack_power_modifier; 36 | double damage_modifier; 37 | double melee_haste_percent; 38 | double physical_modifier; 39 | 40 | CharacterStats() 41 | : health(0), 42 | mana(0), 43 | max_mana(0), 44 | stamina(0), 45 | intellect(0), 46 | spirit(0), 47 | spell_power(0), 48 | shadow_power(0), 49 | fire_power(0), 50 | spell_haste_rating(0), 51 | spell_hit_rating(0), 52 | spell_crit_rating(0), 53 | spell_crit_chance(0), 54 | spell_hit_chance(0), 55 | extra_spell_hit_chance(0), 56 | mp5(0), 57 | spell_penetration(0), 58 | fire_modifier(1), 59 | spell_haste_percent(1), 60 | shadow_modifier(1), 61 | stamina_modifier(1), 62 | intellect_modifier(1), 63 | spirit_modifier(1), 64 | mana_cost_modifier(1), 65 | strength(0), 66 | agility(0), 67 | attack_power(0), 68 | melee_crit_chance(0), 69 | melee_hit_chance(0), 70 | strength_modifier(1), 71 | agility_modifier(1), 72 | attack_power_modifier(1), 73 | damage_modifier(1), 74 | melee_haste_percent(1), 75 | physical_modifier(1) { 76 | } 77 | }; 78 | -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/src/mana_potion.cc: -------------------------------------------------------------------------------- 1 | #include "../include/mana_potion.h" 2 | 3 | #include "../include/player.h" 4 | #include "../include/player_settings.h" 5 | #include "../include/common.h" 6 | #include "../include/combat_log_breakdown.h" 7 | 8 | ManaPotion::ManaPotion(Player& player) 9 | : Spell(player) { 10 | cooldown = 120; 11 | is_item = true; 12 | on_gcd = false; 13 | } 14 | 15 | void ManaPotion::Cast() { 16 | Spell::Cast(); 17 | const double kCurrentPlayerMana = entity.stats.mana; 18 | const double kManaGain = entity.player->settings.randomize_values && min_mana_gain > 0 && max_mana_gain > 0 19 | ? entity.player->rng.Range(min_mana_gain, max_mana_gain) 20 | : mana_gain; 21 | 22 | entity.stats.mana = std::min(entity.stats.max_mana, kCurrentPlayerMana + kManaGain); 23 | const double kManaGained = entity.stats.mana - kCurrentPlayerMana; 24 | 25 | if (entity.recording_combat_log_breakdown) { 26 | entity.combat_log_breakdown.at(name)->iteration_mana_gain += kManaGained; 27 | } 28 | 29 | if (entity.ShouldWriteToCombatLog()) { 30 | entity.CombatLog("Player gains " + DoubleToString(kManaGained) + " mana from " + name + " (" + 31 | DoubleToString(round(kCurrentPlayerMana)) + " -> " + DoubleToString(round(entity.stats.mana)) + 32 | ")"); 33 | } 34 | } 35 | 36 | SuperManaPotion::SuperManaPotion(Player& player) 37 | : ManaPotion(player) { 38 | name = SpellName::kSuperManaPotion; 39 | min_mana_gain = 1800; 40 | max_mana_gain = 3000; 41 | Spell::Setup(); 42 | } 43 | 44 | DemonicRune::DemonicRune(Player& player) 45 | : ManaPotion(player) { 46 | name = SpellName::kDemonicRune; 47 | min_mana_gain = 900; 48 | max_mana_gain = 1500; 49 | Spell::Setup(); 50 | } 51 | 52 | void DemonicRune::Cast() { 53 | ManaPotion::Cast(); 54 | if (entity.player->spells.chipped_power_core != nullptr) { 55 | entity.player->spells.chipped_power_core->cooldown_remaining = cooldown; 56 | } 57 | if (entity.player->spells.cracked_power_core != nullptr) { 58 | entity.player->spells.cracked_power_core->cooldown_remaining = cooldown; 59 | } 60 | } -------------------------------------------------------------------------------- /src/components/Main.tsx: -------------------------------------------------------------------------------- 1 | import AuraSelection from './AuraSelection' 2 | import SettingsDisplay from './SettingsDisplay' 3 | import RotationSelection from './RotationSelection' 4 | import TalentTrees from './TalentTrees' 5 | import StatWeights from './StatWeights' 6 | import BreakdownTables from './BreakdownTables' 7 | import EquippedItemsDisplay from './EquippedItemsDisplay' 8 | import CombatLog from './CombatLog' 9 | import DpsHistogram from './DpsHistogram' 10 | import ImportExport from './ImportExport' 11 | import GemSelection from './GemSelection' 12 | import ItemSelection from './ItemSelection' 13 | import { useDispatch } from 'react-redux' 14 | import { setGemSelectionTable } from '../redux/UiSlice' 15 | import { InitialGemSelectionTableValue } from '../Types' 16 | import ProfilesAndSources from './ProfilesAndSources' 17 | import LanguageSelection from './LanguageSelection' 18 | import packageJson from '../../package.json' 19 | 20 | export default function Main() { 21 | const dispatch = useDispatch() 22 | 23 | return ( 24 |
27 | dispatch(setGemSelectionTable(InitialGemSelectionTableValue)) 28 | } 29 | > 30 | 46 |
47 | 48 | 49 | 50 | 51 | 52 | 53 |
54 |
55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 |
63 |
64 | ) 65 | } 66 | -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/include/damage_over_time.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | #include 5 | 6 | enum class SpellSchool; 7 | struct Player; 8 | struct Spell; 9 | 10 | struct DamageOverTime { 11 | virtual ~DamageOverTime() = default; 12 | Player& player; 13 | std::shared_ptr parent_spell; 14 | SpellSchool school; 15 | int duration = 0; // Total duration of the dot 16 | int original_duration = 0; // Used for T4 4pc since we're increasing the duration 17 | // by 3 seconds but need to know what the original 18 | // duration was 19 | int tick_timer_total = 3; // Total duration of each tick (default is 3 seconds 20 | // between ticks) 21 | double tick_timer_remaining = 0; // Time until next tick 22 | int ticks_remaining = 0; // Amount of ticks remaining before the dot expires 23 | int ticks_total = 0; 24 | double spell_power = 0; // Spell Power amount when dot was applied 25 | double base_damage = 0; 26 | double coefficient = 0; 27 | double t5_bonus_modifier = 0; // T5 4pc damage modifier 28 | bool active = false; 29 | bool applied_with_amplify_curse = false; 30 | bool isb_is_active = false; // Siphon Life 31 | std::string name; 32 | 33 | explicit DamageOverTime(Player& player_param); 34 | void Setup(); 35 | virtual void Apply(); 36 | void Fade(); 37 | void Tick(double kTime); 38 | [[nodiscard]] std::vector GetConstantDamage() const; 39 | [[nodiscard]] double PredictDamage() const; 40 | }; 41 | 42 | struct CorruptionDot final : DamageOverTime { 43 | explicit CorruptionDot(Player& player_param); 44 | void Apply() override; 45 | }; 46 | 47 | struct UnstableAfflictionDot final : DamageOverTime { 48 | explicit UnstableAfflictionDot(Player& player_param); 49 | }; 50 | 51 | struct SiphonLifeDot final : DamageOverTime { 52 | explicit SiphonLifeDot(Player& player_param); 53 | }; 54 | 55 | struct ImmolateDot final : DamageOverTime { 56 | explicit ImmolateDot(Player& player_param); 57 | void Apply() override; 58 | }; 59 | 60 | struct CurseOfAgonyDot final : DamageOverTime { 61 | explicit CurseOfAgonyDot(Player& player_param); 62 | }; 63 | 64 | struct CurseOfDoomDot final : DamageOverTime { 65 | explicit CurseOfDoomDot(Player& player_param); 66 | }; 67 | -------------------------------------------------------------------------------- /src/components/RotationSelection.tsx: -------------------------------------------------------------------------------- 1 | import { nanoid } from 'nanoid' 2 | import { useTranslation } from 'react-i18next' 3 | import { useDispatch, useSelector } from 'react-redux' 4 | import { getBaseWowheadUrl } from '../Common' 5 | import { Spells } from '../data/Spells' 6 | import i18n from '../i18n/config' 7 | import { toggleRotationSpellSelection } from '../redux/PlayerSlice' 8 | import { RootState } from '../redux/Store' 9 | import { RotationGroup, rotationGroups } from '../Types' 10 | 11 | export default function RotationSelection() { 12 | const playerStore = useSelector((state: RootState) => state.player) 13 | const dispatch = useDispatch() 14 | const { t } = useTranslation() 15 | 16 | return ( 17 |
18 |

{t('Rotation')}

19 |
    20 | {rotationGroups.map(group => ( 21 |
  • 31 |

    {t(group.header)}

    32 | {Spells.filter(s => s.group === group.header).map(spell => ( 33 |
    { 42 | dispatch(toggleRotationSpellSelection(spell)) 43 | e.preventDefault() 44 | }} 45 | > 46 | 49 | {t(spell.name)} 53 | 54 |
    55 | ))} 56 |
  • 57 | ))} 58 |
59 |
60 | ) 61 | } 62 | -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/include/auras.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | struct DamageOverTime; 6 | struct Aura; 7 | 8 | struct Auras { 9 | std::shared_ptr corruption; 10 | std::shared_ptr unstable_affliction; 11 | std::shared_ptr siphon_life; 12 | std::shared_ptr immolate; 13 | std::shared_ptr curse_of_agony; 14 | std::shared_ptr curse_of_doom; 15 | std::shared_ptr improved_shadow_bolt; 16 | std::shared_ptr curse_of_the_elements; 17 | std::shared_ptr curse_of_recklessness; 18 | std::shared_ptr shadow_trance; 19 | std::shared_ptr amplify_curse; 20 | std::shared_ptr power_infusion; 21 | std::shared_ptr innervate; 22 | std::shared_ptr blood_fury; 23 | std::shared_ptr destruction_potion; 24 | std::shared_ptr flame_cap; 25 | std::shared_ptr bloodlust; 26 | std::shared_ptr drums_of_battle; 27 | std::shared_ptr drums_of_war; 28 | std::shared_ptr drums_of_restoration; 29 | std::shared_ptr band_of_the_eternal_sage; 30 | std::shared_ptr wrath_of_cenarius; 31 | std::shared_ptr blade_of_wizardry; 32 | std::shared_ptr shattered_sun_pendant_of_acumen_aldor; 33 | std::shared_ptr robe_of_the_elder_scribes; 34 | std::shared_ptr mystical_skyfire_diamond; 35 | std::shared_ptr eye_of_magtheridon; 36 | std::shared_ptr sextant_of_unstable_currents; 37 | std::shared_ptr quagmirrans_eye; 38 | std::shared_ptr shiffars_nexus_horn; 39 | std::shared_ptr ashtongue_talisman_of_shadows; 40 | std::shared_ptr darkmoon_card_crusade; 41 | std::shared_ptr the_lightning_capacitor; 42 | std::shared_ptr flameshadow; 43 | std::shared_ptr shadowflame; 44 | std::shared_ptr spellstrike; 45 | std::shared_ptr mana_etched_4_set; 46 | std::shared_ptr chipped_power_core; 47 | std::shared_ptr cracked_power_core; 48 | std::shared_ptr mana_tide_totem; 49 | std::shared_ptr airmans_ribbon_of_gallantry; 50 | std::shared_ptr demonic_frenzy; 51 | std::shared_ptr black_book; 52 | std::shared_ptr battle_squawk; 53 | std::shared_ptr fel_energy; 54 | }; 55 | -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/include/on_hit_proc.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "spell_proc.h" 3 | 4 | struct OnHitProc : SpellProc { 5 | explicit OnHitProc(Entity& entity, std::shared_ptr aura = nullptr); 6 | void Setup() override; 7 | }; 8 | 9 | struct MarkOfDefiance final : OnHitProc { 10 | explicit MarkOfDefiance(Entity& entity); 11 | }; 12 | 13 | struct BladeOfWizardry final : OnHitProc { 14 | explicit BladeOfWizardry(Entity& entity, std::shared_ptr aura); 15 | }; 16 | 17 | struct InsightfulEarthstormDiamond final : OnHitProc { 18 | explicit InsightfulEarthstormDiamond(Entity& entity); 19 | }; 20 | 21 | struct RobeOfTheElderScribes final : OnHitProc { 22 | explicit RobeOfTheElderScribes(Entity& entity, std::shared_ptr aura); 23 | }; 24 | 25 | struct QuagmirransEye final : OnHitProc { 26 | explicit QuagmirransEye(Entity& entity, std::shared_ptr aura); 27 | }; 28 | 29 | struct BandOfTheEternalSage final : OnHitProc { 30 | explicit BandOfTheEternalSage(Entity& entity, std::shared_ptr aura); 31 | }; 32 | 33 | struct MysticalSkyfireDiamond final : OnHitProc { 34 | explicit MysticalSkyfireDiamond(Entity& entity, std::shared_ptr aura); 35 | }; 36 | 37 | struct JudgementOfWisdom final : OnHitProc { 38 | explicit JudgementOfWisdom(Entity& entity); 39 | }; 40 | 41 | struct Flameshadow final : OnHitProc { 42 | explicit Flameshadow(Entity& entity, std::shared_ptr aura); 43 | bool ShouldProc(Spell* spell) override; 44 | }; 45 | 46 | struct Shadowflame final : OnHitProc { 47 | explicit Shadowflame(Entity& entity, std::shared_ptr aura); 48 | bool ShouldProc(Spell* spell) override; 49 | }; 50 | 51 | struct Spellstrike final : OnHitProc { 52 | explicit Spellstrike(Entity& entity, std::shared_ptr aura); 53 | }; 54 | 55 | struct ManaEtched4Set final : OnHitProc { 56 | explicit ManaEtched4Set(Entity& entity, std::shared_ptr aura); 57 | }; 58 | 59 | struct WrathOfCenarius final : OnHitProc { 60 | explicit WrathOfCenarius(Entity& entity, std::shared_ptr aura); 61 | }; 62 | 63 | struct DarkmoonCardCrusade final : OnHitProc { 64 | explicit DarkmoonCardCrusade(Entity& entity, std::shared_ptr aura); 65 | }; 66 | 67 | struct DemonicFrenzy final : OnHitProc { 68 | explicit DemonicFrenzy(Entity& entity, std::shared_ptr aura); 69 | }; 70 | -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/include/trinket.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | 5 | struct Stat; 6 | struct Player; 7 | 8 | struct Trinket { 9 | Player& player; 10 | std::vector stats; 11 | int duration = 0; 12 | double duration_remaining = 0; 13 | int cooldown = 0; 14 | double cooldown_remaining = 0; 15 | bool active = false; 16 | bool shares_cooldown = true; 17 | std::string name; 18 | 19 | explicit Trinket(Player& player); 20 | [[nodiscard]] bool Ready() const; 21 | void Reset(); 22 | void Setup(); 23 | void Use(); 24 | void Fade(); 25 | void Tick(double kTime); 26 | }; 27 | 28 | struct RestrainedEssenceOfSapphiron : Trinket { 29 | explicit RestrainedEssenceOfSapphiron(Player& player); 30 | }; 31 | 32 | struct ShiftingNaaruSliver : Trinket { 33 | explicit ShiftingNaaruSliver(Player& player); 34 | }; 35 | 36 | struct SkullOfGuldan : Trinket { 37 | explicit SkullOfGuldan(Player& player); 38 | }; 39 | 40 | struct HexShrunkenHead : Trinket { 41 | explicit HexShrunkenHead(Player& player); 42 | }; 43 | 44 | struct IconOfTheSilverCrescent : Trinket { 45 | explicit IconOfTheSilverCrescent(Player& player); 46 | }; 47 | 48 | struct ScryersBloodgem : Trinket { 49 | explicit ScryersBloodgem(Player& player); 50 | }; 51 | 52 | struct AncientCrystalTalisman : Trinket { 53 | explicit AncientCrystalTalisman(Player& player); 54 | }; 55 | 56 | struct ArcanistsStone : Trinket { 57 | explicit ArcanistsStone(Player& player); 58 | }; 59 | 60 | struct TerokkarTabletOfVim : Trinket { 61 | explicit TerokkarTabletOfVim(Player& player); 62 | }; 63 | 64 | struct XirisGift : Trinket { 65 | explicit XirisGift(Player& player); 66 | }; 67 | 68 | struct VengeanceOfTheIllidari : Trinket { 69 | explicit VengeanceOfTheIllidari(Player& player); 70 | }; 71 | 72 | struct FigurineLivingRubySerpent : Trinket { 73 | explicit FigurineLivingRubySerpent(Player& player); 74 | }; 75 | 76 | struct EssenceOfTheMartyr : Trinket { 77 | explicit EssenceOfTheMartyr(Player& player); 78 | }; 79 | 80 | struct StarkillersBauble : Trinket { 81 | explicit StarkillersBauble(Player& player); 82 | }; 83 | 84 | struct DarkIronSmokingPipe : Trinket { 85 | explicit DarkIronSmokingPipe(Player& player); 86 | }; 87 | 88 | struct HazzarahsCharmOfDestruction : Trinket { 89 | explicit HazzarahsCharmOfDestruction(Player& player); 90 | }; 91 | -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/src/on_crit_proc.cc: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include "../include/on_crit_proc.h" 4 | 5 | #include "../include/entity.h" 6 | #include "../include/player.h" 7 | #include "../include/player_settings.h" 8 | #include "../include/talents.h" 9 | #include "../include/aura.h" 10 | 11 | OnCritProc::OnCritProc(Player& player, std::shared_ptr aura) 12 | : SpellProc(player, std::move(aura)) { procs_on_crit = true; } 13 | 14 | void OnCritProc::Setup() { 15 | SpellProc::Setup(); 16 | 17 | if (procs_on_crit && on_crit_procs_enabled) { 18 | entity.on_crit_procs.push_back(this); 19 | } 20 | } 21 | 22 | ImprovedShadowBolt::ImprovedShadowBolt(Player& player, std::shared_ptr aura) 23 | : OnCritProc(player, std::move(aura)) { 24 | name = SpellName::kImprovedShadowBolt; 25 | proc_chance = 100; 26 | on_crit_procs_enabled = !player.settings.using_custom_isb_uptime && player.talents.improved_shadow_bolt > 0; 27 | OnCritProc::Setup(); 28 | } 29 | 30 | bool ImprovedShadowBolt::ShouldProc(Spell* spell) { return spell->name == SpellName::kShadowBolt; } 31 | 32 | TheLightningCapacitor::TheLightningCapacitor(Player& player) 33 | : OnCritProc(player) { 34 | name = SpellName::kTheLightningCapacitor; 35 | cooldown = 2.5; 36 | min_dmg = 694; 37 | max_dmg = 806; 38 | proc_chance = 100; 39 | does_damage = true; 40 | can_crit = true; 41 | can_miss = true; 42 | OnCritProc::Setup(); 43 | } 44 | 45 | void TheLightningCapacitor::StartCast(double) { 46 | if (cooldown_remaining <= 0) { 47 | entity.player->auras.the_lightning_capacitor->Apply(); 48 | if (entity.player->auras.the_lightning_capacitor->stacks == 49 | entity.player->auras.the_lightning_capacitor->max_stacks) { 50 | Spell::StartCast(); 51 | entity.player->auras.the_lightning_capacitor->Fade(); 52 | } 53 | } 54 | } 55 | 56 | ShiffarsNexusHorn::ShiffarsNexusHorn(Player& player, std::shared_ptr aura) 57 | : OnCritProc(player, std::move(aura)) { 58 | name = SpellName::kShiffarsNexusHorn; 59 | cooldown = 45; 60 | proc_chance = 20; 61 | is_item = true; 62 | OnCritProc::Setup(); 63 | } 64 | 65 | SextantOfUnstableCurrents::SextantOfUnstableCurrents(Player& player, std::shared_ptr aura) 66 | : OnCritProc(player, std::move(aura)) { 67 | name = SpellName::kSextantOfUnstableCurrents; 68 | cooldown = 45; 69 | proc_chance = 20; 70 | is_item = true; 71 | OnCritProc::Setup(); 72 | } -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 18 | 19 | 20 | 21 | 22 | 26 | 27 | 28 | Warlock Simulator TBC 29 | 36 | 37 | 38 | 44 | 45 | 59 | 60 | 61 | 62 | 65 |
66 | 67 | 68 | -------------------------------------------------------------------------------- /src/logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/src/mana_over_time.cc: -------------------------------------------------------------------------------- 1 | #include "../include/mana_over_time.h" 2 | 3 | #include "../include/entity.h" 4 | #include "../include/common.h" 5 | #include "../include/combat_log_breakdown.h" 6 | #include "../include/stat.h" 7 | 8 | ManaOverTime::ManaOverTime(Entity& entity) 9 | : Aura(entity) {} 10 | 11 | void ManaOverTime::Setup() { 12 | ticks_total = duration / tick_timer_total; 13 | Aura::Setup(); 14 | } 15 | 16 | void ManaOverTime::Apply() { 17 | Aura::Apply(); 18 | tick_timer_remaining = tick_timer_total; 19 | ticks_remaining = ticks_total; 20 | } 21 | 22 | void ManaOverTime::Tick(const double kTime) { 23 | tick_timer_remaining -= kTime; 24 | 25 | if (tick_timer_remaining <= 0) { 26 | const double kCurrentMana = entity.stats.mana; 27 | 28 | entity.stats.mana = std::min(entity.stats.max_mana, entity.stats.mana + GetManaGain()); 29 | const double kManaGained = entity.stats.mana - kCurrentMana; 30 | 31 | if (entity.ShouldWriteToCombatLog()) { 32 | entity.CombatLog(entity.name + " gains " + DoubleToString(kManaGained) + " mana from " + name + " (" + 33 | DoubleToString(kCurrentMana) + " -> " + DoubleToString(entity.stats.mana) + ")" + ")"); 34 | } 35 | 36 | if (entity.recording_combat_log_breakdown) { 37 | entity.combat_log_breakdown.at(name)->casts++; 38 | entity.combat_log_breakdown.at(name)->iteration_mana_gain += kManaGained; 39 | } 40 | // todo pet 41 | 42 | ticks_remaining--; 43 | tick_timer_remaining = tick_timer_total; 44 | 45 | if (ticks_remaining <= 0) { 46 | Fade(); 47 | } 48 | } 49 | } 50 | 51 | DrumsOfRestorationAura::DrumsOfRestorationAura(Entity& entity) 52 | : ManaOverTime(entity) { 53 | name = SpellName::kDrumsOfRestoration; 54 | duration = 15; 55 | tick_timer_total = 3; 56 | group_wide = true; 57 | ManaOverTime::Setup(); 58 | } 59 | 60 | double DrumsOfRestorationAura::GetManaGain() { return 600.0 / ticks_total; } 61 | 62 | ManaTideTotemAura::ManaTideTotemAura(Entity& entity) 63 | : ManaOverTime(entity) { 64 | name = SpellName::kManaTideTotem; 65 | duration = 12; 66 | tick_timer_total = 3; 67 | group_wide = true; 68 | ManaOverTime::Setup(); 69 | } 70 | 71 | double ManaTideTotemAura::GetManaGain() { return entity.stats.max_mana * 0.06; } 72 | 73 | FelEnergyAura::FelEnergyAura(Entity& entity) 74 | : ManaOverTime(entity) { 75 | name = SpellName::kFelEnergy; 76 | duration = 9999; 77 | tick_timer_total = 4; 78 | ManaOverTime::Setup(); 79 | } 80 | 81 | double FelEnergyAura::GetManaGain() { return entity.stats.max_mana * 0.03; } -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/src/life_tap.cc: -------------------------------------------------------------------------------- 1 | #include "../include/life_tap.h" 2 | 3 | #include "../include/entity.h" 4 | #include "../include/player.h" 5 | #include "../include/talents.h" 6 | #include "../include/common.h" 7 | #include "../include/combat_log_breakdown.h" 8 | #include "../include/pet.h" 9 | 10 | LifeTap::LifeTap(Entity& entity) 11 | : Spell(entity), 12 | mana_return(582), 13 | modifier(1 * (1 + 0.1 * entity.player->talents.improved_life_tap)) { 14 | name = SpellName::kLifeTap; 15 | 16 | coefficient = 0.8; 17 | 18 | spell_school = SpellSchool::kShadow; 19 | Spell::Setup(); 20 | } 21 | 22 | double LifeTap::ManaGain() const { 23 | return (mana_return + entity.GetSpellPower(false, spell_school) * coefficient) * modifier; 24 | } 25 | 26 | void LifeTap::Cast() { 27 | const double kCurrentPlayerMana = entity.stats.mana; 28 | const double kManaGain = this->ManaGain(); 29 | 30 | entity.stats.mana = std::min(entity.stats.max_mana, entity.stats.mana + kManaGain); 31 | const double kManaGained = entity.stats.mana - kCurrentPlayerMana; 32 | 33 | if (entity.recording_combat_log_breakdown) { 34 | entity.combat_log_breakdown.at(name)->casts++; 35 | entity.combat_log_breakdown.at(name)->iteration_mana_gain += kManaGained; 36 | } 37 | if (entity.ShouldWriteToCombatLog()) { 38 | entity.CombatLog(name + " " + DoubleToString(kManaGained) + " (" + 39 | DoubleToString(entity.GetSpellPower(false, spell_school)) + " Spell Power - " + 40 | DoubleToString(coefficient, 3) + " Coefficient - " + DoubleToString(modifier * 100, 2) + 41 | "% Modifier)"); 42 | 43 | if (kCurrentPlayerMana + kManaGain > entity.stats.max_mana) { 44 | entity.CombatLog(name + " used at too high mana (mana wasted)"); 45 | } 46 | } 47 | 48 | if (entity.player->talents.mana_feed > 0 && entity.pet != nullptr) { 49 | const double kCurrentPetMana = entity.pet->stats.mana; 50 | 51 | entity.pet->stats.mana = std::min(kCurrentPetMana + kManaGain * (entity.player->talents.mana_feed / 3.0), 52 | entity.pet->CalculateMaxMana()); 53 | 54 | if (entity.ShouldWriteToCombatLog()) { 55 | entity.CombatLog(entity.pet->name + " gains " + DoubleToString(entity.pet->stats.mana - kCurrentPetMana) + 56 | " mana from Mana Feed"); 57 | } 58 | } 59 | 60 | if (name == SpellName::kDarkPact) { 61 | entity.pet->stats.mana = std::max(0.0, entity.pet->stats.mana - kManaGain); 62 | } 63 | } 64 | 65 | DarkPact::DarkPact(Entity& entity) 66 | : LifeTap(entity) { 67 | name = SpellName::kDarkPact; 68 | mana_return = 700; 69 | coefficient = 0.96; 70 | modifier = 1; 71 | spell_school = SpellSchool::kShadow; 72 | Spell::Setup(); 73 | } 74 | 75 | bool DarkPact::Ready() { return Spell::Ready() && entity.pet->stats.mana >= ManaGain(); } -------------------------------------------------------------------------------- /cpp/WarlockSimulatorTBC/include/spells.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | struct Spell; 5 | 6 | struct Spells { 7 | std::shared_ptr life_tap; 8 | std::shared_ptr seed_of_corruption; 9 | std::shared_ptr shadow_bolt; 10 | std::shared_ptr incinerate; 11 | std::shared_ptr searing_pain; 12 | std::shared_ptr corruption; 13 | std::shared_ptr unstable_affliction; 14 | std::shared_ptr siphon_life; 15 | std::shared_ptr immolate; 16 | std::shared_ptr curse_of_agony; 17 | std::shared_ptr curse_of_the_elements; 18 | std::shared_ptr curse_of_recklessness; 19 | std::shared_ptr curse_of_doom; 20 | std::shared_ptr conflagrate; 21 | std::shared_ptr shadowburn; 22 | std::shared_ptr death_coil; 23 | std::shared_ptr shadowfury; 24 | std::shared_ptr amplify_curse; 25 | std::shared_ptr dark_pact; 26 | std::shared_ptr destruction_potion; 27 | std::shared_ptr super_mana_potion; 28 | std::shared_ptr demonic_rune; 29 | std::shared_ptr flame_cap; 30 | std::shared_ptr blood_fury; 31 | std::shared_ptr drums_of_battle; 32 | std::shared_ptr drums_of_war; 33 | std::shared_ptr drums_of_restoration; 34 | std::shared_ptr blade_of_wizardry; 35 | std::shared_ptr shattered_sun_pendant_of_acumen_aldor; 36 | std::shared_ptr shattered_sun_pendant_of_acumen_scryers; 37 | std::shared_ptr robe_of_the_elder_scribes; 38 | std::shared_ptr mystical_skyfire_diamond; 39 | std::shared_ptr insightful_earthstorm_diamond; 40 | std::shared_ptr timbals_focusing_crystal; 41 | std::shared_ptr mark_of_defiance; 42 | std::shared_ptr the_lightning_capacitor; 43 | std::shared_ptr quagmirrans_eye; 44 | std::shared_ptr shiffars_nexus_horn; 45 | std::shared_ptr sextant_of_unstable_currents; 46 | std::shared_ptr band_of_the_eternal_sage; 47 | std::shared_ptr chipped_power_core; 48 | std::shared_ptr cracked_power_core; 49 | std::shared_ptr mana_tide_totem; 50 | std::shared_ptr judgement_of_wisdom; 51 | std::shared_ptr flameshadow; 52 | std::shared_ptr shadowflame; 53 | std::shared_ptr spellstrike; 54 | std::shared_ptr mana_etched_4_set; 55 | std::shared_ptr ashtongue_talisman_of_shadows; 56 | std::shared_ptr wrath_of_cenarius; 57 | std::shared_ptr darkmoon_card_crusade; 58 | std::shared_ptr eye_of_magtheridon; 59 | std::shared_ptr improved_shadow_bolt; 60 | std::shared_ptr melee; 61 | std::shared_ptr firebolt; 62 | std::shared_ptr lash_of_pain; 63 | std::shared_ptr cleave; 64 | std::shared_ptr demonic_frenzy; 65 | std::vector> power_infusion; 66 | std::vector> bloodlust; 67 | std::vector> innervate; 68 | }; 69 | --------------------------------------------------------------------------------