Core/BattlegroundIC:

* Fixed Catapults
* Fixed Graveyards
* Fixed Cannons on Gunships
* More Blizzlike Teleport to Gunship
* Fixed Gunship Teleport to Hangar
* Fixed Teleporters

Closes #13052
Fixes #12323 and #9557
This commit is contained in:
Golrag
2014-10-18 21:33:21 +01:00
committed by DDuarte
parent ef4043436b
commit 5ede64260c
7 changed files with 643 additions and 364 deletions

View File

@@ -0,0 +1,105 @@
SET @CGUID := 74976;
SET @OGUID := 7087;
DELETE FROM `creature` WHERE (`guid` BETWEEN @CGUID+0 AND @CGUID+23) OR (`id` IN (34929, 34935)) OR (`map` IN (641, 642));
INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `modelid`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES
-- Goblin Engineering Crew
(@CGUID+0, 36162, 642, 3, 1, 0, -22.16258, 11.19428, 35.09622, 3.961897, 7200, 0, 0),
(@CGUID+1, 36162, 642, 3, 1, 0, -18.38382, -11.11724, 34.91919, 3.089233, 7200, 0, 0),
-- Kor'kron Reaver
(@CGUID+2, 36164, 642, 3, 1, 0, 28.44413, 18.95949, 35.95979, 2.234021, 7200, 0, 0),
(@CGUID+3, 36164, 642, 3, 1, 0, 37.40386, -8.937434, 30.1788, 6.265732, 7200, 0, 0),
(@CGUID+4, 36164, 642, 3, 1, 0, 6.56619, 7.988725, 34.4726, 3.07178, 7200, 0, 0),
(@CGUID+5, 36164, 642, 3, 1, 0, 37.47043, 8.731059, 30.17881, 6.003932, 7200, 0, 0),
(@CGUID+6, 36164, 642, 3, 1, 0, 28.40881, -19.30474, 35.98264, 4.153883, 7200, 0, 0),
(@CGUID+7, 36164, 642, 3, 1, 0, 17.52033, -14.02618, 35.07203, 3.07178, 7200, 0, 0),
(@CGUID+8, 36164, 642, 3, 1, 0, 6.645779, -8.052721, 34.47524, 3.07178, 7200, 0, 0),
(@CGUID+9, 36164, 642, 3, 1, 0, 16.94911, 14.93277, 35.08105, 3.071779, 7200, 0, 0),
(@CGUID+10, 36164, 642, 3, 1, 0, -31.12894, -19.48676, 34.24918, 4.153883, 7200, 0, 0),
(@CGUID+11, 36164, 642, 3, 1, 0, -30.18002, 17.94827, 34.34239, 2.234021, 7200, 0, 0),
-- 7th Legion Marine
(@CGUID+12, 36166, 641, 3, 1, 0, -53.55445, 2.977596, 23.44318, 0.3316126, 7200, 0, 0),
(@CGUID+13, 36166, 641, 3, 1, 0, 17.0807, -7.109451, 20.5052, 3.124139, 7200, 0, 0),
(@CGUID+14, 36166, 641, 3, 1, 0, 49.93306, -7.458596, 40.16777, 3.979351, 7200, 0, 0),
(@CGUID+15, 36166, 641, 3, 1, 0, 50.20697, 8.003532, 40.16655, 2.530727, 7200, 0, 0),
(@CGUID+16, 36166, 641, 3, 1, 0, 39.78789, -38.58735, 25.11459, 3.979351, 7200, 0, 0),
(@CGUID+17, 36166, 641, 3, 1, 0, -17.57936, 4.24393, 20.84544, 3.12414, 7200, 0, 0),
(@CGUID+18, 36166, 641, 3, 1, 0, 16.84876, 6.618541, 20.51171, 3.12414, 7200, 0, 0),
(@CGUID+19, 36166, 641, 3, 1, 0, -61.94096, 0.089971, 23.56898, 3.124139, 7200, 0, 0),
(@CGUID+20, 36166, 641, 3, 1, 0, -17.59357, -4.383727, 20.84574, 3.12414, 7200, 0, 0),
(@CGUID+21, 36166, 641, 3, 1, 0, -53.6908, -3.682069, 23.44308, 6.056293, 7200, 0, 0),
-- 7th Legion Deckhand
(@CGUID+22, 36165, 641, 3, 1, 0, -35.88269, 3.162697, 20.53507, 1.658063, 7200, 0, 0),
(@CGUID+23, 36165, 641, 3, 1, 0, -36.38501, -7.325379, 20.44885, 1.653776, 7200, 0, 0),
-- Horde Gunship Cannon
(@CGUID+24, 34935, 642, 3, 1, 0, -21.40090, -31.34303, 34.25633, 4.677482, 7200, 0, 0),
(@CGUID+25, 34935, 642, 3, 1, 0, -12.10641, -31.96964, 34.46390, 4.625123, 7200, 0, 0),
(@CGUID+26, 34935, 642, 3, 1, 0, -2.487608, -31.98854, 34.92170, 4.834562, 7200, 0, 0),
(@CGUID+27, 34935, 642, 3, 1, 0, 19.463670, -30.79399, 36.30841, 4.852015, 7200, 0, 0),
(@CGUID+28, 34935, 642, 3, 1, 0, 10.266400, -32.07130, 35.81895, 4.852015, 7200, 0, 0),
-- Alliance Gunship Cannon
(@CGUID+29, 34929, 641, 3, 1, 0, -12.47339, 25.72650, 21.67813, 1.742887, 7200, 0, 0),
(@CGUID+30, 34929, 641, 3, 1, 0, -41.71228, 22.90814, 22.60103, 1.902409, 7200, 0, 0),
(@CGUID+31, 34929, 641, 3, 1, 0, -2.811304, 25.78116, 21.69148, 1.658063, 7200, 0, 0),
(@CGUID+32, 34929, 641, 3, 1, 0, -21.44925, 25.39890, 21.66956, 1.658063, 7200, 0, 0),
(@CGUID+33, 34929, 641, 3, 1, 0, -31.03540, 24.86197, 21.70274, 1.658063, 7200, 0, 0);
DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+3;
INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES
(@OGUID+0, 195705, 641, 3, 1, 16.48109, -0.00539, 20.41618, 3.036838, 0, 0, 0, 1, 7200, 255, 0),
(@OGUID+1, 195371, 641, 3, 1, 16.47634, 0.018369, 20.41617, 3.036838, 0, 0, 0, 1, 7200, 255, 1),
(@OGUID+2, 195706, 642, 3, 1, 12.28939, 0.081029, 34.6497, 3.159062, 0, 0, 0, 1, 7200, 255, 0),
(@OGUID+3, 196413, 642, 3, 1, 12.31993, 0.096332, 34.65082, 3.159062, 0, 0, 0, 1, 7200, 255, 1);
-- Template Updates
-- Teleporter
UPDATE `gameobject_template` SET `flags`=48 WHERE `entry` IN (195313, 195314);
-- Horde Gunship Cannon
UPDATE `creature_template` SET `difficulty_entry_1`=35427 WHERE `entry`=34935;
UPDATE `creature_template` SET `spell1`=66529, `unit_flags`=33570816 WHERE `entry`=35427;
-- Alliance Gunship Cannon
UPDATE `creature_template` SET `spell1`=66518, `unit_flags`=33570816 WHERE `entry`=35410;
-- Goblin Engineering Crew
UPDATE `creature_template` SET `minlevel`=80, `maxlevel`=80, `faction`=1978 WHERE `entry`=36162;
-- 7th Legion Deckhand
UPDATE `creature_template` SET `minlevel`=80, `maxlevel`=80, `faction`=1973 WHERE `entry`=36165;
-- Template Addon
DELETE FROM `creature_template_addon` WHERE `entry` IN (36162, 36165);
INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
(36162, 0, 0, 0x0, 0x101, 0, ''),
(36165, 0, 0, 0x0, 0x101, 0, '');
-- Spell Target Positions
DELETE FROM `spell_target_position` WHERE `id`=66899;
INSERT INTO `spell_target_position` VALUES
(66899,0, 628, 747, -1075, 135, 0, 18414);
-- Spell linked spell
DELETE FROM `spell_linked_spell` WHERE `spell_trigger`=66899;
INSERT INTO `spell_linked_spell` (`spell_trigger`, `spell_effect`, `type`, `comment`) VALUES
(66899, -66656, 0, 'On cast 66899 (Gunship Portal Click (to Hangar)) - Remove 66656 (Parachute)');
-- conditions
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceGroup`=1 AND (`SourceEntry`=66637 OR `SourceEntry`=66630) AND `SourceId`=0 AND `ElseGroup`=0 AND `ConditionTypeOrReference`=31 AND `ConditionTarget`=0 AND `ConditionValue1`=3 AND `ConditionValue2`=34984 AND `ConditionValue3`=0;
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `ConditionTypeOrReference`, `ConditionValue1`, `ConditionValue2`) VALUES
(13, 1, 66630, 31, 3, 34984),
(13, 1, 66637, 31, 3, 34984);
-- Texts
DELETE FROM `creature_text` WHERE `entry` IN (35003, 34960);
INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextID`, `comment`) VALUES
(35003, 0, 0, 'All aboard the gunship! Man the guns!', 14, 0, 100, 0, 0, 0, 35241, 'Horde Gunship Captain'),
(34960, 0, 0, 'All aboard the gunship! Man the guns!', 14, 0, 100, 0, 0, 0, 35228, 'Alliance Gunship Captain');
-- Scripts
UPDATE `creature_template` SET `ScriptName`='npc_ioc_gunship_captain' WHERE `entry` IN (35003, 34960);

View File

