Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- util.AddNetworkString("Playersaving_AdminMenu_Open")
- util.AddNetworkString("Playersaving_AdminMenu_Change")
- local Playersaving = {}
- Playersaving.MySQL = {}
- Playersaving.Lang = {}
- Playersaving.RestrictedJobs_Weapons = {}
- /* -------------------------------------------------
- --- MYSQL CONFIG -----------------------------------
- --------------------------------------------------*/
- Playersaving.MySQL.Active = false -- Should Playersaving use MySQL?
- Playersaving.MySQL.Host = ""
- Playersaving.MySQL.User = ""
- Playersaving.MySQL.Pass = ""
- Playersaving.MySQL.DB = ""
- Playersaving.MySQL.Port = 3306
- /* -------------------------------------------------
- --- INGAME CONFIG SETTINGS -------------------------
- --------------------------------------------------*/
- Playersaving.Config_CMD = "!psconfig"
- Playersaving.Config_Ranks = { -- Ranks that can access the Ingame-Config
- "superadmin",
- "admin"
- }
- /* -------------------------------------------------
- --- STANDART CONFIG --------------------------------
- --- (ONLY TO HAVE VALUES AT STARTUP) ---------------
- --- DONT EDIT! IT WILL NOT AFFECT ANYTHING ---------
- --------------------------------------------------*/
- Playersaving.BlacklistedWeps = { -- Generally blacklisted Weapons
- "weapon_policebaton",
- "weaponchecker",
- "door_ram",
- "arrest_stick",
- "stunstick",
- "unarrest_stick",
- "weaponchecker",
- }
- Playersaving.BlacklistedJobs = { -- Generally blacklisted Jobs
- "Admin",
- }
- Playersaving.RestrictedJobs_Weapons["weapon_glock2"] = {"Civil Protection","Mayor"} -- blacklisted weapons if the player is in a specified job
- Playersaving.AutosaveActive = true
- Playersaving.AutosaveTime = 300 -- Time Automatic save
- Playersaving.SaveCommandActive = true
- Playersaving.SaveCommandTime = 60 -- Wait time - Manual save
- Playersaving.SaveCommand = "!save" -- Command to save manually
- Playersaving.SaveOnDisconnect = true
- Playersaving.SaveOnlyGroups = false -- Should only specified groups be saved
- Playersaving.SaveGroups = {"superadmin","admin"} -- Groups that will be saved (Only if Playersaving.SaveOnlyGroups is true)
- Playersaving.SaveHealth = true -- Players Health
- Playersaving.SaveArmor = true -- Players Armor
- Playersaving.SavePos = true -- Players position
- Playersaving.SaveWeapons = true -- Weapons that are not blacklisted
- Playersaving.SaveAmmo = true -- Players Weapon Ammo
- Playersaving.SaveHunger = false -- DarkRP FOOD MOD
- Playersaving.Lang = "EN" -- EN OR DE
- /* -------------------------------------------------
- --- LANG CONFIG ------------------------------------
- --------------------------------------------------*/
- local l = {}
- function Playersaving.LoadLang ()
- if Playersaving.Lang == "EN" then
- l.Saved = "Your character has been saved!"
- l.Loaded = "Your character has been loaded!"
- l.Cant = "You cant save yet! You need to wait %seconds% seconds!"
- l.Cant2 = "You cant save! Invalid Group/Team"
- end
- if Playersaving.Lang == "DE" then
- l.Saved = "Dein Charakter wurde gespeichert!"
- l.Loaded = "Dein Charakter wurde geladen!"
- l.Cant = "Du kannst noch nicht speichern! Du musst noch %seconds% Sekunden warten!"
- l.Cant2 = "Du kannst nicht speichern! Falsche Gruppe/Team"
- end
- Playersaving.LangText = l
- local l = Playersaving.LangText
- end
- /* -------------------------------------------------
- --- CODE -------------------------------------------
- --------------------------------------------------*/
- -- SETUP / LOADING
- function Playersaving.Load()
- Playersaving.SetupMySQLite()
- end
- function Playersaving.SetupMySQLite ()
- local query = [[CREATE TABLE IF NOT EXISTS playersaving_data (steamID64 TEXT, weapons TEXT, ammo TEXT, health TEXT, armor TEXT, food TEXT, posX TEXT, posY TEXT, posZ TEXT, map TEXT );
- CREATE TABLE IF NOT EXISTS playersaving_settings (BlacklistedWeps TEXT, BlacklistedJobs TEXT, BlacklistedWeps_Jobs TEXT, AutosaveActive TEXT, AutosaveTime TEXT, SaveCommandActive TEXT, SaveCommandTime TEXT, SaveCommand TEXT, SaveOnDisconnect TEXT, SaveOnlyGroups TEXT, SaveGroups TEXT, Lang TEXT, SaveHealth TEXT, SaveArmor TEXT, SavePos TEXT, SaveWeapons TEXT, SaveAmmo TEXT, SaveHunger TEXT );
- SELECT * FROM playersaving_settings;]]
- if Playersaving.MySQL.Active then
- Playersaving.MySQL.Database:Query ( query )
- else
- sql.Query( query )
- end
- Playersaving.RetrieveSettings()
- end
- function Playersaving.RetrieveSettings ()
- local query = "SELECT * FROM playersaving_settings;"
- if Playersaving.MySQL.Active then
- Playersaving.MySQL.Database:Query ( query, function ( res, err )
- if res and res[1] and res[1]["data"] and res[1]["data"][1] then
- Playersaving.LoadSettings(res[1]["data"][1])
- else
- RunConsoleCommand("playersaving_setup")
- timer.Simple(1,Playersaving.RetrieveSettings)
- end
- end)
- else
- local res = sql.Query( query )
- if res and res[1] then
- Playersaving.LoadSettings(res[1])
- else
- RunConsoleCommand("playersaving_setup")
- timer.Simple(1,Playersaving.RetrieveSettings)
- end
- end
- end
- function Playersaving.LoadSettings( tbl )
- Playersaving.BlacklistedWeps = util.JSONToTable(tbl["BlacklistedWeps"])
- Playersaving.BlacklistedJobs = util.JSONToTable(tbl["BlacklistedJobs"])
- Playersaving.RestrictedJobs_Weapons = util.JSONToTable(tbl["BlacklistedWeps_Jobs"])
- Playersaving.AutosaveActive = tobool(tbl["AutosaveActive"])
- Playersaving.AutosaveTime = tonumber(tbl["AutosaveTime"])
- Playersaving.SaveCommandActive = tobool(tbl["SaveCommandActive"])
- Playersaving.SaveCommandTime = tonumber(tbl["SaveCommandTime"])
- Playersaving.SaveCommand = tbl["SaveCommand"]
- Playersaving.SaveOnDisconnect = tobool(tbl["SaveOnDisconnect"])
- Playersaving.SaveOnlyGroups = tobool(tbl["SaveOnlyGroups"])
- Playersaving.SaveGroups = util.JSONToTable(tbl["SaveGroups"])
- Playersaving.SaveHealth = tobool(tbl["SaveHealth"])
- Playersaving.SaveArmor = tobool(tbl["SaveArmor"])
- Playersaving.SavePos = tobool(tbl["SavePos"])
- Playersaving.SaveWeapons = tobool(tbl["SaveWeapons"])
- Playersaving.SaveAmmo = tobool(tbl["SaveAmmo"])
- Playersaving.SaveHunger = tobool(tbl["SaveHunger"])
- Playersaving.Lang = tbl["Lang"]
- for k,v in pairs(player.GetAll()) do
- v.Playersaving_CanSave = true
- if timer.Exists(v:SteamID64().."_Playersaving_Timer") then timer.Remove(v:SteamID64().."_Playersaving_Timer") end
- if timer.Exists("Playersaving_CanSave_Timer_"..v:SteamID64()) then timer.Remove("Playersaving_CanSave_Timer_"..v:SteamID64()) end
- if Playersaving.AutosaveActive then
- timer.Create(v:SteamID64().."_Playersaving_Timer",Playersaving.AutosaveTime,0,function ()
- Playersaving.Save ( v )
- end)
- end
- end
- Playersaving.LoadLang ()
- end
- if Playersaving.MySQL.Active then
- require("tmysql4")
- Playersaving.MySQL.Database, error = tmysql.Connect(Playersaving.MySQL.Host, Playersaving.MySQL.User, Playersaving.MySQL.Pass, Playersaving.MySQL.DB, Playersaving.MySQL.Port, nil, CLIENT_MULTI_STATEMENTS)
- if error then print(error) end
- end
- -- ACTUAL CODE
- function Playersaving.Save ( ply )
- if (Playersaving.SaveOnlyGroups and !table.HasValue(Playersaving.SaveGroups,ply:GetUserGroup())) or table.HasValue(Playersaving.BlacklistedJobs,team.GetName(ply:Team())) then ply:ChatPrint(l.Cant2) return end
- ply.Playersaving = {}
- ply.Playersaving.Weps = {}
- ply.Playersaving.BlacklistedWeps = {}
- for _,v in pairs(ply:GetWeapons()) do
- for k,b in pairs(Playersaving.RestrictedJobs_Weapons) do
- if k == v:GetClass() and table.HasValue(b,ply:getJobTable()["name"]) then
- table.insert(ply.Playersaving.BlacklistedWeps,k)
- end
- end
- end
- for k,v in pairs(ply:GetWeapons()) do
- if !table.HasValue(ply.Playersaving.BlacklistedWeps,v:GetClass()) and !table.HasValue(Playersaving.BlacklistedWeps,v:GetClass()) then
- table.insert(ply.Playersaving.Weps,v:GetClass())
- end
- end
- ply.Playersaving.Weps = string.Implode(";",ply.Playersaving.Weps)
- ply.Playersaving.Ammo = {}
- for k,v in pairs(ply:GetWeapons()) do
- if ply:GetAmmoCount( v:GetPrimaryAmmoType() ) > 0 and !table.HasValue( ply.Playersaving.Ammo,ply:GetAmmoCount( v:GetPrimaryAmmoType() ).."*"..v:GetPrimaryAmmoType() ) then
- table.insert( ply.Playersaving.Ammo,ply:GetAmmoCount( v:GetPrimaryAmmoType() ).."*"..v:GetPrimaryAmmoType() )
- end
- end
- local pos = ply:GetPos()
- ply.Playersaving.posX = pos[1]
- ply.Playersaving.posY = pos[2]
- ply.Playersaving.posZ = pos[3]
- local food
- if gmod.GetGamemode().Name == "darkrp" and ply:getDarkRPVar("Energy") then
- food = ply:getDarkRPVar("Energy")
- else
- food = 100
- end
- local query = "DELETE FROM playersaving_data WHERE steamID64 = '"..ply:SteamID64().."'; INSERT INTO playersaving_data (steamID64, weapons, ammo, health, armor, food, posX, posY, posZ, map) VALUES ('"..ply:SteamID64().."','"..ply.Playersaving.Weps.."','"..string.Implode(";", ply.Playersaving.Ammo ).."','"..ply:Health().."','"..ply:Armor().."','"..food.."','"..ply.Playersaving.posX.."','"..ply.Playersaving.posY.."','"..ply.Playersaving.posZ.."','"..game.GetMap().."');"
- if Playersaving.MySQL.Active then
- Playersaving.MySQL.Database:Query ( query )
- else
- sql.Query( query )
- end
- ply:ChatPrint(l.Saved)
- end
- function Playersaving.LoadPlayer ( ply )
- local function load ( result )
- print("Playersaving")
- PrintTable(result)
- if !result then return end
- ply.Playersaving = {}
- if Playersaving.SaveHealth then
- ply:SetHealth( tonumber( result["health"] ) )
- end
- if Playersaving.SaveArmor then
- ply:SetArmor( tonumber( result["armor"] ) )
- end
- if Playersaving.SaveWeapons then
- for k,v in pairs( string.Explode(";",result["weapons"]) ) do
- ply:Give( v )
- end
- end
- if Playersaving.SaveAmmo and string.find(result["ammo"],"*") then
- for k,v in pairs( string.Explode(";",result["ammo"]) ) do
- ply:SetAmmo( tonumber( string.Explode("*",v)[1] ), tonumber( string.Explode("*",v)[2] ) )
- end
- end
- if Playersaving.SavePos then
- if result["map"] == game.GetMap() then
- ply:SetPos(Vector(tonumber(result["posX"]),tonumber(result["posY"]),tonumber(result["posZ"])))
- end
- end
- if Playersaving.SaveFood then
- ply:setDarkRPVar("Energy", result["food"])
- end
- ply:ChatPrint(l.Loaded)
- end
- local query = "SELECT * FROM playersaving_data WHERE steamID64 = '"..ply:SteamID64().."';"
- if Playersaving.MySQL.Active then
- Playersaving.MySQL.Database:Query ( query, function( res ) if res and res[1] and res[1]["data"] and res[1]["data"][1] then load(res[1]["data"][1]) end end)
- else
- local res = sql.Query( query )
- if res and res[1] then
- load( res[1] )
- end
- end
- end
- function Playersaving.LoadPlayerSpawnFrom ( ply )
- local function load ( result )
- print("Playersaving")
- PrintTable(result)
- if !result then return end
- ply.Playersaving = {}
- if Playersaving.SaveWeapons then
- for k,v in pairs( string.Explode(";",result["weapons"]) ) do
- ply:Give( v )
- end
- end
- if Playersaving.SaveAmmo and string.find(result["ammo"],"*") then
- for k,v in pairs( string.Explode(";",result["ammo"]) ) do
- ply:SetAmmo( tonumber( string.Explode("*",v)[1] ), tonumber( string.Explode("*",v)[2] ) )
- end
- end
- end
- local query = "SELECT * FROM playersaving_data WHERE steamID64 = '"..ply:SteamID64().."';"
- if Playersaving.MySQL.Active then
- Playersaving.MySQL.Database:Query ( query, function( res ) if res and res[1] and res[1]["data"] and res[1]["data"][1] then load(res[1]["data"][1]) end end)
- else
- local res = sql.Query( query )
- if res and res[1] then
- load( res[1] )
- end
- end
- end
- function Playersaving.Delete ( ply )
- local query = "DELETE FROM playersaving_data WHERE steamID64 = '"..ply:SteamID64().."';"
- if Playersaving.MySQL.Active then
- Playersaving.MySQL.Database:Query ( query )
- sql.Query( query )
- else
- sql.Query( query )
- end
- end
- concommand.Add("playersaving_saveall",function ( ply )
- if !ply:IsPlayer() or ply:IsSuperAdmin() then
- for k,v in pairs( player.GetAll() ) do
- Playersaving.Save ( v )
- end
- end
- end)
- concommand.Add("playersaving_setup",function ( ply )
- if !ply:IsPlayer() or ply:IsSuperAdmin() then
- local query = "INSERT INTO playersaving_settings (BlacklistedWeps, BlacklistedJobs, BlacklistedWeps_Jobs, AutosaveActive, AutosaveTime, SaveCommandActive, SaveCommandTime, SaveCommand, SaveOnDisconnect, SaveOnlyGroups, SaveGroups, Lang, SaveHealth, SaveArmor, SavePos, SaveWeapons, SaveAmmo, SaveHunger) VALUES ('"..util.TableToJSON( Playersaving.BlacklistedWeps ).."', '"..util.TableToJSON( Playersaving.BlacklistedJobs ).."', '"..util.TableToJSON( Playersaving.RestrictedJobs_Weapons ).."', '"..tostring(Playersaving.AutosaveActive).."', '"..tostring(Playersaving.AutosaveTime).."', '"..tostring(Playersaving.SaveCommandActive).."', '"..tostring(Playersaving.SaveCommandTime).."', '"..Playersaving.SaveCommand.."', '"..tostring(Playersaving.SaveOnDisconnect).."', '"..tostring(Playersaving.SaveOnlyGroups).."', '"..util.TableToJSON( Playersaving.SaveGroups ).."', '"..Playersaving.Lang.."', '"..tostring(Playersaving.SaveHealth).."', '"..tostring(Playersaving.SaveArmor).."', '"..tostring(Playersaving.SavePos).."', '"..tostring(Playersaving.SaveWeapons).."', '"..tostring(Playersaving.SaveAmmo).."', '"..tostring(Playersaving.SaveHunger).."');"
- if Playersaving.MySQL.Active then
- Playersaving.MySQL.Database:Query ( query )
- else
- sql.Query( query )
- end
- end
- end)
- hook.Add("PlayerInitialSpawn","Playersaving_InitialSpawn",function( ply )
- ply.Playersaving_CanSave = true
- if Playersaving.AutosaveActive then
- timer.Create(ply:SteamID64().."_Playersaving_Timer",Playersaving.AutosaveTime,0,function ()
- Playersaving.Save ( ply )
- end)
- end
- timer.Simple(1,function()
- Playersaving.LoadPlayer ( ply )
- end)
- end)
- hook.Add("PlayerSpawn","Playersaving_Spawn",function( ply )
- timer.Simple(6,function()
- Playersaving.LoadPlayer ( ply )
- end)
- end)
- hook.Add("PlayerDisconnected","Playersaving_Disconnect",function ( ply )
- if timer.Exists(ply:SteamID64().."_Playersaving_Timer") then timer.Remove(ply:SteamID64().."_Playersaving_Timer") end
- if timer.Exists("Playersaving_CanSave_Timer_"..ply:SteamID64()) then timer.Remove("Playersaving_CanSave_Timer_"..ply:SteamID64()) end
- if Playersaving.SaveOnDisconnect then Playersaving.Save ( ply ) end
- end)
- hook.Add("PlayerDeath","Playersaving_Death",Playersaving.Delete)
- if Playersaving.SaveCommandActive then
- hook.Add("PlayerSay","Playersaving_SaveCMD",function( ply, text )
- if text == Playersaving.SaveCommand then
- if ply.Playersaving_CanSave then
- ply.Playersaving_CanSave = false
- timer.Create("Playersaving_CanSave_Timer_"..ply:SteamID64(),Playersaving.SaveCommandTime,0,function() ply.Playersaving_CanSave = true end)
- Playersaving.Save ( ply )
- else
- ply:ChatPrint(string.Replace(l.Cant,"%seconds%",tostring(math.Round(timer.TimeLeft("Playersaving_CanSave_Timer_"..ply:SteamID64()),0))))
- end
- return ""
- end
- end)
- end
- hook.Add("PlayerSay","Playersaving_AdminMenuOPEN",function( ply, text )
- if text == Playersaving.Config_CMD then
- if !table.HasValue(Playersaving.Config_Ranks, ply:GetUserGroup()) then return end
- local query = "SELECT * FROM playersaving_settings;"
- if Playersaving.MySQL.Active then
- Playersaving.MySQL.Database:Query ( query, function( res ) net.Start("Playersaving_AdminMenu_Open") net.WriteTable(res[1]["data"][1]) net.Send(ply) end)
- else
- net.Start("Playersaving_AdminMenu_Open") net.WriteTable(sql.Query( query )[1]) net.Send(ply)
- end
- return ""
- end
- end)
- net.Receive("Playersaving_AdminMenu_Change",function( _, ply )
- if !table.HasValue(Playersaving.Config_Ranks, ply:GetUserGroup()) then return end
- local t = net.ReadTable()
- local query = "DELETE FROM playersaving_settings; INSERT INTO playersaving_settings (BlacklistedWeps, BlacklistedJobs, BlacklistedWeps_Jobs, AutosaveActive, AutosaveTime, SaveCommandActive, SaveCommandTime, SaveCommand, SaveOnDisconnect, SaveOnlyGroups, SaveGroups, Lang, SaveHealth, SaveArmor, SavePos, SaveWeapons, SaveAmmo, SaveHunger) VALUES ('"..t['BlacklistedWeps'].."', '"..t['BlacklistedJobs'].."', '"..t['BlacklistedWeps_Jobs'].."', '"..t['AutosaveActive'].."', '"..t['AutosaveTime'].."', '"..t['SaveCommandActive'].."', '"..t['SaveCommandTime'].."', '"..t['SaveCommand'].."', '"..t['SaveOnDisconnect'].."', '"..t['SaveOnlyGroups'].."', '"..t['SaveGroups'].."', '"..t['Lang'].."', '"..t['SaveHealth'].."', '"..t['SaveArmor'].."', '"..t['SavePos'].."', '"..t['SaveWeapons'].."', '"..t['SaveAmmo'].."', '"..t['SaveHunger'].."');"
- if Playersaving.MySQL.Active then
- Playersaving.MySQL.Database:Query ( query, Playersaving.RetrieveSettings)
- else
- sql.Query( query )
- Playersaving.RetrieveSettings()
- end
- end)
- Playersaving.Load()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement