AI Core
Temelai-voice

Geliştiriciler için ai-voice

ai-voice’un server ve client export’ları (pma-voice sözleşmesi ve kendi export’ları), state bag’leri ve event’leri.

ai-voice pma-voice 7.x’i cevaplar: aşağıdaki export’lardan pma-voice’ta da olan her biri exports['pma-voice'] altında da cevap verir. Tüm ses durumu (mesafe, frekanslar, görüşmeler, hoparlörler, susturmalar) server’a aittir ve oyuncu state bag’lerini server yazar; client’lar sadece ister. Export’ların hiçbiri beklemez. @aicore-fivem/shared içinde tiplenmemişlerdir: TypeScript’ten lib callExport("ai-voice", name, ...args) kullan.

Server export’ları

setPlayerRadio

Bir oyuncuyu bir telsiz frekansına koyar ve onu aktif frekansı (konuştuğu frekans) yapar. pma-voice adı.

Taraf: Server · Bekler: hayır

Signature
setPlayerRadio(source: number, channel: number | string): void
Lua
exports['pma-voice']:setPlayerRadio(source, 5)

Parametreler

Prop

Type

Dönüş değeri

Hiçbir şey. channel sayı değilse hata fırlatır. Panelde telsiz kapalıysa hiçbir şey yapmaz. Oyuncunun katılamayacağı bir frekans (bir meslek frekansı ya da hayır diyen bir addChannelCheck) "You cannot join this frequency" bildirimiyle reddedilir. Yeni bir frekansa katılmak önceki aktif frekanstan çıkarır; oyuncunun sadece dinlediği frekanslar kalır.

setPlayerCall

Bir oyuncuyu bir telefon görüşmesine sokar veya çıkarır. pma-voice adı.

Taraf: Server · Bekler: hayır

Signature
setPlayerCall(source: number, callId: number | string): void

Prop

Type

Örnek

import { callExport } from "@aicore-fivem/lib/server";

let nextCall = 1000;

/** İki oyuncuyu bağlar; daha sonra bitirmek için görüşme id’sini döner. */
export function connect(caller: number, target: number): number {
  const id = nextCall++;
  callExport("ai-voice", "setPlayerCall", caller, id);
  callExport("ai-voice", "setPlayerCall", target, id);
  return id;
}

export function hangUp(...players: number[]): void {
  for (const p of players) callExport("ai-voice", "setPlayerCall", p, 0);
}

Bir telefon script’i addCallCheck ile izin vermedikçe ya da sunucu sahibi Let players' games join calls ayarını açmadıkça, oyuncunun kendi oyunu bir görüşmeye kendi başına katılamaz (client setCallChannel). Oyuncuları görüşmelere server’dan sok.

getPlayersInRadioChannel

Bir frekansın üyeleri. GetPlayersInRadioChannel olarak da cevap verir. pma-voice adı.

Taraf: Server · Bekler: hayır

Signature
getPlayersInRadioChannel(channel: number | string): Record<string, boolean>

Dönüş değeri

Anahtarı server id (string olarak) olan bir tablo; o üye konuşurken değer true, değilse false. Boş bir frekans veya hatalı bir değer için {}.

addChannelCheck

Bir frekans için kendi kuralını ekler: kimin katılabileceğine senin fonksiyonun karar verir. Resource’un durduğunda kaldırılır. pma-voice adı.

Taraf: Server · Bekler: hayır

Signature
addChannelCheck(channel: number, check: (source: number) => boolean): void
Lua
exports['pma-voice']:addChannelCheck(911, function(source)
    return exports['ai-core']:GetDutyJob(source) == 'ambulance'
end)

Önce panelin frekans kuralları kontrol edilir; sonra fonksiyonunun truthy bir değer dönmesi gerekir. check fonksiyon değilse hata fırlatır.

overrideRadioNameGetter

Telsiz üyelerinin birbiri için gördüğü adı değiştirir (Send names to radio members açıkken). pma-voice adı.

Taraf: Server · Bekler: hayır

Signature
overrideRadioNameGetter(channel: unknown, getter: (source: number) => string): void

İlk argüman yok sayılır (pma-voice uyumluluğu); getter her frekans için kullanılır.

isValidPlayer

Signature
isValidPlayer(source: number): boolean

ai-voice oyuncuyu tanıyorsa (katılmış ve hazırlanmış) true.

setPlayerProximityMode

Bir oyuncuyu panelin mesafelerinden birine geçirir.

Taraf: Server · Bekler: hayır

