diff --git a/zone/lua_npc.cpp b/zone/lua_npc.cpp index d048a10ac..bc6b725ee 100644 --- a/zone/lua_npc.cpp +++ b/zone/lua_npc.cpp @@ -675,6 +675,12 @@ bool Lua_NPC::IsRareSpawn() return self->IsRareSpawn(); } +void Lua_NPC::ReloadSpells() +{ + Lua_Safe_Call_Void(); + self->ReloadSpells(); +} + luabind::scope lua_register_npc() { return luabind::class_("NPC") .def(luabind::constructor<>()) @@ -769,6 +775,7 @@ luabind::scope lua_register_npc() { .def("PauseWandering", (void(Lua_NPC::*)(int))&Lua_NPC::PauseWandering) .def("PickPocket", (void(Lua_NPC::*)(Lua_Client))&Lua_NPC::PickPocket) .def("RecalculateSkills", (void(Lua_NPC::*)(void))&Lua_NPC::RecalculateSkills) + .def("ReloadSpells", (void(Lua_NPC::*)(void))&Lua_NPC::ReloadSpells) .def("RemoveAISpell", (void(Lua_NPC::*)(int))&Lua_NPC::RemoveAISpell) .def("RemoveAISpellEffect", (void(Lua_NPC::*)(int))&Lua_NPC::RemoveAISpellEffect) .def("RemoveCash", (void(Lua_NPC::*)(void))&Lua_NPC::RemoveCash) diff --git a/zone/lua_npc.h b/zone/lua_npc.h index 528a17894..e2b8cad08 100644 --- a/zone/lua_npc.h +++ b/zone/lua_npc.h @@ -140,6 +140,7 @@ public: void SetSimpleRoamBox(float box_size, float move_distance); void SetSimpleRoamBox(float box_size, float move_distance, int move_delay); void RecalculateSkills(); + void ReloadSpells(); void ScaleNPC(uint8 npc_level); bool IsRaidTarget(); bool IsRareSpawn(); diff --git a/zone/npc.cpp b/zone/npc.cpp index c0df84942..50f7b7a33 100644 --- a/zone/npc.cpp +++ b/zone/npc.cpp @@ -3643,10 +3643,18 @@ void NPC::RecalculateSkills() } } +void NPC::ReloadSpells() { + AI_AddNPCSpells(GetNPCSpellsID()); + AI_AddNPCSpellsEffects(GetNPCSpellsEffectsID()); +} + void NPC::ScaleNPC(uint8 npc_level) { if (GetLevel() != npc_level) { SetLevel(npc_level); + RecalculateSkills(); + ReloadSpells(); } + npc_scale_manager->ResetNPCScaling(this); npc_scale_manager->ScaleNPC(this); } diff --git a/zone/npc.h b/zone/npc.h index 72659db6c..ab4cb921e 100644 --- a/zone/npc.h +++ b/zone/npc.h @@ -544,6 +544,7 @@ public: void ScaleNPC(uint8 npc_level); void RecalculateSkills(); + void ReloadSpells(); static LootDropEntries_Struct NewLootDropEntry(); protected: diff --git a/zone/perl_npc.cpp b/zone/perl_npc.cpp index 096b4baa2..ff0964d1c 100644 --- a/zone/perl_npc.cpp +++ b/zone/perl_npc.cpp @@ -665,6 +665,11 @@ bool Perl_NPC_IsRareSpawn(NPC* self) return self->IsRareSpawn(); } +void Perl_NPC_ReloadSpells(NPC* self) +{ + self->ReloadSpells(); +} + void perl_register_npc() { perl::interpreter perl(PERL_GET_THX); @@ -765,6 +770,7 @@ void perl_register_npc() package.add("PauseWandering", &Perl_NPC_PauseWandering); package.add("PickPocket", &Perl_NPC_PickPocket); package.add("RecalculateSkills", &Perl_NPC_RecalculateSkills); + package.add("ReloadSpells", &Perl_NPC_ReloadSpells); package.add("RemoveAISpell", &Perl_NPC_RemoveSpellFromNPCList); package.add("RemoveAISpellEffect", &Perl_NPC_RemoveAISpellEffect); package.add("RemoveCash", &Perl_NPC_RemoveCash);