Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[ Client.lua ]]
- local collision = 0
- function countCollisions()
- local veh = getPedOccupiedVehicle(localPlayer)
- if veh then
- addEventHandler("onClientVehicleDamage", veh, function() collision = collision + 1 end)
- end
- end
- addEvent("onViperStart", true)
- addEventHandler("onViperStart", getRootElement(), countCollisions)
- function getCollisionData()
- triggerServerEvent("onViperTunnelFinish", localPlayer, collision)
- collision = 0
- removeEventHandler("onClientVehicleCollision", veh, onCollision)
- end
- addEvent("onViperFinish", true)
- addEventHandler("onViperFinish", getRootElement(), getCollisionData)
- --[[ Server.lua ]]
- local MAX_RAD = 5
- local validVehicles = {520}
- local gates = {
- {-1981.29712, -592.02557, 25.71245, "SF"},
- {-1320.26001, -1512.23755, 23.71875, "SF"},
- {1683.51794, -1956.44873, 13.54688, "LS"},
- {85.07242, -1020.74512, 21.90045, "LS"}}
- local scoreboard = {}
- local playerTimes = {}
- local playerCollisions = {}
- local cols = {}
- local lastGate = {}
- function round(num, numDecimalPlaces)
- local mult = 10^(numDecimalPlaces or 0)
- return math.floor(num * mult + 0.5) / mult
- end
- function finalMessage(col, player, seconds)
- if not player then return end
- local collisions = playerCollisions[player]
- outputDebugString("Player "..getPlayerName(player).." has left the viper tunnel")
- outputDebugString("Number of collisions: "..tostring(collisions))
- outputChatBox("#FF0000[VIPER #FFFFFF"..tostring(getElementData(col, "area")).." #FF0000TUNNEL] "..getPlayerName(player).. " #00FF00 Time taken: "..tostring(seconds).." seconds. Collisions: "..tostring(collisions), _, 255, 255, 255, true)
- end
- addEvent("onViperTunnelFinish", true)
- addEventHandler("onViperTunnelFinish", getRootElement(), function (collisions) playerCollisions[source] = collisions end)
- function onHit(elem, matching)
- if not source or not elem or not matching then return false end
- if getElementType(elem) == "vehicle" and getElementModel(elem) == 520 then
- local controller = getVehicleController(elem)
- if not controller then return false end
- if playerTimes[controller] then
- if lastGate[controller] == source then
- lastGate[controller] = nil
- playerTimes[controller] = nil
- else
- local timeDifference = getTickCount() - playerTimes[controller]
- local seconds = round(timeDifference / 1000, 3)
- triggerClientEvent(controller, "onViperFinish", controller)
- setTimer(function() finalMessage(source, controller, seconds) end, 1000, 1)
- playerTimes[controller] = nil
- end
- else
- playerTimes[controller] = getTickCount()
- lastGate[controller] = source
- outputDebugString("Player "..getPlayerName(controller).." has entered the viper tunnel")
- triggerClientEvent(controller, "onViperStart", controller)
- end
- end
- end
- function setup()
- for i, v in ipairs(gates) do
- local col = createColSphere(v[1], v[2], v[3], MAX_RAD)
- createBlip(v[1], v[2], v[3], 53)
- if col then
- setElementData(col, "area", v[4])
- addEventHandler("onColShapeHit", col, onHit)
- cols[#cols + 1] = col
- end
- end
- end
- addEventHandler("onResourceStart", resourceRoot, setup)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement