Advertisement
Guest User

polished stone

a guest
Aug 15th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.63 KB | None | 0 0
  1. ESX = nil
  2. local DisptachRequestId = 0
  3. local PhoneNumbers = {}
  4.  
  5. TriggerEvent('esx:getSharedObject', function(obj)
  6. ESX = obj
  7. end)
  8.  
  9. function GenerateUniquePhoneNumber()
  10.  
  11. local foundNumber = false
  12. local phoneNumber = nil
  13.  
  14. while not foundNumber do
  15.  
  16. phoneNumber = math.random(10000, 99999)
  17.  
  18. local result = MySQL.Sync.fetchAll(
  19. 'SELECT COUNT(*) as count FROM users WHERE phone_number = @phoneNumber',
  20. {
  21. ['@phoneNumber'] = phoneNumber
  22. }
  23. )
  24.  
  25. local count = tonumber(result[1].count)
  26.  
  27. if count == 0 then
  28. foundNumber = true
  29. end
  30.  
  31. end
  32.  
  33. return phoneNumber
  34. end
  35.  
  36. function GetDistpatchRequestId()
  37.  
  38. local requestId = DisptachRequestId
  39.  
  40. if DisptachRequestId < 65535 then
  41. DisptachRequestId = DisptachRequestId + 1
  42. else
  43. DisptachRequestId = 0
  44. end
  45.  
  46. return requestId
  47.  
  48. end
  49.  
  50. function EndCall(source, channel, target)
  51.  
  52. local xPlayer = ESX.GetPlayerFromId(source)
  53.  
  54. print('PHONE CALL END => ' .. channel)
  55.  
  56. xPlayer.set('onCall', nil)
  57.  
  58. TriggerClientEvent('esx_phone:endCall', source)
  59.  
  60. if target ~= nil then
  61.  
  62. local targetXPlayer = ESX.GetPlayerFromId(target)
  63.  
  64. if targetXPlayer ~= nil then
  65. targetXPlayer.set('onCall', nil)
  66. TriggerClientEvent('esx_phone:endCall', target)
  67. end
  68.  
  69. end
  70.  
  71. end
  72.  
  73. RegisterServerEvent('esx_phone:startCall')
  74. AddEventHandler('esx_phone:startCall', function(number)
  75.  
  76. local _source = source
  77. local xPlayer = ESX.GetPlayerFromId(_source)
  78. local xPlayers = ESX.GetPlayers()
  79. local channel = _source + 1000
  80. local foundPlayer = false
  81.  
  82. for i=1, #xPlayers, 1 do
  83.  
  84. local targetXPlayer = ESX.GetPlayerFromId(xPlayers[i])
  85.  
  86. if targetXPlayer.get('phoneNumber') == tonumber(number) then
  87. foundPlayer = targetXPlayer
  88. break
  89. end
  90.  
  91. end
  92.  
  93. if foundPlayer ~= false then
  94.  
  95. xPlayer .set('onCall', {channel = channel, target = foundPlayer.source})
  96. foundPlayer.set('onCall', {channel = channel, target = xPlayer.source})
  97.  
  98. print('PHONE CALL START => ' .. xPlayer.name .. '@' .. foundPlayer.name .. ' => ' .. channel)
  99.  
  100. TriggerClientEvent('esx_phone:incomingCall', foundPlayer.source, xPlayer.source, channel, xPlayer.get('phoneNumber'))
  101.  
  102. else
  103. TriggerClientEvent('esx_phone:endCall', _source, 'Abonent chwilowo ~r~niedostępny~s~.')
  104. end
  105.  
  106.  
  107. end)
  108.  
  109. RegisterServerEvent('esx_phone:acceptCall')
  110. AddEventHandler('esx_phone:acceptCall', function(target, channel)
  111.  
  112. local _source = source
  113.  
  114. print('PHONE CALL ACCEPT => ' .. channel)
  115.  
  116. TriggerClientEvent('esx_phone:onAcceptCall', target, channel, _source)
  117.  
  118. end)
  119.  
  120. RegisterServerEvent('esx_phone:endCall')
  121. AddEventHandler('esx_phone:endCall', function(channel, target)
  122. EndCall(source, channel, target)
  123. end)
  124.  
  125. AddEventHandler('esx_phone:getDistpatchRequestId', function(cb)
  126. cb(GetDistpatchRequestId())
  127. end)
  128.  
  129. AddEventHandler('onResourceStart', function(ressource)
  130. if ressource == 'esx_phone3' then
  131. TriggerEvent('esx_phone:ready')
  132. end
  133. end)
  134.  
  135. AddEventHandler('esx:playerLoaded', function(source)
  136.  
  137. local xPlayer = ESX.GetPlayerFromId(source)
  138.  
  139. for num,v in pairs(PhoneNumbers) do
  140. if tonumber(num) == num then -- If phonenumber is a player phone number
  141. for src,_ in pairs(v.sources) do
  142. TriggerClientEvent('esx_phone:setPhoneNumberSource', source, num, tonumber(src))
  143. end
  144. end
  145. end
  146.  
  147. MySQL.Async.fetchAll(
  148. 'SELECT * FROM users WHERE identifier = @identifier',
  149. {
  150. ['@identifier'] = xPlayer.identifier
  151. },
  152. function(result)
  153.  
  154. local phoneNumber = result[1].phone_number
  155.  
  156. if phoneNumber == nil then
  157.  
  158. phoneNumber = GenerateUniquePhoneNumber()
  159.  
  160. MySQL.Async.execute(
  161. 'UPDATE users SET phone_number = @phone_number WHERE identifier = @identifier',
  162. {
  163. ['@identifier'] = xPlayer.identifier,
  164. ['@phone_number'] = phoneNumber
  165. }
  166. )
  167. end
  168.  
  169. TriggerClientEvent('esx_phone:setPhoneNumberSource', -1, phoneNumber, source)
  170.  
  171. PhoneNumbers[phoneNumber] = {
  172. type = 'player',
  173. hashDispatch = false,
  174. sharePos = false,
  175. hideNumber = false,
  176. hidePosIfAnon = false,
  177. sources = {[source] = true}
  178. }
  179.  
  180. xPlayer.set('phoneNumber', phoneNumber)
  181.  
  182. if PhoneNumbers[xPlayer.job.name] ~= nil then
  183. TriggerEvent('esx_phone:addSource', xPlayer.job.name, source)
  184. end
  185.  
  186. local contacts = {}
  187.  
  188. MySQL.Async.fetchAll(
  189. 'SELECT * FROM user_contacts WHERE identifier = @identifier ORDER BY name ASC',
  190. {
  191. ['@identifier'] = xPlayer.identifier
  192. },
  193. function(result2)
  194.  
  195. for i=1, #result2, 1 do
  196.  
  197. table.insert(contacts, {
  198. name = result2[i].name,
  199. number = result2[i].number,
  200. })
  201. end
  202.  
  203. xPlayer.set('contacts', contacts)
  204.  
  205. TriggerClientEvent('esx_phone:loaded', source, phoneNumber, contacts)
  206.  
  207. end
  208. )
  209.  
  210. end
  211. )
  212.  
  213. end)
  214.  
  215. AddEventHandler('esx:playerDropped', function(source)
  216.  
  217. local xPlayer = ESX.GetPlayerFromId(source)
  218. local onCall = xPlayer.get('onCall')
  219.  
  220. TriggerClientEvent('esx_phone:setPhoneNumberSource', -1, xPlayer.get('phoneNumber'), -1)
  221.  
  222. PhoneNumbers[xPlayer.get('phoneNumber')] = nil
  223.  
  224. if PhoneNumbers[xPlayer.job.name] ~= nil then
  225. TriggerEvent('esx_phone:removeSource', xPlayer.job.name, source)
  226. end
  227.  
  228. if onCall ~= nil then
  229. EndCall(source, onCall.channel, onCall.target)
  230. end
  231.  
  232. end)
  233.  
  234. AddEventHandler('esx:setJob', function(source, job, lastJob)
  235.  
  236. if PhoneNumbers[lastJob.name] ~= nil then
  237. TriggerEvent('esx_phone:removeSource', lastJob.name, source)
  238. end
  239.  
  240. if PhoneNumbers[job.name] ~= nil then
  241. TriggerEvent('esx_phone:addSource', job.name, source)
  242. end
  243.  
  244. end)
  245.  
  246. RegisterServerEvent('esx_phone:reload')
  247. AddEventHandler('esx_phone:reload', function(phoneNumber)
  248.  
  249. local _source = source
  250. local xPlayer = ESX.GetPlayerFromId(_source)
  251. local contacts = xPlayer.get('contacts') or {}
  252.  
  253. TriggerClientEvent('esx_phone:loaded', _source, phoneNumber, contacts)
  254.  
  255. end)
  256.  
  257. RegisterServerEvent('esx_phone:send')
  258. AddEventHandler('esx_phone:send', function(phoneNumber, message, anon, position)
  259.  
  260. local _source = source
  261. local xPlayer = ESX.GetPlayerFromId(_source)
  262.  
  263. print('MESSAGE => ' .. xPlayer.name .. '@' .. phoneNumber .. ' : ' .. message)
  264.  
  265. if PhoneNumbers[phoneNumber] ~= nil then
  266.  
  267. for k,v in pairs(PhoneNumbers[phoneNumber].sources) do
  268.  
  269. local numType = PhoneNumbers[phoneNumber].type
  270. local numHasDispatch = PhoneNumbers[phoneNumber].hasDispatch
  271. local numHide = PhoneNumbers[phoneNumber].hideNumber
  272. local numHidePosIfAnon = PhoneNumbers[phoneNumber].hidePosIfAnon
  273. local numPosition = (PhoneNumbers[phoneNumber].sharePos and position or false)
  274. local numSource = tonumber(k)
  275.  
  276. if numHidePosIfAnon and anon then
  277. numPosition = false
  278. end
  279.  
  280. if numHasDispatch then
  281. TriggerClientEvent('esx_phone:onMessage', numSource, xPlayer.get('phoneNumber'), message, numPosition, (numHide and true or anon), numType, GetDistpatchRequestId())
  282. else
  283. TriggerClientEvent('esx_phone:onMessage', numSource, xPlayer.get('phoneNumber'), message, numPosition, (numHide and true or anon), numType, false)
  284. end
  285.  
  286. end
  287.  
  288. end
  289.  
  290. end)
  291.  
  292. AddEventHandler('esx_phone:registerNumber', function(number, type, sharePos, hasDispatch, hideNumber, hidePosIfAnon)
  293.  
  294. local hideNumber = hideNumber or false
  295. local hidePosIfAnon = hidePosIfAnon or false
  296.  
  297. PhoneNumbers[number] = {
  298. type = type,
  299. sharePos = sharePos,
  300. hasDispatch = (hasDispatch or false),
  301. hideNumber = hideNumber,
  302. hidePosIfAnon = hidePosIfAnon,
  303. sources = {}
  304. }
  305.  
  306. end)
  307.  
  308. AddEventHandler('esx_phone:addSource', function(number, source)
  309. PhoneNumbers[number].sources[tostring(source)] = true
  310. end)
  311.  
  312. AddEventHandler('esx_phone:removeSource', function(number, source)
  313. PhoneNumbers[number].sources[tostring(source)] = nil
  314. end)
  315.  
  316. RegisterServerEvent('esx_phone:addPlayerContact')
  317. AddEventHandler('esx_phone:addPlayerContact', function(phoneNumber, contactName)
  318.  
  319. local _source = source
  320. local xPlayer = ESX.GetPlayerFromId(_source)
  321. local foundNumber = false
  322. local foundPlayer = nil
  323.  
  324. MySQL.Async.fetchAll(
  325. 'SELECT phone_number FROM users WHERE phone_number = @number',
  326. {
  327. ['@number'] = phoneNumber
  328. },
  329. function(result)
  330.  
  331. if result[1] ~= nil then
  332. foundNumber = true
  333. end
  334.  
  335. if foundNumber then
  336.  
  337. if phoneNumber == xPlayer.get('phoneNumber') then
  338. TriggerClientEvent('esx:showNotification', _source, 'Nie możesz dodać samego siebie, ~p~znajdź przyjaciół~s~')
  339. else
  340.  
  341. local hasAlreadyAdded = false
  342. local contacts = xPlayer.get('contacts')
  343.  
  344. for i=1, #contacts, 1 do
  345. if contacts[i].number == phoneNumber then
  346. hasAlreadyAdded = true
  347. end
  348. end
  349.  
  350. if hasAlreadyAdded then
  351. TriggerClientEvent('esx:showNotification', _source, 'Ten numer jest już na twojej ~p~liście kontaktów~s~')
  352. else
  353.  
  354. table.insert(contacts, {
  355. name = contactName,
  356. number = phoneNumber,
  357. })
  358.  
  359. xPlayer.set('contacts', contacts)
  360.  
  361. MySQL.Async.execute(
  362. 'INSERT INTO user_contacts (identifier, name, number) VALUES (@identifier, @name, @number)',
  363. {
  364. ['@identifier'] = xPlayer.identifier,
  365. ['@name'] = contactName,
  366. ['@number'] = phoneNumber
  367. },
  368. function(rowsChanged)
  369.  
  370. TriggerClientEvent('esx:showNotification', _source, 'Kontakt pomyślnie ~b~dodany~s~.')
  371.  
  372. TriggerClientEvent('esx_phone:addContact', _source, contactName, phoneNumber)
  373. end
  374. )
  375.  
  376. end
  377. end
  378.  
  379. else
  380. TriggerClientEvent('esx:showNotification', source, 'Ten numer ~r~nie istnieje~s~')
  381. end
  382.  
  383. end
  384. )
  385.  
  386. end)
  387.  
  388. RegisterServerEvent('esx_phone:stopDispatch')
  389. AddEventHandler('esx_phone:stopDispatch', function(dispatchRequestId)
  390. TriggerClientEvent('esx_phone:stopDispatch', -1, dispatchRequestId, GetPlayerName(source))
  391. end)
  392.  
  393. RegisterServerEvent('esx_phone:billCall')
  394. AddEventHandler('esx_phone:billCall', function(duration)
  395.  
  396. local _source = source
  397. local xPlayer = ESX.GetPlayerFromId(_source)
  398. local amount = math.floor(duration * 0.34)
  399.  
  400. xPlayer.removeAccountMoney('bank', amount)
  401.  
  402. TriggerClientEvent('esx:showNotification', _source, 'Kosz połączenia wynosił ~r~$' .. amount .. '~s~')
  403.  
  404. end)
  405.  
  406. RegisterServerEvent('esx_phone:bankTransfer')
  407. AddEventHandler('esx_phone:bankTransfer', function(target, amount)
  408.  
  409. local _source = source
  410. local xPlayer = ESX.GetPlayerFromId(_source)
  411. local targetXPlayer = ESX.GetPlayerFromId(target)
  412.  
  413. if amount > 0 and amount <= xPlayer.getAccount('bank').money then
  414.  
  415. xPlayer .removeAccountMoney('bank', amount)
  416. targetXPlayer.addAccountMoney ('bank', amount)
  417.  
  418. TriggerClientEvent('esx:showNotification', _source, 'Vous avez viré ~g~$' .. amount .. '~s~ à ' .. targetXPlayer.name)
  419.  
  420. else
  421. TriggerClientEvent('esx:showNotification', _source, 'Nieprawidłowa kwota.')
  422. end
  423.  
  424. end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement