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
setPlayerRadio(source: number, channel: number | string): voidexports['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
setPlayerCall(source: number, callId: number | string): voidProp
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
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
addChannelCheck(channel: number, check: (source: number) => boolean): voidexports['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
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
isValidPlayer(source: number): booleanai-voice oyuncuyu tanıyorsa (katılmış ve hazırlanmış) true.
setPlayerProximityMode
Bir oyuncuyu panelin mesafelerinden birine geçirir.
Taraf: Server · Bekler: hayır
setPlayerProximityMode(source: number, index: number): booleanProp
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
setPlayerRange(source: number, metres: number | null): booleanProp
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
getPlayerProximity(source: number): { index: number; distance: number; mode: string } | nullOyuncunun 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
toggleMute(source: number, seconds?: number): booleanProp
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.
addProximityCheck(check: (source: number, index: number, distance: number) => boolean | void): voidBirden fazla frekans
| Export | Dönüş | Ne yapar |
|---|---|---|
addPlayerRadioListen(source, channel) | boolean | Oyuncunun 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) | boolean | Bir frekanstan çıkar. Oyuncu o frekansta değilse false. |
setPlayerRadioActive(source, channel) | boolean | Oyuncunun frekanslarından birini konuştuğu frekans yapar. O frekansta değilse false. |
getPlayerRadioChannels(source) | { active: number, channels: number[] } | null | Aktif frekans (0 = yok) ve oyuncunun duyduğu her frekans. |
Telefon ekleri
| Export | Dönüş | Ne yapar |
|---|---|---|
addCallCheck(check: (source, callId) => boolean) | hiçbir şey | Bir 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) | boolean | Oyuncunun görüşmesinin hoparlörünü açar veya kapatır. |
getPlayerCallSpeaker(source) | boolean | Hoparlörün açık olup olmadığı. |
Diğerleri
| Export | Dönüş | Ne yapar |
|---|---|---|
setPlayerSubmix(source, name | null) | hiçbir şey | Bir 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):
| Export | Ne yapar |
|---|---|
setRadioChannel(channel), SetRadioChannel, addPlayerToRadio | Server’dan aktif frekansı ister (0 tüm frekanslardan çıkar). Meslek frekansları server’da kontrol edilir. |
removePlayerFromRadio() | Tüm frekanslardan çıkar. |
setCallChannel(callId), SetCallChannel, addPlayerToCall | Bir 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, SetTokoProperty | radioEnabled, 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ı:
| Export | Ne 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.
| Bag | Değer |
|---|---|
proximity | { index: number, distance: number, mode: string }: mevcut mesafe. |
radioChannel | number: aktif frekans, yoksa 0. |
callChannel | number: görüşme id’si, yoksa 0. |
callSpeaker | boolean: görüşmenin hoparlörü açık. |
muted | boolean: bir admin tarafından susturulmuş. |
submix | string: 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
| Event | Taraf | Argümanlar | Ne zaman tetiklenir |
|---|---|---|---|
pma-voice:setTalkingMode | Client (yerel) | index: number | Oyuncunun mesafesi değişti. |
pma-voice:radioActive | Client (yerel) | talking: boolean | Oyuncu telsizde konuşmaya başladı veya bıraktı. |
pma-voice:toggleRadioAnim | Client (yerel) | Telsiz animasyonu anahtarı değişti. | |
pma-voice:playerMuted | Server (yerel) | target: number, by: number, muted: boolean, seconds: number | Bir 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 });
});ai-voice
Mesafeli sesli konuşma, birden fazla frekanslı telsiz ve hoparlörlü telefon görüşmeleri; FiveM Legacy ve Enhanced’de. pma-voice’un yerine geçer.
ai-radialmenu
F3’teki radyal menü; yerleşik eylemler ve diğer her script’in eklediği öğelerle. qb-radialmenu ve tgiann-radialmenu-target API’lerini cevaplar.