All pastes #589297 Raw Edit

init.lua

public lua v1 · immutable
#589297 ·published 2007-06-25 22:07 UTC
rendered paste body
AddCSLuaFile( "cl_init.lua" )AddCSLuaFile( "shared.lua" )include('shared.lua')ENT.WireDebugName = "Advanced Pod Controller"local MODEL = Model("models/jaanus/wiretool/wiretool_siren.mdl")function ENT:Initialize()	self.Entity:SetModel( MODEL )	self.Entity:PhysicsInit( SOLID_VPHYSICS )	self.Entity:SetMoveType( MOVETYPE_VPHYSICS )	self.Entity:SetSolid( SOLID_VPHYSICS )	self.lockvar = 0	self.disablevar = 0	self.laservar = 0	self.crossvar = 0			-- Output keys. Format: keys["name"] = IN_*	keys = { }	keys["Mouse1"] = IN_ATTACK	keys["Mouse2"] = IN_ATTACK2	keys["MWHEELUP"] = IN_INVPREV	keys["MWHEELDOWN"] = IN_INVNEXT	keys["W"] = IN_FORWARD	keys["A"] = IN_MOVELEFT	keys["S"] = IN_BACK	keys["D"] = IN_MOVERIGHT	keys["R"] = IN_RELOAD	keys["Space"] = IN_JUMP	keys["Ctrl"] = IN_DUCK	keys["Shift"] = IN_SPEED	keys["Zoom"] = IN_ZOOM		-- Invert the table to use it with Wire_CreateOutputs	local outputs = { }	local n = 1		for k, v in pairs( keys ) do		outputs[n] = k		n = n + 1	end		-- <angle>	outputs[n] = "X"	n = n + 1	outputs[n] = "Y"	n = n + 1	outputs[n] = "Z"	-- </angle>		n = n + 1	outputs[n] = "Distance"	n = n + 1	outputs[n] = "Active"		n = n + 1	outputs[n] = "Team"		n = n + 1	outputs[n] = "Health"		n = n + 1	outputs[n] = "Armor"		-- Create outputs	self.Outputs = Wire_CreateOutputs( self.Entity, outputs )	self.Inputs = Wire_CreateInputs( self.Entity, { "Lock", "Terminate", "Strip weapons", "Eject", "Disable", "Crosshairs", "LaserSight"} )	self:SetOverlayText( "Adv. Pod Controller" )end-- Link to podfunction ENT:Setup( pod )	self.Pod = pod	self.TTLFP = CurTime()endfunction ENT:TriggerInput(iname, value)		if (iname == "Lock") then			if !(self.Pod && self.Pod:IsValid()) then return end				if (value >= 1) then					if (self.lockvar == 0) then						self.Pod:Fire("Lock", "1", 0)						self.lockvar = 1					else						self.Pod:Fire("Unlock", "1", 0)						self.lockvar = 0					end				end			end		if (iname == "Terminate") then			if self.Ply then				if (value > 0) then					self.Ply:Kill()				end			end		end		if (iname == "Strip weapons") then			if self.Ply then				if (value > 0) then					self.Ply:StripWeapons( )					self.Ply:PrintMessage(HUD_PRINTTALK,"Your weapons have been stripped!\n")				end			end		end		if (iname == "Eject") then			if self.Ply then				if (value > 0) then					self.Ply:ExitVehicle( )				end			end		end		if (iname == "Disable") then			if (value >= 1) then				if (self.disablevar == 0) then					self.disablevar = 1				else					self.disablevar = 0				end			end		end		if (iname == "Crosshairs") then			if (value >= 1) then				if (self.crossvar == 0) then					self.Ply:CrosshairEnable()					self.crossvar = 1				else					self.Ply:CrosshairDisable()					self.crossvar = 0				end			end		end		if (iname == "LaserSight") then			if (value >= 1) then				if (self.laservar == 0) then					self.laservar = 1					print( "Laser on" )				else					self.laservar = 0					print( "laser off" )				end			end		endendfunction ENT:ShowOutput(value)	if (value ~= self.PrevOutput) then		self:SetOverlayText( "Pod Controller" )		self.PrevOutput = value	endendfunction ENT:OnRestore()	keys = { }	keys["Mouse1"] = IN_ATTACK	keys["Mouse2"] = IN_ATTACK2	keys["MWHEELUP"] = IN_INVPREV	keys["MWHEELDOWN"] = IN_INVNEXT	keys["W"] = IN_FORWARD	keys["A"] = IN_MOVELEFT	keys["S"] = IN_BACK	keys["D"] = IN_MOVERIGHT	keys["R"] = IN_RELOAD	keys["Space"] = IN_JUMP	keys["Ctrl"] = IN_DUCK	keys["Shift"] = IN_SPEED	keys["Zoom"] = IN_ZOOM	    self.BaseClass.OnRestore(self)end-- Called every 0.01 seconds, check for key downfunction ENT:Think()local brng = Angle(0, 0, 0)	-- Check that we have a pod	if self.Pod then		-- Check if we should look for player entering/exiting the vehicle TTLFP = TimeToLookForPod		if ( !self.TTLFP ) then return end		if self.TTLFP < CurTime() then			-- Check if the old player is still in our vehicle			if !(self.Ply and self.Ply:GetVehicle() == self.Pod) then				-- Get all players				local plys = player.GetAll()				self.Ply = nil				-- Loop through all players and check if their vehicle is our vehicle				for k,v in pairs(plys) do					if v:GetVehicle() == self.Pod then self.Ply = v end				end								if self.Ply then				Wire_TriggerOutput( self.Entity, "Active", 1)				else				Wire_TriggerOutput( self.Entity, "Active", 0) 				end			end			-- Look for players again in 1/10 second			self.TTLFP = CurTime() + 0.1		end				if self.Ply then			-- Loop through all the keys, and check if they was pressed last frame			for k, v in pairs( keys )  do				if self.Ply:KeyDownLast( v ) then Wire_TriggerOutput( self.Entity, k, 1 )				else Wire_TriggerOutput( self.Entity, k, 0 ) end				-- beacon sensor output stuff				local trace = util.GetPlayerTrace(self.Ply)				trace.filter = self.Pod				self.VPos = util.TraceLine(trace).HitPos				-- an now back to it				local MyPos = self.Entity:GetPos()				local pos = MyPos				local tracedata = {}				tracedata.start = pos				tracedata.endpos = pos + self.Ply:GetAimVector() * 100000				tracedata.filter = self.Ply				local trace = util.TraceLine(tracedata)				local tmp = trace.HitPos				Wire_TriggerOutput( self.Entity, "X", tmp.x )				Wire_TriggerOutput( self.Entity, "Y", tmp.y )				Wire_TriggerOutput( self.Entity, "Z", tmp.z )				dist = (tmp-MyPos):Length()				Wire_TriggerOutput( self.Entity, "Distance", dist)				self.MyPos = MyPos				self.tmp = tmp				local plyteam = self.Ply:Team( )				Wire_TriggerOutput( self.Entity, "Team", plyteam)				local plyheal = self.Ply:Health( )				Wire_TriggerOutput( self.Entity, "Health", plyheal)				local plyarm = self.Ply:Armor( )				Wire_TriggerOutput( self.Entity, "Armor", plyarm)												local rp = RecipientFilter() // Grab a RecipientFilter object				rp:AddAllPlayers() // Send to all players!				umsg.Start("AdvPodMyPos", rp)					umsg.Vector( self.MyPos )				umsg.End()								umsg.Start("AdvPodtmp", rp)					umsg.Vector( self.tmp )				umsg.End()								umsg.Start("AdvPodlaservar", rp)					umsg.Long( self.laservar )  				umsg.End()								end		end		if (self.disablevar == 1) then			Wire_TriggerOutput( self.Entity, outputs, 0)			Wire_TriggerOutput( self.Entity, "Disabled", 1)			if self.Ply then				Wire_TriggerOutput( self.Entity, "Active", 1)			end		else			Wire_TriggerOutput( self.Entity, "Disabled", 0)		end	end	self.Entity:NextThink(CurTime() + 0.01)	return trueend  function ENT:GetBeaconPos(sensor)	return self.VPosend--Duplicator support to save pod link (TAD2020)function ENT:BuildDupeInfo()	local info = self.BaseClass.BuildDupeInfo(self) or {}	if (self.Pod) and (self.Pod:IsValid()) then	    info.pod = self.Pod:EntIndex()	end	return infoendfunction ENT:ApplyDupeInfo(ply, ent, info, GetEntByID)	self.BaseClass.ApplyDupeInfo(self, ply, ent, info, GetEntByID)	if (info.pod) then		self.Pod = GetEntByID(info.pod)		if (!self.Pod) then			self.Pod = ents.GetByIndex(info.pod)		end	endend