User:Alvin/Sandbox: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
(old sandbox, adds categories)
Tags: Blanking Manual revert
 
(143 intermediate revisions by 9 users not shown)
Line 1: Line 1:
'''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 ==
ALLIES
•Jerico Cruz
•Miggy Nazareno
•Renato De Castro
•Owey Ramirez
•Chadster Guererro
•Roberto Patino
AXIS
•Jonard Bonggat

Latest revision as of 19:58, 21 April 2025