aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bindings/scripts/scripts/zone/eastern_plaguelands/the_scarlet_enclave.cpp2
-rw-r--r--src/game/ObjectMgr.cpp16
-rw-r--r--src/game/ObjectMgr.h1
-rw-r--r--src/game/SpellMgr.cpp10
-rw-r--r--src/game/SpellMgr.h2
-rw-r--r--src/game/World.cpp8
-rw-r--r--src/game/World.h1
-rw-r--r--src/trinitycore/trinitycore.conf.dist6
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