Skip to content
Version 2.11.0
↓ Get the launcher

IWardrobe interface

Save and re-apply the local player’s worn cosmetic outfit (fashion). An outfit is a map of FashionRegion code → cosmetic fashionId (0 = empty slot); it is applied through the game’s own WorldProxy.FashionWear dispatcher, which runs every server-side validation (combat lock, ownership) — plugins never bypass it. Dyes travel with the pieces server-side (one dye per fashionId). The weapon skin is a SEPARATE per-class game system (the Wardrobe’s Weapon Skin tab, class dropdown) and is exposed alongside the outfit through GetWornWeaponSkin / ApplyWeaponSkinAsync.

public interface IWardrobe
name description
IsAvailable { get; } True once the game-side fashion bridge is resolved and the player is in world.
ApplyAsync(…) Apply outfit (region→fashionId; 0 clears a region) via the game’s FashionWear RPC. The game toasts its own success/error; the result reflects the RPC outcome. Only one apply may be in flight at a time.
ApplyWeaponSkinAsync(…) Set class professionId’s weapon skin to skinId via the game’s own UseProfessionSkin RPC — the same action the Wardrobe’s Weapon Skin tab performs, so the server validates ownership. skinId``0 restores the class’s default weapon look, as in the game. Shares the one-apply-at-a-time rule with ApplyAsync: await the outfit switch before sending the weapon skin.
GetWornOutfit() The local player’s currently worn outfit as a region→fashionId map, or null if it cannot be read yet (bridge unresolved / not in world). Regions the player has nothing worn in carry 0. This is the value to store as a saved slot.
GetWornWeaponSkin() The weapon skin the local player’s CURRENT class is wearing, or null if it cannot be read yet (bridge unresolved / not in world). Weapon skins are per class in the game, so the value carries the class it belongs to; SkinId``0 means the class wears its weapon’s own default look (“no skin”). Refreshed together with GetWornOutfit.