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