Advertisement
Guest User

Untitled

a guest
Feb 19th, 2020
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.71 KB | None | 0 0
  1. --[[ INFO
  2. #Defibrilator
  3. models/craphead_scripts/paramedic_essentials/weapons/c_defibrilator.mdl
  4. models/craphead_scripts/paramedic_essentials/weapons/w_defibrilator.mdl
  5. FOV: 65
  6. Hold type: duel
  7. Skins: 0/1/2/3/4
  8. Sequences:
  9. (sequence_name activity)
  10. idle ACT_IDLE
  11. use ACT_VM_PRIMARYATTACK
  12. charge ACT_VM_SECONDARYATTACK
  13. draw ACT_VM_DRAW
  14. --]]
  15.  
  16. if SERVER then
  17. SWEP.Weight = 5
  18. SWEP.AutoSwitchTo = true
  19. SWEP.AutoSwitchFrom = true
  20. AddCSLuaFile( "shared.lua" )
  21. end
  22.  
  23. if CLIENT then
  24. SWEP.PrintName = CH_AdvMedic.Config.Lang["Defibrillator"][CH_AdvMedic.Config.Language]
  25. SWEP.Author = "Crap-Head"
  26. SWEP.Slot = 2
  27. SWEP.SlotPos = 1
  28. SWEP.DrawAmmo = false
  29. SWEP.DrawWeaponInfoBox = false
  30. SWEP.BounceWeaponIcon = false
  31. SWEP.SwayScale = 1.0
  32. SWEP.BobScale = 1.0
  33. end
  34.  
  35. SWEP.Author = "Crap-Head"
  36. SWEP.Instructions = CH_AdvMedic.Config.Lang["Left Click: Use defib (charge required), Right Click: Charge defib"][CH_AdvMedic.Config.Language]
  37. SWEP.Category = "[Unity] Armas"
  38.  
  39. SWEP.UseHands = true
  40. SWEP.ViewModelFOV = 65
  41.  
  42. SWEP.ViewModel = "models/craphead_scripts/paramedic_essentials/weapons/c_defibrilator.mdl"
  43. SWEP.WorldModel = "models/craphead_scripts/paramedic_essentials/weapons/w_defibrilator.mdl"
  44.  
  45. SWEP.Spawnable = true
  46. SWEP.AdminSpawnable = true
  47.  
  48. SWEP.Primary.Range = 120
  49. SWEP.Primary.Recoil = 4.6
  50. SWEP.Primary.Damage = 100
  51. SWEP.Primary.Cone = 0.005
  52. SWEP.Primary.NumShots = 1
  53.  
  54. SWEP.Primary.ClipSize = -1
  55. SWEP.Primary.DefaultClip = -1
  56. SWEP.Primary.Automatic = false
  57. SWEP.Primary.Ammo = "none"
  58.  
  59. SWEP.Secondary.ClipSize = -1
  60. SWEP.Secondary.DefaultClip = -1
  61. SWEP.Secondary.Automatic = false
  62. SWEP.Secondary.Ammo = "none"
  63.  
  64. function SWEP:Initialize()
  65. self:SetWeaponHoldType( "duel" )
  66. self.Weapon:SendWeaponAnim( ACT_VM_DRAW )
  67. self.Weapon:SetSkin( 1 )
  68. self.Weapon:SetNWInt( "DefibCharge", 0 )
  69. --[[
  70. timer.Simple( 0.25, function()
  71. if not IsValid( self.Owner ) then
  72. return
  73. end
  74.  
  75. local vm = self.Owner:GetViewModel()
  76. vm:SetSubMaterial( 1, "models/craphead_scripts/paramedic_essentials/weapons/defib_scrn" )
  77. end )
  78. --]]
  79. end
  80.  
  81. function SWEP:Deploy()
  82. self.Weapon:SendWeaponAnim( ACT_VM_DRAW )
  83.  
  84. timer.Simple( 1.2, function()
  85. if IsValid( self.Weapon ) and IsValid( self.Owner ) then
  86. if self.Owner:GetActiveWeapon():GetClass() == "defibrillator_advanced" then
  87. self.Weapon:SendWeaponAnim( ACT_IDLE )
  88. end
  89. end
  90. end )
  91.  
  92. local vm = self.Owner:GetViewModel()
  93.  
  94. if self.Weapon:GetNWInt( "DefibCharge" ) == 25 then -- First level
  95. vm:SetSubMaterial( 1, "models/craphead_scripts/paramedic_essentials/weapons/defib_scrn2" )
  96. elseif self.Weapon:GetNWInt( "DefibCharge" ) == 50 then -- Second level
  97. vm:SetSubMaterial( 1, "models/craphead_scripts/paramedic_essentials/weapons/defib_scrn3" )
  98. elseif self.Weapon:GetNWInt( "DefibCharge" ) == 75 then -- Third level
  99. vm:SetSubMaterial( 1, "models/craphead_scripts/paramedic_essentials/weapons/defib_scrn4" )
  100. elseif self.Weapon:GetNWInt( "DefibCharge" ) == 100 then -- Fourth level
  101. vm:SetSubMaterial( 1, "models/craphead_scripts/paramedic_essentials/weapons/defib_scrn5" )
  102. end
  103.  
  104. vm:SetPlaybackRate( 0.7 )
  105.  
  106. return true
  107. end
  108.  
  109. function SWEP:Holster( wep )
  110. if not IsFirstTimePredicted() then
  111. return
  112. end
  113. if not IsValid( self.Owner ) then
  114. return
  115. end
  116.  
  117. local vm = self.Owner:GetViewModel()
  118. vm:SetSubMaterial( 1, nil )
  119.  
  120. return true
  121. end
  122.  
  123. function SWEP:OnRemove()
  124. if not IsValid( self.Owner ) then
  125. return
  126. end
  127.  
  128. local vm = self.Owner:GetViewModel()
  129. vm:SetSubMaterial( 1, nil )
  130.  
  131. return true
  132. end
  133.  
  134. function SWEP:PrimaryAttack()
  135. self.Weapon:SetNextPrimaryFire( CurTime() + CH_AdvMedic.Config.DefibrillatorDelay )
  136. self.Weapon:SetNextSecondaryFire( CurTime() + CH_AdvMedic.Config.DefibrillatorDelay )
  137.  
  138. if self.Weapon:GetNWInt( "DefibCharge" ) == 100 then
  139. local trace = util.GetPlayerTrace( self.Owner )
  140. local tr = util.TraceLine( trace )
  141.  
  142. local ent = tr.Entity
  143.  
  144. if not IsValid( ent ) then
  145. return
  146. end
  147.  
  148. if ent:GetPos():Distance( self.Owner:GetPos() ) > 200 then
  149. if SERVER then
  150. DarkRP.notify( self.Owner, 1, 5, CH_AdvMedic.Config.Lang["You need to move closer to the body."][CH_AdvMedic.Config.Language] )
  151. end
  152. return
  153. end
  154.  
  155. if ent:GetNWBool( "RagdollIsCorpse" ) then
  156. self.Weapon:SendWeaponAnim( ACT_VM_PRIMARYATTACK )
  157. self.Weapon:UpdateDefibCharge( true )
  158.  
  159. timer.Simple( 1.2, function()
  160. if IsValid( self.Weapon ) and IsValid( self.Owner ) then
  161. if self.Owner:GetActiveWeapon():GetClass() == "defibrillator_advanced" then
  162. self.Weapon:SendWeaponAnim( ACT_IDLE )
  163. end
  164. end
  165. end )
  166.  
  167. if SERVER then
  168. local chance = math.random( 1, 100 )
  169.  
  170. if chance <= 25 then
  171. DarkRP.notify( self.Owner, 1, 5, CH_AdvMedic.Config.Lang["Your attempt at reviving the player did not work. Recharge and try again!"][CH_AdvMedic.Config.Language] )
  172. return
  173. end
  174.  
  175. local victim = ent:GetOwner()
  176. victim:Spawn()
  177.  
  178. if IsValid( victim.DeathRagdoll ) then
  179. victim:SetPos( victim.DeathRagdoll:GetPos() )
  180. end
  181.  
  182. for k, v in pairs( victim.WeaponsOnKilled ) do
  183. victim:Give( v )
  184. end
  185.  
  186. DarkRP.notify( victim, 1, 5, CH_AdvMedic.Config.Lang["A paramedic has saved you from dying!"][CH_AdvMedic.Config.Language] )
  187. DarkRP.notify( self.Owner, 1, 5, CH_AdvMedic.Config.Lang["You have rescued the dying person!"][CH_AdvMedic.Config.Language] )
  188.  
  189. if victim.HasLifeAlert then
  190. DarkRP.notify( self.Owner, 1, 5, "+ ".. DarkRP.formatMoney( CH_AdvMedic.Config.LifeAlertRevivalReward ) .." ".. CH_AdvMedic.Config.Lang["for responding to a life alert!"][CH_AdvMedic.Config.Language] )
  191. self.Owner:addMoney( CH_AdvMedic.Config.LifeAlertRevivalReward )
  192. else
  193. DarkRP.notify( self.Owner, 1, 5, "+ ".. DarkRP.formatMoney( CH_AdvMedic.Config.RevivalReward ) .." ".. CH_AdvMedic.Config.Lang["for reviving a player!"][CH_AdvMedic.Config.Language] )
  194. self.Owner:addMoney( CH_AdvMedic.Config.RevivalReward )
  195. end
  196.  
  197. self.Owner:EmitSound( "ambient/energy/zap3.wav", 100, 100 )
  198. self.Owner:ViewPunch( Angle( math.Rand( -3, 3 ) * self.Primary.Recoil, math.Rand( -3, 3 ) * self.Primary.Recoil, 0) )
  199.  
  200. -- Additional support for https://www.gmodstore.com/market/view/2791
  201. if nlre then
  202. nlre.clearLatestNLRSphere( victim )
  203. end
  204. end
  205. end
  206. else
  207. if SERVER then
  208. DarkRP.notify( self.Owner, 1, 5, CH_AdvMedic.Config.Lang["Your defibrillator is not fully charged!"][CH_AdvMedic.Config.Language] )
  209. end
  210. end
  211. end
  212.  
  213. function SWEP:SecondaryAttack()
  214. self.Weapon:SetNextPrimaryFire( CurTime() + CH_AdvMedic.Config.DefibrillatorDelay )
  215. self.Weapon:SetNextSecondaryFire( CurTime() + CH_AdvMedic.Config.DefibrillatorDelay )
  216.  
  217. if self.Weapon:GetNWInt( "DefibCharge" ) >= 100 then
  218. if SERVER then
  219. DarkRP.notify( self.Owner, 1, 5, CH_AdvMedic.Config.Lang["Your defibrillator is fully charged! It can be used to revive dead players now."][CH_AdvMedic.Config.Language] )
  220. end
  221. return
  222. end
  223.  
  224. self.Weapon:SendWeaponAnim( ACT_VM_SECONDARYATTACK )
  225. self.Weapon:UpdateDefibCharge( false )
  226.  
  227. timer.Simple( 1.2, function()
  228. if IsValid( self.Weapon ) and IsValid( self.Owner ) then
  229. if self.Owner:GetActiveWeapon():GetClass() == "defibrillator_advanced" then
  230. self.Weapon:SendWeaponAnim( ACT_IDLE )
  231. end
  232. end
  233. end )
  234. end
  235.  
  236. function SWEP:UpdateDefibCharge( should_reset )
  237. if SERVER then
  238. if should_reset then
  239. self.Weapon:SetNWInt( "DefibCharge", 0 )
  240. self.Weapon:SetSkin( 0 )
  241. return
  242. end
  243.  
  244. self.Weapon:SetNWInt( "DefibCharge", self.Weapon:GetNWInt( "DefibCharge" ) + 25 )
  245.  
  246. if self.Weapon:GetNWInt( "DefibCharge" ) == 25 then -- First level
  247. self.Owner:EmitSound( "buttons/blip1.wav", 100, 100 )
  248. self.Weapon:SetSkin( 1 )
  249. --self.Owner:ChatPrint( "You've charged your defibrillators to level 1" )
  250. elseif self.Weapon:GetNWInt( "DefibCharge" ) == 50 then -- Second level
  251. self.Owner:EmitSound( "buttons/blip1.wav", 100, 100 )
  252. self.Weapon:SetSkin( 2 )
  253. --self.Owner:ChatPrint( "You've charged your defibrillators to level 2" )
  254. elseif self.Weapon:GetNWInt( "DefibCharge" ) == 75 then -- Third level
  255. self.Owner:EmitSound( "buttons/blip1.wav", 100, 100 )
  256. self.Weapon:SetSkin( 3 )
  257. --self.Owner:ChatPrint( "You've charged your defibrillators to level 3" )
  258. elseif self.Weapon:GetNWInt( "DefibCharge" ) == 100 then -- Fourth level
  259. self.Owner:EmitSound( "buttons/blip1.wav", 100, 100 )
  260. self.Weapon:SetSkin( 4 )
  261. --self.Owner:ChatPrint( "You've charged your defibrillators to level 4" )
  262. end
  263. end
  264.  
  265. timer.Simple( 0.25, function()
  266. local vm = self.Owner:GetViewModel()
  267.  
  268. if should_reset then
  269. vm:SetSubMaterial( 1, nil )
  270. return
  271. end
  272.  
  273. if self.Weapon:GetNWInt( "DefibCharge" ) == 25 then -- First level
  274. vm:SetSubMaterial( 1, "models/craphead_scripts/paramedic_essentials/weapons/defib_scrn2" )
  275. elseif self.Weapon:GetNWInt( "DefibCharge" ) == 50 then -- Second level
  276. vm:SetSubMaterial( 1, "models/craphead_scripts/paramedic_essentials/weapons/defib_scrn3" )
  277. elseif self.Weapon:GetNWInt( "DefibCharge" ) == 75 then -- Third level
  278. vm:SetSubMaterial( 1, "models/craphead_scripts/paramedic_essentials/weapons/defib_scrn4" )
  279. elseif self.Weapon:GetNWInt( "DefibCharge" ) == 100 then -- Fourth level
  280. vm:SetSubMaterial( 1, "models/craphead_scripts/paramedic_essentials/weapons/defib_scrn5" )
  281. end
  282. end )
  283. end
  284.  
  285. local mat_crosshair = Material( "craphead_scripts/medic_ui/close.png" )
  286. local col_white = Color( 255, 255, 255, 255 )
  287.  
  288. function SWEP:DoDrawCrosshair( x, y )
  289. local size = 16
  290.  
  291. surface.SetDrawColor( col_white )
  292. surface.SetMaterial( mat_crosshair )
  293. surface.DrawTexturedRect( x, y, size, size )
  294. return true
  295. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement