Last active
March 26, 2018 06:45
-
-
Save NanoAi/29c88aaa206a6fd4ef8e9f1a1145216d to your computer and use it in GitHub Desktop.
rrrrrrrrrreeeeeeeeeeeeee
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
local TOOL = _G.TOOL -- Luadev makes this need to be _G.TOOL otherwise I'd use TOOL. | |
local liveLoad = false | |
local gmodTool = {} | |
if not TOOL then -- If the TOOL variable is not found settup a new variable. | |
gmodTool = weapons.Get("gmod_tool") | |
TOOL = getmetatable(gmodTool.Tool.weld):Create() | |
TOOL.Mode = "mapdefine" | |
liveLoad = true -- If the TOOL variable does not exist that means we are live loading. | |
end | |
if CLIENT then | |
language.Add( "tool.mapdefine.name", "MapDefine" ) | |
language.Add( "tool.mapdefine.desc", "Create custom trigger areas on the map" ) | |
language.Add( "tool.mapdefine.left0", "Select Mins (Bottom Corner)" ) | |
language.Add( "tool.mapdefine.left1", "Select Maxs (Top Corner)" ) | |
language.Add( "tool.mapdefine.left2", "Nudge Mins" ) | |
language.Add( "tool.mapdefine.right2", "Nudge Maxs" ) | |
language.Add( "tool.mapdefine.reload0", "Clear Target Trigger" ) | |
language.Add( "tool.mapdefine.reload0_use", "Clear All Triggers" ) | |
language.Add( "tool.mapdefine.reload2", "Create Trigger" ) | |
language.Add( "tool.mapdefine.reload2_use", "Clear Selection" ) | |
end | |
TOOL.Category = "Administration" | |
TOOL.Name = "#tool.mapdefine.name" | |
TOOL.Information = { | |
{ name = "left0", stage = 0 }, | |
{ name = "left1", stage = 1 }, | |
{ name = "left2", stage = 2 }, | |
{ name = "right0", stage = 0 }, | |
{ name = "right2", stage = 2 }, | |
{ name = "reload0", stage = 0 }, | |
{ name = "reload2", stage = 2 }, | |
{ name = "reload0_use", stage = 0, icon2 = "gui/e.png" }, | |
{ name = "reload2_use", stage = 1, icon2 = "gui/e.png" }, | |
{ name = "reload2_use", stage = 2, icon2 = "gui/e.png" }, | |
} | |
TOOL.Settings = {} | |
TOOL.ClientConVar = { | |
["hitdistance"] = 0, | |
["name"] = "", | |
["allowgoto"] = 1, | |
["forcespawn"] = 0, | |
["nodie"] = 0, | |
["strip"] = 0, | |
["npclose"] = 0, | |
["nojump"] = 0, | |
["nocrouch"] = 0, | |
["noreapply"] = 0, | |
["noreenter"] = 0, | |
["noprops"] = 0, | |
["damage"] = 0, | |
["damage_amount"] = 0, | |
["damage_type"] = 0, | |
["heal"] = 0, | |
["heal_amount"] = 0, | |
["gravity"] = 0, | |
["gravity_amount"] = 0, | |
["groups"] = 0, | |
["filter"] = 0 | |
} | |
if CLIENT then | |
function TOOL:DrawHUD() | |
if not self.Settings.min then return end | |
local trace = LocalPlayer():GetEyeTrace() | |
local hitPos = trace.HitPos | |
cam.Start3D() | |
render.SetColorMaterial() | |
MapDefine:Draw(4, self.Settings.min, self.Settings.max or hitPos, Color(255,150,0,200)) | |
cam.End3D() | |
end | |
function TOOL:BuildCPanel( panel ) | |
local desc = panel:Help( "#tool.mapdefine.desc" ) | |
desc:SetSize( 200, 50 ) | |
panel:TextEntry( "Area Name", "mapdefine_name" ) | |
panel:CheckBox( "Allow Goto", "mapdefine_allowgoto" ) | |
panel:CheckBox( "Force Spawn Area", "mapdefine_forcespawn" ) | |
panel:CheckBox( "Prevent Death", "mapdefine_nodie" ) | |
panel:CheckBox( "Disable Weapons", "mapdefine_strip" ) | |
panel:CheckBox( "NPCs Lose Target", "mapdefine_npclose" ) | |
panel:CheckBox( "Prevent Crouching", "mapdefine_nocrouch" ) | |
panel:CheckBox( "Prevent Jumping", "mapdefine_nojump" ) | |
panel:CheckBox( "Prevent Reapply", "mapdefine_noreapply" ) | |
panel:CheckBox( "Prevent Reenter", "mapdefine_noreenter" ) | |
panel:CheckBox( "Prevent Props/Entities", "mapdefine_noprops" ) | |
panel:CheckBox( "Damage Players", "mapdefine_damage" ) | |
panel:NumSlider( "Damage Amount", "mapdefine_damage_amount", 0, 100, 0) | |
panel:ListBox( "Damage Type" ) | |
panel:CheckBox( "Heal Players", "mapdefine_heal" ) | |
panel:NumSlider( "Heal Amount", "mapdefine_heal_amount", 0, 100, 0) | |
panel:CheckBox( "Modify Gravity", "mapdefine_gravity" ) | |
panel:NumSlider( "Gravity Amount", "mapdefine_gravity_amount", -600, 600, 0) | |
panel:CheckBox( "Limit To Groups", "mapdefine_groups" ) | |
-- Groups Selector Here | |
panel:CheckBox( "Enable Filter", "mapdefine_filter" ) | |
-- Filter Options Here | |
end | |
end | |
local function CanTool(o) | |
return o.IsAdmin and (o:IsAdmin() or o:IsSuperAdmin()) or false | |
end | |
function TOOL:GetClientSettings() | |
local data = {} | |
for setting, default in next, self.ClientConVar do | |
data[setting] = self:GetClientInfo(setting) | |
end | |
return data | |
end | |
function TOOL:LeftClick( trace ) | |
local owner = self:GetOwner() | |
if not CanTool(owner) then return false end | |
local hitPos = trace.HitPos | |
local stage = self:GetStage() | |
if stage == 0 then | |
self.Settings.min = hitPos | |
self:SetStage(1) | |
elseif stage == 1 then | |
self.Settings.max = hitPos | |
self:SetStage(2) | |
elseif stage == 2 then | |
-- nudge logic here (mins) | |
end | |
return true | |
end | |
function TOOL:RightClick( trace ) | |
local owner = self:GetOwner() | |
if not CanTool(owner) then return false end | |
local stage = self:GetStage() | |
if stage == 2 then | |
-- nudge logic here (maxs) | |
return true | |
end | |
return false | |
end | |
function TOOL:Reload( trace ) | |
if not CanTool(self:GetOwner()) then return false end | |
local stage = self:GetStage() | |
local inuse = self:GetOwner():KeyDown(IN_USE) | |
if SERVER and stage == 0 then | |
if inuse then | |
MapDefine:RemoveAll() | |
else | |
for _,v in next, ents.FindInSphere(trace.HitPos, 5) do | |
if ( v.GetClass and v:GetClass() == MapDefine.ClassName ) then | |
MapDefine:Remove(v) | |
break | |
end | |
end | |
end | |
elseif stage == 1 then | |
if inuse then | |
self.Settings.min = nil | |
self.Settings.max = nil | |
self:SetStage(0) | |
end | |
elseif stage == 2 then | |
if SERVER and not inuse then | |
MapDefine:Create(self.Settings, self:GetClientSettings()) | |
end | |
self.Settings.min = nil | |
self.Settings.max = nil | |
self:SetStage(0) | |
end | |
return true | |
end | |
function TOOL:Holster() | |
self.Settings = {} | |
end | |
if liveLoad and next(gmodTool) then | |
TOOL:CreateConVars() | |
gmodTool.Tool[TOOL.Mode] = TOOL -- Fix strangeness | |
weapons.Register(gmodTool, 'gmod_tool') | |
for _, wep in next, ents.FindByClass('gmod_tool') do | |
wep.Tool[TOOL.Mode].SWEP = wep | |
wep.Tool[TOOL.Mode].Owner = wep:GetOwner() | |
wep.Tool[TOOL.Mode].Weapon = wep | |
wep.Tool[TOOL.Mode]:Init() | |
wep:Initialize() | |
wep:Activate() | |
end | |
if CLIENT then | |
hook.Add("PopulateToolMenu", "CustomMenuSettings", function() | |
spawnmenu.AddToolMenuOption( | |
TOOL.Tab or "Main", | |
TOOL.Category or "New Category", | |
TOOL.Mode, | |
TOOL.Name or "#" .. TOOL.Mode, | |
TOOL.Command or "gmod_tool " .. TOOL.Mode, | |
TOOL.Mode, | |
function( panel ) TOOL:BuildCPanel( panel ) end | |
) | |
end) | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment