aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormaximius <none@none>2009-10-13 23:04:11 -0700
committermaximius <none@none>2009-10-13 23:04:11 -0700
commit075989a8a401ef09d334a149d7d7b4086ff564ae (patch)
tree459562d9755577cbeb2193a19eae65af7036cd64
parent832159de12964f450d535130856ce213631b5872 (diff)
*Wintergrasp: Set Faction on workshop capture + GO check faction fix, by Spp
--HG-- branch : trunk
-rw-r--r--src/game/SpellEffects.cpp6
-rw-r--r--src/game/Wintergrasp.cpp29
-rw-r--r--src/game/Wintergrasp.h3
3 files changed, 12 insertions, 26 deletions
diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp
index 465730eaab6..573ff7acfcb 100644
--- a/src/game/SpellEffects.cpp
+++ b/src/game/SpellEffects.cpp
@@ -7043,13 +7043,9 @@ void Spell::EffectWMODamage(uint32 /*i*/)
if(!caster)
return;
- const GameObjectInfo *gInfo = objmgr.GetGameObjectInfo(gameObjTarget->GetEntry());
- if (!gInfo)
- return;
-
FactionTemplateEntry const *casterft, *goft;
casterft = caster->getFactionTemplateEntry();
- goft = sFactionTemplateStore.LookupEntry(gInfo->faction);
+ goft = sFactionTemplateStore.LookupEntry(gameObjTarget->GetUInt32Value(GAMEOBJECT_FACTION));
// Do not allow to damage GO's of friendly factions (ie: Wintergrasp Walls)
if (casterft && goft && !casterft->IsFriendlyTo(*goft))
gameObjTarget->TakenDamage((uint32)damage);
diff --git a/src/game/Wintergrasp.cpp b/src/game/Wintergrasp.cpp
index 09c7e11e301..40f8dfc220d 100644
--- a/src/game/Wintergrasp.cpp
+++ b/src/game/Wintergrasp.cpp
@@ -630,24 +630,7 @@ bool OPvPWintergrasp::UpdateCreatureInfo(Creature *creature) const
bool OPvPWintergrasp::UpdateGameObjectInfo(GameObject *go) const
{
-/*
- switch(go->GetEntry())
- {
- // Defender's Portal
- case 190763:
- go->SetUInt32Value(GAMEOBJECT_FACTION, WintergraspFaction[m_defender]);
- return true;
- // Titan relic
- case 192829:
- go->SetUInt32Value(GAMEOBJECT_FACTION, WintergraspFaction[OTHER_TEAM(m_defender)]);
- return true;
- }
-*/
- const GameObjectInfo *gInfo = objmgr.GetGameObjectInfo(go->GetEntry());
- if (!gInfo)
- return false;
-
- switch(gInfo->displayId)
+ switch(go->GetGOInfo()->displayId)
{
case 8165: // Wintergrasp Keep Door
case 7877: // Wintergrasp Fortress Wall
@@ -656,12 +639,18 @@ bool OPvPWintergrasp::UpdateGameObjectInfo(GameObject *go) const
case 7909: // Wintergrasp Wall
case 8244: // Defender's Portal - Vehicle Teleporter
go->SetUInt32Value(GAMEOBJECT_FACTION, WintergraspFaction[m_defender]);
- return true;
+ return true;
case 7900: // Flamewatch Tower - Shadowsight Tower - Winter's Edge Tower
case 7967: // Titan relic
go->SetUInt32Value(GAMEOBJECT_FACTION, WintergraspFaction[OTHER_TEAM(m_defender)]);
return true;
-// case 8208: // Goblin Workshop
+ case 8208: // Goblin Workshop
+ SiegeWorkshop *workshop = GetWorkshopByGOGuid(go->GetGUID());
+ if (workshop)
+ {
+ go->SetUInt32Value(GAMEOBJECT_FACTION, WintergraspFaction[workshop->m_buildingState->GetTeam()]);
+ return true;
+ }
}
// Note: this is only for test, still need db support
diff --git a/src/game/Wintergrasp.h b/src/game/Wintergrasp.h
index d7371cb3bb9..b2a293b5f1e 100644
--- a/src/game/Wintergrasp.h
+++ b/src/game/Wintergrasp.h
@@ -25,7 +25,7 @@
#define POS_X_CENTER 4700
#define MAX_VEHICLE_PER_WORKSHOP 4
-const uint32 WintergraspFaction[2] = {1732, 1735};
+const uint32 WintergraspFaction[3] = {1732, 1735, 35};
const uint32 WG_MARK_OF_HONOR = 43589;
const uint32 VehNumWorldState[2] = {3680,3490};
const uint32 MaxVehNumWorldState[2] = {3681,3491};
@@ -155,6 +155,7 @@ struct BuildingState
if(graveTeam)
*graveTeam = TeamId2Team[t];
}
+ GameObject * GetBuilding() { return building; }
private:
TeamId team;
};