mirror of
https://github.com/ornfelt/azerothcore_lua_scripts
synced 2026-08-22 06:26:03 -04:00
970 lines
52 KiB
Diff
970 lines
52 KiB
Diff
|
|
diff --git a/sql/custom/characters/.gitignore b/sql/custom/characters/.gitignore
|
||
|
|
deleted file mode 100644
|
||
|
|
index d1b811b7de5..00000000000
|
||
|
|
--- a/sql/custom/characters/.gitignore
|
||
|
|
+++ /dev/null
|
||
|
|
@@ -1 +0,0 @@
|
||
|
|
-*.sql
|
||
|
|
diff --git a/sql/custom/characters/characters.solocraft.sql b/sql/custom/characters/characters.solocraft.sql
|
||
|
|
new file mode 100644
|
||
|
|
index 00000000000..b80bffd67f5
|
||
|
|
--- /dev/null
|
||
|
|
+++ b/sql/custom/characters/characters.solocraft.sql
|
||
|
|
@@ -0,0 +1,24 @@
|
||
|
|
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||
|
|
+/*!40101 SET NAMES utf8 */;
|
||
|
|
+/*!50503 SET NAMES utf8mb4 */;
|
||
|
|
+/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||
|
|
+/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||
|
|
+/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
||
|
|
+
|
||
|
|
+-- Dumping structure for table characters.custom_solocraft_character_stats
|
||
|
|
+DROP TABLE IF EXISTS `custom_solocraft_character_stats`;
|
||
|
|
+CREATE TABLE IF NOT EXISTS `custom_solocraft_character_stats` (
|
||
|
|
+ `GUID` tinyint(3) unsigned NOT NULL,
|
||
|
|
+ `Difficulty` float NOT NULL,
|
||
|
|
+ `GroupSize` int(11) NOT NULL,
|
||
|
|
+ `SpellPower` int(10) unsigned NOT NULL DEFAULT '0',
|
||
|
|
+ `Stats` float NOT NULL DEFAULT '100',
|
||
|
|
+ PRIMARY KEY (`GUID`)
|
||
|
|
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||
|
|
+
|
||
|
|
+-- Data exporting was unselected.
|
||
|
|
+
|
||
|
|
+/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
|
||
|
|
+/*!40014 SET FOREIGN_KEY_CHECKS=IFNULL(@OLD_FOREIGN_KEY_CHECKS, 1) */;
|
||
|
|
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||
|
|
+/*!40111 SET SQL_NOTES=IFNULL(@OLD_SQL_NOTES, 1) */;
|
||
|
|
diff --git a/src/server/scripts/Custom/Solocraft.cpp b/src/server/scripts/Custom/Solocraft.cpp
|
||
|
|
new file mode 100644
|
||
|
|
index 00000000000..ec9603237d6
|
||
|
|
--- /dev/null
|
||
|
|
+++ b/src/server/scripts/Custom/Solocraft.cpp
|
||
|
|
@@ -0,0 +1,549 @@
|
||
|
|
+/*
|
||
|
|
+ * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
|
||
|
|
+ *
|
||
|
|
+ * This program is free software; you can redistribute it and/or modify it
|
||
|
|
+ * under the terms of the GNU General Public License as published by the
|
||
|
|
+ * Free Software Foundation; either version 2 of the License, or (at your
|
||
|
|
+ * option) any later version.
|
||
|
|
+ *
|
||
|
|
+ * This program is distributed in the hope that it will be useful, but WITHOUT
|
||
|
|
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||
|
|
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||
|
|
+ * more details.
|
||
|
|
+ *
|
||
|
|
+ * You should have received a copy of the GNU General Public License along
|
||
|
|
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
|
||
|
|
+ *
|
||
|
|
+ * Orignal Azeroth Module Pulled from https://github.com/azerothcore/mod-solocraft
|
||
|
|
+ * Which is a fork of https://github.com/conan513/mod-solocraft
|
||
|
|
+ * Refactored to Trinitycore Custom 335
|
||
|
|
+ * and improved upon by Single Player Project Developer MDic
|
||
|
|
+ */
|
||
|
|
+
|
||
|
|
+#include <map>
|
||
|
|
+#include "Config.h"
|
||
|
|
+#include "DatabaseEnv.h"
|
||
|
|
+#include "ScriptMgr.h"
|
||
|
|
+#include "Unit.h"
|
||
|
|
+#include "ObjectAccessor.h"
|
||
|
|
+#include "Player.h"
|
||
|
|
+#include "Pet.h"
|
||
|
|
+#include "Map.h"
|
||
|
|
+#include "Group.h"
|
||
|
|
+#include "InstanceScript.h"
|
||
|
|
+#include "Chat.h"
|
||
|
|
+#include <math.h>
|
||
|
|
+#include <unordered_map>
|
||
|
|
+
|
||
|
|
+bool SoloCraftEnable = 1;
|
||
|
|
+bool SoloCraftAnnounceModule = 1;
|
||
|
|
+bool SoloCraftDebuffEnable = 1;
|
||
|
|
+float SoloCraftSpellMult = 1.0;
|
||
|
|
+float SoloCraftStatsMult = 100.0;
|
||
|
|
+uint32 SolocraftLevelDiff = 1;
|
||
|
|
+uint32 SolocraftDungeonLevel = 1;
|
||
|
|
+std::unordered_map<uint32, uint32> dungeons;
|
||
|
|
+std::unordered_map<uint32, float> diff_Multiplier;
|
||
|
|
+std::unordered_map<uint32, float> diff_Multiplier_Heroics;
|
||
|
|
+float D5 = 1.0;
|
||
|
|
+float D10 = 1.0;
|
||
|
|
+float D25 = 1.0;
|
||
|
|
+float D40 = 1.0;
|
||
|
|
+float D649H10 = 1.0;
|
||
|
|
+float D649H25 = 1.0;
|
||
|
|
+
|
||
|
|
+class SolocraftConfig : public WorldScript
|
||
|
|
+{
|
||
|
|
+public:
|
||
|
|
+ SolocraftConfig() : WorldScript("SolocraftConfig") {}
|
||
|
|
+ // Load Configuration Settings
|
||
|
|
+ void OnConfigLoad(bool /*reload*/) override
|
||
|
|
+ {
|
||
|
|
+ SoloCraftEnable = sConfigMgr->GetBoolDefault("Solocraft.Enable", 1);
|
||
|
|
+ SoloCraftAnnounceModule = sConfigMgr->GetBoolDefault("Solocraft.Announce", 1);
|
||
|
|
+ //Balancing
|
||
|
|
+ SoloCraftDebuffEnable = sConfigMgr->GetBoolDefault("SoloCraft.Debuff.Enable", 1);
|
||
|
|
+ SoloCraftSpellMult = sConfigMgr->GetFloatDefault("SoloCraft.Spellpower.Mult", 2.5);
|
||
|
|
+ SoloCraftStatsMult = sConfigMgr->GetFloatDefault("SoloCraft.Stats.Mult", 100.0);
|
||
|
|
+ //Level Thresholds
|
||
|
|
+ SolocraftLevelDiff = sConfigMgr->GetIntDefault("Solocraft.Max.Level.Diff", 10);
|
||
|
|
+ //Catch All Dungeon Level Threshold
|
||
|
|
+ SolocraftDungeonLevel = sConfigMgr->GetIntDefault("Solocraft.Dungeon.Level", 80);
|
||
|
|
+ // Dungeon Base Level
|
||
|
|
+ dungeons =
|
||
|
|
+ {
|
||
|
|
+ // Wow Classic
|
||
|
|
+ {33, sConfigMgr->GetIntDefault("Solocraft.ShadowfangKeep.Level", 15) },
|
||
|
|
+ {34, sConfigMgr->GetIntDefault("Solocraft.Stockades.Level", 22) },
|
||
|
|
+ {36, sConfigMgr->GetIntDefault("Solocraft.Deadmines.Level", 18) },
|
||
|
|
+ {43, sConfigMgr->GetIntDefault("Solocraft.WailingCaverns.Level", 17) },
|
||
|
|
+ {47, sConfigMgr->GetIntDefault("Solocraft.RazorfenKraulInstance.Level", 30) },
|
||
|
|
+ {48, sConfigMgr->GetIntDefault("Solocraft.Blackfathom.Level", 20) },
|
||
|
|
+ {70, sConfigMgr->GetIntDefault("Solocraft.Uldaman.Level", 40) },
|
||
|
|
+ {90, sConfigMgr->GetIntDefault("Solocraft.GnomeragonInstance.Level", 24) },
|
||
|
|
+ {109, sConfigMgr->GetIntDefault("Solocraft.SunkenTemple.Level", 50) },
|
||
|
|
+ {129, sConfigMgr->GetIntDefault("Solocraft.RazorfenDowns.Level", 40) },
|
||
|
|
+ {189, sConfigMgr->GetIntDefault("Solocraft.MonasteryInstances.Level", 35) }, // Scarlet Monastery
|
||
|
|
+ {209, sConfigMgr->GetIntDefault("Solocraft.TanarisInstance.Level", 44) }, // Zul'Farrak
|
||
|
|
+ {229, sConfigMgr->GetIntDefault("Solocraft.BlackRockSpire.Level", 55) },
|
||
|
|
+ {230, sConfigMgr->GetIntDefault("Solocraft.BlackrockDepths.Level", 50) },
|
||
|
|
+ {249, sConfigMgr->GetIntDefault("Solocraft.OnyxiaLairInstance.Level", 60) },
|
||
|
|
+ {289, sConfigMgr->GetIntDefault("Solocraft.SchoolofNecromancy.Level", 55) }, // Scholomance
|
||
|
|
+ {309, sConfigMgr->GetIntDefault("Solocraft.Zul'gurub.Level", 60) },
|
||
|
|
+ {329, sConfigMgr->GetIntDefault("Solocraft.Stratholme.Level", 55) },
|
||
|
|
+ {349, sConfigMgr->GetIntDefault("Solocraft.Mauradon.Level", 48) },
|
||
|
|
+ {389, sConfigMgr->GetIntDefault("Solocraft.OrgrimmarInstance.Level", 15) }, // Ragefire Chasm
|
||
|
|
+ {409, sConfigMgr->GetIntDefault("Solocraft.MoltenCore.Level", 60) },
|
||
|
|
+ {429, sConfigMgr->GetIntDefault("Solocraft.DireMaul.Level", 48) },
|
||
|
|
+ {469, sConfigMgr->GetIntDefault("Solocraft.BlackwingLair.Level", 40) },
|
||
|
|
+ {509, sConfigMgr->GetIntDefault("Solocraft.AhnQiraj.Level", 60) }, // Ruins of Ahn'Qiraj
|
||
|
|
+ {531, sConfigMgr->GetIntDefault("Solocraft.AhnQirajTemple.Level", 60) },
|
||
|
|
+ // BC Instances
|
||
|
|
+ {269, sConfigMgr->GetIntDefault("Solocraft.CavernsOfTime.Level", 68) }, // The Black Morass
|
||
|
|
+ {532, sConfigMgr->GetIntDefault("Solocraft.Karazahn.Level", 68) },
|
||
|
|
+ {534, sConfigMgr->GetIntDefault("Solocraft.HyjalPast.Level", 70) }, // The Battle for Mount Hyjal - Hyjal Summit
|
||
|
|
+ {540, sConfigMgr->GetIntDefault("Solocraft.HellfireMilitary.Level", 68) }, // The Shattered Halls
|
||
|
|
+ {542, sConfigMgr->GetIntDefault("Solocraft.HellfireDemon.Level", 68) }, // The Blood Furnace
|
||
|
|
+ {543, sConfigMgr->GetIntDefault("Solocraft.HellfireRampart.Level", 68) },
|
||
|
|
+ {544, sConfigMgr->GetIntDefault("Solocraft.HellfireRaid.Level", 68) }, // Magtheridon's Lair
|
||
|
|
+ {545, sConfigMgr->GetIntDefault("Solocraft.CoilfangPumping.Level", 68) }, // The Steamvault
|
||
|
|
+ {546, sConfigMgr->GetIntDefault("Solocraft.CoilfangMarsh.Level", 68) }, // The Underbog
|
||
|
|
+ {547, sConfigMgr->GetIntDefault("Solocraft.CoilfangDraenei.Level", 68) }, // The Slavepens
|
||
|
|
+ {548, sConfigMgr->GetIntDefault("Solocraft.CoilfangRaid.Level", 70) }, // Serpentshrine Cavern
|
||
|
|
+ {550, sConfigMgr->GetIntDefault("Solocraft.TempestKeepRaid.Level", 70) }, // The Eye
|
||
|
|
+ {552, sConfigMgr->GetIntDefault("Solocraft.TempestKeepArcane.Level", 68) }, // The Arcatraz
|
||
|
|
+ {553, sConfigMgr->GetIntDefault("Solocraft.TempestKeepAtrium.Level", 68) }, // The Botanica
|
||
|
|
+ {554, sConfigMgr->GetIntDefault("Solocraft.TempestKeepFactory.Level", 68) }, // The Mechanar
|
||
|
|
+ {555, sConfigMgr->GetIntDefault("Solocraft.AuchindounShadow.Level", 68) }, // Shadow Labyrinth
|
||
|
|
+ {556, sConfigMgr->GetIntDefault("Solocraft.AuchindounDemon.Level", 68) }, // Sethekk Halls
|
||
|
|
+ {557, sConfigMgr->GetIntDefault("Solocraft.AuchindounEthereal.Level", 68) }, // Mana-Tombs
|
||
|
|
+ {558, sConfigMgr->GetIntDefault("Solocraft.AuchindounDraenei.Level", 68) }, // Auchenai Crypts
|
||
|
|
+ {560, sConfigMgr->GetIntDefault("Solocraft.HillsbradPast.Level", 68) }, // Old Hillsbrad Foothills
|
||
|
|
+ {564, sConfigMgr->GetIntDefault("Solocraft.BlackTemple.Level", 70) },
|
||
|
|
+ {565, sConfigMgr->GetIntDefault("Solocraft.GruulsLair.Level", 70) },
|
||
|
|
+ {568, sConfigMgr->GetIntDefault("Solocraft.ZulAman.Level", 68) },
|
||
|
|
+ {580, sConfigMgr->GetIntDefault("Solocraft.SunwellPlateau.Level", 70) },
|
||
|
|
+ {585, sConfigMgr->GetIntDefault("Solocraft.Sunwell5ManFix.Level", 68) }, // Magister's Terrace
|
||
|
|
+ // WOTLK Instances
|
||
|
|
+ {533, sConfigMgr->GetIntDefault("Solocraft.StratholmeRaid.Level", 78) }, // Naxxramas
|
||
|
|
+ {574, sConfigMgr->GetIntDefault("Solocraft.Valgarde70.Level", 78) }, // Utgarde Keep
|
||
|
|
+ {575, sConfigMgr->GetIntDefault("Solocraft.UtgardePinnacle.Level", 78) },
|
||
|
|
+ {576, sConfigMgr->GetIntDefault("Solocraft.Nexus70.Level", 78) }, // The Nexus
|
||
|
|
+ {578, sConfigMgr->GetIntDefault("Solocraft.Nexus80.Level", 78) }, // The Occulus
|
||
|
|
+ {595, sConfigMgr->GetIntDefault("Solocraft.StratholmeCOT.Level", 78) }, // The Culling of Stratholme
|
||
|
|
+ {599, sConfigMgr->GetIntDefault("Solocraft.Ulduar70.Level", 78) }, // Halls of Stone
|
||
|
|
+ {600, sConfigMgr->GetIntDefault("Solocraft.DrakTheronKeep.Level", 78) }, // Drak'Tharon Keep
|
||
|
|
+ {601, sConfigMgr->GetIntDefault("Solocraft.Azjol_Uppercity.Level", 78) }, // Azjol-Nerub
|
||
|
|
+ {602, sConfigMgr->GetIntDefault("Solocraft.Ulduar80.Level", 78) }, // Halls of Lighting
|
||
|
|
+ {603, sConfigMgr->GetIntDefault("Solocraft.UlduarRaid.Level", 80) }, // Ulduar
|
||
|
|
+ {604, sConfigMgr->GetIntDefault("Solocraft.GunDrak.Level", 78) },
|
||
|
|
+ {608, sConfigMgr->GetIntDefault("Solocraft.DalaranPrison.Level", 78) }, // Violet Hold
|
||
|
|
+ {615, sConfigMgr->GetIntDefault("Solocraft.ChamberOfAspectsBlack.Level", 80) }, // The Obsidian Sanctum
|
||
|
|
+ {616, sConfigMgr->GetIntDefault("Solocraft.NexusRaid.Level", 80) }, // The Eye of Eternity
|
||
|
|
+ {619, sConfigMgr->GetIntDefault("Solocraft.Azjol_LowerCity.Level", 78) }, // Ahn'kahet: The Old Kingdom
|
||
|
|
+ {631, sConfigMgr->GetIntDefault("Solocraft.IcecrownCitadel.Level", 80) }, // Icecrown Citadel
|
||
|
|
+ {632, sConfigMgr->GetIntDefault("Solocraft.IcecrownCitadel5Man.Level", 78) }, // The Forge of Souls
|
||
|
|
+ {649, sConfigMgr->GetIntDefault("Solocraft.ArgentTournamentRaid.Level", 80) }, // Trial of the Crusader
|
||
|
|
+ {650, sConfigMgr->GetIntDefault("Solocraft.ArgentTournamentDungeon.Level", 80) }, // Trial of the Champion
|
||
|
|
+ {658, sConfigMgr->GetIntDefault("Solocraft.QuarryOfTears.Level", 78) }, // Pit of Saron
|
||
|
|
+ {668, sConfigMgr->GetIntDefault("Solocraft.HallsOfReflection.Level", 78) }, // Halls of Reflection
|
||
|
|
+ {724, sConfigMgr->GetIntDefault("Solocraft.ChamberOfAspectsRed.Level", 80) }, // The Ruby Sanctum
|
||
|
|
+ };
|
||
|
|
+ // Dungeon Difficulty
|
||
|
|
+ // Catch alls
|
||
|
|
+ D5 = sConfigMgr->GetFloatDefault("Solocraft.Dungeon", 5.0);
|
||
|
|
+ D10 = sConfigMgr->GetFloatDefault("Solocraft.Heroic", 10.0);
|
||
|
|
+ D25 = sConfigMgr->GetFloatDefault("Solocraft.Raid25", 25.0);
|
||
|
|
+ D40 = sConfigMgr->GetFloatDefault("Solocraft.Raid40", 40.0);
|
||
|
|
+ diff_Multiplier =
|
||
|
|
+ {
|
||
|
|
+ // WOW Classic Instances
|
||
|
|
+ {33, sConfigMgr->GetFloatDefault("Solocraft.ShadowfangKeep", 5.0) },
|
||
|
|
+ {34, sConfigMgr->GetFloatDefault("Solocraft.Stockades", 5.0) },
|
||
|
|
+ {36, sConfigMgr->GetFloatDefault("Solocraft.Deadmines", 5.0) },
|
||
|
|
+ {43, sConfigMgr->GetFloatDefault("Solocraft.WailingCaverns", 5.0) },
|
||
|
|
+ {47, sConfigMgr->GetFloatDefault("Solocraft.RazorfenKraulInstance", 5.0) },
|
||
|
|
+ {48, sConfigMgr->GetFloatDefault("Solocraft.Blackfathom", 5.0) },
|
||
|
|
+ {70, sConfigMgr->GetFloatDefault("Solocraft.Uldaman", 5.0) },
|
||
|
|
+ {90, sConfigMgr->GetFloatDefault("Solocraft.GnomeragonInstance", 5.0) },
|
||
|
|
+ {109, sConfigMgr->GetFloatDefault("Solocraft.SunkenTemple", 5.0) },
|
||
|
|
+ {129, sConfigMgr->GetFloatDefault("Solocraft.RazorfenDowns", 5.0) },
|
||
|
|
+ {189, sConfigMgr->GetFloatDefault("Solocraft.MonasteryInstances", 5.0) }, // Scarlet
|
||
|
|
+ {209, sConfigMgr->GetFloatDefault("Solocraft.TanarisInstance", 5.0) }, // Zul'Farrak
|
||
|
|
+ {229, sConfigMgr->GetFloatDefault("Solocraft.BlackRockSpire", 10.0) },
|
||
|
|
+ {230, sConfigMgr->GetFloatDefault("Solocraft.BlackrockDepths", 5.0) },
|
||
|
|
+ {249, sConfigMgr->GetFloatDefault("Solocraft.OnyxiaLairInstance", 40.0) },
|
||
|
|
+ {289, sConfigMgr->GetFloatDefault("Solocraft.SchoolofNecromancy", 5.0) }, // Scholo
|
||
|
|
+ {309, sConfigMgr->GetFloatDefault("Solocraft.Zul'gurub", 20.0) },
|
||
|
|
+ {329, sConfigMgr->GetFloatDefault("Solocraft.Stratholme", 5.0) },
|
||
|
|
+ {349, sConfigMgr->GetFloatDefault("Solocraft.Mauradon", 5.0) },
|
||
|
|
+ {389, sConfigMgr->GetFloatDefault("Solocraft.OrgrimmarInstance", 5.0) }, // Ragefire
|
||
|
|
+ {409, sConfigMgr->GetFloatDefault("Solocraft.MoltenCore", 40.0) },
|
||
|
|
+ {429, sConfigMgr->GetFloatDefault("Solocraft.DireMaul", 5.0) },
|
||
|
|
+ {469, sConfigMgr->GetFloatDefault("Solocraft.BlackwingLair", 40.0) },
|
||
|
|
+ {509, sConfigMgr->GetFloatDefault("Solocraft.AhnQiraj", 20.0) },
|
||
|
|
+ {531, sConfigMgr->GetFloatDefault("Solocraft.AhnQirajTemple", 40.0) },
|
||
|
|
+ // BC Instances
|
||
|
|
+ {269, sConfigMgr->GetFloatDefault("Solocraft.CavernsOfTime", 5.0) }, // Black Morass
|
||
|
|
+ {532, sConfigMgr->GetFloatDefault("Solocraft.Karazahn", 10.0) },
|
||
|
|
+ {534, sConfigMgr->GetFloatDefault("Solocraft.HyjalPast", 25.0) }, // Mount Hyjal
|
||
|
|
+ {540, sConfigMgr->GetFloatDefault("Solocraft.HellfireMilitary", 5.0) }, // The Shattered Halls
|
||
|
|
+ {542, sConfigMgr->GetFloatDefault("Solocraft.HellfireDemon", 5.0) }, // The Blood Furnace
|
||
|
|
+ {543, sConfigMgr->GetFloatDefault("Solocraft.HellfireRampart", 5.0) },
|
||
|
|
+ {544, sConfigMgr->GetFloatDefault("Solocraft.HellfireRaid", 25.0) }, // Magtheridon's Lair
|
||
|
|
+ {545, sConfigMgr->GetFloatDefault("Solocraft.CoilfangPumping", 5.0) }, // The Steamvault
|
||
|
|
+ {546, sConfigMgr->GetFloatDefault("Solocraft.CoilfangMarsh", 5.0) }, // The Underbog
|
||
|
|
+ {547, sConfigMgr->GetFloatDefault("Solocraft.CoilfangDraenei", 5.0) }, // The Slavepens
|
||
|
|
+ {548, sConfigMgr->GetFloatDefault("Solocraft.CoilfangRaid", 25.0) }, // Serpentshrine Cavern
|
||
|
|
+ {550, sConfigMgr->GetFloatDefault("Solocraft.TempestKeepRaid", 25.0) }, // The Eye
|
||
|
|
+ {552, sConfigMgr->GetFloatDefault("Solocraft.TempestKeepArcane", 5.0) }, // The Arcatraz
|
||
|
|
+ {553, sConfigMgr->GetFloatDefault("Solocraft.TempestKeepAtrium", 5.0) }, // The Botanica
|
||
|
|
+ {554, sConfigMgr->GetFloatDefault("Solocraft.TempestKeepFactory", 5.0) }, // The Mechanar
|
||
|
|
+ {555, sConfigMgr->GetFloatDefault("Solocraft.AuchindounShadow", 5.0) }, // Shadow Labyrinth
|
||
|
|
+ {556, sConfigMgr->GetFloatDefault("Solocraft.AuchindounDemon", 5.0) }, // Sethekk Halls
|
||
|
|
+ {557, sConfigMgr->GetFloatDefault("Solocraft.AuchindounEthereal", 5.0) }, // Mana-Tombs
|
||
|
|
+ {558, sConfigMgr->GetFloatDefault("Solocraft.AuchindounDraenei", 5.0) }, // Auchenai Crypts
|
||
|
|
+ {560, sConfigMgr->GetFloatDefault("Solocraft.HillsbradPast", 5.0) }, // Old Hillsbrad Foothills
|
||
|
|
+ {564, sConfigMgr->GetFloatDefault("Solocraft.BlackTemple", 25.0) },
|
||
|
|
+ {565, sConfigMgr->GetFloatDefault("Solocraft.GruulsLair", 25.0) },
|
||
|
|
+ {568, sConfigMgr->GetFloatDefault("Solocraft.ZulAman", 5.0) },
|
||
|
|
+ {580, sConfigMgr->GetFloatDefault("Solocraft.SunwellPlateau", 25.0) },
|
||
|
|
+ {585, sConfigMgr->GetFloatDefault("Solocraft.Sunwell5ManFix", 5.0) }, // Magister's Terrace
|
||
|
|
+ // WOTLK Instances
|
||
|
|
+ {533, sConfigMgr->GetFloatDefault("Solocraft.StratholmeRaid", 10.0) }, // Nax 10
|
||
|
|
+ {574, sConfigMgr->GetFloatDefault("Solocraft.Valgarde70", 5.0) }, // Utgarde Keep
|
||
|
|
+ {575, sConfigMgr->GetFloatDefault("Solocraft.UtgardePinnacle", 5.0) },
|
||
|
|
+ {576, sConfigMgr->GetFloatDefault("Solocraft.Nexus70", 5.0) }, // The Nexus
|
||
|
|
+ {578, sConfigMgr->GetFloatDefault("Solocraft.Nexus80", 5.0) }, // The Occulus
|
||
|
|
+ {595, sConfigMgr->GetFloatDefault("Solocraft.StratholmeCOT", 5.0) }, // The Culling of Stratholme
|
||
|
|
+ {599, sConfigMgr->GetFloatDefault("Solocraft.Ulduar70", 5.0) }, // Halls of Stone
|
||
|
|
+ {600, sConfigMgr->GetFloatDefault("Solocraft.DrakTheronKeep", 5.0) }, // Drak'Tharon Keep
|
||
|
|
+ {601, sConfigMgr->GetFloatDefault("Solocraft.Azjol_Uppercity", 5.0) }, // Azjol-Nerub
|
||
|
|
+ {602, sConfigMgr->GetFloatDefault("Solocraft.Ulduar80", 5.0) }, // Halls of Lighting
|
||
|
|
+ {603, sConfigMgr->GetFloatDefault("Solocraft.UlduarRaid", 10.0) }, // Ulduar 10
|
||
|
|
+ {604, sConfigMgr->GetFloatDefault("Solocraft.GunDrak", 5.0) },
|
||
|
|
+ {608, sConfigMgr->GetFloatDefault("Solocraft.DalaranPrison", 5.0) }, // Violet Hold
|
||
|
|
+ {615, sConfigMgr->GetFloatDefault("Solocraft.ChamberOfAspectsBlack", 10.0) }, // The Obsidian Sanctum 10
|
||
|
|
+ {616, sConfigMgr->GetFloatDefault("Solocraft.NexusRaid", 10.0) }, // The Eye of Eternity 10
|
||
|
|
+ {619, sConfigMgr->GetFloatDefault("Solocraft.Azjol_LowerCity", 5.0) }, // Ahn'kahet: The Old Kingdom
|
||
|
|
+ {631, sConfigMgr->GetFloatDefault("Solocraft.IcecrownCitadel", 10.0) }, // Icecrown Citadel 10
|
||
|
|
+ {632, sConfigMgr->GetFloatDefault("Solocraft.IcecrownCitadel5Man", 5.0) }, // The Forge of Souls
|
||
|
|
+ {649, sConfigMgr->GetFloatDefault("Solocraft.ArgentTournamentRaid", 10.0) }, // Trial of the Crusader 10
|
||
|
|
+ {650, sConfigMgr->GetFloatDefault("Solocraft.ArgentTournamentDungeon", 5.0) }, // Trial of the Champion
|
||
|
|
+ {658, sConfigMgr->GetFloatDefault("Solocraft.QuarryOfTears", 5.0) }, // Pit of Saron
|
||
|
|
+ {668, sConfigMgr->GetFloatDefault("Solocraft.HallsOfReflection", 5.0) }, // Halls of Reflection
|
||
|
|
+ {724, sConfigMgr->GetFloatDefault("Solocraft.ChamberOfAspectsRed", 10.0) }, // The Ruby Sanctum 10
|
||
|
|
+ };
|
||
|
|
+ // Heroics
|
||
|
|
+ diff_Multiplier_Heroics =
|
||
|
|
+ {
|
||
|
|
+ // BC Instances Heroics
|
||
|
|
+ {269, sConfigMgr->GetFloatDefault("Solocraft.CavernsOfTimeH", 5.0) }, // Black Morass H
|
||
|
|
+ {540, sConfigMgr->GetFloatDefault("Solocraft.HellfireMilitaryH", 5.0) }, // The Shattered Halls H
|
||
|
|
+ {542, sConfigMgr->GetFloatDefault("Solocraft.HellfireDemonH", 5.0) }, // The Blood Furnace H
|
||
|
|
+ {543, sConfigMgr->GetFloatDefault("Solocraft.HellfireRampartH", 5.0) }, // Heroic
|
||
|
|
+ {545, sConfigMgr->GetFloatDefault("Solocraft.CoilfangPumpingH", 5.0) }, // The Steamvault
|
||
|
|
+ {546, sConfigMgr->GetFloatDefault("Solocraft.CoilfangMarshH", 5.0) }, // The Underbog
|
||
|
|
+ {547, sConfigMgr->GetFloatDefault("Solocraft.CoilfangDraeneiH", 5.0) }, // The Slavepens H
|
||
|
|
+ {552, sConfigMgr->GetFloatDefault("Solocraft.TempestKeepArcaneH", 5.0) }, // The Arcatraz H
|
||
|
|
+ {553, sConfigMgr->GetFloatDefault("Solocraft.TempestKeepAtriumH", 5.0) }, // The Botanica H
|
||
|
|
+ {554, sConfigMgr->GetFloatDefault("Solocraft.TempestKeepFactoryH", 5.0) }, // The Mechanar H
|
||
|
|
+ {555, sConfigMgr->GetFloatDefault("Solocraft.AuchindounShadowH", 5.0) }, // Shadow Labyrinth H
|
||
|
|
+ {556, sConfigMgr->GetFloatDefault("Solocraft.AuchindounDemonH", 5.0) }, // Sethekk Halls H
|
||
|
|
+ {557, sConfigMgr->GetFloatDefault("Solocraft.AuchindounEtherealH", 5.0) }, // Mana-Tombs H
|
||
|
|
+ {558, sConfigMgr->GetFloatDefault("Solocraft.AuchindounDraeneiH", 5.0) }, // Auchenai Crypts H
|
||
|
|
+ {560, sConfigMgr->GetFloatDefault("Solocraft.HillsbradPastH", 5.0) }, // Old Hillsbrad Foothills H
|
||
|
|
+ {568, sConfigMgr->GetFloatDefault("Solocraft.ZulAmanH", 5.0) }, // Zul'Aman H
|
||
|
|
+ {585, sConfigMgr->GetFloatDefault("Solocraft.Sunwell5ManFixH", 5.0) }, // Magister's Terrace H
|
||
|
|
+ // WOTLK Instances Heroics
|
||
|
|
+ {533, sConfigMgr->GetFloatDefault("Solocraft.StratholmeRaidH", 25.0) }, // Naxxramas 25
|
||
|
|
+ {574, sConfigMgr->GetFloatDefault("Solocraft.Valgarde70H", 5.0) }, // Utgarde Keep H
|
||
|
|
+ {575, sConfigMgr->GetFloatDefault("Solocraft.UtgardePinnacleH", 5.0) }, // Utgarde Pinnacle H
|
||
|
|
+ {576, sConfigMgr->GetFloatDefault("Solocraft.Nexus70H", 5.0) }, // The Nexus H
|
||
|
|
+ {578, sConfigMgr->GetFloatDefault("Solocraft.Nexus80H", 5.0) }, // The Occulus H
|
||
|
|
+ {595, sConfigMgr->GetFloatDefault("Solocraft.StratholmeCOTH", 5.0) }, // The Culling of Stratholme H
|
||
|
|
+ {599, sConfigMgr->GetFloatDefault("Solocraft.Ulduar70H", 5.0) }, // Halls of Stone H
|
||
|
|
+ {600, sConfigMgr->GetFloatDefault("Solocraft.DrakTheronKeepH", 5.0) }, // Drak'Tharon Keep H
|
||
|
|
+ {601, sConfigMgr->GetFloatDefault("Solocraft.Azjol_UppercityH", 5.0) }, // Azjol-Nerub H
|
||
|
|
+ {602, sConfigMgr->GetFloatDefault("Solocraft.Ulduar80H", 5.0) }, // Halls of Lighting H
|
||
|
|
+ {603, sConfigMgr->GetFloatDefault("Solocraft.UlduarRaidH", 25.0) }, // Ulduar 25
|
||
|
|
+ {604, sConfigMgr->GetFloatDefault("Solocraft.GunDrakH", 5.0) }, // Gundrak H
|
||
|
|
+ {608, sConfigMgr->GetFloatDefault("Solocraft.DalaranPrisonH", 5.0) }, // Violet Hold H
|
||
|
|
+ {615, sConfigMgr->GetFloatDefault("Solocraft.ChamberOfAspectsBlackH", 25.0) }, // The Obsidian Sanctum 25
|
||
|
|
+ {616, sConfigMgr->GetFloatDefault("Solocraft.NexusRaidH", 25.0) }, // The Eye of Eternity 25
|
||
|
|
+ {619, sConfigMgr->GetFloatDefault("Solocraft.Azjol_LowerCityH", 5.0) }, // Ahn'kahet: The Old Kingdom H
|
||
|
|
+ {631, sConfigMgr->GetFloatDefault("Solocraft.IcecrownCitadelH", 25.0) }, // Icecrown Citadel 25
|
||
|
|
+ {632, sConfigMgr->GetFloatDefault("Solocraft.IcecrownCitadel5ManH", 5.0) }, // The Forge of Souls
|
||
|
|
+ {649, sConfigMgr->GetFloatDefault("Solocraft.ArgentTournamentRaidH", 25.0) }, // Trial of the Crusader 25
|
||
|
|
+ {650, sConfigMgr->GetFloatDefault("Solocraft.ArgentTournamentDungeonH", 5.0) }, // Trial of the Champion H
|
||
|
|
+ {658, sConfigMgr->GetFloatDefault("Solocraft.QuarryOfTearsH", 5.0) }, // Pit of Saron H
|
||
|
|
+ {668, sConfigMgr->GetFloatDefault("Solocraft.HallsOfReflectionH", 5.0) }, // Halls of Reflection H
|
||
|
|
+ {724, sConfigMgr->GetFloatDefault("Solocraft.ChamberOfAspectsRedH", 25.0) }, // The Ruby Sanctum 25
|
||
|
|
+ };
|
||
|
|
+ //Unique Raids beyond the heroic and normal versions of themselves
|
||
|
|
+ D649H10 = sConfigMgr->GetFloatDefault("Solocraft.ArgentTournamentRaidH10", 10.0); //Trial of the Crusader 10 Heroic
|
||
|
|
+ D649H25 = sConfigMgr->GetFloatDefault("Solocraft.ArgentTournamentRaidH25", 25.0); //Trial of the Crusader 25 Heroic
|
||
|
|
+ }
|
||
|
|
+};
|
||
|
|
+class SolocraftAnnounce : public PlayerScript
|
||
|
|
+{
|
||
|
|
+public:
|
||
|
|
+ SolocraftAnnounce() : PlayerScript("SolocraftAnnounce") {}
|
||
|
|
+ void OnLogin(Player* Player, bool /*firstLogin*/) override
|
||
|
|
+ {
|
||
|
|
+ // Announce Module
|
||
|
|
+ if (SoloCraftEnable)
|
||
|
|
+ {
|
||
|
|
+ if (SoloCraftAnnounceModule)
|
||
|
|
+ {
|
||
|
|
+ ChatHandler(Player->GetSession()).SendSysMessage("This server is running the |cff4CFF00SPP SoloCraft Trinitycore Custom |rmodule.");
|
||
|
|
+ }
|
||
|
|
+ }
|
||
|
|
+ }
|
||
|
|
+
|
||
|
|
+ void OnLogout(Player* player) override
|
||
|
|
+ {
|
||
|
|
+ //Remove database entry as the player has logged out
|
||
|
|
+ CharacterDatabase.PExecute("DELETE FROM custom_solocraft_character_stats WHERE GUID = %u", player->GetGUID());
|
||
|
|
+ }
|
||
|
|
+};
|
||
|
|
+class solocraft_player_instance_handler : public PlayerScript {
|
||
|
|
+public:
|
||
|
|
+ solocraft_player_instance_handler() : PlayerScript("solocraft_player_instance_handler") {}
|
||
|
|
+ void OnMapChanged(Player* player) override {
|
||
|
|
+ if (sConfigMgr->GetBoolDefault("Solocraft.Enable", true))
|
||
|
|
+ {
|
||
|
|
+ Map* map = player->GetMap();
|
||
|
|
+ float difficulty = CalculateDifficulty(map, player);
|
||
|
|
+ int dunLevel = CalculateDungeonLevel(map, player);
|
||
|
|
+ int numInGroup = GetNumInGroup(player);
|
||
|
|
+ ApplyBuffs(player, map, difficulty, dunLevel, numInGroup);
|
||
|
|
+ }
|
||
|
|
+ }
|
||
|
|
+
|
||
|
|
+private:
|
||
|
|
+ std::map<uint32, float> _unitDifficulty;
|
||
|
|
+ // Set the instance difficulty
|
||
|
|
+ int CalculateDifficulty(Map* map, Player* /*player*/)
|
||
|
|
+ {
|
||
|
|
+ //float difficulty = 0.0;//changed from 1.0
|
||
|
|
+ if (map)
|
||
|
|
+ {
|
||
|
|
+ //WOTLK 25 Man raids
|
||
|
|
+ if (map->Is25ManRaid())
|
||
|
|
+ {
|
||
|
|
+ if (map->IsHeroic() && map->GetId() == 649) {
|
||
|
|
+ return D649H25; //Heroic Grand Trial of the Crusader
|
||
|
|
+ }
|
||
|
|
+ else if (diff_Multiplier_Heroics.find(map->GetId()) == diff_Multiplier_Heroics.end()) {
|
||
|
|
+ return D25; //map not found returns the catch all value
|
||
|
|
+ }
|
||
|
|
+ else
|
||
|
|
+ return diff_Multiplier_Heroics[map->GetId()]; //return the specific dungeon's level
|
||
|
|
+ }
|
||
|
|
+ if (map->IsHeroic())
|
||
|
|
+ {
|
||
|
|
+ //WOTLK 10 Man Heroic
|
||
|
|
+ if (map->GetId() == 649) {
|
||
|
|
+ return D649H10;
|
||
|
|
+ }
|
||
|
|
+ else if (diff_Multiplier_Heroics.find(map->GetId()) == diff_Multiplier_Heroics.end()) {
|
||
|
|
+ return D10; //map not found returns the catch all value
|
||
|
|
+ }
|
||
|
|
+ else
|
||
|
|
+ return diff_Multiplier_Heroics[map->GetId()]; //return the specific dungeon's level
|
||
|
|
+ }
|
||
|
|
+ if (diff_Multiplier.find(map->GetId()) == diff_Multiplier.end()) {
|
||
|
|
+ //Catch Alls ----------------------5 Dungeons and 40 Raids
|
||
|
|
+ if (map->IsDungeon()) {
|
||
|
|
+ return D5;
|
||
|
|
+ }
|
||
|
|
+ else if (map->IsRaid()) {
|
||
|
|
+ return D40;
|
||
|
|
+ }
|
||
|
|
+ }
|
||
|
|
+ else
|
||
|
|
+ return diff_Multiplier[map->GetId()]; //return the specific dungeon's level
|
||
|
|
+ }
|
||
|
|
+ return 0; //return 0
|
||
|
|
+ }
|
||
|
|
+ // Set the Dungeon Level
|
||
|
|
+ int CalculateDungeonLevel(Map* map, Player* /*player*/) {
|
||
|
|
+ if (dungeons.find(map->GetId()) == dungeons.end())
|
||
|
|
+ {
|
||
|
|
+ return SolocraftDungeonLevel; //map not found returns the catch all value
|
||
|
|
+ }
|
||
|
|
+ else
|
||
|
|
+ return dungeons[map->GetId()]; //return the specific dungeon's level
|
||
|
|
+ }
|
||
|
|
+ // Get the group's size
|
||
|
|
+ int GetNumInGroup(Player* player) {
|
||
|
|
+ int numInGroup = 1;
|
||
|
|
+ Group* group = player->GetGroup();
|
||
|
|
+ if (group) {
|
||
|
|
+ Group::MemberSlotList const& groupMembers = group->GetMemberSlots();
|
||
|
|
+ numInGroup = groupMembers.size();
|
||
|
|
+ }
|
||
|
|
+ return numInGroup;
|
||
|
|
+ }
|
||
|
|
+ // Apply the player buffs
|
||
|
|
+ void ApplyBuffs(Player* player, Map* map, float difficulty, int dunLevel, int numInGroup)
|
||
|
|
+ {
|
||
|
|
+ int SpellPowerBonus = 0;
|
||
|
|
+ //Check whether to buff the player or check to debuff back to normal
|
||
|
|
+ if (difficulty != 0)
|
||
|
|
+ {
|
||
|
|
+ std::ostringstream ss;
|
||
|
|
+ if (player->GetLevel() <= dunLevel + SolocraftLevelDiff) //If a player is too high level for dungeon don't buff but if in a group will count towards the group offset balancing.
|
||
|
|
+ {
|
||
|
|
+ //Get Current members total difficulty offset and if it exceeds the difficulty offset of the dungeon then debuff new group members coming in until all members leave and re-enter. This happens when a player already inside dungeon invite others to the group but the player already has the full difficulty offset.
|
||
|
|
+ float GroupDifficulty = GetGroupDifficulty(player);
|
||
|
|
+ //Check to either debuff or buff player entering dungeon. Debuff must be enabled in Config
|
||
|
|
+ if (GroupDifficulty >= difficulty && SoloCraftDebuffEnable == 1)
|
||
|
|
+ {
|
||
|
|
+ //Current dungeon offset exceeded - Debuff player
|
||
|
|
+ difficulty = (-abs(difficulty)) + (difficulty / numInGroup);
|
||
|
|
+ difficulty = roundf(difficulty * 100) / 100; //Float variables suck
|
||
|
|
+
|
||
|
|
+ //sLog->outError("%u: would have this difficulty: %f", player->GetGUID(), tempDiff);
|
||
|
|
+ }
|
||
|
|
+ else
|
||
|
|
+ {
|
||
|
|
+ //Current Dungeon offset not exceeded - Buff player
|
||
|
|
+ //Group difficulty adjustment
|
||
|
|
+ difficulty = difficulty / numInGroup;
|
||
|
|
+ difficulty = roundf(difficulty * 100) / 100; //Float variables suck - two decimal rounding
|
||
|
|
+ }
|
||
|
|
+
|
||
|
|
+ //Check Database for a current dungeon entry
|
||
|
|
+ QueryResult result = CharacterDatabase.PQuery("SELECT `GUID`, `Difficulty`, `GroupSize`, `SpellPower`, `Stats` FROM `custom_solocraft_character_stats` WHERE GUID = %u", player->GetGUID());
|
||
|
|
+
|
||
|
|
+ //Modify Player Stats
|
||
|
|
+ for (int32 i = STAT_STRENGTH; i < MAX_STATS; ++i) //STATS defined/enum in SharedDefines.h
|
||
|
|
+ {
|
||
|
|
+ if (result)
|
||
|
|
+ {
|
||
|
|
+ player->HandleStatFlatModifier(UnitMods(UNIT_MOD_STAT_START + i), TOTAL_VALUE, (*result)[1].GetFloat() * (*result)[4].GetFloat(), false);
|
||
|
|
+ }
|
||
|
|
+ // Buff the player
|
||
|
|
+ player->HandleStatFlatModifier(UnitMods(UNIT_MOD_STAT_START + i), TOTAL_VALUE, difficulty * SoloCraftStatsMult, true); //Unitmods enum UNIT_MOD_STAT_START defined in Unit.h line 391
|
||
|
|
+ }
|
||
|
|
+ // Set player health
|
||
|
|
+ player->SetFullHealth();//defined in Unit.h line 1524
|
||
|
|
+ //Spellcaster Stat modify
|
||
|
|
+ if (player->GetPowerType() == POWER_MANA)
|
||
|
|
+ {
|
||
|
|
+ // Buff the player's mana
|
||
|
|
+ player->SetPower(POWER_MANA, player->GetMaxPower(POWER_MANA));
|
||
|
|
+
|
||
|
|
+ //Check for Dungeon to Dungeon Transfer and remove old Spellpower buff
|
||
|
|
+ if (result)
|
||
|
|
+ {
|
||
|
|
+ // remove spellpower bonus
|
||
|
|
+ player->ApplySpellPowerBonus((*result)[3].GetUInt32() * (*result)[4].GetFloat(), false);
|
||
|
|
+ }
|
||
|
|
+
|
||
|
|
+ //Buff Spellpower
|
||
|
|
+ if (difficulty > 0) //Debuffed characters do not get spellpower
|
||
|
|
+ {
|
||
|
|
+ SpellPowerBonus = static_cast<int>((player->GetLevel() * SoloCraftSpellMult) * difficulty);//Yes, I pulled this calc out of my butt.
|
||
|
|
+ player->ApplySpellPowerBonus(SpellPowerBonus, true);
|
||
|
|
+ //sLog->outError("%u: spellpower Bonus applied: %i", player->GetGUID(), SpellPowerBonus);
|
||
|
|
+ }
|
||
|
|
+ }
|
||
|
|
+ //Announcements
|
||
|
|
+ if (difficulty > 0)
|
||
|
|
+ {
|
||
|
|
+ // Announce to player - Buff
|
||
|
|
+ ss << "|cffFF0000[SoloCraft] |cffFF8000" << player->GetName() << " entered %s - Difficulty Offset: %0.2f. Spellpower Bonus: %i";
|
||
|
|
+ ChatHandler(player->GetSession()).PSendSysMessage(ss.str().c_str(), map->GetMapName(), difficulty, SpellPowerBonus);
|
||
|
|
+ }
|
||
|
|
+ else
|
||
|
|
+ {
|
||
|
|
+ // Announce to player - Debuff
|
||
|
|
+ ss << "|cffFF0000[SoloCraft] |cffFF8000" << player->GetName() << " entered %s - |cffFF0000BE ADVISED - You have been debuffed by offset: %0.2f. |cffFF8000 A group member already inside has the dungeon's full buff offset. No Spellpower buff will be applied to spell casters. ALL group members must exit the dungeon and re-enter to receive a balanced offset.";
|
||
|
|
+ ChatHandler(player->GetSession()).PSendSysMessage(ss.str().c_str(), map->GetMapName(), difficulty);
|
||
|
|
+ }
|
||
|
|
+ // Save Player Dungeon Offsets to Database
|
||
|
|
+ CharacterDatabase.PExecute("REPLACE INTO custom_solocraft_character_stats (GUID, Difficulty, GroupSize, SpellPower, Stats) VALUES (%u, %f, %u, %i, %f)", player->GetGUID(), difficulty, numInGroup, SpellPowerBonus, SoloCraftStatsMult);
|
||
|
|
+ }
|
||
|
|
+ else
|
||
|
|
+ {
|
||
|
|
+ // Announce to player - Over Max Level Threshold
|
||
|
|
+ ss << "|cffFF0000[SoloCraft] |cffFF8000" << player->GetName() << " entered %s - |cffFF0000You have not been buffed. |cffFF8000 Your level is higher than the max level (%i) threshold for this dungeon.";
|
||
|
|
+ ChatHandler(player->GetSession()).PSendSysMessage(ss.str().c_str(), map->GetMapName(), dunLevel + SolocraftLevelDiff);
|
||
|
|
+ ClearBuffs(player, map); //Check to revert player back to normal
|
||
|
|
+ }
|
||
|
|
+
|
||
|
|
+ }
|
||
|
|
+ else
|
||
|
|
+ {
|
||
|
|
+ ClearBuffs(player, map); //Check to revert player back to normal - Moving this here fixed logout and login while in instance buff and debuff issues
|
||
|
|
+ }
|
||
|
|
+ }
|
||
|
|
+
|
||
|
|
+ // Get the current group members GUIDS and return the total sum of the difficulty offset by all group members currently in the dungeon
|
||
|
|
+ float GetGroupDifficulty(Player* player) {
|
||
|
|
+ float GroupDifficulty = 0.0;
|
||
|
|
+ Group* group = player->GetGroup();
|
||
|
|
+ if (group)
|
||
|
|
+ {
|
||
|
|
+ Group::MemberSlotList const& groupMembers = group->GetMemberSlots();
|
||
|
|
+ for (Group::member_citerator itr = groupMembers.begin(); itr != groupMembers.end(); ++itr)
|
||
|
|
+ {
|
||
|
|
+ //Exclude player from the tally because the player is the one entering the dungeon
|
||
|
|
+ if (itr->guid != player->GetGUID())
|
||
|
|
+ {
|
||
|
|
+ //Database query to find difficulty for each group member that is currently in an instance
|
||
|
|
+ QueryResult result = CharacterDatabase.PQuery("SELECT `GUID`, `Difficulty`, `GroupSize` FROM `custom_solocraft_character_stats` WHERE GUID = %u", itr->guid);
|
||
|
|
+ if (result)
|
||
|
|
+ {
|
||
|
|
+ //Test for debuffs already give to other members - They cannot be used to determine the total offset because negative numbers will skew the total difficulty offset
|
||
|
|
+ if ((*result)[1].GetFloat() > 0)
|
||
|
|
+ {
|
||
|
|
+ GroupDifficulty = GroupDifficulty + (*result)[1].GetFloat();
|
||
|
|
+ //sLog->outError("%u : Group member GUID in instance: %u", player->GetGUID(), itr->guid);
|
||
|
|
+ }
|
||
|
|
+ }
|
||
|
|
+ }
|
||
|
|
+ }
|
||
|
|
+ }
|
||
|
|
+ return GroupDifficulty;
|
||
|
|
+ }
|
||
|
|
+
|
||
|
|
+ void ClearBuffs(Player* player, Map* map)
|
||
|
|
+ {
|
||
|
|
+ //Database query to get offset from the last instance player exited
|
||
|
|
+ QueryResult result = CharacterDatabase.PQuery("SELECT `GUID`, `Difficulty`, `GroupSize`, `SpellPower`, `Stats` FROM `custom_solocraft_character_stats` WHERE GUID = %u", player->GetGUID());
|
||
|
|
+ if (result)
|
||
|
|
+ {
|
||
|
|
+ float difficulty = (*result)[1].GetFloat();
|
||
|
|
+ int SpellPowerBonus = (*result)[3].GetUInt32();
|
||
|
|
+ float StatsMultPct = (*result)[4].GetFloat();
|
||
|
|
+ //sLog->outError("Map difficulty: %f", difficulty);
|
||
|
|
+ // Inform the player
|
||
|
|
+ std::ostringstream ss;
|
||
|
|
+ ss << "|cffFF0000[SoloCraft] |cffFF8000" << player->GetName() << " exited to %s - Reverting Difficulty Offset: %0.2f. Spellpower Bonus Removed: %i";
|
||
|
|
+ ChatHandler(player->GetSession()).PSendSysMessage(ss.str().c_str(), map->GetMapName(), difficulty, SpellPowerBonus);
|
||
|
|
+ // Clear the buffs
|
||
|
|
+ for (int32 i = STAT_STRENGTH; i < MAX_STATS; ++i)
|
||
|
|
+ {
|
||
|
|
+ player->HandleStatFlatModifier(UnitMods(UNIT_MOD_STAT_START + i), TOTAL_VALUE, difficulty * StatsMultPct, false);
|
||
|
|
+ }
|
||
|
|
+ if (player->GetPowerType() == POWER_MANA && difficulty > 0)
|
||
|
|
+ {
|
||
|
|
+ // remove spellpower bonus
|
||
|
|
+ player->ApplySpellPowerBonus(SpellPowerBonus, false);
|
||
|
|
+ }
|
||
|
|
+ //Remove database entry as the player is no longer in an instance
|
||
|
|
+ CharacterDatabase.PExecute("DELETE FROM custom_solocraft_character_stats WHERE GUID = %u", player->GetGUID());
|
||
|
|
+ }
|
||
|
|
+ }
|
||
|
|
+};
|
||
|
|
+
|
||
|
|
+void AddSolocraftScripts()
|
||
|
|
+{
|
||
|
|
+ new SolocraftConfig();
|
||
|
|
+ new SolocraftAnnounce();
|
||
|
|
+ new solocraft_player_instance_handler();
|
||
|
|
+}
|
||
|
|
diff --git a/src/server/scripts/Custom/custom_script_loader.cpp b/src/server/scripts/Custom/custom_script_loader.cpp
|
||
|
|
index 9e5e9ba2bfd..b6078cdb669 100644
|
||
|
|
--- a/src/server/scripts/Custom/custom_script_loader.cpp
|
||
|
|
+++ b/src/server/scripts/Custom/custom_script_loader.cpp
|
||
|
|
@@ -19,6 +19,9 @@
|
||
|
|
|
||
|
|
// The name of this function should match:
|
||
|
|
// void Add${NameOfDirectory}Scripts()
|
||
|
|
+void AddSolocraftScripts();
|
||
|
|
+
|
||
|
|
void AddCustomScripts()
|
||
|
|
{
|
||
|
|
+ AddSolocraftScripts();
|
||
|
|
}
|
||
|
|
diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist
|
||
|
|
index f475d0248e8..3792f28d9cd 100644
|
||
|
|
--- a/src/server/worldserver/worldserver.conf.dist
|
||
|
|
+++ b/src/server/worldserver/worldserver.conf.dist
|
||
|
|
@@ -4125,3 +4125,357 @@ Metric.OverallStatusInterval = 1
|
||
|
|
|
||
|
|
#
|
||
|
|
###################################################################################################
|
||
|
|
+
|
||
|
|
+###################################################################################################
|
||
|
|
+# SOLOCRAFT #
|
||
|
|
+###############
|
||
|
|
+# Enable the module? (1: true | 0: false)
|
||
|
|
+Solocraft.Enable = 1
|
||
|
|
+# Announce the module when the player logs in?
|
||
|
|
+Solocraft.Announce = 1
|
||
|
|
+###################################################################################################
|
||
|
|
+# Balancing - Groups (Overloading), Spellpower, and Stats
|
||
|
|
+###################################################################################################
|
||
|
|
+# Enable Debuff of new party members who enter the dungeon to avoid overloading the dungeon?
|
||
|
|
+# Overloading is when a group member already in the dungeon has the full offset/buff of the
|
||
|
|
+# dungeon applied then they invite new group members who enter the dungeon and also receive an
|
||
|
|
+# offset which creates a huge imbalance.
|
||
|
|
+# The debuff will make the new members weak until all members leave the instance/dungeon
|
||
|
|
+# instance/dungeon and re-enter which will then split the offset among all the group members.
|
||
|
|
+# Default: 1 (on)
|
||
|
|
+# 0 (off)
|
||
|
|
+SoloCraft.Debuff.Enable = 1
|
||
|
|
+# Spellpower Bonus Multiplier
|
||
|
|
+# Spellcasters spellpower bonus multiplier to offset no spellpower received from stats
|
||
|
|
+# Formula: (player->level * multiplier) * difficulty
|
||
|
|
+# Example Level 24 Mage with default modifier and a dungeon difficulty of 5 will receive a base
|
||
|
|
+# Spellpower increase of 300.
|
||
|
|
+# Default: 2.5
|
||
|
|
+# 0.0 (Disable)
|
||
|
|
+SoloCraft.Spellpower.Mult = 2.5
|
||
|
|
+# Stats Percentage Bonus Multiplier
|
||
|
|
+# Forumla: player->Stats * (difficulty * multiplier)
|
||
|
|
+# Default: 100.0
|
||
|
|
+# 0.0 (Disable)
|
||
|
|
+SoloCraft.Stats.Mult = 100.0
|
||
|
|
+#
|
||
|
|
+################################################################################################
|
||
|
|
+#Catch all Bucket - Difficulty Offset Defaults
|
||
|
|
+################################################################################################
|
||
|
|
+# Difficulty Multipliers
|
||
|
|
+# Defaults: 5, 10, 25, 40
|
||
|
|
+Solocraft.Dungeon = 5.0
|
||
|
|
+Solocraft.Heroic = 10.0
|
||
|
|
+Solocraft.Raid25 = 25.0
|
||
|
|
+Solocraft.Raid40 = 40.0
|
||
|
|
+################################################################################################
|
||
|
|
+#Classic Instances - Difficulty
|
||
|
|
+################################################################################################
|
||
|
|
+Solocraft.ShadowfangKeep = 5.0
|
||
|
|
+Solocraft.Stockades = 5.0
|
||
|
|
+Solocraft.Deadmines = 5.0
|
||
|
|
+Solocraft.WailingCaverns = 5.0
|
||
|
|
+Solocraft.RazorfenKraulInstance = 5.0
|
||
|
|
+Solocraft.Blackfathom = 5.0
|
||
|
|
+Solocraft.Uldaman = 5.0
|
||
|
|
+Solocraft.GnomeragonInstance = 5.0
|
||
|
|
+Solocraft.SunkenTemple = 5.0
|
||
|
|
+Solocraft.RazorfenDowns = 5.0
|
||
|
|
+# Scarlet Monastery
|
||
|
|
+Solocraft.MonasteryInstances = 5.0
|
||
|
|
+# Zul'Farrak
|
||
|
|
+Solocraft.TanarisInstance = 5.0
|
||
|
|
+Solocraft.BlackRockSpire = 10.0
|
||
|
|
+Solocraft.BlackrockDepths = 5.0
|
||
|
|
+Solocraft.OnyxiaLairInstance = 40.0
|
||
|
|
+#Scholomance
|
||
|
|
+Solocraft.SchoolofNecromancy = 5.0
|
||
|
|
+Solocraft.Zul'gurub = 20.0
|
||
|
|
+Solocraft.Stratholme = 5.0
|
||
|
|
+Solocraft.Mauradon = 5.0
|
||
|
|
+# Ragefire Chasm
|
||
|
|
+Solocraft.OrgrimmarInstance = 5.0
|
||
|
|
+Solocraft.MoltenCore = 40.0
|
||
|
|
+Solocraft.DireMaul = 5.0
|
||
|
|
+Solocraft.BlackwingLair = 40.0
|
||
|
|
+# Ruins of Ahn'Qiraj
|
||
|
|
+Solocraft.AhnQiraj = 20.0
|
||
|
|
+Solocraft.AhnQirajTemple = 40.0
|
||
|
|
+################################################################################################
|
||
|
|
+#BC Instances - Difficulty
|
||
|
|
+################################################################################################
|
||
|
|
+# The Black Morass
|
||
|
|
+Solocraft.CavernsOfTime = 5.0
|
||
|
|
+Solocraft.CavernsOfTimeH = 5.0
|
||
|
|
+Solocraft.Karazahn = 10.0
|
||
|
|
+# The Battle for Mount Hyjal - Hyjal Summit
|
||
|
|
+Solocraft.HyjalPast = 25.0
|
||
|
|
+# The Shattered Halls
|
||
|
|
+Solocraft.HellfireMilitary = 5.0
|
||
|
|
+Solocraft.HellfireMilitaryH = 5.0
|
||
|
|
+# The Blood Furnace
|
||
|
|
+Solocraft.HellfireDemon = 5.0
|
||
|
|
+Solocraft.HellfireDemonH = 5.0
|
||
|
|
+Solocraft.HellfireRampart = 5.0
|
||
|
|
+Solocraft.HellfireRampartH = 5.0
|
||
|
|
+# Magtheridon's Lair
|
||
|
|
+Solocraft.HellfireRaid = 25.0
|
||
|
|
+# The Steamvault
|
||
|
|
+Solocraft.CoilfangPumping = 5.0
|
||
|
|
+Solocraft.CoilfangPumpingH = 5.0
|
||
|
|
+# The Underbog
|
||
|
|
+Solocraft.CoilfangMarsh = 5.0
|
||
|
|
+Solocraft.CoilfangMarshH = 5.0
|
||
|
|
+# The Slavepens
|
||
|
|
+Solocraft.CoilfangDraenei = 5.0
|
||
|
|
+Solocraft.CoilfangDraeneiH = 5.0
|
||
|
|
+# Serpentshrine Cavern
|
||
|
|
+Solocraft.CoilfangRaid = 25.0
|
||
|
|
+# The Eye
|
||
|
|
+Solocraft.TempestKeepRaid = 25.0
|
||
|
|
+# The Arcatraz
|
||
|
|
+Solocraft.TempestKeepArcane = 5.0
|
||
|
|
+Solocraft.TempestKeepArcaneH = 5.0
|
||
|
|
+# The Botanica
|
||
|
|
+Solocraft.TempestKeepAtrium = 5.0
|
||
|
|
+Solocraft.TempestKeepAtriumH = 5.0
|
||
|
|
+# The Mechanar
|
||
|
|
+Solocraft.TempestKeepFactory = 5.0
|
||
|
|
+Solocraft.TempestKeepFactoryH = 5.0
|
||
|
|
+# Shadow Labyrinth
|
||
|
|
+Solocraft.AuchindounShadow = 5.0
|
||
|
|
+Solocraft.AuchindounShadowH = 5.0
|
||
|
|
+# Sethekk Halls
|
||
|
|
+Solocraft.AuchindounDemon = 5.0
|
||
|
|
+Solocraft.AuchindounDemonH = 5.0
|
||
|
|
+# Mana-Tombs
|
||
|
|
+Solocraft.AuchindounEthereal = 5.0
|
||
|
|
+Solocraft.AuchindounEtherealH = 5.0
|
||
|
|
+# Auchenai Crypts
|
||
|
|
+Solocraft.AuchindounDraenei = 5.0
|
||
|
|
+Solocraft.AuchindounDraeneiH = 5.0
|
||
|
|
+# Old Hillsbrad Foothills
|
||
|
|
+Solocraft.HillsbradPast = 5.0
|
||
|
|
+Solocraft.HillsbradPastH = 5.0
|
||
|
|
+Solocraft.BlackTemple = 25.0
|
||
|
|
+Solocraft.GruulsLair = 25.0
|
||
|
|
+Solocraft.ZulAman = 5.0
|
||
|
|
+Solocraft.ZulAmanH = 5.0
|
||
|
|
+Solocraft.SunwellPlateau = 25.0
|
||
|
|
+# Magister's Terrace
|
||
|
|
+Solocraft.Sunwell5ManFix = 5.0
|
||
|
|
+Solocraft.Sunwell5ManFixH = 5.0
|
||
|
|
+################################################################################################
|
||
|
|
+#WOTLK Instances - Difficulty
|
||
|
|
+################################################################################################
|
||
|
|
+# Naxxramas
|
||
|
|
+Solocraft.StratholmeRaid = 10.0
|
||
|
|
+Solocraft.StratholmeRaidH = 25.0
|
||
|
|
+# Utgarde Keep
|
||
|
|
+Solocraft.Valgarde70 = 5.0
|
||
|
|
+Solocraft.Valgarde70H = 5.0
|
||
|
|
+Solocraft.UtgardePinnacle = 5.0
|
||
|
|
+Solocraft.UtgardePinnacleH = 5.0
|
||
|
|
+# The Nexus
|
||
|
|
+Solocraft.Nexus70 = 5.0
|
||
|
|
+Solocraft.Nexus70H = 5.0
|
||
|
|
+# The Occulus
|
||
|
|
+Solocraft.Nexus80 = 5.0
|
||
|
|
+Solocraft.Nexus80H = 5.0
|
||
|
|
+# The Culling of Stratholme
|
||
|
|
+Solocraft.StratholmeCOT = 5.0
|
||
|
|
+Solocraft.StratholmeCOTH = 5.0
|
||
|
|
+# Halls of Stone
|
||
|
|
+Solocraft.Ulduar70 = 5.0
|
||
|
|
+Solocraft.Ulduar70H = 5.0
|
||
|
|
+# Drak'Tharon Keep
|
||
|
|
+Solocraft.DrakTheronKeep = 5.0
|
||
|
|
+Solocraft.DrakTheronKeepH = 5.0
|
||
|
|
+# Azjol-Nerub
|
||
|
|
+Solocraft.Azjol_Uppercity = 5.0
|
||
|
|
+Solocraft.Azjol_UppercityH = 5.0
|
||
|
|
+# Halls of Lighting
|
||
|
|
+Solocraft.Ulduar80 = 5.0
|
||
|
|
+Solocraft.Ulduar80H = 5.0
|
||
|
|
+# Ulduar
|
||
|
|
+Solocraft.UlduarRaid = 10.0
|
||
|
|
+Solocraft.UlduarRaidH = 25.0
|
||
|
|
+Solocraft.GunDrak = 5.0
|
||
|
|
+Solocraft.GunDrakH = 5.0
|
||
|
|
+# Violet Hold
|
||
|
|
+Solocraft.DalaranPrison = 5.0
|
||
|
|
+Solocraft.DalaranPrisonH = 5.0
|
||
|
|
+# The Obsidian Sanctum
|
||
|
|
+Solocraft.ChamberOfAspectsBlack = 10.0
|
||
|
|
+Solocraft.ChamberOfAspectsBlackH = 25.0
|
||
|
|
+# The Eye of Eternity
|
||
|
|
+Solocraft.NexusRaid = 10.0
|
||
|
|
+Solocraft.NexusRaidH = 25.0
|
||
|
|
+# Ahn'kahet: The Old Kingdom
|
||
|
|
+Solocraft.Azjol_LowerCity = 5.0
|
||
|
|
+Solocraft.Azjol_LowerCityH = 5.0
|
||
|
|
+Solocraft.IcecrownCitadel = 10.0
|
||
|
|
+Solocraft.IcecrownCitadelH = 25.0
|
||
|
|
+# The Forge of Souls
|
||
|
|
+Solocraft.IcecrownCitadel5Man = 5.0
|
||
|
|
+Solocraft.IcecrownCitadel5ManH = 5.0
|
||
|
|
+# Trial of the Crusader
|
||
|
|
+Solocraft.ArgentTournamentRaid = 10.0
|
||
|
|
+Solocraft.ArgentTournamentRaidH = 25.0
|
||
|
|
+# Grand Trial of the Crusader Heroic
|
||
|
|
+Solocraft.ArgentTournamentRaidH10 = 10.0
|
||
|
|
+Solocraft.ArgentTournamentRaidH25 = 25.0
|
||
|
|
+# Trial of the Champion
|
||
|
|
+Solocraft.ArgentTournamentDungeon = 5.0
|
||
|
|
+Solocraft.ArgentTournamentDungeonH = 5.0
|
||
|
|
+# Pit of Saron
|
||
|
|
+Solocraft.QuarryOfTears = 5.0
|
||
|
|
+Solocraft.QuarryOfTearsH = 5.0
|
||
|
|
+# Halls of Reflection
|
||
|
|
+Solocraft.HallsOfReflection = 5.0
|
||
|
|
+Solocraft.HallsOfReflectionH = 5.0
|
||
|
|
+# The Ruby Sanctum
|
||
|
|
+Solocraft.ChamberOfAspectsRed = 5.0
|
||
|
|
+Solocraft.ChamberOfAspectsRedH = 5.0
|
||
|
|
+################################################################################################
|
||
|
|
+#Player Level Thresholds
|
||
|
|
+################################################################################################
|
||
|
|
+#Max player level difference over the Dungeon's Level for Solocraft to apply the
|
||
|
|
+# difficulty offset buff.
|
||
|
|
+# Default: 10
|
||
|
|
+# Disable: 80
|
||
|
|
+Solocraft.Max.Level.Diff = 10
|
||
|
|
+################################################################################################
|
||
|
|
+#Dungeon Base Levels
|
||
|
|
+################################################################################################
|
||
|
|
+#Catch All - Default 80
|
||
|
|
+Solocraft.Dungeon.Level = 80
|
||
|
|
+################################################################################################
|
||
|
|
+#Classic Instances - Base Level
|
||
|
|
+################################################################################################
|
||
|
|
+Solocraft.ShadowfangKeep.Level = 15
|
||
|
|
+Solocraft.Stockades.Level = 22
|
||
|
|
+Solocraft.Deadmines.Level = 18
|
||
|
|
+Solocraft.WailingCaverns.Level = 17
|
||
|
|
+Solocraft.RazorfenKraulInstance.Level = 30
|
||
|
|
+Solocraft.Blackfathom.Level = 20
|
||
|
|
+Solocraft.Uldaman.Level = 40
|
||
|
|
+Solocraft.GnomeragonInstance.Level = 24
|
||
|
|
+Solocraft.SunkenTemple.Level = 50
|
||
|
|
+Solocraft.RazorfenDowns.Level = 40
|
||
|
|
+# Scarlet Monastery
|
||
|
|
+Solocraft.MonasteryInstances.Level = 35
|
||
|
|
+# Zul'Farrak
|
||
|
|
+Solocraft.TanarisInstance.Level = 44
|
||
|
|
+Solocraft.BlackRockSpire.Level = 55
|
||
|
|
+Solocraft.BlackrockDepths.Level = 50
|
||
|
|
+Solocraft.OnyxiaLairInstance.Level = 60
|
||
|
|
+#Scholomance
|
||
|
|
+Solocraft.SchoolofNecromancy.Level = 55
|
||
|
|
+Solocraft.Zul'gurub.Level = 60
|
||
|
|
+Solocraft.Stratholme.Level = 55
|
||
|
|
+Solocraft.Mauradon.Level = 48
|
||
|
|
+# Ragefire Chasm
|
||
|
|
+Solocraft.OrgrimmarInstance.Level = 15
|
||
|
|
+Solocraft.MoltenCore.Level = 60
|
||
|
|
+Solocraft.DireMaul.Level = 48
|
||
|
|
+Solocraft.BlackwingLair.Level = 40
|
||
|
|
+# Ruins of Ahn'Qiraj
|
||
|
|
+Solocraft.AhnQiraj.Level = 60
|
||
|
|
+Solocraft.AhnQirajTemple.Level = 60
|
||
|
|
+################################################################################################
|
||
|
|
+#BC Instances - Base Level
|
||
|
|
+################################################################################################
|
||
|
|
+# The Black Morass
|
||
|
|
+Solocraft.CavernsOfTime.Level = 68
|
||
|
|
+Solocraft.Karazahn.Level = 68
|
||
|
|
+# The Battle for Mount Hyjal - Hyjal Summit
|
||
|
|
+Solocraft.HyjalPast.Level = 70
|
||
|
|
+# The Shattered Halls
|
||
|
|
+Solocraft.HellfireMilitary.Level = 68
|
||
|
|
+# The Blood Furnace
|
||
|
|
+Solocraft.HellfireDemon.Level = 68
|
||
|
|
+Solocraft.HellfireRampart.Level = 68
|
||
|
|
+# Magtheridon's Lair
|
||
|
|
+Solocraft.HellfireRaid.Level = 68
|
||
|
|
+# The Steamvault
|
||
|
|
+Solocraft.CoilfangPumping.Level = 68
|
||
|
|
+# The Underbog
|
||
|
|
+Solocraft.CoilfangMarsh.Level = 68
|
||
|
|
+# The Slavepens
|
||
|
|
+Solocraft.CoilfangDraenei.Level = 68
|
||
|
|
+# Serpentshrine Cavern
|
||
|
|
+Solocraft.CoilfangRaid.Level = 70
|
||
|
|
+# The Eye
|
||
|
|
+Solocraft.TempestKeepRaid.Level = 70
|
||
|
|
+# The Arcatraz
|
||
|
|
+Solocraft.TempestKeepArcane.Level = 68
|
||
|
|
+# The Botanica
|
||
|
|
+Solocraft.TempestKeepAtrium.Level = 68
|
||
|
|
+# The Mechanar
|
||
|
|
+Solocraft.TempestKeepFactory.Level = 68
|
||
|
|
+# Shadow Labyrinth
|
||
|
|
+Solocraft.AuchindounShadow.Level = 68
|
||
|
|
+# Sethekk Halls
|
||
|
|
+Solocraft.AuchindounDemon.Level = 68
|
||
|
|
+# Mana-Tombs
|
||
|
|
+Solocraft.AuchindounEthereal.Level = 68
|
||
|
|
+# Auchenai Crypts
|
||
|
|
+Solocraft.AuchindounDraenei.Level = 68
|
||
|
|
+# Old Hillsbrad Foothills
|
||
|
|
+Solocraft.HillsbradPast.Level = 68
|
||
|
|
+Solocraft.BlackTemple.Level = 70
|
||
|
|
+Solocraft.GruulsLair.Level = 70
|
||
|
|
+Solocraft.ZulAman.Level = 68
|
||
|
|
+Solocraft.SunwellPlateau.Level = 70
|
||
|
|
+# Magister's Terrace
|
||
|
|
+Solocraft.Sunwell5ManFix.Level = 68
|
||
|
|
+################################################################################################
|
||
|
|
+#WOTLK Instances - Base Level
|
||
|
|
+################################################################################################
|
||
|
|
+# Naxxramas
|
||
|
|
+Solocraft.StratholmeRaid.Level = 78
|
||
|
|
+# Utgarde Keep
|
||
|
|
+Solocraft.Valgarde70.Level = 78
|
||
|
|
+Solocraft.UtgardePinnacle.Level = 78
|
||
|
|
+# The Nexus
|
||
|
|
+Solocraft.Nexus70.Level = 78
|
||
|
|
+# The Occulus
|
||
|
|
+Solocraft.Nexus80.Level = 78
|
||
|
|
+# The Culling of Stratholme
|
||
|
|
+Solocraft.StratholmeCOT.Level = 78
|
||
|
|
+# Halls of Stone
|
||
|
|
+Solocraft.Ulduar70.Level = 78
|
||
|
|
+# Drak'Tharon Keep
|
||
|
|
+Solocraft.DrakTheronKeep.Level = 78
|
||
|
|
+# Azjol-Nerub
|
||
|
|
+Solocraft.Azjol_Uppercity.Level = 78
|
||
|
|
+# Halls of Lighting
|
||
|
|
+Solocraft.Ulduar80.Level = 78
|
||
|
|
+# Ulduar
|
||
|
|
+Solocraft.UlduarRaid.Level = 80
|
||
|
|
+Solocraft.GunDrak.Level = 78
|
||
|
|
+# Violet Hold
|
||
|
|
+Solocraft.DalaranPrison.Level = 78
|
||
|
|
+# The Obsidian Sanctum
|
||
|
|
+Solocraft.ChamberOfAspectsBlack.Level = 80
|
||
|
|
+# The Eye of Eternity
|
||
|
|
+Solocraft.NexusRaid.Level = 80
|
||
|
|
+# Ahn'kahet: The Old Kingdom
|
||
|
|
+Solocraft.Azjol_LowerCity.Level = 78
|
||
|
|
+#Icecrown Citadel
|
||
|
|
+Solocraft.IcecrownCitadel.Level = 80
|
||
|
|
+# The Forge of Souls
|
||
|
|
+Solocraft.IcecrownCitadel5Man.Level = 78
|
||
|
|
+# Trial of the Champion
|
||
|
|
+Solocraft.ArgentTournamentDungeon.Level = 80
|
||
|
|
+# Trial of the Crusader
|
||
|
|
+Solocraft.ArgentTournamentRaid.Level = 80
|
||
|
|
+# Pit of Saron
|
||
|
|
+Solocraft.QuarryOfTears.Level = 78
|
||
|
|
+# Halls of Reflection
|
||
|
|
+Solocraft.HallsOfReflection.Level = 78
|
||
|
|
+# The Ruby Sanctum
|
||
|
|
+Solocraft.ChamberOfAspectsRed.Level = 80
|
||
|
|
+#
|
||
|
|
+################################################################################################
|
||
|
|
\ No newline at end of file
|