Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.08 KB | None | 0 0
  1. -- very old sleep module
  2. local KnockoutTime = 5
  3.  
  4. local function ResetKnockouts(player)
  5. player.SleepRagdoll = nil
  6. player.KnockoutTimer = 0
  7. end
  8. hook.Add("PlayerSpawn", "Knockout", ResetKnockouts)
  9.  
  10. local function stopSleep(ply)
  11. if ply.Sleeping then
  12. DarkRP.toggleSleep(ply, "force")
  13. end
  14. end
  15.  
  16. local function onRagdollArrested(arrestee, _, arrester)
  17. DarkRP.toggleSleep(arrestee, "force")
  18.  
  19. -- onArrestStickUsed
  20. local canArrest, message = hook.Call("canArrest", DarkRP.hooks, arrester, arrestee)
  21. if not canArrest then
  22. if message then DarkRP.notify(arrester, 1, 5, message) end
  23. return
  24. end
  25.  
  26. arrestee:arrest(nil, arrester)
  27.  
  28. DarkRP.notify(arrestee, 0, 20, DarkRP.getPhrase("youre_arrested_by", arrester:Nick()))
  29.  
  30. if arrester.SteamName then
  31. DarkRP.log(arrester:Nick() .. " (" .. arrester:SteamID() .. ") arrested " .. arrestee:Nick(), Color(0, 255, 255))
  32. end
  33. end
  34.  
  35. function DarkRP.toggleSleep(player, command)
  36. if player:InVehicle() then return end
  37.  
  38. if not player.SleepSound then
  39. player.SleepSound = CreateSound(player, "npc/ichthyosaur/water_breath.wav")
  40. end
  41. local timerName = player:EntIndex() .. "SleepExploit"
  42.  
  43. if not player:Alive() then
  44. DarkRP.notify(player, 1, 4, DarkRP.getPhrase("must_be_alive_to_do_x", "/sleep"))
  45. return ""
  46. end
  47.  
  48. if (not player.KnockoutTimer or player.KnockoutTimer + KnockoutTime >= CurTime()) and command ~= "force" then
  49. DarkRP.notify(player, 1, 4, DarkRP.getPhrase("have_to_wait", math.ceil((player.KnockoutTimer + KnockoutTime) - CurTime()), "/sleep"))
  50. return ""
  51. end
  52.  
  53. if player:IsFrozen() then
  54. DarkRP.notify(player, 1, 4, DarkRP.getPhrase("unable", "/sleep", DarkRP.getPhrase("frozen")))
  55. return ""
  56. end
  57.  
  58. if player.Sleeping and IsValid(player.SleepRagdoll) then
  59. local frozen = player:IsFrozen()
  60. player.OldHunger = player:getDarkRPVar("Energy")
  61. player.SleepSound:Stop()
  62. local ragdoll = player.SleepRagdoll
  63. local health = player:Health()
  64. local armor = player:Armor()
  65. player:Spawn()
  66. player:SetHealth(health)
  67. player:setAlpha(0)
  68. player:SetArmor(armor)
  69. player:SetPos(ragdoll:GetPos())
  70. local model = ragdoll:GetModel()
  71. -- TEMPORARY WORKAROUND
  72. if string.lower(model) == "models/humans/corpse1.mdl" then
  73. model = "models/player/corpse1.mdl"
  74. end
  75. player:SetModel(model)
  76. player:SetAngles(Angle(0, ragdoll:GetPhysicsObjectNum(10) and ragdoll:GetPhysicsObjectNum(10):GetAngles().Yaw or 0, 0))
  77. player:UnSpectate()
  78. player:StripWeapons()
  79. ragdoll:Remove()
  80. ragdoll.OwnerINT = 0
  81. if player.WeaponsForSleep and player:GetTable().BeforeSleepTeam == player:Team() then
  82. for k,v in pairs(player.WeaponsForSleep) do
  83. local wep = player:Give(v[1])
  84. player:RemoveAllAmmo()
  85. player:SetAmmo(v[2], v[3], false)
  86. player:SetAmmo(v[4], v[5], false)
  87.  
  88. wep:SetClip1(v[6])
  89. wep:SetClip2(v[7])
  90.  
  91. end
  92. local cl_defaultweapon = player:GetInfo("cl_defaultweapon")
  93. if ( player:HasWeapon( cl_defaultweapon ) ) then
  94. player:SelectWeapon( cl_defaultweapon )
  95. end
  96. player:GetTable().BeforeSleepTeam = nil
  97. player.WeaponsForSleep = nil
  98. else
  99. gamemode.Call("PlayerLoadout", player)
  100. end
  101.  
  102. if frozen then
  103. player:UnLock()
  104. player:Lock()
  105. end
  106.  
  107. SendUserMessage("blackScreen", player, false)
  108.  
  109. if command == true then
  110. player:arrest()
  111. end
  112. player.Sleeping = false
  113. if player:getDarkRPVar("Energy") then
  114. player:setSelfDarkRPVar("Energy", player.OldHunger)
  115. player.OldHunger = nil
  116. end
  117.  
  118. if player:isArrested() then
  119. GAMEMODE:SetPlayerSpeed(player, GAMEMODE.Config.arrestspeed, GAMEMODE.Config.arrestspeed)
  120. end
  121. timer.Remove(timerName)
  122. elseif not player:IsFrozen() then
  123. if IsValid(player:GetObserverTarget()) then return "" end
  124. for k,v in pairs(ents.FindInSphere(player:GetPos(), 30)) do
  125. if v:GetClass() == "func_door" then
  126. DarkRP.notify(player, 1, 4, DarkRP.getPhrase("unable", "sleep", "func_door exploit"))
  127. return ""
  128. end
  129. end
  130.  
  131. if not player:isArrested() then
  132. player.WeaponsForSleep = {}
  133. for k,v in pairs(player:GetWeapons()) do
  134. player.WeaponsForSleep[k] = {v:GetClass(), player:GetAmmoCount(v:GetPrimaryAmmoType()),
  135. v:GetPrimaryAmmoType(), player:GetAmmoCount(v:GetSecondaryAmmoType()), v:GetSecondaryAmmoType(),
  136. v:Clip1(), v:Clip2()}
  137. --[[{class, ammocount primary, type primary, ammo count secondary, type secondary, clip primary, clip secondary]]
  138. end
  139. end
  140. local ragdoll = ents.Create("prop_ragdoll")
  141. ragdoll:SetPos(player:GetPos())
  142. ragdoll:SetAngles(Angle(0,player:GetAngles().Yaw,0))
  143. local model = player:GetModel()
  144. -- TEMPORARY WORKAROUND
  145. if string.lower(model) == "models/player/corpse1.mdl" then
  146. model = "models/Humans/corpse1.mdl"
  147. end
  148. ragdoll:SetModel(model)
  149. ragdoll:Spawn()
  150. ragdoll:Activate()
  151. ragdoll:SetVelocity(player:GetVelocity())
  152. ragdoll.OwnerINT = player:EntIndex()
  153. ragdoll.PhysgunPickup = false
  154. ragdoll.CanTool = false
  155. ragdoll.onArrestStickUsed = fp{onRagdollArrested, player}
  156. player:StripWeapons()
  157. player:Spectate(OBS_MODE_CHASE)
  158. player:SpectateEntity(ragdoll)
  159. player.IsSleeping = true
  160. player.SleepRagdoll = ragdoll
  161. player.KnockoutTimer = CurTime()
  162. player:GetTable().BeforeSleepTeam = player:Team()
  163. --Make sure noone can pick it up:
  164. ragdoll:CPPISetOwner(player)
  165.  
  166. SendUserMessage("blackScreen", player, true)
  167.  
  168. player.SleepSound = CreateSound(ragdoll, "npc/ichthyosaur/water_breath.wav")
  169. player.SleepSound:PlayEx(0.10, 100)
  170. player.Sleeping = true
  171.  
  172. timer.Create(timerName, 0.3, 0, function()
  173. if not IsValid(player) then timer.Remove(timerName) return end
  174.  
  175. if player:GetObserverTarget() ~= ragdoll then
  176. if IsValid(ragdoll) then
  177. ragdoll:Remove()
  178. end
  179. stopSleep(player)
  180. player:setAlpha(255)
  181. player.SleepSound:Stop()
  182. end
  183. end)
  184. end
  185.  
  186. return ""
  187. end
  188. DarkRP.defineChatCommand("sleep", DarkRP.toggleSleep)
  189. DarkRP.defineChatCommand("wake", DarkRP.toggleSleep)
  190. DarkRP.defineChatCommand("wakeup", DarkRP.toggleSleep)
  191.  
  192. hook.Add("OnPlayerChangedTeam", "SleepMod", stopSleep)
  193.  
  194.  
  195. local function DamageSleepers(ent, dmginfo)
  196.  
  197. end
  198. hook.Add("EntityTakeDamage", "Sleepdamage", DamageSleepers)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement