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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
--One-type setup stuff
do return end
print("Hello from database.lua!!")
require("mysqloo")
local createplayerquery
local createplayerprepare = [[
INSERT INTO playerdata (`SteamID`, `PlayerName`,`Inventory`, `Skills`,`Quests`, `Prayers`,`WorldPosition`,`World`) VALUES(?, ?, ?, ?, ?, ?, ?, ?)]]
local createtablequery = [[
create table if not exists playerdata(SteamID bigint primary key, PlayerName text, Inventory json, Skills json, Quests json, Prayers json, WorldPosition text, World text)]]
local function connectToDatabase()
if ART.database ~= nil then return end
ART.database = mysqloo.connect(
ART.config.dbhost,
ART.config.dbuser,
ART.config.dbpass,
ART.config.dbname,
ART.config.dbport
)
local db = ART.database
function db:onConnected()
print("Database connected successfully")
local q = self:query("SELECT 5+5")
function q:onSuccess(data)
print("Query successful")
PrintTable(data)
end
function q:onError(err, sql)
print("Query errored!")
print("Query",sql)
error(err)
end
q:start()
end
function db:onConnectionFailed( err )
print( "Connection to database failed!" )
print( "Error:",err )
end
print("Connecting to db")
db:connect()
end
connectToDatabase()
local function checkDatabase()
local db = ART.database
print("Checking if playerdata table exists")
local q = db:query(createtablequery)
function q:onSuccess(data)
print("Got data:")
PrintTable(data)
end
function q:onError(err,sql)
print("Query error:")
print("Query",sql)
print("Error",err)
end
q:start()
print("Tried to query, something should be printed soon!")
end
checkDatabase()
local function loadQueries()
local db = ART.database
--print("Loading queries")
createplayerquery = db:prepare(createplayerprepare)
--print("starting inventory:")
--print(ART.defaults.starting_inventory)
createplayerquery:setString(3,ART.defaults.starting_inventory)
createplayerquery:setString(4,ART.defaults.starting_skills)
createplayerquery:setString(5,ART.defaults.starting_quests)
createplayerquery:setString(6,ART.defaults.starting_prayers)
createplayerquery:setString(7,ART.defaults.starting_position)
createplayerquery:setString(8,ART.defaults.starting_world)
function createplayerquery:onSuccess(data)
print("Created player entry successfully!")
end
function createplayerquery:onError(err)
print("An error occured while createing a player entry: " .. err)
end
ART.DatabaseConnected = true
end
loadQueries()
function ART.loadPlayerData(ply)
assert(ART.DatabaseConnected,"Player joined while setup was not complete!")
print("Attempting to load player data")
local steamid = ply:SteamID64()
local db = ART.database
local q = db:query([[
select Inventory, Skills, Quests, Prayers, WorldPosition, World from playerdata where SteamID="]] .. steamid .. "\"")
function q:onSuccess(data)
if #data == 0 then --Player does not have an entry, make one!
print("Player does not have entry!")
if ART.config.server_world ~= ART.defaults.starting_world then
print("You didn't connect to the starting world, you are on:")
print(ART.config.server_world)
print("The starting world is")
print(ART.defaults.starting_world)
local ccmd = "connect " .. ART.defaults.starting_world
print("Running concommand:" .. ccmd)
--ply:ConCommand(ccmd)
else
print("New player without entry in database, and he's connected to the right place!")
createplayerquery:setString(1,steamid)
createplayerquery:setString(2,ply:Nick())
createplayerquery:start()
ply:ConCommand("retry") -- reconnect to the server to load player data normally
end
else
assert(#data == 1, "Two players with the same steamID? Something's gone horribly wrong!")
print("Loaded player data,")
--PrintTable(data)
local world = data[1].World
local inv = data[1].Inventory
local worldpos = data[1].WorldPosition
print("World:" .. world)
PrintTable(data)
if world ~= ART.config.server_world then
print("Joined the wrong world, redirecting!")
print("You are on :" .. ART.config.server_world .. " which is not " .. world)
local ccmd = "connect " .. world
--ply:ConCommand(ccmd)
return
end
--Otherwise, we're in the right world, load our data
print("Loading inventory...")
ply:LoadInventory(inv)
print("Loading skills...")
ply.Skills = util.JSONToTable(data[1].Skills)
print("Loading quests...")
ply.Quests = util.JSONToTable(data[1].Quests)
print("Loading prayers...")
ply.Prayers = util.JSONToTable(data[1].Prayers)
print("Loading player's worldpos")
local postbl = string.Explode(" ", worldpos)
local posvec = Vector(postbl[1],postbl[2],postbl[3])
print("Setting player pos to:")
print(posvec)
ply:SetPos(posvec)
end
end
function q:onError(err,sql)
print("Query error:")
print("Query",sql)
print("Error",err)
end
q:start()
end
|