SSC
SSC (Server-Side Characters) - server mode where player characters are stored server-side.
Check if SSC is enabled via bool PlayerManager.IsSSCEnabled
.
Player's character is stored in ICharacterWrapper? NetPlayer.Character
.
ICharacterWrapper Key Properties
// Character database model
public CharacterModel Model { get; }
// Indicates SSC is enabled and player can receive SSC packets
public bool SupportsChange { get; }
// Locks character modifications from player
// Only plugins/modules/core can modify characters
public bool IsReadonly { get; set; }
Indexers
Two indexers in ICharacterWrapper
:
Get inventory slot:
NetPlayer player;
ICharacterWrapper wrapper = player.Character!;
NetItem item = wrapper[5]; // Gets item in slot 6 (index 0 = first slot)
Get color values:
NetPlayer player;
ICharacterWrapper wrapper = player.Character!;
NetColor hairCol = wrapper[PlayerColorType.HairColor];
NetColor skinCol = wrapper[PlayerColorType.SkinColor];
Modification
Sync types:
public enum SyncType
{
// Sync only with character owner
Local,
// Sync excluding owner
Exclude,
// Broadcast to all
Broadcast
}
Modification examples:
NetPlayer player;
ICharacterWrapper wrapper = player.Character!;
// Set 400 HP/500 Max HP (broadcast)
wrapper.SetLife(SyncType.Broadcast, 400, 500);
// Modify max HP only (no sync)
wrapper.SetLife(null, null, 500);
// Change current HP only
wrapper.SetLife(null, 400, null);
// Set mana (same pattern as SetLife)
wrapper.SetMana(null, 100, null);
// Set Copper Pickaxe in first slot
wrapper.SetSlot(SyncType.Broadcast, 0, new NetItem(ItemID.CopperPickaxe, 1, 0));
// Set bright red hair color
wrapper.SetColor(SyncType.Broadcast, PlayerColorType.HairColor, new NetColor(255, 0, 0));
// Set 50 completed quests
wrapper.SetQuests(SyncType.Broadcast, 50);
Synchronization
Force synchronization without changes:
NetPlayer player;
ICharacterWrapper wrapper = player.Character!;
// Sync inventory slot 0
wrapper.SyncSlot(SyncType.Broadcast, 0);
// Sync health
wrapper.SyncLife(SyncType.Broadcast);
// Sync mana
wrapper.SyncMana(SyncType.Broadcast);
// Sync player info (Packet 4)
wrapper.SyncPlayerInfo(SyncType.Broadcast);
// Sync angler quests
wrapper.SyncAngler(SyncType.Broadcast);