All pastes #798281 Raw Edit

Anonymous

public lua v1 · immutable
#798281 ·published 2007-11-26 18:43 UTC
rendered paste body
AddCSLuaFile("cl_init.lua")AddCSLuaFile("shared.lua")include("shared.lua")function ENT:SetPlayer(ply)	if ply == nil then self:Remove() end	self.Founder = ply	self:SetPhysicsAttacker(ply)	self:SetOwner(ply)	self.FounderIndex = ply:UniqueID()	self:SetNetworkedString("FounderName", ply:Nick())endfunction ENT:SetDriver(ply)	self.Driver = ply	if ply != NULL and ply != nil then			if ply:IsValid() then			local phys = self:GetPhysicsObject()			if not phys:IsValid() then return end			phys:EnableGravity(true)			self.Land = true			self.TakeOff = false			umsg.Start("CurVehicleOffset", ply)			umsg.Angle(self.Offset)			umsg.End()		end	endendfunction ENT:Setup(model, drag, health, color, offset, parts)	if self:GetOwner() == NULL then return end	self.Model = model	self.Drag = drag	self.Health = health 	self.MaxHealth = health	self.Color = color 	self.Offset = offset	self.Parts = parts or {}endfunction ENT:Initialize()	self:SetModel( self.Model )	self:SetColor( self.Color.r, self.Color.g, self.Color.b, self.Color.a )	self:PhysicsInit( SOLID_VPHYSICS )	self:SetMoveType( MOVETYPE_VPHYSICS )	self:SetSolid( SOLID_VPHYSICS )	self.TakeOff = false	self.Land = true	self.Launch = .1	self.Crash = false	self.BaseSpeed = 100 - self.Drag * 80 //minimum is 20 speed scaled down	util.PrecacheSound("doors/doorstop1.wav")	util.PrecacheSound("ambient/machines/thumper_startup1.wav")	endfunction ENT:MaxVehicleHealth()	return self.MaxHealthendfunction ENT:GetTrueForward()	local curang = self:GetForward():Angle()	curang.yaw = math.NormalizeAngle(curang.yaw + self.Offset.yaw)	return curang:Forward()endfunction ENT:GetTrueForwardAngle()	local curang = self:GetForward():Angle()	curang.yaw = math.NormalizeAngle(curang.yaw + self.Offset.yaw)	return curangendfunction ENT:GetTrueRight()	local curang = self:GetForward():Angle()	curang.roll = math.NormalizeAngle(curang.roll + self.Offset.roll)	return curang:Forward()endfunction ENT:GetTrueRightAngle()	local curang = self:GetForward():Angle()	curang.roll = math.NormalizeAngle(curang.roll + self.Offset.roll)	return curangendfunction ENT:GetTrueUp()	local curang = self:GetUp():Angle()	curang.pitch = math.NormalizeAngle(curang.pitch + self.Offset.pitch)	return curang:Forward()endfunction ENT:GetTrueUpAngle()	local curang = self:GetUp():Angle()	curang.pitch = math.NormalizeAngle(curang.pitch + self.Offset.pitch)	return curangendfunction ENT:TestAngles()	local effectdata = EffectData()	effectdata:SetOrigin(self:GetPos() + (self:GetForward()*60) )	effectdata:SetAngle(Angle(220,0,0))	util.Effect("angle_test", effectdata)	local effectdata = EffectData()	effectdata:SetOrigin(self:GetPos() + (self:GetRight()*60) )	effectdata:SetAngle(Angle(0,220,0))	util.Effect("angle_test", effectdata)	local effectdata = EffectData()	effectdata:SetOrigin(self:GetPos() + (self:GetUp()*60) )	effectdata:SetAngle(Angle(0,0,200))	util.Effect("angle_test", effectdata)	//modified angles now	local effectdata = EffectData()	effectdata:SetOrigin(self:GetPos() + (self:GetTrueForward()*60) +Vector(0,0,10))	effectdata:SetAngle(Angle(220,0,0))	util.Effect("angle_test", effectdata)	local effectdata = EffectData()	effectdata:SetOrigin(self:GetPos() + (self:GetTrueRight()*60) +Vector(0,0,10))	effectdata:SetAngle(Angle(0,220,0))	util.Effect("angle_test", effectdata)	local effectdata = EffectData()	effectdata:SetOrigin(self:GetPos() + (self:GetTrueUp()*60) +Vector(0,0,10))	effectdata:SetAngle(Angle(0,0,200))	util.Effect("angle_test", effectdata)endlocal v15up = Vector(0, 0, 15)local v20up = Vector(0, 0, 20)function ENT:PhysicsSimulate(phys, frametime)	self:TestAngles()	local v = self.Driver	if not v:IsValid() then return SIM_NOTHING end		v:SetPos(self:GetPos() + v15up)	if self.Crash then		if v:IsValid() then			v:DestroyVehicle()		end	end	if self.Launch > CurTime() then		phys:ApplyForceCenter(self.BaseSpeed * phys:GetMass() * self:GetTrueUp() + v20up)		phys:EnableGravity(false)		return	elseif self.TakeOff then		phys:ApplyForceCenter((self.BaseSpeed / 1.5) * phys:GetMass() * self:GetTrueForward())	end	if v:KeyDown( IN_JUMP ) then		if self.TakeOff then			self.Land = true			self.TakeOff = false			phys:EnableGravity(true)			self:EmitSound("doors/doorstop1.wav", 100, math.random(90, 100))		elseif self.Land then			self.TakeOff = true			self.Land = false			self.Launch = CurTime() + 1.3			self:EmitSound("ambient/machines/thumper_startup1.wav", 100, math.random(90, 100))		end	end	if self.Launch < CurTime() and self.TakeOff then		if v:KeyDown( IN_FORWARD ) then			if v.Inverted then				phys:AddAngleVelocity(Angle(0, self.BaseSpeed * frametime * -66, 0))			else				phys:AddAngleVelocity(Angle(0, self.BaseSpeed * frametime * 66, 0))			end 		elseif v:KeyDown( IN_BACK ) then			if not v.Inverted then				phys:AddAngleVelocity(Angle(0, self.BaseSpeed * frametime * -66, 0))			else				phys:AddAngleVelocity(Angle(0, self.BaseSpeed * frametime * 66, 0))			end 		elseif v:KeyDown( IN_SPEED ) then			if not self.Land then				local forward = phys:GetMass() * self.BaseSpeed * self:GetTrueForward()				phys:ApplyForceCenter(forward) 			end		elseif v:KeyDown( IN_MOVELEFT ) then			if not self.Land then				phys:AddAngleVelocity(Angle(-1 * self.BaseSpeed * 0.5 * self:GetTrueForward():Forward(), 0, 0))			end		elseif v:KeyDown( IN_MOVERIGHT ) then			if not self.Land then				phys:AddAngleVelocity(Angle(1 * self.BaseSpeed * 0.5 * self:GetTrueForward():Forward(), 0, 0))			end		end	endendfunction ENT:Think()	end function ENT:OnTakeDamage(dmg)	local owner = self:GetOwner()	if dmg:GetAttacker():IsPlayer() then		if dmg:GetAttacker():Team() == owner:Team() then			return		end		self.Health = self.Health - dmg:GetDamage()	end	self.Health = self.Health - dmg:GetDamage()	if self.Health <= 0 then		owner:DestroyVehicle(dmg:GetAttacker())	endend function ENT:Destroy()	for k, v in pairs(self.Parts) do		v:Remove()	end	self:Remove()endfunction ENT:PhysicsCollide(data, physobj)	if self.Land then		if data.Speed > 900 and data.DeltaTime > 0.2 then			local owner = self:GetOwner()			if owner and owner:IsValid() then				self.Crash = true			end		end	else		if data.Speed > 500 and data.DeltaTime > 0.2 then			local owner = self:GetOwner()			if owner and owner:IsValid() then				self.Crash = true			end		end			endend