Code:
local function IsisCreateHook(Type,Function)
Name = tostring(math.random(1,500)..math.random(1,500)..math.random(1,500)..math.random(1,500)..math.random(1,500)..math.random(1,500)..math.random(1,500))
return hook.Add(Type,Name,Function)
end
concommand.Add( "jynxx_menu", function()
surface.PlaySound ("HL1/fvox/beep.wav")
local DermaPanel = vgui.Create( "DFrame" )
DermaPanel:SetPos( 200, 300)
DermaPanel:SetSize( 600, 500 )
DermaPanel:Center()
DermaPanel:SetTitle( "Jynxx's scripts menu" )
DermaPanel:SetVisible( true )
DermaPanel:SetDraggable( true )
DermaPanel:ShowCloseButton( true )
DermaPanel:MakePopup()
DermaPanel.Paint = function()
surface.SetDrawColor( 200, 200, 200, 100 )
surface.DrawRect( 0, 0, DermaPanel:GetWide(), DermaPanel:GetTall() )
surface.SetDrawColor( 255, 255, 255, 255 )
surface.DrawOutlinedRect( 0, 0, DermaPanel:GetWide(), DermaPanel:GetTall() )
end
local CheckBoxThing = vgui.Create( "DCheckBoxLabel", DermaPanel )
CheckBoxThing:SetPos( 30,30 )
CheckBoxThing:SetText( "X-ray" )
CheckBoxThing:SetConVar( "jynxx_xray" )
CheckBoxThing:SizeToContents()
DermaImage = vgui.Create( "DImageButton", DermaPanel )
DermaImage:SetPos( 10, 29 )
DermaImage:SetImage( "icon16/shape_ungroup.png" )
DermaImage:SizeToContents()
local CheckBoxThing = vgui.Create( "DCheckBoxLabel", DermaPanel )
CheckBoxThing:SetPos( 30,60 )
CheckBoxThing:SetText( "Printer finder" )
CheckBoxThing:SetConVar( "jynxx_entity" )
CheckBoxThing:SizeToContents()
DermaImage = vgui.Create( "DImageButton", DermaPanel )
DermaImage:SetPos( 10, 59 )
DermaImage:SetImage( "icon16/magnifier.png" )
DermaImage:SizeToContents()
local CheckBoxThing = vgui.Create( "DCheckBoxLabel", DermaPanel )
CheckBoxThing:SetPos( 180,30 )
CheckBoxThing:SetText( "ESP" )
CheckBoxThing:SetConVar( "jynxx_esp" )
CheckBoxThing:SizeToContents()
DermaImage = vgui.Create( "DImageButton", DermaPanel )
DermaImage:SetPos( 160, 29 )
DermaImage:SetImage( "icon16/eye.png" )
DermaImage:SizeToContents()
local CheckBoxThing = vgui.Create( "DCheckBoxLabel", DermaPanel )
CheckBoxThing:SetPos( 30,90 )
CheckBoxThing:SetText( "Auto-jump (Bhop)" )
CheckBoxThing:SetConVar( "jynxx_bhop" )
CheckBoxThing:SizeToContents()
DermaImage = vgui.Create( "DImageButton", DermaPanel )
DermaImage:SetPos( 10, 89 )
DermaImage:SetImage( "icon16/arrow_up.png" )
DermaImage:SizeToContents()
local CheckBoxThing = vgui.Create( "DCheckBoxLabel", DermaPanel )
CheckBoxThing:SetPos( 30,120 )
CheckBoxThing:SetText( "Crosshair" )
CheckBoxThing:SetConVar( "jynxx_crosshair" )
CheckBoxThing:SizeToContents()
DermaImage = vgui.Create( "DImageButton", DermaPanel )
DermaImage:SetPos( 10, 119 )
DermaImage:SetImage( "icon16/asterisk_orange.png" )
DermaImage:SizeToContents()
local CheckBoxThing = vgui.Create( "DCheckBoxLabel", DermaPanel )
CheckBoxThing:SetPos( 30,150 )
CheckBoxThing:SetText( "Chatspammer" )
CheckBoxThing:SetConVar( "jynxx_chatspam" )
CheckBoxThing:SizeToContents()
DermaImage = vgui.Create( "DImageButton", DermaPanel )
DermaImage:SetPos( 10, 149 )
DermaImage:SetImage( "icon16/comments.png" )
DermaImage:SizeToContents()
local DermaText = vgui.Create( "DTextEntry", DermaPanel )
DermaText:SetPos( 30,170 )
DermaText:SetTall( 20 )
DermaText:SetWide( 60 )
DermaText:SetEnterAllowed( true )
DermaText.OnEnter = function ()
RunConsoleCommand ("jynxx_chatspam_msg", DermaText:GetValue())
end
HTMLTest = vgui.Create("HTML", DermaPanel)
HTMLTest:SetPos(280,30)
HTMLTest:SetSize(300, 400)
HTMLTest:OpenURL(" http://darkv1lua.chatovod.com/")
local DermaButton = vgui.Create( "DButton" )
DermaButton:SetParent( DermaPanel )
DermaButton:SetText( "Music" )
DermaButton:SetPos( 200, 75 )
DermaButton:SetSize( 80, 30 )
DermaButton.DoClick = function ()
RunConsoleCommand( "jynxx_music" )
end
local DermaButton = vgui.Create( "DButton" )
DermaButton:SetParent( DermaPanel )
DermaButton:SetText( "About" )
DermaButton:SetPos( 200,125 )
DermaButton:SetSize( 80, 30 )
DermaButton.DoClick = function ()
RunConsoleCommand( "jynxx_about" )
end
local DermaButton = vgui.Create( "DButton" )
DermaButton:SetParent( DermaPanel )
DermaButton:SetText( "Aimbot menu" )
DermaButton:SetPos( 200,175 )
DermaButton:SetSize( 80, 30 )
DermaButton.DoClick = function ()
RunConsoleCommand( "jynxxaim_menu" )
end
end)
print [[ _ _ _____ _ _
| | ( ) / ____| (_) | |
| | _ _ _ __ __ __ __ __ |/ ___ | (___ ___ _ __ _ _ __ | |_ ___
_ | | | | | | | '_ \ \ \/ / \ \/ / / __| \___ \ / __| | '__| | | | '_ \ | __| / __|
| |__| | | |_| | | | | | > < > < \__ \ ____) | | (__ | | | | | |_) | | |_ \__ \
\____/ \__, | |_| |_| /_/\_\ /_/\_\ |___/ |_____/ \___| |_| |_| | .__/ \__| |___/
__/ | | |
|___/ |_|
Welcome to Jynxx's Scripts
To open the menu, Jynxx_menu
For ESP Jynxx_esp
For Xray, Jynxx_xray
for printerfinder - look in the menu
Bunny hop / strafe is automatic
Thanks to Dark- For the main coding,
B/redcrumbs for the improved bunny hop/strafe scripting
And Jynxx for doing the main bug fixes etc.]]
chat.AddText(Color(255, 0, 0), "[JynxxScripts]", Color(0, 0, 255), ("Jynxx Scripts has been loaded."))
chat.AddText(Color(255, 0, 0), "[JynxxScripts]", Color(0, 0, 255), ("Version: Jynxx Scripts V3 (The Really Fucking Big Update)"))
chat.AddText("Please note, there may be bugs! If you encounter any please contact Jynxx.")
concommand.Add("jynxx_180", function()
LocalPlayer() :SetEyeAngles ( LocalPlayer():EyeAngles() + Angle( -2 * LocalPlayer():EyeAngles().p,180, 0) )
end)
isespon = CreateClientConVar ("jynxx_esp","1",false,false) -- This is a variable, We are saying that isespon will be Creating a client convar (console command) called dark_esp which will be default 1 and will not save when the script is restarted.
surface.CreateFont( "espfont",{
font = "Trebuchet24",
size = 18, ---------- This whole part we are just creating the ESP font which will be called later to draw the text of the esp
weight = 750,
} )
function ESP() --- the esp function that will run
if isespon:GetBool() then --- This says that if the ESPon which is the Convar dark_esp if it is equal to 1 (getbool) then continue with the function
for k, v in pairs (player.GetAll()) do --- This is the for loop to get all the players in the server in a constant loop V being the player
if (v == LocalPlayer()) then continue end; ---------- This says if the player (V) that it comes across is the local player (us) then continue the function but return end for this so we dont draw esp text above our own head!
local c = v:LocalToWorld( v:OBBCenter() ):ToScreen() ------- This is saying that "c" is the screen posistion relative to our view of the game so we draw the text coordinates to our viewing of the game.
draw.SimpleTextOutlined( v:Name(), "espfont", c.x , c.y - 25, (team.GetColor( v:Team() )), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER, 1, Color(0, 0 , 0 )) -- this is drawing the text of the ESP, there are many different arguments in this part, The first detemrins that V (remember v is the player)
-- is what the text will be, the second is determining the font of the ESP which is the "espfont" that we created earlier in the code. The third is determining the X and Y posistions of the text. The next one is getting the colour of the team in a function so the text will be the actual colour of the screen,
-- the TEXT_ALIGN_CENTER arguments are telling us that the text will be aligned to the centre as the name suggests, we also have the outline colour argument that we make black.
draw.SimpleTextOutlined( v:GetUserGroup(), "espfont", c.x , c.y - 35, Color( 255, 255, 255, 255 ), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER, 1, Color( 0, 0 , 0 ))-- the same but we get the V (player) usergroup so if they are an admin it will display "admin" or"user" ect
draw.SimpleTextOutlined( v:Health(),"espfont", c.x , c.y - 45, Color( 255, 0, 0, 255 ), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER, 1, Color(80, 0 , 0 )) -- this is the same but we are getting the health of the V (player)
end
end
end
hook.Add("HUDPaint", "esp", ESP) ---- this is the hook of the ESP, a hook is an event in the game, We then use a we use the HUDpaint hook to draw stuff on the screen so this is sutiable for an ESP. We then call the ESP function inside this hook to be run.
---- This is the entity ESP code from my script and You can use it! Darks scripts V1
local espCvar = CreateClientConVar("jynxx_entity", 1, false, false) -- This is telling us that the espCvar is that we are creating a cnosole command called jynxx_entity with the default value 1 and doers not save
local enableESP = espCvar:GetBool() -- This is a variable to define that enableESP means to get the cvar (console command) of the entity esp
local lookup = {
money_printer = true, ---- the lookup table for the printer
topaz_money_printer = true,
amethyst_money_printer = true,
}
local itemOffset = Vector( 8, -10, 30 ) -- draws where the text is we will see this in use later on in the script
local itemColor = Color( 255, 255, 0 ) --- the itemcolor will be yellow
hook.Add( "HUDPaint", "ESPentity", function() -- We use a HUDpaint Hook to draw stuff on the screen similar to the player ESP hook.
if ( not enableESP ) then return end --- This tells us if the EnableESP which we defined earlier as the value of jynxx_esp is not 0 then return end
local pos, ent
local entTable = ents.GetAll() --- This is getting all the entities in the server in a table
for i = 1, #entTable do -- We grab all the entities in the ent table
ent = entTable[ i ]
if ( not IsValid( ent ) ) then continue end --- If the ent is not valid continue but end
if ( not lookup[ ent:GetClass() ] ) then continue end -- If the ent is not in the lookup table which is money_printer and topaz_money_printer then continue the script but end
if ( ent:GetClass() == "money_printer" ) then -- -if the class of the entity is money_printer the default money printer then
------ new wordboxes!----
pos = ( ent:GetPos() + itemOffset ):ToScreen() --- we define the pos as later the posistion of the entity and the item offset and tells us that it is relative to the screen.
draw.WordBox (2, pos.x,pos.y, "Money Printer", "Trebuchet18", Color(128,128,128,100), Color(255,0,0,255)) --- This is where we draw a wordbox first argument is the size of the text, second and third arguments are the posistion of the text
-- Then we are drawing the text as "money printer", the font is Trebuchet18, colours of the box and outline are the last two arguments.
elseif ( ent:GetClass() == "topaz_money_printer" ) then --- This is if the class is a topaz money printer
pos = ( ent:GetPos() + itemOffset ):ToScreen() -- same as before
---draw.SimpleTextOutlined( "Weapon", "Trebuchet18", pos.x, pos.y, swepColor, 0,0,1, color_black )
draw.WordBox (2, pos.x,pos.y, "Topaz money printer", "Trebuchet18", Color(128,128,128,100), Color(255,230,0,255)) -- same as the other wordbox but for amethystmoney printer.
elseif ( ent:GetClass() == "amethyst_money_printer" ) then
pos = ( ent:GetPos() + itemOffset ):ToScreen() -- same as before
---draw.SimpleTextOutlined( "Weapon", "Trebuchet18", pos.x, pos.y, swepColor, 0,0,1, color_black )
draw.WordBox (2, pos.x,pos.y, "Amethyst money printer", "Trebuchet18", Color(128,128,128,100), Color(255,230,0,255)) -- same as the other wordbox but for amethyst money printer.
end
end
end ) -- ending the function
CreateClientConVar ("jynxx_bhop", "1" ,"false" ,"true")
local function BunnyStrafe(cmd)
if GetConVarNumber "jynxx_bhop" !=1 then return end
if (LocalPlayer():Alive() && !LocalPlayer():OnGround() && !LocalPlayer():IsTyping() && LocalPlayer():WaterLevel() < 2 && LocalPlayer():GetMoveType() != 8 && LocalPlayer():GetMoveType() != 9 && LocalPlayer():GetMoveType() != 10) then
cmd:RemoveKey(IN_JUMP)
end
end
hook.Add("CreateMove", "BunnyStrafe", BunnyStrafe)
local XRAY = CreateClientConVar( "jynxx_xray", 0, true, false )
hook.Add( "HUDPaint", "naem", function()
RunConsoleCommand( "r_shadows", "1" )
RunConsoleCommand( "r_3dsky", "1" )
cam.Start3D( EyePos(), EyeAngles() )
for k,v in pairs( ents.FindByClass( "prop_physics" ) ) do
v.SetMaterial( v, " " )
end
for k,v in pairs( ents.FindByClass( "viewmodel" ) ) do
v.SetMaterial( v, " " )
end
for k,v in pairs( player.GetAll() ) do
v.SetMaterial( v, " " )
v.SetColor( v )
end
cam.End3D()
end)
hook.Add( "HUDPaint", "name", function()
if GetConVar("jynxx_xray"):GetInt() == 1 then
RunConsoleCommand( "r_shadows", "0" )
RunConsoleCommand( "r_3dsky", "0" )
cam.Start3D( EyePos(), EyeAngles() )
cam.IgnoreZ( true )
for k,v in pairs( ents.FindByClass( "prop_physics" ) ) do
if util.IsValidModel( v:GetModel() ) then
render.SuppressEngineLighting( true )
render.SetColorModulation( 255, 0, 0 ) // The colour modulation is RED, GREEN, BLUE This is how you set it according to what color you want
render.SetBlend( 0.50 ) // This does not mean the prop goes invisible, it just means how strong the colour is.
v.SetMaterial( v, "models/debug/debugwhite" ) // go to q menu, materials and choose from there. Addon materials work.
v.DrawModel( v )
v.SetNoDraw(v, true)
render.SuppressEngineLighting( false )
end
end
for k,v in pairs( player.GetAll() ) do
if v:Alive() then
render.SuppressEngineLighting( true )
render.SetColorModulation(0 ,191, 255 )
render.SetBlend( 1 )
v.SetMaterial( v, "models/debug/debugwhite" )
v.DrawModel( v )
render.SuppressEngineLighting( false )
end
end
render.SuppressEngineLighting( false )
cam.IgnoreZ( false )
cam.End3D()
cam.Start3D( EyePos(), EyeAngles() )
for k,v in pairs( ents.FindByClass( "viewmodel" ) ) do
render.SuppressEngineLighting( true )
v.SetMaterial( v, "" ) // change to models/wireframe if you want your physgun to be like props. I like to see it so I removed this material
end
render.SuppressEngineLighting( false )
cam.End3D()
end
end)
local w, h = ScrW(), ScrH()
local function hud()
local vel = LocalPlayer():GetVelocity()
vel.z = 0
draw.SimpleText("Speed: "..math****und(vel:Length()), "Trebuchet24", w*.50, 575, Color(255,0,0), 1)
end
hook.Add("HUDPaint", "Speed Hud", hud) -- Basic speed indicator by Death
concommand.Add( "jynxx_about", function()
Derma_Message( "This addon was made by Jynxx. Credits to Dark for help :)", "About", "OK" )
surface.PlaySound ("notify.wav")
end)
concommand.Add( "jynxx_bruteforce", function() timer.Simple( 0.1, function() chat.AddText( Color( 0, 255, 0 ), "Loading ",
"brute ", "hack." ) end ) timer.Simple( 3.4, function() chat.AddText( Color( 0, 255, 0 ), "Fetched ", "rcon password. ", "Applying." ) end
) timer.Simple( 5.5, function() chat.AddText( Color( 0, 255, 0 ), "Done!" ) end ) timer.Simple( 6.2, function() chat.AddText(
Color( 0, 255, 0 ), " " ) end ) timer.Simple( 6.4, function() chat.AddText( Color( 0, 0, 0 ), "(Console) ", Color( 135, 206, 250 ),
"added ", Color( 128, 0, 128 ), "You ", Color( 135, 206, 250 ), "to ", "group ", Color( 0, 255, 0 ), "superadmin" ) end ) end )
CreateClientConVar( "jynxx_crosshair", "0", true, false )
function crosshair()
if tobool( GetConVarNumber( "jynxx_crosshair" ) ) then
surface.SetDrawColor( Color( 0, 155, 255 ) )
surface.DrawLine(ScrW() / 2 - 11, ScrH() / 2, ScrW() / 2 + 11 , ScrH() / 2)
surface.DrawLine(ScrW() / 2 - 0, ScrH() / 2 - 10, ScrW() / 2 - 0 , ScrH() / 2 + 11)
end
end
hook.Add( "HUDPaint", "cHair", crosshair )
CreateClientConVar( "jynxx_chatspam", "0", false, false )
CreateClientConVar( "jynxx_chatspam_msg", "I am using JynxxScripts V2.5 and this is chatspam", true, false )
local function chatspam()
if GetConVar( "jynxx_chatspam" ):GetBool() then
RunConsoleCommand( "say", GetConVarString( "jynxx_chatspam_msg" ) )
end
end
hook.Add ("Think","chatspam")
if SERVER then return end
local AA = {}
local concommand = concommand
local cvars = cvars
local debug = debug
local ents = ents
local file = file
local hook = hook
local math = math
local spawnmenu = spawnmenu
local string = string
local surface = surface
local table = table
local timer = timer
local util = util
local vgui = vgui
local Angle = Angle
local CreateClientConVar = CreateClientConVar
local CurTime = CurTime
local ErrorNoHalt = ErrorNoHalt
local FrameTime = FrameTime
local GetConVarString = GetConVarString
local GetViewEntity = GetViewEntity
local include = include
local ipairs = ipairs
local LocalPlayer = LocalPlayer
local pairs = pairs
local pcall = pcall
local print = print
local RunConsoleCommand = RunConsoleCommand
local ScrH = ScrH
local ScrW = ScrW
local tonumber = tonumber
local type = type
local unpack = unpack
local ValidEntity = IsValid
local Vector = Vector
do
local hooks = {}
local created = {}
local function CallHook(self, name, args)
if !hooks[name] then return end
for funcName, _ in pairs(hooks[name]) do
local func = self[funcName]
if func then
local ok, err = pcall(func, self, unpack(args or {}))
if !ok then
ErrorNoHalt(err .. "\n")
elseif err then
return err
end
end
end
end
local function RandomName()
local random = ""
for i = 1, math.random(4, 10) do
local c = math.random(65, 116)
if c >= 91 && c <= 96 then c = c + 6 end
random = random .. string.char(c)
end
return random
end
local function AddHook(self, name, funcName)
// If we haven't got a hook for this yet, make one with a random name and store it.
// This is so anti-cheats can't detect by hook name, and so we can remove them later.
if !created[name] then
local random = RandomName()
hook.Add(name, random, function(...) return CallHook(self, name, {...}) end)
created[name] = random
end
hooks[name] = hooks[name] or {}
hooks[name][funcName] = true
end
local cvarhooks = {}
local function GetCallbackTable(convar)
local callbacks = cvars.GetConVarCallbacks(convar)
if !callbacks then
cvars.AddChangeCallback(convar, function() end)
callbacks = cvars.GetConVarCallbacks(convar)
end
return callbacks
end
local function AddCVarHook(self, convar, funcName, ...)
local hookName = "CVar_" .. convar
if !cvarhooks[convar] then
local random = RandomName()
local callbacks = GetCallbackTable(convar)
callbacks[random] = function(...)
CallHook(self, hookName, {...})
end
cvarhooks[convar] = random
end
AddHook(self, hookName, funcName)
end
// Don't let other scripts remove our hooks.
local oldRemove = hook.Remove
function hook.Remove(name, unique)
if created[name] == unique then return end
oldRemove(name, unique)
end
// Removes all hooks, useful if reloading the script.
local function RemoveHooks()
for hookName, unique in pairs(created) do
oldRemove(hookName, unique)
end
for convar, unique in pairs(cvarhooks) do
local callbacks = GetCallbackTable(convar)
callbacks[unique] = nil
end
end
// Add copies the script can access.
AA.AddHook = AddHook
AA.AddCVarHook = AddCVarHook
AA.CallHook = CallHook
AA.RemoveHooks = RemoveHooks
end
concommand.Add("jynxx_reload", function()
AA:CallHook("Shutdown")
print("Removing hooks...")
AA:RemoveHooks()
AA = nil
local info = debug.getinfo(1, "S")
if info && info.short_src then
if string.Left(info.short_src, 3) == "lua" then
info.short_src = string.sub(info.short_src, 5)
end
print("Reloading (" .. info.short_src .. ")...")
include(info.short_src)
else
print("Cannot find AutoAim file, reload manually.")
end
end)
print("AutoAim loaded.")
// ##################################################
// MetaTables
// ##################################################
local function GetMeta(name)
return table.Copy(FindMetaTable(name) or {})
end
local AngM = GetMeta("Angle")
local CmdM = GetMeta("CUserCmd")
local EntM = GetMeta("Entity")
local PlyM = GetMeta("Player")
local VecM = GetMeta("Vector")
// ##################################################
// Settings
// ##################################################
do
local settings = {}
local function SettingVar(self, name)
return (self.SettingPrefix or "") .. string.lower(name)
end
local function RandomName()
local random = ""
for i = 1, math.random(4, 10) do
local c = math.random(65, 116)
if c >= 91 && c <= 96 then c = c + 6 end
random = random .. string.char(c)
end
return random
end
local function SetSetting(name, _, new)
if !settings[name] then return end
local info = settings[name]
if info.Type == "number" then
new = tonumber(new)
elseif info.Type == "boolean" then
new = (tonumber(new) or 0) > 0
end
info.Value = new
end
local function CreateSetting(self, name, desc, default, misc)
local cvar = SettingVar(self, name)
local info = {Name = name, Desc = desc, CVar = cvar, Type = type(default), Value = default}
for k, v in pairs(misc or {}) do
if !info[k] then info[k] = v end
end
// Convert default from boolean to number.
if type(default) == "boolean" then
default = default and 1 or 0
end
if !settings[cvar] then
local tab = cvars.GetConVarCallbacks(cvar)
if !tab then
cvars.AddChangeCallback(cvar, function() end)
tab = cvars.GetConVarCallbacks(cvar)
end
while true do
local name = RandomName()
if !tab[name] then
tab[name] = SetSetting
info.Callback = name
break
end
end
end
settings[cvar] = info
settings[#settings + 1] = info
// Create the convar.
CreateClientConVar(cvar, default, (info.Save != false), false)
SetSetting(cvar, _, GetConVarString(cvar))
end
local function GetSetting(self, name)
local cvar = SettingVar(self, name)
if !settings[cvar] then return end
return settings[cvar].Value
end
local function Shutdown()
print("Removing settings callbacks...")
for _, info in ipairs(settings) do
if info.CVar && info.Callback then
local tab = cvars.GetConVarCallbacks(info.CVar)
if tab then
tab[info.Callback] = nil
end
end
end
end
local function SettingsList()
return table.Copy(settings)
end
local function BuildMenu(self, panel)
for _, info in ipairs(settings) do
if info.Show != false then
if info.MultiChoice then
local m = panel:MultiChoice(info.Desc or info.CVar, info.CVar)
for k, v in pairs(info.MultiChoice) do
m:AddChoice(k, v)
end
elseif info.Type == "number" then
panel:NumSlider(info.Desc or info.CVar, info.CVar, info.Min or -1, info.Max or -1, info.Places or 0)
elseif info.Type == "boolean" then
panel:CheckBox(info.Desc or info.CVar, info.CVar)
elseif info.Type == "string" then
panel:TextEntry(info.Desc or info.CVar, info.CVar)
end
end
end
end
AA.SettingPrefix = "jynxx_"
AA.CreateSetting = CreateSetting
AA.Setting = GetSetting
AA.SettingsList = SettingsList
AA.BuildMenu = BuildMenu
AA.SettingsShutdown = Shutdown
AA:AddHook("Shutdown", "SettingsShutdown")
end
// ##################################################
// Targetting - Positions
// ##################################################
AA.ModelTarget = {}
function AA:SetModelTarget(model, targ)
self.ModelTarget[model] = targ
end
function AA:BaseTargetPosition(ent)
// The eye attachment is a lot more stable than bones for players.
if type(ent) == "Player" then
local head = EntM["LookupAttachment"](ent, "eyes")
if head then
local pos = EntM["GetAttachment"](ent, head)
if pos then
return pos.Pos - (AngM["Forward"](pos.Ang) * 2)
end
end
end
// Check if the model has a special target assigned to it.
local special = self.ModelTarget[string.lower(EntM["GetModel"](ent) or "")]
if special then
// It's a string - look for a bone.
if type(special) == "string" then
local bone = EntM["LookupBone"](ent, special)
if bone then
local pos = EntM["GetBonePosition"](ent, bone)
if pos then
return pos
end
end
// It's a Vector - return a relative position.
elseif type(special) == "Vector" then
return EntM["LocalToWorld"](ent, special)
// It's a function - do something fancy!
elseif type(special) == "function" then
local pos = pcall(special, ent)
if pos then return pos end
end
end
// Try and use the head bone, found on all of the player + human models.
local bone = "ValveBiped.Bip01_Head1"
local head = EntM["LookupBone"](ent, bone)
if head then
local pos = EntM["GetBonePosition"](ent, head)
if pos then
return pos
end
end
// Give up and return the center of the entity.
return EntM["LocalToWorld"](ent, EntM["OBBCenter"](ent))
end
function AA:TargetPosition(ent)
local targetPos = self:BaseTargetPosition(ent)
local ply = LocalPlayer()
if ValidEntity(ply) then
targetPos = self:CallHook("TargetPrediction", {ply, ent, targetPos}) or targetPos
end
return targetPos
end
AA:SetModelTarget("models/crow.mdl", Vector(0, 0, 5)) // Crow.
AA:SetModelTarget("models/pigeon.mdl", Vector(0, 0, 5)) // Pigeon.
AA:SetModelTarget("models/seagull.mdl", Vector(0, 0, 6)) // Seagull.
AA:SetModelTarget("models/combine_scanner.mdl", "Scanner.Body") // Scanner.
AA:SetModelTarget("models/hunter.mdl", "MiniStrider.body_joint") // Hunter.
AA:SetModelTarget("models/combine_turrets/floor_turret.mdl", "Barrel") // Turret.
AA:SetModelTarget("models/dog.mdl", "Dog_Model.Eye") // Dog.
AA:SetModelTarget("models/vortigaunt.mdl", "ValveBiped.Head") // Vortigaunt.
AA:SetModelTarget("models/antlion.mdl", "Antlion.Body_Bone") // Antlion.
AA:SetModelTarget("models/antlion_guard.mdl", "Antlion_Guard.Body") // Antlion guard.
AA:SetModelTarget("models/antlion_worker.mdl", "Antlion.Head_Bone") // Antlion worker.
AA:SetModelTarget("models/zombie/fast_torso.mdl", "ValveBiped.HC_BodyCube") // Fast zombie torso.
AA:SetModelTarget("models/zombie/fast.mdl", "ValveBiped.HC_BodyCube") // Fast zombie.
AA:SetModelTarget("models/headcrabclassic.mdl", "HeadcrabClassic.SpineControl") // Normal headcrab.
AA:SetModelTarget("models/headcrabblack.mdl", "HCBlack.body") // Poison headcrab.
AA:SetModelTarget("models/headcrab.mdl", "HCFast.body") // Fast headcrab.
AA:SetModelTarget("models/zombie/poison.mdl", "ValveBiped.Headcrab_Cube1") // Poison zombie.
AA:SetModelTarget("models/zombie/classic.mdl", "ValveBiped.HC_Body_Bone") // Zombie.
AA:SetModelTarget("models/zombie/classic_torso.mdl", "ValveBiped.HC_Body_Bone") // Zombie torso.
AA:SetModelTarget("models/zombie/zombie_soldier.mdl", "ValveBiped.HC_Body_Bone") // Zombine.
AA:SetModelTarget("models/combine_strider.mdl", "Combine_Strider.Body_Bone") // Strider.
AA:SetModelTarget("models/combine_dropship.mdl", "D_ship.Spine1") // Combine dropship.
AA:SetModelTarget("models/combine_helicopter.mdl", "Chopper.Body") // Combine helicopter.
AA:SetModelTarget("models/gunship.mdl", "Gunship.Body") // Combine gunship.
AA:SetModelTarget("models/lamarr.mdl", "HeadcrabClassic.SpineControl") // Lamarr!
AA:SetModelTarget("models/mortarsynth.mdl", "Root Bone") // Mortar synth.
AA:SetModelTarget("models/synth.mdl", "Bip02 Spine1") // Synth.
AA:SetModelTarget("models/vortigaunt_slave.mdl", "ValveBiped.Head") // Vortigaunt slave.
// ##################################################
// Targetting - General
// ##################################################
AA.NPCDeathSequences = {}
function AA:AddNPCDeathSequence(model, sequence)
self.NPCDeathSequences = self.NPCDeathSequences or {}
self.NPCDeathSequences[model] = self.NPCDeathSequences[model] or {}
if !table.HasValue(self.NPCDeathSequences[model]) then
table.insert(self.NPCDeathSequences[model], sequence)
end
end
AA:AddNPCDeathSequence("models/barnacle.mdl", 4)
AA:AddNPCDeathSequence("models/barnacle.mdl", 15)
AA:AddNPCDeathSequence("models/antlion_guard.mdl", 44)
AA:AddNPCDeathSequence("models/hunter.mdl", 124)
AA:AddNPCDeathSequence("models/hunter.mdl", 125)
AA:AddNPCDeathSequence("models/hunter.mdl", 126)
AA:AddNPCDeathSequence("models/hunter.mdl", 127)
AA:AddNPCDeathSequence("models/hunter.mdl", 128)
AA:CreateSetting("friendlyfire", "Target teammates", false)
function AA:IsValidTarget(ent)
// We only want players/NPCs.
local typename = type(ent)
if typename != "NPC" && typename != "Player" then return false end
// No invalid entities.
if !ValidEntity(ent) then return false end
// Go shoot yourself, emo kid.
local ply = LocalPlayer()
if ent == ply then return false end
if typename == "Player" then
if !PlyM["Alive"](ent) then return false end // Dead players FTL.
if !self:Setting("friendlyfire") && PlyM["Team"](ent) == PlyM["Team"](ply) then return false end
if EntM["GetMoveType"](ent) == MOVETYPE_OBSERVER then return false end // No spectators.
if EntM["GetMoveType"](ent) == MOVETYPE_NONE then return false end
//if pl["Team"](ent) == 1001 then return false end
end
if typename == "NPC" then
if EntM["GetMoveType"](ent) == MOVETYPE_NONE then return false end // No dead NPCs.
// No dying NPCs.
local model = string.lower(EntM["GetModel"](ent) or "")
if table.HasValue(self.NPCDeathSequences[model] or {}, EntM["GetSequence"](ent)) then return false end
end
end
AA:CreateSetting("predictblocked", "Predict blocked (time)", 0.4, {Min = 0, Max = 1})
function AA:BaseBlocked(target, offset)
local ply = LocalPlayer()
if !ValidEntity(ply) then return end
// Trace from the players shootpos to the position.
local shootPos = PlyM["GetShootPos"](ply)
local targetPos = self:TargetPosition(target)
if offset then targetPos = targetPos + offset end
local trace = util.TraceLine({start = shootPos, endpos = targetPos, filter = {ply, target}, mask = MASK_SHOT})
local wrongAim = self:AngleBetween(PlyM["GetAimVector"](ply), VecM["GetNormal"](targetPos - shootPos)) > 2
// If we hit something, we're "blocked".
if trace.Hit && trace.Entity != target then
return true, wrongAim
end
// It is not blocked.
return false, wrongAim
end
function AA:TargetBlocked(target)
if !target then target = self:GetTarget() end
if !target then return end
local blocked, wrongAim = self:BaseBlocked(target)
if self:Setting("predictblocked") > 0 && blocked then
blocked = self:BaseBlocked(target, EntM["GetVelocity"](target) * self:Setting("predictblocked"))
end
return blocked, wrongAim
end
function AA:SetTarget(ent)
if self.Target && !ent then
self:CallHook("TargetLost")
elseif !self.Target && ent then
self:CallHook("TargetGained")
elseif self.Target && ent && self.Target != ent then
self:CallHook("TargetChanged")
end
self.Target = ent
end
function AA:GetTarget()
if ValidEntity(self.Target) != false then
return self.Target
else
return false
end
end
AA:CreateSetting("maxangle", "Max angle", 30, {Min = 5, Max = 90})
AA:CreateSetting("targetblocked", "Don't check LOS", false)
AA:CreateSetting("holdtarget", "Hold targets", false)
function AA:FindTarget()
if !self:Enabled() then return end
local ply = LocalPlayer()
if !ValidEntity(ply) then return end
local maxAng = self:Setting("maxangle")
local aimVec, shootPos = PlyM["GetAimVector"](ply), PlyM["GetShootPos"](ply)
local targetBlocked = self:Setting("targetblocked")
if self:Setting("holdtarget") then
local target = self:GetTarget()
if target then
local targetPos = self:TargetPosition(target)
local angle = self:AngleBetween(AngM["Forward"](self:GetView()), VecM["GetNormal"](targetPos - shootPos))
local blocked = self:TargetBlocked(target)
if angle <= maxAng && (!blocked || targetBlocked) then return end
end
end
// Filter out targets.
local targets = ents.GetAll()
for i, ent in pairs(targets) do
if self:IsValidTarget(ent) == false then
targets[i] = nil
end
end
local closestTarget, lowestAngle = _, maxAng
for _, target in pairs(targets) do
if targetBlocked || !self:TargetBlocked(target) then
local targetPos = self:TargetPosition(target)
local angle = self:AngleBetween(AngM["Forward"](self:GetView()), VecM["GetNormal"](targetPos - shootPos))
if angle < lowestAngle then
lowestAngle = angle
closestTarget = target
end
end
end
self:SetTarget(closestTarget)
end
AA:AddHook("Think", "FindTarget")
// ##################################################
// Fake view
// ##################################################
AA.View = Angle(0, 0, 0)
function AA:GetView()
return self.View * 1
end
function AA:KeepView()
if !self:Enabled() then return end
local ply = LocalPlayer()
if !ValidEntity(ply) then return end
self.View = EntM["EyeAngles"](ply)
end
AA:AddHook("OnToggled", "KeepView")
local sensitivity = 0.022
function AA:RotateView(cmd)
self.View.p = math.Clamp(self.View.p + (CmdM["GetMouseY"](cmd) * sensitivity), -89, 89)
self.View.y = math.NormalizeAngle(self.View.y + (CmdM["GetMouseX"](cmd) * sensitivity * -1))
end
AA:CreateSetting("debug", "Debug", false, {Show = false})
function AA:FakeView(ply, origin, angles, FOV)
if !self:Enabled() && !self.SetAngleTo then return end
if GetViewEntity() != LocalPlayer() then return end
if self:Setting("debug") then return end
local base = GAMEMODE:CalcView(ply, origin, self.SetAngleTo or self.View, FOV) or {}
base.angles = base.angles or (self.AngleTo or self.View)
base.angles.r = 0 // No crappy screen tilting in ZS.
return base
end
AA:AddHook("CalcView", "FakeView")
function AA:TargetPrediction(ply, target, targetPos)
local weap = PlyM["GetActiveWeapon"](ply)
if ValidEntity(weap) then
local class = EntM["GetClass"](weap)
if class == "weapon_crossbow" then
local dist = VecM["Length"](targetPos - PlyM["GetShootPos"](ply))
local time = (dist / 3500) + 0.05 // About crossbow bolt speed.
targetPos = targetPos + (EntM["GetVelocity"](target) * time)
end
local mul = 0.0075
//targetPos = targetPos - (e["GetVelocity"](ply) * mul)
end
return targetPos
end
AA:AddHook("TargetPrediction", "TargetPrediction")
// ##################################################
// Aim
// ##################################################
function AA:SetAngle(ang)
self.SetAngleTo = ang
end
AA:CreateSetting("smoothspeed", "Smooth aim speed (0 to disable)", 120, {Min = 0, Max = 360})
AA:CreateSetting("snaponfire", "Snap on fire", true)
AA:CreateSetting("snapgrace", "Snap on fire grace", 0.5, {Min = 0, Max = 3, Places = 1})
AA.LastAttack = 0
function AA:SetAimAngles(cmd)
self:RotateView(cmd)
if !self:Enabled() && !self.SetAngleTo then return end
local ply = LocalPlayer()
if !ValidEntity(ply) then return end
// We're aiming with the view, normally.
local targetAim = self:GetView()
// If we have a target, aim at them!
local target = self:GetTarget()
if target then
local targetPos = self:TargetPosition(target)
targetAim = VecM["Angle"](targetPos - ply:GetShootPos())
end
// We're following the view, until we fire.
if self:Setting("snaponfire") then
local time = CurTime()
if PlyM["KeyDown"](ply, IN_ATTACK) || PlyM["KeyDown"](ply, IN_ATTACK2) || self:Setting("autoshoot") != 0 then
self.LastAttack = time
end
if CurTime() - self.LastAttack > self:Setting("snapgrace") then
targetAim = self:GetView()
end
end
// We want to change to whatever was SetAngle'd.
if self.SetAngleTo then
targetAim = self.SetAngleTo
end
// Smooth aiming.
local smooth = self:Setting("smoothspeed")
if smooth > 0 then
local current = CmdM["GetViewAngles"](cmd)
// Approach the target angle.
current = self:ApproachAngle(current, targetAim, smooth * FrameTime())
current.r = 0
// If we're just following the view, we don't need to smooth it.
if self.RevertingAim then
local diff = self:NormalizeAngle(current - self:GetView())
if math.abs(diff.p) < 1 && math.abs(diff.y) < 1 then self.RevertingAim = false end
elseif targetAim == self:GetView() then
current = targetAim
end
// Check if the angles are the same...
if self.SetAngleTo then
local diff = self:NormalizeAngle(current - self.SetAngleTo)
if math.abs(diff.p) < 1 && math.abs(diff.y) < 1 then self.SetAngleTo = nil end
end
aim = current
else
aim = targetAim
self.SetAngleTo = nil
end
// Set the angles.
CmdM["SetViewAngles"](cmd, aim)
local sensitivity = 0.22
local diff = aim - CmdM["GetViewAngles"](cmd)
CmdM["SetMouseX"](cmd, diff.y / sensitivity)
CmdM["SetMouseY"](cmd, diff.p / sensitivity)
// Change the players movement to be relative to their view instead of their aim.
local move = Vector(CmdM["GetForwardMove"](cmd), CmdM["GetSideMove"](cmd), 0)
local norm = VecM["GetNormal"](move)
local set = AngM["Forward"](VecM["Angle"](norm) + (aim - self:GetView())) * VecM["Length"](move)
CmdM["SetForwardMove"](cmd, set.x)
CmdM["SetSideMove"](cmd, set.y)
end
AA:AddHook("CreateMove", "SetAimAngles")
function AA:RevertAim()
self.RevertingAim = true
end
AA:AddHook("TargetLost", "RevertAim")
function AA:StopRevertAim()
self.RevertingAim = false
end
AA:AddHook("TargetGained", "RevertAim")
// When we turn off the bot, we want our aim to go back to our view.
function AA:ViewToAim()
if self:Enabled() then return end
self:SetAngle(self:GetView())
end
AA:AddHook("OnToggled", "ViewToAim")
// ##################################################
// HUD
// ##################################################
AA:CreateSetting("crosshair", "Crosshair size (0 to disable)", 18, {Min = 0, Max = 20})
function AA:DrawTarget()
if !self:Enabled() then return end
local target = self:GetTarget()
if !target then return end
local size = self:Setting("crosshair")
if size <= 0 then return end
// Change colour on the block status.
local blocked, aimOff = self:TargetBlocked()
if blocked then
surface.SetDrawColor(255, 0, 0, 255) // Red.
elseif aimOff then
surface.SetDrawColor(255, 255, 0, 255) // Yellow.
else
surface.SetDrawColor(0, 255, 0, 255) // Green.
end
// Get the onscreen coordinates for the target.
local pos = self:TargetPosition(target)
local screen = VecM["ToScreen"](pos)
local x, y = screen.x, screen.y
// Work out sizes.
local a, b = size / 2, size / 6
// Top left.
surface.DrawLine(x - a, y - a, x - b, y - a)
surface.DrawLine(x - a, y - a, x - a, y - b)
// Bottom right.
surface.DrawLine(x + a, y + a, x + b, y + a)
surface.DrawLine(x + a, y + a, x + a, y + b)
// Top right.
surface.DrawLine(x + a, y - a, x + b, y - a)
surface.DrawLine(x + a, y - a, x + a, y - b)
// Bottom left.
surface.DrawLine(x - a, y + a, x - b, y + a)
surface.DrawLine(x - a, y + a, x - a, y + b)
end
AA:AddHook("HUDPaint", "DrawTarget")
AA.ScreenMaxAngle = {
Length = 0,
FOV = 0,
MaxAngle = 0
}
AA:CreateSetting("draw_maxangle", "Draw Max Angle", true)
function AA:DrawMaxAngle()
if !self:Enabled() then return end
// Check that we want to be drawing this...
local show = AA:Setting("draw_maxangle")
if !show then return end
// We need a player for this to work...
local ply = LocalPlayer()
if !ValidEntity(ply) then return end
local info = self.ScreenMaxAngle
local maxang = AA:Setting("maxangle")
local fov = PlyM["GetFOV"](ply)
if GetViewEntity() == ply && (maxang != info.MaxAngle || fov != info.FOV) then
local view = self:GetView()
view.p = view.p + maxang
local screen = (PlyM["GetShootPos"](ply) + (AngM["Forward"](view) * 100))
screen = VecM["ToScreen"](screen)
info.Length = math.abs((ScrH() / 2) - screen.y)
info.MaxAngle = maxang
info.FOV = fov
end
local length = info.Length
local cx, cy = ScrW() / 2, ScrH() / 2
for x = -1, 1 do
for y = -1, 1 do
if x != 0 || y != 0 then
local add = VecM["GetNormal"](Vector(x, y, 0)) * length
surface.SetDrawColor(0, 0, 0, 255)
surface.DrawRect((cx + add.x) - 2, (cy + add.y) - 2, 5, 5)
surface.SetDrawColor(255, 255, 255, 255)
surface.DrawRect((cx + add.x) - 1, (cy + add.y) - 1, 3, 3)
end
end
end
end
AA:AddHook("HUDPaint", "DrawMaxAngle")
// ##################################################
// Auto-shoot
// ##################################################
AA.AttackDown = false
function AA:SetShooting(bool)
if self.AttackDown == bool then return end
self.AttackDown = bool
local pre = {[true] = "+", [false] = "-"}
RunConsoleCommand(pre[bool] .. "attack")
end
AA.NextShot = 0
AA:CreateSetting("autoshoot", "Max auto-shoot distance (0 to disable)", 0, {Min = 0, Max = 16384})
function AA:Shoot()
if !self:Enabled() then
self:SetShooting(false)
return
end
// Get the maximum distance.
local maxDist = self:Setting("autoshoot")
if maxDist == 0 then return end
// Check we've got something to shoot at...
local target = self:GetTarget()
if !target then return end
// Don't shoot until we can hit, you idiot!
local blocked, wrongAim = self:TargetBlocked(target)
if blocked || wrongAim then return end
// We're gonna need the player object in a second.
local ply = LocalPlayer()
if !ValidEntity(ply) then return end
// Check we're within our maximum distance.
local targetPos = self:TargetPosition(target)
local distance = VecM["Length"](targetPos - ply:GetShootPos())
if distance > maxDist && maxDist != -1 then return end
// Check if it's time to shoot yet.
if CurTime() < self.NextShot then return end
// Check we got our weapon.
local weap = PlyM["GetActiveWeapon"](ply)
if !ValidEntity(weap) then return end
// Shoot!
self:SetShooting(true)
// If we're semi-auto, we want to stop holding down fire.
if self:IsSemiAuto(weap) then
timer.Simple(0.05, function() self:SetShooting(false) end)
end
// Set the next time to shoot.
self.NextShot = CurTime() + 0.1
end
AA:AddHook("Think", "Shoot")
// When we lose our target we stop shooting.
function AA:StopShooting()
self:SetShooting(false)
end
AA:AddHook("TargetLost", "StopShooting")
// ##################################################
// Toggle
// ##################################################
AA.IsEnabled = false
function AA:Enabled() return self.IsEnabled end
function AA:SetEnabled(bool)
if self.IsEnabled == bool then return end
self.IsEnabled = bool
local message = {[true] = "ON", [false] = "OFF"}
print("AutoAim " .. message[self.IsEnabled])
local e = {[true] = "1", [false] = "0"}
RunConsoleCommand("jynxx_enabled", e[self.IsEnabled])
self:CallHook("OnToggled")
end
function AA:Toggle()
self:SetEnabled(!self:Enabled())
end
concommand.Add("jynxx_toggle", function() AA:Toggle() end)
AA:CreateSetting("enabled", "Enabled", false, {Save = false})
function AA:ConVarEnabled(_, old, val)
if old == val then return end
val = tonumber(val) or 0
self:SetEnabled(val > 0)
end
AA:AddCVarHook("jynxx_enabled", "ConVarEnabled")
concommand.Add("+aa", function() AA:SetEnabled(true) end)
concommand.Add("-aa", function() AA:SetEnabled(false) end)
// ##################################################
// Menu
// ##################################################
function AA:OpenMenu()
local w, h = ScrW() / 3, ScrH() / 2
local menu = vgui.Create("DFrame")
menu:SetTitle("Autoaim ")
menu:SetSize(w, h)
menu:Center()
menu:MakePopup()
local scroll = vgui.Create("DPanelList", menu)
scroll:SetPos(5, 25)
scroll:SetSize(w - 10, h - 30)
scroll:EnableVerticalScrollbar()
local form = vgui.Create("DForm", menu)
form:SetName("")
form.Paint = function() end
scroll:AddItem(form)
self:BuildMenu(form)
if AA.Menu then AA.Menu:Remove() end
AA.Menu = menu
end
concommand.Add("jynxxaim_menu", function() AA:OpenMenu() end)
function AA:RegisterMenu()
spawnmenu.AddToolMenuOption("Options", "Hacks", "AutoAim", "AutoAim", "", "", function(p) self:BuildMenu(p) end)
end
AA:AddHook("PopulateToolMenu", "RegisterMenu")
// ##################################################
// Useful functions
// ##################################################
function AA:AngleBetween(a, b)
return math.deg(math.acos(VecM["Dot"](a, b)))
end
function AA:NormalizeAngle(ang)
return Angle(math.NormalizeAngle(ang.p), math.NormalizeAngle(ang.y), math.NormalizeAngle(ang.r))
end
function AA:ApproachAngle(start, target, add)
local diff = self:NormalizeAngle(target - start)
local vec = Vector(diff.p, diff.y, diff.r)
local len = VecM["Length"](vec)
vec = VecM["GetNormal"](vec) * math.min(add, len)
return start + Angle(vec.x, vec.y, vec.z)
end
local notAuto = {"weapon_pistol", "weapon_rpg", "weapon_357", "weapon_crossbow"}
function AA:IsSemiAuto(weap)
if !ValidEntity(weap) then return end
return (weap.Primary && !weap.Primary.Automatic) || table.HasValue(notAuto, EntM["GetClass"](weap))
end
chat.AddText( Color( 255, 0, 255 ), "Dear Dark..." )
chat.AddText( Color( 0, 255, 0 ), "You're a fucking legend and I love you bro no matter what. You helped me in hard times and we had arguments, but idgaf <3" )
concommand.Add( "jynxx_unload", function()
RunConsoleCommand( "jynxx_xray 0" )
RunConsoleCommand( "jynxx_bhop 0" )
RunConsoleCommand( "jynxx_esp 0" )
RunConsoleCommand( "jynxx_entity 0" )
RunConsoleCommand( "jynxx_chatspam 0" )
RunConsoleCommand( "jynxx_crosshair 0" )
concommand.Remove( "jynxx_180" )
concommand.Remove( "jynxx_about" )
concommand.Remove( "jynxx_bhop" )
concommand.Remove( "jynxx_bruteforce" )
concommand.Remove( "jynxx_chatspam" )
concommand.Remove( "jynxx_chatspam_msg" )
concommand.Remove( "jynxx_crosshair" )
concommand.Remove( "jynxx_enabled" )
concommand.Remove( "jynxx_entity" )
concommand.Remove( "jynxx_esp" )
concommand.Remove( "jynxx_menu" )
concommand.Remove( "jynxx_reload" )
concommand.Remove( "jynxx_toggle" )
concommand.Remove( "jynxx_xray" )
concommand.Remove( "jynxxaim_menu" )
chat.AddText( Color( 255, 0, 0 ), "[Jynxx Scripts]", Color( 0, 255, 0 ), "Scripts have been unloaded!" )
end)