[Quest API] Cross zone and world wide method overhaul. (#1520)

* [Quest API] Cross zone and world wide method overhaul.
- Adds support for Character ID, Character Name, and Expedition ID to all cross zone methods that did not have a method.
- Adds worldwide LDoN Updates.
- Shrinks the number of packets and structs from 83 to 17.

No quest functionality will be affected by this, as the only changes are the underlying method used to send the cross zone and world wide data.

* Formatting, organization, and fixing of improper exports.

* Finalize comb through of variable types, update types, etc.

* Merge fixes.
This commit is contained in:
Kinglykrab
2021-09-19 19:15:14 -04:00
committed by GitHub
parent 24c079dca4
commit c15c54e920
13 changed files with 4916 additions and 4786 deletions
+9 -5
View File
@@ -9481,12 +9481,16 @@ void Client::SendCrossZoneMessage(
}
else if (!character_name.empty() && !message.empty())
{
uint32_t pack_size = sizeof(CZMessagePlayer_Struct);
auto pack = std::make_unique<ServerPacket>(ServerOP_CZMessagePlayer, pack_size);
auto buf = reinterpret_cast<CZMessagePlayer_Struct*>(pack->pBuffer);
uint32_t pack_size = sizeof(CZMessage_Struct);
auto pack = std::make_unique<ServerPacket>(ServerOP_CZMessage, pack_size);
auto buf = reinterpret_cast<CZMessage_Struct*>(pack->pBuffer);
uint8 update_type = CZUpdateType_Character;
int update_identifier = 0;
buf->update_type = update_type;
buf->update_identifier = update_identifier;
buf->type = chat_type;
strn0cpy(buf->character_name, character_name.c_str(), sizeof(buf->character_name));
strn0cpy(buf->message, message.c_str(), sizeof(buf->message));
strn0cpy(buf->client_name, character_name.c_str(), sizeof(buf->client_name));
worldserver.SendPacket(pack.get());
}
@@ -9519,7 +9523,7 @@ void Client::SendCrossZoneMessageString(
auto buf = reinterpret_cast<CZClientMessageString_Struct*>(pack->pBuffer);
buf->string_id = string_id;
buf->chat_type = chat_type;
strn0cpy(buf->character_name, character_name.c_str(), sizeof(buf->character_name));
strn0cpy(buf->client_name, character_name.c_str(), sizeof(buf->client_name));
buf->args_size = args_size;
memcpy(buf->args, argument_buffer.buffer(), argument_buffer.size());
+2 -1
View File
@@ -758,8 +758,9 @@ void command_worldwide(Client *c, const Seperator *sep)
if (sub_command == "cast") {
if (sep->arg[2][0] && Seperator::IsNumber(sep->arg[2])) {
uint8 update_type = WWSpellUpdateType_Cast;
int spell_id = atoi(sep->arg[2]);
quest_manager.WorldWideCastSpell(spell_id, 0, 0);
quest_manager.WorldWideSpell(update_type, spell_id);
worldserver.SendEmoteMessage(0, 0, 15, fmt::format("<SYSTEMWIDE MESSAGE> A GM has cast [{}] world-wide!", GetSpellName(spell_id)).c_str());
}
else {
+2357 -1579
View File
File diff suppressed because it is too large Load Diff
+1383 -700
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -304,7 +304,7 @@ XS(XS_Raid_GetClientByIndex); /* prototype to pass -Wmissing-prototypes */
XS(XS_Raid_GetClientByIndex) {
dXSARGS;
if (items != 2)
Perl_croak(aTHX_ "Usage: Raid::GetClientByIndex(THIS, uint16 raid_indez)"); // @categories Raid
Perl_croak(aTHX_ "Usage: Raid::GetClientByIndex(THIS, uint16 raid_index)"); // @categories Raid
{
Raid *THIS;
Client *RETVAL;
+202 -878
View File
File diff suppressed because it is too large Load Diff
+16 -81
View File
@@ -290,87 +290,22 @@ public:
static std::string GetZoneLongName(std::string zone_short_name);
static std::string GetZoneLongNameByID(uint32 zone_id);
static std::string GetZoneShortName(uint32 zone_id);
void CrossZoneAssignTaskByCharID(int character_id, uint32 task_id, bool enforce_level_requirement = false);
void CrossZoneAssignTaskByGroupID(int group_id, uint32 task_id, bool enforce_level_requirement = false);
void CrossZoneAssignTaskByRaidID(int raid_id, uint32 task_id, bool enforce_level_requirement = false);
void CrossZoneAssignTaskByGuildID(int guild_id, uint32 task_id, bool enforce_level_requirement = false);
void CrossZoneCastSpellByCharID(int character_id, uint32 spell_id);
void CrossZoneCastSpellByGroupID(int group_id, uint32 spell_id);
void CrossZoneCastSpellByRaidID(int raid_id, uint32 spell_id);
void CrossZoneCastSpellByGuildID(int guild_id, uint32 spell_id);
void CrossZoneDisableTaskByCharID(int character_id, uint32 task_id);
void CrossZoneDisableTaskByGroupID(int group_id, uint32 task_id);
void CrossZoneDisableTaskByRaidID(int raid_id, uint32 task_id);
void CrossZoneDisableTaskByGuildID(int guild_id, uint32 task_id);
void CrossZoneEnableTaskByCharID(int character_id, uint32 task_id);
void CrossZoneEnableTaskByGroupID(int group_id, uint32 task_id);
void CrossZoneEnableTaskByRaidID(int raid_id, uint32 task_id);
void CrossZoneEnableTaskByGuildID(int guild_id, uint32 task_id);
void CrossZoneFailTaskByCharID(int character_id, uint32 task_id);
void CrossZoneFailTaskByGroupID(int group_id, uint32 task_id);
void CrossZoneFailTaskByRaidID(int raid_id, uint32 task_id);
void CrossZoneFailTaskByGuildID(int guild_id, uint32 task_id);
void CrossZoneLDoNUpdate(uint8 type, uint8 subtype, int identifier, uint32 theme_id, int points = 1);
void CrossZoneMarqueeByCharID(int character_id, uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, const char *message);
void CrossZoneMarqueeByGroupID(int group_id, uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, const char *message);
void CrossZoneMarqueeByRaidID(int raid_id, uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, const char *message);
void CrossZoneMarqueeByGuildID(int guild_id, uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, const char *message);
void CrossZoneMessagePlayerByName(uint32 type, const char *character_name, const char *message);
void CrossZoneMessagePlayerByGroupID(uint32 type, int group_id, const char *message);
void CrossZoneMessagePlayerByRaidID(uint32 type, int raid_id, const char *message);
void CrossZoneMessagePlayerByGuildID(uint32 type, int guild_id, const char *message);
void CrossZoneMovePlayerByCharID(int character_id, const char *zone_short_name);
void CrossZoneMovePlayerByGroupID(int group_id, const char *zone_short_name);
void CrossZoneMovePlayerByRaidID(int raid_id, const char *zone_short_name);
void CrossZoneMovePlayerByGuildID(int guild_id, const char *zone_short_name);
void CrossZoneMoveInstanceByCharID(int character_id, uint16 instance_id);
void CrossZoneMoveInstanceByGroupID(int group_id, uint16 instance_id);
void CrossZoneMoveInstanceByRaidID(int raid_id, uint16 instance_id);
void CrossZoneMoveInstanceByGuildID(int guild_id, uint16 instance_id);
void CrossZoneRemoveSpellByCharID(int character_id, uint32 spell_id);
void CrossZoneRemoveSpellByGroupID(int group_id, uint32 spell_id);
void CrossZoneRemoveSpellByRaidID(int raid_id, uint32 spell_id);
void CrossZoneRemoveSpellByGuildID(int guild_id, uint32 spell_id);
void CrossZoneRemoveTaskByCharID(int character_id, uint32 task_id);
void CrossZoneRemoveTaskByGroupID(int group_id, uint32 task_id);
void CrossZoneRemoveTaskByRaidID(int raid_id, uint32 task_id);
void CrossZoneRemoveTaskByGuildID(int guild_id, uint32 task_id);
void CrossZoneResetActivityByCharID(int character_id, uint32 task_id, int activity_id);
void CrossZoneResetActivityByGroupID(int group_id, uint32 task_id, int activity_id);
void CrossZoneResetActivityByRaidID(int raid_id, uint32 task_id, int activity_id);
void CrossZoneResetActivityByGuildID(int guild_id, uint32 task_id, int activity_id);
void CrossZoneSetEntityVariableByNPCTypeID(uint32 npctype_id, const char *variable_name, const char *variable_value);
void CrossZoneSetEntityVariableByClientName(const char *character_name, const char *variable_name, const char *variable_value);
void CrossZoneSetEntityVariableByGroupID(int group_id, const char *variable_name, const char *variable_value);
void CrossZoneSetEntityVariableByRaidID(int raid_id, const char *variable_name, const char *variable_value);
void CrossZoneSetEntityVariableByGuildID(int guild_id, const char *variable_name, const char *variable_value);
void CrossZoneSignalPlayerByCharID(int charid, uint32 signal);
void CrossZoneSignalPlayerByGroupID(int group_id, uint32 signal);
void CrossZoneSignalPlayerByRaidID(int raid_id, uint32 signal);
void CrossZoneSignalPlayerByGuildID(int guild_id, uint32 signal);
void CrossZoneSignalNPCByNPCTypeID(uint32 npctype_id, uint32 signal);
void CrossZoneSignalPlayerByName(const char *character_name, uint32 signal);
void CrossZoneUpdateActivityByCharID(int character_id, uint32 task_id, int activity_id, int activity_count = 1);
void CrossZoneUpdateActivityByGroupID(int group_id, uint32 task_id, int activity_id, int activity_count = 1);
void CrossZoneUpdateActivityByRaidID(int raid_id, uint32 task_id, int activity_id, int activity_count = 1);
void CrossZoneUpdateActivityByGuildID(int guild_id, uint32 task_id, int activity_id, int activity_count = 1);
void WorldWideAssignTask(uint32 task_id, bool enforce_level_requirement = false, uint8 min_status = 0, uint8 max_status = 0);
void WorldWideCastSpell(uint32 spell_id, uint8 min_status = 0, uint8 max_status = 0);
void WorldWideDisableTask(uint32 task_id, uint8 min_status = 0, uint8 max_status = 0);
void WorldWideEnableTask(uint32 task_id, uint8 min_status = 0, uint8 max_status = 0);
void WorldWideFailTask(uint32 task_id, uint8 min_status = 0, uint8 max_status = 0);
void WorldWideMarquee(uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, const char *message, uint8 min_status = 0, uint8 max_status = 0);
void WorldWideMessage(uint32 type, const char *message, uint8 min_status = 0, uint8 max_status = 0);
void WorldWideMove(const char *zone_short_name, uint8 min_status = 0, uint8 max_status = 0);
void WorldWideMoveInstance(uint16 instance_id, uint8 min_status = 0, uint8 max_status = 0);
void WorldWideRemoveSpell(uint32 spell_id, uint8 min_status = 0, uint8 max_status = 0);
void WorldWideRemoveTask(uint32 task_id, uint8 min_status = 0, uint8 max_status = 0);
void WorldWideResetActivity(uint32 task_id, int activity_id, uint8 min_status = 0, uint8 max_status = 0);
void WorldWideSetEntityVariableClient(const char *variable_name, const char *variable_value, uint8 min_status = 0, uint8 max_status = 0);
void WorldWideSetEntityVariableNPC(const char *variable_name, const char *variable_value);
void WorldWideSignalClient(uint32 signal, uint8 min_status = 0, uint8 max_status = 0);
void WorldWideSignalNPC(uint32 signal);
void WorldWideUpdateActivity(uint32 task_id, int activity_id, int activity_count = 1, uint8 min_status = 0, uint8 max_status = 0);
void CrossZoneLDoNUpdate(uint8 update_type, uint8 update_subtype, int update_identifier, uint32 theme_id, int points = 1, const char* client_name = "");
void CrossZoneMarquee(uint8 update_type, int update_identifier, uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, const char* message, const char* client_name = "");
void CrossZoneMessage(uint8 update_type, int update_identifier, uint32 type, const char* message, const char* client_name = "");
void CrossZoneMove(uint8 update_type, uint8 update_subtype, int update_identifier, const char* zone_short_name, uint16 instance_id, const char* client_name = "");
void CrossZoneSetEntityVariable(uint8 update_type, int update_identifier, const char* variable_name, const char* variable_value, const char* client_name = "");
void CrossZoneSignal(uint8 update_type, int update_identifier, uint32 signal, const char* client_name = "");
void CrossZoneSpell(uint8 update_type, uint8 update_subtype, int update_identifier, uint32 spell_id, const char* client_name = "");
void CrossZoneTaskUpdate(uint8 update_type, uint8 update_subtype, int update_identifier, uint32 task_identifier, int task_subidentifier = -1, int update_count = 1, bool enforce_level_requirement = false, const char* client_name = "");
void WorldWideLDoNUpdate(uint8 update_type, uint32 theme_id, int points = 1, uint8 min_status = 0, uint8 max_status = 0);
void WorldWideMarquee(uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, const char* message, uint8 min_status = 0, uint8 max_status = 0);
void WorldWideMessage(uint32 type, const char* message, uint8 min_status = 0, uint8 max_status = 0);
void WorldWideMove(uint8 update_type, const char* zone_short_name, uint16 instance_id = 0, uint8 min_status = 0, uint8 max_status = 0);
void WorldWideSetEntityVariable(uint8 update_type, const char* variable_name, const char* variable_value, uint8 min_status = 0, uint8 max_status = 0);
void WorldWideSignal(uint8 update_type, uint32 signal, uint8 min_status = 0, uint8 max_status = 0);
void WorldWideSpell(uint8 update_type, uint32 spell_id, uint8 min_status = 0, uint8 max_status = 0);
void WorldWideTaskUpdate(uint8 update_type, uint32 task_identifier, int task_subidentifier = -1, int update_count = 1, bool enforce_level_requirement = false, uint8 min_status = 0, uint8 max_status = 0);
bool EnableRecipe(uint32 recipe_id);
bool DisableRecipe(uint32 recipe_id);
void ClearNPCTypeCache(int npctype_id);
+741 -849
View File
File diff suppressed because it is too large Load Diff