Scripts/SFK: handle Alliance faction troup spawning when defeating Commander Springvale and when walking on the walls afterwards

* handle announcement message when a player triggers the gargoyle area trigger events
This commit is contained in:
Ovahlord
2020-01-07 20:25:27 +01:00
parent 0c04267e52
commit 4ac44f388e
4 changed files with 120 additions and 22 deletions

View File

@@ -0,0 +1,43 @@
DELETE FROM `spawn_group_template` WHERE `groupId` IN (425, 426);
INSERT INTO `spawn_group_template` (`groupId`, `groupName`, `groupFlags`) VALUES
(425, 'Shadowfang Keep - Commander Springvale Alliance Troups', 4),
(426, 'Shadowfang Keep - Outside Alliance Troups', 4);
SET @CGUID := 395363;
DELETE FROM `spawn_group` WHERE `groupId` IN (425, 426);
INSERT INTO `spawn_group` (`groupId`, `spawnType`, `spawnId`) VALUES
-- Commander Springvale Alliance Troups
(425, 0, @CGUID+0),
(425, 0, @CGUID+1),
(425, 0, @CGUID+2),
-- Outside Alliance Troups
(426, 0, @CGUID+3),
(426, 0, @CGUID+4),
(426, 0, @CGUID+5),
(426, 0, @CGUID+6);
DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+6;
INSERT INTO `creature` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `PhaseId`, `PhaseGroup`, `modelid`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `VerifiedBuild`) VALUES
-- Commander Springvale Alliance Troups
(@CGUID+0, 47027, 33, 209, 209, 3, 169, 0, 0, 0, -263.906, 2269.6, 97.62373, 5.88176, 7200, 0, 0, 0, 0, 0, 0, 0, 0, 28153), -- Bloodfang Berserker (Area: Shadowfang Keep - Difficulty: 2)
(@CGUID+1, 47027, 33, 209, 209, 3, 169, 0, 0, 0, -262.012, 2268.67, 98.67534, 5.934119, 7200, 0, 0, 0, 0, 0, 0, 0, 0, 28153), -- Bloodfang Berserker (Area: Shadowfang Keep - Difficulty: 2)
(@CGUID+2, 47027, 33, 209, 209, 3, 169, 0, 0, 0, -259.929, 2267.86, 99.79284, 5.934119, 7200, 0, 0, 0, 0, 0, 0, 0, 0, 28153), -- Bloodfang Berserker (Area: Shadowfang Keep - Difficulty: 2)
-- Outside Alliance Troups
(@CGUID+3, 47027, 33, 209, 209, 3, 169, 0, 0, 0, -220.9429, 2223.227, 105.8726, 4.528842, 7200, 0, 0, 0, 0, 0, 0, 0, 0, 28153), -- Bloodfang Berserker (Area: Shadowfang Keep - Difficulty: 2)
(@CGUID+4, 47027, 33, 209, 209, 3, 169, 0, 0, 0, -226.6541, 2222.231, 106.2409, 4.48631, 7200, 0, 0, 0, 0, 0, 0, 0, 0, 28153), -- Bloodfang Berserker (Area: Shadowfang Keep - Difficulty: 2)
(@CGUID+5, 47006, 33, 209, 209, 3, 169, 0, 0, 0, -241.7395, 2217.392, 106.464, 4.622139, 7200, 0, 0, 0, 0, 0, 0, 0, 0, 28153), -- Packleader Ivar Bloodfang (Area: Shadowfang Keep - Difficulty: 2)
(@CGUID+6, 47027, 33, 209, 209, 3, 169, 0, 0, 0, -234.9143, 2216.633, 106.979, 4.32102, 7200, 0, 0, 0, 0, 0, 0, 0, 0, 28153); -- Bloodfang Berserker (Area: Shadowfang Keep - Difficulty: 2)
DELETE FROM `areatrigger_scripts` WHERE `ScriptName` IN
('at_sfk_pre_walden',
'at_sfk_outside_troups',
'at_sfk_gargoyle_event');
INSERT INTO `areatrigger_scripts` (`entry`,`ScriptName`) VALUES
(6425, 'at_sfk_outside_troups'),
(255, 'at_sfk_gargoyle_event'),
(256, 'at_sfk_gargoyle_event');
DELETE FROM `creature_text` WHERE `CreatureID`= 43679;
INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `TextRange`, `BroadcastTextId`, `comment`) VALUES
(43679, 0, 0, 'A nearby Gargoyle comes to life!', 41, 0, 100, 0, 0, 0, 3, 47423, 'DEBUG Announcer');

