Client :
--***********************************--
--***********************************--
-- Jail System --
-- By Al3grab --
-- Client Side --
--***********************************--
--***********************************--
-- 1.0 Made At 3/9/2011 | 12:15 PM --
-- 2.0 Made At 3/2/2012 | 06:15 PM --
-- 2.1 Made At 22/5/2012 | 4:00 PM --
lp = getLocalPlayer()
rRoot = getResourceRootElement(getThisResource())
setElementData(lp,"jailed",false)
------
addEventHandler("onClientResourceStart",rRoot,function()
triggerServerEvent("getDataz",lp,lp)
outputDebugString("Jail System v2.1 By Al3grab | Started")
end )
desz = {}
addEvent("sendDataz",true)
addEventHandler("sendDataz",root,function(jTable,tTable)
------
jWin = guiCreateWindow(460,172,445,416,"Jail System v2.1 | By Al3grab",false)
--- Center Window ---
local screenW,screenH=guiGetScreenSize()
local windowW,windowH=guiGetSize(jWin,false)
local x,y = (screenW-windowW)/2,(screenH-windowH)/2
guiSetPosition(jWin,x,y,false)
----- Center Window -----
guiSetVisible(jWin,false)
guiWindowSetSizable(jWin,false)
-------------------------
jBut = guiCreateButton(247,338,167,31,"Jail Him",false,jWin)
tGrid = guiCreateGridList(240,184,190,144,false,jWin)
guiGridListSetSelectionMode(tGrid,0)
-------
--
sEdit = guiCreateEdit(14,380,217,23,"Search ..",false,jWin)
--
--------
local timeC = guiGridListAddColumn( tGrid, "Time", 0.85 )
if timeC then
for k,v in ipairs ( tTable ) do
local time = v[1]
local des = v[2]
local row = guiGridListAddRow ( tGrid )
desz[row] = des
guiGridListSetItemText ( tGrid, row, timeC, time.." "..des, false, true )
end
local row = guiGridListAddRow ( tGrid )
guiGridListSetItemText ( tGrid, row, timeC,"Other ..", false, true )
end
--------
jGrid = guiCreateGridList(240,31,190,144,false,jWin)
guiGridListSetSelectionMode(jGrid,0)
--------
local jailC = guiGridListAddColumn( jGrid, "Jail", 0.85 )
for k,v in ipairs ( jTable ) do
local name = v[1]
local row = guiGridListAddRow ( jGrid )
guiGridListSetItemText ( jGrid, row, jailC, name, false, false )
end
jcBut = guiCreateButton(246,378,172,24,"Close",false,jWin)
function jailShow ()
guiSetVisible(jWin,not guiGetVisible ( jWin ) )
showCursor(guiGetVisible ( jWin ) )
guiSetInputEnabled(guiGetVisible ( jWin ) )
destroyElement(pList)
-- Players List
pList = guiCreateGridList(14,31,218,338,false,jWin)
column = guiGridListAddColumn( pList, "Player", 0.85 )
if ( column ) then
for id, player in ipairs(getElementsByType("player")) do
row = guiGridListAddRow ( pList )
guiGridListSetItemText ( pList, row, column, getPlayerName ( player ), false, false )
end
end
-- Players List
end
addEvent("jailShow",true)
addEventHandler("jailShow",root,jailShow)
function changeText(button,state,x,y)
selectedRow, selectedCol = guiGridListGetSelectedItem( pList )
sPlayer = guiGridListGetItemText( pList, selectedRow, selectedCol )
local thePlr = getPlayerFromName(sPlayer)
if thePlr then
local isJailed = getElementData(thePlr,"jailed")
if isJailed == false then
guiSetText(jBut,"Jail Him")
elseif isJailed == true then
guiSetText(jBut,"Release Him")
end
end
end
addEventHandler("onClientGUIClick",root,changeText)
function onClick (button, state, absoluteX, absoluteY)
selectedRow, selectedCol = guiGridListGetSelectedItem( pList )
sPlayer = guiGridListGetItemText( pList, selectedRow, selectedCol )
jail = guiGridListGetItemText ( jGrid, guiGridListGetSelectedItem ( jGrid ), 1 )
time = guiGridListGetItemText ( tGrid, guiGridListGetSelectedItem ( tGrid ), 1 )
timeDes = tostring(desz[guiGridListGetSelectedItem ( tGrid )])
if ( source == jBut ) then
if guiGetText(jBut) == "Jail Him" then
if time ~= "Other .." then
triggerServerEvent("JailHimx",lp,sPlayer,jail,time,timeDes)
else
createTimeSelect(sPlayer,jail)
end
elseif guiGetText(jBut) == "Release Him" then
triggerServerEvent("unJailHim",lp,sPlayer)
end
----------
elseif ( source == jcBut ) then
guiSetVisible (jWin, false)
showCursor (false)
guiSetInputEnabled(false)
end
end
addEventHandler( "onClientGUIClick", root, onClick )
------------
end )
addEventHandler("onClientPlayerDamage",root,function(at)
if getElementData(source,"jailed") == true then
if at then cancelEvent() end
end
end )
-------
addEventHandler("onClientGUIClick",root,function()
if source == sEdit then
guiSetText(sEdit,"")
--[[
else
guiSetText(sEdit,"Search ..")
--]]
end end )
addEventHandler("onClientGUIChanged",root,function()
if source == sEdit then
------
guiGridListClear(pList)
for k,v in ipairs ( getElementsByType("player") ) do
local name = string.lower(getPlayerName(v))
if name then
if string.find (name,string.lower(guiGetText(sEdit)) ) then
row = guiGridListAddRow ( pList )
guiGridListSetItemText ( pList, row, column, getPlayerName ( v ), false, false )
end
end
end
end
------
end )
------
function createTimeSelect(theJailed,theJail)
if not tostring(theJailed) then outputChatBox("** #FFFF00Please Select a Player !",255,0,0,true) return end
if not tostring(theJail) then outputChatBox("** #FFFF00Please Select a Jail !",255,0,0,true) return end
if isElement(TimeSelect_Window) then return end
TimeSelect_Window = guiCreateWindow(550,397,270,125,"Enter Time",false)
--
local screenW,screenH=guiGetScreenSize()
local windowW,windowH=guiGetSize(TimeSelect_Window,false)
local x,y = (screenW-windowW)/2,(screenH-windowH)/2
guiSetPosition(TimeSelect_Window,x,y,false)
--
-- guiSetVisible(jWin,false)
--
TimeSelect_Edit = guiCreateEdit(15,37,89,26,"",false,TimeSelect_Window)
TimeSelect_Label = guiCreateLabel(110,41,10,15,"in",false,TimeSelect_Window)
TimeSelect_Grid = guiCreateGridList(126,31,130,95,false,TimeSelect_Window)
guiGridListSetSelectionMode(TimeSelect_Grid,2)
---
column = guiGridListAddColumn( TimeSelect_Grid, "", 0.80 )
r1 = guiGridListAddRow(TimeSelect_Grid)
r2 = guiGridListAddRow(TimeSelect_Grid)
r3 = guiGridListAddRow(TimeSelect_Grid)
guiGridListSetItemText ( TimeSelect_Grid , r1, column, "Hours", false, false )
guiGridListSetItemText ( TimeSelect_Grid , r2, column,"Minutes", false, false )
guiGridListSetItemText ( TimeSelect_Grid , r3, column, "Seconds", false, false )
TimeSelect_Button = guiCreateButton(14,72,91,40,"OK",false,TimeSelect_Window)
--
function onOk()
if source == TimeSelect_Button then
--
removeEventHandler("onClientGUIClick",root,onOk)
--
----------------
theTime = guiGetText(TimeSelect_Edit)
timeType = guiGridListGetItemText ( TimeSelect_Grid, guiGridListGetSelectedItem ( TimeSelect_Grid ) )
--
destroyElement(TimeSelect_Window)
jailShow ()
--
if tonumber(theTime) then
if tostring(timeType) then
triggerServerEvent("JailHimx",lp,theJailed,theJail,theTime.." "..timeType,timeType,true)
else
outputChatBox("** #FFFF00Please Select , Hours or Minutes or Seconds !",255,0,0,true)
end
else
outputChatBox("** #FFFF00Please Enter a Number !",255,0,0,true)
end
----------------
end
end
addEventHandler("onClientGUIClick",root,onOk)
end
Server : --***********************************-- --***********************************-- -- Jail System -- -- By Al3grab -- -- Server Side -- --***********************************-- --***********************************-- Command = get("command") -- getTheCommand rRoot = getResourceRootElement(getThisResource()) ------ function getData(to) local file = xmlLoadFile("data.xml") jTable = {} tTable = {} if file then for k,v in ipairs (xmlNodeGetChildren(xmlFindChild(file,"Jails",0)))do local name = xmlNodeGetAttribute(v,"name") local posX,posY,posZ = xmlNodeGetAttribute(v,"posX"),xmlNodeGetAttribute(v,"posY"),xmlNodeGetAttribute(v,"posZ") local int = xmlNodeGetAttribute(v,"int") local dim = xmlNodeGetAttribute(v,"dim") table.insert(jTable, {name,posX,posY,posZ,int,dim}) end for k,v in ipairs (xmlNodeGetChildren(xmlFindChild(file,"time",0)))do local times = xmlNodeGetAttribute(v,"times") for i =1,50 do local iTime = gettok ( times, i, string.byte(',') ) if iTime then -- if tonumber(iTime) > 59.5 then iTime = math.floor(iTime / 60) iTimeDes = "Minutes" if iTime > 59.5 then iTime = math.floor(iTime / 60) iTimeDes = "Hours" end else iTimeDes = "Seconds" end table.insert(tTable,{iTime,iTimeDes}) end end end end triggerClientEvent(to,"sendDataz",to,jTable,tTable) -- sending to client event end addEvent("getDataz",true) addEventHandler("getDataz",root,getData) addCommandHandler ( Command, -- Adding The Command Handler function ( player, cmd ) if hasObjectPermissionTo ( player, "function.banPlayer" ) then triggerClientEvent(player,"jailShow",player) else outputChatBox(" Access Denied ",player,255,0,0) end end ) anims = { "F_smklean_loop", "M_smklean_loop", "M_smkstnd_loop", "M_smk_drag", "M_smk_in", "M_smk_loop", "M_smk_out", "M_smk_tap" , } function removeVehicle(thePlayer) if isPedInVehicle(thePlayer) then destroyElement(getPedOccupiedVehicle(thePlayer)) end end function JailHim(jailed,theJails,time,timeDes,showWho,timeReady) thePlayer = getPlayerFromName(jailed) if not thePlayer then outputChatBox("** #FFFF00Please Select a Player !",source,255,0,0,true) return end removePedFromVehicle(thePlayer) for k,v in ipairs ( jTable ) do if theJails == v[1] then theJail = v end end if theJail then if tostring(time) then if timeReady == true then theTimex = tonumber(time) else theTimex = gettok ( time, 1, string.byte(timeDes) ) end if timeDes == "Hours" then theTimex = math.floor(theTimex*60*60*1000) elseif timeDes == "Minutes" then theTimex = math.floor(theTimex*60*1000) elseif timeDes == "Seconds" then theTimex = math.floor(theTimex*1000) end startJailTimer ( thePlayer , theTimex ) local x,y,z = theJail[2],theJail[3],theJail[4] local int = theJail[5] local dim = theJail[6] setElementInterior ( thePlayer, int ) setElementDimension ( thePlayer, dim ) setElementPosition (thePlayer,x,y,z ) setElementData(thePlayer,"jailed",true) setElementData(rRoot,""..getPlayerSerial(thePlayer).."-j",true) toggleControl(thePlayer,"fire",false) if showWho ~= true then outputChatBox("** #FFFF00You Jailed [ "..getPlayerName(thePlayer).." #FFFF00] at "..theJail[1].." For "..time,source,255,0,0,true) outputChatBox("** #FFFF00You Have Been Jailed By [ "..getPlayerName(source).." #FFFF00] at "..theJail[1].." For "..time,thePlayer,255,0,0,true) end outputChatBox("** #FFFF00[ "..getPlayerName(thePlayer).." #FFFF00] Has Been Jailed For "..time,root,255,0,0,true) local randomAnim setPedAnimation(thePlayer,"SMOKING",anims[math.random(#anims)],theTimex/2) else outputChatBox("** #FFFF00Please Select Time !",source,255,0,0,true) end else outputChatBox("** #FFFF00Please Select a Jail !",source,255,0,0,true) end end addEvent("JailHimx",true) addEventHandler("JailHimx",root,JailHim) function unJailHim(jailed,showWho) thePlayer = getPlayerFromName(jailed) if not thePlayer then outputChatBox("** #FFFF00Please Select a Player !",source,255,0,0,true) return end --if getElementData(thePlayer,"jailed") == true then setElementInterior ( thePlayer, 0) setElementDimension ( thePlayer, 0 ) setElementPosition ( thePlayer, 1552.9108886719, -1675.5844726563, 16.1953125) setElementData(thePlayer,"jailed",false) setElementData(rRoot,""..getPlayerSerial(thePlayer).."-j",false) if showWho ~= true then outputChatBox("** #FFFF00You Released [ "..getPlayerName(thePlayer).." #FFFF00]",source,255,0,0,true) outputChatBox("** #FFFF00You Have Been Released by [ "..getPlayerName(source).." #FFFF00]",thePlayer,255,0,0,true) end outputChatBox("** #FFFF00[ "..getPlayerName(thePlayer).." #FFFF00] Has Been Released ",root,255,0,0,true) setPedAnimation(thePlayer) stopJailTimer(Player) toggleControl(thePlayer,"fire",true) -- setTimer(killPed,1500,1,thePlayer) --else -- outputChatBox("The Player is Not Jailed !",source,255,0,0,true) --end end addEvent("unJailHim",true)-- unJail addEventHandler("unJailHim",root,unJailHim) addEvent("onJailEnd",true) addEventHandler("onJailEnd",root,function(player) unJailHim(getPlayerName(player),true) end ) addEventHandler("onPlayerSpawn",root, -- Check If He Is Jailed [ OnSpawn ] function() if getElementData(source,"jailed") == true then randomJail = jTable[math.random(#jTable)] if randomJail then x,y,z = randomJail[2],randomJail[3],randomJail[4] int = randomJail[5] dim = randomJail[6] setElementInterior ( source, int ) setElementDimension(source,dim) setElementPosition (source,x,y,z ) end end end) addEventHandler("onPlayerJoin",root, -- Check If He Is Jailed - By Serial [ OnJoin ] function() if getElementData(rRoot,""..getPlayerSerial(source).."-j") == true then randomJail = jTable[math.random(#jTable)] if randomJail then x,y,z = randomJail[2],randomJail[3],randomJail[4] int = randomJail[5] dim = randomJail[6] setElementInterior ( source, int ) setElementDimension(source,dim) setElementPosition (source,x,y,z ) -- time = getElementData(rRoot,""..getPlayerSerial(source).."-t",time) or 5 * 1000 startJailTimer(source,time) setElementData(source,"jailed",true) end end end ) ---- function startJailTimer(Player,theTime) -- to start mission timer .. if Player then TimerDisplay = textCreateDisplay() m,s,cs = msToTimeStr(theTime) fullTime = m..":"..s TimerText = textCreateTextItem ( "Time Left : "..tostring(fullTime).."", 0.39, 0.7 ,"medium",0,255,0,255,2.0,"left","center",255) textDisplayAddText ( TimerDisplay, TimerText ) textDisplayAddObserver ( TimerDisplay, Player ) sortTimerShit(Player,TimerText,theTime) end end --Robbed from JailTimerr resource , and it was robbed from arc_ function msToTimeStr(ms) if not ms then return '' end if ms < 0 then return "0","00","00" end local centiseconds = tostring(math.floor(math.fmod(ms, 1000)/10)) if #centiseconds == 1 then centiseconds = '0' .. centiseconds end local s = math.floor(ms / 1000) local seconds = tostring(math.fmod(s, 60)) if #seconds == 1 then seconds = '0' .. seconds end local minutes = tostring(math.floor(s / 60)) return minutes, seconds, centiseconds end function sortTimerShit(plr,timer,time) -- to sort timer's shit .. if timer and time then if isTimer(timerShitTimer) then killTimer(timerShitTimer) end timerShitTimer = setTimer(function(plr) time = time - 70 m,s,cs = msToTimeStr(time) fullTime = m..":"..s textItemSetText(timer,"Time Left : "..tostring(fullTime).."") if plr then setElementData(rRoot,""..getPlayerSerial(plr).."-t",time) end if ( tonumber(m) <= 0 and tonumber(s) <= 0 and tonumber(cs) <= 0 ) then onTimerFinish(plr,timer) end end , 50 , 0 ,plr ) end end