public static void OnPlayerConnectedLate(Players.Player p) { if (p == null || p.Colonies == null || p.Colonies.Length == 0) { return; } if (SettlersConfiguration.GetorDefault("SettlersEnabled", true) && SettlersConfiguration.GetorDefault("MaxSettlersToggle", 4) > 0 && p.ActiveColony != null) { var cs = ColonyState.GetColonyState(p.ActiveColony); if (cs.SettlersEnabled != SettlersState.Disabled && SettlersConfiguration.GetorDefault("ColonistsRecruitment", true)) { PandaChat.Send(p, _localizationHelper, "BuyingColonists", ChatColor.orange, MAX_BUYABLE.ToString(), cs.Difficulty.GetorDefault("UnhappyColonistsBought", 1).ToString()); } if (cs.SettlersToggledTimes < SettlersConfiguration.GetorDefault("MaxSettlersToggle", 4)) { PandaChat.Send(p, _localizationHelper, "SettlersEnabled", ChatColor.orange, cs.SettlersEnabled.ToString()); } } foreach (Colony c in p.Colonies) { UpdateFoodUse(ColonyState.GetColonyState(c)); c.SendCommonData(); } }
public static void OnPlayerConnectedLate(Players.Player p) { if (p == null || p.Colonies == null || p.Colonies.Length == 0) { return; } if (SettlersConfiguration.GetorDefault("SettlersEnabled", true) && SettlersConfiguration.GetorDefault("MaxSettlersToggle", 4) > 0 && p.ActiveColony != null) { var cs = ColonyState.GetColonyState(p.ActiveColony); if (cs.SettlersToggledTimes < SettlersConfiguration.GetorDefault("MaxSettlersToggle", 4)) { PandaChat.Send(p, _localizationHelper, "SettlersEnabled", ChatColor.orange, cs.SettlersEnabled.ToString()); } } foreach (Colony c in p.Colonies) { UpdateFoodUse(ColonyState.GetColonyState(c)); c.SendCommonData(); } }
public static void AfterWorldLoad() { foreach (var p in ServerManager.ColonyTracker.ColoniesByID.Values) { UpdateFoodUse(ColonyState.GetColonyState(p)); } }
public static void UpdateFoodUse(ColonyState state) { //if (ServerManager.TerrainGenerator != null) //{ // var food = _baseFoodPerHour; // if (state.Difficulty != GameDifficulty.Normal && state.ColonyRef.FollowerCount > 10) // { // var multiplier = .4 - state.ColonyRef.TemporaryData.GetAsOrDefault(GameLoader.NAMESPACE + ".ReducedWaste", 0f); // multiplier = (multiplier + state.Difficulty.FoodMultiplier); // food -= (float)((_baseFoodPerHour * multiplier)); // } // if (state.ColonyRef.InSiegeMode) // food -= food * .4f; // state.FoodPerHour = food; // foreach (var npc in state.ColonyRef.Followers) // npc.FoodHoursCarried = food; // state.ColonyRef.SendCommonData(); //} }
public void SetNPC(NPCBase npc) { NPC = npc; if (npc != null) { NeedsNPC = false; IsValid = true; Owner = npc.Colony; _tmpVals = npc.CustomData; _colony = npc.Colony; _inv = SettlerInventory.GetSettlerInventory(npc); _colonyState = ColonyState.GetColonyState(_colony); _stock = npc.Colony.Stockpile; } else { NeedsNPC = true; IsValid = false; Owner = null; _inv = null; _tmpVals = null; _colony = null; _colonyState = null; _stock = null; } }
public static void PressButton(ButtonPressCallbackData data) { if (!data.ButtonIdentifier.Contains(GameLoader.NAMESPACE + ".NewSettlers") && !data.ButtonIdentifier.Contains("Decline")) { return; } var replaceOne = data.ButtonIdentifier.Replace(GameLoader.NAMESPACE + ".NewSettlers.", ""); var val = replaceOne.Substring(0, replaceOne.IndexOf('.')); if (int.TryParse(val, out int colonyId) && ServerManager.ColonyTracker.ColoniesByID.TryGetValue(colonyId, out var colony)) { foreach (var p in colony.Owners) { if (p.IsConnected()) { NetworkMenuManager.CloseServerPopup(p); } } if (data.ButtonIdentifier.Contains(".Decline")) { return; } var recruitmentInfoStr = replaceOne.Substring(val.Length).Replace(".Accept.", ""); var unparsedString = recruitmentInfoStr.Split('.'); var addCount = int.Parse(unparsedString[0]); var numbSkilled = int.Parse(unparsedString[1]); var state = ColonyState.GetColonyState(colony); AddNewSettlers(addCount, numbSkilled, state); } }
public static bool ChangeDifficulty(Players.Player player, ColonyState state, string difficulty) { if (APIConfiguration.DifficutlyCanBeChanged) { if (!GameDifficulty.GameDifficulties.ContainsKey(difficulty)) { UnknownCommand(player, difficulty); return(true); } var newDiff = GameDifficulty.GameDifficulties[difficulty]; if (newDiff.Rank >= APIConfiguration.MinDifficulty.Rank) { state.Difficulty = newDiff; PandaChat.Send(player, _localizationHelper, "CurrentDifficulty", ChatColor.green, state.Difficulty.Name); NetworkUI.NetworkMenuManager.SendColonySettingsUI(player); return(true); } NetworkUI.NetworkMenuManager.SendColonySettingsUI(player); PandaChat.Send(player, _localizationHelper, "DisabledBelow", ChatColor.green, APIConfiguration.MinDifficulty.Name); } return(true); }
public static void ChangedSetting(ValueTuple <Players.Player, JSONNode, string> data) { if (data.Item1.ActiveColony != null) { switch (data.Item3) { case "server_popup": var cs = ColonyState.GetColonyState(data.Item1.ActiveColony); var maxToggleTimes = SettlersConfiguration.GetorDefault("MaxSettlersToggle", 4); if (cs != null) { if (!SettlersConfiguration.GetorDefault("SettlersEnabled", true)) { PandaChat.Send(data.Item1, _localizationHelper, "AdminDisabledSettlers", ChatColor.red); } else if (!HasToggeledMaxTimes(maxToggleTimes, cs, data.Item1)) { var def = (int)cs.SettlersEnabled; var enabled = data.Item2.GetAsOrDefault(_Setters, def); if (def != enabled) { TurnSettlersOn(data.Item1, cs, maxToggleTimes, (SettlersState)enabled); PandaChat.Send(data.Item1, _localizationHelper, "SettlersState", ChatColor.green, cs.SettlersEnabled.ToString()); } } } break; } } }
public static void PressButton(ButtonPressCallbackData data) { if (!data.ButtonIdentifier.Contains(GameLoader.NAMESPACE + ".NewSettlers.Accept.") && !data.ButtonIdentifier.Contains(GameLoader.NAMESPACE + ".NewSettlers.Decline")) { return; } foreach (var p in data.Player.ActiveColony.Owners) { if (p.IsConnected()) { NetworkMenuManager.CloseServerPopup(p); } } if (data.ButtonIdentifier.Contains(GameLoader.NAMESPACE + ".NewSettlers.Accept.")) { var recruitmentInfoStr = data.ButtonIdentifier.Replace(GameLoader.NAMESPACE + ".NewSettlers.Accept.", ""); var unparsedString = recruitmentInfoStr.Split('.'); var addCount = int.Parse(unparsedString[0]); var numbSkilled = int.Parse(unparsedString[1]); var state = ColonyState.GetColonyState(data.Player.ActiveColony); AddNewSettlers(addCount, numbSkilled, state); } }
public static bool ChangeDifficulty(Players.Player player, ColonyState state, string difficulty) { if (SettlersConfiguration.DifficutlyCanBeChanged) { if (!GameDifficulty.GameDifficulties.ContainsKey(difficulty)) { UnknownCommand(player, difficulty); return(true); } var newDiff = GameDifficulty.GameDifficulties[difficulty]; if (newDiff.Rank >= SettlersConfiguration.MinDifficulty.Rank) { state.Difficulty = newDiff; SettlerManager.UpdateFoodUse(state); state.Difficulty.Print(player); PandaChat.Send(player, "Settlers! Mod difficulty set to {0}.", ChatColor.green, state.Difficulty.Name); NetworkUI.NetworkMenuManager.SendColonySettingsUI(player); return(true); } NetworkUI.NetworkMenuManager.SendColonySettingsUI(player); PandaChat.Send(player, "The server administrator had disabled setting your difficulty below {0}.", ChatColor.green, SettlersConfiguration.MinDifficulty.Name); } return(true); }
private static void AddNewSettlers(double addCount, int numbSkilled, ColonyState state) { var reason = string.Format(SettlerReasoning.GetSettleReason(), addCount); if (numbSkilled > 0) { if (numbSkilled == 1) { reason += string.Format(" {0} of them is skilled!", numbSkilled); } else { reason += string.Format(" {0} of them are skilled!", numbSkilled); } } PandaChat.Send(state.ColonyRef, reason, ChatColor.magenta); for (var i = 0; i < addCount; i++) { var newGuy = new NPCBase(state.ColonyRef, state.ColonyRef.GetRandomBanner().Position); NPCTracker.Add(newGuy); state.ColonyRef.RegisterNPC(newGuy); SettlerInventory.GetSettlerInventory(newGuy); newGuy.CustomData.SetAs(ISSETTLER, true); if (i <= numbSkilled) { newGuy.CustomData.SetAs(GameLoader.ALL_SKILLS, Random.Next(1, 10) * 0.002f); } ModLoader.Callbacks.OnNPCRecruited.Invoke(newGuy); } }
private static bool EvaluateBeds(ColonyState state) { var update = false; try { if (!TimeCycle.IsDay && Time.SecondsSinceStartDouble > _nextbedTime) { if (state.ColonyRef.OwnerIsOnline()) { // TODO Fix bed count var remainingBeds = ServerManager.BlockEntityTracker.BedTracker.CalculateBedCount(state.ColonyRef) - state.ColonyRef.FollowerCount; var left = 0; if (remainingBeds >= 0) { state.NeedsABed = 0; } else { if (state.NeedsABed == 0) { state.NeedsABed = Time.SecondsSinceStartDouble + LOABOROR_LEAVE_HOURS; PandaChat.Send(state.ColonyRef, SettlerReasoning.GetNeedBed(), ChatColor.grey); } if (state.NeedsABed != 0 && state.NeedsABed < Time.SecondsSinceStartDouble) { foreach (var follower in state.ColonyRef.Followers) { if (follower.UsedBed == null) { left++; NPCLeaving(follower); } } state.NeedsABed = 0; } if (left > 0) { PandaChat.Send(state.ColonyRef, string.Concat(SettlerReasoning.GetNoBed(), string.Format(" {0} colonists have left your colony.", left)), ChatColor.red); update = true; } } state.ColonyRef.SendCommonData(); } _nextbedTime = Time.SecondsSinceStartDouble + Random.Next(5, 8) * IN_GAME_HOUR_IN_SECONDS * 24; } } catch (Exception ex) { PandaLogger.LogError(ex, "EvaluateBeds"); } return(update); }
public static void UpdateFoodUse(ColonyState state) { if (ServerManager.TerrainGenerator != null && AIManager.NPCPathFinder != null) { var food = _baseFoodPerHour; if (state.Difficulty != GameDifficulty.Normal && state.ColonyRef.FollowerCount > 10) { var multiplier = .7 / state.ColonyRef.FollowerCount - state.ColonyRef.TemporaryData.GetAsOrDefault(PandaResearch.GetResearchKey(PandaResearch.ReducedWaste), 0f); food += (float)(_baseFoodPerHour * multiplier); food *= state.Difficulty.FoodMultiplier; } if (state.ColonyRef.InSiegeMode) { food = food * ServerManager.ServerSettings.NPCs.FoodUseMultiplierSiegeMode; } if (food < _baseFoodPerHour) { food = _baseFoodPerHour; } state.ColonyRef.FoodUsePerHour = food; state.ColonyRef.SendCommonData(); } }
private static bool EvaluateBeds(ColonyState state) { var update = false; //try //{ // if (!TimeCycle.IsDay && TimeCycle.TotalHours > state.NextBedTime) // { // var remainingBeds = state.ColonyRef.BedTracker.CalculateTotalBedCount() - state.ColonyRef.FollowerCount; // var left = 0; // if (remainingBeds >= 0) // { // state.NeedsABed = 0; // } // else // { // if (state.NeedsABed == 0) // { // state.NeedsABed = TimeCycle.TotalHours + 24; // PandaChat.Send(state.ColonyRef, _localizationHelper, SettlerReasoning.GetNeedBed(), ChatColor.grey); // } // else if (state.NeedsABed <= TimeCycle.TotalHours) // { // List<NPCBase> leaving = new List<NPCBase>(); // foreach (var follower in state.ColonyRef.Followers) // if (follower.UsedBed == null) // { // left++; // leaving.Add(follower); // } // state.NeedsABed = 0; // foreach (var npc in leaving) // NPCLeaving(npc); // } // if (left > 0) // { // PandaChat.Send(state.ColonyRef, _localizationHelper, string.Concat(SettlerReasoning.GetNoBed(), string.Format(" {0} colonists have left your colony.", left)), ChatColor.red); // update = true; // } // state.ColonyRef.SendCommonData(); // } // state.NextBedTime = TimeCycle.TotalHours + Random.Next(5, 8); // } //} //catch (Exception ex) //{ // SettlersLogger.LogError(ex, "EvaluateBeds"); //} return(update); }
public static void OnNPCHit(NPCBase npc, ModLoader.OnHitData d) { if (d.ResultDamage > 0 && d.HitSourceType == ModLoader.OnHitData.EHitSourceType.Monster && !(d.HitSourceObject is IPandaZombie)) { var state = ColonyState.GetColonyState(npc.Colony); d.ResultDamage += state.Difficulty.MonsterDamage; } }
public static void OnPlayerHit(Players.Player player, ModLoader.OnHitData d) { if (d.ResultDamage > 0 && d.HitSourceType == ModLoader.OnHitData.EHitSourceType.Monster && player.ActiveColony != null && !(d.HitSourceObject is IPandaZombie)) { var state = ColonyState.GetColonyState(player.ActiveColony); d.ResultDamage += state.Difficulty.MonsterDamage; } }
private static void UpdateMagicItemms(ColonyState state) { try { if (state.HealingUpdateTime < Time.SecondsSinceStartDouble) { var colony = state.ColonyRef; foreach (var follower in colony.Followers) { var inv = ColonistInventory.Get(follower); if (inv.HealingItemUpdateTime < Time.SecondsSinceStartDouble) { var hasBandages = colony.Stockpile.Contains(TreatedBandage.Item.ItemIndex) || colony.Stockpile.Contains(Bandage.Item.ItemIndex); if (hasBandages && follower.health < follower.Colony.NPCHealthMax && !HealingOverTimeNPC.NPCIsBeingHealed(follower)) { var healing = false; if (follower.Colony.NPCHealthMax - follower.health > TreatedBandage.INITIALHEAL) { colony.Stockpile.TryRemove(TreatedBandage.Item.ItemIndex); healing = true; AudioManager.SendAudio(follower.Position.Vector, GameLoader.NAMESPACE + ".Bandage"); var heal = new HealingOverTimeNPC(follower, TreatedBandage.INITIALHEAL, TreatedBandage.TOTALHOT, 5, TreatedBandage.Item.ItemIndex); } if (!healing) { colony.Stockpile.TryRemove(Bandage.Item.ItemIndex); healing = true; AudioManager.SendAudio(follower.Position.Vector, GameLoader.NAMESPACE + ".Bandage"); var heal = new HealingOverTimeNPC(follower, Bandage.INITIALHEAL, Bandage.TOTALHOT, 5, Bandage.Item.ItemIndex); } } inv.HealingItemUpdateTime = Time.SecondsSinceStartDouble + Random.Next(3, 5); } } state.HealingUpdateTime = Time.SecondsSinceStartDouble + 5; } } catch (Exception ex) { SettlersLogger.LogError(ex); } }
public static void AddSetting(Players.Player player, NetworkUI.NetworkMenu menu) { if (player.ActiveColony != null) { menu.Items.Add(new NetworkUI.Items.DropDown("Settlers Difficulty", _Difficulty, GameDifficulty.GameDifficulties.Keys.ToList())); var ps = ColonyState.GetColonyState(player.ActiveColony); menu.LocalStorage.SetAs(_Difficulty, ps.Difficulty.Rank); } }
public Hoarder(Path path, Colony originalGoal) : base(NPCType.GetByKeyNameOrDefault(Key), path, originalGoal) { var ps = ColonyState.GetColonyState(originalGoal); _totalHealth = originalGoal.FollowerCount * ps.Difficulty.BossHPPerColonist; TotalHealth = _totalHealth; CurrentHealth = _totalHealth; }
/// <summary> /// Renders the statistic-box. /// </summary> /// <param name="state"><see cref="SimulationState"/></param> public void RenderInfobox(SimulationState state) { int player = 0; for (int i = 0; i < state.TeamStates.Count; i++) { player += state.TeamStates[i].ColonyStates.Count; } int height = ROWHEIGHT * player + 60; int position = (height / 2) + 10; line.Width = height; line.Begin(); line.Draw ( new Vector2[] { new Vector2(10, position), new Vector2(500, position) }, Color.FromArgb(100, Color.White).ToArgb()); line.End(); fontNormal.DrawText(null, Resource.InfoboxColumnColony2, 20, ROWHEIGHT + 20, Color.Black); fontNormal.DrawText(null, Resource.InfoboxColumnCollectedFood1, 200, 20, Color.Green); fontNormal.DrawText(null, Resource.InfoboxColumnCollectedFood2, 200, ROWHEIGHT + 20, Color.Green); fontNormal.DrawText(null, Resource.InfoboxColumnKilledAnts1, 290, 20, Color.Red); fontNormal.DrawText(null, Resource.InfoboxColumnKilledAnts2, 290, ROWHEIGHT + 20, Color.Red); fontNormal.DrawText(null, Resource.InfoboxColumnKilledBugs1, 370, 20, Color.Blue); fontNormal.DrawText(null, Resource.InfoboxColumnKilledBugs2, 370, ROWHEIGHT + 20, Color.Blue); fontNormal.DrawText(null, Resource.InfoboxColumnPoints2, 440, ROWHEIGHT + 20, Color.Black); int count = 0; for (int i = 0; i < state.TeamStates.Count; i++) { for (int j = 0; j < state.TeamStates[i].ColonyStates.Count; j++) { ColonyState colony = state.TeamStates[i].ColonyStates[j]; int killedAnts = colony.StarvedAnts + colony.EatenAnts + colony.BeatenAnts; fontBold.DrawText (null, colony.ColonyName, 20, count * ROWHEIGHT + 55, antMaterial[count].Emissive); fontNormal.DrawText (null, colony.CollectedFood.ToString(), 200, count * ROWHEIGHT + 55, Color.Green); fontNormal.DrawText (null, killedAnts.ToString(), 290, count * ROWHEIGHT + 55, Color.Red); fontNormal.DrawText (null, colony.KilledBugs.ToString(), 370, count * ROWHEIGHT + 55, Color.Blue); fontBold.DrawText (null, colony.Points.ToString(), 440, count * ROWHEIGHT + 55, Color.Black); count++; } } }
public void PathingThreadAction(PathingContext context) { foreach (var colony in ServerManager.ColonyTracker.ColoniesByID.Values) { List <IPandaZombie> canSpawn = PandaZombies.Where(p => p.MinColonists < colony.FollowerCount).ToList(); if (canSpawn.Count > 0 && colony.DifficultySetting.ShouldSpawnZombies(colony)) { var bannerGoal = colony?.Banners?.FirstOrDefault(); if (bannerGoal == null) { continue; } var cs = ColonyState.GetColonyState(colony); if (cs.ColonyRef.OwnerIsOnline()) { Vector3Int positionFinal; var max = Math.RoundToInt(colony.FollowerCount / 100) + 1; if (max == 0) { max = 1; } for (int i = 0; i < max; i++) { var zombie = canSpawn.GetRandomItem(); switch (((MonsterSpawner)MonsterTracker.MonsterSpawner).TryGetSpawnLocation(context, bannerGoal.Position, bannerGoal.SafeRadius, 200, 500f, out positionFinal)) { case MonsterSpawner.ESpawnResult.Success: if (context.Pathing.TryFindPath(ref context, positionFinal, bannerGoal.Position, out var path, 2000000000) == EPathFindingResult.Success) { _spawnQueue.Enqueue(zombie.GetNewInstance(path, colony)); } break; case MonsterSpawner.ESpawnResult.NotLoaded: case MonsterSpawner.ESpawnResult.Impossible: colony.OnZombieSpawn(true); break; case MonsterSpawner.ESpawnResult.Fail: colony.OnZombieSpawn(false); break; } } } } } }
public float Evaluate(Colony colony) { var cs = ColonyState.GetColonyState(colony); if (cs.SettlersEnabled != SettlersState.Disabled && BoughtCount.TryGetValue(colony, out var count)) { return((float)(count.Count * cs.Difficulty.GetorDefault("UnhappyColonistsBought", -1))); } return(0); }
public static void OnNPCDied(NPC.NPCBase nPC) { var cs = ColonyState.GetColonyState(nPC.Colony); if (!DieCount.ContainsKey(nPC.Colony)) { DieCount.Add(nPC.Colony, new List <double>()); } DieCount[nPC.Colony].Add(TimeCycle.TotalTime.Value.TotalSeconds + cs.Difficulty.TimeUnhappyAfterColonistDeathSeconds); }
private static void CantSpawnBoss(ColonyState cs) { cs.FaiedBossSpawns++; if (cs.FaiedBossSpawns > 10) { PandaChat.SendThrottle(cs, _localizationHelper, "NoBanner", ChatColor.red, ColonistManager.PenalizeFood(cs.ColonyRef, 0.15f) * 100 + "%"); } cs.ColonyRef.OnZombieSpawn(false); }
public float Evaluate(Colony colony) { var cs = ColonyState.GetColonyState(colony); if (DieCount.TryGetValue(colony, out var count)) { return((float)(count.Count * cs.Difficulty.UnhappinessPerColonistDeath) * -1f); } return(0); }
public float Evaluate(Colony colony) { var cs = ColonyState.GetColonyState(colony); if (cs.Difficulty.Name != GameDifficulty.Normal.Name && DieCount.TryGetValue(colony, out var count)) { return((float)(count.Count * cs.Difficulty.GetorDefault("UnhappinessPerColonistDeath", 1)) * -1f); } return(0); }
public static void OnNPCRecruited(NPCBase npc) { try { var npcInv = ColonistInventory.Get(npc); if (npc.CustomData == null) { npc.CustomData = new JSONNode(); } if (npc.NPCType.IsLaborer) { npcInv.UnemployedLeaveTime = TimeCycle.TotalHours + 48; } if (npc.CustomData.TryGetAs(ISSETTLER, out bool settler) && settler) { return; } var ps = ColonyState.GetColonyState(npc.Colony); npc.FoodHoursCarried = ServerManager.ServerSettings.NPCs.InitialFoodCarriedHours; if (ps.SettlersEnabled != API.Models.SettlersState.Disabled) { if (SettlersConfiguration.GetorDefault("ColonistsRecruitment", true)) { if (npc.Colony.FollowerCount > MAX_BUYABLE) { if (!ColonistsBought.BoughtCount.ContainsKey(npc.Colony)) { ColonistsBought.BoughtCount.Add(npc.Colony, new List <double>()); } ColonistsBought.BoughtCount[npc.Colony].Add(TimeCycle.TotalHours + 24); } ColonistInventory.Get(npc); UpdateFoodUse(ps); } else { PandaChat.Send(npc.Colony, _localizationHelper, "AdminDisabled", ChatColor.red); npc.health = 0; npc.Update(); } } } catch (Exception ex) { SettlersLogger.LogError(ex); } }
private static bool HasToggeledMaxTimes(int maxToggleTimes, ColonyState state, Players.Player player) { if (state.SettlersToggledTimes >= maxToggleTimes) { PandaChat.Send(player, _localizationHelper, "AbuseWarning", ChatColor.red, maxToggleTimes.ToString()); return(true); } return(false); }
public static void AfterWorldLoad() { foreach (var colony in ServerManager.ColonyTracker.ColoniesByID.Values) { var cs = ColonyState.GetColonyState(colony); if (cs != null && cs.Difficulty.Rank < SettlersConfiguration.MinDifficulty.Rank) { cs.Difficulty = SettlersConfiguration.MinDifficulty; } } }
public static void AddSetting(Players.Player player, NetworkUI.NetworkMenu menu) { if (player.ActiveColony != null) { menu.Items.Add(new NetworkUI.Items.DropDown("Pandaros.API Bosses", _Bosses, new List <string>() { "Disabled", "Enabled" })); var ps = ColonyState.GetColonyState(player.ActiveColony); menu.LocalStorage.SetAs(_Bosses, Convert.ToInt32(ps.BossesEnabled)); } }