private static void HandleFindProduce(ref Decorators.FarmAnimal moddedAnimal, ref Location moddedLocation) { var moddedPlayer = new Farmer(Game.GetPlayer()); if (!IsValidLocation(moddedLocation) || !CanFindProduce(moddedAnimal, moddedPlayer) || Random.NextDouble() >= 0.0002 || !HasNoImpediments(moddedAnimal, moddedLocation)) { return; } if (moddedPlayer.IsCurrentLocation(moddedLocation.GetOriginal())) { BellsAndWhistles.PlaySound("dirtyHit", 450); BellsAndWhistles.PlaySound("dirtyHit", 900); BellsAndWhistles.PlaySound("dirtyHit", 1350); } if (Game.IsCurrentLocation(moddedLocation.GetOriginal())) { moddedAnimal.AnimateFindingProduce(); } else { moddedAnimal.FindProduce(moddedPlayer.GetOriginal()); } }
public static bool Prefix( ref StardewValley.FarmAnimal __instance, ref GameTime time, ref GameLocation location, ref bool __result) { var moddedAnimal = new Decorators.FarmAnimal(__instance); if (!moddedAnimal.HasHome() || moddedAnimal.IsEating() || Game1.IsClient || __instance.controller != null) { return(true); } var moddedLocation = new Location(location); HandleFindGrassToEat(ref moddedAnimal, ref moddedLocation); if (HandleNightTimeRoutine(ref moddedAnimal, ref moddedLocation)) { __result = true; } else { HandleFindProduce(ref moddedAnimal, ref moddedLocation); __result = false; } return(false); }
private static bool HandleStockSelection( ref Decorators.PurchaseAnimalsMenu moddedMenu, int x, int y, Farmer moddedPlayer) { var textureComponent = moddedMenu.GetAnimalsToPurchase().Where(o => (o.item as StardewValley.Object).Type == null) .FirstOrDefault(o => o.containsPoint(x, y)); if (textureComponent == null) { return(true); } var amount = textureComponent.item.salePrice(); if (!moddedPlayer.CanAfford(amount)) { return(true); } var randomAnimalShopType = new Api.BetterFarmAnimalVariety(Mod.ReadConfig <ModConfig>()).GetRandomAnimalShopType(textureComponent.hoverText, moddedPlayer.GetOriginal()); var farmAnimal1 = moddedPlayer.CreateFarmAnimal(randomAnimalShopType); SelectedStockBellsAndWhistles(ref moddedMenu); moddedMenu.SetOnFarm(true); moddedMenu.SetAnimalBeingPurchased(farmAnimal1); var farmAnimal2 = new Decorators.FarmAnimal(farmAnimal1); moddedMenu.SetPriceOfAnimal(farmAnimal2.GetPrice()); return(false); }
private static bool ShouldStopFindingProduce(ref Decorators.FarmAnimal moddedAnimal) { return(Random.Seed((int)(moddedAnimal.GetUniqueId() / 2L + Game.GetDaysPlayed() + Game.GetTimeOfDay())).NextDouble() > moddedAnimal.GetFriendship() / 1500.0); }
private static void HandleHatchling( ref Decorators.AnimalHouse moddedAnimalHouse, string name, Farmer moddedPlayer) { if (moddedAnimalHouse.IsFull()) { return; } var withEggReadyToHatch = moddedAnimalHouse.GetIncubatorWithEggReadyToHatch(); if (withEggReadyToHatch == null) { return; } string type; type = new Incubator(withEggReadyToHatch) .GetRandomType(FarmAnimals.GroupTypesByCategory() .ToDictionary (kvp => kvp.Key, kvp => moddedPlayer.SanitizeBlueChickens(kvp.Value))); var building = moddedAnimalHouse.GetBuilding(); var farmAnimal = new Decorators.FarmAnimal(moddedPlayer.CreateFarmAnimal(type, name, building)); farmAnimal.AddToBuilding(building); moddedAnimalHouse.ResetIncubator(withEggReadyToHatch); farmAnimal.SetCurrentProduce(-1); }
private static bool RollRandomProduceChance(Decorators.FarmAnimal moddedAnimal, byte fullness, int seed) { var random = new Random(seed); var happiness = moddedAnimal.GetHappiness(); return((random.NextDouble() < fullness / 200.0) & (random.NextDouble() < happiness / 70.0)); }
private static void PurchasedAnimalBellsAndWhistles(Decorators.FarmAnimal moddedAnimal) { if (moddedAnimal.MakesSound()) { BellsAndWhistles.CueSound(moddedAnimal.GetSound(), "Pitch", 1200 + Random.Next(-200, 201)); } BellsAndWhistles.AddHudMessage( Content.LoadString("Strings\\StringsFromCSFiles:PurchaseAnimalsMenu.cs.11324", moddedAnimal.GetDisplayType()), Color.LimeGreen, 3500f); }
public void OverwriteFarmAnimal(ref Decorators.FarmAnimal moddedAnimal, string requestedType) { if (!moddedAnimal.HasName()) { return; } var typeLog = GetTypeLog(moddedAnimal.GetUniqueId()); var type = typeLog == null ? requestedType ?? moddedAnimal.GetTypeString() : typeLog.Current; moddedAnimal.UpdateFromData(type); }
public static bool Prefix(ref StardewValley.FarmAnimal __instance, ref Farmer who) { var moddedAnimal = new Decorators.FarmAnimal(__instance); AttemptToSpawnProduce(ref moddedAnimal, Game.GetMasterPlayer()); if (ShouldStopFindingProduce(ref moddedAnimal)) { moddedAnimal.SetCurrentProduce(-1); } return(false); }
private static void HandleFindGrassToEat( ref Decorators.FarmAnimal moddedAnimal, ref Location moddedLocation) { if (!moddedLocation.IsOutdoors() || moddedAnimal.GetFullness() >= 195 || Random.NextDouble() >= 0.002 || !Paritee.StardewValley.Core.Characters.FarmAnimal.UnderMaxPathFindingPerTick()) { return; } Paritee.StardewValley.Core.Characters.FarmAnimal.IncreasePathFindingThisTick(); moddedAnimal.SetFindGrassPathController(moddedLocation.GetOriginal()); }
public static bool Prefix(ref StardewValley.FarmAnimal __instance, ref Building home) { var moddedAnimal = new Decorators.FarmAnimal(__instance); if (!moddedAnimal.HasName()) { return(true); } moddedAnimal.SetHome(home); Mod.ReadSaveData <FarmAnimals>("farm-animals").OverwriteFarmAnimal(ref moddedAnimal, null); return(false); }
public static bool Prefix(ref StardewValley.Menus.PurchaseAnimalsMenu __instance, ref SpriteBatch b) { var purchaseAnimalsMenu = new Decorators.PurchaseAnimalsMenu(__instance); var farmAnimal = new Decorators.FarmAnimal(purchaseAnimalsMenu.GetAnimalBeingPurchased()); if (!BellsAndWhistles.IsFaded() && purchaseAnimalsMenu.IsOnFarm()) { var str = Content.FormatMoneyString(farmAnimal.GetPrice()); var x = Game.GetViewport().Width / 2 - Content.GetWidthOfString(str) / 2; var y = (int)(18.0 * SpriteText.fontPixelZoom * 2.0); BellsAndWhistles.DrawScroll(b, str, x, y); } return(true); }
private static void HandleProduceSpawn(Decorators.FarmAnimal moddedAnimal) { if (!moddedAnimal.LaysProduce() || !moddedAnimal.HasHome()) { return; } var indoors = Paritee.StardewValley.Core.Locations.AnimalHouse.GetIndoors(moddedAnimal.GetHome()); var tileLocation = moddedAnimal.GetTileLocation(); var currentProduce = moddedAnimal.GetCurrentProduce(); var produceQuality = moddedAnimal.GetProduceQuality(); var flag = true; foreach (var @object in indoors.Objects.Values) { int num; if ((bool)@object.bigCraftable && (int)@object.parentSheetIndex == 165 && @object.heldObject.Value != null) { num = (@object.heldObject.Value as Chest).addItem( new StardewValley.Object(Vector2.Zero, currentProduce, null, false, true, false, false) { Quality = produceQuality }) == null ? 1 : 0; } else { num = 0; } if (num != 0) { @object.showNextIndex.Value = true; flag = false; break; } } if (flag && !indoors.Objects.ContainsKey(tileLocation)) { var @object = new StardewValley.Object(Vector2.Zero, currentProduce, null, false, true, false, true) { Quality = produceQuality }; Location.SpawnObject(indoors, tileLocation, @object); } moddedAnimal.SetCurrentProduce(-1); }
public static void Postfix(ref StardewValley.FarmAnimal __instance, ref GameLocation environtment) { if (__instance.pushAccumulator == 1) { __instance.pushAccumulator = 0; } else { __instance.daysToLay.Value = (byte)__instance.pauseTimer; var moddedAnimal = new Decorators.FarmAnimal(__instance); moddedAnimal.SetPauseTimer(0); var hitGlowTimer = (byte)moddedAnimal.GetHitGlowTimer(); moddedAnimal.SetHitGlowTimer(0); HandleCurrentProduce(ref moddedAnimal, hitGlowTimer); } }
private static bool HasNoImpediments(Decorators.FarmAnimal moddedAnimal, Location moddedLocation) { var boundingBox = moddedAnimal.GetBoundingBox(); for (var corner = 0; corner < 4; ++corner) { var cornersOfThisRectangle = StardewValley.Utility.getCornersOfThisRectangle(ref boundingBox, corner); var key = new Vector2(cornersOfThisRectangle.X / 64f, cornersOfThisRectangle.Y / 64f); if (moddedLocation.GetOriginal().terrainFeatures.ContainsKey(key) || moddedLocation.GetOriginal().objects.ContainsKey(key)) { return(false); } } return(true); }
private static bool AttemptToSpawnProduce(ref Decorators.FarmAnimal moddedAnimal, Farmer who) { var translatedVector2 = StardewValley.Utility.getTranslatedVector2(moddedAnimal.GetTileLocation(), moddedAnimal.GetFacingDirection(), 1f); var currentProduce = moddedAnimal.GetCurrentProduce(); if (!Paritee.StardewValley.Core.Characters.FarmAnimal.IsProduceAnItem(currentProduce)) { return(false); } var @object = new StardewValley.Object(Vector2.Zero, currentProduce, null, false, true, false, true) { Quality = moddedAnimal.GetProduceQuality() }; Location.SpawnObject(Game.GetFarm(), translatedVector2, @object); return(true); }
private static void HandleNewborn( ref Decorators.AnimalHouse moddedAnimalHouse, string name, ref QuestionEvent questionEvent, Farmer moddedPlayer) { var withEggReadyToHatch = moddedAnimalHouse.GetIncubatorWithEggReadyToHatch(); var moddedParent = new Decorators.FarmAnimal(questionEvent.animal); var dictionary = FarmAnimals.GroupTypesByCategory().Where(kvp => kvp.Value.Contains(moddedParent.GetTypeString())) .ToDictionary(kvp => kvp.Key, kvp => moddedPlayer.SanitizeBlueChickens(kvp.Value)); var randomTypeFromProduce = moddedParent.GetRandomTypeFromProduce(dictionary); var building = moddedAnimalHouse.GetBuilding(); var farmAnimal = new Decorators.FarmAnimal(moddedPlayer.CreateFarmAnimal(randomTypeFromProduce, name, building)); farmAnimal.AssociateParent(questionEvent.animal); farmAnimal.AddToBuilding(building); farmAnimal.SetCurrentProduce(-1); Event.ForceQuestionEventToProceed(questionEvent); }
private static void HandleCurrentProduce(ref Decorators.FarmAnimal moddedAnimal, byte originalFullness) { var daysToLay = moddedAnimal.GetDaysToLay(moddedAnimal.GetOwner()); var seed = (int)moddedAnimal.GetUniqueId() / 2 + Game.GetDaysPlayed(); var flag = RollRandomProduceChance(moddedAnimal, originalFullness, seed); if (!moddedAnimal.IsAProducer() || moddedAnimal.IsBaby()) { moddedAnimal.SetCurrentProduce(-1); } else { if (moddedAnimal.GetDaysSinceLastLay() < daysToLay) { return; } if (!flag) { moddedAnimal.SetCurrentProduce(-1); } else { HandleGameStats(moddedAnimal); var player = Game.GetPlayer(); var farmAnimals = FarmAnimals.ReadCache(); var typeStr = moddedAnimal.GetTypeString(); var farmAnimalType = farmAnimals.Categories.SelectMany(o => (IEnumerable <FarmAnimalType>)o.Types) .Where(o => o.Type == typeStr).FirstOrDefault(); var deluxeProduceLuck = farmAnimalType == null ? 0.0 : farmAnimalType.DeluxeProduceLuck; var produceIndex = moddedAnimal.RollProduce(seed, player, deluxeProduceLuck); moddedAnimal.SetCurrentProduce(produceIndex); if (!Paritee.StardewValley.Core.Characters.FarmAnimal.IsProduceAnItem(produceIndex)) { return; } moddedAnimal.SetDaysSinceLastLay(0); HandleProduceQuality(moddedAnimal, seed); HandleProduceSpawn(moddedAnimal); } } }
private static bool HandleOnFarm( ref Decorators.PurchaseAnimalsMenu moddedMenu, int x, int y, Farmer moddedPlayer) { if (moddedMenu.IsNamingAnimal()) { return(true); } var viewport = Game.GetViewport(); var buildingAt = Game.GetFarm().getBuildingAt(new Vector2((x + viewport.X) / 64, (y + viewport.Y) / 64)); if (buildingAt == null) { return(true); } var animalBeingPurchased = moddedMenu.GetAnimalBeingPurchased(); var moddedAnimal = new Decorators.FarmAnimal(animalBeingPurchased); if (!moddedAnimal.CanLiveIn(buildingAt) || new Building(buildingAt).IsFull() || !moddedAnimal.CanBeNamed()) { return(true); } var priceOfAnimal = moddedMenu.GetPriceOfAnimal(); if (!moddedPlayer.CanAfford(priceOfAnimal)) { return(true); } moddedAnimal.AddToBuilding(buildingAt); moddedMenu.SetAnimalBeingPurchased(animalBeingPurchased); moddedMenu.SetNewAnimalHome(null); moddedMenu.SetNamingAnimal(false); moddedPlayer.SpendMoney(priceOfAnimal); PurchasedAnimalBellsAndWhistles(moddedAnimal); return(false); }
private static void HandleGameStats(Decorators.FarmAnimal moddedAnimal) { try { switch (moddedAnimal.GetDefaultProduce()) { case 176: case 180: ++Game1.stats.ChickenEggsLayed; break; case 440: ++Game1.stats.RabbitWoolProduced; break; case 442: ++Game1.stats.DuckEggsLayed; break; } } catch { } }
private static bool HandleNightTimeRoutine( ref Decorators.FarmAnimal moddedAnimal, ref Location moddedLocation) { if (Game.GetTimeOfDay() < 1700 || !moddedLocation.IsOutdoors() || moddedAnimal.HasController() || Random.NextDouble() >= 0.002) { return(false); } if (moddedLocation.AnyFarmers()) { moddedLocation.RemoveAnimal(moddedAnimal.GetOriginal()); moddedAnimal.ReturnHome(); return(true); } if (Paritee.StardewValley.Core.Characters.FarmAnimal.UnderMaxPathFindingPerTick()) { Paritee.StardewValley.Core.Characters.FarmAnimal.IncreasePathFindingThisTick(); moddedAnimal.SetFindHomeDoorPathController(moddedLocation.GetOriginal()); } return(false); }
public void AddAnimal(Decorators.FarmAnimal animalToBeAdded) { var typeLog = new TypeLog(animalToBeAdded.GetTypeString(), animalToBeAdded.GetTypeString()); AddAnimal(animalToBeAdded, typeLog); }
public void AddAnimal(Decorators.FarmAnimal animalToBeAdded, TypeLog typeLog) { AddAnimal(new FarmAnimal(animalToBeAdded.GetUniqueId(), typeLog)); }
public string GetSavedTypeOrDefault(Decorators.FarmAnimal moddedAnimal) { return(GetSavedTypeOrDefault(moddedAnimal.GetUniqueId(), moddedAnimal.IsCoopDweller())); }
private static bool CanFindProduce(Decorators.FarmAnimal moddedAnimal, Farmer moddedPlayer) { return(!moddedAnimal.IsBaby() && moddedAnimal.CanFindProduce() && Paritee.StardewValley.Core.Characters.FarmAnimal.IsProduceAnItem(moddedAnimal.GetCurrentProduce())); }
private static void HandleProduceQuality(Decorators.FarmAnimal moddedAnimal, int seed) { var quality = moddedAnimal.RollProduceQuality(moddedAnimal.GetOwner(), seed); moddedAnimal.SetProduceQuality(quality); }