Initial Commit
This commit is contained in:
153
gamemode/core/sv_zones.lua
Normal file
153
gamemode/core/sv_zones.lua
Normal file
@@ -0,0 +1,153 @@
|
||||
-- ####################################################################################
|
||||
-- ## ##
|
||||
-- ## ##
|
||||
-- ## CASUAL BANANAS CONFIDENTIAL ##
|
||||
-- ## ##
|
||||
-- ## __________________________ ##
|
||||
-- ## ##
|
||||
-- ## ##
|
||||
-- ## Copyright 2014 (c) Casual Bananas ##
|
||||
-- ## All Rights Reserved. ##
|
||||
-- ## ##
|
||||
-- ## NOTICE: All information contained herein is, and remains ##
|
||||
-- ## the property of Casual Bananas. The intellectual and technical ##
|
||||
-- ## concepts contained herein are proprietary to Casual Bananas and may be ##
|
||||
-- ## covered by U.S. and Foreign Patents, patents in process, and are ##
|
||||
-- ## protected by trade secret or copyright law. ##
|
||||
-- ## Dissemination of this information or reproduction of this material ##
|
||||
-- ## is strictly forbidden unless prior written permission is obtained ##
|
||||
-- ## from Casual Bananas ##
|
||||
-- ## ##
|
||||
-- ## _________________________ ##
|
||||
-- ## ##
|
||||
-- ## ##
|
||||
-- ## Casual Bananas is registered with the "Kamer van Koophandel" (Dutch ##
|
||||
-- ## chamber of commerce) in The Netherlands. ##
|
||||
-- ## ##
|
||||
-- ## Company (KVK) number : 59449837 ##
|
||||
-- ## Email : info@casualbananas.com ##
|
||||
-- ## ##
|
||||
-- ## ##
|
||||
-- ####################################################################################
|
||||
|
||||
JB.Zones={}
|
||||
|
||||
hook.Add("InitPostEntity","JB.InitPostEntity.LoadZones",function()
|
||||
if not file.Exists("jailbreak","DATA") then
|
||||
file.CreateDir("jailbreak")
|
||||
end
|
||||
|
||||
if not file.Exists("jailbreak/zones","DATA") then
|
||||
file.CreateDir("jailbreak/zones")
|
||||
end
|
||||
|
||||
if file.Exists("jailbreak/zones/"..game.GetMap()..".txt","DATA") then
|
||||
local data=util.JSONToTable(file.Read("jailbreak/zones/"..game.GetMap()..".txt","DATA"));
|
||||
|
||||
if not data or not data[1] then return end
|
||||
|
||||
JB.Zones=data
|
||||
|
||||
for k,v in pairs(data) do
|
||||
local ent=ents.Create("jb_zone")
|
||||
ent:SetPos(Vector(0,0,0))
|
||||
ent:Spawn()
|
||||
|
||||
ent.handle_min:SetPos(Vector(v.startpos))
|
||||
ent.handle_max:SetPos(Vector(v.endpos))
|
||||
ent._zoneid=k;
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
function JB.SaveZone(startpos,endpos,zoneid)
|
||||
if not file.Exists("jailbreak","DATA") then
|
||||
file.CreateDir("jailbreak")
|
||||
end
|
||||
|
||||
if not file.Exists("jailbreak/zones","DATA") then
|
||||
file.CreateDir("jailbreak/zones")
|
||||
end
|
||||
|
||||
if not zoneid then
|
||||
zoneid = (#JB.Zones) + 1
|
||||
end
|
||||
|
||||
JB.Zones[zoneid] = {}
|
||||
JB.Zones[zoneid]["startpos"]=startpos
|
||||
JB.Zones[zoneid]["endpos"]=endpos
|
||||
|
||||
|
||||
|
||||
file.Write("jailbreak/zones/"..(game.GetMap())..".txt",util.TableToJSON(JB.Zones))
|
||||
|
||||
print(startpos,endpos)
|
||||
|
||||
PrintTable(JB.Zones)
|
||||
|
||||
return zoneid
|
||||
end
|
||||
|
||||
concommand.Add("jb_admin_configmode",function(ply)
|
||||
if not ply:IsSuperAdmin() then return end
|
||||
|
||||
ply:Give("weapon_physgun")
|
||||
ply:SelectWeapon("weapon_physgun")
|
||||
ply:ChatPrint("You have entered map configuration mode.")
|
||||
end)
|
||||
|
||||
local waitSave=false;
|
||||
function JB.Gamemode:OnPhysgunFreeze(weapon, physobj, ent, ply)
|
||||
if not ply:IsSuperAdmin() or waitSave then return false end
|
||||
|
||||
if not IsValid(ent) or ent:GetClass() ~= "jb_zone_handle" then return false end
|
||||
|
||||
ent.isPositioned=true;
|
||||
|
||||
local finishEnt=ent:GetZoneEntity()
|
||||
|
||||
if IsValid(finishEnt.handle_min) and IsValid(finishEnt.handle_max) and finishEnt.handle_min.isPositioned and finishEnt.handle_max.isPositioned then
|
||||
ent._zoneid=JB.SaveZone(tostring(finishEnt.handle_min:GetPos()),tostring(finishEnt.handle_max:GetPos()),ent._zoneid)
|
||||
|
||||
ply:ChatPrint("Zone saved.")
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
function JB.Gamemode:OnPhysgunReload(physgun, ply)
|
||||
if not ply:IsSuperAdmin() then return false end
|
||||
|
||||
local ent=ents.Create("jb_zone")
|
||||
ent:Spawn()
|
||||
|
||||
local ps=ply:GetEyeTrace().HitPos
|
||||
ent.handle_min:SetPos(ps+Vector(-.1,-.1,-.1))
|
||||
ent.handle_max:SetPos(ps+Vector(.1,.1,.1))
|
||||
|
||||
ent:Think()
|
||||
|
||||
ply:ChatPrint("Guard-only zone designator spawned. Freeze both handles (green circles) to save guard-only zone.")
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
function JB.Gamemode:PhysgunPickup(ply,ent)
|
||||
return ply:IsSuperAdmin() and ent:GetClass() == "jb_zone_handle"
|
||||
end
|
||||
|
||||
local oldCleanup=game.CleanUpMap
|
||||
function game.CleanUpMap(dontsend,filters)
|
||||
if not dontsend then
|
||||
dontsend=false
|
||||
end
|
||||
|
||||
if not filters then
|
||||
filters={}
|
||||
end
|
||||
|
||||
table.insert(filters,"jb_zone_handle")
|
||||
table.insert(filters,"jb_zone")
|
||||
|
||||
return oldCleanup(dontsend,filters)
|
||||
end
|
||||
Reference in New Issue
Block a user