AI Core
API başvurusuLib: server

Para ve bankacılık

İki hesap arasında money.transfer, ai-core üzerinden banka script’i ve hangi fatura script’i çalışıyorsa onun üzerinden faturalar.

TypeScript
import { money, banking, billing } from "@aicore-fivem/lib/server";

Bir oyuncunun tek hesaplık değişiklikleri (ekleme, çıkarma, bakiye okuma) ai-core’un export’larıdır (AddMoney, RemoveMoney, GetMoney; bkz. ai-core server export’ları). Lib, birden fazla hesap değişikliği gerektiren şeyleri ve bankacılık ile fatura katmanlarını ekler.

money

money.transfer

Parayı tek bir veritabanı transaction’ında, iki tarafta da bir defter satırıyla bir hesaptan diğerine taşır. Paranın yarı yolda ortaya çıkmaması ya da kaybolmaması gereken her şey için kullan: başka bir oyuncuya ödeme, bir mesleğin prim ödemesi, bir ücret.

Taraf: Server · Bekler: hayır

Signature
money.transfer(from: MoneyRef, to: MoneyRef, amount: number, reason?: string, fee?: number): boolean

Lua karşılığı yok: ai-core’un exports['ai-core']:TransferMoney(from, to, amount, reason, fee) export’unu çağır.

Parametreler

Prop

Type

Dönüş değeri

boolean: iki satır da yazıldıysa true. Bir miktar tam sayı değilse, bir hesap yoksa, ikisi aynıysa ya da from amount artı fee’yi ödeyemiyorsa false.

Örnek

import { onClientCallback, money, nearestPlayerTo, notify } from "@aicore-fivem/lib/server";
import { fail, oneArg, readInt } from "@aicore-fivem/lib/shared";

onClientCallback("my-cash:give", { args: oneArg((v) => readInt(v, 1, 100_000)), lock: true }, (source, amount) => {
  const target = nearestPlayerTo(source, 2);
  if (target === null) return fail("NOBODY_NEAR");
  if (!money.transfer({ source, account: "cash" }, { source: target, account: "cash" }, amount, "give:cash"))
    return fail("NOT_ENOUGH_CASH");
  notify(target, `You received $${amount}`, "success");
  return { ok: true };
});

banking

banking, ai-core’un bankacılık katmanı üzerinden banka script’iyle konuşur. Meslek parasının kendisi her zaman money ya da ai-core’un export’ları üzerinden hareket eder.

banking.open

Banka script’inin ekranını bir oyuncu için açar.

Taraf: Server · Bekler: hayır

Signature
banking.open(source: number): boolean
Lua
local ok = aiLib.banking.open(source)

Dönüş değeri: açıldıysa true. Script dışarıdan açılamıyorsa ya da hiçbiri çalışmıyorsa false.

onClientCallback("my-atm:open", (source) => (banking.open(source) ? { ok: true } : fail("BANK_UNAVAILABLE")));

banking.societyBalance

Görüntülemek için bir mesleğin şirket (society) bakiyesi. ai-core’un core hesap modunda ai-core’un meslek hesabıdır; own modunda banka script’inin kendi hesabı.

Taraf: Server · Bekler: hayır

Signature
banking.societyBalance(job: string): number | null
Lua
local balance = aiLib.banking.societyBalance(job) -- number ya da nil

Dönüş değeri: bakiye ya da hiçbiri çalışmıyorsa veya script bakiye tutmuyorsa null (Lua’da nil).

const balance = banking.societyBalance("mechanic") ?? 0;

banking.provider

Taraf: Server · Bekler: hayır

Signature
banking.provider(): string | null
Lua
local name = aiLib.banking.provider()

Dönüş değeri: katmanın kullandığı banka script’i ya da null.

console.log(`banking through ${banking.provider() ?? "nothing"}`);

billing

billing, faturaları hangi fatura script’i çalışıyorsa onun üzerinden gönderir; hiçbiri yoksa ai-core’un kendi faturaları kullanılır (oyuncu ekrandaki bir listeden öder, para o ödediğinde hareket eder). Metinler zaten çevrilmiş haldedir.

billing.send

Bir meslekten (cezalar, hizmet ücretleri) ya da bir oyuncudan fatura gönderir.

Taraf: Server · Bekler: hayır

Signature
billing.send(bill: BillRequest): boolean
Lua
local ok = aiLib.billing.send(bill)

BillRequest

Prop

Type

Dönüş değeri

boolean: gönderildiyse true, geçersizse ya da reddedildiyse false.

Örnek

import { billing, nearestPlayerTo, online } from "@aicore-fivem/lib/server";
import { fail } from "@aicore-fivem/lib/shared";

function fine(officer: number, amount: number) {
  if (!online.onDutyIn(officer, ["police"])) return fail("NOT_ON_DUTY");
  const target = nearestPlayerTo(officer, 3);
  if (target === null) return fail("NOBODY_NEAR");
  return billing.send({ to: target, amount, label: "Speeding", from: officer, job: "police" })
    ? { ok: true }
    : fail("BILL_FAILED");
}

billing.unpaid

Oyuncunun açık faturaları.

Taraf: Server · Bekler: evet (TypeScript’te Promise, Lua’da thread’i yield eder)

Signature
billing.unpaid(source: number): Promise<UnpaidBill[] | null>
Lua
local bills = aiLib.billing.unpaid(source) -- table[] ya da nil, bir thread içinde çağır

Dönüş değeri: UnpaidBill[] (id, label, hâlâ borçlu olunan amount, sender) ya da fatura script’i onları listeleyemiyorsa null.

const bills = await billing.unpaid(source);
const owed = bills?.reduce((sum, bill) => sum + bill.amount, 0) ?? 0;

billing.pay

Oyuncu açık faturalarından birini öder.

Taraf: Server · Bekler: hayır

Signature
billing.pay(source: number, id: string): boolean
Lua
local ok = aiLib.billing.pay(source, id)

Prop

Type

Dönüş değeri: ödendiyse true. Reddedildiyse (yetersiz para, bilinmeyen fatura) ya da fatura script’i ödemeleri yalnızca kendi ekranında alıyorsa false.

if (!billing.pay(source, billId)) return fail("PAY_FAILED");

billing.provider

Taraf: Server · Bekler: hayır

Signature
billing.provider(): string | null
Lua
local name = aiLib.billing.provider()

Dönüş değeri: faturaların gittiği fatura script’i; ai-core’un kendi faturaları için "ai-core".

if (billing.provider() === "ai-core") console.log("using ai-core's own bills");

Bu sayfada