public bool CanStartUpgrading(LogicCombatItemData data) { if (data != null && this.m_unit == null) { if (this.m_parent.GetLevel().GetGameMode().GetCalendar().IsProductionEnabled(data)) { if (data.GetCombatItemType() != LogicCombatItemData.COMBAT_ITEM_TYPE_HERO) { if (this.m_parent.GetVillageType() == data.GetVillageType()) { int upgLevel = this.m_parent.GetLevel().GetHomeOwnerAvatar().GetUnitUpgradeLevel(data); if (data.GetUpgradeLevelCount() - 1 > upgLevel) { int maxProductionHouseLevel; if (data.GetVillageType() == 1) { maxProductionHouseLevel = this.m_parent.GetComponentManager().GetMaxBarrackLevel(); } else { LogicComponentManager componentManager = this.m_parent.GetComponentManager(); if (data.GetCombatItemType() == LogicCombatItemData.COMBAT_ITEM_TYPE_CHARACTER) { maxProductionHouseLevel = data.GetUnitOfType() != 1 ? componentManager.GetMaxDarkBarrackLevel() : componentManager.GetMaxBarrackLevel(); } else { maxProductionHouseLevel = data.GetUnitOfType() == 1 ? componentManager.GetMaxSpellForgeLevel() : componentManager.GetMaxMiniSpellForgeLevel(); } } if (maxProductionHouseLevel >= data.GetRequiredProductionHouseLevel()) { LogicBuilding building = (LogicBuilding)this.m_parent; if (!building.IsLocked()) { return(building.GetUpgradeLevel() >= data.GetRequiredLaboratoryLevel(upgLevel + 1)); } } } } } } } return(false); }