Advertisement
Guest User

Untitled

a guest
Dec 12th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.66 KB | None | 0 0
  1.  
  2.  
  3. -- Gunner
  4. -- Custom View für Gunner
  5. -- Spotlight
  6. -- Sirenen Sound
  7. -- Sirenen Lights
  8. -- Reticle Pilot FPV
  9. -- Reticle Gunner
  10.  
  11.  
  12.  
  13. -- Einsteigen Reihenfolge
  14. -- BoneMod auf Client bzw ENT:SetAngles()
  15. -- Laser schießen Richtung cursor bzw parent an barrel
  16. -- alt+e einsteigen als Pilot, dann Gunner
  17. -- Gunner rutscht in pilot wenn kein pilot
  18. -- Spotlight Lightsource
  19. -- Gunner thirdperson unter Shiff nahe Light
  20. -- kein limitview für gunner (bekomme ich auch selbst hin)
  21. -- Passenger hinzufügen (stehend) im Moment wird Syphaseat benutzt (Zeile 166)
  22. -- anglelimit für Spotlight
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29. ENT.RenderGroup = RENDERGROUP_OPAQUE
  30. ENT.Base = "fighter_base"
  31. ENT.Type = "vehicle"
  32.  
  33. ENT.PrintName = "Patrol Transport"
  34. ENT.Author = "KingPommes"
  35. ENT.Category = "Star Wars Vehicles: Empire"
  36. ENT.AutomaticFrameAdvance = true
  37. ENT.Spawnable = false
  38. ENT.AdminSpawnable = false
  39.  
  40. ENT.EntModel = "models/KingPommes/starwars/patrol_transport/main.mdl"
  41. ENT.Vehicle = "IMP_PATROL"
  42. ENT.StartHealth = 4500
  43. ENT.Allegiance = "Empire"
  44. list.Set("SWVehicles", ENT.PrintName, ENT)
  45. if SERVER then
  46.  
  47. ENT.FireSound = Sound("weapons/tie_shoot.wav")
  48.  
  49. AddCSLuaFile()
  50. function ENT:SpawnFunction(pl, tr)
  51. local e = ents.Create("pommes_patrol_transport")
  52. e:SetPos(tr.HitPos + Vector(0,0,2))
  53. e:SetAngles(Angle(0,pl:GetAimVector():Angle().Yaw +90,0))
  54. e:Spawn()
  55. e:Activate()
  56. --e:PrecacheGibs()
  57. return e
  58. end
  59. -------------DETELTE TIS---------------------------
  60.  
  61. --hinzugefügt um popcans sichtbar zu machen
  62. function ENT:SpawnWeapons()
  63. self.Weapons = {};
  64. for k,v in pairs(self.WeaponLocations) do
  65. local e = ents.Create("prop_physics");
  66. e:SetModel("models/props_junk/PopCan01a.mdl");
  67. e:SetPos(v);
  68. e:Spawn();
  69. e:Activate();
  70. e:SetRenderMode(RENDERMODE_TRANSALPHA);
  71. e:GetPhysicsObject():EnableCollisions(false);
  72. e:GetPhysicsObject():EnableMotion(false);
  73. e:SetSolid(SOLID_NONE);
  74. e:AddFlags(FL_DONTTOUCH);
  75. --e:SetColor(Color(255,255,255,0));
  76. e:SetParent(self);
  77. self.Weapons[k] = e;
  78. end
  79.  
  80. end
  81. ---------------------------------------------------
  82.  
  83. function ENT:SpawnLauncher()
  84. local pos = self:GetPos()
  85. local ang1 = self:GetAngles()
  86. local ang2 = self:GetAngles() + Angle(90, 0, 0)
  87.  
  88. local e = ents.Create("info_target")
  89. e:SetPos(pos)
  90. e:SetAngles(ang1)
  91. e:SetParent(self)
  92. e:Spawn()
  93. e:Fire("AddOutput", "targetname target", 0)
  94. self.Target = e
  95.  
  96. local e1 = ents.Create("npc_launcher")
  97. e1:SetPos(pos)
  98. e1:SetAngles(ang2)
  99. e1:SetParent(self)
  100. e1:Spawn()
  101. e1:Activate()
  102. e1:Fire("SetEnemyEntity", "target")
  103. e1:Fire("AddOutput", "damage 1000")
  104. e1:Fire("AddOutput", "DamageRadius 300")
  105. e1:Fire("AddOutput", "FlySound weapons/rpg/rocket1.wav")
  106. e1:Fire("AddOutput", "Gravity 0")
  107. e1:Fire("AddOutput", "HomingDelay 0")
  108. e1:Fire("AddOutput", "HomingDuration 0")
  109. e1:Fire("AddOutput", "HomingStrength 0")
  110. e1:Fire("AddOutput", "LaunchSmoke 1")
  111. e1:Fire("AddOutput", "SmokeTrail 1")
  112. e1:Fire("AddOutput", "LaunchSound weapons/stinger_fire1.wav")
  113. e1:Fire("AddOutput", "LaunchSpeed 5000")
  114. e1:Fire("AddOutput", "MaxRange 99999")
  115. e1:Fire("AddOutput", "MinRange 100")
  116. e1:Fire("AddOutput", "MissileModel models/kingpommes/starwars/tie/missile.mdl")
  117. e1:Fire("AddOutput", "SpinMagnitude 0")
  118. e1:Fire("AddOutput", "SpinSpeed 0")
  119. self.Launcher = e1
  120. end
  121.  
  122. function ENT:SpawnTurrets()
  123. self.Turrets = {}
  124. for k,v in pairs(self.WeaponLocations) do
  125. local e = ents.Create("base_anim")
  126. e:SetModel("models/KingPommes/starwars/patrol_transport/turret.mdl")
  127. e:SetPos(v)
  128. e:SetParent(self)
  129. e:Spawn()
  130. e:Activate()
  131. self.Turrets[k] = e
  132. end
  133. end
  134.  
  135. function ENT:SpawnDoors()
  136. local e = ents.Create("prop_dynamic")
  137. e:SetModel("models/KingPommes/starwars/patrol_transport/doors.mdl")
  138. e:SetPos(self:GetPos())
  139. e:SetAngles(self:GetAngles())
  140. e:SetParent(self)
  141. e:PhysicsInit(SOLID_VPHYSICS)
  142. e:Spawn()
  143. e:Activate()
  144. self.Doors = e
  145. end
  146.  
  147. function ENT:SpawnSeats()
  148. self.Seats = {}
  149. for k,v in pairs(self.SeatPos) do
  150. local e = ents.Create(self.SeatClass or "prop_vehicle_prisoner_pod")
  151. e:SetPos(v[1] or self:GetPos())
  152. e:SetAngles(v[2] or self:GetAngles())
  153. e:SetParent(self)
  154. e:SetModel("models/nova/airboat_seat.mdl")
  155. --e:SetRenderMode(RENDERMODE_TRANSALPHA)
  156. e:SetColor(Color(255,255,255,0))
  157. e:Spawn()
  158. e:Activate()
  159. e:SetUseType(USE_OFF)
  160. e:GetPhysicsObject():EnableMotion(false)
  161. e:GetPhysicsObject():EnableCollisions(false)
  162. e:SetCollisionGroup(COLLISION_GROUP_WEAPON)
  163. e._ExitPos = v[3] or Vector(0,0,0)
  164. if (k == "Gunner") then
  165. e:SetVehicleClass("phx_seat2")
  166. else
  167. e:SetVehicleClass("sypha_seat") --needs replacing
  168. end
  169. self.Seats[k] = e
  170. end
  171. end
  172.  
  173. function ENT:CreateBulletStructure(dmg,color,nosplashdamage)
  174. if(color == "blue" and dmg/2 > 30) then
  175. dmg = 30;
  176. elseif(color == "blue" and dmg/2 <= 30) then
  177. dmg = dmg/2;
  178. end
  179.  
  180. local noion = false;
  181. if(color == "blue_noion") then
  182. color = "blue";
  183. noion = true;
  184. end
  185.  
  186. local bullet = {
  187. Spread = Vector(0.001,0.001,0),
  188. Damage = dmg*1.25,
  189. Force = dmg,
  190. TracerName = color .. "_tracer_fx",
  191. Callback = function(p,tr,damage)
  192. local self = damage:GetInflictor():GetParent();
  193.  
  194. util.Decal( "fadingscorch", tr.HitPos + tr.HitNormal, tr.HitPos - tr.HitNormal );
  195. local fx = EffectData()
  196. fx:SetOrigin(tr.HitPos);
  197. fx:SetNormal(tr.HitNormal);
  198. util.Effect( "StunstickImpact", fx, true )
  199.  
  200. if(Should_HeliDamage) then
  201. local e = tr.Entity;
  202. if(e:GetClass() == "npc_helicopter" or e:GetClass() == "npc_combinegunship") then
  203. local health = e:Health();
  204. local new_health = health - dmg;
  205. if(new_health <= 0) then
  206. e:Input("SelfDestruct")
  207. else
  208. e:SetHealth(health - dmg);
  209. end
  210. end
  211. end
  212. if(IsValid(self) and self != tr.Entity) then
  213. if(!nosplashdamage) then
  214. util.BlastDamage( self, self.Gunner or self.Pilot or self, tr.HitPos, dmg*1.5, dmg*0.66)
  215. end
  216.  
  217.  
  218. if(color == "blue" and !noion) then
  219. if(tr.Entity.IsSWVehicle) then
  220. tr.Entity.IonShots = tr.Entity.IonShots + 1;
  221. end
  222. end
  223. end
  224. end
  225. }
  226. return bullet;
  227. end
  228.  
  229. function ENT:Initialize()
  230. self.FireGroup = {"Laser1","Laser2"}
  231. self:SetModel(self.EntModel);
  232.  
  233. self.WeaponLocations = {
  234. self:GetAttachment(self:LookupAttachment("turret_L")).Pos,
  235. self:GetAttachment(self:LookupAttachment("turret_R")).Pos,
  236. }
  237.  
  238. self:SetNWInt("Health",self.StartHealth)
  239.  
  240. self.CanShoot = false
  241. self.Cooldown = 2
  242. self.Overheat = 0
  243. self.Overheated = false
  244. self.Bullet = self:CreateBulletStructure(60,"green")
  245. self.FireDelay = 0.05
  246. self.AlternateFire = true
  247.  
  248. self.WeaponsTable = {}
  249.  
  250. self.Gunner = nil
  251. self.BoostSpeed = 1500
  252. self.ForwardSpeed = 600
  253. self.UpSpeed = 500
  254. self.AccelSpeed = 12
  255. self.CanBack = true
  256. self.CanRoll = false
  257. self.CanStrafe = true
  258. self.HasWings = true
  259. self.CanEject = false
  260.  
  261. self:SetSkin(0)
  262. self.rocketnum = 1
  263. self.al = 1
  264.  
  265. self.ExitModifier = {x=0,y=250,z=4}
  266. self.LandOffset = Vector(0,0, 1)
  267.  
  268. self.PilotPosition = Vector(0,102,87)
  269. self.PilotVisible = true
  270. self.PilotAnim = "drive_jeep"
  271. self.HasLookaround = true
  272.  
  273. self.HasSeats = true
  274. self.SeatPos = {
  275. Gunner = {self:GetPos()+self:GetForward()*145+self:GetRight()*1+self:GetUp()*39,self:GetAngles()+Angle(0,-90,0),Vector(0,95,4)},
  276. }
  277.  
  278. self.NextUse.FireRockets = CurTime()
  279. self.NextUse.ToogleDoors = CurTime()
  280. self:SpawnLauncher()
  281. self.BaseClass.Initialize(self)
  282. -- Das hier löschen
  283. self.Filter = {self:GetChildEntities()}
  284.  
  285. self:SpawnDoors()
  286. self:SpawnTurrets()
  287.  
  288. self.Turrets[1]:Fire( "SetParentAttachment", "turret_L")
  289. self.Turrets[2]:Fire( "SetParentAttachment", "turret_R")
  290.  
  291. --self.Weapons[1]:SetParent(self.Turrets[1])
  292. --self.Weapons[2]:SetParent(self.Turrets[2])
  293. --self.Weapons[1]:Fire( "SetParentAttachment", "barrel")
  294. --self.Weapons[2]:Fire( "SetParentAttachment", "barrel")
  295.  
  296. --self.Weapons[1]:SetParent(self)
  297. --self.Weapons[2]:SetParent(self)
  298.  
  299.  
  300. self.Weapons[1]:Fire( "SetParentAttachment", "turret_L") -- funktioniert doch mensch
  301. self.Weapons[2]:Fire( "SetParentAttachment", "turret_R")
  302.  
  303.  
  304. self.Doors:ResetSequence(self.Doors:LookupSequence("DoorsOpen"))
  305. self.Doors:SetSolid(SOLID_NONE)
  306.  
  307. end
  308.  
  309. function ENT:Think()
  310. self:NextThink(CurTime())
  311. --if(self.Inflight) then
  312. if IsValid(self.Pilot) then
  313. if(self.Pilot:KeyDown(IN_ATTACK)) then
  314. self:FireLauncher()
  315. elseif(self.Pilot:KeyDown(IN_RELOAD)) then
  316. self:ToggleSiren()
  317. end
  318. end
  319. if (IsValid(self.Gunner)) then
  320. if(self.Gunner:KeyDown(IN_ATTACK)) then
  321. self:FireWeapons()
  322. end
  323. end
  324.  
  325. if(self.Land) then
  326. self:ToggleDoors(true)
  327. end
  328.  
  329. if(self.Wings) then
  330. self:ToggleDoors(false)
  331. elseif(!self.Wings) then
  332. self:ToggleDoors(true)
  333. end
  334.  
  335. if(self.Gunner) then
  336. local tr = util.TraceLine({
  337. start = self.Gunner:GetPos() + self.Gunner:GetAimVector() * 25,
  338. endpos = self.Gunner:GetPos() + self.Gunner:GetAimVector() * 100000,
  339. filter = {
  340. self,
  341. self.Doors,
  342. self.Gunner,
  343. self.Pilot,
  344. self.Turrets[1],
  345. self.Turrets[2]
  346. }
  347. })
  348.  
  349.  
  350. local saveangle = self.Gunner:GetAimVector():Angle()
  351. local aim = self:WorldToLocalAngles(saveangle)
  352.  
  353.  
  354. -- limit nach oben für turrets hinzugefügt.
  355. local x
  356. if aim.x <= -35 then
  357. x = -35
  358. else
  359. x = aim.x
  360. end
  361.  
  362. --limits für spotlight here
  363.  
  364.  
  365. --self.Turrets[1]:ManipulateBoneAngles(self.Turrets[1]:LookupBone("base"), Angle(0,aim.y,-aim.x))
  366. --self.Turrets[2]:ManipulateBoneAngles(self.Turrets[2]:LookupBone("base"), Angle(0,aim.y,-aim.x))
  367.  
  368. self:ManipulateBoneAngles(self:LookupBone("turret_L"), Angle(0,-aim.y,x))
  369. self:ManipulateBoneAngles(self:LookupBone("turret_R"), Angle(0,-aim.y,x))
  370.  
  371. self.Doors:ManipulateBoneAngles(self.Doors:LookupBone("spotlight"), Angle(0,-aim.x+90,-aim.y))
  372. lastY = aim.y
  373. end
  374. self:NextThink(CurTime())
  375. --end
  376. self.BaseClass.Think(self)
  377. end
  378.  
  379. -- Und diese Funktion hier.
  380. function ENT:GetChildEntities()
  381. return self
  382. end
  383.  
  384.  
  385.  
  386. function ENT:Use(p)
  387. if(!self.Inflight) then
  388. if (!p:KeyDown(IN_WALK))then
  389. self.BaseClass.Enter(self,p)
  390. self:SetSkin(1)
  391. elseif (p:KeyDown(IN_WALK) and !self.Gunner)then
  392. self:Passenger(p)
  393. elseif (self.Gunner and self.Pilot) then
  394. self:Passenger(p)
  395. end
  396. end
  397. end
  398.  
  399. function ENT:Exit(kill)
  400. self.BaseClass.Exit(self,kill)
  401. self.Pilot = nil
  402. self:ToggleDoors(true)
  403. self:SetSkin(0)
  404. end
  405.  
  406. function ENT:Bang()
  407. self.BaseClass.Bang(self)
  408. --self:GibBreakClient(self:GetVelocity())
  409. self:Remove()
  410. end
  411.  
  412. function ENT:ToggleDoors(bol)
  413. if(self.NextUse.ToogleDoors < CurTime()) then
  414.  
  415. if (bol and self.Doors:GetSequence() ~= self.Doors:LookupSequence("DoorsOpen")) then
  416. self:ResetSequence(self:LookupSequence("WingClose"))
  417. self.Doors:ResetSequence(self.Doors:LookupSequence("DoorsOpen"))
  418. self.Doors:SetSolid(SOLID_NONE)
  419. self.NextUse.ToogleDoors = CurTime()+2
  420.  
  421. elseif (!bol and self.Doors:GetSequence() ~= self.Doors:LookupSequence("DoorsClose")) then
  422. self:ResetSequence(self:LookupSequence("WingOpen"))
  423. self.Doors:ResetSequence(self.Doors:LookupSequence("DoorsClose"))
  424. self.Doors:SetSolid(SOLID_VPHYSICS)
  425. self.NextUse.ToogleDoors = CurTime()+2
  426. end
  427. end
  428. end
  429.  
  430. function ENT:ToggleSiren()
  431. if self:GetSkin() == 1 then
  432. self:SetSkin(2)
  433. elseif self:GetSkin() == 2 then
  434. self:SetSkin(1)
  435. end
  436. end
  437.  
  438. function ENT:FireLauncher()
  439. if(self.NextUse.FireRockets < CurTime()) then
  440. if (self.rocketnum % 2 == 1) then
  441. self.Launcher:SetPos(self:GetPos() + self:GetForward()*250 + self:GetUp()*50 + self:GetRight()*32)
  442. self.Launcher:Fire("FireOnce")
  443. self.rocketnum = self.rocketnum + 1
  444. elseif (self.rocketnum %2 == 0) then
  445. self.Launcher:SetPos(self:GetPos() + self:GetForward()*250 + self:GetUp()*50 + self:GetRight()*-32)
  446. self.Launcher:Fire("FireOnce")
  447. self.rocketnum = self.rocketnum + 1
  448. end
  449. if (self.rocketnum == 6) then
  450. self.rocketnum = 0
  451. self.NextUse.FireRockets = CurTime()+15
  452. self:SetNWInt("FireBlast",self.NextUse.FireRockets)
  453. end
  454. end
  455. end
  456. function ENT:FireWeapons()
  457. if(self.NextUse.Fire < CurTime()) then
  458. for k,v in pairs(self.Weapons) do
  459. if(!IsValid(v)) then return end;
  460. local tr = util.TraceLine({
  461. start = v:GetPos(),
  462. endpos = v:GetPos()+v:GetForward()*10000,
  463. filter = {self},
  464. })
  465. local angPos = (tr.HitPos - v:GetPos())
  466.  
  467. if(self.ShouldLock) then
  468. local e = self:FindTarget();
  469. if(IsValid(e)) then
  470. local tr = util.TraceLine( {
  471. start = v:GetPos(),
  472. endpos = e:GetPos(),
  473. filter = {self, v},
  474. } )
  475. if(!tr.HitWorld) then
  476. angPos = (e:GetPos() + e:GetUp()*(e:GetModelRadius()/3) + (self.LockOnOverride or Vector(0,0,0))) - v:GetPos();
  477. end
  478. end
  479. end
  480.  
  481. self.Bullet.Attacker = self.Gunner or self.Pilot or self;
  482. self.Bullet.Src = v:GetPos();
  483. local spread = self.Accel.FWD/1000;
  484. self.Bullet.Spread = Vector(spread,spread,spread);
  485. self.Bullet.IgnoreEntity = self, v
  486.  
  487. self.Bullet.Dir = angPos
  488.  
  489. if(self.AlternateFire) then
  490. if (self.al == 1 and (v == self.Weapons[1])) then
  491. v:FireBullets(self.Bullet)
  492. elseif (self.al == 2 and (v == self.Weapons[2])) then
  493. v:FireBullets(self.Bullet)
  494. end
  495. else
  496. v:FireBullets(self.Bullet)
  497. end
  498. end
  499. self.al = self.al + 1
  500. if(self.al == 3) then
  501. self.al = 1
  502. end
  503. self:EmitSound(self.FireSound,100,math.random(90,110))
  504. self.NextUse.Fire = CurTime() + (self.FireDelay)
  505. end
  506. end
  507.  
  508. hook.Add("PlayerEnteredVehicle","PatrolTransport.GunnerEnterVehicle", function(p,v)
  509. if(IsValid(p) and IsValid(v)) then
  510. local e = v:GetParent();
  511. if e.IsSWVehicle and e:GetClass() == "pommes_patrol_transport" then
  512. e.Gunner = p
  513. p:SetNWBool("GunnerIMP_Patrol", true)
  514. end
  515. end
  516. end);
  517.  
  518. hook.Add("PlayerLeaveVehicle", "PatrolTransport.GunnerLeaveVehicle", function(p,v)
  519. if(IsValid(p) and IsValid(v)) then
  520. local e = v:GetParent();
  521. if e.IsSWVehicle and e:GetClass() == "pommes_patrol_transport" then
  522. e.Gunner = nil
  523. p:SetNWBool("GunnerIMP_Patrol", false)
  524. local pos = v:LocalToWorld(v._ExitPos)
  525. p:SetPos(pos);
  526. end
  527. end
  528. end);
  529. end
  530.  
  531.  
  532.  
  533. if CLIENT then
  534.  
  535. function ENT:Think()
  536. self.BaseClass.Think(self)
  537. local p = LocalPlayer()
  538. local Flying = p:GetNWBool("Flying"..self.Vehicle)
  539. if(Flying) then
  540. Health = self:GetNWInt("Health")
  541. Speed = self:GetNWInt("Speed")
  542. end
  543. end
  544.  
  545. function ENT:Draw() self:DrawModel() end
  546.  
  547. ENT.EnginePos = {}
  548. ENT.Sounds={
  549. Engine=Sound("vehicles/tie/tie_interceptor4.wav"),
  550. }
  551. ENT.CanFPV = true
  552.  
  553. --function ENT:FlightEffects()
  554. -- local normal = (self:GetForward() * -1):GetNormalized()
  555. -- local roll = math.Rand(-90,90)
  556. -- local p = LocalPlayer()
  557. -- local FWD = self:GetForward()
  558. -- local id = self:EntIndex()
  559. --
  560. -- for k,v in pairs(self.EnginePos) do
  561. --
  562. -- local dynlight = DynamicLight(id + 4096 * k)
  563. -- dynlight.Pos = v+FWD*-5
  564. -- dynlight.Brightness = 2
  565. -- dynlight.Size = 150
  566. -- dynlight.Decay = 1024
  567. -- dynlight.R = 255
  568. -- dynlight.G = 100
  569. -- dynlight.B = 100
  570. -- dynlight.DieTime = CurTime()+1
  571. --
  572. -- end
  573. --end
  574.  
  575. local Health = 0
  576. function ENT:Think()
  577. self.BaseClass.Think(self)
  578. local p = LocalPlayer()
  579. local IsFlying = p:GetNWBool("Flying"..self.Vehicle)
  580.  
  581. local IsDriver = p:GetNWEntity(self.Vehicle) == self.Entity
  582. if(IsFlying and IsDriver) then
  583. Health = self:GetNWInt("Health")
  584. end
  585. end
  586.  
  587. ENT.ViewDistance = 700
  588. ENT.ViewHeight = 300
  589. ENT.FPVPos = Vector(115,0,121)
  590.  
  591.  
  592. function IMP_PATROLOfDoomReticle()
  593. local p = LocalPlayer()
  594. local Flying = p:GetNWBool("FlyingIMP_PATROL")
  595. local self = p:GetNWEntity("IMP_PATROL")
  596. local Gunner = p:GetNWBool("GunnerIMP_Patrol")
  597.  
  598. if( (Flying or Gunner) and IsValid(self)) then
  599. local x = ScrW()/4*0.1
  600. local y = ScrH()/4*2.5
  601. if(self:GetFPV()) then
  602. end
  603. SW_HUD_DrawHull(self.StartHealth)
  604. SW_WeaponReticles(self)
  605. --SW_HUD_DrawOverheating(self)
  606. local pos = self:GetPos()+self:GetForward()*100+self:GetUp()*-45+self:GetRight()*0
  607. local x,y = SW_XYIn3D(pos)
  608. SW_HUD_Compass(self,x,y)
  609. SW_HUD_DrawSpeedometer()
  610. SW_HUD_WingsIndicator("patrol",x,y)
  611. SW_BlastIcon(self,15)
  612. end
  613. end
  614. hook.Add("HUDPaint", "IMP_PATROLReticle", IMP_PATROLOfDoomReticle)
  615. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement