public bool Combine(GeneticMaterial otherGeneticMaterial, Character user) { if (!CanBeCombinedWith(otherGeneticMaterial)) { return(false); } float conditionIncrease = Rand.Range(ConditionIncreaseOnCombineMin, ConditionIncreaseOnCombineMax); conditionIncrease += user.GetStatValue(StatTypes.GeneticMaterialRefineBonus); if (item.Prefab == otherGeneticMaterial.item.Prefab) { item.Condition = Math.Max(item.Condition, otherGeneticMaterial.item.Condition) + conditionIncrease; float taintedProbability = GetTaintedProbabilityOnRefine(user); if (taintedProbability >= Rand.Range(0.0f, 1.0f)) { MakeTainted(); } return(true); } else { item.Condition = otherGeneticMaterial.Item.Condition = (item.Condition + otherGeneticMaterial.Item.Condition) / 2.0f + conditionIncrease; item.OwnInventory?.TryPutItem(otherGeneticMaterial.Item, user: null); item.AllowDeconstruct = false; otherGeneticMaterial.Item.AllowDeconstruct = false; if (GetTaintedProbabilityOnCombine(user) >= Rand.Range(0.0f, 1.0f)) { MakeTainted(); } return(false); } }
public bool CanBeCombinedWith(GeneticMaterial otherGeneticMaterial) { return(!tainted && otherGeneticMaterial != null && !otherGeneticMaterial.tainted && item.AllowDeconstruct && otherGeneticMaterial.item.AllowDeconstruct); }