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