Skip to content

Commit a6c4947

Browse files
Make checkpoint, player damage and player death event more secure
1 parent 4f9849c commit a6c4947

File tree

1 file changed

+36
-15
lines changed

1 file changed

+36
-15
lines changed

runtime/src/CSharpResource.cpp

Lines changed: 36 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -259,10 +259,13 @@ bool CSharpResource::OnEvent(const alt::CEvent* ev) {
259259
}
260260
case alt::CEvent::Type::CHECKPOINT_EVENT: {
261261
auto entity = ((alt::CCheckpointEvent*) (ev))->GetEntity();
262-
OnCheckpointDelegate(((alt::CCheckpointEvent*) (ev))->GetTarget(),
263-
GetEntityPointer(entity),
264-
entity != nullptr ? entity->GetType() : alt::IBaseObject::Type::CHECKPOINT,
265-
((alt::CCheckpointEvent*) (ev))->GetState());
262+
auto entityPtr = GetEntityPointer(entity);
263+
if (entity != nullptr && entityPtr != nullptr) {
264+
OnCheckpointDelegate(((alt::CCheckpointEvent*) (ev))->GetTarget(),
265+
entityPtr,
266+
entity->GetType(),
267+
((alt::CCheckpointEvent*) (ev))->GetState());
268+
}
266269
break;
267270
}
268271
case alt::CEvent::Type::CLIENT_SCRIPT_EVENT: {
@@ -280,20 +283,38 @@ bool CSharpResource::OnEvent(const alt::CEvent* ev) {
280283
}
281284
case alt::CEvent::Type::PLAYER_DAMAGE: {
282285
auto entity = ((alt::CPlayerDamageEvent*) (ev))->GetAttacker();
283-
OnPlayerDamageDelegate(((alt::CPlayerDamageEvent*) (ev))->GetTarget(),
284-
GetEntityPointer(entity),
285-
entity != nullptr ? entity->GetType() : alt::IBaseObject::Type::CHECKPOINT,
286-
entity != nullptr ? entity->GetID() : (uint16_t) 0,
287-
((alt::CPlayerDamageEvent*) (ev))->GetWeapon(),
288-
((alt::CPlayerDamageEvent*) (ev))->GetDamage());
286+
auto entityPtr = GetEntityPointer(entity);
287+
if (entity != nullptr && entityPtr != nullptr) {
288+
OnPlayerDamageDelegate(((alt::CPlayerDamageEvent*) (ev))->GetTarget(),
289+
entityPtr,
290+
entity->GetType(),
291+
entity->GetID(),
292+
((alt::CPlayerDamageEvent*) (ev))->GetWeapon(),
293+
((alt::CPlayerDamageEvent*) (ev))->GetDamage());
294+
} else {
295+
OnPlayerDamageDelegate(((alt::CPlayerDamageEvent*) (ev))->GetTarget(),
296+
nullptr,
297+
alt::IBaseObject::Type::BLIP,// These are placeholders for none ptr type and are ignored on c# side
298+
0,
299+
((alt::CPlayerDamageEvent*) (ev))->GetWeapon(),
300+
((alt::CPlayerDamageEvent*) (ev))->GetDamage());
301+
}
289302
break;
290303
}
291304
case alt::CEvent::Type::PLAYER_DEATH: {
292305
auto entity = ((alt::CPlayerDeathEvent*) (ev))->GetKiller();
293-
OnPlayerDeathDelegate(((alt::CPlayerDeathEvent*) (ev))->GetTarget(),
294-
GetEntityPointer(entity),
295-
entity != nullptr ? entity->GetType() : alt::IBaseObject::Type::CHECKPOINT,
296-
((alt::CPlayerDeathEvent*) (ev))->GetWeapon());
306+
auto entityPtr = GetEntityPointer(entity);
307+
if (entity != nullptr && entityPtr != nullptr) {
308+
OnPlayerDeathDelegate(((alt::CPlayerDeathEvent*) (ev))->GetTarget(),
309+
entityPtr,
310+
entity->GetType(),
311+
((alt::CPlayerDeathEvent*) (ev))->GetWeapon());
312+
} else {
313+
OnPlayerDeathDelegate(((alt::CPlayerDeathEvent*) (ev))->GetTarget(),
314+
nullptr,
315+
alt::IBaseObject::Type::BLIP,
316+
((alt::CPlayerDeathEvent*) (ev))->GetWeapon());
317+
}
297318
break;
298319
}
299320
case alt::CEvent::Type::PLAYER_DISCONNECT: {
@@ -359,7 +380,7 @@ bool CSharpResource::OnEvent(const alt::CEvent* ev) {
359380
case alt::CEvent::Type::COLSHAPE_EVENT: {
360381
auto entity = ((alt::CColShapeEvent*) (ev))->GetEntity();
361382
auto entityPointer = GetEntityPointer(entity);
362-
if (entityPointer != nullptr) {
383+
if (entity != nullptr && entityPointer != nullptr) {
363384
ColShapeDelegate(((alt::CColShapeEvent*) (ev))->GetTarget(),
364385
entityPointer,
365386
entity->GetType(),

0 commit comments

Comments
 (0)