User:Alvin/Sandbox
Source Engine 2009
"Garry's Mod" (Tools > Options > Edit > Add)
Game Data Files: (orangebox/bin) HalfLife2.fgd = Ep2 (HL2 as well) base.fgd cstrike.fgd = CS:S dod.fgd = DoD:S hl2mp.fgd = HL2:DM (could be needed) portal.fgd = Portal tf.fgd = TF2 (garrysmod/garrysmod) Garrysmod.fgd (optional lang.)
Default Point Entity class: info_player_start
Default SolidEntity class: func_detail
Cordon Texture: tools/toolsskybox
Game Executable Directory: $SteamUserDir\garrysmod
Game Directory: $SteamUserDir\garrysmod\garrysmod
Hammer VMF Directory: (Where you want to save and load VMF saves for Garrysmod) i use.. $SteamUserDir\garrysmod\garrysmod\maps\vmf
Now go to the last Tab, Build programs..
Game Executable: $SteamUserDir\garrysmod\hl2.exe
BSP $SteamUserDir\sourcesdk\bin\orangebox\bin\vbsp.exe
VIS $SteamUserDir\sourcesdk\bin\orangebox\bin\vvis.exe
RAD $SteamUserDir\sourcesdk\bin\orangebox\bin\vrad.exe
Place compiled maps... $SteamUserDir\garrysmod\garrysmod\maps
It will say that the changes will show when you open hammer another time but you need to restart Source SDK if you made a new config in order to see your new config in the selection menu.
Tagalog, pwede ba? :(
CS:S NPC Lua Script
local Category = "CSS"
local NPC = { Name = "Hostage 1", Class = "npc_citizen", Model = "models/characters/hostage_01.mdl", Health = "100", KeyValues = { Squadname = "hostages" }, KeyValues = { citizentype = 4 }, Category = Category }
list.Set( "NPC", "css_hostage_1", NPC )
local NPC = { Name = "Hostage 2",
Class = "npc_citizen",
Model = "models/characters/hostage_02.mdl",
Health = "100",
KeyValues = { Squadname = "hostages" },
KeyValues = { citizentype = 4 },
Category = Category }
list.Set( "NPC", "css_hostage_2", NPC )
local NPC = { Name = "Hostage 3",
Class = "npc_citizen",
Model = "models/characters/hostage_03.mdl",
Health = "100",
KeyValues = { Squadname = "hostages" },
KeyValues = { citizentype = 4 },
Category = Category }
list.Set( "NPC", "css_hostage_3", NPC )
local NPC = { Name = "Hostage 4",
Class = "npc_citizen",
Model = "models/characters/hostage_04.mdl",
Health = "100",
KeyValues = { Squadname = "hostages" },
KeyValues = { citizentype = 4 },
Category = Category }
list.Set( "NPC", "css_hostage_4", NPC )
local NPC = { Name = "T Arctic",
Class = "npc_combine_s",
Model = "models/characters/arctic.mdl",
Health = "100",
KeyValues = { Squadname = "terrors" },
KeyValues = { Numgrenades = "2" },
Category = Category }
list.Set( "NPC", "css_t_arctic", NPC )
local NPC = { Name = "T Guerilla",
Class = "npc_combine_s",
Model = "models/characters/guerilla.mdl",
Health = "100",
KeyValues = { Squadname = "terrors" },
KeyValues = { Numgrenades = "2" },
Category = Category }
list.Set( "NPC", "css_t_guerilla", NPC )
local NPC = { Name = "T Leet",
Class = "npc_combine_s",
Model = "models/characters/leet.mdl",
Health = "100",
KeyValues = { Squadname = "terrors" },
KeyValues = { Numgrenades = "2" },
Category = Category }
list.Set( "NPC", "css_t_leet", NPC )
local NPC = { Name = "T Phoenix",
Class = "npc_combine_s",
Model = "models/characters/phoenix.mdl",
Health = "100",
KeyValues = { Squadname = "terrors" },
KeyValues = { Numgrenades = "2" },
Category = Category }
list.Set( "NPC", "css_t_phoenix", NPC )
local NPC = { Name = "CT SAS",
Class = "npc_citizen",
Model = "models/characters/gasmask.mdl",
Health = "100",
KeyValues = { Squadname = "counters" },
KeyValues = { citizentype = 4 },
Category = Category }
list.Set( "NPC", "css_ct_sas", NPC )
local NPC = { Name = "CT GIGN",
Class = "npc_citizen",
Model = "models/characters/swat.mdl",
Health = "100",
KeyValues = { Squadname = "counters" },
KeyValues = { citizentype = 4 },
Category = Category }
list.Set( "NPC", "css_ct_gign", NPC )
local NPC = { Name = "CT GSG-9", Class = "npc_citizen", Model = "models/characters/riot.mdl", Health = "100", KeyValues = { Squadname = "counters" }, KeyValues = { citizentype = 4 }, Category = Category }
list.Set( "NPC", "css_ct_gsg9", NPC )
local NPC = { Name = "CT ST-6",
Class = "npc_citizen",
Model = "models/characters/urban.mdl",
Health = "100",
KeyValues = { Squadname = "counters" },
KeyValues = { citizentype = 4 },
Category = Category }
list.Set( "NPC", "css_ct_st6", NPC )
Freeman.lua
local Category = "Humans + Resistance"
local NPC = { Name = "Gordon Freeman",
Class = "npc_citizen",
Model = "models/katharsmodels/gordon_freeman/gordon_freeman.mdl",
Health = "100",
KeyValues = { citizentype = 4 },
Category = Category }
list.Set( "NPC", "npc_freeman", NPC )
Stargate.lua
-- Small library loader! Therefore no GPL Header (but it's GPLed) StarGate = StarGate or {}; include("stargate/VERSION.lua"); -- Only loads serverside files on server,clientside files on client, shared on both and vgui on client local function ValidToInclude(state) return (state == "server" and SERVER) or ((state == "client" or state == "vgui") and CLIENT) or state == "shared"; end --################# Loads the libraries @aVoN function StarGate.Load() MsgN("======================================================="); MsgN("StarGate Pack: Initializing"); MsgN("Version: "..StarGate.VERSION.."\n"); for _,state in pairs({"shared","server","client","vgui"}) do -- Init always comes at first! if(ValidToInclude(state) and #file.FindInLua("stargate/"..state.."/init.lua") == 1) then MsgN("Loading: stargate/"..state.."/init.lua"); include("stargate/"..state.."/init.lua"); end for _,v in pairs(file.FindInLua("stargate/"..state.."/*.lua")) do if(SERVER and state ~= "server") then AddCSLuaFile("stargate/"..state.."/"..v); -- Add clientside files end if(ValidToInclude(state) and v ~= "init.lua") then MsgN("Loading: stargate/"..state.."/"..v); include("stargate/"..state.."/"..v); end end end if(SERVER) then AddCSLuaFile("autorun/stargate.lua"); -- Ourself of course! AddCSLuaFile("stargate/VERSION.lua"); -- Version AddCSLuaFile("weapons/gmod_tool/stargate_base_tool.lua"); -- Special GMOD Basetool end MsgN("======================================================="); end StarGate.Load();
--################# For the concommand @aVoN function StarGate.CallReload(p,override) -- Override is called in stargate_base/init.lua if someone calls lua_reloadents if(override or (not ValidEntity(p) or SinglePlayer() or p:IsAdmin())) then StarGate.Load(); for _,v in pairs(player.GetAll()) do v:SendLua("StarGate.Load()"); end else p:SendLua("StarGate.Load()"); end end
if SERVER then concommand.Add("stargate_reload",StarGate.CallReload); end
Ringtransporter init.lua
AddCSLuaFile( "cl_init.lua" ) AddCSLuaFile( "shared.lua" ) include('shared.lua')
function ENT:Initialize() self.Entity:SetModel("models/Zup/sg_rings/ring.mdl") self.Entity:PhysicsInit( SOLID_VPHYSICS ) self.Entity:SetMoveType(MOVETYPE_VPHYSICS) self.Entity:SetSolid(SOLID_VPHYSICS)
self.Phys=self.Entity:GetPhysicsObject() self.Phys:EnableCollisions(false) self.Phys:Wake() self.Phys:EnableMotion(true)
self.Parent=self.Entity:GetParent() self.Entity:SetParent(nil)
self.ReachedPos=true self.DesiredPos=self.Entity:GetPos() self.Return=true self.Ang=self.Entity:GetAngles() self.Entity:StartMotionController()
self.Entity:SetTrigger(true) end
function ENT:PhysicsSimulate( phys, deltatime ) phys:Wake() local pr={} pr.secondstoarrive = 1 local pos=self.Parent:LocalToWorld(self.DesiredPos) pr.pos = pos if self.Return then pr.pos = self.Parent:GetPos() end pr.maxangular = 5000 pr.maxangulardamp = 10000 pr.maxspeed = 10000 pr.maxspeeddamp = 100000 pr.dampfactor = 0.2 if not self.Return and self.ReachedPos then pr.secondstoarrive = 0.01 pr.dampfactor = 1 end pr.teleportdistance = 10000 pr.angle = self.Ang pr.deltatime = deltatime phys:ComputeShadowControl(pr) end
function ENT:GotoPos(len) if not self or not self.Entity or not self.Entity:IsValid() then return end self.Return=false self.ReachedPos=false self.DesiredPos=len end
function ENT:StartTouch(ent) if self.ReachedPos then return end if ent:GetClass()=="prop_physics" or ent:IsPlayer() then ent:TakeDamage(1000, self.Entity) end end
function ENT:ReturnPos() if not self or not self.Entity or not self.Entity:IsValid() then return end self.Return=true end
function ENT:Think() if not self.ReachedPos then local pos=self.Parent:LocalToWorld(self.DesiredPos) if self.Entity:GetPos():Distance(pos)<10 then self.ReachedPos=true self.Parent:ReportReachedPos(self.Entity) end end end
Extra NPC.lua
ocal Category = "Humans + Resistance" local NPC = { Name = "ResistanceTurret", Class = "npc_turret_floor", OnFloor = true, TotalSpawnFlags = SF_FLOOR_TURRET_CITIZEN, Skin = 1, Offset = 8, Icon = "materials\VGUI\entities\Rebelturret", Category = Category }
list.Set( "NPC", "Rebelturret", NPC )
local NPC = { Name = "Fisherman", Class = "npc_fisherman", Category = Category }
local Category = "Animals"
local NPC = { Name = "Ichthyosaur", Class = "npc_ichthyosaur", Category = Category }
list.Set( "NPC", NPC.Class, NPC )
Category = "Combine"
local NPC = { Name = "Rollermine", Class = "npc_rollermine", Offset = 16, Category = Category }
list.Set( "NPC", NPC.Class, NPC )
local NPC = { Name = "Turret", Class = "npc_turret_floor", OnFloor = true, TotalSpawnFlags = 0, Offset = 2, Category = Category }
list.Set( "NPC", NPC.Class, NPC )
local NPC = { Name = "Combine Soldier", Class = "npc_combine_s", Model = "models/combine_soldier.mdl", Category = Category }
list.Set( "NPC", NPC.Class, NPC )
local NPC = { Name = "Prison Guard", Class = "npc_combine_s", Model = "models/combine_soldier_prisonguard.mdl", Category = Category }
list.Set( "NPC", "CombinePrison", NPC )
local NPC = { Name = "Combine Elite", Class = "npc_combine_s", Model = "models/combine_super_soldier.mdl", Category = Category }
list.Set( "NPC", "CombineElite", NPC )
local NPC = { Name = "City Scanner", Class = "npc_cscanner", Category = Category }
list.Set( "NPC", NPC.Class, NPC )
local NPC = { Name = "Manhack", Class = "npc_manhack", Category = Category }
list.Set( "NPC", NPC.Class, NPC )
local NPC = { Name = "Strider",
Class = "npc_strider",
Category = Category }
list.Set( "NPC", NPC.Class, NPC )
local NPC = { Name = "Hopper",
Class = "combine_mine",
Category = Category }
list.Set( "NPC", NPC.Class, NPC )
local NPC = { Name = "Camera",
Class = "npc_combine_camera",
Category = Category }
list.Set( "NPC", NPC.Class, NPC )
local NPC = { Name = "Drop ship",
Class = "npc_combinedropship",
Category = Category }
list.Set( "NPC", NPC.Class, NPC )
local NPC = { Name = "Gunship",
Class = "npc_combinegunship",
Category = Category }
list.Set( "NPC", NPC.Class, NPC )
local NPC = { Name = "Stalker",
Class = "npc_stalker",
Category = Category }
list.Set( "NPC", NPC.Class, NPC )
local NPC = { Name = "Claw scanner",
Class = "npc_clawscanner",
Category = Category }
list.Set( "NPC", NPC.Class, NPC )
local NPC = { Name = "Sniper",
Class = "npc_sniper",
Category = Category }
list.Set( "NPC", NPC.Class, NPC )
Hoverbike.lua
local V = { Name = "Hover Bike", Class = "prop_vehicle_airboat", Category = "Half-Life 2", Author = "Alvin Luzon", Information = "", Model = "models/hoverbike.mdl",
KeyValues = { vehiclescript = "scripts/vehicles/hoverbike_script.txt" } }
list.Set( "Vehicles", "hoverbike", V )
mad_physgun_limited.lua
if (SERVER) then AddCSLuaFile("mad_physgun_limited.lua") end
/*---------------------------------------------------------
Name: MadPhysgunPickup() Desc: Return true if player can pickup entity (Alvin Luzon is playing dumb)
*/
function MadPhysgunPickup(ply, ent)
// Never pick up a grenade if (ent:GetClass() == "ent_mad_grenade") then return false end
// Never pick up a grenade launcher if (ent:GetClass() == "ent_mad_grenadelauncher") then return false end
// Never pick up a mine if (ent:GetClass() == "ent_mad_mine") then return false end
// Never pick up a rocket if (ent:GetClass() == "ent_mad_rocket") then return false end
// Never pick up a C4 if (ent:GetClass() == "ent_mad_c4") then return false end
// Never pick up a flare if (ent:GetClass() == "ent_mad_flare") then return false end
// Never pick up a flash grenade if (ent:GetClass() == "ent_mad_flash") then return false end
// Never pick up a smoke grenade if (ent:GetClass() == "ent_mad_smoke") then return false end end hook.Add("PhysgunPickup", "MadPhysgunPickup", MadPhysgunPickup)
Laserlib.lua
/* Playing dumb again lol. Ayoko na mag i-Cafe.
- /
LaserLib = LaserLib or {};
//////////////////////////////
//// Shared Functions ////
//////////////////////////////
function LaserLib.GetReflectedVector( incidentVector, surfaceNormal )
return incidentVector - 2 * ( surfaceNormal:DotProduct( incidentVector ) * surfaceNormal );
end
function LaserLib.DoBeam ( laserEnt, beamDir, beamStart, beamLength, ... ) local trace = {};
local beamStart = util.LocalToWorld(laserEnt, beamStart);
laserEnt.IgnoreList = laserEnt.IgnoreList or {}; local beamFilter = table.Copy(laserEnt.IgnoreList); table.insert(beamFilter, laserEnt);
if ( SERVER ) then inflictor = laserEnt.ply; beamDamage = unpack(arg); laserEnt.Targets = {}; -- we'll store here what we hit end
if ( CLIENT ) then beamPoints = { beamStart }; beamIgnore = {}; beamWidth, beamMaterial = unpack(arg); end
local bounces = 0;
repeat if ( StarGate ~= nil ) then trace = StarGate.Trace:New( beamStart, beamDir:Normalize() * beamLength, beamFilter ); else trace = util.QuickTrace( beamStart, beamDir:Normalize() * beamLength, beamFilter ); end
if ( CLIENT ) then table.insert( beamPoints, trace.HitPos ); end
-- we can bounce! if ( trace.Entity and trace.Entity:IsValid() and ( ( (trace.Entity:GetClass() == "event_horizon" and ValidEntity(trace.Entity.Target) and trace.Entity:GetForward():DotProduct(trace.Normal) < 0 and trace.Entity ~= trace.Entity.Target) or trace.Entity:GetModel() == "models/madjawa/laser_reflector.mdl" or trace.Entity:GetMaterial() == "debug/env_cubemap_model" ) and trace.Entity:GetClass() ~= "gmod_laser_crystal" ) ) then
isMirror = true;
beamFilter = table.Copy(laserEnt.IgnoreList); table.insert(beamFilter, trace.Entity); if (trace.Entity:GetClass() == "event_horizon") then if (not (CLIENT and not trace.Entity.DrawRipple) // HAX and not (SERVER and (not trace.Entity:IsOpen() or trace.Entity.ShuttingDown))) then -- STARGATE! beamStart, beamDir = trace.Entity:GetTeleportedVector(trace.HitPos, beamDir); if (CLIENT) then local n = table.insert( beamPoints, beamStart ); beamIgnore[n] = true; -- prevents from rendering a beam between the two stargates end table.insert(beamFilter, trace.Entity.Target); if (SERVER) then trace.Entity:EnterEffect(trace.HitPos, laserEnt:GetBeamWidth()); trace.Entity.Target:EnterEffect(beamStart, laserEnt:GetBeamWidth()); end else isMirror = false; end else beamStart = trace.HitPos; beamDir = LaserLib.GetReflectedVector( beamDir, trace.HitNormal ); end beamLength = beamLength - beamLength * trace.Fraction;
elseif (SERVER and ValidEntity(trace.Entity) and trace.Entity:GetClass() == "event_horizon") then trace.Entity:EnterEffect(trace.HitPos, laserEnt:GetBeamWidth()); else isMirror = false; end
bounces = bounces + 1;
if ( SERVER ) then if ( ValidEntity(trace.Entity) and ( trace.Entity:GetClass() == "gmod_laser_reflector" or trace.Entity:GetClass() == "gmod_laser_crystal" ) and not table.HasValue( trace.Entity.Hits, laserEnt ) ) then trace.Entity:UpdateBounceCount(laserEnt); end end
if (SERVER and ValidEntity(trace.Entity)) then table.insert(laserEnt.Targets, trace.Entity); end
until ( isMirror == false or bounces > GetConVar("laser_maxbounces"):GetInt() )
if( SERVER and beamDamage > 0 and trace.Entity and trace.Entity:IsValid() and trace.Entity:GetClass() ~= "gmod_laser_crystal" and trace.Entity:GetClass() ~= "gmod_laser" and trace.Entity:GetModel() ~= "models/madjawa/laser_reflector.mdl" ) then
LaserLib.DoDamage( trace.Entity, trace.HitPos, trace.Normal, beamDir, beamDamage, inflictor, laserEnt:GetDissolveType(), laserEnt:GetPushProps(), laserEnt:GetKillSound(), laserEnt );
end
if ( CLIENT ) then --Fucking FIXME: weird bugs/shadows/laser disappearing seem to caused by renderbounds local prevPoint = beamPoints[1]; local bbmin, bbmax = laserEnt:GetRenderBounds();
if not matTab or not matTab[beamMaterial] then matTab[beamMaterial] = Material(beamMaterial); end render.SetMaterial( matTab[beamMaterial] );
for k, v in pairs ( beamPoints ) do if ( prevPoint ~= v and not beamIgnore[k]==true) then render.DrawBeam( prevPoint, v, beamWidth, 13*CurTime(), 13*CurTime() - ( v - prevPoint ):Length()/9, Color( 255, 255, 255, 255 ) ); end prevPoint = v;
local pos = laserEnt:WorldToLocal(v); if ( pos.x < bbmin.x ) then bbmin.x = pos.x; end if ( pos.y < bbmin.y ) then bbmin.y = pos.y; end if ( pos.z < bbmin.z ) then bbmin.z = pos.z; end if ( pos.x > bbmax.x ) then bbmax.x = pos.x; end if ( pos.y > bbmax.y ) then bbmax.y = pos.y; end if ( pos.z > bbmax.z ) then bbmax.z = pos.z; end end
laserEnt.NextEffect = laserEnt.NextEffect or CurTime(); if ( not trace.HitSky and laserEnt:GetEndingEffect() and CurTime() >= laserEnt.NextEffect ) then if ( trace.Entity and trace.Entity:IsValid() and trace.Entity:GetClass() == "gmod_laser_crystal" ) then return; end
if not (trace.Entity:IsValid() and trace.Entity:GetClass() == "event_horizon") then local effectdata = EffectData(); effectdata:SetStart( trace.HitPos ); effectdata:SetOrigin( trace.HitPos ); effectdata:SetNormal( trace.HitNormal ); effectdata:SetScale( 1 ); util.Effect( "AR2Impact", effectdata ); end laserEnt.NextEffect = CurTime() + 0.1; end
laserEnt:SetRenderBounds( bbmin, bbmax, Vector()*6 ); end
return trace.Entity; end
//////////////////////////////
//// Server Functions ////
//////////////////////////////
if ( SERVER ) then
AddCSLuaFile( "autorun/laserlib.lua" );
function LaserLib.SpawnDissolver( ent, position, attacker, dissolveType ) Dissolver = ents.Create( "env_entity_dissolver" ); Dissolver.Target = "laserdissolve"..ent:EntIndex(); Dissolver:SetKeyValue( "dissolvetype", dissolveType ); Dissolver:SetKeyValue( "magnitude", 0 ); Dissolver:SetPos( position ); Dissolver:SetPhysicsAttacker( attacker ); Dissolver:Spawn();
return Dissolver; end
function LaserLib.DoDamage( target, hitPos, normal, beamDir, damage, attacker, dissolveType, pushProps, killSound, laserEnt )
laserEnt.NextLaserDamage = laserEnt.NextLaserDamage or CurTime();
if ( pushProps and target:GetPhysicsObject():IsValid() ) then local phys = target:GetPhysicsObject(); local mass = phys:GetMass(); local mul = math.Clamp( mass * 10, 0, 2000 ); if ( mul ~= 0 and mass <= 500 ) then phys:ApplyForceOffset( beamDir * mul, hitPos ); end end
if ( target:GetClass() == "weapon_striderbuster" ) then return end;
if ( CurTime() >= laserEnt.NextLaserDamage ) then if ( target:IsVehicle() and target:GetDriver():IsValid() ) then -- we must kill the driver! target = target:GetDriver(); target:Kill(); -- takedamage doesn't seem to work on a player inside a vehicle end
if ( target:GetClass() == "shield" ) then target:Hit( laserEnt, hitPos, math.Clamp( damage / 2500 * 3, 0, 4), -1*normal ); laserEnt.NextLaserDamage = CurTime() + 0.3; return; -- we stop here because we hit a shield end
if ( target:Health() <= damage ) then if ( target:IsNPC() or target:IsPlayer() ) then local dissolverEnt = LaserLib.SpawnDissolver( laserEnt, target:GetPos(), attacker, dissolveType );
-- dissolving the NPC's weapon too if ( target:IsNPC() and target:GetActiveWeapon():IsValid() ) then target:GetActiveWeapon():SetName( dissolverEnt.Target ); end
target:TakeDamage( damage, attacker, laserEnt ); -- we kill the player/NPC to get his ragdoll
if ( target:IsPlayer() ) then if ( not target:GetRagdollEntity() or not target:GetRagdollEntity():IsValid() ) then return; end target:GetRagdollEntity():SetName( dissolverEnt.Target ); -- thanks to Nevec for the player ragdoll idea, allowing us to dissolve him the cleanest way else if ( target.DeathRagdoll and target.DeathRagdoll:IsValid() ) then -- if Keep Corpses is disabled, DeathRagdoll is nil, so we need to check this target.DeathRagdoll:SetName( dissolverEnt.Target ); else target:SetName( dissolverEnt.Target ); end end
dissolverEnt:Fire( "Dissolve", dissolverEnt.Target, 0 ); dissolverEnt:Fire( "Kill", "", 0.1 ); dissolverEnt:Remove(); -- Makes sure it's removed. It MIGHT prevent the "no free edicts" error (I don't see what other entity could cause it right now) end
if ( killSound ~= nil and ( target:Health() ~= 0 or target:IsPlayer() ) ) then WorldSound( Sound( killSound ), target:GetPos() ); target:EmitSound( Sound( killSound ) ); end else laserEnt.NextLaserDamage = CurTime() + 0.3; end
target:TakeDamage( damage, attacker, laserEnt ); end end
function LaserLib.AssignNPCRagdoll( entity, ragdoll ) -- it seems that's the only clean way to get the NPC's ragdoll in the DoDamage function -- Thanks to Kogitsune entity.DeathRagdoll = ragdoll; end
hook.Add( "CreateEntityRagdoll", "LaserLib.AssignNPCRagdoll", LaserLib.AssignNPCRagdoll );
end
//////////////////////////////
//// Client Functions ////
//////////////////////////////
if ( CLIENT ) then matTab = matTab or {};
function LaserLib.UpdateIgnoreList(um) local laserEnt = ents.GetByIndex(um:ReadLong()); local nbEnt = um:ReadLong();
laserEnt.IgnoreList = {}; for i=1, nbEnt do table.insert(laserEnt.IgnoreList, ents.GetByIndex(um:ReadLong())); end end usermessage.Hook("Laser.UpdateIgnoreList", LaserLib.UpdateIgnoreList) end
Friends
- Miggy Nazareno
- Jerico Cruz
- Renato De Castro
- Owey Ramirez