/*------------------------------------------------------------------------------------------------------
____ ____ ____ ___ ____ ___ ____ _____ _ _ ____ _____ ____
( _ \( _ \( ___)/ __)(_ _)/ __)(_ _)( _ )( \( )( _ \( _ )(_ _)
)___/ ) / )__)( (__ _)(_ \__ \ _)(_ )(_)( ) ( ) _ < )(_)( )(
(__) (_)\_)(____)\___)(____)(___/(____)(_____)(_)\_)(____/(_____) (__)
Loader
The method I used for the load was to make sure convars couldn't be detected, still use at risk as files
are easy to find when this is disabled. Do pb_menu in game.
*/------------------------------------------------------------------------------------------------------
local changelog, menuallow, curVer = "No data", true, 0
function AddData( typ, date, ver, add )
if ( changelog == "No data" ) then changelog = "" end
changelog = changelog .. typ .. "[ " .. date .. " ][ Version " .. ver .. " ]\n" .. add .. "\n"
curVer = tonumber( ver )
end
AddData( "Release", "11/5/2010", "1.3", " - Fixed viewangle bug\n - Added Entitylist (Still kinda bugged)\n - Added Aiminfo\n - Added Autopistol (Uses IsMouseDown)\n - Added Loadup menu for updates and more shit." )
local webs = "http://precisionbot.hostwebs.com/precisionbot/version.txt"
local nButton
function AddButton( name, posX, posY, sizeW, sizeH, parent, func )
if ( func == "" ) then func = function() end end
local button = vgui.Create( "DButton" )
if ( parent != nil ) then button:SetParent( parent ) end
button:SetSize( sizeW, sizeH )
button:SetPos( posX, posY )
button:SetText( name )
button.DoClick = func
nButton = button
end
local FileCheck, disabled, menu
function LoadMenu()
local panel = vgui.Create( "DFrame" )
panel:SetPos( ScrW() / 2 - 400 / 2, ScrH() / 2 - 250 / 2 )
panel:SetSize( 400, 250 )
panel:SetTitle( "Precisionbot Loader" )
panel:SetVisible( true )
panel:SetDraggable( true )
panel:ShowCloseButton( true )
panel:MakePopup()
menu = panel
local propsheet = vgui.Create( "DPropertySheet" )
propsheet:SetParent( panel )
propsheet:SetPos( 10, 30 )
propsheet:SetSize( 380, 210 )
local home = vgui.Create( "DPanel", propsheet )
local logs = vgui.Create( "DPanel", propsheet )
// Home
local checkbox = vgui.Create( "DCheckBoxLabel" )
checkbox:SetPos( 10, 10 )
checkbox:SetText( "Do file check" )
checkbox:SetParent( home )
checkbox:SetTextColor( Color( 0, 0, 0, 255 ) )
checkbox:SizeToContents()
checkbox:Toggle()
timer.Create( "DOCHECKS", 0.01, 0, function()
if ( panel:IsVisible() ) then
FileCheck = checkbox:GetChecked()
end
end )
local text, r, g = "", 0, 0
function ErrorLabel()
local label = vgui.Create( "DLabel" )
label:SetParent( home )
label:SetText( text )
label:SetPos( 100, 150 )
label:SetWide( 100 )
label:SetTextColor( Color( r, g, 0 ) )
label:SizeToContents()
end
local update, update_text, update_r, update_g = false, "", 0, 0
function Updatelabel()
local label = vgui.Create( "DLabel" )
label:SetParent( home )
label:SetText( update_text )
label:SetPos( 250, 10 )
label:SetWide( 100 )
label:SetTextColor( Color( update_r, update_g, 0 ) )
label:SizeToContents()
local image = vgui.Create( "DImage" )
image:SetParent( home )
image:SetPos( 225, 10 )
if ( update ) then image:SetImage( "gui/silkicons/check_on" ) else image:SetImage( "gui/silkicons/check_off" ) end
image:SizeToContents()
end
function FindFiles()
if ( FileCheck ) then
if ( #file.Find( "../lua/autorun/client/pb_pub.lua" ) >= 1 ) then
text = "Found file pb_pub.lua, loading..."
r = 0
g = 128
nButton:SetDisabled( true )
disabled = true
ErrorLabel()
elseif ( #file.Find( "../lua/autorun/client/pb_pub.lua" ) == 0 ) then
text = "Didn't find file pb_pub.lua! Not loading..."
r = 255
g = 0
ErrorLabel()
nButton:SetEnabled( true )
disabled = false
end
elseif ( !FileCheck ) then
text = "Loading pb_pub.lua without file checks"
r = 0
g = 128
nButton:SetDisabled( true )
ErrorLabel()
disabled = true
end
end
// Thanks to Flapadar for this.
function NewestVersion( c )
local s = string.Explode( "\n", c )
if ( string.find( s[1], "HELLO HUMANS" ) ) then
local newVer = tonumber( s[2] )
if ( newVer > curVer ) then
update = false
update_text = "New version out, " .. newVer .. "."
update_r = 255
update_g = 0
Updatelabel()
else
update = true
update_text = "No updates found."
update_r = 0
update_g = 128
Updatelabel()
end
end
end
local function IsUpdated()
http.Get( webs, "", function( c, s )
if ( s > 0 ) then
NewestVersion( c )
Updatelabel()
else
update = false
update_text = "Lost connection."
end
end )
end
IsUpdated()
timer.Create( "DOBUTTONCHECKS", 0.01, 0, function()
if ( panel:IsVisible() ) then
if ( disabled ) then
nButton:SetDisabled( true )
else
nButton:SetEnabled( true )
end
end
end )
AddButton( "Load", 10, 145, 75, 25, home, function() CreateClientConVar( "pb_load", 0, false, false ) FindFiles() end )
// Changelog
function Changelog()
local text = vgui.Create( "DTextEntry" )
text:SetParent( logs )
text:SetPos( 10, 10 )
text:SetTall( 160 )
text:SetWide( 350 )
text:SetMultiline( true )
text:SetEditable( false )
text:SetValue( changelog )
end
Changelog()
propsheet:AddSheet( "Home", home, nil, false, false, nil )
propsheet:AddSheet( "Changelog", logs, nil, false, false, nil )
end
function ConsoleMenu() // Normaly, you can make a consolecommand, but risk detections.
AddButton( "Options", 10, 10, 75, 35, nil, function()
local Menu = DermaMenu()
Menu:AddOption( "Open Menu", function() if ( !menu:IsVisible() ) then LoadMenu() end end )
Menu:AddOption( "Close Menu", function() if ( menu:IsVisible() ) then menu:SetVisible( false ) end end )
if ( !disabled ) then
Menu:AddOption( "Load Script", function() CreateClientConVar( "pb_load", 0, false, false ) disabled = true end )
end
Menu:Open()
end )
end
ConsoleMenu()
LoadMenu()
_______
if !( CLIENT ) then return end
if ( !ConVarExists( "pb_load" ) ) then return end
/*------------------------------------------------------------------------------------------------------
____ ____ ____ ___ ____ ___ ____ _____ _ _ ____ _____ ____
( _ \( _ \( ___)/ __)(_ _)/ __)(_ _)( _ )( \( )( _ \( _ )(_ _)
)___/ ) / )__)( (__ _)(_ \__ \ _)(_ )(_)( ) ( ) _ < )(_)( )(
(__) (_)\_)(____)\___)(____)(___/(____)(_____)(_)\_)(____/(_____) (__)
Precisionbot v1.3 Public
by fr1kin, also credits to:
kolbybrooks
Flapadar
Seth
*/------------------------------------------------------------------------------------------------------
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 = ValidEntity
local Vector = Vector
local PB = {}
PB.OLD = {}
PB.Commands = {}
PB.Files = { "pb_pub", "pb_wireframemat", "pb_solid_mat" } // Add the the files you use into here, example: PB.Files = { "pb_pub", "other_script" }
PB.Path = {}
PB.Timers = {}
PB.Friends = {}
PB.Entities = {}
PB.CVars = {
aim_shoot = 0,
aim_friends = 0,
aim_steam = 0,
aim_fov = 360,
aim_recoil = 1,
aim_distance = 0,
aim_player = 1,
aim_info = 0,
aim_npc = 0,
aim_reload = 1,
esp_player = 1,
esp_npc = 1,
esp_weapon = 0,
esp_entity = 0,
esp_aimspot = 0,
esp_wallhack = 1,
esp_barrel = 0,
esp_dead = 1,
misc_cross = 0,
misc_admin = 0,
misc_bhop = 1,
misc_auto = 0,
}
PB.PredictWeapons = {
["weapon_crossbow"] = 3110,
}
PB.Hooks = {}
PB.SVARS = {}
PB.OLD.GCV = GetConVar
PB.OLD.CVE = ConVarExists
PB.OLD.GCVN = GetConVarNumber
PB.OLD.GCVS = GetConVarString
PB.OLD.CCCV = CreateClientConVar
PB.OLD.RCC = RunConsoleCommand
PB.OLD.ECC = engineConsoleCommand
PB.OLD.ACC = AddConsoleCommand
PB.OLD.hook = table.Copy( hook )
PB.OLD.concommand = table.Copy( concommand )
PB.OLD.cvars = table.Copy( cvars )
PB.OLD.file = table.Copy( file )
PB.OLD.debug = table.Copy( debug )
PB.OLD.timer = table.Copy( timer )
PB.OLD.PCC = _R.Player.ConCommand
PB.OLD.CINT = _R.ConVar.GetInt
PB.OLD.CBOOL = _R.ConVar.GetBool
PB.Aiming = false
PB.Auto = true
PB.Target = nil
PB.FilePath = "lua\\autorun\\client\\pb_pub.lua"
PB.Version = "1.2"
PB.Prefix = "pb_"
PB.Angles = Angle( 0, 0, 0 )
PB.AimAng = Angle( 0, 0, 0 )
PB.Viewfix = Angle( 0, 0, 0 )
function PB:Msg( msg )
return MsgN( "[PB]: " .. msg )
end
// Later if I care about this I will change the method I add hooks.
function PB:AddHook( typ, func )
local ran = ""
for i = 1, math.random( 5, 30 ) do
ran = ran .. string.char( math.random( 65, 117 ) )
end
table.insert( PB.Hooks, ran )
return PB.OLD.hook.Add( typ, ran, func )
end
function PB:AddCommand( name, func )
table.insert( PB.Commands, name )
return PB.OLD.concommand.Add( name, func )
end
function PB:CreateTimer( name, time, reps, func )
table.insert( PB.Timers, name )
return PB.OLD.timer.Create( name, time, reps, func )
end
function PB.SetUp()
for k, v in pairs( PB.CVars ) do
table.insert( PB.SVARS, PB.Prefix .. k )
PB.OLD.CCCV( PB.Prefix .. k, v, true, false )
end
end
table.insert( PB.SVARS, "pb_load" )
function PB:GetValue( cvar, val )
if ( PB.OLD.GCVN( PB.Prefix .. cvar ) == val ) then
return true
end
return false
end
function PB:GetConVarNumber( cvar )
return PB.OLD.GCVN( string.lower( PB.Prefix .. cvar ) )
end
function PB:DrawText( text, font, x, y, colour, xalign, yalign )
if ( font == nil ) then font = "Default" end
if ( x == nil ) then x = 0 end
if ( y == nil ) then y = 0 end
local curX, curY, curString = x, y, ""
surface.SetFont( font )
local sizeX, lineHeight = surface.GetTextSize( "\n" )
for i = 1, string.len( text ) do
local ch = string.sub( text, i, i )
if ( ch == "\n" ) then
if ( string.len( curString ) > 0 ) then
draw.SimpleText( curString, font, curX, curY, colour, xalign, yalign )
end
curY, curX, curString = curY + ( lineHeight / 2 ), x, ""
elseif ( ch == "\t" ) then
if ( string.len( curString ) > 0 ) then
draw.SimpleText( curString, font, curX, curY, colour, xalign, yalign )
end
local tmpSizeX,tmpSizeY = surface.GetTextSize( curString )
curX = math.ceil( ( curX + tmpSizeX ) / 50 ) * 50
curString = ""
else
curString = curString .. ch
end
end
if ( string.len( curString ) > 0 ) then
draw.SimpleText( curString, font, curX, curY, colour, xalign, yalign )
end
end
function PB:NormalText( text, posX, posY, bold, boldlevel, r, g, b, lA, rA )
if ( bold == true ) then
return draw.SimpleTextOutlined( text, "Default", posX, posY, Color( r, g, b, 255 ), lA, rA, boldlevel, Color( 0, 0, 0, 255 ) )
elseif ( bold == false ) then
return draw.SimpleText( text, "Default", posX, posY, Color( r, g, b, 255 ), lA, rA )
end
return draw.SimpleText( text, "Default", posX, posY, Color( r, g, b, 255 ), lA, rA )
end
function PB:IsAdmin(e)
if ( e:IsAdmin() ) then
return true
elseif ( e:IsSuperAdmin() ) then
return true
end
return false
end
function PB:GetAdminType(e)
local ply = LocalPlayer()
if ( e:IsAdmin() && !e:IsSuperAdmin() ) then
return "Admin"
elseif ( e:IsSuperAdmin() ) then
return "Super Admin"
end
return ""
end
function PB:CreateMaterial()
local BaseInfo = {
["$basetexture"] = "models/debug/debugwhite",
["$model"] = 1,
["$translucent"] = 1,
["$alpha"] = 1,
["$nocull"] = 1,
["$ignorez"] = 1
}
local mat = CreateMaterial( "pb_wireframemat", "Wireframe", BaseInfo )
//local mat = CreateMaterial( "pb_solid_mat", "VertexLitGeneric", BaseInfo )
return mat
end
--[[--------------------------------------
Everything below here is the hack code.
--]]--------------------------------------
function PB:IsValid( e, typ )
local ply = LocalPlayer()
if ( typ == true ) then
if ( !ValidEntity( e ) ) then return false end
if ( !e:IsValid() || !e:IsPlayer() && !e:IsNPC() && !e:IsWeapon() && !table.HasValue( PB.Entities, e:GetClass() ) || e == ply ) then return false end
if ( e:IsPlayer() && ( PB:GetValue( "esp_dead", 0 ) && !e:Alive() ) && !string.find( string.lower( team.GetName( e:Team() ) ), "spec" ) ) then return false end
if ( e:IsNPC() && ( e:GetMoveType() == 0 ) ) then return false end
if ( e:IsWeapon() && ( e:GetMoveType() == 0 ) ) then return false end
return true
elseif ( typ == false ) then
if ( !ValidEntity( e ) ) then return false end
if ( !e:IsValid() || !e:IsPlayer() && !e:IsNPC() && !e:IsWeapon() || e == ply ) then return false end
if ( e:IsPlayer() && !e:Alive() && !string.find( string.lower( team.GetName( e:Team() ) ), "spec" ) ) then return false end
if ( e:IsNPC() && ( e:GetMoveType() == 0 ) ) then return false end
if ( e:IsWeapon() && ( e:GetMoveType() == 0 ) ) then return false end
return true
end
return true
end
function PB:GayClasses( e )
if ( e:GetClass() == "viewmodel" ) then return false end
if ( e:GetClass() == "player" ) then return false end
return true
end
function PB:ConVarEnabled( e )
if ( PB:GetValue( "esp_wallhack", 0 ) ) then return false end
if ( e:IsPlayer() && PB:GetValue( "esp_player", 0 ) ) then return false end
if ( e:IsNPC() && PB:GetValue( "esp_npc", 0 ) ) then return false end
if ( e:IsWeapon() && PB:GetValue( "esp_weapon", 0 ) ) then return false end
return true
end
function PB:CreatePos( e )
local ply, pos = LocalPlayer(), ""
local col = PB:SetColors( e )
local center = e:LocalToWorld( e:OBBCenter() )
local min, max = e:OBBMins(), e:OBBMaxs()
local dim = max - min
local z = max + min
local frt = ( e:GetForward() ) * ( dim.y / 2 )
local rgt = ( e:GetRight() ) * ( dim.x / 2 )
local top = ( e:GetUp() ) * ( dim.z / 2 )
local bak = ( e:GetForward() * -1 ) * ( dim.y / 2 )
local lft = ( e:GetRight() * -1 ) * ( dim.x / 2 )
local btm = ( e:GetUp() * -1 ) * ( dim.z / 2 )
local d, v = math.Round( e:GetPos():Distance( ply:GetShootPos() ) )
if ( e:IsPlayer() ) then v = d / 30 else v = 0 end
pos = e:LocalToWorld( e:OBBMaxs() ) + Vector( 0, 0, v )
if ( table.HasValue( PB.Entities, e:GetClass() ) ) then
pos = e:LocalToWorld( e:OBBCenter() )
end
local FRT = center + frt + rgt + top; FRT = FRT:ToScreen()
local BLB = center + bak + lft + btm; BLB = BLB:ToScreen()
local FLT = center + frt + lft + top; FLT = FLT:ToScreen()
local BRT = center + bak + rgt + top; BRT = BRT:ToScreen()
local BLT = center + bak + lft + top; BLT = BLT:ToScreen()
local FRB = center + frt + rgt + btm; FRB = FRB:ToScreen()
local FLB = center + frt + lft + btm; FLB = FLB:ToScreen()
local BRB = center + bak + rgt + btm; BRB = BRB:ToScreen()
pos = pos:ToScreen()
local maxX = math.max( FRT.x,BLB.x,FLT.x,BRT.x,BLT.x,FRB.x,FLB.x,BRB.x )
local minX = math.min( FRT.x,BLB.x,FLT.x,BRT.x,BLT.x,FRB.x,FLB.x,BRB.x )
local maxY = math.max( FRT.y,BLB.y,FLT.y,BRT.y,BLT.y,FRB.y,FLB.y,BRB.y)
local minY = math.min( FRT.y,BLB.y,FLT.y,BRT.y,BLT.y,FRB.y,FLB.y,BRB.y )
return maxX, minX, maxY, minY, pos
end
function PB:SetColors( e )
local ply, class, model = LocalPlayer(), e:GetClass(), e:GetModel()
local col
if ( e:IsPlayer() ) then
col = team.GetColor( e:Team() )
elseif ( e:IsNPC() ) then
col = Color( 255, 0, 0, 255 )
elseif ( e:IsWeapon() ) then
col = Color( 255, 128, 0, 255 )
elseif ( table.HasValue( PB.Entities, e:GetClass() ) ) then
col = Color( 0, 255, 0, 255 )
else
col = Color( 255, 255, 255, 255 )
end
return col
end
function PB:DrawRect( x, y, w, h, col )
surface.SetDrawColor( col.r, col.g, col.b, col.a )
surface.DrawRect( x, y, w, h )
end
function PB:Ammo()
local ply = LocalPlayer()
if ( ply:GetActiveWeapon() && ply:GetActiveWeapon():IsValid() && ply:GetActiveWeapon():GetClass() == "weapon_crossbow" ) then return true end
if ply && ply:GetActiveWeapon() && ply:GetActiveWeapon():IsValid() then
local wep = ply:GetActiveWeapon()
if !wep then return -1 end
if wep:Clip1() == 0 then
return false
end
end
return true
end
function PB:GetPos( e, pos )
if ( type( pos ) == "string" ) then
return ( e:GetBonePosition( e:LookupBone( pos ) ) )
elseif ( type( pos ) == "Vector" ) then
return ( e:LocalToWorld( pos ) )
end
return ( e:LocalToWorld( pos ) )
end
function PB:WeaponPrediction( e, pos )
local ply = LocalPlayer()
if ( ValidEntity( e ) && ( type( e:GetVelocity() ) == "Vector" ) ) then
local dis, wep = e:GetPos():Distance( ply:GetPos() ), ( ply.GetActiveWeapon && ValidEntity( ply:GetActiveWeapon() ) && ply:GetActiveWeapon():GetClass() )
if ( wep && PB.PredictWeapons[ wep ] ) then
local t = dis / PB.PredictWeapons[ wep ]
return ( pos + e:GetVelocity() * t )
end
return pos
end
return pos
end
function PB:GenerateSpot( e )
local spt = e:LocalToWorld( e:OBBCenter() )
spt = PB:GetPos( e, "ValveBiped.Bip01_Head1" )
local m = e:GetModel()
if ( m == "models/crow.mdl" || m == "models/pigeon.mdl" ) then spt = PB:GetPos( e, Vector( 0, 0, 5 ) ) end
if ( m == "models/seagull.mdl" ) then spt = PB:GetPos( e, Vector( 0, 0, 6 ) ) end
if ( m == "models/combine_scanner.mdl" ) then spt = PB:GetPos( e, "Scanner.Body" ) end
if ( m == "models/hunter.mdl" ) then spt = PB:GetPos( e, "MiniStrider.body_joint" ) end
if ( m == "models/combine_turrets/floor_turret.mdl" ) then spt = PB:GetPos( e, "Barrel" ) end
if ( m == "models/dog.mdl" ) then spt = PB:GetPos( e, "Dog_Model.Eye" ) end
if ( m == "models/vortigaunt.mdl" ) then spt = PB:GetPos( e, "ValveBiped.Head" ) end
if ( m == "models/antlion.mdl" ) then spt = PB:GetPos( e, "Antlion.Body_Bone" ) end
if ( m == "models/antlion_guard.mdl" ) then spt = PB:GetPos( e, "Antlion_Guard.Body" ) end
if ( m == "models/antlion_worker.mdl" ) then spt = PB:GetPos( e, "Antlion.Head_Bone" ) end
if ( m == "models/zombie/fast_torso.mdl" ) then spt = PB:GetPos( e, "ValveBiped.HC_BodyCube" ) end
if ( m == "models/zombie/fast.mdl" ) then spt = PB:GetPos( e, "ValveBiped.HC_BodyCube" ) end
if ( m == "models/headcrabclassic.mdl" ) then spt = PB:GetPos( e, "HeadcrabClassic.SpineControl" ) end
if ( m == "models/headcrabblack.mdl" ) then spt = PB:GetPos( e, "HCBlack.body" ) end
if ( m == "models/headcrab.mdl" ) then spt = PB:GetPos( e, "HCFast.body" ) end
if ( m == "models/zombie/poison.mdl" ) then spt = PB:GetPos( e, "ValveBiped.Headcrab_Cube1" ) end
if ( m == "models/zombie/classic.mdl" ) then spt = PB:GetPos( e, "ValveBiped.HC_Body_Bone" ) end
if ( m == "models/zombie/classic_torso.mdl" ) then spt = PB:GetPos( e, "ValveBiped.HC_Body_Bone" ) end
if ( m == "models/zombie/zombie_soldier.mdl" ) then spt = PB:GetPos( e, "ValveBiped.HC_Body_Bone" ) end
if ( m == "models/combine_strider.mdl" ) then spt = PB:GetPos( e, "Combine_Strider.Body_Bone" ) end
if ( m == "models/combine_dropship.mdl" ) then spt = PB:GetPos( e, "D_ship.Spine1" ) end
if ( m == "models/combine_helicopter.mdl" ) then spt = PB:GetPos( e, "Chopper.Body" ) end
if ( m == "models/gunship.mdl" ) then spt = PB:GetPos( e, "Gunship.Body" ) end
if ( m == "models/lamarr.mdl" ) then spt = PB:GetPos( e, "HeadcrabClassic.SpineControl" ) end
if ( m == "models/mortarsynth.mdl" ) then spt = PB:GetPos( e, "Root Bone" ) end
if ( m == "models/synth.mdl" ) then spt = PB:GetPos( e, "Bip02 Spine1" ) end
if ( m == "mmodels/vortigaunt_slave.mdl" ) then spt = PB:GetPos( e, "ValveBiped.Head" ) end
return PB:WeaponPrediction( e, spt )
end
function PB:IsVisible( e )
if ( !ValidEntity(e) ) then return false end
local ply, spt = LocalPlayer(), PB:GenerateSpot(e)
local visible = {
start = ply:GetShootPos(),
endpos = spt,
filter = { ply, e }
}
local trace = util.TraceLine( visible )
if trace.Fraction == 1 then
return true
end
return false
end
local hp = false
function PB:HealthBar( e )
if ( e:IsPlayer() && e:Health() > 300 || !e:Alive() ) then return end
local col, normalhp = PB:SetColors(e), 100
local maxX, minX, maxY, minY, oPos = PB:CreatePos(e)
if( e:Health() > normalhp ) then
normalhp = e:Health()
end
local dmg, nor = normalhp / 4, e:Health() / 4
oPos.x = oPos.x - ( dmg / 2 ) + 13
oPos.y = oPos.y + 15
PB:DrawRect( oPos.x - 1, oPos.y - 1, dmg + 2, 4 + 2, Color( 0, 0, 0, 255 ) )
PB:DrawRect( oPos.x, oPos.y, nor, 4, col )
end
function PB:GetActiveWeapon( e ) // Removed due to shittyness, rifk.
if ( !e:GetActiveWeapon():IsValid() ) then return "None" end
local wep = e:GetActiveWeapon():GetPrintName()
wep = string.Replace( wep, "#HL2_", "" )
wep = string.Replace( wep, "#GMOD_", "" )
wep = string.Replace( wep, "_", " " )
wep = string.lower( wep )
return wep
end
function PB:CreateDrawings( e )
local ply = LocalPlayer()
local text, box = "", false
local maxX, minX, maxY, minY, pos = PB:CreatePos(e)
if ( e:IsPlayer() && PB:GetValue( "esp_player", 1 ) ) then
if ( e:Health() > 300 ) then hp = false else hp = true end
box = true
if ( !hp ) then text = text .. e:Nick() .. "\nHp: " .. e:Health() else text = text .. e:Nick() PB:HealthBar( e ) end
if ( PB:GetValue( "esp_dead", 1 ) && !e:Alive() ) then text = text .. "\n*DEAD*" else text = text end
elseif ( e:IsNPC() && PB:GetValue( "esp_npc", 1 ) ) then
box = true
local npc = e:GetClass()
npc = string.Replace( npc, "npc_", "" )
npc = string.Replace( npc, "_", "" )
npc = string.upper( npc )
text = text .. npc
elseif ( e:IsWeapon() && PB:GetValue( "esp_weapon", 1 ) ) then
box = false
local ent = e:GetClass()
ent = string.Replace( ent, "weapon_", "" )
ent = string.Replace( ent, "ttt_", "" )
ent = string.Replace( ent, "zm_", "" )
ent = string.Replace( ent, "cs_", "" )
ent = string.Replace( ent, "css_", "" )
ent = string.Replace( ent, "real_", "" )
ent = string.Replace( ent, "mad_", "" )
ent = string.Replace( ent, "_", " " )
ent = string.lower( ent )
text = text .. ent
elseif ( PB:GetValue( "esp_entity", 1 ) && table.HasValue( PB.Entities, e:GetClass() ) ) then
box = false
local class
if ( e:GetClass() == "prop_physics" ) then class = e:GetModel() else class = e:GetClass() end
text = text .. class
end
local col = PB:SetColors(e)
return text, box, maxX, minX, maxY, minY, pos, col
end
function PB:ValidAimTarget( e )
local ply = LocalPlayer()
if ( !ValidEntity( e ) ) then return false end
if ( e:IsNPC() && !util.IsValidModel( e:GetModel() || "" ) ) then return false end
if ( e:GetMoveType() == MOVETYPE_NONE ) then return false end
if ( !e:IsValid() || !e:IsPlayer() && !e:IsNPC() || e == ply ) then return false end
if ( e:IsPlayer() && e:GetMoveType() == MOVETYPE_OBSERVER ) then return false end
if ( e:IsPlayer() && !e:Alive() ) then return false end
if ( e:IsPlayer() && PB:GetValue( "aim_steam", 1 ) && ( e:GetFriendStatus() == "friend" ) ) then return false end
if ( e:IsPlayer() && PB:GetValue( "aim_friends", 1 ) && ( e:Team() == ply:Team() ) ) then return false end
if ( e:IsPlayer() && table.HasValue( PB.Friends, e:Nick() ) ) then return false end
if ( e:IsPlayer() && PB:GetValue( "aim_player", 0 ) ) then return false end
if ( e:IsNPC() && PB:GetValue( "aim_npc", 0 ) ) then return false end
return true
end
function PB.Aimbot( ucmd )
local ply = LocalPlayer()
local m = Angle( ucmd:GetMouseY() * PB.OLD.GCVN( "m_pitch" ), ucmd:GetMouseX() * -PB.OLD.GCVN("m_yaw") ) || Angle( 0, 0, 0 )
PB.Viewfix = ucmd:GetViewAngles()
PB.AimAng = PB.AimAng + m
// I'm not good at making aimbots, so I stealz one.
if ( PB.Aiming ) then
if ( !PB:ValidAimTarget(PB.Target) || !PB:IsVisible(PB.Target) ) then
PB.Target = nil
local f, o, a, t, b = PB:GetConVarNumber( "aim_fov" ), { p, y }
for k, e in pairs( ents.GetAll() ) do
if ( PB:ValidAimTarget(e) && PB:IsVisible(e) ) then
local tP, oP = math.Round( e:GetPos():Distance( ply:GetPos() ) ), math.Round( ply:GetPos():Distance( e:GetPos() ) )
b = PB:GenerateSpot(e)
a, t = ply:GetAimVector():Angle(), (b - ply:GetShootPos()):Angle()
o.p, o.y = math.abs(math.NormalizeAngle(a.p - t.p)) / 2, math.abs(math.NormalizeAngle(a.y - t.y)) / 2
if ( !PB.Target || tP > oP ) && ( o.p <= f && o.y <= f ) then PB.Target = e end
end
end
end
// Autoshoot
if ( PB.Aiming && PB.Target != nil && PB:GetValue( "aim_shoot", 1 ) && PB.Auto ) then
PB.OLD.RCC( "+attack" )
timer.Simple( 0.1, function() PB.OLD.RCC( "-attack" ) end )
end
if ( !PB:Ammo() && PB:GetValue( "aim_reload", 1 ) ) then PB.OLD.RCC( "+reload" ) timer.Simple( 0.25, function() PB.OLD.RCC( "-reload" ) end ) end
if ( !ValidEntity(PB.Target) || !PB.Aiming ) then return end
local comp, myPos = PB:GenerateSpot(PB.Target), ply:GetShootPos()
comp = comp + ( PB.Target:GetVelocity() / 45 - ply:GetVelocity() / 45 )
local ang = ( comp-myPos ):Angle()
ang.p = math.NormalizeAngle( ang.p )
ang.y = math.NormalizeAngle( ang.y )
ang.r = 0
PB.AimAng = ang
PB.Viewfix = ang
end
PB.AimAng.r = 0
PB.Angles = PB.AimAng
PB.Angles.p = math.NormalizeAngle( PB.Angles.p )
PB.Angles.y = math.NormalizeAngle( PB.Angles.y )
PB.Angles.y = math.NormalizeAngle( PB.Angles.y + ( ucmd:GetMouseX() * -0.022 * 1 ) )
PB.Angles.p = math.Clamp( PB.Angles.p + ( ucmd:GetMouseY() * 0.022 * 1 ), -89, 90 )
ucmd:SetViewAngles( PB.Angles )
if ( !PB:Ammo() && !PB.Aiming && PB:GetValue( "aim_reload", 1 ) ) then PB.OLD.RCC( "+reload" ) timer.Simple( 0.25, function() PB.OLD.RCC( "-reload" ) end ) end
end
PB:AddCommand( "+" .. PB.Prefix .. "aim", function() PB.Aiming = true end )
PB:AddCommand( "-" .. PB.Prefix .. "aim", function() PB.Aiming = false PB.Target = nil end )
function PB.Norecoil( ucmd )
local wep = LocalPlayer():GetActiveWeapon()
if ( PB:GetValue( "aim_recoil", 1 ) && !PB.Aiming ) then
if ( wep.Primary ) then wep.Primary.Recoil = 0 end
return { origin = 90, angles = PB.Angles }
elseif ( PB:GetValue( "aim_recoil", 1 ) && PB.Aiming && PB.Target != nil ) then
if ( wep.Primary ) then wep.Primary.Recoil = 0 end
return { origin = 90, angles = PB.Angles }
elseif ( PB:GetValue( "aim_recoil", 1 ) && PB.Aiming && PB.Target == nil ) then
if ( wep.Primary ) then wep.Primary.Recoil = 0 end
return { origin = 90, angles = PB.Viewfix }
end
return
end
function PB.CreateESP()
local ply = LocalPlayer()
for k, e in pairs( ents.GetAll() ) do
if ( PB:IsValid( e, true ) ) then
local text, box, maxX, minX, maxY, minY, pos, col = PB:CreateDrawings(e)
local color = Color( col.r, col.g, col.b, 255 )
if ( box ) then
surface.SetDrawColor( color )
surface.DrawLine( maxX, maxY, maxX, minY )
surface.DrawLine( maxX, minY, minX, minY )
surface.DrawLine( minX, minY, minX, maxY )
surface.DrawLine( minX, maxY, maxX, maxY )
end
PB:DrawText(
text,
"DefaultSmall",
pos.x,
pos.y,
color,
TEXT_ALIGN_LEFT,
TEXT_ALIGN_TOP
)
end
end
if ( PB:GetValue( "misc_cross", 1 ) ) then
local g = 5
local s, x, y, l = 10, ScrW() / 2, ScrH() / 2, g + 15
surface.SetDrawColor( 0, 255, 0, 255 )
surface.DrawLine( x - l, y, x - g, y )
surface.DrawLine( x + l, y, x + g, y )
surface.DrawLine( x, y - l, x, y - g )
surface.DrawLine( x, y + l, x, y + g )
//surface.DrawLine( x - 20, y - 20, x + 20, y + 20 )
//surface.DrawLine( x - 20, y + 20, x + 20, y - 20)
end
if ( PB:GetValue( "esp_barrel", 1 ) ) then
for k, e in pairs( player.GetAll() ) do
if ( e != ply && e:Alive() ) then
local headPos, hitPos, col = e:GetBonePosition( e:LookupBone( "ValveBiped.Bip01_Head1" ) ), e:GetEyeTrace().HitPos, team.GetColor( e:Team() )
cam.Start3D( EyePos(), EyeAngles() )
cam.IgnoreZ( false )
render.SetMaterial( Material( "cable/redlaser.vmt" ) )
render.DrawBeam( headPos, hitPos, 5, 0, 0, Color( col.r, col.g, col.b, 255 ) )
cam.End3D()
end
end
end
if ( PB:GetValue( "esp_aimspot", 1 ) ) then
for k, e in pairs( ents.GetAll() ) do
if ( PB.Target != nil && e == PB.Target && PB.Aiming ) then
local bone = PB:GenerateSpot(PB.Target) + ( PB.Target:GetVelocity() / 45 - ply:GetVelocity() / 45 )
local pos = bone:ToScreen()
draw.RoundedBox( 0, pos.x - 2, pos.y - 2, 4, 4, Color( 255, 0, 0, 255 ) )
end
end
end
if ( PB:GetValue( "misc_admin", 1 ) ) then
local admin, adminnum, x, y = "", 0, ScrW(), ScrH()
for k, e in pairs( player.GetAll() ) do
if ( e:IsPlayer() && PB:IsAdmin(e) ) then
admin = ( admin .. e:Nick() .. " [" .. PB:GetAdminType(e) .. "]" .. "\n" )
adminnum = adminnum + 1
end
end
local wide, tall = 300, ( adminnum * 20 ) + 20
local posX, posY = x / 2 + ( wide - wide ) + 300, y / 2 + ( tall + tall ) - 400
if ( adminnum == 0 ) then
admin = ""
admin = ( "\nThere are no admins on right now" )
wide, tall = 300, 40
end
draw.RoundedBox( 6, posX - ( wide / 2 ), posY - 10, 300, tall, Color( 0, 0, 0, 150 ) )
PB:DrawText(
"Admins: " .. admin,
"Default",
posX,
posY,
Color( 0, 255, 0, 255 ),
1,
1
)
end
if ( PB:GetValue( "aim_info", 1 ) ) then // Sorry got a little MESSY
local x, y = ScrW(), ScrH()
local text, aiming, r, g, w, rw = "", "", 0, 0, 0, 100
for k, e in pairs( ents.GetAll() ) do
if ( e == PB.Target && ValidEntity( e ) && e:IsPlayer() ) then text = e:Nick()
elseif ( e == PB.Target && ValidEntity( e ) && e:IsNPC() ) then text = e:GetClass()
elseif ( e == PB.Target && e:IsPlayer() && ( e:Nick() == "<none>" ) ) then text = "<none>(Player)"
elseif ( PB.Target == nil ) then text = "<none>" end
if ( PB.Aiming ) then aiming = "TRUE" r = 0 g = 255 else aiming = "FALSE" r = 255 g = 0 end
if ( e == PB.Target && ValidEntity( e ) ) then w = ( string.len( text ) * 10 ) end
if ( w > 100 ) then rw = w else rw = 100 end
end
draw.RoundedBox( 6, ( x / 2 ) - 510, ( y / 2 ) - 340, rw, 40, Color( 0, 0, 0, 150 ) )
PB:NormalText( "Aiming: ", ( x / 2 ) - 500, ( y / 2 ) - 335, false, 1, 255, 255, 255, TEXT_ALIGN_LEFT, TEXT_ALIGN_LEFT )
PB:NormalText( "Target: " .. text, ( x / 2 ) - 500, ( y / 2 ) - 320, false, 1, 255, 255, 255, TEXT_ALIGN_LEFT, TEXT_ALIGN_LEFT )
PB:NormalText( aiming, ( x / 2 ) - 460, ( y / 2 ) - 335, false, 1, r, g, 0, TEXT_ALIGN_LEFT, TEXT_ALIGN_LEFT )
end
end
function PB.Wireframe()
local ply, c = LocalPlayer(), ( 1 / 255 )
for k, e in pairs( ents.GetAll() ) do
if ( PB:IsValid( e, false ) && PB:ConVarEnabled(e) && !e:IsWeapon() ) then
cam.Start3D( EyePos(), EyeAngles() )
local mat, col = PB:CreateMaterial(), PB:SetColors(e)
render.SuppressEngineLighting( true )
render.SetColorModulation( ( col.r * c ), ( col.g * c ), ( col.b * c ) )
SetMaterialOverride( mat )
e:DrawModel()
render.SuppressEngineLighting( false )
render.SetColorModulation( 1, 1, 1 )
SetMaterialOverride()
e:DrawModel()
cam.End3D()
end
end
end
local shoot = false
PB.Banned = {
"weapon_phycannon",
"weapon_physgun"
}
function PB.ThinkFunctions()
local ply = LocalPlayer()
local curWep = ply:GetActiveWeapon():GetClass()
if ( PB:GetValue( "misc_bhop", 1 ) && input.IsKeyDown( KEY_SPACE ) ) then
if ( ply:OnGround() ) then
PB.OLD.RCC( "+jump" )
PB:CreateTimer( "BHOP", 0.1, 0, function() PB.OLD.RCC( "-jump" ) end )
end
end
if ( PB:GetValue( "misc_auto", 1 ) && input.IsMouseDown( MOUSE_LEFT ) && !table.HasValue( PB.Banned, curWep ) ) then // No more autoclickers or just spamming the left mouse button anymore!
if ( shoot ) then
PB.OLD.RCC( "-attack" )
shoot = false
elseif ( !shoot ) then
PB.OLD.RCC( "+attack" )
shoot = true
end
elseif ( PB:GetValue( "misc_auto", 1 ) && !input.IsMouseDown( MOUSE_LEFT ) ) then
if ( shoot ) then
PB.OLD.RCC( "-attack" )
shoot = false
end
end
end
PB:AddHook( "CreateMove", PB.Aimbot )
PB:AddHook( "CalcView", PB.Norecoil )
PB:AddHook( "HUDPaint", PB.CreateESP )
PB:AddHook( "Initialize", PB.SetUp )
PB:AddHook( "Think", PB.ThinkFunctions )
PB:AddHook( "RenderScreenspaceEffects", PB.Wireframe )
// Menu
local Menu
function PB:AddOptionCheckbox( text, cvar, parent, amt )
local checkbox = vgui.Create( "DCheckBoxLabel" )
checkbox:SetPos( 10, amt )
checkbox:SetText( text )
checkbox:SetConVar( PB.Prefix .. cvar )
checkbox:SetParent( parent )
checkbox:SetTextColor( Color( 0, 0, 0, 255 ) )
checkbox:SizeToContents()
end
function PB:AddOptionSlider( text, cvar, parent, min, max, posX, posY )
local slider = vgui.Create( "DNumSlider" )
slider:SetParent( parent )
slider:SetPos( posX, posY )
slider:SetSize( 200, 70 )
slider:SetText( "" )
slider:SetMin( min )
slider:SetMax( max )
slider:SetDecimals( 0 )
slider:SetConVar( PB.Prefix .. cvar )
local label = vgui.Create( "DLabel" )
label:SetParent( parent )
label:SetText( text )
label:SetPos( posX, posY )
label:SetWide( 100 )
label:SetTextColor( Color( 0, 0, 0 ) )
label:SizeToContents()
end
function PB:AddOptionLabel( text, posX, posY, parent, r, g, b )
local label = vgui.Create( "DLabel" )
label:SetParent( parent )
label:SetText( text )
label:SetPos( posX, posY )
label:SetWide( 100 )
label:SetTextColor( Color( r, g, b ) )
label:SizeToContents()
end
function PB.Menu()
local ply = LocalPlayer()
local panel = vgui.Create( "DFrame" )
panel:SetPos( ScrW() / 2 - 400 / 2, ScrH() / 2 - 300 / 2 )
panel:SetSize( 400, 300 )
panel:SetTitle( "Precisionbot v" .. PB.Version )
panel:SetVisible( true )
panel:SetDraggable( true )
panel:ShowCloseButton( true )
panel:MakePopup()
Menu = panel
local propsheet = vgui.Create( "DPropertySheet" )
propsheet:SetParent( panel )
propsheet:SetPos( 10, 30 )
propsheet:SetSize( 380, 260 )
local aim = vgui.Create( "DPanel", propsheet )
local esp = vgui.Create( "DPanel", propsheet )
local misc = vgui.Create( "DPanel", propsheet )
local frds = vgui.Create( "DPanel", propsheet )
local entz = vgui.Create( "DPanel", propsheet ) // ents
PB:AddOptionCheckbox( "Autoshoot", "aim_shoot", aim, 10 )
PB:AddOptionCheckbox( "Ignore Friends", "aim_steam", aim, 30 )
PB:AddOptionCheckbox( "Ignore Team", "aim_friends", aim, 50 )
PB:AddOptionCheckbox( "No-recoil", "aim_recoil", aim, 70 )
PB:AddOptionCheckbox( "Target Players", "aim_player", aim, 90 )
PB:AddOptionCheckbox( "Target NPC's", "aim_npc", aim, 110 )
PB:AddOptionCheckbox( "Auto Reload", "aim_reload", aim, 130 )
PB:AddOptionCheckbox( "Aim Info", "aim_info", aim, 150 )
PB:AddOptionSlider( "Field-of-View", "aim_fov", aim, 0, 180, 150, 10 )
//PB:AddOptionSlider( "Aim Distance", "aim_distance", aim, 0, 16384, 150, 50 )
PB:AddOptionLabel( "Player Options: ", 10, 5, esp, 255, 0, 0 )
PB:AddOptionCheckbox( "Players", "esp_player", esp, 20 )
PB:AddOptionCheckbox( "Barrel", "esp_barrel", esp, 40 )
PB:AddOptionCheckbox( "Show Dead", "esp_dead", esp, 60 )
PB:AddOptionLabel( "Entity Options: ", 10, 80, esp, 255, 0, 0 )
PB:AddOptionCheckbox( "NPC", "esp_npc", esp, 100 )
PB:AddOptionCheckbox( "Weapons", "esp_weapon", esp, 120 )
PB:AddOptionCheckbox( "Chams", "esp_wallhack", esp, 140 )
PB:AddOptionCheckbox( "Show Aimspot", "esp_aimspot", esp, 160 )
PB:AddOptionCheckbox( "Entities", "esp_entity", esp, 180 )
PB:AddOptionCheckbox( "Crosshair", "misc_cross", misc, 10 )
PB:AddOptionCheckbox( "Adminlist", "misc_admin", misc, 30 )
PB:AddOptionCheckbox( "Bunnyhop", "misc_bhop", misc, 50 )
PB:AddOptionCheckbox( "Autopistol", "misc_auto", misc, 70 )
// Friends list
local combobox1
function PB.AllPlayers()
combobox1 = vgui.Create( "DComboBox" )
combobox1:SetParent( frds )
combobox1:SetPos( 10, 10 )
combobox1:SetSize( 150, 180 )
combobox1:SetMultiple( false )
for k, e in pairs( player.GetAll() ) do
if ( e != LocalPlayer() && !table.HasValue( PB.Friends, e:Nick() ) ) then
combobox1:AddItem( e:Nick() )
end
end
end
PB.AllPlayers()
local combobox2
function PB.OnlyFriends()
combobox2 = vgui.Create( "DComboBox" )
combobox2:SetParent( frds )
combobox2:SetPos( 200, 10 )
combobox2:SetSize( 150, 180 )
combobox2:SetMultiple( false )
for k, e in pairs( player.GetAll() ) do
if ( table.HasValue( PB.Friends, e:Nick() ) ) then
combobox2:AddItem( e:Nick() )
end
end
end
PB.OnlyFriends()
local button1 = vgui.Create( "DButton" )
button1:SetParent( frds )
button1:SetSize( 150, 20 )
button1:SetPos( 10, 200 )
button1:SetText( "Add" )
button1.DoClick = function()
if ( combobox1:GetSelectedItems() && combobox1:GetSelectedItems()[1] ) then
for k, e in pairs( player.GetAll() ) do
if ( e:Nick() == combobox1:GetSelectedItems()[1]:GetValue() ) then
table.insert( PB.Friends, e:Nick() )
end
end
end
PB.AllPlayers()
PB.OnlyFriends()
end
local button2 = vgui.Create( "DButton" )
button2:SetParent( frds )
button2:SetSize( 150, 20 )
button2:SetPos( 200, 200 )
button2:SetText( "Remove" )
button2.DoClick = function()
if ( combobox2:GetSelectedItems() && combobox2:GetSelectedItems()[1] ) then
for k, e in pairs( PB.Friends ) do
if ( e == combobox2:GetSelectedItems()[1]:GetValue() ) then
table.remove( PB.Friends, k )
end
end
end
PB.AllPlayers()
PB.OnlyFriends()
end
PB.AllEntities = {}
function PB.Exists()
for k, e in pairs( ents.GetAll() ) do
if ( !table.HasValue( PB.Entities, e:GetClass() ) ) then
if ( !PB:GayClasses(e) ) then
table.insert( PB.AllEntities, e:GetClass() )
end
end
end
end
// Entity list
local combobox3
function PB.AllEntities()
combobox3 = vgui.Create( "DComboBox" )
combobox3:SetParent( entz )
combobox3:SetPos( 10, 10 )
combobox3:SetSize( 150, 180 )
combobox3:SetMultiple( false )
for k, e in pairs( ents.GetAll() ) do
if ( !table.HasValue( PB.Entities, e:GetClass() ) && PB:GayClasses(e) ) then
combobox3:AddItem( e:GetClass() )
end
end
end
PB.AllEntities()
local combobox4
function PB.OnlyListed()
combobox4 = vgui.Create( "DComboBox" )
combobox4:SetParent( entz )
combobox4:SetPos( 200, 10 )
combobox4:SetSize( 150, 180 )
combobox4:SetMultiple( false )
for k, e in pairs( ents.GetAll() ) do
if ( table.HasValue( PB.Entities, e:GetClass() ) ) then
combobox4:AddItem( e:GetClass() )
end
end
end
PB.OnlyListed()
local button3 = vgui.Create( "DButton" )
button3:SetParent( entz )
button3:SetSize( 150, 20 )
button3:SetPos( 10, 200 )
button3:SetText( "Add" )
button3.DoClick = function()
if ( !combobox3:GetSelectedItems() && !combobox3:GetSelectedItems()[1] ) then ply:ChatPrint( "You need to select an item!" ) end
for k, e in pairs( ents.GetAll() ) do
if ( e:GetClass() == combobox3:GetSelectedItems()[1]:GetValue() ) then
table.insert( PB.Entities, e:GetClass() )
ply:ChatPrint( "Added entity: " .. e:GetClass() )
end
end
PB.AllEntities()
PB.OnlyListed()
end
local button4 = vgui.Create( "DButton" )
button4:SetParent( entz )
button4:SetSize( 150, 20 )
button4:SetPos( 200, 200 )
button4:SetText( "Remove" )
button4.DoClick = function()
if ( !combobox4:GetSelectedItems() && !combobox4:GetSelectedItems()[1] ) then ply:ChatPrint( "You need to select an item!" ) end
for k, e in pairs( PB.Entities ) do
if ( e == combobox4:GetSelectedItems()[1]:GetValue() ) then
table.remove( PB.Entities, k )
ply:ChatPrint( "Removed entity: " .. combobox4:GetSelectedItems()[1]:GetValue() )
end
end
PB.AllEntities()
PB.OnlyListed()
end
propsheet:AddSheet( "Aimbot", aim, nil, false, false, nil )
propsheet:AddSheet( "ESP", esp, nil, false, false, nil )
propsheet:AddSheet( "Misc", misc, nil, false, false, nil )
propsheet:AddSheet( "Friends", frds, nil, false, false, nil )
propsheet:AddSheet( "Entities", entz, nil, false, false, nil )
end
PB:AddCommand( "pb_menu", PB.Menu )
function RunConsoleCommand( cmd, ... )
PB.CallPath = PB.OLD.debug.getinfo(2)['short_src']
if ( PB.CallPath && PB.CallPath == PB.FilePath ) then return PB.OLD.RCC( cmd, ... ) end
for k, v in pairs( PB.SVARS ) do
if ( string.find( string.lower( cmd ), v ) ) then
return
end
end
return PB.OLD.RCC( cmd, ... )
end
function CreateClientConVar( cvar, val, save, data )
PB.CallPath = PB.OLD.debug.getinfo(2)['short_src']
if ( PB.CallPath && PB.CallPath == PB.FilePath ) then return PB.OLD.CCCV( cvar, val, save, data ) end
local done = {}
if ( done[cvar] != nil && PB.SVARS[cvar] != nil ) then
return PB.OLD.GCV( cvar )
end
done[cvar] = true
return PB.OLD.CCCV( cvar, val, save, data )
end
function GetConVar( cvar )
PB.CallPath = PB.OLD.debug.getinfo(2)['short_src']
if ( PB.CallPath && PB.CallPath == PB.FilePath ) then return PB.OLD.GCV( cvar ) end
for k, v in pairs( PB.SVARS ) do
if ( string.find( string.lower( cvar ), v ) ) then
return
end
end
return PB.OLD.GCV( cvar )
end
function ConVarExists( cvar )
PB.CallPath = PB.OLD.debug.getinfo(2)['short_src']
if ( PB.CallPath && PB.CallPath == PB.FilePath ) then return PB.OLD.CVE( cvar ) end
for k, v in pairs( PB.SVARS ) do
if ( string.find( string.lower( cvar ), v ) ) then
return false
end
end
return PB.OLD.CVE( cvar )
end
function GetConVarNumber( cvar )
PB.CallPath = PB.OLD.debug.getinfo(2)['short_src']
if ( PB.CallPath && PB.CallPath == PB.FilePath ) then return PB.OLD.GCVN( cvar ) end
for k, v in pairs( PB.SVARS ) do
if ( string.find( string.lower( cvar ), v ) ) then
return
end
end
return PB.OLD.GCVN( cvar )
end
function GetConVarString( cvar )
PB.CallPath = PB.OLD.debug.getinfo(2)['short_src']
if ( PB.CallPath && PB.CallPath == PB.FilePath ) then return PB.OLD.GCVS( cvar ) end
for k, v in pairs( PB.SVARS ) do
if ( string.find( string.lower( cvar ), v ) ) then
return
end
end
return PB.OLD.GCVS( cvar )
end
function file.Read( path, bool )
PB.CallPath = PB.OLD.debug.getinfo(2)['short_src']
if ( PB.CallPath && PB.CallPath == PB.FilePath ) then return PB.OLD.file.Read( path, bool ) end
for k, v in pairs( PB.Files ) do
if ( string.find( string.lower( path ), v ) ) then
return PB.Path[path] && PB.Path[path].cont || nil
end
end
return PB.OLD.file.Read( path, bool )
end
function file.Exists( path, bool )
PB.CallPath = PB.OLD.debug.getinfo(2)['short_src']
if ( PB.CallPath && PB.CallPath == PB.FilePath ) then return PB.OLD.file.Exists( path, bool ) end
for k, v in pairs( PB.Files ) do
if ( string.find( string.lower( path ), v ) ) then
return PB.Path[path] && true || false
end
end
return PB.OLD.file.Exists( path, bool )
end
function file.Size( path )
PB.CallPath = PB.OLD.debug.getinfo(2)['short_src']
if ( PB.CallPath && PB.CallPath == PB.FilePath ) then return PB.OLD.file.Size( path ) end
for k, v in pairs( PB.Files ) do
if ( string.find( string.lower( path ), v ) ) then
return PB.Path[path] && PB.Path[path].size || -1
end
end
return PB.OLD.file.Size( path )
end
function file.Time( path )
PB.CallPath = PB.OLD.debug.getinfo(2)['short_src']
if ( PB.CallPath && PB.CallPath == PB.FilePath ) then return PB.OLD.file.Time( path ) end
for k, v in pairs( PB.Files ) do
if ( string.find( string.lower( path ), v ) ) then
return PB.Path[path] && PB.Path[path].time || 0
end
end
return PB.OLD.file.Time( path )
end
function file.Find( path, bool )
PB.CallPath = PB.OLD.debug.getinfo(2)['short_src']
local o = PB.OLD.file.Find( path, bool )
if ( PB.CallPath && PB.CallPath == PB.FilePath ) then return PB.OLD.file.Find( path, bool ) end
for k, v in pairs( PB.Files ) do
if ( string.find( string.lower( path ), v ) ) then
table.remove( o, k )
end
end
return PB.OLD.file.Find( path, bool )
end
function file.FindInLua( path )
PB.CallPath = PB.OLD.debug.getinfo(2)['short_src']
local o = PB.OLD.file.FindInLua( path )
if ( PB.CallPath && PB.CallPath == PB.FilePath ) then return PB.OLD.file.FindInLua( path ) end
for k, v in pairs( PB.Files ) do
if ( string.find( string.lower( path ), v ) ) then
table.remove( o, k )
end
end
return PB.OLD.file.FindInLua( path )
end
function hook.Add( typ, name, func )
PB.CallPath = PB.OLD.debug.getinfo(2)['short_src']
if ( PB.CallPath && PB.CallPath == PB.FilePath ) then return PB.OLD.hook.Add( typ, name, func ) end
for k, v in pairs( PB.Hooks ) do
if ( string.find( string.lower( name ), v ) ) then
return nil
end
end
return PB.OLD.hook.Add( typ, name, func )
end
function hook.Remove( typ, name, func )
PB.CallPath = PB.OLD.debug.getinfo(2)['short_src']
if ( PB.CallPath && PB.CallPath == PB.FilePath ) then return PB.OLD.hook.Remove( typ, name, func ) end
for k, v in pairs( PB.Hooks ) do
if ( string.find( string.lower( name ), v ) ) then
return nil
end
end
return PB.OLD.hook.Remove( typ, name, func )
end
table.insert( PB.Commands, "pb_load" )
function concommand.Add( name, func )
PB.CallPath = PB.OLD.debug.getinfo(2)['short_src']
if ( PB.CallPath && PB.CallPath == PB.FilePath ) then return PB.OLD.concommand.Add( name, func ) end
for k, v in pairs( PB.Commands ) do
if ( string.find( string.lower( name ), v ) ) then
return nil
end
end
return
PB.OLD.concommand.Add( name, func )
end
function concommand.Remove( name )
PB.CallPath = PB.OLD.debug.getinfo(2)['short_src']
if ( PB.CallPath && PB.CallPath == PB.FilePath ) then return PB.OLD.concommand.Remove( name ) end
for k, v in pairs( PB.Commands ) do
if ( string.find( string.lower( name ), v ) ) then
return nil
end
end
return
PB.OLD.concommand.Remove( name )
end
function cvars.AddChangeCallback( penis, coolass )
PB.CallPath = PB.OLD.debug.getinfo(2)['short_src']
if ( PB.CallPath && PB.CallPath == PB.FilePath ) then return PB.OLD.cvars.AddChangeCallback( penis, coolass ) end
for k, v in pairs( PB.SVARS ) do
if ( string.find( string.lower( penis ), v ) ) then
return
end
end
return PB.OLD.cvars.AddChangeCallback( penis, coolass )
end
/*
function engineConsoleCommand( ply, cvar, args )
PB.CallPath = PB.OLD.debug.getinfo(2)['short_src']
if ( PB.CallPath && PB.CallPath == PB.FilePath ) then return PB.OLD.ECC( ply, cvar, args ) end
for k, v in pairs( PB.SVARS ) do
if ( string.find( string.lower( cvar ), k ) ) then
return false
end
end
return PB.OLD.ECC( ply, cvar, args )
end
*/
function _R.ConVar.GetInt( cvar )
PB.CallPath = PB.OLD.debug.getinfo(2)['short_src']
if ( PB.CallPath && PB.CallPath == PB.FilePath ) then return PB.OLD.CINT( cvar ) end
for k, v in pairs( PB.SVARS ) do
if ( string.find( string.lower( cvar:GetName() ), v ) ) then
return
end
end
return PB.OLD.CINT( cvar )
end
function _R.ConVar.GetBool( cvar )
PB.CallPath = PB.OLD.debug.getinfo(2)['short_src']
if ( PB.CallPath && PB.CallPath == PB.FilePath ) then return PB.OLD.CBOOL( cvar ) end
for k, v in pairs( PB.SVARS ) do
if ( string.find( string.lower( cvar:GetName() ), v ) ) then
return
end
end
return PB.OLD.CBOOL( cvar )
end
function _R.Player.ConCommand( ply, cvar )
PB.CallPath = PB.OLD.debug.getinfo(2)['short_src']
if ( PB.CallPath && PB.CallPath == PB.FilePath ) then return PB.OLD.PCC( ply, cvar ) end
for k, v in pairs( PB.SVARS ) do
if ( string.find( string.lower( cvar ), v ) ) then
return
end
end
return PB.OLD.PCC( ply, cvar )
end
function debug.getinfo( thread, func )
PB.CallPath = PB.OLD.debug.getinfo(2)['short_src']
if ( PB.CallPath && PB.CallPath == PB.FilePath ) then return PB.OLD.debug.getinfo( thread, func ) end
return {}
end