Zum Inhalt

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