Advertisement
Guest User

Untitled

a guest
Dec 25th, 2014
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.52 KB | None | 0 0
  1. class 'FireArmsManager'
  2.  
  3. function FireArmsManager:__init()
  4. GlobalCooldownTimer = Timer()
  5. DotColor = Color(255, 0, 0, 150)
  6. DotRadius = Render.Size.x / 500
  7. self.Firing = false
  8. Events:Subscribe("LocalPlayerBulletHit", self, self.HandleDamage)
  9. Events:Subscribe("LocalPlayerInput", self, self.LocalPlayerInput)
  10. Events:Subscribe("Render", self, self.Render)
  11. Events:Subscribe("InputPoll", self, self.InputPoll)
  12.  
  13. positionTable = {}
  14. end
  15.  
  16. function FireArmsManager:RenderTest()
  17. if CameraPos and CameraAngle then
  18. local CalcAngle = Copy(CameraAngle)
  19. for i = 1, 200 do
  20. local integer = (5*i) + 5
  21. CalcAngle.pitch = CalcAngle.pitch + -0.00436332313--0.00872664626
  22. local FireRay = Physics:Raycast(CameraPos, CalcAngle * Vector3.Forward, 0, integer)
  23. local RenderColor = Color.Red
  24. local valid = IsValid(FireRay.entity)
  25. if valid then
  26. RenderColor = Color.Lime
  27. end
  28. Render:DrawLine(CameraPos, FireRay.position, RenderColor)
  29. end
  30. end
  31. end
  32. end
  33.  
  34. function FireArmsManager:Render()
  35. if Game:GetState() ~= GUIState.Game then return end
  36. self:RenderAimDot(LocalPlayer)
  37. for players in Client:GetStreamedPlayers() do
  38. self:RenderAimDot(players)
  39. end
  40.  
  41.  
  42. for i, v in pairs(positionTable) do
  43. Render:DrawLine(lastPosition, v, Color.Red)
  44. end
  45. end
  46.  
  47. function FireArmsManager:RenderAimDot(player)
  48. local PlayerWeapon = player:GetEquippedWeapon()
  49. if PlayerWeapon then
  50. if StadardArmsStatsTable[PlayerWeapon.id] then
  51. if StadardArmsStatsTable[PlayerWeapon.id].RedDot then
  52. if player:GetState() == 4 or player:GetState() == 5 then
  53. local AimDot = player:GetAimTarget()
  54. if AimDot then
  55. local DotPos = AimDot.position
  56. if DotPos then
  57. local ScreenDotPos = Render:WorldToScreen(DotPos)
  58. Render:FillCircle(ScreenDotPos, DotRadius, DotColor)
  59. end
  60. end
  61. end
  62. end
  63. end
  64. end
  65.  
  66. end
  67.  
  68. function FireArmsManager:RenderTest()
  69. local CameraPos=Camera:GetPosition()
  70. local CalcAngle=Copy(Camera:GetAngle())
  71. for i = 50, 20 do
  72. local CalcAngle.pitch = CalcAngle.pitch + -0.00872664626
  73. local FireRay = Physics:Raycast(CameraPos, CalcAngle * Vector3.Forward, 0, i)
  74. local RenderColor=Color.Red
  75. if IsValid(FireRay.entity) then
  76. end
  77. Render:DrawLine(CameraPos, FireRay.position, RenderColor)
  78. end
  79. end
  80.  
  81.  
  82. function FireArmsManager:HandleDamage(args)
  83. if IsValid(args.attacker) then
  84. local AttackerWeapon = args.attacker:GetEquippedWeapon()
  85. if AttackerWeapon then
  86. if StadardArmsStatsTable[AttackerWeapon.id] then
  87. return false
  88. end
  89. end
  90. end
  91. end
  92.  
  93. function FireArmsManager:InputPoll()
  94. if Game:GetState() == GUIState.Game then
  95. if self.Firing then
  96. -- Input:SetValue(Action.FireRight, 0, false)
  97. self.Firing = false
  98. end
  99. end
  100. end
  101.  
  102. function FireArmsManager:FireAtTarget(target, attacker, statsTable, aimTable, rayTable)
  103. if IsValid(target) and IsValid(attacker) then
  104. -- print("Firing...")
  105. local FireTable = {}
  106. FireTable.Target = target
  107. FireTable.Attacker = attacker
  108. FireTable.Stats = statsTable
  109. FireTable.Aim = aimTable
  110. FireTable.Ray = rayTable
  111. FireTable.NearestBone = nil
  112. if target.__type == "Player" then
  113. local NearestBone = nil
  114. local NearestBonePosition = target:GetPosition()
  115. for boneName, bone in pairs(target:GetBones()) do
  116. local NearestBoneDistance = Vector3.Distance(NearestBonePosition, rayTable.position)
  117. local ThisBoneDistance = Vector3.Distance(bone.position, rayTable.position)
  118. if ThisBoneDistance < NearestBoneDistance then
  119. NearestBone = boneName
  120. NearestBonePosition = bone.position
  121. end
  122. end
  123. FireTable.NearestBone = NearestBone
  124. end
  125. Network:Send("FireArmDamagePlayer", FireTable)
  126. end
  127. end
  128.  
  129. function FireArmsManager:LocalPlayerInput(inputType)
  130. local PlayerWeapon = LocalPlayer:GetEquippedWeapon()
  131. local PlayerSlot = LocalPlayer:GetEquippedSlot()
  132. local PlayerWeaponID = PlayerWeapon.id
  133. local PlayerWeaponClip = PlayerWeapon.ammo_clip
  134. local PlayerWeaponReserve = PlayerWeapon.ammo_reserve
  135. local PlayerVehicle = LocalPlayer:GetVehicle()
  136. local PlayerState = LocalPlayer:GetState()
  137. local PlayerBaseState = LocalPlayer:GetBaseState()
  138. local PlayerUpperState = LocalPlayer:GetUpperBodyState()
  139. local EffectiveStatsTable = StadardArmsStatsTable[PlayerWeaponID]
  140. if self.Firing then return false end
  141. if not EffectiveStatsTable then return end
  142. if LocalPlayer:InVehicle() then return end
  143. local EffectiveCooldown = EffectiveStatsTable.Cooldown
  144. if inputType.input == Action.FireRight then
  145. if PlayerWeaponClip > 0 then
  146. if GlobalCooldownTimer:GetSeconds() >= EffectiveCooldown then
  147. GlobalCooldownTimer:Restart()
  148. if PlayerUpperState == 347 or PlayerUpperState == 348 then
  149. self.Firing = true
  150. local FireAim = LocalPlayer:GetAimTarget()
  151.  
  152.  
  153. -- print("AimTable:",FireAim, FireAim.entity, FireAim.position)
  154. -- print("RayTable:",FireRay, FireRay.distance, FireRay.position, FireRay.normal, FireRay.entity)
  155.  
  156.  
  157.  
  158.  
  159. local FireRay = Physics:Raycast(Camera:GetPosition(), (Camera:GetAngle() * Vector3(0, 0, -1)), 0, EffectiveStatsTable.MaxRange)
  160.  
  161. if PlayerWeapon.id == 14 then -- sniper rifle
  162. -- bullet drop stuff
  163. totalRange = 0
  164. positionTable = {}
  165. local originalVector = Camera:GetAngle() * Vector3.Forward
  166. FireRay = Physics:Raycast(Camera:GetPosition(), originalVector , 0, 5)
  167. pitchAngle = Angle(0, -0.00872664626, 0)
  168. oldAngle = Camera:GetAngle()
  169. totalRange = FireRay.distance
  170. CameraPos = Camera:GetPosition()
  171. CameraAngle = Camera:GetAngle()
  172. Events:Subscribe("Render", self, self.RenderTest)
  173. while totalRange < 1000 and totalRange % 5 == 0 do
  174. directionVector = oldAngle*Vector3.Forward
  175. FireRay = Physics:Raycast(FireRay.position, directionVector, 0, 5)
  176. totalRange = totalRange + FireRay.distance
  177. originalVector = directionVector
  178. lastPosition = Camera:GetPosition()
  179. table.insert(positionTable, FireRay.position)
  180. oldAngle = oldAngle
  181. oldAngle.pitch = oldAngle.pitch + pitchAngle.y
  182. if IsValid(FireRay.entity) then -- in the very rare case that it hits s something on exactly 5 meters or something
  183. break
  184. end
  185. end
  186.  
  187. if not IsValid(FireRay.entity) then return end
  188. print("Drop target was valid")
  189. if FireRay.entity == nil then return end
  190. print("Drop target wasn't nil")
  191. if FireRay.entity.__type == "StaticObject" or FireRay.entity.__type == "ClientStaticObject" then return end
  192. print("Drop target was of correct type")
  193. if Vector3.Distance(LocalPlayer:GetPosition(), FireRay.entity:GetPosition()) < EffectiveStatsTable.MaxRange then
  194. self:FireAtTarget(FireAim.entity, LocalPlayer, EffectiveStatsTable, FireAim, FireRay)
  195. print("Firing at drop target")
  196. end
  197. else
  198. if not IsValid(FireAim.entity) and not IsValid(FireRay.entity) then return end
  199. if FireAim.entity == nil or FireRay.entity == nil then return end
  200. if FireAim.entity.__type == "StaticObject" or FireAim.entity.__type == "ClientStaticObject" then return end
  201.  
  202. if FireAim.entity:GetPosition() == FireRay.entity:GetPosition() then
  203. if Vector3.Distance(LocalPlayer:GetPosition(), FireRay.entity:GetPosition()) < EffectiveStatsTable.MaxRange then
  204. self:FireAtTarget(FireAim.entity, LocalPlayer, EffectiveStatsTable, FireAim, FireRay)
  205. end
  206. end
  207.  
  208. end
  209. end
  210. else
  211. return false
  212. end
  213. end
  214. end
  215. end
  216.  
  217. FireArmsManager = FireArmsManager()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement