aboutsummaryrefslogtreecommitdiff
path: root/src/game/Wintergrasp.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/Wintergrasp.cpp')
-rw-r--r--src/game/Wintergrasp.cpp76
1 files changed, 37 insertions, 39 deletions
diff --git a/src/game/Wintergrasp.cpp b/src/game/Wintergrasp.cpp
index 05cfc75d350..af88e569b6a 100644
--- a/src/game/Wintergrasp.cpp
+++ b/src/game/Wintergrasp.cpp
@@ -201,8 +201,8 @@ bool OPvPWintergrasp::SetupOutdoorPvP()
continue;
}
- SiegeWorkshop *workshop = new SiegeWorkshop(this, m_buildingStates[guid]);
- if(!workshop->SetCapturePointData(capturePointEntry, goData->mapid, goData->posX, goData->posY, goData->posZ))
+ SiegeWorkshop *workshop = new SiegeWorkshop(this, m_buildingStates[guid]);
+ if(!workshop->SetCapturePointData(capturePointEntry, goData->mapid, goData->posX + 40 * cos(goData->orientation + M_PI / 2), goData->posY + 40 * sin(goData->orientation + M_PI / 2), goData->posZ))
{
delete workshop;
sLog.outError("Cannot add capture point!");
@@ -261,7 +261,8 @@ void OPvPWintergrasp::ProcessEvent(GameObject *obj, uint32 eventId)
{
if(obj->HasFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED))
itr->second->damageState = DAMAGE_DAMAGED;
- else
+ else if(obj->HasFlag(GAMEOBJECT_FLAGS, GO_FLAG_DESTROYED)
+ && itr->second->damageState != DAMAGE_DESTROYED)
{
itr->second->damageState = DAMAGE_DESTROYED;
@@ -280,7 +281,6 @@ void OPvPWintergrasp::ProcessEvent(GameObject *obj, uint32 eventId)
void OPvPWintergrasp::ModifyWorkshopCount(TeamId team, bool add)
{
- return;
if(add)
++m_workshopCount[team];
else if(m_workshopCount[team])
@@ -441,11 +441,14 @@ void OPvPWintergrasp::RebuildAllBuildings()
else
itr->second->health = 0;
+ if(itr->second->damageState == DAMAGE_DESTROYED)
+ {
+ if(itr->second->type == BUILDING_WORKSHOP)
+ ModifyWorkshopCount(itr->second->team, true);
+ }
+
itr->second->damageState = DAMAGE_INTACT;
itr->second->team = m_defender == TEAM_ALLIANCE ? OTHER_TEAM(itr->second->defaultTeam) : itr->second->defaultTeam;
-
- if(itr->second->type == BUILDING_WORKSHOP)
- ModifyWorkshopCount(itr->second->team, true);
}
}
@@ -821,43 +824,30 @@ void SiegeWorkshop::SetTeamByBuildingState()
m_State = OBJECTIVESTATE_NEUTRAL;
}
- // this will force ChangeState to update workshop count
- m_buildingState->team = TEAM_NEUTRAL;
+ if(m_team != m_buildingState->team)
+ {
+ TeamId oldTeam = m_team;
+ m_team = m_buildingState->team;
+ ChangeTeam(oldTeam);
+ }
- ChangeState();
SendChangePhase();
}
-void SiegeWorkshop::ChangeState()
+void SiegeWorkshop::ChangeTeam(TeamId oldTeam)
{
uint32 entry = 0;
- if(m_State == OBJECTIVESTATE_ALLIANCE) // to do m_buildingState->team == TEAM_ALLIANCE;
- {
- if(m_buildingState->team != TEAM_ALLIANCE)
- {
- if(m_buildingState->team == TEAM_HORDE)
- m_wintergrasp->ModifyWorkshopCount(TEAM_HORDE, false);
- m_buildingState->team = TEAM_ALLIANCE;
- m_wintergrasp->ModifyWorkshopCount(TEAM_ALLIANCE, true);
- }
- entry = CRE_ENG_A;
- }
- else if(m_State == OBJECTIVESTATE_HORDE)
+ if(oldTeam != TEAM_NEUTRAL)
+ m_wintergrasp->ModifyWorkshopCount(oldTeam, false);
+ if(m_team != TEAM_NEUTRAL)
{
- if(m_buildingState->team != TEAM_HORDE)
- {
- if(m_buildingState->team == TEAM_ALLIANCE)
- m_wintergrasp->ModifyWorkshopCount(TEAM_ALLIANCE, false);
- m_buildingState->team = TEAM_HORDE;
- m_wintergrasp->ModifyWorkshopCount(TEAM_HORDE, true);
- }
- entry = CRE_ENG_H;
+ entry = m_team == TEAM_ALLIANCE ? CRE_ENG_A : CRE_ENG_H;
+ m_wintergrasp->ModifyWorkshopCount(m_team, true);
}
- else
- return;
- *m_engEntry = entry;
+ GameObject::SetGoArtKit(CapturePointArtKit[m_team], m_capturePoint, m_capturePointGUID);
+ m_buildingState->team = m_team;
// TODO: this may be sent twice
m_wintergrasp->BroadcastStateChange(m_buildingState);
@@ -869,15 +859,23 @@ void SiegeWorkshop::ChangeState()
return;
}*/
- if(m_engineer)
+ if(entry)
{
- m_engineer->SetOriginalEntry(entry);
- if(entry != m_engineer->GetEntry() || !m_engineer->isAlive())
+ *m_engEntry = entry;
+
+ if(m_engineer)
{
- m_engineer->Respawn(true);
- DespawnAllVehicles();
+ m_engineer->SetOriginalEntry(entry);
+ if(entry != m_engineer->GetEntry() || !m_engineer->isAlive())
+ {
+ m_engineer->Respawn(true);
+ DespawnAllVehicles();
+ }
+ m_engineer->SetVisibility(VISIBILITY_ON);
}
}
+ else if(m_engineer)
+ m_engineer->SetVisibility(VISIBILITY_OFF);
sLog.outDebug("Wintergrasp workshop now belongs to %u.", (uint32)m_buildingState->team);
}