diff options
author | XTZGZoReX <none@none> | 2010-08-06 18:03:09 +0200 |
---|---|---|
committer | XTZGZoReX <none@none> | 2010-08-06 18:03:09 +0200 |
commit | b63a31f513db5274e85afc323d143292d8f3e88f (patch) | |
tree | 7b8300182cdf20994c132be1aa39ab89bce3df84 | |
parent | edc4c3317c8e6db6f67d71eb135c084970401fd1 (diff) |
* Added outdoorpvp_template table (currently unused).
* Added DISABLE_TYPE_OUTDOORPVP (5) which can disable outdoorpvp_template entries.
--HG--
branch : trunk
-rw-r--r-- | sql/base/world_database.sql | 24 | ||||
-rw-r--r-- | sql/updates/9198_world_outdoorpvp_template.sql | 7 | ||||
-rw-r--r-- | src/server/game/Conditions/DisableMgr.cpp | 17 | ||||
-rw-r--r-- | src/server/game/Conditions/DisableMgr.h | 8 | ||||
-rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 5 | ||||
-rw-r--r-- | src/server/game/OutdoorPvP/OutdoorPvP.h | 15 | ||||
-rw-r--r-- | src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp | 57 | ||||
-rw-r--r-- | src/server/game/OutdoorPvP/OutdoorPvPMgr.h | 13 |
8 files changed, 134 insertions, 12 deletions
diff --git a/sql/base/world_database.sql b/sql/base/world_database.sql index b354c82316c..8e769eb010e 100644 --- a/sql/base/world_database.sql +++ b/sql/base/world_database.sql @@ -3841,6 +3841,30 @@ LOCK TABLES `npc_vendor` WRITE; UNLOCK TABLES; -- +-- Table structure for table `outdoorpvp_template` +-- + +DROP TABLE IF EXISTS `outdoorpvp_template`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `outdoorpvp_template` ( + `TypeId` tinyint(2) unsigned NOT NULL, + `ScriptName` char(64) NOT NULL DEFAULT '', + `comment` text, + PRIMARY KEY (`TypeId`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='OutdoorPvP Templates'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `outdoorpvp_template` +-- + +LOCK TABLES `outdoorpvp_template` WRITE; +/*!40000 ALTER TABLE `outdoorpvp_template` DISABLE KEYS */; +/*!40000 ALTER TABLE `outdoorpvp_template` ENABLE KEYS */; +UNLOCK TABLES; + +-- -- Table structure for table `page_text` -- diff --git a/sql/updates/9198_world_outdoorpvp_template.sql b/sql/updates/9198_world_outdoorpvp_template.sql new file mode 100644 index 00000000000..eb474227b9d --- /dev/null +++ b/sql/updates/9198_world_outdoorpvp_template.sql @@ -0,0 +1,7 @@ +DROP TABLE IF EXISTS `outdoorpvp_template`;
+CREATE TABLE `outdoorpvp_template` (
+ `TypeId` tinyint(2) unsigned NOT NULL,
+ `ScriptName` char(64) NOT NULL DEFAULT '',
+ `comment` text,
+ PRIMARY KEY (`TypeId`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='OutdoorPvP Templates';
diff --git a/src/server/game/Conditions/DisableMgr.cpp b/src/server/game/Conditions/DisableMgr.cpp index bf42cf25168..1fbb52bb0cf 100644 --- a/src/server/game/Conditions/DisableMgr.cpp +++ b/src/server/game/Conditions/DisableMgr.cpp @@ -22,6 +22,7 @@ #include "SpellMgr.h" #include "ObjectMgr.h" #include "DisableMgr.h" +#include "OutdoorPvP.h" DisableMgr::DisableMgr() { @@ -31,6 +32,7 @@ DisableMgr::~DisableMgr() { for (DisableMap::iterator itr = m_DisableMap.begin(); itr != m_DisableMap.end(); ++itr) itr->second.clear(); + m_DisableMap.clear(); } @@ -39,6 +41,7 @@ void DisableMgr::LoadDisables() // reload case for (DisableMap::iterator itr = m_DisableMap.begin(); itr != m_DisableMap.end(); ++itr) itr->second.clear(); + m_DisableMap.clear(); QueryResult_AutoPtr result = WorldDatabase.Query("SELECT sourceType,entry,flags FROM disables"); @@ -132,6 +135,15 @@ void DisableMgr::LoadDisables() if (flags) sLog.outErrorDb("Disable flags specified for battleground %u, useless data.", entry); break; + case DISABLE_TYPE_OUTDOORPVP: + if (entry > MAX_OUTDOORPVP_TYPES) + { + sLog.outErrorDb("OutdoorPvPTypes value %u from `disables` is invalid, skipped.", entry); + continue; + } + if (flags) + sLog.outErrorDb("Disable flags specified for outdoor PvP %u, useless data.", entry); + break; case DISABLE_TYPE_ACHIEVEMENT_CRITERIA: if (!sAchievementCriteriaStore.LookupEntry(entry)) { @@ -142,9 +154,11 @@ void DisableMgr::LoadDisables() sLog.outErrorDb("Disable flags specified for Achievement Criteria %u, useless data.", entry); break; } + m_DisableMap[type].insert(DisableTypeMap::value_type(entry, flags)); ++total_count; - } while (result->NextRow()); + } + while (result->NextRow()); sLog.outString(); sLog.outString(">> Loaded %u disables.", total_count); @@ -248,6 +262,7 @@ bool DisableMgr::IsDisabledFor(DisableType type, uint32 entry, Unit const* pUnit return false; return true; case DISABLE_TYPE_BATTLEGROUND: + case DISABLE_TYPE_OUTDOORPVP: case DISABLE_TYPE_ACHIEVEMENT_CRITERIA: return true; } diff --git a/src/server/game/Conditions/DisableMgr.h b/src/server/game/Conditions/DisableMgr.h index 4bfacccdfb0..e85d14441e4 100644 --- a/src/server/game/Conditions/DisableMgr.h +++ b/src/server/game/Conditions/DisableMgr.h @@ -27,10 +27,11 @@ enum DisableType DISABLE_TYPE_QUEST = 1, DISABLE_TYPE_MAP = 2, DISABLE_TYPE_BATTLEGROUND = 3, - DISABLE_TYPE_ACHIEVEMENT_CRITERIA = 4 + DISABLE_TYPE_ACHIEVEMENT_CRITERIA = 4, + DISABLE_TYPE_OUTDOORPVP = 5, }; -#define MAX_DISABLE_TYPES 5 +#define MAX_DISABLE_TYPES 6 typedef std::map<uint32, uint8> DisableTypeMap; // single disables here with optional data typedef std::map<DisableType, DisableTypeMap> DisableMap; // global disable map by source @@ -39,15 +40,16 @@ class DisableMgr { friend class ACE_Singleton<DisableMgr, ACE_Null_Mutex>; DisableMgr(); + ~DisableMgr(); public: - ~DisableMgr(); void LoadDisables(); bool IsDisabledFor(DisableType type, uint32 entry, Unit const* pUnit); void CheckQuestDisables(); protected: + DisableMap m_DisableMap; }; diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 23ce129d0d3..5b811d54fe2 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -8750,6 +8750,8 @@ void ObjectMgr::LoadScriptNames() "UNION " "SELECT DISTINCT(ScriptName) FROM conditions WHERE ScriptName <> '' " "UNION " + "SELECT DISTINCT(ScriptName) FROM outdoorpvp_template WHERE ScriptName <> '' " + "UNION " "SELECT DISTINCT(script) FROM instance_template WHERE script <> ''"); if (!result) @@ -8772,7 +8774,8 @@ void ObjectMgr::LoadScriptNames() bar.step(); m_scriptNames.push_back((*result)[0].GetString()); ++count; - } while (result->NextRow()); + } + while (result->NextRow()); std::sort(m_scriptNames.begin(), m_scriptNames.end()); sLog.outString(); diff --git a/src/server/game/OutdoorPvP/OutdoorPvP.h b/src/server/game/OutdoorPvP/OutdoorPvP.h index 24efe84f98c..530bb647903 100644 --- a/src/server/game/OutdoorPvP/OutdoorPvP.h +++ b/src/server/game/OutdoorPvP/OutdoorPvP.h @@ -28,15 +28,16 @@ class GameObject; enum OutdoorPvPTypes { OUTDOOR_PVP_HP = 1, - OUTDOOR_PVP_NA, - OUTDOOR_PVP_TF, - OUTDOOR_PVP_ZM, - OUTDOOR_PVP_SI, - OUTDOOR_PVP_EP, - OUTDOOR_PVP_WG, - OUTDOOR_PVP_NR, + OUTDOOR_PVP_NA = 2, + OUTDOOR_PVP_TF = 3, + OUTDOOR_PVP_ZM = 4, + OUTDOOR_PVP_SI = 5, + OUTDOOR_PVP_EP = 6, + OUTDOOR_PVP_NR = 7, }; +#define MAX_OUTDOORPVP_TYPES 8 + const uint8 CapturePointArtKit[3] = {2, 1, 21}; enum ObjectiveStates diff --git a/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp b/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp index 7098bfa4e6f..ba2df92bed9 100644 --- a/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp +++ b/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp @@ -25,6 +25,8 @@ #include "OutdoorPvPEP.h" #include "ObjectMgr.h" #include "Player.h" +#include "ProgressBar.h" +#include "DisableMgr.h" OutdoorPvPMgr::OutdoorPvPMgr() { @@ -37,10 +39,15 @@ OutdoorPvPMgr::~OutdoorPvPMgr() //sLog.outDebug("Deleting OutdoorPvPMgr"); for (OutdoorPvPSet::iterator itr = m_OutdoorPvPSet.begin(); itr != m_OutdoorPvPSet.end(); ++itr) delete *itr; + + for (OutdoorPvPDataSet::iterator itr = m_OutdoorPvPDatas.begin(); itr != m_OutdoorPvPDatas.end(); ++itr) + delete *itr; } void OutdoorPvPMgr::InitOutdoorPvP() { + LoadTemplates(); + // create new opvp OutdoorPvP * pOP = new OutdoorPvPHP; // respawn, init variables @@ -121,6 +128,56 @@ void OutdoorPvPMgr::InitOutdoorPvP() } } +void OutdoorPvPMgr::LoadTemplates() +{ + uint32 typeId = 0; + uint32 count = 0; + + // 0 1 + QueryResult_AutoPtr result = WorldDatabase.Query("SELECT TypeId, ScriptName FROM outdoorpvp_template"); + + if (!result) + { + barGoLink bar(1); + + bar.step(); + + sLog.outString(); + sLog.outErrorDb(">> Loaded 0 outdoor PvP definitions. DB table `outdoorpvp_template` is empty."); + return; + } + + barGoLink bar(result->GetRowCount()); + + do + { + Field *fields = result->Fetch(); + bar.step(); + + typeId = fields[0].GetUInt32(); + + if (sDisableMgr.IsDisabledFor(DISABLE_TYPE_OUTDOORPVP, typeId, NULL)) + continue; + + if (typeId >= MAX_OUTDOORPVP_TYPES) + { + sLog.outError("Invalid OutdoorPvPTypes value %u in outdoorpvp_template; skipped.", typeId); + continue; + } + + OutdoorPvPData data; + data.TypeId = OutdoorPvPTypes(typeId); + data.ScriptId = objmgr.GetScriptId(fields[1].GetString()); + m_OutdoorPvPDatas.push_back(&data); + + ++count; + } + while (result->NextRow()); + + sLog.outString(); + sLog.outString(">> Loaded %u outdoor PvP definitions.", count); +} + void OutdoorPvPMgr::AddZone(uint32 zoneid, OutdoorPvP *handle) { m_OutdoorPvPMap[zoneid] = handle; diff --git a/src/server/game/OutdoorPvP/OutdoorPvPMgr.h b/src/server/game/OutdoorPvP/OutdoorPvPMgr.h index 680984ebedb..a1e8e3c9a6b 100644 --- a/src/server/game/OutdoorPvP/OutdoorPvPMgr.h +++ b/src/server/game/OutdoorPvP/OutdoorPvPMgr.h @@ -30,6 +30,12 @@ class Creature; class ZoneScript; struct GossipMenuItems; +struct OutdoorPvPData +{ + OutdoorPvPTypes TypeId; + uint32 ScriptId; +}; + // class to handle player enter / leave / areatrigger / GO use events class OutdoorPvPMgr { @@ -44,6 +50,9 @@ class OutdoorPvPMgr // create outdoor pvp events void InitOutdoorPvP(); + // loads outdoorpvp_template + void LoadTemplates(); + // called when a player enters an outdoor pvp area void HandlePlayerEnterZone(Player * plr, uint32 areaflag); @@ -76,6 +85,7 @@ class OutdoorPvPMgr typedef std::vector<OutdoorPvP*> OutdoorPvPSet; typedef std::map<uint32 /* zoneid */, OutdoorPvP*> OutdoorPvPMap; + typedef std::vector<OutdoorPvPData*> OutdoorPvPDataSet; private: @@ -87,6 +97,9 @@ class OutdoorPvPMgr // used in player event handling OutdoorPvPMap m_OutdoorPvPMap; + // Holds the outdoor PvP templates + OutdoorPvPDataSet m_OutdoorPvPDatas; + // update interval uint32 m_UpdateTimer; }; |