1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
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)
|