private void CalcMonuments(long timeMS, StringBuilder infoBuilder) { foreach (Monument current in this.State.AllMonuments) { if (current.ShadowCloneCount > 0) { int num = current.ShadowCloneCount.ToInt(); CDouble cDouble = timeMS * (long)num * (long)this.State.PremiumBoni.MonumentBuildTimeDivider * (100 + this.State.PremiumBoni.BuildingSpeedUpPercent(true)) / 100; long num2 = current.DurationInMS(1); long num3 = num2 / (current.Level.ToLong() + 1L); if (num2 < 30L) { num2 = 30L; } if (num3 < 30L) { num3 = 30L; } CDouble rightSide = current.Level * (num2 - num3) / 2; CDouble leftSide = cDouble + rightSide; CDouble cDouble2 = Math.Sqrt((leftSide / num3).Double) * 1.414215; cDouble2.Floor(); if (cDouble2 < current.Level) { cDouble2 = current.Level; } if (cDouble2 > current.StopAt && current.StopAt != 0) { cDouble2 = current.StopAt; } if (this.State.GameSettings.StopMonumentBuilding && cDouble2 > current.Level) { cDouble2 = current.Level + 1; } int num4 = (cDouble2 - current.Level).ToInt(); if (num4 > 20000) { num4 = 20000; } CDouble cDouble3 = 1; if (num4 == 0) { current.CurrentDuration += cDouble.ToLong(); } else { bool flag = false; CDouble cDouble4 = cDouble2; if ((num4 + current.Level).ToInt() == current.StopAt && current.StopAt != 0) { current.CurrentDuration = 0L; cDouble4 = --cDouble4; } if (num4 > 1) { cDouble3 = cDouble4 * cDouble4 / 2 + cDouble4 / 2; cDouble3 = cDouble3 - current.Level * current.Level / 2 + current.Level / 2; foreach (CreationCost current2 in current.RequiredCreations(cDouble3)) { if (!CreationCost.HasCreations(this.State, current2, this.State.GameSettings.AutoBuyCreationsForMonuments)) { flag = true; cDouble = 0; break; } } while (flag) { flag = false; num4 /= 2; cDouble2 = num4 + current.Level; if (num4 < 1) { break; } cDouble3 = cDouble2 * cDouble2 / 2 + cDouble2 / 2; cDouble3 = cDouble3 - current.Level * current.Level / 2 + current.Level / 2; foreach (CreationCost current3 in current.RequiredCreations(cDouble3)) { if (!CreationCost.HasCreations(this.State, current3, this.State.GameSettings.AutoBuyCreationsForMonuments)) { flag = true; cDouble = 0; break; } } } } if (!flag) { if (num4 > 1) { using (List <CreationCost> .Enumerator enumerator4 = current.RequiredCreations(cDouble3).GetEnumerator()) { while (enumerator4.MoveNext()) { CreationCost cost = enumerator4.Current; Creation creation = this.State.AllCreations.FirstOrDefault((Creation x) => x.TypeEnum == cost.TypeEnum); creation.Count -= cost.CountNeeded; if (creation.count < 0) { creation.count = 0; } } } } current.Level += num4; this.State.Statistic.MonumentsCreated += num4; current.AddStatBoni(); if (this.State.GameSettings.StopMonumentBuilding) { this.State.Clones.RemoveUsedShadowClones(current.ShadowCloneCount); current.ShadowCloneCount = 0; current.CurrentDuration = 0L; cDouble = 0; } if (current.TypeEnum == Monument.MonumentType.temple_of_god) { this.State.Generator.IsAvailable = true; } } } if (current.CurrentDuration < 0L) { current.CurrentDuration = 0L; } if (num4 > 0) { infoBuilder.Append("- monument: ").Append(current.Name).Append(" was built ").Append(num4).Append(" x\n"); } } if (current.Upgrade.ShadowCloneCount > 0) { int num5 = current.Upgrade.ShadowCloneCount.ToInt(); CDouble cDouble5 = timeMS * (long)num5 * (long)this.State.PremiumBoni.MonumentBuildTimeDivider * (100 + this.State.PremiumBoni.BuildingSpeedUpPercent(true)) / 100; int num6 = 0; while (cDouble5 > 0) { long value = current.Upgrade.DurationInMS(1) - current.Upgrade.CurrentDuration; if (cDouble5 >= value && current.Upgrade.Level >= current.Upgrade.StopAt && current.Upgrade.StopAt != 0) { this.State.Clones.RemoveUsedShadowClones(current.Upgrade.ShadowCloneCount); current.Upgrade.ShadowCloneCount = 0; current.Upgrade.CurrentDuration = 0L; cDouble5 = 0; } else if (cDouble5 >= value) { cDouble5 -= value; current.Upgrade.CurrentDuration = 0L; bool flag2 = false; if (!current.Upgrade.IsPaid) { foreach (CreationCost current4 in current.Upgrade.RequiredCreations) { if (!CreationCost.HasCreations(this.State, current4, this.State.GameSettings.AutoBuyCreationsForMonuments)) { flag2 = true; cDouble5 = 0; break; } } } if (!flag2) { if (!current.Upgrade.IsPaid) { using (List <CreationCost> .Enumerator enumerator6 = current.Upgrade.RequiredCreations.GetEnumerator()) { while (enumerator6.MoveNext()) { CreationCost cost = enumerator6.Current; Creation creation2 = this.State.AllCreations.FirstOrDefault((Creation x) => x.TypeEnum == cost.TypeEnum); creation2.Count -= cost.CountNeeded; if (creation2.count < 0) { creation2.count = 0; } } } } else { current.Upgrade.IsPaid = false; } num6++; current.AddUpgradeLevel(); if (this.State.GameSettings.StopMonumentBuilding) { this.State.Clones.RemoveUsedShadowClones(current.Upgrade.ShadowCloneCount); current.Upgrade.ShadowCloneCount = 0; current.Upgrade.CurrentDuration = 0L; cDouble5 = 0; } } } else { current.Upgrade.CurrentDuration += cDouble5.ToLong(); cDouble5 = 0; } } if (num6 > 0) { infoBuilder.Append("- upgrade for ").Append(current.Name).Append(" was built ").Append(num6).Append(" x\n"); } } } }
private void CalcCreations(long timeMS, StringBuilder infoBuilder) { CDouble cDouble = this.State.CreationSpeed(timeMS) / 3L; long num = timeMS; bool flag = false; if ((this.State.GameSettings.LastCreation != null && this.State.GameSettings.LastCreation.TypeEnum == Creation.CreationType.Shadow_clone) || (this.State.GameSettings.CreateShadowClonesIfNotMax && this.State.Clones.Count < this.State.Clones.MaxShadowClones)) { flag = true; } if (flag) { Creation creation = this.State.AllCreations.FirstOrDefault((Creation x) => x.TypeEnum == Creation.CreationType.Shadow_clone); Creation.UpdateDurationMulti(this.State); CDouble cDouble2 = cDouble / creation.DurationInMS * (this.State.PremiumBoni.CreationCountBoni(true) + 1); if (cDouble2 > timeMS / 30L * (this.State.PremiumBoni.CreationCountBoni(true) + 1)) { cDouble2 = timeMS / 30L * (this.State.PremiumBoni.CreationCountBoni(true) + 1); } if (cDouble2 > 0) { CDouble cDouble3 = timeMS / cDouble2; bool flag2 = this.State.GameSettings.LastCreation != null && this.State.GameSettings.LastCreation.TypeEnum == Creation.CreationType.Shadow_clone; if (cDouble2 + creation.Count > this.State.Clones.MaxShadowClones && this.State.GameSettings.CreateShadowClonesIfNotMax && !flag2) { cDouble2 = this.State.Clones.MaxShadowClones - creation.Count; num -= cDouble2.ToLong() * cDouble3.ToLong(); } creation.TotalCreated += cDouble2; this.State.Clones.TotalClonesCreated += cDouble2; this.State.Statistic.TotalShadowClonesCreated += cDouble2; if (cDouble2 > 0) { infoBuilder.Append("- created ").Append(cDouble2.GuiText).Append(" Shadow Clones\n"); } if (this.State.Clones.Count + cDouble2 > this.State.Clones.MaxShadowClones) { cDouble2 = this.State.Clones.MaxShadowClones - this.State.Clones.Count; } this.State.Clones.Count = this.State.Clones.Count + cDouble2.ToInt(); if (this.State.Clones.Count < this.State.Clones.MaxShadowClones) { num = 0L; } } } if (this.State.GameSettings.LastCreation != null && this.State.GameSettings.LastCreation.TypeEnum != Creation.CreationType.Shadow_clone && App.CurrentPlattform == Plattform.Android) { while (num > 0L) { cDouble = this.State.CreationSpeed(num) / 3L; Creation creation2 = this.State.GameSettings.LastCreation; CDouble cDouble4 = creation2.DurationInMS; if (cDouble4 < 30) { cDouble4 = 30; } CDouble cDouble5 = cDouble / cDouble4; if (cDouble5 < 1) { creation2.currentDuration += cDouble.ToLong(); break; } cDouble5.Round(); cDouble5 *= this.State.PremiumBoni.CreationCountBoni(true) + 1; List <CreationCost> list = CreationCost.RequiredCreations(creation2.TypeEnum, cDouble5.ToLong(), true); bool flag3 = true; foreach (CreationCost current in list) { if (!CreationCost.HasCreations(this.State, current, this.State.GameSettings.AutoBuyCreations)) { flag3 = false; } } if (!flag3) { cDouble5 = this.State.GameSettings.CreationToCreateCount; if (cDouble5 == 0) { cDouble5 = 1; } list = CreationCost.RequiredCreations(creation2.TypeEnum, cDouble5.ToLong(), true); flag3 = true; foreach (CreationCost current2 in list) { if (!CreationCost.HasCreations(this.State, current2, this.State.GameSettings.AutoBuyCreations)) { flag3 = false; } } if (flag3) { bool flag4 = true; while (flag4) { cDouble5 *= 2; list = CreationCost.RequiredCreations(creation2.TypeEnum, cDouble5.ToLong(), true); foreach (CreationCost current3 in list) { if (!CreationCost.HasCreations(this.State, current3, this.State.GameSettings.AutoBuyCreations)) { flag4 = false; cDouble5 /= 2; break; } } } } } if (!flag3) { infoBuilder.Append("- you failed to create " + creation2.Name + " because of missing prerequisites or divinity, so you created stones instead.\n"); list = new List <CreationCost>(); creation2 = this.State.AllCreations.FirstOrDefault((Creation x) => x.TypeEnum == Creation.CreationType.Stone); cDouble4 = creation2.DurationInMS; if (cDouble4 < 30) { cDouble4 = 30; } cDouble5 = cDouble / cDouble4 * (this.State.PremiumBoni.CreationCountBoni(true) + 1); } CDouble cDouble6 = cDouble5 + creation2.Count; CDouble cDouble7 = -1; if (creation2.NextAtCount > 0) { if (this.State.GameSettings.CreationsNextAtMode == 1) { cDouble7 = creation2.NextAtCount - creation2.Count; } else if (this.State.GameSettings.CreationsNextAtMode == 2) { cDouble7 = creation2.NextAtCount - creation2.TotalCreated; } } if (cDouble7 != -1 && cDouble5 > cDouble7 && flag3) { if (cDouble7 > 0) { cDouble5 = cDouble7; CDouble cDouble8 = (cDouble5 * cDouble4 / (this.State.PremiumBoni.CreationCountBoni(true) + 1)).ToLong(); cDouble8 = cDouble8 / this.State.PremiumBoni.CreationDopingDivider / (100 + this.State.PremiumBoni.CreatingSpeedUpPercent(true)) * 100; num -= cDouble8.ToLong(); } else { cDouble5 = 0; } } else { num = 0L; } if (num > 0L && this.State.GameSettings.LastCreation.TypeEnum != Creation.CreationType.Universe) { Creation creation3 = this.State.AllCreations.FirstOrDefault((Creation x) => x.TypeEnum == this.State.GameSettings.LastCreation.TypeEnum + 1); if (!creation3.GodToDefeat.IsDefeated) { break; } this.State.GameSettings.LastCreation = creation3; } else { num = 0L; } if (cDouble5 > 1) { list = CreationCost.RequiredCreations(creation2.TypeEnum, cDouble5.ToLong(), true); using (List <CreationCost> .Enumerator enumerator4 = list.GetEnumerator()) { while (enumerator4.MoveNext()) { CreationCost cost = enumerator4.Current; Creation creation4 = this.State.AllCreations.FirstOrDefault((Creation x) => x.TypeEnum == cost.TypeEnum); creation4.Count -= cost.CountNeeded; if (creation4.Count < 0) { Log.Info(string.Concat(new object[] { creation4.Name, " had ", creation4.Count, "!" })); creation4.Count = 0; } } } cDouble5.Floor(); creation2.Count += cDouble5; creation2.TotalCreated += cDouble5; this.State.CheckForAchievement(creation2); this.State.CheckForAchievement(creation2); this.State.CheckForAchievement(creation2); infoBuilder.Append("- you created ").Append(cDouble5.GuiText).Append(" " + creation2.Name + "\n\n"); } } num = 0L; } if (this.State.Statistic.HasStartedUniverseChallenge) { Creation creation5 = this.State.AllCreations.FirstOrDefault((Creation x) => x.TypeEnum == Creation.CreationType.Universe); creation5.FinishUUC(this.State); } }