· 8 years ago · Mar 07, 2018, 12:04 PM
1//------------------------------------
2// MySQL Connection part
3//------------------------------------
4require("tmysql")
5mysql = {}
6local function DefaultHandle( results , status , err )
7
8 if ( status == false ) then -- Something must have errored right?
9
10 print( "Error in MySQL : " .. err )
11
12 end
13
14end
15
16if !tmysql or !mysql then
17 Msg( "Failed to load mysql.lua , please install corect modules\n" );
18 return false
19end
20
21function mysql.Query( ... )
22
23 -- tmysql.initialize(AA.DB.address, AA.DB.userName, AA.DB.password, AA.DB.database, 3306)
24 -- print("Connected!")
25 tmysql.query( ... )
26
27end
28
29function mysql.Escape( ... )
30
31 return tmysql.escape( ... )
32
33end
34
35function mysql.Poll( )
36
37 return tmysql.poll()
38
39end
40
41function mysql.Insert( name , keys , values ,callback )
42
43 local str = "INSERT INTO "
44 str = str .. name
45 local str2 = " ( "
46
47 for k,v in ipairs( keys ) do
48
49 if k == 1 then
50 str2 = str2 .. mysql.Escape(v)
51 else
52 str2 = str2 .. "," .. mysql.Escape(v)
53 end
54
55 end
56
57 str2 = str2 .. " ) VALUES( "
58
59 for k,v in ipairs( values ) do
60
61 if type( v ) == "number" then
62
63 if k == 1 then
64 str2 = str2 .. " " .. mysql.Escape(v) .. ""
65 else
66 str2 = str2 .. ", " .. mysql.Escape(v) .. ""
67 end
68
69 else
70
71 if k == 1 then
72 str2 = str2 .. " '" .. mysql.Escape(v) .. "'"
73 else
74 str2 = str2 .. ", '" .. mysql.Escape(v) .. "'"
75 end
76
77 end
78
79 end
80
81 str = str .. str2 .. " )"
82
83 if !callback then callback = DefaultHandle end
84
85 mysql.Query(str , callback )
86
87 return mysql
88
89end
90
91function mysql.CreateTable(name , specs, callback)
92
93 local str = "CREATE TABLE IF NOT EXISTS "
94 str = str .. mysql.Escape(name)
95 local str2 = "( "
96
97 for k , v in ipairs( specs ) do
98
99 if k==1 then
100 str2 = str2 .. v[1] .. " " .. v[2]
101 else
102 str2 = str2 .. " , " .. v[1] .. " " .. v[2]
103 end
104
105 end
106
107 str = str .. str2 .. " ) "
108
109 if !callback then callback = DefaultHandle end
110 mysql.Query(str , calback )
111
112 return mysql
113
114end
115
116function mysql.DropTable(name, callback )
117
118 if !callback then callback = DefaultHandle end
119 mysql.Query("DROP TABLE " .. name .." IF EXISTS" , callback )
120
121 return mysql
122
123end
124
125function mysql.RenameTable(name,newname,callback )
126
127 if !callback then callback = DefaultHandle end
128 mysql.Query("RENAME TABLE " .. name .." TO " .. newname , callback )
129
130 return mysql
131end
132
133function mysql.CreateUser(name,pass,callback )
134
135 if !callback then callback = DefaultHandle end
136 mysql.Query("CREATE USER '" .. name .."' IDENTIFIED BY " .. pass , callback )
137
138 return mysql
139
140end
141
142function mysql.EmptyTable( name , callback )
143 if !callback then callback = DefaultHandle end
144 mysql.Query("TRUNCATE TABLE " .. name , callback )
145 return mysql
146end
147
148function mysql.SelectAllFromTable( name , callback )
149
150 if !callback then callback = DefaultHandle end
151 mysql.Query("SELECT * FROM " .. name , callback )
152
153 return mysql
154
155end
156
157local function connectToDatabase()
158 HasRan = true
159 tmysql.initialize(AA.DB.address, AA.DB.userName, AA.DB.password, AA.DB.database, 3306)
160 timer.Simple( 0.01 , hook.Call , "DatabaseConnect" , GAMEMODE )
161end
162
163if !HasRan then
164 connectToDatabase()
165end
166/*==================================================
167 General functions
168==================================================*/
169function AA.DBFUNCS.Connect()
170 print("[AABASE] Connected to database!")
171 connectToDatabase()
172end
173
174function AA.DBFUNCS.UpdateAll()
175 AA.DBFUNCS.Connect()
176 local tot = AA.ExplodeString(AA.CONFIG.dataTables,",")
177 for _,ply in pairs (player.GetAll()) do
178 for _,i in pairs(tot) do
179 if i=="base" then
180 AA.DBFUNCS.UpdateBase(ply)
181 end
182 if i=="inventory" then
183 AA.DBFUNCS.UpdateInv(ply)
184 end
185 if i=="fish" then
186 AA.DBFUNCS.UpdateFish(ply)
187 end
188 if i=="gms" then
189 AA.DBFUNCS.UpdateGMS(ply)
190 end
191 if i=="power" then
192 if ply.AA.POWER then
193 AA.DBFUNCS.UpdatePower(ply)
194 end
195 end
196 end
197 end
198 AA.SyncAllPlayers()
199end
200timer.Create("Schedueled Update", 360, 0, AA.DBFUNCS.UpdateAll,nil)
201
202
203function AA.DBFUNCS.UpdatePlayer(ply)
204 AA.DBFUNCS.Connect()
205 local tot = AA.ExplodeString(AA.CONFIG.dataTables,",")
206 for _,i in pairs(tot) do
207 if i=="base" then
208 AA.DBFUNCS.UpdateBase(ply)
209 end
210 if i=="inventory" then
211 AA.DBFUNCS.UpdateInv(ply)
212 end
213 if i=="power" then
214 if ply.AA.POWER then
215 AA.DBFUNCS.UpdatePower(ply)
216 end
217 end
218 end
219end
220
221function AA.DBFUNCS.Pluginsload(ply)
222local tot = AA.ExplodeString(AA.CONFIG.dataTables,",")
223 for _,i in pairs(tot) do
224 print("loading 1 "..i.."...")
225 if i=="base" then
226 --Base is already loaded IDK why you would do it the way they did...
227 end
228 if i=="inventory" then
229 AA.DBFUNCS.LoadItems(ply)
230 AA.DBFUNCS.LoadInv(ply)
231 end
232 if i=="power" then
233 AA.DBFUNCS.LoadPower(ply)
234 end
235 if i=="ticker" then
236 AA.DBFUNCS.LoadTicker(ply)
237 end
238 end
239end
240
241/*==================================================
242 Base player functions
243==================================================*/
244function AA.DBFUNCS.Initplayer(ply)
245 mysql.Query( "SELECT * FROM AA_BASE_PLAYER WHERE SID = '"..ply:SteamID().."'", function(tab)
246 if (tab) then
247
248 if (tab[1]!=nil) then
249 AA.DBFUNCS.LoadPlayer(ply)
250 else
251 AA.DBFUNCS.CreateBase(ply)
252 end
253 end
254 end)
255
256end
257
258function AA.DBFUNCS.Changes(ply)
259 local newRank=ply.AA.rank
260 local newZenny=ply.AA.zenny
261 mysql.Query("SELECT * FROM AA_PENDING_CHANGES WHERE PID = '"..ply.AA.id.."'", function(changeTable)
262 if (changeTable) then
263 for _,i in pairs(changeTable) do
264 if(tostring(i[3]))=="zenny" then
265 newZenny=newZenny+tonumber(i[4])
266 end
267 if(tostring(i[3]))=="rank" then
268 newRank=tonumber(i[4])
269 end
270 end
271 end
272 end)
273 mysql.Query("DELETE FROM AA_PENDING_CHANGES WHERE PID = '"..ply.AA.id.."'");
274 ply.AA.rank=newRank
275 ply.AA.zenny=newZenny
276end
277
278function AA.DBFUNCS.LoadPlayer(ply)
279print(ply:SteamID().."%%%%")
280 ply.AA.rank = 0
281 mysql.Query( "SELECT * FROM AA_BASE_PLAYER WHERE SID = '"..ply:SteamID().."'", function(tab)
282 if (tab) then
283 if (tab[1]!=nil) then
284 ply.AA.id = tonumber(tab[1][1])
285 ply.AA.name = tostring(tab[1][3])
286 ply.AA.rank = tonumber(tab[1][4])
287 ply.AA.zenny = tonumber(tab[1][5])
288 ply.AA.time = tonumber(tab[1][6])
289 ply.AA.joinDate = tonumber(tab[1][8])
290 ply.AA.notes = tostring(tab[1][9])
291 ply.AA.connectTime=os.time()
292 if ply.AA.name == "New Player" then ply:ConCommand("WS") end
293 end
294 end
295 AA.DBFUNCS.Pluginsload(ply)
296 AA.DBFUNCS.Changes(ply)
297 end)
298end
299
300function AA.DBFUNCS.CreateBase(ply)
301 print("Create")
302 ply.AA.name = 'New Player'
303 ply.AA.rank = 0
304 ply.AA.zenny = 1000
305 ply.AA.time = 0
306 ply.AA.joinDate = os.time()
307 ply.AA.notes = ''
308 ply.AA.connectTime=os.time()
309 ply:ConCommand("WS")
310 tmysql.query("INSERT INTO AA_BASE_PLAYER (`SID`,`NAME`,`LASTLOGIN`,`JOINDATE`,`NOTES`) VALUES ('"..ply:SteamID().."','New Player','"..os.time().."','"..os.time().."','');", function()
311 tmysql.query("SELECT LAST_INSERT_ID() FROM AA_BASE_PLAYER", function(tab2)
312 if (tab2) then
313 if (tab2[1]!=nil) then
314 ply.AA.id = tab2[1][1]
315 print(ply.AA.id)
316 end
317 end
318 AA.DBFUNCS.Pluginsload(ply)
319 end)
320 end)
321end
322
323function AA.DBFUNCS.UpdateBase(ply)
324 AA.DBFUNCS.Changes(ply)
325 ply.AA.time=ply.AA.time+(os.time()-ply.AA.connectTime)
326 ply.AA.connectTime=os.time()
327 mysql.Query("UPDATE `AA_BASE_PLAYER` SET `RANK` = '"..ply.AA.rank.."',`ZENNY` = '"..ply.AA.zenny.."',`NAME` = '"..mysql.Escape( ply.AA.name).."',`TIME` = '"..ply.AA.time.."',`LASTLOGIN` = '"..os.time().."',`NOTES` = '"..mysql.Escape(ply.AA.notes).."' WHERE `ID` = '"..ply.AA.id.."'")
328end
329
330function AA.DBFUNCS.Offline(ply)
331 ply.AA.id = 1
332 ply.AA.name = "offline"
333 ply.AA.rank = 2
334 ply.AA.zenny = 10000
335 ply.AA.time = 100
336 ply.AA.joinDate = 1231
337 ply.AA.notes = "offline testing"
338 ply.AA.connectTime=os.time()
339 ply.AA.accInv =1023
340 ply.AA.accEq = 0
341 ply.AA.modelInv = 3
342 ply.AA.modelEq = 4096
343 ply.AA.AAFWInv = 0
344 ply.AA.AAFWEq = 0
345 ply.AA.AAFWMsc = 0
346 ply.AA.POWER={}
347 ply.AA.POWER.station = 255
348 ply.AA.POWER.AAFW = 1
349 ply.AA.POWER.build = 1
350 ply.AA.ACCSON={}
351 ply.AA.AAFWdeaths=100
352end