---Bits to help with transfering players. -- Transfers players between areas when they hit a art_serverchange zone --@server sv_mapstich.lua --Make sure zones are loaded already nrequire("sv_mysqlite.lua") if not nrequire("sh_zones.lua") then return end local q = nrequire("core/database/sv_queries.lua") local log = nrequire("log.lua") --if not zones then error("This thing needs zones to function!") end util.AddNetworkString("art_zonechange") util.AddNetworkString("art_sendtoserver") local dontupdatedisconnect = {} local function sqlerror(err,sql) log.error("Query error:\nQuery:",sql,"\nError:",err) end local function SavePlayerData(ply) local query local pdat = q.serialize_player(ply) if dontupdatedisconnect[ply] then dontupdatedisconnect[ply] = nil query = [[ UPDATE playerdata SET PlayerData='%s' WHERE SteamID=%.0f ]] query = q.s_fmt(query,pdat,ply:SteamID64()) else query = [[ UPDATE playerdata SET PlayerData='%s', MetaData='%s' WHERE SteamID=%.0f ]] local pmet = util.TableToJSON({ lastserver = game.GetIPAddress(), lastlocation = tostring(ply:GetPos()) }) query = q.s_fmt(query,pdat,pmet,ply:SteamID64()) end MySQLite.query(query,function(data) end,sqlerror) end ---Saves the player. -- Saves the player as if they had disconnected, or transfered to another level --@concommand artery_saveplayer --@usage artery_saveplayer concommand.Add("artery_saveplayer",function(ply,cmd,args) SavePlayerData(ply) end) net.Receive("art_zonechange",function(len,ply) timer.Simple(0.5,function() if not IsValid(ply) then return end local zone = ply:GetCurrentZone("artery_serverchange") if zone then dontupdatedisconnect[ply] = true local query = [[ UPDATE playerdata SET MetaData='%s' WHERE SteamID=%.0f ]] local pmet = util.TableToJSON({ lastserver = zone.toserver, lastlocation = tostring(zone.topos) }) local fquery = q.s_fmt(query,pmet,ply:SteamID64()) MySQLite.query(fquery,function(data) --Holy shit fuck garry for breaking this --ply:ConCommand("connect " .. zone.toserver) net.Start("art_sendtoserver") net.WriteString(zone.toserver) net.Send(ply) end,sqlerror) end end) end) hook.Add("PlayerDisconnected","save_data_on_disconnect",function(ply) SavePlayerData(ply) end)