root/trunk/src/game/OutdoorPvPMgr.cpp @ 94

Revision 44, 5.6 kB (checked in by yumileroy, 17 years ago)

[svn] * Merge Temp dev SVN with Assembla.
* Changes include:

  • Implementation of w12x's Outdoor PvP and Game Event Systems.
  • Temporary removal of IRC Chat Bot (until infinite loop when disabled is fixed).
  • All mangos -> trinity (to convert your mangos_string table, please run mangos_string_to_trinity_string.sql).
  • Improved Config cleanup.
  • And many more changes.

Original author: Seline
Date: 2008-10-14 11:57:03-05:00

Line 
1#include "OutdoorPvPMgr.h"
2#include "OutdoorPvPHP.h"
3#include "OutdoorPvPNA.h"
4#include "OutdoorPvPTF.h"
5#include "OutdoorPvPZM.h"
6#include "OutdoorPvPSI.h"
7#include "OutdoorPvPEP.h"
8#include "Player.h"
9#include "Policies/SingletonImp.h"
10
11INSTANTIATE_SINGLETON_1( OutdoorPvPMgr );
12
13OutdoorPvPMgr::OutdoorPvPMgr()
14{
15    //sLog.outDebug("Instantiating OutdoorPvPMgr");
16}
17
18OutdoorPvPMgr::~OutdoorPvPMgr()
19{
20    //sLog.outDebug("Deleting OutdoorPvPMgr");
21    for(OutdoorPvPSet::iterator itr = m_OutdoorPvPSet.begin(); itr != m_OutdoorPvPSet.end(); ++itr)
22    {
23        (*itr)->DeleteSpawns();
24    }
25}
26
27void OutdoorPvPMgr::InitOutdoorPvP()
28{
29    // create new opvp
30    OutdoorPvP * pOP = new OutdoorPvPHP;
31    // respawn, init variables
32    if(!pOP->SetupOutdoorPvP())
33    {
34        sLog.outDebug("OutdoorPvP : HP init failed.");
35        delete pOP;
36    }
37    else
38    {
39        m_OutdoorPvPSet.insert(pOP);
40        sLog.outDebug("OutdoorPvP : HP successfully initiated.");
41    }
42
43
44    pOP = new OutdoorPvPNA;
45    // respawn, init variables
46    if(!pOP->SetupOutdoorPvP())
47    {
48        sLog.outDebug("OutdoorPvP : NA init failed.");
49        delete pOP;
50    }
51    else
52    {
53        m_OutdoorPvPSet.insert(pOP);
54        sLog.outDebug("OutdoorPvP : NA successfully initiated.");
55    }
56
57
58    pOP = new OutdoorPvPTF;
59    // respawn, init variables
60    if(!pOP->SetupOutdoorPvP())
61    {
62        sLog.outDebug("OutdoorPvP : TF init failed.");
63        delete pOP;
64    }
65    else
66    {
67        m_OutdoorPvPSet.insert(pOP);
68        sLog.outDebug("OutdoorPvP : TF successfully initiated.");
69    }
70
71    pOP = new OutdoorPvPZM;
72    // respawn, init variables
73    if(!pOP->SetupOutdoorPvP())
74    {
75        sLog.outDebug("OutdoorPvP : ZM init failed.");
76        delete pOP;
77    }
78    else
79    {
80        m_OutdoorPvPSet.insert(pOP);
81        sLog.outDebug("OutdoorPvP : ZM successfully initiated.");
82    }
83
84    pOP = new OutdoorPvPSI;
85    // respawn, init variables
86    if(!pOP->SetupOutdoorPvP())
87    {
88        sLog.outDebug("OutdoorPvP : SI init failed.");
89        delete pOP;
90    }
91    else
92    {
93        m_OutdoorPvPSet.insert(pOP);
94        sLog.outDebug("OutdoorPvP : SI successfully initiated.");
95    }
96
97    pOP = new OutdoorPvPEP;
98    // respawn, init variables
99    if(!pOP->SetupOutdoorPvP())
100    {
101        sLog.outDebug("OutdoorPvP : EP init failed.");
102        delete pOP;
103    }
104    else
105    {
106        m_OutdoorPvPSet.insert(pOP);
107        sLog.outDebug("OutdoorPvP : EP successfully initiated.");
108    }
109}
110
111void OutdoorPvPMgr::AddZone(uint32 zoneid, OutdoorPvP *handle)
112{
113    m_OutdoorPvPMap[zoneid] = handle;
114}
115
116
117void OutdoorPvPMgr::HandlePlayerEnterZone(Player *plr, uint32 zoneid)
118{
119    OutdoorPvPMap::iterator itr = m_OutdoorPvPMap.find(zoneid);
120    if(itr == m_OutdoorPvPMap.end())
121    {
122        // no handle for this zone, return
123        return;
124    }
125    // add possibly beneficial buffs to plr for zone
126    itr->second->HandlePlayerEnterZone(plr, zoneid);
127    plr->SendInitWorldStates();
128    sLog.outDebug("Player %u entered outdoorpvp id %u",plr->GetGUIDLow(), itr->second->GetTypeId());
129}
130
131void OutdoorPvPMgr::HandlePlayerLeaveZone(Player *plr, uint32 zoneid)
132{
133    OutdoorPvPMap::iterator itr = m_OutdoorPvPMap.find(zoneid);
134    if(itr == m_OutdoorPvPMap.end())
135    {
136        // no handle for this zone, return
137        return;
138    }
139    // inform the OutdoorPvP class of the leaving, it should remove the player from all objectives
140    itr->second->HandlePlayerLeaveZone(plr, zoneid);
141    sLog.outDebug("Player %u left outdoorpvp id %u",plr->GetGUIDLow(), itr->second->GetTypeId());
142}
143
144OutdoorPvP * OutdoorPvPMgr::GetOutdoorPvPToZoneId(uint32 zoneid)
145{
146    OutdoorPvPMap::iterator itr = m_OutdoorPvPMap.find(zoneid);
147    if(itr == m_OutdoorPvPMap.end())
148    {
149        // no handle for this zone, return
150        return NULL;
151    }
152    return itr->second;
153}
154
155void OutdoorPvPMgr::Update(uint32 diff)
156{
157    for(OutdoorPvPSet::iterator itr = m_OutdoorPvPSet.begin(); itr != m_OutdoorPvPSet.end(); ++itr)
158    {
159        (*itr)->Update(diff);
160    }
161}
162
163bool OutdoorPvPMgr::HandleCustomSpell(Player *plr, uint32 spellId, GameObject * go)
164{
165    for(OutdoorPvPSet::iterator itr = m_OutdoorPvPSet.begin(); itr != m_OutdoorPvPSet.end(); ++itr)
166    {
167        if((*itr)->HandleCustomSpell(plr,spellId,go))
168            return true;
169    }
170    return false;
171}
172
173bool OutdoorPvPMgr::HandleOpenGo(Player *plr, uint64 guid)
174{
175    for(OutdoorPvPSet::iterator itr = m_OutdoorPvPSet.begin(); itr != m_OutdoorPvPSet.end(); ++itr)
176    {
177        if((*itr)->HandleOpenGo(plr,guid))
178            return true;
179    }
180    return false;
181}
182
183bool OutdoorPvPMgr::HandleCaptureCreaturePlayerMoveInLos(Player * plr, Creature * c)
184{
185    for(OutdoorPvPSet::iterator itr = m_OutdoorPvPSet.begin(); itr != m_OutdoorPvPSet.end(); ++itr)
186    {
187        if((*itr)->HandleCaptureCreaturePlayerMoveInLos(plr,c))
188            return true;
189    }
190    return false;
191}
192
193void OutdoorPvPMgr::HandleGossipOption(Player *plr, uint64 guid, uint32 gossipid)
194{
195    for(OutdoorPvPSet::iterator itr = m_OutdoorPvPSet.begin(); itr != m_OutdoorPvPSet.end(); ++itr)
196    {
197        if((*itr)->HandleGossipOption(plr,guid,gossipid))
198            return;
199    }
200}
201
202bool OutdoorPvPMgr::CanTalkTo(Player * plr, Creature * c, GossipOption & gso)
203{
204    for(OutdoorPvPSet::iterator itr = m_OutdoorPvPSet.begin(); itr != m_OutdoorPvPSet.end(); ++itr)
205    {
206        if((*itr)->CanTalkTo(plr,c,gso))
207            return true;
208    }
209    return false;
210}
211
212void OutdoorPvPMgr::HandleDropFlag(Player *plr, uint32 spellId)
213{
214    for(OutdoorPvPSet::iterator itr = m_OutdoorPvPSet.begin(); itr != m_OutdoorPvPSet.end(); ++itr)
215    {
216        if((*itr)->HandleDropFlag(plr,spellId))
217            return;
218    }
219}
Note: See TracBrowser for help on using the browser.