From 5f0d3e90260dc6a522bce74d2d59d638ea617831 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 11 May 2020 20:10:52 -0400 Subject: [PATCH] Add several cross zone methods to Perl/Lua. --- common/servertalk.h | 47 +++++++++++++++ world/zoneserver.cpp | 7 +++ zone/embparser_api.cpp | 132 ++++++++++++++++++++++++++++++++++++++++- zone/lua_general.cpp | 35 +++++++++++ zone/questmgr.cpp | 76 ++++++++++++++++++++++++ zone/questmgr.h | 7 +++ zone/worldserver.cpp | 77 ++++++++++++++++++++++++ 7 files changed, 379 insertions(+), 2 deletions(-) diff --git a/common/servertalk.h b/common/servertalk.h index a7e903cad..e08dbf35d 100644 --- a/common/servertalk.h +++ b/common/servertalk.h @@ -199,7 +199,14 @@ #define ServerOP_UCSServerStatusReply 0x4014 #define ServerOP_HotReloadQuests 0x4015 #define ServerOP_CZSignalGroup 0x4016 +#define ServerOP_CZSignalRaid 0x4017 +#define ServerOP_CZSignalGuild 0x4018 +#define ServerOP_CZMessageGroup 0x4019 +#define ServerOP_CZMessageRaid 0x4020 #define ServerOP_CZMessageGuild 0x4021 +#define ServerOP_CZSetEntityVariableByGroupID 0x4022 +#define ServerOP_CZSetEntityVariableByRaidID 0x4023 +#define ServerOP_CZSetEntityVariableByGuildID 0x4024 /** * QueryServer @@ -1174,6 +1181,16 @@ struct CZGroupSignal_Struct { uint32 data; }; +struct CZRaidSignal_Struct { + int raid_id; + uint32 data; +}; + +struct CZGuildSignal_Struct { + int guild_id; + uint32 data; +}; + struct CZNPCSignal_Struct { uint32 npctype_id; uint32 data; @@ -1341,6 +1358,18 @@ struct CZMessagePlayer_Struct { char Message[512]; }; +struct CZMessageGroup_Struct { + uint32 Type; + int GroupID; + char Message[512]; +}; + +struct CZMessageRaid_Struct { + uint32 Type; + int RaidID; + char Message[512]; +}; + struct CZMessageGuild_Struct { uint32 Type; int GuildID; @@ -1368,6 +1397,24 @@ struct CZSetEntVarByClientName_Struct { char m_var[256]; }; +struct CZSetEntVarByGroupID_Struct { + int group_id; + char id[256]; + char m_var[256]; +}; + +struct CZSetEntVarByRaidID_Struct { + int raid_id; + char id[256]; + char m_var[256]; +}; + +struct CZSetEntVarByGuildID_Struct { + int guild_id; + char id[256]; + char m_var[256]; +}; + struct ReloadWorld_Struct { uint32 Option; }; diff --git a/world/zoneserver.cpp b/world/zoneserver.cpp index 3d6734b05..3b1bfad38 100644 --- a/world/zoneserver.cpp +++ b/world/zoneserver.cpp @@ -1238,12 +1238,19 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) { } case ServerOP_CZSignalClientByName: case ServerOP_CZMessagePlayer: + case ServerOP_CZMessageGroup: + case ServerOP_CZMessageRaid: case ServerOP_CZMessageGuild: case ServerOP_CZSignalNPC: case ServerOP_CZSetEntityVariableByNPCTypeID: case ServerOP_CZSignalClient: case ServerOP_CZSignalGroup: + case ServerOP_CZSignalRaid: + case ServerOP_CZSignalGuild: case ServerOP_CZSetEntityVariableByClientName: + case ServerOP_CZSetEntityVariableByGroupID: + case ServerOP_CZSetEntityVariableByRaidID: + case ServerOP_CZSetEntityVariableByGuildID: case ServerOP_WWMarquee: case ServerOP_DepopAllPlayersCorpses: case ServerOP_DepopPlayerCorpse: diff --git a/zone/embparser_api.cpp b/zone/embparser_api.cpp index 4a24d5f3a..f926bc6fe 100644 --- a/zone/embparser_api.cpp +++ b/zone/embparser_api.cpp @@ -3729,7 +3729,7 @@ XS(XS__crosszonesignalclientbygroupid) { Perl_croak(aTHX_ "Usage: quest::crosszonesignalclientbygroupid(int group_id, int value)"); if (items == 2) { - int group_id = (int) SvIV(ST(0)); + int group_id = (int) SvIV(ST(0)); uint32 int_value = (uint32) SvIV(ST(1)); quest_manager.CrossZoneSignalPlayerByGroupID(group_id, int_value); } else { @@ -3739,6 +3739,42 @@ XS(XS__crosszonesignalclientbygroupid) { XSRETURN_EMPTY; } +XS(XS__crosszonesignalclientbyraidid); +XS(XS__crosszonesignalclientbyraidid) { + dXSARGS; + + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszonesignalclientbyraidid(int raid_id, int value)"); + + if (items == 2) { + int raid_id = (int) SvIV(ST(0)); + uint32 int_value = (uint32) SvIV(ST(1)); + quest_manager.CrossZoneSignalPlayerByRaidID(raid_id, int_value); + } else { + Perl_croak(aTHX_ "Usage: quest::crosszonesignalclientbyraidid(int raid_id, int value)"); + } + + XSRETURN_EMPTY; +} + +XS(XS__crosszonesignalclientbyguildid); +XS(XS__crosszonesignalclientbyguildid) { + dXSARGS; + + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszonesignalclientbyguildid(int guild_id, int value)"); + + if (items == 2) { + int guild_id = (int) SvIV(ST(0)); + uint32 int_value = (uint32) SvIV(ST(1)); + quest_manager.CrossZoneSignalPlayerByGuildID(guild_id, int_value); + } else { + Perl_croak(aTHX_ "Usage: quest::crosszonesignalclientbyguildid(int guild_id, int value)"); + } + + XSRETURN_EMPTY; +} + XS(XS__crosszonesignalclientbyname); XS(XS__crosszonesignalclientbyname) { dXSARGS; @@ -3775,12 +3811,46 @@ XS(XS__crosszonemessageplayerbyname) { XSRETURN_EMPTY; } +XS(XS__crosszonemessageplayerbygroupid); +XS(XS__crosszonemessageplayerbygroupid) { + dXSARGS; + + if (items != 3) + Perl_croak(aTHX_ "Usage: quest::crosszonemessageplayerbygroupid(int type, int group_id, string message)"); + + if (items == 3) { + uint32 type = (uint32) SvIV(ST(0)); + int group_id = (int) SvIV(ST(1)); + char *message = (char *) SvPV_nolen(ST(2)); + quest_manager.CrossZoneMessagePlayerByGroupID(type, group_id, message); + } + + XSRETURN_EMPTY; +} + +XS(XS__crosszonemessageplayerbyraidid); +XS(XS__crosszonemessageplayerbyraidid) { + dXSARGS; + + if (items != 3) + Perl_croak(aTHX_ "Usage: quest::crosszonemessageplayerbyraidid(int type, int raid_id, string message)"); + + if (items == 3) { + uint32 type = (uint32) SvIV(ST(0)); + int raid_id = (int) SvIV(ST(1)); + char *message = (char *) SvPV_nolen(ST(2)); + quest_manager.CrossZoneMessagePlayerByRaidID(type, raid_id, message); + } + + XSRETURN_EMPTY; +} + XS(XS__crosszonemessageplayerbyguildid); XS(XS__crosszonemessageplayerbyguildid) { dXSARGS; if (items != 3) - Perl_croak(aTHX_ "Usage: quest::crosszonemessageplayerbyguildid(int typ, int guild_id, string message)"); + Perl_croak(aTHX_ "Usage: quest::crosszonemessageplayerbyguildid(int type, int guild_id, string message)"); if (items == 3) { uint32 type = (uint32) SvIV(ST(0)); @@ -3911,6 +3981,57 @@ XS(XS__crosszonesetentityvariablebyclientname) { XSRETURN_EMPTY; } +XS(XS__crosszonesetentityvariablebygroupid); +XS(XS__crosszonesetentityvariablebygroupid) { + dXSARGS; + + if (items != 3) + Perl_croak(aTHX_ "Usage: quest::crosszonesetentityvariablebygroupid(int group_id, string key, string value)"); + + if (items == 3) { + int group_id = SvIV(ST(0)); + const char *key = (const char *) SvPV_nolen(ST(1)); + const char *str_value = (const char *) SvPV_nolen(ST(2)); + quest_manager.CrossZoneSetEntityVariableByGroupID(group_id, key, str_value); + } + + XSRETURN_EMPTY; +} + +XS(XS__crosszonesetentityvariablebyraidid); +XS(XS__crosszonesetentityvariablebyraidid) { + dXSARGS; + + if (items != 3) + Perl_croak(aTHX_ "Usage: quest::crosszonesetentityvariablebyraidid(int raid_id, string key, string value)"); + + if (items == 3) { + int raid_id = SvIV(ST(0)); + const char *key = (const char *) SvPV_nolen(ST(1)); + const char *str_value = (const char *) SvPV_nolen(ST(2)); + quest_manager.CrossZoneSetEntityVariableByRaidID(raid_id, key, str_value); + } + + XSRETURN_EMPTY; +} + +XS(XS__crosszonesetentityvariablebyguildid); +XS(XS__crosszonesetentityvariablebyguildid) { + dXSARGS; + + if (items != 3) + Perl_croak(aTHX_ "Usage: quest::crosszonesetentityvariablebyguildid(int guild_id, string key, string value)"); + + if (items == 3) { + int guild_id = SvIV(ST(0)); + const char *key = (const char *) SvPV_nolen(ST(1)); + const char *str_value = (const char *) SvPV_nolen(ST(2)); + quest_manager.CrossZoneSetEntityVariableByGuildID(guild_id, key, str_value); + } + + XSRETURN_EMPTY; +} + XS(XS__crosszonesignalnpcbynpctypeid); XS(XS__crosszonesignalnpcbynpctypeid) { dXSARGS; @@ -4208,11 +4329,18 @@ EXTERN_C XS(boot_quest) { newXS(strcpy(buf, "creategroundobjectfrommodel"), XS__CreateGroundObjectFromModel, file); newXS(strcpy(buf, "createguild"), XS__createguild, file); newXS(strcpy(buf, "crosszonemessageplayerbyname"), XS__crosszonemessageplayerbyname, file); + newXS(strcpy(buf, "crosszonemessageplayerbygroupid"), XS__crosszonemessageplayerbygroupid, file); + newXS(strcpy(buf, "crosszonemessageplayerbyraidid"), XS__crosszonemessageplayerbyraidid, file); newXS(strcpy(buf, "crosszonemessageplayerbyguildid"), XS__crosszonemessageplayerbyguildid, file); newXS(strcpy(buf, "crosszonesetentityvariablebynpctypeid"), XS__crosszonesetentityvariablebynpctypeid, file); newXS(strcpy(buf, "crosszonesetentityvariablebyclientname"), XS__crosszonesetentityvariablebyclientname, file); + newXS(strcpy(buf, "crosszonesetentityvariablebygroupid"), XS__crosszonesetentityvariablebygroupid, file); + newXS(strcpy(buf, "crosszonesetentityvariablebyraidid"), XS__crosszonesetentityvariablebyraidid, file); + newXS(strcpy(buf, "crosszonesetentityvariablebyguildid"), XS__crosszonesetentityvariablebyguildid, file); newXS(strcpy(buf, "crosszonesignalclientbycharid"), XS__crosszonesignalclientbycharid, file); newXS(strcpy(buf, "crosszonesignalclientbygroupid"), XS__crosszonesignalclientbygroupid, file); + newXS(strcpy(buf, "crosszonesignalclientbyraidid"), XS__crosszonesignalclientbyraidid, file); + newXS(strcpy(buf, "crosszonesignalclientbyguildid"), XS__crosszonesignalclientbyguildid, file); newXS(strcpy(buf, "crosszonesignalclientbyname"), XS__crosszonesignalclientbyname, file); newXS(strcpy(buf, "crosszonesignalnpcbynpctypeid"), XS__crosszonesignalnpcbynpctypeid, file); newXS(strcpy(buf, "worldwidemarquee"), XS__worldwidemarquee, file); diff --git a/zone/lua_general.cpp b/zone/lua_general.cpp index b522d6f68..6c3392f15 100644 --- a/zone/lua_general.cpp +++ b/zone/lua_general.cpp @@ -1030,6 +1030,14 @@ void lua_cross_zone_signal_client_by_group_id(uint32 group_id, int signal) { quest_manager.CrossZoneSignalPlayerByGroupID(group_id, signal); } +void lua_cross_zone_signal_client_by_raid_id(uint32 raid_id, int signal) { + quest_manager.CrossZoneSignalPlayerByRaidID(raid_id, signal); +} + +void lua_cross_zone_signal_client_by_guild_id(uint32 guild_id, int signal) { + quest_manager.CrossZoneSignalPlayerByGuildID(guild_id, signal); +} + void lua_cross_zone_signal_client_by_name(const char *player, int signal) { quest_manager.CrossZoneSignalPlayerByName(player, signal); } @@ -1038,6 +1046,14 @@ void lua_cross_zone_message_player_by_name(uint32 type, const char *player, cons quest_manager.CrossZoneMessagePlayerByName(type, player, message); } +void lua_cross_zone_message_player_by_group_id(uint32 type, int group_id, const char *message) { + quest_manager.CrossZoneMessagePlayerByGroupID(type, group_id, message); +} + +void lua_cross_zone_message_player_by_raid_id(uint32 type, int raid_id, const char *message) { + quest_manager.CrossZoneMessagePlayerByRaidID(type, raid_id, message); +} + void lua_cross_zone_message_player_by_guild_id(uint32 type, int guild_id, const char *message) { quest_manager.CrossZoneMessagePlayerByGuildID(type, guild_id, message); } @@ -1046,6 +1062,18 @@ void lua_cross_zone_set_entity_variable_by_client_name(const char *player, const quest_manager.CrossZoneSetEntityVariableByClientName(player, id, m_var); } +void lua_cross_zone_set_entity_variable_by_group_id(int group_id, const char *id, const char *m_var) { + quest_manager.CrossZoneSetEntityVariableByGroupID(group_id, id, m_var); +} + +void lua_cross_zone_set_entity_variable_by_raid_id(int raid_id, const char *id, const char *m_var) { + quest_manager.CrossZoneSetEntityVariableByRaidID(raid_id, id, m_var); +} + +void lua_cross_zone_set_entity_variable_by_guild_id(int guild_id, const char *id, const char *m_var) { + quest_manager.CrossZoneSetEntityVariableByGuildID(guild_id, id, m_var); +} + void lua_world_wide_marquee(uint32 type, uint32 priority, uint32 fadein, uint32 fadeout, uint32 duration, const char *message) { quest_manager.WorldWideMarquee(type, priority, fadein, fadeout, duration, message); } @@ -1848,10 +1876,17 @@ luabind::scope lua_register_general() { luabind::def("send_mail", &lua_send_mail), luabind::def("cross_zone_signal_client_by_char_id", &lua_cross_zone_signal_client_by_char_id), luabind::def("cross_zone_signal_client_by_group_id", &lua_cross_zone_signal_client_by_group_id), + luabind::def("cross_zone_signal_client_by_raid_id", &lua_cross_zone_signal_client_by_raid_id), + luabind::def("cross_zone_signal_client_by_guild_id", &lua_cross_zone_signal_client_by_guild_id), luabind::def("cross_zone_signal_client_by_name", &lua_cross_zone_signal_client_by_name), luabind::def("cross_zone_message_player_by_name", &lua_cross_zone_message_player_by_name), + luabind::def("cross_zone_message_player_by_group_id", &lua_cross_zone_message_player_by_group_id), + luabind::def("cross_zone_message_player_by_raid_id", &lua_cross_zone_message_player_by_raid_id), luabind::def("cross_zone_message_player_by_guild_id", &lua_cross_zone_message_player_by_guild_id), luabind::def("cross_zone_set_entity_variable_by_client_name", &lua_cross_zone_set_entity_variable_by_client_name), + luabind::def("cross_zone_set_entity_variable_by_group_id", &lua_cross_zone_set_entity_variable_by_group_id), + luabind::def("cross_zone_set_entity_variable_by_raid_id", &lua_cross_zone_set_entity_variable_by_raid_id), + luabind::def("cross_zone_set_entity_variable_by_guild_id", &lua_cross_zone_set_entity_variable_by_guild_id), luabind::def("world_wide_marquee", &lua_world_wide_marquee), luabind::def("get_qglobals", (luabind::adl::object(*)(lua_State*,Lua_NPC,Lua_Client))&lua_get_qglobals), luabind::def("get_qglobals", (luabind::adl::object(*)(lua_State*,Lua_Client))&lua_get_qglobals), diff --git a/zone/questmgr.cpp b/zone/questmgr.cpp index dc4d7d111..dc2663d5a 100644 --- a/zone/questmgr.cpp +++ b/zone/questmgr.cpp @@ -3220,6 +3220,24 @@ void QuestManager::CrossZoneSignalPlayerByGroupID(int group_id, uint32 data){ safe_delete(pack); } +void QuestManager::CrossZoneSignalPlayerByRaidID(int raid_id, uint32 data){ + auto pack = new ServerPacket(ServerOP_CZSignalRaid, sizeof(CZRaidSignal_Struct)); + CZRaidSignal_Struct* CZRS = (CZRaidSignal_Struct*) pack->pBuffer; + CZRS->raid_id = raid_id; + CZRS->data = data; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneSignalPlayerByGuildID(int guild_id, uint32 data){ + auto pack = new ServerPacket(ServerOP_CZSignalGuild, sizeof(CZGuildSignal_Struct)); + CZGuildSignal_Struct* CZGS = (CZGuildSignal_Struct*) pack->pBuffer; + CZGS->guild_id = guild_id; + CZGS->data = data; + worldserver.SendPacket(pack); + safe_delete(pack); +} + void QuestManager::CrossZoneSignalPlayerByName(const char *CharName, uint32 data){ uint32 message_len = strlen(CharName) + 1; auto pack = new ServerPacket(ServerOP_CZSignalClientByName, sizeof(CZClientSignalByName_Struct) + message_len); @@ -3243,6 +3261,28 @@ void QuestManager::CrossZoneMessagePlayerByName(uint32 Type, const char *CharNam safe_delete(pack); } +void QuestManager::CrossZoneMessagePlayerByGroupID(uint32 Type, int GroupID, const char *Message){ + uint32 message_len = strlen(Message) + 1; + auto pack = new ServerPacket(ServerOP_CZMessageGroup, sizeof(CZMessageGroup_Struct) + message_len); + CZMessageGroup_Struct* CZGM = (CZMessageGroup_Struct*) pack->pBuffer; + CZGM->Type = Type; + CZGM->GroupID = GroupID; + strn0cpy(CZGM->Message, Message, 512); + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneMessagePlayerByRaidID(uint32 Type, int RaidID, const char *Message){ + uint32 message_len = strlen(Message) + 1; + auto pack = new ServerPacket(ServerOP_CZMessageRaid, sizeof(CZMessageRaid_Struct) + message_len); + CZMessageRaid_Struct* CZRM = (CZMessageRaid_Struct*) pack->pBuffer; + CZRM->Type = Type; + CZRM->RaidID = RaidID; + strn0cpy(CZRM->Message, Message, 512); + worldserver.SendPacket(pack); + safe_delete(pack); +} + void QuestManager::CrossZoneMessagePlayerByGuildID(uint32 Type, int GuildID, const char *Message){ uint32 message_len = strlen(Message) + 1; auto pack = new ServerPacket(ServerOP_CZMessageGuild, sizeof(CZMessageGuild_Struct) + message_len); @@ -3268,6 +3308,42 @@ void QuestManager::CrossZoneSetEntityVariableByClientName(const char *CharName, safe_delete(pack); } +void QuestManager::CrossZoneSetEntityVariableByGroupID(int group_id, const char *id, const char *m_var){ + uint32 message_len = strlen(id) + 1; + uint32 message_len2 = strlen(m_var) + 1; + auto pack = new ServerPacket(ServerOP_CZSetEntityVariableByGroupID, sizeof(CZSetEntVarByGroupID_Struct) + message_len + message_len2); + CZSetEntVarByGroupID_Struct* CZ = (CZSetEntVarByGroupID_Struct*)pack->pBuffer; + CZ->group_id = group_id; + strn0cpy(CZ->id, id, 256); + strn0cpy(CZ->m_var, m_var, 256); + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneSetEntityVariableByRaidID(int raid_id, const char *id, const char *m_var){ + uint32 message_len = strlen(id) + 1; + uint32 message_len2 = strlen(m_var) + 1; + auto pack = new ServerPacket(ServerOP_CZSetEntityVariableByRaidID, sizeof(CZSetEntVarByRaidID_Struct) + message_len + message_len2); + CZSetEntVarByRaidID_Struct* CZ = (CZSetEntVarByRaidID_Struct*)pack->pBuffer; + CZ->raid_id = raid_id; + strn0cpy(CZ->id, id, 256); + strn0cpy(CZ->m_var, m_var, 256); + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneSetEntityVariableByGuildID(int guild_id, const char *id, const char *m_var){ + uint32 message_len = strlen(id) + 1; + uint32 message_len2 = strlen(m_var) + 1; + auto pack = new ServerPacket(ServerOP_CZSetEntityVariableByGuildID, sizeof(CZSetEntVarByGuildID_Struct) + message_len + message_len2); + CZSetEntVarByGuildID_Struct* CZ = (CZSetEntVarByGuildID_Struct*)pack->pBuffer; + CZ->guild_id = guild_id; + strn0cpy(CZ->id, id, 256); + strn0cpy(CZ->m_var, m_var, 256); + worldserver.SendPacket(pack); + safe_delete(pack); +} + void QuestManager::CrossZoneSetEntityVariableByNPCTypeID(uint32 npctype_id, const char *id, const char *m_var){ uint32 message_len = strlen(id) + 1; uint32 message_len2 = strlen(m_var) + 1; diff --git a/zone/questmgr.h b/zone/questmgr.h index 89901b512..6f9ab4c4e 100644 --- a/zone/questmgr.h +++ b/zone/questmgr.h @@ -280,11 +280,18 @@ public: const char *GetZoneLongName(const char *zone); void CrossZoneSignalPlayerByCharID(int charid, uint32 data); void CrossZoneSignalPlayerByGroupID(int group_id, uint32 data); + void CrossZoneSignalPlayerByRaidID(int raid_id, uint32 data); + void CrossZoneSignalPlayerByGuildID(int guild_id, uint32 data); void CrossZoneSignalNPCByNPCTypeID(uint32 npctype_id, uint32 data); void CrossZoneSignalPlayerByName(const char *CharName, uint32 data); void CrossZoneSetEntityVariableByNPCTypeID(uint32 npctype_id, const char *id, const char *m_var); void CrossZoneSetEntityVariableByClientName(const char *CharName, const char *id, const char *m_var); + void CrossZoneSetEntityVariableByGroupID(int group_id, const char *id, const char *m_var); + void CrossZoneSetEntityVariableByRaidID(int raid_id, const char *id, const char *m_var); + void CrossZoneSetEntityVariableByGuildID(int guild_id, const char *id, const char *m_var); void CrossZoneMessagePlayerByName(uint32 Type, const char *CharName, const char *Message); + void CrossZoneMessagePlayerByGroupID(uint32 Type, int GroupID, const char *Message); + void CrossZoneMessagePlayerByRaidID(uint32 Type, int RaidID, const char *Message); void CrossZoneMessagePlayerByGuildID(uint32 Type, int GuildID, const char *Message); void WorldWideMarquee(uint32 Type, uint32 Priority, uint32 FadeIn, uint32 FadeOut, uint32 Duration, const char *Message); bool EnableRecipe(uint32 recipe_id); diff --git a/zone/worldserver.cpp b/zone/worldserver.cpp index b30df9482..0279d55be 100644 --- a/zone/worldserver.cpp +++ b/zone/worldserver.cpp @@ -1926,6 +1926,28 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) } break; } + case ServerOP_CZSignalRaid: + { + CZRaidSignal_Struct* CZRS = (CZRaidSignal_Struct*)pack->pBuffer; + auto client_list = entity_list.GetClientList(); + for (auto client : client_list) { + if (client.second->GetRaid() && client.second->GetRaid()->GetID() == CZRS->raid_id) { + client.second->Signal(CZRS->data); + } + } + break; + } + case ServerOP_CZSignalGuild: + { + CZGuildSignal_Struct* CZGS = (CZGuildSignal_Struct*)pack->pBuffer; + auto client_list = entity_list.GetClientList(); + for (auto client : client_list) { + if (client.second->GuildID() > 0 && client.second->GuildID() == CZGS->guild_id) { + client.second->Signal(CZGS->data); + } + } + break; + } case ServerOP_CZSignalClientByName: { CZClientSignalByName_Struct* CZCS = (CZClientSignalByName_Struct*)pack->pBuffer; @@ -1944,6 +1966,28 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) } break; } + case ServerOP_CZMessageGroup: + { + CZMessageGroup_Struct* CZGM = (CZMessageGroup_Struct*)pack->pBuffer; + auto client_list = entity_list.GetClientList(); + for (auto client : client_list) { + if (client.second->GetGroup() && client.second->GetGroup()->GetID() == CZGM->GroupID) { + client.second->Message(CZGM->Type, CZGM->Message); + } + } + break; + } + case ServerOP_CZMessageRaid: + { + CZMessageRaid_Struct* CZRM = (CZMessageRaid_Struct*)pack->pBuffer; + auto client_list = entity_list.GetClientList(); + for (auto client : client_list) { + if (client.second->GetRaid() && client.second->GetRaid()->GetID() == CZRM->RaidID) { + client.second->Message(CZRM->Type, CZRM->Message); + } + } + break; + } case ServerOP_CZMessageGuild: { CZMessageGuild_Struct* CZGM = (CZMessageGuild_Struct*)pack->pBuffer; @@ -1964,6 +2008,39 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) } break; } + case ServerOP_CZSetEntityVariableByGroupID: + { + CZSetEntVarByGroupID_Struct* CZCS = (CZSetEntVarByGroupID_Struct*)pack->pBuffer; + auto client_list = entity_list.GetClientList(); + for (auto client : client_list) { + if (client.second->GetGroup() && client.second->GetGroup()->GetID() == CZCS->group_id) { + client.second->SetEntityVariable(CZCS->id, CZCS->m_var); + } + } + break; + } + case ServerOP_CZSetEntityVariableByRaidID: + { + CZSetEntVarByRaidID_Struct* CZCS = (CZSetEntVarByRaidID_Struct*)pack->pBuffer; + auto client_list = entity_list.GetClientList(); + for (auto client : client_list) { + if (client.second->GetRaid() && client.second->GetRaid()->GetID() == CZCS->raid_id) { + client.second->SetEntityVariable(CZCS->id, CZCS->m_var); + } + } + break; + } + case ServerOP_CZSetEntityVariableByGuildID: + { + CZSetEntVarByGuildID_Struct* CZCS = (CZSetEntVarByGuildID_Struct*)pack->pBuffer; + auto client_list = entity_list.GetClientList(); + for (auto client : client_list) { + if (client.second->GuildID() > 0 && client.second->GuildID() == CZCS->guild_id) { + client.second->SetEntityVariable(CZCS->id, CZCS->m_var); + } + } + break; + } case ServerOP_WWMarquee: { WWMarquee_Struct* WWMS = (WWMarquee_Struct*)pack->pBuffer;