diff options
-rw-r--r-- | src/bindings/scripts/scripts/zone/eastern_plaguelands/the_scarlet_enclave.cpp | 2 | ||||
-rw-r--r-- | src/game/ObjectMgr.cpp | 16 | ||||
-rw-r--r-- | src/game/ObjectMgr.h | 1 | ||||
-rw-r--r-- | src/game/SpellMgr.cpp | 10 | ||||
-rw-r--r-- | src/game/SpellMgr.h | 2 | ||||
-rw-r--r-- | src/game/World.cpp | 8 | ||||
-rw-r--r-- | src/game/World.h | 1 | ||||
-rw-r--r-- | src/trinitycore/trinitycore.conf.dist | 6 |
8 files changed, 46 insertions, 0 deletions
diff --git a/src/bindings/scripts/scripts/zone/eastern_plaguelands/the_scarlet_enclave.cpp b/src/bindings/scripts/scripts/zone/eastern_plaguelands/the_scarlet_enclave.cpp index 2cb9954c868..13fd5066a13 100644 --- a/src/bindings/scripts/scripts/zone/eastern_plaguelands/the_scarlet_enclave.cpp +++ b/src/bindings/scripts/scripts/zone/eastern_plaguelands/the_scarlet_enclave.cpp @@ -564,6 +564,8 @@ struct TRINITY_DLL_DECL npc_ros_dark_riderAI : public ScriptedAI deathcharger->RestoreFaction(); deathcharger->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK); deathcharger->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + if(!me->m_Vehicle && deathcharger->isVehicle() && CAST_VEH(deathcharger)->HasEmptySeat(0)) + me->EnterVehicle(CAST_VEH(deathcharger)); } void JustDied(Unit *killer) diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index 682c91a1f3b..31c0723869d 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -8474,3 +8474,19 @@ void ObjectMgr::RemoveGMTicket(uint64 ticketGuid, int64 source, bool permanently RemoveGMTicket(ticket, source, permanently); } +bool ObjectMgr::CheckDB() const +{ + CreatureInfo const* cInfo = sCreatureStorage.LookupEntry<CreatureInfo>(28511); + if(!cInfo || cInfo->spells[4] != 51890) + return false; + + cInfo = sCreatureStorage.LookupEntry<CreatureInfo>(30068); + if(!cInfo || cInfo->faction_A != 21) + return false; + + cInfo = sCreatureStorage.LookupEntry<CreatureInfo>(28768); + if(!cInfo || !cInfo->ScriptID) + return false; + + return true; +} diff --git a/src/game/ObjectMgr.h b/src/game/ObjectMgr.h index 0c032bc8ec3..125e807da08 100644 --- a/src/game/ObjectMgr.h +++ b/src/game/ObjectMgr.h @@ -866,6 +866,7 @@ class ObjectMgr GmTicketList m_GMTicketList; uint64 GenerateGMTicketId(); + bool CheckDB() const; protected: // first free id for selected id type diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index 2b70f697d9f..c11806e546a 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -3626,3 +3626,13 @@ void SpellMgr::LoadSpellLinked() sLog.outString(); sLog.outString( ">> Loaded %u linked spells", count ); } + +bool SpellMgr::CheckDB() const +{ + SpellScriptTarget::const_iterator lower = GetBeginSpellScriptTarget(30531); + SpellScriptTarget::const_iterator upper = GetEndSpellScriptTarget(30531); + if(lower == upper || lower->second.targetEntry != 17256) + return false; + + return true; +} diff --git a/src/game/SpellMgr.h b/src/game/SpellMgr.h index c479a57d7f6..9871930a8fd 100644 --- a/src/game/SpellMgr.h +++ b/src/game/SpellMgr.h @@ -1065,6 +1065,8 @@ class SpellMgr void LoadPetDefaultSpells(); void LoadSpellAreas(); + bool CheckDB() const; + private: SpellScriptTarget mSpellScriptTarget; SpellChainMap mSpellChains; diff --git a/src/game/World.cpp b/src/game/World.cpp index 4c14da07fd5..1db8b7c0478 100644 --- a/src/game/World.cpp +++ b/src/game/World.cpp @@ -1087,6 +1087,7 @@ void World::LoadConfigSettings(bool reload) m_configs[CONFIG_SHOW_KICK_IN_WORLD] = sConfig.GetBoolDefault("ShowKickInWorld", false); m_configs[CONFIG_INTERVAL_LOG_UPDATE] = sConfig.GetIntDefault("RecordUpdateTimeDiffInterval", 60000); m_configs[CONFIG_MIN_LOG_UPDATE] = sConfig.GetIntDefault("MinRecordUpdateTimeDiff", 10); + m_configs[CONFIG_CHECK_DB] = sConfig.GetBoolDefault("CheckDB", true); std::string forbiddenmaps = sConfig.GetStringDefault("ForbiddenMaps", ""); char * forbiddenMaps = new char[forbiddenmaps.length() + 1]; @@ -1485,6 +1486,13 @@ void World::SetInitialWorldSettings() if(!LoadScriptingModule()) exit(1); + /// Check db + if(m_configs[CONFIG_CHECK_DB] && (!objmgr.CheckDB() || !spellmgr.CheckDB())) + { + sLog.outError("Your world DB is outdated. Please reapply sqls in sql\\FULL folder, or disable CheckDB option in config file (not recommended)."); + exit(1); + } + ///- Initialize game time and timers sLog.outDebug( "DEBUG:: Initialize game time and timers" ); m_gameTime = time(NULL); diff --git a/src/game/World.h b/src/game/World.h index 6e8479b59ef..c91ee2e70ec 100644 --- a/src/game/World.h +++ b/src/game/World.h @@ -232,6 +232,7 @@ enum WorldConfigs CONFIG_SHOW_KICK_IN_WORLD, CONFIG_INTERVAL_LOG_UPDATE, CONFIG_MIN_LOG_UPDATE, + CONFIG_CHECK_DB, CONFIG_ENABLE_SINFO_LOGIN, CONFIG_PET_LOS, CONFIG_OFFHAND_CHECK_AT_TALENTS_RESET, diff --git a/src/trinitycore/trinitycore.conf.dist b/src/trinitycore/trinitycore.conf.dist index 90e0ddc1266..bc6d907fbe0 100644 --- a/src/trinitycore/trinitycore.conf.dist +++ b/src/trinitycore/trinitycore.conf.dist @@ -1620,6 +1620,11 @@ Ra.Secure = 1 # to a newly created character. # Default: "" - send no text # +# CheckDB +# Check if your DB is outdated. Disabling this option means that you decide to use a DB which is +# not compatible with TrinityCore and are ready for all kinds of bugs. +# Default: 1 = enable +# ################################################################################################################### PlayerStart.AllReputation = 0 @@ -1640,3 +1645,4 @@ ShowKickInWorld = 0 RecordUpdateTimeDiffInterval = 60000 MinRecordUpdateTimeDiff = 10 PlayerStart.String = "" +CheckDB = 1 |