mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
105 lines
2.5 KiB
Lua
105 lines
2.5 KiB
Lua
|
|
--[[
|
||
|
|
| 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/
|
||
|
|
--]]
|
||
|
|
|
||
|
|
|
||
|
|
local PLUGIN = PLUGIN
|
||
|
|
|
||
|
|
PLUGIN.name = "Areas"
|
||
|
|
PLUGIN.author = "`impulse"
|
||
|
|
PLUGIN.description = "Provides customizable area definitions."
|
||
|
|
|
||
|
|
ix.area = ix.area or {}
|
||
|
|
ix.area.types = ix.area.types or {}
|
||
|
|
ix.area.properties = ix.area.properties or {}
|
||
|
|
ix.area.stored = ix.area.stored or {}
|
||
|
|
|
||
|
|
ix.config.Add("areaTickTime", 1, "Combien de secondes entre chaque calcul de la zone actuelle d'un personnage.",
|
||
|
|
function(oldValue, newValue)
|
||
|
|
if (SERVER) then
|
||
|
|
timer.Remove("ixAreaThink")
|
||
|
|
timer.Create("ixAreaThink", newValue, 0, function()
|
||
|
|
PLUGIN:AreaThink()
|
||
|
|
end)
|
||
|
|
end
|
||
|
|
end,
|
||
|
|
{
|
||
|
|
data = {min = 0.1, max = 4},
|
||
|
|
category = "Zones"
|
||
|
|
}
|
||
|
|
)
|
||
|
|
|
||
|
|
ix.option.Add("showAreaNotices", ix.type.bool, true, {
|
||
|
|
category = "Apparence",
|
||
|
|
})
|
||
|
|
|
||
|
|
function ix.area.AddProperty(name, type, default, data)
|
||
|
|
ix.area.properties[name] = {
|
||
|
|
type = type,
|
||
|
|
default = default
|
||
|
|
}
|
||
|
|
end
|
||
|
|
|
||
|
|
function ix.area.AddType(type, name)
|
||
|
|
name = name or type
|
||
|
|
|
||
|
|
-- only store localized strings on the client
|
||
|
|
ix.area.types[type] = CLIENT and name or true
|
||
|
|
end
|
||
|
|
|
||
|
|
function PLUGIN:SetupAreaProperties()
|
||
|
|
ix.area.AddType("area")
|
||
|
|
|
||
|
|
ix.area.AddProperty("color", ix.type.color, ix.config.Get("color"))
|
||
|
|
ix.area.AddProperty("display", ix.type.bool, true)
|
||
|
|
end
|
||
|
|
|
||
|
|
ix.util.Include("sv_plugin.lua")
|
||
|
|
ix.util.Include("cl_plugin.lua")
|
||
|
|
ix.util.Include("sv_hooks.lua")
|
||
|
|
ix.util.Include("cl_hooks.lua")
|
||
|
|
|
||
|
|
-- return world center, local min, and local max from world start/end positions
|
||
|
|
function PLUGIN:GetLocalAreaPosition(startPosition, endPosition)
|
||
|
|
local center = LerpVector(0.5, startPosition, endPosition)
|
||
|
|
local min = WorldToLocal(startPosition, angle_zero, center, angle_zero)
|
||
|
|
local max = WorldToLocal(endPosition, angle_zero, center, angle_zero)
|
||
|
|
|
||
|
|
return center, min, max
|
||
|
|
end
|
||
|
|
|
||
|
|
do
|
||
|
|
local COMMAND = {}
|
||
|
|
COMMAND.description = "@cmdAreaEdit"
|
||
|
|
COMMAND.adminOnly = true
|
||
|
|
|
||
|
|
function COMMAND:OnRun(client)
|
||
|
|
client:SetWepRaised(false)
|
||
|
|
|
||
|
|
net.Start("ixAreaEditStart")
|
||
|
|
net.Send(client)
|
||
|
|
end
|
||
|
|
|
||
|
|
ix.command.Add("AreaEdit", COMMAND)
|
||
|
|
end
|
||
|
|
|
||
|
|
do
|
||
|
|
local PLAYER = FindMetaTable("Player")
|
||
|
|
|
||
|
|
-- returns the current area the player is in, or the last valid one if the player is not in an area
|
||
|
|
function PLAYER:GetArea()
|
||
|
|
return self.ixArea
|
||
|
|
end
|
||
|
|
|
||
|
|
-- returns true if the player is in any area, this does not use the last valid area like GetArea does
|
||
|
|
function PLAYER:IsInArea()
|
||
|
|
return self.ixInArea
|
||
|
|
end
|
||
|
|
end
|