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);
        }
Example #2
0
        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 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);
        }
        public void AddAnimal(Decorators.FarmAnimal animalToBeAdded)
        {
            var typeLog = new TypeLog(animalToBeAdded.GetTypeString(), animalToBeAdded.GetTypeString());

            AddAnimal(animalToBeAdded, typeLog);
        }