mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
Upload
This commit is contained in:
136
gamemodes/helix/plugins/area/sv_hooks.lua
Normal file
136
gamemodes/helix/plugins/area/sv_hooks.lua
Normal file
@@ -0,0 +1,136 @@
|
||||
--[[
|
||||
| This file was obtained through the combined efforts
|
||||
| of Madbluntz & Plymouth Antiquarian Society.
|
||||
|
|
||||
| Credits: lifestorm, Gregory Wayne Rossel JR.,
|
||||
| Maloy, DrPepper10 @ RIP, Atle!
|
||||
|
|
||||
| Visit for more: https://plymouth.thetwilightzone.ru/
|
||||
--]]
|
||||
|
||||
|
||||
function PLUGIN:LoadData()
|
||||
hook.Run("SetupAreaProperties")
|
||||
ix.area.stored = self:GetData() or {}
|
||||
|
||||
timer.Create("ixAreaThink", ix.config.Get("areaTickTime"), 0, function()
|
||||
self:AreaThink()
|
||||
end)
|
||||
end
|
||||
|
||||
function PLUGIN:SaveData()
|
||||
self:SetData(ix.area.stored)
|
||||
end
|
||||
|
||||
function PLUGIN:PlayerInitialSpawn(client)
|
||||
timer.Simple(1, function()
|
||||
if (IsValid(client)) then
|
||||
local json = util.TableToJSON(ix.area.stored)
|
||||
local compressed = util.Compress(json)
|
||||
local length = compressed:len()
|
||||
|
||||
net.Start("ixAreaSync")
|
||||
net.WriteUInt(length, 32)
|
||||
net.WriteData(compressed, length)
|
||||
net.Send(client)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
function PLUGIN:PlayerLoadedCharacter(client)
|
||||
client.ixArea = ""
|
||||
client.ixInArea = nil
|
||||
end
|
||||
|
||||
function PLUGIN:PlayerSpawn(client)
|
||||
client.ixArea = ""
|
||||
client.ixInArea = nil
|
||||
end
|
||||
|
||||
function PLUGIN:AreaThink()
|
||||
for _, client in ipairs(player.GetAll()) do
|
||||
local character = client:GetCharacter()
|
||||
|
||||
if (!client:Alive() or !character) then
|
||||
continue
|
||||
end
|
||||
|
||||
local overlappingBoxes = {}
|
||||
local position = client:GetPos() + client:OBBCenter()
|
||||
|
||||
for id, info in pairs(ix.area.stored) do
|
||||
if (position:WithinAABox(info.startPosition, info.endPosition)) then
|
||||
overlappingBoxes[#overlappingBoxes + 1] = id
|
||||
end
|
||||
end
|
||||
|
||||
if (#overlappingBoxes > 0) then
|
||||
local oldID = client:GetArea()
|
||||
local id = overlappingBoxes[1]
|
||||
|
||||
if (oldID != id) then
|
||||
hook.Run("OnPlayerAreaChanged", client, client.ixArea, id)
|
||||
client.ixArea = id
|
||||
end
|
||||
|
||||
client.ixInArea = true
|
||||
else
|
||||
client.ixInArea = false
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function PLUGIN:OnPlayerAreaChanged(client, oldID, newID)
|
||||
net.Start("ixAreaChanged")
|
||||
net.WriteString(oldID)
|
||||
net.WriteString(newID)
|
||||
net.Send(client)
|
||||
end
|
||||
|
||||
net.Receive("ixAreaAdd", function(length, client)
|
||||
if (!client:Alive() or !CAMI.PlayerHasAccess(client, "Helix - AreaEdit", nil)) then
|
||||
return
|
||||
end
|
||||
|
||||
local id = net.ReadString()
|
||||
local type = net.ReadString()
|
||||
local startPosition, endPosition = net.ReadVector(), net.ReadVector()
|
||||
local properties = net.ReadTable()
|
||||
|
||||
if (!ix.area.types[type]) then
|
||||
client:NotifyLocalized("areaInvalidType")
|
||||
return
|
||||
end
|
||||
|
||||
if (ix.area.stored[id]) then
|
||||
client:NotifyLocalized("areaAlreadyExists")
|
||||
return
|
||||
end
|
||||
|
||||
for k, v in pairs(properties) do
|
||||
if (!isstring(k) or !ix.area.properties[k]) then
|
||||
continue
|
||||
end
|
||||
|
||||
properties[k] = ix.util.SanitizeType(ix.area.properties[k].type, v)
|
||||
end
|
||||
|
||||
ix.area.Create(id, type, startPosition, endPosition, nil, properties)
|
||||
ix.log.Add(client, "areaAdd", id)
|
||||
end)
|
||||
|
||||
net.Receive("ixAreaRemove", function(length, client)
|
||||
if (!client:Alive() or !CAMI.PlayerHasAccess(client, "Helix - AreaEdit", nil)) then
|
||||
return
|
||||
end
|
||||
|
||||
local id = net.ReadString()
|
||||
|
||||
if (!ix.area.stored[id]) then
|
||||
client:NotifyLocalized("areaDoesntExist")
|
||||
return
|
||||
end
|
||||
|
||||
ix.area.Remove(id)
|
||||
ix.log.Add(client, "areaRemove", id)
|
||||
end)
|
||||
Reference in New Issue
Block a user