From b40140422704c1cd014680884eebd16322e0b35a Mon Sep 17 00:00:00 2001 From: splose Date: Mon, 26 Jul 2021 12:21:06 -0400 Subject: [PATCH] [Quest API] Add $client->SetGMStatus() (#1465) * add $client->SetGMStatus() * add UpdateAdmin after setting status --- zone/client.cpp | 8 +++++++- zone/client.h | 1 + zone/perl_client.cpp | 17 +++++++++++++++++ zone/zonedb.cpp | 18 ++++++++++++++++++ zone/zonedb.h | 3 +++ 5 files changed, 46 insertions(+), 1 deletion(-) diff --git a/zone/client.cpp b/zone/client.cpp index eb93f136f..c49f36eb7 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -10130,7 +10130,6 @@ void Client::SetAFK(uint8 afk_flag) { safe_delete(outapp); } - void Client::SendToInstance(std::string instance_type, std::string zone_short_name, uint32 instance_version, float x, float y, float z, float heading, std::string instance_identifier, uint32 duration) { uint32 zone_id = ZoneID(zone_short_name); std::string current_instance_type = str_tolower(instance_type); @@ -10241,3 +10240,10 @@ void Client::RemoveItem(uint32 item_id, uint32 quantity) } } } + +void Client::SetAdminStatus(int newStatus) { + if (this->Admin() != newStatus) + database.UpdateGMStatus(this->AccountID(), newStatus); + + return; +} diff --git a/zone/client.h b/zone/client.h index 74e2eed54..f3af176c0 100644 --- a/zone/client.h +++ b/zone/client.h @@ -1523,6 +1523,7 @@ public: void LoadAccountFlags(); void SetAccountFlag(std::string flag, std::string val); std::string GetAccountFlag(std::string flag); + void SetAdminStatus(int newStatus); float GetDamageMultiplier(EQ::skills::SkillType how_long_has_this_been_missing); void Consume(const EQ::ItemData *item, uint8 type, int16 slot, bool auto_consume); void PlayMP3(const char* fname); diff --git a/zone/perl_client.cpp b/zone/perl_client.cpp index 36c0ee361..7613d624f 100644 --- a/zone/perl_client.cpp +++ b/zone/perl_client.cpp @@ -3413,6 +3413,22 @@ XS(XS_Client_ReadBook) { XSRETURN_EMPTY; } +XS(XS_Client_SetGMStatus); /* prototype to pass -Wmissing-prototypes */ +XS(XS_Client_SetGMStatus) { + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: Client::SetGMStatus(THIS, int newStatus)"); // @categories Script Utility + { + Client *THIS; + uint32 accID = THIS->AccountID(); + int newStatus = (int)SvIV(ST(1)); + VALIDATE_THIS_IS_CLIENT; + THIS->SetAdminStatus(newStatus); + THIS->UpdateAdmin(true); + } + XSRETURN_EMPTY; +} + XS(XS_Client_UpdateGroupAAs); /* prototype to pass -Wmissing-prototypes */ XS(XS_Client_UpdateGroupAAs) { dXSARGS; @@ -5706,6 +5722,7 @@ XS(boot_Client) { newXSproto(strcpy(buf, "UntrainDisc"), XS_Client_UntrainDisc, file, "$$;$"); newXSproto(strcpy(buf, "UntrainDiscAll"), XS_Client_UntrainDiscAll, file, "$;$"); newXSproto(strcpy(buf, "UpdateAdmin"), XS_Client_UpdateAdmin, file, "$;$"); + newXSproto(strcpy(buf, "SetGMStatus"), XS_Client_SetGMStatus, file, "$$"); newXSproto(strcpy(buf, "UpdateGroupAAs"), XS_Client_UpdateGroupAAs, file, "$$$"); newXSproto(strcpy(buf, "UpdateLDoNPoints"), XS_Client_UpdateLDoNPoints, file, "$$$"); newXSproto(strcpy(buf, "UpdateTaskActivity"), XS_Client_UpdateTaskActivity, file, "$$$$;$"); diff --git a/zone/zonedb.cpp b/zone/zonedb.cpp index 9c493a915..7e195ab14 100755 --- a/zone/zonedb.cpp +++ b/zone/zonedb.cpp @@ -4977,3 +4977,21 @@ void ZoneDatabase::SetEXPModifier(uint32 character_id, uint32 zone_id, double ex ); database.QueryDatabase(query); } + +void ZoneDatabase::UpdateGMStatus(uint32 accID, int newStatus) +{ + if (accID) { + std::string query = fmt::format( + SQL( + UPDATE + `account` + SET `status` = {} + WHERE + `id` = {} + ), + newStatus, + accID + ); + database.QueryDatabase(query); + } +} diff --git a/zone/zonedb.h b/zone/zonedb.h index 7f523e4e1..61eb97ae1 100644 --- a/zone/zonedb.h +++ b/zone/zonedb.h @@ -289,6 +289,9 @@ public: void DeleteBuyLines(uint32 CharID); void UpdateBuyLine(uint32 CharID, uint32 BuySlot, uint32 Quantity); + + void UpdateGMStatus(uint32 accID, int newStatus); + /** ************************************************ * Character