· 5 years ago · Mar 13, 2020, 08:52 PM
1--[[
2─────────────────────────────────────────────────────────────────────────────────────────────────────────
3─██████──████████─██████████████─██████████████████─██████████████─██████████████─██████──────────██████─
4─██░░██──██░░░░██─██░░░░░░░░░░██─██░░░░░░░░░░░░░░██─██░░░░░░░░░░██─██░░░░░░░░░░██─██░░██████████──██░░██─
5─██░░██──██░░████─██░░██████░░██─████████████░░░░██─██░░██████░░██─██░░██████░░██─██░░░░░░░░░░██──██░░██─
6─██░░██──██░░██───██░░██──██░░██─────────████░░████─██░░██──██░░██─██░░██──██░░██─██░░██████░░██──██░░██─
7─██░░██████░░██───██░░██████░░██───────████░░████───██░░██──██░░██─██░░██──██░░██─██░░██──██░░██──██░░██─
8─██░░░░░░░░░░██───██░░░░░░░░░░██─────████░░████─────██░░██──██░░██─██░░██──██░░██─██░░██──██░░██──██░░██─
9─██░░██████░░██───██░░██████░░██───████░░████───────██░░██──██░░██─██░░██──██░░██─██░░██──██░░██──██░░██─
10─██░░██──██░░██───██░░██──██░░██─████░░████─────────██░░██──██░░██─██░░██──██░░██─██░░██──██░░██████░░██─
11─██░░██──██░░████─██░░██──██░░██─██░░░░████████████─██░░██████░░██─██░░██████░░██─██░░██──██░░░░░░░░░░██─
12─██░░██──██░░░░██─██░░██──██░░██─██░░░░░░░░░░░░░░██─██░░░░░░░░░░██─██░░░░░░░░░░██─██░░██──██████████░░██─
13─██████──████████─██████──██████─██████████████████─██████████████─██████████████─██████──────────██████─
14─────────────────────────────────────────────────────────────────────────────────────────────────────────
15]]--
16
17MySQL = module("vrp_mysql", "MySQL")
18
19local Proxy = module("lib/Proxy")
20local Tunnel = module("lib/Tunnel")
21local Lang = module("lib/Lang")
22Debug = module("lib/Debug")
23
24local config = module("cfg/base")
25local version = module("version")
26Debug.active = config.debug
27MySQL.debug = config.debug
28
29-- open MySQL connection
30MySQL.createConnection("vRP", config.db.host,config.db.user,config.db.password,config.db.database)
31
32vRP = {}
33Proxy.addInterface("vRP",vRP)
34
35tvRP = {}
36Tunnel.bindInterface("vRP",tvRP) -- listening for client tunnel
37
38-- load language
39local dict = module("cfg/lang/"..config.lang) or {}
40vRP.lang = Lang.new(dict)
41
42-- init
43vRPclient = Tunnel.getInterface("vRP","vRP") -- server -> client tunnel
44
45vRP.users = {} -- will store logged users (id) by first identifier
46vRP.rusers = {} -- store the opposite of users
47vRP.user_tables = {} -- user data tables (logger storage, saved to database)
48vRP.user_tmp_tables = {} -- user tmp data tables (logger storage, not saved)
49vRP.user_sources = {} -- user sources
50
51-- queries
52MySQL.createCommand("vRP/base_tables",[[
53CREATE TABLE IF NOT EXISTS vrp_users(
54 id INTEGER AUTO_INCREMENT,
55 last_login VARCHAR(255),
56 whitelisted BOOLEAN,
57 banned BOOLEAN,
58 CONSTRAINT pk_user PRIMARY KEY(id)
59);
60
61CREATE TABLE IF NOT EXISTS vrp_user_ids(
62 identifier VARCHAR(255),
63 user_id INTEGER,
64 CONSTRAINT pk_user_ids PRIMARY KEY(identifier),
65 CONSTRAINT fk_user_ids_users FOREIGN KEY(user_id) REFERENCES vrp_users(id) ON DELETE CASCADE
66);
67
68CREATE TABLE IF NOT EXISTS vrp_user_data(
69 user_id INTEGER,
70 dkey VARCHAR(255),
71 dvalue TEXT,
72 CONSTRAINT pk_user_data PRIMARY KEY(user_id,dkey),
73 CONSTRAINT fk_user_data_users FOREIGN KEY(user_id) REFERENCES vrp_users(id) ON DELETE CASCADE
74);
75
76CREATE TABLE IF NOT EXISTS vrp_srv_data(
77 dkey VARCHAR(255),
78 dvalue TEXT,
79 CONSTRAINT pk_srv_data PRIMARY KEY(dkey)
80);
81]])
82
83MySQL.createCommand("vRP/create_user","INSERT INTO vrp_users(whitelisted,banned) VALUES(false,false); SELECT LAST_INSERT_ID() AS id")
84MySQL.createCommand("vRP/add_identifier","INSERT INTO vrp_user_ids(identifier,user_id) VALUES(@identifier,@user_id)")
85MySQL.createCommand("vRP/userid_byidentifier","SELECT user_id FROM vrp_user_ids WHERE identifier = @identifier")
86
87MySQL.createCommand("vRP/set_userdata","REPLACE INTO vrp_user_data(user_id,dkey,dvalue) VALUES(@user_id,@key,@value)")
88MySQL.createCommand("vRP/get_userdata","SELECT dvalue FROM vrp_user_data WHERE user_id = @user_id AND dkey = @key")
89
90MySQL.createCommand("vRP/get_username", "SELECT name FROM vrp_user_identities WHERE user_id = @user_id")
91
92MySQL.createCommand("vRP/set_srvdata","REPLACE INTO vrp_srv_data(dkey,dvalue) VALUES(@key,@value)")
93MySQL.createCommand("vRP/get_srvdata","SELECT dvalue FROM vrp_srv_data WHERE dkey = @key")
94
95MySQL.createCommand("vRP/get_banned","SELECT banned FROM vrp_users WHERE id = @user_id")
96MySQL.createCommand("vRP/set_banned","UPDATE vrp_users SET banned = @banned, reason = @reason WHERE id = @user_id")
97MySQL.createCommand("vRP/get_whitelisted","SELECT whitelisted FROM vrp_users WHERE id = @user_id")
98MySQL.createCommand("vRP/set_whitelisted","UPDATE vrp_users SET whitelisted = @whitelisted WHERE id = @user_id")
99MySQL.createCommand("vRP/set_last_login","UPDATE vrp_users SET last_login = @last_login, last_date = @last_date WHERE id = @user_id")
100MySQL.createCommand("vRP/get_last_login","SELECT last_login FROM vrp_users WHERE id = @user_id")
101
102-- init tables
103print("[vRP] init base tables")
104MySQL.execute("vRP/base_tables")
105
106-- identification system
107
108--- sql.
109
110function vRP.createUserWithIdentifier(ids, cbr)
111 local task = Task(cbr)
112
113 MySQL.query("vRP/create_user", {}, function(rows, affected)
114 if #rows > 0 then
115 local user_id = rows[1].id
116 -- add identifiers
117 for l,w in pairs(ids) do
118 if (not config.ignore_ip_identifier or (string.find(w, "ip:") == nil)) and
119
120 (not config.ignore_license_identifier or (string.find(w, "license:") == nil)) and
121
122 (not config.ignore_xbox_identifier or (string.find(w, "xbl:") == nil)) and
123
124 (not config.ignore_discord_identifier or (string.find(w, "discord:") == nil)) and
125
126 (not config.ignore_live_identifier or (string.find(w, "live:") == nil)) and -- ignore ip & license identifier
127
128 (not config.ignore_fivem_identifier or (string.find(w, "fivem:") == nil)) then
129
130 MySQL.execute("vRP/add_identifier", {user_id = user_id, identifier = w})
131 end
132 task({user_id})
133 end
134 end)
135end
136
137-- cbreturn user id or nil in case of error (if not found, will create it)
138function vRP.getUserIdByIdentifiers(ids, cbr)
139 local task = Task(cbr)
140
141 if ids ~= nil and #ids then
142 local i = 0
143 local validids = 0
144
145 -- search identifiers
146 local function search()
147 i = i+1
148 if i <= #ids then
149 if (not config.ignore_ip_identifier or (string.find(ids[i], "ip:") == nil)) and
150
151 (not config.ignore_license_identifier or (string.find(ids[i], "license:") == nil)) and
152
153 (not config.ignore_xbox_identifier or (string.find(ids[i], "xbl:") == nil)) and
154
155 (not config.ignore_discord_identifier or (string.find(ids[i], "discord:") == nil)) and
156
157 (not config.ignore_live_identifier or (string.find(ids[i], "live:") == nil)) and
158
159 (not config.ignore_fivem_identifier or (string.find(ids[i], "fivem:") == nil))
160
161 then
162 validids = validids + 1
163 MySQL.query("vRP/userid_byidentifier", {identifier = ids[i]}, function(rows, affected)
164 if #rows > 0 then -- found
165 task({rows}) -- rows[1].user_id
166 else -- not found
167 search()
168 end
169 end)
170 else
171 search()
172 end
173 elseif validids > 0 then -- no ids found, create user
174 local userTable = {}
175 for i=1, 3 do
176 MySQL.query("vRP/create_user", {}, function(rows, affected)
177 if #rows > 0 then
178 local user_id = rows[1].id
179 -- add identifiers
180 for l,w in pairs(ids) do
181 if (not config.ignore_ip_identifier or (string.find(w, "ip:") == nil)) and
182
183 (not config.ignore_license_identifier or (string.find(w, "license:") == nil)) and
184
185 (not config.ignore_xbox_identifier or (string.find(w, "xbl:") == nil)) and
186
187 (not config.ignore_discord_identifier or (string.find(w, "discord:") == nil)) and
188
189 (not config.ignore_live_identifier or (string.find(w, "live:") == nil)) and -- ignore ip & license identifier
190
191 (not config.ignore_fivem_identifier or (string.find(w, "fivem:") == nil)) then
192
193 MySQL.execute("vRP/add_identifier", {user_id = user_id, identifier = w})
194 end
195 task({user_id})
196 else
197 task()
198 end
199 end)
200 end
201 task()
202 end
203 end
204
205 search()
206 else
207 task()
208 end
209end
210
211-- RETURN player names by user_id
212function vRP.getUserNames(usertable, cbr)
213 local charnames = {{"Karakter 1", 0}, {"Karakter 2", 0}, {"Karakter 3", 0}}
214 local legal = 0
215
216 for i=1, 3 do
217 if usertable[i] ~= nil then
218 MySQL.query("vRP/get_username", {user_id = usertable[i].user_id}, function(rows, affected)
219 charnames[i][1] = rows[i].name
220 charnames[i][2] = usertable[i].user_id
221 end)
222 end
223 end
224
225 Wait(1000)
226
227 cbr(charnames)
228end
229
230-- return identification string for the source (used for non vRP identifications, for rejected players)
231function vRP.getSourceIdKey(source)
232 local ids = GetPlayerIdentifiers(source)
233 local idk = "idk_"
234 for k,v in pairs(ids) do
235 idk = idk..v
236 end
237
238 return idk
239end
240
241function vRP.getPlayerEndpoint(player)
242 return GetPlayerEP(player) or "0.0.0.0"
243end
244
245function vRP.getPlayerName(player)
246 return GetPlayerName(player) or "ukendt"
247end
248
249--- sql
250function vRP.isBanned(user_id, cbr)
251 local task = Task(cbr, {false})
252
253 MySQL.query("vRP/get_username", {user_id = user_id}, function(rows, affected)
254 if #rows > 0 then
255 task({rows[1].banned})
256 else
257 task()
258 end
259 end)
260end
261
262--- BANS
263function vRP.setBanned(user_id,banned,reason)
264 MySQL.execute("vRP/set_banned", {user_id = user_id, banned = banned, reason = reason})
265end
266
267function vRP.setUnbanned(user_id,banned,reason)
268 MySQL.execute("vRP/set_banned", {user_id = user_id, banned = banned, reason = reason})
269end
270
271--- sql
272function vRP.isWhitelisted(user_id, cbr)
273 local task = Task(cbr, {false})
274
275 MySQL.query("vRP/get_whitelisted", {user_id = user_id}, function(rows, affected)
276 if #rows > 0 then
277 task({rows[1].whitelisted})
278 else
279 task()
280 end
281 end)
282end
283
284--- sql
285function vRP.setWhitelisted(user_id,whitelisted)
286 MySQL.execute("vRP/set_whitelisted", {user_id = user_id, whitelisted = whitelisted})
287end
288
289--- sql
290function vRP.getLastLogin(user_id, cbr)
291 local task = Task(cbr,{""})
292 MySQL.query("vRP/get_last_login", {user_id = user_id}, function(rows, affected)
293 if #rows > 0 then
294 task({rows[1].last_login})
295 else
296 task()
297 end
298 end)
299end
300
301function vRP.setUData(user_id,key,value)
302 MySQL.execute("vRP/set_userdata", {user_id = user_id, key = key, value = value})
303end
304
305function vRP.getUData(user_id,key,cbr)
306 local task = Task(cbr,{""})
307
308 MySQL.query("vRP/get_userdata", {user_id = user_id, key = key}, function(rows, affected)
309 if #rows > 0 then
310 task({rows[1].dvalue})
311 else
312 task()
313 end
314 end)
315end
316
317function vRP.setSData(key,value)
318 MySQL.execute("vRP/set_srvdata", {key = key, value = value})
319end
320
321function vRP.getSData(key, cbr)
322 local task = Task(cbr,{""})
323
324 MySQL.query("vRP/get_srvdata", {key = key}, function(rows, affected)
325 if #rows > 0 then
326 task({rows[1].dvalue})
327 else
328 task()
329 end
330 end)
331end
332
333-- return user data table for vRP internal persistant connected user storage
334function vRP.getUserDataTable(user_id)
335 return vRP.user_tables[user_id]
336end
337
338function vRP.getUserTmpTable(user_id)
339 return vRP.user_tmp_tables[user_id]
340end
341
342function vRP.isConnected(user_id)
343 return vRP.rusers[user_id] ~= nil
344end
345
346function vRP.isFirstSpawn(user_id)
347 local tmp = vRP.getUserTmpTable(user_id)
348 return tmp and tmp.spawns == 1
349end
350
351function vRP.getUserId(source)
352 if source ~= nil then
353 local ids = GetPlayerIdentifiers(source)
354 if ids ~= nil and #ids > 0 then
355 return vRP.users[ids[1]]
356 end
357 end
358
359 return nil
360end
361
362-- return map of user_id -> player source
363function vRP.getUsers()
364 local users = {}
365 for k,v in pairs(vRP.user_sources) do
366 users[k] = v
367 end
368
369 return users
370end
371
372-- return source or nil
373function vRP.getUserSource(user_id)
374 return vRP.user_sources[user_id]
375end
376
377function vRP.ban(source,reason,source2)
378 local user_id = source
379 local bruger = source2
380
381 if user_id ~= nil then
382 vRP.setBanned(user_id,true,reason)
383 end
384 if user_id ~= nil then
385 if bruger ~= nil then
386 DropPlayer(bruger,reason)
387 end
388 end
389end
390
391function vRP.unban(source,reason)
392 local user_id = source
393
394 if user_id ~= nil then
395 vRP.setBanned(user_id,false,reason)
396 end
397end
398
399function vRP.kick(source,reason)
400 DropPlayer(source,reason)
401end
402
403-- tasks
404
405function task_save_datatables()
406 TriggerEvent("vRP:save")
407
408 Debug.pbegin("vRP save datatables")
409 for k,v in pairs(vRP.user_tables) do
410 vRP.setUData(k,"vRP:datatable",json.encode(v))
411 end
412
413 Debug.pend()
414 SetTimeout(config.save_interval*1000, task_save_datatables)
415end
416task_save_datatables()
417
418function tvRP.ping()
419 local user_id = vRP.getUserId(source)
420 if user_id ~= nil then
421 local tmpdata = vRP.getUserTmpTable(user_id)
422 tmpdata.pings = 0 -- reinit ping countdown
423 end
424end
425
426-- handlers
427
428AddEventHandler("playerConnecting",function(name,setMessage, deferrals)
429 deferrals.defer()
430 print('Player ' .. source .. ' is connecting.')
431 local chars = {"Karakter 1", "Karakter 2", "Karakter 3"}
432 local source = source
433 Debug.pbegin("playerConnecting")
434 local ids = GetPlayerIdentifiers(source)
435 local playerip = vRP.getPlayerEndpoint(source)
436
437 if ids ~= nil and #ids > 0 then
438 deferrals.update("[vRP] Tjekker identitet...")
439 vRP.getUserIdByIdentifiers(ids, function(user_id)
440 -- if user_id ~= nil and vRP.rusers[user_id] == nil then -- check user validity and if not already connected (old way, disabled until playerDropped is sure to be called)
441 if user_id ~= nil then -- check user validity
442 --deferrals.update("[vRP] Tjekker om du er banned...")
443
444 vRP.getUserNames(user_id, function(charnames)
445 local xd = [==[{
446 "type": "AdaptiveCard",
447 "version": "1.0",
448 "body": [
449 {
450 "type": "Container",
451 "items": [
452
453 {
454 "type": "TextBlock",
455 "text": "Velkommen til NightLifeRP, vælg venligst en karakter nedenunder!",
456 "size": "Medium",
457 "wrap": true,
458 "spacing": "Large",
459 "separator": true,
460 "horizontalAlignment": "Center"
461 }
462 ]
463 },
464 {
465 "type": "ColumnSet",
466 "columns": [
467 {
468 "type": "Column",
469 "width": "stretch",
470 "items": [
471 {
472 "type": "Image",
473 "altText": "",
474 "selectAction": {
475 "type": "Action.Submit",
476 "id": "1"
477 },
478 "url": "https://ww2.kqed.org/app/uploads/sites/38/2019/03/tomemeornot3.jpg",
479 "spacing": "None",
480 "horizontalAlignment": "Center"
481 },
482 {
483 "type": "TextBlock",
484 "text": "]==] .. charnames[1][1] .. [==[",
485 "spacing": "Small",
486 "weight": "Lighter",
487 "horizontalAlignment": "Center"
488 }
489 ],
490 "spacing": "None",
491 "horizontalAlignment": "Center"
492 },
493 {
494 "type": "Column",
495 "width": "stretch",
496 "items": [
497 {
498 "type": "Image",
499 "altText": "",
500 "selectAction": {
501 "type": "Action.Submit",
502 "id": "2"
503 },
504 "url": "https://ww2.kqed.org/app/uploads/sites/38/2019/03/tomemeornot3.jpg",
505 "horizontalAlignment": "Center",
506 "spacing": "None"
507 },
508 {
509 "type": "TextBlock",
510 "text": "]==] .. charnames[2][1] .. [==[",
511 "horizontalAlignment": "Center",
512 "spacing": "Small",
513 "weight": "Lighter"
514 }
515 ],
516 "spacing": "None",
517 "horizontalAlignment": "Center"
518 },
519 {
520 "type": "Column",
521 "width": "stretch",
522 "items": [
523 {
524 "type": "Image",
525 "altText": "",
526 "selectAction": {
527 "type": "Action.Submit",
528 "id": "3"
529 },
530 "backgroundColor": "",
531 "url": "https://ww2.kqed.org/app/uploads/sites/38/2019/03/tomemeornot3.jpg",
532 "spacing": "None",
533 "horizontalAlignment": "Center"
534 },
535 {
536 "type": "TextBlock",
537 "text": "]==] .. charnames[3][1] .. [==[",
538 "weight": "Lighter",
539 "horizontalAlignment": "Center",
540 "spacing": "Small"
541 }
542 ],
543 "spacing": "None",
544 "horizontalAlignment": "Center"
545 }
546 ],
547 "spacing": "None",
548 "horizontalAlignment": "Center",
549 "style": "emphasis"
550 }
551 ],
552 "$schema": "http://adaptivecards.io/schemas/adaptive-card.json"
553 }]==]
554
555 Wait(500)
556
557 -- badly serialized JSON in a string, from the Adaptive Cards designer
558 deferrals.presentCard(xd,
559 function(data, rawData) --data.submitId
560 local selectedId = tonumber(data.submitId)
561 local nowUserId = tonumber(charnames[selectedId][2])
562 print("id " .. data.submitId .. " name " .. charnames[selectedId][1] .. " uid " .. charnames[selectedId][2])
563 deferrals.update("[vRP] Joining as " .. charnames[selectedId][1] .. ".")
564 if vRP.rusers[nowUserId] == nil then -- not present on the server, init
565 vRP.users[ids[1]] = nowUserId
566 vRP.rusers[nowUserId] = ids[1]
567 vRP.user_tables[nowUserId] = {}
568 vRP.user_tmp_tables[nowUserId] = {}
569 vRP.user_sources[nowUserId] = source
570
571 -- load user data table
572 deferrals.update("[vRP] Indlæser dine data...")
573 vRP.getUData(nowUserId, "vRP:datatable", function(sdata)
574 local data = json.decode(sdata)
575 if type(data) == "table" then vRP.user_tables[nowUserId] = data end
576
577 -- init user tmp table
578 local tmpdata = vRP.getUserTmpTable(nowUserId)
579
580 deferrals.update("[vRP] Tjekker seneste login...")
581
582 vRP.getLastLogin(nowUserId, function(last_login)
583 tmpdata.last_login = last_login or ""
584 tmpdata.spawns = 0
585
586 -- set last login
587 local ep = vRP.getPlayerEndpoint(source)
588 local last_login_stamp = ep
589 local last_login_date = os.date("%H:%M:%S %d/%m/%Y")
590 MySQL.execute("vRP/set_last_login", {nowUserId = nowUserId, last_login = last_login_stamp, last_date = last_login_date})
591
592 -- trigger join
593 print(name.." ("..vRP.getPlayerEndpoint(source)..") tilsluttede ("..nowUserId.."/"..source..")")
594 PerformHttpRequest('https://discordapp.com/api/webhooks/675896031296225281/U3O7eZqVU7zF6YnDekC45ueUW65zVZnk6M05GW6B6GvAHUERnkgRwN4rk7Ovn0pPHhrJ', function(err, text, headers) end, 'POST', json.encode({username = "Connection Checker", content = "```ID: "..user_id.." - ["..name.."] - connectede.```"}), { ['Content-Type'] = 'application/json' })
595 TriggerEvent("vRP:playerJoin", nowUserId, source, name, tmpdata.last_login)
596 deferrals.done()
597 end)
598 end
599 --d.done()
600 end)
601 end)
602
603
604
605
606 --vRP.isBanned(user_id, function(banned)
607 -- if not banned then
608 -- deferrals.update("[vRP] Tjekker om du er whitelisted...")
609 -- vRP.isWhitelisted(user_id, function(whitelisted)
610 -- if not config.whitelist or whitelisted then
611 -- Debug.pbegin("playerConnecting_delayed")
612 -- if vRP.rusers[user_id] == nil then -- not present on the server, init
613 -- -- init entries
614 -- vRP.users[ids[1]] = user_id
615 -- vRP.rusers[user_id] = ids[1]
616 -- vRP.user_tables[user_id] = {}
617 -- vRP.user_tmp_tables[user_id] = {}
618 -- vRP.user_sources[user_id] = source
619 --
620 -- -- load user data table
621 -- deferrals.update("[vRP] Indlæser dine data...")
622 -- vRP.getUData(user_id, "vRP:datatable", function(sdata)
623 -- local data = json.decode(sdata)
624 -- if type(data) == "table" then vRP.user_tables[user_id] = data end
625 --
626 -- -- init user tmp table
627 -- local tmpdata = vRP.getUserTmpTable(user_id)
628 --
629 -- deferrals.update("[vRP] Tjekker seneste login...")
630 -- vRP.getLastLogin(user_id, function(last_login)
631 -- tmpdata.last_login = last_login or ""
632 -- tmpdata.spawns = 0
633 --
634 -- -- set last login
635 -- local ep = vRP.getPlayerEndpoint(source)
636 -- local last_login_stamp = ep
637 -- local last_login_date = os.date("%H:%M:%S %d/%m/%Y")
638 -- MySQL.execute("vRP/set_last_login", {user_id = user_id, last_login = last_login_stamp, last_date = last_login_date})
639 --
640 -- -- trigger join
641 -- print(name.." ("..vRP.getPlayerEndpoint(source)..") tilsluttede ("..user_id.."/"..source..")")
642 -- PerformHttpRequest('https://discordapp.com/api/webhooks/675896031296225281/U3O7eZqVU7zF6YnDekC45ueUW65zVZnk6M05GW6B6GvAHUERnkgRwN4rk7Ovn0pPHhrJ', function(err, text, headers) end, 'POST', json.encode({username = "Connection Checker", content = "```ID: "..user_id.." - ["..name.."] - connectede.```"}), { ['Content-Type'] = 'application/json' })
643 -- TriggerEvent("vRP:playerJoin", user_id, source, name, tmpdata.last_login)
644 -- deferrals.done()
645 -- end)
646 -- end)
647 -- else -- already connected
648 -- print(name.." ("..vRP.getPlayerEndpoint(source)..") tilsluttede igen ("..user_id.."/"..source..")")
649 -- PerformHttpRequest('https://discordapp.com/api/webhooks/675896031296225281/U3O7eZqVU7zF6YnDekC45ueUW65zVZnk6M05GW6B6GvAHUERnkgRwN4rk7Ovn0pPHhrJ', function(err, text, headers) end, 'POST', json.encode({username = "Connection Checker", content = "```ID: "..user_id.." - ["..name.."] - connectede igen.```"}), { ['Content-Type'] = 'application/json' })
650 -- TriggerEvent("vRP:playerRejoin", user_id, source, name)
651 -- deferrals.done()
652 --
653 -- -- reset first spawn
654 -- local tmpdata = vRP.getUserTmpTable(user_id)
655 -- tmpdata.spawns = 0
656 -- end
657 --
658 -- Debug.pend()
659 -- else
660 -- print(name.." ("..vRP.getPlayerEndpoint(source)..") afvist: ikke whitelisted ("..user_id.."/"..source..")")
661 -- deferrals.done("Du ikke whitelisted, ansøg via discorden. discord.gg/q8eDeQC med dit ID: ("..user_id..")")
662 -- end
663 -- end)
664 -- else
665 -- print(name.." ("..vRP.getPlayerEndpoint(source)..") afvist: banned ("..user_id.."/"..source..")")
666 -- deferrals.done("Du har ikke adgang, Kontakt staff på discorden ("..user_id..")")
667 -- end
668 --end)
669 --else
670 -- print(name.." ("..vRP.getPlayerEndpoint(source)..") afvist: identifikationsfejl")
671 -- deferrals.done("Kunne ikke hente dit SteamID.")
672 end
673 end)
674 else
675 print(name.." ("..vRP.getPlayerEndpoint(source)..") afvist: mangler steamid")
676 deferrals.done("Manglende SteamID, åben Steam og prøv igen.")
677 end
678 Debug.pend()
679end)
680
681AddEventHandler("playerDropped",function(reason)
682 local source = source
683 Debug.pbegin("playerDropped")
684
685 -- remove player from connected clients
686 vRPclient.removePlayer(-1,{source})
687
688
689 local user_id = vRP.getUserId(source)
690
691 if user_id ~= nil then
692 TriggerEvent("vRP:playerLeave", user_id, source)
693
694 -- save user data table
695 vRP.setUData(user_id,"vRP:datatable",json.encode(vRP.getUserDataTable(user_id)))
696
697 print("[vRP] "..vRP.getPlayerEndpoint(source).." forlod (ID: "..user_id..")")
698 PerformHttpRequest('https://discordapp.com/api/webhooks/675896031296225281/U3O7eZqVU7zF6YnDekC45ueUW65zVZnk6M05GW6B6GvAHUERnkgRwN4rk7Ovn0pPHhrJ', function(err, text, headers) end, 'POST', json.encode({username = "Connection Checker", content = "```ID: "..user_id.." - Forlod serveren \n"..reason.."```"}), { ['Content-Type'] = 'application/json' })
699 vRP.users[vRP.rusers[user_id]] = nil
700 vRP.rusers[user_id] = nil
701 vRP.user_tables[user_id] = nil
702 vRP.user_tmp_tables[user_id] = nil
703 vRP.user_sources[user_id] = nil
704 end
705 Debug.pend()
706end)
707
708RegisterServerEvent("vRPcli:playerSpawned")
709AddEventHandler("vRPcli:playerSpawned", function()
710 Debug.pbegin("playerSpawned")
711 -- register user sources and then set first spawn to false
712 local user_id = vRP.getUserId(source)
713 local player = source
714 if user_id ~= nil then
715 vRP.user_sources[user_id] = source
716 local tmp = vRP.getUserTmpTable(user_id)
717 tmp.spawns = tmp.spawns+1
718 local first_spawn = (tmp.spawns == 1)
719
720 if first_spawn then
721 -- first spawn, reference player
722 -- send players to new player
723 for k,v in pairs(vRP.user_sources) do
724 vRPclient.addPlayer(source,{v})
725 end
726 -- send new player to all players
727 vRPclient.addPlayer(-1,{source})
728 end
729
730 -- set client tunnel delay at first spawn
731 Tunnel.setDestDelay(player, config.load_delay)
732
733 -- show loading
734 vRPclient.setProgressBar(player,{"vRP:loading", "botright", "Indlæser...", 0,0,0, 100})
735
736 SetTimeout(2000, function() -- trigger spawn event
737 TriggerEvent("vRP:playerSpawn",user_id,player,first_spawn)
738
739 SetTimeout(config.load_duration*1000, function() -- set client delay to normal delay
740 Tunnel.setDestDelay(player, config.global_delay)
741 vRPclient.removeProgressBar(player,{"vRP:loading"})
742 end)
743 end)
744 end
745
746 Debug.pend()
747end)
748
749RegisterServerEvent("vRP:playerDied")