diff --git a/Client/mods/deathmatch/logic/CClientGame.cpp b/Client/mods/deathmatch/logic/CClientGame.cpp index a83905d473..3f75849e09 100644 --- a/Client/mods/deathmatch/logic/CClientGame.cpp +++ b/Client/mods/deathmatch/logic/CClientGame.cpp @@ -2741,10 +2741,13 @@ void CClientGame::AddBuiltInEvents() m_Events.AddEvent("onClientCursorMove", "relativeX, relativeX, absoluteX, absoluteY, worldX, worldY, worldZ", NULL, false); // Marker events - m_Events.AddEvent("onClientMarkerHit", "entity, matchingDimension", NULL, false); - m_Events.AddEvent("onClientMarkerLeave", "entity, matchingDimension", NULL, false); + m_Events.AddEvent("onClientMarkerHit", "entity, matchingDimension", nullptr, false); + m_Events.AddEvent("onClientMarkerLeave", "entity, matchingDimension", nullptr, false); - // Marker events + m_Events.AddEvent("onClientPlayerMarkerHit", "marker, matchingDimension", nullptr, false); + m_Events.AddEvent("onClientPlayerMarkerLeave", "marker, matchingDimension", nullptr, false); + + // Pickup events m_Events.AddEvent("onClientPickupHit", "entity, matchingDimension", NULL, false); m_Events.AddEvent("onClientPickupLeave", "entity, matchingDimension", NULL, false); diff --git a/Client/mods/deathmatch/logic/CClientMarker.cpp b/Client/mods/deathmatch/logic/CClientMarker.cpp index 429f8168d9..5824ddd08a 100644 --- a/Client/mods/deathmatch/logic/CClientMarker.cpp +++ b/Client/mods/deathmatch/logic/CClientMarker.cpp @@ -410,28 +410,44 @@ void CClientMarker::StreamOut() } } -void CClientMarker::Callback_OnCollision(CClientColShape& Shape, CClientEntity& Entity) +void CClientMarker::Callback_OnCollision(CClientColShape& shape, CClientEntity& entity) { - if (IS_PLAYER(&Entity)) - { - // Call the marker hit event - CLuaArguments Arguments; - Arguments.PushElement(&Entity); // player that hit it - Arguments.PushBoolean((GetDimension() == Entity.GetDimension())); // matching dimension? - CallEvent("onClientMarkerHit", Arguments, true); - } + if (GetInterior() != entity.GetInterior()) + return; + + // Call the marker hit event + CLuaArguments arguments; + arguments.PushElement(&entity); // Hit element + arguments.PushBoolean(GetDimension() == entity.GetDimension()); // Matching dimension? + CallEvent("onClientMarkerHit", arguments, true); + + if (!IS_PLAYER(&entity)) + return; + + CLuaArguments arguments2; + arguments2.PushElement(this); // marker + arguments2.PushBoolean(GetDimension() == entity.GetDimension()); // Matching dimension? + entity.CallEvent("onClientPlayerMarkerHit", arguments2, false); } -void CClientMarker::Callback_OnLeave(CClientColShape& Shape, CClientEntity& Entity) +void CClientMarker::Callback_OnLeave(CClientColShape& shape, CClientEntity& entity) { - if (IS_PLAYER(&Entity)) - { - // Call the marker hit event - CLuaArguments Arguments; - Arguments.PushElement(&Entity); // player that hit it - Arguments.PushBoolean((GetDimension() == Entity.GetDimension())); // matching dimension? - CallEvent("onClientMarkerLeave", Arguments, true); - } + if (GetInterior() != entity.GetInterior()) + return; + + // Call the marker leave event + CLuaArguments arguments; + arguments.PushElement(&entity); // Hit element + arguments.PushBoolean(GetDimension() == entity.GetDimension()); // Matching dimension? + CallEvent("onClientMarkerLeave", arguments, true); + + if (!IS_PLAYER(&entity)) + return; + + CLuaArguments arguments2; + arguments2.PushElement(this); // marker + arguments2.PushBoolean(GetDimension() == entity.GetDimension()); // Matching dimension? + entity.CallEvent("onPlayerMarkerLeave", arguments2, false); } void CClientMarker::CreateOfType(int iType)