Skip to main content

NeedsService

Defined in: src/modules/core/needs/needs.service.ts:76

Needs service handling hunger, thirst, health, and armor.

Uses two observables for automatic synchronization:

  • needsState: Server-owned, contains hunger/thirst, decays over time
  • vitalsState: Client-owned, contains health/armor from ped

HUD subscribes directly to both observables - no intermediate state needed.

Per-Player Observable Architecture

The needsState class field serves different purposes per runtime:

RuntimePurpose
ServerTemplate only - actual per-player observables are created
in hydratePlayer() and stored in playerObservables
ClientThe observable that receives updates for this player
WebStub that receives values via the web subscription system

On the server, each player gets their own ServerOwnedObservable instance created with their persisted data. This allows:

  • Different initial values per player (loaded from database)
  • Independent subscription management per player
  • Clean disposal when players disconnect

The class field's observable on server is essentially unused (a side effect of TypeScript field initialization) but is harmless since perPlayer: true observables skip global registration.

Constructors

Constructor

new NeedsService(): NeedsService;

Returns

NeedsService

Properties

PropertyTypeDescriptionDefined in
needsStateServerOwnedObservable<{ hunger: number; thirst: number; }>Server-owned observable for needs (hunger, thirst). Server writes via decay loop, client/web read for display.src/modules/core/needs/needs.service.ts:90
vitalsStateClientOwnedObservable<{ armor: number; health: number; }>Client-owned observable for vitals (health, armor). Client writes from ped sampling, server/web read.src/modules/core/needs/needs.service.ts:100

Methods

applyFeedEffect()

applyFeedEffect(ctx: EventContext<[{
  amount: number;
  restoreHunger: boolean;
  restoreThirst: boolean;
}]>): Promise<void>;

Defined in: src/modules/core/needs/needs.service.ts:171

Apply a feed effect to restore hunger/thirst. Called by the inventory system when a consumable with "effect/feed" is used.

Parameters

ParameterType
ctxEventContext<[{ amount: number; restoreHunger: boolean; restoreThirst: boolean; }]>

Returns

Promise<void>


applyHealEffect()

applyHealEffect(ctx: EventContext<[{
  healthAmount: number;
}]>): Promise<void>;

Defined in: src/modules/core/needs/needs.service.ts:201

Apply a heal effect to restore health. Called by the inventory system when a consumable with "effect/heal" is used. Note: This only stores the intent - actual health modification happens client-side via the vitals observable sync.

Parameters

ParameterType
ctxEventContext<[{ healthAmount: number; }]>

Returns

Promise<void>


applyHealOnClient()

applyHealOnClient(ctx: EventContext<[number]>): Promise<void>;

Defined in: src/modules/core/needs/needs.service.ts:219

Apply heal on the client side by modifying ped health. Called from server when a heal effect is triggered.

Parameters

ParameterType
ctxEventContext<[number]>

Returns

Promise<void>


cleanupClientSide()

cleanupClientSide(): void;

Defined in: src/modules/core/needs/needs.service.ts:387

Clean up client-side resources.

Returns

void


cleanupServerSide()

cleanupServerSide(): void;

Defined in: src/modules/core/needs/needs.service.ts:303

Clean up server-side resources.

Returns

void


getPersistedVitals()

getPersistedVitals(ctx: EventContext<[]>): Promise<
  | {
  armor: number;
  health: number;
}
| null>;

Defined in: src/modules/core/needs/needs.service.ts:141

Client requests persisted vitals after hydration. Returns vitals that were stored during the previous session, if any. The client should call this once during initialization to restore vitals.

Parameters

ParameterType
ctxEventContext<[]>

Returns

Promise< | { armor: number; health: number; } | null>


initClientSide()

initClientSide(): void;

Defined in: src/modules/core/needs/needs.service.ts:332

Initialize client-side vitals sampling.

Returns

void


initServerSide()

initServerSide(): void;

Defined in: src/modules/core/needs/needs.service.ts:251

Initialize server-side needs decay and player tracking.

Returns

void


requestSync()

requestSync(ctx: EventContext<[]>): Promise<void>;

Defined in: src/modules/core/needs/needs.service.ts:122

Client requests initial sync after it's ready. This ensures the client's onNet listener is registered before receiving data. Called after character selection completes and player spawns.

Parameters

ParameterType
ctxEventContext<[]>

Returns

Promise<void>