158 lines
		
	
	
	
		
			4.1 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			158 lines
		
	
	
	
		
			4.1 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| lastCreatedZoneType = nil
 | |
| lastCreatedZone = nil
 | |
| createdZoneType = nil
 | |
| createdZone = nil
 | |
| drawZone = false
 | |
| 
 | |
| RegisterNetEvent("polyzone:pzcreate")
 | |
| AddEventHandler("polyzone:pzcreate", function(zoneType, name, args)
 | |
|   if createdZone ~= nil then
 | |
|     TriggerEvent('chat:addMessage', {
 | |
|       color = { 255, 0, 0},
 | |
|       multiline = true,
 | |
|       args = {"Me", "A shape is already being created!"}
 | |
|     })
 | |
|     return
 | |
|   end
 | |
| 
 | |
|   if zoneType == 'poly' then
 | |
|     polyStart(name)
 | |
|   elseif zoneType == "circle" then
 | |
|     local radius = nil
 | |
|     if #args >= 3 then radius = tonumber(args[3])
 | |
|     else radius = tonumber(GetUserInput("Enter radius:")) end
 | |
|     if radius == nil then
 | |
|       TriggerEvent('chat:addMessage', {
 | |
|         color = { 255, 0, 0},
 | |
|         multiline = true,
 | |
|         args = {"Me", "CircleZone requires a radius (must be a number)!"}
 | |
|       })
 | |
|       return
 | |
|     end
 | |
|     circleStart(name, radius)
 | |
|   elseif zoneType == "box" then
 | |
|     local length = nil
 | |
|     if #args >= 3 then length = tonumber(args[3])
 | |
|     else length = tonumber(GetUserInput("Enter length:")) end
 | |
|     if length == nil or length < 0.0 then
 | |
|       TriggerEvent('chat:addMessage', {
 | |
|         color = { 255, 0, 0},
 | |
|         multiline = true,
 | |
|         args = {"Me", "BoxZone requires a length (must be a positive number)!"}
 | |
|       })
 | |
|       return
 | |
|     end
 | |
|     local width = nil
 | |
|     if #args >= 4 then width = tonumber(args[4])
 | |
|     else width = tonumber(GetUserInput("Enter width:")) end
 | |
|     if width == nil or width < 0.0 then
 | |
|       TriggerEvent('chat:addMessage', {
 | |
|         color = { 255, 0, 0},
 | |
|         multiline = true,
 | |
|         args = {"Me", "BoxZone requires a width (must be a positive number)!"}
 | |
|       })
 | |
|       return
 | |
|     end
 | |
|     boxStart(name, 0, length, width)
 | |
|   else
 | |
|     return
 | |
|   end
 | |
|   createdZoneType = zoneType
 | |
|   drawZone = true
 | |
|   disableControlKeyInput()
 | |
|   drawThread()
 | |
| end)
 | |
| 
 | |
| RegisterNetEvent("polyzone:pzfinish")
 | |
| AddEventHandler("polyzone:pzfinish", function()
 | |
|   if createdZone == nil then
 | |
|     return
 | |
|   end
 | |
| 
 | |
|   if createdZoneType == 'poly' then
 | |
|     polyFinish()
 | |
|   elseif createdZoneType == "circle" then
 | |
|     circleFinish()
 | |
|   elseif createdZoneType == "box" then
 | |
|     boxFinish()
 | |
|   end
 | |
| 
 | |
|   TriggerEvent('chat:addMessage', {
 | |
|     color = { 0, 255, 0},
 | |
|     multiline = true,
 | |
|     args = {"Me", "Check PolyZone's root folder for polyzone_created_zones.txt to get the zone!"}
 | |
|   })
 | |
| 
 | |
|   lastCreatedZoneType = createdZoneType
 | |
|   lastCreatedZone = createdZone
 | |
| 
 | |
|   drawZone = false
 | |
|   createdZone = nil
 | |
|   createdZoneType = nil
 | |
| end)
 | |
| 
 | |
| RegisterNetEvent("polyzone:pzlast")
 | |
| AddEventHandler("polyzone:pzlast", function()
 | |
|   if createdZone ~= nil or lastCreatedZone == nil then
 | |
|     return
 | |
|   end
 | |
|   if lastCreatedZoneType == 'poly' then
 | |
|     TriggerEvent('chat:addMessage', {
 | |
|       color = { 0, 255, 0},
 | |
|       multiline = true,
 | |
|       args = {"Me", "The command pzlast only supports BoxZone and CircleZone for now"}
 | |
|     })
 | |
|   end
 | |
| 
 | |
|   local name = GetUserInput("Enter name (or leave empty to reuse last zone's name):")
 | |
|   if name == nil then
 | |
|     return
 | |
|   elseif name == "" then
 | |
|     name = lastCreatedZone.name
 | |
|   end
 | |
|   createdZoneType = lastCreatedZoneType
 | |
|   if createdZoneType == 'box' then
 | |
|     local minHeight, maxHeight
 | |
|     if lastCreatedZone.minZ then
 | |
|       minHeight = lastCreatedZone.center.z - lastCreatedZone.minZ
 | |
|     end
 | |
|     if lastCreatedZone.maxZ then
 | |
|       maxHeight = lastCreatedZone.maxZ - lastCreatedZone.center.z
 | |
|     end
 | |
|     boxStart(name, lastCreatedZone.offsetRot, lastCreatedZone.length, lastCreatedZone.width, minHeight, maxHeight)
 | |
|   elseif createdZoneType == 'circle' then
 | |
|     circleStart(name, lastCreatedZone.radius, lastCreatedZone.useZ)
 | |
|   end
 | |
|   drawZone = true
 | |
|   disableControlKeyInput()
 | |
|   drawThread()
 | |
| end)
 | |
| 
 | |
| RegisterNetEvent("polyzone:pzcancel")
 | |
| AddEventHandler("polyzone:pzcancel", function()
 | |
|   if createdZone == nil then
 | |
|     return
 | |
|   end
 | |
| 
 | |
|   TriggerEvent('chat:addMessage', {
 | |
|     color = {255, 0, 0},
 | |
|     multiline = true,
 | |
|     args = {"Me", "Zone creation canceled!"}
 | |
|   })
 | |
| 
 | |
|   drawZone = false
 | |
|   createdZone = nil
 | |
|   createdZoneType = nil
 | |
| end)
 | |
| 
 | |
| -- Drawing
 | |
| function drawThread()
 | |
|   Citizen.CreateThread(function()
 | |
|     while drawZone do
 | |
|       if createdZone then
 | |
|         createdZone:draw(true)
 | |
|       end
 | |
|       Wait(0)
 | |
|     end
 | |
|   end)
 | |
| end
 | 