@@ -35,6 +35,7 @@
#include "SpellAuras.h"
#include "Util.h"
#include "WorldPacket.h"
#include "Transport.h"
namespace Trinity
{
@@ -1315,7 +1316,7 @@ void Battleground::RelocateDeadPlayers(ObjectGuid guideGuid)
}
}
bool Battleground::AddObject(uint32 type, uint32 entry, float x, float y, float z, float o, float rotation0, float rotation1, float rotation2, float rotation3, uint32 /*respawnTime*/)
bool Battleground::AddObject(uint32 type, uint32 entry, float x, float y, float z, float o, float rotation0, float rotation1, float rotation2, float rotation3, uint32 /*respawnTime*/, GOState goState)
{
// If the assert is called, means that BgObjects must be resized!
ASSERT(type < BgObjects.size());
@@ -1328,7 +1329,7 @@ bool Battleground::AddObject(uint32 type, uint32 entry, float x, float y, float
// So we must create it specific for this instance
GameObject* go = new GameObject;
if (!go->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), entry, GetBgMap(),
PHASEMASK_NORMAL, x, y, z, o, rotation0, rotation1, rotation2, rotation3, 100, GO_STATE_READY))
PHASEMASK_NORMAL, x, y, z, o, rotation0, rotation1, rotation2, rotation3, 100, goState))
{
TC_LOG_ERROR("bg.battleground", "Battleground::AddObject: cannot create gameobject (entry: %u) for BG (map: %u, instance id: %u)!",
entry, m_MapId, m_InstanceID);
@@ -1367,9 +1368,9 @@ bool Battleground::AddObject(uint32 type, uint32 entry, float x, float y, float
return true;
}
bool Battleground::AddObject(uint32 type, uint32 entry, Position const& pos, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime /*= 0*/)
bool Battleground::AddObject(uint32 type, uint32 entry, Position const& pos, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime /*= 0*/, GOState goState /*= GO_STATE_READY*/)
{
return AddObject(type, entry, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), rotation0, rotation1, rotation2, rotation3, respawnTime);
return AddObject(type, entry, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), rotation0, rotation1, rotation2, rotation3, respawnTime, goState);
}
// Some doors aren't despawned so we cannot handle their closing in gameobject::update()
@@ -1448,7 +1449,7 @@ void Battleground::SpawnBGObject(uint32 type, uint32 respawntime)
}
}
Creature* Battleground::AddCreature(uint32 entry, uint32 type, float x, float y, float z, float o, TeamId /*teamId = TEAM_NEUTRAL*/, uint32 respawntime /*= 0*/)
Creature* Battleground::AddCreature(uint32 entry, uint32 type, float x, float y, float z, float o, TeamId /*teamId = TEAM_NEUTRAL*/, uint32 respawntime /*= 0*/, Transport* transport)
{
// If the assert is called, means that BgCreatures must be resized!
ASSERT(type < BgCreatures.size());
@@ -1457,7 +1458,19 @@ Creature* Battleground::AddCreature(uint32 entry, uint32 type, float x, float y,
if (!map)
return NULL;
if (transport)
{
if (Creature* creature = transport->SummonPassenger(entry, { x, y, z, o }, TEMPSUMMON_MANUAL_DESPAWN))
{
BgCreatures[type] = creature->GetGUID();
return creature;
}
return NULL;
}
Creature* creature = new Creature();
if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, PHASEMASK_NORMAL, entry, x, y, z, o))
{
TC_LOG_ERROR("bg.battleground", "Battleground::AddCreature: cannot create creature (entry: %u) for BG (map: %u, instance id: %u)!",
@@ -1491,9 +1504,9 @@ Creature* Battleground::AddCreature(uint32 entry, uint32 type, float x, float y,
return creature;
}
Creature* Battleground::AddCreature(uint32 entry, uint32 type, Position const& pos, TeamId teamId /*= TEAM_NEUTRAL*/, uint32 respawntime /*= 0*/)
Creature* Battleground::AddCreature(uint32 entry, uint32 type, Position const& pos, TeamId teamId /*= TEAM_NEUTRAL*/, uint32 respawntime /*= 0*/, Transport* transport)
{
return AddCreature(entry, type, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), teamId, respawntime);
return AddCreature(entry, type, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), teamId, respawntime, transport);
}
bool Battleground::DelCreature(uint32 type)

View File

@@ -25,6 +25,7 @@
#include "DBCEnums.h"
#include "WorldPacket.h"
#include "Object.h"
#include "GameObject.h"
class Creature;
class GameObject;
@@ -430,10 +431,10 @@ class Battleground
GuidVector BgObjects;
GuidVector BgCreatures;
void SpawnBGObject(uint32 type, uint32 respawntime);
virtual bool AddObject(uint32 type, uint32 entry, float x, float y, float z, float o, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime = 0);
bool AddObject(uint32 type, uint32 entry, Position const& pos, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime = 0);
virtual Creature* AddCreature(uint32 entry, uint32 type, float x, float y, float z, float o, TeamId teamId = TEAM_NEUTRAL, uint32 respawntime = 0);
Creature* AddCreature(uint32 entry, uint32 type, Position const& pos, TeamId teamId = TEAM_NEUTRAL, uint32 respawntime = 0);
virtual bool AddObject(uint32 type, uint32 entry, float x, float y, float z, float o, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime = 0, GOState goState = GO_STATE_READY);
bool AddObject(uint32 type, uint32 entry, Position const& pos, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime = 0, GOState goState = GO_STATE_READY);
virtual Creature* AddCreature(uint32 entry, uint32 type, float x, float y, float z, float o, TeamId teamId = TEAM_NEUTRAL, uint32 respawntime = 0, Transport* transport = NULL);
Creature* AddCreature(uint32 entry, uint32 type, Position const& pos, TeamId teamId = TEAM_NEUTRAL, uint32 respawntime = 0, Transport* transport = NULL);
bool DelCreature(uint32 type);
bool DelObject(uint32 type);
virtual bool AddSpiritGuide(uint32 type, float x, float y, float z, float o, TeamId teamId = TEAM_NEUTRAL);

View File

