public void Add(Amplitude.StaticString name, float startingValue, SimulationModifierDescriptor modif = null) { SimulationPropertyDescriptor desc = new SimulationPropertyDescriptor(name); new DynData <SimulationPropertyDescriptor>(desc).Set <float>("BaseValue", startingValue); Properties.Add(desc); if (modif != null) { Modifiers.Add(modif); } }
public override IEnumerator LoadGame(Game game) { yield return(base.LoadGame(game)); ISessionService service = Services.GetService <ISessionService>(); this.InterpreterContext = new InterpreterContext(null); this.InterpreterContext.SimulationObject = new SimulationObject("VictoryController"); this.InterpreterContext.SimulationObject.ModifierForward = ModifierForwardType.ParentOnly; float num = 1f; IDatabase <SimulationDescriptor> database = Databases.GetDatabase <SimulationDescriptor>(false); if (database != null) { SimulationDescriptor simulationDescriptor; if (database.TryGetValue("ClassVictoryController", out simulationDescriptor)) { this.InterpreterContext.SimulationObject.AddDescriptor(simulationDescriptor); } string value = Amplitude.Unity.Runtime.Runtime.Registry.GetValue(VictoryManager.Registers.LobbyDataFilter); if (!string.IsNullOrEmpty(value)) { string[] array = value.Split(Amplitude.String.Separators, StringSplitOptions.RemoveEmptyEntries); if (array.Length != 0 && service != null && service.Session != null) { foreach (string text in array) { string lobbyData = service.Session.GetLobbyData <string>(text, null); if (!string.IsNullOrEmpty(lobbyData)) { string x = string.Format("VictoryModifier{0}{1}", text, lobbyData); if (database.TryGetValue(x, out simulationDescriptor)) { this.InterpreterContext.SimulationObject.AddDescriptor(simulationDescriptor); SimulationModifierDescriptor simulationModifierDescriptor = Array.Find <SimulationModifierDescriptor>(simulationDescriptor.SimulationModifierDescriptors, (SimulationModifierDescriptor y) => y is SingleSimulationModifierDescriptor && y.TargetPropertyName == "PeacePointThreshold"); if (simulationModifierDescriptor != null) { num *= float.Parse((simulationModifierDescriptor as SingleSimulationModifierDescriptor).Value); } } } } } } this.InterpreterContext.SimulationObject.Refresh(); } foreach (Empire empire in base.Game.Empires) { if (empire is MajorEmpire) { (empire as MajorEmpire).SetPropertyBaseValue("TreatyPeacePointPerTurnMult", num); } } int num2 = 0; int num3 = 0; bool flag = Services.GetService <IDownloadableContentService>().IsShared(DownloadableContent16.ReadOnlyName); if (base.Game.World.Regions != null) { for (int j = 0; j < base.Game.World.Regions.Length; j++) { if (!base.Game.World.Regions[j].IsOcean && !base.Game.World.Regions[j].IsWasteland) { num2++; } else if (flag && base.Game.World.Regions[j].IsOcean && base.Game.World.Regions[j].NavalEmpire != null) { PirateCouncil agency = base.Game.World.Regions[j].NavalEmpire.GetAgency <PirateCouncil>(); if (agency != null && agency.GetRegionFortresses(base.Game.World.Regions[j]).Count > 0) { num3++; } } } } if (num2 + num3 <= 0) { Diagnostics.LogError("Invalid number of regions (value: {0}), rounding up to '1'.", new object[] { num2 }); num2 = 1; } Diagnostics.Log("Registering new data (name: {0}, land: {1}, ocean: {2})", new object[] { "TotalNumberOfRegions", num2, num3 }); this.InterpreterContext.Register("NumberOfLandRegions", num2); this.InterpreterContext.Register("TotalNumberOfRegions", num2 + num3); if (game.Turn == 0 && service != null && service.Session != null) { using (IEnumerator <VictoryCondition> enumerator = this.VictoryConditions.GetEnumerator()) { while (enumerator.MoveNext()) { VictoryCondition victoryCondition = enumerator.Current; if (service.Session.GetLobbyData(victoryCondition.Name) != null && !service.Session.GetLobbyData <bool>(victoryCondition.Name, false)) { if (!this.VictoryConditionsDiscabledThisGame.Contains(victoryCondition.Name)) { this.VictoryConditionsDiscabledThisGame.Add(victoryCondition.Name); Diagnostics.Log("Disabling victory condition '{0}'.", new object[] { victoryCondition.Name }); } if (!this.VictoryConditionsDiscardedThisGame.Contains(victoryCondition.Name)) { this.VictoryConditionsDiscardedThisGame.Add(victoryCondition.Name); Diagnostics.Log("Discarding victory condition '{0}'.", new object[] { victoryCondition.Name }); } } } yield break; } } yield break; }
public void ParseSimulationDescriptor(SimulationDescriptor descriptor, List <EffectDescription> effectDescriptions, StaticString defaultClass, bool displayEmptyDescriptors = false, SimulationObject context = null, bool isContextTheSource = true, bool isForceOn = false, bool parseTitle = false) { if (descriptor == null) { throw new ArgumentNullException("descriptor"); } GuiElement guiElement; if (this.GuiService.GuiPanelHelper.TryGetGuiElement(descriptor.Name, out guiElement) && guiElement is ExtendedGuiElement) { ExtendedGuiElement extendedGuiElement = guiElement as ExtendedGuiElement; if (extendedGuiElement.TooltipElement != null) { if (!string.IsNullOrEmpty(extendedGuiElement.TooltipElement.EffectOverride)) { EffectDescription effectDescription = new EffectDescription(); effectDescription.Override = AgeLocalizer.Instance.LocalizeString(extendedGuiElement.TooltipElement.EffectOverride); if (extendedGuiElement.Name.ToString().Contains("Bonus1Value")) { effectDescription.Override = effectDescription.Override.Replace("+500", "+" + 500f * (float)this.GetGameSpeed() / 2f); } else if (extendedGuiElement.Name.ToString().Contains("Bonus2Value")) { effectDescription.Override = effectDescription.Override.Replace("+1000", "+" + 1000f * (float)this.GetGameSpeed() / 2f); } if (parseTitle) { effectDescription.Title = AgeLocalizer.Instance.LocalizeString(guiElement.Title); } effectDescriptions.Add(effectDescription); } if (extendedGuiElement.TooltipElement.Ignore) { return; } } } if (descriptor.SimulationModifierDescriptors == null) { if (this.GuiService.GuiPanelHelper.TryGetGuiElement(descriptor.Name, out guiElement)) { if (guiElement is ExtendedGuiElement) { ExtendedGuiElement extendedGuiElement2 = guiElement as ExtendedGuiElement; if (extendedGuiElement2.TooltipElement != null && extendedGuiElement2.TooltipElement.Ignore) { return; } } EffectDescription effectDescription2 = new EffectDescription(); effectDescription2.Override = AgeLocalizer.Instance.LocalizeString(guiElement.Title); if (guiElement.Name == "TechnologyNecrophages8") { effectDescription2.Override = effectDescription2.Override.Replace("+1", "+" + this.GetGameSpeed()); } if (parseTitle) { effectDescription2.Title = AgeLocalizer.Instance.LocalizeString(guiElement.Title); } effectDescription2.On = this.ComputeReadableString(defaultClass, false); effectDescriptions.Add(effectDescription2); } return; } bool flag = false; if (parseTitle) { flag = true; } for (int i = 0; i < descriptor.SimulationModifierDescriptors.Length; i++) { SimulationModifierDescriptor simulationModifierDescriptor = descriptor.SimulationModifierDescriptors[i]; if (simulationModifierDescriptor.Operation != SimulationModifierDescriptor.ModifierOperation.Force && !simulationModifierDescriptor.TooltipHidden) { EffectDescription effectDescription3 = null; this.ParseModifier(descriptor, simulationModifierDescriptor, defaultClass, context, isContextTheSource, out effectDescription3, isForceOn); if (effectDescription3 != null) { if (context != null && isContextTheSource) { effectDescription3.From = this.ComputeReadableString(descriptor.Name, true); } if (flag) { effectDescription3.Title = AgeLocalizer.Instance.LocalizeString("%" + descriptor.Name + "Title"); flag = false; } effectDescriptions.Add(effectDescription3); } } } }
protected virtual void ParseModifier(SimulationDescriptor simulationDescriptor, SimulationModifierDescriptor modifierDescriptor, StaticString defaultClass, SimulationObject context, bool isContextSource, out EffectDescription effectMapperElementDescription, bool isForceOn = false) { effectMapperElementDescription = null; bool forcePercent = false; GuiElement guiElement; if (this.GuiService.GuiPanelHelper.TryGetGuiElement(modifierDescriptor.TargetPropertyName, out guiElement) && guiElement is ExtendedGuiElement) { ExtendedGuiElement extendedGuiElement = guiElement as ExtendedGuiElement; if (extendedGuiElement.TooltipElement != null) { if (extendedGuiElement.TooltipElement.Ignore) { return; } forcePercent = extendedGuiElement.TooltipElement.Percent; } } SimulationObject simulationObject = context; if (!isContextSource) { simulationObject = null; } if (modifierDescriptor is SingleSimulationModifierDescriptor) { effectMapperElementDescription = this.ParseSingleModifier(simulationDescriptor, modifierDescriptor as SingleSimulationModifierDescriptor, simulationObject, forcePercent); } else if (modifierDescriptor is BinarySimulationModifierDescriptor) { effectMapperElementDescription = this.ParseBinaryModifier(simulationDescriptor, modifierDescriptor as BinarySimulationModifierDescriptor, simulationObject, forcePercent); } else if (modifierDescriptor is CountSimulationModifierDescriptor) { effectMapperElementDescription = this.ParseCountModifier(simulationDescriptor, modifierDescriptor as CountSimulationModifierDescriptor, simulationObject, forcePercent); } if (effectMapperElementDescription == null || string.IsNullOrEmpty(effectMapperElementDescription.Value)) { return; } if (!string.IsNullOrEmpty(modifierDescriptor.TooltipOverride)) { if (modifierDescriptor.LocalizeTooltipOverride) { effectMapperElementDescription.Format = AgeLocalizer.Instance.LocalizeString(modifierDescriptor.TooltipOverride); } else { effectMapperElementDescription.Format = modifierDescriptor.TooltipOverride; } } effectMapperElementDescription.Symbol = this.ComputePropertySymbol(modifierDescriptor.TargetPropertyName); if (simulationObject != null) { } if (simulationObject == null || isForceOn) { string on = string.Empty; if (modifierDescriptor.Path != null && modifierDescriptor.Path.Length > 0 && modifierDescriptor.Path[0].Length > 0) { this.GetScope(modifierDescriptor.Path, out on); } else { on = this.ComputeReadableString(defaultClass, true); } effectMapperElementDescription.On = on; } string condition = string.Empty; if (modifierDescriptor.Path != null && modifierDescriptor.Path.Length > 0 && modifierDescriptor.Path[0].Length > 0) { condition = this.ComputeDuringString(modifierDescriptor.Path); } effectMapperElementDescription.Condition = condition; }