Skip to main content

Appearance

Description

The client-side AppearanceService is the authority for managing ped aesthetics. It handles the complex process of applying head blends, face features, overlays (makeup, beard), clothing components, props, and tattoos.

Key Features

Sequential Application

Applying appearance in GTA V requires a specific order to avoid glitches. The service handles this automatically:

  1. HeadBlend — Essential foundation for face features and overlays.
  2. Face Features — Bone-level facial adjustments.
  3. Components — Clothing and hair.
  4. Props — Hats, glasses, ears.
  5. Head Overlays — Skin details and makeup.
  6. Tattoos — Applied via decorations.

Validation

Includes a validateAppearance method to ensure data integrity before applying it to the ped.

API Methods

applyAppearance()

Applies a full PlayerAppearance object to a ped handle.

async applyAppearance(ped: number, appearance: PlayerAppearance): Promise<void>

getAppearance()

Reads the current clothing and props from a ped.

Note: HeadBlend and Overlay data cannot be read back from the engine and must be tracked via state.

getNumComponentDrawables() / getNumPropDrawables()

Retrieves the total number of available variations for a specific slot (e.g., how many jackets exist for this model).


Example

@Controller()
export class BarberController {
constructor(private readonly appearance: AppearanceService) {}

async updateHair(ped: number, drawable: number, texture: number) {
const current = await this.appearance.getAppearance(ped)
current.components[2] = { drawable, texture }
await this.appearance.applyAppearance(ped, current)
}
}

Notes

  • HeadBlend must be set before FaceFeatures or HeadOverlays will work.
  • Tattoos are managed via addDecoration and require the collection and overlay hashes.
  • Use setDefaultAppearance() to reset a ped to its base state.
  • For server-side appearance persistence, see the Server Appearance API.