diff options
Diffstat (limited to 'gamemode/server/sv_mapchange.lua')
| -rw-r--r-- | gamemode/server/sv_mapchange.lua | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/gamemode/server/sv_mapchange.lua b/gamemode/server/sv_mapchange.lua new file mode 100644 index 0000000..032a1bb --- /dev/null +++ b/gamemode/server/sv_mapchange.lua @@ -0,0 +1,111 @@ +--[[ + A script to move the player to a different map +]] +local mapname = game.GetMap() +local mapareasstr = file.Read("artery/maps/" .. mapname .. "/mapareas.txt") + +hook.Add("InitPostEntity", "LoadMapChangePoints", function() + local transfers = string.Explode("\r?\n\r?\n",mapareasstr,true) + local dontupdatedisconnect = {} + for k,v in pairs(transfers) do + local parts = string.Explode("\r?\n",v,true) + local vectortxt = string.Explode(" ",parts[1],false) + local svec = Vector(vectortxt[1],vectortxt[2],vectortxt[3]) + local name = parts[2] + local server = parts[3] + local model = parts[4] + local tvt = string.Explode(" ",parts[5],false) + + local sch = ents.Create("art_serverchanger") + sch.Model = model + sch.Pos = svec + sch.OnHit = function(self, coldata,collider) + print("Coldata") + PrintTable(coldata) + print("collider",collider) + if coldata.HitEntity:IsPlayer() then + dontupdatedisconnect[coldata.HitEntity] = true + local db = ART.database + local qc = table.concat({[[ + UPDATE artery.playerdata SET WorldPosition="]], + tvt[1]," ", + tvt[2]," ", + tvt[3]," ", + [[" WHERE SteamID="]], + coldata.HitEntity:SteamID64(), + '"'}) + print("Running query:",qc) + local q = db:query(qc) + function q:onSuccess(data) + print("Got data from update:") + PrintTable(data) + coldata.HitEntity:ConCommand("connect " .. server) + end + function q:onError(err,sql) + print("Query error:") + print("Query",sql) + print("Error",err) + end + q:start() + end + end + sch:Spawn() + print("Loading mapchange area",svec) + end +end) + +hook.Add("PlayerDisconnected","SavePlayerData",function(ply) + local qc + if dontupdatedisconnect[ply] then + dontupdatedisconnect[ply] = nil + qc = table.concat({ + [[UPDATE artery.playerdata SET + Inventory="]], + util.TableToJSON(ply.Inventory), + [[", + Skills="]], + util.TableToJSON(ply.Skills), + [[", + Quests="]], + util.TableToJSON(ply.Quests), + [[" + WHERE SteamID = "]], + ply:SteamID64(), + [[";]] + }) + else + local pp = ply:GetPos() + qc = table.concat({ + [[UPDATE artery.playerdata SET + Inventory="]], + util.TableToJSON(ply.Inventory), + [[", + Skills="]], + util.TableToJSON(ply.Skills), + [[", + Quests="]], + util.TableToJSON(ply.Quests), + [[", + WorldPosition="]], + pp[1]," ",pp[2]," ",pp[3], + [[", + World="]], + game.GetIPAddress(), + [[" + WHERE SteamID = "]], + ply:SteamID64(), + [[";]] + }) + end + local q = ART.database:query(qc) + function q:onSuccess(data) + print("Saveing player data successful") + PrintTable(data) + end + function q:onError(err, sql) + print("Saveing player data errored!") + print("Query",sql) + error(err) + end + q:start() +end) |
