internal void CancelUpgrade() { if (Timer != null) { var ca = Parent.Level.Avatar; var currentLevel = ca.GetUnitUpgradeLevel(HeroData); var rd = HeroData.GetUpgradeResource(); var cost = HeroData.GetUpgradeCost(currentLevel); var multiplier = (CSV.Tables.Get(Gamefile.Globals).GetData("HERO_UPGRADE_CANCEL_MULTIPLIER") as Globals) .NumberValue; var resourceCount = (int)((cost * multiplier * (long)1374389535) >> 32); resourceCount = Math.Max((resourceCount >> 5) + (resourceCount >> 31), 0); ca.Resources.Plus(rd.GetGlobalId(), resourceCount); if (Builder_Village) { Parent.Level.BuilderWorkerManager.DeallocateWorker(Parent); } else { Parent.Level.VillageWorkerManager.DeallocateWorker(Parent); } Timer = null; } }