Scripts/Gilneas: fixed database side stuff and scripting for the Merchant Square quests and also added support for the initial phasing for the next area.

This commit is contained in:
Aokromes committed 2017-12-27 12:44:41 +00:00
commit b9fb7e8981
4 files changed
+259

No files matched your search

@@ -0,0 +1,77 @@
DELETE FROM `spell_area` WHERE `spell`= 59073 AND `area` IN (4756, 4755, 4757, 4714);
INSERT INTO `spell_area` (`spell`, `area`, `gender`, `quest_start`, `quest_start_status`, `autocast`, `quest_end`, `quest_end_status`) VALUES
(59073, 4756, 2, 14078, 64, 1, 14159, 1|2|8|32),
(59073, 4755, 2, 14099, 2|64, 1, 14159, 1|2|8|32),
(59073, 4757, 2, 14099, 2|64, 1, 14159, 1|2|8|32),
(59073, 4714, 2, 14099, 2|64, 1, 14159, 1|2|8|32);
DELETE FROM `spell_area` WHERE `spell`= 49416 AND `area`= 4756;
INSERT INTO `spell_area` (`spell`, `area`, `gender`, `quest_start`, `quest_start_status`, `autocast`, `quest_end`, `quest_end_status`) VALUES
(49416, 4756, 2, 14078, 64, 1, 14099, 1|8|32);
-- Generic NPC phasing fixups
UPDATE `creature` SET `phaseId`= 0, `phaseGroup`= 371 WHERE `id` IN (39095, 34863);
-- Generic trigger bunny (multiphase)
UPDATE `creature` SET `phaseId`= 0, `phaseGroup`= 372 WHERE `id` IN (35374, 35830, 35010, 35011) AND `map`= 654 AND `areaId`= 4756;
-- Conditions
DELETE FROM `conditions` WHERE `SourceEntry` IN (68087, 68070, 80281) AND `SourceTypeOrReferenceId`= 13;
INSERT INTO conditions (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ScriptName`, `Comment`) VALUES
(13, 1, 68087, 0, 0, 31, 0, 3, 35374, 0, 0, 0, '', 'Just Citizen'),
(13, 1, 80281, 0, 0, 31, 0, 3, 35374, 0, 0, 0, '', 'Summon Citizen and Worgen'),
(13, 3, 68070, 0, 0, 31, 0, 3, 35374, 0, 0, 0, '', 'Summon Citizen and Worgen');
DELETE FROM `spell_script_names` WHERE `ScriptName` IN (
'spell_q14098_knocking_67869');
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
(67869, 'spell_q14098_knocking_67869');
DELETE FROM `smart_scripts` WHERE `entryorguid`= 34981;
UPDATE `creature_template` SET `AIName`= '', `ScriptName`= 'npc_frightened_citizen' WHERE `entry` IN (34981, 35836);
-- Rampaging Worgen fixups
UPDATE `creature_template` SET `flags_extra` = `flags_extra` | 2 WHERE `entry`= 34884;
-- Merchant Square Quest Chain
DELETE FROM `quest_template_addon` WHERE `ID` IN (14093, 14098, 14099, 14094);
INSERT INTO `quest_template_addon` (`ID`, `PrevQuestID`, `NextQuestID`, `ExclusiveGroup`) VALUES
(14093, 14091, 0, -14093),
(14098, 14091, 0, -14093),
(14094, 14091, 0, -14093),
(14099, 14093, 0, 0); -- Royal Orders
-- Remove questgiver entry from rampaging worgens
DELETE FROM `creature_queststarter` WHERE `id`= 34884;
DELETE FROM `creature_text` WHERE `CreatureID` IN (34981, 35836, 34913);
INSERT INTO `creature_text` (`CreatureID`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `comment`) VALUES
-- Frightened Citizen
(34981, 0, 0, 'What in the world? Let''s get out of here!', 12, 0, 100, 1, 0, 0, 35235, 'Frightened Citizen to Player'),
(34981, 0, 1, 'Let''s go!', 12, 0, 100, 1, 0, 0, 35236, 'Frightened Citizen to Player'),
(34981, 0, 2, 'No time to waste!', 12, 0, 100, 1, 0, 0, 35237, 'Frightened Citizen to Player'),
(34981, 0, 3, 'Worgen! Worgen everywhere!', 12, 0, 100, 1, 0, 0, 35238, 'Frightened Citizen to Player'),
(34981, 0, 4, 'Flee! They''re everywhere!', 12, 0, 100, 1, 0, 0, 35240, 'Frightened Citizen to Player'),
(34981, 0, 5, 'This place isn''t safe. Let''s leave!', 12, 0, 100, 1, 0, 0, 35239, 'Frightened Citizen to Player'),
(34981, 0, 6, 'Protect me, please!', 12, 0, 100, 1, 0, 0, 35234, 'Frightened Citizen to Player'),
(35836, 0, 0, 'It''s coming right for me!!', 12, 0, 100, 1, 0, 0, 36037, 'Frightened Citizen to Player'),
(35836, 0, 1, 'Help me, please!', 12, 0, 100, 1, 0, 0, 36038, 'Frightened Citizen to Player'),
(35836, 0, 2, 'There''s one after me!', 12, 0, 100, 1, 0, 0, 36039, 'Frightened Citizen to Player'),
(35836, 0, 3, 'Help!', 12, 0, 100, 1, 0, 0, 36040, 'Frightened Citizen to Player'),
(35836, 0, 4, 'I don''t want to die!', 12, 0, 100, 1, 0, 0, 36041, 'Frightened Citizen to Player'),
-- Liam Greyman Phase 170
(34913, 0, 0, 'Stand your ground, men!', 14, 0, 100, 0, 0, 19617, 35166, 'Prince Liam Greymane'),
(34913, 0, 1, 'Defeat these foul beasts!', 14, 0, 100, 0, 0, 19618, 35167, 'Prince Liam Greymane'),
(34913, 0, 2, 'Protect the civilians!', 14, 0, 100, 0, 0, 19619, 35168, 'Prince Liam Greymane'),
(34913, 0, 3, 'Push them back!', 14, 0, 100, 0, 0, 19620, 35169, 'Prince Liam Greymane'),
(34913, 0, 4, 'Take heart, men! We must protect our city!', 14, 0, 100, 0, 0, 19621, 35170, 'Prince Liam Greymane');
-- Creature Prince Liam Greymane 34913 SAI
SET @ENTRY := 34913;
UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`= @ENTRY;
DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(@ENTRY, 0, 0, 0, 4, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "On aggro - None: Talk 0 // ");
UPDATE `gameobject_template_addon` SET `flags`= 4 WHERE `entry`= 195306;
@@ -0,0 +1,143 @@
/*
* Copyright (C) 2008-2017 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "ScriptedGossip.h"
#include "Vehicle.h"
#include "ObjectMgr.h"
#include "ScriptedEscortAI.h"
#include "CombatAI.h"
#include "PassiveAI.h"
#include "Player.h"
#include "SpellInfo.h"
#include "CreatureTextMgr.h"
#include "MoveSplineInit.h"
#include "GameObjectAI.h"
/*######
##Quest 14098 - Evacuate the Merchant Place
######*/
enum FrightenedCitizen
{
SAY_FRIGHTENED_CITIZEN_RESCUE = 0,
NPC_EVACUATION_STALKER_FIRST = 35830,
NPC_EVACUATION_STALKER_NEAR = 35010,
NPC_EVACUATION_STALKER_FAR = 35011,
NPC_RAMPAGING_WORGEN = 35660,
CREDIT_35830 = 35830,
POINT_STALKER_FIRST = 1,
POINT_STALKER_NEAR = 2,
POINT_STALKER_FAR = 3,
EVENT_TALK_FRIGHTENED = 1,
EVENT_MOVE_TO_NEAR_STALKER = 2,
EVENT_MOVE_TO_FAR_STALKER = 3,
EVENT_DESPAWN = 4
};
class npc_frightened_citizen : public CreatureScript
{
public:
npc_frightened_citizen() : CreatureScript("npc_frightened_citizen") { }
struct npc_frightened_citizenAI : public PassiveAI
{
npc_frightened_citizenAI(Creature* creature) : PassiveAI(creature) { }
void IsSummonedBy(Unit* /*summoner*/) override
{
if (Creature* stalkerNear = me->FindNearestCreature(NPC_EVACUATION_STALKER_FIRST, 25.0f))
me->GetMotionMaster()->MovePoint(POINT_STALKER_FIRST, stalkerNear->GetPosition(), true);
}
void MovementInform(uint32 type, uint32 id) override
{
if (type != POINT_MOTION_TYPE)
return;
switch (id)
{
case POINT_STALKER_FIRST:
_events.ScheduleEvent(EVENT_TALK_FRIGHTENED, Seconds(1));
break;
case POINT_STALKER_NEAR:
_events.ScheduleEvent(EVENT_MOVE_TO_FAR_STALKER, Milliseconds(1));
break;
case POINT_STALKER_FAR:
_events.ScheduleEvent(EVENT_DESPAWN, Milliseconds(1));
break;
default:
break;
}
}
void UpdateAI(uint32 diff) override
{
_events.Update(diff);
while (uint32 eventId = _events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_TALK_FRIGHTENED:
if (Unit* summoner = me->ToTempSummon()->GetSummoner())
{
if (Player* player = summoner->ToPlayer())
{
player->KilledMonsterCredit(CREDIT_35830);
Talk(SAY_FRIGHTENED_CITIZEN_RESCUE, summoner);
}
}
_events.ScheduleEvent(EVENT_MOVE_TO_NEAR_STALKER, Seconds(2));
break;
case EVENT_MOVE_TO_NEAR_STALKER:
if (Creature* stalker = me->FindNearestCreature(NPC_EVACUATION_STALKER_FAR, 50.0f))
me->GetMotionMaster()->MovePoint(POINT_STALKER_FAR, stalker->GetPosition(), true);
else if (Creature* stalker = me->FindNearestCreature(NPC_EVACUATION_STALKER_NEAR, 100.0f))
me->GetMotionMaster()->MovePoint(POINT_STALKER_NEAR, stalker->GetPosition(), true);
break;
case EVENT_MOVE_TO_FAR_STALKER:
if (Creature* stalker = me->FindNearestCreature(NPC_EVACUATION_STALKER_FAR, 500.0f))
me->GetMotionMaster()->MovePoint(POINT_STALKER_FAR, stalker->GetPosition(), true);
break;
case EVENT_DESPAWN:
me->DespawnOrUnsummon();
break;
default:
break;
}
}
}
private:
EventMap _events;
};
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_frightened_citizenAI(creature);
}
};
void AddSC_gilneas_c1()
{
new npc_frightened_citizen();
}
@@ -70,6 +70,7 @@ void AddSC_instance_blackwing_lair();
void AddSC_deadmines(); //Deadmines
void AddSC_instance_deadmines();
void AddSC_boss_mr_smite();
void AddSC_gilneas_c1(); //Gilneas
void AddSC_gnomeregan(); //Gnomeregan
void AddSC_instance_gnomeregan();
void AddSC_boss_attumen(); //Karazhan
@@ -260,6 +261,7 @@ void AddEasternKingdomsScripts()
AddSC_deadmines(); //Deadmines
AddSC_boss_mr_smite();
AddSC_instance_deadmines();
AddSC_gilneas_c1(); //Gilneas
AddSC_gnomeregan(); //Gnomeregan
AddSC_instance_gnomeregan();
AddSC_boss_attumen(); //Karazhan
+37
View File
@@ -2752,6 +2752,42 @@ public:
}
};
class spell_q14098_knocking_67869 : public SpellScriptLoader
{
public:
spell_q14098_knocking_67869() : SpellScriptLoader("spell_q14098_knocking_67869") { }
class spell_q14098_knocking_67869_SpellScript : public SpellScript
{
PrepareSpellScript(spell_q14098_knocking_67869_SpellScript);
bool Validate(SpellInfo const* spellInfo) override
{
return ValidateSpellInfo(
{
uint32(spellInfo->Effects[EFFECT_1].BasePoints),
uint32(spellInfo->Effects[EFFECT_2].BasePoints)
});
}
void HandleEffect(SpellEffIndex /*effIndex*/)
{
if (SpellInfo const* spellInfo = GetSpellInfo())
GetCaster()->CastSpell(GetCaster(), spellInfo->Effects[RAND(0, 1) == 0 ? EFFECT_1 : EFFECT_2].BasePoints, true);
}
void Register() override
{
OnEffectHit += SpellEffectFn(spell_q14098_knocking_67869_SpellScript::HandleEffect, EFFECT_2, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
SpellScript* GetSpellScript() const override
{
return new spell_q14098_knocking_67869_SpellScript();
}
};
void AddSC_quest_spell_scripts()
{
new spell_q55_sacred_cleansing();
@@ -2820,4 +2856,5 @@ void AddSC_quest_spell_scripts()
new spell_q11306_mixing_vrykul_blood();
new spell_q11306_failed_mix_43376();
new spell_q11306_failed_mix_43378();
new spell_q14098_knocking_67869();
}