1#include "protocol.h"
2
3#include <base/system.h>
4#include <engine/uuid.h>
5#include <engine/shared/packer.h>
6#include <engine/shared/protocol.h>
7#include <engine/shared/uuid_manager.h>
8#include <engine/shared/snapshot.h>
9
10#include <game/gamecore.h>
11#include <game/mapitems_ex.h>
12
13CNetObjHandler::CNetObjHandler()
14{
15 m_pMsgFailedOn = "";
16 m_pObjFailedOn = "";
17 m_pObjCorrectedOn = "";
18 m_NumObjCorrections = 0;
19}
20
21int CNetObjHandler::NumObjCorrections() const { return m_NumObjCorrections; }
22const char *CNetObjHandler::CorrectedObjOn() const { return m_pObjCorrectedOn; }
23const char *CNetObjHandler::FailedObjOn() const { return m_pObjFailedOn; }
24const char *CNetObjHandler::FailedMsgOn() const { return m_pMsgFailedOn; }
25
26static const int max_int = 0x7fffffff;
27static const int min_int = 0x80000000;
28
29int CNetObjHandler::ClampInt(const char *pErrorMsg, int Value, int Min, int Max)
30{
31 if(Value < Min) { m_pObjCorrectedOn = pErrorMsg; m_NumObjCorrections++; return Min; }
32 if(Value > Max) { m_pObjCorrectedOn = pErrorMsg; m_NumObjCorrections++; return Max; }
33 return Value;
34}
35
36const char *CNetObjHandler::ms_apObjNames[] = {
37 "EX/UUID",
38 "PlayerInput",
39 "Projectile",
40 "Laser",
41 "Pickup",
42 "Flag",
43 "GameInfo",
44 "GameData",
45 "CharacterCore",
46 "Character",
47 "PlayerInfo",
48 "ClientInfo",
49 "SpectatorInfo",
50 "Common",
51 "Explosion",
52 "Spawn",
53 "HammerHit",
54 "Death",
55 "SoundGlobal",
56 "SoundWorld",
57 "DamageInd",
58 ""
59};
60
61const char *CNetObjHandler::ms_apExObjNames[] = {
62 "invalid",
63 "MyOwnObject",
64 "DDNetCharacter",
65 "DDNetPlayer",
66 "GameInfoEx",
67 "DDRaceProjectile",
68 "DDNetLaser",
69 "DDNetProjectile",
70 "DDNetPickup",
71 "DDNetSpectatorInfo",
72 "SpectatorCount",
73 "Birthday",
74 "Finish",
75 "MyOwnEvent",
76 "SpecChar",
77 "SwitchState",
78 "EntityEx",
79 "MapSoundWorld",
80 ""
81};
82
83int CNetObjHandler::ms_aObjSizes[] = {
84 0,
85 sizeof(CNetObj_PlayerInput),
86 sizeof(CNetObj_Projectile),
87 sizeof(CNetObj_Laser),
88 sizeof(CNetObj_Pickup),
89 sizeof(CNetObj_Flag),
90 sizeof(CNetObj_GameInfo),
91 sizeof(CNetObj_GameData),
92 sizeof(CNetObj_CharacterCore),
93 sizeof(CNetObj_Character),
94 sizeof(CNetObj_PlayerInfo),
95 sizeof(CNetObj_ClientInfo),
96 sizeof(CNetObj_SpectatorInfo),
97 sizeof(CNetEvent_Common),
98 sizeof(CNetEvent_Explosion),
99 sizeof(CNetEvent_Spawn),
100 sizeof(CNetEvent_HammerHit),
101 sizeof(CNetEvent_Death),
102 sizeof(CNetEvent_SoundGlobal),
103 sizeof(CNetEvent_SoundWorld),
104 sizeof(CNetEvent_DamageInd),
105 0
106};
107
108int CNetObjHandler::ms_aUnpackedObjSizes[] = {
109 16,
110 sizeof(CNetObj_PlayerInput),
111 sizeof(CNetObj_Projectile),
112 sizeof(CNetObj_Laser),
113 sizeof(CNetObj_Pickup),
114 sizeof(CNetObj_Flag),
115 sizeof(CNetObj_GameInfo),
116 sizeof(CNetObj_GameData),
117 sizeof(CNetObj_CharacterCore),
118 sizeof(CNetObj_Character),
119 sizeof(CNetObj_PlayerInfo),
120 sizeof(CNetObj_ClientInfo),
121 sizeof(CNetObj_SpectatorInfo),
122 sizeof(CNetEvent_Common),
123 sizeof(CNetEvent_Explosion),
124 sizeof(CNetEvent_Spawn),
125 sizeof(CNetEvent_HammerHit),
126 sizeof(CNetEvent_Death),
127 sizeof(CNetEvent_SoundGlobal),
128 sizeof(CNetEvent_SoundWorld),
129 sizeof(CNetEvent_DamageInd),
130};
131
132int CNetObjHandler::ms_aUnpackedExObjSizes[] = {
133 0,
134 sizeof(CNetObj_MyOwnObject),
135 sizeof(CNetObj_DDNetCharacter),
136 sizeof(CNetObj_DDNetPlayer),
137 sizeof(CNetObj_GameInfoEx),
138 sizeof(CNetObj_DDRaceProjectile),
139 sizeof(CNetObj_DDNetLaser),
140 sizeof(CNetObj_DDNetProjectile),
141 sizeof(CNetObj_DDNetPickup),
142 sizeof(CNetObj_DDNetSpectatorInfo),
143 sizeof(CNetObj_SpectatorCount),
144 sizeof(CNetEvent_Birthday),
145 sizeof(CNetEvent_Finish),
146 sizeof(CNetObj_MyOwnEvent),
147 sizeof(CNetObj_SpecChar),
148 sizeof(CNetObj_SwitchState),
149 sizeof(CNetObj_EntityEx),
150 sizeof(CNetEvent_MapSoundWorld),
151};
152
153const char *CNetObjHandler::ms_apMsgNames[] = {
154 "invalid",
155 "Sv_Motd",
156 "Sv_Broadcast",
157 "Sv_Chat",
158 "Sv_KillMsg",
159 "Sv_SoundGlobal",
160 "Sv_TuneParams",
161 "Unused",
162 "Sv_ReadyToEnter",
163 "Sv_WeaponPickup",
164 "Sv_Emoticon",
165 "Sv_VoteClearOptions",
166 "Sv_VoteOptionListAdd",
167 "Sv_VoteOptionAdd",
168 "Sv_VoteOptionRemove",
169 "Sv_VoteSet",
170 "Sv_VoteStatus",
171 "Cl_Say",
172 "Cl_SetTeam",
173 "Cl_SetSpectatorMode",
174 "Cl_StartInfo",
175 "Cl_ChangeInfo",
176 "Cl_Kill",
177 "Cl_Emoticon",
178 "Cl_Vote",
179 "Cl_CallVote",
180 "Cl_IsDDNetLegacy",
181 "Sv_DDRaceTimeLegacy",
182 "Sv_RecordLegacy",
183 "Unused2",
184 "Sv_TeamsStateLegacy",
185 "Cl_ShowOthersLegacy",
186 ""
187};
188
189const char *CNetObjHandler::ms_apExMsgNames[] = {
190 "invalid",
191 "Sv_MyOwnMessage",
192 "Cl_ShowDistance",
193 "Cl_ShowOthers",
194 "Cl_CameraInfo",
195 "Sv_TeamsState",
196 "Sv_DDRaceTime",
197 "Sv_Record",
198 "Sv_KillMsgTeam",
199 "Sv_YourVote",
200 "Sv_RaceFinish",
201 "Sv_CommandInfo",
202 "Sv_CommandInfoRemove",
203 "Sv_VoteOptionGroupStart",
204 "Sv_VoteOptionGroupEnd",
205 "Sv_CommandInfoGroupStart",
206 "Sv_CommandInfoGroupEnd",
207 "Sv_ChangeInfoCooldown",
208 "Sv_MapSoundGlobal",
209 "Sv_PreInput",
210 "Sv_SaveCode",
211 "Sv_ServerAlert",
212 "Sv_ModeratorAlert",
213 "Cl_EnableSpectatorCount",
214 ""
215};
216
217const char *CNetObjHandler::GetObjName(int Type) const
218{
219 if(Type >= 0 && Type < NUM_NETOBJTYPES)
220 {
221 return ms_apObjNames[Type];
222 }
223 else if(Type > __NETOBJTYPE_UUID_HELPER && Type < OFFSET_NETMSGTYPE_UUID)
224 {
225 return ms_apExObjNames[Type - __NETOBJTYPE_UUID_HELPER];
226 }
227 return "(out of range)";
228}
229
230int CNetObjHandler::GetObjSize(int Type) const
231{
232 if(Type < 0 || Type >= NUM_NETOBJTYPES) return 0;
233 return ms_aObjSizes[Type];
234}
235
236int CNetObjHandler::GetUnpackedObjSize(int Type) const
237{
238 if(Type >= 0 && Type < NUM_NETOBJTYPES)
239 {
240 return ms_aUnpackedObjSizes[Type];
241 }
242 else if(Type > __NETOBJTYPE_UUID_HELPER && Type < OFFSET_NETMSGTYPE_UUID)
243 {
244 return ms_aUnpackedExObjSizes[Type - __NETOBJTYPE_UUID_HELPER];
245 }
246 return 0;
247}
248
249const char *CNetObjHandler::GetMsgName(int Type) const
250{
251 if(Type >= 0 && Type < NUM_NETMSGTYPES)
252 {
253 return ms_apMsgNames[Type];
254 }
255 else if(Type > __NETMSGTYPE_UUID_HELPER && Type < OFFSET_MAPITEMTYPE_UUID)
256 {
257 return ms_apExMsgNames[Type - __NETMSGTYPE_UUID_HELPER];
258 }
259 return "(out of range)";
260}
261
262void CNetObjHandler::DebugDumpSnapshot(const CSnapshot *pSnap) const
263{
264 dbg_msg(sys: "snapshot", fmt: "data_size=%d num_items=%d", pSnap->DataSize(), pSnap->NumItems());
265 for(int i = 0; i < pSnap->NumItems(); i++)
266 {
267 const CSnapshotItem *pItem = pSnap->GetItem(Index: i);
268 int Size = pSnap->GetItemSize(Index: i);
269 int Type = pSnap->GetItemType(Index: i);
270 const char *pName = GetObjName(Type: pItem->Type());
271 if(Type > OFFSET_UUID && Type < g_UuidManager.NumUuids() + OFFSET_UUID)
272 pName = g_UuidManager.GetName(Id: Type);
273 dbg_msg(sys: "snapshot", fmt: "\t%s type=%d id=%d size=%d", pName, pItem->Type(), pItem->Id(), Size);
274 if(!DumpObj(Type, pData: pItem->Data(), Size))
275 continue;
276
277 for(size_t b = 0; b < Size / sizeof(int32_t); b++)
278 dbg_msg(sys: "snapshot", fmt: "\t\t%3d %12d\t%08x", (int)b, pItem->Data()[b], pItem->Data()[b]);
279 }
280}
281
282
283int CNetObjHandler::DumpObj(int Type, const void *pData, int Size) const
284{
285 char aRawData[512];
286 char aStr[128];
287 int aInts[2] = {0x0, (int)0x80808080};
288 switch(Type)
289 {
290 case NETOBJTYPE_PLAYERINPUT:
291 {
292 CNetObj_PlayerInput *pObj = (CNetObj_PlayerInput *)pData;
293 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 0, ((const int *)pData)[0], ((const int *)pData)[0]);
294 dbg_msg(sys: "snapshot", fmt: "%s\tm_Direction=%d", aRawData, pObj->m_Direction);
295 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 1, ((const int *)pData)[1], ((const int *)pData)[1]);
296 dbg_msg(sys: "snapshot", fmt: "%s\tm_TargetX=%d", aRawData, pObj->m_TargetX);
297 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 2, ((const int *)pData)[2], ((const int *)pData)[2]);
298 dbg_msg(sys: "snapshot", fmt: "%s\tm_TargetY=%d", aRawData, pObj->m_TargetY);
299 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 3, ((const int *)pData)[3], ((const int *)pData)[3]);
300 dbg_msg(sys: "snapshot", fmt: "%s\tm_Jump=%d", aRawData, pObj->m_Jump);
301 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 4, ((const int *)pData)[4], ((const int *)pData)[4]);
302 dbg_msg(sys: "snapshot", fmt: "%s\tm_Fire=%d", aRawData, pObj->m_Fire);
303 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 5, ((const int *)pData)[5], ((const int *)pData)[5]);
304 dbg_msg(sys: "snapshot", fmt: "%s\tm_Hook=%d", aRawData, pObj->m_Hook);
305 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 6, ((const int *)pData)[6], ((const int *)pData)[6]);
306 dbg_msg(sys: "snapshot", fmt: "%s\tm_PlayerFlags=%d (min=0 max=256)", aRawData, pObj->m_PlayerFlags);
307 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 7, ((const int *)pData)[7], ((const int *)pData)[7]);
308 dbg_msg(sys: "snapshot", fmt: "%s\tm_WantedWeapon=%d", aRawData, pObj->m_WantedWeapon);
309 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 8, ((const int *)pData)[8], ((const int *)pData)[8]);
310 dbg_msg(sys: "snapshot", fmt: "%s\tm_NextWeapon=%d", aRawData, pObj->m_NextWeapon);
311 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 9, ((const int *)pData)[9], ((const int *)pData)[9]);
312 dbg_msg(sys: "snapshot", fmt: "%s\tm_PrevWeapon=%d", aRawData, pObj->m_PrevWeapon);
313 return 0;
314 };
315
316 case NETOBJTYPE_PROJECTILE:
317 {
318 CNetObj_Projectile *pObj = (CNetObj_Projectile *)pData;
319 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 0, ((const int *)pData)[0], ((const int *)pData)[0]);
320 dbg_msg(sys: "snapshot", fmt: "%s\tm_X=%d", aRawData, pObj->m_X);
321 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 1, ((const int *)pData)[1], ((const int *)pData)[1]);
322 dbg_msg(sys: "snapshot", fmt: "%s\tm_Y=%d", aRawData, pObj->m_Y);
323 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 2, ((const int *)pData)[2], ((const int *)pData)[2]);
324 dbg_msg(sys: "snapshot", fmt: "%s\tm_VelX=%d", aRawData, pObj->m_VelX);
325 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 3, ((const int *)pData)[3], ((const int *)pData)[3]);
326 dbg_msg(sys: "snapshot", fmt: "%s\tm_VelY=%d", aRawData, pObj->m_VelY);
327 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 4, ((const int *)pData)[4], ((const int *)pData)[4]);
328 dbg_msg(sys: "snapshot", fmt: "%s\tm_Type=%d (min=0 max=NUM_WEAPONS-1(%d))", aRawData, pObj->m_Type, (int)NUM_WEAPONS-1);
329 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 5, ((const int *)pData)[5], ((const int *)pData)[5]);
330 dbg_msg(sys: "snapshot", fmt: "%s\tm_StartTick=%d (NetTick)", aRawData, pObj->m_StartTick);
331 return 0;
332 };
333
334 case NETOBJTYPE_LASER:
335 {
336 CNetObj_Laser *pObj = (CNetObj_Laser *)pData;
337 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 0, ((const int *)pData)[0], ((const int *)pData)[0]);
338 dbg_msg(sys: "snapshot", fmt: "%s\tm_X=%d", aRawData, pObj->m_X);
339 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 1, ((const int *)pData)[1], ((const int *)pData)[1]);
340 dbg_msg(sys: "snapshot", fmt: "%s\tm_Y=%d", aRawData, pObj->m_Y);
341 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 2, ((const int *)pData)[2], ((const int *)pData)[2]);
342 dbg_msg(sys: "snapshot", fmt: "%s\tm_FromX=%d", aRawData, pObj->m_FromX);
343 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 3, ((const int *)pData)[3], ((const int *)pData)[3]);
344 dbg_msg(sys: "snapshot", fmt: "%s\tm_FromY=%d", aRawData, pObj->m_FromY);
345 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 4, ((const int *)pData)[4], ((const int *)pData)[4]);
346 dbg_msg(sys: "snapshot", fmt: "%s\tm_StartTick=%d (NetTick)", aRawData, pObj->m_StartTick);
347 return 0;
348 };
349
350 case NETOBJTYPE_PICKUP:
351 {
352 CNetObj_Pickup *pObj = (CNetObj_Pickup *)pData;
353 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 0, ((const int *)pData)[0], ((const int *)pData)[0]);
354 dbg_msg(sys: "snapshot", fmt: "%s\tm_X=%d", aRawData, pObj->m_X);
355 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 1, ((const int *)pData)[1], ((const int *)pData)[1]);
356 dbg_msg(sys: "snapshot", fmt: "%s\tm_Y=%d", aRawData, pObj->m_Y);
357 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 2, ((const int *)pData)[2], ((const int *)pData)[2]);
358 dbg_msg(sys: "snapshot", fmt: "%s\tm_Type=%d (min=0 max=max_int(%d))", aRawData, pObj->m_Type, (int)max_int);
359 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 3, ((const int *)pData)[3], ((const int *)pData)[3]);
360 dbg_msg(sys: "snapshot", fmt: "%s\tm_Subtype=%d (min=0 max=max_int(%d))", aRawData, pObj->m_Subtype, (int)max_int);
361 return 0;
362 };
363
364 case NETOBJTYPE_FLAG:
365 {
366 CNetObj_Flag *pObj = (CNetObj_Flag *)pData;
367 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 0, ((const int *)pData)[0], ((const int *)pData)[0]);
368 dbg_msg(sys: "snapshot", fmt: "%s\tm_X=%d", aRawData, pObj->m_X);
369 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 1, ((const int *)pData)[1], ((const int *)pData)[1]);
370 dbg_msg(sys: "snapshot", fmt: "%s\tm_Y=%d", aRawData, pObj->m_Y);
371 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 2, ((const int *)pData)[2], ((const int *)pData)[2]);
372 dbg_msg(sys: "snapshot", fmt: "%s\tm_Team=%d (min=TEAM_RED(%d) max=TEAM_BLUE(%d))", aRawData, pObj->m_Team, (int)TEAM_RED, (int)TEAM_BLUE);
373 return 0;
374 };
375
376 case NETOBJTYPE_GAMEINFO:
377 {
378 CNetObj_GameInfo *pObj = (CNetObj_GameInfo *)pData;
379 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 0, ((const int *)pData)[0], ((const int *)pData)[0]);
380 dbg_msg(sys: "snapshot", fmt: "%s\tm_GameFlags=%d (min=0 max=256)", aRawData, pObj->m_GameFlags);
381 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 1, ((const int *)pData)[1], ((const int *)pData)[1]);
382 dbg_msg(sys: "snapshot", fmt: "%s\tm_GameStateFlags=%d (min=0 max=256)", aRawData, pObj->m_GameStateFlags);
383 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 2, ((const int *)pData)[2], ((const int *)pData)[2]);
384 dbg_msg(sys: "snapshot", fmt: "%s\tm_RoundStartTick=%d (NetTick)", aRawData, pObj->m_RoundStartTick);
385 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 3, ((const int *)pData)[3], ((const int *)pData)[3]);
386 dbg_msg(sys: "snapshot", fmt: "%s\tm_WarmupTimer=%d (min=min_int(%d) max=max_int(%d))", aRawData, pObj->m_WarmupTimer, (int)min_int, (int)max_int);
387 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 4, ((const int *)pData)[4], ((const int *)pData)[4]);
388 dbg_msg(sys: "snapshot", fmt: "%s\tm_ScoreLimit=%d (min=0 max=max_int(%d))", aRawData, pObj->m_ScoreLimit, (int)max_int);
389 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 5, ((const int *)pData)[5], ((const int *)pData)[5]);
390 dbg_msg(sys: "snapshot", fmt: "%s\tm_TimeLimit=%d (min=0 max=max_int(%d))", aRawData, pObj->m_TimeLimit, (int)max_int);
391 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 6, ((const int *)pData)[6], ((const int *)pData)[6]);
392 dbg_msg(sys: "snapshot", fmt: "%s\tm_RoundNum=%d (min=0 max=max_int(%d))", aRawData, pObj->m_RoundNum, (int)max_int);
393 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 7, ((const int *)pData)[7], ((const int *)pData)[7]);
394 dbg_msg(sys: "snapshot", fmt: "%s\tm_RoundCurrent=%d (min=0 max=max_int(%d))", aRawData, pObj->m_RoundCurrent, (int)max_int);
395 return 0;
396 };
397
398 case NETOBJTYPE_GAMEDATA:
399 {
400 CNetObj_GameData *pObj = (CNetObj_GameData *)pData;
401 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 0, ((const int *)pData)[0], ((const int *)pData)[0]);
402 dbg_msg(sys: "snapshot", fmt: "%s\tm_TeamscoreRed=%d", aRawData, pObj->m_TeamscoreRed);
403 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 1, ((const int *)pData)[1], ((const int *)pData)[1]);
404 dbg_msg(sys: "snapshot", fmt: "%s\tm_TeamscoreBlue=%d", aRawData, pObj->m_TeamscoreBlue);
405 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 2, ((const int *)pData)[2], ((const int *)pData)[2]);
406 dbg_msg(sys: "snapshot", fmt: "%s\tm_FlagCarrierRed=%d (min=FLAG_MISSING(%d) max=MAX_CLIENTS-1(%d))", aRawData, pObj->m_FlagCarrierRed, (int)FLAG_MISSING, (int)MAX_CLIENTS-1);
407 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 3, ((const int *)pData)[3], ((const int *)pData)[3]);
408 dbg_msg(sys: "snapshot", fmt: "%s\tm_FlagCarrierBlue=%d (min=FLAG_MISSING(%d) max=MAX_CLIENTS-1(%d))", aRawData, pObj->m_FlagCarrierBlue, (int)FLAG_MISSING, (int)MAX_CLIENTS-1);
409 return 0;
410 };
411
412 case NETOBJTYPE_CHARACTERCORE:
413 {
414 CNetObj_CharacterCore *pObj = (CNetObj_CharacterCore *)pData;
415 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 0, ((const int *)pData)[0], ((const int *)pData)[0]);
416 dbg_msg(sys: "snapshot", fmt: "%s\tm_Tick=%d", aRawData, pObj->m_Tick);
417 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 1, ((const int *)pData)[1], ((const int *)pData)[1]);
418 dbg_msg(sys: "snapshot", fmt: "%s\tm_X=%d", aRawData, pObj->m_X);
419 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 2, ((const int *)pData)[2], ((const int *)pData)[2]);
420 dbg_msg(sys: "snapshot", fmt: "%s\tm_Y=%d", aRawData, pObj->m_Y);
421 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 3, ((const int *)pData)[3], ((const int *)pData)[3]);
422 dbg_msg(sys: "snapshot", fmt: "%s\tm_VelX=%d", aRawData, pObj->m_VelX);
423 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 4, ((const int *)pData)[4], ((const int *)pData)[4]);
424 dbg_msg(sys: "snapshot", fmt: "%s\tm_VelY=%d", aRawData, pObj->m_VelY);
425 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 5, ((const int *)pData)[5], ((const int *)pData)[5]);
426 dbg_msg(sys: "snapshot", fmt: "%s\tm_Angle=%d", aRawData, pObj->m_Angle);
427 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 6, ((const int *)pData)[6], ((const int *)pData)[6]);
428 dbg_msg(sys: "snapshot", fmt: "%s\tm_Direction=%d (min=-1 max=1)", aRawData, pObj->m_Direction);
429 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 7, ((const int *)pData)[7], ((const int *)pData)[7]);
430 dbg_msg(sys: "snapshot", fmt: "%s\tm_Jumped=%d (min=0 max=3)", aRawData, pObj->m_Jumped);
431 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 8, ((const int *)pData)[8], ((const int *)pData)[8]);
432 dbg_msg(sys: "snapshot", fmt: "%s\tm_HookedPlayer=%d (min=-1 max=MAX_CLIENTS-1(%d))", aRawData, pObj->m_HookedPlayer, (int)MAX_CLIENTS-1);
433 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 9, ((const int *)pData)[9], ((const int *)pData)[9]);
434 dbg_msg(sys: "snapshot", fmt: "%s\tm_HookState=%d (min=-1 max=5)", aRawData, pObj->m_HookState);
435 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 10, ((const int *)pData)[10], ((const int *)pData)[10]);
436 dbg_msg(sys: "snapshot", fmt: "%s\tm_HookTick=%d", aRawData, pObj->m_HookTick);
437 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 11, ((const int *)pData)[11], ((const int *)pData)[11]);
438 dbg_msg(sys: "snapshot", fmt: "%s\tm_HookX=%d", aRawData, pObj->m_HookX);
439 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 12, ((const int *)pData)[12], ((const int *)pData)[12]);
440 dbg_msg(sys: "snapshot", fmt: "%s\tm_HookY=%d", aRawData, pObj->m_HookY);
441 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 13, ((const int *)pData)[13], ((const int *)pData)[13]);
442 dbg_msg(sys: "snapshot", fmt: "%s\tm_HookDx=%d", aRawData, pObj->m_HookDx);
443 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 14, ((const int *)pData)[14], ((const int *)pData)[14]);
444 dbg_msg(sys: "snapshot", fmt: "%s\tm_HookDy=%d", aRawData, pObj->m_HookDy);
445 return 0;
446 };
447
448 case NETOBJTYPE_CHARACTER:
449 {
450 CNetObj_Character *pObj = (CNetObj_Character *)pData;
451 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 0, ((const int *)pData)[0], ((const int *)pData)[0]);
452 dbg_msg(sys: "snapshot", fmt: "%s\tm_Tick=%d", aRawData, pObj->m_Tick);
453 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 1, ((const int *)pData)[1], ((const int *)pData)[1]);
454 dbg_msg(sys: "snapshot", fmt: "%s\tm_X=%d", aRawData, pObj->m_X);
455 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 2, ((const int *)pData)[2], ((const int *)pData)[2]);
456 dbg_msg(sys: "snapshot", fmt: "%s\tm_Y=%d", aRawData, pObj->m_Y);
457 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 3, ((const int *)pData)[3], ((const int *)pData)[3]);
458 dbg_msg(sys: "snapshot", fmt: "%s\tm_VelX=%d", aRawData, pObj->m_VelX);
459 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 4, ((const int *)pData)[4], ((const int *)pData)[4]);
460 dbg_msg(sys: "snapshot", fmt: "%s\tm_VelY=%d", aRawData, pObj->m_VelY);
461 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 5, ((const int *)pData)[5], ((const int *)pData)[5]);
462 dbg_msg(sys: "snapshot", fmt: "%s\tm_Angle=%d", aRawData, pObj->m_Angle);
463 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 6, ((const int *)pData)[6], ((const int *)pData)[6]);
464 dbg_msg(sys: "snapshot", fmt: "%s\tm_Direction=%d (min=-1 max=1)", aRawData, pObj->m_Direction);
465 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 7, ((const int *)pData)[7], ((const int *)pData)[7]);
466 dbg_msg(sys: "snapshot", fmt: "%s\tm_Jumped=%d (min=0 max=3)", aRawData, pObj->m_Jumped);
467 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 8, ((const int *)pData)[8], ((const int *)pData)[8]);
468 dbg_msg(sys: "snapshot", fmt: "%s\tm_HookedPlayer=%d (min=-1 max=MAX_CLIENTS-1(%d))", aRawData, pObj->m_HookedPlayer, (int)MAX_CLIENTS-1);
469 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 9, ((const int *)pData)[9], ((const int *)pData)[9]);
470 dbg_msg(sys: "snapshot", fmt: "%s\tm_HookState=%d (min=-1 max=5)", aRawData, pObj->m_HookState);
471 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 10, ((const int *)pData)[10], ((const int *)pData)[10]);
472 dbg_msg(sys: "snapshot", fmt: "%s\tm_HookTick=%d", aRawData, pObj->m_HookTick);
473 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 11, ((const int *)pData)[11], ((const int *)pData)[11]);
474 dbg_msg(sys: "snapshot", fmt: "%s\tm_HookX=%d", aRawData, pObj->m_HookX);
475 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 12, ((const int *)pData)[12], ((const int *)pData)[12]);
476 dbg_msg(sys: "snapshot", fmt: "%s\tm_HookY=%d", aRawData, pObj->m_HookY);
477 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 13, ((const int *)pData)[13], ((const int *)pData)[13]);
478 dbg_msg(sys: "snapshot", fmt: "%s\tm_HookDx=%d", aRawData, pObj->m_HookDx);
479 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 14, ((const int *)pData)[14], ((const int *)pData)[14]);
480 dbg_msg(sys: "snapshot", fmt: "%s\tm_HookDy=%d", aRawData, pObj->m_HookDy);
481 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 15, ((const int *)pData)[15], ((const int *)pData)[15]);
482 dbg_msg(sys: "snapshot", fmt: "%s\tm_PlayerFlags=%d (min=0 max=256)", aRawData, pObj->m_PlayerFlags);
483 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 16, ((const int *)pData)[16], ((const int *)pData)[16]);
484 dbg_msg(sys: "snapshot", fmt: "%s\tm_Health=%d (min=0 max=10)", aRawData, pObj->m_Health);
485 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 17, ((const int *)pData)[17], ((const int *)pData)[17]);
486 dbg_msg(sys: "snapshot", fmt: "%s\tm_Armor=%d (min=0 max=10)", aRawData, pObj->m_Armor);
487 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 18, ((const int *)pData)[18], ((const int *)pData)[18]);
488 dbg_msg(sys: "snapshot", fmt: "%s\tm_AmmoCount=%d (min=-1 max=10)", aRawData, pObj->m_AmmoCount);
489 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 19, ((const int *)pData)[19], ((const int *)pData)[19]);
490 dbg_msg(sys: "snapshot", fmt: "%s\tm_Weapon=%d (min=-1 max=NUM_WEAPONS-1(%d))", aRawData, pObj->m_Weapon, (int)NUM_WEAPONS-1);
491 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 20, ((const int *)pData)[20], ((const int *)pData)[20]);
492 dbg_msg(sys: "snapshot", fmt: "%s\tm_Emote=%d (min=0 max=6)", aRawData, pObj->m_Emote);
493 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 21, ((const int *)pData)[21], ((const int *)pData)[21]);
494 dbg_msg(sys: "snapshot", fmt: "%s\tm_AttackTick=%d (min=0 max=max_int(%d))", aRawData, pObj->m_AttackTick, (int)max_int);
495 return 0;
496 };
497
498 case NETOBJTYPE_PLAYERINFO:
499 {
500 CNetObj_PlayerInfo *pObj = (CNetObj_PlayerInfo *)pData;
501 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 0, ((const int *)pData)[0], ((const int *)pData)[0]);
502 dbg_msg(sys: "snapshot", fmt: "%s\tm_Local=%d (min=0 max=1)", aRawData, pObj->m_Local);
503 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 1, ((const int *)pData)[1], ((const int *)pData)[1]);
504 dbg_msg(sys: "snapshot", fmt: "%s\tm_ClientId=%d (min=0 max=MAX_CLIENTS-1(%d))", aRawData, pObj->m_ClientId, (int)MAX_CLIENTS-1);
505 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 2, ((const int *)pData)[2], ((const int *)pData)[2]);
506 dbg_msg(sys: "snapshot", fmt: "%s\tm_Team=%d (min=TEAM_SPECTATORS(%d) max=TEAM_BLUE(%d))", aRawData, pObj->m_Team, (int)TEAM_SPECTATORS, (int)TEAM_BLUE);
507 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 3, ((const int *)pData)[3], ((const int *)pData)[3]);
508 dbg_msg(sys: "snapshot", fmt: "%s\tm_Score=%d", aRawData, pObj->m_Score);
509 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 4, ((const int *)pData)[4], ((const int *)pData)[4]);
510 dbg_msg(sys: "snapshot", fmt: "%s\tm_Latency=%d", aRawData, pObj->m_Latency);
511 return 0;
512 };
513
514 case NETOBJTYPE_CLIENTINFO:
515 {
516 CNetObj_ClientInfo *pObj = (CNetObj_ClientInfo *)pData;
517 aInts[0] = pObj->m_aName[0];
518 IntsToStr(pInts: aInts, NumInts: std::size(aInts), pStr: aStr, StrSize: std::size(aStr));
519 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 0, ((const int *)pData)[0], ((const int *)pData)[0]);
520 dbg_msg(sys: "snapshot", fmt: "%s\tm_aName[0]=%d\tIntToStr: %s", aRawData, pObj->m_aName[0], aStr);
521 aInts[0] = pObj->m_aName[1];
522 IntsToStr(pInts: aInts, NumInts: std::size(aInts), pStr: aStr, StrSize: std::size(aStr));
523 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 1, ((const int *)pData)[1], ((const int *)pData)[1]);
524 dbg_msg(sys: "snapshot", fmt: "%s\tm_aName[1]=%d\tIntToStr: %s", aRawData, pObj->m_aName[1], aStr);
525 aInts[0] = pObj->m_aName[2];
526 IntsToStr(pInts: aInts, NumInts: std::size(aInts), pStr: aStr, StrSize: std::size(aStr));
527 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 2, ((const int *)pData)[2], ((const int *)pData)[2]);
528 dbg_msg(sys: "snapshot", fmt: "%s\tm_aName[2]=%d\tIntToStr: %s", aRawData, pObj->m_aName[2], aStr);
529 aInts[0] = pObj->m_aName[3];
530 IntsToStr(pInts: aInts, NumInts: std::size(aInts), pStr: aStr, StrSize: std::size(aStr));
531 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 3, ((const int *)pData)[3], ((const int *)pData)[3]);
532 dbg_msg(sys: "snapshot", fmt: "%s\tm_aName[3]=%d\tIntToStr: %s", aRawData, pObj->m_aName[3], aStr);
533 aInts[0] = pObj->m_aClan[0];
534 IntsToStr(pInts: aInts, NumInts: std::size(aInts), pStr: aStr, StrSize: std::size(aStr));
535 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 4, ((const int *)pData)[4], ((const int *)pData)[4]);
536 dbg_msg(sys: "snapshot", fmt: "%s\tm_aClan[0]=%d\tIntToStr: %s", aRawData, pObj->m_aClan[0], aStr);
537 aInts[0] = pObj->m_aClan[1];
538 IntsToStr(pInts: aInts, NumInts: std::size(aInts), pStr: aStr, StrSize: std::size(aStr));
539 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 5, ((const int *)pData)[5], ((const int *)pData)[5]);
540 dbg_msg(sys: "snapshot", fmt: "%s\tm_aClan[1]=%d\tIntToStr: %s", aRawData, pObj->m_aClan[1], aStr);
541 aInts[0] = pObj->m_aClan[2];
542 IntsToStr(pInts: aInts, NumInts: std::size(aInts), pStr: aStr, StrSize: std::size(aStr));
543 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 6, ((const int *)pData)[6], ((const int *)pData)[6]);
544 dbg_msg(sys: "snapshot", fmt: "%s\tm_aClan[2]=%d\tIntToStr: %s", aRawData, pObj->m_aClan[2], aStr);
545 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 7, ((const int *)pData)[7], ((const int *)pData)[7]);
546 dbg_msg(sys: "snapshot", fmt: "%s\tm_Country=%d", aRawData, pObj->m_Country);
547 aInts[0] = pObj->m_aSkin[0];
548 IntsToStr(pInts: aInts, NumInts: std::size(aInts), pStr: aStr, StrSize: std::size(aStr));
549 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 8, ((const int *)pData)[8], ((const int *)pData)[8]);
550 dbg_msg(sys: "snapshot", fmt: "%s\tm_aSkin[0]=%d\tIntToStr: %s", aRawData, pObj->m_aSkin[0], aStr);
551 aInts[0] = pObj->m_aSkin[1];
552 IntsToStr(pInts: aInts, NumInts: std::size(aInts), pStr: aStr, StrSize: std::size(aStr));
553 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 9, ((const int *)pData)[9], ((const int *)pData)[9]);
554 dbg_msg(sys: "snapshot", fmt: "%s\tm_aSkin[1]=%d\tIntToStr: %s", aRawData, pObj->m_aSkin[1], aStr);
555 aInts[0] = pObj->m_aSkin[2];
556 IntsToStr(pInts: aInts, NumInts: std::size(aInts), pStr: aStr, StrSize: std::size(aStr));
557 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 10, ((const int *)pData)[10], ((const int *)pData)[10]);
558 dbg_msg(sys: "snapshot", fmt: "%s\tm_aSkin[2]=%d\tIntToStr: %s", aRawData, pObj->m_aSkin[2], aStr);
559 aInts[0] = pObj->m_aSkin[3];
560 IntsToStr(pInts: aInts, NumInts: std::size(aInts), pStr: aStr, StrSize: std::size(aStr));
561 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 11, ((const int *)pData)[11], ((const int *)pData)[11]);
562 dbg_msg(sys: "snapshot", fmt: "%s\tm_aSkin[3]=%d\tIntToStr: %s", aRawData, pObj->m_aSkin[3], aStr);
563 aInts[0] = pObj->m_aSkin[4];
564 IntsToStr(pInts: aInts, NumInts: std::size(aInts), pStr: aStr, StrSize: std::size(aStr));
565 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 12, ((const int *)pData)[12], ((const int *)pData)[12]);
566 dbg_msg(sys: "snapshot", fmt: "%s\tm_aSkin[4]=%d\tIntToStr: %s", aRawData, pObj->m_aSkin[4], aStr);
567 aInts[0] = pObj->m_aSkin[5];
568 IntsToStr(pInts: aInts, NumInts: std::size(aInts), pStr: aStr, StrSize: std::size(aStr));
569 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 13, ((const int *)pData)[13], ((const int *)pData)[13]);
570 dbg_msg(sys: "snapshot", fmt: "%s\tm_aSkin[5]=%d\tIntToStr: %s", aRawData, pObj->m_aSkin[5], aStr);
571 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 14, ((const int *)pData)[14], ((const int *)pData)[14]);
572 dbg_msg(sys: "snapshot", fmt: "%s\tm_UseCustomColor=%d (min=0 max=1)", aRawData, pObj->m_UseCustomColor);
573 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 15, ((const int *)pData)[15], ((const int *)pData)[15]);
574 dbg_msg(sys: "snapshot", fmt: "%s\tm_ColorBody=%d", aRawData, pObj->m_ColorBody);
575 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 16, ((const int *)pData)[16], ((const int *)pData)[16]);
576 dbg_msg(sys: "snapshot", fmt: "%s\tm_ColorFeet=%d", aRawData, pObj->m_ColorFeet);
577 return 0;
578 };
579
580 case NETOBJTYPE_SPECTATORINFO:
581 {
582 CNetObj_SpectatorInfo *pObj = (CNetObj_SpectatorInfo *)pData;
583 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 0, ((const int *)pData)[0], ((const int *)pData)[0]);
584 dbg_msg(sys: "snapshot", fmt: "%s\tm_SpectatorId=%d (min=SPEC_FREEVIEW(%d) max=MAX_CLIENTS-1(%d))", aRawData, pObj->m_SpectatorId, (int)SPEC_FREEVIEW, (int)MAX_CLIENTS-1);
585 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 1, ((const int *)pData)[1], ((const int *)pData)[1]);
586 dbg_msg(sys: "snapshot", fmt: "%s\tm_X=%d", aRawData, pObj->m_X);
587 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 2, ((const int *)pData)[2], ((const int *)pData)[2]);
588 dbg_msg(sys: "snapshot", fmt: "%s\tm_Y=%d", aRawData, pObj->m_Y);
589 return 0;
590 };
591
592 case NETOBJTYPE_MYOWNOBJECT:
593 {
594 CNetObj_MyOwnObject *pObj = (CNetObj_MyOwnObject *)pData;
595 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 0, ((const int *)pData)[0], ((const int *)pData)[0]);
596 dbg_msg(sys: "snapshot", fmt: "%s\tm_Test=%d", aRawData, pObj->m_Test);
597 return 0;
598 };
599
600 case NETOBJTYPE_DDNETCHARACTER:
601 {
602 CNetObj_DDNetCharacter *pObj = (CNetObj_DDNetCharacter *)pData;
603 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 0, ((const int *)pData)[0], ((const int *)pData)[0]);
604 dbg_msg(sys: "snapshot", fmt: "%s\tm_Flags=%d", aRawData, pObj->m_Flags);
605 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 1, ((const int *)pData)[1], ((const int *)pData)[1]);
606 dbg_msg(sys: "snapshot", fmt: "%s\tm_FreezeEnd=%d (NetTick)", aRawData, pObj->m_FreezeEnd);
607 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 2, ((const int *)pData)[2], ((const int *)pData)[2]);
608 dbg_msg(sys: "snapshot", fmt: "%s\tm_Jumps=%d (min=-1 max=255)", aRawData, pObj->m_Jumps);
609 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 3, ((const int *)pData)[3], ((const int *)pData)[3]);
610 dbg_msg(sys: "snapshot", fmt: "%s\tm_TeleCheckpoint=%d", aRawData, pObj->m_TeleCheckpoint);
611 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 4, ((const int *)pData)[4], ((const int *)pData)[4]);
612 dbg_msg(sys: "snapshot", fmt: "%s\tm_StrongWeakId=%d (min=0 max=MAX_CLIENTS-1(%d))", aRawData, pObj->m_StrongWeakId, (int)MAX_CLIENTS-1);
613 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 5, ((const int *)pData)[5], ((const int *)pData)[5]);
614 dbg_msg(sys: "snapshot", fmt: "%s\tm_JumpedTotal=%d (min=-1 max=255)", aRawData, pObj->m_JumpedTotal);
615 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 6, ((const int *)pData)[6], ((const int *)pData)[6]);
616 dbg_msg(sys: "snapshot", fmt: "%s\tm_NinjaActivationTick=%d (NetTick)", aRawData, pObj->m_NinjaActivationTick);
617 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 7, ((const int *)pData)[7], ((const int *)pData)[7]);
618 dbg_msg(sys: "snapshot", fmt: "%s\tm_FreezeStart=%d (NetTick)", aRawData, pObj->m_FreezeStart);
619 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 8, ((const int *)pData)[8], ((const int *)pData)[8]);
620 dbg_msg(sys: "snapshot", fmt: "%s\tm_TargetX=%d", aRawData, pObj->m_TargetX);
621 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 9, ((const int *)pData)[9], ((const int *)pData)[9]);
622 dbg_msg(sys: "snapshot", fmt: "%s\tm_TargetY=%d", aRawData, pObj->m_TargetY);
623 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 10, ((const int *)pData)[10], ((const int *)pData)[10]);
624 dbg_msg(sys: "snapshot", fmt: "%s\tm_TuneZoneOverride=%d (min=TuneZone::OVERRIDE_NONE(%d) max=TuneZone::NUM-1(%d))", aRawData, pObj->m_TuneZoneOverride, (int)TuneZone::OVERRIDE_NONE, (int)TuneZone::NUM-1);
625 return 0;
626 };
627
628 case NETOBJTYPE_DDNETPLAYER:
629 {
630 CNetObj_DDNetPlayer *pObj = (CNetObj_DDNetPlayer *)pData;
631 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 0, ((const int *)pData)[0], ((const int *)pData)[0]);
632 dbg_msg(sys: "snapshot", fmt: "%s\tm_Flags=%d", aRawData, pObj->m_Flags);
633 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 1, ((const int *)pData)[1], ((const int *)pData)[1]);
634 dbg_msg(sys: "snapshot", fmt: "%s\tm_AuthLevel=%d (min=AUTHED_NO(%d) max=AUTHED_ADMIN(%d))", aRawData, pObj->m_AuthLevel, (int)AUTHED_NO, (int)AUTHED_ADMIN);
635 return 0;
636 };
637
638 case NETOBJTYPE_GAMEINFOEX:
639 {
640 CNetObj_GameInfoEx *pObj = (CNetObj_GameInfoEx *)pData;
641 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 0, ((const int *)pData)[0], ((const int *)pData)[0]);
642 dbg_msg(sys: "snapshot", fmt: "%s\tm_Flags=%d", aRawData, pObj->m_Flags);
643 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 1, ((const int *)pData)[1], ((const int *)pData)[1]);
644 dbg_msg(sys: "snapshot", fmt: "%s\tm_Version=%d", aRawData, pObj->m_Version);
645 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 2, ((const int *)pData)[2], ((const int *)pData)[2]);
646 dbg_msg(sys: "snapshot", fmt: "%s\tm_Flags2=%d", aRawData, pObj->m_Flags2);
647 return 0;
648 };
649
650 case NETOBJTYPE_DDRACEPROJECTILE:
651 {
652 CNetObj_DDRaceProjectile *pObj = (CNetObj_DDRaceProjectile *)pData;
653 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 0, ((const int *)pData)[0], ((const int *)pData)[0]);
654 dbg_msg(sys: "snapshot", fmt: "%s\tm_X=%d", aRawData, pObj->m_X);
655 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 1, ((const int *)pData)[1], ((const int *)pData)[1]);
656 dbg_msg(sys: "snapshot", fmt: "%s\tm_Y=%d", aRawData, pObj->m_Y);
657 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 2, ((const int *)pData)[2], ((const int *)pData)[2]);
658 dbg_msg(sys: "snapshot", fmt: "%s\tm_Angle=%d", aRawData, pObj->m_Angle);
659 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 3, ((const int *)pData)[3], ((const int *)pData)[3]);
660 dbg_msg(sys: "snapshot", fmt: "%s\tm_Data=%d", aRawData, pObj->m_Data);
661 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 4, ((const int *)pData)[4], ((const int *)pData)[4]);
662 dbg_msg(sys: "snapshot", fmt: "%s\tm_Type=%d (min=0 max=NUM_WEAPONS-1(%d))", aRawData, pObj->m_Type, (int)NUM_WEAPONS-1);
663 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 5, ((const int *)pData)[5], ((const int *)pData)[5]);
664 dbg_msg(sys: "snapshot", fmt: "%s\tm_StartTick=%d (NetTick)", aRawData, pObj->m_StartTick);
665 return 0;
666 };
667
668 case NETOBJTYPE_DDNETLASER:
669 {
670 CNetObj_DDNetLaser *pObj = (CNetObj_DDNetLaser *)pData;
671 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 0, ((const int *)pData)[0], ((const int *)pData)[0]);
672 dbg_msg(sys: "snapshot", fmt: "%s\tm_ToX=%d", aRawData, pObj->m_ToX);
673 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 1, ((const int *)pData)[1], ((const int *)pData)[1]);
674 dbg_msg(sys: "snapshot", fmt: "%s\tm_ToY=%d", aRawData, pObj->m_ToY);
675 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 2, ((const int *)pData)[2], ((const int *)pData)[2]);
676 dbg_msg(sys: "snapshot", fmt: "%s\tm_FromX=%d", aRawData, pObj->m_FromX);
677 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 3, ((const int *)pData)[3], ((const int *)pData)[3]);
678 dbg_msg(sys: "snapshot", fmt: "%s\tm_FromY=%d", aRawData, pObj->m_FromY);
679 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 4, ((const int *)pData)[4], ((const int *)pData)[4]);
680 dbg_msg(sys: "snapshot", fmt: "%s\tm_StartTick=%d (NetTick)", aRawData, pObj->m_StartTick);
681 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 5, ((const int *)pData)[5], ((const int *)pData)[5]);
682 dbg_msg(sys: "snapshot", fmt: "%s\tm_Owner=%d (min=-1 max=MAX_CLIENTS-1(%d))", aRawData, pObj->m_Owner, (int)MAX_CLIENTS-1);
683 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 6, ((const int *)pData)[6], ((const int *)pData)[6]);
684 dbg_msg(sys: "snapshot", fmt: "%s\tm_Type=%d", aRawData, pObj->m_Type);
685 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 7, ((const int *)pData)[7], ((const int *)pData)[7]);
686 dbg_msg(sys: "snapshot", fmt: "%s\tm_SwitchNumber=%d", aRawData, pObj->m_SwitchNumber);
687 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 8, ((const int *)pData)[8], ((const int *)pData)[8]);
688 dbg_msg(sys: "snapshot", fmt: "%s\tm_Subtype=%d", aRawData, pObj->m_Subtype);
689 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 9, ((const int *)pData)[9], ((const int *)pData)[9]);
690 dbg_msg(sys: "snapshot", fmt: "%s\tm_Flags=%d", aRawData, pObj->m_Flags);
691 return 0;
692 };
693
694 case NETOBJTYPE_DDNETPROJECTILE:
695 {
696 CNetObj_DDNetProjectile *pObj = (CNetObj_DDNetProjectile *)pData;
697 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 0, ((const int *)pData)[0], ((const int *)pData)[0]);
698 dbg_msg(sys: "snapshot", fmt: "%s\tm_X=%d", aRawData, pObj->m_X);
699 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 1, ((const int *)pData)[1], ((const int *)pData)[1]);
700 dbg_msg(sys: "snapshot", fmt: "%s\tm_Y=%d", aRawData, pObj->m_Y);
701 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 2, ((const int *)pData)[2], ((const int *)pData)[2]);
702 dbg_msg(sys: "snapshot", fmt: "%s\tm_VelX=%d", aRawData, pObj->m_VelX);
703 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 3, ((const int *)pData)[3], ((const int *)pData)[3]);
704 dbg_msg(sys: "snapshot", fmt: "%s\tm_VelY=%d", aRawData, pObj->m_VelY);
705 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 4, ((const int *)pData)[4], ((const int *)pData)[4]);
706 dbg_msg(sys: "snapshot", fmt: "%s\tm_Type=%d (min=0 max=NUM_WEAPONS-1(%d))", aRawData, pObj->m_Type, (int)NUM_WEAPONS-1);
707 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 5, ((const int *)pData)[5], ((const int *)pData)[5]);
708 dbg_msg(sys: "snapshot", fmt: "%s\tm_StartTick=%d (NetTick)", aRawData, pObj->m_StartTick);
709 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 6, ((const int *)pData)[6], ((const int *)pData)[6]);
710 dbg_msg(sys: "snapshot", fmt: "%s\tm_Owner=%d (min=-1 max=MAX_CLIENTS-1(%d))", aRawData, pObj->m_Owner, (int)MAX_CLIENTS-1);
711 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 7, ((const int *)pData)[7], ((const int *)pData)[7]);
712 dbg_msg(sys: "snapshot", fmt: "%s\tm_SwitchNumber=%d", aRawData, pObj->m_SwitchNumber);
713 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 8, ((const int *)pData)[8], ((const int *)pData)[8]);
714 dbg_msg(sys: "snapshot", fmt: "%s\tm_TuneZone=%d", aRawData, pObj->m_TuneZone);
715 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 9, ((const int *)pData)[9], ((const int *)pData)[9]);
716 dbg_msg(sys: "snapshot", fmt: "%s\tm_Flags=%d", aRawData, pObj->m_Flags);
717 return 0;
718 };
719
720 case NETOBJTYPE_DDNETPICKUP:
721 {
722 CNetObj_DDNetPickup *pObj = (CNetObj_DDNetPickup *)pData;
723 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 0, ((const int *)pData)[0], ((const int *)pData)[0]);
724 dbg_msg(sys: "snapshot", fmt: "%s\tm_X=%d", aRawData, pObj->m_X);
725 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 1, ((const int *)pData)[1], ((const int *)pData)[1]);
726 dbg_msg(sys: "snapshot", fmt: "%s\tm_Y=%d", aRawData, pObj->m_Y);
727 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 2, ((const int *)pData)[2], ((const int *)pData)[2]);
728 dbg_msg(sys: "snapshot", fmt: "%s\tm_Type=%d (min=0 max=max_int(%d))", aRawData, pObj->m_Type, (int)max_int);
729 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 3, ((const int *)pData)[3], ((const int *)pData)[3]);
730 dbg_msg(sys: "snapshot", fmt: "%s\tm_Subtype=%d (min=0 max=max_int(%d))", aRawData, pObj->m_Subtype, (int)max_int);
731 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 4, ((const int *)pData)[4], ((const int *)pData)[4]);
732 dbg_msg(sys: "snapshot", fmt: "%s\tm_SwitchNumber=%d", aRawData, pObj->m_SwitchNumber);
733 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 5, ((const int *)pData)[5], ((const int *)pData)[5]);
734 dbg_msg(sys: "snapshot", fmt: "%s\tm_Flags=%d", aRawData, pObj->m_Flags);
735 return 0;
736 };
737
738 case NETOBJTYPE_DDNETSPECTATORINFO:
739 {
740 CNetObj_DDNetSpectatorInfo *pObj = (CNetObj_DDNetSpectatorInfo *)pData;
741 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 0, ((const int *)pData)[0], ((const int *)pData)[0]);
742 dbg_msg(sys: "snapshot", fmt: "%s\tm_HasCameraInfo=%d (min=0 max=1)", aRawData, pObj->m_HasCameraInfo);
743 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 1, ((const int *)pData)[1], ((const int *)pData)[1]);
744 dbg_msg(sys: "snapshot", fmt: "%s\tm_Zoom=%d (min=0 max=max_int(%d))", aRawData, pObj->m_Zoom, (int)max_int);
745 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 2, ((const int *)pData)[2], ((const int *)pData)[2]);
746 dbg_msg(sys: "snapshot", fmt: "%s\tm_Deadzone=%d (min=0 max=max_int(%d))", aRawData, pObj->m_Deadzone, (int)max_int);
747 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 3, ((const int *)pData)[3], ((const int *)pData)[3]);
748 dbg_msg(sys: "snapshot", fmt: "%s\tm_FollowFactor=%d (min=0 max=max_int(%d))", aRawData, pObj->m_FollowFactor, (int)max_int);
749 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 4, ((const int *)pData)[4], ((const int *)pData)[4]);
750 dbg_msg(sys: "snapshot", fmt: "%s\tm_SpectatorCount=%d (min=0 max=MAX_CLIENTS-1(%d))", aRawData, pObj->m_SpectatorCount, (int)MAX_CLIENTS-1);
751 return 0;
752 };
753
754 case NETOBJTYPE_SPECTATORCOUNT:
755 {
756 CNetObj_SpectatorCount *pObj = (CNetObj_SpectatorCount *)pData;
757 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 0, ((const int *)pData)[0], ((const int *)pData)[0]);
758 dbg_msg(sys: "snapshot", fmt: "%s\tm_NumSpectators=%d (min=0 max=max_int(%d))", aRawData, pObj->m_NumSpectators, (int)max_int);
759 return 0;
760 };
761
762 case NETEVENTTYPE_COMMON:
763 {
764 CNetEvent_Common *pObj = (CNetEvent_Common *)pData;
765 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 0, ((const int *)pData)[0], ((const int *)pData)[0]);
766 dbg_msg(sys: "snapshot", fmt: "%s\tm_X=%d", aRawData, pObj->m_X);
767 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 1, ((const int *)pData)[1], ((const int *)pData)[1]);
768 dbg_msg(sys: "snapshot", fmt: "%s\tm_Y=%d", aRawData, pObj->m_Y);
769 return 0;
770 };
771
772 case NETEVENTTYPE_EXPLOSION:
773 {
774 CNetEvent_Explosion *pObj = (CNetEvent_Explosion *)pData;
775 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 0, ((const int *)pData)[0], ((const int *)pData)[0]);
776 dbg_msg(sys: "snapshot", fmt: "%s\tm_X=%d", aRawData, pObj->m_X);
777 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 1, ((const int *)pData)[1], ((const int *)pData)[1]);
778 dbg_msg(sys: "snapshot", fmt: "%s\tm_Y=%d", aRawData, pObj->m_Y);
779 return 0;
780 };
781
782 case NETEVENTTYPE_SPAWN:
783 {
784 CNetEvent_Spawn *pObj = (CNetEvent_Spawn *)pData;
785 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 0, ((const int *)pData)[0], ((const int *)pData)[0]);
786 dbg_msg(sys: "snapshot", fmt: "%s\tm_X=%d", aRawData, pObj->m_X);
787 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 1, ((const int *)pData)[1], ((const int *)pData)[1]);
788 dbg_msg(sys: "snapshot", fmt: "%s\tm_Y=%d", aRawData, pObj->m_Y);
789 return 0;
790 };
791
792 case NETEVENTTYPE_HAMMERHIT:
793 {
794 CNetEvent_HammerHit *pObj = (CNetEvent_HammerHit *)pData;
795 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 0, ((const int *)pData)[0], ((const int *)pData)[0]);
796 dbg_msg(sys: "snapshot", fmt: "%s\tm_X=%d", aRawData, pObj->m_X);
797 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 1, ((const int *)pData)[1], ((const int *)pData)[1]);
798 dbg_msg(sys: "snapshot", fmt: "%s\tm_Y=%d", aRawData, pObj->m_Y);
799 return 0;
800 };
801
802 case NETEVENTTYPE_DEATH:
803 {
804 CNetEvent_Death *pObj = (CNetEvent_Death *)pData;
805 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 0, ((const int *)pData)[0], ((const int *)pData)[0]);
806 dbg_msg(sys: "snapshot", fmt: "%s\tm_X=%d", aRawData, pObj->m_X);
807 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 1, ((const int *)pData)[1], ((const int *)pData)[1]);
808 dbg_msg(sys: "snapshot", fmt: "%s\tm_Y=%d", aRawData, pObj->m_Y);
809 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 2, ((const int *)pData)[2], ((const int *)pData)[2]);
810 dbg_msg(sys: "snapshot", fmt: "%s\tm_ClientId=%d (min=0 max=MAX_CLIENTS-1(%d))", aRawData, pObj->m_ClientId, (int)MAX_CLIENTS-1);
811 return 0;
812 };
813
814 case NETEVENTTYPE_SOUNDGLOBAL:
815 {
816 CNetEvent_SoundGlobal *pObj = (CNetEvent_SoundGlobal *)pData;
817 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 0, ((const int *)pData)[0], ((const int *)pData)[0]);
818 dbg_msg(sys: "snapshot", fmt: "%s\tm_X=%d", aRawData, pObj->m_X);
819 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 1, ((const int *)pData)[1], ((const int *)pData)[1]);
820 dbg_msg(sys: "snapshot", fmt: "%s\tm_Y=%d", aRawData, pObj->m_Y);
821 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 2, ((const int *)pData)[2], ((const int *)pData)[2]);
822 dbg_msg(sys: "snapshot", fmt: "%s\tm_SoundId=%d (min=0 max=NUM_SOUNDS-1(%d))", aRawData, pObj->m_SoundId, (int)NUM_SOUNDS-1);
823 return 0;
824 };
825
826 case NETEVENTTYPE_SOUNDWORLD:
827 {
828 CNetEvent_SoundWorld *pObj = (CNetEvent_SoundWorld *)pData;
829 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 0, ((const int *)pData)[0], ((const int *)pData)[0]);
830 dbg_msg(sys: "snapshot", fmt: "%s\tm_X=%d", aRawData, pObj->m_X);
831 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 1, ((const int *)pData)[1], ((const int *)pData)[1]);
832 dbg_msg(sys: "snapshot", fmt: "%s\tm_Y=%d", aRawData, pObj->m_Y);
833 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 2, ((const int *)pData)[2], ((const int *)pData)[2]);
834 dbg_msg(sys: "snapshot", fmt: "%s\tm_SoundId=%d (min=0 max=NUM_SOUNDS-1(%d))", aRawData, pObj->m_SoundId, (int)NUM_SOUNDS-1);
835 return 0;
836 };
837
838 case NETEVENTTYPE_DAMAGEIND:
839 {
840 CNetEvent_DamageInd *pObj = (CNetEvent_DamageInd *)pData;
841 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 0, ((const int *)pData)[0], ((const int *)pData)[0]);
842 dbg_msg(sys: "snapshot", fmt: "%s\tm_X=%d", aRawData, pObj->m_X);
843 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 1, ((const int *)pData)[1], ((const int *)pData)[1]);
844 dbg_msg(sys: "snapshot", fmt: "%s\tm_Y=%d", aRawData, pObj->m_Y);
845 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 2, ((const int *)pData)[2], ((const int *)pData)[2]);
846 dbg_msg(sys: "snapshot", fmt: "%s\tm_Angle=%d", aRawData, pObj->m_Angle);
847 return 0;
848 };
849
850 case NETEVENTTYPE_BIRTHDAY:
851 {
852 CNetEvent_Birthday *pObj = (CNetEvent_Birthday *)pData;
853 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 0, ((const int *)pData)[0], ((const int *)pData)[0]);
854 dbg_msg(sys: "snapshot", fmt: "%s\tm_X=%d", aRawData, pObj->m_X);
855 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 1, ((const int *)pData)[1], ((const int *)pData)[1]);
856 dbg_msg(sys: "snapshot", fmt: "%s\tm_Y=%d", aRawData, pObj->m_Y);
857 return 0;
858 };
859
860 case NETEVENTTYPE_FINISH:
861 {
862 CNetEvent_Finish *pObj = (CNetEvent_Finish *)pData;
863 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 0, ((const int *)pData)[0], ((const int *)pData)[0]);
864 dbg_msg(sys: "snapshot", fmt: "%s\tm_X=%d", aRawData, pObj->m_X);
865 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 1, ((const int *)pData)[1], ((const int *)pData)[1]);
866 dbg_msg(sys: "snapshot", fmt: "%s\tm_Y=%d", aRawData, pObj->m_Y);
867 return 0;
868 };
869
870 case NETOBJTYPE_MYOWNEVENT:
871 {
872 CNetObj_MyOwnEvent *pObj = (CNetObj_MyOwnEvent *)pData;
873 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 0, ((const int *)pData)[0], ((const int *)pData)[0]);
874 dbg_msg(sys: "snapshot", fmt: "%s\tm_Test=%d", aRawData, pObj->m_Test);
875 return 0;
876 };
877
878 case NETOBJTYPE_SPECCHAR:
879 {
880 CNetObj_SpecChar *pObj = (CNetObj_SpecChar *)pData;
881 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 0, ((const int *)pData)[0], ((const int *)pData)[0]);
882 dbg_msg(sys: "snapshot", fmt: "%s\tm_X=%d", aRawData, pObj->m_X);
883 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 1, ((const int *)pData)[1], ((const int *)pData)[1]);
884 dbg_msg(sys: "snapshot", fmt: "%s\tm_Y=%d", aRawData, pObj->m_Y);
885 return 0;
886 };
887
888 case NETOBJTYPE_SWITCHSTATE:
889 {
890 CNetObj_SwitchState *pObj = (CNetObj_SwitchState *)pData;
891 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 0, ((const int *)pData)[0], ((const int *)pData)[0]);
892 dbg_msg(sys: "snapshot", fmt: "%s\tm_HighestSwitchNumber=%d", aRawData, pObj->m_HighestSwitchNumber);
893 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 1, ((const int *)pData)[1], ((const int *)pData)[1]);
894 dbg_msg(sys: "snapshot", fmt: "%s\tm_aStatus[0]=%d", aRawData, pObj->m_aStatus[0]);
895 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 2, ((const int *)pData)[2], ((const int *)pData)[2]);
896 dbg_msg(sys: "snapshot", fmt: "%s\tm_aStatus[1]=%d", aRawData, pObj->m_aStatus[1]);
897 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 3, ((const int *)pData)[3], ((const int *)pData)[3]);
898 dbg_msg(sys: "snapshot", fmt: "%s\tm_aStatus[2]=%d", aRawData, pObj->m_aStatus[2]);
899 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 4, ((const int *)pData)[4], ((const int *)pData)[4]);
900 dbg_msg(sys: "snapshot", fmt: "%s\tm_aStatus[3]=%d", aRawData, pObj->m_aStatus[3]);
901 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 5, ((const int *)pData)[5], ((const int *)pData)[5]);
902 dbg_msg(sys: "snapshot", fmt: "%s\tm_aStatus[4]=%d", aRawData, pObj->m_aStatus[4]);
903 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 6, ((const int *)pData)[6], ((const int *)pData)[6]);
904 dbg_msg(sys: "snapshot", fmt: "%s\tm_aStatus[5]=%d", aRawData, pObj->m_aStatus[5]);
905 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 7, ((const int *)pData)[7], ((const int *)pData)[7]);
906 dbg_msg(sys: "snapshot", fmt: "%s\tm_aStatus[6]=%d", aRawData, pObj->m_aStatus[6]);
907 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 8, ((const int *)pData)[8], ((const int *)pData)[8]);
908 dbg_msg(sys: "snapshot", fmt: "%s\tm_aStatus[7]=%d", aRawData, pObj->m_aStatus[7]);
909 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 9, ((const int *)pData)[9], ((const int *)pData)[9]);
910 dbg_msg(sys: "snapshot", fmt: "%s\tm_aSwitchNumbers[0]=%d", aRawData, pObj->m_aSwitchNumbers[0]);
911 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 10, ((const int *)pData)[10], ((const int *)pData)[10]);
912 dbg_msg(sys: "snapshot", fmt: "%s\tm_aSwitchNumbers[1]=%d", aRawData, pObj->m_aSwitchNumbers[1]);
913 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 11, ((const int *)pData)[11], ((const int *)pData)[11]);
914 dbg_msg(sys: "snapshot", fmt: "%s\tm_aSwitchNumbers[2]=%d", aRawData, pObj->m_aSwitchNumbers[2]);
915 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 12, ((const int *)pData)[12], ((const int *)pData)[12]);
916 dbg_msg(sys: "snapshot", fmt: "%s\tm_aSwitchNumbers[3]=%d", aRawData, pObj->m_aSwitchNumbers[3]);
917 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 13, ((const int *)pData)[13], ((const int *)pData)[13]);
918 dbg_msg(sys: "snapshot", fmt: "%s\tm_aEndTicks[0]=%d", aRawData, pObj->m_aEndTicks[0]);
919 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 14, ((const int *)pData)[14], ((const int *)pData)[14]);
920 dbg_msg(sys: "snapshot", fmt: "%s\tm_aEndTicks[1]=%d", aRawData, pObj->m_aEndTicks[1]);
921 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 15, ((const int *)pData)[15], ((const int *)pData)[15]);
922 dbg_msg(sys: "snapshot", fmt: "%s\tm_aEndTicks[2]=%d", aRawData, pObj->m_aEndTicks[2]);
923 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 16, ((const int *)pData)[16], ((const int *)pData)[16]);
924 dbg_msg(sys: "snapshot", fmt: "%s\tm_aEndTicks[3]=%d", aRawData, pObj->m_aEndTicks[3]);
925 return 0;
926 };
927
928 case NETOBJTYPE_ENTITYEX:
929 {
930 CNetObj_EntityEx *pObj = (CNetObj_EntityEx *)pData;
931 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 0, ((const int *)pData)[0], ((const int *)pData)[0]);
932 dbg_msg(sys: "snapshot", fmt: "%s\tm_SwitchNumber=%d", aRawData, pObj->m_SwitchNumber);
933 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 1, ((const int *)pData)[1], ((const int *)pData)[1]);
934 dbg_msg(sys: "snapshot", fmt: "%s\tm_Layer=%d", aRawData, pObj->m_Layer);
935 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 2, ((const int *)pData)[2], ((const int *)pData)[2]);
936 dbg_msg(sys: "snapshot", fmt: "%s\tm_EntityClass=%d", aRawData, pObj->m_EntityClass);
937 return 0;
938 };
939
940 case NETEVENTTYPE_MAPSOUNDWORLD:
941 {
942 CNetEvent_MapSoundWorld *pObj = (CNetEvent_MapSoundWorld *)pData;
943 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 0, ((const int *)pData)[0], ((const int *)pData)[0]);
944 dbg_msg(sys: "snapshot", fmt: "%s\tm_X=%d", aRawData, pObj->m_X);
945 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 1, ((const int *)pData)[1], ((const int *)pData)[1]);
946 dbg_msg(sys: "snapshot", fmt: "%s\tm_Y=%d", aRawData, pObj->m_Y);
947 str_format(buffer: aRawData, buffer_size: sizeof(aRawData), format: "\t\t%3d %12d\t%08x", 2, ((const int *)pData)[2], ((const int *)pData)[2]);
948 dbg_msg(sys: "snapshot", fmt: "%s\tm_SoundId=%d", aRawData, pObj->m_SoundId);
949 return 0;
950 };
951
952 }
953 return -1;
954};
955
956void *CNetObjHandler::SecureUnpackObj(int Type, CUnpacker *pUnpacker)
957{
958 m_pObjFailedOn = 0;
959 switch(Type)
960 {
961 case NETOBJTYPE_EX:
962 {
963 const unsigned char *pPtr = pUnpacker->GetRaw(Size: sizeof(CUuid));
964 if(pPtr != 0)
965 {
966 mem_copy(dest: m_aUnpackedData, source: pPtr, size: sizeof(CUuid));
967 }
968 break;
969 }
970
971 case NETOBJTYPE_PLAYERINPUT:
972 {
973 CNetObj_PlayerInput *pData = (CNetObj_PlayerInput *)m_aUnpackedData;
974 pData->m_Direction = pUnpacker->GetUncompressedInt();
975 pData->m_TargetX = pUnpacker->GetUncompressedInt();
976 pData->m_TargetY = pUnpacker->GetUncompressedInt();
977 pData->m_Jump = pUnpacker->GetUncompressedInt();
978 pData->m_Fire = pUnpacker->GetUncompressedInt();
979 pData->m_Hook = pUnpacker->GetUncompressedInt();
980 pData->m_PlayerFlags = pUnpacker->GetUncompressedInt();
981 pData->m_WantedWeapon = pUnpacker->GetUncompressedInt();
982 pData->m_NextWeapon = pUnpacker->GetUncompressedInt();
983 pData->m_PrevWeapon = pUnpacker->GetUncompressedInt();
984 pData->m_PlayerFlags = ClampInt(pErrorMsg: "m_PlayerFlags", Value: pData->m_PlayerFlags, Min: 0, Max: 256);
985 } break;
986
987 case NETOBJTYPE_PROJECTILE:
988 {
989 CNetObj_Projectile *pData = (CNetObj_Projectile *)m_aUnpackedData;
990 pData->m_X = pUnpacker->GetUncompressedInt();
991 pData->m_Y = pUnpacker->GetUncompressedInt();
992 pData->m_VelX = pUnpacker->GetUncompressedInt();
993 pData->m_VelY = pUnpacker->GetUncompressedInt();
994 pData->m_Type = pUnpacker->GetUncompressedInt();
995 pData->m_StartTick = pUnpacker->GetUncompressedInt();
996 pData->m_Type = ClampInt(pErrorMsg: "m_Type", Value: pData->m_Type, Min: 0, Max: NUM_WEAPONS-1);
997 } break;
998
999 case NETOBJTYPE_LASER:
1000 {
1001 CNetObj_Laser *pData = (CNetObj_Laser *)m_aUnpackedData;
1002 pData->m_X = pUnpacker->GetUncompressedInt();
1003 pData->m_Y = pUnpacker->GetUncompressedInt();
1004 pData->m_FromX = pUnpacker->GetUncompressedInt();
1005 pData->m_FromY = pUnpacker->GetUncompressedInt();
1006 pData->m_StartTick = pUnpacker->GetUncompressedInt();
1007 } break;
1008
1009 case NETOBJTYPE_PICKUP:
1010 {
1011 CNetObj_Pickup *pData = (CNetObj_Pickup *)m_aUnpackedData;
1012 pData->m_X = pUnpacker->GetUncompressedInt();
1013 pData->m_Y = pUnpacker->GetUncompressedInt();
1014 pData->m_Type = pUnpacker->GetUncompressedInt();
1015 pData->m_Subtype = pUnpacker->GetUncompressedInt();
1016 pData->m_Type = ClampInt(pErrorMsg: "m_Type", Value: pData->m_Type, Min: 0, Max: max_int);
1017 pData->m_Subtype = ClampInt(pErrorMsg: "m_Subtype", Value: pData->m_Subtype, Min: 0, Max: max_int);
1018 } break;
1019
1020 case NETOBJTYPE_FLAG:
1021 {
1022 CNetObj_Flag *pData = (CNetObj_Flag *)m_aUnpackedData;
1023 pData->m_X = pUnpacker->GetUncompressedInt();
1024 pData->m_Y = pUnpacker->GetUncompressedInt();
1025 pData->m_Team = pUnpacker->GetUncompressedInt();
1026 pData->m_Team = ClampInt(pErrorMsg: "m_Team", Value: pData->m_Team, Min: TEAM_RED, Max: TEAM_BLUE);
1027 } break;
1028
1029 case NETOBJTYPE_GAMEINFO:
1030 {
1031 CNetObj_GameInfo *pData = (CNetObj_GameInfo *)m_aUnpackedData;
1032 pData->m_GameFlags = pUnpacker->GetUncompressedInt();
1033 pData->m_GameStateFlags = pUnpacker->GetUncompressedInt();
1034 pData->m_RoundStartTick = pUnpacker->GetUncompressedInt();
1035 pData->m_WarmupTimer = pUnpacker->GetUncompressedInt();
1036 pData->m_ScoreLimit = pUnpacker->GetUncompressedInt();
1037 pData->m_TimeLimit = pUnpacker->GetUncompressedInt();
1038 pData->m_RoundNum = pUnpacker->GetUncompressedInt();
1039 pData->m_RoundCurrent = pUnpacker->GetUncompressedInt();
1040 pData->m_GameFlags = ClampInt(pErrorMsg: "m_GameFlags", Value: pData->m_GameFlags, Min: 0, Max: 256);
1041 pData->m_GameStateFlags = ClampInt(pErrorMsg: "m_GameStateFlags", Value: pData->m_GameStateFlags, Min: 0, Max: 256);
1042 pData->m_WarmupTimer = ClampInt(pErrorMsg: "m_WarmupTimer", Value: pData->m_WarmupTimer, Min: min_int, Max: max_int);
1043 pData->m_ScoreLimit = ClampInt(pErrorMsg: "m_ScoreLimit", Value: pData->m_ScoreLimit, Min: 0, Max: max_int);
1044 pData->m_TimeLimit = ClampInt(pErrorMsg: "m_TimeLimit", Value: pData->m_TimeLimit, Min: 0, Max: max_int);
1045 pData->m_RoundNum = ClampInt(pErrorMsg: "m_RoundNum", Value: pData->m_RoundNum, Min: 0, Max: max_int);
1046 pData->m_RoundCurrent = ClampInt(pErrorMsg: "m_RoundCurrent", Value: pData->m_RoundCurrent, Min: 0, Max: max_int);
1047 } break;
1048
1049 case NETOBJTYPE_GAMEDATA:
1050 {
1051 CNetObj_GameData *pData = (CNetObj_GameData *)m_aUnpackedData;
1052 pData->m_TeamscoreRed = pUnpacker->GetUncompressedInt();
1053 pData->m_TeamscoreBlue = pUnpacker->GetUncompressedInt();
1054 pData->m_FlagCarrierRed = pUnpacker->GetUncompressedInt();
1055 pData->m_FlagCarrierBlue = pUnpacker->GetUncompressedInt();
1056 pData->m_FlagCarrierRed = ClampInt(pErrorMsg: "m_FlagCarrierRed", Value: pData->m_FlagCarrierRed, Min: FLAG_MISSING, Max: MAX_CLIENTS-1);
1057 pData->m_FlagCarrierBlue = ClampInt(pErrorMsg: "m_FlagCarrierBlue", Value: pData->m_FlagCarrierBlue, Min: FLAG_MISSING, Max: MAX_CLIENTS-1);
1058 } break;
1059
1060 case NETOBJTYPE_CHARACTERCORE:
1061 {
1062 CNetObj_CharacterCore *pData = (CNetObj_CharacterCore *)m_aUnpackedData;
1063 pData->m_Tick = pUnpacker->GetUncompressedInt();
1064 pData->m_X = pUnpacker->GetUncompressedInt();
1065 pData->m_Y = pUnpacker->GetUncompressedInt();
1066 pData->m_VelX = pUnpacker->GetUncompressedInt();
1067 pData->m_VelY = pUnpacker->GetUncompressedInt();
1068 pData->m_Angle = pUnpacker->GetUncompressedInt();
1069 pData->m_Direction = pUnpacker->GetUncompressedInt();
1070 pData->m_Jumped = pUnpacker->GetUncompressedInt();
1071 pData->m_HookedPlayer = pUnpacker->GetUncompressedInt();
1072 pData->m_HookState = pUnpacker->GetUncompressedInt();
1073 pData->m_HookTick = pUnpacker->GetUncompressedInt();
1074 pData->m_HookX = pUnpacker->GetUncompressedInt();
1075 pData->m_HookY = pUnpacker->GetUncompressedInt();
1076 pData->m_HookDx = pUnpacker->GetUncompressedInt();
1077 pData->m_HookDy = pUnpacker->GetUncompressedInt();
1078 pData->m_Direction = ClampInt(pErrorMsg: "m_Direction", Value: pData->m_Direction, Min: -1, Max: 1);
1079 pData->m_Jumped = ClampInt(pErrorMsg: "m_Jumped", Value: pData->m_Jumped, Min: 0, Max: 3);
1080 pData->m_HookedPlayer = ClampInt(pErrorMsg: "m_HookedPlayer", Value: pData->m_HookedPlayer, Min: -1, Max: MAX_CLIENTS-1);
1081 pData->m_HookState = ClampInt(pErrorMsg: "m_HookState", Value: pData->m_HookState, Min: -1, Max: 5);
1082 } break;
1083
1084 case NETOBJTYPE_CHARACTER:
1085 {
1086 CNetObj_Character *pData = (CNetObj_Character *)m_aUnpackedData;
1087 pData->m_Tick = pUnpacker->GetUncompressedInt();
1088 pData->m_X = pUnpacker->GetUncompressedInt();
1089 pData->m_Y = pUnpacker->GetUncompressedInt();
1090 pData->m_VelX = pUnpacker->GetUncompressedInt();
1091 pData->m_VelY = pUnpacker->GetUncompressedInt();
1092 pData->m_Angle = pUnpacker->GetUncompressedInt();
1093 pData->m_Direction = pUnpacker->GetUncompressedInt();
1094 pData->m_Jumped = pUnpacker->GetUncompressedInt();
1095 pData->m_HookedPlayer = pUnpacker->GetUncompressedInt();
1096 pData->m_HookState = pUnpacker->GetUncompressedInt();
1097 pData->m_HookTick = pUnpacker->GetUncompressedInt();
1098 pData->m_HookX = pUnpacker->GetUncompressedInt();
1099 pData->m_HookY = pUnpacker->GetUncompressedInt();
1100 pData->m_HookDx = pUnpacker->GetUncompressedInt();
1101 pData->m_HookDy = pUnpacker->GetUncompressedInt();
1102 pData->m_PlayerFlags = pUnpacker->GetUncompressedInt();
1103 pData->m_Health = pUnpacker->GetUncompressedInt();
1104 pData->m_Armor = pUnpacker->GetUncompressedInt();
1105 pData->m_AmmoCount = pUnpacker->GetUncompressedInt();
1106 pData->m_Weapon = pUnpacker->GetUncompressedInt();
1107 pData->m_Emote = pUnpacker->GetUncompressedInt();
1108 pData->m_AttackTick = pUnpacker->GetUncompressedInt();
1109 pData->m_Direction = ClampInt(pErrorMsg: "m_Direction", Value: pData->m_Direction, Min: -1, Max: 1);
1110 pData->m_Jumped = ClampInt(pErrorMsg: "m_Jumped", Value: pData->m_Jumped, Min: 0, Max: 3);
1111 pData->m_HookedPlayer = ClampInt(pErrorMsg: "m_HookedPlayer", Value: pData->m_HookedPlayer, Min: -1, Max: MAX_CLIENTS-1);
1112 pData->m_HookState = ClampInt(pErrorMsg: "m_HookState", Value: pData->m_HookState, Min: -1, Max: 5);
1113 pData->m_PlayerFlags = ClampInt(pErrorMsg: "m_PlayerFlags", Value: pData->m_PlayerFlags, Min: 0, Max: 256);
1114 pData->m_Health = ClampInt(pErrorMsg: "m_Health", Value: pData->m_Health, Min: 0, Max: 10);
1115 pData->m_Armor = ClampInt(pErrorMsg: "m_Armor", Value: pData->m_Armor, Min: 0, Max: 10);
1116 pData->m_AmmoCount = ClampInt(pErrorMsg: "m_AmmoCount", Value: pData->m_AmmoCount, Min: -1, Max: 10);
1117 pData->m_Weapon = ClampInt(pErrorMsg: "m_Weapon", Value: pData->m_Weapon, Min: -1, Max: NUM_WEAPONS-1);
1118 pData->m_Emote = ClampInt(pErrorMsg: "m_Emote", Value: pData->m_Emote, Min: 0, Max: 6);
1119 pData->m_AttackTick = ClampInt(pErrorMsg: "m_AttackTick", Value: pData->m_AttackTick, Min: 0, Max: max_int);
1120 } break;
1121
1122 case NETOBJTYPE_PLAYERINFO:
1123 {
1124 CNetObj_PlayerInfo *pData = (CNetObj_PlayerInfo *)m_aUnpackedData;
1125 pData->m_Local = pUnpacker->GetUncompressedInt();
1126 pData->m_ClientId = pUnpacker->GetUncompressedInt();
1127 pData->m_Team = pUnpacker->GetUncompressedInt();
1128 pData->m_Score = pUnpacker->GetUncompressedInt();
1129 pData->m_Latency = pUnpacker->GetUncompressedInt();
1130 pData->m_Local = ClampInt(pErrorMsg: "m_Local", Value: pData->m_Local, Min: 0, Max: 1);
1131 pData->m_ClientId = ClampInt(pErrorMsg: "m_ClientId", Value: pData->m_ClientId, Min: 0, Max: MAX_CLIENTS-1);
1132 pData->m_Team = ClampInt(pErrorMsg: "m_Team", Value: pData->m_Team, Min: TEAM_SPECTATORS, Max: TEAM_BLUE);
1133 } break;
1134
1135 case NETOBJTYPE_CLIENTINFO:
1136 {
1137 CNetObj_ClientInfo *pData = (CNetObj_ClientInfo *)m_aUnpackedData;
1138 pData->m_aName[0] = pUnpacker->GetUncompressedInt();
1139 pData->m_aName[1] = pUnpacker->GetUncompressedInt();
1140 pData->m_aName[2] = pUnpacker->GetUncompressedInt();
1141 pData->m_aName[3] = pUnpacker->GetUncompressedInt();
1142 pData->m_aClan[0] = pUnpacker->GetUncompressedInt();
1143 pData->m_aClan[1] = pUnpacker->GetUncompressedInt();
1144 pData->m_aClan[2] = pUnpacker->GetUncompressedInt();
1145 pData->m_Country = pUnpacker->GetUncompressedInt();
1146 pData->m_aSkin[0] = pUnpacker->GetUncompressedInt();
1147 pData->m_aSkin[1] = pUnpacker->GetUncompressedInt();
1148 pData->m_aSkin[2] = pUnpacker->GetUncompressedInt();
1149 pData->m_aSkin[3] = pUnpacker->GetUncompressedInt();
1150 pData->m_aSkin[4] = pUnpacker->GetUncompressedInt();
1151 pData->m_aSkin[5] = pUnpacker->GetUncompressedInt();
1152 pData->m_UseCustomColor = pUnpacker->GetUncompressedInt();
1153 pData->m_ColorBody = pUnpacker->GetUncompressedInt();
1154 pData->m_ColorFeet = pUnpacker->GetUncompressedInt();
1155 pData->m_UseCustomColor = ClampInt(pErrorMsg: "m_UseCustomColor", Value: pData->m_UseCustomColor, Min: 0, Max: 1);
1156 } break;
1157
1158 case NETOBJTYPE_SPECTATORINFO:
1159 {
1160 CNetObj_SpectatorInfo *pData = (CNetObj_SpectatorInfo *)m_aUnpackedData;
1161 pData->m_SpectatorId = pUnpacker->GetUncompressedInt();
1162 pData->m_X = pUnpacker->GetUncompressedInt();
1163 pData->m_Y = pUnpacker->GetUncompressedInt();
1164 pData->m_SpectatorId = ClampInt(pErrorMsg: "m_SpectatorId", Value: pData->m_SpectatorId, Min: SPEC_FREEVIEW, Max: MAX_CLIENTS-1);
1165 } break;
1166
1167 case NETOBJTYPE_MYOWNOBJECT:
1168 {
1169 CNetObj_MyOwnObject *pData = (CNetObj_MyOwnObject *)m_aUnpackedData;
1170 pData->m_Test = pUnpacker->GetUncompressedInt();
1171 } break;
1172
1173 case NETOBJTYPE_DDNETCHARACTER:
1174 {
1175 CNetObj_DDNetCharacter *pData = (CNetObj_DDNetCharacter *)m_aUnpackedData;
1176 pData->m_Flags = pUnpacker->GetUncompressedIntOrDefault(Default: 0);
1177 pData->m_FreezeEnd = pUnpacker->GetUncompressedIntOrDefault(Default: 0);
1178 pData->m_Jumps = pUnpacker->GetUncompressedIntOrDefault(Default: 2);
1179 pData->m_TeleCheckpoint = pUnpacker->GetUncompressedIntOrDefault(Default: -1);
1180 pData->m_StrongWeakId = pUnpacker->GetUncompressedIntOrDefault(Default: 0);
1181 pData->m_JumpedTotal = pUnpacker->GetUncompressedIntOrDefault(Default: -1);
1182 pData->m_NinjaActivationTick = pUnpacker->GetUncompressedIntOrDefault(Default: -1);
1183 pData->m_FreezeStart = pUnpacker->GetUncompressedIntOrDefault(Default: -1);
1184 pData->m_TargetX = pUnpacker->GetUncompressedIntOrDefault(Default: 0);
1185 pData->m_TargetY = pUnpacker->GetUncompressedIntOrDefault(Default: 0);
1186 pData->m_TuneZoneOverride = pUnpacker->GetUncompressedIntOrDefault(Default: TuneZone::OVERRIDE_NONE);
1187 pData->m_Jumps = ClampInt(pErrorMsg: "m_Jumps", Value: pData->m_Jumps, Min: -1, Max: 255);
1188 pData->m_StrongWeakId = ClampInt(pErrorMsg: "m_StrongWeakId", Value: pData->m_StrongWeakId, Min: 0, Max: MAX_CLIENTS-1);
1189 pData->m_JumpedTotal = ClampInt(pErrorMsg: "m_JumpedTotal", Value: pData->m_JumpedTotal, Min: -1, Max: 255);
1190 pData->m_TuneZoneOverride = ClampInt(pErrorMsg: "m_TuneZoneOverride", Value: pData->m_TuneZoneOverride, Min: TuneZone::OVERRIDE_NONE, Max: TuneZone::NUM-1);
1191 } break;
1192
1193 case NETOBJTYPE_DDNETPLAYER:
1194 {
1195 CNetObj_DDNetPlayer *pData = (CNetObj_DDNetPlayer *)m_aUnpackedData;
1196 pData->m_Flags = pUnpacker->GetUncompressedInt();
1197 pData->m_AuthLevel = pUnpacker->GetUncompressedInt();
1198 pData->m_AuthLevel = ClampInt(pErrorMsg: "m_AuthLevel", Value: pData->m_AuthLevel, Min: AUTHED_NO, Max: AUTHED_ADMIN);
1199 } break;
1200
1201 case NETOBJTYPE_GAMEINFOEX:
1202 {
1203 CNetObj_GameInfoEx *pData = (CNetObj_GameInfoEx *)m_aUnpackedData;
1204 pData->m_Flags = pUnpacker->GetUncompressedIntOrDefault(Default: 0);
1205 pData->m_Version = pUnpacker->GetUncompressedIntOrDefault(Default: 0);
1206 pData->m_Flags2 = pUnpacker->GetUncompressedIntOrDefault(Default: 0);
1207 } break;
1208
1209 case NETOBJTYPE_DDRACEPROJECTILE:
1210 {
1211 CNetObj_DDRaceProjectile *pData = (CNetObj_DDRaceProjectile *)m_aUnpackedData;
1212 pData->m_X = pUnpacker->GetUncompressedInt();
1213 pData->m_Y = pUnpacker->GetUncompressedInt();
1214 pData->m_Angle = pUnpacker->GetUncompressedInt();
1215 pData->m_Data = pUnpacker->GetUncompressedInt();
1216 pData->m_Type = pUnpacker->GetUncompressedInt();
1217 pData->m_StartTick = pUnpacker->GetUncompressedInt();
1218 pData->m_Type = ClampInt(pErrorMsg: "m_Type", Value: pData->m_Type, Min: 0, Max: NUM_WEAPONS-1);
1219 } break;
1220
1221 case NETOBJTYPE_DDNETLASER:
1222 {
1223 CNetObj_DDNetLaser *pData = (CNetObj_DDNetLaser *)m_aUnpackedData;
1224 pData->m_ToX = pUnpacker->GetUncompressedInt();
1225 pData->m_ToY = pUnpacker->GetUncompressedInt();
1226 pData->m_FromX = pUnpacker->GetUncompressedInt();
1227 pData->m_FromY = pUnpacker->GetUncompressedInt();
1228 pData->m_StartTick = pUnpacker->GetUncompressedInt();
1229 pData->m_Owner = pUnpacker->GetUncompressedInt();
1230 pData->m_Type = pUnpacker->GetUncompressedInt();
1231 pData->m_SwitchNumber = pUnpacker->GetUncompressedIntOrDefault(Default: -1);
1232 pData->m_Subtype = pUnpacker->GetUncompressedIntOrDefault(Default: -1);
1233 pData->m_Flags = pUnpacker->GetUncompressedIntOrDefault(Default: 0);
1234 pData->m_Owner = ClampInt(pErrorMsg: "m_Owner", Value: pData->m_Owner, Min: -1, Max: MAX_CLIENTS-1);
1235 } break;
1236
1237 case NETOBJTYPE_DDNETPROJECTILE:
1238 {
1239 CNetObj_DDNetProjectile *pData = (CNetObj_DDNetProjectile *)m_aUnpackedData;
1240 pData->m_X = pUnpacker->GetUncompressedInt();
1241 pData->m_Y = pUnpacker->GetUncompressedInt();
1242 pData->m_VelX = pUnpacker->GetUncompressedInt();
1243 pData->m_VelY = pUnpacker->GetUncompressedInt();
1244 pData->m_Type = pUnpacker->GetUncompressedInt();
1245 pData->m_StartTick = pUnpacker->GetUncompressedInt();
1246 pData->m_Owner = pUnpacker->GetUncompressedInt();
1247 pData->m_SwitchNumber = pUnpacker->GetUncompressedInt();
1248 pData->m_TuneZone = pUnpacker->GetUncompressedInt();
1249 pData->m_Flags = pUnpacker->GetUncompressedInt();
1250 pData->m_Type = ClampInt(pErrorMsg: "m_Type", Value: pData->m_Type, Min: 0, Max: NUM_WEAPONS-1);
1251 pData->m_Owner = ClampInt(pErrorMsg: "m_Owner", Value: pData->m_Owner, Min: -1, Max: MAX_CLIENTS-1);
1252 } break;
1253
1254 case NETOBJTYPE_DDNETPICKUP:
1255 {
1256 CNetObj_DDNetPickup *pData = (CNetObj_DDNetPickup *)m_aUnpackedData;
1257 pData->m_X = pUnpacker->GetUncompressedInt();
1258 pData->m_Y = pUnpacker->GetUncompressedInt();
1259 pData->m_Type = pUnpacker->GetUncompressedInt();
1260 pData->m_Subtype = pUnpacker->GetUncompressedInt();
1261 pData->m_SwitchNumber = pUnpacker->GetUncompressedInt();
1262 pData->m_Flags = pUnpacker->GetUncompressedIntOrDefault(Default: 0);
1263 pData->m_Type = ClampInt(pErrorMsg: "m_Type", Value: pData->m_Type, Min: 0, Max: max_int);
1264 pData->m_Subtype = ClampInt(pErrorMsg: "m_Subtype", Value: pData->m_Subtype, Min: 0, Max: max_int);
1265 } break;
1266
1267 case NETOBJTYPE_DDNETSPECTATORINFO:
1268 {
1269 CNetObj_DDNetSpectatorInfo *pData = (CNetObj_DDNetSpectatorInfo *)m_aUnpackedData;
1270 pData->m_HasCameraInfo = pUnpacker->GetUncompressedInt();
1271 pData->m_Zoom = pUnpacker->GetUncompressedInt();
1272 pData->m_Deadzone = pUnpacker->GetUncompressedInt();
1273 pData->m_FollowFactor = pUnpacker->GetUncompressedInt();
1274 pData->m_SpectatorCount = pUnpacker->GetUncompressedIntOrDefault(Default: 0);
1275 pData->m_HasCameraInfo = ClampInt(pErrorMsg: "m_HasCameraInfo", Value: pData->m_HasCameraInfo, Min: 0, Max: 1);
1276 pData->m_Zoom = ClampInt(pErrorMsg: "m_Zoom", Value: pData->m_Zoom, Min: 0, Max: max_int);
1277 pData->m_Deadzone = ClampInt(pErrorMsg: "m_Deadzone", Value: pData->m_Deadzone, Min: 0, Max: max_int);
1278 pData->m_FollowFactor = ClampInt(pErrorMsg: "m_FollowFactor", Value: pData->m_FollowFactor, Min: 0, Max: max_int);
1279 pData->m_SpectatorCount = ClampInt(pErrorMsg: "m_SpectatorCount", Value: pData->m_SpectatorCount, Min: 0, Max: MAX_CLIENTS-1);
1280 } break;
1281
1282 case NETOBJTYPE_SPECTATORCOUNT:
1283 {
1284 CNetObj_SpectatorCount *pData = (CNetObj_SpectatorCount *)m_aUnpackedData;
1285 pData->m_NumSpectators = pUnpacker->GetUncompressedInt();
1286 pData->m_NumSpectators = ClampInt(pErrorMsg: "m_NumSpectators", Value: pData->m_NumSpectators, Min: 0, Max: max_int);
1287 } break;
1288
1289 case NETEVENTTYPE_COMMON:
1290 {
1291 CNetEvent_Common *pData = (CNetEvent_Common *)m_aUnpackedData;
1292 pData->m_X = pUnpacker->GetUncompressedInt();
1293 pData->m_Y = pUnpacker->GetUncompressedInt();
1294 } break;
1295
1296 case NETEVENTTYPE_EXPLOSION:
1297 {
1298 CNetEvent_Explosion *pData = (CNetEvent_Explosion *)m_aUnpackedData;
1299 pData->m_X = pUnpacker->GetUncompressedInt();
1300 pData->m_Y = pUnpacker->GetUncompressedInt();
1301 } break;
1302
1303 case NETEVENTTYPE_SPAWN:
1304 {
1305 CNetEvent_Spawn *pData = (CNetEvent_Spawn *)m_aUnpackedData;
1306 pData->m_X = pUnpacker->GetUncompressedInt();
1307 pData->m_Y = pUnpacker->GetUncompressedInt();
1308 } break;
1309
1310 case NETEVENTTYPE_HAMMERHIT:
1311 {
1312 CNetEvent_HammerHit *pData = (CNetEvent_HammerHit *)m_aUnpackedData;
1313 pData->m_X = pUnpacker->GetUncompressedInt();
1314 pData->m_Y = pUnpacker->GetUncompressedInt();
1315 } break;
1316
1317 case NETEVENTTYPE_DEATH:
1318 {
1319 CNetEvent_Death *pData = (CNetEvent_Death *)m_aUnpackedData;
1320 pData->m_X = pUnpacker->GetUncompressedInt();
1321 pData->m_Y = pUnpacker->GetUncompressedInt();
1322 pData->m_ClientId = pUnpacker->GetUncompressedInt();
1323 pData->m_ClientId = ClampInt(pErrorMsg: "m_ClientId", Value: pData->m_ClientId, Min: 0, Max: MAX_CLIENTS-1);
1324 } break;
1325
1326 case NETEVENTTYPE_SOUNDGLOBAL:
1327 {
1328 CNetEvent_SoundGlobal *pData = (CNetEvent_SoundGlobal *)m_aUnpackedData;
1329 pData->m_X = pUnpacker->GetUncompressedInt();
1330 pData->m_Y = pUnpacker->GetUncompressedInt();
1331 pData->m_SoundId = pUnpacker->GetUncompressedInt();
1332 pData->m_SoundId = ClampInt(pErrorMsg: "m_SoundId", Value: pData->m_SoundId, Min: 0, Max: NUM_SOUNDS-1);
1333 } break;
1334
1335 case NETEVENTTYPE_SOUNDWORLD:
1336 {
1337 CNetEvent_SoundWorld *pData = (CNetEvent_SoundWorld *)m_aUnpackedData;
1338 pData->m_X = pUnpacker->GetUncompressedInt();
1339 pData->m_Y = pUnpacker->GetUncompressedInt();
1340 pData->m_SoundId = pUnpacker->GetUncompressedInt();
1341 pData->m_SoundId = ClampInt(pErrorMsg: "m_SoundId", Value: pData->m_SoundId, Min: 0, Max: NUM_SOUNDS-1);
1342 } break;
1343
1344 case NETEVENTTYPE_DAMAGEIND:
1345 {
1346 CNetEvent_DamageInd *pData = (CNetEvent_DamageInd *)m_aUnpackedData;
1347 pData->m_X = pUnpacker->GetUncompressedInt();
1348 pData->m_Y = pUnpacker->GetUncompressedInt();
1349 pData->m_Angle = pUnpacker->GetUncompressedInt();
1350 } break;
1351
1352 case NETEVENTTYPE_BIRTHDAY:
1353 {
1354 CNetEvent_Birthday *pData = (CNetEvent_Birthday *)m_aUnpackedData;
1355 pData->m_X = pUnpacker->GetUncompressedInt();
1356 pData->m_Y = pUnpacker->GetUncompressedInt();
1357 } break;
1358
1359 case NETEVENTTYPE_FINISH:
1360 {
1361 CNetEvent_Finish *pData = (CNetEvent_Finish *)m_aUnpackedData;
1362 pData->m_X = pUnpacker->GetUncompressedInt();
1363 pData->m_Y = pUnpacker->GetUncompressedInt();
1364 } break;
1365
1366 case NETOBJTYPE_MYOWNEVENT:
1367 {
1368 CNetObj_MyOwnEvent *pData = (CNetObj_MyOwnEvent *)m_aUnpackedData;
1369 pData->m_Test = pUnpacker->GetUncompressedInt();
1370 } break;
1371
1372 case NETOBJTYPE_SPECCHAR:
1373 {
1374 CNetObj_SpecChar *pData = (CNetObj_SpecChar *)m_aUnpackedData;
1375 pData->m_X = pUnpacker->GetUncompressedInt();
1376 pData->m_Y = pUnpacker->GetUncompressedInt();
1377 } break;
1378
1379 case NETOBJTYPE_SWITCHSTATE:
1380 {
1381 CNetObj_SwitchState *pData = (CNetObj_SwitchState *)m_aUnpackedData;
1382 pData->m_HighestSwitchNumber = pUnpacker->GetUncompressedIntOrDefault(Default: 0);
1383 pData->m_aStatus[0] = pUnpacker->GetUncompressedIntOrDefault(Default: 0);
1384 pData->m_aStatus[1] = pUnpacker->GetUncompressedIntOrDefault(Default: 0);
1385 pData->m_aStatus[2] = pUnpacker->GetUncompressedIntOrDefault(Default: 0);
1386 pData->m_aStatus[3] = pUnpacker->GetUncompressedIntOrDefault(Default: 0);
1387 pData->m_aStatus[4] = pUnpacker->GetUncompressedIntOrDefault(Default: 0);
1388 pData->m_aStatus[5] = pUnpacker->GetUncompressedIntOrDefault(Default: 0);
1389 pData->m_aStatus[6] = pUnpacker->GetUncompressedIntOrDefault(Default: 0);
1390 pData->m_aStatus[7] = pUnpacker->GetUncompressedIntOrDefault(Default: 0);
1391 pData->m_aSwitchNumbers[0] = pUnpacker->GetUncompressedIntOrDefault(Default: 0);
1392 pData->m_aSwitchNumbers[1] = pUnpacker->GetUncompressedIntOrDefault(Default: 0);
1393 pData->m_aSwitchNumbers[2] = pUnpacker->GetUncompressedIntOrDefault(Default: 0);
1394 pData->m_aSwitchNumbers[3] = pUnpacker->GetUncompressedIntOrDefault(Default: 0);
1395 pData->m_aEndTicks[0] = pUnpacker->GetUncompressedIntOrDefault(Default: 0);
1396 pData->m_aEndTicks[1] = pUnpacker->GetUncompressedIntOrDefault(Default: 0);
1397 pData->m_aEndTicks[2] = pUnpacker->GetUncompressedIntOrDefault(Default: 0);
1398 pData->m_aEndTicks[3] = pUnpacker->GetUncompressedIntOrDefault(Default: 0);
1399 } break;
1400
1401 case NETOBJTYPE_ENTITYEX:
1402 {
1403 CNetObj_EntityEx *pData = (CNetObj_EntityEx *)m_aUnpackedData;
1404 pData->m_SwitchNumber = pUnpacker->GetUncompressedInt();
1405 pData->m_Layer = pUnpacker->GetUncompressedInt();
1406 pData->m_EntityClass = pUnpacker->GetUncompressedInt();
1407 } break;
1408
1409 case NETEVENTTYPE_MAPSOUNDWORLD:
1410 {
1411 CNetEvent_MapSoundWorld *pData = (CNetEvent_MapSoundWorld *)m_aUnpackedData;
1412 pData->m_X = pUnpacker->GetUncompressedInt();
1413 pData->m_Y = pUnpacker->GetUncompressedInt();
1414 pData->m_SoundId = pUnpacker->GetUncompressedInt();
1415 } break;
1416
1417 default:
1418 m_pObjFailedOn = "(type out of range)";
1419 break;
1420 }
1421
1422 if(pUnpacker->Error())
1423 m_pObjFailedOn = "(unpack error)";
1424
1425 if(m_pObjFailedOn)
1426 return 0;
1427 m_pObjFailedOn = "";
1428 return m_aUnpackedData;
1429}
1430
1431void *CNetObjHandler::SecureUnpackMsg(int Type, CUnpacker *pUnpacker)
1432{
1433 m_pMsgFailedOn = 0;
1434 switch(Type)
1435 {
1436
1437 case NETMSGTYPE_SV_MOTD:
1438 {
1439 CNetMsg_Sv_Motd *pData = (CNetMsg_Sv_Motd *)m_aUnpackedData;
1440 pData->m_pMessage = pUnpacker->GetString();
1441 } break;
1442
1443 case NETMSGTYPE_SV_BROADCAST:
1444 {
1445 CNetMsg_Sv_Broadcast *pData = (CNetMsg_Sv_Broadcast *)m_aUnpackedData;
1446 pData->m_pMessage = pUnpacker->GetString();
1447 } break;
1448
1449 case NETMSGTYPE_SV_CHAT:
1450 {
1451 CNetMsg_Sv_Chat *pData = (CNetMsg_Sv_Chat *)m_aUnpackedData;
1452 pData->m_Team = pUnpacker->GetInt();
1453 pData->m_ClientId = pUnpacker->GetInt();
1454 pData->m_pMessage = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC);
1455 if(pData->m_Team < -2 || pData->m_Team > 3) { m_pMsgFailedOn = "m_Team"; break; }
1456 if(pData->m_ClientId < -1 || pData->m_ClientId > MAX_CLIENTS-1) { m_pMsgFailedOn = "m_ClientId"; break; }
1457 } break;
1458
1459 case NETMSGTYPE_SV_KILLMSG:
1460 {
1461 CNetMsg_Sv_KillMsg *pData = (CNetMsg_Sv_KillMsg *)m_aUnpackedData;
1462 pData->m_Killer = pUnpacker->GetInt();
1463 pData->m_Victim = pUnpacker->GetInt();
1464 pData->m_Weapon = pUnpacker->GetInt();
1465 pData->m_ModeSpecial = pUnpacker->GetInt();
1466 if(pData->m_Killer < 0 || pData->m_Killer > MAX_CLIENTS-1) { m_pMsgFailedOn = "m_Killer"; break; }
1467 if(pData->m_Victim < 0 || pData->m_Victim > MAX_CLIENTS-1) { m_pMsgFailedOn = "m_Victim"; break; }
1468 if(pData->m_Weapon < WEAPON_GAME || pData->m_Weapon > NUM_WEAPONS-1) { m_pMsgFailedOn = "m_Weapon"; break; }
1469 } break;
1470
1471 case NETMSGTYPE_SV_SOUNDGLOBAL:
1472 {
1473 CNetMsg_Sv_SoundGlobal *pData = (CNetMsg_Sv_SoundGlobal *)m_aUnpackedData;
1474 pData->m_SoundId = pUnpacker->GetInt();
1475 if(pData->m_SoundId < 0 || pData->m_SoundId > NUM_SOUNDS-1) { m_pMsgFailedOn = "m_SoundId"; break; }
1476 } break;
1477
1478 case NETMSGTYPE_SV_TUNEPARAMS:
1479 {
1480 CNetMsg_Sv_TuneParams *pData = (CNetMsg_Sv_TuneParams *)m_aUnpackedData;
1481 (void)pData;
1482 } break;
1483
1484 case NETMSGTYPE_UNUSED:
1485 {
1486 CNetMsg_Unused *pData = (CNetMsg_Unused *)m_aUnpackedData;
1487 (void)pData;
1488 } break;
1489
1490 case NETMSGTYPE_SV_READYTOENTER:
1491 {
1492 CNetMsg_Sv_ReadyToEnter *pData = (CNetMsg_Sv_ReadyToEnter *)m_aUnpackedData;
1493 (void)pData;
1494 } break;
1495
1496 case NETMSGTYPE_SV_WEAPONPICKUP:
1497 {
1498 CNetMsg_Sv_WeaponPickup *pData = (CNetMsg_Sv_WeaponPickup *)m_aUnpackedData;
1499 pData->m_Weapon = pUnpacker->GetInt();
1500 if(pData->m_Weapon < 0 || pData->m_Weapon > NUM_WEAPONS-1) { m_pMsgFailedOn = "m_Weapon"; break; }
1501 } break;
1502
1503 case NETMSGTYPE_SV_EMOTICON:
1504 {
1505 CNetMsg_Sv_Emoticon *pData = (CNetMsg_Sv_Emoticon *)m_aUnpackedData;
1506 pData->m_ClientId = pUnpacker->GetInt();
1507 pData->m_Emoticon = pUnpacker->GetInt();
1508 if(pData->m_ClientId < 0 || pData->m_ClientId > MAX_CLIENTS-1) { m_pMsgFailedOn = "m_ClientId"; break; }
1509 if(pData->m_Emoticon < 0 || pData->m_Emoticon > NUM_EMOTICONS-1) { m_pMsgFailedOn = "m_Emoticon"; break; }
1510 } break;
1511
1512 case NETMSGTYPE_SV_VOTECLEAROPTIONS:
1513 {
1514 CNetMsg_Sv_VoteClearOptions *pData = (CNetMsg_Sv_VoteClearOptions *)m_aUnpackedData;
1515 (void)pData;
1516 } break;
1517
1518 case NETMSGTYPE_SV_VOTEOPTIONLISTADD:
1519 {
1520 CNetMsg_Sv_VoteOptionListAdd *pData = (CNetMsg_Sv_VoteOptionListAdd *)m_aUnpackedData;
1521 pData->m_NumOptions = pUnpacker->GetInt();
1522 pData->m_pDescription0 = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES);
1523 pData->m_pDescription1 = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES);
1524 pData->m_pDescription2 = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES);
1525 pData->m_pDescription3 = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES);
1526 pData->m_pDescription4 = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES);
1527 pData->m_pDescription5 = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES);
1528 pData->m_pDescription6 = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES);
1529 pData->m_pDescription7 = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES);
1530 pData->m_pDescription8 = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES);
1531 pData->m_pDescription9 = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES);
1532 pData->m_pDescription10 = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES);
1533 pData->m_pDescription11 = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES);
1534 pData->m_pDescription12 = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES);
1535 pData->m_pDescription13 = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES);
1536 pData->m_pDescription14 = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES);
1537 if(pData->m_NumOptions < 1 || pData->m_NumOptions > 15) { m_pMsgFailedOn = "m_NumOptions"; break; }
1538 } break;
1539
1540 case NETMSGTYPE_SV_VOTEOPTIONADD:
1541 {
1542 CNetMsg_Sv_VoteOptionAdd *pData = (CNetMsg_Sv_VoteOptionAdd *)m_aUnpackedData;
1543 pData->m_pDescription = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES);
1544 } break;
1545
1546 case NETMSGTYPE_SV_VOTEOPTIONREMOVE:
1547 {
1548 CNetMsg_Sv_VoteOptionRemove *pData = (CNetMsg_Sv_VoteOptionRemove *)m_aUnpackedData;
1549 pData->m_pDescription = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES);
1550 } break;
1551
1552 case NETMSGTYPE_SV_VOTESET:
1553 {
1554 CNetMsg_Sv_VoteSet *pData = (CNetMsg_Sv_VoteSet *)m_aUnpackedData;
1555 pData->m_Timeout = pUnpacker->GetInt();
1556 pData->m_pDescription = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES);
1557 pData->m_pReason = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES);
1558 if(pData->m_Timeout < 0 || pData->m_Timeout > max_int) { m_pMsgFailedOn = "m_Timeout"; break; }
1559 } break;
1560
1561 case NETMSGTYPE_SV_VOTESTATUS:
1562 {
1563 CNetMsg_Sv_VoteStatus *pData = (CNetMsg_Sv_VoteStatus *)m_aUnpackedData;
1564 pData->m_Yes = pUnpacker->GetInt();
1565 pData->m_No = pUnpacker->GetInt();
1566 pData->m_Pass = pUnpacker->GetInt();
1567 pData->m_Total = pUnpacker->GetInt();
1568 if(pData->m_Yes < 0 || pData->m_Yes > MAX_CLIENTS) { m_pMsgFailedOn = "m_Yes"; break; }
1569 if(pData->m_No < 0 || pData->m_No > MAX_CLIENTS) { m_pMsgFailedOn = "m_No"; break; }
1570 if(pData->m_Pass < 0 || pData->m_Pass > MAX_CLIENTS) { m_pMsgFailedOn = "m_Pass"; break; }
1571 if(pData->m_Total < 0 || pData->m_Total > MAX_CLIENTS) { m_pMsgFailedOn = "m_Total"; break; }
1572 } break;
1573
1574 case NETMSGTYPE_CL_SAY:
1575 {
1576 CNetMsg_Cl_Say *pData = (CNetMsg_Cl_Say *)m_aUnpackedData;
1577 pData->m_Team = pUnpacker->GetInt();
1578 pData->m_pMessage = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC);
1579 if(pData->m_Team < 0 || pData->m_Team > 1) { m_pMsgFailedOn = "m_Team"; break; }
1580 } break;
1581
1582 case NETMSGTYPE_CL_SETTEAM:
1583 {
1584 CNetMsg_Cl_SetTeam *pData = (CNetMsg_Cl_SetTeam *)m_aUnpackedData;
1585 pData->m_Team = pUnpacker->GetInt();
1586 if(pData->m_Team < TEAM_SPECTATORS || pData->m_Team > TEAM_BLUE) { m_pMsgFailedOn = "m_Team"; break; }
1587 } break;
1588
1589 case NETMSGTYPE_CL_SETSPECTATORMODE:
1590 {
1591 CNetMsg_Cl_SetSpectatorMode *pData = (CNetMsg_Cl_SetSpectatorMode *)m_aUnpackedData;
1592 pData->m_SpectatorId = pUnpacker->GetInt();
1593 if(pData->m_SpectatorId < SPEC_FREEVIEW || pData->m_SpectatorId > MAX_CLIENTS-1) { m_pMsgFailedOn = "m_SpectatorId"; break; }
1594 } break;
1595
1596 case NETMSGTYPE_CL_STARTINFO:
1597 {
1598 CNetMsg_Cl_StartInfo *pData = (CNetMsg_Cl_StartInfo *)m_aUnpackedData;
1599 pData->m_pName = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES);
1600 pData->m_pClan = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES);
1601 pData->m_Country = pUnpacker->GetInt();
1602 pData->m_pSkin = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES);
1603 pData->m_UseCustomColor = pUnpacker->GetInt();
1604 pData->m_ColorBody = pUnpacker->GetInt();
1605 pData->m_ColorFeet = pUnpacker->GetInt();
1606 if(pData->m_UseCustomColor < 0 || pData->m_UseCustomColor > 1) { m_pMsgFailedOn = "m_UseCustomColor"; break; }
1607 } break;
1608
1609 case NETMSGTYPE_CL_CHANGEINFO:
1610 {
1611 CNetMsg_Cl_ChangeInfo *pData = (CNetMsg_Cl_ChangeInfo *)m_aUnpackedData;
1612 pData->m_pName = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES);
1613 pData->m_pClan = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES);
1614 pData->m_Country = pUnpacker->GetInt();
1615 pData->m_pSkin = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES);
1616 pData->m_UseCustomColor = pUnpacker->GetInt();
1617 pData->m_ColorBody = pUnpacker->GetInt();
1618 pData->m_ColorFeet = pUnpacker->GetInt();
1619 if(pData->m_UseCustomColor < 0 || pData->m_UseCustomColor > 1) { m_pMsgFailedOn = "m_UseCustomColor"; break; }
1620 } break;
1621
1622 case NETMSGTYPE_CL_KILL:
1623 {
1624 CNetMsg_Cl_Kill *pData = (CNetMsg_Cl_Kill *)m_aUnpackedData;
1625 (void)pData;
1626 } break;
1627
1628 case NETMSGTYPE_CL_EMOTICON:
1629 {
1630 CNetMsg_Cl_Emoticon *pData = (CNetMsg_Cl_Emoticon *)m_aUnpackedData;
1631 pData->m_Emoticon = pUnpacker->GetInt();
1632 if(pData->m_Emoticon < 0 || pData->m_Emoticon > NUM_EMOTICONS-1) { m_pMsgFailedOn = "m_Emoticon"; break; }
1633 } break;
1634
1635 case NETMSGTYPE_CL_VOTE:
1636 {
1637 CNetMsg_Cl_Vote *pData = (CNetMsg_Cl_Vote *)m_aUnpackedData;
1638 pData->m_Vote = pUnpacker->GetInt();
1639 if(pData->m_Vote < -1 || pData->m_Vote > 1) { m_pMsgFailedOn = "m_Vote"; break; }
1640 } break;
1641
1642 case NETMSGTYPE_CL_CALLVOTE:
1643 {
1644 CNetMsg_Cl_CallVote *pData = (CNetMsg_Cl_CallVote *)m_aUnpackedData;
1645 pData->m_pType = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES);
1646 pData->m_pValue = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES);
1647 pData->m_pReason = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES);
1648 } break;
1649
1650 case NETMSGTYPE_CL_ISDDNETLEGACY:
1651 {
1652 CNetMsg_Cl_IsDDNetLegacy *pData = (CNetMsg_Cl_IsDDNetLegacy *)m_aUnpackedData;
1653 (void)pData;
1654 } break;
1655
1656 case NETMSGTYPE_SV_DDRACETIMELEGACY:
1657 {
1658 CNetMsg_Sv_DDRaceTimeLegacy *pData = (CNetMsg_Sv_DDRaceTimeLegacy *)m_aUnpackedData;
1659 pData->m_Time = pUnpacker->GetInt();
1660 pData->m_Check = pUnpacker->GetInt();
1661 pData->m_Finish = pUnpacker->GetInt();
1662 if(pData->m_Finish < 0 || pData->m_Finish > 1) { m_pMsgFailedOn = "m_Finish"; break; }
1663 } break;
1664
1665 case NETMSGTYPE_SV_RECORDLEGACY:
1666 {
1667 CNetMsg_Sv_RecordLegacy *pData = (CNetMsg_Sv_RecordLegacy *)m_aUnpackedData;
1668 pData->m_ServerTimeBest = pUnpacker->GetInt();
1669 pData->m_PlayerTimeBest = pUnpacker->GetInt();
1670 } break;
1671
1672 case NETMSGTYPE_UNUSED2:
1673 {
1674 CNetMsg_Unused2 *pData = (CNetMsg_Unused2 *)m_aUnpackedData;
1675 (void)pData;
1676 } break;
1677
1678 case NETMSGTYPE_SV_TEAMSSTATELEGACY:
1679 {
1680 CNetMsg_Sv_TeamsStateLegacy *pData = (CNetMsg_Sv_TeamsStateLegacy *)m_aUnpackedData;
1681 (void)pData;
1682 } break;
1683
1684 case NETMSGTYPE_CL_SHOWOTHERSLEGACY:
1685 {
1686 CNetMsg_Cl_ShowOthersLegacy *pData = (CNetMsg_Cl_ShowOthersLegacy *)m_aUnpackedData;
1687 pData->m_Show = pUnpacker->GetInt();
1688 if(pData->m_Show < 0 || pData->m_Show > 1) { m_pMsgFailedOn = "m_Show"; break; }
1689 } break;
1690
1691 case NETMSGTYPE_SV_MYOWNMESSAGE:
1692 {
1693 CNetMsg_Sv_MyOwnMessage *pData = (CNetMsg_Sv_MyOwnMessage *)m_aUnpackedData;
1694 pData->m_Test = pUnpacker->GetInt();
1695 } break;
1696
1697 case NETMSGTYPE_CL_SHOWDISTANCE:
1698 {
1699 CNetMsg_Cl_ShowDistance *pData = (CNetMsg_Cl_ShowDistance *)m_aUnpackedData;
1700 pData->m_X = pUnpacker->GetInt();
1701 pData->m_Y = pUnpacker->GetInt();
1702 } break;
1703
1704 case NETMSGTYPE_CL_SHOWOTHERS:
1705 {
1706 CNetMsg_Cl_ShowOthers *pData = (CNetMsg_Cl_ShowOthers *)m_aUnpackedData;
1707 pData->m_Show = pUnpacker->GetInt();
1708 if(pData->m_Show < 0 || pData->m_Show > 2) { m_pMsgFailedOn = "m_Show"; break; }
1709 } break;
1710
1711 case NETMSGTYPE_CL_CAMERAINFO:
1712 {
1713 CNetMsg_Cl_CameraInfo *pData = (CNetMsg_Cl_CameraInfo *)m_aUnpackedData;
1714 pData->m_Zoom = pUnpacker->GetInt();
1715 pData->m_Deadzone = pUnpacker->GetInt();
1716 pData->m_FollowFactor = pUnpacker->GetInt();
1717 } break;
1718
1719 case NETMSGTYPE_SV_TEAMSSTATE:
1720 {
1721 CNetMsg_Sv_TeamsState *pData = (CNetMsg_Sv_TeamsState *)m_aUnpackedData;
1722 (void)pData;
1723 } break;
1724
1725 case NETMSGTYPE_SV_DDRACETIME:
1726 {
1727 CNetMsg_Sv_DDRaceTime *pData = (CNetMsg_Sv_DDRaceTime *)m_aUnpackedData;
1728 pData->m_Time = pUnpacker->GetInt();
1729 pData->m_Check = pUnpacker->GetInt();
1730 pData->m_Finish = pUnpacker->GetInt();
1731 if(pData->m_Finish < 0 || pData->m_Finish > 1) { m_pMsgFailedOn = "m_Finish"; break; }
1732 } break;
1733
1734 case NETMSGTYPE_SV_RECORD:
1735 {
1736 CNetMsg_Sv_Record *pData = (CNetMsg_Sv_Record *)m_aUnpackedData;
1737 pData->m_ServerTimeBest = pUnpacker->GetInt();
1738 pData->m_PlayerTimeBest = pUnpacker->GetInt();
1739 } break;
1740
1741 case NETMSGTYPE_SV_KILLMSGTEAM:
1742 {
1743 CNetMsg_Sv_KillMsgTeam *pData = (CNetMsg_Sv_KillMsgTeam *)m_aUnpackedData;
1744 pData->m_Team = pUnpacker->GetInt();
1745 pData->m_First = pUnpacker->GetInt();
1746 if(pData->m_Team < 0 || pData->m_Team > MAX_CLIENTS-1) { m_pMsgFailedOn = "m_Team"; break; }
1747 if(pData->m_First < -1 || pData->m_First > MAX_CLIENTS-1) { m_pMsgFailedOn = "m_First"; break; }
1748 } break;
1749
1750 case NETMSGTYPE_SV_YOURVOTE:
1751 {
1752 CNetMsg_Sv_YourVote *pData = (CNetMsg_Sv_YourVote *)m_aUnpackedData;
1753 pData->m_Voted = pUnpacker->GetInt();
1754 if(pData->m_Voted < -1 || pData->m_Voted > 1) { m_pMsgFailedOn = "m_Voted"; break; }
1755 } break;
1756
1757 case NETMSGTYPE_SV_RACEFINISH:
1758 {
1759 CNetMsg_Sv_RaceFinish *pData = (CNetMsg_Sv_RaceFinish *)m_aUnpackedData;
1760 pData->m_ClientId = pUnpacker->GetInt();
1761 pData->m_Time = pUnpacker->GetInt();
1762 pData->m_Diff = pUnpacker->GetInt();
1763 pData->m_RecordPersonal = pUnpacker->GetInt();
1764 pData->m_RecordServer = pUnpacker->GetIntOrDefault(Default: 0);
1765 if(pData->m_ClientId < 0 || pData->m_ClientId > MAX_CLIENTS-1) { m_pMsgFailedOn = "m_ClientId"; break; }
1766 if(pData->m_RecordPersonal < 0 || pData->m_RecordPersonal > 1) { m_pMsgFailedOn = "m_RecordPersonal"; break; }
1767 if(pData->m_RecordServer < 0 || pData->m_RecordServer > 1) { m_pMsgFailedOn = "m_RecordServer"; break; }
1768 } break;
1769
1770 case NETMSGTYPE_SV_COMMANDINFO:
1771 {
1772 CNetMsg_Sv_CommandInfo *pData = (CNetMsg_Sv_CommandInfo *)m_aUnpackedData;
1773 pData->m_pName = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES);
1774 pData->m_pArgsFormat = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES);
1775 pData->m_pHelpText = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES);
1776 } break;
1777
1778 case NETMSGTYPE_SV_COMMANDINFOREMOVE:
1779 {
1780 CNetMsg_Sv_CommandInfoRemove *pData = (CNetMsg_Sv_CommandInfoRemove *)m_aUnpackedData;
1781 pData->m_pName = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES);
1782 } break;
1783
1784 case NETMSGTYPE_SV_VOTEOPTIONGROUPSTART:
1785 {
1786 CNetMsg_Sv_VoteOptionGroupStart *pData = (CNetMsg_Sv_VoteOptionGroupStart *)m_aUnpackedData;
1787 (void)pData;
1788 } break;
1789
1790 case NETMSGTYPE_SV_VOTEOPTIONGROUPEND:
1791 {
1792 CNetMsg_Sv_VoteOptionGroupEnd *pData = (CNetMsg_Sv_VoteOptionGroupEnd *)m_aUnpackedData;
1793 (void)pData;
1794 } break;
1795
1796 case NETMSGTYPE_SV_COMMANDINFOGROUPSTART:
1797 {
1798 CNetMsg_Sv_CommandInfoGroupStart *pData = (CNetMsg_Sv_CommandInfoGroupStart *)m_aUnpackedData;
1799 (void)pData;
1800 } break;
1801
1802 case NETMSGTYPE_SV_COMMANDINFOGROUPEND:
1803 {
1804 CNetMsg_Sv_CommandInfoGroupEnd *pData = (CNetMsg_Sv_CommandInfoGroupEnd *)m_aUnpackedData;
1805 (void)pData;
1806 } break;
1807
1808 case NETMSGTYPE_SV_CHANGEINFOCOOLDOWN:
1809 {
1810 CNetMsg_Sv_ChangeInfoCooldown *pData = (CNetMsg_Sv_ChangeInfoCooldown *)m_aUnpackedData;
1811 pData->m_WaitUntil = pUnpacker->GetInt();
1812 } break;
1813
1814 case NETMSGTYPE_SV_MAPSOUNDGLOBAL:
1815 {
1816 CNetMsg_Sv_MapSoundGlobal *pData = (CNetMsg_Sv_MapSoundGlobal *)m_aUnpackedData;
1817 pData->m_SoundId = pUnpacker->GetInt();
1818 } break;
1819
1820 case NETMSGTYPE_SV_PREINPUT:
1821 {
1822 CNetMsg_Sv_PreInput *pData = (CNetMsg_Sv_PreInput *)m_aUnpackedData;
1823 pData->m_Direction = pUnpacker->GetInt();
1824 pData->m_TargetX = pUnpacker->GetInt();
1825 pData->m_TargetY = pUnpacker->GetInt();
1826 pData->m_Jump = pUnpacker->GetInt();
1827 pData->m_Fire = pUnpacker->GetInt();
1828 pData->m_Hook = pUnpacker->GetInt();
1829 pData->m_WantedWeapon = pUnpacker->GetInt();
1830 pData->m_NextWeapon = pUnpacker->GetInt();
1831 pData->m_PrevWeapon = pUnpacker->GetInt();
1832 pData->m_Owner = pUnpacker->GetInt();
1833 pData->m_IntendedTick = pUnpacker->GetInt();
1834 if(pData->m_Owner < 0 || pData->m_Owner > MAX_CLIENTS-1) { m_pMsgFailedOn = "m_Owner"; break; }
1835 } break;
1836
1837 case NETMSGTYPE_SV_SAVECODE:
1838 {
1839 CNetMsg_Sv_SaveCode *pData = (CNetMsg_Sv_SaveCode *)m_aUnpackedData;
1840 pData->m_State = pUnpacker->GetInt();
1841 pData->m_pError = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES);
1842 pData->m_pSaveRequester = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES);
1843 pData->m_pServerName = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES);
1844 pData->m_pGeneratedCode = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES);
1845 pData->m_pCode = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES);
1846 pData->m_pTeamMembers = pUnpacker->GetString(SanitizeType: CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES);
1847 if(pData->m_State < SAVESTATE_PENDING || pData->m_State > SAVESTATE_ERROR) { m_pMsgFailedOn = "m_State"; break; }
1848 } break;
1849
1850 case NETMSGTYPE_SV_SERVERALERT:
1851 {
1852 CNetMsg_Sv_ServerAlert *pData = (CNetMsg_Sv_ServerAlert *)m_aUnpackedData;
1853 pData->m_pMessage = pUnpacker->GetString();
1854 } break;
1855
1856 case NETMSGTYPE_SV_MODERATORALERT:
1857 {
1858 CNetMsg_Sv_ModeratorAlert *pData = (CNetMsg_Sv_ModeratorAlert *)m_aUnpackedData;
1859 pData->m_pMessage = pUnpacker->GetString();
1860 } break;
1861
1862 case NETMSGTYPE_CL_ENABLESPECTATORCOUNT:
1863 {
1864 CNetMsg_Cl_EnableSpectatorCount *pData = (CNetMsg_Cl_EnableSpectatorCount *)m_aUnpackedData;
1865 pData->m_Enable = pUnpacker->GetInt();
1866 if(pData->m_Enable < 0 || pData->m_Enable > 1) { m_pMsgFailedOn = "m_Enable"; break; }
1867 } break;
1868
1869 default:
1870 m_pMsgFailedOn = "(type out of range)";
1871 break;
1872 }
1873
1874 if(pUnpacker->Error())
1875 m_pMsgFailedOn = "(unpack error)";
1876
1877 if(m_pMsgFailedOn)
1878 return 0;
1879 m_pMsgFailedOn = "";
1880 return m_aUnpackedData;
1881}
1882
1883bool CNetObjHandler::TeeHistorianRecordMsg(int Type)
1884{
1885 switch(Type)
1886 {
1887
1888 case NETMSGTYPE_CL_SAY:
1889 case NETMSGTYPE_CL_VOTE:
1890 case NETMSGTYPE_CL_CALLVOTE:
1891 return false;
1892 default:
1893 return true;
1894 }
1895}
1896
1897void RegisterGameUuids(CUuidManager *pManager)
1898{
1899
1900 pManager->RegisterName(Id: NETOBJTYPE_MYOWNOBJECT, pName: "my-own-object@heinrich5991.de");
1901 pManager->RegisterName(Id: NETOBJTYPE_DDNETCHARACTER, pName: "character@netobj.ddnet.tw");
1902 pManager->RegisterName(Id: NETOBJTYPE_DDNETPLAYER, pName: "player@netobj.ddnet.tw");
1903 pManager->RegisterName(Id: NETOBJTYPE_GAMEINFOEX, pName: "gameinfo@netobj.ddnet.tw");
1904 pManager->RegisterName(Id: NETOBJTYPE_DDRACEPROJECTILE, pName: "projectile@netobj.ddnet.tw");
1905 pManager->RegisterName(Id: NETOBJTYPE_DDNETLASER, pName: "laser@netobj.ddnet.tw");
1906 pManager->RegisterName(Id: NETOBJTYPE_DDNETPROJECTILE, pName: "ddnet-projectile@netobj.ddnet.tw");
1907 pManager->RegisterName(Id: NETOBJTYPE_DDNETPICKUP, pName: "pickup@netobj.ddnet.tw");
1908 pManager->RegisterName(Id: NETOBJTYPE_DDNETSPECTATORINFO, pName: "spectator-info@netobj.ddnet.org");
1909 pManager->RegisterName(Id: NETOBJTYPE_SPECTATORCOUNT, pName: "spectator-count@netobj.ddnet.org");
1910 pManager->RegisterName(Id: NETEVENTTYPE_BIRTHDAY, pName: "birthday@netevent.ddnet.org");
1911 pManager->RegisterName(Id: NETEVENTTYPE_FINISH, pName: "finish@netevent.ddnet.org");
1912 pManager->RegisterName(Id: NETOBJTYPE_MYOWNEVENT, pName: "my-own-event@heinrich5991.de");
1913 pManager->RegisterName(Id: NETOBJTYPE_SPECCHAR, pName: "spec-char@netobj.ddnet.tw");
1914 pManager->RegisterName(Id: NETOBJTYPE_SWITCHSTATE, pName: "switch-state@netobj.ddnet.tw");
1915 pManager->RegisterName(Id: NETOBJTYPE_ENTITYEX, pName: "entity-ex@netobj.ddnet.tw");
1916 pManager->RegisterName(Id: NETEVENTTYPE_MAPSOUNDWORLD, pName: "map-sound-world@netevent.ddnet.org");
1917 pManager->RegisterName(Id: NETMSGTYPE_SV_MYOWNMESSAGE, pName: "my-own-message@heinrich5991.de");
1918 pManager->RegisterName(Id: NETMSGTYPE_CL_SHOWDISTANCE, pName: "show-distance@netmsg.ddnet.tw");
1919 pManager->RegisterName(Id: NETMSGTYPE_CL_SHOWOTHERS, pName: "showothers@netmsg.ddnet.tw");
1920 pManager->RegisterName(Id: NETMSGTYPE_CL_CAMERAINFO, pName: "camera-info@netmsg.ddnet.org");
1921 pManager->RegisterName(Id: NETMSGTYPE_SV_TEAMSSTATE, pName: "teamsstate@netmsg.ddnet.tw");
1922 pManager->RegisterName(Id: NETMSGTYPE_SV_DDRACETIME, pName: "ddrace-time@netmsg.ddnet.tw");
1923 pManager->RegisterName(Id: NETMSGTYPE_SV_RECORD, pName: "record@netmsg.ddnet.tw");
1924 pManager->RegisterName(Id: NETMSGTYPE_SV_KILLMSGTEAM, pName: "killmsgteam@netmsg.ddnet.tw");
1925 pManager->RegisterName(Id: NETMSGTYPE_SV_YOURVOTE, pName: "yourvote@netmsg.ddnet.org");
1926 pManager->RegisterName(Id: NETMSGTYPE_SV_RACEFINISH, pName: "racefinish@netmsg.ddnet.org");
1927 pManager->RegisterName(Id: NETMSGTYPE_SV_COMMANDINFO, pName: "commandinfo@netmsg.ddnet.org");
1928 pManager->RegisterName(Id: NETMSGTYPE_SV_COMMANDINFOREMOVE, pName: "commandinfo-remove@netmsg.ddnet.org");
1929 pManager->RegisterName(Id: NETMSGTYPE_SV_VOTEOPTIONGROUPSTART, pName: "sv-vote-option-group-start@netmsg.ddnet.org");
1930 pManager->RegisterName(Id: NETMSGTYPE_SV_VOTEOPTIONGROUPEND, pName: "sv-vote-option-group-end@netmsg.ddnet.org");
1931 pManager->RegisterName(Id: NETMSGTYPE_SV_COMMANDINFOGROUPSTART, pName: "sv-commandinfo-group-start@netmsg.ddnet.org");
1932 pManager->RegisterName(Id: NETMSGTYPE_SV_COMMANDINFOGROUPEND, pName: "sv-commandinfo-group-end@netmsg.ddnet.org");
1933 pManager->RegisterName(Id: NETMSGTYPE_SV_CHANGEINFOCOOLDOWN, pName: "change-info-cooldown@netmsg.ddnet.org");
1934 pManager->RegisterName(Id: NETMSGTYPE_SV_MAPSOUNDGLOBAL, pName: "map-sound-global@netmsg.ddnet.org");
1935 pManager->RegisterName(Id: NETMSGTYPE_SV_PREINPUT, pName: "preinput@netmsg.ddnet.org");
1936 pManager->RegisterName(Id: NETMSGTYPE_SV_SAVECODE, pName: "save-code@netmsg.ddnet.org");
1937 pManager->RegisterName(Id: NETMSGTYPE_SV_SERVERALERT, pName: "server-alert@netmsg.ddnet.org");
1938 pManager->RegisterName(Id: NETMSGTYPE_SV_MODERATORALERT, pName: "moderator-alert@netmsg.ddnet.org");
1939 pManager->RegisterName(Id: NETMSGTYPE_CL_ENABLESPECTATORCOUNT, pName: "enable-spectator-count@netmsg.ddnet.org");
1940
1941 RegisterMapItemTypeUuids(pManager);
1942}
1943
1944