aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXTZGZoReX <none@none>2010-08-06 18:03:09 +0200
committerXTZGZoReX <none@none>2010-08-06 18:03:09 +0200
commitb63a31f513db5274e85afc323d143292d8f3e88f (patch)
tree7b8300182cdf20994c132be1aa39ab89bce3df84
parentedc4c3317c8e6db6f67d71eb135c084970401fd1 (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.sql24
-rw-r--r--sql/updates/9198_world_outdoorpvp_template.sql7
-rw-r--r--src/server/game/Conditions/DisableMgr.cpp17
-rw-r--r--src/server/game/Conditions/DisableMgr.h8
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp5
-rw-r--r--src/server/game/OutdoorPvP/OutdoorPvP.h15
-rw-r--r--src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp57
-rw-r--r--src/server/game/OutdoorPvP/OutdoorPvPMgr.h13
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;
};