View File

@@ -30,6 +30,7 @@ ObjectData const creatureData[] =
{ BOSS_COMMANDER_SPRINGVALE, DATA_COMMANDER_SPRINGVALE },
{ BOSS_LORD_WALDEN, DATA_LORD_WALDEN },
{ BOSS_LORD_GODFREY, DATA_LORD_GODFREY },
{ NPC_DEBUG_ANNOUNCER, DATA_DEBUG_ANNOUNCER },
{ 0, 0 } // END
};
@@ -57,20 +58,21 @@ BossBoundaryData const boundaries =
enum SpawnGroups
{
SPAWN_GROUP_ENTRANCE_ALLIANCE = 412,
SPAWN_GROUP_ENTRANCE_HORDE = 413,
SPAWN_GROUP_DISEASE_CLOUDS_ENTRANCE = 414,
SPAWN_GROUP_DISEASE_CLOUDS_BARON_ASHBURY = 415,
SPAWN_GROUP_DISEASE_CLOUDS_BARON_SILVERLAINE = 416,
SPAWN_GROUP_DISEASE_CLOUDS_COMMANDER_SPRINGVALE = 417,
SPAWN_GROUP_DISEASE_CLOUDS_LORD_WALDEN = 418,
SPAWN_GROUP_LORD_GODFREY_DEAD_TROUPS_ALLIANCE = 419,
SPAWN_GROUP_LORD_GODFREY_DEAD_TROUPS_HORDE = 420,
SPAWN_GROUP_BARON_ASHBURY_TROUPS_ALLIANCE = 421,
SPAWN_GROUP_BARON_ASHBURY_TROUPS_HORDE = 422,
SPAWN_GROUP_BARON_SILVERLAINE_TROUPS_ALLIANCE = 423,
SPAWN_GROUP_BARON_SILVERLAINE_TROUPS_HORDE = 424
SPAWN_GROUP_ENTRANCE_ALLIANCE = 412,
SPAWN_GROUP_ENTRANCE_HORDE = 413,
SPAWN_GROUP_DISEASE_CLOUDS_ENTRANCE = 414,
SPAWN_GROUP_DISEASE_CLOUDS_BARON_ASHBURY = 415,
SPAWN_GROUP_DISEASE_CLOUDS_BARON_SILVERLAINE = 416,
SPAWN_GROUP_DISEASE_CLOUDS_COMMANDER_SPRINGVALE = 417,
SPAWN_GROUP_DISEASE_CLOUDS_LORD_WALDEN = 418,
SPAWN_GROUP_LORD_GODFREY_DEAD_TROUPS_ALLIANCE = 419,
SPAWN_GROUP_LORD_GODFREY_DEAD_TROUPS_HORDE = 420,
SPAWN_GROUP_BARON_ASHBURY_TROUPS_ALLIANCE = 421,
SPAWN_GROUP_BARON_ASHBURY_TROUPS_HORDE = 422,
SPAWN_GROUP_BARON_SILVERLAINE_TROUPS_ALLIANCE = 423,
SPAWN_GROUP_BARON_SILVERLAINE_TROUPS_HORDE = 424,
SPAWN_GROUP_COMMANDER_SPRINGVALE_TROUPS_ALLIANCE = 425,
SPAWN_GROUP_OUTSIDE_TROUPS_ALLIANCE = 426,
};
class instance_shadowfang_keep : public InstanceMapScript
@@ -152,6 +154,13 @@ public:
_currentlyActiveTroupSpawnGroup = *_teamInInstance == ALLIANCE ? SPAWN_GROUP_BARON_SILVERLAINE_TROUPS_ALLIANCE : SPAWN_GROUP_BARON_SILVERLAINE_TROUPS_HORDE;
instance->SpawnGroupSpawn(_currentlyActiveTroupSpawnGroup);
break;
case DATA_COMMANDER_SPRINGVALE:
if (*_teamInInstance == ALLIANCE)
{
_currentlyActiveTroupSpawnGroup = 0;
instance->SpawnGroupSpawn(SPAWN_GROUP_COMMANDER_SPRINGVALE_TROUPS_ALLIANCE);
}
break;
default:
break;
}
@@ -180,7 +189,7 @@ public:
instance->SpawnGroupSpawn(SPAWN_GROUP_DISEASE_CLOUDS_LORD_WALDEN);
}
// Despawning previous troup
// Despawning previous troups
if (_currentlyActiveTroupSpawnGroup)
instance->SpawnGroupDespawn(_currentlyActiveTroupSpawnGroup);
@@ -196,6 +205,24 @@ public:
instance->SpawnGroupSpawn(*_teamInInstance == ALLIANCE ? SPAWN_GROUP_LORD_GODFREY_DEAD_TROUPS_ALLIANCE : SPAWN_GROUP_LORD_GODFREY_DEAD_TROUPS_HORDE);
}
void SetData(uint32 type, uint32 value) override
{
switch (type)
{
case DATA_OUTSIDE_TROUPS_SPAWN:
if (*_teamInInstance == ALLIANCE)
{
if (_currentlyActiveTroupSpawnGroup)
instance->SpawnGroupDespawn(_currentlyActiveTroupSpawnGroup);
instance->SpawnGroupSpawn(SPAWN_GROUP_OUTSIDE_TROUPS_ALLIANCE);
}
break;
default:
break;
}
}
uint32 GetData(uint32 type) const override
{
switch (type)

View File

@@ -74,7 +74,10 @@ enum Texts
SAY_IVAR_ROOM_OPEN = 13,
// Bloodfang Berserker
SAY_SHOW_COMMANDER_SPRINGVALE = 1
SAY_SHOW_COMMANDER_SPRINGVALE = 1,
// DEBUG Announcer
SAY_ANNOUNCE_GARGOYLES = 0
};
enum SKShieldOfBones
@@ -119,13 +122,16 @@ public:
}
};
class at_sfk_pre_walden : public OnlyOnceAreaTriggerScript
class at_sfk_outside_troups : public OnlyOnceAreaTriggerScript
{
public:
at_sfk_pre_walden() : OnlyOnceAreaTriggerScript("at_sfk_pre_walden") { }
at_sfk_outside_troups() : OnlyOnceAreaTriggerScript("at_sfk_outside_troups") { }
bool _OnTrigger(Player* /*player*/, AreaTriggerEntry const* /*areaTrigger*/) override
bool _OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override
{
if (InstanceScript* instance = player->GetInstanceScript())
instance->SetData(DATA_OUTSIDE_TROUPS_SPAWN, DONE);
return true;
}
};
@@ -141,10 +147,28 @@ public:
}
};
class at_sfk_gargoyle_event : public OnlyOnceAreaTriggerScript
{
public:
at_sfk_gargoyle_event() : OnlyOnceAreaTriggerScript("at_sfk_gargoyle_event") { }
bool _OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override
{
if (InstanceScript* instance = player->GetInstanceScript())
{
if (Creature* announcer = instance->GetCreature(DATA_DEBUG_ANNOUNCER))
if (announcer->IsAIEnabled)
announcer->AI()->Talk(SAY_ANNOUNCE_GARGOYLES);
}
return true;
}
};
void AddSC_shadowfang_keep()
{
RegisterAuraScript(spell_sfk_shield_of_bones);
new at_sfk_pre_walden();
new at_sfk_outside_troups();
new at_sfk_godfrey_intro();
new at_sfk_baron_silverlaine_post_floor();
new at_sfk_gargoyle_event();
}

