Banking-System (cv_banking)¶
Geldautomaten und Bankschalter für Einzahlungen und Auszahlungen. Interagierbar über ATM-Props im Weltbereich oder NPC-Bankschalter.
Architektur¶
cv_banking
├─ Client – erkennt ATM-Props (prop_atm_*, prop_fleeca_atm) via E-Interaktion
│ – Bankschalter-NPCs werden an Config.Banks-Koordinaten gespawnt
└─ Server – cv.callback für Kontostand, Einzahlung, Auszahlung
– Exports für andere Ressourcen
Konfiguration¶
-- Bankfilialen (NPC-Schalter)
Config.Banks = {
{ id = 'alta', coords = vector4(313.78, -280.42, 53.16, 340.79), label = 'Alta Bank' },
{ id = 'paleto', coords = vector4(-111.14, 6469.96, 30.63, 135.58), label = 'Paleto Bank' },
-- ...
}
-- Geldautomat-Props (automatisch erkannt)
Config.ATM = {
props = { 'prop_atm_02', 'prop_fleeca_atm', 'prop_atm_03', 'prop_atm_01', 'v_5_b_atm1', 'v_5_b_atm' },
distance = 1.1,
}
-- Limits
Config.Banking = {
minimumWithdraw = 1,
maximumWithdraw = 1200000,
minimumDeposit = 1,
maximumDeposit = 1200000,
}
-- NPC-Schalter-Einstellungen
Config.BankTeller = {
distance = 3.0,
npcModel = 'ig_bankman',
npcScenario = 'WORLD_HUMAN_STAND_IMPATIENT',
}
Callbacks (Client → Server)¶
| Callback | Parameter | Rückgabe |
|---|---|---|
banking:getBalance |
— | { success, balance, playerName, minimumWithdraw, maximumWithdraw, minimumDeposit, maximumDeposit } |
banking:withdraw |
amount |
{ success, newBalance, message } |
banking:deposit |
amount |
{ success, newBalance, message } |
Beispiel¶
-- Kontostand abfragen (Clientseite)
cv.callback.trigger('banking:getBalance', false, function(result)
if result.success then
print('Kontostand: $' .. result.balance)
end
end)
-- Auszahlen
cv.callback.trigger('banking:withdraw', false, function(result)
if result.success then
cv.notify('Bank', result.message, 'success')
end
end, 1000)
Server-Exports¶
Für andere Ressourcen, die direkt mit Konten arbeiten müssen:
-- Kontostand lesen
exports['cv_banking']:GetPlayerBankBalance(source) -- → number
-- Kontostand setzen (differenzbasiert, add/remove intern)
exports['cv_banking']:SetPlayerBankBalance(source, amount) -- → boolean
-- Auszahlen (Bank → Cash)
exports['cv_banking']:WithdrawFromBank(source, amount) -- → boolean
-- Einzahlen (Cash → Bank)
exports['cv_banking']:DepositToBank(source, amount) -- → boolean
Sicherheit¶
- Alle Transaktionen werden serverseitig validiert
- Kontostand wird direkt aus dem cv_framework-Player-Objekt gelesen (keine DB-Race-Conditions)
- Auszahlung: Prüfung ob Kontostand ausreicht → erst abbuchen, dann Bargeld gutschreiben; bei Fehler Rollback