From 45c4fe55f04b070a78018e4624c0a40db4c8f3c4 Mon Sep 17 00:00:00 2001 From: Aeadoin <109764533+Aeadoin@users.noreply.github.com> Date: Thu, 24 Nov 2022 22:29:38 -0500 Subject: [PATCH] [Quest API] Add HasBotSpellEntry() to Perl/Lua. (#2563) * [Bots] Quest API Check Spell in Bot_Spell_Entries * Add to luabind and packages * Change Method to be HasBotSpellEntry, change SpellID to uint16 * Ordering, and removed unused logging --- zone/bot.h | 3 +++ zone/botspellsai.cpp | 18 +++++++++++++++++ zone/lua_bot.cpp | 46 +++++++++++++++++++++++++------------------- zone/lua_bot.h | 1 + zone/perl_bot.cpp | 6 ++++++ 5 files changed, 54 insertions(+), 20 deletions(-) diff --git a/zone/bot.h b/zone/bot.h index 010261b69..62746f1a0 100644 --- a/zone/bot.h +++ b/zone/bot.h @@ -557,6 +557,9 @@ public: inline InspectMessage_Struct& GetInspectMessage() { return _botInspectMessage; } inline const InspectMessage_Struct& GetInspectMessage() const { return _botInspectMessage; } + // "Quest API" Methods + bool HasBotSpellEntry(uint16 spellid); + // "SET" Class Methods void SetBotSpellID(uint32 newSpellID); virtual void SetSpawnStatus(bool spawnStatus) { _spawnStatus = spawnStatus; } diff --git a/zone/botspellsai.cpp b/zone/botspellsai.cpp index c076c5372..4f83e5b55 100644 --- a/zone/botspellsai.cpp +++ b/zone/botspellsai.cpp @@ -3185,4 +3185,22 @@ void Bot::AI_Bot_Event_SpellCastFinished(bool iCastSucceeded, uint16 slot) { } } +bool Bot::HasBotSpellEntry(uint16 spellid) { + + auto* spell_list = content_db.GetBotSpells(GetBotSpellID()); + + if (!spell_list) { + return false; + } + + // Check if Spell ID is found in Bot Spell Entries + for (auto& e : spell_list->entries) { + if (spellid == e.spellid) { + return true; + } + } + + return false; +} + #endif diff --git a/zone/lua_bot.cpp b/zone/lua_bot.cpp index a52e0a4fd..9e512050f 100644 --- a/zone/lua_bot.cpp +++ b/zone/lua_bot.cpp @@ -109,29 +109,35 @@ void Lua_Bot::SetExpansionBitmask(int expansion_bitmask, bool save) { self->SetExpansionBitmask(expansion_bitmask, save); } +bool Lua_Bot::HasBotSpellEntry(uint16 spellid) { + Lua_Safe_Call_Bool(); + return self->HasBotSpellEntry(spellid); +} + luabind::scope lua_register_bot() { return luabind::class_("Bot") .def(luabind::constructor<>()) - .def("AddBotItem", (void(Lua_Bot::*)(uint16,uint32))&Lua_Bot::AddBotItem) - .def("AddBotItem", (void(Lua_Bot::*)(uint16,uint32,int16))&Lua_Bot::AddBotItem) - .def("AddBotItem", (void(Lua_Bot::*)(uint16,uint32,int16,bool))&Lua_Bot::AddBotItem) - .def("AddBotItem", (void(Lua_Bot::*)(uint16,uint32,int16,bool,uint32))&Lua_Bot::AddBotItem) - .def("AddBotItem", (void(Lua_Bot::*)(uint16,uint32,int16,bool,uint32,uint32))&Lua_Bot::AddBotItem) - .def("AddBotItem", (void(Lua_Bot::*)(uint16,uint32,int16,bool,uint32,uint32,uint32))&Lua_Bot::AddBotItem) - .def("AddBotItem", (void(Lua_Bot::*)(uint16,uint32,int16,bool,uint32,uint32,uint32,uint32))&Lua_Bot::AddBotItem) - .def("AddBotItem", (void(Lua_Bot::*)(uint16,uint32,int16,bool,uint32,uint32,uint32,uint32,uint32))&Lua_Bot::AddBotItem) - .def("AddBotItem", (void(Lua_Bot::*)(uint16,uint32,int16,bool,uint32,uint32,uint32,uint32,uint32,uint32))&Lua_Bot::AddBotItem) - .def("CountBotItem", (uint32(Lua_Bot::*)(uint32))&Lua_Bot::CountBotItem) - .def("GetBotItem", (Lua_ItemInst(Lua_Bot::*)(uint16))&Lua_Bot::GetBotItem) - .def("GetBotItemIDBySlot", (uint32(Lua_Bot::*)(uint16))&Lua_Bot::GetBotItemIDBySlot) - .def("GetExpansionBitmask", (int(Lua_Bot::*)(void))&Lua_Bot::GetExpansionBitmask) - .def("GetOwner", (Lua_Mob(Lua_Bot::*)(void))&Lua_Bot::GetOwner) - .def("HasBotItem", (bool(Lua_Bot::*)(uint32))&Lua_Bot::HasBotItem) - .def("OwnerMessage", (void(Lua_Bot::*)(std::string))&Lua_Bot::OwnerMessage) - .def("RemoveBotItem", (void(Lua_Bot::*)(uint32))&Lua_Bot::RemoveBotItem) - .def("SetExpansionBitmask", (void(Lua_Bot::*)(int))&Lua_Bot::SetExpansionBitmask) - .def("SetExpansionBitmask", (void(Lua_Bot::*)(int,bool))&Lua_Bot::SetExpansionBitmask) - .def("SignalBot", (void(Lua_Bot::*)(int))&Lua_Bot::SignalBot); + .def("AddBotItem", (void(Lua_Bot::*)(uint16, uint32)) & Lua_Bot::AddBotItem) + .def("AddBotItem", (void(Lua_Bot::*)(uint16, uint32, int16)) & Lua_Bot::AddBotItem) + .def("AddBotItem", (void(Lua_Bot::*)(uint16, uint32, int16, bool)) & Lua_Bot::AddBotItem) + .def("AddBotItem", (void(Lua_Bot::*)(uint16, uint32, int16, bool, uint32)) & Lua_Bot::AddBotItem) + .def("AddBotItem", (void(Lua_Bot::*)(uint16, uint32, int16, bool, uint32, uint32)) & Lua_Bot::AddBotItem) + .def("AddBotItem", (void(Lua_Bot::*)(uint16, uint32, int16, bool, uint32, uint32, uint32)) & Lua_Bot::AddBotItem) + .def("AddBotItem", (void(Lua_Bot::*)(uint16, uint32, int16, bool, uint32, uint32, uint32, uint32)) & Lua_Bot::AddBotItem) + .def("AddBotItem", (void(Lua_Bot::*)(uint16, uint32, int16, bool, uint32, uint32, uint32, uint32, uint32)) & Lua_Bot::AddBotItem) + .def("AddBotItem", (void(Lua_Bot::*)(uint16, uint32, int16, bool, uint32, uint32, uint32, uint32, uint32, uint32)) & Lua_Bot::AddBotItem) + .def("CountBotItem", (uint32(Lua_Bot::*)(uint32)) & Lua_Bot::CountBotItem) + .def("GetBotItem", (Lua_ItemInst(Lua_Bot::*)(uint16)) & Lua_Bot::GetBotItem) + .def("GetBotItemIDBySlot", (uint32(Lua_Bot::*)(uint16)) & Lua_Bot::GetBotItemIDBySlot) + .def("GetExpansionBitmask", (int(Lua_Bot::*)(void)) & Lua_Bot::GetExpansionBitmask) + .def("GetOwner", (Lua_Mob(Lua_Bot::*)(void)) & Lua_Bot::GetOwner) + .def("HasBotItem", (bool(Lua_Bot::*)(uint32)) & Lua_Bot::HasBotItem) + .def("HasBotSpellEntry", (bool(Lua_Bot::*)(uint16)) & Lua_Bot::HasBotSpellEntry) + .def("OwnerMessage", (void(Lua_Bot::*)(std::string)) & Lua_Bot::OwnerMessage) + .def("RemoveBotItem", (void(Lua_Bot::*)(uint32)) & Lua_Bot::RemoveBotItem) + .def("SetExpansionBitmask", (void(Lua_Bot::*)(int)) & Lua_Bot::SetExpansionBitmask) + .def("SetExpansionBitmask", (void(Lua_Bot::*)(int, bool)) & Lua_Bot::SetExpansionBitmask) + .def("SignalBot", (void(Lua_Bot::*)(int)) & Lua_Bot::SignalBot); } #endif diff --git a/zone/lua_bot.h b/zone/lua_bot.h index 227932ffb..7f457cda9 100644 --- a/zone/lua_bot.h +++ b/zone/lua_bot.h @@ -47,6 +47,7 @@ public: void SetExpansionBitmask(int expansion_bitmask); void SetExpansionBitmask(int expansion_bitmask, bool save); void SignalBot(int signal_id); + bool HasBotSpellEntry(uint16 spellid); }; #endif diff --git a/zone/perl_bot.cpp b/zone/perl_bot.cpp index 271e50c43..2bf450100 100644 --- a/zone/perl_bot.cpp +++ b/zone/perl_bot.cpp @@ -106,6 +106,11 @@ void Perl_Bot_SetExpansionBitmask(Bot* self, int expansion_bitmask, bool save) self->SetExpansionBitmask(expansion_bitmask, save); } +bool Perl_Bot_HasBotSpellEntry(Bot* self, uint16 spellid) +{ + return self->HasBotSpellEntry(spellid); +} + void perl_register_bot() { perl::interpreter state(PERL_GET_THX); @@ -127,6 +132,7 @@ void perl_register_bot() package.add("GetExpansionBitmask", &Perl_Bot_GetExpansionBitmask); package.add("GetOwner", &Perl_Bot_GetOwner); package.add("HasBotItem", &Perl_Bot_HasBotItem); + package.add("HasBotSpellEntry", &Perl_Bot_HasBotSpellEntry); package.add("OwnerMessage", &Perl_Bot_OwnerMessage); package.add("RemoveBotItem", &Perl_Bot_RemoveBotItem); package.add("SetExpansionBitmask", (void(*)(Bot*, int))&Perl_Bot_SetExpansionBitmask);