From bb58a9cd2014aabe35f4b745216489f9ff854c7c Mon Sep 17 00:00:00 2001 From: Kinglykrab <89047260+Kinglykrab@users.noreply.github.com> Date: Wed, 16 Nov 2022 08:23:39 -0500 Subject: [PATCH] [Quest API] Add Marquee methods to Perl/Lua. (#2544) * [Quest API] Add zonemarquee to Perl/Lua. # Perl - Add `quest::zonemarquee(type, priority, fade_in, fade_out, duration, message)` to Perl. # Lua - Add `eq.zone_marquee(type, priority, fade_in, fade_out, duration, message)` to Lua. # Notes - Allows operators to easily send a zone-wide marquee, similar to `quest::ze`/`eq.zone_emote`. * Update lua_general.cpp * Add other methods. * Add entity list marquee * Update client.cpp * Add more shorthands. --- zone/client.cpp | 32 ++++++++++++++++++++++----- zone/client.h | 3 ++- zone/embparser_api.cpp | 48 ++++++++++++++++++++++++++++++++++++++++ zone/entity.cpp | 23 +++++++++++++++++++ zone/entity.h | 2 ++ zone/lua_client.cpp | 25 ++++++++++++++++----- zone/lua_client.h | 4 +++- zone/lua_entity_list.cpp | 18 +++++++++++++++ zone/lua_entity_list.h | 3 +++ zone/lua_general.cpp | 42 +++++++++++++++++++++++++++++++++++ zone/lua_mob.cpp | 4 ++-- zone/lua_mob.h | 4 ++-- zone/perl_client.cpp | 27 +++++++++++++++++----- zone/perl_entity.cpp | 18 +++++++++++++++ zone/questmgr.cpp | 41 ++++++++++++++++++++++++++++------ zone/questmgr.h | 28 ++++++++++++----------- 16 files changed, 280 insertions(+), 42 deletions(-) diff --git a/zone/client.cpp b/zone/client.cpp index 5768ba3bc..8bb8606be 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -8636,14 +8636,35 @@ void Client::Consume(const EQ::ItemData *item, uint8 type, int16 slot, bool auto } } -void Client::SendMarqueeMessage(uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, std::string msg) +void Client::SendMarqueeMessage(uint32 type, std::string message, uint32 duration) { - if(duration == 0 || msg.length() == 0) { + if (!duration || !message.length()) { return; } - EQApplicationPacket outapp(OP_Marquee, sizeof(ClientMarqueeMessage_Struct) + msg.length()); - ClientMarqueeMessage_Struct *cms = (ClientMarqueeMessage_Struct*)outapp.pBuffer; + EQApplicationPacket outapp(OP_Marquee, sizeof(ClientMarqueeMessage_Struct) + message.length()); + ClientMarqueeMessage_Struct* cms = (ClientMarqueeMessage_Struct*) outapp.pBuffer; + + cms->type = type; + cms->unk04 = 10; + cms->priority = 510; + cms->fade_in_time = 0; + cms->fade_out_time = 3000; + cms->duration = duration; + + strcpy(cms->msg, message.c_str()); + + QueuePacket(&outapp); +} + +void Client::SendMarqueeMessage(uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, std::string message) +{ + if (!duration || !message.length()) { + return; + } + + EQApplicationPacket outapp(OP_Marquee, sizeof(ClientMarqueeMessage_Struct) + message.length()); + ClientMarqueeMessage_Struct* cms = (ClientMarqueeMessage_Struct*) outapp.pBuffer; cms->type = type; cms->unk04 = 10; @@ -8651,7 +8672,8 @@ void Client::SendMarqueeMessage(uint32 type, uint32 priority, uint32 fade_in, ui cms->fade_in_time = fade_in; cms->fade_out_time = fade_out; cms->duration = duration; - strcpy(cms->msg, msg.c_str()); + + strcpy(cms->msg, message.c_str()); QueuePacket(&outapp); } diff --git a/zone/client.h b/zone/client.h index 4364de67a..006965212 100644 --- a/zone/client.h +++ b/zone/client.h @@ -1531,7 +1531,8 @@ public: const char* GetRacePlural(Client* client); const char* GetClassPlural(Client* client); void SendWebLink(const char* website); - void SendMarqueeMessage(uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, std::string msg); + void SendMarqueeMessage(uint32 type, std::string message, uint32 duration = 3000); + void SendMarqueeMessage(uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, std::string message); void SendSpellAnim(uint16 targetid, uint16 spell_id); void DuplicateLoreMessage(uint32 ItemID); diff --git a/zone/embparser_api.cpp b/zone/embparser_api.cpp index 2dcd465b1..4298625e7 100644 --- a/zone/embparser_api.cpp +++ b/zone/embparser_api.cpp @@ -3797,6 +3797,48 @@ std::string Perl__popuptablerow(std::string message) { return DialogueWindow::TableRow(message); } +void Perl__marquee(uint32 type, std::string message) +{ + quest_manager.marquee(type, message); +} + +void Perl__marquee(uint32 type, std::string message, uint32 duration) +{ + quest_manager.marquee(type, message, duration); +} + +void Perl__marquee(uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, std::string message) +{ + quest_manager.marquee(type, priority, fade_in, fade_out, duration, message); +} + +void Perl__zonemarquee(uint32 type, std::string message) +{ + if (!zone) { + return; + } + + entity_list.Marquee(type, message); +} + +void Perl__zonemarquee(uint32 type, std::string message, uint32 duration) +{ + if (!zone) { + return; + } + + entity_list.Marquee(type, message, duration); +} + +void Perl__zonemarquee(uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, std::string message) +{ + if (!zone) { + return; + } + + entity_list.Marquee(type, priority, fade_in, fade_out, duration, message); +} + void perl_register_quest() { perl::interpreter perl(PERL_GET_THX); @@ -4241,6 +4283,9 @@ void perl_register_quest() package.add("level", &Perl__level); package.add("log", &Perl__log); package.add("log_combat", &Perl__log_combat); + package.add("marquee", (void(*)(uint32, std::string))&Perl__marquee); + package.add("marquee", (void(*)(uint32, std::string, uint32))&Perl__marquee); + package.add("marquee", (void(*)(uint32, uint32, uint32, uint32, uint32, std::string))&Perl__marquee); package.add("me", &Perl__me); package.add("message", &Perl__message); package.add("modifynpcstat", &Perl__ModifyNPCStat); @@ -4393,6 +4438,9 @@ void perl_register_quest() package.add("write", &Perl__write); package.add("ze", &Perl__ze); package.add("zone", &Perl__zone); + package.add("zonemarquee", (void(*)(uint32, std::string))&Perl__zonemarquee); + package.add("zonemarquee", (void(*)(uint32, std::string, uint32))&Perl__zonemarquee); + package.add("zonemarquee", (void(*)(uint32, uint32, uint32, uint32, uint32, std::string))&Perl__zonemarquee); package.add("zonegroup", &Perl__zonegroup); package.add("zoneraid", &Perl__zoneraid); diff --git a/zone/entity.cpp b/zone/entity.cpp index 435d6c169..f04ea0717 100644 --- a/zone/entity.cpp +++ b/zone/entity.cpp @@ -5761,3 +5761,26 @@ void EntityList::DespawnGridNodes(int32 grid_id) { } } } + +void EntityList::Marquee(uint32 type, std::string message, uint32 duration) { + for (const auto& c : client_list) { + if (c.second) { + c.second->SendMarqueeMessage(type, message, duration); + } + } +} + +void EntityList::Marquee( + uint32 type, + uint32 priority, + uint32 fade_in, + uint32 fade_out, + uint32 duration, + std::string message +) { + for (const auto& c : client_list) { + if (c.second) { + c.second->SendMarqueeMessage(type, priority, fade_in, fade_out, duration, message); + } + } +} diff --git a/zone/entity.h b/zone/entity.h index a148372a8..38184bf0a 100644 --- a/zone/entity.h +++ b/zone/entity.h @@ -334,6 +334,8 @@ public: void DescribeAggro(Client *to_who, NPC *from_who, float dist, bool verbose); + void Marquee(uint32 type, std::string message, uint32 duration = 3000); + void Marquee(uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, std::string message); void Message(uint32 to_guilddbid, uint32 type, const char* message, ...); void MessageStatus(uint32 to_guilddbid, int to_minstatus, uint32 type, const char* message, ...); void MessageClose(Mob* sender, bool skipsender, float dist, uint32 type, const char* message, ...); diff --git a/zone/lua_client.cpp b/zone/lua_client.cpp index b052a04a3..767acbbec 100644 --- a/zone/lua_client.cpp +++ b/zone/lua_client.cpp @@ -1632,11 +1632,6 @@ void Lua_Client::SetConsumption(int in_hunger, int in_thirst) { self->SetConsumption(in_hunger, in_thirst); } -void Lua_Client::SendMarqueeMessage(uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, std::string msg) { - Lua_Safe_Call_Void(); - self->SendMarqueeMessage(type, priority, fade_in, fade_out, duration, msg); -} - void Lua_Client::SendColoredText(uint32 type, std::string msg) { Lua_Safe_Call_Void(); self->SendColoredText(type, msg); @@ -2603,6 +2598,21 @@ bool Lua_Client::SendGMCommand(std::string message, bool ignore_status) { return self->SendGMCommand(message, ignore_status); } +void Lua_Client::SendMarqueeMessage(uint32 type, std::string message) { + Lua_Safe_Call_Void(); + self->SendMarqueeMessage(type, message); +} + +void Lua_Client::SendMarqueeMessage(uint32 type, std::string message, uint32 duration) { + Lua_Safe_Call_Void(); + self->SendMarqueeMessage(type, message, duration); +} + +void Lua_Client::SendMarqueeMessage(uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, std::string message) { + Lua_Safe_Call_Void(); + self->SendMarqueeMessage(type, priority, fade_in, fade_out, duration, message); +} + luabind::scope lua_register_client() { return luabind::class_("Client") .def(luabind::constructor<>()) @@ -2851,6 +2861,9 @@ luabind::scope lua_register_client() { .def("LockSharedTask", &Lua_Client::LockSharedTask) .def("MarkSingleCompassLoc", (void(Lua_Client::*)(float,float,float))&Lua_Client::MarkSingleCompassLoc) .def("MarkSingleCompassLoc", (void(Lua_Client::*)(float,float,float,int))&Lua_Client::MarkSingleCompassLoc) + .def("Marquee", (void(Lua_Client::*)(uint32, std::string))&Lua_Client::SendMarqueeMessage) + .def("Marquee", (void(Lua_Client::*)(uint32, std::string, uint32))&Lua_Client::SendMarqueeMessage) + .def("Marquee", (void(Lua_Client::*)(uint32, uint32, uint32, uint32, uint32, std::string))&Lua_Client::SendMarqueeMessage) .def("MaxSkill", (int(Lua_Client::*)(int))&Lua_Client::MaxSkill) .def("MemSpell", (void(Lua_Client::*)(int,int))&Lua_Client::MemSpell) .def("MemSpell", (void(Lua_Client::*)(int,int,bool))&Lua_Client::MemSpell) @@ -2925,6 +2938,8 @@ luabind::scope lua_register_client() { .def("SendItemScale", (void(Lua_Client::*)(Lua_ItemInst))&Lua_Client::SendItemScale) .def("SendGMCommand", (bool(Lua_Client::*)(std::string))&Lua_Client::SendGMCommand) .def("SendGMCommand", (bool(Lua_Client::*)(std::string,bool))&Lua_Client::SendGMCommand) + .def("SendMarqueeMessage", (void(Lua_Client::*)(uint32, std::string))&Lua_Client::SendMarqueeMessage) + .def("SendMarqueeMessage", (void(Lua_Client::*)(uint32, std::string, uint32))&Lua_Client::SendMarqueeMessage) .def("SendMarqueeMessage", (void(Lua_Client::*)(uint32, uint32, uint32, uint32, uint32, std::string))&Lua_Client::SendMarqueeMessage) .def("SendOPTranslocateConfirm", (void(Lua_Client::*)(Lua_Mob,int))&Lua_Client::SendOPTranslocateConfirm) .def("SendPEQZoneFlagInfo", (void(Lua_Client::*)(Lua_Client))&Lua_Client::SendPEQZoneFlagInfo) diff --git a/zone/lua_client.h b/zone/lua_client.h index 3fe909426..f0a0a346c 100644 --- a/zone/lua_client.h +++ b/zone/lua_client.h @@ -387,7 +387,9 @@ public: void SetHunger(int in_hunger); void SetThirst(int in_thirst); void SetConsumption(int in_hunger, int in_thirst); - void SendMarqueeMessage(uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, std::string msg); + void SendMarqueeMessage(uint32 type, std::string message); + void SendMarqueeMessage(uint32 type, std::string message, uint32 duration); + void SendMarqueeMessage(uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, std::string message); void SendColoredText(uint32 type, std::string msg); void PlayMP3(std::string file); void QuestReward(Lua_Mob target); diff --git a/zone/lua_entity_list.cpp b/zone/lua_entity_list.cpp index 9b6387717..fcf44619e 100644 --- a/zone/lua_entity_list.cpp +++ b/zone/lua_entity_list.cpp @@ -555,6 +555,21 @@ Lua_NPC Lua_EntityList::GetRandomNPC(float x, float y, float z, float distance, return self->GetRandomNPC(glm::vec3(x, y, z), distance, exclude_npc); } +void Lua_EntityList::Marquee(uint32 type, std::string message) { + Lua_Safe_Call_Void(); + self->Marquee(type, message); +} + +void Lua_EntityList::Marquee(uint32 type, std::string message, uint32 duration) { + Lua_Safe_Call_Void(); + self->Marquee(type, message, duration); +} + +void Lua_EntityList::Marquee(uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, std::string message) { + Lua_Safe_Call_Void(); + self->Marquee(type, priority, fade_in, fade_out, duration, message); +} + luabind::scope lua_register_entity_list() { return luabind::class_("EntityList") .def(luabind::constructor<>()) @@ -624,6 +639,9 @@ luabind::scope lua_register_entity_list() { .def("HalveAggro", (void(Lua_EntityList::*)(Lua_Mob))&Lua_EntityList::HalveAggro) .def("IsMobSpawnedByNpcTypeID", (bool(Lua_EntityList::*)(int))&Lua_EntityList::IsMobSpawnedByNpcTypeID) .def("MakeNameUnique", (std::string(Lua_EntityList::*)(const char*))&Lua_EntityList::MakeNameUnique) + .def("Marquee", (void(Lua_EntityList::*)(uint32, std::string))&Lua_EntityList::Marquee) + .def("Marquee", (void(Lua_EntityList::*)(uint32, std::string, uint32))&Lua_EntityList::Marquee) + .def("Marquee", (void(Lua_EntityList::*)(uint32, uint32, uint32, uint32, uint32, std::string))&Lua_EntityList::Marquee) .def("Message", (void(Lua_EntityList::*)(uint32, uint32, const char*))&Lua_EntityList::Message) .def("MessageClose", (void(Lua_EntityList::*)(Lua_Mob, bool, float, uint32, const char*))&Lua_EntityList::MessageClose) .def("MessageGroup", (void(Lua_EntityList::*)(Lua_Mob, bool, uint32, const char*))&Lua_EntityList::MessageGroup) diff --git a/zone/lua_entity_list.h b/zone/lua_entity_list.h index 851d8b9c3..112f7ceab 100644 --- a/zone/lua_entity_list.h +++ b/zone/lua_entity_list.h @@ -88,6 +88,9 @@ public: Lua_Spawn GetSpawnByID(uint32 id); void ClearClientPetitionQueue(); bool CanAddHateForMob(Lua_Mob p); + void Marquee(uint32 type, std::string message); + void Marquee(uint32 type, std::string message, uint32 duration); + void Marquee(uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, std::string message); void Message(uint32 guild_dbid, uint32 type, const char *message); void MessageStatus(uint32 guild_dbid, int min_status, uint32 type, const char *message); void MessageClose(Lua_Mob sender, bool skip_sender, float dist, uint32 type, const char *message); diff --git a/zone/lua_general.cpp b/zone/lua_general.cpp index 12840f754..839cfaaca 100644 --- a/zone/lua_general.cpp +++ b/zone/lua_general.cpp @@ -3525,6 +3525,42 @@ std::string lua_popup_table_row(std::string message) { return DialogueWindow::TableRow(message); } +void lua_marquee(uint32 type, std::string message) { + quest_manager.marquee(type, message); +} + +void lua_marquee(uint32 type, std::string message, uint32 duration) { + quest_manager.marquee(type, message, duration); +} + +void lua_marquee(uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, std::string message) { + quest_manager.marquee(type, priority, fade_in, fade_out, duration, message); +} + +void lua_zone_marquee(uint32 type, std::string message) { + if (!zone) { + return; + } + + entity_list.Marquee(type, message); +} + +void lua_zone_marquee(uint32 type, std::string message, uint32 duration) { + if (!zone) { + return; + } + + entity_list.Marquee(type, message, duration); +} + +void lua_zone_marquee(uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, std::string message) { + if (!zone) { + return; + } + + entity_list.Marquee(type, priority, fade_in, fade_out, duration, message); +} + #define LuaCreateNPCParse(name, c_type, default_value) do { \ cur = table[#name]; \ if(luabind::type(cur) != LUA_TNIL) { \ @@ -4010,6 +4046,12 @@ luabind::scope lua_register_general() { luabind::def("popup_table_cell", (std::string(*)(void))&lua_popup_table_cell), luabind::def("popup_table_cell", (std::string(*)(std::string))&lua_popup_table_cell), luabind::def("popup_table_row", &lua_popup_table_row), + luabind::def("marquee", (void(*)(uint32,std::string))&lua_marquee), + luabind::def("marquee", (void(*)(uint32,std::string,uint32))&lua_marquee), + luabind::def("marquee", (void(*)(uint32,uint32,uint32,uint32,uint32,std::string))&lua_marquee), + luabind::def("zone_marquee", (void(*)(uint32,std::string))&lua_zone_marquee), + luabind::def("zone_marquee", (void(*)(uint32,std::string,uint32))&lua_zone_marquee), + luabind::def("zone_marquee", (void(*)(uint32,uint32,uint32,uint32,uint32,std::string))&lua_zone_marquee), /* Cross Zone diff --git a/zone/lua_mob.cpp b/zone/lua_mob.cpp index 10b1b953e..7c0489108 100644 --- a/zone/lua_mob.cpp +++ b/zone/lua_mob.cpp @@ -748,7 +748,7 @@ double Lua_Mob::GetSize() { return self->GetSize(); } -void Lua_Mob::Message(int type, const char *message) { +void Lua_Mob::Message(uint32 type, const char *message) { Lua_Safe_Call_Void(); // auto inject saylinks @@ -765,7 +765,7 @@ void Lua_Mob::Message(int type, const char *message) { } } -void Lua_Mob::MessageString(int type, int string_id, uint32 distance) { +void Lua_Mob::MessageString(uint32 type, uint32 string_id, uint32 distance) { Lua_Safe_Call_Void(); self->MessageString(type, string_id, distance); } diff --git a/zone/lua_mob.h b/zone/lua_mob.h index 455318c6e..4447860b9 100644 --- a/zone/lua_mob.h +++ b/zone/lua_mob.h @@ -179,8 +179,8 @@ public: int GetWaypointID(); void SetCurrentWP(int wp); double GetSize(); - void Message(int type, const char *message); - void MessageString(int type, int string_id, uint32 distance); + void Message(uint32 type, const char *message); + void MessageString(uint32 type, uint32 string_id, uint32 distance); void Say(const char *message); void Say(const char* message, int language); void QuestSay(Lua_Client client, const char *message); diff --git a/zone/perl_client.cpp b/zone/perl_client.cpp index e3035fca8..c292a6352 100644 --- a/zone/perl_client.cpp +++ b/zone/perl_client.cpp @@ -1603,11 +1603,6 @@ void Perl_Client_ExpeditionMessage(Client* self, int expedition_id, const char* self->ExpeditionSay(message, expedition_id); } -void Perl_Client_SendMarqueeMessage(Client* self, uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, std::string msg) // @categories Script Utility -{ - self->SendMarqueeMessage(type, priority, fade_in, fade_out, duration, std::move(msg)); -} - void Perl_Client_SendColoredText(Client* self, uint32 color, std::string msg) // @categories Script Utility { self->SendColoredText(color, std::move(msg)); @@ -2497,6 +2492,21 @@ bool Perl_Client_SendGMCommand(Client* self, std::string message, bool ignore_st return self->SendGMCommand(message, ignore_status); } +void Perl_Client_SendMarqueeMessage(Client* self, uint32 type, std::string message) // @categories Script Utility +{ + self->SendMarqueeMessage(type, message); +} + +void Perl_Client_SendMarqueeMessage(Client* self, uint32 type, std::string message, uint32 duration) // @categories Script Utility +{ + self->SendMarqueeMessage(type, message, duration); +} + +void Perl_Client_SendMarqueeMessage(Client* self, uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, std::string message) // @categories Script Utility +{ + self->SendMarqueeMessage(type, priority, fade_in, fade_out, duration, message); +} + void perl_register_client() { perl::interpreter perl(PERL_GET_THX); @@ -2749,6 +2759,9 @@ void perl_register_client() package.add("LoadZoneFlags", &Perl_Client_LoadZoneFlags); package.add("LockSharedTask", &Perl_Client_LockSharedTask); package.add("MarkCompassLoc", &Perl_Client_MarkCompassLoc); + package.add("Marquee", (void(*)(Client*, uint32, std::string))&Perl_Client_SendMarqueeMessage); + package.add("Marquee", (void(*)(Client*, uint32, std::string, uint32))&Perl_Client_SendMarqueeMessage); + package.add("Marquee", (void(*)(Client*, uint32, uint32, uint32, uint32, uint32, std::string))&Perl_Client_SendMarqueeMessage); package.add("MaxSkill", (int(*)(Client*, uint16))&Perl_Client_MaxSkill); package.add("MaxSkill", (int(*)(Client*, uint16, uint16))&Perl_Client_MaxSkill); package.add("MaxSkill", (int(*)(Client*, uint16, uint16, uint16))&Perl_Client_MaxSkill); @@ -2817,7 +2830,9 @@ void perl_register_client() package.add("SendColoredText", &Perl_Client_SendColoredText); package.add("SendGMCommand", (bool(*)(Client*, std::string))&Perl_Client_SendGMCommand); package.add("SendGMCommand", (bool(*)(Client*, std::string, bool))&Perl_Client_SendGMCommand); - package.add("SendMarqueeMessage", &Perl_Client_SendMarqueeMessage); + package.add("SendMarqueeMessage", (void(*)(Client*, uint32, std::string))&Perl_Client_SendMarqueeMessage); + package.add("SendMarqueeMessage", (void(*)(Client*, uint32, std::string, uint32))&Perl_Client_SendMarqueeMessage); + package.add("SendMarqueeMessage", (void(*)(Client*, uint32, uint32, uint32, uint32, uint32, std::string))&Perl_Client_SendMarqueeMessage); package.add("SendOPTranslocateConfirm", &Perl_Client_SendOPTranslocateConfirm); package.add("SendPEQZoneFlagInfo", &Perl_Client_SendPEQZoneFlagInfo); package.add("SendSound", &Perl_Client_SendSound); diff --git a/zone/perl_entity.cpp b/zone/perl_entity.cpp index de9442fd5..867b58f72 100644 --- a/zone/perl_entity.cpp +++ b/zone/perl_entity.cpp @@ -531,6 +531,21 @@ NPC* Perl_EntityList_GetRandomNPC(EntityList* self, float x, float y, float z, f return entity_list.GetRandomNPC(glm::vec3(x, y, z), (distance * distance), exclude_npc); } +void Perl_EntityList_Marquee(EntityList* self, uint32 type, std::string message) +{ + self->Marquee(type, message); +} + +void Perl_EntityList_Marquee(EntityList* self, uint32 type, std::string message, uint32 duration) +{ + self->Marquee(type, message, duration); +} + +void Perl_EntityList_Marquee(EntityList* self, uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, std::string message) +{ + self->Marquee(type, priority, fade_in, fade_out, duration, message); +} + void perl_register_entitylist() { perl::interpreter perl(PERL_GET_THX); @@ -596,6 +611,9 @@ void perl_register_entitylist() package.add("HalveAggro", &Perl_EntityList_HalveAggro); package.add("IsMobSpawnedByNpcTypeID", &Perl_EntityList_IsMobSpawnedByNpcTypeID); package.add("MakeNameUnique", &Perl_EntityList_MakeNameUnique); + package.add("Marquee", (void(*)(EntityList*, uint32, std::string))&Perl_EntityList_Marquee); + package.add("Marquee", (void(*)(EntityList*, uint32, std::string, uint32))&Perl_EntityList_Marquee); + package.add("Marquee", (void(*)(EntityList*, uint32, uint32, uint32, uint32, uint32, std::string))&Perl_EntityList_Marquee); package.add("Message", &Perl_EntityList_Message); package.add("MessageClose", &Perl_EntityList_MessageClose); package.add("MessageGroup", &Perl_EntityList_MessageGroup); diff --git a/zone/questmgr.cpp b/zone/questmgr.cpp index be40e898f..55e7dd085 100644 --- a/zone/questmgr.cpp +++ b/zone/questmgr.cpp @@ -2519,22 +2519,29 @@ void QuestManager::we(int type, const char *str) { ); } -void QuestManager::message(int color, const char *message) { +void QuestManager::message(uint32 type, const char *message) { QuestManagerCurrentQuestVars(); - if (!initiator) + if (!initiator) { return; + } - initiator->Message(color, message); + initiator->Message(type, message); } void QuestManager::whisper(const char *message) { QuestManagerCurrentQuestVars(); - if (!initiator || !owner) + if (!initiator || !owner) { return; + } - std::string mob_name = owner->GetCleanName(); - std::string new_message = fmt::format("{} whispers, '{}'", mob_name, message); - initiator->Message(Chat::EchoChat1, new_message.c_str()); + initiator->Message( + Chat::EchoChat1, + fmt::format( + "{} whispers, '{}'", + owner->GetCleanName(), + message + ).c_str() + ); } int QuestManager::getlevel(uint8 type) @@ -3724,3 +3731,23 @@ void QuestManager::LearnRecipe(uint32 recipe_id) { initiator->LearnRecipe(recipe_id); } + +void QuestManager::marquee(uint32 type, std::string message, uint32 duration) +{ + QuestManagerCurrentQuestVars(); + if (!initiator) { + return; + } + + initiator->SendMarqueeMessage(type, message, duration); +} + +void QuestManager::marquee(uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, std::string message) +{ + QuestManagerCurrentQuestVars(); + if (!initiator) { + return; + } + + initiator->SendMarqueeMessage(type, priority, fade_in, fade_out, duration, message); +} diff --git a/zone/questmgr.h b/zone/questmgr.h index 27ae11d59..aeb4320d3 100644 --- a/zone/questmgr.h +++ b/zone/questmgr.h @@ -236,20 +236,22 @@ public: std::string gettaskname(uint32 task_id); int GetCurrentDzTaskID(); void EndCurrentDzTask(bool send_fail = false); - void clearspawntimers(); + void clearspawntimers(); void ze(int type, const char *str); void we(int type, const char *str); - void message(int color, const char *message); + void marquee(uint32 type, std::string message, uint32 duration = 3000); + void marquee(uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, std::string message); + void message(uint32 type, const char *message); void whisper(const char *message); - int getlevel(uint8 type); - int collectitems(uint32 item_id, bool remove); - int collectitems_processSlot(int16 slot_id, uint32 item_id, bool remove); + int getlevel(uint8 type); + int collectitems(uint32 item_id, bool remove); + int collectitems_processSlot(int16 slot_id, uint32 item_id, bool remove); int countitem(uint32 item_id); void removeitem(uint32 item_id, uint32 quantity = 1); std::string getitemname(uint32 item_id); - void enabletitle(int titleset); - bool checktitle(int titlecheck); - void removetitle(int titlecheck); + void enabletitle(int titleset); + bool checktitle(int titlecheck); + void removetitle(int titlecheck); uint16 CreateGroundObject(uint32 itemid, const glm::vec4& position, uint32 decay_time = 300000); uint16 CreateGroundObjectFromModel(const char* model, const glm::vec4& position, uint8 type = 0x00, uint32 decay_time = 0); void ModifyNPCStat(std::string stat, std::string value); @@ -296,12 +298,12 @@ public: uint8 FactionValue(); void wearchange(uint8 slot, uint16 texture, uint32 hero_forge_model = 0, uint32 elite_material = 0); void voicetell(const char *str, int macronum, int racenum, int gendernum); - void LearnRecipe(uint32 recipe_id); - void SendMail(const char *to, const char *from, const char *subject, const char *message); + void LearnRecipe(uint32 recipe_id); + void SendMail(const char *to, const char *from, const char *subject, const char *message); uint16 CreateDoor( const char* model, float x, float y, float z, float heading, uint8 opentype, uint16 size); - int32 GetZoneID(const char *zone); - static std::string GetZoneLongName(std::string zone_short_name); - static std::string GetZoneLongNameByID(uint32 zone_id); + int32 GetZoneID(const char *zone); + static std::string GetZoneLongName(std::string zone_short_name); + static std::string GetZoneLongNameByID(uint32 zone_id); static std::string GetZoneShortName(uint32 zone_id); void CrossZoneDialogueWindow(uint8 update_type, int update_identifier, const char* message, const char* client_name = ""); void CrossZoneLDoNUpdate(uint8 update_type, uint8 update_subtype, int update_identifier, uint32 theme_id, int points = 1, const char* client_name = "");