Jump to content

Jail Timer


Dice

Recommended Posts

--server 
function jailPlayer( player, cmd, target, ttime ) 
    if isPlayerAdmin ( player ) then 
        jailedPlayer = getPlayerFromName ( target ) 
        if jailedPlayer then 
            if getElementData ( jailedPlayer, "jailed" ) == false then 
                if isPedInVehicle ( jailedPlayer ) then 
                    removePedFromVehicle ( jailedPlayer ) 
                end 
                local jx, jy, jz = unpack(jailcells[math.random(#jailcells)]) 
                setElementDimension ( jailedPlayer, 60601 ) 
                setElementInterior ( jailedPlayer, 12 ) 
                setElementPosition ( jailedPlayer, jx, jy, jz ) 
                setElementData ( jailedPlayer, "jailed", true ) 
                triggerClientEvent ( root, "clientStartTimer", jailedPlayer, jailedPlayer ) 
            else 
                outputChatBox ( "This Player is already jailed!", player, 255, 0, 0 ) 
            end 
        else 
            outputChatBox ( "Player does not exist!", player, 255, 0, 0 ) 
        end 
    end 
end 
addCommandHandler ( "jail", jailPlayer ) 
  
  
--client 
  
function startTimer ( jailedPlayer, ttime ) 
    ttimef = ttime 
    setTimer ( clientUnJail, ttimef, 1, localPlayer ) 
end 
addEvent ( "clientStartTimer", true ) 
addEventHandler ( "clientStartTimer", resourceRoot, startTimer ) 
  
function clientUnJail ( localPlayer ) 
    triggerServerEvent ( "sUnJail", localPlayer ) 
end 
  
  
---server 
  
function unjailPlayer ( jailedPlayer ) 
    setElementData ( jailedPlayer, "jailed", false ) 
    setElementDimension ( jailedPlayer, 0 ) 
    setElementInterior ( jailedPlayer, 0 ) 
    setElementPosition ( jailedPlayer, 2492.408, 2773.22, 10.80 ) 
end      
addEvent ( "sUnJail", true ) 
addEventHandler ( "sUnJail", root, unjailPlayer ) 

Hi, im trying to get the timer to work on this jail system can someoen help?

Link to comment

There's no need to use client side !

[server]

timeToJail = 1 -- In minutes ! 
  
function jailPlayer( player, cmd, target, ttime ) 
    if isPlayerAdmin ( player ) then 
        jailedPlayer = getPlayerFromName ( target ) 
        if jailedPlayer then 
            if getElementData ( jailedPlayer, "jailed" ) == false then 
                if isPedInVehicle ( jailedPlayer ) then 
                    removePedFromVehicle ( jailedPlayer ) 
                end 
                local jx, jy, jz = unpack(jailcells[math.random(#jailcells)]) 
                setElementDimension ( jailedPlayer, 60601 ) 
                setElementInterior ( jailedPlayer, 12 ) 
                setElementPosition ( jailedPlayer, jx, jy, jz ) 
                setElementData ( jailedPlayer, "jailed", true ) 
                setTimer ( function ( ) 
                    setElementData ( jailedPlayer, "jailed", false ) 
                    setElementDimension ( jailedPlayer, 0 ) 
                    setElementInterior ( jailedPlayer, 0 ) 
                    setElementPosition ( jailedPlayer, 2492.408, 2773.22, 10.80 ) 
                end, ( timeToJail * 1000 ) * 60, 1 ) 
            else 
                outputChatBox ( "This Player is already jailed!", player, 255, 0, 0 ) 
            end 
        else 
            outputChatBox ( "Player does not exist!", player, 255, 0, 0 ) 
        end 
    end 
end 
addCommandHandler ( "jail", jailPlayer ) 

Just change the ' timeToJail ' to the time you want ..

Link to comment
function jailPlayer( player, cmd, target, ttime ) 
    if isPlayerAdmin ( player ) then 
        jailedPlayer = getPlayerFromName ( target ) 
        if jailedPlayer then 
            if getElementData ( jailedPlayer, "jailed" ) == false then 
                if isPedInVehicle ( jailedPlayer ) then 
                    removePedFromVehicle ( jailedPlayer ) 
                end  
                local jx, jy, jz = unpack(jailcells[math.random(#jailcells)]) 
                setElementDimension ( jailedPlayer, 60601 ) 
                setElementInterior ( jailedPlayer, 12 ) 
                setElementPosition ( jailedPlayer, jx, jy, jz ) 
                setElementData ( jailedPlayer, "jailed", true ) 
                setTimer ( function ( ) 
                    setElementData ( jailedPlayer, "jailed", false ) 
                    setElementDimension ( jailedPlayer, 0 ) 
                    setElementInterior ( jailedPlayer, 0 ) 
                    setElementPosition ( jailedPlayer, 2492.408, 2773.22, 10.80 ) 
                end, ( ttime * 1000 ) * 60, 1 ) 
            else 
                outputChatBox ( "This Player is already jailed!", player, 255, 0, 0 ) 
            end 
        else 
            outputChatBox ( "Player does not exist!", player, 255, 0, 0 ) 
        end 
    end 
end 
addCommandHandler ( "jail", jailPlayer ) 

This should do it, Give it a try ..

Link to comment
  • Moderators

Don't forget to check after the timer ends, if the player is an element else you will have warnings when he leaves before the timer ends. isElement()

---

or as you said, put the timer in a table with the player user data as key. +argument timer location.

When he leaves you can stop the timer easily.

[player] ={timer,timer,timer}

There are many possibility's. :D

Link to comment
  • Moderators
local runningTimers = {} 
  
function jailPlayer( player, cmd, target, ttime ) 
    if isPlayerAdmin ( player ) then 
        jailedPlayer = getPlayerFromName ( target ) 
        if jailedPlayer then 
            if getElementData ( jailedPlayer, "jailed" ) == false then 
                if isPedInVehicle ( jailedPlayer ) then 
                    removePedFromVehicle ( jailedPlayer ) 
                end 
                local jx, jy, jz = unpack(jailcells[math.random(#jailcells)]) 
                setElementDimension ( jailedPlayer, 60601 ) 
                setElementInterior ( jailedPlayer, 12 ) 
                setElementPosition ( jailedPlayer, jx, jy, jz ) 
                setElementData ( jailedPlayer, "jailed", true ) 
                if not runningTimers[jailedPlayer] then 
                   runningTimers[jailedPlayer] = {} 
                end 
                local newTabPos = #runningTimers[jailedPlayer] +1 
                runningTimers[player][newTabPos] = setTimer ( 
                function (newTabPos,jailedPlayer)  
                    runningTimers[player][newTabPos] = nil 
                    setElementData ( jailedPlayer, "jailed", false ) 
                    setElementDimension ( jailedPlayer, 0 ) 
                    setElementInterior ( jailedPlayer, 0 ) 
                    setElementPosition ( jailedPlayer, 2492.408, 2773.22, 10.80 ) 
                end,1000,1,newTabPos,jailedPlayer) 
            else 
                outputChatBox ( "This Player is already jailed!", player, 255, 0, 0 ) 
            end 
        else 
            outputChatBox ( "Player does not exist!", player, 255, 0, 0 ) 
        end 
    end 
end 
addCommandHandler ( "jail", jailPlayer ) 
  
addEventHandler ( "onPlayerQuit", getRootElement(), 
function() 
  if runningTimers[source] then 
     if next(runningTimers[source]) then 
        for i,timer in pairs(runningTimers[source]) do 
            if isTimer(timer) then 
               killTimer(timer) 
            end 
        end 
     end 
  runningTimers[source] = nil 
  end 
end) 
  
  

and no I haven't test anything, there may some mistakes/bugs, but I don't have much time.

Killing timers before executing will safe you some power. This system is only efficient when you use more then 1 timer.

Link to comment
  • Moderators
line 20 why is [player] shouldnt that be jailedPlayer? i'm confused, i'm a noob at tables when it comes to this extent, I just dont get what is going on here.

yes, it should be jailedPlayer. :|

Here fixed.

local runningTimers = {} 
  
function jailPlayer( player, cmd, target, ttime ) 
    if isPlayerAdmin ( player ) then 
        jailedPlayer = getPlayerFromName ( target ) 
        if jailedPlayer then 
            if getElementData ( jailedPlayer, "jailed" ) == false then 
                if isPedInVehicle ( jailedPlayer ) then 
                    removePedFromVehicle ( jailedPlayer ) 
                end 
                local jx, jy, jz = unpack(jailcells[math.random(#jailcells)]) 
                setElementDimension ( jailedPlayer, 60601 ) 
                setElementInterior ( jailedPlayer, 12 ) 
                setElementPosition ( jailedPlayer, jx, jy, jz ) 
                setElementData ( jailedPlayer, "jailed", true ) 
                if not runningTimers[jailedPlayer] then 
                   runningTimers[jailedPlayer] = {} 
                end 
                local newTabPos = #runningTimers[jailedPlayer] +1 
                runningTimers[jailedPlayer][newTabPos] = setTimer ( 
                function (newTabPos,jailedPlayer)  
                    runningTimers[jailedPlayer][newTabPos] = nil 
                    setElementData ( jailedPlayer, "jailed", false ) 
                    setElementDimension ( jailedPlayer, 0 ) 
                    setElementInterior ( jailedPlayer, 0 ) 
                    setElementPosition ( jailedPlayer, 2492.408, 2773.22, 10.80 ) 
                end,1000,1,newTabPos,jailedPlayer) 
            else 
                outputChatBox ( "This Player is already jailed!", player, 255, 0, 0 ) 
            end 
        else 
            outputChatBox ( "Player does not exist!", player, 255, 0, 0 ) 
        end 
    end 
end 
addCommandHandler ( "jail", jailPlayer ) 
  
addEventHandler ( "onPlayerQuit", getRootElement(), 
function() 
  if runningTimers[source] then 
     if next(runningTimers[source]) then 
        for i,timer in pairs(runningTimers[source]) do 
            if isTimer(timer) then 
               killTimer(timer) 
            end 
        end 
     end 
  runningTimers[source] = nil 
  end 
end) 
  
  

No, it works fine, just wondering if that is how it is suppose to be.

There are many ways to Rome. If I let somebody else, script this. It probably will look differed.

I like to build my timers in to a table core, so I can easily manage them. With manage I mean: stop them when they should be stopped.

With this you can add more timers in to the same system. When somebody leaves the server, all timers that have been managed will be killed before executing.

  
local runningTimers = {} 
  
function timerset() 
    local newTabPos = #runningTimers[myPlayer] +1 
    runningTimers[myPlayer][newTabPos] = setTimer ( 
    function (newTabPos,myPlayer) 
        runningTimers[myPlayer][newTabPos] = nil 
    end,30000,1,newTabPos,myPlayer) 
end 
  
  
addEventHandler ( "onPlayerQuit", getRootElement(), 
function() 
  if runningTimers[source] then 
     if next(runningTimers[source]) then 
        for i,timer in pairs(runningTimers[source]) do 
            if isTimer(timer) then 
               killTimer(timer) 
            end 
        end 
     end 
  runningTimers[source] = nil 
  end 
end) 
  
  

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...