Advertisement
Guest User

Untitled

a guest
Jun 20th, 2019
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 8.89 KB | None | 0 0
  1. local Proxy = module("lib/Proxy")
  2. local Tunnel = module("lib/Tunnel")
  3.  
  4. local config = module("cfg/base")
  5.  
  6. vRP = {}
  7. Proxy.addInterface("vRP",vRP)
  8.  
  9. tvRP = {}
  10. Tunnel.bindInterface("vRP",tvRP)
  11. vRPclient = Tunnel.getInterface("vRP")
  12.  
  13. vRP.users = {}
  14. vRP.rusers = {}
  15. vRP.user_tables = {}
  16. vRP.user_tmp_tables = {}
  17. vRP.user_sources = {}
  18.  
  19. local db_drivers = {}
  20. local db_driver
  21. local cached_prepares = {}
  22. local cached_queries = {}
  23. local prepared_queries = {}
  24. local db_initialized = false
  25.  
  26. function vRP.registerDBDriver(name,on_init,on_prepare,on_query)
  27.     if not db_drivers[name] then
  28.         db_drivers[name] = { on_init,on_prepare,on_query }
  29.  
  30.         if name == config.db.driver then
  31.             db_driver = db_drivers[name]
  32.  
  33.             local ok = on_init(config.db)
  34.             if ok then
  35.                 db_initialized = true
  36.                 for _,prepare in pairs(cached_prepares) do
  37.                     on_prepare(table.unpack(prepare,1,table.maxn(prepare)))
  38.                 end
  39.  
  40.                 for _,query in pairs(cached_queries) do
  41.                     query[2](on_query(table.unpack(query[1],1,table.maxn(query[1]))))
  42.                 end
  43.  
  44.                 cached_prepares = nil
  45.                 cached_queries = nil
  46.             end
  47.         end
  48.     end
  49. end
  50.  
  51. function vRP.format(n)
  52.     local left,num,right = string.match(n,'^([^%d]*%d)(%d*)(.-)$')
  53.     return left..(num:reverse():gsub('(%d%d%d)','%1.'):reverse())..right
  54. end
  55.  
  56. function vRP.logs(archive,text)
  57.     archive = io.open(archive,"a")
  58.     if archive then
  59.         archive:write(text.."\n")
  60.     end
  61.     archive:close()
  62. end
  63.  
  64. function vRP.prepare(name,query)
  65.     prepared_queries[name] = true
  66.  
  67.     if db_initialized then
  68.         db_driver[2](name,query)
  69.     else
  70.         table.insert(cached_prepares,{ name,query })
  71.     end
  72. end
  73.  
  74. function vRP.query(name,params,mode)
  75.     if not mode then mode = "query" end
  76.  
  77.     if db_initialized then
  78.         return db_driver[3](name,params or {},mode)
  79.     else
  80.         local r = async()
  81.         table.insert(cached_queries,{{ name,params or {},mode },r })
  82.         return r:wait()
  83.     end
  84. end
  85.  
  86. function vRP.execute(name,params)
  87.     return vRP.query(name,params,"execute")
  88. end
  89.  
  90. vRP.prepare("vRP/create_user","INSERT INTO vrp_users(whitelisted,banned) VALUES(false,false); SELECT LAST_INSERT_ID() AS id")
  91. vRP.prepare("vRP/add_identifier","INSERT INTO vrp_user_ids(identifier,user_id) VALUES(@identifier,@user_id)")
  92. vRP.prepare("vRP/userid_byidentifier","SELECT user_id FROM vrp_user_ids WHERE identifier = @identifier")
  93. vRP.prepare("vRP/set_userdata","REPLACE INTO vrp_user_data(user_id,dkey,dvalue) VALUES(@user_id,@key,@value)")
  94. vRP.prepare("vRP/get_userdata","SELECT dvalue FROM vrp_user_data WHERE user_id = @user_id AND dkey = @key")
  95. vRP.prepare("vRP/set_srvdata","REPLACE INTO vrp_srv_data(dkey,dvalue) VALUES(@key,@value)")
  96. vRP.prepare("vRP/get_srvdata","SELECT dvalue FROM vrp_srv_data WHERE dkey = @key")
  97. vRP.prepare("vRP/get_banned","SELECT banned FROM vrp_users WHERE id = @user_id")
  98. vRP.prepare("vRP/set_banned","UPDATE vrp_users SET banned = @banned WHERE id = @user_id")
  99. vRP.prepare("vRP/get_whitelisted","SELECT whitelisted FROM vrp_users WHERE id = @user_id")
  100. vRP.prepare("vRP/set_whitelisted","UPDATE vrp_users SET whitelisted = @whitelisted WHERE id = @user_id")
  101. vRP.prepare("vRP/set_last_login","UPDATE vrp_users SET last_login = @last_login, ip = @ip WHERE id = @user_id")
  102.  
  103. function vRP.getUserIdByIdentifiers(ids)
  104.     if ids and #ids then
  105.         for i=1,#ids do
  106.             if (string.find(ids[i],"ip:") == nil) then
  107.                 local rows = vRP.query("vRP/userid_byidentifier",{ identifier = ids[i] })
  108.                 if #rows > 0 then
  109.                     return rows[1].user_id
  110.                 end
  111.             end
  112.         end
  113.  
  114.         local rows,affected = vRP.query("vRP/create_user",{})
  115.  
  116.         if #rows > 0 then
  117.             local user_id = rows[1].id
  118.             for l,w in pairs(ids) do
  119.                 if (string.find(w,"ip:") == nil) then
  120.                     vRP.execute("vRP/add_identifier",{ user_id = user_id, identifier = w })
  121.                 end
  122.             end
  123.             return user_id
  124.         end
  125.     end
  126. end
  127.  
  128. function vRP.isBanned(user_id)
  129.     local rows = vRP.query("vRP/get_banned",{ user_id = user_id })
  130.     if #rows > 0 then
  131.         return rows[1].banned
  132.     else
  133.         return false
  134.     end
  135. end
  136.  
  137. function vRP.setBanned(user_id,banned)
  138.     vRP.execute("vRP/set_banned",{ user_id = user_id, banned = banned })
  139. end
  140.  
  141. function vRP.isWhitelisted(user_id)
  142.     local rows = vRP.query("vRP/get_whitelisted",{ user_id = user_id })
  143.     if #rows > 0 then
  144.         return rows[1].whitelisted
  145.     else
  146.         return false
  147.     end
  148. end
  149.  
  150. function vRP.setWhitelisted(user_id,whitelisted)
  151.     vRP.execute("vRP/set_whitelisted",{ user_id = user_id, whitelisted = whitelisted })
  152. end
  153.  
  154. function vRP.setUData(user_id,key,value)
  155.     vRP.execute("vRP/set_userdata",{ user_id = user_id, key = key, value = value })
  156. end
  157.  
  158. function vRP.getUData(user_id,key)
  159.     local rows = vRP.query("vRP/get_userdata",{ user_id = user_id, key = key })
  160.     if #rows > 0 then
  161.         return rows[1].dvalue
  162.     else
  163.         return ""
  164.     end
  165. end
  166.  
  167. function vRP.setSData(key,value)
  168.     vRP.execute("vRP/set_srvdata",{ key = key, value = value })
  169. end
  170.  
  171. function vRP.getSData(key)
  172.     local rows = vRP.query("vRP/get_srvdata",{ key = key })
  173.     if #rows > 0 then
  174.         return rows[1].dvalue
  175.     else
  176.         return ""
  177.     end
  178. end
  179.  
  180. function vRP.getUserDataTable(user_id)
  181.     return vRP.user_tables[user_id]
  182. end
  183.  
  184. function vRP.getUserTmpTable(user_id)
  185.     return vRP.user_tmp_tables[user_id]
  186. end
  187.  
  188. function vRP.getUserId(source)
  189.     if source ~= nil then
  190.         local ids = GetPlayerIdentifiers(source)
  191.         if ids ~= nil and #ids > 0 then
  192.             return vRP.users[ids[1]]
  193.         end
  194.     end
  195.     return nil
  196. end
  197.  
  198. function vRP.getUsers()
  199.     local users = {}
  200.     for k,v in pairs(vRP.user_sources) do
  201.         users[k] = v
  202.     end
  203.     return users
  204. end
  205.  
  206. function vRP.getUserSource(user_id)
  207.     return vRP.user_sources[user_id]
  208. end
  209.  
  210. function vRP.kick(source,reason)
  211.     DropPlayer(source,reason)
  212. end
  213.  
  214. function vRP.dropPlayer(source)
  215.     local source = source
  216.     local user_id = vRP.getUserId(source)
  217.     vRPclient._removePlayer(-1,source)
  218.     if user_id then
  219.         if user_id and source then
  220.             TriggerEvent("vRP:playerLeave",user_id,source)
  221.         end
  222.         vRP.setUData(user_id,"vRP:datatable",json.encode(vRP.getUserDataTable(user_id)))
  223.         vRP.users[vRP.rusers[user_id]] = nil
  224.         vRP.rusers[user_id] = nil
  225.         vRP.user_tables[user_id] = nil
  226.         vRP.user_tmp_tables[user_id] = nil
  227.         vRP.user_sources[user_id] = nil
  228.     end
  229. end
  230.  
  231. function task_save_datatables()
  232.     SetTimeout(10000,task_save_datatables)
  233.     TriggerEvent("vRP:save")
  234.     for k,v in pairs(vRP.user_tables) do
  235.         vRP.setUData(k,"vRP:datatable",json.encode(v))
  236.     end
  237. end
  238.  
  239. async(function()
  240.     task_save_datatables()
  241. end)
  242.  
  243. AddEventHandler("queue:playerConnecting",function(source,ids,name,setKickReason,deferrals)
  244.     deferrals.defer()
  245.     local source = source
  246.     local ids = ids
  247.  
  248.     if ids ~= nil and #ids > 0 then
  249.         deferrals.update("Carregando identidades.")
  250.         local user_id = vRP.getUserIdByIdentifiers(ids)
  251.         if user_id then
  252.             deferrals.update("Carregando banimentos.")
  253.             if not vRP.isBanned(user_id) then
  254.                 deferrals.update("Carregando whitelist.")
  255.                 if vRP.isWhitelisted(user_id) then
  256.                     if vRP.rusers[user_id] == nil then
  257.                         deferrals.update("Carregando banco de dados.")
  258.                         local sdata = vRP.getUData(user_id,"vRP:datatable")
  259.  
  260.                         vRP.users[ids[1]] = user_id
  261.                         vRP.rusers[user_id] = ids[1]
  262.                         vRP.user_tables[user_id] = {}
  263.                         vRP.user_tmp_tables[user_id] = {}
  264.                         vRP.user_sources[user_id] = source
  265.  
  266.                         local data = json.decode(sdata)
  267.                         if type(data) == "table" then vRP.user_tables[user_id] = data end
  268.  
  269.                         local tmpdata = vRP.getUserTmpTable(user_id)
  270.  
  271.                         tmpdata.spawns = 0
  272.  
  273.                         vRP.execute("vRP/set_last_login",{ user_id = user_id, last_login = os.date("%d.%m.%Y"), ip = GetPlayerEndpoint(source) })
  274.  
  275.                         TriggerEvent("vRP:playerJoin",user_id,source,name)
  276.                         deferrals.done()
  277.                     else
  278.                         local tmpdata = vRP.getUserTmpTable(user_id)
  279.                         tmpdata.spawns = 0
  280.  
  281.                         TriggerEvent("vRP:playerRejoin",user_id,source,name)
  282.                         deferrals.done()
  283.                     end
  284.                 else
  285.                     deferrals.done("Envie para a equipe de administração o seu ID: "..user_id)
  286.                     TriggerEvent("queue:playerConnectingRemoveQueues",ids)
  287.                 end
  288.             else
  289.                 deferrals.done("Você foi banido da cidade.")
  290.                 TriggerEvent("queue:playerConnectingRemoveQueues",ids)
  291.             end
  292.         else
  293.             deferrals.done("Ocorreu um problema de identificação.")
  294.             TriggerEvent("queue:playerConnectingRemoveQueues",ids)
  295.         end
  296.     else
  297.         deferrals.done("Ocorreu um problema de identidade.")
  298.         TriggerEvent("queue:playerConnectingRemoveQueues",ids)
  299.     end
  300. end)
  301.  
  302. AddEventHandler("playerDropped",function(reason)
  303.     local source = source
  304.     vRP.dropPlayer(source)
  305. end)
  306.  
  307. RegisterServerEvent("vRPcli:playerSpawned")
  308. AddEventHandler("vRPcli:playerSpawned",function()
  309.     local user_id = vRP.getUserId(source)
  310.     if user_id then
  311.         vRP.user_sources[user_id] = source
  312.         local tmp = vRP.getUserTmpTable(user_id)
  313.         tmp.spawns = tmp.spawns+1
  314.         local first_spawn = (tmp.spawns == 1)
  315.  
  316.         if first_spawn then
  317.             for k,v in pairs(vRP.user_sources) do
  318.                 vRPclient._addPlayer(source,v)
  319.             end
  320.             vRPclient._addPlayer(-1,source)
  321.             Tunnel.setDestDelay(source,0)
  322.         end
  323.         TriggerEvent("vRP:playerSpawn",user_id,source,first_spawn)
  324.     end
  325. end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement