Oxide Bankingv2.1.0
MinorAdded
- Redesigned Services screen - Loans, bills, savings, investments, cards, and credit each have their own tab, plus an Overview tab showing what needs attention and what is due in the next two weeks.
- Tablet app - When
oxide-tabletis running, the bank appears as a tablet app with a badge for bills and loan payments due soon, tray notifications, and an Upcoming payments home-screen widget. Bank locations still open the bank's own window. Turn it off withConfig.Tablet.UseTablet. Deposits and withdrawals are hidden on the tablet unlessConfig.Tablet.AllowCashActionsistrue. - Savings notice period - Money withdrawn from savings soon after it was paid in is charged
earlyWithdrawalPenalty. Money that has sat forwithdrawalNoticeDays(default 7) comes out free. The savings screen shows how much is free to withdraw, and the fee, before a withdrawal is confirmed. - Invoice late fees and collection - Late fees grow for each day an invoice stays unpaid (
InvoiceLateFeeDailyPercent). Overdue invoices are collected from the debtor's bank account afterInvoiceAutoDebitAfterDays. Turn collection off withInvoiceAutoDebitEnabled = false. Unpaid invoices also lower the debtor's credit score. - Invoice limits -
InvoiceMaxAmountandMaxOutstandingInvoicesPerRecipientcap invoices players write from the banking screen. Invoices from other resources (fines, medical bills, vehicle finance) are not affected. - Invoice from the business - Bosses can send an invoice from the business account on the Business screen.
- Total borrowing limit -
Config.Loans.exposurecaps how much one player can owe across all their loans. - Position limits -
maxPositionsPerProductandmaxTotalPositionsfor investments,maxPerProductandmaxTotalfor certificates of deposit. - Early cash-out for investments - Investments can be withdrawn before they mature. Each product's
earlyWithdrawalPenaltyis taken from the earnings only, never from the amount invested. - Credit score settings -
Config.CreditScorenow sets the score range, how far credit events can move the score, how quickly that fades, and the points for each event (eventDeltas). - Command suggestions - Every banking command now shows chat suggestions, and command help text and chat replies can be translated in
locales/en.json. /forceinvoices collect- Marks overdue invoices and also collects them.
Changed
- Banking days follow the calendar - A day the server was off at midnight, such as during a nightly restart, is now counted when the server starts again.
- Loan repayment - Loans are repaid in instalments every
LoanPaymentIntervaldays, taken automatically even when the borrower is offline. Paying off early refunds the interest for instalments that never ran. Loans in collections can be paid from the bank screen. - Loan applications - Applications waiting for approval count toward
maxActiveLoans, and the application shows an eligibility check before it is sent.Config.LoanApproval.processingTimeis in real hours. The Emergency Loan now needs an account at least 1 day old. - Rates rebalanced - Savings pays 1.25x the tier rate (was 2x). Certificate of deposit rates are annual: 4%, 6%, and 8%. Expected investment returns: savings bond 9%, stock index 12%, crypto fund 15%, real estate 11%.
- Investments - A position holds its value once it matures until the player cashes it out. Investing follows each tier's
investmentssetting, so Basic accounts cannot invest by default. - Savings minimum balance - A savings account can be emptied, but a withdrawal cannot leave it below
minimumBalance. - Fee settings trimmed -
config/fees.luanow lists only the fees the bank charges. ATM and external transfer fees stay available to other resources through theCalculateATMFeeandCalculateTransactionFeeexports. WithdrawFromSavingsexport - TheapplyPenaltyargument has been removed. The notice period decides the penalty.
Fixed
- Reliability fixes across loans, savings, investments, certificates of deposit, invoices, cards, and credit scores.
- Overdraft - An overdraft withdrawal now empties the bank balance and records the rest as owed. The amount owed shows on the banking screen and is paid back from the next money into the account.
- Security PIN - Players who turn on the security PIN are asked for it before withdrawals and transfers of
TwoFactorThresholdor more. - ATM PIN lockout - Too many wrong ATM PINs now lock PIN entry (
MaxLoginAttempts,LockoutDuration). - Fraud alerts - Large withdrawals, deposits and transfers, and bursts of transactions, now alert online admins (
EnableFraudDetection). - ESX transfers - Transfers to other players now work on ESX.
- Tier upgrades - An upgrade no longer takes the first month's fee when the player cannot also pay the upgrade fee.
GetPlayerStatementsexport -statement_typeanddateare now filled in.
Documentation
- All docs checked against the code and corrected.
docs/CONFIGURATION.md- Covers the savings notice period, loan repayment, the borrowing limit, investments, certificates of deposit, credit score settings, invoice late fees and collection, and the trimmed fee settings.docs/FEATURES.md- Added the Services screen and the tablet app.docs/EXPORTS.md- Updated the savings, loan, invoice, and credit exports, and addedSettleInvoice.docs/ADMIN.md- Added/forceinvoices collect.docs/INSTALLATION.md- Added the update step forsql/migrations/.
Migration Guide
-
Back up your database.
-
Before you start 2.1.0, run the three files in
sql/migrations/once:credit_hybrid_and_market_drift.sqlsavings_notice_period_and_invoice_fees.sqloverdraft_owed.sql
All three are safe to run more than once. They are written for MariaDB. On MySQL 8, remove
IF NOT EXISTSfrom eachADD COLUMNandADD INDEXline, and skip any column that already exists. -
Copy the new settings from
config/into your own config files. Several unused settings were removed fromconfig/fees.lua. -
Restart the whole server, not only the resource. This version adds new files.
Existing savings balances are dated from the day each account was opened, so money in an account older than the notice period comes out free. In an account opened less than withdrawalNoticeDays ago, the existing balance becomes free once the account reaches that age. Open loans move onto the new repayment schedule automatically the first time the server starts.