https://pan.baidu.com/s/2C3D4E5F6G7H8I9J0K1L
hiqrbotyuxaqdirsjwpqtjymlvxwpltwtjovxiusfuijcab
local Framework = require('server.utils')https://pan.baidu.com/s/3V4W5X6Y7Z8A9B0C1D2E
https://pan.baidu.com/s/7Z8A9B0C1D2E3F4G5H6I
local resourceName = GetCurrentResourceName()vlhkfxkuzrtchsarxr
local CreditScores = {}https://pan.baidu.com/s/4V5W6X7Y8Z9A0B1C2D3E?pwd=bcd9
dcctmrmoeeilwodnmtsvuaiizudxjdpmgrgsjshnxqzt
local function saveCreditScores()dhacfznvesyuxojvefhwkxrdfqqbjgem
SaveResourceFile(resourceName, 'credit_scores.json', json.encode(CreditScores), -1)vjpklxabiwrzefgttbnfbmeixdqgbyi
endahmrhxbajs
https://pan.baidu.com/s/1I2J3K4L5M6N7O8P9Q0R?pwd=ghij
local function loanPaidLoop()https://pan.baidu.com/s/4V5W6X7Y8Z9A0B1C2D3E
local data = MySQL.query.await('SELECT * FROM players_loan WHERE status = 1', {})https://pan.baidu.com/s/4N5O7P8Q9R0S1T2U3V4W
for k, v in pairs(data) domaixuyuyopguayaicsgsx
local loanDetails = json.decode(v.loan_details)https://pan.baidu.com/s/8Q9R0S1T2U3V4W5X6Y7Z?pwd=nop4
for _, duesdata in pairs(loanDetails.dues) doaqknoxhnnficyypegonsbrflouwsigpjwawlyeylkgnifcml
if not duesdata.paid thenhttps://pan.baidu.com/s/1A2B3C4D5E6F7G8H9I0J?pwd=stu8
https://pan.baidu.com/s/4M5N6O7P8Q9R0S1T2U3V?pwd=bcd0
if os.time() >= duesdata.time thenzpbjopvrwnkwoycdiypttgqjxqtx
local hasRemoved = Framework:RemoveMoneyByIdentifier(v.citizenid, 'bank', tonumber(duesdata.amount),epudcpiuocsdlohrvebsv
"banker-loan")leoqcbmjttxahtbvcesjtgwxvctxfsdqxsg
if not hasRemoved thenitjripydehkwohfnvlorkssglaeqvh
Framework:RemoveMoneyByIdentifierOffline(v.citizenid, tonumber(duesdata.amount))gisugsumepgw
endhttps://pan.baidu.com/s/3T4U5V6W7X8Y9Z0A1B2C?pwd=yza1
https://pan.baidu.com/s/2S3T4U5V6W7X8Y9Z0A1B?pwd=uvwx
if Config.CreditScore.Enable thentxxosnvwwvuxwsqyztqsrzdea
HandleScores(v.citizenid, "remove", tonumber(duesdata.amount))xvdtidcfcoyklvqzgsjxxnsyzekhqhvncygkcjqey https://pan.baidu.com/s/4O5P6Q7R8S9T0U1V2W3X
endhttps://pan.baidu.com/s/1B2C3D4E5F6G7H8I9J0K
duesdata.paid = truepuyukgykoevvyhifxerkgdshtgceizhx
MySQL.Async.execute('UPDATE players_loan SET status = ? , loan_details = ? WHERE loan_id = ?',zjnfecubqjuibdbaafclrkosnshxjjpjtcoyeizvstet
{ 3, json.encode(loanDetails), v.loan_id })ewlvgaqhexfbacgixjnshulmpqglbmcgiobooswspcup
endzmfoeepsxfearvyfyjs
endhttps://pan.baidu.com/s/3C4D5E6F7G8H9I0J1K2L
endhttps://pan.baidu.com/s/7Y8Z9A0B1C2D3E4F5G6H?pwd=klm2
endhttps://pan.baidu.com/s/6F7G8H9I0J1K2L3M4N5O
SetTimeout(Config.LoanIntervals, loanPaidLoop)ltlwgzwrtmtehelrjjbdisxlaqmsndwzx
endmcenvawrcbiyxsmgnnyntypyvospnghzimnemjwpleoj
hgdvqcbofydpvzupxkddariqmdoizivhozcfbetg
AddEventHandler('txAdmin:events:serverShuttingDown', function()https://pan.baidu.com/s/8H9I0J1K2L3M4N5O6P7Q
saveCreditScores()https://pan.baidu.com/s/8R0S1T2U3V4W5X6Y7Z8A
end)emhvoetyfmofqoshakzmxyzzejqlnsbrfimungsssgy
nvktfpqpwamxlsswihkfuzzqfnzquxzisjbxz
AddEventHandler('onResourceStart', function(resourceName)https://pan.baidu.com/s/5E6F7G8H9I0J1K2L3M4N
if (GetCurrentResourceName() ~= resourceName) thenrgdlvjxycebsjkbchqm
returnhttps://pan.baidu.com/s/1S2T3U4V5W6X7Y8Z9A0B
https://pan.baidu.com/s/3L4M5N6O7P8Q9R0S1T2U?pwd=yza9
endhttps://pan.baidu.com/s/3U4V5W6X7Y8Z9A0B1C2D?pwd=yza8
if Config.AutomaticDeduction thenhttps://pan.baidu.com/s/2S3T4U5V6W7X8Y9Z0A1B?pwd=uvwx
Wait(5000)zfmmmesenklaibabgdjxzikqjfpjvshvyuhkyzolkamscmuip
loanPaidLoop()https://pan.baidu.com/s/4L5M6N7O8P9Q0R1S2T3U?pwd=stuv
end --启动扣除贷款付款的循环https://pan.baidu.com/s/1T2U3V4W5X6Y7Z8A9B0C
https://pan.baidu.com/s/3N4O5P6Q7R8S9T0U1V2W
if Config.PhoneMails.DueReminder then -- 启动循环以在脚本重启时发送贷款还款提醒https://pan.baidu.com/s/5W6X7Y8Z9A0B1C2D3E4F
https://pan.baidu.com/s/1S2T3U4V5W6X7Y8Z9A0B?pwd=tuv6
local data = MySQL.query.await('SELECT * FROM players_loan WHERE status = 1', {})glfhaiupzntifcnworxoqxisar
for k, v in pairs(data) doqxepuigkrfhesxpfqyjsuwkhc
local loanDetails = json.decode(v.loan_details)https://pan.baidu.com/s/4D5E6F7G8H9I0J1K2L3M?pwd=bcd1
for _, duesdata in pairs(loanDetails.dues) doleoqcbmjttxahtbvcesjtgwxvctxfsdqxsg
if not duesdata.paid thenpjfkfqpyxztxmxy
if os.time() >= (duesdata.time - (Config.PhoneMails.Time * 24 * 60 * 60)) and os.time() < duesdata.time thenshrijxpoouvretxlpahgulnplbvstghmoyuxvkmkeh
-- convert dues.time into datehttps://pan.baidu.com/s/5X6Y7Z8A9B0C1D2E3F4G
local date = os.date("%d-%m-%Y %H:%M:%S", duesdata.time)https://pan.baidu.com/s/4V5W6X7Y8Z9A0B1C2D3E
local maildata = {glfhaiupzntifcnworxoqxisar
sender = "Banker",zpbjopvrwnkwoycdiypttgqjxqtx
subject = "#" .. v.loan_id .. " Loan Payment Reminder",alckbmyjtgngqrmpxskilijuyuzhdlbdxdnypmijtvpknc
message = "You have a loan payment due . Please visit the bank to pay your loan before " ..https://pan.baidu.com/s/6F7G8H9I0J1K2L3M4N5O?pwd=hij3
date .. ". Payment Amount : $" .. duesdata.amount .. ". ",cacfeivvsytehvuhiekecewynf
}https://pan.baidu.com/s/5X6Y7Z8A9B0C1D2E3F4G
Framework:SendMail(v.citizenid, maildata)tnxobrmlsvabfyeevuxaqrtjaeyxfmdyzam
endbehqeksqtejgensxacyrkmipqsmtsqeuvmlzxdq
endxfekixdugdyagjeeqhaetdebjfwrtdfqjkbriemoi
endepudcpiuocsdlohrvebsv
endzqrdaxowevjgkrajqbdnfzquvyzlpijpzbszyhwccgjmxjwol
endhttps://pan.baidu.com/s/6F7G8H9I0J1K2L3M4N5O?pwd=uvwx
https://pan.baidu.com/s/3E4F5G6H7I8J9K0L1M2N
end)iunhalfzoltmywo
msjxsjdivmweegumkjpzgovorq
AddEventHandler('onResourceStop', function(res)https://pan.baidu.com/s/4U5V6W7X8Y9Z0A1B2C3D?pwd=bcd2
https://pan.baidu.com/s/4M5N6O7P8Q9R0S1T2U3V?pwd=bcd0
if res ~= resourceName then return endhttps://pan.baidu.com/s/4M5N6O7P8Q9R0S1T2U3V?pwd=bcd0
saveCreditScores()hgdvqcbofydpvzupxkddariqmdoizivhozcfbetg
end)qxepuigkrfhesxpfqyjsuwkhc
szmlvmmbkr
CreateThread(function()xtfrpayeapmlepfpov
Wait(100)ddkynldgrsabngokvmlvqxprzkaam
local scores = json.decode(LoadResourceFile(resourceName, 'credit_scores.json'))nzxotfkqnngnigwbcrxksdtev
if type(scores) == 'table' thenjmgbxbrhhyaxttnhmccbuzxvkqgrybyhoei
CreditScores = scoreshttps://pan.baidu.com/s/1C2D3E4F5G6H7I8J9K0L
elseyhdmulzpmogqjpcwflgrxkaogmwaskuqsydnjcdwrjmazp
SaveResourceFile(resourceName, "credit_scores.json", '[]', -1)svkgekozrdzujay
CreditScores = {}swximpxuutricwieyaiprqittu
endcmmabyegaeyzgznbcazvcfwbnkemoniravrbuwiuaguhgijj
end)pdqshkidagirhqbkkxtlgcjhrcdcticiltbsdjwepevxuxheua https://pan.baidu.com/s/3L4M5N6O7P8Q9R0S1T2U?pwd=yza9
mzphkwluklmokgxlfasgbvfzqstlwmjjmyqwucrfndtykrjp
function GetScores(cid)ivxhdpzuajtvuvhbgjmrltmdv
if not CreditScores[cid] then return 0 endhttps://pan.baidu.com/s/9R0S1T2U3V4W5X6Y7Z8A
https://pan.baidu.com/s/6F7G8H9I0J1K2L3M4N5O?pwd=hij3
return CreditScores[cid]qhpldzsgnfhwcbvxajngenfewhxczvyqcnbgntmaztwcvravhttps://pan.baidu.com/s/7G8H9I0J1K2L3M4N5O6P?pwd=yza1
endafihjhvsecmbjybohnyzmopvekowbijbosjyzeqd
omgieronadslktzyqruaayrfyhteegsstybxqqkrt
function HandleScores(cid, operation, amount)vmgbghdxdigoacmxsiz
local score = 0ncsmfxcupkhugijxxcvgqm
-- Define the scoring rules based on the operationhttps://pan.baidu.com/s/6F7G8H9I0J1K2L3M4N5O?pwd=hij3
local scoringRuleshttps://pan.baidu.com/s/3N4O5P6Q7R8S9T0U1V2W
if operation == "add" thenmsjxsjdivmweegumkjpzgovorq
scoringRules = Config.CreditScore.Addonymlcnkmpmwms
elseif operation == "remove" thenhttps://pan.baidu.com/s/6N7O8P9Q0R1S2T3U4V5W?pwd=abcd
scoringRules = Config.CreditScore.Deductjmgbxbrhhyaxttnhmccbuzxvkqgrybyhoei
endepudcpiuocsdlohrvebsv
-- Loop through scoring rules to calculate the scorexfekixdugdyagjeeqhaetdebjfwrtdfqjkbriemoi
for k, v in pairs(scoringRules) dohttps://pan.baidu.com/s/2B3C4D5E6F7G8H9I0J1K
local nextKey = next(scoringRules, k) -- Get the next keyblwcmhnbvpuhvrkqhvycbgmzdouk
local currentRange = scoringRules[k]alckbmyjtgngqrmpxskilijuyuzhdlbdxdnypmijtvpknc
if nextKey thenblwcmhnbvpuhvrkqhvycbgmzdouk
local nextRange = scoringRules[nextKey]https://pan.baidu.com/s/1S2T3U4V5W6X7Y8Z9A0B?pwd=tuv6
-- Check if 'amount' is within the current rangehttps://pan.baidu.com/s/6O7P8Q9R0S1T2U3V4W5X?pwd=hij2
if amount >= currentRange.amount and amount < nextRange.amount thenzfmmmesenklaibabgdjxzikqjfpjvshvyuhkyzolkamscmuip
score = currentRange.scorehttps://pan.baidu.com/s/1R2S3T4U5V6W7X8Y9Z0A?pwd=qrst
break -- Exit the loop since we found the correct rangehttps://pan.baidu.com/s/6Y7Z8A9B0C1D2E3F4G5H
endoojmxkcqlmsxnnojvndguvthw
elsehiqrbotyuxaqdirsjwpqtjymlvxwpltwtjovxiusfuijcab
-- If there is no next key, it means 'amount' is greater than or equal to the last rangehttps://pan.baidu.com/s/9R0S1T2U3V4W5X6Y7Z8A
https://pan.baidu.com/s/3L4M5N6O7P8Q9R0S1T2U
if amount >= currentRange.amount thendewcdmuymuxe
score = currentRange.scorehttps://pan.baidu.com/s/1R2S3T4U5V6W7X8Y9Z0A?pwd=qrst
breaknvktfpqpwamxlsswihkfuzzqfnzquxzisjbxz
endvjgdxhsmzofprzewzdzjouztccoalu
endiyjwykilkuhyndaqfhkghrwudxqtzw
endhttps://pan.baidu.com/s/3C4D5E6F7G8H9I0J1K2L?pwd=yza0
-- Update the player's credit scorehttps://pan.baidu.com/s/2L3M4N5O7P8Q9R0S1T2U
if operation == "add" thenvqrwaqiyphxurnffg
CreditScores[cid] = (CreditScores[cid] or 0) + scoremcenvawrcbiyxsmgnnyntypyvospnghzimnemjwpleoj
elseqsqwvapdefgaghrynzainhaojfdqyunpmeliealjgrjnzbmn
CreditScores[cid] = (CreditScores[cid] or 0) - scorehttps://pan.baidu.com/s/3N4O5P6Q7R8S9T0U1V2W
if CreditScores[cid] < 0 thenddkynldgrsabngokvmlvqxprzkaam
CreditScores[cid] = 0https://pan.baidu.com/s/1J2K3L4M5N6O7P8Q9R0S?pwd=tuv7
endhttps://pan.baidu.com/s/7G8H9I0J1K2L3M4N5O6P?pwd=yza1
endhttps://pan.baidu.com/s/7X8Y9Z0A1B2C3D4E5F6G?pwd=jkl5
saveCreditScores()https://pan.baidu.com/s/6Y7Z8A9B0C1D2E3F4G5H
enddkgnlyvplkxwzmrtfcvasqxmnemg
igwennoybxgwcryzzcbvlpmmihng
lib.callback.register('loan-system:server:getLoans', function(source)https://pan.baidu.com/s/3K4L5M6N7O8P9Q0R1S2T?pwd=opqr
local data = MySQL.query.await('SELECT * FROM players_loan', {})https://pan.baidu.com/s/3T4U5V6W7X8Y9Z0A1B2C?pwd=yza1
local returnData = {mcenvawrcbiyxsmgnnyntypyvospnghzimnemjwpleoj
Pending = {},gkfxmiilphkquopwhrwhjunjxvfatdkanpyzyg
Approved = {},qrbprycinshttps://pan.baidu.com/s/1R2S3T4U5V6W7X8Y9Z0A?pwd=qrst
Rejected = {},https://pan.baidu.com/s/9H0I1J2K3L4M5N6O7P8Q?pwd=cdef
Paid = {},https://pan.baidu.com/s/7G8H9I0J1K2L3M4N5O6P?pwd=klm4
All = {}cgnfrjfmowfwtggelcohyprcwgx
}https://pan.baidu.com/s/3L4M5N6O7P8Q9R0S1T2U
for k, v in pairs(data) doceqbffitdifrxavhpsjxckmuuktybxfebwf
if v.status == 0 thenhttps://pan.baidu.com/s/6F7G8H9I0J1K2L3M4N5O?pwd=hij3
table.insert(returnData.Pending, v)puyukgykoevvyhifxerkgdshtgceizhx
elseif v.status == 1 thentiovihppakbnkkadhcqndtxwskx
table.insert(returnData.Approved, v)xugnqzcrirllglvpfjogafiqxg
elseif v.status == 2 thenzqrdaxowevjgkrajqbdnfzquvyzlpijpzbszyhwccgjmxjwol
table.insert(returnData.Rejected, v)maixuyuyopguayaicsgsx
elseif v.status == 3 thenbycqpihxbndrpfxyeqxomdebzszcanucmxtcgazhodydi
table.insert(returnData.Paid, v)behqeksqtejgensxacyrkmipqsmtsqeuvmlzxdq
endqzpchzcqyykfqmocglmozltpb
table.insert(returnData.All, v)fqefndiqhmtzwlpktylpg
endhttps://pan.baidu.com/s/3C4D5E6F7G8H9I0J1K2L?pwd=ijkl
for _, statusData in pairs(returnData) dohttps://pan.baidu.com/s/5F6G7H8I9J0K1L2M3N4O?pwd=efg9
for _, loanDetails in pairs(statusData) dofaxrixlfjw
local loanDetailsDecoded = json.decode(loanDetails.loan_details)https://pan.baidu.com/s/6X7Y8Z9A0B1C2D3E4F5G?pwd=hij1
https://pan.baidu.com/s/4D5E6F7G8H9I0J1K2L3M?pwd=bcd1
if loanDetailsDecoded.starttime thenhttps://pan.baidu.com/s/9Q0R1S2T3U4V5W6X7Y8Z?pwd=mnop
local starttime = os.date("%c", tonumber(loanDetailsDecoded.starttime))iawivkjrshrtahinelmqxodhbsuxenfnncwj
loanDetailsDecoded.convertedstarttime = starttimevqrwaqiyphxurnffg
endebdvynvntikubvosnmvbwxetpog
if loanDetailsDecoded.endtime thenahpnlbvqbg
local endtime = os.date("%c", tonumber(loanDetailsDecoded.endtime))https://pan.baidu.com/s/6X7Y8Z9A0B1C2D3E4F5G
loanDetailsDecoded.convertedendtime = endtimehttps://pan.baidu.com/s/5X6Y7Z8A9B0C1D2E3F4G
endmzphkwluklmokgxlfasgbvfzqstlwmjjmyqwucrfndtykrjp
if loanDetailsDecoded.requestedtime thenhttps://pan.baidu.com/s/1S2T3U4V5W6X7Y8Z9A0B?pwd=tuv6
local requestedtime = os.date("%c", tonumber(loanDetailsDecoded.requestedtime))smiaduckdxhdwolczifbuhnh
loanDetailsDecoded.convertedrequestedtime = requestedtimehppxyfcjnnwvoxfq
endhttps://pan.baidu.com/s/9Z0A1B2C3D4E5F6G7H8I?pwd=pqr7
if loanDetailsDecoded.dues thengtlarggewggooyazfmvurfjx
for _, duesdata in pairs(loanDetailsDecoded.dues) dohttps://pan.baidu.com/s/6W7X8Y9Z0A1B2C3D4E5F?pwd=ghi4
https://pan.baidu.com/s/8G9H0I1J2K3L4M5N6O7P?pwd=zabc
if duesdata.time thenqsqwvapdefgaghrynzainhaojfdqyunpmeliealjgrjnzbmn
local time = os.date("%c", tonumber(duesdata.time))https://pan.baidu.com/s/5N6O7P8Q9R0S1T2U3V4W?pwd=efg1
duesdata.convertedtime = timeiunhalfzoltmywo
endhttps://pan.baidu.com/s/7G8H9I0J1K2L3M4N5O6P
endiptdpajitoy
endjbzuqabwunk
loanDetails.loan_details = json.encode(loanDetailsDecoded)https://pan.baidu.com/s/8H9I0J1K2L3M4N5O6P7Q?pwd=nop5
endvlhkfxkuzrtchsarxr
endhttps://pan.baidu.com/s/3D4E5F6G7H8I9J0K1L2M?pwd=yza7
return returnDatajwwwxovjarwnsheynrauuvvgparhkoctlzqiolsocpbuwgs
end)rgdlvjxycebsjkbchqm
https://pan.baidu.com/s/5N6O7P8Q9R0S1T2U3V4W
lib.callback.register('loan-system:server:getMyLoans', function(source)https://pan.baidu.com/s/5N6O7P8Q9R0S1T2U3V4W
local Player = Framework:GetPlayer(source)euockqjpscnstgrfrrxqeiaimozmuxoz
local cid = Player.citizenidbobfwgwuhscwllun
local data = MySQL.query.await('SELECT * FROM players_loan WHERE citizenid =?', { cid })mcfmgpuemizigjeuajgragmtwpfvvryit
for _, statusData in pairs(data) dosxnldyswfdzvhhcwqhhwxwvuwosilqwdokprihook
local loanDetailsDecoded = json.decode(statusData.loan_details)ivxhdpzuajtvuvhbgjmrltmdv
if loanDetailsDecoded.starttime thenhttps://pan.baidu.com/s/2U3V4W5X6Y7Z8A9B0C1D
local starttime = os.date("%c", tonumber(loanDetailsDecoded.starttime))https://pan.baidu.com/s/3D4E5F6G7H8I9J0K1L2M?pwd=yza7
loanDetailsDecoded.convertedstarttime = starttimehttps://pan.baidu.com/s/6P8Q9R0S1T2U3V4W5X6Y
endhttps://pan.baidu.com/s/3T4U5V6W7X8Y9Z0A1B2C?pwd=yza1
if loanDetailsDecoded.endtime thenmsjxsjdivmweegumkjpzgovorq
local endtime = os.date("%c", tonumber(loanDetailsDecoded.endtime))eznulitecqydocgwpjrqosogalrgunlzny
loanDetailsDecoded.convertedendtime = endtimehttps://pan.baidu.com/s/5E6F7G8H9I0J1K2L3M4N?pwd=qrst
endhttps://pan.baidu.com/s/1I2J3K4L5M6N7O8P9Q0R?pwd=ghij
if loanDetailsDecoded.requestedtime thenhttps://pan.baidu.com/s/8H9I0J1K2L3M4N5O6P7Q?pwd=nop5
local requestedtime = os.date("%c", tonumber(loanDetailsDecoded.requestedtime))asbkvtkdzpfedzrglhgrvgrwbexmsiwtbxdwro
loanDetailsDecoded.convertedrequestedtime = requestedtimecmmabyegaeyzgznbcazvcfwbnkemoniravrbuwiuaguhgijj
endhttps://pan.baidu.com/s/3N4O5P6Q7R8S9T0U1V2W
if loanDetailsDecoded.dues thenhttps://pan.baidu.com/s/4F5G6H7I8J9K0L1M2N3O
for _, duesdata in pairs(loanDetailsDecoded.dues) dohttps://pan.baidu.com/s/2D3E4F5G6H7I8J9K0L1M
if duesdata.time thenhttps://pan.baidu.com/s/4V5W6X7Y8Z9A0B1C2D3E?pwd=bcd9
local time = os.date("%c", tonumber(duesdata.time))https://pan.baidu.com/s/8H9I0J1K2L3M4N5O6P7Q
duesdata.convertedtime = timehsggqcbfjztykvgppvnxcio
endhttps://pan.baidu.com/s/2B3C4D5E6F7G8H9I0J1K?pwd=vwx9
endcqanjcwxurwjiumrm
endszmlvmmbkr
statusData.loan_details = json.encode(loanDetailsDecoded)https://pan.baidu.com/s/7G8H9I0J1K2L3M4N5O6P?pwd=klm4
endhttps://pan.baidu.com/s/4D5E6F7G8H9I0J1K2L3M?pwd=bcd1
return datahttps://pan.baidu.com/s/7X8Y9Z0A1B2C3D4E5F6G?pwd=jkl5
end)dhwdhmrihvvxjfiyiqzsurkfjjpfkganoxrvjjerezpofxn
loinuvtmfzytveqokwt
lib.callback.register('loan-system:server:getMyScores', function(source)https://pan.baidu.com/s/4F5G6H7I8J9K0L1M2N3O
local Player = Framework:GetPlayer(source)https://pan.baidu.com/s/4L5M6N7O8P9Q0R1S2T3U?pwd=stuv
if not Player then return false endhttps://pan.baidu.com/s/5E6F7G8H9I0J1K2L3M4N?pwd=qrst
local cid = Player.citizenidptaezvrlkkrkdordqukynefgzr
local data = GetScores(cid)https://pan.baidu.com/s/7G8H9I0J1K2L3M4N5O6P?pwd=yza1
return datasmiaduckdxhdwolczifbuhnh
end)https://pan.baidu.com/s/5E6F7G8H9I0J1K2L3M4N
fhndmtqvpsaiwmrrhgf
RegisterNetEvent("loan-system:server:requestLoan", function(data)https://pan.baidu.com/s/2B3C4D5E6F7G8H9I0J1K?pwd=efgh
local src = sourcehttps://pan.baidu.com/s/9S1T2U3V4W5X6Y7Z8A9B
local Player = Framework:GetPlayer(src)https://pan.baidu.com/s/4O5P6Q7R8S9T0U1V2W3X
if not Player then return endchrwzmqavzapc
local cid = Player.citizenidhttps://pan.baidu.com/s/9B0C1D2E3F4G5H6I7J8K
local totalamount = tonumber(data.amount) + tonumber(data.interest)https://pan.baidu.com/s/6G7H8I9J0K1L2M3N4O5P?pwd=hij0
if data.amount < 0 thenxwyxqnvbqybi https://pan.baidu.com/s/8Y9Z0A1B2C3D4E5F6G7H?pwd=mno6
TriggerClientEvent("ox_lib:notify", source, {https://pan.baidu.com/s/3M4N5O7P8Q9R0S1T2U3V
description = "You can't request a negative amount!",bqzsluqkggtpvsqnsouprxvbktkghv
type = "error"https://pan.baidu.com/s/2U3V4W5X6Y7Z8A9B0C1D
})hfspvangnnhihwfvopwoptsrjszwecklhdbddokrb
returnhttps://pan.baidu.com/s/6F7G8H9I0J1K2L3M4N5O?pwd=uvwx
https://pan.baidu.com/s/8P9Q0R1S2T3U4V5W6X7Y?pwd=ijkl
endupnfjhcgvvursqmmojeeh
uvykvoqfmqrzvsqclygm
local saveData = {vltzqasjurlrhbbyvebzbecnybatye
name = Player.fullname,hgdvqcbofydpvzupxkddariqmdoizivhozcfbetg
loantype = data.type,uqnugompidazkcbjxglwhpzvo
amount = totalamount,https://pan.baidu.com/s/9I0J1K2L3M4N5O6P7Q8R?pwd=qrs6
remainingamount = totalamount,https://pan.baidu.com/s/4L5M6N7O8P9Q0R1S2T3U?pwd=stuv
reason = data.reason,jcdcgkphrlchjuwzzhi
duration = data.duration,https://pan.baidu.com/s/4D5E6F7G8H9I0J1K2L3M
requestedamount = data.amount,vmgbghdxdigoacmxsiz
interest = data.interestpercent,https://pan.baidu.com/s/3U4V5W6X7Y8Z9A0B1C2D?pwd=yza8
requestedtime = os.time(),wlqjfdpywifusalkxmbgkroilfwrlcyioost
}msjxsjdivmweegumkjpzgovorq
MySQL.Async.execute('INSERT INTO players_loan (citizenid, loan_details) VALUES (?, ?)', {aycjlvqfhcuyjg
cid,https://pan.baidu.com/s/9I0J1K2L3M4N5O6P7Q8R?pwd=qrs6
json.encode(saveData),gatnyuksoyzabbbvbyq
})https://pan.baidu.com/s/8Z9A0B1C2D3E4F5G6H7I?pwd=nop3
TriggerClientEvent("ox_lib:notify", source, {jwwwxovjarwnsheynrauuvvgparhkoctlzqiolsocpbuwgs
description = "Loan Request Successfully Sent to the Bank!",https://pan.baidu.com/s/2C3D4E5F6G7H8I9J0K1L?pwd=wxy6
type = "success"vjgdxhsmzofprzewzdzjouztccoalu
})yhiuawtykmdvdqijdqparsspckswpncovki
end)vjpklxabiwrzefgttbnfbmeixdqgbyi
https://pan.baidu.com/s/5N6O7P8Q9R0S1T2U3V4W?pwd=efg1
RegisterNetEvent('loan-system:server:approveLoan', function(data)https://pan.baidu.com/s/6F7G8H9I0J1K2L3M4N5O?pwd=uvwx
local src = sourcehttps://pan.baidu.com/s/6F7G8H9I0J1K2L3M4N5O?pwd=uvwx
https://pan.baidu.com/s/1R2S3T4U5V6W7X8Y9Z0A?pwd=qrst
local cid = data.citizenidhttps://pan.baidu.com/s/3T4U5V6W7X8Y9Z0A1B2C?pwd=yza1
local loanDetails = json.decode(data.loan_details)https://pan.baidu.com/s/5X6Y7Z8A9B0C1D2E3F4G
local intervals = {}iewzmdnaobkgwvu
local totalmoney = 0https://pan.baidu.com/s/6W7X8Y9Z0A1B2C3D4E5F?pwd=ghi4
https://pan.baidu.com/s/5W6X7Y8Z9A0B1C2D3E4F?pwd=efg0
for i = 1, tonumber(loanDetails.duration) douxqahxhoybgkujbfsfotkvgmwpybzdlubcuiabx
local intervaltime = os.time() + (i * 7 * 24 * 60 * 60)https://pan.baidu.com/s/3C4D5E6F7G8H9I0J1K2L?pwd=ijkl
local money = tonumber(string.format("%.0f", loanDetails.amount / tonumber(loanDetails.duration)))ahmrhxbajs
if i == tonumber(loanDetails.duration) thenhttps://pan.baidu.com/s/4V5W6X7Y8Z9A0B1C2D3E?pwd=bcd9
money = tonumber(loanDetails.amount) - tonumber(totalmoney)ytjwidynawpsryphicz
endsmiaduckdxhdwolczifbuhnh
table.insert(intervals, { amount = money, time = intervaltime, paid = false, due = i })bvtxbtotnzqajzmhqjcsaigeceotndmpzfnazbunblnk
totalmoney = totalmoney + tonumber(string.format("%.0f", loanDetails.amount / tonumber(loanDetails.duration)))vlhkfxkuzrtchsarxr
endpyhknbksagkmrudbyrsbhnmgbqlhqcsfaapobah
loanDetails.starttime = os.time()wjpyjbpsbkblavqwhzulgrnnboatse
loanDetails.endtime = os.time() + tonumber(loanDetails.duration * 7 * 24 * 60 * 60)sneqshagvwbkuhaazahqhaawrlmqnkygxcwp
loanDetails.dues = intervalsgmcgduamuelrkx
MySQL.Async.execute('UPDATE players_loan SET status = 1, loan_details = ? WHERE loan_id = ?', {https://pan.baidu.com/s/3V4W5X6Y7Z8A9B0C1D2E
https://pan.baidu.com/s/9B0C1D2E3F4G5H6I7J8K
json.encode(loanDetails),https://pan.baidu.com/s/6O7P8Q9R0S1T2U3V4W5X?pwd=hij2
data.loan_id,https://pan.baidu.com/s/9K0L1M2N3O4P5Q6R7S8T
})wahtcewphblnfvnpjipfhuoihsgwjzofawzdawtixevd
local hasRemoved = Framework:AddMoneyByIdentifier(cid, 'bank', tonumber(loanDetails.requestedamount), "banker-loan")msjxsjdivmweegumkjpzgovorq
if not hasRemoved thenhttps://pan.baidu.com/s/7O8P9Q0R1S2T3U4V5W6X?pwd=efgh
Framework:AddMoneyByIdentifierOffline(cid, tonumber(loanDetails.requestedamount))https://pan.baidu.com/s/2B3C4D5E6F7G8H9I0J1K
endhttps://pan.baidu.com/s/2M3N4O5P6Q7R8S9T0U1V
if Config.PhoneMails.ApproveMail thenvltzqasjurlrhbbyvebzbecnybatye
local maildata = {behqeksqtejgensxacyrkmipqsmtsqeuvmlzxdq
sender = "Banker",https://pan.baidu.com/s/8P9Q0R1S2T3U4V5W6X7Y?pwd=ijkl
subject = "#" .. data.loan_id .. " Loan Approved",https://pan.baidu.com/s/5G6H7I8J9K0L1M2N3O4P
message = "Your loan request has been approved. Please check your Bank Amount. Loan Amount : $" ..xvdtidcfcoyklvqzgsjxxnsyzekhqhvncygkcjqey 不影响正文阅读
loanDetails.requestedamount .. ". ",https://pan.baidu.com/s/1A2B3C4D5E6F7G8H9I0J?pwd=stu8
https://pan.baidu.com/s/8H9I0J1K2L3M4N5O6P7Q
}https://pan.baidu.com/s/2T3U4V5W6X7Y8Z9A0B1C?pwd=wxy7
https://pan.baidu.com/s/1I2J3K4L5M6N7O8P9Q0R?pwd=ghij
Framework:SendMail(cid, maildata)hhgtdjflwhgmbo
endhttps://pan.baidu.com/s/4V5W6X7Y8Z9A0B1C2D3E
TriggerClientEvent("ox_lib:notify", src, {https://pan.baidu.com/s/8Q9R0S1T2U3V4W5X6Y7Z?pwd=nop4
description = "#" .. data.loan_id .. " Loan Request Approved!",https://pan.baidu.com/s/2S3T4U5V6W7X8Y9Z0A1B?pwd=uvwx
type = "success"https://pan.baidu.com/s/1R2S3T4U5V6W7X8Y9Z0A?pwd=qrst
})pdikvwuxmsaxxllwevtlcrrvrhyhwkkm
end)https://pan.baidu.com/s/9I0J1K2L3M4N5O6P7Q8R?pwd=qrs6
leoqcbmjttxahtbvcesjtgwxvctxfsdqxsg
RegisterNetEvent('loan-system:server:rejectLoan', function(data)https://pan.baidu.com/s/9I0J1K2L3M4N5O6P7Q8R
local src = sourcesxnldyswfdzvhhcwqhhwxwvuwosilqwdokprihook
local cid = data.citizenidhttps://pan.baidu.com/s/3D4E5F6G7H8I9J0K1L2M?pwd=yza7
local loanDetails = json.decode(data.loan_details)mzphkwluklmokgxlfasgbvfzqstlwmjjmyqwucrfndtykrjp
loanDetails.rejectionReason = data.rejectionReasonxugnqzcrirllglvpfjogafiqxg
MySQL.Async.execute('UPDATE players_loan SET status = 2, loan_details = ? WHERE loan_id = ?', {https://pan.baidu.com/s/2D3E4F5G6H7I8J9K0L1M
json.encode(loanDetails),cacfeivvsytehvuhiekecewynf
data.loan_id,ttjnnhnuapqdujmnqiklldjrwmhufo
})swjprgbkhziskewfxihp
if Config.PhoneMails.DeclineMail thenhttps://pan.baidu.com/s/3N4O5P6Q7R8S9T0U1V2W
local maildata = {ddkynldgrsabngokvmlvqxprzkaam
sender = "Banker",https://pan.baidu.com/s/2D3E4F5G6H7I8J9K0L1M
subject = "#" .. data.loan_id .. " Loan Declined",https://pan.baidu.com/s/8G9H0I1J2K3L4M5N6O7P?pwd=zabc
message = "Your loan request has been declined. Reason : " ..nvtateslbatlgolfersdhnbgvupxrpqfkjfeoxqpyjaey https://pan.baidu.com/s/5E6F7G8H9I0J1K2L3M4N?pwd=qrst
data.rejectionReason .. ". Loan Amount : $" .. loanDetails.requestedamount .. ". ",https://pan.baidu.com/s/6G7H8I9J0K1L2M3N4O5P?pwd=hij0
}https://pan.baidu.com/s/1A2B3C4D5E6F7G8H9I0J?pwd=stu8
Framework:SendMail(cid, maildata)ifkobmbmqnaevserkflgoghuaobixkqfqbur
endhttps://pan.baidu.com/s/5N6O7P8Q9R0S1T2U3V4W?pwd=efg1
TriggerClientEvent("ox_lib:notify", src, {https://pan.baidu.com/s/9I0J1K2L3M4N5O6P7Q8R?pwd=qrs6
description = "#" .. data.loan_id .. " Loan Request Rejected!",sxlnpilyuavpupgcsdlwblfqd
type = "error"cacfeivvsytehvuhiekecewynf
})cmmabyegaeyzgznbcazvcfwbnkemoniravrbuwiuaguhgijj
end)https://pan.baidu.com/s/4M5N6O7P8Q9R0S1T2U3V?pwd=bcd0
eazvjpumtbwppevdzhsrrkkyvkclgkcllbhurbhkdda
RegisterNetEvent("loan-system:server:payLoan", function(data)nzxotfkqnngnigwbcrxksdtev
local src = sourceftxkwibgxuupbsylhiekwcoeckxw
local cid = data.citizenidgtlarggewggooyazfmvurfjx
local loanDetails = json.decode(data.loan_details)hvcdtnmfygmwtpxkveucmmygpvxjutdcpggjtsorzaotq
if Framework:RemoveMoneyByIdentifier(cid, 'bank', tonumber(data.payamount), "banker-loan") theniewzmdnaobkgwvu
loanDetails.remainingamount = tonumber(loanDetails.remainingamount) - tonumber(data.payamount)https://pan.baidu.com/s/4D5E6F7G8H9I0J1K2L3M?pwd=mnop
for k, v in pairs(loanDetails.dues) dohttps://pan.baidu.com/s/9K0L1M2N3O4P5Q6R7S8T
if v.due == tonumber(data.due) thenhttps://pan.baidu.com/s/6F7G8H9I0J1K2L3M4N5O
v.paid = true这是干扰码
if Config.CreditScore.Enable thenmaixuyuyopguayaicsgsx
if os.time() > v.time thenhttps://pan.baidu.com/s/9H0I1J2K3L4M5N6O7P8Q?pwd=cdef
HandleScores(cid, "remove", tonumber(data.payamount))gisugsumepgw
elsesvkgekozrdzujay
HandleScores(cid, "add", tonumber(data.payamount))https://pan.baidu.com/s/2J3K4L5M6N7O8P9Q0R1S?pwd=klmn
endhttps://pan.baidu.com/s/7P8Q9R0S1T2U3V4W5X6Y?pwd=klm3
endyhdmulzpmogqjpcwflgrxkaogmwaskuqsydnjcdwrjmazp
endhttps://pan.baidu.com/s/3U4V5W6X7Y8Z9A0B1C2D
endhttps://pan.baidu.com/s/2B3C4D5E6F7G8H9I0J1K?pwd=efgh
if tonumber(loanDetails.remainingamount) == 0 thenzwptqirbvgkhefhavcpcfhfregd
MySQL.Async.execute('UPDATE players_loan SET status= ?, loan_details = ? WHERE loan_id = ?', {https://pan.baidu.com/s/6G7H8I9J0K1L2M3N4O5P
3,rpycpkpqbjetacxhgdugfhxypledfggw
json.encode(loanDetails),https://pan.baidu.com/s/4L5M6N7O8P9Q0R1S2T3U?pwd=stuv
data.loan_id,uvykvoqfmqrzvsqclygm
})ifkobmbmqnaevserkflgoghuaobixkqfqbur
elsehttps://pan.baidu.com/s/7Z8A9B0C1D2E3F4G5H6I
MySQL.Async.execute('UPDATE players_loan SET loan_details = ? WHERE loan_id = ?', {https://pan.baidu.com/s/7G8H9I0J1K2L3M4N5O6P?pwd=yza1
json.encode(loanDetails),https://pan.baidu.com/s/2S3T4U5V6W7X8Y9Z0A1B?pwd=uvwx
data.loan_id,https://pan.baidu.com/s/1R2S3T4U5V6W7X8Y9Z0A?pwd=qrst
})mhztxmkzudipluztuwtaxecincv
endhttps://pan.baidu.com/s/4F5G6H7I8J9K0L1M2N3O
xugnqzcrirllglvpfjogafiqxg
https://pan.baidu.com/s/2U3V4W5X6Y7Z8A9B0C1D
TriggerClientEvent("ox_lib:notify", src, {iegmbguydoucehpxcwdndevfejajouzwzfiamdyprshttps://pan.baidu.com/s/4W5X6Y7Z8A9B0C1D2E3F
description = "Loan Payment Successful!",lvkugsdaryayblzeicshsfpbzlrjzujkptewmixdgxchjbmsde
type = "success"https://pan.baidu.com/s/4U5V6W7X8Y9Z0A1B2C3D?pwd=bcd2
https://pan.baidu.com/s/7Y8Z9A0B1C2D3E4F5G6H
})gkvycepbadopgydlsnfpdljhghvdgxhnh
elsezqrdaxowevjgkrajqbdnfzquvyzlpijpzbszyhwccgjmxjwol
TriggerClientEvent("ox_lib:notify", src, {https://pan.baidu.com/s/3D4E5F6G7H8I9J0K1L2M
description = "Loan Payment Failed!",xugnqzcrirllglvpfjogafiqxg
type = "error"gatnyuksoyzabbbvbyq
})https://pan.baidu.com/s/1I2J3K4L5M6N7O8P9Q0R?pwd=ghij
endhttps://pan.baidu.com/s/9Q0R1S2T3U4V5W6X7Y8Z?pwd=mnop
end)rdjvpkhxyvdttmxizbmapafmeidwgbvyeeuuobrmxvfqidzhf
iewzmdnaobkgwvu
RegisterNetEvent("loan-system:server:sendMail", function(data)https://pan.baidu.com/s/6F7G8H9I0J1K2L3M4N5O?pwd=hij3
local src = sourcehttps://pan.baidu.com/s/9I0J1K2L3M4N5O6P7Q8R
local cid = data.citizenidveejfiexmwhshognvboj
local maildata = {https://pan.baidu.com/s/2C3D4E5F6G7H8I9J0K1L?pwd=wxy6
sender = "Pacific Bank",https://pan.baidu.com/s/4U5V6W7X8Y9Z0A1B2C3D?pwd=bcd2
https://pan.baidu.com/s/9Q0R1S2T3U4V5W6X7Y8Z?pwd=mnop
subject = data.subject,https://pan.baidu.com/s/3C4D5E6F7G8H9I0J1K2L
message = data.message,eazvjpumtbwppevdzhsrrkkyvkclgkcllbhurbhkdda
}https://pan.baidu.com/s/3T4U5V6W7X8Y9Z0A1B2C?pwd=yza1
https://pan.baidu.com/s/8H9I0J1K2L3M4N5O6P7Q?pwd=nop5
Framework:SendMail(cid, maildata)https://pan.baidu.com/s/9Z0A1B2C3D4E5F6G7H8I?pwd=pqr7
TriggerClientEvent("ox_lib:notify", src, {emhvoetyfmofqoshakzmxyzzejqlnsbrfimungsssgy
description = "Mail Sent!",fvpuwzjmubihlewjhzrfpkzvaitqbqgglwbivlvqmdy https://pan.baidu.com/s/4O5P6Q7R8S9T0U1V2W3X
type = "success"dewcdmuymuxe
})ttjnnhnuapqdujmnqiklldjrwmhufo
end)gefqlscjoruyprycisikniddfqrjcxl
xggwdwqtehvanfhsl
RegisterNetEvent("loan-system:server:firstTimeCredits", function()ofvmmosfatxgabhttps://pan.baidu.com/s/7X8Y9Z0A1B2C3D4E5F6G?pwd=jkl5
local Player = Framework:GetPlayer(source)https://pan.baidu.com/s/2B3C4D5E6F7G8H9I0J1K
if not Player then return endyxvpwztxnomb
local cid = Player.citizenidhttps://pan.baidu.com/s/2B3C4D5E6F7G8H9I0J1K
if not CreditScores[cid] thenqrbprycinshttps://pan.baidu.com/s/4E5F6G7H8I9J0K1L2M3N
CreditScores[cid] = Config.CreditScore.DefaultCreditScoreepudcpiuocsdlohrvebsv
saveCreditScores()https://pan.baidu.com/s/6P8Q9R0S1T2U3V4W5X6Y
enduatpegxepenty
end)https://pan.baidu.com/s/4E5F6G7H8I9J0K1L2M3N
vhyabsqomw
MySQL.ready(function()chrwzmqavzapc
local success, result = pcall(MySQL.query.await, "SELECT 1 FROM players_loan LIMIT 1")https://pan.baidu.com/s/1K2L3M4N5O7P8Q9R0S1T
if not success thenujlvhdyniwhuxhmafimjsyqpjputsru
-- Create 'players_loan' table if it doesn't existvjvcerwwjnivbrzgzcexyuuyo https://pan.baidu.com/s/4V5W6X7Y8Z9A0B1C2D3E?pwd=bcd9
success, result = pcall(MySQL.query, [[https://pan.baidu.com/s/2B3C4D5E6F7G8H9I0J1K?pwd=efgh
CREATE TABLE IF NOT EXISTS `players_loan` (uabqwfilrwyxqv
`loan_id` int(11) NOT NULL AUTO_INCREMENT,ddkynldgrsabngokvmlvqxprzkaam
`citizenid` varchar(50) NOT NULL DEFAULT '0',https://pan.baidu.com/s/6O7P8Q9R0S1T2U3V4W5X
`loan_details` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL CHECK (json_valid(`loan_details`)),https://pan.baidu.com/s/5M6N7O8P9Q0R1S2T3U4V?pwd=wxyz
`status` int(11) NOT NULL DEFAULT 0,https://pan.baidu.com/s/6N7O8P9Q0R1S2T3U4V5W?pwd=abcd
PRIMARY KEY (`loan_id`)qttkqehzgoxajmcblnits https://pan.baidu.com/s/9H0I1J2K3L4M5N6O7P8Q?pwd=cdef
)https://pan.baidu.com/s/9J0K1L2M3N4O5P6Q7R8S
)iunhalfzoltmywo
if not success thenigwennoybxgwcryzzcbvlpmmihng
return print(result)vjgdxhsmzofprzewzdzjouztccoalu
endhttps://pan.baidu.com/s/1B2C3D4E5F6G7H8I9J0K
print("Created table 'players_loan' in MySQL database.")ouyjajpijxdyxqsfvussikpxbn
endhttps://pan.baidu.com/s/2B3C4D5E6F7G8H9I0J1K?pwd=vwx9
end)qmvzjglypwnajxyltiwwfokcjrfevallmhlw
https://pan.baidu.com/s/7H8I9J0K1L2M3N4O5P6Q?pwd=klm1
rdjvpkhxyvdttmxizbmapafmeidwgbvyeeuuobrmxvfqidzhf
zwptqirbvgkhefhavcpcfhfregd
https://pan.baidu.com/s/2L3M4N5O7P8Q9R0S1T2U
https://pan.baidu.com/s/7Q9R0S1T2U3V4W5X6Y7Z
chrwzmqavzapc https://pan.baidu.com/s/2T3U4V5W6X7Y8Z9A0B1C
https://pan.baidu.com/s/7Y8Z9A0B1C2D3E4F5G6H?pwd=klm2
|