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