fix(rpc): rework native events + dedupe

This commit is contained in:
2026-09-28 02:05:40 +01:00
parent c085fd2c8f
commit 3e3548a9cc
5 changed files with 344 additions and 596 deletions
+12 -6
View File
@@ -1,7 +1,7 @@
import type * as s from '@entityseven/fivem-rpc-shared-types' import type * as s from '@entityseven/fivem-rpc-shared-types'
import { Emitter } from '../utils/emitter' import { Emitter } from '../utils/emitter'
import { RPCError } from '../utils/errors' import { RPCError, unknownNativeMessage } from '../utils/errors'
import { stringify, stringifyWeb } from '../utils/funcs' import { stringify, stringifyWeb } from '../utils/funcs'
import { import {
NATIVE_CLIENT_EVENTS, NATIVE_CLIENT_EVENTS,
@@ -12,7 +12,7 @@ import {
RPCErrors, RPCErrors,
RPCEvents, RPCEvents,
type RPCNativeClientEvents, type RPCNativeClientEvents,
type RPCNativeClientNetworksEvents, type RPCNativeClientNetworkEvents,
type RPCState, type RPCState,
type RPCStateRaw, type RPCStateRaw,
type RPCStateWeb, type RPCStateWeb,
@@ -233,7 +233,10 @@ export class RPCInstanceClient extends RPCInstanceBase {
CallbackArguments extends Parameters<RPCNativeClientEvents[EventName]>, CallbackArguments extends Parameters<RPCNativeClientEvents[EventName]>,
>(eventName: EventName, cb: (...args: CallbackArguments) => void): this { >(eventName: EventName, cb: (...args: CallbackArguments) => void): this {
if (!NATIVE_CLIENT_EVENTS.includes(eventName)) { if (!NATIVE_CLIENT_EVENTS.includes(eventName)) {
throw new RPCError(RPCErrors.UNKNOWN_NATIVE, RPCErrors.UNKNOWN_NATIVE) throw new RPCError(
RPCErrors.UNKNOWN_NATIVE,
unknownNativeMessage(eventName, 'NATIVE_CLIENT_EVENTS'),
)
} }
this.log(`onNativeEvent ${eventName}`) this.log(`onNativeEvent ${eventName}`)
@@ -244,13 +247,16 @@ export class RPCInstanceClient extends RPCInstanceBase {
} }
public onNativeNetworkEvent< public onNativeNetworkEvent<
EventName extends keyof RPCNativeClientNetworksEvents, EventName extends keyof RPCNativeClientNetworkEvents,
CallbackArguments extends Parameters< CallbackArguments extends Parameters<
RPCNativeClientNetworksEvents[EventName] RPCNativeClientNetworkEvents[EventName]
>, >,
>(eventName: EventName, cb: (...args: CallbackArguments) => void): this { >(eventName: EventName, cb: (...args: CallbackArguments) => void): this {
if (!NATIVE_CLIENT_NETWORK_EVENTS.includes(eventName)) { if (!NATIVE_CLIENT_NETWORK_EVENTS.includes(eventName)) {
throw new RPCError(RPCErrors.UNKNOWN_NATIVE, RPCErrors.UNKNOWN_NATIVE) throw new RPCError(
RPCErrors.UNKNOWN_NATIVE,
unknownNativeMessage(eventName, 'NATIVE_CLIENT_NETWORK_EVENTS'),
)
} }
this.log(`onNativeNetworkEvent ${eventName}`) this.log(`onNativeNetworkEvent ${eventName}`)
+5 -2
View File
@@ -1,7 +1,7 @@
import type * as s from '@entityseven/fivem-rpc-shared-types' import type * as s from '@entityseven/fivem-rpc-shared-types'
import { Emitter } from '../utils/emitter' import { Emitter } from '../utils/emitter'
import { RPCError } from '../utils/errors' import { RPCError, unknownNativeMessage } from '../utils/errors'
import { stringify } from '../utils/funcs' import { stringify } from '../utils/funcs'
import { NATIVE_SERVER_EVENTS } from '../utils/native' import { NATIVE_SERVER_EVENTS } from '../utils/native'
import { import {
@@ -202,7 +202,10 @@ export class RPCInstanceServer extends RPCInstanceBase {
CallbackArguments extends Parameters<RPCNativeServerEvents[EventName]>, CallbackArguments extends Parameters<RPCNativeServerEvents[EventName]>,
>(eventName: EventName, cb: (...args: CallbackArguments) => void): this { >(eventName: EventName, cb: (...args: CallbackArguments) => void): this {
if (!NATIVE_SERVER_EVENTS.includes(eventName)) { if (!NATIVE_SERVER_EVENTS.includes(eventName)) {
throw new RPCError(RPCErrors.UNKNOWN_NATIVE, RPCErrors.UNKNOWN_NATIVE) throw new RPCError(
RPCErrors.UNKNOWN_NATIVE,
unknownNativeMessage(eventName, 'NATIVE_SERVER_EVENTS'),
)
} }
this.log(`onNativeEvent ${eventName}`) this.log(`onNativeEvent ${eventName}`)
+5
View File
@@ -66,6 +66,11 @@ export function notRegisteredMessage(
return `No listener for "${event}" on ${receiver}. Register it with rpc.${listenerName(receiver, sender)}("${event}", ...) in ${receiver} code.` return `No listener for "${event}" on ${receiver}. Register it with rpc.${listenerName(receiver, sender)}("${event}", ...) in ${receiver} code.`
} }
/** **Internal** */
export function unknownNativeMessage(event: string, list: string): string {
return `"${event}" is not in ${list}. Events not listed there can be registered with FiveM's on("${event}", ...) directly.`
}
/** **Internal** */ /** **Internal** */
export function handlerErrorMessage( export function handlerErrorMessage(
event: string, event: string,
+316 -315
View File
@@ -1,321 +1,322 @@
import type { import type { RPCNativeClientEvents, RPCNativeServerEvents } from './types'
RPCNativeClientEvents,
RPCNativeClientNetworkEventsNames,
RPCNativeServerEvents,
} from './types'
/** // Server and client lists are built from an object that must name exactly the
* https://docs.fivem.net/docs/scripting-reference/events/server-events/ // keys of the typed event map, so the list and the types cannot drift apart.
* @readonly
*/
export const NATIVE_SERVER_EVENTS: readonly (keyof RPCNativeServerEvents)[] = [
'entityCreated',
'entityCreating',
'entityRemoved',
'onResourceListRefresh',
'onResourceStart',
'onResourceStarting',
'onResourceStop',
'onServerResourceStart',
'onServerResourceStop',
'playerConnecting',
'playerEnteredScope',
'playerJoining',
'playerLeftScope',
'ptFxEvent',
'removeAllWeaponsEvent',
'startProjectileEvent',
'weaponDamageEvent',
] as const
/** const serverEvents = {
* https://docs.fivem.net/docs/scripting-reference/events/client-events/ entityCreated: true,
* @readonly entityCreating: true,
*/ entityRemoved: true,
export const NATIVE_CLIENT_EVENTS: readonly (keyof RPCNativeClientEvents)[] = [ onResourceListRefresh: true,
'entityDamaged', onResourceStart: true,
'gameEventTriggered', onResourceStarting: true,
'mumbleConnected', onResourceStop: true,
'mumbleDisconnected', onServerResourceStart: true,
'onClientResourceStart', onServerResourceStop: true,
'onClientResourceStop', playerConnecting: true,
'onResourceStart', playerEnteredScope: true,
'onResourceStarting', playerJoining: true,
'onResourceStop', playerLeftScope: true,
'populationPedCreating', ptFxEvent: true,
] as const removeAllWeaponsEvent: true,
startProjectileEvent: true,
weaponDamageEvent: true,
} satisfies Record<keyof RPCNativeServerEvents, true>
/** https://docs.fivem.net/docs/scripting-reference/events/server-events/ */
export const NATIVE_SERVER_EVENTS = Object.keys(
serverEvents,
) as readonly (keyof RPCNativeServerEvents)[]
const clientEvents = {
entityDamaged: true,
gameEventTriggered: true,
mumbleConnected: true,
mumbleDisconnected: true,
onClientResourceStart: true,
onClientResourceStop: true,
onResourceStart: true,
onResourceStarting: true,
onResourceStop: true,
populationPedCreating: true,
} satisfies Record<keyof RPCNativeClientEvents, true>
/** https://docs.fivem.net/docs/scripting-reference/events/client-events/ */
export const NATIVE_CLIENT_EVENTS = Object.keys(
clientEvents,
) as readonly (keyof RPCNativeClientEvents)[]
/** /**
* https://docs.fivem.net/docs/game-references/game-events/ * https://docs.fivem.net/docs/game-references/game-events/
* @readonly *
* Source of truth for `RPCNativeClientNetworkEventsNames`.
*/ */
export const NATIVE_CLIENT_NETWORK_EVENTS: readonly RPCNativeClientNetworkEventsNames[] = export const NATIVE_CLIENT_NETWORK_EVENTS = [
[ 'CEventAcquaintancePed',
'CEventAcquaintancePed', 'CEventAcquaintancePedDead',
'CEventAcquaintancePedDead', 'CEventAcquaintancePedDislike',
'CEventAcquaintancePedDislike', 'CEventAcquaintancePedHate',
'CEventAcquaintancePedHate', 'CEventAcquaintancePedLike',
'CEventAcquaintancePedLike', 'CEventAcquaintancePedWanted',
'CEventAcquaintancePedWanted', 'CEventAgitated',
'CEventAgitated', 'CEventAgitatedAction',
'CEventAgitatedAction', 'CEventCallForCover',
'CEventCallForCover', 'CEventCarUndriveable',
'CEventCarUndriveable', 'CEventClimbLadderOnRoute',
'CEventClimbLadderOnRoute', 'CEventClimbNavMeshOnRoute',
'CEventClimbNavMeshOnRoute', 'CEventCombatTaunt',
'CEventCombatTaunt', 'CEventCommunicateEvent',
'CEventCommunicateEvent', 'CEventCopCarBeingStolen',
'CEventCopCarBeingStolen', 'CEventCrimeCryForHelp',
'CEventCrimeCryForHelp', 'CEventCrimeReported',
'CEventCrimeReported', 'CEventDamage',
'CEventDamage', 'CEventDataDecisionMaker',
'CEventDataDecisionMaker', 'CEventDataFileMounter',
'CEventDataFileMounter', 'CEventDataResponseAggressiveRubberneck',
'CEventDataResponseAggressiveRubberneck', 'CEventDataResponseDeferToScenarioPointFlags',
'CEventDataResponseDeferToScenarioPointFlags', 'CEventDataResponseFriendlyAimedAt',
'CEventDataResponseFriendlyAimedAt', 'CEventDataResponseFriendlyNearMiss',
'CEventDataResponseFriendlyNearMiss', 'CEventDataResponsePlayerDeath',
'CEventDataResponsePlayerDeath', 'CEventDataResponsePoliceTaskWanted',
'CEventDataResponsePoliceTaskWanted', 'CEventDataResponseSwatTaskWanted',
'CEventDataResponseSwatTaskWanted', 'CEventDataResponseTask',
'CEventDataResponseTask', 'CEventDataResponseTaskAgitated',
'CEventDataResponseTaskAgitated', 'CEventDataResponseTaskCombat',
'CEventDataResponseTaskCombat', 'CEventDataResponseTaskCower',
'CEventDataResponseTaskCower', 'CEventDataResponseTaskCrouch',
'CEventDataResponseTaskCrouch', 'CEventDataResponseTaskDuckAndCover',
'CEventDataResponseTaskDuckAndCover', 'CEventDataResponseTaskEscapeBlast',
'CEventDataResponseTaskEscapeBlast', 'CEventDataResponseTaskEvasiveStep',
'CEventDataResponseTaskEvasiveStep', 'CEventDataResponseTaskExhaustedFlee',
'CEventDataResponseTaskExhaustedFlee', 'CEventDataResponseTaskExplosion',
'CEventDataResponseTaskExplosion', 'CEventDataResponseTaskFlee',
'CEventDataResponseTaskFlee', 'CEventDataResponseTaskFlyAway',
'CEventDataResponseTaskFlyAway', 'CEventDataResponseTaskGrowlAndFlee',
'CEventDataResponseTaskGrowlAndFlee', 'CEventDataResponseTaskGunAimedAt',
'CEventDataResponseTaskGunAimedAt', 'CEventDataResponseTaskHandsUp',
'CEventDataResponseTaskHandsUp', 'CEventDataResponseTaskHeadTrack',
'CEventDataResponseTaskHeadTrack', 'CEventDataResponseTaskLeaveCarAndFlee',
'CEventDataResponseTaskLeaveCarAndFlee', 'CEventDataResponseTaskScenarioFlee',
'CEventDataResponseTaskScenarioFlee', 'CEventDataResponseTaskSharkAttack',
'CEventDataResponseTaskSharkAttack', 'CEventDataResponseTaskShockingEventBackAway',
'CEventDataResponseTaskShockingEventBackAway', 'CEventDataResponseTaskShockingEventGoto',
'CEventDataResponseTaskShockingEventGoto', 'CEventDataResponseTaskShockingEventHurryAway',
'CEventDataResponseTaskShockingEventHurryAway', 'CEventDataResponseTaskShockingEventReact',
'CEventDataResponseTaskShockingEventReact', 'CEventDataResponseTaskShockingEventReactToAircraft',
'CEventDataResponseTaskShockingEventReactToAircraft', 'CEventDataResponseTaskShockingEventStopAndStare',
'CEventDataResponseTaskShockingEventStopAndStare', 'CEventDataResponseTaskShockingEventThreatResponse',
'CEventDataResponseTaskShockingEventThreatResponse', 'CEventDataResponseTaskShockingEventWatch',
'CEventDataResponseTaskShockingEventWatch', 'CEventDataResponseTaskShockingNiceCar',
'CEventDataResponseTaskShockingNiceCar', 'CEventDataResponseTaskShockingPoliceInvestigate',
'CEventDataResponseTaskShockingPoliceInvestigate', 'CEventDataResponseTaskThreat',
'CEventDataResponseTaskThreat', 'CEventDataResponseTaskTurnToFace',
'CEventDataResponseTaskTurnToFace', 'CEventDataResponseTaskWalkAway',
'CEventDataResponseTaskWalkAway', 'CEventDataResponseTaskWalkRoundEntity',
'CEventDataResponseTaskWalkRoundEntity', 'CEventDataResponseTaskWalkRoundFire',
'CEventDataResponseTaskWalkRoundFire', 'CEventDeadPedFound',
'CEventDeadPedFound', 'CEventDeath',
'CEventDeath', 'CEventDecisionMakerResponse',
'CEventDecisionMakerResponse', 'CEventDisturbance',
'CEventDisturbance', 'CEventDraggedOutCar',
'CEventDraggedOutCar', 'CEventEditableResponse',
'CEventEditableResponse', 'CEventEncroachingPed',
'CEventEncroachingPed', 'CEventEntityDamaged',
'CEventEntityDamaged', 'CEventEntityDestroyed',
'CEventEntityDestroyed', 'CEventExplosion',
'CEventExplosion', 'CEventExplosionHeard',
'CEventExplosionHeard', 'CEventFireNearby',
'CEventFireNearby', 'CEventFootStepHeard',
'CEventFootStepHeard', 'CEventFriendlyAimedAt',
'CEventFriendlyAimedAt', 'CEventFriendlyFireNearMiss',
'CEventFriendlyFireNearMiss', 'CEventGetOutOfWater',
'CEventGetOutOfWater', 'CEventGivePedTask',
'CEventGivePedTask', 'CEventGroupScriptAI',
'CEventGroupScriptAI', 'CEventGroupScriptNetwork',
'CEventGroupScriptNetwork', 'CEventGunAimedAt',
'CEventGunAimedAt', 'CEventGunShot',
'CEventGunShot', 'CEventGunShotBulletImpact',
'CEventGunShotBulletImpact', 'CEventGunShotWhizzedBy',
'CEventGunShotWhizzedBy', 'CEventHelpAmbientFriend',
'CEventHelpAmbientFriend', 'CEventHurtTransition',
'CEventHurtTransition', 'CEventInAir',
'CEventInAir', 'CEventInfo',
'CEventInfo', 'CEventInfoBase',
'CEventInfoBase', 'CEventInjuredCryForHelp',
'CEventInjuredCryForHelp', 'CEventLeaderEnteredCarAsDriver',
'CEventLeaderEnteredCarAsDriver', 'CEventLeaderExitedCarAsDriver',
'CEventLeaderExitedCarAsDriver', 'CEventLeaderHolsteredWeapon',
'CEventLeaderHolsteredWeapon', 'CEventLeaderLeftCover',
'CEventLeaderLeftCover', 'CEventLeaderUnholsteredWeapon',
'CEventLeaderUnholsteredWeapon', 'CEventMeleeAction',
'CEventMeleeAction', 'CEventMustLeaveBoat',
'CEventMustLeaveBoat', 'CEventNetworkAdminInvited',
'CEventNetworkAdminInvited', 'CEventNetworkAttemptHostMigration',
'CEventNetworkAttemptHostMigration', 'CEventNetworkBail',
'CEventNetworkBail', 'CEventNetworkCashTransactionLog',
'CEventNetworkCashTransactionLog', 'CEventNetworkCheatTriggered',
'CEventNetworkCheatTriggered', 'CEventNetworkClanInviteReceived',
'CEventNetworkClanInviteReceived', 'CEventNetworkClanJoined',
'CEventNetworkClanJoined', 'CEventNetworkClanKicked',
'CEventNetworkClanKicked', 'CEventNetworkClanLeft',
'CEventNetworkClanLeft', 'CEventNetworkClanRankChanged',
'CEventNetworkClanRankChanged', 'CEventNetworkCloudEvent',
'CEventNetworkCloudEvent', 'CEventNetworkCloudFileResponse',
'CEventNetworkCloudFileResponse', 'CEventNetworkEmailReceivedEvent',
'CEventNetworkEmailReceivedEvent', 'CEventNetworkEndMatch',
'CEventNetworkEndMatch', 'CEventNetworkEndSession',
'CEventNetworkEndSession', 'CEventNetworkEntityDamage',
'CEventNetworkEntityDamage', 'CEventNetworkFindSession',
'CEventNetworkFindSession', 'CEventNetworkFollowInviteReceived',
'CEventNetworkFollowInviteReceived', 'CEventNetworkHostMigration',
'CEventNetworkHostMigration', 'CEventNetworkHostSession',
'CEventNetworkHostSession', 'CEventNetworkIncrementStat',
'CEventNetworkIncrementStat', 'CEventNetworkInviteAccepted',
'CEventNetworkInviteAccepted', 'CEventNetworkInviteConfirmed',
'CEventNetworkInviteConfirmed', 'CEventNetworkInviteRejected',
'CEventNetworkInviteRejected', 'CEventNetworkJoinSession',
'CEventNetworkJoinSession', 'CEventNetworkJoinSessionResponse',
'CEventNetworkJoinSessionResponse', 'CEventNetworkOnlinePermissionsUpdated',
'CEventNetworkOnlinePermissionsUpdated', 'CEventNetworkPedLeftBehind',
'CEventNetworkPedLeftBehind', 'CEventNetworkPickupRespawned',
'CEventNetworkPickupRespawned', 'CEventNetworkPlayerArrest',
'CEventNetworkPlayerArrest', 'CEventNetworkPlayerCollectedAmbientPickup',
'CEventNetworkPlayerCollectedAmbientPickup', 'CEventNetworkPlayerCollectedPickup',
'CEventNetworkPlayerCollectedPickup', 'CEventNetworkPlayerCollectedPortablePickup',
'CEventNetworkPlayerCollectedPortablePickup', 'CEventNetworkPlayerDroppedPortablePickup',
'CEventNetworkPlayerDroppedPortablePickup', 'CEventNetworkPlayerEnteredVehicle',
'CEventNetworkPlayerEnteredVehicle', 'CEventNetworkPlayerJoinScript',
'CEventNetworkPlayerJoinScript', 'CEventNetworkPlayerLeftScript',
'CEventNetworkPlayerLeftScript', 'CEventNetworkPlayerScript',
'CEventNetworkPlayerScript', 'CEventNetworkPlayerSession',
'CEventNetworkPlayerSession', 'CEventNetworkPlayerSpawn',
'CEventNetworkPlayerSpawn', 'CEventNetworkPresenceInvite',
'CEventNetworkPresenceInvite', 'CEventNetworkPresenceInviteRemoved',
'CEventNetworkPresenceInviteRemoved', 'CEventNetworkPresenceInviteReply',
'CEventNetworkPresenceInviteReply', 'CEventNetworkPresenceTriggerEvent',
'CEventNetworkPresenceTriggerEvent', 'CEventNetworkPresence_StatUpdate',
'CEventNetworkPresence_StatUpdate', 'CEventNetworkPrimaryClanChanged',
'CEventNetworkPrimaryClanChanged', 'CEventNetworkRequestDelay',
'CEventNetworkRequestDelay', 'CEventNetworkRosChanged',
'CEventNetworkRosChanged', 'CEventNetworkScAdminPlayerUpdated',
'CEventNetworkScAdminPlayerUpdated', 'CEventNetworkScAdminReceivedCash',
'CEventNetworkScAdminReceivedCash', 'CEventNetworkScriptEvent',
'CEventNetworkScriptEvent', 'CEventNetworkSessionEvent',
'CEventNetworkSessionEvent', 'CEventNetworkShopTransaction',
'CEventNetworkShopTransaction', 'CEventNetworkSignInStateChanged',
'CEventNetworkSignInStateChanged', 'CEventNetworkSocialClubAccountLinked',
'CEventNetworkSocialClubAccountLinked', 'CEventNetworkSpectateLocal',
'CEventNetworkSpectateLocal', 'CEventNetworkStartMatch',
'CEventNetworkStartMatch', 'CEventNetworkStartSession',
'CEventNetworkStartSession', 'CEventNetworkStorePlayerLeft',
'CEventNetworkStorePlayerLeft', 'CEventNetworkSummon',
'CEventNetworkSummon', 'CEventNetworkSystemServiceEvent',
'CEventNetworkSystemServiceEvent', 'CEventNetworkTextMessageReceived',
'CEventNetworkTextMessageReceived', 'CEventNetworkTimedExplosion',
'CEventNetworkTimedExplosion', 'CEventNetworkTransitionEvent',
'CEventNetworkTransitionEvent', 'CEventNetworkTransitionGamerInstruction',
'CEventNetworkTransitionGamerInstruction', 'CEventNetworkTransitionMemberJoined',
'CEventNetworkTransitionMemberJoined', 'CEventNetworkTransitionMemberLeft',
'CEventNetworkTransitionMemberLeft', 'CEventNetworkTransitionParameterChanged',
'CEventNetworkTransitionParameterChanged', 'CEventNetworkTransitionStarted',
'CEventNetworkTransitionStarted', 'CEventNetworkTransitionStringChanged',
'CEventNetworkTransitionStringChanged', 'CEventNetworkVehicleUndrivable',
'CEventNetworkVehicleUndrivable', 'CEventNetworkVoiceConnectionRequested',
'CEventNetworkVoiceConnectionRequested', 'CEventNetworkVoiceConnectionResponse',
'CEventNetworkVoiceConnectionResponse', 'CEventNetworkVoiceConnectionTerminated',
'CEventNetworkVoiceConnectionTerminated', 'CEventNetworkVoiceSessionEnded',
'CEventNetworkVoiceSessionEnded', 'CEventNetworkVoiceSessionStarted',
'CEventNetworkVoiceSessionStarted', 'CEventNetworkWithData',
'CEventNetworkWithData', 'CEventNetwork_InboxMsgReceived',
'CEventNetwork_InboxMsgReceived', 'CEventNewTask',
'CEventNewTask', 'CEventObjectCollision',
'CEventObjectCollision', 'CEventOnFire',
'CEventOnFire', 'CEventOpenDoor',
'CEventOpenDoor', 'CEventPedCollisionWithPed',
'CEventPedCollisionWithPed', 'CEventPedCollisionWithPlayer',
'CEventPedCollisionWithPlayer', 'CEventPedEnteredMyVehicle',
'CEventPedEnteredMyVehicle', 'CEventPedJackingMyVehicle',
'CEventPedJackingMyVehicle', 'CEventPedOnCarRoof',
'CEventPedOnCarRoof', 'CEventPedSeenDeadPed',
'CEventPedSeenDeadPed', 'CEventPlayerCollisionWithPed',
'CEventPlayerCollisionWithPed', 'CEventPlayerDeath',
'CEventPlayerDeath', 'CEventPlayerUnableToEnterVehicle',
'CEventPlayerUnableToEnterVehicle', 'CEventPotentialBeWalkedInto',
'CEventPotentialBeWalkedInto', 'CEventPotentialBlast',
'CEventPotentialBlast', 'CEventPotentialGetRunOver',
'CEventPotentialGetRunOver', 'CEventPotentialWalkIntoVehicle',
'CEventPotentialWalkIntoVehicle', 'CEventProvidingCover',
'CEventProvidingCover', 'CEventRanOverPed',
'CEventRanOverPed', 'CEventReactionEnemyPed',
'CEventReactionEnemyPed', 'CEventReactionInvestigateDeadPed',
'CEventReactionInvestigateDeadPed', 'CEventReactionInvestigateThreat',
'CEventReactionInvestigateThreat', 'CEventRequestHelp',
'CEventRequestHelp', 'CEventRequestHelpWithConfrontation',
'CEventRequestHelpWithConfrontation', 'CEventRespondedToThreat',
'CEventRespondedToThreat', 'CEventScanner',
'CEventScanner', 'CEventScenarioForceAction',
'CEventScenarioForceAction', 'CEventScriptCommand',
'CEventScriptCommand', 'CEventScriptWithData',
'CEventScriptWithData', 'CEventShocking',
'CEventShocking', 'CEventShockingBicycleCrash',
'CEventShockingBicycleCrash', 'CEventShockingBicycleOnPavement',
'CEventShockingBicycleOnPavement', 'CEventShockingCarAlarm',
'CEventShockingCarAlarm', 'CEventShockingCarChase',
'CEventShockingCarChase', 'CEventShockingCarCrash',
'CEventShockingCarCrash', 'CEventShockingCarOnCar',
'CEventShockingCarOnCar', 'CEventShockingCarPileUp',
'CEventShockingCarPileUp', 'CEventShockingDangerousAnimal',
'CEventShockingDangerousAnimal', 'CEventShockingDeadBody',
'CEventShockingDeadBody', 'CEventShockingDrivingOnPavement',
'CEventShockingDrivingOnPavement', 'CEventShockingEngineRevved',
'CEventShockingEngineRevved', 'CEventShockingExplosion',
'CEventShockingExplosion', 'CEventShockingFire',
'CEventShockingFire', 'CEventShockingGunFight',
'CEventShockingGunFight', 'CEventShockingGunshotFired',
'CEventShockingGunshotFired', 'CEventShockingHelicopterOverhead',
'CEventShockingHelicopterOverhead', 'CEventShockingHornSounded',
'CEventShockingHornSounded', 'CEventShockingInDangerousVehicle',
'CEventShockingInDangerousVehicle', 'CEventShockingInjuredPed',
'CEventShockingInjuredPed', 'CEventShockingMadDriver',
'CEventShockingMadDriver', 'CEventShockingMadDriverBicycle',
'CEventShockingMadDriverBicycle', 'CEventShockingMadDriverExtreme',
'CEventShockingMadDriverExtreme', 'CEventShockingMugging',
'CEventShockingMugging', 'CEventShockingNonViolentWeaponAimedAt',
'CEventShockingNonViolentWeaponAimedAt', 'CEventShockingParachuterOverhead',
'CEventShockingParachuterOverhead', 'CEventShockingPedKnockedIntoByPlayer',
'CEventShockingPedKnockedIntoByPlayer', 'CEventShockingPedRunOver',
'CEventShockingPedRunOver', 'CEventShockingPedShot',
'CEventShockingPedShot', 'CEventShockingPlaneFlyby',
'CEventShockingPlaneFlyby', 'CEventShockingPotentialBlast',
'CEventShockingPotentialBlast', 'CEventShockingPropertyDamage',
'CEventShockingPropertyDamage', 'CEventShockingRunningPed',
'CEventShockingRunningPed', 'CEventShockingRunningStampede',
'CEventShockingRunningStampede', 'CEventShockingSeenCarStolen',
'CEventShockingSeenCarStolen', 'CEventShockingSeenConfrontation',
'CEventShockingSeenConfrontation', 'CEventShockingSeenGangFight',
'CEventShockingSeenGangFight', 'CEventShockingSeenInsult',
'CEventShockingSeenInsult', 'CEventShockingSeenMeleeAction',
'CEventShockingSeenMeleeAction', 'CEventShockingSeenNiceCar',
'CEventShockingSeenNiceCar', 'CEventShockingSeenPedKilled',
'CEventShockingSeenPedKilled', 'CEventShockingSiren',
'CEventShockingSiren', 'CEventShockingStudioBomb',
'CEventShockingStudioBomb', 'CEventShockingVehicleTowed',
'CEventShockingVehicleTowed', 'CEventShockingVisibleWeapon',
'CEventShockingVisibleWeapon', 'CEventShockingWeaponThreat',
'CEventShockingWeaponThreat', 'CEventShockingWeirdPed',
'CEventShockingWeirdPed', 'CEventShockingWeirdPedApproaching',
'CEventShockingWeirdPedApproaching', 'CEventShoutBlockingLos',
'CEventShoutBlockingLos', 'CEventShoutTargetPosition',
'CEventShoutTargetPosition', 'CEventShovePed',
'CEventShovePed', 'CEventSoundBase',
'CEventSoundBase', 'CEventStatChangedValue',
'CEventStatChangedValue', 'CEventStaticCountReachedMax',
'CEventStaticCountReachedMax', 'CEventStuckInAir',
'CEventStuckInAir', 'CEventSuspiciousActivity',
'CEventSuspiciousActivity', 'CEventSwitch2NM',
'CEventSwitch2NM', 'CEventUnidentifiedPed',
'CEventUnidentifiedPed', 'CEventVehicleCollision',
'CEventVehicleCollision', 'CEventVehicleDamage',
'CEventVehicleDamage', 'CEventVehicleDamageWeapon',
'CEventVehicleDamageWeapon', 'CEventVehicleOnFire',
'CEventVehicleOnFire', 'CEventWrithe',
'CEventWrithe', ] as const
] as const
+6 -273
View File
@@ -1,6 +1,7 @@
import type { RPCInstanceClient } from '../core/client' import type { RPCInstanceClient } from '../core/client'
import type { RPCInstanceServer } from '../core/server' import type { RPCInstanceServer } from '../core/server'
import type { RPCInstanceWebview } from '../core/webview' import type { RPCInstanceWebview } from '../core/webview'
import type { NATIVE_CLIENT_NETWORK_EVENTS } from './native'
/** /**
* Possible environment states for `RPCConfig` * Possible environment states for `RPCConfig`
@@ -101,7 +102,7 @@ export enum RPCEvents {
*/ */
export enum RPCErrors { export enum RPCErrors {
EVENT_NOT_REGISTERED = 'Event not registered', EVENT_NOT_REGISTERED = 'Event not registered',
UNKNOWN_NATIVE = 'Unknown native event (if you are sure this exists - use native handler)', UNKNOWN_NATIVE = 'Unknown native event',
UNKNOWN_ENVIRONMENT = 'Unknown environment (must be either "server", "client" or "webview")', UNKNOWN_ENVIRONMENT = 'Unknown environment (must be either "server", "client" or "webview")',
TIMEOUT = 'Timed out waiting for response', TIMEOUT = 'Timed out waiting for response',
HANDLER_ERROR = 'Listener threw an error', HANDLER_ERROR = 'Listener threw an error',
@@ -252,7 +253,7 @@ export type RPCNativeClientEvents = {
baseDamage: number, baseDamage: number,
): void ): void
gameEventTriggered( gameEventTriggered(
name: RPCNativeClientNetworksEvents | string, name: RPCNativeClientNetworkEventsNames | (string & {}),
data: number[], data: number[],
): void ): void
mumbleConnected(address: string, reconnecting: boolean): void mumbleConnected(address: string, reconnecting: boolean): void
@@ -274,7 +275,7 @@ export type RPCNativeClientEvents = {
): void ): void
} }
export type RPCNativeClientNetworksEvents = { export type RPCNativeClientNetworkEvents = {
[name in RPCNativeClientNetworkEventsNames]: ( [name in RPCNativeClientNetworkEventsNames]: (
entities: number[], entities: number[],
eventEntity: number, eventEntity: number,
@@ -282,274 +283,6 @@ export type RPCNativeClientNetworksEvents = {
) => void ) => void
} }
/** /** https://docs.fivem.net/docs/game-references/game-events/ */
* https://docs.fivem.net/docs/game-references/game-events/
*/
export type RPCNativeClientNetworkEventsNames = export type RPCNativeClientNetworkEventsNames =
| 'CEventAcquaintancePed' (typeof NATIVE_CLIENT_NETWORK_EVENTS)[number]
| 'CEventAcquaintancePedDead'
| 'CEventAcquaintancePedDislike'
| 'CEventAcquaintancePedHate'
| 'CEventAcquaintancePedLike'
| 'CEventAcquaintancePedWanted'
| 'CEventAgitated'
| 'CEventAgitatedAction'
| 'CEventCallForCover'
| 'CEventCarUndriveable'
| 'CEventClimbLadderOnRoute'
| 'CEventClimbNavMeshOnRoute'
| 'CEventCombatTaunt'
| 'CEventCommunicateEvent'
| 'CEventCopCarBeingStolen'
| 'CEventCrimeCryForHelp'
| 'CEventCrimeReported'
| 'CEventDamage'
| 'CEventDataDecisionMaker'
| 'CEventDataFileMounter'
| 'CEventDataResponseAggressiveRubberneck'
| 'CEventDataResponseDeferToScenarioPointFlags'
| 'CEventDataResponseFriendlyAimedAt'
| 'CEventDataResponseFriendlyNearMiss'
| 'CEventDataResponsePlayerDeath'
| 'CEventDataResponsePoliceTaskWanted'
| 'CEventDataResponseSwatTaskWanted'
| 'CEventDataResponseTask'
| 'CEventDataResponseTaskAgitated'
| 'CEventDataResponseTaskCombat'
| 'CEventDataResponseTaskCower'
| 'CEventDataResponseTaskCrouch'
| 'CEventDataResponseTaskDuckAndCover'
| 'CEventDataResponseTaskEscapeBlast'
| 'CEventDataResponseTaskEvasiveStep'
| 'CEventDataResponseTaskExhaustedFlee'
| 'CEventDataResponseTaskExplosion'
| 'CEventDataResponseTaskFlee'
| 'CEventDataResponseTaskFlyAway'
| 'CEventDataResponseTaskGrowlAndFlee'
| 'CEventDataResponseTaskGunAimedAt'
| 'CEventDataResponseTaskHandsUp'
| 'CEventDataResponseTaskHeadTrack'
| 'CEventDataResponseTaskLeaveCarAndFlee'
| 'CEventDataResponseTaskScenarioFlee'
| 'CEventDataResponseTaskSharkAttack'
| 'CEventDataResponseTaskShockingEventBackAway'
| 'CEventDataResponseTaskShockingEventGoto'
| 'CEventDataResponseTaskShockingEventHurryAway'
| 'CEventDataResponseTaskShockingEventReact'
| 'CEventDataResponseTaskShockingEventReactToAircraft'
| 'CEventDataResponseTaskShockingEventStopAndStare'
| 'CEventDataResponseTaskShockingEventThreatResponse'
| 'CEventDataResponseTaskShockingEventWatch'
| 'CEventDataResponseTaskShockingNiceCar'
| 'CEventDataResponseTaskShockingPoliceInvestigate'
| 'CEventDataResponseTaskThreat'
| 'CEventDataResponseTaskTurnToFace'
| 'CEventDataResponseTaskWalkAway'
| 'CEventDataResponseTaskWalkRoundEntity'
| 'CEventDataResponseTaskWalkRoundFire'
| 'CEventDeadPedFound'
| 'CEventDeath'
| 'CEventDecisionMakerResponse'
| 'CEventDisturbance'
| 'CEventDraggedOutCar'
| 'CEventEditableResponse'
| 'CEventEncroachingPed'
| 'CEventEntityDamaged'
| 'CEventEntityDestroyed'
| 'CEventExplosion'
| 'CEventExplosionHeard'
| 'CEventFireNearby'
| 'CEventFootStepHeard'
| 'CEventFriendlyAimedAt'
| 'CEventFriendlyFireNearMiss'
| 'CEventGetOutOfWater'
| 'CEventGivePedTask'
| 'CEventGroupScriptAI'
| 'CEventGroupScriptNetwork'
| 'CEventGunAimedAt'
| 'CEventGunShot'
| 'CEventGunShotBulletImpact'
| 'CEventGunShotWhizzedBy'
| 'CEventHelpAmbientFriend'
| 'CEventHurtTransition'
| 'CEventInAir'
| 'CEventInfo'
| 'CEventInfoBase'
| 'CEventInjuredCryForHelp'
| 'CEventLeaderEnteredCarAsDriver'
| 'CEventLeaderExitedCarAsDriver'
| 'CEventLeaderHolsteredWeapon'
| 'CEventLeaderLeftCover'
| 'CEventLeaderUnholsteredWeapon'
| 'CEventMeleeAction'
| 'CEventMustLeaveBoat'
| 'CEventNetworkAdminInvited'
| 'CEventNetworkAttemptHostMigration'
| 'CEventNetworkBail'
| 'CEventNetworkCashTransactionLog'
| 'CEventNetworkCheatTriggered'
| 'CEventNetworkClanInviteReceived'
| 'CEventNetworkClanJoined'
| 'CEventNetworkClanKicked'
| 'CEventNetworkClanLeft'
| 'CEventNetworkClanRankChanged'
| 'CEventNetworkCloudEvent'
| 'CEventNetworkCloudFileResponse'
| 'CEventNetworkEmailReceivedEvent'
| 'CEventNetworkEndMatch'
| 'CEventNetworkEndSession'
| 'CEventNetworkEntityDamage'
| 'CEventNetworkFindSession'
| 'CEventNetworkFollowInviteReceived'
| 'CEventNetworkHostMigration'
| 'CEventNetworkHostSession'
| 'CEventNetworkIncrementStat'
| 'CEventNetworkInviteAccepted'
| 'CEventNetworkInviteConfirmed'
| 'CEventNetworkInviteRejected'
| 'CEventNetworkJoinSession'
| 'CEventNetworkJoinSessionResponse'
| 'CEventNetworkOnlinePermissionsUpdated'
| 'CEventNetworkPedLeftBehind'
| 'CEventNetworkPickupRespawned'
| 'CEventNetworkPlayerArrest'
| 'CEventNetworkPlayerCollectedAmbientPickup'
| 'CEventNetworkPlayerCollectedPickup'
| 'CEventNetworkPlayerCollectedPortablePickup'
| 'CEventNetworkPlayerDroppedPortablePickup'
| 'CEventNetworkPlayerEnteredVehicle'
| 'CEventNetworkPlayerJoinScript'
| 'CEventNetworkPlayerLeftScript'
| 'CEventNetworkPlayerScript'
| 'CEventNetworkPlayerSession'
| 'CEventNetworkPlayerSpawn'
| 'CEventNetworkPresenceInvite'
| 'CEventNetworkPresenceInviteRemoved'
| 'CEventNetworkPresenceInviteReply'
| 'CEventNetworkPresenceTriggerEvent'
| 'CEventNetworkPresence_StatUpdate'
| 'CEventNetworkPrimaryClanChanged'
| 'CEventNetworkRequestDelay'
| 'CEventNetworkRosChanged'
| 'CEventNetworkScAdminPlayerUpdated'
| 'CEventNetworkScAdminReceivedCash'
| 'CEventNetworkScriptEvent'
| 'CEventNetworkSessionEvent'
| 'CEventNetworkShopTransaction'
| 'CEventNetworkSignInStateChanged'
| 'CEventNetworkSocialClubAccountLinked'
| 'CEventNetworkSpectateLocal'
| 'CEventNetworkStartMatch'
| 'CEventNetworkStartSession'
| 'CEventNetworkStorePlayerLeft'
| 'CEventNetworkSummon'
| 'CEventNetworkSystemServiceEvent'
| 'CEventNetworkTextMessageReceived'
| 'CEventNetworkTimedExplosion'
| 'CEventNetworkTransitionEvent'
| 'CEventNetworkTransitionGamerInstruction'
| 'CEventNetworkTransitionMemberJoined'
| 'CEventNetworkTransitionMemberLeft'
| 'CEventNetworkTransitionParameterChanged'
| 'CEventNetworkTransitionStarted'
| 'CEventNetworkTransitionStringChanged'
| 'CEventNetworkVehicleUndrivable'
| 'CEventNetworkVoiceConnectionRequested'
| 'CEventNetworkVoiceConnectionResponse'
| 'CEventNetworkVoiceConnectionTerminated'
| 'CEventNetworkVoiceSessionEnded'
| 'CEventNetworkVoiceSessionStarted'
| 'CEventNetworkWithData'
| 'CEventNetwork_InboxMsgReceived'
| 'CEventNewTask'
| 'CEventObjectCollision'
| 'CEventOnFire'
| 'CEventOpenDoor'
| 'CEventPedCollisionWithPed'
| 'CEventPedCollisionWithPlayer'
| 'CEventPedEnteredMyVehicle'
| 'CEventPedJackingMyVehicle'
| 'CEventPedOnCarRoof'
| 'CEventPedSeenDeadPed'
| 'CEventPlayerCollisionWithPed'
| 'CEventPlayerDeath'
| 'CEventPlayerUnableToEnterVehicle'
| 'CEventPotentialBeWalkedInto'
| 'CEventPotentialBlast'
| 'CEventPotentialGetRunOver'
| 'CEventPotentialWalkIntoVehicle'
| 'CEventProvidingCover'
| 'CEventRanOverPed'
| 'CEventReactionEnemyPed'
| 'CEventReactionInvestigateDeadPed'
| 'CEventReactionInvestigateThreat'
| 'CEventRequestHelp'
| 'CEventRequestHelpWithConfrontation'
| 'CEventRespondedToThreat'
| 'CEventScanner'
| 'CEventScenarioForceAction'
| 'CEventScriptCommand'
| 'CEventScriptWithData'
| 'CEventShocking'
| 'CEventShockingBicycleCrash'
| 'CEventShockingBicycleOnPavement'
| 'CEventShockingCarAlarm'
| 'CEventShockingCarChase'
| 'CEventShockingCarCrash'
| 'CEventShockingCarOnCar'
| 'CEventShockingCarPileUp'
| 'CEventShockingDangerousAnimal'
| 'CEventShockingDeadBody'
| 'CEventShockingDrivingOnPavement'
| 'CEventShockingEngineRevved'
| 'CEventShockingExplosion'
| 'CEventShockingFire'
| 'CEventShockingGunFight'
| 'CEventShockingGunshotFired'
| 'CEventShockingHelicopterOverhead'
| 'CEventShockingHornSounded'
| 'CEventShockingInDangerousVehicle'
| 'CEventShockingInjuredPed'
| 'CEventShockingMadDriver'
| 'CEventShockingMadDriverBicycle'
| 'CEventShockingMadDriverExtreme'
| 'CEventShockingMugging'
| 'CEventShockingNonViolentWeaponAimedAt'
| 'CEventShockingParachuterOverhead'
| 'CEventShockingPedKnockedIntoByPlayer'
| 'CEventShockingPedRunOver'
| 'CEventShockingPedShot'
| 'CEventShockingPlaneFlyby'
| 'CEventShockingPotentialBlast'
| 'CEventShockingPropertyDamage'
| 'CEventShockingRunningPed'
| 'CEventShockingRunningStampede'
| 'CEventShockingSeenCarStolen'
| 'CEventShockingSeenConfrontation'
| 'CEventShockingSeenGangFight'
| 'CEventShockingSeenInsult'
| 'CEventShockingSeenMeleeAction'
| 'CEventShockingSeenNiceCar'
| 'CEventShockingSeenPedKilled'
| 'CEventShockingSiren'
| 'CEventShockingStudioBomb'
| 'CEventShockingVehicleTowed'
| 'CEventShockingVisibleWeapon'
| 'CEventShockingWeaponThreat'
| 'CEventShockingWeirdPed'
| 'CEventShockingWeirdPedApproaching'
| 'CEventShoutBlockingLos'
| 'CEventShoutTargetPosition'
| 'CEventShovePed'
| 'CEventSoundBase'
| 'CEventStatChangedValue'
| 'CEventStaticCountReachedMax'
| 'CEventStuckInAir'
| 'CEventSuspiciousActivity'
| 'CEventSwitch2NM'
| 'CEventUnidentifiedPed'
| 'CEventVehicleCollision'
| 'CEventVehicleDamage'
| 'CEventVehicleDamageWeapon'
| 'CEventVehicleOnFire'
| 'CEventWrithe'