ai-voice dla deweloperów
Eksporty serwera i klienta ai-voice (kontrakt pma-voice plus własne), state bagi i zdarzenia.
ai-voice odpowiada na pma-voice 7.x: każdy poniższy eksport, który ma pma-voice, odpowiada też pod exports['pma-voice']. Serwer jest właścicielem całego stanu głosu (zasięg, częstotliwości, rozmowy, głośniki, wyciszenia) i zapisuje state bagi gracza; klienci tylko proszą. Żaden eksport nie czeka. Nie są typowane w @aicore-fivem/shared: z TypeScript używaj callExport("ai-voice", name, ...args) z biblioteki.
Eksporty serwera
setPlayerRadio
Ustawia gracza na częstotliwości radiowej i czyni ją aktywną (tą, na której mówi). Nazwa z pma-voice.
Strona: serwer · Czeka: nie
setPlayerRadio(source: number, channel: number | string): voidexports['pma-voice']:setPlayerRadio(source, 5)Parametry
Prop
Type
Zwraca
Nic. Rzuca wyjątek, gdy channel nie jest liczbą. Nic nie robi, gdy radio jest wyłączone w panelu. Częstotliwość, do której gracz nie może dołączyć (częstotliwość pracy albo addChannelCheck, który się nie zgadza), jest odrzucana z powiadomieniem „You cannot join this frequency”. Dołączenie do nowej częstotliwości opuszcza poprzednią aktywną; częstotliwości, których gracz tylko słucha, zostają.
setPlayerCall
Wprowadza gracza do rozmowy telefonicznej lub go z niej wyprowadza. Nazwa z pma-voice.
Strona: serwer · Czeka: nie
setPlayerCall(source: number, callId: number | string): voidProp
Type
Przykład
import { callExport } from "@aicore-fivem/lib/server";
let nextCall = 1000;
/** Connects two players; returns the call id to end it later. */
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);
}Gra gracza nie może sama dołączyć do rozmowy (klientowe setCallChannel), chyba że skrypt telefonu pozwolił na to przez addCallCheck albo właściciel włączył Let players' games join calls. Wprowadzaj graczy do rozmów z serwera.
getPlayersInRadioChannel
Członkowie częstotliwości. Odpowiada też jako GetPlayersInRadioChannel. Nazwa z pma-voice.
Strona: serwer · Czeka: nie
getPlayersInRadioChannel(channel: number | string): Record<string, boolean>Zwraca
Tabela z kluczami według ID na serwerze (jako ciąg) z true, gdy ten członek mówi, w przeciwnym razie false. {} dla pustej częstotliwości lub złej wartości.
addChannelCheck
Dodaje własną zasadę dla jednej częstotliwości: twoja funkcja decyduje, kto może dołączyć. Usuwana, gdy twój zasób się zatrzymuje. Nazwa z pma-voice.
Strona: serwer · Czeka: nie
addChannelCheck(channel: number, check: (source: number) => boolean): voidexports['pma-voice']:addChannelCheck(911, function(source)
return exports['ai-core']:GetDutyJob(source) == 'ambulance'
end)Najpierw sprawdzane są zasady częstotliwości z panelu; potem twoja funkcja musi odpowiedzieć wartością prawdziwą. Rzuca wyjątek, gdy check nie jest funkcją.
overrideRadioNameGetter
Zastępuje nazwę, którą członkowie radia widzą nawzajem (gdy Send names to radio members jest włączone). Nazwa z pma-voice.
Strona: serwer · Czeka: nie
overrideRadioNameGetter(channel: unknown, getter: (source: number) => string): voidPierwszy argument jest ignorowany (zgodność z pma-voice); getter jest używany dla każdej częstotliwości.
isValidPlayer
isValidPlayer(source: number): booleantrue, gdy ai-voice zna gracza (dołączył i jest skonfigurowany).
setPlayerProximityMode
Przełącza gracza na jeden z zasięgów z panelu.
Strona: serwer · Czeka: nie
setPlayerProximityMode(source: number, index: number): booleanProp
Type
Zwraca
boolean: true, gdy przełączono. false, gdy gracz jest nieznany, index jest poza listą albo addProximityCheck odmówił.
setPlayerRange
Daje graczowi własny zasięg (megafon, mikrofon na scenie) albo przywraca mu wybrany przez niego zasięg.
Strona: serwer · Czeka: nie
setPlayerRange(source: number, metres: number | null): booleanProp
Type
Zwraca
boolean: true, gdy ustawiono. false, gdy gracz jest nieznany, metres jest poza 0,5-100 albo addProximityCheck odmówił.
Przykład
import { callExport, onClientEvent } from "@aicore-fivem/lib/server";
// Przedmiot megafon: 30 m, gdy jest trzymany.
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 } | nullBieżący zasięg gracza: index (pozycja na liście), distance w metrach, mode (nazwa zasięgu). null dla nieznanego gracza.
toggleMute
Wycisza gracza albo odcisza wyciszonego. To samo co /muteply.
Strona: serwer · Czeka: nie
toggleMute(source: number, seconds?: number): booleanProp
Type
Zwraca
boolean: true, gdy wyciszenie zostało przełączone, false dla nieznanego gracza. Gracz dostaje powiadomienie; wywoływane jest zdarzenie serwera pma-voice:playerMuted. Wyciszenia są przechowywane według licencji, więc przetrwają ponowne połączenie.
addProximityCheck
Dodaje zasadę dla zmian zasięgu. Twoja funkcja dostaje (source, index, distance); odpowiedź false odrzuca zmianę (zarówno z klawisza gracza, jak i z eksportów). Usuwana, gdy twój zasób się zatrzymuje.
addProximityCheck(check: (source: number, index: number, distance: number) => boolean | void): voidKilka częstotliwości
| Eksport | Zwraca | Co robi |
|---|---|---|
addPlayerRadioListen(source, channel) | boolean | Pozwala graczowi słyszeć jeszcze jedną częstotliwość bez mówienia na niej. false przy limicie Frequencies at once z panelu, gdy nie jest to dozwolone lub przy wyłączonym radiu. Staje się aktywna, gdy gracz nie miał żadnej. |
removePlayerRadioListen(source, channel) | boolean | Opuszcza częstotliwość. false, gdy gracza na niej nie było. |
setPlayerRadioActive(source, channel) | boolean | Czyni jedną z częstotliwości gracza tą, na której mówi. false, gdy go na niej nie ma. |
getPlayerRadioChannels(source) | { active: number, channels: number[] } | null | Aktywna częstotliwość (0 = brak) i każda częstotliwość, którą gracz słyszy. |
Dodatki telefonu
| Eksport | Zwraca | Co robi |
|---|---|---|
addCallCheck(check: (source, callId) => boolean) | nic | Pozwala skryptowi telefonu zezwalać na dołączanie z gry gracza: odpowiedź true wpuszcza tego gracza do tej rozmowy. Usuwane, gdy twój zasób się zatrzymuje. |
setPlayerCallSpeaker(source, on) | boolean | Włącza lub wyłącza głośnik rozmowy gracza. |
getPlayerCallSpeaker(source) | boolean | Czy jest włączony. |
Inne
| Eksport | Zwraca | Co robi |
|---|---|---|
setPlayerSubmix(source, name | null) | nic | Trwały efekt na głosie gracza: nazwa submixu zarejestrowanego przez klientów (bag submix z pma-voice). null go usuwa. |
getBackend() | "mumble" | "enhanced" | Używany system głosu. |
Eksporty klienta
Eksporty klienta pma-voice (wszystkie także pod exports['pma-voice']):
| Eksport | Co robi |
|---|---|
setRadioChannel(channel), SetRadioChannel, addPlayerToRadio | Prosi serwer o aktywną częstotliwość (0 opuszcza każdą częstotliwość). Częstotliwości prac są sprawdzane na serwerze. |
removePlayerFromRadio() | Opuszcza każdą częstotliwość. |
setCallChannel(callId), SetCallChannel, addPlayerToCall | Prosi o dołączenie do rozmowy. Odrzucane, chyba że pozwala na to addCallCheck skryptu telefonu albo włączone jest Let players' games join calls. |
removePlayerFromCall() | Rozłącza (zawsze dozwolone). |
setRadioVolume(percent) / getRadioVolume(), setCallVolume(percent) / getCallVolume() | Własne głośności gracza, przechowywane na jego komputerze. |
setVoiceProperty(name, value), SetMumbleProperty, SetTokoProperty | radioEnabled, micClicks. |
overrideProximityRange(metres, disableCycle) / clearProximityOverride() | Zasięg od klienta. Odrzucane na Enhanced. |
setAllowProximityCycleState(blocked) | Blokuje lub odblokowuje klawisz zasięgu. |
overrideProximityCheck(fn) / resetProximityCheck(), setVoiceState(mode, channel) | Tylko Legacy (Mumble). |
toggleMutePlayer(serverId) | Wycisza innego gracza tylko dla tego gracza. |
toggleRadioAnim() / getRadioAnimState() | Przełącznik animacji radia gracza. |
addRadioDisableBit(bit) / removeRadioDisableBit(bit) | Blokuje mówienie przez radio, dopóki ustawiony jest jakikolwiek bit (skrypt, który na chwilę wyłącza radio). |
registerCustomSubmix(...), setEffectSubmix(...) | Własne submixy pma-voice, w rejestrze submixów ai-voice. |
Własne eksporty klienta ai-voice:
| Eksport | Co robi |
|---|---|
addRadioChannel(channel) / removeRadioChannel(channel) / setActiveRadioChannel(channel) | Kilka częstotliwości od strony klienta (sprawdzane na serwerze). |
getRadioChannels() | Aktywna częstotliwość i lista. |
setCallSpeaker(on) / getCallSpeaker() | Głośnik rozmowy gracza. |
setRadioAnimDisabled(disabled) | Wyłącza animację radia dla tego gracza. |
createSubmix(name, spec) / getSubmix(name) / editSubmix(name, spec) / listSubmixes() | Efekty głosu. Nazwa jest tworzona raz na sesję gry i używana ponownie; gra ma tylko 40 slotów wspólnych z własnym dźwiękiem. |
cycleProximity() | Przechodzi do następnego zasięgu, jak klawisz. |
getBackend() | "mumble" lub "enhanced". |
isRadioTalking() | Czy klawisz radia jest przytrzymany. |
State bagi
Zapisywane przez serwer na każdym graczu (Player(source).state, po stronie klienta LocalPlayer.state). Czytaj je; nigdy ich nie zapisuj.
| Bag | Wartość |
|---|---|
proximity | { index: number, distance: number, mode: string }: bieżący zasięg. |
radioChannel | number: aktywna częstotliwość, 0 gdy brak. |
callChannel | number: ID rozmowy, 0 gdy brak. |
callSpeaker | boolean: głośnik rozmowy jest włączony. |
muted | boolean: wyciszony przez administratora. |
submix | string: trwały efekt głosu ustawiony przez setPlayerSubmix. |
GlobalState: ai-voice:backend ("mumble" lub "enhanced"), ai-voice:takeover (skrypty, które przynoszą własny efekt radia lub telefonu). ai-voice czyta bag dead z AI Core i bag isDead z pma-voice.
Zdarzenia
| Zdarzenie | Strona | Argumenty | Kiedy jest wywoływane |
|---|---|---|---|
pma-voice:setTalkingMode | klient (lokalne) | index: number | Zmienił się zasięg gracza. |
pma-voice:radioActive | klient (lokalne) | talking: boolean | Gracz zaczął lub przestał mówić przez radio. |
pma-voice:toggleRadioAnim | klient (lokalne) | Zmienił się przełącznik animacji radia. | |
pma-voice:playerMuted | serwer (lokalne) | target: number, by: number, muted: boolean, seconds: number | Gracz został wyciszony lub odciszony (by wynosi 0 dla eksportu). |
Zdarzenia sieciowe pma-voice (pma-voice:syncRadioData, addPlayerToRadio, removePlayerFromRadio, setTalkingOnRadio, clSetPlayerRadio, syncCallData, addPlayerToCall, removePlayerFromCall, clSetPlayerCall) zachowują nazwy i dane dla UI radia, które ich nasłuchują. Zdarzenia radia przenoszą częstotliwość jako dodatkowy ostatni argument; tabele członków mają klucze tekstowe.
// Klient: pokaż ikonę „on air”, gdy gracz mówi przez radio.
on("pma-voice:radioActive", (talking: boolean) => {
SendNUIMessage({ action: "radio", data: talking });
});ai-voice
Głos zbliżeniowy z zasięgami, radio z kilkoma częstotliwościami i rozmowy telefoniczne z głośnikiem, w FiveM Legacy i Enhanced. Zastępuje pma-voice.
ai-radialmenu
Menu radialne na F3 z wbudowanymi akcjami i pozycjami dodawanymi przez każdy inny skrypt. Odpowiada na API qb-radialmenu i tgiann-radialmenu-target.