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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
--Adds the MySQLite global
nrequire("sv_mysqlite.lua")
local config = nrequire("config/sv_sql.lua")
local data = nrequire("config/sv_newplayer.lua")
local col = nrequire("config/colortheme.lua")
local q = nrequire("core/database/sv_queries.lua")
local sql = {}
--Setup the database if it's not already
local setup_db = [[
CREATE TABLE IF NOT EXISTS playerdata(SteamID bigint primary key, PlayerData TEXT, MetaData TEXT)]]
--Create a new player
local create_player_query = [[
INSERT INTO playerdata (`SteamID`,`PlayerData`,`MetaData`) VALUES(%.0f,'%s','%s')]]
--Get a player's data from the database
local fetch_player_query = [[
SELECT PlayerData, MetaData FROM playerdata WHERE SteamID=%.0f
]]
local save_player_query = [[
UPDATE playerdata SET MetaData='%s' PlayerData='%s' WHERE SteamID=%.0f
]]
local function q_fai(err,query)
MsgC(col.console.red,string.format("Error executing %s, error:%s",query,err))
end
local function connect()
--print("Connecting to the database...")
MySQLite.initialize(config)
end
hook.Add("DatabaseInitialized","setup_table",function()
assert(MySQLite.isMySQL(),"Database wasn't mysqloo, something is probably wrong!")
local setup_success = function(res,li)
--print("Set up connection to db")
end
--print("Setup query:",setup_db)
MySQLite.query(setup_db,setup_success,q_fai)
end)
hook.Add("Initialize","initalizedbconnection",function()
connect()
end)
--Retruns (PlayerData, MetaData) or nil
function sql.GetPlayerData(ply)
local s64 = ply:SteamID64()
local q_str = q.s_fmt(fetch_player_query,s64)
local q_suc = function(res,li)
print("Got player's data:",res,type(res))
if res == nil then
print("Was nil, createing player data")
sql.CreatePlayerTable(ply)
else
assert(#res == 1,"Not unique!")
local meta = res[1].MetaData
local plyd = res[1].PlayerData
local mtbl = util.JSONToTable(meta)
print("About to check if we are on the right server")
if mtbl.lastserver ~= game.GetIPAddress() then
print("Connecting player to ", mtbl.lastserver, " was on ", game.GetIPAddress())
ply:ConCommand("connect " .. mtbl.lastserver)
return
end
ply:SetPos(mtbl.lastlocation)
q.deserialize_player(ply,plyd)
end
end
--print("doing query",q_str)
MySQLite.query(q_str,q_suc,q_fai)
end
concommand.Add("artery_loadplayer",function(ply,cmd,args)
if not ply:IsAdmin() then return end
sql.GetPlayerData(ply)
end)
function sql.CreatePlayerTable(ply)
--print("Createing player table....")
local s64 = ply:SteamID64()
--print("steamid was", s64)
local plytbl = data.newdata()
local plymet = data.newmeta()
local plydata = util.TableToJSON(plytbl)
local metdata = util.TableToJSON(plymet)
local q_str = q.s_fmt(create_player_query,s64,plydata,metdata)
local q_suc = function(res,li)
--print("Inserted new player",ply)
sql.GetPlayerData(ply)
end
--print("doing query", q_str)
MySQLite.query(q_str,q_suc,q_fai)
end
function sql.SendPlayerToInstance(ply,ls,ll)
local s64 = ply:SteamID64()
local plydata = q.serialize_player(ply)
local plymeta = util.TableToJSON({
lastserver = ls,
lastlocation = ll
})
local q_str = q.s_fmt(save_player_query,plymeta,plydata,s64)
local q_suc = function(res,li)
--print("Successfully saved player data")
end
MySQLite.query(q_str,q_suc,q_fai)
end
concommand.Add("DoQuery",function(ply,cmd,args)
if not ply:IsAdmin() then return end
if args[1] == "create" then
sql.CreatePlayerTable(ply)
elseif args[1] == "get" then
sql.GetPlayerData(ply)
elseif args[1] == "send" then
sql.SendPlayerToInstance(ply,args[2],args[3])
else
error("Command not understood:" .. args[1] .. "!")
end
end)
--print("In sv_setup.lua, sql before returning is", sql)
return sql
|