· 6 years ago · Aug 08, 2019, 05:32 AM
1local GiveMoneyForRPPoints = true
2
3util.AddNetworkString("CustomChatPrint")
4util.AddNetworkString("OpenLatestPoints")
5util.AddNetworkString("OpenMyPoints")
6util.AddNetworkString("SendLogs")
7util.AddNetworkString("ManagingPoints")
8
9
10-- DATABASE_HOST = "192.168.1.184"
11-- DATABASE_PORT = 3306
12-- DATABASE_NAME = "stats"
13-- DATABASE_USERNAME = "root"
14-- DATABASE_PASSWORD = "OUGla!2323"
15
16DATABASE_HOST = "192.168.1.184"
17DATABASE_PORT = 3306
18DATABASE_NAME = "stats"
19DATABASE_USERNAME = "root"
20DATABASE_PASSWORD = "OUGla!2323"
21
22
23local MySQLOO = require("mysqloo")
24
25DB_RPPOINTS = mysqloo.connect ( DATABASE_HOST, DATABASE_USERNAME, DATABASE_PASSWORD, DATABASE_NAME, DATABASE_PORT )
26
27local function InitializeMySQL()
28 local query = DB_RPPOINTS:query(
29 [[CREATE TABLE IF NOT EXISTS rp_points( uniqueID INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
30 steamID VARCHAR(50) NOT NULL,
31 points INTEGER NOT NULL)]]
32 )
33 MsgC(Color(0,200,0), "[RP_Points] MySQL table for RP Points created.\n" )
34 query:start()
35
36 local query1 = DB_RPPOINTS:query(
37 [[CREATE TABLE IF NOT EXISTS rppoints_logs( uniqueID INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
38 type VARCHAR(50) NOT NULL,
39 steamID VARCHAR(50) NOT NULL,
40 date VARCHAR(50) NOT NULL,
41 adminSteamID VARCHAR(50) NOT NULL,
42 AdminName VARCHAR(50) NOT NULL,
43 reason VARCHAR(50) NOT NULL)]]
44 )
45 MsgC(Color(0,200,0), "[RP_Points] MySQL table for RP Points Logging created.\n" )
46 query1:start()
47end
48
49function ConnectToDatabase()
50 print ("[RP_Points] Connecting to Database")
51
52 DB_RPPOINTS.onConnect = function()
53 print("[RP_Points] Database Connection Successful!")
54 end
55 DB_RPPOINTS.onConnectionFailed = function (db, msg)
56 print("[RP_Points] Connect to Database failed!")
57 print(msg)
58 end
59 DB_RPPOINTS:connect()
60end
61
62InitializeMySQL()
63ConnectToDatabase()
64
65local function CheckDB()
66 if (DB_RPPOINTS:status() != mysqloo.DATABASE_CONNECTED) then
67 ConnectToDatabase()
68 print("[RP_Points] Database Connection Restarted")
69 end
70end
71timer.Create( "DB_CHECK", 5, 0, CheckDB)
72
73if not file.IsDir("rppoints", "DATA") then
74 file.CreateDir("rppoints")
75end
76if not file.Exists("rppoints/rppoints_log.txt", "DATA") then
77 file.Write("rppoints/rppoints_log.txt")
78end
79
80function checkQuery(query)
81 local playerInfo = query:getData()
82 if playerInfo[1] ~= nil then
83 return true
84 else
85 return false
86 end
87end
88
89function UpdatePointsMySQL(steamid, data)
90 local query1 = DB_RPPOINTS:query("SELECT * FROM rp_points WHERE steamID = '" ..steamid .. "'")
91 query1.onSuccess = function()
92 local query = DB_RPPOINTS:prepare( "UPDATE rp_points SET points = '" .. data .. "' WHERE steamID = '" .. steamid .. "';")
93 query:start()
94 end
95 query1:start()
96end
97
98function AddToMySQLLogs(type, steamID, currentdate, adminSteamID, AdminName, reason)
99 local query = DB_RPPOINTS:query("INSERT INTO rppoints_logs(uniqueID, type, steamID, date, adminSteamID, AdminName, reason) VALUES (NULL, '" .. type .. "', '" .. steamID .. "', '" .. currentdate .. "', '" .. adminSteamID .. "', '" .. AdminName .. "', '" .. reason .. "')")
100 query.onSuccess = function() end
101 query.onError = function(q, e) print(e) end
102 query:start()
103end
104
105
106function LoadRPPoints(ply)
107 local SelectPlayerQuery = DB_RPPOINTS:query("SELECT * FROM rp_points WHERE steamID = '" .. ply:SteamID() .. "'")
108 SelectPlayerQuery.onSuccess = function(q, data)
109 if not checkQuery(q) then
110 local CreatePlayerQuery = DB_RPPOINTS:query("INSERT INTO rp_points(uniqueID, steamID, points) VALUES (NULL,'" .. ply:SteamID() .. "', " .. 0 .. ")")
111 CreatePlayerQuery.onSuccess = function(q) end
112 CreatePlayerQuery.onError = function(q,e) print (e) end
113 CreatePlayerQuery:start()
114 ply:SetNWInt("RPPoints", 0)
115 else
116 ply:SetNWInt("RPPoints", tonumber(data[1].points))
117 end
118 end
119 SelectPlayerQuery.onError = function(q,e) print(e) end
120 SelectPlayerQuery:start()
121end
122hook.Add("PlayerInitialSpawn", "LoadRPPoints", LoadRPPoints)
123
124
125local meta = FindMetaTable("Player")
126
127function TempFindPlayer(info)
128 if not info or info == "" then return nil end
129 local pls = player.GetAll()
130
131 for k = 1, #pls do
132 local v = pls[k]
133 if tonumber(info) == v:UserID() then
134 return v
135 end
136
137 if info == v:SteamID() then
138 return v
139 end
140
141 if string.find(string.lower(v:SteamName()), string.lower(tostring(info)), 1, true) ~= nil then
142 return v
143 end
144
145 if string.find(string.lower(v:Name()), string.lower(tostring(info)), 1, true) ~= nil then
146 return v
147 end
148 end
149 return nil
150end
151
152
153function meta:IsAdminGroups(list)
154 if not list then return end
155 local access = false
156 for i=1,#list do
157 if self:IsUserGroup(list[i]) then return true end
158 end
159 return false
160end
161
162function meta:AddRPPoints(points)
163 points = points or 1
164 local steamID = self:SteamID()
165 UpdatePointsMySQL(steamID, self:GetNWInt("RPPoints") + points)
166 self:SetNWInt("RPPoints", self:GetNWInt("RPPoints") + points)
167end
168
169net.Receive("ManagingPoints", function(len, ply)
170 local managetype = net.ReadInt(3)
171 local SteamID = net.ReadString()
172 local AmountPoints = net.ReadString()
173 local Reason = net.ReadString()
174 local whitelist = {"admin", "superadmin", "developer", "owner", "headadmin", "co.owner"}
175 if not ply:IsAdminGroups(whitelist) then return end
176
177 if managetype == 1 then
178 player.GetBySteamID(SteamID):AddRPPoints(tonumber(AmountPoints))
179 LogRPPoints(ply:Nick(), player.GetBySteamID(SteamID):Nick(), Reason, false, SteamID, ply:SteamID())
180 net.Start("CustomChatPrint")
181 net.WriteVector(Vector(255, 30, 160))
182 net.WriteString(ply:Nick() .. " gave " .. player.GetBySteamID(SteamID):Nick() .. " " .. AmountPoints .. " RP points for " .. Reason)
183 net.Send(player.GetAll())
184 else
185 player.GetBySteamID(SteamID):AddRPPoints(-(tonumber(AmountPoints)))
186 LogRPPoints(ply:Nick(), player.GetBySteamID(SteamID):Nick(), Reason, true, SteamID, ply:SteamID())
187 net.Start("CustomChatPrint")
188 net.WriteVector(Vector(220, 20, 20))
189 net.WriteString(ply:Nick() .. " took " .. AmountPoints .. " RP points from " .. player.GetBySteamID(SteamID):Nick() .. " for " .. Reason)
190 net.Send(player.GetAll())
191 end
192
193end)
194
195function GivePoint( ply, args )
196 local whitelist = {"admin", "superadmin", "developer", "owner", "headadmin", "co.owner"}
197 if not ply:IsAdminGroups(whitelist) then return end
198 args = string.Explode("\"", args)
199 for i=#args, 1, -1 do
200 if args[i] == " " or args[i] == "" then
201 table.remove(args, i)
202 end
203 end
204 if #args != 2 then return end
205 local targ = TempFindPlayer( string.sub(args[1], 2, string.len(args[1])-1 ) )
206 if not targ then return end
207
208 targ:AddRPPoints(args[2])
209 LogRPPoints(ply:Nick(), targ:Nick(), args[2], false, targ:SteamID(), ply:SteamID())
210 if GiveMoneyForRPPoints then
211 targ:addMoney(100000)
212 end
213
214 net.Start("CustomChatPrint")
215 net.WriteVector(Vector(255, 30, 160))
216 net.WriteString(ply:Nick() .. " gave " .. targ:Nick() .. " a RP point for " .. args[2])
217 net.Send(player.GetAll())
218end
219
220function RemovePoint( ply, args )
221 local whitelist = {"superadmin", "owner", "headadmin", "admin", "co.owner"}
222 if not ply:IsAdminGroups(whitelist) then return end
223 args = string.Explode("\"", args)
224 for i=#args, 1, -1 do
225 if args[i] == " " or args[i] == "" then
226 table.remove(args, i)
227 end
228 end
229 if #args != 2 then return end
230 local targ = TempFindPlayer( string.sub(args[1], 2, string.len(args[1])-1 ) )
231 if not targ then return end
232
233 targ:AddRPPoints(-args[2])
234 LogRPPoints(ply:Nick(), targ:Nick(), args[2], true, targ:SteamID(), ply:SteamID())
235
236 net.Start("CustomChatPrint")
237 net.WriteVector(Vector(220, 20, 20))
238 net.WriteString(ply:Nick() .. " removed a RP point from " .. targ:Nick() .. " for " .. args[2])
239 net.Send(player.GetAll())
240end
241
242function OpenLatestPoints(ply, args)
243 local whitelist = {"admin", "superadmin", "developer", "owner", "co.owner"}
244 if not ply:IsAdminGroups(whitelist) then return end
245 local logs = string.Explode("\n", file.Read("rppoints/rppoints_log.txt"))
246 local send = {}
247 for i=#logs,1, -1 do
248 if i>#logs-11 && i != #logs then
249 table.insert(send, logs[i])
250 end
251 end
252
253 net.Start("OpenLatestPoints")
254 net.WriteTable(send)
255 net.Send(ply)
256end
257
258function LogRPPoints(admin, player, reason, remove, steamID, adminSteamID)
259 if not remove then
260 file.Append("rppoints/rppoints_log.txt", "GivePoint | " .. os.date() .. " | Admin: " .. admin .. " | Player: " .. player .. " | Reason: " .. reason .. "\n" )
261 AddToMySQLLogs("GIVEPOINT", steamID, os.date(), adminSteamID, admin, reason)
262 else
263 file.Append("rppoints/rppoints_log.txt", "RemovePoint | " .. os.date() .. " | Admin: " .. admin .. " | Player: " .. player .. " | Reason: " .. reason .. "\n" )
264 AddToMySQLLogs("REMOVEPOINT", steamID, os.date(), adminSteamID, admin, reason)
265 end
266end
267
268function OpenMyPoints(ply, args)
269 local query = DB_RPPOINTS:query("SELECT * FROM rppoints_logs WHERE steamID = '" .. ply:SteamID() .. "';")
270 function query:onSuccess(data)
271 net.Start("OpenMyPoints")
272 net.WriteTable(data)
273 net.Send(ply)
274 self:getNextResults()
275 end
276 query:start()
277end
278
279concommand.Add("reset_player_smurfrp_avalanche", function(ply, cmd, args)
280 if not ply:IsUserGroup("owner") then return end
281 UpdatePointsMySQL(args[1], 0)
282 local ingame = TempFindPlayer(args[1])
283 if ingame then
284 ingame:SetNWInt("RPPoints", 0)
285 end
286end)
287
288
289hook.Add("PlayerSay", "CMDS", function(ply, txt, pub)
290 cmd = "/givepoint"
291 hitCmd = (string.sub(txt,1,string.len(cmd))) == cmd
292 sub = string.sub(txt, string.len(cmd)+1 )
293 if hitCmd then
294 GivePoint(ply, sub)
295 return ""
296 end
297
298 cmd = "/takepoint"
299 hitCmd = (string.sub(txt,1,string.len(cmd))) == cmd
300 sub = string.sub(txt, string.len(cmd)+2 )
301 if hitCmd then
302 RemovePoint(ply, sub)
303 return ""
304 end
305
306 cmd = "/points"
307 hitCmd = (string.sub(txt,1,string.len(cmd))) == cmd
308 sub = string.sub(txt, string.len(cmd)+1 )
309 if hitCmd then
310 OpenLatestPoints(ply, sub)
311 return ""
312 end
313
314 cmd = "/pointmenu"
315 hitCmd = (string.sub(txt,1,string.len(cmd))) == cmd
316 sub = string.sub(txt, string.len(cmd)+1 )
317 if hitCmd then
318 ply:ConCommand("openpointsmenu")
319 return ""
320 end
321
322 cmd = "/mypoints"
323 hitCmd = (string.sub(txt,1,string.len(cmd))) == cmd
324 sub = string.sub(txt, string.len(cmd)+1 )
325 if hitCmd then
326 OpenMyPoints(ply, sub)
327 return ""
328 end
329
330
331end)
332
333concommand.Add("reset_player_wallet", function(ply, cmd, args)
334 local whitelist = {"owner"}
335 if not ply:IsAdminGroups(whitelist) then return end
336 local steam64 = sql.QueryValue("SELECT uid FROM darkrp_player WHERE rpname = '" .. args[1] .. "';")
337 if steam64 then
338 sql.Query("UPDATE darkrp_player SET wallet = 0 WHERE uid = " ..steam64.. ";")
339 local ingame = TempFindPlayer(args[1])
340 if ingame then
341 ingame:addMoney(-ingame:getDarkRPVar("money"))
342 end
343 end
344end)
345
346
347concommand.Add("reset_player_wallet_bywallet", function(ply, cmd, args)
348 local whitelist = {"owner"}
349 if not ply:IsAdminGroups(whitelist) then return end
350 local steam64 = sql.QueryValue("SELECT uid FROM darkrp_player WHERE wallet = " .. args[1] .. ";")
351 if steam64 then
352 sql.Query("UPDATE darkrp_player SET wallet = 0 WHERE uid = " ..steam64.. ";")
353 local ingame = TempFindPlayer(args[1])
354 if ingame then
355 ingame:addMoney(-ingame:getDarkRPVar("money"))
356 end
357 end
358end)