@@ -26,11 +26,12 @@
#include "Vehicle.h"
#include "Transport.h"
#include "WorldSession.h"
#include "ScriptedCreature.h"
BattlegroundIC::BattlegroundIC()
{
BgObjects.resize(MAX_NORMAL_GAMEOBJECTS_SPAWNS + MAX_AIRSHIPS_SPAWNS + MAX_HANGAR_TELEPORTERS_SPAWNS + MAX_FORTRESS_TELEPORTERS_SPAWNS);
BgCreatures.resize(MAX_NORMAL_NPCS_SPAWNS + MAX_WORKSHOP_SPAWNS + MAX_DOCKS_SPAWNS + MAX_SPIRIT_GUIDES_SPAWNS);
BgObjects.resize(MAX_NORMAL_GAMEOBJECTS_SPAWNS + MAX_AIRSHIPS_SPAWNS + MAX_HANGAR_TELEPORTERS_SPAWNS + MAX_FORTRESS_TELEPORTERS_SPAWNS + MAX_HANGAR_TELEPORTER_EFFECTS_SPAWNS + MAX_FORTRESS_TELEPORTER_EFFECTS_SPAWNS);
BgCreatures.resize(MAX_NORMAL_NPCS_SPAWNS + MAX_WORKSHOP_SPAWNS + MAX_DOCKS_SPAWNS + MAX_SPIRIT_GUIDES_SPAWNS + MAX_HANGAR_NPCS_SPAWNS);
StartMessageIds[BG_STARTING_EVENT_FIRST] = LANG_BG_IC_START_TWO_MINUTES;
StartMessageIds[BG_STARTING_EVENT_SECOND] = LANG_BG_IC_START_ONE_MINUTE;
@@ -68,38 +69,8 @@ void BattlegroundIC::HandlePlayerResurrect(Player* player)
player->CastSpell(player, SPELL_OIL_REFINERY, true);
}
void BattlegroundIC::DoAction(uint32 action, ObjectGuid var)
{
if (action != ACTION_TELEPORT_PLAYER_TO_TRANSPORT)
return;
if (!gunshipAlliance || !gunshipHorde)
return;
Player* player = ObjectAccessor::FindPlayer(var);
if (!player)
return;
(player->GetTeamId() == TEAM_ALLIANCE ? gunshipAlliance : gunshipHorde)->AddPassenger(player);
player->m_movementInfo.transport.pos.m_positionX = TransportMovementInfo.GetPositionX();
player->m_movementInfo.transport.pos.m_positionY = TransportMovementInfo.GetPositionY();
player->m_movementInfo.transport.pos.m_positionZ = TransportMovementInfo.GetPositionZ();
if (player->TeleportTo(GetMapId(), TeleportToTransportPosition.GetPositionX(),
TeleportToTransportPosition.GetPositionY(),
TeleportToTransportPosition.GetPositionZ(),
TeleportToTransportPosition.GetOrientation(),
TELE_TO_NOT_LEAVE_TRANSPORT))
{
player->CastSpell(player, SPELL_PARACHUTE, true); // this must be changed, there is a trigger in each transport that casts the spell.
player->CastSpell(player, SPELL_SLOW_FALL, true);
}
}
void BattlegroundIC::PostUpdateImpl(uint32 diff)
{
if (GetStatus() != STATUS_IN_PROGRESS)
return;
@@ -109,9 +80,17 @@ void BattlegroundIC::PostUpdateImpl(uint32 diff)
{
GetBGObject(BG_IC_GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR01)->RemoveFromWorld();
GetBGObject(BG_IC_GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR01)->RemoveFromWorld();
GetBGObject(BG_IC_GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR02)->RemoveFromWorld();
GetBGObject(BG_IC_GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR02)->RemoveFromWorld();
GetBGObject(BG_IC_GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR03)->RemoveFromWorld();
GetBGObject(BG_IC_GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR03)->RemoveFromWorld();
GetBGObject(BG_IC_GO_ALLIANCE_GATE_3)->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED); // Alliance door
GetBGObject(BG_IC_GO_HORDE_GATE_1)->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED); // Horde door
GetBGObject(BG_IC_GO_ALLIANCE_GATE_1)->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED);
GetBGObject(BG_IC_GO_HORDE_GATE_1)->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED);
GetBGObject(BG_IC_GO_ALLIANCE_GATE_2)->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED);
GetBGObject(BG_IC_GO_HORDE_GATE_2)->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED);
GetBGObject(BG_IC_GO_ALLIANCE_GATE_3)->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED);
GetBGObject(BG_IC_GO_HORDE_GATE_3)->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED);
doorsClosed = true;
} else closeFortressDoorsTimer -= diff;
@@ -240,11 +219,6 @@ void BattlegroundIC::PostUpdateImpl(uint32 diff)
void BattlegroundIC::StartingEventCloseDoors()
{
// Show Full Gate Displays
GetBGObject(BG_IC_GO_ALLIANCE_GATE_1)->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED);
GetBGObject(BG_IC_GO_ALLIANCE_GATE_2)->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED);
GetBGObject(BG_IC_GO_HORDE_GATE_2)->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED);
GetBGObject(BG_IC_GO_HORDE_GATE_3)->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED);
}
void BattlegroundIC::StartingEventOpenDoors()
@@ -252,6 +226,10 @@ void BattlegroundIC::StartingEventOpenDoors()
//after 20 seconds they should be despawned
DoorOpen(BG_IC_GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR01);
DoorOpen(BG_IC_GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR01);
DoorOpen(BG_IC_GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR02);
DoorOpen(BG_IC_GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR02);
DoorOpen(BG_IC_GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR03);
DoorOpen(BG_IC_GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR03);
DoorOpen(BG_IC_GO_DOODAD_HU_PORTCULLIS01_1);
DoorOpen(BG_IC_GO_DOODAD_HU_PORTCULLIS01_2);
@@ -259,15 +237,10 @@ void BattlegroundIC::StartingEventOpenDoors()
DoorOpen(BG_IC_GO_DOODAD_VR_PORTCULLIS01_2);
for (uint8 i = 0; i < MAX_FORTRESS_TELEPORTERS_SPAWNS; ++i)
{
if (!AddObject(BG_IC_Teleporters[i].type, BG_IC_Teleporters[i].entry,
BG_IC_Teleporters[i].x, BG_IC_Teleporters[i].y,
BG_IC_Teleporters[i].z, BG_IC_Teleporters[i].o,
0, 0, 0, 0, RESPAWN_ONE_DAY))
{
TC_LOG_ERROR("bg.battleground", "Isle of Conquest | Starting Event Open Doors: There was an error spawning gameobject %u", BG_IC_Teleporters[i].entry);
}
}
GetBGObject(BG_IC_Teleporters[i].type)->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
for (uint8 i = 0; i < MAX_FORTRESS_TELEPORTER_EFFECTS_SPAWNS; ++i)
GetBGObject(BG_IC_TeleporterEffects[i].type)->SetGoState(GO_STATE_ACTIVE);
}
void BattlegroundIC::AddPlayer(Player* player)
@@ -335,32 +308,44 @@ bool BattlegroundIC::SetupBattleground()
{
for (uint8 i = 0; i < MAX_NORMAL_GAMEOBJECTS_SPAWNS; ++i)
{
if (!AddObject(BG_IC_ObjSpawnlocs[i].type, BG_IC_ObjSpawnlocs[i].entry,
BG_IC_ObjSpawnlocs[i].x, BG_IC_ObjSpawnlocs[i].y,
BG_IC_ObjSpawnlocs[i].z, BG_IC_ObjSpawnlocs[i].o,
0, 0, 0, 0, RESPAWN_ONE_DAY))
if (!AddObject(BG_IC_ObjSpawnlocs[i].type, BG_IC_ObjSpawnlocs[i].entry, BG_IC_ObjSpawnlocs[i].x, BG_IC_ObjSpawnlocs[i].y, BG_IC_ObjSpawnlocs[i].z, BG_IC_ObjSpawnlocs[i].o, 0, 0, 0, 0, RESPAWN_ONE_DAY))
{
TC_LOG_ERROR("bg.battleground", "Isle of Conquest: There was an error spawning gameobject %u", BG_IC_ObjSpawnlocs[i].entry);
return false;
}
}
for (uint8 i = 0; i < MAX_FORTRESS_TELEPORTERS_SPAWNS; ++i)
{
if (!AddObject(BG_IC_Teleporters[i].type, BG_IC_Teleporters[i].entry, BG_IC_Teleporters[i].x, BG_IC_Teleporters[i].y, BG_IC_Teleporters[i].z, BG_IC_Teleporters[i].o, 0, 0, 0, 0, RESPAWN_ONE_DAY))
{
TC_LOG_ERROR("bg.battleground", "Isle of Conquest | Starting Event Open Doors: There was an error spawning gameobject %u", BG_IC_Teleporters[i].entry);
return false;
}
}
for (uint8 i = 0; i < MAX_FORTRESS_TELEPORTER_EFFECTS_SPAWNS; ++i)
{
if (!AddObject(BG_IC_TeleporterEffects[i].type, BG_IC_TeleporterEffects[i].entry, BG_IC_TeleporterEffects[i].x, BG_IC_TeleporterEffects[i].y, BG_IC_TeleporterEffects[i].z, BG_IC_TeleporterEffects[i].o, 0, 0, 0, 0, RESPAWN_ONE_DAY))
{
TC_LOG_ERROR("bg.battleground", "Isle of Conquest | Starting Event Open Doors: There was an error spawning gameobject %u", BG_IC_Teleporters[i].entry);
return false;
}
}
for (uint8 i = 2; i < MAX_NORMAL_NPCS_SPAWNS; ++i)
{
if (!AddCreature(BG_IC_NpcSpawnlocs[i].entry, BG_IC_NpcSpawnlocs[i].type,
BG_IC_NpcSpawnlocs[i].x, BG_IC_NpcSpawnlocs[i].y,
BG_IC_NpcSpawnlocs[i].z, BG_IC_NpcSpawnlocs[i].o,
BG_IC_NpcSpawnlocs[i].team, RESPAWN_ONE_DAY))
if (!AddCreature(BG_IC_NpcSpawnlocs[i].entry, BG_IC_NpcSpawnlocs[i].type, BG_IC_NpcSpawnlocs[i].x, BG_IC_NpcSpawnlocs[i].y, BG_IC_NpcSpawnlocs[i].z, BG_IC_NpcSpawnlocs[i].o, BG_IC_NpcSpawnlocs[i].team, RESPAWN_ONE_DAY))
{
TC_LOG_ERROR("bg.battleground", "Isle of Conquest: There was an error spawning creature %u", BG_IC_NpcSpawnlocs[i].entry);
return false;
}
}
if (!AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+5, BG_IC_SpiritGuidePos[5], TEAM_ALLIANCE)
|| !AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+6, BG_IC_SpiritGuidePos[6], TEAM_HORDE)
|| !AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+3, BG_IC_SpiritGuidePos[7], TEAM_ALLIANCE)
|| !AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+4, BG_IC_SpiritGuidePos[8], TEAM_HORDE))
if (!AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+3, BG_IC_SpiritGuidePos[5], TEAM_ALLIANCE)
|| !AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+4, BG_IC_SpiritGuidePos[6], TEAM_HORDE)
|| !AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+5, BG_IC_SpiritGuidePos[7], TEAM_ALLIANCE)
|| !AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+6, BG_IC_SpiritGuidePos[8], TEAM_HORDE))
{
TC_LOG_ERROR("bg.battleground", "Isle of Conquest: Failed to spawn initial spirit guide!");
return false;
@@ -379,9 +364,9 @@ bool BattlegroundIC::SetupBattleground()
gunshipAlliance->EnableMovement(false);
// setting correct factions for Keep Cannons
for (uint8 i = BG_IC_NPC_KEEP_CANNON_1; i < BG_IC_NPC_KEEP_CANNON_12; ++i)
for (uint8 i = BG_IC_NPC_KEEP_CANNON_1; i <= BG_IC_NPC_KEEP_CANNON_12; ++i)
GetBGCreature(i)->setFaction(BG_IC_Factions[0]);
for (uint8 i = BG_IC_NPC_KEEP_CANNON_13; i < BG_IC_NPC_KEEP_CANNON_25; ++i)
for (uint8 i = BG_IC_NPC_KEEP_CANNON_13; i <= BG_IC_NPC_KEEP_CANNON_25; ++i)
GetBGCreature(i)->setFaction(BG_IC_Factions[1]);
// correcting spawn time for keeps bombs
@@ -459,8 +444,7 @@ void BattlegroundIC::EventPlayerClickedOnFlag(Player* player, GameObject* target
nodePoint[i].gameobject_entry = nextBanner;
// this is just needed if the next banner is grey
if (nodePoint[i].banners[BANNER_A_CONTESTED] == nextBanner ||
nodePoint[i].banners[BANNER_H_CONTESTED] == nextBanner)
if (nodePoint[i].banners[BANNER_A_CONTESTED] == nextBanner || nodePoint[i].banners[BANNER_H_CONTESTED] == nextBanner)
{
nodePoint[i].timer = BANNER_STATE_CHANGE_TIME; // 1 minute for last change (real faction banner)
nodePoint[i].needChange = true;
@@ -478,9 +462,8 @@ void BattlegroundIC::EventPlayerClickedOnFlag(Player* player, GameObject* target
SendMessage2ToAll(LANG_BG_IC_TEAM_ASSAULTED_NODE_1, CHAT_MSG_BG_SYSTEM_NEUTRAL, player, nodePoint[i].string);
SendMessage2ToAll(LANG_BG_IC_TEAM_ASSAULTED_NODE_2, CHAT_MSG_BG_SYSTEM_NEUTRAL, player, nodePoint[i].string, (player->GetTeamId() == TEAM_ALLIANCE ? LANG_BG_IC_ALLIANCE : LANG_BG_IC_HORDE));
HandleContestedNodes(&nodePoint[i]);
} else if (nextBanner == nodePoint[i].banners[BANNER_A_CONTROLLED] ||
nextBanner == nodePoint[i].banners[BANNER_H_CONTROLLED])
// if we are going to spawn the definitve faction banner, we dont need the timer anymore
}
else if (nextBanner == nodePoint[i].banners[BANNER_A_CONTROLLED] || nextBanner == nodePoint[i].banners[BANNER_H_CONTROLLED]) // if we are going to spawn the definitve faction banner, we dont need the timer anymore
{
nodePoint[i].timer = BANNER_STATE_CHANGE_TIME;
nodePoint[i].needChange = false;
@@ -505,12 +488,6 @@ void BattlegroundIC::EventPlayerClickedOnFlag(Player* player, GameObject* target
GetBGObject(nodePoint[i].gameobject_type)->SetUInt32Value(GAMEOBJECT_FACTION, nodePoint[i].faction == TEAM_ALLIANCE ? BG_IC_Factions[1] : BG_IC_Factions[0]);
if (nodePoint[i].nodeType == NODE_TYPE_WORKSHOP)
{
DelObject(BG_IC_GO_SEAFORIUM_BOMBS_1);
DelObject(BG_IC_GO_SEAFORIUM_BOMBS_2);
}
UpdateNodeWorldState(&nodePoint[i]);
// we dont need iterating if we are here
// If the needChange bool was set true, we will handle the rest in the Update Map function.
@@ -573,11 +550,39 @@ void BattlegroundIC::HandleContestedNodes(ICNodePoint* nodePoint)
{
if (nodePoint->nodeType == NODE_TYPE_HANGAR)
{
if (gunshipAlliance && gunshipHorde)
(nodePoint->faction == TEAM_ALLIANCE ? gunshipHorde : gunshipAlliance)->EnableMovement(false);
if (gunshipAlliance && gunshipHorde)
(nodePoint->faction == TEAM_ALLIANCE ? gunshipHorde : gunshipAlliance)->EnableMovement(false);
for (uint8 u = BG_IC_GO_HANGAR_TELEPORTER_1; u < BG_IC_GO_HANGAR_TELEPORTER_3; ++u)
for (uint8 u = BG_IC_GO_HANGAR_TELEPORTER_1; u <= BG_IC_GO_HANGAR_TELEPORTER_3; ++u)
DelObject(u);
for (uint8 u = BG_IC_GO_HANGAR_TELEPORTER_EFFECT_1; u <= BG_IC_GO_HANGAR_TELEPORTER_EFFECT_3; ++u)
DelObject(u);
DelCreature(BG_IC_NPC_WORLD_TRIGGER_NOT_FLOATING);
for (uint8 u = 0; u < MAX_CAPTAIN_SPAWNS_PER_FACTION; ++u)
{
uint8 type = BG_IC_NPC_GUNSHIP_CAPTAIN_1 + u;
DelCreature(type);
}
std::list<Creature*> cannons;
if (nodePoint->faction == TEAM_HORDE)
gunshipAlliance->GetCreatureListWithEntryInGrid(cannons, NPC_ALLIANCE_GUNSHIP_CANNON, 150.0f);
else
gunshipHorde->GetCreatureListWithEntryInGrid(cannons, NPC_HORDE_GUNSHIP_CANNON, 150.0f);
for (Creature* cannon : cannons)
{
cannon->GetVehicleKit()->RemoveAllPassengers();
cannon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
}
}
else if (nodePoint->nodeType == NODE_TYPE_WORKSHOP)
{
DelObject(BG_IC_GO_SEAFORIUM_BOMBS_1);
DelObject(BG_IC_GO_SEAFORIUM_BOMBS_2);
}
}
@@ -592,26 +597,55 @@ void BattlegroundIC::HandleCapturedNodes(ICNodePoint* nodePoint, bool recapture)
switch (nodePoint->gameobject_type)
{
case BG_IC_GO_HANGAR_BANNER:
// all the players on the stopped transport should be teleported out
if (!gunshipAlliance || !gunshipHorde)
break;
for (uint8 u = 0; u < MAX_HANGAR_TELEPORTERS_SPAWNS; ++u)
{
uint8 type = BG_IC_GO_HANGAR_TELEPORTER_1+u;
if (!AddObject(type, (nodePoint->faction == TEAM_ALLIANCE ? GO_ALLIANCE_GUNSHIP_PORTAL : GO_HORDE_GUNSHIP_PORTAL),
BG_IC_HangarTeleporters[u], 0, 0, 0, 0, RESPAWN_ONE_DAY))
if (!gunshipAlliance || !gunshipHorde)
break;
std::list<Creature*> cannons;
if (nodePoint->faction == TEAM_ALLIANCE)
gunshipAlliance->GetCreatureListWithEntryInGrid(cannons, NPC_ALLIANCE_GUNSHIP_CANNON, 150.0f);
else
gunshipHorde->GetCreatureListWithEntryInGrid(cannons, NPC_HORDE_GUNSHIP_CANNON, 150.0f);
for (Creature* cannon : cannons)
cannon->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
for (uint8 u = 0; u < MAX_HANGAR_TELEPORTERS_SPAWNS; ++u)
{
TC_LOG_ERROR("bg.battleground", "Isle of Conquest: There was an error spawning a gunship portal. Type: %u", BG_IC_GO_HANGAR_TELEPORTER_1+u);
uint8 type = BG_IC_GO_HANGAR_TELEPORTER_1 + u;
if (!AddObject(type, (nodePoint->faction == TEAM_ALLIANCE ? GO_ALLIANCE_GUNSHIP_PORTAL : GO_HORDE_GUNSHIP_PORTAL), BG_IC_HangarTeleporters[u], 0, 0, 0, 0, RESPAWN_ONE_DAY))
TC_LOG_ERROR("bg.battleground", "Isle of Conquest: There was an error spawning a gunship portal. Type: %u", BG_IC_GO_HANGAR_TELEPORTER_1 + u);
}
for (uint8 u = 0; u < MAX_HANGAR_TELEPORTER_EFFECTS_SPAWNS; ++u)
{
uint8 type = BG_IC_GO_HANGAR_TELEPORTER_EFFECT_1 + u;
if (!AddObject(type, (nodePoint->faction == TEAM_ALLIANCE ? GO_ALLIANCE_GUNSHIP_PORTAL_EFFECTS : GO_HORDE_GUNSHIP_PORTAL_EFFECTS), BG_IC_HangarTeleporterEffects[u], 0, 0, 0, 0, RESPAWN_ONE_DAY, GO_STATE_ACTIVE))
TC_LOG_ERROR("bg.battleground", "Isle of Conquest: There was an error spawning a gunship portal effects. Type: %u", BG_IC_GO_HANGAR_TELEPORTER_1 + u);
}
for (uint8 u = 0; u < MAX_TRIGGER_SPAWNS_PER_FACTION; ++u)
{
if (!AddCreature(NPC_WORLD_TRIGGER_NOT_FLOATING, BG_IC_NPC_WORLD_TRIGGER_NOT_FLOATING, BG_IC_HangarTrigger[nodePoint->faction], nodePoint->faction, RESPAWN_ONE_DAY, nodePoint->faction == TEAM_ALLIANCE ? gunshipAlliance : gunshipHorde))
TC_LOG_ERROR("bg.battleground", "Isle of Conquest: There was an error spawning a world trigger. Type: %u", BG_IC_NPC_WORLD_TRIGGER_NOT_FLOATING);
}
for (uint8 u = 0; u < MAX_CAPTAIN_SPAWNS_PER_FACTION; ++u)
{
uint8 type = BG_IC_NPC_GUNSHIP_CAPTAIN_1 + u;
if (type == BG_IC_NPC_GUNSHIP_CAPTAIN_1)
if (AddCreature(nodePoint->faction == TEAM_ALLIANCE ? NPC_ALLIANCE_GUNSHIP_CAPTAIN : NPC_HORDE_GUNSHIP_CAPTAIN, type, BG_IC_HangarCaptains[nodePoint->faction == TEAM_ALLIANCE ? 2 : 0], nodePoint->faction, RESPAWN_ONE_DAY))
GetBGCreature(BG_IC_NPC_GUNSHIP_CAPTAIN_1)->GetAI()->DoAction(ACTION_GUNSHIP_READY);
if (type == BG_IC_NPC_GUNSHIP_CAPTAIN_2)
if (!AddCreature(nodePoint->faction == TEAM_ALLIANCE ? NPC_ALLIANCE_GUNSHIP_CAPTAIN : NPC_HORDE_GUNSHIP_CAPTAIN, type, BG_IC_HangarCaptains[nodePoint->faction == TEAM_ALLIANCE ? 3 : 1], nodePoint->faction, RESPAWN_ONE_DAY, nodePoint->faction == TEAM_ALLIANCE ? gunshipAlliance : gunshipHorde))
TC_LOG_ERROR("bg.battleground", "Isle of Conquest: There was an error spawning a world trigger. Type: %u", BG_IC_NPC_GUNSHIP_CAPTAIN_2);
}
(nodePoint->faction == TEAM_ALLIANCE ? gunshipAlliance : gunshipHorde)->EnableMovement(true);
break;
}
//TC_LOG_ERROR("bg.battleground", "BG_IC_GO_HANGAR_BANNER CAPTURED Faction: %u", nodePoint->faction);
(nodePoint->faction == TEAM_ALLIANCE ? gunshipAlliance : gunshipHorde)->EnableMovement(true);
(nodePoint->faction == TEAM_ALLIANCE ? gunshipHorde : gunshipAlliance)->EnableMovement(false);
// we should spawn teleporters
break;
case BG_IC_GO_QUARRY_BANNER:
RemoveAuraOnTeam(SPELL_QUARRY, (nodePoint->faction == TEAM_ALLIANCE ? HORDE : ALLIANCE));
CastSpellOnTeam(SPELL_QUARRY, (nodePoint->faction == TEAM_ALLIANCE ? ALLIANCE : HORDE));
@@ -621,7 +655,6 @@ void BattlegroundIC::HandleCapturedNodes(ICNodePoint* nodePoint, bool recapture)
CastSpellOnTeam(SPELL_OIL_REFINERY, (nodePoint->faction == TEAM_ALLIANCE ? ALLIANCE : HORDE));
break;
case BG_IC_GO_DOCKS_BANNER:
if (recapture)
break;
@@ -661,8 +694,7 @@ void BattlegroundIC::HandleCapturedNodes(ICNodePoint* nodePoint, bool recapture)
if (GetBGCreature(type, false) && GetBGCreature(type)->IsAlive())
continue;
if (AddCreature(nodePoint->faction == TEAM_ALLIANCE ? NPC_GLAIVE_THROWER_A : NPC_GLAIVE_THROWER_H, type,
BG_IC_DocksVehiclesGlaives[i], nodePoint->faction, RESPAWN_ONE_DAY))
if (AddCreature(nodePoint->faction == TEAM_ALLIANCE ? NPC_GLAIVE_THROWER_A : NPC_GLAIVE_THROWER_H, type, BG_IC_DocksVehiclesGlaives[i], nodePoint->faction, RESPAWN_ONE_DAY))
GetBGCreature(type)->setFaction(BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]);
}
@@ -767,7 +799,16 @@ void BattlegroundIC::DestroyGate(Player* player, GameObject* go)
UpdateWorldState(uws_close, 0);
UpdateWorldState(uws_open, 1);
}
DoorOpen((player->GetTeamId() == TEAM_ALLIANCE ? BG_IC_GO_HORDE_KEEP_PORTCULLIS : BG_IC_GO_DOODAD_PORTCULLISACTIVE02));
if (player->GetTeamId() == TEAM_ALLIANCE)
{
DoorOpen(BG_IC_GO_HORDE_KEEP_PORTCULLIS);
GetBGObject(BG_IC_GO_HORDE_BANNER)->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
}
else
{
DoorOpen(BG_IC_GO_DOODAD_PORTCULLISACTIVE02);
GetBGObject(BG_IC_GO_ALLIANCE_BANNER)->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
}
uint32 lang_entry = 0;
@@ -787,8 +828,8 @@ void BattlegroundIC::DestroyGate(Player* player, GameObject* go)
case GO_ALLIANCE_GATE_3:
lang_entry = LANG_BG_IC_SOUTH_GATE_DESTROYED;
break;
default:
break;
default:
break;
}
if (go->GetEntry() == GO_HORDE_GATE_1 || go->GetEntry() == GO_HORDE_GATE_2 || go->GetEntry() == GO_HORDE_GATE_3)

View File

@@ -32,156 +32,160 @@ const uint32 BG_IC_Factions[2] =
enum creaturesIC
{
NPC_HIGH_COMMANDER_HALFORD_WYRMBANE = 34924, // Alliance Boss
NPC_OVERLORD_AGMAR = 34922, // Horde Boss
NPC_KOR_KRON_GUARD = 34918, // horde guard
NPC_SEVEN_TH_LEGION_INFANTRY = 34919, // alliance guard
NPC_KEEP_CANNON = 34944,
NPC_DEMOLISHER = 34775,
NPC_SIEGE_ENGINE_H = 35069,
NPC_SIEGE_ENGINE_A = 34776,
NPC_GLAIVE_THROWER_A = 34802,
NPC_GLAIVE_THROWER_H = 35273,
NPC_CATAPULT = 34793,
NPC_HORDE_GUNSHIP_CANNON = 34935,
NPC_ALLIANCE_GUNSHIP_CANNON = 34929
NPC_HIGH_COMMANDER_HALFORD_WYRMBANE = 34924, // Alliance Boss
NPC_OVERLORD_AGMAR = 34922, // Horde Boss
NPC_KOR_KRON_GUARD = 34918, // horde guard
NPC_SEVEN_TH_LEGION_INFANTRY = 34919, // alliance guard
NPC_KEEP_CANNON = 34944,
NPC_DEMOLISHER = 34775,
NPC_SIEGE_ENGINE_H = 35069,
NPC_SIEGE_ENGINE_A = 34776,
NPC_GLAIVE_THROWER_A = 34802,
NPC_GLAIVE_THROWER_H = 35273,
NPC_CATAPULT = 34793,
NPC_HORDE_GUNSHIP_CANNON = 34935,
NPC_ALLIANCE_GUNSHIP_CANNON = 34929,
NPC_HORDE_GUNSHIP_CAPTAIN = 35003,
NPC_ALLIANCE_GUNSHIP_CAPTAIN = 34960,
NPC_WORLD_TRIGGER_NOT_FLOATING = 34984,
NPC_WORLD_TRIGGER_ALLIANCE_FRIENDLY = 20213,
NPC_WORLD_TRIGGER_HORDE_FRIENDLY = 20212
};
enum gameobjectsIC
{
GO_ALLIANCE_BANNER = 195396,
GO_ALLIANCE_BANNER = 195396,
GO_ALLIANCE_GATE_1 = 195699,
GO_ALLIANCE_GATE_2 = 195698,
GO_ALLIANCE_GATE_3 = 195700,
GO_ALLIANCE_GATE_1 = 195699,
GO_ALLIANCE_GATE_2 = 195698,
GO_ALLIANCE_GATE_3 = 195700,
GO_ALLIANCE_GUNSHIP_PORTAL = 195320,
GO_ALLIANCE_GUNSHIP_PORTAL = 195320,
GO_ALLIANCE_GUNSHIP_PORTAL_EFFECTS = 195705,
GO_ALLIANCE_GUNSHIP_PORTAL_EFFECTS = 195705,
GO_BENCH_1 = 186896,
GO_BENCH_2 = 186922,
GO_BENCH_3 = 186899,
GO_BENCH_4 = 186904,
GO_BENCH_5 = 186897,
GO_BENCH_1 = 186896,
GO_BENCH_2 = 186922,
GO_BENCH_3 = 186899,
GO_BENCH_4 = 186904,
GO_BENCH_5 = 186897,
GO_BONFIRE_1 = 195376,
GO_BONFIRE_2 = 195208,
GO_BONFIRE_3 = 195210,
GO_BONFIRE_4 = 195207,
GO_BONFIRE_5 = 195209,
GO_BONFIRE_6 = 195377,
GO_BONFIRE_1 = 195376,
GO_BONFIRE_2 = 195208,
GO_BONFIRE_3 = 195210,
GO_BONFIRE_4 = 195207,
GO_BONFIRE_5 = 195209,
GO_BONFIRE_6 = 195377,
GO_DOCKS_BANNER = 195157,
GO_DOCKS_BANNER = 195157,
GO_DOODAD_HU_PORTCULLIS01 = 195436,
GO_DOODAD_HU_PORTCULLIS01 = 195436,
GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR01 = 195703,
GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR01 = 195703,
GO_DOODAD_PORTCULLISACTIVE01 = 195451,
GO_DOODAD_PORTCULLISACTIVE01 = 195451,
GO_DOODAD_PORTCULLISACTIVE02 = 195452,
GO_DOODAD_PORTCULLISACTIVE02 = 195452,
GO_DOODAD_VR_PORTCULLIS01 = 195437,
GO_DOODAD_VR_PORTCULLIS01 = 195437,
GO_CHAIR_1 = 195410,
GO_CHAIR_2 = 195414,
GO_CHAIR_3 = 160415,
GO_CHAIR_4 = 195418,
GO_CHAIR_5 = 195416,
GO_CHAIR_6 = 160410,
GO_CHAIR_7 = 160418,
GO_CHAIR_8 = 160416,
GO_CHAIR_9 = 160419,
GO_CHAIR_1 = 195410,
GO_CHAIR_2 = 195414,
GO_CHAIR_3 = 160415,
GO_CHAIR_4 = 195418,
GO_CHAIR_5 = 195416,
GO_CHAIR_6 = 160410,
GO_CHAIR_7 = 160418,
GO_CHAIR_8 = 160416,
GO_CHAIR_9 = 160419,
GO_FLAGPOLE_1 = 195131,
GO_FLAGPOLE_2 = 195439,
GO_FLAGPOLE_1 = 195131,
GO_FLAGPOLE_2 = 195439,
GO_GUNSHIP_PORTAL_1 = 195371,
GO_GUNSHIP_PORTAL_2 = 196413,
GO_GUNSHIP_PORTAL_1 = 195371,
GO_GUNSHIP_PORTAL_2 = 196413,
GO_HANGAR_BANNER = 195158,
GO_HANGAR_BANNER = 195158,
GO_HORDE_BANNER = 195393,
GO_HORDE_BANNER = 195393,
GO_HORDE_GATE_1 = 195494,
GO_HORDE_GATE_2 = 195496,
GO_HORDE_GATE_3 = 195495,
GO_HORDE_GATE_1 = 195494,
GO_HORDE_GATE_2 = 195496,
GO_HORDE_GATE_3 = 195495,
GO_HORDE_GUNSHIP_PORTAL = 195326,
GO_HORDE_GUNSHIP_PORTAL = 195326,
GO_HORDE_GUNSHIP_PORTAL_EFFECTS = 195706,
GO_HORDE_GUNSHIP_PORTAL_EFFECTS = 195706,
GO_HORDE_KEEP_PORTCULLIS = 195223,
GO_HORDE_KEEP_PORTCULLIS = 195223,
GO_HUGE_SEAFORIUM_BOMB_A = 195332,
GO_HUGE_SEAFORIUM_BOMB_H = 195333,
GO_HUGE_SEAFORIUM_BOMB_A = 195332,
GO_HUGE_SEAFORIUM_BOMB_H = 195333,
GO_QUARRY_BANNER = 195338,
GO_REFRESHMENT_PORTAL = 186811,
GO_SEAFORIUM_BOMBS = 195237,
GO_QUARRY_BANNER = 195338,
GO_REFRESHMENT_PORTAL = 186811,
GO_SEAFORIUM_BOMBS = 195237,
GO_STOVE_1 = 174863,
GO_STOVE_2 = 160411,
GO_STOVE_1 = 174863,
GO_STOVE_2 = 160411,
GO_TELEPORTER_1 = 195314, // 195314 H-OUT 66549
GO_TELEPORTER_2 = 195313, // 195313 H-IN 66548
GO_TELEPORTER_1 = 195314, // 195314 H-OUT 66549
GO_TELEPORTER_2 = 195313, // 195313 H-IN 66548
GO_TELEPORTER_3 = 195315, // 195315 A-OUT 66549
GO_TELEPORTER_4 = 195316, // 195316 A-IN 66548
GO_TELEPORTER_3 = 195315, // 195315 A-OUT 66549
GO_TELEPORTER_4 = 195316, // 195316 A-IN 66548
GO_TELEPORTER_EFFECTS_A = 195701,
GO_TELEPORTER_EFFECTS_A = 195701,
GO_TELEPORTER_EFFECTS_H = 195702,
GO_TELEPORTER_EFFECTS_H = 195702,
GO_WORKSHOP_BANNER = 195133,
GO_WORKSHOP_BANNER = 195133,
GO_BRAZIER_1 = 195402,
GO_BRAZIER_2 = 195403,
GO_BRAZIER_3 = 195425,
GO_BRAZIER_4 = 195424,
GO_BRAZIER_1 = 195402,
GO_BRAZIER_2 = 195403,
GO_BRAZIER_3 = 195425,
GO_BRAZIER_4 = 195424,
GO_REFINERY_BANNER = 195343,
GO_REFINERY_BANNER = 195343,
GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR01 = 195491,
GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR01 = 195491,
GO_ALLIANCE_BANNER_DOCK = 195153,
GO_ALLIANCE_BANNER_DOCK_CONT = 195154,
GO_HORDE_BANNER_DOCK = 195155,
GO_HORDE_BANNER_DOCK_CONT = 195156,
GO_ALLIANCE_BANNER_DOCK = 195153,
GO_ALLIANCE_BANNER_DOCK_CONT = 195154,
GO_HORDE_BANNER_DOCK = 195155,
GO_HORDE_BANNER_DOCK_CONT = 195156,
GO_HORDE_BANNER_HANGAR = 195130,
GO_HORDE_BANNER_HANGAR_CONT = 195145,
GO_ALLIANCE_BANNER_HANGAR = 195132,
GO_ALLIANCE_BANNER_HANGAR_CONT = 195144,
GO_HORDE_BANNER_HANGAR = 195130,
GO_HORDE_BANNER_HANGAR_CONT = 195145,
GO_ALLIANCE_BANNER_HANGAR = 195132,
GO_ALLIANCE_BANNER_HANGAR_CONT= 195144,
GO_ALLIANCE_BANNER_QUARRY = 195334,
GO_ALLIANCE_BANNER_QUARRY_CONT = 195335,
GO_HORDE_BANNER_QUARRY = 195336,
GO_HORDE_BANNER_QUARRY_CONT = 195337,
GO_ALLIANCE_BANNER_QUARRY = 195334,
GO_ALLIANCE_BANNER_QUARRY_CONT = 195335,
GO_HORDE_BANNER_QUARRY = 195336,
GO_HORDE_BANNER_QUARRY_CONT = 195337,
GO_ALLIANCE_BANNER_REFINERY = 195339,
GO_ALLIANCE_BANNER_REFINERY_CONT = 195340,
GO_HORDE_BANNER_REFINERY = 195341,
GO_HORDE_BANNER_REFINERY_CONT = 195342,
GO_ALLIANCE_BANNER_REFINERY = 195339,
GO_ALLIANCE_BANNER_REFINERY_CONT = 195340,
GO_HORDE_BANNER_REFINERY = 195341,
GO_HORDE_BANNER_REFINERY_CONT = 195342,
GO_ALLIANCE_BANNER_WORKSHOP = 195149,
GO_ALLIANCE_BANNER_WORKSHOP_CONT = 195150,
GO_HORDE_BANNER_WORKSHOP = 195151,
GO_HORDE_BANNER_WORKSHOP_CONT = 195152,
GO_ALLIANCE_BANNER_WORKSHOP = 195149,
GO_ALLIANCE_BANNER_WORKSHOP_CONT = 195150,
GO_HORDE_BANNER_WORKSHOP = 195151,
GO_HORDE_BANNER_WORKSHOP_CONT = 195152,
GO_ALLIANCE_BANNER_GRAVEYARD_A = 195396,
GO_ALLIANCE_BANNER_GRAVEYARD_A_CONT = 195397,
GO_HORDE_BANNER_GRAVEYARD_A = 195398,
GO_HORDE_BANNER_GRAVEYARD_A_CONT = 195399,
GO_ALLIANCE_BANNER_GRAVEYARD_A = 195396,
GO_ALLIANCE_BANNER_GRAVEYARD_A_CONT = 195397,
GO_HORDE_BANNER_GRAVEYARD_A = 195398,
GO_HORDE_BANNER_GRAVEYARD_A_CONT = 195399,
GO_ALLIANCE_BANNER_GRAVEYARD_H = 195391,
GO_ALLIANCE_BANNER_GRAVEYARD_H_CONT = 195392,
GO_HORDE_BANNER_GRAVEYARD_H = 195393,
GO_HORDE_BANNER_GRAVEYARD_H_CONT = 195394,
GO_ALLIANCE_BANNER_GRAVEYARD_H = 195391,
GO_ALLIANCE_BANNER_GRAVEYARD_H_CONT = 195392,
GO_HORDE_BANNER_GRAVEYARD_H = 195393,
GO_HORDE_BANNER_GRAVEYARD_H_CONT = 195394,
GO_HORDE_GUNSHIP = 195276,
GO_ALLIANCE_GUNSHIP = 195121
GO_HORDE_GUNSHIP = 195276,
GO_ALLIANCE_GUNSHIP = 195121
};
#define MAX_REINFORCEMENTS 300
@@ -198,7 +202,7 @@ enum Times
enum Actions
{
ACTION_TELEPORT_PLAYER_TO_TRANSPORT = 1
ACTION_GUNSHIP_READY = 1
};
struct ICNpc
@@ -257,6 +261,8 @@ enum BG_IC_GOs
BG_IC_GO_DOODAD_HU_PORTCULLIS01_2,
BG_IC_GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR01,
BG_IC_GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR02,
BG_IC_GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR03,
BG_IC_GO_DOODAD_PORTCULLISACTIVE01,
@@ -306,6 +312,8 @@ enum BG_IC_GOs
BG_IC_GO_HUGE_SEAFORIUM_BOMBS_H_4,
BG_IC_GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR01,
BG_IC_GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR02,
BG_IC_GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR03,
BG_IC_GO_SEAFORIUM_BOMBS_1,
BG_IC_GO_SEAFORIUM_BOMBS_2,
@@ -314,6 +322,10 @@ enum BG_IC_GOs
BG_IC_GO_HANGAR_TELEPORTER_2,
BG_IC_GO_HANGAR_TELEPORTER_3,
BG_IC_GO_HANGAR_TELEPORTER_EFFECT_1,
BG_IC_GO_HANGAR_TELEPORTER_EFFECT_2,
BG_IC_GO_HANGAR_TELEPORTER_EFFECT_3,
BG_IC_GO_TELEPORTER_1_1,
BG_IC_GO_TELEPORTER_1_2,
BG_IC_GO_TELEPORTER_2_1,
@@ -408,6 +420,10 @@ enum BG_IC_NPCs
BG_IC_NPC_CATAPULT_3_H,
BG_IC_NPC_CATAPULT_4_H,
BG_IC_NPC_WORLD_TRIGGER_NOT_FLOATING,
BG_IC_NPC_GUNSHIP_CAPTAIN_1,
BG_IC_NPC_GUNSHIP_CAPTAIN_2,
BG_IC_NPC_SPIRIT_GUIDE_1,
BG_IC_NPC_SPIRIT_GUIDE_2,
BG_IC_NPC_SPIRIT_GUIDE_3,
@@ -427,26 +443,33 @@ enum BannersTypes
enum BG_IC_MaxSpawns
{
MAX_NORMAL_GAMEOBJECTS_SPAWNS = BG_IC_GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR01+1,
MAX_NORMAL_NPCS_SPAWNS = BG_IC_NPC_KEEP_CANNON_25+1,
MAX_WORKSHOP_SPAWNS = 10,
MAX_DOCKS_SPAWNS = 12,
MAX_SPIRIT_GUIDES_SPAWNS = 7,
MAX_HANGAR_TELEPORTERS_SPAWNS = 3,
MAX_AIRSHIPS_SPAWNS = 2,
MAX_FORTRESS_GATES_SPAWNS = 6,
MAX_FORTRESS_TELEPORTERS_SPAWNS = 24,
MAX_NORMAL_GAMEOBJECTS_SPAWNS = BG_IC_GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR03+1,
MAX_NORMAL_NPCS_SPAWNS = BG_IC_NPC_KEEP_CANNON_25+1,
MAX_WORKSHOP_SPAWNS = 10,
MAX_DOCKS_SPAWNS = 12,
MAX_SPIRIT_GUIDES_SPAWNS = 7,
MAX_HANGAR_TELEPORTERS_SPAWNS = 3,
MAX_HANGAR_TELEPORTER_EFFECTS_SPAWNS = 3,
MAX_AIRSHIPS_SPAWNS = 2,
MAX_FORTRESS_GATES_SPAWNS = 6,
MAX_FORTRESS_TELEPORTERS_SPAWNS = 12,
MAX_FORTRESS_TELEPORTER_EFFECTS_SPAWNS = 12,
MAX_HANGAR_NPCS_SPAWNS = 3,
// docks
MAX_GLAIVE_THROWERS_SPAWNS_PER_FACTION = 2,
MAX_CATAPULTS_SPAWNS_PER_FACTION = 4,
MAX_GLAIVE_THROWERS_SPAWNS_PER_FACTION = 2,
MAX_CATAPULTS_SPAWNS_PER_FACTION = 4,
// workshop
MAX_DEMOLISHERS_SPAWNS_PER_FACTION = 4,
MAX_WORKSHOP_BOMBS_SPAWNS_PER_FACTION = 2
MAX_DEMOLISHERS_SPAWNS_PER_FACTION = 4,
MAX_WORKSHOP_BOMBS_SPAWNS_PER_FACTION = 2,
// Hangar
MAX_TRIGGER_SPAWNS_PER_FACTION = 1,
MAX_CAPTAIN_SPAWNS_PER_FACTION = 2,
};
const ICNpc BG_IC_NpcSpawnlocs[MAX_NORMAL_NPCS_SPAWNS]=
const ICNpc BG_IC_NpcSpawnlocs[MAX_NORMAL_NPCS_SPAWNS] =
{
{BG_IC_NPC_OVERLORD_AGMAR, NPC_OVERLORD_AGMAR, TEAM_HORDE, 1295.44f, -765.733f, 70.0541f, 0.0f}, //Overlord Agmar 1
{BG_IC_NPC_HIGH_COMMANDER_HALFORD_WYRMBANE, NPC_HIGH_COMMANDER_HALFORD_WYRMBANE, TEAM_ALLIANCE, 224.983f, -831.573f, 60.9034f, 0.0f}, //High Commander Halford Wyrmbane 2
@@ -485,7 +508,7 @@ const ICNpc BG_IC_NpcSpawnlocs[MAX_NORMAL_NPCS_SPAWNS]=
{BG_IC_NPC_KEEP_CANNON_22, NPC_KEEP_CANNON, TEAM_HORDE, 1144.33f, -833.309f, 87.9268f, 2.14675f}, // 32
{BG_IC_NPC_KEEP_CANNON_23, NPC_KEEP_CANNON, TEAM_HORDE, 1135.29f, -840.878f, 88.0252f, 2.30383f}, // 33
{BG_IC_NPC_KEEP_CANNON_24, NPC_KEEP_CANNON, TEAM_HORDE, 1142.59f, -691.946f, 87.9756f, 3.9619f}, // 34
{BG_IC_NPC_KEEP_CANNON_25, NPC_KEEP_CANNON, TEAM_HORDE, 1166.13f, -858.391f, 87.9653f, 5.63741f}, // 35
{BG_IC_NPC_KEEP_CANNON_25, NPC_KEEP_CANNON, TEAM_HORDE, 1166.13f, -858.391f, 87.9653f, 5.63741f} // 35
};
const Position BG_IC_WorkshopVehicles[5] =
@@ -499,8 +522,8 @@ const Position BG_IC_WorkshopVehicles[5] =
const Position BG_IC_DocksVehiclesGlaives[2] =
{
{ 779.3125f, -342.972229f, 12.2104874f, 4.712389f }, // Glaive Throwers
{ 790.029541f, -342.899323f, 12.2128582f, 4.71238f }, // Glaive Throwers
{779.3125f, -342.972229f, 12.2104874f, 4.712389f}, // Glaive Throwers
{790.029541f, -342.899323f, 12.2128582f, 4.71238f} // Glaive Throwers
};
const Position BG_IC_DocksVehiclesCatapults[4] =
@@ -508,14 +531,35 @@ const Position BG_IC_DocksVehiclesCatapults[4] =
{757.283f, -341.7795f, 12.2113762f, 4.729842f}, // Catapults
{766.947937f, -342.053833f, 12.2009945f, 4.694f}, // Catapults
{800.3785f, -342.607635f, 12.1669979f, 4.6774f}, // Catapults
{810.7257f, -342.083344f, 12.1675768f, 4.6600f}, // Catapults
{810.7257f, -342.083344f, 12.1675768f, 4.6600f} // Catapults
};
const Position BG_IC_HangarTeleporters[3] =
{
{827.958f, -994.467f, 134.071f, 0.0f}, // Gunship Portal
{738.613f, -1106.58f, 134.745f, 2.54818f}, // Gunship Portal
{672.283f, -1156.99f, 133.706f, 1.37881f}, // Gunship Portal
{827.9219f, -993.3249f, 134.1972f, 3.141593f}, // Gunship Portal
{739.0226f, -1106.661f, 134.7551f, 2.426008f}, // Gunship Portal
{672.0799f, -1156.776f, 133.7057f, 1.832595f} // Gunship Portal
};
const Position BG_IC_HangarTeleporterEffects[3] =
{
{827.9236f, -993.2986f, 134.2002f, 3.141593f}, // Gunship Portal Effect
{739.0139f, -1106.661f, 134.7548f, 3.141593f}, // Gunship Portal Effect
{672.0868f, -1156.786f, 133.7057f, 3.141593f} // Gunship Portal Effect
};
const Position BG_IC_HangarTrigger[2] =
{
{11.69965f, 0.034146f, 20.62076f, 3.211406f},
{7.305609f, -0.095246f, 34.51022f, 3.159046f}
};
const Position BG_IC_HangarCaptains[4] =
{
{825.6667f, -994.00520f, 134.3569f, 3.403392f},
{53.65112f, -0.1139221f, 30.09546f, 3.106686f},
{826.2205f, -994.40280f, 134.2812f, 3.351032f},
{10.89952f, 4.88029700f, 20.49038f, 4.840575f}
};
struct ICGo
@@ -541,8 +585,11 @@ const ICGo BG_IC_Teleporters[MAX_FORTRESS_TELEPORTERS_SPAWNS] =
{BG_IC_GO_TELEPORTER_4_2, GO_TELEPORTER_4, 323.54f, -888.361f, 48.9197f, 0.0349063f}, // Teleporter
{BG_IC_GO_TELEPORTER_4_3, GO_TELEPORTER_4, 326.285f, -777.366f, 49.0208f, 3.12412f}, // Teleporter
{BG_IC_GO_TELEPORTER_1_3, GO_TELEPORTER_1, 1235.09f, -857.898f, 48.9163f, 3.07177f}, // Teleporter
{BG_IC_GO_TELEPORTER_2_3, GO_TELEPORTER_2, 1158.76f, -746.182f, 48.6277f, -1.51844f}, // Teleporter
{BG_IC_GO_TELEPORTER_2_3, GO_TELEPORTER_2, 1158.76f, -746.182f, 48.6277f, -1.51844f} // Teleporter
};
const ICGo BG_IC_TeleporterEffects[MAX_FORTRESS_TELEPORTER_EFFECTS_SPAWNS] =
{
{BG_IC_GO_TELEPORTER_EFFECTS_A_1, GO_TELEPORTER_EFFECTS_A, 425.686f, -857.092f, 48.51f, -1.62316f}, // Teleporter Effects (Alliance)
{BG_IC_GO_TELEPORTER_EFFECTS_A_2, GO_TELEPORTER_EFFECTS_A, 324.634f, -749.148f, 49.359f, 0.0174525f}, // Teleporter Effects (Alliance)
{BG_IC_GO_TELEPORTER_EFFECTS_A_3, GO_TELEPORTER_EFFECTS_A, 311.911f, -913.986f, 48.8157f, 3.08918f}, // Teleporter Effects (Alliance)
@@ -555,7 +602,7 @@ const ICGo BG_IC_Teleporters[MAX_FORTRESS_TELEPORTERS_SPAWNS] =
{BG_IC_GO_TELEPORTER_EFFECTS_H_3, GO_TELEPORTER_EFFECTS_H, 1233.25f, -844.573f, 48.8836f, 0.0174525f}, // Teleporter Effects (Horde)
{BG_IC_GO_TELEPORTER_EFFECTS_H_4, GO_TELEPORTER_EFFECTS_H, 1235.07f, -857.957f, 48.9163f, 3.05433f}, // Teleporter Effects (Horde)
{BG_IC_GO_TELEPORTER_EFFECTS_H_5, GO_TELEPORTER_EFFECTS_H, 1236.46f, -669.344f, 48.2684f, 0.087266f}, // Teleporter Effects (Horde)
{BG_IC_GO_TELEPORTER_EFFECTS_H_6, GO_TELEPORTER_EFFECTS_H, 1235.6f, -683.806f, 49.3028f, -3.07177f}, // Teleporter Effects (Horde)
{BG_IC_GO_TELEPORTER_EFFECTS_H_6, GO_TELEPORTER_EFFECTS_H, 1235.6f, -683.806f, 49.3028f, -3.07177f} // Teleporter Effects (Horde)
};
const ICGo BG_IC_ObjSpawnlocs[MAX_NORMAL_GAMEOBJECTS_SPAWNS] =
@@ -612,6 +659,8 @@ const ICGo BG_IC_ObjSpawnlocs[MAX_NORMAL_GAMEOBJECTS_SPAWNS] =
{BG_IC_GO_DOODAD_HU_PORTCULLIS01_2, GO_DOODAD_HU_PORTCULLIS01, 399.802f, -885.208f, 50.1939f, 2.516f}, // Doodad_HU_Portcullis01
{BG_IC_GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR01, GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR01, 413.479f, -833.95f, 48.5238f, 3.14159f}, // Doodad_ND_Human_Gate_ClosedFX_Door01
{BG_IC_GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR02, GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR01, 351.615f, -762.75f, 48.91625f, 4.71292f}, // Doodad_ND_Human_Gate_ClosedFX_Door01
{BG_IC_GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR03, GO_DOODAD_ND_HUMAN_GATE_CLOSEDFX_DOOR01, 351.024f, -903.33f, 48.92472f, 1.570796f}, // Doodad_ND_Human_Gate_ClosedFX_Door01
{BG_IC_GO_DOODAD_PORTCULLISACTIVE01, GO_DOODAD_PORTCULLISACTIVE01, -832.595f, 51.4109f, -0.0261791f, 0.0f}, // Doodad_PortcullisActive01
@@ -646,7 +695,9 @@ const ICGo BG_IC_ObjSpawnlocs[MAX_NORMAL_GAMEOBJECTS_SPAWNS] =
{BG_IC_GO_HUGE_SEAFORIUM_BOMBS_H_3, GO_HUGE_SEAFORIUM_BOMB_H, 1273.066f, -786.572937f, 48.9419174f, -0.94247663f},
{BG_IC_GO_HUGE_SEAFORIUM_BOMBS_H_4, GO_HUGE_SEAFORIUM_BOMB_H, 1273.849f, -796.2778f, 48.9364281f, -2.75761318f},
{BG_IC_GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR01, GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR01, 1150.9f, -762.606f, 47.0f, 3.14159f} // Doodad_ND_WinterOrc_Wall_GateFX_Door01 -> this was not sniffed because I only had alliance sniffs
{BG_IC_GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR01, GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR01, 1150.903f, -762.6059f, 47.50768f, 3.141593f},
{BG_IC_GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR02, GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR01, 1217.899f, -676.9479f, 47.63408f, 1.570796f},
{BG_IC_GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR03, GO_DOODAD_ND_WINTERORC_WALL_GATEFX_DOOR01, 1218.743f, -851.1545f, 48.25328f, 4.712392f}
};
const Position workshopBombs[2] =
@@ -657,16 +708,20 @@ const Position workshopBombs[2] =
enum Spells
{
SPELL_OIL_REFINERY = 68719,
SPELL_QUARRY = 68720,
SPELL_PARACHUTE = 66656,
SPELL_SLOW_FALL = 12438,
SPELL_DESTROYED_VEHICLE_ACHIEVEMENT = 68357,
SPELL_BACK_DOOR_JOB_ACHIEVEMENT = 68502,
SPELL_DRIVING_CREDIT_DEMOLISHER = 68365,
SPELL_DRIVING_CREDIT_GLAIVE = 68363,
SPELL_DRIVING_CREDIT_SIEGE = 68364,
SPELL_DRIVING_CREDIT_CATAPULT = 68362,
SPELL_OIL_REFINERY = 68719,
SPELL_QUARRY = 68720,
SPELL_PARACHUTE = 66656,
SPELL_SLOW_FALL = 12438,
SPELL_DESTROYED_VEHICLE_ACHIEVEMENT = 68357,
SPELL_BACK_DOOR_JOB_ACHIEVEMENT = 68502,
SPELL_DRIVING_CREDIT_DEMOLISHER = 68365,
SPELL_DRIVING_CREDIT_GLAIVE = 68363,
SPELL_DRIVING_CREDIT_SIEGE = 68364,
SPELL_DRIVING_CREDIT_CATAPULT = 68362,
SPELL_SIMPLE_TELEPORT = 12980,
SPELL_TELEPORT_VISUAL_ONLY = 51347,
SPELL_PARACHUTE_IC = 66657,
SPELL_LAUNCH_NO_FALLING_DAMAGE = 66251
};
enum BG_IC_Objectives
@@ -677,71 +732,71 @@ enum BG_IC_Objectives
enum ICWorldStates
{
BG_IC_ALLIANCE_RENFORT_SET = 4221,
BG_IC_HORDE_RENFORT_SET = 4222,
BG_IC_ALLIANCE_RENFORT = 4226,
BG_IC_HORDE_RENFORT = 4227,
BG_IC_GATE_FRONT_H_WS_CLOSED = 4317,
BG_IC_GATE_WEST_H_WS_CLOSED = 4318,
BG_IC_GATE_EAST_H_WS_CLOSED = 4319,
BG_IC_GATE_FRONT_A_WS_CLOSED = 4328,
BG_IC_GATE_WEST_A_WS_CLOSED = 4327,
BG_IC_GATE_EAST_A_WS_CLOSED = 4326,
BG_IC_GATE_FRONT_H_WS_OPEN = 4322,
BG_IC_GATE_WEST_H_WS_OPEN = 4321,
BG_IC_GATE_EAST_H_WS_OPEN = 4320,
BG_IC_GATE_FRONT_A_WS_OPEN = 4323,
BG_IC_GATE_WEST_A_WS_OPEN = 4324,
BG_IC_GATE_EAST_A_WS_OPEN = 4325,
BG_IC_ALLIANCE_RENFORT_SET = 4221,
BG_IC_HORDE_RENFORT_SET = 4222,
BG_IC_ALLIANCE_RENFORT = 4226,
BG_IC_HORDE_RENFORT = 4227,
BG_IC_GATE_FRONT_H_WS_CLOSED = 4317,
BG_IC_GATE_WEST_H_WS_CLOSED = 4318,
BG_IC_GATE_EAST_H_WS_CLOSED = 4319,
BG_IC_GATE_FRONT_A_WS_CLOSED = 4328,
BG_IC_GATE_WEST_A_WS_CLOSED = 4327,
BG_IC_GATE_EAST_A_WS_CLOSED = 4326,
BG_IC_GATE_FRONT_H_WS_OPEN = 4322,
BG_IC_GATE_WEST_H_WS_OPEN = 4321,
BG_IC_GATE_EAST_H_WS_OPEN = 4320,
BG_IC_GATE_FRONT_A_WS_OPEN = 4323,
BG_IC_GATE_WEST_A_WS_OPEN = 4324,
BG_IC_GATE_EAST_A_WS_OPEN = 4325,
BG_IC_DOCKS_UNCONTROLLED = 4301,
BG_IC_DOCKS_CONFLICT_A = 4305,
BG_IC_DOCKS_CONFLICT_H = 4302,
BG_IC_DOCKS_CONTROLLED_A = 4304,
BG_IC_DOCKS_CONTROLLED_H = 4303,
BG_IC_DOCKS_UNCONTROLLED = 4301,
BG_IC_DOCKS_CONFLICT_A = 4305,
BG_IC_DOCKS_CONFLICT_H = 4302,
BG_IC_DOCKS_CONTROLLED_A = 4304,
BG_IC_DOCKS_CONTROLLED_H = 4303,
BG_IC_HANGAR_UNCONTROLLED = 4296,
BG_IC_HANGAR_CONFLICT_A = 4300,
BG_IC_HANGAR_CONFLICT_H = 4297,
BG_IC_HANGAR_CONTROLLED_A = 4299,
BG_IC_HANGAR_CONTROLLED_H = 4298,
BG_IC_HANGAR_UNCONTROLLED = 4296,
BG_IC_HANGAR_CONFLICT_A = 4300,
BG_IC_HANGAR_CONFLICT_H = 4297,
BG_IC_HANGAR_CONTROLLED_A = 4299,
BG_IC_HANGAR_CONTROLLED_H = 4298,
BG_IC_QUARRY_UNCONTROLLED = 4306,
BG_IC_QUARRY_CONFLICT_A = 4310,
BG_IC_QUARRY_CONFLICT_H = 4307,
BG_IC_QUARRY_CONTROLLED_A = 4309,
BG_IC_QUARRY_CONTROLLED_H = 4308,
BG_IC_QUARRY_UNCONTROLLED = 4306,
BG_IC_QUARRY_CONFLICT_A = 4310,
BG_IC_QUARRY_CONFLICT_H = 4307,
BG_IC_QUARRY_CONTROLLED_A = 4309,
BG_IC_QUARRY_CONTROLLED_H = 4308,
BG_IC_REFINERY_UNCONTROLLED = 4311,
BG_IC_REFINERY_CONFLICT_A = 4315,
BG_IC_REFINERY_CONFLICT_H = 4312,
BG_IC_REFINERY_CONTROLLED_A = 4314,
BG_IC_REFINERY_CONTROLLED_H = 4313,
BG_IC_REFINERY_UNCONTROLLED = 4311,
BG_IC_REFINERY_CONFLICT_A = 4315,
BG_IC_REFINERY_CONFLICT_H = 4312,
BG_IC_REFINERY_CONTROLLED_A = 4314,
BG_IC_REFINERY_CONTROLLED_H = 4313,
BG_IC_WORKSHOP_UNCONTROLLED = 4294,
BG_IC_WORKSHOP_CONFLICT_A = 4228,
BG_IC_WORKSHOP_CONFLICT_H = 4293,
BG_IC_WORKSHOP_CONTROLLED_A = 4229,
BG_IC_WORKSHOP_CONTROLLED_H = 4230,
BG_IC_WORKSHOP_UNCONTROLLED = 4294,
BG_IC_WORKSHOP_CONFLICT_A = 4228,
BG_IC_WORKSHOP_CONFLICT_H = 4293,
BG_IC_WORKSHOP_CONTROLLED_A = 4229,
BG_IC_WORKSHOP_CONTROLLED_H = 4230,
BG_IC_ALLIANCE_KEEP_UNCONTROLLED = 4341,
BG_IC_ALLIANCE_KEEP_CONFLICT_A = 4342,
BG_IC_ALLIANCE_KEEP_CONFLICT_H = 4343,
BG_IC_ALLIANCE_KEEP_CONTROLLED_A = 4339,
BG_IC_ALLIANCE_KEEP_CONTROLLED_H = 4340,
BG_IC_ALLIANCE_KEEP_UNCONTROLLED = 4341,
BG_IC_ALLIANCE_KEEP_CONFLICT_A = 4342,
BG_IC_ALLIANCE_KEEP_CONFLICT_H = 4343,
BG_IC_ALLIANCE_KEEP_CONTROLLED_A = 4339,
BG_IC_ALLIANCE_KEEP_CONTROLLED_H = 4340,
BG_IC_HORDE_KEEP_UNCONTROLLED = 4346,
BG_IC_HORDE_KEEP_CONFLICT_A = 4347,
BG_IC_HORDE_KEEP_CONFLICT_H = 4348,
BG_IC_HORDE_KEEP_CONTROLLED_A = 4344,
BG_IC_HORDE_KEEP_CONTROLLED_H = 4345
BG_IC_HORDE_KEEP_UNCONTROLLED = 4346,
BG_IC_HORDE_KEEP_CONFLICT_A = 4347,
BG_IC_HORDE_KEEP_CONFLICT_H = 4348,
BG_IC_HORDE_KEEP_CONTROLLED_A = 4344,
BG_IC_HORDE_KEEP_CONTROLLED_H = 4345
};
enum BG_IC_GateState
{
BG_IC_GATE_OK = 1,
BG_IC_GATE_DAMAGED = 2,
BG_IC_GATE_DESTROYED = 3
BG_IC_GATE_OK = 1,
BG_IC_GATE_DAMAGED = 2,
BG_IC_GATE_DESTROYED = 3
};
enum ICDoorList
@@ -781,9 +836,6 @@ enum ICNodeState
const uint32 BG_IC_GraveyardIds[MAX_NODE_TYPES+2] = {0, 0, 1480, 1481, 1482, 1485, 1486, 1483, 1484};
const Position TransportMovementInfo = {7.305609f, -0.095246f, 34.51022f, 0.0f};
const Position TeleportToTransportPosition = {661.0f, -1244.0f, 288.0f, 0.0f};
Position const BG_IC_SpiritGuidePos[MAX_NODE_TYPES+2] =
{
{0.0f, 0.0f, 0.0f, 0.0f}, // no grave
@@ -797,24 +849,6 @@ Position const BG_IC_SpiritGuidePos[MAX_NODE_TYPES+2] =
{1148.65f, -1250.98f, 16.60f, 1.74f}, // last resort horde
};
const Position hordeGunshipPassengers[5] =
{
{-21.401f, -31.343f, 34.173f, 4.62057f},
{-12.1064f, -31.9697f, 34.3807f, 4.62057f},
{-2.4877f, -31.9885f, 34.8384f, 4.62057f},
{10.2664f, -32.0713f, 35.7357f, 4.62057f},
{19.4636f, -30.794f, 36.2254f, 4.83106f}
};
const Position allianceGunshipPassengers[5] =
{
{-41.7122f, 23.1838f, 22.5605f, 1.60659f},
{-31.0354f, 25.1286f, 21.6921f, 1.60659f},
{-21.4492f, 25.8326f, 21.6309f, 1.60659f},
{-12.4734f, 26.321f, 21.6237f, 1.60659f},
{-2.81125f, 26.2077f, 21.6566f, 1.60659f}
};
// I.E: Hangar, Quarry, Graveyards .. etc
struct ICNodePoint
{
@@ -839,13 +873,13 @@ const ICNodePoint nodePointInitial[7] =
{BG_IC_GO_HANGAR_BANNER, GO_HANGAR_BANNER, TEAM_NEUTRAL, NODE_TYPE_HANGAR, {GO_ALLIANCE_BANNER_HANGAR, GO_ALLIANCE_BANNER_HANGAR_CONT, GO_HORDE_BANNER_HANGAR, GO_HORDE_BANNER_HANGAR_CONT}, false, 0, 0, {BG_IC_HANGAR_UNCONTROLLED, BG_IC_HANGAR_CONFLICT_A, BG_IC_HANGAR_CONFLICT_H, BG_IC_HANGAR_CONTROLLED_A, BG_IC_HANGAR_CONTROLLED_H}, NODE_STATE_UNCONTROLLED, LANG_BG_IC_HANGAR},
{BG_IC_GO_WORKSHOP_BANNER, GO_WORKSHOP_BANNER, TEAM_NEUTRAL, NODE_TYPE_WORKSHOP, {GO_ALLIANCE_BANNER_WORKSHOP, GO_ALLIANCE_BANNER_WORKSHOP_CONT, GO_HORDE_BANNER_WORKSHOP, GO_HORDE_BANNER_WORKSHOP_CONT}, false, 0, 0, {BG_IC_WORKSHOP_UNCONTROLLED, BG_IC_WORKSHOP_CONFLICT_A, BG_IC_WORKSHOP_CONFLICT_H, BG_IC_WORKSHOP_CONTROLLED_A, BG_IC_WORKSHOP_CONTROLLED_H}, NODE_STATE_UNCONTROLLED, LANG_BG_IC_WORKSHOP},
{BG_IC_GO_ALLIANCE_BANNER, GO_ALLIANCE_BANNER, TEAM_ALLIANCE, NODE_TYPE_GRAVEYARD_A, {GO_ALLIANCE_BANNER_GRAVEYARD_A, GO_ALLIANCE_BANNER_GRAVEYARD_A_CONT, GO_HORDE_BANNER_GRAVEYARD_A, GO_HORDE_BANNER_GRAVEYARD_A_CONT}, false, 0, 0, {BG_IC_ALLIANCE_KEEP_UNCONTROLLED, BG_IC_ALLIANCE_KEEP_CONFLICT_A, BG_IC_ALLIANCE_KEEP_CONFLICT_H, BG_IC_ALLIANCE_KEEP_CONTROLLED_A, BG_IC_ALLIANCE_KEEP_CONTROLLED_H}, NODE_STATE_CONTROLLED_A, LANG_BG_IC_ALLIANCE_KEEP},
{BG_IC_GO_HORDE_BANNER, GO_HORDE_BANNER, TEAM_HORDE, NODE_TYPE_GRAVEYARD_H, {GO_ALLIANCE_BANNER_GRAVEYARD_H, GO_ALLIANCE_BANNER_GRAVEYARD_H_CONT, GO_HORDE_BANNER_GRAVEYARD_H, GO_HORDE_BANNER_GRAVEYARD_H_CONT}, false, 0, 0, {BG_IC_HORDE_KEEP_UNCONTROLLED, BG_IC_HORDE_KEEP_CONFLICT_A, BG_IC_HORDE_KEEP_CONFLICT_H, BG_IC_HORDE_KEEP_CONTROLLED_A, BG_IC_HORDE_KEEP_CONTROLLED_H}, NODE_STATE_CONTROLLED_H, LANG_BG_IC_HORDE_KEEP},
{BG_IC_GO_HORDE_BANNER, GO_HORDE_BANNER, TEAM_HORDE, NODE_TYPE_GRAVEYARD_H, {GO_ALLIANCE_BANNER_GRAVEYARD_H, GO_ALLIANCE_BANNER_GRAVEYARD_H_CONT, GO_HORDE_BANNER_GRAVEYARD_H, GO_HORDE_BANNER_GRAVEYARD_H_CONT}, false, 0, 0, {BG_IC_HORDE_KEEP_UNCONTROLLED, BG_IC_HORDE_KEEP_CONFLICT_A, BG_IC_HORDE_KEEP_CONFLICT_H, BG_IC_HORDE_KEEP_CONTROLLED_A, BG_IC_HORDE_KEEP_CONTROLLED_H}, NODE_STATE_CONTROLLED_H, LANG_BG_IC_HORDE_KEEP}
};
enum HonorRewards
{
RESOURCE_HONOR_AMOUNT = 12,
WINNER_HONOR_AMOUNT = 500
RESOURCE_HONOR_AMOUNT = 12,
WINNER_HONOR_AMOUNT = 500
};
struct BattlegroundICScore final : public BattlegroundScore
@@ -913,8 +947,6 @@ class BattlegroundIC : public Battleground
/* Scorekeeping */
void FillInitialWorldStates(WorldPacket& data) override;
void DoAction(uint32 action, ObjectGuid var) override;
void HandlePlayerResurrect(Player* player) override;
uint32 GetNodeState(uint8 nodeType) const { return (uint8)nodePoint[nodeType].nodeState; }

