All pastes #414999 Raw Edit

Mine

public text v1 · immutable
#414999 ·published 2007-03-29 13:26 UTC
rendered paste body
AddCSLuaFile("cl_init.lua")
AddCSLuaFile("shared.lua")
include("shared.lua")

local RECHARGE_RATE=1 -- Time in seconds to recharge/drain
local RECHARGE_NUM=1 -- Amount to recharge
local IV_DRAIN=5 -- Amouant to drain every time it is shot

function ENT:Initialize()
	self.Entity:PhysicsInit(SOLID_VPHYSICS)
	self.Entity:SetMoveType(MOVETYPE_VPHYSICS)
	self.Entity:SetSolid(SOLID_VPHYSICS)
	self.Entity:SetNetworkedBool("on",false)
	self.Entity:SetNetworkedInt("energy",100)
	self.Entity:Recharge()
	self.Entity:ExitSphere()
	self.Entz={}
end

function ENT:Recharge()
	if self.Entity==nil then return end
	if self.Entity:GetNetworkedBool("on")==true then
		if self.Entity:GetNetworkedInt("energy")>0 then
			self.Entity:SetNetworkedInt("energy",self.Entity:GetNetworkedInt("energy")-0.5)
		end
	else
		if self.Entity:GetNetworkedInt("energy")<100 then
			self.Entity:SetNetworkedInt("energy",self.Entity:GetNetworkedInt("energy")+RECHARGE_NUM)
		end
	end
	timer.Simple(RECHARGE_RATE,self.Recharge,self)
end

function ENT:ExitSphere()
		local mysize=self.Entity:GetNetworkedInt("scale")
		local entz=ents.FindInSphere(self.Entity:GetPos(), mysize)
			for _,zent in pairs(self.Entz) do
				local nz=0
					for _,ent in pairs(entz) do
						if ent==zent and self.Entity:GetNetworkedBool("on")==true then								
						 nz=1
						end
					end
					if nz==0 then
					table.remove(self.Entz,_)
							local ed = EffectData()
							ed:SetEntity(z)
							util.Effect( "go_invisible", ed )
						zent:Fire("addoutput","renderfx 7",0)
						zent:Fire("addoutput","renderfx 0",5)
						timer.Simple(5,revis,zent)
						zent:GetTable().Invisible=false
						zent:GetPhysicsObject():Wake()
					end
			end
	timer.Simple(1,self.ExitSphere,self)
end
local function ivzent(entity)
	if not entity:IsValid() then return end
	if entity:GetTable().Invisible==true then
		entity:Fire("addoutput","rendermode 2",0)
		entity:Fire("addoutput","renderamt 0",0)
		entity:GetPhysicsObject():Wake()
	end
end

local function revis(entity)
	if not entity:IsValid() then return end
	if entity:GetTable().Invisible==false then
		entity:Fire("addoutput","renderamt 255",0)
		entity:GetPhysicsObject():Wake()
	end
end

function ENT:AcceptInput(name,activator,caller)
local oR=self.Entity:GetNetworkedInt("scale")
	if name=="toggle" then
			if self.Entity:GetNetworkedBool("on")==true then
				self.Entity:SetNetworkedBool("on",false)
				self.Entity:SetNetworkedInt("scale",10)
				self.Entity:SetNetworkedInt("scale",oR)
			else
				self.Entity:SetNetworkedBool("on",true)
				self.Entity:SetNetworkedInt("scale",10)
				self.Entity:SetNetworkedInt("scale",oR)
			end
	end
end

function ENT:OnRemove()
    Wire_Remove(self.Entity)
end

function ENT:Think()
	local mysize=self.Entity:GetNetworkedInt("scale")
	self.Entity:SetNetworkedInt("scale",mysize)
	self.Entity:SetNetworkedInt("energy",self.Entity:GetNetworkedInt("energy"))
	self.Entity:SetNetworkedBool("on",self.Entity:GetNetworkedBool("on"))
		if self.Entity:GetNetworkedBool("on")==true then
			local entz=ents.FindInSphere(self.Entity:GetPos(), mysize)
				for _,ent in pairs(entz) do
					if ent:GetTable().Invisible==true or ent:GetTable().Invisible==nil then
						local physobj=ent:GetPhysicsObject()
							if ent:GetClass()~="worldspawn" and ent~=self.Entity and physobj:IsValid() then
								if self.Entity:GetNetworkedInt("energy")>=IV_DRAIN then
									ent:Fire("addoutput","renderamt 255",0)
										local ed = EffectData()
										ed:SetEntity(ent)
										util.Effect( "go_invisible", ed )
									ent:Fire("addoutput","renderfx 6",0)
									timer.Simple(6,ivzent,ent)
									ent:SetNetworkedBool("iv01",true)
									ent:GetPhysicsObject():Wake()
									self.Entz[ent:EntIndex()]=ent
									ent:GetTable().Invisible=true
								end
							end
					end
				end
		end
end

local function RevealEnt(entity,att,inf,dmg)
	if entity:GetTable().Invisible==true then
		entity:Fire("addoutput","renderfx 16",0)
		entity:Fire("addoutput","renderfx 6",4)
		timer.Simple(4,ivzent,entity)
			local ed = EffectData()
			ed:SetEntity(entity)
			util.Effect( "go_invisible", ed )
		entity:GetPhysicsObject():Wake()
	end
end