Files
wnsrc/gamemodes/helix/plugins/area/sh_plugin.lua

105 lines
2.5 KiB
Lua
Raw Normal View History

2024-08-04 23:54:45 +03:00
--[[
| 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, "How many seconds between each time a character's current area is calculated.",
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 = "areas"
}
)
ix.option.Add("showAreaNotices", ix.type.bool, true, {
category = "appearance",
})
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