#ifndef EQ_SOPCODES_H #define EQ_SOPCODES_H #include "../common/types.h" #include "../common/packet_functions.h" #include "../common/eq_packet_structs.h" #include "../common/net/packet.h" #include #include #include #include #include #include #define SERVER_TIMEOUT 45000 // how often keepalive gets sent #define INTERSERVER_TIMER 10000 #define LoginServer_StatusUpdateInterval 15000 #define LoginServer_AuthStale 60000 #define AUTHCHANGE_TIMEOUT 900 // in seconds #define ServerOP_KeepAlive 0x0001 // packet to test if port is still open #define ServerOP_ChannelMessage 0x0002 // broadcast/guildsay #define ServerOP_SetZone 0x0003 // client -> server zoneinfo #define ServerOP_ShutdownAll 0x0004 // exit(0); #define ServerOP_ZoneShutdown 0x0005 // unload all data, goto sleep mode #define ServerOP_ZoneBootup 0x0006 // come out of sleep mode and load zone specified #define ServerOP_ZoneStatus 0x0007 // Shows status of all zones #define ServerOP_SetConnectInfo 0x0008 // Tells server address and port # #define ServerOP_EmoteMessage 0x0009 // Worldfarts #define ServerOP_ClientList 0x000A // Update worldserver's client list, for #whos #define ServerOP_Who 0x000B // #who #define ServerOP_ZonePlayer 0x000C // #zone, or #summon #define ServerOP_KickPlayer 0x000D // #kick #define ServerOP_RefreshGuild 0x000E // Notice to all zoneservers to refresh their guild cache for ID# in packet (ServerGuildRefresh_Struct) #define ServerOP_VoiceMacro 0x000F //#define ServerOP_GuildInvite 0x0010 #define ServerOP_DeleteGuild 0x0011 // ServerGuildID_Struct #define ServerOP_GuildRankUpdate 0x0012 #define ServerOP_GuildCharRefresh 0x0013 #define ServerOP_GuildMemberUpdate 0x0014 #define ServerOP_RequestOnlineGuildMembers 0x0015 #define ServerOP_OnlineGuildMembersResponse 0x0016 #define ServerOP_LFGuildUpdate 0x0017 #define ServerOP_FlagUpdate 0x0018 // GM Flag updated for character, refresh the memory cache #define ServerOP_GMGoto 0x0019 #define ServerOP_MultiLineMsg 0x001A #define ServerOP_Lock 0x001B // For #lock/#unlock inside server #define ServerOP_Motd 0x001C // For changing MoTD inside server. #define ServerOP_Uptime 0x001D #define ServerOP_Petition 0x001E #define ServerOP_KillPlayer 0x001F #define ServerOP_UpdateGM 0x0020 #define ServerOP_RezzPlayer 0x0021 #define ServerOP_ZoneReboot 0x0022 #define ServerOP_ZoneToZoneRequest 0x0023 #define ServerOP_AcceptWorldEntrance 0x0024 #define ServerOP_ZAAuth 0x0025 #define ServerOP_ZAAuthFailed 0x0026 #define ServerOP_ZoneIncClient 0x0027 // Incoming client #define ServerOP_ClientListKA 0x0028 #define ServerOP_ChangeWID 0x0029 #define ServerOP_IPLookup 0x002A #define ServerOP_LockZone 0x002B #define ServerOP_ItemStatus 0x002C #define ServerOP_OOCMute 0x002D #define ServerOP_Revoke 0x002E #define ServerOP_WebInterfaceCall 0x002F #define ServerOP_GroupIDReq 0x0030 #define ServerOP_GroupIDReply 0x0031 #define ServerOP_GroupLeave 0x0032 // for disbanding out of zone folks #define ServerOP_RezzPlayerAccept 0x0033 #define ServerOP_SpawnCondition 0x0034 #define ServerOP_SpawnEvent 0x0035 #define ServerOP_SetLaunchName 0x0036 #define ServerOP_RezzPlayerReject 0x0037 #define ServerOP_SpawnPlayerCorpse 0x0038 #define ServerOP_Consent 0x0039 #define ServerOP_Consent_Response 0x003a #define ServerOP_ForceGroupUpdate 0x003b #define ServerOP_OOZGroupMessage 0x003c #define ServerOP_DisbandGroup 0x003d //for disbanding a whole group cross zone #define ServerOP_GroupJoin 0x003e //for joining ooz folks #define ServerOP_UpdateSpawn 0x003f #define ServerOP_SpawnStatusChange 0x0040 #define ServerOP_DropClient 0x0041 // DropClient #define ServerOP_DepopAllPlayersCorpses 0x0060 #define ServerOP_QGlobalUpdate 0x0061 #define ServerOP_QGlobalDelete 0x0062 #define ServerOP_DepopPlayerCorpse 0x0063 #define ServerOP_RequestTellQueue 0x0064 // client asks for it's tell queues #define ServerOP_ChangeSharedMem 0x0065 #define ServerOP_WebInterfaceEvent 0x0066 #define ServerOP_WebInterfaceSubscribe 0x0067 #define ServerOP_WebInterfaceUnsubscribe 0x0068 #define ServerOP_RaidAdd 0x0100 //in use #define ServerOP_RaidRemove 0x0101 //in use #define ServerOP_RaidDisband 0x0102 //in use #define ServerOP_RaidLockFlag 0x0103 //in use #define ServerOP_RaidGroupLeader 0x0104 //in use #define ServerOP_RaidLeader 0x0105 //in use #define ServerOP_RaidGroupSay 0x0106 //in use #define ServerOP_RaidSay 0x0107 //in use #define ServerOP_DetailsChange 0x0108 //in use #define ServerOP_UpdateGroup 0x010A //in use #define ServerOP_RaidGroupDisband 0x010B //in use #define ServerOP_RaidChangeGroup 0x010C //in use #define ServerOP_RaidGroupAdd 0x010D #define ServerOP_RaidGroupRemove 0x010E #define ServerOP_GroupInvite 0x010F #define ServerOP_GroupFollow 0x0110 #define ServerOP_GroupFollowAck 0x0111 #define ServerOP_GroupCancelInvite 0x0112 #define ServerOP_RaidMOTD 0x0113 #define ServerOP_RaidNote 0x0114 #define ServerOP_InstanceUpdateTime 0x014F #define ServerOP_AdventureRequest 0x0150 #define ServerOP_AdventureRequestAccept 0x0151 #define ServerOP_AdventureRequestDeny 0x0152 #define ServerOP_AdventureRequestCreate 0x0153 #define ServerOP_AdventureData 0x0154 #define ServerOP_AdventureDataClear 0x0155 #define ServerOP_AdventureCreateDeny 0x0156 #define ServerOP_AdventureDataRequest 0x0157 #define ServerOP_AdventureClickDoor 0x0158 #define ServerOP_AdventureClickDoorReply 0x0159 #define ServerOP_AdventureClickDoorError 0x015a #define ServerOP_AdventureLeave 0x015b #define ServerOP_AdventureLeaveReply 0x015c #define ServerOP_AdventureLeaveDeny 0x015d #define ServerOP_AdventureCountUpdate 0x015e #define ServerOP_AdventureZoneData 0x015f #define ServerOP_AdventureAssaCountUpdate 0x0160 #define ServerOP_AdventureFinish 0x0161 #define ServerOP_AdventureLeaderboard 0x0162 #define ServerOP_WhoAll 0x0210 #define ServerOP_FriendsWho 0x0211 #define ServerOP_LFGMatches 0x0212 #define ServerOP_LFPUpdate 0x0213 #define ServerOP_LFPMatches 0x0214 #define ServerOP_ClientVersionSummary 0x0215 // expedition #define ServerOP_ExpeditionCreate 0x0400 #define ServerOP_ExpeditionLockout 0x0403 #define ServerOP_ExpeditionDzAddPlayer 0x0408 #define ServerOP_ExpeditionDzMakeLeader 0x0409 #define ServerOP_ExpeditionCharacterLockout 0x040d #define ServerOP_ExpeditionSaveInvite 0x040e #define ServerOP_ExpeditionRequestInvite 0x040f #define ServerOP_ExpeditionReplayOnJoin 0x0410 #define ServerOP_ExpeditionLockState 0x0411 #define ServerOP_ExpeditionLockoutDuration 0x0414 // dz #define ServerOP_DzAddRemoveMember 0x0450 #define ServerOP_DzRemoveAllMembers 0x0451 #define ServerOP_DzSetSecondsRemaining 0x0452 #define ServerOP_DzDurationUpdate 0x0453 #define ServerOP_DzSetCompass 0x0454 #define ServerOP_DzSetSafeReturn 0x0455 #define ServerOP_DzSetZoneIn 0x0456 #define ServerOP_DzSwapMembers 0x0457 #define ServerOP_DzGetMemberStatuses 0x0458 #define ServerOP_DzUpdateMemberStatus 0x0459 #define ServerOP_DzLeaderChanged 0x045a #define ServerOP_DzExpireWarning 0x045b #define ServerOP_DzCreated 0x045c #define ServerOP_DzDeleted 0x045d #define ServerOP_DzSetSwitchID 0x045e #define ServerOP_DzMovePC 0x045f #define ServerOP_LSInfo 0x1000 #define ServerOP_LSStatus 0x1001 #define ServerOP_LSClientAuthLeg 0x1002 #define ServerOP_LSFatalError 0x1003 #define ServerOP_SystemwideMessage 0x1005 #define ServerOP_ListWorlds 0x1006 #define ServerOP_PeerConnect 0x1007 #define ServerOP_NewLSInfo 0x1008 #define ServerOP_LSRemoteAddr 0x1009 #define ServerOP_LSAccountUpdate 0x100A #define ServerOP_LSClientAuth 0x100B #define ServerOP_EncapPacket 0x2007 // Packet within a packet #define ServerOP_WorldListUpdate 0x2008 #define ServerOP_WorldListRemove 0x2009 #define ServerOP_TriggerWorldListRefresh 0x200A #define ServerOP_WhoAllReply 0x2010 #define ServerOP_SetWorldTime 0x200B #define ServerOP_GetWorldTime 0x200C #define ServerOP_SyncWorldTime 0x200E #define ServerOP_RefreshCensorship 0x200F #define ServerOP_LSZoneInfo 0x3001 #define ServerOP_LSZoneStart 0x3002 #define ServerOP_LSZoneBoot 0x3003 #define ServerOP_LSZoneShutdown 0x3004 #define ServerOP_LSZoneSleep 0x3005 #define ServerOP_LSPlayerLeftWorld 0x3006 #define ServerOP_LSPlayerJoinWorld 0x3007 #define ServerOP_LSPlayerZoneChange 0x3008 #define ServerOP_UsertoWorldReqLeg 0xAB00 #define ServerOP_UsertoWorldRespLeg 0xAB01 #define ServerOP_UsertoWorldReq 0xAB02 #define ServerOP_UsertoWorldResp 0xAB03 #define ServerOP_LauncherConnectInfo 0x3000 #define ServerOP_LauncherZoneRequest 0x3001 #define ServerOP_LauncherZoneStatus 0x3002 #define ServerOP_DoZoneCommand 0x3003 #define ServerOP_CameraShake 0x4000 #define ServerOP_HotReloadQuests 0x4001 #define ServerOP_QueryServGeneric 0x4002 #define ServerOP_UCSMailMessage 0x4003 #define ServerOP_UCSMessage 0x4004 #define ServerOP_UCSServerStatusReply 0x4005 #define ServerOP_UCSServerStatusRequest 0x4006 #define ServerOP_UpdateSchedulerEvents 0x4007 #define ServerOP_DiscordWebhookMessage 0x4008 #define ServerOP_ReloadAAData 0x4100 #define ServerOP_ReloadAlternateCurrencies 0x4101 #define ServerOP_ReloadBlockedSpells 0x4102 #define ServerOP_ReloadCommands 0x4103 #define ServerOP_ReloadContentFlags 0x4104 #define ServerOP_ReloadDoors 0x4105 #define ServerOP_ReloadGroundSpawns 0x4106 #define ServerOP_ReloadLevelEXPMods 0x4107 #define ServerOP_ReloadLogs 0x4108 #define ServerOP_ReloadMerchants 0x4109 #define ServerOP_ReloadNPCEmotes 0x4110 #define ServerOP_ReloadObjects 0x4111 #define ServerOP_ReloadOpcodes 0x4112 #define ServerOP_ReloadPerlExportSettings 0x4113 #define ServerOP_ReloadRules 0x4114 #define ServerOP_ReloadStaticZoneData 0x4115 #define ServerOP_ReloadTasks 0x4116 #define ServerOP_ReloadTitles 0x4117 #define ServerOP_ReloadTraps 0x4118 #define ServerOP_ReloadVariables 0x4119 #define ServerOP_ReloadVeteranRewards 0x4120 #define ServerOP_ReloadWorld 0x4121 #define ServerOP_ReloadZonePoints 0x4122 #define ServerOP_ReloadDzTemplates 0x4123 #define ServerOP_ReloadZoneData 0x4124 #define ServerOP_ReloadDataBucketsCache 0x4125 #define ServerOP_CZDialogueWindow 0x4500 #define ServerOP_CZLDoNUpdate 0x4501 #define ServerOP_CZMarquee 0x4502 #define ServerOP_CZMessage 0x4503 #define ServerOP_CZMove 0x4504 #define ServerOP_CZSetEntityVariable 0x4505 #define ServerOP_CZSignal 0x4506 #define ServerOP_CZSpell 0x4507 #define ServerOP_CZTaskUpdate 0x4508 #define ServerOP_CZClientMessageString 0x4509 #define ServerOP_WWDialogueWindow 0x4750 #define ServerOP_WWLDoNUpdate 0x4751 #define ServerOP_WWMarquee 0x4752 #define ServerOP_WWMessage 0x4753 #define ServerOP_WWMove 0x4754 #define ServerOP_WWSetEntityVariable 0x4755 #define ServerOP_WWSignal 0x4756 #define ServerOP_WWSpell 0x4757 #define ServerOP_WWTaskUpdate 0x4758 /** * QueryServer */ #define ServerOP_QSPlayerLogTrades 0x5000 #define ServerOP_QSPlayerLogHandins 0x5001 #define ServerOP_QSPlayerLogNPCKills 0x5002 #define ServerOP_QSPlayerLogDeletes 0x5003 #define ServerOP_QSPlayerLogMoves 0x5004 #define ServerOP_QSPlayerLogMerchantTransactions 0x5005 #define ServerOP_QSSendQuery 0x5006 #define ServerOP_QSPlayerDropItem 0x5007 // player events #define ServerOP_PlayerEvent 0x5100 #define ServerOP_DataBucketCacheUpdate 0x5200 enum { CZUpdateType_Character, CZUpdateType_Group, CZUpdateType_Raid, CZUpdateType_Guild, CZUpdateType_Expedition, CZUpdateType_ClientName, CZUpdateType_NPC }; enum { CZLDoNUpdateSubtype_AddLoss, CZLDoNUpdateSubtype_AddPoints, CZLDoNUpdateSubtype_AddWin, CZLDoNUpdateSubtype_RemoveLoss, CZLDoNUpdateSubtype_RemoveWin, }; enum { CZMoveUpdateSubtype_MoveZone, CZMoveUpdateSubtype_MoveZoneInstance }; enum { CZSpellUpdateSubtype_Cast, CZSpellUpdateSubtype_Remove }; enum { CZTaskUpdateSubtype_ActivityReset, CZTaskUpdateSubtype_ActivityUpdate, CZTaskUpdateSubtype_AssignTask, CZTaskUpdateSubtype_DisableTask, CZTaskUpdateSubtype_EnableTask, CZTaskUpdateSubtype_FailTask, CZTaskUpdateSubtype_RemoveTask }; enum { WWLDoNUpdateType_AddLoss, WWLDoNUpdateType_AddPoints, WWLDoNUpdateType_AddWin, WWLDoNUpdateType_RemoveLoss, WWLDoNUpdateType_RemoveWin }; enum { WWMoveUpdateType_MoveZone, WWMoveUpdateType_MoveZoneInstance }; enum { WWSetEntityVariableUpdateType_Character, WWSetEntityVariableUpdateType_NPC }; enum { WWSignalUpdateType_Character, WWSignalUpdateType_NPC }; enum { WWSpellUpdateType_Cast, WWSpellUpdateType_Remove }; enum { WWTaskUpdateType_ActivityReset, WWTaskUpdateType_ActivityUpdate, WWTaskUpdateType_AssignTask, WWTaskUpdateType_DisableTask, WWTaskUpdateType_EnableTask, WWTaskUpdateType_FailTask, WWTaskUpdateType_RemoveTask }; /* Query Serv Generic Packet Flag/Type Enumeration */ enum { QSG_LFGuild = 0 }; enum { QSG_LFGuild_PlayerMatches = 0, QSG_LFGuild_UpdatePlayerInfo, QSG_LFGuild_RequestPlayerInfo, QSG_LFGuild_UpdateGuildInfo, QSG_LFGuild_GuildMatches, QSG_LFGuild_RequestGuildInfo }; #define ServerOP_Speech 0x5500 enum { UserToWorldStatusWorldUnavail = 0, UserToWorldStatusSuccess = 1, UserToWorldStatusSuspended = -1, UserToWorldStatusBanned = -2, UserToWorldStatusWorldAtCapacity = -3, UserToWorldStatusAlreadyOnline = -4 }; /************ PACKET RELATED STRUCT ************/ class ServerPacket { public: ~ServerPacket() { safe_delete_array(pBuffer); } ServerPacket(uint16 in_opcode = 0, uint32 in_size = 0) { this->compressed = false; size = in_size; opcode = in_opcode; if (size == 0) { pBuffer = 0; } else { pBuffer = new uchar[size]; memset(pBuffer, 0, size); } _wpos = 0; _rpos = 0; } ServerPacket(uint16 in_opcode, const EQ::Net::Packet &p) { this->compressed = false; size = (uint32)p.Length(); opcode = in_opcode; if (size == 0) { pBuffer = 0; } else { pBuffer = new uchar[size]; memcpy(pBuffer, p.Data(), size); } _wpos = 0; _rpos = 0; } ServerPacket* Copy() { ServerPacket* ret = new ServerPacket(this->opcode, this->size); if (this->size) memcpy(ret->pBuffer, this->pBuffer, this->size); ret->compressed = this->compressed; ret->InflatedSize = this->InflatedSize; return ret; } void WriteUInt8(uint8 value) { *(uint8 *)(pBuffer + _wpos) = value; _wpos += sizeof(uint8); } void WriteInt8(uint8_t value) { *(uint8_t *)(pBuffer + _wpos) = value; _wpos += sizeof(uint8_t); } void WriteUInt32(uint32 value) { *(uint32 *)(pBuffer + _wpos) = value; _wpos += sizeof(uint32); } void WriteInt32(int32_t value) { *(int32_t *)(pBuffer + _wpos) = value; _wpos += sizeof(int32_t); } void WriteString(const char * str) { uint32 len = static_cast(strlen(str)) + 1; memcpy(pBuffer + _wpos, str, len); _wpos += len; } uint8 ReadUInt8() { uint8 value = *(uint8 *)(pBuffer + _rpos); _rpos += sizeof(uint8); return value; } uint32 ReadUInt32() { uint32 value = *(uint32 *)(pBuffer + _rpos); _rpos += sizeof(uint32); return value; } void ReadString(char *str) { uint32 len = static_cast(strlen((char *)(pBuffer + _rpos))) + 1; memcpy(str, pBuffer + _rpos, len); _rpos += len; } uint32 GetWritePosition() { return _wpos; } uint32 GetReadPosition() { return _rpos; } void SetWritePosition(uint32 Newwpos) { _wpos = Newwpos; } void WriteSkipBytes(uint32 count) { _wpos += count; } void ReadSkipBytes(uint32 count) { _rpos += count; } void SetReadPosition(uint32 Newrpos) { _rpos = Newrpos; } uint32 size; uint16 opcode; uchar* pBuffer; uint32 _wpos; uint32 _rpos; bool compressed; uint32 InflatedSize; uint32 destination; }; #pragma pack(1) struct SPackSendQueue { uint16 size; uchar buffer[0]; }; struct ServerZoneStateChange_struct { uint32 ZoneServerID; char adminname[64]; uint32 zoneid; uint16 instanceid; bool makestatic; }; struct ServerZoneIncomingClient_Struct { uint32 zoneid; // in case the zone shut down, boot it back up uint16 instanceid; // instance id if it exists for booting up uint32 ip; // client's IP address uint32 wid; // client's WorldID# uint32 accid; int16 admin; uint32 charid; uint32 lsid; bool tellsoff; char charname[64]; char lskey[30]; }; struct ServerZoneDropClient_Struct { uint32 lsid; }; struct ServerChangeWID_Struct { uint32 charid; uint32 newwid; }; struct SendGroup_Struct{ uint8 grouptotal; uint32 zoneid; char leader[64]; char thismember[64]; char members[5][64]; }; struct ServerGroupFollow_Struct { uint32 CharacterID; GroupGeneric_Struct gf; }; struct ServerGroupFollowAck_Struct { char Name[64]; }; struct ServerChannelMessage_Struct { char deliverto[64]; char to[64]; char from[64]; uint8 fromadmin; bool noreply; uint16 chan_num; uint32 guilddbid; uint8 language; uint8 lang_skill; uint8 queued; // 0 = not queued, 1 = queued, 2 = queue full, 3 = offline char message[0]; }; struct ServerEmoteMessage_Struct { char to[64]; uint32 guilddbid; int16 minstatus; uint32 type; char message[0]; }; struct ServerVoiceMacro_Struct { char From[64]; union { char To[64]; uint32 GroupID; uint32 RaidID; }; uint32 Type; uint32 Voice; uint32 MacroNumber; }; struct ServerClientList_Struct { uint8 remove; uint32 wid; uint32 IP; uint32 zone; uint16 instance_id; int16 Admin; uint32 charid; char name[64]; uint32 AccountID; char AccountName[30]; uint32 LSAccountID; char lskey[30]; uint16 race; uint8 class_; uint8 level; uint8 anon; bool tellsoff; uint32 guild_id; bool LFG; uint8 gm; uint8 ClientVersion; uint8 LFGFromLevel; uint8 LFGToLevel; bool LFGMatchFilter; char LFGComments[64]; }; struct ServerClientListKeepAlive_Struct { uint32 numupdates; uint32 wid[0]; }; struct ServerZonePlayer_Struct { char adminname[64]; int16 adminrank; uint8 ignorerestrictions; char name[64]; char zone[25]; uint32 instance_id; float x_pos; float y_pos; float z_pos; }; struct RezzPlayer_Struct { uint32 dbid; uint32 exp; uint16 rezzopcode; //char packet[160]; Resurrect_Struct rez; }; struct ServerZoneReboot_Struct { // char ip1[250]; char ip2[250]; uint16 port; uint32 zoneid; }; struct SetZone_Struct { uint16 instanceid; uint32 zoneid; bool staticzone; }; struct ServerKickPlayer_Struct { char adminname[64]; int16 adminrank; char name[64]; uint32 account_id; }; struct ServerLSInfo_Struct { char name[201]; // name the worldserver wants char address[250]; // DNS address of the server char account[31]; // account name for the worldserver char password[31]; // password for the name char protocolversion[25]; // Major protocol version number char serverversion[64]; // minor server software version number uint8 servertype; // 0=world, 1=chat, 2=login, 3=MeshLogin }; struct ServerNewLSInfo_Struct { char server_long_name[201]; // name the worldserver wants char server_short_name[50]; // shortname the worldserver wants char remote_ip_address[125]; // DNS address of the server char local_ip_address[125]; // DNS address of the server char account_name[31]; // account name for the worldserver char account_password[31]; // password for the name char protocol_version[25]; // Major protocol version number char server_version[64]; // minor server software version number uint8 server_process_type; // 0=world, 1=chat, 2=login, 3=MeshLogin }; struct ServerLSAccountUpdate_Struct { // for updating info on login server char worldaccount[31]; // account name for the worldserver char worldpassword[31]; // password for the name uint32 useraccountid; // player account ID char useraccount[31]; // player account name char userpassword[51]; // player account password char user_email[101]; // player account email address }; struct ServerLSStatus_Struct { int32 status; int32 num_players; int32 num_zones; }; struct ZoneInfo_Struct { uint32 zone; uint16 count; uint32 zone_wid; }; struct ZoneBoot_Struct { uint32 zone; uint32 instance; char compile_time[25]; uint32 zone_wid; }; struct ZoneShutdown_Struct { uint32 zone; uint32 instance; uint32 zone_wid; }; struct ServerLSZoneSleep_Struct { uint32 zone; uint32 instance; uint32 zone_wid; }; struct ServerLSPlayerJoinWorld_Struct { uint32 lsaccount_id; char key[30]; }; struct ServerLSPlayerLeftWorld_Struct { uint32 lsaccount_id; char key[30]; }; struct ServerLSPlayerZoneChange_Struct { uint32 lsaccount_id; uint32 from; // 0 = world uint32 to; // 0 = world }; struct ClientAuth_Struct { uint32 loginserver_account_id; // ID# in login server's db char loginserver_name[64]; char account_name[30]; // username in login server's db char key[30]; // the Key the client will present uint8 lsadmin; // login server admin level int16 is_world_admin; // login's suggested worldadmin level setting for this user, up to the world if they want to obey it uint32 ip; uint8 is_client_from_local_network; // 1 if the client is from the local network template void serialize(Archive &ar) { ar(loginserver_account_id, loginserver_name, account_name, key, lsadmin, is_world_admin, ip, is_client_from_local_network); } }; struct ClientAuthLegacy_Struct { uint32 loginserver_account_id; // ID# in login server's db char loginserver_account_name[30]; // username in login server's db char key[30]; // the Key the client will present uint8 loginserver_admin_level; // login server admin level int16 is_world_admin; // login's suggested worldadmin level setting for this user, up to the world if they want to obey it uint32 ip; uint8 is_client_from_local_network; // 1 if the client is from the local network template void serialize(Archive &ar) { ar(loginserver_account_id, loginserver_account_name, key, loginserver_admin_level, is_world_admin, ip, is_client_from_local_network); } }; struct ServerSystemwideMessage { uint32 lsaccount_id; char key[30]; // sessionID key for verification uint32 type; char message[0]; }; struct ServerLSPeerConnect { uint32 ip; uint16 port; }; struct ServerConnectInfo { char address[250]; char local_address[250]; uint16 port; uint32 process_id; }; struct ServerGMGoto_Struct { char myname[64]; char gotoname[64]; int16 admin; }; struct ServerMultiLineMsg_Struct { char to[64]; char message[0]; }; struct ServerLock_Struct { char character_name[64]; bool is_locked; }; struct ServerMotd_Struct { char myname[64]; // User that set the motd char motd[512]; // the new MoTD }; struct ServerUptime_Struct { uint32 zoneserverid; // 0 for world char adminname[64]; }; struct ServerPetitionUpdate_Struct { uint32 petid; // Petition Number uint8 status; // 0x00 = ReRead DB -- 0x01 = Checkout -- More? Dunno... lol }; struct ServerWhoAll_Struct { int16 admin; uint32 fromid; char from[64]; char whom[64]; uint16 wrace; // FF FF = no race uint16 wclass; // FF FF = no class uint16 lvllow; // FF FF = no numbers uint16 lvlhigh; // FF FF = no numbers uint16 gmlookup; // FF FF = not doing /who all gm }; struct ServerFriendsWho_Struct { uint32 FromID; char FromName[64]; char FriendsString[1]; }; struct ServerKillPlayer_Struct { char gmname[64]; char target[64]; int16 admin; }; struct ServerUpdateGM_Struct { char gmname[64]; bool gmstatus; }; struct ServerEncapPacket_Struct { uint32 ToID; // ID number of the LWorld on the other server uint16 opcode; uint16 size; uchar data[0]; }; struct ZoneToZone_Struct { char name[64]; uint32 guild_id; uint32 requested_zone_id; uint32 requested_instance_id; uint32 current_zone_id; uint32 current_instance_id; int8 response; int16 admin; uint8 ignorerestrictions; }; struct WorldToZone_Struct { uint32 account_id; int8 response; }; struct WorldShutDown_Struct { uint32 time; uint32 interval; }; struct ServerSyncWorldList_Struct { uint32 RemoteID; uint32 ip; int32 status; char name[201]; char address[250]; char account[31]; uint32 accountid; uint8 authlevel; uint8 servertype; // 0=world, 1=chat, 2=login uint32 adminid; uint8 greenname; uint8 showdown; int32 num_players; int32 num_zones; bool placeholder; }; struct UsertoWorldRequestLegacy_Struct { uint32 lsaccountid; uint32 worldid; uint32 FromID; uint32 ToID; char IPAddr[64]; }; struct UsertoWorldRequest_Struct { uint32 lsaccountid; uint32 worldid; uint32 FromID; uint32 ToID; char IPAddr[64]; char login[64]; }; struct UsertoWorldResponseLegacy_Struct { uint32 lsaccountid; uint32 worldid; int8 response; // -3) World Full, -2) Banned, -1) Suspended, 0) Denied, 1) Allowed uint32 FromID; uint32 ToID; }; struct UsertoWorldResponse_Struct { uint32 lsaccountid; uint32 worldid; int8 response; // -3) World Full, -2) Banned, -1) Suspended, 0) Denied, 1) Allowed uint32 FromID; uint32 ToID; char login[64]; }; // generic struct to be used for alot of simple zone->world questions struct ServerGenericWorldQuery_Struct { char from[64]; // charname the query is from int16 admin; // char's admin level char query[0]; // text of the query }; struct ServerLockZone_Struct { uint8 op; char adminname[64]; uint16 zoneID; }; struct RevokeStruct { char adminname[64]; char name[64]; bool toggle; //0 off 1 on }; struct ServerGroupIDReply_Struct { uint32 start; //a range of group IDs to use. uint32 end; }; struct ServerGroupLeave_Struct { uint32 zoneid; uint16 instance_id; uint32 gid; char member_name[64]; //kick this member from the group }; struct ServerGroupJoin_Struct { uint32 zoneid; uint16 instance_id; uint32 gid; char member_name[64]; //this person is joining the group }; struct ServerForceGroupUpdate_Struct { uint32 origZoneID; uint16 instance_id; uint32 gid; }; struct ServerGroupChannelMessage_Struct { uint32 zoneid; uint16 instanceid; uint32 groupid; char from[64]; char message[0]; }; struct ServerDisbandGroup_Struct { uint32 zoneid; uint16 instance_id; uint32 groupid; }; struct SimpleName_Struct{ char name[64]; }; struct ServerSpawnCondition_Struct { uint32 zoneID; uint32 instanceID; uint16 condition_id; int16 value; }; struct ServerSpawnEvent_Struct { uint32 zoneID; uint32 event_id; }; //zone->world struct LaunchName_Struct { char launcher_name[32]; char zone_name[16]; }; struct LauncherConnectInfo { char name[64]; }; typedef enum { ZR_Start, ZR_Restart, ZR_Stop } ZoneRequestCommands; struct LauncherZoneRequest { uint8 command; char short_name[33]; uint16 port; }; struct LauncherZoneStatus { char short_name[33]; uint32 start_count; uint8 running; }; struct ServerGuildID_Struct { uint32 guild_id; }; struct ServerGuildRefresh_Struct { uint32 guild_id; uint8 name_change; uint8 motd_change; uint8 rank_change; uint8 relation_change; }; struct ServerGuildCharRefresh_Struct { uint32 guild_id; uint32 old_guild_id; uint32 char_id; }; struct ServerGuildRankUpdate_Struct { uint32 GuildID; char MemberName[64]; uint32 Rank; uint32 Banker; }; struct ServerGuildMemberUpdate_Struct { uint32 GuildID; char MemberName[64]; uint32 ZoneID; uint32 LastSeen; }; struct SpawnPlayerCorpse_Struct { uint32 player_corpse_id; uint32 zone_id; }; struct ServerOP_Consent_Struct { char grantname[64]; char ownername[64]; char zonename[32]; uint8 permission; uint32 zone_id; uint16 instance_id; uint8 consent_type; // 0 = normal, 1 = group, 2 = raid, 3 = guild uint32 consent_id; }; struct ReloadTasks_Struct { uint8 reload_type; uint32 task_id; }; struct ServerDepopAllPlayersCorpses_Struct { uint32 CharacterID; uint32 ZoneID; uint16 InstanceID; }; struct ServerDepopPlayerCorpse_Struct { uint32 DBID; uint32 ZoneID; uint16 InstanceID; }; struct ServerRaidGeneralAction_Struct { uint32 zoneid; uint16 instance_id; uint32 rid; uint32 gid; char playername[64]; }; struct ServerRaidGroupAction_Struct { //add / remove depends on opcode. char membername[64]; //member who's adding / leaving uint32 gid; //group id to send to. uint32 rid; //raid id to send to. }; struct ServerRaidMessage_Struct { uint32 rid; uint32 gid; uint8 language; uint8 lang_skill; char from[64]; char message[0]; }; struct ServerRaidMOTD_Struct { uint32 rid; char motd[0]; }; struct ServerRaidNote_Struct { uint32 rid; }; struct ServerLFGMatchesRequest_Struct { uint32 FromID; uint8 QuerierLevel; char FromName[64]; uint8 FromLevel; uint8 ToLevel; uint32 Classes; }; struct ServerLFGMatchesResponse_Struct { char Name[64]; uint8 Level; uint8 Class_; uint16 Zone; uint16 GuildID; uint16 Anon; char Comments[64]; }; struct ServerLFPUpdate_Struct { uint32 LeaderID; uint8 Action; uint8 MatchFilter; uint32 FromLevel; uint32 ToLevel; uint32 Classes; char Comments[64]; GroupLFPMemberEntry Members[MAX_GROUP_MEMBERS]; }; struct ServerLFPMatchesResponse_Struct { uint32 FromLevel; uint32 ToLevel; uint32 Classes; GroupLFPMemberEntry Members[MAX_GROUP_MEMBERS]; char Comments[64]; }; struct ServerLFPMatchesRequest_Struct { uint32 FromID; uint8 FromLevel; uint8 ToLevel; uint8 QuerierClass; uint8 QuerierLevel; char FromName[64]; }; struct UpdateSpawnTimer_Struct { uint32 id; uint32 duration; }; struct ServerInstanceUpdateTime_Struct { uint16 instance_id; uint32 new_duration; }; struct ServerSpawnStatusChange_Struct { uint32 id; bool new_status; }; struct ServerQGlobalUpdate_Struct { uint32 id; char name[64]; char value[128]; uint32 npc_id; uint32 char_id; uint32 zone_id; uint32 expdate; uint32 from_zone_id; uint32 from_instance_id; }; struct ServerQGlobalDelete_Struct { char name[64]; uint32 npc_id; uint32 char_id; uint32 zone_id; uint32 from_zone_id; uint32 from_instance_id; }; struct ServerRequestOnlineGuildMembers_Struct { uint32 FromID; uint32 GuildID; }; struct ServerRequestClientVersionSummary_Struct { char Name[64]; }; struct ServerAdventureRequest_Struct { char leader[64]; uint32 template_id; uint8 type; uint8 risk; uint8 member_count; }; struct ServerAdventureRequestDeny_Struct { char leader[64]; char reason[512]; }; struct ServerAdventureRequestAccept_Struct { char leader[64]; char text[512]; uint32 theme; uint32 id; uint32 member_count; }; struct ServerAdventureRequestCreate_Struct { char leader[64]; uint32 theme; uint32 id; uint32 member_count; }; struct ServerSendAdventureData_Struct { char player[64]; char text[512]; uint32 time_left; uint32 time_to_enter; uint32 risk; float x; float y; int count; int total; uint32 zone_in_id; uint32 zone_in_object; uint16 instance_id; uint32 finished_adventures; }; struct ServerFinishedAdventures_Struct { uint32 zone_in_id; uint32 zone_in_object; }; struct ServerPlayerClickedAdventureDoor_Struct { char player[64]; int id; int zone_id; }; struct ServerPlayerClickedAdventureDoorReply_Struct { char player[64]; int zone_id; int instance_id; float x; float y; float z; float h; }; struct ServerAdventureCount_Struct { uint16 instance_id; }; struct ServerAdventureCountUpdate_Struct { char player[64]; int count; int total; }; struct ServerZoneAdventureDataReply_Struct { uint16 instance_id; int count; int total; int type; int data_id; int assa_count; int assa_x; int assa_y; int assa_z; int assa_h; int dest_x; int dest_y; int dest_z; int dest_h; }; struct ServerAdventureFinish_Struct { char player[64]; bool win; int points; int theme; }; struct ServerLeaderboardRequest_Struct { char player[64]; uint8 type; }; struct ServerCameraShake_Struct { uint32 duration; // milliseconds float intensity; }; struct ServerMailMessageHeader_Struct { char from[64]; char to[64]; char subject[128]; char message[0]; }; struct Server_Speech_Struct { char to[64]; char from[64]; uint32 guilddbid; int16 minstatus; uint32 type; char message[0]; }; struct PlayerLogTradeItemsEntry_Struct { uint32 from_character_id; uint16 from_slot; uint32 to_character_id; uint16 to_slot; uint32 item_id; uint16 charges; uint32 aug_1; uint32 aug_2; uint32 aug_3; uint32 aug_4; uint32 aug_5; }; struct PlayerLogTrade_Struct { uint32 character_1_id; MoneyUpdate_Struct character_1_money; uint16 character_1_item_count; uint32 character_2_id; MoneyUpdate_Struct character_2_money; uint16 character_2_item_count; uint16 _detail_count; PlayerLogTradeItemsEntry_Struct item_entries[0]; }; struct QSDropItems_Struct { uint32 item_id; uint16 charges; uint32 aug_1; uint32 aug_2; uint32 aug_3; uint32 aug_4; uint32 aug_5; }; struct QSPlayerDropItem_Struct { uint32 char_id; bool pickup; // 0 drop, 1 pickup uint32 zone_id; int x; int y; int z; uint16 _detail_count; QSDropItems_Struct items[0]; }; struct QSHandinItems_Struct { char action_type[7]; // handin, return or reward uint16 char_slot; uint32 item_id; uint16 charges; uint32 aug_1; uint32 aug_2; uint32 aug_3; uint32 aug_4; uint32 aug_5; }; struct QSPlayerLogHandin_Struct { uint32 quest_id; uint32 char_id; MoneyUpdate_Struct char_money; uint16 char_count; uint32 npc_id; MoneyUpdate_Struct npc_money; uint16 npc_count; uint16 _detail_count; QSHandinItems_Struct items[0]; }; struct QSPlayerLogNPCKillSub_Struct{ uint32 NPCID; uint32 ZoneID; uint32 Type; }; struct QSPlayerLogNPCKillsPlayers_Struct{ uint32 char_id; }; struct QSPlayerLogNPCKill_Struct{ QSPlayerLogNPCKillSub_Struct s1; QSPlayerLogNPCKillsPlayers_Struct Chars[0]; }; struct QSDeleteItems_Struct { uint16 char_slot; uint32 item_id; uint16 charges; uint32 aug_1; uint32 aug_2; uint32 aug_3; uint32 aug_4; uint32 aug_5; }; struct QSPlayerLogDelete_Struct { uint32 char_id; uint16 stack_size; // '0' indicates full stack or non-stackable item move uint16 char_count; QSDeleteItems_Struct items[0]; }; struct QSMoveItems_Struct { uint16 from_slot; uint16 to_slot; uint32 item_id; uint16 charges; uint32 aug_1; uint32 aug_2; uint32 aug_3; uint32 aug_4; uint32 aug_5; }; struct QSPlayerLogMove_Struct { uint32 char_id; uint16 from_slot; uint16 to_slot; uint16 stack_size; // '0' indicates full stack or non-stackable item move uint16 char_count; bool postaction; QSMoveItems_Struct items[0]; }; struct QSTransactionItems_Struct { uint16 char_slot; uint32 item_id; uint16 charges; uint32 aug_1; uint32 aug_2; uint32 aug_3; uint32 aug_4; uint32 aug_5; }; struct QSMerchantLogTransaction_Struct { uint32 zone_id; uint32 merchant_id; MoneyUpdate_Struct merchant_money; uint16 merchant_count; uint32 char_id; MoneyUpdate_Struct char_money; uint16 char_count; QSTransactionItems_Struct items[0]; }; struct DiscordWebhookMessage_Struct { uint32 webhook_id; char message[2000]; }; struct QSGeneralQuery_Struct { char QueryString[0]; }; struct CZClientMessageString_Struct { uint32 string_id; uint16 chat_type; char client_name[64]; uint32 args_size; char args[1]; // null delimited }; struct CZDialogueWindow_Struct { uint8 update_type; // 0 - Character, 1 - Group, 2 - Raid, 3 - Guild, 4 - Expedition, 5 - Character Name int update_identifier; // Character ID, Group ID, Raid ID, Guild ID, or Expedition ID based on update type, 0 for Character Name char message[4096]; char client_name[64]; // Only used by Character Name Type, else empty }; struct CZLDoNUpdate_Struct { uint8 update_type; // 0 - Character, 1 - Group, 2 - Raid, 3 - Guild, 4 - Expedition, 5 - Character Name uint8 update_subtype; // 0 - Loss, 1 - Points, 2 - Win int update_identifier; // Character ID, Group ID, Raid ID, Guild ID, or Expedition ID based on update type, 0 for Character Name uint32 theme_id; int points; // Only used in Points Subtype, else 1 char client_name[64]; // Only used by Character Name Type, else empty }; struct CZMarquee_Struct { uint8 update_type; // 0 - Character, 1 - Group, 2 - Raid, 3 - Guild, 4 - Expedition, 5 - Character Name int update_identifier; // Character ID, Group ID, Raid ID, Guild ID, or Expedition ID based on update type, 0 for Character Name uint32 type; uint32 priority; uint32 fade_in; uint32 fade_out; uint32 duration; char message[512]; char client_name[64]; // Only used by Character Name Type, else empty }; struct CZMessage_Struct { uint8 update_type; // 0 - Character, 1 - Group, 2 - Raid, 3 - Guild, 4 - Expedition, 5 - Character Name int update_identifier; // Group ID, Raid ID, Guild ID, or Expedition ID based on update type, 0 for Character Name uint32 type; char message[512]; char client_name[64]; // Only used by Character Name Type, else empty }; struct CZMove_Struct { std::string client_name = std::string(); // Only used by Character Name Type, else empty glm::vec4 coordinates = glm::vec4(0.f); // XYZ or XYZH, heading is optional, defaults to 0. uint16 instance_id = 0; // Only used by Move Zone Instance, else 0 uint32 update_identifier = 0; // Character ID, Group ID, Raid ID, Guild ID, or Expedition ID based on update type, 0 for Character Name uint8 update_type; // 0 - Character, 1 - Group, 2 - Raid, 3 - Guild, 4 - Expedition, 5 - Character Name uint8 update_subtype; // 0 - Move Zone, 1 - Move Zone Instance std::string zone_short_name = std::string(); // Only used by Move Zone, else empty }; struct CZSetEntityVariable_Struct { uint8 update_type; // 0 - Character, 1 - Group, 2 - Raid, 3 - Guild, 4 - Expedition, 5 - Character Name, 6 - NPC int update_identifier; // Group ID, Raid ID, Guild ID, Expedition ID, or NPC ID based on update type, 0 for Character Name char variable_name[256]; char variable_value[256]; char client_name[64]; // Only used by Character Type, else empty }; struct CZSignal_Struct { uint8 update_type; // 0 - Character, 1 - Group, 2 - Raid, 3 - Guild, 4 - Expedition, 5 - Character Name, 6 - NPC int update_identifier; // Character ID, Group ID, Raid ID, Guild ID, Expedition ID, or NPC ID based on update type, 0 for Character Name int signal_id; char client_name[64]; // Only used by Character Name Type, else empty }; struct CZSpell_Struct { uint8 update_type; // 0 - Character, 1 - Group, 2 - Raid, 3 - Guild, 4 - Expedition, 5 - Character Name uint8 update_subtype; // 0 - Cast Spell, 1 - Remove Spell int update_identifier; // Character ID, Group ID, Raid ID, Guild ID, or Expedition ID based on update type, 0 for Character Name uint32 spell_id; char client_name[64]; // Only used by Character Name Type, else empty }; struct CZTaskUpdate_Struct { uint8 update_type; // 0 - Character, 1 - Group, 2 - Raid, 3 - Guild, 4 - Expedition, 5 - Character Name uint8 update_subtype; // 0 - Activity Reset, 1 - Activity Update, 2 - Assign Task, 3 - Disable Task, 4 - Enable Task, 5 - Fail Task, 6 - Remove Task int update_identifier; // Character ID, Group ID, Raid ID, Guild ID, or Expedition ID based on update type, 0 for Character Name uint32 task_identifier; int task_subidentifier; // Activity ID for Activity Reset and Activity Update, NPC Entity ID for Assign Task, else -1 int update_count; // Only used by Activity Update, else 1 bool enforce_level_requirement; // Only used by Assign Task char client_name[64]; // Only used by Character Name Type, else empty }; struct WWDialogueWindow_Struct { char message[4096]; uint8 min_status; uint8 max_status; }; struct WWLDoNUpdate_Struct { uint8 update_type; // 0 - Loss, 1 - Points, 2 - Win uint32 theme_id; int points; // Only used in Points Subtype, else 1 uint8 min_status; uint8 max_status; }; struct WWMarquee_Struct { uint32 type; uint32 priority; uint32 fade_in; uint32 fade_out; uint32 duration; char message[512]; uint8 min_status; uint8 max_status; }; struct WWMessage_Struct { uint32 type; char message[512]; uint8 min_status; uint8 max_status; }; struct WWMove_Struct { uint8 update_type; // 0 - Move Zone, 1 - Move Zone Instance char zone_short_name[32]; // Used with Move Zone uint16 instance_id; // Used with Move Zone Instance uint8 min_status; uint8 max_status; }; struct WWSetEntityVariable_Struct { uint8 update_type; // 0 - Character, 1 - NPC char variable_name[256]; char variable_value[256]; uint8 min_status; uint8 max_status; }; struct WWSignal_Struct { uint8 update_type; // 0 - Character, 1 - NPC int signal_id; uint8 min_status; uint8 max_status; }; struct WWSpell_Struct { uint8 update_type; // 0 - Cast Spell, 1 - Remove Spell uint32 spell_id; uint8 min_status; uint8 max_status; }; struct WWTaskUpdate_Struct { uint8 update_type; // 0 - Activity Reset, 1 - Activity Update, 2 - Assign Task, 3 - Disable Task, 4 - Enable Task, 5 - Fail Task, 6 - Remove Task uint32 task_identifier; int task_subidentifier; // Activity ID for Activity Reset and Activity Update, NPC Entity ID for Assign Task, else -1 int update_count; // Update Count for Activity Update, else 1 bool enforce_level_requirement; // Only used by Assign Task, else false uint8 min_status; uint8 max_status; }; struct ReloadWorld_Struct { uint8 global_repop; }; struct HotReloadQuestsStruct { char zone_short_name[200]; }; struct ServerRequestTellQueue_Struct { char name[64]; }; struct UCSServerStatus_Struct { uint8 available; // non-zero=true, 0=false union { struct { uint16 port; uint16 unused; }; uint32 timestamp; }; }; struct ServerExpeditionID_Struct { uint32 expedition_id; uint32 sender_zone_id; uint32 sender_instance_id; }; struct ServerDzLeaderID_Struct { uint32 dz_id; uint32 leader_id; }; struct ServerDzMemberStatus_Struct { uint32 dz_id; uint32 sender_zone_id; uint16 sender_instance_id; uint8 status; // 0: unknown 1: Online 2: Offline 3: In Dynamic Zone 4: Link Dead uint32 character_id; }; struct ServerDzMemberStatusEntry_Struct { uint32 character_id; uint8 online_status; // 0: unknown 1: Online 2: Offline 3: In Dynamic Zone 4: Link Dead }; struct ServerDzMemberStatuses_Struct { uint32 dz_id; uint32 count; ServerDzMemberStatusEntry_Struct entries[0]; }; struct ServerDzMovePC_Struct { uint32 dz_id; uint16 sender_zone_id; uint16 sender_instance_id; uint32 character_id; }; struct ServerExpeditionLockout_Struct { uint32 expedition_id; uint64 expire_time; uint32 duration; uint32 sender_zone_id; uint16 sender_instance_id; uint8 remove; uint8 members_only; int seconds_adjust; char event_name[256]; }; struct ServerExpeditionLockState_Struct { uint32 expedition_id; uint32 sender_zone_id; uint16 sender_instance_id; uint8 enabled; uint8 lock_msg; // 0: none, 1: closing 2: trial begin }; struct ServerExpeditionSetting_Struct { uint32 expedition_id; uint32 sender_zone_id; uint16 sender_instance_id; uint8 enabled; }; struct ServerExpeditionCharacterLockout_Struct { uint8 remove; uint32 character_id; uint64 expire_time; uint32 duration; char uuid[37]; char expedition_name[128]; char event_name[256]; }; struct ServerExpeditionCharacterID_Struct { uint32_t character_id; }; struct ServerDzExpireWarning_Struct { uint32_t dz_id; uint32_t minutes_remaining; }; struct ServerDzCommand_Struct { uint32 expedition_id; uint8 is_char_online; // 0: target name is offline, 1: online char requester_name[64]; char target_name[64]; char remove_name[64]; // used for swap command }; struct ServerDzCommandMakeLeader_Struct { uint32 dz_id; uint32 requester_id; uint8 is_online; // set by world, 0: new leader name offline, 1: online uint8 is_success; // set by world, 0: makeleader failed, 1: success (is online member) char new_leader_name[64]; }; struct ServerDzID_Struct { uint32 dz_id; uint16 dz_zone_id; uint16 dz_instance_id; // for cache-independent redundancy (messages to dz's instance) uint32 sender_zone_id; uint16 sender_instance_id; }; struct ServerDzLocation_Struct { uint32 dz_id; uint32 sender_zone_id; uint16 sender_instance_id; uint32 zone_id; float y; float x; float z; float heading; }; struct ServerDzSwitchID_Struct { uint32 dz_id; int dz_switch_id; }; struct ServerDzMember_Struct { uint32 dz_id; uint16 dz_zone_id; uint16 dz_instance_id; // for cache redundancy uint16 sender_zone_id; uint16 sender_instance_id; uint8 removed; // 0: added, 1: removed uint32 character_id; uint8 character_status; // 0: unknown 1: Online 2: Offline 3: In Dynamic Zone 4: Link Dead char character_name[64]; }; struct ServerDzMemberSwap_Struct { uint32 dz_id; uint16 dz_zone_id; uint16 dz_instance_id; // for cache redundancy uint16 sender_zone_id; uint16 sender_instance_id; uint32 add_character_id; uint32 remove_character_id; uint8 add_character_status; char add_character_name[64]; char remove_character_name[64]; }; struct ServerDzSetDuration_Struct { uint32 dz_id; uint32 seconds; }; struct ServerDzCreateSerialized_Struct { uint16_t origin_zone_id; uint16_t origin_instance_id; uint32_t cereal_size; char cereal_data[0]; }; struct ServerSendPlayerEvent_Struct { uint32_t cereal_size; char cereal_data[0]; }; struct ServerDataBucketCacheUpdate_Struct { uint32_t cereal_size; char cereal_data[0]; }; struct ServerFlagUpdate_Struct { uint32 account_id; int16 admin; }; struct ServerOOCMute_Struct { bool is_muted; }; struct ServerZoneStatus_Struct { char name[64]; int16 admin; }; #pragma pack() #endif