From fac9c3469f0ee40ea025250157ca4458226824f6 Mon Sep 17 00:00:00 2001 From: Kinglykrab Date: Sun, 7 Feb 2021 00:39:51 -0500 Subject: [PATCH] Add Anon/AFK methods to Perl and Lua. --- zone/client.cpp | 24 ++++++++++++++++++++++ zone/client.h | 3 +++ zone/lua_client.cpp | 26 ++++++++++++++++++++---- zone/lua_client.h | 5 ++++- zone/perl_client.cpp | 48 ++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 101 insertions(+), 5 deletions(-) diff --git a/zone/client.cpp b/zone/client.cpp index 1f1ab10b9..5a1546c92 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -10134,3 +10134,27 @@ std::vector Client::GetScribedSpells() { } return scribed_spells; } + +void Client::SetAnon(uint8 anon_flag) { + m_pp.anon = anon_flag; + auto outapp = new EQApplicationPacket(OP_SpawnAppearance, sizeof(SpawnAppearance_Struct)); + SpawnAppearance_Struct* spawn_appearance = (SpawnAppearance_Struct*)outapp->pBuffer; + spawn_appearance->spawn_id = this->GetID(); + spawn_appearance->type = AT_Anon; + spawn_appearance->parameter = anon_flag; + entity_list.QueueClients(this, outapp); + Save(); + UpdateWho(); + safe_delete(outapp); +} + +void Client::SetAFK(uint8 afk_flag) { + AFK = afk_flag; + auto outapp = new EQApplicationPacket(OP_SpawnAppearance, sizeof(SpawnAppearance_Struct)); + SpawnAppearance_Struct* spawn_appearance = (SpawnAppearance_Struct*)outapp->pBuffer; + spawn_appearance->spawn_id = this->GetID(); + spawn_appearance->type = AT_AFK; + spawn_appearance->parameter = afk_flag; + entity_list.QueueClients(this, outapp); + safe_delete(outapp); +} diff --git a/zone/client.h b/zone/client.h index cc461bc22..935b21164 100644 --- a/zone/client.h +++ b/zone/client.h @@ -369,6 +369,9 @@ public: void Kick(const std::string &reason); void WorldKick(); inline uint8 GetAnon() const { return m_pp.anon; } + inline uint8 GetAFK() const { return AFK; } + void SetAnon(uint8 anon_flag); + void SetAFK(uint8 afk_flag); inline PlayerProfile_Struct& GetPP() { return m_pp; } inline ExtendedProfile_Struct& GetEPP() { return m_epp; } inline EQ::InventoryProfile& GetInv() { return m_inv; } diff --git a/zone/lua_client.cpp b/zone/lua_client.cpp index 41d082cf3..580f997e4 100644 --- a/zone/lua_client.cpp +++ b/zone/lua_client.cpp @@ -69,9 +69,24 @@ void Lua_Client::WorldKick() { self->WorldKick(); } -bool Lua_Client::GetAnon() { - Lua_Safe_Call_Bool(); - return self->GetAnon() != 0; +int Lua_Client::GetAFK() { + Lua_Safe_Call_Int(); + return self->GetAFK(); +} + +void Lua_Client::SetAFK(uint8 afk_flag) { + Lua_Safe_Call_Void(); + self->SetAFK(afk_flag); +} + +int Lua_Client::GetAnon() { + Lua_Safe_Call_Int(); + return self->GetAnon(); +} + +void Lua_Client::SetAnon(uint8 anon_flag) { + Lua_Safe_Call_Void(); + self->SetAnon(anon_flag); } void Lua_Client::Duck() { @@ -2062,7 +2077,10 @@ luabind::scope lua_register_client() { .def("IsLD", (bool(Lua_Client::*)(void))&Lua_Client::IsLD) .def("WorldKick", (void(Lua_Client::*)(void))&Lua_Client::WorldKick) .def("SendToGuildHall", (void(Lua_Client::*)(void))&Lua_Client::SendToGuildHall) - .def("GetAnon", (bool(Lua_Client::*)(void))&Lua_Client::GetAnon) + .def("GetAFK", (int(Lua_Client::*)(void))&Lua_Client::GetAFK) + .def("SetAFK", (void(Lua_Client::*)(uint8))&Lua_Client::SetAFK) + .def("GetAnon", (int(Lua_Client::*)(void))&Lua_Client::GetAnon) + .def("SetAnon", (void(Lua_Client::*)(uint8))&Lua_Client::SetAnon) .def("Duck", (void(Lua_Client::*)(void))&Lua_Client::Duck) .def("DyeArmorBySlot", (void(Lua_Client::*)(uint8,uint8,uint8,uint8))&Lua_Client::DyeArmorBySlot) .def("DyeArmorBySlot", (void(Lua_Client::*)(uint8,uint8,uint8,uint8,uint8))&Lua_Client::DyeArmorBySlot) diff --git a/zone/lua_client.h b/zone/lua_client.h index 90c15c065..55b98087a 100644 --- a/zone/lua_client.h +++ b/zone/lua_client.h @@ -41,7 +41,10 @@ public: bool IsLD(); void WorldKick(); void SendToGuildHall(); - bool GetAnon(); + int GetAnon(); + void SetAnon(uint8 anon_flag); + int GetAFK(); + void SetAFK(uint8 afk_flag); void Duck(); void DyeArmorBySlot(uint8 slot, uint8 red, uint8 green, uint8 blue); void DyeArmorBySlot(uint8 slot, uint8 red, uint8 green, uint8 blue, uint8 use_tint); diff --git a/zone/perl_client.cpp b/zone/perl_client.cpp index c50401c98..c72635439 100644 --- a/zone/perl_client.cpp +++ b/zone/perl_client.cpp @@ -217,6 +217,51 @@ XS(XS_Client_GetAnon) { XSRETURN(1); } +XS(XS_Client_SetAnon); /* prototype to pass -Wmissing-prototypes */ +XS(XS_Client_SetAnon) { + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: Client::SetAnon(THIS, uint8 anon_flag)"); + { + Client *THIS; + uint8 anon_flag = (uint8) SvUV(ST(1)); + VALIDATE_THIS_IS_CLIENT; + THIS->SetAnon(anon_flag); + } + XSRETURN_EMPTY; +} + +XS(XS_Client_GetAFK); /* prototype to pass -Wmissing-prototypes */ +XS(XS_Client_GetAFK) { + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: Client::GetAFK(THIS)"); + { + Client *THIS; + uint8 RETVAL; + dXSTARG; + VALIDATE_THIS_IS_CLIENT; + RETVAL = THIS->GetAFK(); + XSprePUSH; + PUSHu((UV) RETVAL); + } + XSRETURN(1); +} + +XS(XS_Client_SetAFK); /* prototype to pass -Wmissing-prototypes */ +XS(XS_Client_SetAFK) { + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: Client::SetAFK(THIS, uint8 afk_flag)"); + { + Client *THIS; + uint8 afk_flag = (uint8) SvUV(ST(1)); + VALIDATE_THIS_IS_CLIENT; + THIS->SetAFK(afk_flag); + } + XSRETURN_EMPTY; +} + XS(XS_Client_Duck); /* prototype to pass -Wmissing-prototypes */ XS(XS_Client_Duck) { dXSARGS; @@ -5283,6 +5328,7 @@ XS(boot_Client) { newXSproto(strcpy(buf, "GetAAPoints"), XS_Client_GetAAPoints, file, "$$"); newXSproto(strcpy(buf, "GetAccountAge"), XS_Client_GetAccountAge, file, "$"); newXSproto(strcpy(buf, "GetAccountFlag"), XS_Client_GetAccountFlag, file, "$$"); + newXSproto(strcpy(buf, "GetAFK"), XS_Client_GetAFK, file, "$"); newXSproto(strcpy(buf, "GetAggroCount"), XS_Client_GetAggroCount, file, "$"); newXSproto(strcpy(buf, "GetAllMoney"), XS_Client_GetAllMoney, file, "$"); newXSproto(strcpy(buf, "GetAlternateCurrencyValue"), XS_Client_GetAlternateCurrencyValue, file, "$$"); @@ -5450,6 +5496,8 @@ XS(boot_Client) { newXSproto(strcpy(buf, "SetAAPoints"), XS_Client_SetAAPoints, file, "$$"); newXSproto(strcpy(buf, "SetAATitle"), XS_Client_SetAATitle, file, "$$;$"); newXSproto(strcpy(buf, "SetAccountFlag"), XS_Client_SetAccountFlag, file, "$$"); + newXSproto(strcpy(buf, "SetAFK"), XS_Client_SetAFK, file, "$$"); + newXSproto(strcpy(buf, "SetAnon"), XS_Client_SetAnon, file, "$$"); newXSproto(strcpy(buf, "SetAlternateCurrencyValue"), XS_Client_SetAlternateCurrencyValue, file, "$$$"); newXSproto(strcpy(buf, "SetBaseClass"), XS_Client_SetBaseClass, file, "$$"); newXSproto(strcpy(buf, "SetBaseGender"), XS_Client_SetBaseGender, file, "$$");