diff options
author | megamage <none@none> | 2009-05-23 01:44:16 -0500 |
---|---|---|
committer | megamage <none@none> | 2009-05-23 01:44:16 -0500 |
commit | 322769ee550a709994d9076d502e145ce6da3e2c (patch) | |
tree | b251008eab9cae5d5d56102f2a7d7a49f4ae0de9 /src | |
parent | ec24442af402d7ace4e74bb9ce5e36db89656f79 (diff) |
*Display building location on map for wintergrasp.
--HG--
branch : trunk
Diffstat (limited to 'src')
-rw-r--r-- | src/game/DBCStores.cpp | 2 | ||||
-rw-r--r-- | src/game/DBCStores.h | 1 | ||||
-rw-r--r-- | src/game/DBCStructure.h | 18 | ||||
-rw-r--r-- | src/game/DBCfmt.h | 1 | ||||
-rw-r--r-- | src/game/Wintergrasp.cpp | 18 | ||||
-rw-r--r-- | src/game/Wintergrasp.h | 36 |
6 files changed, 76 insertions, 0 deletions
diff --git a/src/game/DBCStores.cpp b/src/game/DBCStores.cpp index 4f09e039f3e..ff193abaad6 100644 --- a/src/game/DBCStores.cpp +++ b/src/game/DBCStores.cpp @@ -33,6 +33,7 @@ typedef std::map<uint32,uint32> AreaFlagByMapID; DBCStorage <AreaTableEntry> sAreaStore(AreaTableEntryfmt); DBCStorage <AreaGroupEntry> sAreaGroupStore(AreaGroupEntryfmt); +DBCStorage <AreaPOIEntry> sAreaPOIStore(AreaPOIEntryfmt); static AreaFlagByAreaID sAreaFlagByAreaID; static AreaFlagByMapID sAreaFlagByMapID; // for instances without generated *.map files @@ -233,6 +234,7 @@ void LoadDBCStores(const std::string& dataPath) LoadDBC(availableDbcLocales,bar,bad_dbc_files,sAchievementCriteriaStore, dbcPath,"Achievement_Criteria.dbc"); LoadDBC(availableDbcLocales,bar,bad_dbc_files,sAreaTriggerStore, dbcPath,"AreaTrigger.dbc"); LoadDBC(availableDbcLocales,bar,bad_dbc_files,sAreaGroupStore, dbcPath,"AreaGroup.dbc"); + LoadDBC(availableDbcLocales,bar,bad_dbc_files,sAreaPOIStore, dbcPath,"AreaPOI.dbc"); LoadDBC(availableDbcLocales,bar,bad_dbc_files,sAuctionHouseStore, dbcPath,"AuctionHouse.dbc"); LoadDBC(availableDbcLocales,bar,bad_dbc_files,sBankBagSlotPricesStore, dbcPath,"BankBagSlotPrices.dbc"); LoadDBC(availableDbcLocales,bar,bad_dbc_files,sBattlemasterListStore, dbcPath,"BattlemasterList.dbc"); diff --git a/src/game/DBCStores.h b/src/game/DBCStores.h index 5952d12ec71..4da1911a0b7 100644 --- a/src/game/DBCStores.h +++ b/src/game/DBCStores.h @@ -62,6 +62,7 @@ extern DBCStorage <AchievementEntry> sAchievementStore; extern DBCStorage <AchievementCriteriaEntry> sAchievementCriteriaStore; extern DBCStorage <AreaTableEntry> sAreaStore;// recommend access using functions extern DBCStorage <AreaGroupEntry> sAreaGroupStore; +extern DBCStorage <AreaPOIEntry> sAreaPOIStore; extern DBCStorage <AreaTriggerEntry> sAreaTriggerStore; extern DBCStorage <AuctionHouseEntry> sAuctionHouseStore; extern DBCStorage <BankBagSlotPricesEntry> sBankBagSlotPricesStore; diff --git a/src/game/DBCStructure.h b/src/game/DBCStructure.h index a4a5d040ac1..6862e0aa26d 100644 --- a/src/game/DBCStructure.h +++ b/src/game/DBCStructure.h @@ -516,6 +516,24 @@ struct AreaGroupEntry uint32 nextGroup; // 7 index of next group }; +struct AreaPOIEntry +{ + uint32 id; //0 + //uint32 icon[11]; //1-11 + float x; //12 + float y; //13 + float z; //14 + uint32 mapId; //15 + //uint32 val1; //16 + uint32 zoneId; //17 + //char* name[16]; //18-33 + //uint32 name_flag; //34 + //char* name2[16]; //35-50 + //uint32 name_flag2; //51 + uint32 worldState; //52 + //uint32 val2; //53 +}; + struct AreaTriggerEntry { uint32 id; // 0 m_ID diff --git a/src/game/DBCfmt.h b/src/game/DBCfmt.h index ab41fbe37d4..77f01edb5a2 100644 --- a/src/game/DBCfmt.h +++ b/src/game/DBCfmt.h @@ -25,6 +25,7 @@ const char Achievementfmt[]="niixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxiixixxxxxxxxx const char AchievementCriteriafmt[]="niiiiiiiixxxxxxxxxxxxxxxxxiixix"; const char AreaTableEntryfmt[]="iiinixxxxxissssssssssssssssxixxxxxxx"; const char AreaGroupEntryfmt[]="niiiiiii"; +const char AreaPOIEntryfmt[]="nxxxxxxxxxxxfffixixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxix"; const char AreaTriggerEntryfmt[]="niffffffff"; const char AuctionHouseEntryfmt[]="niiixxxxxxxxxxxxxxxxx"; const char BankBagSlotPricesEntryfmt[]="ni"; diff --git a/src/game/Wintergrasp.cpp b/src/game/Wintergrasp.cpp index a2cbb3d7cf5..b5e808e1251 100644 --- a/src/game/Wintergrasp.cpp +++ b/src/game/Wintergrasp.cpp @@ -23,6 +23,17 @@ bool OPvPWintergrasp::SetupOutdoorPvP() { RegisterZone(ZONE_WINTERGRASP); + + for(uint32 i = 0; i < sAreaPOIStore.GetNumRows(); ++i) + { + const AreaPOIEntry * poiInfo = sAreaPOIStore.LookupEntry(i); + if(poiInfo && poiInfo->zoneId == ZONE_WINTERGRASP) + areaPOIs.push_back(poiInfo); + } + + m_defender = TeamId(rand()%2); + m_attacker = (m_defender == TEAM_ALLIANCE ? TEAM_HORDE : TEAM_ALLIANCE); + return true; } @@ -31,6 +42,13 @@ void OPvPWintergrasp::HandlePlayerEnterZone(Player * plr, uint32 zone) if(!plr->HasAura(SPELL_RECRUIT) && !plr->HasAura(SPELL_CORPORAL) && !plr->HasAura(SPELL_LIEUTENANT)) plr->CastSpell(plr, SPELL_RECRUIT, true); + + for(AreaPOIList::iterator itr = areaPOIs.begin(); itr != areaPOIs.end(); ++itr) + { + TeamId team = ((*itr)->x > POS_X_CENTER ? m_defender : m_attacker); + plr->SendUpdateWorldState((*itr)->worldState, AreaPOIIconId[team][DAMAGE_INTACT]); + } + OutdoorPvP::HandlePlayerEnterZone(plr, zone); } diff --git a/src/game/Wintergrasp.h b/src/game/Wintergrasp.h index 1a698c4c1cf..40b908ea74d 100644 --- a/src/game/Wintergrasp.h +++ b/src/game/Wintergrasp.h @@ -23,6 +23,8 @@ #define ZONE_WINTERGRASP 4197 +#define POS_X_CENTER 4700 + #define SPELL_RECRUIT 37795 #define SPELL_CORPORAL 33280 #define SPELL_LIEUTENANT 55629 @@ -30,13 +32,47 @@ #define SPELL_TENICITY 58549 #define SPELL_TENICITY_VEHICLE 59911 +enum TeamId +{ + TEAM_ALLIANCE = 0, + TEAM_HORDE, + TEAM_NEUTRAL, +}; + +enum DamageState +{ + DAMAGE_INTACT, + DAMAGE_DAMAGED, + DAMAGE_DESTROYED, +}; + +const uint32 AreaPOIIconId[3][3] = {{7,8,9},{4,5,6},{1,2,3}}; + +struct BuildingState +{ + explicit BuildingState(uint32 _worldState, uint32 _health) + : worldState(_worldState), health(_health), team(TEAM_NEUTRAL), damageState(DAMAGE_INTACT) + {} + uint32 worldState; + uint32 health; + TeamId team; + DamageState damageState; +}; + class OPvPWintergrasp : public OutdoorPvP { + protected: + typedef std::list<const AreaPOIEntry *> AreaPOIList; + typedef std::map<uint32, BuildingState *> BuildingStateMap; public: bool SetupOutdoorPvP(); void HandlePlayerEnterZone(Player *plr, uint32 zone); void HandlePlayerLeaveZone(Player *plr, uint32 zone); void HandleKill(Player *killer, Unit *victim); + protected: + TeamId m_defender, m_attacker; + AreaPOIList areaPOIs; + BuildingStateMap buildingStates; }; #endif |