mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
53 lines
1.7 KiB
Lua
53 lines
1.7 KiB
Lua
--[[
|
|
| This file was obtained through the combined efforts
|
|
| of Madbluntz & Plymouth Antiquarian Society.
|
|
|
|
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
|
|
| Maloy, DrPepper10 @ RIP, Atle!
|
|
|
|
|
| Visit for more: https://plymouth.thetwilightzone.ru/
|
|
--]]
|
|
|
|
PLUGIN.name = "Spawn Saver"
|
|
PLUGIN.author = "Chessnut"
|
|
PLUGIN.description = "Saves the position of a character."
|
|
|
|
-- Called right before the character has its information save.
|
|
function PLUGIN:CharacterPreSave(character)
|
|
-- Get the player from the character.
|
|
local client = character:GetPlayer()
|
|
|
|
-- Check to see if we can get the player's position.
|
|
if (IsValid(client)) then
|
|
local position, eyeAngles = client:GetPos(), client:EyeAngles()
|
|
-- Use pre-observer position to prevent spawning in the air.
|
|
if (client.ixObsData) then
|
|
position, eyeAngles = client.ixObsData[1], client.ixObsData[2]
|
|
end
|
|
-- Store the position in the character's data.
|
|
character:SetData("pos", {position, eyeAngles, game.GetMap()})
|
|
end
|
|
end
|
|
|
|
-- Called after the player's loadout has been set.
|
|
function PLUGIN:PlayerLoadedCharacter(client, character, lastChar)
|
|
timer.Simple(0, function()
|
|
if (IsValid(client)) then
|
|
-- Get the saved position from the character data.
|
|
local position = character:GetData("pos")
|
|
|
|
-- Check if the position was set.
|
|
if (position) then
|
|
if (position[3] and position[3]:lower() == game.GetMap():lower()) then
|
|
-- Restore the player to that position.
|
|
client:SetPos(position[1].x and position[1] or client:GetPos())
|
|
client:SetEyeAngles(position[2].p and position[2] or angle_zero)
|
|
end
|
|
|
|
-- Remove the position data since it is no longer needed.
|
|
character:SetData("pos", nil)
|
|
end
|
|
end
|
|
end)
|
|
end
|