Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- very old sleep module
- local KnockoutTime = 5
- local function ResetKnockouts(player)
- player.SleepRagdoll = nil
- player.KnockoutTimer = 0
- end
- hook.Add("PlayerSpawn", "Knockout", ResetKnockouts)
- local function stopSleep(ply)
- if ply.Sleeping then
- DarkRP.toggleSleep(ply, "force")
- end
- end
- local function onRagdollArrested(arrestee, _, arrester)
- DarkRP.toggleSleep(arrestee, "force")
- -- onArrestStickUsed
- local canArrest, message = hook.Call("canArrest", DarkRP.hooks, arrester, arrestee)
- if not canArrest then
- if message then DarkRP.notify(arrester, 1, 5, message) end
- return
- end
- arrestee:arrest(nil, arrester)
- DarkRP.notify(arrestee, 0, 20, DarkRP.getPhrase("youre_arrested_by", arrester:Nick()))
- if arrester.SteamName then
- DarkRP.log(arrester:Nick() .. " (" .. arrester:SteamID() .. ") arrested " .. arrestee:Nick(), Color(0, 255, 255))
- end
- end
- function DarkRP.toggleSleep(player, command)
- if player:InVehicle() then return end
- if not player.SleepSound then
- player.SleepSound = CreateSound(player, "npc/ichthyosaur/water_breath.wav")
- end
- local timerName = player:EntIndex() .. "SleepExploit"
- if not player:Alive() then
- DarkRP.notify(player, 1, 4, DarkRP.getPhrase("must_be_alive_to_do_x", "/sleep"))
- return ""
- end
- if (not player.KnockoutTimer or player.KnockoutTimer + KnockoutTime >= CurTime()) and command ~= "force" then
- DarkRP.notify(player, 1, 4, DarkRP.getPhrase("have_to_wait", math.ceil((player.KnockoutTimer + KnockoutTime) - CurTime()), "/sleep"))
- return ""
- end
- if player:IsFrozen() then
- DarkRP.notify(player, 1, 4, DarkRP.getPhrase("unable", "/sleep", DarkRP.getPhrase("frozen")))
- return ""
- end
- if player.Sleeping and IsValid(player.SleepRagdoll) then
- local frozen = player:IsFrozen()
- player.OldHunger = player:getDarkRPVar("Energy")
- player.SleepSound:Stop()
- local ragdoll = player.SleepRagdoll
- local health = player:Health()
- local armor = player:Armor()
- player:Spawn()
- player:SetHealth(health)
- player:setAlpha(0)
- player:SetArmor(armor)
- player:SetPos(ragdoll:GetPos())
- local model = ragdoll:GetModel()
- -- TEMPORARY WORKAROUND
- if string.lower(model) == "models/humans/corpse1.mdl" then
- model = "models/player/corpse1.mdl"
- end
- player:SetModel(model)
- player:SetAngles(Angle(0, ragdoll:GetPhysicsObjectNum(10) and ragdoll:GetPhysicsObjectNum(10):GetAngles().Yaw or 0, 0))
- player:UnSpectate()
- player:StripWeapons()
- ragdoll:Remove()
- ragdoll.OwnerINT = 0
- if player.WeaponsForSleep and player:GetTable().BeforeSleepTeam == player:Team() then
- for k,v in pairs(player.WeaponsForSleep) do
- local wep = player:Give(v[1])
- player:RemoveAllAmmo()
- player:SetAmmo(v[2], v[3], false)
- player:SetAmmo(v[4], v[5], false)
- wep:SetClip1(v[6])
- wep:SetClip2(v[7])
- end
- local cl_defaultweapon = player:GetInfo("cl_defaultweapon")
- if ( player:HasWeapon( cl_defaultweapon ) ) then
- player:SelectWeapon( cl_defaultweapon )
- end
- player:GetTable().BeforeSleepTeam = nil
- player.WeaponsForSleep = nil
- else
- gamemode.Call("PlayerLoadout", player)
- end
- if frozen then
- player:UnLock()
- player:Lock()
- end
- SendUserMessage("blackScreen", player, false)
- if command == true then
- player:arrest()
- end
- player.Sleeping = false
- if player:getDarkRPVar("Energy") then
- player:setSelfDarkRPVar("Energy", player.OldHunger)
- player.OldHunger = nil
- end
- if player:isArrested() then
- GAMEMODE:SetPlayerSpeed(player, GAMEMODE.Config.arrestspeed, GAMEMODE.Config.arrestspeed)
- end
- timer.Remove(timerName)
- elseif not player:IsFrozen() then
- if IsValid(player:GetObserverTarget()) then return "" end
- for k,v in pairs(ents.FindInSphere(player:GetPos(), 30)) do
- if v:GetClass() == "func_door" then
- DarkRP.notify(player, 1, 4, DarkRP.getPhrase("unable", "sleep", "func_door exploit"))
- return ""
- end
- end
- if not player:isArrested() then
- player.WeaponsForSleep = {}
- for k,v in pairs(player:GetWeapons()) do
- player.WeaponsForSleep[k] = {v:GetClass(), player:GetAmmoCount(v:GetPrimaryAmmoType()),
- v:GetPrimaryAmmoType(), player:GetAmmoCount(v:GetSecondaryAmmoType()), v:GetSecondaryAmmoType(),
- v:Clip1(), v:Clip2()}
- --[[{class, ammocount primary, type primary, ammo count secondary, type secondary, clip primary, clip secondary]]
- end
- end
- local ragdoll = ents.Create("prop_ragdoll")
- ragdoll:SetPos(player:GetPos())
- ragdoll:SetAngles(Angle(0,player:GetAngles().Yaw,0))
- local model = player:GetModel()
- -- TEMPORARY WORKAROUND
- if string.lower(model) == "models/player/corpse1.mdl" then
- model = "models/Humans/corpse1.mdl"
- end
- ragdoll:SetModel(model)
- ragdoll:Spawn()
- ragdoll:Activate()
- ragdoll:SetVelocity(player:GetVelocity())
- ragdoll.OwnerINT = player:EntIndex()
- ragdoll.PhysgunPickup = false
- ragdoll.CanTool = false
- ragdoll.onArrestStickUsed = fp{onRagdollArrested, player}
- player:StripWeapons()
- player:Spectate(OBS_MODE_CHASE)
- player:SpectateEntity(ragdoll)
- player.IsSleeping = true
- player.SleepRagdoll = ragdoll
- player.KnockoutTimer = CurTime()
- player:GetTable().BeforeSleepTeam = player:Team()
- --Make sure noone can pick it up:
- ragdoll:CPPISetOwner(player)
- SendUserMessage("blackScreen", player, true)
- player.SleepSound = CreateSound(ragdoll, "npc/ichthyosaur/water_breath.wav")
- player.SleepSound:PlayEx(0.10, 100)
- player.Sleeping = true
- timer.Create(timerName, 0.3, 0, function()
- if not IsValid(player) then timer.Remove(timerName) return end
- if player:GetObserverTarget() ~= ragdoll then
- if IsValid(ragdoll) then
- ragdoll:Remove()
- end
- stopSleep(player)
- player:setAlpha(255)
- player.SleepSound:Stop()
- end
- end)
- end
- return ""
- end
- DarkRP.defineChatCommand("sleep", DarkRP.toggleSleep)
- DarkRP.defineChatCommand("wake", DarkRP.toggleSleep)
- DarkRP.defineChatCommand("wakeup", DarkRP.toggleSleep)
- hook.Add("OnPlayerChangedTeam", "SleepMod", stopSleep)
- local function DamageSleepers(ent, dmginfo)
- end
- hook.Add("EntityTakeDamage", "Sleepdamage", DamageSleepers)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement