private bool AddBonus(PetFoodRecord food) { var possibleEffect = PetTemplate.PossibleEffects.OfType <EffectDice>().FirstOrDefault(x => x.EffectId == food.BoostedEffect); var effect = Effects.OfType <EffectInteger>().FirstOrDefault(x => x.EffectId == food.BoostedEffect); if (possibleEffect == null) { return(false); } if (effect?.Value >= possibleEffect.Max) { return(false); } if (PetTemplate.PossibleEffects.Count > 0 && EffectManager.Instance.GetItemPower(this) >= MaxPower) { return(false); } if (effect == null) { Effects.Add(effect = new EffectInteger(food.BoostedEffect, (short)food.BoostAmount)); if (IsEquiped()) { var handler = EffectManager.Instance.GetItemEffectHandler(effect, Owner, this); handler.Operation = ItemEffectHandler.HandlerOperation.APPLY; handler.Apply(); Owner.RefreshStats(); } } else { if (IsEquiped()) { var handler = EffectManager.Instance.GetItemEffectHandler(effect, Owner, this); handler.Operation = ItemEffectHandler.HandlerOperation.UNAPPLY; handler.Apply(); effect.Value += (short)food.BoostAmount; handler.Operation = ItemEffectHandler.HandlerOperation.APPLY; handler.Apply(); Owner.RefreshStats(); } else { effect.Value += (short)food.BoostAmount; } } return(true); }
public PetTemplate Map(PetTemplate pet, PetFoodRecord food) { if (pet == null) { return(m_current); } if (m_current?.Id == pet.Id) { m_current.Foods.Add(food); return(null); } var previous = m_current; m_current = pet; m_current.Foods.Add(food); return(previous); }