From 486c7c44be46b5eabcee6d06a6056f28c846b9ea Mon Sep 17 00:00:00 2001 From: Alex King <89047260+Kinglykrab@users.noreply.github.com> Date: Fri, 21 Feb 2025 23:57:41 -0500 Subject: [PATCH] [Quest API] Add GetSpawn() to Perl and Lua (#4702) * [Quest API] Add GetSpawn() to Perl and Lua * Push * Update npc.h --- zone/lua_npc.cpp | 8 ++++++++ zone/lua_npc.h | 2 ++ zone/npc.cpp | 5 +---- zone/npc.h | 1 + zone/perl_npc.cpp | 6 ++++++ 5 files changed, 18 insertions(+), 4 deletions(-) diff --git a/zone/lua_npc.cpp b/zone/lua_npc.cpp index eb41e7ac7..b1c3d8d25 100644 --- a/zone/lua_npc.cpp +++ b/zone/lua_npc.cpp @@ -9,6 +9,7 @@ #include "lua_client.h" #include "lua_item.h" #include "lua_iteminst.h" +#include "lua_spawn.h" struct Lua_NPC_Loot_List { std::vector entries; @@ -932,6 +933,12 @@ void Lua_NPC::ReturnHandinItems(Lua_Client c) self->ReturnHandinItems(c); } +Lua_Spawn Lua_NPC::GetSpawn(lua_State* L) +{ + Lua_Safe_Call_Class(Lua_Spawn); + return Lua_Spawn(self->GetSpawn()); +} + luabind::scope lua_register_npc() { return luabind::class_("NPC") .def(luabind::constructor<>()) @@ -1009,6 +1016,7 @@ luabind::scope lua_register_npc() { .def("GetSilver", (uint32(Lua_NPC::*)(void))&Lua_NPC::GetSilver) .def("GetSlowMitigation", (int(Lua_NPC::*)(void))&Lua_NPC::GetSlowMitigation) .def("GetSp2", (uint32(Lua_NPC::*)(void))&Lua_NPC::GetSp2) + .def("GetSpawn", (Lua_Spawn(Lua_NPC::*)(void))&Lua_NPC::GetSpawn) .def("GetSpawnKillCount", (int(Lua_NPC::*)(void))&Lua_NPC::GetSpawnKillCount) .def("GetSpawnPointH", (float(Lua_NPC::*)(void))&Lua_NPC::GetSpawnPointH) .def("GetSpawnPointID", (int(Lua_NPC::*)(void))&Lua_NPC::GetSpawnPointID) diff --git a/zone/lua_npc.h b/zone/lua_npc.h index 8ec971d65..93a0b9451 100644 --- a/zone/lua_npc.h +++ b/zone/lua_npc.h @@ -10,6 +10,7 @@ class Lua_NPC; class Lua_Client; struct Lua_NPC_Loot_List; class Lua_Inventory; +class Lua_Spawn; namespace luabind { struct scope; @@ -196,6 +197,7 @@ public: luabind::adl::object items_table ); void ReturnHandinItems(Lua_Client c); + Lua_Spawn GetSpawn(lua_State* L); }; #endif diff --git a/zone/npc.cpp b/zone/npc.cpp index 7d13a68b8..60f917610 100644 --- a/zone/npc.cpp +++ b/zone/npc.cpp @@ -2751,10 +2751,7 @@ void NPC::LevelScale() { uint32 NPC::GetSpawnPointID() const { - if (respawn2) { - return respawn2->GetID(); - } - return 0; + return respawn2 ? respawn2->GetID() : 0; } void NPC::NPCSlotTexture(uint8 slot, uint32 texture) diff --git a/zone/npc.h b/zone/npc.h index 83b690d00..84022ef13 100644 --- a/zone/npc.h +++ b/zone/npc.h @@ -248,6 +248,7 @@ public: uint16 GetWaypointMax() const { return wp_m; } int32 GetGrid() const { return grid; } + Spawn2* GetSpawn() { return respawn2 ? respawn2 : nullptr; } uint32 GetSpawnGroupId() const { return spawn_group_id; } uint32 GetSpawnPointID() const; diff --git a/zone/perl_npc.cpp b/zone/perl_npc.cpp index 7ebe49eb2..bea29a037 100644 --- a/zone/perl_npc.cpp +++ b/zone/perl_npc.cpp @@ -875,6 +875,11 @@ void Perl_NPC_ReturnHandinItems(NPC *self, Client* c) self->ReturnHandinItems(c); } +Spawn2* Perl_NPC_GetSpawn(NPC* self) +{ + return self->GetSpawn(); +} + void perl_register_npc() { perl::interpreter perl(PERL_GET_THX); @@ -953,6 +958,7 @@ void perl_register_npc() package.add("GetSilver", &Perl_NPC_GetSilver); package.add("GetSlowMitigation", &Perl_NPC_GetSlowMitigation); package.add("GetSp2", &Perl_NPC_GetSp2); + package.add("GetSpawn", &Perl_NPC_GetSpawn); package.add("GetSpawnKillCount", &Perl_NPC_GetSpawnKillCount); package.add("GetSpawnPointH", &Perl_NPC_GetSpawnPointH); package.add("GetSpawnPointID", &Perl_NPC_GetSpawnPointID);