Skip to content

Commit 7108a8d

Browse files
authored
Improve client-side markers & Fix logic (PR #3324, Fixes #3310)
1 parent c738f9b commit 7108a8d

File tree

2 files changed

+40
-21
lines changed

2 files changed

+40
-21
lines changed

Client/mods/deathmatch/logic/CClientGame.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2735,10 +2735,13 @@ void CClientGame::AddBuiltInEvents()
27352735
m_Events.AddEvent("onClientCursorMove", "relativeX, relativeX, absoluteX, absoluteY, worldX, worldY, worldZ", NULL, false);
27362736

27372737
// Marker events
2738-
m_Events.AddEvent("onClientMarkerHit", "entity, matchingDimension", NULL, false);
2739-
m_Events.AddEvent("onClientMarkerLeave", "entity, matchingDimension", NULL, false);
2738+
m_Events.AddEvent("onClientMarkerHit", "entity, matchingDimension", nullptr, false);
2739+
m_Events.AddEvent("onClientMarkerLeave", "entity, matchingDimension", nullptr, false);
27402740

2741-
// Marker events
2741+
m_Events.AddEvent("onClientPlayerMarkerHit", "marker, matchingDimension", nullptr, false);
2742+
m_Events.AddEvent("onClientPlayerMarkerLeave", "marker, matchingDimension", nullptr, false);
2743+
2744+
// Pickup events
27422745
m_Events.AddEvent("onClientPickupHit", "entity, matchingDimension", NULL, false);
27432746
m_Events.AddEvent("onClientPickupLeave", "entity, matchingDimension", NULL, false);
27442747

Client/mods/deathmatch/logic/CClientMarker.cpp

Lines changed: 34 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -410,28 +410,44 @@ void CClientMarker::StreamOut()
410410
}
411411
}
412412

413-
void CClientMarker::Callback_OnCollision(CClientColShape& Shape, CClientEntity& Entity)
413+
void CClientMarker::Callback_OnCollision(CClientColShape& shape, CClientEntity& entity)
414414
{
415-
if (IS_PLAYER(&Entity))
416-
{
417-
// Call the marker hit event
418-
CLuaArguments Arguments;
419-
Arguments.PushElement(&Entity); // player that hit it
420-
Arguments.PushBoolean((GetDimension() == Entity.GetDimension())); // matching dimension?
421-
CallEvent("onClientMarkerHit", Arguments, true);
422-
}
415+
if (GetInterior() != entity.GetInterior())
416+
return;
417+
418+
// Call the marker hit event
419+
CLuaArguments arguments;
420+
arguments.PushElement(&entity); // Hit element
421+
arguments.PushBoolean(GetDimension() == entity.GetDimension()); // Matching dimension?
422+
CallEvent("onClientMarkerHit", arguments, true);
423+
424+
if (!IS_PLAYER(&entity))
425+
return;
426+
427+
CLuaArguments arguments2;
428+
arguments2.PushElement(this); // marker
429+
arguments2.PushBoolean(GetDimension() == entity.GetDimension()); // Matching dimension?
430+
entity.CallEvent("onClientPlayerMarkerHit", arguments2, false);
423431
}
424432

425-
void CClientMarker::Callback_OnLeave(CClientColShape& Shape, CClientEntity& Entity)
433+
void CClientMarker::Callback_OnLeave(CClientColShape& shape, CClientEntity& entity)
426434
{
427-
if (IS_PLAYER(&Entity))
428-
{
429-
// Call the marker hit event
430-
CLuaArguments Arguments;
431-
Arguments.PushElement(&Entity); // player that hit it
432-
Arguments.PushBoolean((GetDimension() == Entity.GetDimension())); // matching dimension?
433-
CallEvent("onClientMarkerLeave", Arguments, true);
434-
}
435+
if (GetInterior() != entity.GetInterior())
436+
return;
437+
438+
// Call the marker leave event
439+
CLuaArguments arguments;
440+
arguments.PushElement(&entity); // Hit element
441+
arguments.PushBoolean(GetDimension() == entity.GetDimension()); // Matching dimension?
442+
CallEvent("onClientMarkerLeave", arguments, true);
443+
444+
if (!IS_PLAYER(&entity))
445+
return;
446+
447+
CLuaArguments arguments2;
448+
arguments2.PushElement(this); // marker
449+
arguments2.PushBoolean(GetDimension() == entity.GetDimension()); // Matching dimension?
450+
entity.CallEvent("onPlayerMarkerLeave", arguments2, false);
435451
}
436452

437453
void CClientMarker::CreateOfType(int iType)

0 commit comments

Comments
 (0)