OnClientVehicleCollision: Difference between revisions
Jump to navigation
Jump to search
Cazomino05 (talk | contribs) m (Another example) |
(Removed an extra parenthesis and used predefined variables) |
||
Line 30: | Line 30: | ||
==Example== | ==Example== | ||
<syntaxhighlight lang="lua"> | <syntaxhighlight lang="lua"> | ||
addEventHandler("onClientVehicleCollision", | addEventHandler("onClientVehicleCollision", root, | ||
function(collider,force, bodyPart, x, y, z, vx, vy, vz) | function(collider,force, bodyPart, x, y, z, vx, vy, vz) | ||
if ( source == getPedOccupiedVehicle( | if ( source == getPedOccupiedVehicle(localPlayer) ) then | ||
-- force does not take into account the collision damage multiplier (this is what makes heavy vehicles take less damage than banshees for instance) so take that into account to get the damage delt | -- force does not take into account the collision damage multiplier (this is what makes heavy vehicles take less damage than banshees for instance) so take that into account to get the damage delt | ||
local fDamageMultiplier = getVehicleHandling(source).collisionDamageMultiplier | local fDamageMultiplier = getVehicleHandling(source).collisionDamageMultiplier | ||
Line 47: | Line 47: | ||
<syntaxhighlight lang="lua"> | <syntaxhighlight lang="lua"> | ||
-- This code works because onClientVehicleCollision is triggered before any SA reaction to the collision, therefore we can update the knocked off bike status just before the collision and stop the falling off effect happening :) | -- This code works because onClientVehicleCollision is triggered before any SA reaction to the collision, therefore we can update the knocked off bike status just before the collision and stop the falling off effect happening :) | ||
addEventHandler("onClientVehicleCollision", | addEventHandler("onClientVehicleCollision", root, | ||
function ( hit ) | function ( hit ) | ||
-- firstly did we trigger this event | -- firstly did we trigger this event | ||
if ( source == getPedOccupiedVehicle ( | if ( source == getPedOccupiedVehicle(localPlayer) ) then | ||
-- knock off defaults to false | -- knock off defaults to false | ||
local knockOff = false | local knockOff = false | ||
Line 59: | Line 59: | ||
end | end | ||
-- update our can be knocked off bike status accordingly | -- update our can be knocked off bike status accordingly | ||
setPedCanBeKnockedOffBike( | setPedCanBeKnockedOffBike(localPlayer, knockOff) | ||
end | end | ||
end | end |
Revision as of 01:16, 29 January 2012
Added in MTA SA 1.3
This event is triggered when a vehicle collides with peds/vehicles/objects but not buildings.
Note: collidedWith will be false if it's a default SA object and it will trigger twice for vehicles because one vehicle hit another and one got hit by another.
Parameters
collidedWith, force, bodyPart, collisionX, collisionY, collisionZ, velocityX, velocityY, velocityZ
entity theHitElement, float force, int bodypart, float collisionX, float collisionY, float collisionZ, float velocityX, float velocityY, float velocityZ, float hitElementForce, int model
- theHitElement: the entity that took damage
- force: the force of the damage (Note: this is NOT the damage it is a force value which is then multiplied by the vehicles collision damage multiplier. for an example of this see below)
- bodyPart: the bodypart that hit the other element
- collisionX: the X position the collision took place
- collisionY: the Y position the collision took place
- collisionZ: the Z position the collision took place
- velocityX: the X velocity of the source before the collision took place
- velocityY: the Y velocity of the source before the collision took place
- velocityZ: the Z velocity of the source before the collision took place
- hitElementforce: 0 for non vehicles or the force of the other vehicle
- model: model of the hit element (useful to detect building collisions as hitElement will be nil)
Source
The source of this event is the vehicle that collided with something.
Example
addEventHandler("onClientVehicleCollision", root, function(collider,force, bodyPart, x, y, z, vx, vy, vz) if ( source == getPedOccupiedVehicle(localPlayer) ) then -- force does not take into account the collision damage multiplier (this is what makes heavy vehicles take less damage than banshees for instance) so take that into account to get the damage delt local fDamageMultiplier = getVehicleHandling(source).collisionDamageMultiplier -- Create a marker (I've scaled this down to 1% of the actual damage as we get huge markers else) local m = createMarker(x, y, z, "corona", force * fDamageMultiplier * 0.01, 0, 9, 231) -- Destroy the marker in 2 seconds setTimer(destroyElement, 2000, 1, m) end end )
-- This code works because onClientVehicleCollision is triggered before any SA reaction to the collision, therefore we can update the knocked off bike status just before the collision and stop the falling off effect happening :) addEventHandler("onClientVehicleCollision", root, function ( hit ) -- firstly did we trigger this event if ( source == getPedOccupiedVehicle(localPlayer) ) then -- knock off defaults to false local knockOff = false -- if our hit element is nil (we just hit an SA map object) if ( hit == nil ) then -- set knockOff to true knockOff = true end -- update our can be knocked off bike status accordingly setPedCanBeKnockedOffBike(localPlayer, knockOff) end end )
See Also
Client vehicle events
- onClientTrailerAttach
- onClientTrailerDetach
- onClientVehicleCollision
- onClientVehicleDamage
- onClientVehicleEnter
- onClientVehicleExit
- onClientVehicleExplode
- onClientVehicleNitroStateChange
- onClientVehicleRespawn
- onClientVehicleStartEnter
- onClientVehicleStartExit
- onClientVehicleWeaponHit
Client event functions
- triggerLatentServerEvent
- triggerServerEvent
- Shared
- addEvent
- addEventHandler
- cancelEvent
- cancelLatentEvent
- getEventHandlers
- getLatentEventHandles
- getLatentEventStatus
- removeEventHandler
- triggerEvent
- wasEventCancelled