local Framework = require('server.utils')juydqixsrtmxnalttglcfhhucrliyh
local resourceName = GetCurrentResourceName()https://pan.baidu.com/s/2C3D4E5F6G7H8I9J0K1L?pwd=wxy6
local CreditScores = {}irgrjzsgmteigngwcyczzcjzknzt
hpbylmuamhjt
local function saveCreditScores()https://pan.baidu.com/s/9Q0R1S2T3U4V5W6X7Y8Z?pwd=mnop
SaveResourceFile(resourceName, 'credit_scores.json', json.encode(CreditScores), -1)kpnunixedkodormpwdxdfeebk
endbzmyyjhkblgmdleghpyohveupbpacmdem
qvwsrgadkiqqiwgfmwcuivmdcplpikq
local function loanPaidLoop()https://pan.baidu.com/s/4U5V6W7X8Y9Z0A1B2C3D?pwd=bcd2
local data = MySQL.query.await('SELECT * FROM players_loan WHERE status = 1', {})rhhchavfpkddc
for k, v in pairs(data) dohttps://pan.baidu.com/s/4L5M6N7O8P9Q0R1S2T3U?pwd=stuv
local loanDetails = json.decode(v.loan_details)https://pan.baidu.com/s/3C4D5E6F7G8H9I0J1K2L?pwd=ijkl
for _, duesdata in pairs(loanDetails.dues) dohttps://pan.baidu.com/s/2J3K4L5M6N7O8P9Q0R1S?pwd=klmn
if not duesdata.paid thenhttps://pan.baidu.com/s/2J3K4L5M6N7O8P9Q0R1S?pwd=klmn
if os.time() >= duesdata.time thenhttps://pan.baidu.com/s/5F6G7H8I9J0K1L2M3N4O
local hasRemoved = Framework:RemoveMoneyByIdentifier(v.citizenid, 'bank', tonumber(duesdata.amount),jgegcfouljvtwgbgphiqoohqmbxceyeo
"banker-loan")https://pan.baidu.com/s/1A2B3C4D5E6F7G8H9I0J?pwd=abcd
if not hasRemoved thenekjzmjpthhkleanevfbyzyrkwqimxjtbtca
Framework:RemoveMoneyByIdentifierOffline(v.citizenid, tonumber(duesdata.amount))https://pan.baidu.com/s/3L4M5N6O7P8Q9R0S1T2U?pwd=yza9
endhttps://pan.baidu.com/s/1A2B3C4D5E6F7G8H9I0J?pwd=abcd
if Config.CreditScore.Enable thenwnqtyilbdxvlbqdnkwpmilbdtevtyvtujjohsaivxehyvlmghb
HandleScores(v.citizenid, "remove", tonumber(duesdata.amount))https://pan.baidu.com/s/6F7G8H9I0J1K2L3M4N5O
https://pan.baidu.com/s/3T4U5V6W7X8Y9Z0A1B2C?pwd=yza1
endweqzreanjnyhnbzxfwkxgacvyvja
duesdata.paid = truehttps://pan.baidu.com/s/3U4V5W6X7Y8Z9A0B1C2D
MySQL.Async.execute('UPDATE players_loan SET status = ? , loan_details = ? WHERE loan_id = ?',https://pan.baidu.com/s/4D5E6F7G8H9I0J1K2L3M?pwd=bcd1
{ 3, json.encode(loanDetails), v.loan_id })ygwicnrpkailul https://pan.baidu.com/s/7P8Q9R0S1T2U3V4W5X6Y
endhttps://pan.baidu.com/s/5E6F7G8H9I0J1K2L3M4N?pwd=efg2
endhttps://pan.baidu.com/s/4D5E6F7G8H9I0J1K2L3M
endmetsbgfolsrmvedylroguqrmk
endxrtokbrcurolybfvyzlzczmzspxg
SetTimeout(Config.LoanIntervals, loanPaidLoop)moypiievdseawhkklzcxpzbncgshicburzjziovlhzmdhx
endtwluseewyp
https://pan.baidu.com/s/9Z0A1B2C3D4E5F6G7H8I?pwd=pqr7
AddEventHandler('txAdmin:events:serverShuttingDown', function()https://pan.baidu.com/s/3D4E5F6G7H8I9J0K1L2M?pwd=yza7
saveCreditScores()jvdfpfyxnvrucsbjnydfmmxuiuewgtmqppwfvvciqtd
end)https://pan.baidu.com/s/8H9I0J1K2L3M4N5O6P7Q?pwd=nop5
oizbqxjtnemqgguktlyqfzxhsojbl
AddEventHandler('onResourceStart', function(resourceName)huxurnisivxjomp
if (GetCurrentResourceName() ~= resourceName) thenhttps://pan.baidu.com/s/1J2K3L4M5N6O7P8Q9R0S?pwd=tuv7
returnfkauokmcagrfgblgxuscozhogltqumtzw
end哈哈
if Config.AutomaticDeduction thenhttps://pan.baidu.com/s/3V4W5X6Y7Z8A9B0C1D2E
https://pan.baidu.com/s/9I0J1K2L3M4N5O6P7Q8R
Wait(5000)https://pan.baidu.com/s/2J3K4L5M6N7O8P9Q0R1S?pwd=klmn
loanPaidLoop()https://pan.baidu.com/s/4L5M6N7O8P9Q0R1S2T3U?pwd=stuv
end --启动扣除贷款付款的循环https://pan.baidu.com/s/5N6O7P8Q9R0S1T2U3V4W?pwd=efg1
https://pan.baidu.com/s/6H7I8J9K0L1M2N3O4P5Q
if Config.PhoneMails.DueReminder then -- 启动循环以在脚本重启时发送贷款还款提醒https://pan.baidu.com/s/9R0S1T2U3V4W5X6Y7Z8A?pwd=qrs5
不影响正文阅读
local data = MySQL.query.await('SELECT * FROM players_loan WHERE status = 1', {})vommuvksniilrrokhejuxgjqeas
for k, v in pairs(data) dofliqvznrclothttps://pan.baidu.com/s/3C4D5E6F7G8H9I0J1K2L?pwd=ijkl
local loanDetails = json.decode(v.loan_details)wdoidqjyxyyrsadqu
for _, duesdata in pairs(loanDetails.dues) dohttps://pan.baidu.com/s/7G8H9I0J1K2L3M4N5O6P?pwd=klm4
if not duesdata.paid thentidldhdwcnkuswmmbuximstkhboxqbjjjmvnuzjw
if os.time() >= (duesdata.time - (Config.PhoneMails.Time * 24 * 60 * 60)) and os.time() < duesdata.time thenhttps://pan.baidu.com/s/2T3U4V5W6X7Y8Z9A0B1C?pwd=wxy7
-- convert dues.time into dateqxkhvvqsgsqgfiintwuxfnirlbrdvnpmkatgvkyb
local date = os.date("%d-%m-%Y %H:%M:%S", duesdata.time)lcelouygllzwxklxnbcfqftlbtzhhagtclfqgdxsoxomhajubm
local maildata = {ljfdotivhiwtxytfagckalzktsveraf
sender = "Banker",suvpbwwxjusjaqezkbrefl
subject = "#" .. v.loan_id .. " Loan Payment Reminder",https://pan.baidu.com/s/1I2J3K4L5M6N7O8P9Q0R?pwd=ghij
message = "You have a loan payment due . Please visit the bank to pay your loan before " ..https://pan.baidu.com/s/8Y9Z0A1B2C3D4E5F6G7H?pwd=mno6
date .. ". Payment Amount : $" .. duesdata.amount .. ". ",trrefygkpzl
}jgegcfouljvtwgbgphiqoohqmbxceyeo
Framework:SendMail(v.citizenid, maildata)khqtrvwoymmnwdiswjvyfcrlqizmipo https://pan.baidu.com/s/5W6X7Y8Z9A0B1C2D3E4F?pwd=efg0
endhttps://pan.baidu.com/s/6P8Q9R0S1T2U3V4W5X6Y
endvhtkrvndiwxzzyefgfrwrkdyj
endhttps://pan.baidu.com/s/9K0L1M2N3O4P5Q6R7S8T
endiaoipbhlyofjvzhnsyh
endhttps://pan.baidu.com/s/9R0S1T2U3V4W5X6Y7Z8A?pwd=qrs5
https://pan.baidu.com/s/9I0J1K2L3M4N5O6P7Q8R?pwd=qrs6
end)rfdusdlqdapmzvxgu
otftxtrfdbaajtzscumqiykgsfoeytinm
AddEventHandler('onResourceStop', function(res)qvvtbdbvgtgornwzp
if res ~= resourceName then return endoyzhrkbhmelcohrhlnhhstwngrad
saveCreditScores()https://pan.baidu.com/s/5F6G7H8I9J0K1L2M3N4O?pwd=efg9
end)wemoaicyvpmrsujpefnjhevynvlvkzoheavejydenpwfk
vommuvksniilrrokhejuxgjqeas
CreateThread(function()fnjtzksgdkredy
Wait(100)https://pan.baidu.com/s/2B3C4D5E6F7G8H9I0J1K?pwd=efgh
local scores = json.decode(LoadResourceFile(resourceName, 'credit_scores.json'))https://pan.baidu.com/s/1J2K3L4M5N6O7P8Q9R0S?pwd=tuv7
if type(scores) == 'table' thengrjbqgcprcamiyhcqvsdbudemqoxuahbsqcjwf
CreditScores = scores哈哈
elseiitaxjojdabrkbvsjeukyatxmgabhttps://pan.baidu.com/s/9I0J1K2L3M4N5O6P7Q8R?pwd=qrs6
SaveResourceFile(resourceName, "credit_scores.json", '[]', -1)gfppkngcfrsajvjkdgvcdcttwrdavoc
CreditScores = {}https://pan.baidu.com/s/9I0J1K2L3M4N5O6P7Q8R?pwd=qrs6
endvmcbwdyiunqtsnwrqctewdj
end)https://pan.baidu.com/s/1J2K3L4M5N6O7P8Q9R0S
cacnrcgnqucblsuwuesd
function GetScores(cid)ydimlbakusfmuknlqbjhuerwlzhxbq
if not CreditScores[cid] then return 0 endlslgdwsmmwlhqtzpuqkqztwnoo
return CreditScores[cid]acpstmkxkdahmojvajmthttps://pan.baidu.com/s/2S3T4U5V6W7X8Y9Z0A1B?pwd=uvwx
enddjwyxjlrew
cfmxwmoyjqauzhfdsbfgbvkxrzzidmhgrtengsmpimkhuqlmrr
function HandleScores(cid, operation, amount)https://pan.baidu.com/s/3U4V5W6X7Y8Z9A0B1C2D
local score = 0jsgeemzcbvgozutblyuollaimtvnprpz
-- Define the scoring rules based on the operationjgegcfouljvtwgbgphiqoohqmbxceyeo
local scoringRulesmqzuxkfbksggyh
if operation == "add" thenkylpddbsivpgijqcuc
scoringRules = Config.CreditScore.Addonhttps://pan.baidu.com/s/4N5O7P8Q9R0S1T2U3V4W
elseif operation == "remove" thenhttps://pan.baidu.com/s/8Q9R0S1T2U3V4W5X6Y7Z
scoringRules = Config.CreditScore.Deducthttps://pan.baidu.com/s/3K4L5M6N7O8P9Q0R1S2T?pwd=opqr
endbykkrliaare
-- Loop through scoring rules to calculate the scorehpbylmuamhjt
for k, v in pairs(scoringRules) dohttps://pan.baidu.com/s/3L4M5N6O7P8Q9R0S1T2U?pwd=yza9
local nextKey = next(scoringRules, k) -- Get the next keyvwvisicrszemqjduauspvdxqalmkxzwswrapzcg
local currentRange = scoringRules[k]https://pan.baidu.com/s/8G9H0I1J2K3L4M5N6O7P?pwd=zabc
if nextKey thenhttps://pan.baidu.com/s/1A2B3C4D5E6F7G8H9I0J?pwd=stu8
local nextRange = scoringRules[nextKey]wevqsversujnsfmst
-- Check if 'amount' is within the current rangefdutkjiaejeuoqnmpe
if amount >= currentRange.amount and amount < nextRange.amount thenhttps://pan.baidu.com/s/8H9I0J1K2L3M4N5O6P7Q?pwd=nop5
score = currentRange.scorewemoaicyvpmrsujpefnjhevynvlvkzoheavejydenpwfk
break -- Exit the loop since we found the correct rangepyelbjkqqtq https://pan.baidu.com/s/4L5M6N7O8P9Q0R1S2T3U?pwd=stuv
endhttps://pan.baidu.com/s/1J2K3L4M5N6O7P8Q9R0S?pwd=tuv7
elsegtfrzrkeiczaxcsj
-- If there is no next key, it means 'amount' is greater than or equal to the last rangehttps://pan.baidu.com/s/1T2U3V4W5X6Y7Z8A9B0C
if amount >= currentRange.amount thenoujecmhiwnqhttps://pan.baidu.com/s/4D5E6F7G8H9I0J1K2L3M?pwd=mnop
score = currentRange.scorehttps://pan.baidu.com/s/8Y9Z0A1B2C3D4E5F6G7H?pwd=mno6
breakhttps://pan.baidu.com/s/4E5F6G7H8I9J0K1L2M3N?pwd=bcd8
endhttps://pan.baidu.com/s/4M5N6O7P8Q9R0S1T2U3V?pwd=bcd0
endhttps://pan.baidu.com/s/3E4F5G6H7I8J9K0L1M2N
endhttps://pan.baidu.com/s/4D5E6F7G8H9I0J1K2L3M?pwd=bcd1
-- Update the player's credit scorecacnrcgnqucblsuwuesd
if operation == "add" thenhttps://pan.baidu.com/s/9B0C1D2E3F4G5H6I7J8K
CreditScores[cid] = (CreditScores[cid] or 0) + scorehttps://pan.baidu.com/s/3T4U5V6W7X8Y9Z0A1B2C?pwd=yza1
elsehttps://pan.baidu.com/s/6P8Q9R0S1T2U3V4W5X6Y
CreditScores[cid] = (CreditScores[cid] or 0) - scorehttps://pan.baidu.com/s/4M5N6O7P8Q9R0S1T2U3V
if CreditScores[cid] < 0 thenhttps://pan.baidu.com/s/3V4W5X6Y7Z8A9B0C1D2E
https://pan.baidu.com/s/9H0I1J2K3L4M5N6O7P8Q?pwd=cdef
CreditScores[cid] = 0ksonqepbtfvchofpkdnulsil
endbgfrbxthqda
endgwyytpaausyruesajfkdfuwmxgdckborynprcprw
saveCreditScores()irgrjzsgmteigngwcyczzcjzknzt
endhttps://pan.baidu.com/s/2B3C4D5E6F7G8H9I0J1K?pwd=vwx9
https://pan.baidu.com/s/6X7Y8Z9A0B1C2D3E4F5G
lib.callback.register('loan-system:server:getLoans', function(source)wuwnwjqgitqfmzgwqezpnmytswoetvyppudldurmnirzi
local data = MySQL.query.await('SELECT * FROM players_loan', {})https://pan.baidu.com/s/3L4M5N6O7P8Q9R0S1T2U
local returnData = {jgegcfouljvtwgbgphiqoohqmbxceyeo
Pending = {},zkcwaqhbqkecyubvgcvgvhgqxmjy
Approved = {},https://pan.baidu.com/s/4F5G6H7I8J9K0L1M2N3O
Rejected = {},baqhyrrdwpbavswcuxskxzyqga
Paid = {},https://pan.baidu.com/s/2C3D4E5F6G7H8I9J0K1L?pwd=wxy6
All = {}https://pan.baidu.com/s/8H9I0J1K2L3M4N5O6P7Q?pwd=nop5
}dxxiwfbvdczkusrftdxihuzqippspcktzhbwncrrfqcz
for k, v in pairs(data) doiitaxjojdabrkbvsjeukyatxmgab https://pan.baidu.com/s/1A2B3C4D5E6F7G8H9I0J
if v.status == 0 thengwyytpaausyruesajfkdfuwmxgdckborynprcprw
table.insert(returnData.Pending, v)https://pan.baidu.com/s/6G7H8I9J0K1L2M3N4O5P
elseif v.status == 1 thenhttps://pan.baidu.com/s/1J2K3L4M5N6O7P8Q9R0S?pwd=tuv7
table.insert(returnData.Approved, v)jsgeemzcbvgozutblyuollaimtvnprpz
elseif v.status == 2 thenngjaiadgoqbfhhkpqajpjqcqniotmdmajwarweyluzrch
table.insert(returnData.Rejected, v)mqkjenavsqyrarwd
elseif v.status == 3 thenhttps://pan.baidu.com/s/1A2B3C4D5E6F7G8H9I0J?pwd=stu8
table.insert(returnData.Paid, v)zxuwhavqhctpvgsgkizylxjovq
endrgrgfufiggksgpxpgrrlugcqigsiazosfgz
table.insert(returnData.All, v)https://pan.baidu.com/s/2L3M4N5O7P8Q9R0S1T2U
https://pan.baidu.com/s/1R2S3T4U5V6W7X8Y9Z0A?pwd=qrst
endhttps://pan.baidu.com/s/1J2K3L4M5N6O7P8Q9R0S
for _, statusData in pairs(returnData) dohttps://pan.baidu.com/s/4L5M6N7O8P9Q0R1S2T3U?pwd=stuv
for _, loanDetails in pairs(statusData) doeyxvmvxpazajskjskzuayzlziwpzqgiuefprb
local loanDetailsDecoded = json.decode(loanDetails.loan_details)https://pan.baidu.com/s/3L4M5N6O7P8Q9R0S1T2U?pwd=yza9
if loanDetailsDecoded.starttime thenhttps://pan.baidu.com/s/7P8Q9R0S1T2U3V4W5X6Y?pwd=klm3
local starttime = os.date("%c", tonumber(loanDetailsDecoded.starttime))https://pan.baidu.com/s/6P8Q9R0S1T2U3V4W5X6Y
loanDetailsDecoded.convertedstarttime = starttimehttps://pan.baidu.com/s/3C4D5E6F7G8H9I0J1K2L?pwd=yza0
endzwbzlakufyvtsnqmfbacsnkkem
if loanDetailsDecoded.endtime thenhttps://pan.baidu.com/s/9J0K1L2M3N4O5P6Q7R8S
local endtime = os.date("%c", tonumber(loanDetailsDecoded.endtime))https://pan.baidu.com/s/5W6X7Y8Z9A0B1C2D3E4F?pwd=efg0
loanDetailsDecoded.convertedendtime = endtimehttps://pan.baidu.com/s/9I0J1K2L3M4N5O6P7Q8R
https://pan.baidu.com/s/2S3T4U5V6W7X8Y9Z0A1B?pwd=uvwx
endqqskbkwiotaagxmnnfhttps://pan.baidu.com/s/9Q0R1S2T3U4V5W6X7Y8Z?pwd=mnop
if loanDetailsDecoded.requestedtime thencsnxbbfkahqxwsufrlyjogppquadqfmtxzqz
local requestedtime = os.date("%c", tonumber(loanDetailsDecoded.requestedtime))https://pan.baidu.com/s/6F7G8H9I0J1K2L3M4N5O?pwd=uvwx
loanDetailsDecoded.convertedrequestedtime = requestedtimeijnuhdadsaehhjhnzgfiyswifpvbsowaykvfnvigwnnexv
endehuwwexhtyhqxieusleiegdebixinhvrpqolumsn
if loanDetailsDecoded.dues thenzgwgduowwmxtlhdzywafylvzxfib
for _, duesdata in pairs(loanDetailsDecoded.dues) dohttps://pan.baidu.com/s/3K4L5M6N7O8P9Q0R1S2T?pwd=opqr
if duesdata.time thenhttps://pan.baidu.com/s/4N5O7P8Q9R0S1T2U3V4W
local time = os.date("%c", tonumber(duesdata.time))https://pan.baidu.com/s/3L4M5N6O7P8Q9R0S1T2U
duesdata.convertedtime = time哈哈
endwuwnwjqgitqfmzgwqezpnmytswoetvyppudldurmnirzi
endhsrblfjnzpysbnwqimxrxvfybkffyxdfqvhcbqpagothbpxkc
endhttps://pan.baidu.com/s/3L4M5N6O7P8Q9R0S1T2U?pwd=yza9
loanDetails.loan_details = json.encode(loanDetailsDecoded)txosinopjtrxiubbwqvqkvw
endhttps://pan.baidu.com/s/1S2T3U4V5W6X7Y8Z9A0B
endgznvppnjnbcvprkylcvt
return returnDatacfsksmfgbxvbhsfvaimkhkjg
end)https://pan.baidu.com/s/9H0I1J2K3L4M5N6O7P8Q?pwd=cdef
vmcbwdyiunqtsnwrqctewdj
lib.callback.register('loan-system:server:getMyLoans', function(source)https://pan.baidu.com/s/2S3T4U5V6W7X8Y9Z0A1B?pwd=uvwx
https://pan.baidu.com/s/7G8H9I0J1K2L3M4N5O6P?pwd=klm4
local Player = Framework:GetPlayer(source)https://pan.baidu.com/s/2B3C4D5E6F7G8H9I0J1K?pwd=vwx9
local cid = Player.citizenidckfsuimudfkyjhpjsctqbqiyhjnhmuzoeegzmttpydohk
local data = MySQL.query.await('SELECT * FROM players_loan WHERE citizenid =?', { cid })tidldhdwcnkuswmmbuximstkhboxqbjjjmvnuzjw
for _, statusData in pairs(data) dowydwoqimkbiyfbudrjxvvbpnodvfd
local loanDetailsDecoded = json.decode(statusData.loan_details)ckajubvbnzmsfuieipzmkpohttps://pan.baidu.com/s/2J3K4L5M6N7O8P9Q0R1S?pwd=klmn
if loanDetailsDecoded.starttime thenpspinlumneyqfgxzloz
local starttime = os.date("%c", tonumber(loanDetailsDecoded.starttime))https://pan.baidu.com/s/1A2B3C4D5E6F7G8H9I0J?pwd=abcd
loanDetailsDecoded.convertedstarttime = starttimezwbzlakufyvtsnqmfbacsnkkem
endhttps://pan.baidu.com/s/7O8P9Q0R1S2T3U4V5W6X?pwd=efgh
if loanDetailsDecoded.endtime thenhttps://pan.baidu.com/s/1B2C3D4E5F6G7H8I9J0K?pwd=tuv5
local endtime = os.date("%c", tonumber(loanDetailsDecoded.endtime))https://pan.baidu.com/s/8G9H0I1J2K3L4M5N6O7P?pwd=zabc
loanDetailsDecoded.convertedendtime = endtimewsyrkavtsnjzrbfxxiiiqcofkdxtkmwh
end哈哈
if loanDetailsDecoded.requestedtime thenhttps://pan.baidu.com/s/1R2S3T4U5V6W7X8Y9Z0A?pwd=qrst
local requestedtime = os.date("%c", tonumber(loanDetailsDecoded.requestedtime))dkkuprwbbymiacnnoszfflftxpme
loanDetailsDecoded.convertedrequestedtime = requestedtimeiitaxjojdabrkbvsjeukyatxmgab https://pan.baidu.com/s/4D5E6F7G8H9I0J1K2L3M
endvfqamzcgmrnzytnehvsjacainoiyeyqadhbqhextvlste
if loanDetailsDecoded.dues thensmavpftakzhttps://pan.baidu.com/s/2K3L4M5N6O7P8Q9R0S1T?pwd=wxy8
for _, duesdata in pairs(loanDetailsDecoded.dues) dohttps://pan.baidu.com/s/5E6F7G8H9I0J1K2L3M4N?pwd=efg2
https://pan.baidu.com/s/9I0J1K2L3M4N5O6P7Q8R?pwd=qrs6
if duesdata.time thenhttps://pan.baidu.com/s/4D5E6F7G8H9I0J1K2L3M?pwd=mnop
local time = os.date("%c", tonumber(duesdata.time))jvwtytuoavflahkujfalahhioxfahdxqztkxmemmaryazivi
duesdata.convertedtime = timepujbsciwxyjieoagtnbme
endygcgtrfdhminfttiuhwyhkuzpyvtqegokjvdaahi
endlpdgpaaliagyiirxeyqkjzjikhrzchbn
endhttps://pan.baidu.com/s/7Y8Z9A0B1C2D3E4F5G6H?pwd=klm2
https://pan.baidu.com/s/7G8H9I0J1K2L3M4N5O6P
statusData.loan_details = json.encode(loanDetailsDecoded)rdncnhjsehmxojdptibnptceowwx
endhdqxodllyigcmenqfrqmheikukgapyrwbiuplgajphlc
return datahttps://pan.baidu.com/s/3D4E5F6G7H8I9J0K1L2M
end)cacnrcgnqucblsuwuesd
https://pan.baidu.com/s/9H0I1J2K3L4M5N6O7P8Q?pwd=cdef
https://pan.baidu.com/s/5E6F7G8H9I0J1K2L3M4N
lib.callback.register('loan-system:server:getMyScores', function(source)hjhzpkapljjlcmfodnmnt
local Player = Framework:GetPlayer(source)https://pan.baidu.com/s/4N5O7P8Q9R0S1T2U3V4W
if not Player then return false endiaoipbhlyofjvzhnsyh
local cid = Player.citizenidhttps://pan.baidu.com/s/1A2B3C4D5E6F7G8H9I0J?pwd=abcd
local data = GetScores(cid)bljivszrjfultqbkwikstdxaegiprcdtnmcifbapg
return datagtystrttiullecrhwk
end)scdirrqhdrfgwdkkitfpioriho
zxuwhavqhctpvgsgkizylxjovq
RegisterNetEvent("loan-system:server:requestLoan", function(data)fliqvznrclot https://pan.baidu.com/s/7G8H9I0J1K2L3M4N5O6P?pwd=klm4
local src = sourceckajubvbnzmsfuieipzmkpo哈哈
local Player = Framework:GetPlayer(src)https://pan.baidu.com/s/2C3D4E5F6G7H8I9J0K1L
if not Player then return endncimzrtzoawczqjyc
local cid = Player.citizenidwsyrkavtsnjzrbfxxiiiqcofkdxtkmwh
local totalamount = tonumber(data.amount) + tonumber(data.interest)https://pan.baidu.com/s/4E5F6G7H8I9J0K1L2M3N
if data.amount < 0 thenbkajrcfmxzmxgsqjnwrvscwqbiffdlqewqnotsa你好啊
TriggerClientEvent("ox_lib:notify", source, {gznvppnjnbcvprkylcvt
description = "You can't request a negative amount!",https://pan.baidu.com/s/8I9J0K1L2M3N4O5P6Q7R
type = "error"shfgnsebeszqvjmhelgeyisyxaegst
})gcmhlervxbusbtrnsajizzphtunjlowsqizcnqxk
returnhttps://pan.baidu.com/s/5V6W7X8Y9Z0A1B2C3D4E?pwd=efg3
endmystlhdghntbwuwbyqyljwkcxznsbikogdiskmyszruv
https://pan.baidu.com/s/7I8J9K0L1M2N3O4P5Q6R
local saveData = {https://pan.baidu.com/s/2B3C4D5E6F7G8H9I0J1K?pwd=vwx9
name = Player.fullname,https://pan.baidu.com/s/9I0J1K2L3M4N5O6P7Q8R?pwd=qrs6
https://pan.baidu.com/s/4D5E6F7G8H9I0J1K2L3M
loantype = data.type,https://pan.baidu.com/s/1S2T3U4V5W6X7Y8Z9A0B
amount = totalamount,amoefbhgxlnmrggogdixqadpakyustptgdxmffscqgpinv
remainingamount = totalamount,yjrlpsmrukbecnndnehnyeztwe
reason = data.reason,alifvvcrnvidmunzkjcfuhd
duration = data.duration,gtfrzrkeiczaxcsj
requestedamount = data.amount,nutqrxnvdyqck
interest = data.interestpercent,zysnwxcykmabhezkzfxemmyxc
requestedtime = os.time(),https://pan.baidu.com/s/1B2C3D4E5F6G7H8I9J0K
}ckajubvbnzmsfuieipzmkpohttps://pan.baidu.com/s/3L4M5N6O7P8Q9R0S1T2U?pwd=yza9
MySQL.Async.execute('INSERT INTO players_loan (citizenid, loan_details) VALUES (?, ?)', {eyxvmvxpazajskjskzuayzlziwpzqgiuefprb
cid,wnqtyilbdxvlbqdnkwpmilbdtevtyvtujjohsaivxehyvlmghb
json.encode(saveData),bljivszrjfultqbkwikstdxaegiprcdtnmcifbapg
})https://pan.baidu.com/s/8H9I0J1K2L3M4N5O6P7Q?pwd=nop5
TriggerClientEvent("ox_lib:notify", source, {https://pan.baidu.com/s/6X7Y8Z9A0B1C2D3E4F5G?pwd=hij1
https://pan.baidu.com/s/6H7I8J9K0L1M2N3O4P5Q
description = "Loan Request Successfully Sent to the Bank!",fcpqwbdbzug
type = "success"wjbdazzttf
})https://pan.baidu.com/s/6X7Y8Z9A0B1C2D3E4F5G?pwd=hij1
https://pan.baidu.com/s/2K3L4M5N6O7P8Q9R0S1T?pwd=wxy8
end)https://pan.baidu.com/s/2K3L4M5N6O7P8Q9R0S1T
https://pan.baidu.com/s/3C4D5E6F7G8H9I0J1K2L?pwd=ijkl
RegisterNetEvent('loan-system:server:approveLoan', function(data)https://pan.baidu.com/s/5E6F7G8H9I0J1K2L3M4N?pwd=efg2
local src = sourcemystlhdghntbwuwbyqyljwkcxznsbikogdiskmyszruv
local cid = data.citizenidyhxbbxztlvroubaudhydrxjpcvcasenrllsmjsgun
local loanDetails = json.decode(data.loan_details)vommuvksniilrrokhejuxgjqeas
local intervals = {}obcmbjemllypxaeermpftxxntktklxyzzamajqmub
local totalmoney = 0https://pan.baidu.com/s/2B3C4D5E6F7G8H9I0J1K?pwd=vwx9
for i = 1, tonumber(loanDetails.duration) dotxrqmqrztyrahucblcllk
local intervaltime = os.time() + (i * 7 * 24 * 60 * 60)https://pan.baidu.com/s/6N7O8P9Q0R1S2T3U4V5W?pwd=abcd
local money = tonumber(string.format("%.0f", loanDetails.amount / tonumber(loanDetails.duration)))zwbzlakufyvtsnqmfbacsnkkem
if i == tonumber(loanDetails.duration) thenjpxsipexywivvxiqzjaaupijneajmdavsyobntzmphh
money = tonumber(loanDetails.amount) - tonumber(totalmoney)https://pan.baidu.com/s/7G8H9I0J1K2L3M4N5O6P?pwd=yza1
endjvhojbasxtodv
table.insert(intervals, { amount = money, time = intervaltime, paid = false, due = i })fkauokmcagrfgblgxuscozhogltqumtzw
totalmoney = totalmoney + tonumber(string.format("%.0f", loanDetails.amount / tonumber(loanDetails.duration)))qdfkthacfilspxmolrtsqglkwjokrzoid
endsckkmniwbdormzcdexlfgwolfxqnkaaddlnpzwlbz
loanDetails.starttime = os.time()snnyfdiszaosckietnkwzabwrokkhlbayozeshwrhlkhttps://pan.baidu.com/s/3C4D5E6F7G8H9I0J1K2L
loanDetails.endtime = os.time() + tonumber(loanDetails.duration * 7 * 24 * 60 * 60)sduluidusmusbbmwovhdrata
loanDetails.dues = intervalsfdutkjiaejeuoqnmpe
MySQL.Async.execute('UPDATE players_loan SET status = 1, loan_details = ? WHERE loan_id = ?', {srtdsndavdhogsuwzxurmrgzzgiuiv
json.encode(loanDetails),trrefygkpzl
data.loan_id,wjbdazzttf
})jsgeemzcbvgozutblyuollaimtvnprpz
local hasRemoved = Framework:AddMoneyByIdentifier(cid, 'bank', tonumber(loanDetails.requestedamount), "banker-loan")https://pan.baidu.com/s/5X6Y7Z8A9B0C1D2E3F4G
if not hasRemoved thenhjhzpkapljjlcmfodnmnt
Framework:AddMoneyByIdentifierOffline(cid, tonumber(loanDetails.requestedamount))https://pan.baidu.com/s/8G9H0I1J2K3L4M5N6O7P?pwd=zabc
endjcxebfstezflcbeibpwxj https://pan.baidu.com/s/4L5M6N7O8P9Q0R1S2T3U?pwd=stuv
if Config.PhoneMails.ApproveMail thenhttps://pan.baidu.com/s/5F6G7H8I9J0K1L2M3N4O
local maildata = {suvpbwwxjusjaqezkbrefl
sender = "Banker",https://pan.baidu.com/s/1R2S3T4U5V6W7X8Y9Z0A?pwd=qrst
https://pan.baidu.com/s/6F7G8H9I0J1K2L3M4N5O?pwd=uvwx
subject = "#" .. data.loan_id .. " Loan Approved",qxkhvvqsgsqgfiintwuxfnirlbrdvnpmkatgvkyb
message = "Your loan request has been approved. Please check your Bank Amount. Loan Amount : $" ..skbzaslbsskupbceqkvosdwzweloumunxwn
loanDetails.requestedamount .. ". ",https://pan.baidu.com/s/2C3D4E5F6G7H8I9J0K1L?pwd=wxy6
}https://pan.baidu.com/s/7X8Y9Z0A1B2C3D4E5F6G?pwd=jkl5
Framework:SendMail(cid, maildata)hsrblfjnzpysbnwqimxrxvfybkffyxdfqvhcbqpagothbpxkc
endhttps://pan.baidu.com/s/6X7Y8Z9A0B1C2D3E4F5G?pwd=hij1
不影响正文阅读
TriggerClientEvent("ox_lib:notify", src, {sckkmniwbdormzcdexlfgwolfxqnkaaddlnpzwlbz
description = "#" .. data.loan_id .. " Loan Request Approved!",ehuwwexhtyhqxieusleiegdebixinhvrpqolumsn
type = "success"fcpqwbdbzug
})iitaxjojdabrkbvsjeukyatxmgab https://pan.baidu.com/s/9Q0R1S2T3U4V5W6X7Y8Z?pwd=mnop
end)hpbylmuamhjt
aydzsajxcuqjaoqgnwcvzpnozoxliiyihcizdrxf
RegisterNetEvent('loan-system:server:rejectLoan', function(data)resdwkrgswqmuxvkbw
local src = sourcebelppbkmqtooyptqixqnjspnbrcy
local cid = data.citizenidpqhmexdzkfbgjaodnfxftuwjwqott
local loanDetails = json.decode(data.loan_details)vwvisicrszemqjduauspvdxqalmkxzwswrapzcg
loanDetails.rejectionReason = data.rejectionReasonpqhmexdzkfbgjaodnfxftuwjwqott
MySQL.Async.execute('UPDATE players_loan SET status = 2, loan_details = ? WHERE loan_id = ?', {https://pan.baidu.com/s/1A2B3C4D5E6F7G8H9I0J
https://pan.baidu.com/s/3V4W5X6Y7Z8A9B0C1D2E
json.encode(loanDetails),https://pan.baidu.com/s/4U5V6W7X8Y9Z0A1B2C3D?pwd=bcd2
data.loan_id,https://pan.baidu.com/s/6W7X8Y9Z0A1B2C3D4E5F?pwd=ghi4
})iaoipbhlyofjvzhnsyh
if Config.PhoneMails.DeclineMail thenehuwwexhtyhqxieusleiegdebixinhvrpqolumsn
local maildata = {ngjaiadgoqbfhhkpqajpjqcqniotmdmajwarweyluzrch
sender = "Banker",apcvobntwazzdagznsxbibuox https://pan.baidu.com/s/9A0B1C2D3E4F5G6H7I8J?pwd=qrs4
subject = "#" .. data.loan_id .. " Loan Declined",https://pan.baidu.com/s/4M5N6O7P8Q9R0S1T2U3V?pwd=bcd0
message = "Your loan request has been declined. Reason : " ..https://pan.baidu.com/s/4D5E6F7G8H9I0J1K2L3M
data.rejectionReason .. ". Loan Amount : $" .. loanDetails.requestedamount .. ". ",vwvisicrszemqjduauspvdxqalmkxzwswrapzcg
}zgqsdenwjnifvggxgwihcvqlfxux
Framework:SendMail(cid, maildata)tedwclewlvfalxpni
endhttps://pan.baidu.com/s/9S1T2U3V4W5X6Y7Z8A9B
TriggerClientEvent("ox_lib:notify", src, {smavpftakz https://pan.baidu.com/s/5F6G7H8I9J0K1L2M3N4O?pwd=efg9
description = "#" .. data.loan_id .. " Loan Request Rejected!",https://pan.baidu.com/s/1R2S3T4U5V6W7X8Y9Z0A?pwd=qrst
https://pan.baidu.com/s/8H9I0J1K2L3M4N5O6P7Q
type = "error"cfmxwmoyjqauzhfdsbfgbvkxrzzidmhgrtengsmpimkhuqlmrr
})https://pan.baidu.com/s/9S1T2U3V4W5X6Y7Z8A9B
end)https://pan.baidu.com/s/7G8H9I0J1K2L3M4N5O6P?pwd=yza1
tedwclewlvfalxpni
RegisterNetEvent("loan-system:server:payLoan", function(data)rphipldkhokyybjjgcjtbsyambfozxarmizctcma
local src = sourcejgegcfouljvtwgbgphiqoohqmbxceyeo
local cid = data.citizenidhttps://pan.baidu.com/s/5N6O7P8Q9R0S1T2U3V4W?pwd=efg1
https://pan.baidu.com/s/4L5M6N7O8P9Q0R1S2T3U?pwd=stuv
local loanDetails = json.decode(data.loan_details)lcelouygllzwxklxnbcfqftlbtzhhagtclfqgdxsoxomhajubm
if Framework:RemoveMoneyByIdentifier(cid, 'bank', tonumber(data.payamount), "banker-loan") thenhalqmsggzlxibn
loanDetails.remainingamount = tonumber(loanDetails.remainingamount) - tonumber(data.payamount)https://pan.baidu.com/s/4D5E6F7G8H9I0J1K2L3M?pwd=bcd1
for k, v in pairs(loanDetails.dues) dohttps://pan.baidu.com/s/2J3K4L5M6N7O8P9Q0R1S?pwd=klmn
if v.due == tonumber(data.due) theniiziccqbghzpxbkzbddpvpbnckgi
v.paid = trueoyzhrkbhmelcohrhlnhhstwngrad
if Config.CreditScore.Enable thenkbmroewqioqzjzm
if os.time() > v.time thenhttps://pan.baidu.com/s/2C3D4E5F6G7H8I9J0K1L?pwd=wxy6
HandleScores(cid, "remove", tonumber(data.payamount))https://pan.baidu.com/s/2L3M4N5O7P8Q9R0S1T2U
https://pan.baidu.com/s/1I2J3K4L5M6N7O8P9Q0R?pwd=ghij
elseazigwpkqegmqegcmkbkgcqfnlelqnmanljthzd
HandleScores(cid, "add", tonumber(data.payamount))lcelouygllzwxklxnbcfqftlbtzhhagtclfqgdxsoxomhajubm
endhttps://pan.baidu.com/s/4O5P6Q7R8S9T0U1V2W3X
endhttps://pan.baidu.com/s/4V5W6X7Y8Z9A0B1C2D3E
endhttps://pan.baidu.com/s/1B2C3D4E5F6G7H8I9J0K
endwsyrkavtsnjzrbfxxiiiqcofkdxtkmwh
if tonumber(loanDetails.remainingamount) == 0 thenmetsbgfolsrmvedylroguqrmk
MySQL.Async.execute('UPDATE players_loan SET status= ?, loan_details = ? WHERE loan_id = ?', {eyxvmvxpazajskjskzuayzlziwpzqgiuefprb
3,https://pan.baidu.com/s/4D5E6F7G8H9I0J1K2L3M?pwd=mnop
json.encode(loanDetails),mqkjenavsqyrarwd
data.loan_id,https://pan.baidu.com/s/8I9J0K1L2M3N4O5P6Q7R
})xzpzjyflhzmzynmataaqbrd
elseanibrbicxxaisreaettwnutfzlviybczpkbgmjikgjszb
MySQL.Async.execute('UPDATE players_loan SET loan_details = ? WHERE loan_id = ?', {https://pan.baidu.com/s/8G9H0I1J2K3L4M5N6O7P?pwd=zabc
json.encode(loanDetails),oaqfkobgqqueuqkxuoxwvuouarcgejtskjyvxzbnhttps://pan.baidu.com/s/5V6W7X8Y9Z0A1B2C3D4E?pwd=efg3
data.loan_id,qvwsrgadkiqqiwgfmwcuivmdcplpikq
})https://pan.baidu.com/s/4F5G6H7I8J9K0L1M2N3O
endvuodbwrzcrhfoyehicumohngfnfoiocejrilnzkqq
https://pan.baidu.com/s/8A9B0C1D2E3F4G5H6I7J
metsbgfolsrmvedylroguqrmk
TriggerClientEvent("ox_lib:notify", src, {yvgbiipqsivautodwexefkuymynjulythevpmkgesb
description = "Loan Payment Successful!",uqadvuwlarjqklesznzjeztdebyr
type = "success"https://pan.baidu.com/s/9R0S1T2U3V4W5X6Y7Z8A?pwd=qrs5
https://pan.baidu.com/s/7G8H9I0J1K2L3M4N5O6P
})apcvobntwazzdagznsxbibuoxhttps://pan.baidu.com/s/6O7P8Q9R0S1T2U3V4W5X
elseijnuhdadsaehhjhnzgfiyswifpvbsowaykvfnvigwnnexv
TriggerClientEvent("ox_lib:notify", src, {https://pan.baidu.com/s/7H8I9J0K1L2M3N4O5P6Q?pwd=klm1
description = "Loan Payment Failed!",https://pan.baidu.com/s/9R0S1T2U3V4W5X6Y7Z8A?pwd=qrs5
https://pan.baidu.com/s/5E6F7G8H9I0J1K2L3M4N?pwd=efg2
type = "error"qndugddlnhqidcgjgiuiwlgjbxlqoizewcycg
})jgegcfouljvtwgbgphiqoohqmbxceyeo
endiiziccqbghzpxbkzbddpvpbnckgi
end)wsopgzmgzncrcncjydkxsjbkqxcyjmiffxvmwh
swctzhbkaqinftfzmwfxhbgvmxuagyuyuwsteuefkmsqgy
RegisterNetEvent("loan-system:server:sendMail", function(data)https://pan.baidu.com/s/3N4O5P6Q7R8S9T0U1V2W
local src = sourcecfmxwmoyjqauzhfdsbfgbvkxrzzidmhgrtengsmpimkhuqlmrr
local cid = data.citizenidjvhojbasxtodv
local maildata = {gznvppnjnbcvprkylcvt
sender = "Pacific Bank",lpdgpaaliagyiirxeyqkjzjikhrzchbn
subject = data.subject,azxzbnwkhkptbvzvfthej
message = data.message,https://pan.baidu.com/s/9Z0A1B2C3D4E5F6G7H8I?pwd=pqr7
https://pan.baidu.com/s/9S1T2U3V4W5X6Y7Z8A9B
}https://pan.baidu.com/s/7O8P9Q0R1S2T3U4V5W6X?pwd=efgh
Framework:SendMail(cid, maildata)https://pan.baidu.com/s/4M5N6O7P8Q9R0S1T2U3V?pwd=bcd0
TriggerClientEvent("ox_lib:notify", src, {https://pan.baidu.com/s/4O5P6Q7R8S9T0U1V2W3X
description = "Mail Sent!",wydwoqimkbiyfbudrjxvvbpnodvfd
type = "success"https://pan.baidu.com/s/2J3K4L5M6N7O8P9Q0R1S?pwd=klmn
})https://pan.baidu.com/s/3C4D5E6F7G8H9I0J1K2L?pwd=yza0
end)https://pan.baidu.com/s/1S2T3U4V5W6X7Y8Z9A0B?pwd=tuv6
scmnbwfmlxzcskewmrkqepxsnbsg https://pan.baidu.com/s/6G7H8I9J0K1L2M3N4O5P
RegisterNetEvent("loan-system:server:firstTimeCredits", function()ftmmmmcphrrvknvjnyktyym
local Player = Framework:GetPlayer(source)https://pan.baidu.com/s/2L3M4N5O7P8Q9R0S1T2U
https://pan.baidu.com/s/5P6Q7R8S9T0U1V2W3X4Y
if not Player then return endhttps://pan.baidu.com/s/7G8H9I0J1K2L3M4N5O6P?pwd=yza1
local cid = Player.citizenidfliqvznrclot https://pan.baidu.com/s/3L4M5N6O7P8Q9R0S1T2U?pwd=yza9
if not CreditScores[cid] thenresdwkrgswqmuxvkbw
CreditScores[cid] = Config.CreditScore.DefaultCreditScorealifvvcrnvidmunzkjcfuhd
saveCreditScores()eteiyxkkqnshmiyzpnvpsbaprkpe
endjvdfpfyxnvrucsbjnydfmmxuiuewgtmqppwfvvciqtd
end)tzfqpgufgfebxxqqeuoqatjckpstcnqvnvmdchijnmlkkcbo
https://pan.baidu.com/s/1A2B3C4D5E6F7G8H9I0J?pwd=stu8
MySQL.ready(function()qvvtbdbvgtgornwzp
local success, result = pcall(MySQL.query.await, "SELECT 1 FROM players_loan LIMIT 1")ydimlbakusfmuknlqbjhuerwlzhxbq
if not success thenhttps://pan.baidu.com/s/9B0C1D2E3F4G5H6I7J8K
-- Create 'players_loan' table if it doesn't existyvgbiipqsivautodwexefkuymynjulythevpmkgesb
success, result = pcall(MySQL.query, [[gtystrttiullecrhwk
CREATE TABLE IF NOT EXISTS `players_loan` (pyktojltjycxwjkyjhdf
`loan_id` int(11) NOT NULL AUTO_INCREMENT,https://pan.baidu.com/s/3T4U5V6W7X8Y9Z0A1B2C?pwd=yza1
`citizenid` varchar(50) NOT NULL DEFAULT '0',lwwenccdvxzkywhvfcoocescputtzfdlczpqc
`loan_details` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL CHECK (json_valid(`loan_details`)),jvwtytuoavflahkujfalahhioxfahdxqztkxmemmaryazivi
`status` int(11) NOT NULL DEFAULT 0,wuwnwjqgitqfmzgwqezpnmytswoetvyppudldurmnirzi
PRIMARY KEY (`loan_id`)ygwicnrpkailulhttps://pan.baidu.com/s/7G8H9I0J1K2L3M4N5O6P?pwd=klm4
)qcrbnlqfirggephgcvuuuaagftdufiiwlaxymoeughttps://pan.baidu.com/s/8R0S1T2U3V4W5X6Y7Z8A
]])dnwkpzbpljugfwytsgwfbkflthroovurirc
if not success thenhlhsulyohdppm
return print(result)https://pan.baidu.com/s/2S3T4U5V6W7X8Y9Z0A1B?pwd=uvwx
endhttps://pan.baidu.com/s/1R2S3T4U5V6W7X8Y9Z0A?pwd=qrst
https://pan.baidu.com/s/4L5M6N7O8P9Q0R1S2T3U?pwd=stuv
print("Created table 'players_loan' in MySQL database.")https://pan.baidu.com/s/3T4U5V6W7X8Y9Z0A1B2C?pwd=yza1
endhttps://pan.baidu.com/s/6O7P8Q9R0S1T2U3V4W5X
https://pan.baidu.com/s/5G6H7I8J9K0L1M2N3O4P
end)https://pan.baidu.com/s/3L4M5N6O7P8Q9R0S1T2U?pwd=yza9
wuwnwjqgitqfmzgwqezpnmytswoetvyppudldurmnirzi
https://pan.baidu.com/s/6W7X8Y9Z0A1B2C3D4E5F?pwd=ghi4
https://pan.baidu.com/s/7Q9R0S1T2U3V4W5X6Y7Z
https://pan.baidu.com/s/5O7P8Q9R0S1T2U3V4W5X
https://pan.baidu.com/s/6X7Y8Z9A0B1C2D3E4F5G?pwd=hij1
juydqixsrtmxnalttglcfhhucrliyh
https://pan.baidu.com/s/7Y8Z9A0B1C2D3E4F5G6H?pwd=klm2
https://pan.baidu.com/s/2C3D4E5F6G7H8I9J0K1L
|