Signature
setPlayerProximityMode(source: number, index: number): boolean

Prop

Type

Dönüş değeri

boolean: geçirildiyse true. Oyuncu bilinmiyorsa, index listenin dışındaysa veya bir addProximityCheck reddettiyse false.

setPlayerRange

Bir oyuncuya kendi belirlediğin bir mesafe verir (megafon, sahnedeki mikrofon) ya da oyuncunun seçtiği mesafeyi geri verir.

Taraf: Server · Bekler: hayır

Signature
setPlayerRange(source: number, metres: number | null): boolean

Prop

Type

Dönüş değeri

boolean: ayarlandıysa true. Oyuncu bilinmiyorsa, metres 0.5-100 dışındaysa veya bir addProximityCheck reddettiyse false.

Örnek

import { callExport, onClientEvent } from "@aicore-fivem/lib/server";

// Bir megafon eşyası: tutulurken 30 m.
onClientEvent("myscript:megaphone", { args: ([on]) => (typeof on === "boolean" ? [on] : null) }, (source, on) => {
  callExport("ai-voice", "setPlayerRange", source, on ? 30 : null);
});

getPlayerProximity

Signature
getPlayerProximity(source: number): { index: number; distance: number; mode: string } | null

Oyuncunun mevcut mesafesi: index (listedeki sıra), metre cinsinden distance, mode (mesafenin adı). Bilinmeyen bir oyuncu için null.

toggleMute

Bir oyuncuyu susturur ya da susturulmuş birinin susturmasını kaldırır. /muteply ile aynı.

Taraf: Server · Bekler: hayır

Signature
toggleMute(source: number, seconds?: number): boolean

Prop

Type

Dönüş değeri

boolean: susturma değiştirildiyse true, bilinmeyen bir oyuncu için false. Oyuncu bir bildirim alır; pma-voice:playerMuted server event’i tetiklenir. Susturmalar license’a göre tutulur, bu yüzden yeniden bağlanınca da devam eder.

addProximityCheck

Mesafe değişiklikleri için bir kural ekler. Fonksiyonun (source, index, distance) alır; false dönmek değişikliği reddeder (hem oyuncunun tuşu hem export’lar için). Resource’un durduğunda kaldırılır.

Signature
addProximityCheck(check: (source: number, index: number, distance: number) => boolean | void): void

Birden fazla frekans

ExportDönüşNe yapar
addPlayerRadioListen(source, channel)booleanOyuncunun bir frekansı daha, onda konuşmadan duymasını sağlar. Panelin Frequencies at once sınırında, izin yoksa veya telsiz kapalıysa false. Oyuncunun aktif frekansı yoksa aktif olur.
removePlayerRadioListen(source, channel)booleanBir frekanstan çıkar. Oyuncu o frekansta değilse false.
setPlayerRadioActive(source, channel)booleanOyuncunun frekanslarından birini konuştuğu frekans yapar. O frekansta değilse false.
getPlayerRadioChannels(source){ active: number, channels: number[] } | nullAktif frekans (0 = yok) ve oyuncunun duyduğu her frekans.

Telefon ekleri

ExportDönüşNe yapar
addCallCheck(check: (source, callId) => boolean)hiçbir şeyBir telefon script’inin oyuncunun oyunundan gelen katılımlara izin vermesini sağlar: true dönmek o oyuncuyu o görüşmeye alır. Resource’un durduğunda kaldırılır.
setPlayerCallSpeaker(source, on)booleanOyuncunun görüşmesinin hoparlörünü açar veya kapatır.
getPlayerCallSpeaker(source)booleanHoparlörün açık olup olmadığı.

Diğerleri

ExportDönüşNe yapar
setPlayerSubmix(source, name | null)hiçbir şeyBir oyuncunun sesine kalıcı bir efekt: client’ların kaydettiği bir submix’in adı (pma-voice’un submix bag’i). null kaldırır.
getBackend()"mumble" | "enhanced"Kullanılan ses sistemi.

Client export’ları

pma-voice’un client export’ları (hepsi exports['pma-voice'] altında da):