View File

@@ -203,6 +203,8 @@ void Vehicle::ApplyAllImmunities()
case 160: // Strand of the Ancients
case 244: // Wintergrasp
case 510: // Isle of Conquest
case 452: // Isle of Conquest
case 543: // Isle of Conquest
_me->SetControlled(true, UNIT_STATE_ROOT);
// why we need to apply this? we can simple add immunities to slow mechanic in DB
_me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_DECREASE_SPEED, true);

View File

@@ -73,6 +73,68 @@ class npc_four_car_garage : public CreatureScript
}
};
enum Events
{
EVENT_TALK = 1,
EVENT_DESPAWN
};
enum Texts
{
SAY_ONBOARD = 0
};
class npc_ioc_gunship_captain : public CreatureScript
{
public:
npc_ioc_gunship_captain() : CreatureScript("npc_ioc_gunship_captain") { }
struct npc_ioc_gunship_captainAI : public ScriptedAI
{
npc_ioc_gunship_captainAI(Creature* creature) : ScriptedAI(creature) { }
void DoAction(int32 action) override
{
if (action == ACTION_GUNSHIP_READY)
{
DoCast(me, SPELL_SIMPLE_TELEPORT);
_events.ScheduleEvent(EVENT_TALK, 3000);
}
}
void UpdateAI(uint32 diff) override
{
_events.Update(diff);
while (uint32 eventId = _events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_TALK:
_events.ScheduleEvent(EVENT_DESPAWN, 1000);
Talk(SAY_ONBOARD);
DoCast(me, SPELL_TELEPORT_VISUAL_ONLY);
break;
case EVENT_DESPAWN:
if (me->GetMap()->ToBattlegroundMap())
if (Battleground* bgIoC = me->GetMap()->ToBattlegroundMap()->GetBG())
bgIoC->DelCreature(BG_IC_NPC_GUNSHIP_CAPTAIN_1);
break;
default:
break;
}
}
}
private:
EventMap _events;
};
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_ioc_gunship_captainAI(creature);
}
};
class spell_ioc_gunship_portal : public SpellScriptLoader
{
public:
@@ -90,9 +152,28 @@ class spell_ioc_gunship_portal : public SpellScriptLoader
void HandleScript(SpellEffIndex /*effIndex*/)
{
Player* caster = GetCaster()->ToPlayer();
if (Battleground* bg = caster->GetBattleground())
if (bg->GetTypeID(true) == BATTLEGROUND_IC)
bg->DoAction(1, caster->GetGUID());
/*
* HACK: GetWorldLocation() returns real position and not transportposition.
* ServertoClient: SMSG_MOVE_TELEPORT (0x0B39)
* counter: 45
* Tranpsort Guid: Full: xxxx Type: MOTransport Low: xxx
* Transport Position X: 0 Y: 0 Z: 0 O: 0
* Position: X: 7.305609 Y: -0.095246 Z: 34.51022 O: 0
*/
caster->TeleportTo(GetHitCreature()->GetWorldLocation(), TELE_TO_NOT_LEAVE_TRANSPORT);
/*
* HACK: This aura should be added by 20212 and 20213 but can't find any SMSG_SPELL_GO. Could't find their position.
* ServerToClient: SMSG_AURA_UPDATE (0x0072)
* [0] CasterGUID: Full: xxxxx Type: Unit Entry: 20212 Low: xxx
* [0] Flags: None (0)
* [0] Caster Level: 60
* [0] Spell ID: 66656
* [0] Charges: 0
* [0] Effect Mask: 1
* [0] Slot: 37
* Guid: Full: xxxxx Type: Player2 Low: xxxxx
*/
caster->AddAura(SPELL_PARACHUTE, caster);
}
void Register() override
@@ -107,11 +188,6 @@ class spell_ioc_gunship_portal : public SpellScriptLoader
}
};
enum ParachuteIC
{
SPELL_PARACHUTE_IC = 66657
};
class spell_ioc_parachute_ic : public SpellScriptLoader
{
public:
@@ -124,7 +200,7 @@ class spell_ioc_parachute_ic : public SpellScriptLoader
void HandleTriggerSpell(AuraEffect const* /*aurEff*/)
{
if (Player* target = GetTarget()->ToPlayer())
if (target->m_movementInfo.fallTime > 2000)
if (target->m_movementInfo.fallTime > 2000 && !target->GetTransport())
target->CastSpell(target, SPELL_PARACHUTE_IC, true);
}
@@ -140,9 +216,31 @@ class spell_ioc_parachute_ic : public SpellScriptLoader
}
};
enum Launch
class StartLaunchEvent : public BasicEvent
{
SPELL_LAUNCH_NO_FALLING_DAMAGE = 66251
public:
StartLaunchEvent(float x, float y, float z, uint32 lowGuid) : _x(x), _y(y), _z(z), _lowGuid(lowGuid)
{
}
bool Execute(uint64 /*time*/, uint32 /*diff*/)
{
Player* player = sObjectMgr->GetPlayerByLowGUID(_lowGuid);
if (!player || !player->GetVehicle())
return true;
player->AddAura(SPELL_LAUNCH_NO_FALLING_DAMAGE, player); // prevents falling damage
float speedZ = 10.0f;
float dist = player->GetExactDist2d(_x, _y);
player->ExitVehicle();
player->GetMotionMaster()->MoveJump(_x, _y, _z, dist, speedZ);
return true;
}
private:
float _x, _y, _z;
uint32 _lowGuid;
};
class spell_ioc_launch : public SpellScriptLoader
@@ -154,34 +252,20 @@ class spell_ioc_launch : public SpellScriptLoader
{
PrepareSpellScript(spell_ioc_launch_SpellScript);
void HandleScript(SpellEffIndex /*effIndex*/)
{
if (Player* player = GetHitPlayer())
player->AddAura(SPELL_LAUNCH_NO_FALLING_DAMAGE, player); // prevents falling damage
}
void Launch()
{
WorldLocation const* const position = GetExplTargetDest();
if (!GetCaster()->ToCreature() || !GetExplTargetDest())
return;
if (Player* player = GetHitPlayer())
{
player->ExitVehicle();
// A better research is needed
// There is no spell for this, the following calculation was based on void Spell::CalculateJumpSpeeds
float speedZ = 10.0f;
float dist = position->GetExactDist2d(player->GetPositionX(), player->GetPositionY());
float speedXY = dist;
player->GetMotionMaster()->MoveJump(position->GetPositionX(), position->GetPositionY(), position->GetPositionZ(), speedXY, speedZ);
}
float x, y, z;
x = GetExplTargetDest()->GetPositionX();
y = GetExplTargetDest()->GetPositionY();
z = GetExplTargetDest()->GetPositionZ();
GetCaster()->ToCreature()->m_Events.AddEvent(new StartLaunchEvent(x, y, z, GetHitPlayer()->GetGUIDLow()), GetCaster()->ToCreature()->m_Events.CalculateTime(2500));
}
void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_ioc_launch_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_FORCE_CAST);
AfterHit += SpellHitFn(spell_ioc_launch_SpellScript::Launch);
}
};
@@ -195,6 +279,7 @@ class spell_ioc_launch : public SpellScriptLoader
void AddSC_isle_of_conquest()
{
new npc_four_car_garage();
new npc_ioc_gunship_captain();
new spell_ioc_gunship_portal();
new spell_ioc_parachute_ic();
new spell_ioc_launch();