1#ifndef GENERATED_PROTOCOL_H
2#define GENERATED_PROTOCOL_H
3class CUnpacker;
4#include <engine/message.h>
5
6#include <engine/shared/teehistorian_ex.h>
7
8enum
9{
10 INPUT_STATE_MASK=0x3f
11};
12
13enum
14{
15 FLAG_MISSING=-3,
16 FLAG_ATSTAND,
17 FLAG_TAKEN,
18};
19
20enum
21{
22 SPEC_FREEVIEW=-1,
23 SPEC_FOLLOW=-2,
24};
25
26enum
27{
28 GAMEINFO_CURVERSION=11,
29};
30
31enum
32{
33 EMOTE_NORMAL,
34 EMOTE_PAIN,
35 EMOTE_HAPPY,
36 EMOTE_SURPRISE,
37 EMOTE_ANGRY,
38 EMOTE_BLINK,
39 NUM_EMOTES
40};
41
42enum
43{
44 POWERUP_HEALTH,
45 POWERUP_ARMOR,
46 POWERUP_WEAPON,
47 POWERUP_NINJA,
48 POWERUP_ARMOR_SHOTGUN,
49 POWERUP_ARMOR_GRENADE,
50 POWERUP_ARMOR_NINJA,
51 POWERUP_ARMOR_LASER,
52 NUM_POWERUPS
53};
54
55enum
56{
57 EMOTICON_OOP,
58 EMOTICON_EXCLAMATION,
59 EMOTICON_HEARTS,
60 EMOTICON_DROP,
61 EMOTICON_DOTDOT,
62 EMOTICON_MUSIC,
63 EMOTICON_SORRY,
64 EMOTICON_GHOST,
65 EMOTICON_SUSHI,
66 EMOTICON_SPLATTEE,
67 EMOTICON_DEVILTEE,
68 EMOTICON_ZOMG,
69 EMOTICON_ZZZ,
70 EMOTICON_WTF,
71 EMOTICON_EYES,
72 EMOTICON_QUESTION,
73 NUM_EMOTICONS
74};
75
76enum
77{
78 AUTHED_NO,
79 AUTHED_HELPER,
80 AUTHED_MOD,
81 AUTHED_ADMIN,
82 NUM_AUTHEDS
83};
84
85enum
86{
87 ENTITYCLASS_PROJECTILE,
88 ENTITYCLASS_DOOR,
89 ENTITYCLASS_DRAGGER_WEAK,
90 ENTITYCLASS_DRAGGER_NORMAL,
91 ENTITYCLASS_DRAGGER_STRONG,
92 ENTITYCLASS_GUN_NORMAL,
93 ENTITYCLASS_GUN_EXPLOSIVE,
94 ENTITYCLASS_GUN_FREEZE,
95 ENTITYCLASS_GUN_UNFREEZE,
96 ENTITYCLASS_LIGHT,
97 ENTITYCLASS_PICKUP,
98 NUM_ENTITYCLASSS
99};
100
101enum
102{
103 LASERTYPE_RIFLE,
104 LASERTYPE_SHOTGUN,
105 LASERTYPE_DOOR,
106 LASERTYPE_FREEZE,
107 LASERTYPE_DRAGGER,
108 LASERTYPE_GUN,
109 LASERTYPE_PLASMA,
110 NUM_LASERTYPES
111};
112
113enum
114{
115 LASERDRAGGERTYPE_WEAK,
116 LASERDRAGGERTYPE_WEAK_NW,
117 LASERDRAGGERTYPE_NORMAL,
118 LASERDRAGGERTYPE_NORMAL_NW,
119 LASERDRAGGERTYPE_STRONG,
120 LASERDRAGGERTYPE_STRONG_NW,
121 NUM_LASERDRAGGERTYPES
122};
123
124enum
125{
126 LASERGUNTYPE_UNFREEZE,
127 LASERGUNTYPE_EXPLOSIVE,
128 LASERGUNTYPE_FREEZE,
129 LASERGUNTYPE_EXPFREEZE,
130 NUM_LASERGUNTYPES
131};
132
133enum
134{
135 TEAM_ALL = -2,
136 TEAM_SPECTATORS,
137 TEAM_RED,
138 TEAM_BLUE,
139 TEAM_WHISPER_SEND,
140 TEAM_WHISPER_RECV,
141 NUM_TEAMS
142};
143
144enum
145{
146 SAVESTATE_PENDING,
147 SAVESTATE_DONE,
148 SAVESTATE_FALLBACKFILE,
149 SAVESTATE_WARNING,
150 SAVESTATE_ERROR,
151 NUM_SAVESTATES
152};
153
154enum
155{
156 PLAYERFLAG_PLAYING = 1<<0,
157 PLAYERFLAG_IN_MENU = 1<<1,
158 PLAYERFLAG_CHATTING = 1<<2,
159 PLAYERFLAG_SCOREBOARD = 1<<3,
160 PLAYERFLAG_AIM = 1<<4,
161 PLAYERFLAG_SPEC_CAM = 1<<5,
162 PLAYERFLAG_INPUT_ABSOLUTE = 1<<6,
163 PLAYERFLAG_INPUT_MANUAL = 1<<7,
164};
165
166enum
167{
168 GAMEFLAG_TEAMS = 1<<0,
169 GAMEFLAG_FLAGS = 1<<1,
170};
171
172enum
173{
174 GAMESTATEFLAG_GAMEOVER = 1<<0,
175 GAMESTATEFLAG_SUDDENDEATH = 1<<1,
176 GAMESTATEFLAG_PAUSED = 1<<2,
177 GAMESTATEFLAG_RACETIME = 1<<3,
178};
179
180enum
181{
182 CHARACTERFLAG_SOLO = 1<<0,
183 CHARACTERFLAG_JETPACK = 1<<1,
184 CHARACTERFLAG_COLLISION_DISABLED = 1<<2,
185 CHARACTERFLAG_ENDLESS_HOOK = 1<<3,
186 CHARACTERFLAG_ENDLESS_JUMP = 1<<4,
187 CHARACTERFLAG_SUPER = 1<<5,
188 CHARACTERFLAG_HAMMER_HIT_DISABLED = 1<<6,
189 CHARACTERFLAG_SHOTGUN_HIT_DISABLED = 1<<7,
190 CHARACTERFLAG_GRENADE_HIT_DISABLED = 1<<8,
191 CHARACTERFLAG_LASER_HIT_DISABLED = 1<<9,
192 CHARACTERFLAG_HOOK_HIT_DISABLED = 1<<10,
193 CHARACTERFLAG_TELEGUN_GUN = 1<<11,
194 CHARACTERFLAG_TELEGUN_GRENADE = 1<<12,
195 CHARACTERFLAG_TELEGUN_LASER = 1<<13,
196 CHARACTERFLAG_WEAPON_HAMMER = 1<<14,
197 CHARACTERFLAG_WEAPON_GUN = 1<<15,
198 CHARACTERFLAG_WEAPON_SHOTGUN = 1<<16,
199 CHARACTERFLAG_WEAPON_GRENADE = 1<<17,
200 CHARACTERFLAG_WEAPON_LASER = 1<<18,
201 CHARACTERFLAG_WEAPON_NINJA = 1<<19,
202 CHARACTERFLAG_MOVEMENTS_DISABLED = 1<<20,
203 CHARACTERFLAG_IN_FREEZE = 1<<21,
204 CHARACTERFLAG_PRACTICE_MODE = 1<<22,
205 CHARACTERFLAG_LOCK_MODE = 1<<23,
206 CHARACTERFLAG_TEAM0_MODE = 1<<24,
207 CHARACTERFLAG_INVINCIBLE = 1<<25,
208};
209
210enum
211{
212 GAMEINFOFLAG_TIMESCORE = 1<<0,
213 GAMEINFOFLAG_GAMETYPE_RACE = 1<<1,
214 GAMEINFOFLAG_GAMETYPE_FASTCAP = 1<<2,
215 GAMEINFOFLAG_GAMETYPE_FNG = 1<<3,
216 GAMEINFOFLAG_GAMETYPE_DDRACE = 1<<4,
217 GAMEINFOFLAG_GAMETYPE_DDNET = 1<<5,
218 GAMEINFOFLAG_GAMETYPE_BLOCK_WORLDS = 1<<6,
219 GAMEINFOFLAG_GAMETYPE_VANILLA = 1<<7,
220 GAMEINFOFLAG_GAMETYPE_PLUS = 1<<8,
221 GAMEINFOFLAG_FLAG_STARTS_RACE = 1<<9,
222 GAMEINFOFLAG_RACE = 1<<10,
223 GAMEINFOFLAG_UNLIMITED_AMMO = 1<<11,
224 GAMEINFOFLAG_DDRACE_RECORD_MESSAGE = 1<<12,
225 GAMEINFOFLAG_RACE_RECORD_MESSAGE = 1<<13,
226 GAMEINFOFLAG_ALLOW_EYE_WHEEL = 1<<14,
227 GAMEINFOFLAG_ALLOW_HOOK_COLL = 1<<15,
228 GAMEINFOFLAG_ALLOW_ZOOM = 1<<16,
229 GAMEINFOFLAG_BUG_DDRACE_GHOST = 1<<17,
230 GAMEINFOFLAG_BUG_DDRACE_INPUT = 1<<18,
231 GAMEINFOFLAG_BUG_FNG_LASER_RANGE = 1<<19,
232 GAMEINFOFLAG_BUG_VANILLA_BOUNCE = 1<<20,
233 GAMEINFOFLAG_PREDICT_FNG = 1<<21,
234 GAMEINFOFLAG_PREDICT_DDRACE = 1<<22,
235 GAMEINFOFLAG_PREDICT_DDRACE_TILES = 1<<23,
236 GAMEINFOFLAG_PREDICT_VANILLA = 1<<24,
237 GAMEINFOFLAG_ENTITIES_DDNET = 1<<25,
238 GAMEINFOFLAG_ENTITIES_DDRACE = 1<<26,
239 GAMEINFOFLAG_ENTITIES_RACE = 1<<27,
240 GAMEINFOFLAG_ENTITIES_FNG = 1<<28,
241 GAMEINFOFLAG_ENTITIES_VANILLA = 1<<29,
242 GAMEINFOFLAG_DONT_MASK_ENTITIES = 1<<30,
243 GAMEINFOFLAG_ENTITIES_BW = 1<<31,
244};
245
246enum
247{
248 GAMEINFOFLAG2_ALLOW_X_SKINS = 1<<0,
249 GAMEINFOFLAG2_GAMETYPE_CITY = 1<<1,
250 GAMEINFOFLAG2_GAMETYPE_FDDRACE = 1<<2,
251 GAMEINFOFLAG2_ENTITIES_FDDRACE = 1<<3,
252 GAMEINFOFLAG2_HUD_HEALTH_ARMOR = 1<<4,
253 GAMEINFOFLAG2_HUD_AMMO = 1<<5,
254 GAMEINFOFLAG2_HUD_DDRACE = 1<<6,
255 GAMEINFOFLAG2_NO_WEAK_HOOK = 1<<7,
256 GAMEINFOFLAG2_NO_SKIN_CHANGE_FOR_FROZEN = 1<<8,
257 GAMEINFOFLAG2_DDRACE_TEAM = 1<<9,
258 GAMEINFOFLAG2_PREDICT_EVENTS = 1<<10,
259};
260
261enum
262{
263 EXPLAYERFLAG_AFK = 1<<0,
264 EXPLAYERFLAG_PAUSED = 1<<1,
265 EXPLAYERFLAG_SPEC = 1<<2,
266};
267
268enum
269{
270 LEGACYPROJECTILEFLAG_CLIENTID_BIT0 = 1<<0,
271 LEGACYPROJECTILEFLAG_CLIENTID_BIT1 = 1<<1,
272 LEGACYPROJECTILEFLAG_CLIENTID_BIT2 = 1<<2,
273 LEGACYPROJECTILEFLAG_CLIENTID_BIT3 = 1<<3,
274 LEGACYPROJECTILEFLAG_CLIENTID_BIT4 = 1<<4,
275 LEGACYPROJECTILEFLAG_CLIENTID_BIT5 = 1<<5,
276 LEGACYPROJECTILEFLAG_CLIENTID_BIT6 = 1<<6,
277 LEGACYPROJECTILEFLAG_CLIENTID_BIT7 = 1<<7,
278 LEGACYPROJECTILEFLAG_NO_OWNER = 1<<8,
279 LEGACYPROJECTILEFLAG_IS_DDNET = 1<<9,
280 LEGACYPROJECTILEFLAG_BOUNCE_HORIZONTAL = 1<<10,
281 LEGACYPROJECTILEFLAG_BOUNCE_VERTICAL = 1<<11,
282 LEGACYPROJECTILEFLAG_EXPLOSIVE = 1<<12,
283 LEGACYPROJECTILEFLAG_FREEZE = 1<<13,
284};
285
286enum
287{
288 PROJECTILEFLAG_BOUNCE_HORIZONTAL = 1<<0,
289 PROJECTILEFLAG_BOUNCE_VERTICAL = 1<<1,
290 PROJECTILEFLAG_EXPLOSIVE = 1<<2,
291 PROJECTILEFLAG_FREEZE = 1<<3,
292 PROJECTILEFLAG_NORMALIZE_VEL = 1<<4,
293};
294
295enum
296{
297 LASERFLAG_NO_PREDICT = 1<<0,
298};
299
300enum
301{
302 PICKUPFLAG_XFLIP = 1<<0,
303 PICKUPFLAG_YFLIP = 1<<1,
304 PICKUPFLAG_ROTATE = 1<<2,
305 PICKUPFLAG_NO_PREDICT = 1<<3,
306};
307
308enum
309{
310 NETOBJTYPE_EX,
311 NETOBJTYPE_PLAYERINPUT,
312 NETOBJTYPE_PROJECTILE,
313 NETOBJTYPE_LASER,
314 NETOBJTYPE_PICKUP,
315 NETOBJTYPE_FLAG,
316 NETOBJTYPE_GAMEINFO,
317 NETOBJTYPE_GAMEDATA,
318 NETOBJTYPE_CHARACTERCORE,
319 NETOBJTYPE_CHARACTER,
320 NETOBJTYPE_PLAYERINFO,
321 NETOBJTYPE_CLIENTINFO,
322 NETOBJTYPE_SPECTATORINFO,
323 NETEVENTTYPE_COMMON,
324 NETEVENTTYPE_EXPLOSION,
325 NETEVENTTYPE_SPAWN,
326 NETEVENTTYPE_HAMMERHIT,
327 NETEVENTTYPE_DEATH,
328 NETEVENTTYPE_SOUNDGLOBAL,
329 NETEVENTTYPE_SOUNDWORLD,
330 NETEVENTTYPE_DAMAGEIND,
331 NUM_NETOBJTYPES
332};
333enum
334{
335 __NETOBJTYPE_UUID_HELPER=OFFSET_GAME_UUID-1,
336 NETOBJTYPE_MYOWNOBJECT,
337 NETOBJTYPE_DDNETCHARACTER,
338 NETOBJTYPE_DDNETPLAYER,
339 NETOBJTYPE_GAMEINFOEX,
340 NETOBJTYPE_DDRACEPROJECTILE,
341 NETOBJTYPE_DDNETLASER,
342 NETOBJTYPE_DDNETPROJECTILE,
343 NETOBJTYPE_DDNETPICKUP,
344 NETOBJTYPE_DDNETSPECTATORINFO,
345 NETOBJTYPE_SPECTATORCOUNT,
346 NETEVENTTYPE_BIRTHDAY,
347 NETEVENTTYPE_FINISH,
348 NETOBJTYPE_MYOWNEVENT,
349 NETOBJTYPE_SPECCHAR,
350 NETOBJTYPE_SWITCHSTATE,
351 NETOBJTYPE_ENTITYEX,
352 NETOBJTYPE_MAPBESTTIME,
353 NETEVENTTYPE_MAPSOUNDWORLD,
354 OFFSET_NETMSGTYPE_UUID
355};
356
357enum
358{
359 NETMSGTYPE_EX,
360 NETMSGTYPE_SV_MOTD,
361 NETMSGTYPE_SV_BROADCAST,
362 NETMSGTYPE_SV_CHAT,
363 NETMSGTYPE_SV_KILLMSG,
364 NETMSGTYPE_SV_SOUNDGLOBAL,
365 NETMSGTYPE_SV_TUNEPARAMS,
366 NETMSGTYPE_UNUSED,
367 NETMSGTYPE_SV_READYTOENTER,
368 NETMSGTYPE_SV_WEAPONPICKUP,
369 NETMSGTYPE_SV_EMOTICON,
370 NETMSGTYPE_SV_VOTECLEAROPTIONS,
371 NETMSGTYPE_SV_VOTEOPTIONLISTADD,
372 NETMSGTYPE_SV_VOTEOPTIONADD,
373 NETMSGTYPE_SV_VOTEOPTIONREMOVE,
374 NETMSGTYPE_SV_VOTESET,
375 NETMSGTYPE_SV_VOTESTATUS,
376 NETMSGTYPE_CL_SAY,
377 NETMSGTYPE_CL_SETTEAM,
378 NETMSGTYPE_CL_SETSPECTATORMODE,
379 NETMSGTYPE_CL_STARTINFO,
380 NETMSGTYPE_CL_CHANGEINFO,
381 NETMSGTYPE_CL_KILL,
382 NETMSGTYPE_CL_EMOTICON,
383 NETMSGTYPE_CL_VOTE,
384 NETMSGTYPE_CL_CALLVOTE,
385 NETMSGTYPE_CL_ISDDNETLEGACY,
386 NETMSGTYPE_SV_DDRACETIMELEGACY,
387 NETMSGTYPE_SV_RECORDLEGACY,
388 NETMSGTYPE_UNUSED2,
389 NETMSGTYPE_SV_TEAMSSTATELEGACY,
390 NETMSGTYPE_CL_SHOWOTHERSLEGACY,
391 NUM_NETMSGTYPES
392};
393
394enum
395{
396 __NETMSGTYPE_UUID_HELPER=OFFSET_NETMSGTYPE_UUID-1,
397 NETMSGTYPE_SV_MYOWNMESSAGE,
398 NETMSGTYPE_CL_SHOWDISTANCE,
399 NETMSGTYPE_CL_SHOWOTHERS,
400 NETMSGTYPE_CL_CAMERAINFO,
401 NETMSGTYPE_SV_TEAMSSTATE,
402 NETMSGTYPE_SV_DDRACETIME,
403 NETMSGTYPE_SV_RECORD,
404 NETMSGTYPE_SV_KILLMSGTEAM,
405 NETMSGTYPE_SV_YOURVOTE,
406 NETMSGTYPE_SV_RACEFINISH,
407 NETMSGTYPE_SV_COMMANDINFO,
408 NETMSGTYPE_SV_COMMANDINFOREMOVE,
409 NETMSGTYPE_SV_VOTEOPTIONGROUPSTART,
410 NETMSGTYPE_SV_VOTEOPTIONGROUPEND,
411 NETMSGTYPE_SV_COMMANDINFOGROUPSTART,
412 NETMSGTYPE_SV_COMMANDINFOGROUPEND,
413 NETMSGTYPE_SV_CHANGEINFOCOOLDOWN,
414 NETMSGTYPE_SV_MAPSOUNDGLOBAL,
415 NETMSGTYPE_SV_PREINPUT,
416 NETMSGTYPE_SV_SAVECODE,
417 NETMSGTYPE_SV_SERVERALERT,
418 NETMSGTYPE_SV_MODERATORALERT,
419 NETMSGTYPE_CL_ENABLESPECTATORCOUNT,
420 NETMSGTYPE_SV_MAPINFO,
421 OFFSET_MAPITEMTYPE_UUID
422};
423
424struct CNetObj_PlayerInput
425{
426 static constexpr int ms_MsgId = NETOBJTYPE_PLAYERINPUT;
427 int m_Direction;
428 int m_TargetX;
429 int m_TargetY;
430 int m_Jump;
431 int m_Fire;
432 int m_Hook;
433 int m_PlayerFlags;
434 int m_WantedWeapon;
435 int m_NextWeapon;
436 int m_PrevWeapon;
437};
438
439struct CNetObj_Projectile
440{
441 static constexpr int ms_MsgId = NETOBJTYPE_PROJECTILE;
442 int m_X;
443 int m_Y;
444 int m_VelX;
445 int m_VelY;
446 int m_Type;
447 int m_StartTick;
448};
449
450struct CNetObj_Laser
451{
452 static constexpr int ms_MsgId = NETOBJTYPE_LASER;
453 int m_X;
454 int m_Y;
455 int m_FromX;
456 int m_FromY;
457 int m_StartTick;
458};
459
460struct CNetObj_Pickup
461{
462 static constexpr int ms_MsgId = NETOBJTYPE_PICKUP;
463 int m_X;
464 int m_Y;
465 int m_Type;
466 int m_Subtype;
467};
468
469struct CNetObj_Flag
470{
471 static constexpr int ms_MsgId = NETOBJTYPE_FLAG;
472 int m_X;
473 int m_Y;
474 int m_Team;
475};
476
477struct CNetObj_GameInfo
478{
479 static constexpr int ms_MsgId = NETOBJTYPE_GAMEINFO;
480 int m_GameFlags;
481 int m_GameStateFlags;
482 int m_RoundStartTick;
483 int m_WarmupTimer;
484 int m_ScoreLimit;
485 int m_TimeLimit;
486 int m_RoundNum;
487 int m_RoundCurrent;
488};
489
490struct CNetObj_GameData
491{
492 static constexpr int ms_MsgId = NETOBJTYPE_GAMEDATA;
493 int m_TeamscoreRed;
494 int m_TeamscoreBlue;
495 int m_FlagCarrierRed;
496 int m_FlagCarrierBlue;
497};
498
499struct CNetObj_CharacterCore
500{
501 static constexpr int ms_MsgId = NETOBJTYPE_CHARACTERCORE;
502 int m_Tick;
503 int m_X;
504 int m_Y;
505 int m_VelX;
506 int m_VelY;
507 int m_Angle;
508 int m_Direction;
509 int m_Jumped;
510 int m_HookedPlayer;
511 int m_HookState;
512 int m_HookTick;
513 int m_HookX;
514 int m_HookY;
515 int m_HookDx;
516 int m_HookDy;
517};
518
519struct CNetObj_Character : public CNetObj_CharacterCore
520{
521 static constexpr int ms_MsgId = NETOBJTYPE_CHARACTER;
522 int m_PlayerFlags;
523 int m_Health;
524 int m_Armor;
525 int m_AmmoCount;
526 int m_Weapon;
527 int m_Emote;
528 int m_AttackTick;
529};
530
531struct CNetObj_PlayerInfo
532{
533 static constexpr int ms_MsgId = NETOBJTYPE_PLAYERINFO;
534 int m_Local;
535 int m_ClientId;
536 int m_Team;
537 int m_Score;
538 int m_Latency;
539};
540
541struct CNetObj_ClientInfo
542{
543 static constexpr int ms_MsgId = NETOBJTYPE_CLIENTINFO;
544 int m_aName[4];
545 int m_aClan[3];
546 int m_Country;
547 int m_aSkin[6];
548 int m_UseCustomColor;
549 int m_ColorBody;
550 int m_ColorFeet;
551};
552
553struct CNetObj_SpectatorInfo
554{
555 static constexpr int ms_MsgId = NETOBJTYPE_SPECTATORINFO;
556 int m_SpectatorId;
557 int m_X;
558 int m_Y;
559};
560
561struct CNetObj_MyOwnObject
562{
563 static constexpr int ms_MsgId = NETOBJTYPE_MYOWNOBJECT;
564 int m_Test;
565};
566
567struct CNetObj_DDNetCharacter
568{
569 static constexpr int ms_MsgId = NETOBJTYPE_DDNETCHARACTER;
570 int m_Flags;
571 int m_FreezeEnd;
572 int m_Jumps;
573 int m_TeleCheckpoint;
574 int m_StrongWeakId;
575 int m_JumpedTotal;
576 int m_NinjaActivationTick;
577 int m_FreezeStart;
578 int m_TargetX;
579 int m_TargetY;
580 int m_TuneZoneOverride;
581};
582
583struct CNetObj_DDNetPlayer
584{
585 static constexpr int ms_MsgId = NETOBJTYPE_DDNETPLAYER;
586 int m_Flags;
587 int m_AuthLevel;
588 int m_FinishTimeSeconds;
589 int m_FinishTimeMillis;
590};
591
592struct CNetObj_GameInfoEx
593{
594 static constexpr int ms_MsgId = NETOBJTYPE_GAMEINFOEX;
595 int m_Flags;
596 int m_Version;
597 int m_Flags2;
598};
599
600struct CNetObj_DDRaceProjectile
601{
602 static constexpr int ms_MsgId = NETOBJTYPE_DDRACEPROJECTILE;
603 int m_X;
604 int m_Y;
605 int m_Angle;
606 int m_Data;
607 int m_Type;
608 int m_StartTick;
609};
610
611struct CNetObj_DDNetLaser
612{
613 static constexpr int ms_MsgId = NETOBJTYPE_DDNETLASER;
614 int m_ToX;
615 int m_ToY;
616 int m_FromX;
617 int m_FromY;
618 int m_StartTick;
619 int m_Owner;
620 int m_Type;
621 int m_SwitchNumber;
622 int m_Subtype;
623 int m_Flags;
624};
625
626struct CNetObj_DDNetProjectile
627{
628 static constexpr int ms_MsgId = NETOBJTYPE_DDNETPROJECTILE;
629 int m_X;
630 int m_Y;
631 int m_VelX;
632 int m_VelY;
633 int m_Type;
634 int m_StartTick;
635 int m_Owner;
636 int m_SwitchNumber;
637 int m_TuneZone;
638 int m_Flags;
639};
640
641struct CNetObj_DDNetPickup
642{
643 static constexpr int ms_MsgId = NETOBJTYPE_DDNETPICKUP;
644 int m_X;
645 int m_Y;
646 int m_Type;
647 int m_Subtype;
648 int m_SwitchNumber;
649 int m_Flags;
650};
651
652struct CNetObj_DDNetSpectatorInfo
653{
654 static constexpr int ms_MsgId = NETOBJTYPE_DDNETSPECTATORINFO;
655 int m_HasCameraInfo;
656 int m_Zoom;
657 int m_Deadzone;
658 int m_FollowFactor;
659 int m_SpectatorCount;
660};
661
662struct CNetObj_SpectatorCount
663{
664 static constexpr int ms_MsgId = NETOBJTYPE_SPECTATORCOUNT;
665 int m_NumSpectators;
666};
667
668struct CNetEvent_Common
669{
670 static constexpr int ms_MsgId = NETEVENTTYPE_COMMON;
671 int m_X;
672 int m_Y;
673};
674
675struct CNetEvent_Explosion : public CNetEvent_Common
676{
677 static constexpr int ms_MsgId = NETEVENTTYPE_EXPLOSION;
678};
679
680struct CNetEvent_Spawn : public CNetEvent_Common
681{
682 static constexpr int ms_MsgId = NETEVENTTYPE_SPAWN;
683};
684
685struct CNetEvent_HammerHit : public CNetEvent_Common
686{
687 static constexpr int ms_MsgId = NETEVENTTYPE_HAMMERHIT;
688};
689
690struct CNetEvent_Death : public CNetEvent_Common
691{
692 static constexpr int ms_MsgId = NETEVENTTYPE_DEATH;
693 int m_ClientId;
694};
695
696struct CNetEvent_SoundGlobal : public CNetEvent_Common
697{
698 static constexpr int ms_MsgId = NETEVENTTYPE_SOUNDGLOBAL;
699 int m_SoundId;
700};
701
702struct CNetEvent_SoundWorld : public CNetEvent_Common
703{
704 static constexpr int ms_MsgId = NETEVENTTYPE_SOUNDWORLD;
705 int m_SoundId;
706};
707
708struct CNetEvent_DamageInd : public CNetEvent_Common
709{
710 static constexpr int ms_MsgId = NETEVENTTYPE_DAMAGEIND;
711 int m_Angle;
712};
713
714struct CNetEvent_Birthday : public CNetEvent_Common
715{
716 static constexpr int ms_MsgId = NETEVENTTYPE_BIRTHDAY;
717};
718
719struct CNetEvent_Finish : public CNetEvent_Common
720{
721 static constexpr int ms_MsgId = NETEVENTTYPE_FINISH;
722};
723
724struct CNetObj_MyOwnEvent
725{
726 static constexpr int ms_MsgId = NETOBJTYPE_MYOWNEVENT;
727 int m_Test;
728};
729
730struct CNetObj_SpecChar
731{
732 static constexpr int ms_MsgId = NETOBJTYPE_SPECCHAR;
733 int m_X;
734 int m_Y;
735};
736
737struct CNetObj_SwitchState
738{
739 static constexpr int ms_MsgId = NETOBJTYPE_SWITCHSTATE;
740 int m_HighestSwitchNumber;
741 int m_aStatus[8];
742 int m_aSwitchNumbers[4];
743 int m_aEndTicks[4];
744};
745
746struct CNetObj_EntityEx
747{
748 static constexpr int ms_MsgId = NETOBJTYPE_ENTITYEX;
749 int m_SwitchNumber;
750 int m_Layer;
751 int m_EntityClass;
752};
753
754struct CNetObj_MapBestTime
755{
756 static constexpr int ms_MsgId = NETOBJTYPE_MAPBESTTIME;
757 int m_MapBestTimeSeconds;
758 int m_MapBestTimeMillis;
759};
760
761struct CNetEvent_MapSoundWorld : public CNetEvent_Common
762{
763 static constexpr int ms_MsgId = NETEVENTTYPE_MAPSOUNDWORLD;
764 int m_SoundId;
765};
766
767struct CNetMsg_Sv_Motd
768{
769 static constexpr int ms_MsgId = NETMSGTYPE_SV_MOTD;
770 const char *m_pMessage;
771
772 bool Pack(CMsgPacker *pPacker) const
773 {
774 pPacker->AddString(pStr: m_pMessage, Limit: -1);
775 return pPacker->Error() != 0;
776 }
777};
778
779struct CNetMsg_Sv_Broadcast
780{
781 static constexpr int ms_MsgId = NETMSGTYPE_SV_BROADCAST;
782 const char *m_pMessage;
783
784 bool Pack(CMsgPacker *pPacker) const
785 {
786 pPacker->AddString(pStr: m_pMessage, Limit: -1);
787 return pPacker->Error() != 0;
788 }
789};
790
791struct CNetMsg_Sv_Chat
792{
793 static constexpr int ms_MsgId = NETMSGTYPE_SV_CHAT;
794 int m_Team;
795 int m_ClientId;
796 const char *m_pMessage;
797
798 bool Pack(CMsgPacker *pPacker) const
799 {
800 pPacker->AddInt(i: m_Team);
801 pPacker->AddInt(i: m_ClientId);
802 pPacker->AddString(pStr: m_pMessage, Limit: -1);
803 return pPacker->Error() != 0;
804 }
805};
806
807struct CNetMsg_Sv_KillMsg
808{
809 static constexpr int ms_MsgId = NETMSGTYPE_SV_KILLMSG;
810 int m_Killer;
811 int m_Victim;
812 int m_Weapon;
813 int m_ModeSpecial;
814
815 bool Pack(CMsgPacker *pPacker) const
816 {
817 pPacker->AddInt(i: m_Killer);
818 pPacker->AddInt(i: m_Victim);
819 pPacker->AddInt(i: m_Weapon);
820 pPacker->AddInt(i: m_ModeSpecial);
821 return pPacker->Error() != 0;
822 }
823};
824
825struct CNetMsg_Sv_SoundGlobal
826{
827 static constexpr int ms_MsgId = NETMSGTYPE_SV_SOUNDGLOBAL;
828 int m_SoundId;
829
830 bool Pack(CMsgPacker *pPacker) const
831 {
832 pPacker->AddInt(i: m_SoundId);
833 return pPacker->Error() != 0;
834 }
835};
836
837struct CNetMsg_Sv_TuneParams
838{
839 static constexpr int ms_MsgId = NETMSGTYPE_SV_TUNEPARAMS;
840
841 bool Pack(CMsgPacker *pPacker) const
842 {
843 return pPacker->Error() != 0;
844 }
845};
846
847struct CNetMsg_Unused
848{
849 static constexpr int ms_MsgId = NETMSGTYPE_UNUSED;
850
851 bool Pack(CMsgPacker *pPacker) const
852 {
853 return pPacker->Error() != 0;
854 }
855};
856
857struct CNetMsg_Sv_ReadyToEnter
858{
859 static constexpr int ms_MsgId = NETMSGTYPE_SV_READYTOENTER;
860
861 bool Pack(CMsgPacker *pPacker) const
862 {
863 return pPacker->Error() != 0;
864 }
865};
866
867struct CNetMsg_Sv_WeaponPickup
868{
869 static constexpr int ms_MsgId = NETMSGTYPE_SV_WEAPONPICKUP;
870 int m_Weapon;
871
872 bool Pack(CMsgPacker *pPacker) const
873 {
874 pPacker->AddInt(i: m_Weapon);
875 return pPacker->Error() != 0;
876 }
877};
878
879struct CNetMsg_Sv_Emoticon
880{
881 static constexpr int ms_MsgId = NETMSGTYPE_SV_EMOTICON;
882 int m_ClientId;
883 int m_Emoticon;
884
885 bool Pack(CMsgPacker *pPacker) const
886 {
887 pPacker->AddInt(i: m_ClientId);
888 pPacker->AddInt(i: m_Emoticon);
889 return pPacker->Error() != 0;
890 }
891};
892
893struct CNetMsg_Sv_VoteClearOptions
894{
895 static constexpr int ms_MsgId = NETMSGTYPE_SV_VOTECLEAROPTIONS;
896
897 bool Pack(CMsgPacker *pPacker) const
898 {
899 return pPacker->Error() != 0;
900 }
901};
902
903struct CNetMsg_Sv_VoteOptionListAdd
904{
905 static constexpr int ms_MsgId = NETMSGTYPE_SV_VOTEOPTIONLISTADD;
906 int m_NumOptions;
907 const char *m_pDescription0;
908 const char *m_pDescription1;
909 const char *m_pDescription2;
910 const char *m_pDescription3;
911 const char *m_pDescription4;
912 const char *m_pDescription5;
913 const char *m_pDescription6;
914 const char *m_pDescription7;
915 const char *m_pDescription8;
916 const char *m_pDescription9;
917 const char *m_pDescription10;
918 const char *m_pDescription11;
919 const char *m_pDescription12;
920 const char *m_pDescription13;
921 const char *m_pDescription14;
922
923 bool Pack(CMsgPacker *pPacker) const
924 {
925 pPacker->AddInt(i: m_NumOptions);
926 pPacker->AddString(pStr: m_pDescription0, Limit: -1);
927 pPacker->AddString(pStr: m_pDescription1, Limit: -1);
928 pPacker->AddString(pStr: m_pDescription2, Limit: -1);
929 pPacker->AddString(pStr: m_pDescription3, Limit: -1);
930 pPacker->AddString(pStr: m_pDescription4, Limit: -1);
931 pPacker->AddString(pStr: m_pDescription5, Limit: -1);
932 pPacker->AddString(pStr: m_pDescription6, Limit: -1);
933 pPacker->AddString(pStr: m_pDescription7, Limit: -1);
934 pPacker->AddString(pStr: m_pDescription8, Limit: -1);
935 pPacker->AddString(pStr: m_pDescription9, Limit: -1);
936 pPacker->AddString(pStr: m_pDescription10, Limit: -1);
937 pPacker->AddString(pStr: m_pDescription11, Limit: -1);
938 pPacker->AddString(pStr: m_pDescription12, Limit: -1);
939 pPacker->AddString(pStr: m_pDescription13, Limit: -1);
940 pPacker->AddString(pStr: m_pDescription14, Limit: -1);
941 return pPacker->Error() != 0;
942 }
943};
944
945struct CNetMsg_Sv_VoteOptionAdd
946{
947 static constexpr int ms_MsgId = NETMSGTYPE_SV_VOTEOPTIONADD;
948 const char *m_pDescription;
949
950 bool Pack(CMsgPacker *pPacker) const
951 {
952 pPacker->AddString(pStr: m_pDescription, Limit: -1);
953 return pPacker->Error() != 0;
954 }
955};
956
957struct CNetMsg_Sv_VoteOptionRemove
958{
959 static constexpr int ms_MsgId = NETMSGTYPE_SV_VOTEOPTIONREMOVE;
960 const char *m_pDescription;
961
962 bool Pack(CMsgPacker *pPacker) const
963 {
964 pPacker->AddString(pStr: m_pDescription, Limit: -1);
965 return pPacker->Error() != 0;
966 }
967};
968
969struct CNetMsg_Sv_VoteSet
970{
971 static constexpr int ms_MsgId = NETMSGTYPE_SV_VOTESET;
972 int m_Timeout;
973 const char *m_pDescription;
974 const char *m_pReason;
975
976 bool Pack(CMsgPacker *pPacker) const
977 {
978 pPacker->AddInt(i: m_Timeout);
979 pPacker->AddString(pStr: m_pDescription, Limit: -1);
980 pPacker->AddString(pStr: m_pReason, Limit: -1);
981 return pPacker->Error() != 0;
982 }
983};
984
985struct CNetMsg_Sv_VoteStatus
986{
987 static constexpr int ms_MsgId = NETMSGTYPE_SV_VOTESTATUS;
988 int m_Yes;
989 int m_No;
990 int m_Pass;
991 int m_Total;
992
993 bool Pack(CMsgPacker *pPacker) const
994 {
995 pPacker->AddInt(i: m_Yes);
996 pPacker->AddInt(i: m_No);
997 pPacker->AddInt(i: m_Pass);
998 pPacker->AddInt(i: m_Total);
999 return pPacker->Error() != 0;
1000 }
1001};
1002
1003struct CNetMsg_Cl_Say
1004{
1005 static constexpr int ms_MsgId = NETMSGTYPE_CL_SAY;
1006 int m_Team;
1007 const char *m_pMessage;
1008
1009 bool Pack(CMsgPacker *pPacker) const
1010 {
1011 pPacker->AddInt(i: m_Team);
1012 pPacker->AddString(pStr: m_pMessage, Limit: -1);
1013 return pPacker->Error() != 0;
1014 }
1015};
1016
1017struct CNetMsg_Cl_SetTeam
1018{
1019 static constexpr int ms_MsgId = NETMSGTYPE_CL_SETTEAM;
1020 int m_Team;
1021
1022 bool Pack(CMsgPacker *pPacker) const
1023 {
1024 pPacker->AddInt(i: m_Team);
1025 return pPacker->Error() != 0;
1026 }
1027};
1028
1029struct CNetMsg_Cl_SetSpectatorMode
1030{
1031 static constexpr int ms_MsgId = NETMSGTYPE_CL_SETSPECTATORMODE;
1032 int m_SpectatorId;
1033
1034 bool Pack(CMsgPacker *pPacker) const
1035 {
1036 pPacker->AddInt(i: m_SpectatorId);
1037 return pPacker->Error() != 0;
1038 }
1039};
1040
1041struct CNetMsg_Cl_StartInfo
1042{
1043 static constexpr int ms_MsgId = NETMSGTYPE_CL_STARTINFO;
1044 const char *m_pName;
1045 const char *m_pClan;
1046 int m_Country;
1047 const char *m_pSkin;
1048 int m_UseCustomColor;
1049 int m_ColorBody;
1050 int m_ColorFeet;
1051
1052 bool Pack(CMsgPacker *pPacker) const
1053 {
1054 pPacker->AddString(pStr: m_pName, Limit: -1);
1055 pPacker->AddString(pStr: m_pClan, Limit: -1);
1056 pPacker->AddInt(i: m_Country);
1057 pPacker->AddString(pStr: m_pSkin, Limit: -1);
1058 pPacker->AddInt(i: m_UseCustomColor);
1059 pPacker->AddInt(i: m_ColorBody);
1060 pPacker->AddInt(i: m_ColorFeet);
1061 return pPacker->Error() != 0;
1062 }
1063};
1064
1065struct CNetMsg_Cl_ChangeInfo
1066{
1067 static constexpr int ms_MsgId = NETMSGTYPE_CL_CHANGEINFO;
1068 const char *m_pName;
1069 const char *m_pClan;
1070 int m_Country;
1071 const char *m_pSkin;
1072 int m_UseCustomColor;
1073 int m_ColorBody;
1074 int m_ColorFeet;
1075
1076 bool Pack(CMsgPacker *pPacker) const
1077 {
1078 pPacker->AddString(pStr: m_pName, Limit: -1);
1079 pPacker->AddString(pStr: m_pClan, Limit: -1);
1080 pPacker->AddInt(i: m_Country);
1081 pPacker->AddString(pStr: m_pSkin, Limit: -1);
1082 pPacker->AddInt(i: m_UseCustomColor);
1083 pPacker->AddInt(i: m_ColorBody);
1084 pPacker->AddInt(i: m_ColorFeet);
1085 return pPacker->Error() != 0;
1086 }
1087};
1088
1089struct CNetMsg_Cl_Kill
1090{
1091 static constexpr int ms_MsgId = NETMSGTYPE_CL_KILL;
1092
1093 bool Pack(CMsgPacker *pPacker) const
1094 {
1095 return pPacker->Error() != 0;
1096 }
1097};
1098
1099struct CNetMsg_Cl_Emoticon
1100{
1101 static constexpr int ms_MsgId = NETMSGTYPE_CL_EMOTICON;
1102 int m_Emoticon;
1103
1104 bool Pack(CMsgPacker *pPacker) const
1105 {
1106 pPacker->AddInt(i: m_Emoticon);
1107 return pPacker->Error() != 0;
1108 }
1109};
1110
1111struct CNetMsg_Cl_Vote
1112{
1113 static constexpr int ms_MsgId = NETMSGTYPE_CL_VOTE;
1114 int m_Vote;
1115
1116 bool Pack(CMsgPacker *pPacker) const
1117 {
1118 pPacker->AddInt(i: m_Vote);
1119 return pPacker->Error() != 0;
1120 }
1121};
1122
1123struct CNetMsg_Cl_CallVote
1124{
1125 static constexpr int ms_MsgId = NETMSGTYPE_CL_CALLVOTE;
1126 const char *m_pType;
1127 const char *m_pValue;
1128 const char *m_pReason;
1129
1130 bool Pack(CMsgPacker *pPacker) const
1131 {
1132 pPacker->AddString(pStr: m_pType, Limit: -1);
1133 pPacker->AddString(pStr: m_pValue, Limit: -1);
1134 pPacker->AddString(pStr: m_pReason, Limit: -1);
1135 return pPacker->Error() != 0;
1136 }
1137};
1138
1139struct CNetMsg_Cl_IsDDNetLegacy
1140{
1141 static constexpr int ms_MsgId = NETMSGTYPE_CL_ISDDNETLEGACY;
1142
1143 bool Pack(CMsgPacker *pPacker) const
1144 {
1145 return pPacker->Error() != 0;
1146 }
1147};
1148
1149struct CNetMsg_Sv_DDRaceTimeLegacy
1150{
1151 static constexpr int ms_MsgId = NETMSGTYPE_SV_DDRACETIMELEGACY;
1152 int m_Time;
1153 int m_Check;
1154 int m_Finish;
1155
1156 bool Pack(CMsgPacker *pPacker) const
1157 {
1158 pPacker->AddInt(i: m_Time);
1159 pPacker->AddInt(i: m_Check);
1160 pPacker->AddInt(i: m_Finish);
1161 return pPacker->Error() != 0;
1162 }
1163};
1164
1165struct CNetMsg_Sv_RecordLegacy
1166{
1167 static constexpr int ms_MsgId = NETMSGTYPE_SV_RECORDLEGACY;
1168 int m_ServerTimeBest;
1169 int m_PlayerTimeBest;
1170
1171 bool Pack(CMsgPacker *pPacker) const
1172 {
1173 pPacker->AddInt(i: m_ServerTimeBest);
1174 pPacker->AddInt(i: m_PlayerTimeBest);
1175 return pPacker->Error() != 0;
1176 }
1177};
1178
1179struct CNetMsg_Unused2
1180{
1181 static constexpr int ms_MsgId = NETMSGTYPE_UNUSED2;
1182
1183 bool Pack(CMsgPacker *pPacker) const
1184 {
1185 return pPacker->Error() != 0;
1186 }
1187};
1188
1189struct CNetMsg_Sv_TeamsStateLegacy
1190{
1191 static constexpr int ms_MsgId = NETMSGTYPE_SV_TEAMSSTATELEGACY;
1192
1193 bool Pack(CMsgPacker *pPacker) const
1194 {
1195 return pPacker->Error() != 0;
1196 }
1197};
1198
1199struct CNetMsg_Cl_ShowOthersLegacy
1200{
1201 static constexpr int ms_MsgId = NETMSGTYPE_CL_SHOWOTHERSLEGACY;
1202 int m_Show;
1203
1204 bool Pack(CMsgPacker *pPacker) const
1205 {
1206 pPacker->AddInt(i: m_Show);
1207 return pPacker->Error() != 0;
1208 }
1209};
1210
1211struct CNetMsg_Sv_MyOwnMessage
1212{
1213 static constexpr int ms_MsgId = NETMSGTYPE_SV_MYOWNMESSAGE;
1214 int m_Test;
1215
1216 bool Pack(CMsgPacker *pPacker) const
1217 {
1218 pPacker->AddInt(i: m_Test);
1219 return pPacker->Error() != 0;
1220 }
1221};
1222
1223struct CNetMsg_Cl_ShowDistance
1224{
1225 static constexpr int ms_MsgId = NETMSGTYPE_CL_SHOWDISTANCE;
1226 int m_X;
1227 int m_Y;
1228
1229 bool Pack(CMsgPacker *pPacker) const
1230 {
1231 pPacker->AddInt(i: m_X);
1232 pPacker->AddInt(i: m_Y);
1233 return pPacker->Error() != 0;
1234 }
1235};
1236
1237struct CNetMsg_Cl_ShowOthers
1238{
1239 static constexpr int ms_MsgId = NETMSGTYPE_CL_SHOWOTHERS;
1240 int m_Show;
1241
1242 bool Pack(CMsgPacker *pPacker) const
1243 {
1244 pPacker->AddInt(i: m_Show);
1245 return pPacker->Error() != 0;
1246 }
1247};
1248
1249struct CNetMsg_Cl_CameraInfo
1250{
1251 static constexpr int ms_MsgId = NETMSGTYPE_CL_CAMERAINFO;
1252 int m_Zoom;
1253 int m_Deadzone;
1254 int m_FollowFactor;
1255
1256 bool Pack(CMsgPacker *pPacker) const
1257 {
1258 pPacker->AddInt(i: m_Zoom);
1259 pPacker->AddInt(i: m_Deadzone);
1260 pPacker->AddInt(i: m_FollowFactor);
1261 return pPacker->Error() != 0;
1262 }
1263};
1264
1265struct CNetMsg_Sv_TeamsState
1266{
1267 static constexpr int ms_MsgId = NETMSGTYPE_SV_TEAMSSTATE;
1268
1269 bool Pack(CMsgPacker *pPacker) const
1270 {
1271 return pPacker->Error() != 0;
1272 }
1273};
1274
1275struct CNetMsg_Sv_DDRaceTime
1276{
1277 static constexpr int ms_MsgId = NETMSGTYPE_SV_DDRACETIME;
1278 int m_Time;
1279 int m_Check;
1280 int m_Finish;
1281
1282 bool Pack(CMsgPacker *pPacker) const
1283 {
1284 pPacker->AddInt(i: m_Time);
1285 pPacker->AddInt(i: m_Check);
1286 pPacker->AddInt(i: m_Finish);
1287 return pPacker->Error() != 0;
1288 }
1289};
1290
1291struct CNetMsg_Sv_Record
1292{
1293 static constexpr int ms_MsgId = NETMSGTYPE_SV_RECORD;
1294 int m_ServerTimeBest;
1295 int m_PlayerTimeBest;
1296
1297 bool Pack(CMsgPacker *pPacker) const
1298 {
1299 pPacker->AddInt(i: m_ServerTimeBest);
1300 pPacker->AddInt(i: m_PlayerTimeBest);
1301 return pPacker->Error() != 0;
1302 }
1303};
1304
1305struct CNetMsg_Sv_KillMsgTeam
1306{
1307 static constexpr int ms_MsgId = NETMSGTYPE_SV_KILLMSGTEAM;
1308 int m_Team;
1309 int m_First;
1310
1311 bool Pack(CMsgPacker *pPacker) const
1312 {
1313 pPacker->AddInt(i: m_Team);
1314 pPacker->AddInt(i: m_First);
1315 return pPacker->Error() != 0;
1316 }
1317};
1318
1319struct CNetMsg_Sv_YourVote
1320{
1321 static constexpr int ms_MsgId = NETMSGTYPE_SV_YOURVOTE;
1322 int m_Voted;
1323
1324 bool Pack(CMsgPacker *pPacker) const
1325 {
1326 pPacker->AddInt(i: m_Voted);
1327 return pPacker->Error() != 0;
1328 }
1329};
1330
1331struct CNetMsg_Sv_RaceFinish
1332{
1333 static constexpr int ms_MsgId = NETMSGTYPE_SV_RACEFINISH;
1334 int m_ClientId;
1335 int m_Time;
1336 int m_Diff;
1337 int m_RecordPersonal;
1338 int m_RecordServer;
1339
1340 bool Pack(CMsgPacker *pPacker) const
1341 {
1342 pPacker->AddInt(i: m_ClientId);
1343 pPacker->AddInt(i: m_Time);
1344 pPacker->AddInt(i: m_Diff);
1345 pPacker->AddInt(i: m_RecordPersonal);
1346 pPacker->AddInt(i: m_RecordServer);
1347 return pPacker->Error() != 0;
1348 }
1349};
1350
1351struct CNetMsg_Sv_CommandInfo
1352{
1353 static constexpr int ms_MsgId = NETMSGTYPE_SV_COMMANDINFO;
1354 const char *m_pName;
1355 const char *m_pArgsFormat;
1356 const char *m_pHelpText;
1357
1358 bool Pack(CMsgPacker *pPacker) const
1359 {
1360 pPacker->AddString(pStr: m_pName, Limit: -1);
1361 pPacker->AddString(pStr: m_pArgsFormat, Limit: -1);
1362 pPacker->AddString(pStr: m_pHelpText, Limit: -1);
1363 return pPacker->Error() != 0;
1364 }
1365};
1366
1367struct CNetMsg_Sv_CommandInfoRemove
1368{
1369 static constexpr int ms_MsgId = NETMSGTYPE_SV_COMMANDINFOREMOVE;
1370 const char *m_pName;
1371
1372 bool Pack(CMsgPacker *pPacker) const
1373 {
1374 pPacker->AddString(pStr: m_pName, Limit: -1);
1375 return pPacker->Error() != 0;
1376 }
1377};
1378
1379struct CNetMsg_Sv_VoteOptionGroupStart
1380{
1381 static constexpr int ms_MsgId = NETMSGTYPE_SV_VOTEOPTIONGROUPSTART;
1382
1383 bool Pack(CMsgPacker *pPacker) const
1384 {
1385 return pPacker->Error() != 0;
1386 }
1387};
1388
1389struct CNetMsg_Sv_VoteOptionGroupEnd
1390{
1391 static constexpr int ms_MsgId = NETMSGTYPE_SV_VOTEOPTIONGROUPEND;
1392
1393 bool Pack(CMsgPacker *pPacker) const
1394 {
1395 return pPacker->Error() != 0;
1396 }
1397};
1398
1399struct CNetMsg_Sv_CommandInfoGroupStart
1400{
1401 static constexpr int ms_MsgId = NETMSGTYPE_SV_COMMANDINFOGROUPSTART;
1402
1403 bool Pack(CMsgPacker *pPacker) const
1404 {
1405 return pPacker->Error() != 0;
1406 }
1407};
1408
1409struct CNetMsg_Sv_CommandInfoGroupEnd
1410{
1411 static constexpr int ms_MsgId = NETMSGTYPE_SV_COMMANDINFOGROUPEND;
1412
1413 bool Pack(CMsgPacker *pPacker) const
1414 {
1415 return pPacker->Error() != 0;
1416 }
1417};
1418
1419struct CNetMsg_Sv_ChangeInfoCooldown
1420{
1421 static constexpr int ms_MsgId = NETMSGTYPE_SV_CHANGEINFOCOOLDOWN;
1422 int m_WaitUntil;
1423
1424 bool Pack(CMsgPacker *pPacker) const
1425 {
1426 pPacker->AddInt(i: m_WaitUntil);
1427 return pPacker->Error() != 0;
1428 }
1429};
1430
1431struct CNetMsg_Sv_MapSoundGlobal
1432{
1433 static constexpr int ms_MsgId = NETMSGTYPE_SV_MAPSOUNDGLOBAL;
1434 int m_SoundId;
1435
1436 bool Pack(CMsgPacker *pPacker) const
1437 {
1438 pPacker->AddInt(i: m_SoundId);
1439 return pPacker->Error() != 0;
1440 }
1441};
1442
1443struct CNetMsg_Sv_PreInput
1444{
1445 static constexpr int ms_MsgId = NETMSGTYPE_SV_PREINPUT;
1446 int m_Direction;
1447 int m_TargetX;
1448 int m_TargetY;
1449 int m_Jump;
1450 int m_Fire;
1451 int m_Hook;
1452 int m_WantedWeapon;
1453 int m_NextWeapon;
1454 int m_PrevWeapon;
1455 int m_Owner;
1456 int m_IntendedTick;
1457
1458 bool Pack(CMsgPacker *pPacker) const
1459 {
1460 pPacker->AddInt(i: m_Direction);
1461 pPacker->AddInt(i: m_TargetX);
1462 pPacker->AddInt(i: m_TargetY);
1463 pPacker->AddInt(i: m_Jump);
1464 pPacker->AddInt(i: m_Fire);
1465 pPacker->AddInt(i: m_Hook);
1466 pPacker->AddInt(i: m_WantedWeapon);
1467 pPacker->AddInt(i: m_NextWeapon);
1468 pPacker->AddInt(i: m_PrevWeapon);
1469 pPacker->AddInt(i: m_Owner);
1470 pPacker->AddInt(i: m_IntendedTick);
1471 return pPacker->Error() != 0;
1472 }
1473};
1474
1475struct CNetMsg_Sv_SaveCode
1476{
1477 static constexpr int ms_MsgId = NETMSGTYPE_SV_SAVECODE;
1478 int m_State;
1479 const char *m_pError;
1480 const char *m_pSaveRequester;
1481 const char *m_pServerName;
1482 const char *m_pGeneratedCode;
1483 const char *m_pCode;
1484 const char *m_pTeamMembers;
1485
1486 bool Pack(CMsgPacker *pPacker) const
1487 {
1488 pPacker->AddInt(i: m_State);
1489 pPacker->AddString(pStr: m_pError, Limit: -1);
1490 pPacker->AddString(pStr: m_pSaveRequester, Limit: -1);
1491 pPacker->AddString(pStr: m_pServerName, Limit: -1);
1492 pPacker->AddString(pStr: m_pGeneratedCode, Limit: -1);
1493 pPacker->AddString(pStr: m_pCode, Limit: -1);
1494 pPacker->AddString(pStr: m_pTeamMembers, Limit: -1);
1495 return pPacker->Error() != 0;
1496 }
1497};
1498
1499struct CNetMsg_Sv_ServerAlert
1500{
1501 static constexpr int ms_MsgId = NETMSGTYPE_SV_SERVERALERT;
1502 const char *m_pMessage;
1503
1504 bool Pack(CMsgPacker *pPacker) const
1505 {
1506 pPacker->AddString(pStr: m_pMessage, Limit: -1);
1507 return pPacker->Error() != 0;
1508 }
1509};
1510
1511struct CNetMsg_Sv_ModeratorAlert
1512{
1513 static constexpr int ms_MsgId = NETMSGTYPE_SV_MODERATORALERT;
1514 const char *m_pMessage;
1515
1516 bool Pack(CMsgPacker *pPacker) const
1517 {
1518 pPacker->AddString(pStr: m_pMessage, Limit: -1);
1519 return pPacker->Error() != 0;
1520 }
1521};
1522
1523struct CNetMsg_Cl_EnableSpectatorCount
1524{
1525 static constexpr int ms_MsgId = NETMSGTYPE_CL_ENABLESPECTATORCOUNT;
1526 int m_Enable;
1527
1528 bool Pack(CMsgPacker *pPacker) const
1529 {
1530 pPacker->AddInt(i: m_Enable);
1531 return pPacker->Error() != 0;
1532 }
1533};
1534
1535struct CNetMsg_Sv_MapInfo
1536{
1537 static constexpr int ms_MsgId = NETMSGTYPE_SV_MAPINFO;
1538 const char *m_pDescription;
1539
1540 bool Pack(CMsgPacker *pPacker) const
1541 {
1542 pPacker->AddString(pStr: m_pDescription, Limit: -1);
1543 return pPacker->Error() != 0;
1544 }
1545};
1546
1547enum
1548{
1549 SOUND_GUN_FIRE=0,
1550 SOUND_SHOTGUN_FIRE,
1551 SOUND_GRENADE_FIRE,
1552 SOUND_HAMMER_FIRE,
1553 SOUND_HAMMER_HIT,
1554 SOUND_NINJA_FIRE,
1555 SOUND_GRENADE_EXPLODE,
1556 SOUND_NINJA_HIT,
1557 SOUND_LASER_FIRE,
1558 SOUND_LASER_BOUNCE,
1559 SOUND_WEAPON_SWITCH,
1560 SOUND_PLAYER_PAIN_SHORT,
1561 SOUND_PLAYER_PAIN_LONG,
1562 SOUND_BODY_LAND,
1563 SOUND_PLAYER_AIRJUMP,
1564 SOUND_PLAYER_JUMP,
1565 SOUND_PLAYER_DIE,
1566 SOUND_PLAYER_SPAWN,
1567 SOUND_PLAYER_SKID,
1568 SOUND_TEE_CRY,
1569 SOUND_HOOK_LOOP,
1570 SOUND_HOOK_ATTACH_GROUND,
1571 SOUND_HOOK_ATTACH_PLAYER,
1572 SOUND_HOOK_NOATTACH,
1573 SOUND_PICKUP_HEALTH,
1574 SOUND_PICKUP_ARMOR,
1575 SOUND_PICKUP_GRENADE,
1576 SOUND_PICKUP_SHOTGUN,
1577 SOUND_PICKUP_NINJA,
1578 SOUND_WEAPON_SPAWN,
1579 SOUND_WEAPON_NOAMMO,
1580 SOUND_HIT,
1581 SOUND_CHAT_SERVER,
1582 SOUND_CHAT_CLIENT,
1583 SOUND_CHAT_HIGHLIGHT,
1584 SOUND_CTF_DROP,
1585 SOUND_CTF_RETURN,
1586 SOUND_CTF_GRAB_PL,
1587 SOUND_CTF_GRAB_EN,
1588 SOUND_CTF_CAPTURE,
1589 SOUND_MENU,
1590 NUM_SOUNDS
1591};
1592enum
1593{
1594 WEAPON_HAMMER=0,
1595 WEAPON_GUN,
1596 WEAPON_SHOTGUN,
1597 WEAPON_GRENADE,
1598 WEAPON_LASER,
1599 WEAPON_NINJA,
1600 NUM_WEAPONS
1601};
1602
1603enum
1604{
1605 WEAPON_GAME = -3, // team switching etc
1606 WEAPON_SELF = -2, // console kill command
1607 WEAPON_WORLD = -1, // death tiles etc
1608};
1609
1610enum
1611{
1612 TEAM_GAME = TEAM_RED,
1613};
1614
1615class CNetObjHandler
1616{
1617 const char *m_pMsgFailedOn;
1618 const char *m_pObjFailedOn;
1619 const char *m_pObjCorrectedOn;
1620 char m_aUnpackedData[1024 * 2];
1621 int m_NumObjCorrections;
1622 int ClampInt(const char *pErrorMsg, int Value, int Min, int Max);
1623
1624 static const char *ms_apObjNames[];
1625 static const char *ms_apExObjNames[];
1626 static int ms_aObjSizes[];
1627 static int ms_aUnpackedObjSizes[];
1628 static int ms_aUnpackedExObjSizes[];
1629 static const char *ms_apMsgNames[];
1630 static const char *ms_apExMsgNames[];
1631
1632public:
1633 CNetObjHandler();
1634
1635 void *SecureUnpackObj(int Type, CUnpacker *pUnpacker);
1636 const char *GetObjName(int Type) const;
1637 int GetObjSize(int Type) const;
1638 int GetUnpackedObjSize(int Type) const;
1639 int NumObjCorrections() const;
1640 const char *CorrectedObjOn() const;
1641 const char *FailedObjOn() const;
1642
1643 const char *GetMsgName(int Type) const;
1644 void DebugDumpSnapshot(const class CSnapshot *pSnap) const;
1645 int DumpObj(int Type, const void *pData, int Size) const;
1646 void *SecureUnpackMsg(int Type, CUnpacker *pUnpacker);
1647 bool TeeHistorianRecordMsg(int Type);
1648 const char *FailedMsgOn() const;
1649};
1650
1651#endif // GENERATED_PROTOCOL_H
1652