ExportNe yapar
setRadioChannel(channel), SetRadioChannel, addPlayerToRadioServer’dan aktif frekansı ister (0 tüm frekanslardan çıkar). Meslek frekansları server’da kontrol edilir.
removePlayerFromRadio()Tüm frekanslardan çıkar.
setCallChannel(callId), SetCallChannel, addPlayerToCallBir görüşmeye katılmak ister. Bir telefon script’inin addCallCheck’i izin vermedikçe ya da Let players' games join calls açık olmadıkça reddedilir.
removePlayerFromCall()Görüşmeyi kapatır (her zaman izinli).
setRadioVolume(percent) / getRadioVolume(), setCallVolume(percent) / getCallVolume()Oyuncunun kendi ses seviyeleri, kendi bilgisayarında tutulur.
setVoiceProperty(name, value), SetMumbleProperty, SetTokoPropertyradioEnabled, micClicks.
overrideProximityRange(metres, disableCycle) / clearProximityOverride()Client’tan bir mesafe. Enhanced’de reddedilir.
setAllowProximityCycleState(blocked)Mesafe tuşunu engeller veya izin verir.
overrideProximityCheck(fn) / resetProximityCheck(), setVoiceState(mode, channel)Sadece Legacy (Mumble).
toggleMutePlayer(serverId)Başka bir oyuncuyu sadece bu oyuncu için susturur.
toggleRadioAnim() / getRadioAnimState()Oyuncunun telsiz animasyonu anahtarı.
addRadioDisableBit(bit) / removeRadioDisableBit(bit)Herhangi bir bit ayarlıyken telsizde konuşmayı engeller (telsizi bir süreliğine devre dışı bırakan bir script).
registerCustomSubmix(...), setEffectSubmix(...)pma-voice’un özel submix’leri, ai-voice’un submix kaydına.

ai-voice’un kendi client export’ları:

ExportNe yapar
addRadioChannel(channel) / removeRadioChannel(channel) / setActiveRadioChannel(channel)Client tarafından birden fazla frekans (server’da kontrol edilir).
getRadioChannels()Aktif frekans ve liste.
setCallSpeaker(on) / getCallSpeaker()Oyuncunun görüşmesinin hoparlörü.
setRadioAnimDisabled(disabled)Bu oyuncu için telsiz animasyonunu kapatır.
createSubmix(name, spec) / getSubmix(name) / editSubmix(name, spec) / listSubmixes()Ses efektleri. Bir ad her oyun oturumunda bir kez oluşturulur ve yeniden kullanılır; oyunun kendi sesiyle paylaşılan sadece 40 yuvası vardır.
cycleProximity()Tuş gibi bir sonraki mesafeye geçer.
getBackend()"mumble" veya "enhanced".
isRadioTalking()Telsiz tuşunun basılı olup olmadığı.

State bag’ler

Server tarafından her oyuncuya yazılır (Player(source).state, client’ta LocalPlayer.state). Onları oku; asla yazma.

BagDeğer
proximity{ index: number, distance: number, mode: string }: mevcut mesafe.
radioChannelnumber: aktif frekans, yoksa 0.
callChannelnumber: görüşme id’si, yoksa 0.
callSpeakerboolean: görüşmenin hoparlörü açık.
mutedboolean: bir admin tarafından susturulmuş.
submixstring: setPlayerSubmix ile ayarlanan kalıcı bir ses efekti.

GlobalState: ai-voice:backend ("mumble" veya "enhanced"), ai-voice:takeover (kendi telsiz veya telefon efektini getiren script’ler). ai-voice AI Core’un dead bag’ini ve pma-voice’un isDead bag’ini okur.

Event’ler

EventTarafArgümanlarNe zaman tetiklenir
pma-voice:setTalkingModeClient (yerel)index: numberOyuncunun mesafesi değişti.
pma-voice:radioActiveClient (yerel)talking: booleanOyuncu telsizde konuşmaya başladı veya bıraktı.
pma-voice:toggleRadioAnimClient (yerel)Telsiz animasyonu anahtarı değişti.
pma-voice:playerMutedServer (yerel)target: number, by: number, muted: boolean, seconds: numberBir oyuncu susturuldu veya susturması kaldırıldı (export için by 0’dır).

pma-voice’un net event’leri (pma-voice:syncRadioData, addPlayerToRadio, removePlayerFromRadio, setTalkingOnRadio, clSetPlayerRadio, syncCallData, addPlayerToCall, removePlayerFromCall, clSetPlayerCall), onları dinleyen telsiz arayüzleri için adlarını ve içeriklerini korur. Telsiz event’leri frekansı ek bir son argüman olarak taşır; üye tablolarının anahtarları string’dir.

// Client: oyuncu telsizde konuşurken bir "yayında" simgesi göster.
on("pma-voice:radioActive", (talking: boolean) => {
  SendNUIMessage({ action: "radio", data: talking });
});

Bu sayfada