Skip to content

Commit

Permalink
Merge pull request #29 from cmangos/master
Browse files Browse the repository at this point in the history
Pull cmangos
  • Loading branch information
mostlikely4r authored Nov 9, 2024
2 parents 5f87c8f + b8f98ba commit 26ae8c5
Show file tree
Hide file tree
Showing 30 changed files with 562 additions and 164 deletions.
16 changes: 16 additions & 0 deletions sql/base/dbc/cmangos_fixes/Spell.sql
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,9 @@ UPDATE `spell_template` SET `MaxTargetLevel`=63 WHERE `id`=15366;
-- Watchkeeper Gargolmar - Mortal Wound should stack to 50/100%
UPDATE `spell_template` SET `StackAmount`=10 WHERE `id` IN(30641,36814);

-- Battle Shout used from various trash npcs
UPDATE `spell_template` SET `AttributesEx`= 2048 WHERE `id` = 31403;

-- Warlock Ritual of Summoning
-- 5 yd summoning radius
UPDATE `spell_template` SET `EffectRadiusIndex1`=8 WHERE `id`=698;
Expand Down Expand Up @@ -2210,6 +2213,7 @@ UPDATE `spell_template` SET `AttributesServerSide` = `AttributesServerSide`|4 WH
11011, -- Stone Watcher of Norgannon Passive
11048, -- Perm. Illusion Bishop Tyriona
13377, -- Fire Shield
13886, -- Withering Poison Proc
15978, -- Puncture
21911, -- Puncture
24692, -- Hakkar Power
Expand Down Expand Up @@ -3203,6 +3207,18 @@ INSERT INTO spell_template (Id, SchoolMask, Category, Dispel, Mechanic, Attribut
-- Shirrak - Inhibit magic - confirmed to ignore los
UPDATE `spell_template` SET `AttributesEx2`=AttributesEx2|4 WHERE `id` IN(32264);

-- missing dummy trigger spell
INSERT INTO spell_template(Id, SchoolMask, Category, Dispel, Mechanic, Attributes, AttributesEx, AttributesEx2, AttributesEx3, AttributesEx4, AttributesEx5, Stances, StancesNot, Targets, TargetCreatureType, RequiresSpellFocus, CasterAuraState, TargetAuraState, CasterAuraStateNot, TargetAuraStateNot, CastingTimeIndex, RecoveryTime, CategoryRecoveryTime, InterruptFlags, AuraInterruptFlags, ChannelInterruptFlags, procFlags, procChance, procCharges, maxLevel, baseLevel, spellLevel, DurationIndex, powerType, manaCost, manaCostPerLevel, manaPerSecond, manaPerSecondPerLevel, rangeIndex, speed, StackAmount, Totem1, Totem2, Reagent1, Reagent2, Reagent3, Reagent4, Reagent5, Reagent6, Reagent7, Reagent8, ReagentCount1, ReagentCount2, ReagentCount3, ReagentCount4, ReagentCount5, ReagentCount6, ReagentCount7, ReagentCount8, EquippedItemClass, EquippedItemSubClassMask, EquippedItemInventoryTypeMask, Effect1, Effect2, Effect3, EffectDieSides1, EffectDieSides2, EffectDieSides3, EffectBaseDice1, EffectBaseDice2, EffectBaseDice3, EffectDicePerLevel1, EffectDicePerLevel2, EffectDicePerLevel3, EffectRealPointsPerLevel1, EffectRealPointsPerLevel2, EffectRealPointsPerLevel3, EffectBasePoints1, EffectBasePoints2, EffectBasePoints3, EffectMechanic1, EffectMechanic2, EffectMechanic3, EffectImplicitTargetA1, EffectImplicitTargetA2, EffectImplicitTargetA3, EffectImplicitTargetB1, EffectImplicitTargetB2, EffectImplicitTargetB3, EffectRadiusIndex1, EffectRadiusIndex2, EffectRadiusIndex3, EffectApplyAuraName1, EffectApplyAuraName2, EffectApplyAuraName3, EffectAmplitude1, EffectAmplitude2, EffectAmplitude3, EffectMultipleValue1, EffectMultipleValue2, EffectMultipleValue3, EffectChainTarget1, EffectChainTarget2, EffectChainTarget3, EffectItemType1, EffectItemType2, EffectItemType3, EffectMiscValue1, EffectMiscValue2, EffectMiscValue3, EffectMiscValueB1, EffectMiscValueB2, EffectMiscValueB3, EffectTriggerSpell1, EffectTriggerSpell2, EffectTriggerSpell3, EffectPointsPerComboPoint1, EffectPointsPerComboPoint2, EffectPointsPerComboPoint3, SpellVisual, SpellIconID, activeIconID, spellPriority, SpellName, SpellName2, SpellName3, SpellName4, SpellName5, SpellName6, SpellName7, SpellName8, ManaCostPercentage, StartRecoveryCategory, StartRecoveryTime, MaxTargetLevel, SpellFamilyName, SpellFamilyFlags, MaxAffectedTargets, DmgClass, PreventionType, DmgMultiplier1, DmgMultiplier2, DmgMultiplier3, TotemCategory1, TotemCategory2, AreaId) VALUES
('36294', '1', '0', '0', '0', '256', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '101', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '-1', '0', '0', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', 'Trigger 000', '', '', '', '', '', '', '', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0');

-- missing corpse ignite spell
INSERT INTO spell_template(Id, SchoolMask, Category, Dispel, Mechanic, Attributes, AttributesEx, AttributesEx2, AttributesEx3, AttributesEx4, AttributesEx5, Stances, StancesNot, Targets, TargetCreatureType, RequiresSpellFocus, CasterAuraState, TargetAuraState, CasterAuraStateNot, TargetAuraStateNot, CastingTimeIndex, RecoveryTime, CategoryRecoveryTime, InterruptFlags, AuraInterruptFlags, ChannelInterruptFlags, procFlags, procChance, procCharges, maxLevel, baseLevel, spellLevel, DurationIndex, powerType, manaCost, manaCostPerLevel, manaPerSecond, manaPerSecondPerLevel, rangeIndex, speed, StackAmount, Totem1, Totem2, Reagent1, Reagent2, Reagent3, Reagent4, Reagent5, Reagent6, Reagent7, Reagent8, ReagentCount1, ReagentCount2, ReagentCount3, ReagentCount4, ReagentCount5, ReagentCount6, ReagentCount7, ReagentCount8, EquippedItemClass, EquippedItemSubClassMask, EquippedItemInventoryTypeMask, Effect1, Effect2, Effect3, EffectDieSides1, EffectDieSides2, EffectDieSides3, EffectBaseDice1, EffectBaseDice2, EffectBaseDice3, EffectDicePerLevel1, EffectDicePerLevel2, EffectDicePerLevel3, EffectRealPointsPerLevel1, EffectRealPointsPerLevel2, EffectRealPointsPerLevel3, EffectBasePoints1, EffectBasePoints2, EffectBasePoints3, EffectMechanic1, EffectMechanic2, EffectMechanic3, EffectImplicitTargetA1, EffectImplicitTargetA2, EffectImplicitTargetA3, EffectImplicitTargetB1, EffectImplicitTargetB2, EffectImplicitTargetB3, EffectRadiusIndex1, EffectRadiusIndex2, EffectRadiusIndex3, EffectApplyAuraName1, EffectApplyAuraName2, EffectApplyAuraName3, EffectAmplitude1, EffectAmplitude2, EffectAmplitude3, EffectMultipleValue1, EffectMultipleValue2, EffectMultipleValue3, EffectChainTarget1, EffectChainTarget2, EffectChainTarget3, EffectItemType1, EffectItemType2, EffectItemType3, EffectMiscValue1, EffectMiscValue2, EffectMiscValue3, EffectMiscValueB1, EffectMiscValueB2, EffectMiscValueB3, EffectTriggerSpell1, EffectTriggerSpell2, EffectTriggerSpell3, EffectPointsPerComboPoint1, EffectPointsPerComboPoint2, EffectPointsPerComboPoint3, SpellVisual, SpellIconID, activeIconID, spellPriority, SpellName, SpellName2, SpellName3, SpellName4, SpellName5, SpellName6, SpellName7, SpellName8, ManaCostPercentage, StartRecoveryCategory, StartRecoveryTime, MaxTargetLevel, SpellFamilyName, SpellFamilyFlags, MaxAffectedTargets, DmgClass, PreventionType, DmgMultiplier1, DmgMultiplier2, DmgMultiplier3, TotemCategory1, TotemCategory2, AreaId) VALUES
('32147', '1', '0', '0', '0', '8388992', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '101', '0', '0', '0', '0', '28', '0', '0', '0', '0', '0', '12', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '-1', '0', '0', '76', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '46', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '182211', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', 'Ignite Corpse', '', '', '', '', '', '', '', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0');

-- raging soul passive
INSERT INTO spell_template(Id, SchoolMask, Category, Dispel, Mechanic, Attributes, AttributesEx, AttributesEx2, AttributesEx3, AttributesEx4, AttributesEx5, Stances, StancesNot, Targets, TargetCreatureType, RequiresSpellFocus, CasterAuraState, TargetAuraState, CasterAuraStateNot, TargetAuraStateNot, CastingTimeIndex, RecoveryTime, CategoryRecoveryTime, InterruptFlags, AuraInterruptFlags, ChannelInterruptFlags, procFlags, procChance, procCharges, maxLevel, baseLevel, spellLevel, DurationIndex, powerType, manaCost, manaCostPerLevel, manaPerSecond, manaPerSecondPerLevel, rangeIndex, speed, StackAmount, Totem1, Totem2, Reagent1, Reagent2, Reagent3, Reagent4, Reagent5, Reagent6, Reagent7, Reagent8, ReagentCount1, ReagentCount2, ReagentCount3, ReagentCount4, ReagentCount5, ReagentCount6, ReagentCount7, ReagentCount8, EquippedItemClass, EquippedItemSubClassMask, EquippedItemInventoryTypeMask, Effect1, Effect2, Effect3, EffectDieSides1, EffectDieSides2, EffectDieSides3, EffectBaseDice1, EffectBaseDice2, EffectBaseDice3, EffectDicePerLevel1, EffectDicePerLevel2, EffectDicePerLevel3, EffectRealPointsPerLevel1, EffectRealPointsPerLevel2, EffectRealPointsPerLevel3, EffectBasePoints1, EffectBasePoints2, EffectBasePoints3, EffectMechanic1, EffectMechanic2, EffectMechanic3, EffectImplicitTargetA1, EffectImplicitTargetA2, EffectImplicitTargetA3, EffectImplicitTargetB1, EffectImplicitTargetB2, EffectImplicitTargetB3, EffectRadiusIndex1, EffectRadiusIndex2, EffectRadiusIndex3, EffectApplyAuraName1, EffectApplyAuraName2, EffectApplyAuraName3, EffectAmplitude1, EffectAmplitude2, EffectAmplitude3, EffectMultipleValue1, EffectMultipleValue2, EffectMultipleValue3, EffectChainTarget1, EffectChainTarget2, EffectChainTarget3, EffectItemType1, EffectItemType2, EffectItemType3, EffectMiscValue1, EffectMiscValue2, EffectMiscValue3, EffectMiscValueB1, EffectMiscValueB2, EffectMiscValueB3, EffectTriggerSpell1, EffectTriggerSpell2, EffectTriggerSpell3, EffectPointsPerComboPoint1, EffectPointsPerComboPoint2, EffectPointsPerComboPoint3, SpellVisual, SpellIconID, activeIconID, spellPriority, SpellName, SpellName2, SpellName3, SpellName4, SpellName5, SpellName6, SpellName7, SpellName8, ManaCostPercentage, StartRecoveryCategory, StartRecoveryTime, MaxTargetLevel, SpellFamilyName, SpellFamilyFlags, MaxAffectedTargets, DmgClass, PreventionType, DmgMultiplier1, DmgMultiplier2, DmgMultiplier3, TotemCategory1, TotemCategory2, AreaId) VALUES
('32460', '1', '0', '0', '0', '256', '268435456', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '101', '0', '0', '0', '0', '21', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '-1', '0', '0', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '23', '0', '0', '1000', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '32459', '0', '0', '0', '0', '0', '0', '1', '0', '0', 'Raging Soul Passive', '', '', '', '', '', '', '', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '0', '0', '0', '0');

-- ============================================================
-- WOTLK section
-- ============================================================
Expand Down
4 changes: 0 additions & 4 deletions sql/base/dbc/original_data/CombatCondition.sql
Original file line number Diff line number Diff line change
Expand Up @@ -419,14 +419,10 @@ INSERT INTO combat_condition(Id,WorldStateExpressionID,SelfConditionID,TargetCon
(1317,0,1040,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(1318,5422,1041,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(1319,0,1042,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(4523,30517,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(4606,0,4719,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(5102,34365,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(5259,0,5716,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(5356,0,5865,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(5364,0,5872,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(5375,35631,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(5376,35632,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(5779,0,6425,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(1071,0,142,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(1036,0,0,0,0,0,0,0,0,0,0,0,601,0,5,0,0,0),
Expand Down
3 changes: 3 additions & 0 deletions sql/scriptdev2/scriptdev2.sql
Original file line number Diff line number Diff line change
Expand Up @@ -317,6 +317,7 @@ UPDATE creature_template SET ScriptName='npc_shaheen' WHERE entry=19671;
UPDATE creature_template SET ScriptName='npc_ethereum_prisoner_dungeon' WHERE entry IN(22927);
UPDATE gameobject_template SET ScriptName='go_stasis_chamber_mana_tombs' WHERE entry IN(185519);
UPDATE gameobject_template SET ScriptName='go_stasis_chamber_shaffar' WHERE entry IN(185522);
UPDATE instance_template SET ScriptName='instance_mana_tombs' WHERE map=557;

/* AUCHENAI CRYPTS */
UPDATE creature_template SET ScriptName='boss_exarch_maladaar' WHERE entry=18373;
Expand Down Expand Up @@ -734,6 +735,7 @@ UPDATE creature_template SET ScriptName='npc_kelerun_bloodmourn' WHERE entry=178
UPDATE gameobject_template SET ScriptName='go_harbinger_second_trial' WHERE entry=182052;
UPDATE creature_template SET ScriptName='npc_apprentice_mirveda' WHERE entry=15402;
UPDATE creature_template SET ScriptName='npc_infused_crystal' WHERE entry=16364;
UPDATE creature_template SET ScriptName='npc_hatchling_movement' WHERE entry IN(21055,21063,21064);

/* FELWOOD */
UPDATE creature_template SET ScriptName='npc_kitten' WHERE entry=9937;
Expand Down Expand Up @@ -1134,6 +1136,7 @@ UPDATE creature_template SET ScriptName='npc_adal' WHERE entry IN(18481);
UPDATE creature_template SET ScriptName='npc_solenor' WHERE entry IN (14530,14536);

/* SILVERMOON */
UPDATE creature_template SET ScriptName='npc_event_generator_001' WHERE entry IN (2334);

/* SILVERPINE FOREST */
UPDATE creature_template SET ScriptName='npc_deathstalker_erland' WHERE entry=1978;
Expand Down
3 changes: 2 additions & 1 deletion sql/scriptdev2/spell.sql
Original file line number Diff line number Diff line change
Expand Up @@ -657,7 +657,8 @@ INSERT INTO spell_scripts(Id, ScriptName) VALUES
(28695,'spell_gameobject_call_for_help_on_usage'), -- Herb Gathering (Master)
(29354,'spell_gameobject_call_for_help_on_usage'), -- Mining (Master)
(30434,'spell_gameobject_call_for_help_on_usage'), -- Elemental Seaforium Charge
(34799,'spell_arcane_devastation');
(34799,'spell_arcane_devastation'),
(32173,'spell_entangling_roots');

-- Wotlk
INSERT INTO spell_scripts(Id, ScriptName) VALUES
Expand Down
7 changes: 7 additions & 0 deletions src/game/AI/BaseAI/CreatureAI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,13 @@ void CreatureAI::DamageTaken(Unit* dealer, uint32& damage, DamageEffectType dama
}
}

void CreatureAI::JustReachedHome()
{
if (m_dismountOnAggro)
if (CreatureInfo const* mountInfo = m_creature->GetMountInfo())
m_creature->Mount(Creature::ChooseDisplayId(mountInfo));
}

void CreatureAI::SetDeathPrevention(bool state)
{
if (state)
Expand Down
1 change: 1 addition & 0 deletions src/game/AI/BaseAI/CreatureAI.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ class CreatureAI : public UnitAI
virtual void AttackStart(Unit* who) override;
virtual void DamageTaken(Unit* dealer, uint32& damage, DamageEffectType damageType, SpellEntry const* spellInfo) override;
virtual void JustPreventedDeath(Unit* /*attacker*/) {}
virtual void JustReachedHome() override;

void DoFakeDeath(uint32 spellId = 0);
void SetDeathPrevention(bool state);
Expand Down
3 changes: 2 additions & 1 deletion src/game/AI/BaseAI/UnitAI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -510,7 +510,8 @@ void UnitAI::CheckForHelp(Unit* who, Unit* me, float distance)
return;

// pulling happens once panic/retreating ends
if (who->hasUnitState(UNIT_STAT_PANIC | UNIT_STAT_RETREATING))
// current theory is that help aggro is never done if owner has suspended AI function during CC
if (who->hasUnitState(UNIT_STAT_PANIC | UNIT_STAT_RETREATING) || who->IsCrowdControlled())
return;

if (me->CanInitiateAttack() && me->CanAttackOnSight(victim) && victim->isInAccessablePlaceFor(me) && victim->IsVisibleForOrDetect(me, me, false))
Expand Down
6 changes: 1 addition & 5 deletions src/game/AI/EventAI/CreatureEventAI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1162,11 +1162,7 @@ bool CreatureEventAI::ProcessAction(CreatureEventAI_Action const& action, uint32
// set model based on entry from creature_template
if (action.mount.creatureId)
{
if (CreatureInfo const* cInfo = ObjectMgr::GetCreatureTemplate(action.mount.creatureId))
{
uint32 display_id = Creature::ChooseDisplayId(cInfo);
m_creature->Mount(display_id);
}
m_creature->MountEntry(action.mount.creatureId);
}
// if no param1, then use value from param2 (modelId)
else
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -481,6 +481,32 @@ UnitAI* GetAI_npc_infused_crystalAI(Creature* pCreature)
return new npc_infused_crystalAI(pCreature);
}

struct HatchlingMovementAI : public ScriptedAI
{
HatchlingMovementAI(Creature* creature) : ScriptedAI(creature)
{
AddCustomAction(1, 1200u, [&]()
{
PickNewPoint();
}, TIMER_COMBAT_OOC);
}

void MovementInform(uint32 movementType, uint32 data) override
{
if (movementType == POINT_MOTION_TYPE && data == 1)
ResetTimer(1, 1200u); // exact delay after each movement
}

void PickNewPoint()
{
Position pos = m_creature->GetRespawnPosition();
float angle = rand_norm_f() * 2 * M_PI_F;
float range = rand_norm_f() * 2.f;
m_creature->MovePositionToFirstCollision(pos, range, angle);
m_creature->GetMotionMaster()->MovePoint(1, pos);
}
};

void AddSC_eversong_woods()
{
Script* pNewScript = new Script;
Expand All @@ -504,4 +530,9 @@ void AddSC_eversong_woods()
pNewScript->Name = "npc_infused_crystal";
pNewScript->GetAI = &GetAI_npc_infused_crystalAI;
pNewScript->RegisterSelf();

pNewScript = new Script;
pNewScript->Name = "npc_hatchling_movement";
pNewScript->GetAI = &GetNewAIInstance<HatchlingMovementAI>;
pNewScript->RegisterSelf();
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,46 @@ EndContentData */

#include "AI/ScriptDevAI/include/sc_common.h"

struct EventGenerator001TurnAI : public ScriptedAI
{
EventGenerator001TurnAI(Creature* creature) : ScriptedAI(creature), m_ori(false)
{
m_creature->SetCanEnterCombat(false);
AddCustomAction(1, 5000u, [&]()
{
std::vector<Creature*> const* creaturesLeft = m_creature->GetMap()->GetCreatures("SILVERMOON_GUARDIANS_TURN_1");
if (creaturesLeft)
{
for (Creature* creature : *creaturesLeft)
if (!creature->IsInCombat())
creature->SetFacingTo(m_ori ? 5.585053443908691406f : 4.014257431030273437f);
}
std::vector<Creature*> const* creaturesRight = m_creature->GetMap()->GetCreatures("SILVERMOON_GUARDIANS_TURN_2");
if (creaturesRight)
{
for (Creature* creature : *creaturesRight)
if (!creature->IsInCombat())
creature->SetFacingTo(m_ori ? 2.443460941314697265f : 4.014257431030273437f);
}
m_ori = !m_ori;
ResetTimer(1, 180000);
});
}

bool m_ori;
};

UnitAI* GetNewAIInstance(Creature* creature)
{
if (creature->HasStringId("SILVERMOON_GUARDIANS_TURN_EVENT"))
return new EventGenerator001TurnAI(creature);
return nullptr;
}

void AddSC_silvermoon_city()
{
Script* pNewScript = new Script;
pNewScript->Name = "npc_event_generator_001";
pNewScript->GetAI = &GetNewAIInstance<EventGenerator001TurnAI>;
pNewScript->RegisterSelf();
}
Loading

0 comments on commit 26ae8c5

Please sign in to comment.