View File

@@ -75,7 +75,7 @@ enum SKCreatures
NPC_BLOODTHIRSTY_GHOUL = 50561,
NPC_PISTOL_BARRAGE_DUMMY = 52065,
// Generic NPCs
// Generic NPCs
NPC_VETERAN_FORSAKEN_TROOPER = 47030,
NPC_DEATHSTALKER_BELMONT = 47293,
NPC_FORSAKEN_BLIGHTSPREADER = 47031,
@@ -83,7 +83,8 @@ enum SKCreatures
NPC_DISEASE_BUNNY = 23837,
NPC_BLOODFANG_BERSERKER = 47027,
NPC_PACKLEADER_IVAR = 47006,
NPC_HIGH_MAGISTRATE_HENRY = 47862
NPC_HIGH_MAGISTRATE_HENRY = 47862,
NPC_DEBUG_ANNOUNCER = 43679,
};
enum SKGameObjectIds
@@ -104,6 +105,9 @@ enum SKDataTypes
DATA_APOTHECARY_HUMMEL = 5,
DATA_TEAM_IN_INSTANCE,
DATA_OUTSIDE_TROUPS_SPAWN,
DATA_DEBUG_ANNOUNCER,
DATA_ARUGAL_DOOR,
DATA_SORCERER_GATE,