Neseniai susidūriau su vienu ESX serveriu, kur didelė problema buvo pinigų exploitų klaidos ir likau nustebęs, jog daugelis serverių neturi tokio kodo serveryje. Kaip žinome, daugelių serverių sistemos "loggina" pinigų gavimą tik tame resurse, kuris prideda pinigus, o kartais sistemose, kur yra galimybė gauti pinigų - išrašų nėra. Tam, jog nereikėtų kiekvienam resursui individualiai pridėti logginimo logikos, sukūriau itin paprastą sprendimą, kuris fiksuos kiekvieną gautą pinigą iš betkurio resurso ir išsiųs "log" į jūsų išrašų "Discord" su informacija - koks žaidėjas, kiek pinigų gavo, į koki "account" buvo pervesti pinigai sistemos bei koks resursas atsakingas už tą pinigų gavimą, jog lengviau būtų susekti, kokiame resurse yra "exploit".
(foto, kuomet dar testavau, formatavima embedo pasitaisysit kam nepatiks)
Atsidarykite „es_extended“ aplankalą savo serverio direktorijoje ;
Nueikite į „server > classes > overrides > oxinventory.lua“
Susirandame funkciją „addAccountMoney“:
addAccountMoney = function(self)
return function(accountName,money, reason)
reason = reason or 'unknown'
if money > 0 then
local account = self.getAccount(accountName)
if account then
money = account.round and ESX.Math.Round(money) or money
self.accounts[account.index].money += money
self.triggerEvent('esx:setAccountMoney', account)
TriggerEvent('esx:addAccountMoney', self.source, accountName, money, reason)
if Inventory.accounts[accountName] then
Inventory.AddItem(self.source, accountName, money)
end
end
end
end
end,
Visą šią funkciją pakeičiame į:
addAccountMoney = function(self)
return function(accountName, money, reason)
reason = reason or 'unknown'
if money > 0 then
local account = self.getAccount(accountName)
if account then
money = account.round and ESX.Math.Round(money) or money
self.accounts[account.index].money += money
self.triggerEvent('esx:setAccountMoney', account)
TriggerEvent('esx:addAccountMoney', self.source, accountName, money, reason)
if Inventory.accounts[accountName] then
Inventory.AddItem(self.source, accountName, money)
end
local xPlayer = ESX.GetPlayerFromId(self.source)
if xPlayer then
local identifier = xPlayer.identifier or "unknown"
local playerName = xPlayer.getName() or "unknown"
local webhookData = {
username = "Pinigų išrašai",
embeds = {
{
title = "Pridėti pinigai",
description = "Žaidėjas gavo pinigų",
color = 3066993,
fields = {
{ name = "Žaidėjas", value = playerName .. " (" .. identifier .. ")", inline = true },
{ name = "Pinigų paskyra", value = accountName, inline = true },
{ name = "Suma", value = tostring(money), inline = true },
{ name = "Priežastis", value = reason, inline = true },
{ name = "Resursas", value = GetInvokingResource() or "unknown", inline = true }
},
timestamp = os.date("!%Y-%m-%dT%H:%M:%S")
}
}
}
PerformHttpRequest("JUSU WEBHOOK",
function(err, text, headers) end,
'POST',
json.encode(webhookData),
{ ['Content-Type'] = 'application/json' }
)
end
end
end
end
end,
Jooo, turėtų gi išvis nebūti pinigų exploitų, bet kartais apie juos net nežinai:) Jeigu randat ką pataisyt, patobulint, parašykit čia, gal tapatį eina atlikti net paprasčiau???