protected override void ServerInitializeCharacter(ServerInitializeData data) { // don't call the base initialize // base.ServerInitializeCharacter(data); var character = data.GameObject; var privateState = data.PrivateState; data.PrivateState.WeaponState.SharedSetWeaponProtoOnly(this.protoItemWeaponTurret); data.PublicState.SharedSetCurrentWeaponProtoOnly(this.protoItemWeaponTurret); this.ServerInitializeCharacterTurret(data); SharedCharacterStatsHelper.RefreshCharacterFinalStatsCache( this.ProtoCharacterDefaultEffects, data.PublicState, privateState, // always rebuild the mob character state // as the game doesn't store current HP for mobs isFirstTime: true); var weaponState = privateState.WeaponState; WeaponSystem.SharedRebuildWeaponCache(character, weaponState); privateState.AttackRange = weaponState.WeaponCache?.RangeMax ?? 0; if (data.IsFirstTimeInit) { privateState.SpawnPosition = character.TilePosition; } }
protected virtual void ServerForceBuildFinalStatsCache( TPrivateState privateState, TPublicState publicState) { SharedCharacterStatsHelper.RefreshCharacterFinalStatsCache( this.ProtoCharacterDefaultEffects, publicState, privateState); }
public static void SharedRefreshFinalCacheIfNecessary(this ICharacter character) { var publicState = character.GetPublicState <ICharacterPublicState>(); var privateState = character.GetPrivateState <BaseCharacterPrivateState>(); SharedCharacterStatsHelper.RefreshCharacterFinalStatsCache( ((IProtoCharacterCore)character.ProtoCharacter).ProtoCharacterDefaultEffects, publicState, privateState); }
protected void ServerRebuildFinalCacheIfNeeded( PlayerCharacterPrivateState privateState, PlayerCharacterPublicState publicState) { if (!privateState.FinalStatsCache.IsDirty && publicState.ContainerEquipment.StateHash == privateState.ContainerEquipmentLastStateHash) { return; } // rebuild stats cache SharedCharacterStatsHelper.RefreshCharacterFinalStatsCache( this.ProtoCharacterDefaultEffects, publicState, privateState); }