Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Gunner
- -- Custom View für Gunner
- -- Spotlight
- -- Sirenen Sound
- -- Sirenen Lights
- -- Reticle Pilot FPV
- -- Reticle Gunner
- -- Einsteigen Reihenfolge
- -- BoneMod auf Client bzw ENT:SetAngles()
- -- Laser schießen Richtung cursor bzw parent an barrel
- -- alt+e einsteigen als Pilot, dann Gunner
- -- Gunner rutscht in pilot wenn kein pilot
- -- Spotlight Lightsource
- -- Gunner thirdperson unter Shiff nahe Light
- -- kein limitview für gunner (bekomme ich auch selbst hin)
- -- Passenger hinzufügen (stehend) im Moment wird Syphaseat benutzt (Zeile 166)
- -- anglelimit für Spotlight
- ENT.RenderGroup = RENDERGROUP_OPAQUE
- ENT.Base = "fighter_base"
- ENT.Type = "vehicle"
- ENT.PrintName = "Patrol Transport"
- ENT.Author = "KingPommes"
- ENT.Category = "Star Wars Vehicles: Empire"
- ENT.AutomaticFrameAdvance = true
- ENT.Spawnable = false
- ENT.AdminSpawnable = false
- ENT.EntModel = "models/KingPommes/starwars/patrol_transport/main.mdl"
- ENT.Vehicle = "IMP_PATROL"
- ENT.StartHealth = 4500
- ENT.Allegiance = "Empire"
- list.Set("SWVehicles", ENT.PrintName, ENT)
- if SERVER then
- ENT.FireSound = Sound("weapons/tie_shoot.wav")
- AddCSLuaFile()
- function ENT:SpawnFunction(pl, tr)
- local e = ents.Create("pommes_patrol_transport")
- e:SetPos(tr.HitPos + Vector(0,0,2))
- e:SetAngles(Angle(0,pl:GetAimVector():Angle().Yaw +90,0))
- e:Spawn()
- e:Activate()
- --e:PrecacheGibs()
- return e
- end
- -------------DETELTE TIS---------------------------
- --hinzugefügt um popcans sichtbar zu machen
- function ENT:SpawnWeapons()
- self.Weapons = {};
- for k,v in pairs(self.WeaponLocations) do
- local e = ents.Create("prop_physics");
- e:SetModel("models/props_junk/PopCan01a.mdl");
- e:SetPos(v);
- e:Spawn();
- e:Activate();
- e:SetRenderMode(RENDERMODE_TRANSALPHA);
- e:GetPhysicsObject():EnableCollisions(false);
- e:GetPhysicsObject():EnableMotion(false);
- e:SetSolid(SOLID_NONE);
- e:AddFlags(FL_DONTTOUCH);
- --e:SetColor(Color(255,255,255,0));
- e:SetParent(self);
- self.Weapons[k] = e;
- end
- end
- ---------------------------------------------------
- function ENT:SpawnLauncher()
- local pos = self:GetPos()
- local ang1 = self:GetAngles()
- local ang2 = self:GetAngles() + Angle(90, 0, 0)
- local e = ents.Create("info_target")
- e:SetPos(pos)
- e:SetAngles(ang1)
- e:SetParent(self)
- e:Spawn()
- e:Fire("AddOutput", "targetname target", 0)
- self.Target = e
- local e1 = ents.Create("npc_launcher")
- e1:SetPos(pos)
- e1:SetAngles(ang2)
- e1:SetParent(self)
- e1:Spawn()
- e1:Activate()
- e1:Fire("SetEnemyEntity", "target")
- e1:Fire("AddOutput", "damage 1000")
- e1:Fire("AddOutput", "DamageRadius 300")
- e1:Fire("AddOutput", "FlySound weapons/rpg/rocket1.wav")
- e1:Fire("AddOutput", "Gravity 0")
- e1:Fire("AddOutput", "HomingDelay 0")
- e1:Fire("AddOutput", "HomingDuration 0")
- e1:Fire("AddOutput", "HomingStrength 0")
- e1:Fire("AddOutput", "LaunchSmoke 1")
- e1:Fire("AddOutput", "SmokeTrail 1")
- e1:Fire("AddOutput", "LaunchSound weapons/stinger_fire1.wav")
- e1:Fire("AddOutput", "LaunchSpeed 5000")
- e1:Fire("AddOutput", "MaxRange 99999")
- e1:Fire("AddOutput", "MinRange 100")
- e1:Fire("AddOutput", "MissileModel models/kingpommes/starwars/tie/missile.mdl")
- e1:Fire("AddOutput", "SpinMagnitude 0")
- e1:Fire("AddOutput", "SpinSpeed 0")
- self.Launcher = e1
- end
- function ENT:SpawnTurrets()
- self.Turrets = {}
- for k,v in pairs(self.WeaponLocations) do
- local e = ents.Create("base_anim")
- e:SetModel("models/KingPommes/starwars/patrol_transport/turret.mdl")
- e:SetPos(v)
- e:SetParent(self)
- e:Spawn()
- e:Activate()
- self.Turrets[k] = e
- end
- end
- function ENT:SpawnDoors()
- local e = ents.Create("prop_dynamic")
- e:SetModel("models/KingPommes/starwars/patrol_transport/doors.mdl")
- e:SetPos(self:GetPos())
- e:SetAngles(self:GetAngles())
- e:SetParent(self)
- e:PhysicsInit(SOLID_VPHYSICS)
- e:Spawn()
- e:Activate()
- self.Doors = e
- end
- function ENT:SpawnSeats()
- self.Seats = {}
- for k,v in pairs(self.SeatPos) do
- local e = ents.Create(self.SeatClass or "prop_vehicle_prisoner_pod")
- e:SetPos(v[1] or self:GetPos())
- e:SetAngles(v[2] or self:GetAngles())
- e:SetParent(self)
- e:SetModel("models/nova/airboat_seat.mdl")
- --e:SetRenderMode(RENDERMODE_TRANSALPHA)
- e:SetColor(Color(255,255,255,0))
- e:Spawn()
- e:Activate()
- e:SetUseType(USE_OFF)
- e:GetPhysicsObject():EnableMotion(false)
- e:GetPhysicsObject():EnableCollisions(false)
- e:SetCollisionGroup(COLLISION_GROUP_WEAPON)
- e._ExitPos = v[3] or Vector(0,0,0)
- if (k == "Gunner") then
- e:SetVehicleClass("phx_seat2")
- else
- e:SetVehicleClass("sypha_seat") --needs replacing
- end
- self.Seats[k] = e
- end
- end
- function ENT:CreateBulletStructure(dmg,color,nosplashdamage)
- if(color == "blue" and dmg/2 > 30) then
- dmg = 30;
- elseif(color == "blue" and dmg/2 <= 30) then
- dmg = dmg/2;
- end
- local noion = false;
- if(color == "blue_noion") then
- color = "blue";
- noion = true;
- end
- local bullet = {
- Spread = Vector(0.001,0.001,0),
- Damage = dmg*1.25,
- Force = dmg,
- TracerName = color .. "_tracer_fx",
- Callback = function(p,tr,damage)
- local self = damage:GetInflictor():GetParent();
- util.Decal( "fadingscorch", tr.HitPos + tr.HitNormal, tr.HitPos - tr.HitNormal );
- local fx = EffectData()
- fx:SetOrigin(tr.HitPos);
- fx:SetNormal(tr.HitNormal);
- util.Effect( "StunstickImpact", fx, true )
- if(Should_HeliDamage) then
- local e = tr.Entity;
- if(e:GetClass() == "npc_helicopter" or e:GetClass() == "npc_combinegunship") then
- local health = e:Health();
- local new_health = health - dmg;
- if(new_health <= 0) then
- e:Input("SelfDestruct")
- else
- e:SetHealth(health - dmg);
- end
- end
- end
- if(IsValid(self) and self != tr.Entity) then
- if(!nosplashdamage) then
- util.BlastDamage( self, self.Gunner or self.Pilot or self, tr.HitPos, dmg*1.5, dmg*0.66)
- end
- if(color == "blue" and !noion) then
- if(tr.Entity.IsSWVehicle) then
- tr.Entity.IonShots = tr.Entity.IonShots + 1;
- end
- end
- end
- end
- }
- return bullet;
- end
- function ENT:Initialize()
- self.FireGroup = {"Laser1","Laser2"}
- self:SetModel(self.EntModel);
- self.WeaponLocations = {
- self:GetAttachment(self:LookupAttachment("turret_L")).Pos,
- self:GetAttachment(self:LookupAttachment("turret_R")).Pos,
- }
- self:SetNWInt("Health",self.StartHealth)
- self.CanShoot = false
- self.Cooldown = 2
- self.Overheat = 0
- self.Overheated = false
- self.Bullet = self:CreateBulletStructure(60,"green")
- self.FireDelay = 0.05
- self.AlternateFire = true
- self.WeaponsTable = {}
- self.Gunner = nil
- self.BoostSpeed = 1500
- self.ForwardSpeed = 600
- self.UpSpeed = 500
- self.AccelSpeed = 12
- self.CanBack = true
- self.CanRoll = false
- self.CanStrafe = true
- self.HasWings = true
- self.CanEject = false
- self:SetSkin(0)
- self.rocketnum = 1
- self.al = 1
- self.ExitModifier = {x=0,y=250,z=4}
- self.LandOffset = Vector(0,0, 1)
- self.PilotPosition = Vector(0,102,87)
- self.PilotVisible = true
- self.PilotAnim = "drive_jeep"
- self.HasLookaround = true
- self.HasSeats = true
- self.SeatPos = {
- Gunner = {self:GetPos()+self:GetForward()*145+self:GetRight()*1+self:GetUp()*39,self:GetAngles()+Angle(0,-90,0),Vector(0,95,4)},
- }
- self.NextUse.FireRockets = CurTime()
- self.NextUse.ToogleDoors = CurTime()
- self:SpawnLauncher()
- self.BaseClass.Initialize(self)
- -- Das hier löschen
- self.Filter = {self:GetChildEntities()}
- self:SpawnDoors()
- self:SpawnTurrets()
- self.Turrets[1]:Fire( "SetParentAttachment", "turret_L")
- self.Turrets[2]:Fire( "SetParentAttachment", "turret_R")
- --self.Weapons[1]:SetParent(self.Turrets[1])
- --self.Weapons[2]:SetParent(self.Turrets[2])
- --self.Weapons[1]:Fire( "SetParentAttachment", "barrel")
- --self.Weapons[2]:Fire( "SetParentAttachment", "barrel")
- --self.Weapons[1]:SetParent(self)
- --self.Weapons[2]:SetParent(self)
- self.Weapons[1]:Fire( "SetParentAttachment", "turret_L") -- funktioniert doch mensch
- self.Weapons[2]:Fire( "SetParentAttachment", "turret_R")
- self.Doors:ResetSequence(self.Doors:LookupSequence("DoorsOpen"))
- self.Doors:SetSolid(SOLID_NONE)
- end
- function ENT:Think()
- self:NextThink(CurTime())
- --if(self.Inflight) then
- if IsValid(self.Pilot) then
- if(self.Pilot:KeyDown(IN_ATTACK)) then
- self:FireLauncher()
- elseif(self.Pilot:KeyDown(IN_RELOAD)) then
- self:ToggleSiren()
- end
- end
- if (IsValid(self.Gunner)) then
- if(self.Gunner:KeyDown(IN_ATTACK)) then
- self:FireWeapons()
- end
- end
- if(self.Land) then
- self:ToggleDoors(true)
- end
- if(self.Wings) then
- self:ToggleDoors(false)
- elseif(!self.Wings) then
- self:ToggleDoors(true)
- end
- if(self.Gunner) then
- local tr = util.TraceLine({
- start = self.Gunner:GetPos() + self.Gunner:GetAimVector() * 25,
- endpos = self.Gunner:GetPos() + self.Gunner:GetAimVector() * 100000,
- filter = {
- self,
- self.Doors,
- self.Gunner,
- self.Pilot,
- self.Turrets[1],
- self.Turrets[2]
- }
- })
- local saveangle = self.Gunner:GetAimVector():Angle()
- local aim = self:WorldToLocalAngles(saveangle)
- -- limit nach oben für turrets hinzugefügt.
- local x
- if aim.x <= -35 then
- x = -35
- else
- x = aim.x
- end
- --limits für spotlight here
- --self.Turrets[1]:ManipulateBoneAngles(self.Turrets[1]:LookupBone("base"), Angle(0,aim.y,-aim.x))
- --self.Turrets[2]:ManipulateBoneAngles(self.Turrets[2]:LookupBone("base"), Angle(0,aim.y,-aim.x))
- self:ManipulateBoneAngles(self:LookupBone("turret_L"), Angle(0,-aim.y,x))
- self:ManipulateBoneAngles(self:LookupBone("turret_R"), Angle(0,-aim.y,x))
- self.Doors:ManipulateBoneAngles(self.Doors:LookupBone("spotlight"), Angle(0,-aim.x+90,-aim.y))
- lastY = aim.y
- end
- self:NextThink(CurTime())
- --end
- self.BaseClass.Think(self)
- end
- -- Und diese Funktion hier.
- function ENT:GetChildEntities()
- return self
- end
- function ENT:Use(p)
- if(!self.Inflight) then
- if (!p:KeyDown(IN_WALK))then
- self.BaseClass.Enter(self,p)
- self:SetSkin(1)
- elseif (p:KeyDown(IN_WALK) and !self.Gunner)then
- self:Passenger(p)
- elseif (self.Gunner and self.Pilot) then
- self:Passenger(p)
- end
- end
- end
- function ENT:Exit(kill)
- self.BaseClass.Exit(self,kill)
- self.Pilot = nil
- self:ToggleDoors(true)
- self:SetSkin(0)
- end
- function ENT:Bang()
- self.BaseClass.Bang(self)
- --self:GibBreakClient(self:GetVelocity())
- self:Remove()
- end
- function ENT:ToggleDoors(bol)
- if(self.NextUse.ToogleDoors < CurTime()) then
- if (bol and self.Doors:GetSequence() ~= self.Doors:LookupSequence("DoorsOpen")) then
- self:ResetSequence(self:LookupSequence("WingClose"))
- self.Doors:ResetSequence(self.Doors:LookupSequence("DoorsOpen"))
- self.Doors:SetSolid(SOLID_NONE)
- self.NextUse.ToogleDoors = CurTime()+2
- elseif (!bol and self.Doors:GetSequence() ~= self.Doors:LookupSequence("DoorsClose")) then
- self:ResetSequence(self:LookupSequence("WingOpen"))
- self.Doors:ResetSequence(self.Doors:LookupSequence("DoorsClose"))
- self.Doors:SetSolid(SOLID_VPHYSICS)
- self.NextUse.ToogleDoors = CurTime()+2
- end
- end
- end
- function ENT:ToggleSiren()
- if self:GetSkin() == 1 then
- self:SetSkin(2)
- elseif self:GetSkin() == 2 then
- self:SetSkin(1)
- end
- end
- function ENT:FireLauncher()
- if(self.NextUse.FireRockets < CurTime()) then
- if (self.rocketnum % 2 == 1) then
- self.Launcher:SetPos(self:GetPos() + self:GetForward()*250 + self:GetUp()*50 + self:GetRight()*32)
- self.Launcher:Fire("FireOnce")
- self.rocketnum = self.rocketnum + 1
- elseif (self.rocketnum %2 == 0) then
- self.Launcher:SetPos(self:GetPos() + self:GetForward()*250 + self:GetUp()*50 + self:GetRight()*-32)
- self.Launcher:Fire("FireOnce")
- self.rocketnum = self.rocketnum + 1
- end
- if (self.rocketnum == 6) then
- self.rocketnum = 0
- self.NextUse.FireRockets = CurTime()+15
- self:SetNWInt("FireBlast",self.NextUse.FireRockets)
- end
- end
- end
- function ENT:FireWeapons()
- if(self.NextUse.Fire < CurTime()) then
- for k,v in pairs(self.Weapons) do
- if(!IsValid(v)) then return end;
- local tr = util.TraceLine({
- start = v:GetPos(),
- endpos = v:GetPos()+v:GetForward()*10000,
- filter = {self},
- })
- local angPos = (tr.HitPos - v:GetPos())
- if(self.ShouldLock) then
- local e = self:FindTarget();
- if(IsValid(e)) then
- local tr = util.TraceLine( {
- start = v:GetPos(),
- endpos = e:GetPos(),
- filter = {self, v},
- } )
- if(!tr.HitWorld) then
- angPos = (e:GetPos() + e:GetUp()*(e:GetModelRadius()/3) + (self.LockOnOverride or Vector(0,0,0))) - v:GetPos();
- end
- end
- end
- self.Bullet.Attacker = self.Gunner or self.Pilot or self;
- self.Bullet.Src = v:GetPos();
- local spread = self.Accel.FWD/1000;
- self.Bullet.Spread = Vector(spread,spread,spread);
- self.Bullet.IgnoreEntity = self, v
- self.Bullet.Dir = angPos
- if(self.AlternateFire) then
- if (self.al == 1 and (v == self.Weapons[1])) then
- v:FireBullets(self.Bullet)
- elseif (self.al == 2 and (v == self.Weapons[2])) then
- v:FireBullets(self.Bullet)
- end
- else
- v:FireBullets(self.Bullet)
- end
- end
- self.al = self.al + 1
- if(self.al == 3) then
- self.al = 1
- end
- self:EmitSound(self.FireSound,100,math.random(90,110))
- self.NextUse.Fire = CurTime() + (self.FireDelay)
- end
- end
- hook.Add("PlayerEnteredVehicle","PatrolTransport.GunnerEnterVehicle", function(p,v)
- if(IsValid(p) and IsValid(v)) then
- local e = v:GetParent();
- if e.IsSWVehicle and e:GetClass() == "pommes_patrol_transport" then
- e.Gunner = p
- p:SetNWBool("GunnerIMP_Patrol", true)
- end
- end
- end);
- hook.Add("PlayerLeaveVehicle", "PatrolTransport.GunnerLeaveVehicle", function(p,v)
- if(IsValid(p) and IsValid(v)) then
- local e = v:GetParent();
- if e.IsSWVehicle and e:GetClass() == "pommes_patrol_transport" then
- e.Gunner = nil
- p:SetNWBool("GunnerIMP_Patrol", false)
- local pos = v:LocalToWorld(v._ExitPos)
- p:SetPos(pos);
- end
- end
- end);
- end
- if CLIENT then
- function ENT:Think()
- self.BaseClass.Think(self)
- local p = LocalPlayer()
- local Flying = p:GetNWBool("Flying"..self.Vehicle)
- if(Flying) then
- Health = self:GetNWInt("Health")
- Speed = self:GetNWInt("Speed")
- end
- end
- function ENT:Draw() self:DrawModel() end
- ENT.EnginePos = {}
- ENT.Sounds={
- Engine=Sound("vehicles/tie/tie_interceptor4.wav"),
- }
- ENT.CanFPV = true
- --function ENT:FlightEffects()
- -- local normal = (self:GetForward() * -1):GetNormalized()
- -- local roll = math.Rand(-90,90)
- -- local p = LocalPlayer()
- -- local FWD = self:GetForward()
- -- local id = self:EntIndex()
- --
- -- for k,v in pairs(self.EnginePos) do
- --
- -- local dynlight = DynamicLight(id + 4096 * k)
- -- dynlight.Pos = v+FWD*-5
- -- dynlight.Brightness = 2
- -- dynlight.Size = 150
- -- dynlight.Decay = 1024
- -- dynlight.R = 255
- -- dynlight.G = 100
- -- dynlight.B = 100
- -- dynlight.DieTime = CurTime()+1
- --
- -- end
- --end
- local Health = 0
- function ENT:Think()
- self.BaseClass.Think(self)
- local p = LocalPlayer()
- local IsFlying = p:GetNWBool("Flying"..self.Vehicle)
- local IsDriver = p:GetNWEntity(self.Vehicle) == self.Entity
- if(IsFlying and IsDriver) then
- Health = self:GetNWInt("Health")
- end
- end
- ENT.ViewDistance = 700
- ENT.ViewHeight = 300
- ENT.FPVPos = Vector(115,0,121)
- function IMP_PATROLOfDoomReticle()
- local p = LocalPlayer()
- local Flying = p:GetNWBool("FlyingIMP_PATROL")
- local self = p:GetNWEntity("IMP_PATROL")
- local Gunner = p:GetNWBool("GunnerIMP_Patrol")
- if( (Flying or Gunner) and IsValid(self)) then
- local x = ScrW()/4*0.1
- local y = ScrH()/4*2.5
- if(self:GetFPV()) then
- end
- SW_HUD_DrawHull(self.StartHealth)
- SW_WeaponReticles(self)
- --SW_HUD_DrawOverheating(self)
- local pos = self:GetPos()+self:GetForward()*100+self:GetUp()*-45+self:GetRight()*0
- local x,y = SW_XYIn3D(pos)
- SW_HUD_Compass(self,x,y)
- SW_HUD_DrawSpeedometer()
- SW_HUD_WingsIndicator("patrol",x,y)
- SW_BlastIcon(self,15)
- end
- end
- hook.Add("HUDPaint", "IMP_PATROLReticle", IMP_PATROLOfDoomReticle)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement