· 9 years ago · Oct 18, 2016, 08:06 PM
1util.AddNetworkString("MOB-Login-RegToSv")
2util.AddNetworkString("MOB-Login-LogToSv")
3util.AddNetworkString("MOB-Login-LogToCl")
4util.AddNetworkString("MOB-Login-LogSuccessToCl")
5
6require("mysqloo")
7
8MOB.Login = {}
9MOB.Login.DB = mysqloo.connect(MOB.DB["host"],MOB.DB["user"],MOB.DB["pass"],MOB.DB["db"],MOB.DB["port"])
10
11function MOB.Login.DB:onConnected()
12 local q = [[CREATE TABLE IF NOT EXISTS
13 pl_accounts(username varchar(255),
14 password varchar(65),
15 sid varchar(255),
16 chars varchar(255));]]
17
18 local q2 = [[CREATE TABLE IF NOT EXISTS
19 pl_chars(
20 username varchar(255),
21 sid varChar(32),
22 name varchar(255),
23 race varchar(32),
24 class varchar(32),
25 gender varchar(16),
26 atts varchar(255),
27 skills varchar(255),
28 inv varchar(255));]]
29
30 MOB.Print("Connection Established","Login")
31 MOB.DB.Query(self,q,function() end)
32 MOB.DB.Query(self,q2,function() end)
33end
34function MOB.Login.DB:onConnectionFailed(err) MOB.Print(err,"Login") end
35MOB.Login.DB:connect()
36
37function MOB.Login.PlayerSpawn(pl)
38 GAMEMODE:PlayerSpawnAsSpectator(pl)
39 pl:Spectate(4)
40
41 if game.GetMap() == "gm_construct" then
42 pl:SetPos(Vector(-5052.782715, -2281.017822, 6730.986816))
43 pl:SetEyeAngles(Angle(0.000000,-180.000000,0.000000))
44 end
45end
46hook.Add("PlayerSpawn","MOB.Login.PlayerSpawn",MOB.Login.PlayerSpawn)
47
48function MOB.Login.Msg(txt,pl)
49 net.Start("MOB-Login-LogToCl")
50 net.WriteString(txt)
51 net.Send(pl)
52end
53
54function MOB.Login.OnRegistered()
55 local username,pw,sid,pl = net.ReadString(),MOB.sha256(net.ReadString()),net.ReadString(),net.ReadEntity()
56 local getAct = "SELECT * FROM pl_accounts WHERE username='"..username.."'"
57 local newAct = "INSERT INTO pl_accounts(username,password,sid,chars) VALUES("..SQLStr(username)..","..SQLStr(pw)..","..SQLStr(sid)..",'');"
58 local newChar = "INSERT INTO pl_chars(username,sid,name,race,class,gender,atts,skills,inv) VALUES("..SQLStr(username)..","..SQLStr(sid)..",'','','','','','','');"
59
60 MOB.DB.Query(MOB.Login.DB,getAct,function(data)
61 data = data[1]
62
63 if data == nil then
64 MOB.DB.Query(MOB.Login.DB,newAct,function() end)
65 MOB.DB.Query(MOB.Login.DB,newChar,function() end)
66 MOB.Login.Msg("Account created successfully. Login to continue.",pl)
67 else
68 MOB.Login.Msg("An account with this name already exists.",pl)
69 end
70 end)
71end
72net.Receive("MOB-Login-RegToSv",MOB.Login.OnRegistered)
73
74function MOB.Login.OnLogin()
75 local act,pw,sid,pl = net.ReadString(),MOB.sha256(net.ReadString()),net.ReadString(),net.ReadEntity()
76 local getAct = "SELECT * FROM pl_accounts WHERE username='"..act.."'"
77
78 MOB.DB.Query(MOB.Login.DB,getAct,function(data)
79 data = data[1]
80
81 if data == nil then
82 MOB.Login.Msg("No account with this name was found.",pl)
83 else
84 if pw != data["password"] then
85 MOB.Login.Msg("Invalid password.",pl)
86 else
87 if sid != data["sid"] then
88 MOB.Login.Msg("You do not have access to this account.",pl)
89 else -- Proceed with login
90 net.Start("MOB-Login-LogSuccessToCl")
91 net.WriteString(act)
92 net.WriteString(sid)
93 net.Send(pl)
94 end
95 end
96 end
97 end)
98end
99net.Receive("MOB-Login-LogToSv",MOB.Login.OnLogin)