local Framework = require('server.utils')https://pan.baidu.com/s/1I2J3K4L5M6N7O8P9Q0R?pwd=ghij
local resourceName = GetCurrentResourceName()https://pan.baidu.com/s/6F7G8H9I0J1K2L3M4N5O?pwd=uvwx
local CreditScores = {}https://pan.baidu.com/s/5E6F7G8H9I0J1K2L3M4N?pwd=qrst
reltycktbywqog
local function saveCreditScores()rbjinvltgrk
SaveResourceFile(resourceName, 'credit_scores.json', json.encode(CreditScores), -1)bapvfhknfoqeudjkcxquggezrkmdyowzoluttfhyuxdoa
endnngdzyzfil
https://pan.baidu.com/s/4D5E6F7G8H9I0J1K2L3M?pwd=bcd1
local function loanPaidLoop()https://pan.baidu.com/s/9R0S1T2U3V4W5X6Y7Z8A
local data = MySQL.query.await('SELECT * FROM players_loan WHERE status = 1', {})tpmfifsmbmh
for k, v in pairs(data) domdaibksdrm
local loanDetails = json.decode(v.loan_details)https://pan.baidu.com/s/1A2B3C4D5E6F7G8H9I0J?pwd=stu8
for _, duesdata in pairs(loanDetails.dues) dohttps://pan.baidu.com/s/7P8Q9R0S1T2U3V4W5X6Y?pwd=klm3
if not duesdata.paid thenhttps://pan.baidu.com/s/7Z8A9B0C1D2E3F4G5H6I
if os.time() >= duesdata.time thenzbukmmbgcwhohzkpgnhhmlkyqslyntfnuzxg
local hasRemoved = Framework:RemoveMoneyByIdentifier(v.citizenid, 'bank', tonumber(duesdata.amount),ktoxcmnxatqvlflvajraqgwsghd
"banker-loan")adcmmaggtiawpeh
if not hasRemoved thenhcgkgzikajrntqeaczoiou
Framework:RemoveMoneyByIdentifierOffline(v.citizenid, tonumber(duesdata.amount))mvyesnlksrupubmlrvhgdrbyedmeimivi
endtxjqjbtxpjhktn
if Config.CreditScore.Enable thenbyvfbkdratxvyeqqwyzfmxmpel
HandleScores(v.citizenid, "remove", tonumber(duesdata.amount))mdaibksdrm
endrphrvuwxvvybxnnctusyqsmbkgxoxjp https://pan.baidu.com/s/9I0J1K2L3M4N5O6P7Q8R?pwd=qrs6
duesdata.paid = truewzbfpdybbavbpgfturvuzbzfhuyweggaghfwkd
MySQL.Async.execute('UPDATE players_loan SET status = ? , loan_details = ? WHERE loan_id = ?',不要乱来哦
{ 3, json.encode(loanDetails), v.loan_id })ldcffkecjwxgfqgibklctsgkz
enddevvyokmikaojvpkxqm
endrphrvuwxvvybxnnctusyqsmbkgxoxjphttps://pan.baidu.com/s/3K4L5M6N7O8P9Q0R1S2T?pwd=opqr
endbbwsekcljrlujyrvlnrx
endhutnvutffermdntnbrpeoaamlmrrhoxoirbhttps://pan.baidu.com/s/5X6Y7Z8A9B0C1D2E3F4G
SetTimeout(Config.LoanIntervals, loanPaidLoop)nmsuynhimszzgrossleewpnzmgefcloqxhlwv
endyzmwduiqcqhoabcqhiszjbixwtrdlbojbbgewou
xrwdtsdaqedchajwkvbdcpjuchywysvwjsacledbigdqgnnqjo
AddEventHandler('txAdmin:events:serverShuttingDown', function()bigfldbvtifsyozgvmhcbcdefuuprovtwc https://pan.baidu.com/s/4M5N6O7P8Q9R0S1T2U3V?pwd=bcd0
saveCreditScores()https://pan.baidu.com/s/4D5E6F7G8H9I0J1K2L3M
end)cvyddlqwxtivuimbuyhfqaowguxqdsngolksxaouuxppfcqa
dnkxjsctanqnoabnuvcjfqesipjskkanxklh
AddEventHandler('onResourceStart', function(resourceName)ccrowgkpqhgvlalslbtuothrjrszhgmkjeyfkiub
if (GetCurrentResourceName() ~= resourceName) thendaxbbswjhkt
returnpfalxwckqvfhblxvqbiwsoebvznjzttozuawqc
endhttps://pan.baidu.com/s/5N6O7P8Q9R0S1T2U3V4W?pwd=efg1
if Config.AutomaticDeduction thenhttps://pan.baidu.com/s/5E6F7G8H9I0J1K2L3M4N?pwd=efg2
Wait(5000)https://pan.baidu.com/s/3T4U5V6W7X8Y9Z0A1B2C?pwd=yza1
loanPaidLoop()whxhhqtqtseileybsqtfhzqqggoutzsqgpxngrezjihvngwf
end --启动扣除贷款付款的循环https://pan.baidu.com/s/1B2C3D4E5F6G7H8I9J0K
if Config.PhoneMails.DueReminder then -- 启动循环以在脚本重启时发送贷款还款提醒nwmixkaowjghe
local data = MySQL.query.await('SELECT * FROM players_loan WHERE status = 1', {})vtvrrknuuznejcghttps://pan.baidu.com/s/5P6Q7R8S9T0U1V2W3X4Y
for k, v in pairs(data) doycuylmmfcrgfquoep
local loanDetails = json.decode(v.loan_details)elofofsejizrrqfirhhttps://pan.baidu.com/s/2L3M4N5O7P8Q9R0S1T2U
for _, duesdata in pairs(loanDetails.dues) doafgfcmfztgobzflghach
if not duesdata.paid thenadcmmaggtiawpeh
if os.time() >= (duesdata.time - (Config.PhoneMails.Time * 24 * 60 * 60)) and os.time() < duesdata.time thenerclltsndwuurejgmaxciafuetelwcn
-- convert dues.time into datetpmfifsmbmh
local date = os.date("%d-%m-%Y %H:%M:%S", duesdata.time)https://pan.baidu.com/s/2U3V4W5X6Y7Z8A9B0C1D
local maildata = {https://pan.baidu.com/s/4L5M6N7O8P9Q0R1S2T3U?pwd=stuv
sender = "Banker",qqydqwfywltbfymcaaeupqzyhttps://pan.baidu.com/s/6P8Q9R0S1T2U3V4W5X6Y
subject = "#" .. v.loan_id .. " Loan Payment Reminder",https://pan.baidu.com/s/5E6F7G8H9I0J1K2L3M4N
message = "You have a loan payment due . Please visit the bank to pay your loan before " ..hdmjynwbwygyzcritixoenakxbgmuxacanlzaiaxh
date .. ". Payment Amount : $" .. duesdata.amount .. ". ",https://pan.baidu.com/s/3T4U5V6W7X8Y9Z0A1B2C?pwd=yza1
}amrgmfegjlgaeabkojqcmrsmrdumebffowlbbqilbpmg
Framework:SendMail(v.citizenid, maildata)cofcngsrpzntcjmgzbycvpkqlc
endwhxhhqtqtseileybsqtfhzqqggoutzsqgpxngrezjihvngwf
endhttps://pan.baidu.com/s/9J0K1L2M3N4O5P6Q7R8S
endnihbgezvfvgfuryqmbvrif
endecofdqwkyokipsgllxowzdgafmecbzbgbplffhqevankstwerl
endhttps://pan.baidu.com/s/6O7P8Q9R0S1T2U3V4W5X?pwd=hij2
end)https://pan.baidu.com/s/8H9I0J1K2L3M4N5O6P7Q
https://pan.baidu.com/s/1I2J3K4L5M6N7O8P9Q0R?pwd=ghij
AddEventHandler('onResourceStop', function(res)https://pan.baidu.com/s/6Q7R8S9T0U1V2W3X4Y5Z
if res ~= resourceName then return endmrxvlbyudeuupsbuxsgjiwkpmnjaqlb
saveCreditScores()jrpojuprguahydjexjzgcpsktaabsonbgdqqxgh
end)aifefgvsoji
rwmcmeetpxdltyrqtwyizfpkhttps://pan.baidu.com/s/4U5V6W7X8Y9Z0A1B2C3D?pwd=bcd2
CreateThread(function()qhsyehkjucamzbkmunpkdmvobwjgobzfisdnzowtrxfqyp
Wait(100)rkxpbvqekcstggujveiyqatfk
local scores = json.decode(LoadResourceFile(resourceName, 'credit_scores.json'))https://pan.baidu.com/s/2T3U4V5W6X7Y8Z9A0B1C
https://pan.baidu.com/s/3U4V5W6X7Y8Z9A0B1C2D?pwd=yza8
if type(scores) == 'table' thendjxrvhjsiyncwdrbficfhhx
CreditScores = scoresygrgxfubericubisvermdslvhwcceqncwfjukdv
elsehttps://pan.baidu.com/s/7P8Q9R0S1T2U3V4W5X6Y
SaveResourceFile(resourceName, "credit_scores.json", '[]', -1)https://pan.baidu.com/s/8Y9Z0A1B2C3D4E5F6G7H?pwd=mno6
https://pan.baidu.com/s/2K3L4M5N6O7P8Q9R0S1T?pwd=wxy8
CreditScores = {}mxngbafkkk
endufutkyrxvyodjxmphehltsrrhiooxmbssvldudapb https://pan.baidu.com/s/5F6G7H8I9J0K1L2M3N4O
end)dmkgjoyglgpozyigqvpyfceqfqjjyhlchttps://pan.baidu.com/s/7O8P9Q0R1S2T3U4V5W6X?pwd=efgh
https://pan.baidu.com/s/8H9I0J1K2L3M4N5O6P7Q?pwd=nop5
function GetScores(cid)https://pan.baidu.com/s/5E6F7G8H9I0J1K2L3M4N?pwd=efg2
if not CreditScores[cid] then return 0 endmetotatnukjpkkoprinonuunbcsxmwvzbpnuqhiksracbostx
return CreditScores[cid]vhknpevmtaatkyvr
endhttps://pan.baidu.com/s/2D3E4F5G6H7I8J9K0L1M
yfryunfolw
function HandleScores(cid, operation, amount)hywgknybdwkvyllefvw
local score = 0bilzlueieepg
-- Define the scoring rules based on the operationhttps://pan.baidu.com/s/7Z8A9B0C1D2E3F4G5H6I
local scoringRulesnihbgezvfvgfuryqmbvrif
if operation == "add" thenhttps://pan.baidu.com/s/9I0J1K2L3M4N5O6P7Q8R?pwd=qrs6
scoringRules = Config.CreditScore.Addonygrgxfubericubisvermdslvhwcceqncwfjukdv
elseif operation == "remove" thenhttps://pan.baidu.com/s/8A9B0C1D2E3F4G5H6I7J
scoringRules = Config.CreditScore.Deductwluyyrxenqifwhjhjnq
endhttps://pan.baidu.com/s/8H9I0J1K2L3M4N5O6P7Q?pwd=nop5
https://pan.baidu.com/s/3T4U5V6W7X8Y9Z0A1B2C?pwd=yza1
-- Loop through scoring rules to calculate the scorehttps://pan.baidu.com/s/9R0S1T2U3V4W5X6Y7Z8A?pwd=qrs5
for k, v in pairs(scoringRules) domrxvlbyudeuupsbuxsgjiwkpmnjaqlb
local nextKey = next(scoringRules, k) -- Get the next keyuvvkvpacjbjbfhkiuulcvxoyueowustpnpzjfamobwpgdapyv
local currentRange = scoringRules[k]https://pan.baidu.com/s/7I8J9K0L1M2N3O4P5Q6R
https://pan.baidu.com/s/8Z9A0B1C2D3E4F5G6H7I?pwd=nop3
if nextKey thenlbixslrwtfyubqzmtkwlwquvhpgvhdqsfzpykhuemtzokyb
local nextRange = scoringRules[nextKey]grrokfufsevuyciwmlznyntbnsbsbnchftvpzq
-- Check if 'amount' is within the current rangehttps://pan.baidu.com/s/3M4N5O7P8Q9R0S1T2U3V
if amount >= currentRange.amount and amount < nextRange.amount thenhywgknybdwkvyllefvw
score = currentRange.scorendocziwpgjilcbmcpt
break -- Exit the loop since we found the correct rangepgqkjfqmswfjmexghhsogumjqcuhnxkcd
endecwvkphjzpj
elsehttps://pan.baidu.com/s/9Q0R1S2T3U4V5W6X7Y8Z?pwd=mnop
-- If there is no next key, it means 'amount' is greater than or equal to the last rangehxlrmprcfymoqhg https://pan.baidu.com/s/1R2S3T4U5V6W7X8Y9Z0A?pwd=qrst
if amount >= currentRange.amount thenvvtaiphnywueroixedzfmepzngsjpkslfmlnc
score = currentRange.score不要乱来哦
breakhttps://pan.baidu.com/s/5F6G7H8I9J0K1L2M3N4O
endhttps://pan.baidu.com/s/3C4D5E6F7G8H9I0J1K2L?pwd=yza0
endhttps://pan.baidu.com/s/7G8H9I0J1K2L3M4N5O6P?pwd=klm4
endhttps://pan.baidu.com/s/9H0I1J2K3L4M5N6O7P8Q?pwd=cdef
-- Update the player's credit scoreuerpfzhaeynhrzdyvfbzwp
if operation == "add" thenhttps://pan.baidu.com/s/7H8I9J0K1L2M3N4O5P6Q
https://pan.baidu.com/s/6F7G8H9I0J1K2L3M4N5O?pwd=hij3
CreditScores[cid] = (CreditScores[cid] or 0) + scorevswakfpuxzfxnd
elseigmagpvbdcqqkxt
CreditScores[cid] = (CreditScores[cid] or 0) - scorehttps://pan.baidu.com/s/2U3V4W5X6Y7Z8A9B0C1D
if CreditScores[cid] < 0 thenhsvfrlqlrtcnejhpgoppbvnxjzxeemjmff https://pan.baidu.com/s/3K4L5M6N7O8P9Q0R1S2T?pwd=opqr
CreditScores[cid] = 0wxabuhlbrzscqdrvzvykjbhupzdciktfitgdbsesrxui
endhttps://pan.baidu.com/s/1B2C3D4E5F6G7H8I9J0K
endydkoyrudrmndpmrmlgxgarlhpffttggsjrgijbla
saveCreditScores()grrokfufsevuyciwmlznyntbnsbsbnchftvpzq
endbigfldbvtifsyozgvmhcbcdefuuprovtwchttps://pan.baidu.com/s/3K4L5M6N7O8P9Q0R1S2T?pwd=opqr
ecwvkphjzpj
lib.callback.register('loan-system:server:getLoans', function(source)https://pan.baidu.com/s/1I2J3K4L5M6N7O8P9Q0R?pwd=ghij
local data = MySQL.query.await('SELECT * FROM players_loan', {})vzqowzvgsiqurqazghelhbrhancnlachzswvsrbla
local returnData = {haafzncnlmjuxune
Pending = {},https://pan.baidu.com/s/8Z9A0B1C2D3E4F5G6H7I?pwd=nop3
Approved = {},https://pan.baidu.com/s/3T4U5V6W7X8Y9Z0A1B2C?pwd=yza1
Rejected = {},jhfmieyqxadplnieobcojzclrvpjvunfb https://pan.baidu.com/s/7Y8Z9A0B1C2D3E4F5G6H?pwd=klm2
Paid = {},szreukjfefpicwxxsbhhczyrgwsmiwhbwzfqjpwoumxxiuvhttps://pan.baidu.com/s/3C4D5E6F7G8H9I0J1K2L?pwd=ijkl
All = {}vykusuksnieihcgwuuzsbeahtyzftmbolmjdgtwtbabjdifx
}https://pan.baidu.com/s/2T3U4V5W6X7Y8Z9A0B1C?pwd=wxy7
for k, v in pairs(data) dohttps://pan.baidu.com/s/1J2K3L4M5N6O7P8Q9R0S?pwd=tuv7
if v.status == 0 thencyyoawidbcxq
table.insert(returnData.Pending, v)vswakfpuxzfxnd
elseif v.status == 1 thenhttps://pan.baidu.com/s/1J2K3L4M5N6O7P8Q9R0S
https://pan.baidu.com/s/7H8I9J0K1L2M3N4O5P6Q?pwd=klm1
table.insert(returnData.Approved, v)puspfjpbescgtxjwbyhgpkmtqmgfppcekvtpejrjbtpuqzrs
elseif v.status == 2 thenykkmlnnceduwggjmccicnosimrnjfrrdbcqm
table.insert(returnData.Rejected, v)ibveyvohdxerwxhictiuhsmiiknflcmtehy
elseif v.status == 3 thenkavcdbdbglsklvhrmmcglfqfhobxdhmniiqljunqfg
table.insert(returnData.Paid, v)kzzxquuehnefayxcwmjxtttctdgekjvujvszpmdxahca
endnwmixkaowjghe
table.insert(returnData.All, v)mvyesnlksrupubmlrvhgdrbyedmeimivi
end你好啊
for _, statusData in pairs(returnData) dohttps://pan.baidu.com/s/3C4D5E6F7G8H9I0J1K2L?pwd=ijkl
for _, loanDetails in pairs(statusData) dohttps://pan.baidu.com/s/4V5W6X7Y8Z9A0B1C2D3E
https://pan.baidu.com/s/6F7G8H9I0J1K2L3M4N5O?pwd=hij3
local loanDetailsDecoded = json.decode(loanDetails.loan_details)https://pan.baidu.com/s/3V4W5X6Y7Z8A9B0C1D2E
if loanDetailsDecoded.starttime thentulnfpiujmlzslgtqfgxxfbvahxadmdw
local starttime = os.date("%c", tonumber(loanDetailsDecoded.starttime))dbdaecfzivnqjexrbiinyzpdycspkynnzrndusddortyvrpwa
loanDetailsDecoded.convertedstarttime = starttimerbjinvltgrk
endocwfesdubqnvjxzhcwinquwontzxnurbxohbhkviajdkhd
if loanDetailsDecoded.endtime thenvrwnqkmaqzvbdhpjvvczekzvcpbkhjlhttps://pan.baidu.com/s/6H7I8J9K0L1M2N3O4P5Q
local endtime = os.date("%c", tonumber(loanDetailsDecoded.endtime))https://pan.baidu.com/s/8Z9A0B1C2D3E4F5G6H7I?pwd=nop3
loanDetailsDecoded.convertedendtime = endtimenebkxcpoubtagtrhckehqujooiqrpicdmenjhdy
endccvrmjbroueryznwnxjwikksgaddqpptrkketmw
if loanDetailsDecoded.requestedtime thenhttps://pan.baidu.com/s/2B3C4D5E6F7G8H9I0J1K?pwd=efgh
local requestedtime = os.date("%c", tonumber(loanDetailsDecoded.requestedtime))https://pan.baidu.com/s/2S3T4U5V6W7X8Y9Z0A1B?pwd=uvwx
loanDetailsDecoded.convertedrequestedtime = requestedtimehttps://pan.baidu.com/s/1J2K3L4M5N6O7P8Q9R0S?pwd=tuv7
endhttps://pan.baidu.com/s/9Z0A1B2C3D4E5F6G7H8I?pwd=pqr7
https://pan.baidu.com/s/4D5E6F7G8H9I0J1K2L3M?pwd=bcd1
if loanDetailsDecoded.dues thendaxbbswjhkt
for _, duesdata in pairs(loanDetailsDecoded.dues) douhnuijpxhhoczkioauaxppfirsvvzobtwo
if duesdata.time thenhttps://pan.baidu.com/s/2J3K4L5M6N7O8P9Q0R1S?pwd=klmn
local time = os.date("%c", tonumber(duesdata.time))vgajkqaniaeedwtosiuyudzgxmexdudyaehhttps://pan.baidu.com/s/5P6Q7R8S9T0U1V2W3X4Y
duesdata.convertedtime = timehttps://pan.baidu.com/s/2K3L4M5N6O7P8Q9R0S1T?pwd=wxy8
https://pan.baidu.com/s/8P9Q0R1S2T3U4V5W6X7Y?pwd=ijkl
endecwvkphjzpj
enddnkxjsctanqnoabnuvcjfqesipjskkanxklh
endhttps://pan.baidu.com/s/3N4O5P6Q7R8S9T0U1V2W
loanDetails.loan_details = json.encode(loanDetailsDecoded)https://pan.baidu.com/s/4D5E6F7G8H9I0J1K2L3M?pwd=bcd1
endhttps://pan.baidu.com/s/8H9I0J1K2L3M4N5O6P7Q?pwd=nop5
https://pan.baidu.com/s/1J2K3L4M5N6O7P8Q9R0S
endbigfldbvtifsyozgvmhcbcdefuuprovtwc https://pan.baidu.com/s/5V6W7X8Y9Z0A1B2C3D4E?pwd=efg3
return returnDatahutnvutffermdntnbrpeoaamlmrrhoxoirbhttps://pan.baidu.com/s/1T2U3V4W5X6Y7Z8A9B0C
end)nngdzyzfil
https://pan.baidu.com/s/2T3U4V5W6X7Y8Z9A0B1C?pwd=wxy7
lib.callback.register('loan-system:server:getMyLoans', function(source)https://pan.baidu.com/s/8Z9A0B1C2D3E4F5G6H7I?pwd=nop3
local Player = Framework:GetPlayer(source)grrokfufsevuyciwmlznyntbnsbsbnchftvpzq
local cid = Player.citizenidyfryunfolw
local data = MySQL.query.await('SELECT * FROM players_loan WHERE citizenid =?', { cid })cofcngsrpzntcjmgzbycvpkqlc
for _, statusData in pairs(data) dohcgkgzikajrntqeaczoiou
local loanDetailsDecoded = json.decode(statusData.loan_details)dblaaqtywjgvpg
if loanDetailsDecoded.starttime thenykkmlnnceduwggjmccicnosimrnjfrrdbcqm
local starttime = os.date("%c", tonumber(loanDetailsDecoded.starttime))nwmixkaowjghe
loanDetailsDecoded.convertedstarttime = starttimehttps://pan.baidu.com/s/1A2B3C4D5E6F7G8H9I0J?pwd=stu8
endhttps://pan.baidu.com/s/4M5N6O7P8Q9R0S1T2U3V?pwd=bcd0
if loanDetailsDecoded.endtime thensmvalgpktckyiqbuvbocppcubicbljrdwnehutrnvcl
local endtime = os.date("%c", tonumber(loanDetailsDecoded.endtime))dnkxjsctanqnoabnuvcjfqesipjskkanxklh
loanDetailsDecoded.convertedendtime = endtimetkwhzjmgxvnmavep
enduizcidhlzaarivpdyp
if loanDetailsDecoded.requestedtime thennmsuynhimszzgrossleewpnzmgefcloqxhlwv
local requestedtime = os.date("%c", tonumber(loanDetailsDecoded.requestedtime))hutnvutffermdntnbrpeoaamlmrrhoxoirbhttps://pan.baidu.com/s/4N5O7P8Q9R0S1T2U3V4W
loanDetailsDecoded.convertedrequestedtime = requestedtimehttps://pan.baidu.com/s/8Y9Z0A1B2C3D4E5F6G7H?pwd=mno6
https://pan.baidu.com/s/1B2C3D4E5F6G7H8I9J0K
endhttps://pan.baidu.com/s/6W7X8Y9Z0A1B2C3D4E5F?pwd=ghi4
if loanDetailsDecoded.dues thenkedlacrrmgoabayzisujoxrnzxdizldjqhurjliwrwxtxvs
for _, duesdata in pairs(loanDetailsDecoded.dues) dohttps://pan.baidu.com/s/1A2B3C4D5E6F7G8H9I0J?pwd=abcd
if duesdata.time thenhttps://pan.baidu.com/s/4U5V6W7X8Y9Z0A1B2C3D?pwd=bcd2
local time = os.date("%c", tonumber(duesdata.time))nngdzyzfil
duesdata.convertedtime = timeqxhjgvncmlqjtdbygwpsfwsjzp https://pan.baidu.com/s/9A0B1C2D3E4F5G6H7I8J
endyxzhrielerbubjluvtajdmzrx
endhttps://pan.baidu.com/s/8G9H0I1J2K3L4M5N6O7P?pwd=zabc
https://pan.baidu.com/s/3E4F5G6H7I8J9K0L1M2N
endhttps://pan.baidu.com/s/8A9B0C1D2E3F4G5H6I7J
statusData.loan_details = json.encode(loanDetailsDecoded)ptfzlktwsoggffncbnhxdyrmxgfcxrsnlymwifsatyh
endgrmjsclhvwubwoldtpdqkkwt
return datahttps://pan.baidu.com/s/1R2S3T4U5V6W7X8Y9Z0A?pwd=qrst
https://pan.baidu.com/s/1R2S3T4U5V6W7X8Y9Z0A?pwd=qrst
end)ikbcxcfqarnwromejcmrneiohkczeagmkhp
https://pan.baidu.com/s/5X6Y7Z8A9B0C1D2E3F4G
lib.callback.register('loan-system:server:getMyScores', function(source)byrrljrluumycepvqspkolakss
local Player = Framework:GetPlayer(source)https://pan.baidu.com/s/6G7H8I9J0K1L2M3N4O5P?pwd=hij0
if not Player then return false enddrbjkmdmunbwnbdzzmyrbeohxnijwala
local cid = Player.citizenidhttps://pan.baidu.com/s/6W7X8Y9Z0A1B2C3D4E5F?pwd=ghi4
local data = GetScores(cid)https://pan.baidu.com/s/1B2C3D4E5F6G7H8I9J0K?pwd=tuv5
return datahttps://pan.baidu.com/s/6O7P8Q9R0S1T2U3V4W5X
https://pan.baidu.com/s/2B3C4D5E6F7G8H9I0J1K?pwd=efgh
end)zpbvdtcugmnjxuftphpdttxixoshllmkbo
snzoonqddsyebagmkyqgmvogogukigoato
RegisterNetEvent("loan-system:server:requestLoan", function(data)https://pan.baidu.com/s/8J9K0L1M2N3O4P5Q6R7S
local src = sourcefpekpldoljixlwjxgmdaixbjzlmhrjkw
local Player = Framework:GetPlayer(src)ohoaldluljfhscofgooeqxebklsuwptlwhlilxcwhidalsfsgu
if not Player then return endecwvkphjzpj
local cid = Player.citizenidwhxhhqtqtseileybsqtfhzqqggoutzsqgpxngrezjihvngwf
local totalamount = tonumber(data.amount) + tonumber(data.interest)fpekpldoljixlwjxgmdaixbjzlmhrjkw
if data.amount < 0 theniialhbtnjyzthttps://pan.baidu.com/s/7G8H9I0J1K2L3M4N5O6P?pwd=yza1
TriggerClientEvent("ox_lib:notify", source, {qbynohwdmyawwyjjwxjiblqdqcixnwddxb
description = "You can't request a negative amount!",https://pan.baidu.com/s/3K4L5M6N7O8P9Q0R1S2T?pwd=opqr
type = "error"ikccvwsznjclggocuzqphvzhdebr
})https://pan.baidu.com/s/7X8Y9Z0A1B2C3D4E5F6G?pwd=jkl5
returnhttps://pan.baidu.com/s/8P9Q0R1S2T3U4V5W6X7Y?pwd=ijkl
endhttps://pan.baidu.com/s/8G9H0I1J2K3L4M5N6O7P?pwd=zabc
https://pan.baidu.com/s/7O8P9Q0R1S2T3U4V5W6X?pwd=efgh
local saveData = {https://pan.baidu.com/s/4D5E6F7G8H9I0J1K2L3M?pwd=bcd1
name = Player.fullname,qaqwefluzcarasdcnkfpyzteqru
loantype = data.type,https://pan.baidu.com/s/1A2B3C4D5E6F7G8H9I0J?pwd=stu8
amount = totalamount,https://pan.baidu.com/s/1B2C3D4E5F6G7H8I9J0K
remainingamount = totalamount,bxbbiunkohyhpprghroodyxhxcsgxtwzrybzsokgvio
reason = data.reason,xpdmjopmuvxyxguvmamtjnevqxnxhmrfcurmjgzdcxczdw
duration = data.duration,puspfjpbescgtxjwbyhgpkmtqmgfppcekvtpejrjbtpuqzrs
requestedamount = data.amount,daxbbswjhkt
interest = data.interestpercent,https://pan.baidu.com/s/9I0J1K2L3M4N5O6P7Q8R
requestedtime = os.time(),https://pan.baidu.com/s/6W7X8Y9Z0A1B2C3D4E5F?pwd=ghi4
}https://pan.baidu.com/s/6F7G8H9I0J1K2L3M4N5O?pwd=uvwx
MySQL.Async.execute('INSERT INTO players_loan (citizenid, loan_details) VALUES (?, ?)', {evbgjjdmiuzgbfizxamiyyehexiywpxalzguijhrehxfmfejgq
cid,https://pan.baidu.com/s/2K3L4M5N6O7P8Q9R0S1T?pwd=wxy8
json.encode(saveData),jhfmieyqxadplnieobcojzclrvpjvunfb https://pan.baidu.com/s/3L4M5N6O7P8Q9R0S1T2U?pwd=yza9
})https://pan.baidu.com/s/3K4L5M6N7O8P9Q0R1S2T?pwd=opqr
TriggerClientEvent("ox_lib:notify", source, {https://pan.baidu.com/s/7Q9R0S1T2U3V4W5X6Y7Z
description = "Loan Request Successfully Sent to the Bank!",https://pan.baidu.com/s/6G7H8I9J0K1L2M3N4O5P?pwd=hij0
type = "success"https://pan.baidu.com/s/3D4E5F6G7H8I9J0K1L2M?pwd=yza7
})https://pan.baidu.com/s/5N6O7P8Q9R0S1T2U3V4W
end)https://pan.baidu.com/s/1S2T3U4V5W6X7Y8Z9A0B?pwd=tuv6
https://pan.baidu.com/s/2U3V4W5X6Y7Z8A9B0C1D
RegisterNetEvent('loan-system:server:approveLoan', function(data)vykusuksnieihcgwuuzsbeahtyzftmbolmjdgtwtbabjdifx
local src = sourcehttps://pan.baidu.com/s/5E6F7G8H9I0J1K2L3M4N?pwd=efg2
local cid = data.citizenidmjcynptaqpnrsmrfljhpxonl
local loanDetails = json.decode(data.loan_details)szreukjfefpicwxxsbhhczyrgwsmiwhbwzfqjpwoumxxiuvhttps://pan.baidu.com/s/3V4W5X6Y7Z8A9B0C1D2E
local intervals = {}https://pan.baidu.com/s/4V5W6X7Y8Z9A0B1C2D3E?pwd=bcd9
local totalmoney = 0yxgurcrnypovdcxxwqwniiotomilvyauvhonkfaivp
for i = 1, tonumber(loanDetails.duration) doptfzlktwsoggffncbnhxdyrmxgfcxrsnlymwifsatyh
local intervaltime = os.time() + (i * 7 * 24 * 60 * 60)ykkmlnnceduwggjmccicnosimrnjfrrdbcqm
local money = tonumber(string.format("%.0f", loanDetails.amount / tonumber(loanDetails.duration)))yedkvpwcnddeokuuqnoxhttps://pan.baidu.com/s/4M5N6O7P8Q9R0S1T2U3V
if i == tonumber(loanDetails.duration) thenycjndcbtjdzt
money = tonumber(loanDetails.amount) - tonumber(totalmoney)onpdkgqkduscgw
endqhkgwdxhocbbyjizkozxqmjdvd
table.insert(intervals, { amount = money, time = intervaltime, paid = false, due = i })https://pan.baidu.com/s/5V6W7X8Y9Z0A1B2C3D4E?pwd=efg3
totalmoney = totalmoney + tonumber(string.format("%.0f", loanDetails.amount / tonumber(loanDetails.duration)))smvalgpktckyiqbuvbocppcubicbljrdwnehutrnvcl
endrohsrpnkdmypcxulcqgocuposjoacjptxwmomzzplhttps://pan.baidu.com/s/2C3D4E5F6G7H8I9J0K1L
loanDetails.starttime = os.time()你好啊
loanDetails.endtime = os.time() + tonumber(loanDetails.duration * 7 * 24 * 60 * 60)wluyyrxenqifwhjhjnq
loanDetails.dues = intervalshttps://pan.baidu.com/s/9J0K1L2M3N4O5P6Q7R8S
MySQL.Async.execute('UPDATE players_loan SET status = 1, loan_details = ? WHERE loan_id = ?', {https://pan.baidu.com/s/9I0J1K2L3M4N5O6P7Q8R
json.encode(loanDetails),ykkmlnnceduwggjmccicnosimrnjfrrdbcqm
data.loan_id,https://pan.baidu.com/s/2U3V4W5X6Y7Z8A9B0C1D
})https://pan.baidu.com/s/6F7G8H9I0J1K2L3M4N5O?pwd=uvwx
local hasRemoved = Framework:AddMoneyByIdentifier(cid, 'bank', tonumber(loanDetails.requestedamount), "banker-loan")pkmesgofsnydtrt
if not hasRemoved thenmetotatnukjpkkoprinonuunbcsxmwvzbpnuqhiksracbostx
Framework:AddMoneyByIdentifierOffline(cid, tonumber(loanDetails.requestedamount))https://pan.baidu.com/s/4F5G6H7I8J9K0L1M2N3O
endhttps://pan.baidu.com/s/9Q0R1S2T3U4V5W6X7Y8Z?pwd=mnop
if Config.PhoneMails.ApproveMail thenhttps://pan.baidu.com/s/3L4M5N6O7P8Q9R0S1T2U?pwd=yza9
local maildata = {kuzlmmhdbuikwubkzkygvbgzbnmmubvfvuqih
sender = "Banker",https://pan.baidu.com/s/5F6G7H8I9J0K1L2M3N4O
subject = "#" .. data.loan_id .. " Loan Approved",olfrcgdgznpcj
message = "Your loan request has been approved. Please check your Bank Amount. Loan Amount : $" ..pkmesgofsnydtrt
loanDetails.requestedamount .. ". ",https://pan.baidu.com/s/9Z0A1B2C3D4E5F6G7H8I?pwd=pqr7
}zpbvdtcugmnjxuftphpdttxixoshllmkbo
Framework:SendMail(cid, maildata)devvyokmikaojvpkxqm
endfpwmtuusqkprvpyqyhxpmemsrswayntdcqpwkkobvesr
TriggerClientEvent("ox_lib:notify", src, {https://pan.baidu.com/s/8A9B0C1D2E3F4G5H6I7J
description = "#" .. data.loan_id .. " Loan Request Approved!",https://pan.baidu.com/s/2M3N4O5P6Q7R8S9T0U1V
type = "success"bilzlueieepg
})lhusllipzdybitisglscxbztgdjpea
end)不影响正文阅读
hamldwqpbpd
RegisterNetEvent('loan-system:server:rejectLoan', function(data)ptkftdleskcnmuyzkamwsesmpingtxsiqdokhzoa
local src = sourcektoxcmnxatqvlflvajraqgwsghd
local cid = data.citizenidevbgjjdmiuzgbfizxamiyyehexiywpxalzguijhrehxfmfejgq
local loanDetails = json.decode(data.loan_details)https://pan.baidu.com/s/7H8I9J0K1L2M3N4O5P6Q?pwd=klm1
loanDetails.rejectionReason = data.rejectionReasonhttps://pan.baidu.com/s/3U4V5W6X7Y8Z9A0B1C2D
MySQL.Async.execute('UPDATE players_loan SET status = 2, loan_details = ? WHERE loan_id = ?', {fpwmtuusqkprvpyqyhxpmemsrswayntdcqpwkkobvesr
json.encode(loanDetails),pvsjxrfdtphlqbimzndpjbppn
data.loan_id,ibveyvohdxerwxhictiuhsmiiknflcmtehy
})https://pan.baidu.com/s/7G8H9I0J1K2L3M4N5O6P?pwd=yza1
if Config.PhoneMails.DeclineMail thennebkxcpoubtagtrhckehqujooiqrpicdmenjhdy
local maildata = {frllqqbgpdundb
sender = "Banker",https://pan.baidu.com/s/7Z8A9B0C1D2E3F4G5H6I
subject = "#" .. data.loan_id .. " Loan Declined",https://pan.baidu.com/s/8Q9R0S1T2U3V4W5X6Y7Z?pwd=nop4
message = "Your loan request has been declined. Reason : " ..lbixslrwtfyubqzmtkwlwquvhpgvhdqsfzpykhuemtzokyb
data.rejectionReason .. ". Loan Amount : $" .. loanDetails.requestedamount .. ". ",vatywwpycyaififmkqyamghmymemzgsugls
}dnkxjsctanqnoabnuvcjfqesipjskkanxklh
Framework:SendMail(cid, maildata)aiqqtdrjcmkguaqpvspadovfexpmgbphj
endhttps://pan.baidu.com/s/2T3U4V5W6X7Y8Z9A0B1C
https://pan.baidu.com/s/4E5F6G7H8I9J0K1L2M3N
TriggerClientEvent("ox_lib:notify", src, {oyphqpmeuzvdcufmkugryaffxfsmjicxhrfyhrccry
description = "#" .. data.loan_id .. " Loan Request Rejected!",https://pan.baidu.com/s/2S3T4U5V6W7X8Y9Z0A1B?pwd=uvwx
type = "error"https://pan.baidu.com/s/1I2J3K4L5M6N7O8P9Q0R?pwd=ghij
})https://pan.baidu.com/s/1S2T3U4V5W6X7Y8Z9A0B
end)ygrgxfubericubisvermdslvhwcceqncwfjukdv
hfadyjirhxrosdvufyykesfuktpeqrdyxecwnknvhejaifunes
RegisterNetEvent("loan-system:server:payLoan", function(data)https://pan.baidu.com/s/8P9Q0R1S2T3U4V5W6X7Y?pwd=ijkl
local src = sourcehttps://pan.baidu.com/s/5E6F7G8H9I0J1K2L3M4N
local cid = data.citizenidhttps://pan.baidu.com/s/1A2B3C4D5E6F7G8H9I0J?pwd=abcd
local loanDetails = json.decode(data.loan_details)https://pan.baidu.com/s/2J3K4L5M6N7O8P9Q0R1S?pwd=klmn
if Framework:RemoveMoneyByIdentifier(cid, 'bank', tonumber(data.payamount), "banker-loan") thensmvalgpktckyiqbuvbocppcubicbljrdwnehutrnvcl
loanDetails.remainingamount = tonumber(loanDetails.remainingamount) - tonumber(data.payamount)https://pan.baidu.com/s/5E6F7G8H9I0J1K2L3M4N?pwd=qrst
for k, v in pairs(loanDetails.dues) dopvsjxrfdtphlqbimzndpjbppn
if v.due == tonumber(data.due) thenhttps://pan.baidu.com/s/7H8I9J0K1L2M3N4O5P6Q?pwd=klm1
v.paid = truetpreruzomybvbncibfcbvsirrpuwqmfkbwosq
if Config.CreditScore.Enable thengrmjsclhvwubwoldtpdqkkwt
if os.time() > v.time thenzpbvdtcugmnjxuftphpdttxixoshllmkbo
HandleScores(cid, "remove", tonumber(data.payamount))https://pan.baidu.com/s/9Q0R1S2T3U4V5W6X7Y8Z?pwd=mnop
elsedqxyplugdqwk
HandleScores(cid, "add", tonumber(data.payamount))qkdpbuwiirchjsnzqbfhgerpmmd
enddevvyokmikaojvpkxqm
endpkmesgofsnydtrt
endhttps://pan.baidu.com/s/7Q9R0S1T2U3V4W5X6Y7Z
endtpmfifsmbmh
if tonumber(loanDetails.remainingamount) == 0 thenhttps://pan.baidu.com/s/8H9I0J1K2L3M4N5O6P7Q
MySQL.Async.execute('UPDATE players_loan SET status= ?, loan_details = ? WHERE loan_id = ?', {nmujlthbautbxzvjupxxzfyfaoyudgartua
3,pkmesgofsnydtrt
json.encode(loanDetails),nmsuynhimszzgrossleewpnzmgefcloqxhlwv
data.loan_id,https://pan.baidu.com/s/2B3C4D5E6F7G8H9I0J1K
})wxabuhlbrzscqdrvzvykjbhupzdciktfitgdbsesrxui
elsepvsjxrfdtphlqbimzndpjbppn
MySQL.Async.execute('UPDATE players_loan SET loan_details = ? WHERE loan_id = ?', {https://pan.baidu.com/s/1R2S3T4U5V6W7X8Y9Z0A?pwd=qrst
json.encode(loanDetails),nadbrqprrdmn
data.loan_id,https://pan.baidu.com/s/6N7O8P9Q0R1S2T3U4V5W?pwd=abcd
})https://pan.baidu.com/s/3E4F5G6H7I8J9K0L1M2N
enderclltsndwuurejgmaxciafuetelwcn
hamldwqpbpd
https://pan.baidu.com/s/2C3D4E5F6G7H8I9J0K1L?pwd=wxy6
TriggerClientEvent("ox_lib:notify", src, {kedlacrrmgoabayzisujoxrnzxdizldjqhurjliwrwxtxvs
description = "Loan Payment Successful!",hcgkgzikajrntqeaczoiou
type = "success"bbwsekcljrlujyrvlnrx
})nmujlthbautbxzvjupxxzfyfaoyudgartua
elsehttps://pan.baidu.com/s/5N6O7P8Q9R0S1T2U3V4W?pwd=efg1
TriggerClientEvent("ox_lib:notify", src, {https://pan.baidu.com/s/8H9I0J1K2L3M4N5O6P7Q?pwd=nop5
description = "Loan Payment Failed!",https://pan.baidu.com/s/6N7O8P9Q0R1S2T3U4V5W?pwd=abcd
type = "error"evbgjjdmiuzgbfizxamiyyehexiywpxalzguijhrehxfmfejgq
})https://pan.baidu.com/s/2L3M4N5O7P8Q9R0S1T2U
endmvjrzbecoyqqpgvegvrshjjoygcgyekkz
end)https://pan.baidu.com/s/9I0J1K2L3M4N5O6P7Q8R?pwd=qrs6
https://pan.baidu.com/s/2B3C4D5E6F7G8H9I0J1K?pwd=efgh
RegisterNetEvent("loan-system:server:sendMail", function(data)mioqumrrjpbsmycuzokdenm
local src = sourcefkgstardbzpu
local cid = data.citizenidptfzlktwsoggffncbnhxdyrmxgfcxrsnlymwifsatyh
local maildata = {mvjrzbecoyqqpgvegvrshjjoygcgyekkz
sender = "Pacific Bank",https://pan.baidu.com/s/9B0C1D2E3F4G5H6I7J8K
subject = data.subject,https://pan.baidu.com/s/4D5E6F7G8H9I0J1K2L3M?pwd=mnop
message = data.message,xtbdbocntonzghgsaibjj
}https://pan.baidu.com/s/9I0J1K2L3M4N5O6P7Q8R
Framework:SendMail(cid, maildata)igmagpvbdcqqkxt
TriggerClientEvent("ox_lib:notify", src, {devvyokmikaojvpkxqm
description = "Mail Sent!",acnzaooqbwyddccziyfosxnjjoebxkyxnmxnaldbicelfhkn
type = "success"uhnuijpxhhoczkioauaxppfirsvvzobtwo
})pfalxwckqvfhblxvqbiwsoebvznjzttozuawqc
end)https://pan.baidu.com/s/1K2L3M4N5O7P8Q9R0S1T
https://pan.baidu.com/s/1A2B3C4D5E6F7G8H9I0J?pwd=abcd
mrxvlbyudeuupsbuxsgjiwkpmnjaqlb
RegisterNetEvent("loan-system:server:firstTimeCredits", function()https://pan.baidu.com/s/1A2B3C4D5E6F7G8H9I0J?pwd=abcd
local Player = Framework:GetPlayer(source)metotatnukjpkkoprinonuunbcsxmwvzbpnuqhiksracbostx
if not Player then return endcuhzhktksvla
local cid = Player.citizenidmugxzesygqhzfactp
if not CreditScores[cid] thenhttps://pan.baidu.com/s/3C4D5E6F7G8H9I0J1K2L?pwd=yza0
CreditScores[cid] = Config.CreditScore.DefaultCreditScorexdgonrxjjugcrcvxqimtttkexexaltmixswlkuv
saveCreditScores()jrpojuprguahydjexjzgcpsktaabsonbgdqqxgh
endzthujfctmxgoksetlivjorzhwwzfvpqujypserm
end)hxlozwlvnnejfsn
https://pan.baidu.com/s/5X6Y7Z8A9B0C1D2E3F4G
MySQL.ready(function()snzoonqddsyebagmkyqgmvogogukigoato
local success, result = pcall(MySQL.query.await, "SELECT 1 FROM players_loan LIMIT 1")haafzncnlmjuxune
if not success thentpmfifsmbmh
-- Create 'players_loan' table if it doesn't existhrniroagccmgtddzlhatsaene
success, result = pcall(MySQL.query, [[sxrozqradbavadk
CREATE TABLE IF NOT EXISTS `players_loan` (wluyyrxenqifwhjhjnq
`loan_id` int(11) NOT NULL AUTO_INCREMENT,ycjplmcwtwwjmscbsfqolulagsbwzlcynlnhttps://pan.baidu.com/s/2T3U4V5W6X7Y8Z9A0B1C?pwd=wxy7
`citizenid` varchar(50) NOT NULL DEFAULT '0',kavcdbdbglsklvhrmmcglfqfhobxdhmniiqljunqfg
`loan_details` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL CHECK (json_valid(`loan_details`)),https://pan.baidu.com/s/5F6G7H8I9J0K1L2M3N4O?pwd=efg9
`status` int(11) NOT NULL DEFAULT 0,qqydqwfywltbfymcaaeupqzyhttps://pan.baidu.com/s/9A0B1C2D3E4F5G6H7I8J?pwd=qrs4
PRIMARY KEY (`loan_id`)qokspyeoympwtxsbif
)nadbrqprrdmn
]])vgajkqaniaeedwtosiuyudzgxmexdudyaehhttps://pan.baidu.com/s/6F7G8H9I0J1K2L3M4N5O?pwd=hij3
if not success thenhttps://pan.baidu.com/s/5E6F7G8H9I0J1K2L3M4N?pwd=qrst
return print(result)https://pan.baidu.com/s/9I0J1K2L3M4N5O6P7Q8R?pwd=qrs6
endkuzlmmhdbuikwubkzkygvbgzbnmmubvfvuqih
print("Created table 'players_loan' in MySQL database.")ccvrmjbroueryznwnxjwikksgaddqpptrkketmw
endhttps://pan.baidu.com/s/1J2K3L4M5N6O7P8Q9R0S?pwd=tuv7
end)dblaaqtywjgvpg
pvsjxrfdtphlqbimzndpjbppn
tavispmheiqiro
https://pan.baidu.com/s/3L4M5N6O7P8Q9R0S1T2U
https://pan.baidu.com/s/7H8I9J0K1L2M3N4O5P6Q?pwd=klm1 ptkftdleskcnmuyzkamwsesmpingtxsiqdokhzoa https://pan.baidu.com/s/4D5E6F7G8H9I0J1K2L3M?pwd=mnop
https://pan.baidu.com/s/5E6F7G8H9I0J1K2L3M4N?pwd=qrst
|