-
Notifications
You must be signed in to change notification settings - Fork 0
/
fun.lua
1 lines (1 loc) · 6.35 KB
/
fun.lua
1
function TTT_MakeTestingChamber(a,b)local c=ents.Create("base_anim") function c:GetTraitorCheck(ply) return ply:IsTraitor() end c:SetModel("models/props_lab/teleportframe.mdl")c:SetPos(a)c:Spawn()c:SetAngles(b)c:PhysicsInit(SOLID_VPHYSICS)c:GetPhysicsObject():EnableMotion(false)local d=ents.Create("base_anim")d:SetModel("models/props_lab/keypad.mdl")d:SetPos(c:LocalToWorld(Vector(82.013947,40.723228,47.497368)))d:SetAngles(c:GetAngles())d:Spawn()d:SetParent(c)d.plas=c;d:PhysicsInit(SOLID_BBOX)function d:Use(e)self.plas:UseScanner(e)end;c:EmitSound("npc/dog/dog_rollover_servos1.wav")local f=ents.Create("prop_dynamic")f:SetModel("models/props_c17/light_cagelight02_off.mdl")f:SetPos(c:LocalToWorld(Vector(80.014008,-41.190308,45.891403)))f:SetAngles(c:GetAngles()+Angle(0,0,180))f:Spawn()f:SetParent(c)c.indicator=f;function f:Show(g)self:SetModel("models/props_c17/light_cagelight02_on.mdl")if g then self:SetColor(Color(255,0,0,255))else self:SetColor(Color(0,255,0,255))end;timer.Simple(6,function()if IsValid(self)then self:SetModel("models/props_c17/light_cagelight02_off.mdl")self:SetColor(Color(255,255,255,255))end end)end;local h=ents.Create("prop_dynamic")h:SetModel("models/props_lab/teleplatform.mdl")h:SetPos(c:LocalToWorld(Vector(30,0,20)))h:SetAngles(c:GetAngles())h:SetKeyValue("solid","6")h:Spawn()c.platform=h;c.components={}table.insert(c.components,h)function c:UseScanner(e)if not self.scanning then self.scanning=true;self:AddEffects(EF_BRIGHTLIGHT)self:EmitSound("music/stingers/industrial_suspense1.wav",100,70) if (GetConVar("ttt_traitor_tester_scanning_time"):GetInt() >= 8) then self:EmitSound("ambient/levels/citadel/fcitadel_deploydiagnose.wav") end timer.Simple(GetConVar("ttt_traitor_tester_scanning_time"):GetInt(),function()if IsValid(self)then self.scanning=false;self.ringSound:Stop()self:RemoveEffects(EF_BRIGHTLIGHT)self:EmitSound("ambient/machines/thumper_hit.wav")end end)local i=nil;for j,k in pairs(ents.FindInSphere(self.platform:GetPos(),50))do if k:IsPlayer()and k:GetGroundEntity()==self.platform then k:SetPos(self.platform:LocalToWorld(self.platform:OBBCenter()+Vector(0,0,40)))k:DropToFloor()local l=self.platform:GetAngles()l.roll=0;i=k;k:SetEyeAngles(l)break end end; if (GetConVar("ttt_traitor_tester_scanning_time"):GetInt() >= 8) then self:EmitSound("ambient/levels/labs/teleport_mechanism_windup2.wav",100,150)self:EmitSound("ambient/levels/labs/teleport_mechanism_windup1.wav",100,110) end local m=ents.Create("base_anim")m:SetPos(h:GetPos())m:SetModel("models/props_lab/teleportring.mdl")m:SetAngles(h:GetAngles()+Angle(0,180,0))m:Spawn()m:SetParent(h)m.z=0;m:SetAutomaticFrameAdvance(true)self.ringSound=CreateSound(m,"ambient/levels/labs/teleport_rings_loop2.wav")self.ringSound:PlayEx(1,100)table.insert(c.components,m)local n="ttt_testingchamber_ring"..m:EntIndex()timer.Create(n,0.0001,0,function()if not IsValid(m)then timer.Destroy(n)return end;if self.scanning==false then for j,k in pairs(ents.FindInSphere(self.platform:GetPos(),50))do if k:IsPlayer()and k:GetGroundEntity()==self.platform then local o=self:GetTraitorCheck(k) timer.Simple(0.5,function()if IsValid(self)then self.indicator:Show(o)end end)break end end;m.z=math.Approach(m.z,0,FrameTime()*100)if m.z==0 then timer.Destroy(n)m:Remove()return end;m:SetLocalPos(Vector(0,0,m.z))m:SetAngles(Angle(0,m:GetAngles().yaw+10,0))else m.z=math.Approach(m.z,m.up and 0 or 100,FrameTime()*100)if m.z==100 then m.up=true elseif m.z==0 then m.up=false end;m:SetLocalPos(Vector(0,0,m.z))m:SetAngles(Angle(0,m:GetAngles().yaw+15,0))end end)local m=ents.Create("base_anim")m:SetPos(h:GetPos())m:SetModel("models/props_lab/teleportring.mdl")m:SetAngles(h:GetAngles())m:Spawn()table.insert(c.components,m)m:SetParent(h)m.z=100;m:SetAutomaticFrameAdvance(true)local n="ttt_testingchamber_ring"..m:EntIndex()local p=ents.Create("env_entity_dissolver")self:DeleteOnRemove(p)p:SetPos(self:GetPos())p:Spawn()p:SetKeyValue("dissolvetype","3")self:EmitSound("ambient/machines/thumper_startup1.wav",100,110)local a=IsValid(i)and i:GetPos()or self:GetPos()local q=true;local r=ents.Create("env_shake")r:SetOwner(self)r:SetPos(self:GetPos())r:SetKeyValue("amplitude","2000")r:SetKeyValue("radius","400")r:SetKeyValue("duration",GetConVar("ttt_traitor_tester_scanning_time"):GetInt() + 4.5)r:SetKeyValue("frequency","255")r:SetKeyValue("spawnflags","4")r:Spawn()r:Activate()r:Fire("StartShake","",0)r:Fire("kill","",11)local s=GetConVar("ttt_traitor_tester_kill_interference"):GetBool()if IsValid(i)and s then i:PrintMessage(HUD_PRINTCENTER,"Stand completely still until the scanning has been completed.")end;timer.Create(n,0.0001,0,function()if not IsValid(m)then timer.Destroy(n)return end;if self.scanning==false then if q then self:EmitSound("ambient/machines/thumper_shutdown1.wav",100,110)q=false;local t=EffectData()t:SetOrigin(self.platform:GetPos())t:SetScale(50)t:SetMagnitude(20)t:SetRadius(50)t:SetNormal(Vector(0,0,1))util.Effect("AR2Explosion",t)util.Effect("HelicopterMegaBomb",t)util.Effect("ThumperDust",t)util.Effect("cball_explode",t)end;m.z=math.Approach(m.z,0,FrameTime()*100)if m.z==0 then timer.Destroy(n)m:Remove()return end;m:SetLocalPos(Vector(0,0,m.z))m:SetAngles(Angle(0,m:GetAngles().yaw+10,0))else if math.random(1,3)==2 then local u=EffectData()u:SetScale(1)u:SetMagnitude(3)u:SetOrigin(m:GetPos())util.Effect("Sparks",u)end;if IsValid(i)and i:IsTerror()and i:GetPos():Distance(a)>20 and s then local v=DamageInfo()v:SetDamageType(DMG_DROWN)v:SetDamage(5000)v:SetAttacker(i)i:TakeDamageInfo(v)end;if s then for j,k in pairs(ents.FindInBox(self.platform:GetPos()-Vector(40,40,0),self.platform:GetPos()+Vector(40,40,150)))do if IsValid(k:GetPhysicsObject())and not table.HasValue(self.components,k)and not(k==self)and not(k==i)and(k:IsPlayer()or k:GetMoveType()==MOVETYPE_VPHYSICS)then if k:IsPlayer()then local v=DamageInfo()v:SetDamageType(DMG_DROWN)v:SetDamage(5000)v:SetAttacker(k)k:TakeDamageInfo(v)else k:SetName("entity"..k:EntIndex())p:Fire("Dissolve","entity"..k:EntIndex())end end end end;if IsValid(e)and e:IsTerror()then for w=1,3 do local t=EffectData()t:SetOrigin(self.platform:GetPos()+Vector(0,0,30)+VectorRand()*30)t:SetScale(20)t:SetMagnitude(20)t:SetRadius(10)t:SetNormal(Vector(0,0,1))util.Effect("AR2Explosion",t)end end;m.z=math.Approach(m.z,m.up and 0 or 100,FrameTime()*100)if m.z==100 then m.up=true elseif m.z==0 then m.up=false end;m:SetLocalPos(Vector(0,0,m.z))m:SetAngles(Angle(0,m:GetAngles().yaw+10,0))end end)end end;return true end