/
servertalk.h
1942 lines (1712 loc) · 47.2 KB
/
servertalk.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
#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 "../common/guilds.h"
#include <cereal/cereal.hpp>
#include <cereal/archives/binary.hpp>
#include <cereal/types/chrono.hpp>
#include <cereal/types/string.hpp>
#include <cereal/types/vector.hpp>
#include <glm/vec4.hpp>
#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_IsOwnerOnline 0x0042
#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_GuildPermissionUpdate 0x0069
#define ServerOP_GuildTributeUpdate 0x0070
#define ServerOP_GuildRankNameChange 0x0071
#define ServerOP_GuildTributeActivate 0x0072
#define ServerOP_GuildTributeOptInToggle 0x0073
#define ServerOP_GuildTributeFavAndTimer 0x0074
#define ServerOP_RequestGuildActiveTributes 0x0075
#define ServerOP_RequestGuildFavorAndTimer 0x0076
#define ServerOP_GuildTributeUpdateDonations 0x0077
#define ServerOP_GuildMemberLevelUpdate 0x0078
#define ServerOP_GuildMemberPublicNote 0x0079
#define ServerOP_GuildMemberRemove 0x007A
#define ServerOP_GuildMemberAdd 0x007B
#define ServerOP_GuildChannel 0x007C
#define ServerOP_GuildURL 0x007D
#define ServerOP_GuildSendGuildList 0x007E
#define ServerOP_GuildMembersList 0x007F
#define ServerOP_ParcelDelivery 0x0090
#define ServerOP_ParcelPrune 0x0091
#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_ReloadFactions 0x4126
#define ServerOP_ReloadLoot 0x4127
#define ServerOP_ReloadBaseData 0x4128
#define ServerOP_ReloadSkillCaps 0x4129
#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<uint32>(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<uint32>(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 zone_server_id;
uint32 zone_id;
uint16 instance_id;
bool is_static;
char admin_name[64];
};
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;
uint32 guild_rank;
bool guild_tribute_opt_in;
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 <class Archive>
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 <class Archive>
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